From fd274ffcd9bfdaac210278794ca4d87216868b8a Mon Sep 17 00:00:00 2001 From: Michael Kuhn Date: Mon, 28 May 2018 15:38:20 +0200 Subject: [PATCH 001/182] Fix wiki redirects (#3919) When creating or editing a wiki page, the redirect to the wiki page does not work because the file name is used instead of the page name. --- routers/repo/wiki.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/repo/wiki.go b/routers/repo/wiki.go index 87cb9f303..3220ab134 100644 --- a/routers/repo/wiki.go +++ b/routers/repo/wiki.go @@ -350,7 +350,7 @@ func NewWikiPost(ctx *context.Context, form auth.NewWikiForm) { return } - ctx.Redirect(ctx.Repo.RepoLink + "/wiki/" + models.WikiNameToFilename(wikiName)) + ctx.Redirect(ctx.Repo.RepoLink + "/wiki/" + models.WikiNameToSubURL(wikiName)) } // EditWiki render wiki modify page @@ -391,7 +391,7 @@ func EditWikiPost(ctx *context.Context, form auth.NewWikiForm) { return } - ctx.Redirect(ctx.Repo.RepoLink + "/wiki/" + models.WikiNameToFilename(newWikiName)) + ctx.Redirect(ctx.Repo.RepoLink + "/wiki/" + models.WikiNameToSubURL(newWikiName)) } // DeleteWikiPagePost delete wiki page From 5c95f7c7ce0dd992932f1bd3c3a40240aa11d4d0 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 28 May 2018 22:56:54 +0800 Subject: [PATCH 002/182] fix attachment ENABLED (#4064) * fix attachment ENABLED * change wrong name on app.ini.sample --- custom/conf/app.ini.sample | 2 +- modules/setting/setting.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/custom/conf/app.ini.sample b/custom/conf/app.ini.sample index 8392576da..184fa8e8c 100644 --- a/custom/conf/app.ini.sample +++ b/custom/conf/app.ini.sample @@ -412,7 +412,7 @@ ENABLE_FEDERATED_AVATAR = false [attachment] ; Whether attachments are enabled. Defaults to `true` -ENABLE = true +ENABLED = true ; Path for attachments. Defaults to `data/attachments` PATH = data/attachments ; One or more allowed types, e.g. image/jpeg|image/png diff --git a/modules/setting/setting.go b/modules/setting/setting.go index adf4bb74f..b23a68e3a 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -947,7 +947,7 @@ func NewContext() { AttachmentAllowedTypes = strings.Replace(sec.Key("ALLOWED_TYPES").MustString("image/jpeg,image/png,application/zip,application/gzip"), "|", ",", -1) AttachmentMaxSize = sec.Key("MAX_SIZE").MustInt64(4) AttachmentMaxFiles = sec.Key("MAX_FILES").MustInt(5) - AttachmentEnabled = sec.Key("ENABLE").MustBool(true) + AttachmentEnabled = sec.Key("ENABLED").MustBool(true) TimeFormatKey := Cfg.Section("time").Key("FORMAT").MustString("RFC1123") TimeFormat = map[string]string{ From dc789ad7db11ee5e348789b0f202dccf09b4a916 Mon Sep 17 00:00:00 2001 From: stevegt Date: Mon, 28 May 2018 17:25:13 -0700 Subject: [PATCH 003/182] Fix drone CLI install link (#4071) Fixes #4070 --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d1b53e792..cee399d2c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ and keep the compatibility on upgrade. To make sure you are running the test suite exactly like we do, you should install the CLI for [Drone CI](https://github.com/drone/drone), as we are using the server for continous testing, following [these -instructions](http://readme.drone.io/usage/getting-started-cli). After that, +instructions](http://docs.drone.io/cli-installation/). After that, you can simply call `drone exec --local --build-event "pull_request"` within your working directory and it will try to run the test suite locally. From 9aa8fdc5d7a08258b8b994dd1eda70c2685d54aa Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 29 May 2018 00:26:42 +0000 Subject: [PATCH 004/182] [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 82ed70a0d..e5e71979d 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -305,6 +305,7 @@ continue=Продовжити cancel=Відміна language=Мова +lookup_avatar_by_mail=Знайти Аватар за адресою електронної пошти federated_avatar_lookup=Знайти зовнішній аватар enable_custom_avatar=Увімкнути користувацькі аватари choose_new_avatar=Оберіть новий аватар From f86f56e19c5ef1b19eb58d888cbab25cf4b28704 Mon Sep 17 00:00:00 2001 From: Alexey Terentyev Date: Tue, 29 May 2018 06:08:55 +0300 Subject: [PATCH 005/182] Added deletion of an empty line at the end of the file (#4050) (#4054) Signed-off-by: Alexey Terentyev --- routers/repo/view.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/routers/repo/view.go b/routers/repo/view.go index ca2ece648..d2efe3009 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -223,6 +223,10 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st var output bytes.Buffer lines := strings.Split(fileContent, "\n") + //Remove blank line at the end of file + if len(lines) > 0 && lines[len(lines)-1] == "" { + lines = lines[:len(lines)-1] + } for index, line := range lines { line = gotemplate.HTMLEscapeString(line) if index != len(lines)-1 { From 2139c152cbf856b62e636df3b4dee784847b3a25 Mon Sep 17 00:00:00 2001 From: Jonas Franz Date: Tue, 29 May 2018 05:51:42 +0200 Subject: [PATCH 006/182] Fix relative markdown links with anchors (#4058) * Replace '%28' with '#' Add test case Signed-off-by: Jonas Franz * Use ResolveReference instead of strings.Replace Signed-off-by: Jonas Franz --- modules/util/util.go | 22 ++++++++++++++++------ modules/util/util_test.go | 2 ++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/modules/util/util.go b/modules/util/util.go index 3a0411f64..4bd2b843f 100644 --- a/modules/util/util.go +++ b/modules/util/util.go @@ -7,6 +7,7 @@ package util import ( "net/url" "path" + "strings" "code.gitea.io/gitea/modules/log" ) @@ -56,16 +57,25 @@ func Max(a, b int) int { // URLJoin joins url components, like path.Join, but preserving contents func URLJoin(base string, elems ...string) string { - u, err := url.Parse(base) + if !strings.HasSuffix(base, "/") { + base += "/" + } + baseURL, err := url.Parse(base) if err != nil { log.Error(4, "URLJoin: Invalid base URL %s", base) return "" } - joinArgs := make([]string, 0, len(elems)+1) - joinArgs = append(joinArgs, u.Path) - joinArgs = append(joinArgs, elems...) - u.Path = path.Join(joinArgs...) - return u.String() + joinedPath := path.Join(elems...) + argURL, err := url.Parse(joinedPath) + if err != nil { + log.Error(4, "URLJoin: Invalid arg %s", joinedPath) + return "" + } + joinedURL := baseURL.ResolveReference(argURL).String() + if !baseURL.IsAbs() { + return joinedURL[1:] // Removing leading '/' + } + return joinedURL } // Min min of two ints diff --git a/modules/util/util_test.go b/modules/util/util_test.go index cc5875263..67d9efe1d 100644 --- a/modules/util/util_test.go +++ b/modules/util/util_test.go @@ -30,6 +30,8 @@ func TestURLJoin(t *testing.T) { "a", "b/c/"), newTest("a/b/d", "a/", "b/c/", "/../d/"), + newTest("https://try.gitea.io/a/b/c#d", + "https://try.gitea.io", "a/b", "c#d"), } { assert.Equal(t, test.Expected, URLJoin(test.Base, test.Elements...)) } From 832ca509d36ede26780ccb76528515fe318dca8d Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Tue, 29 May 2018 01:54:15 -0400 Subject: [PATCH 007/182] Remove autolink.js references (#4072) * Autolink.js no longer used Fixes #4069 * Remove autolink.js references * Fix reference to u2f js --- public/vendor/VERSIONS | 6 +++--- public/vendor/librejs.html | 5 ----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/public/vendor/VERSIONS b/public/vendor/VERSIONS index e1e09a87e..0ce93fe10 100644 --- a/public/vendor/VERSIONS +++ b/public/vendor/VERSIONS @@ -17,9 +17,6 @@ Version: 1.5.9 File(s): /vendor/plugins/gitgraph/gitgraph.js Version: 9b492e8bf1ddf7908a4997b8f83fa38a809a9da3 -File(s): /vendor/plugins/autolink/autolink.js -Version: 741f66f - File(s): /vendor/plugins/vue/vue.min.js Version: 2.1.10 @@ -50,6 +47,9 @@ Version: 1.10.1 File(s): /vendor/plugins/pdfjs/ Version: 1.4.20 +File(s): /vendor/plugins/u2f/ +Version: 1.0.8 + File(s): /vendor/assets/font-awesome/fonts/ Version: 4.6.0 diff --git a/public/vendor/librejs.html b/public/vendor/librejs.html index e24bb9c3e..3d783d412 100644 --- a/public/vendor/librejs.html +++ b/public/vendor/librejs.html @@ -45,11 +45,6 @@ BSD 3-Clause gitgraph.js-latest - - autolink.min.js - Expat - autolink.js-latest - vue.min.js Expat From 15f6ec96327d69d19fcce937811214e113341f58 Mon Sep 17 00:00:00 2001 From: Inon S Date: Tue, 29 May 2018 11:07:16 +0300 Subject: [PATCH 008/182] LFS: make HTTP auth period configurable (#4035) * LFS: make HTTP auth period configurable * Formatting: Removed semicolon Due to automated fmt-check failure (drone.gitea.io) * applying code reviews * Applied code review comment: Change HTTPAuthExpiry to time.Duration * Updated config cheat sheet --- cmd/serv.go | 2 +- custom/conf/app.ini.sample | 2 ++ .../content/doc/advanced/config-cheat-sheet.en-us.md | 1 + modules/setting/setting.go | 12 ++++++++---- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cmd/serv.go b/cmd/serv.go index 5d567e6d6..990355be9 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -268,7 +268,7 @@ func runServ(c *cli.Context) error { claims := jwt.MapClaims{ "repo": repo.ID, "op": lfsVerb, - "exp": now.Add(5 * time.Minute).Unix(), + "exp": now.Add(setting.LFS.HTTPAuthExpiry).Unix(), "nbf": now.Unix(), } if user != nil { diff --git a/custom/conf/app.ini.sample b/custom/conf/app.ini.sample index 184fa8e8c..ef88e5c32 100644 --- a/custom/conf/app.ini.sample +++ b/custom/conf/app.ini.sample @@ -189,6 +189,8 @@ LFS_START_SERVER = false LFS_CONTENT_PATH = data/lfs ; LFS authentication secret, change this yourself LFS_JWT_SECRET = +; LFS authentication validity period (in time.Duration), pushes taking longer than this may fail. +LFS_HTTP_AUTH_EXPIRY = 20m ; Define allowed algorithms and their minimum key length (use -1 to disable a type) [ssh.minimum_key_sizes] 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 69f588ebe..3f8ebea61 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -115,6 +115,7 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`. - `LFS_START_SERVER`: **false**: Enables git-lfs support. - `LFS_CONTENT_PATH`: **./data/lfs**: Where to store LFS files. - `LFS_JWT_SECRET`: **\**: LFS authentication secret, change this a unique string. +- `LFS_HTTP_AUTH_EXPIRY`: **20m**: LFS authentication validity period in time.Duration, pushes taking longer than this may fail. - `REDIRECT_OTHER_PORT`: **false**: If true and `PROTOCOL` is https, redirects http requests on another (https) port. - `PORT_TO_REDIRECT`: **80**: Port used when `REDIRECT_OTHER_PORT` is true. diff --git a/modules/setting/setting.go b/modules/setting/setting.go index b23a68e3a..c8add5fd3 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -136,10 +136,11 @@ var ( } LFS struct { - StartServer bool `ini:"LFS_START_SERVER"` - ContentPath string `ini:"LFS_CONTENT_PATH"` - JWTSecretBase64 string `ini:"LFS_JWT_SECRET"` - JWTSecretBytes []byte `ini:"-"` + StartServer bool `ini:"LFS_START_SERVER"` + ContentPath string `ini:"LFS_CONTENT_PATH"` + JWTSecretBase64 string `ini:"LFS_JWT_SECRET"` + JWTSecretBytes []byte `ini:"-"` + HTTPAuthExpiry time.Duration `ini:"LFS_HTTP_AUTH_EXPIRY"` } // Security settings @@ -828,6 +829,9 @@ func NewContext() { LFS.ContentPath = filepath.Join(AppWorkPath, LFS.ContentPath) } + sec = Cfg.Section("LFS") + LFS.HTTPAuthExpiry = sec.Key("LFS_HTTP_AUTH_EXPIRY").MustDuration(20 * time.Minute) + if LFS.StartServer { if err := os.MkdirAll(LFS.ContentPath, 0700); err != nil { From 35c3510335149c833c7a41a7f3363a031f879584 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Wed, 30 May 2018 15:23:43 +0200 Subject: [PATCH 009/182] Fix #4081 Check for leading / in base before removing it (#4082) --- modules/util/util.go | 4 ++-- modules/util/util_test.go | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/util/util.go b/modules/util/util.go index 4bd2b843f..b6acb9796 100644 --- a/modules/util/util.go +++ b/modules/util/util.go @@ -72,8 +72,8 @@ func URLJoin(base string, elems ...string) string { return "" } joinedURL := baseURL.ResolveReference(argURL).String() - if !baseURL.IsAbs() { - return joinedURL[1:] // Removing leading '/' + if !baseURL.IsAbs() && !strings.HasPrefix(base, "/") { + return joinedURL[1:] // Removing leading '/' if needed } return joinedURL } diff --git a/modules/util/util_test.go b/modules/util/util_test.go index 67d9efe1d..0d79df605 100644 --- a/modules/util/util_test.go +++ b/modules/util/util_test.go @@ -32,6 +32,12 @@ func TestURLJoin(t *testing.T) { "a/", "b/c/", "/../d/"), newTest("https://try.gitea.io/a/b/c#d", "https://try.gitea.io", "a/b", "c#d"), + newTest("/a/b/d", + "/a/", "b/c/", "/../d/"), + newTest("/a/b/c", + "/a", "b/c/"), + newTest("/a/b/c#hash", + "/a", "b/c#hash"), } { assert.Equal(t, test.Expected, URLJoin(test.Base, test.Elements...)) } From af05212bf821574098775332781ffd17cb638a91 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Wed, 30 May 2018 13:25:15 +0000 Subject: [PATCH 010/182] [skip ci] Updated translations via Crowdin --- options/locale/locale_uk-UA.ini | 3 +++ 1 file changed, 3 insertions(+) diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index e5e71979d..8bfa5459b 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -31,6 +31,7 @@ twofa=Двофакторна авторизація twofa_scratch=Двофакторний одноразовий пароль passcode=Код доступу +u2f_insert_key=Вставте ключ безпеки u2f_reload=Оновити repository=Репозиторій @@ -292,6 +293,7 @@ twofa=Двофакторна авторизація account_link=Прив'язані облікові записи organization=Організації uid=Ідентифікатор Uid +u2f=Ключі безпеки public_profile=Загальнодоступний профіль profile_desc=Ваша адреса електронної пошти використовуватиметься для сповіщення та інших операцій. @@ -756,6 +758,7 @@ settings.use_internal_wiki=Використовувати вбудовані В settings.use_external_wiki=Використовувати зовнішні Вікі settings.external_wiki_url=URL зовнішньої вікі settings.issues_desc=Увімкнути відстеження проблем в репозиторію +settings.use_internal_issue_tracker=Використовувати вбудовану систему відстеження проблем settings.external_tracker_url=URL зовнішньої системи відстеження проблем settings.tracker_url_format=Формат URL зовнішнього трекера задач settings.tracker_issue_style.numeric=Цифровий From 728cc272842036ed82ddb88d607e9d5e8bf962a8 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Wed, 30 May 2018 18:06:57 -0400 Subject: [PATCH 011/182] Update Contribution docs with non-404 link (#4077) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cee399d2c..e02110b57 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -114,7 +114,7 @@ pull request workflow to do that. And, we also use [LGTM](http://lgtm.co) to ensure every PR is reviewed by at least 2 maintainers. Please try to make your pull request easy to review for us. And, please read -the *[How to get faster PR reviews](https://github.com/kubernetes/community/blob/master/contributors/devel/pull-requests.md#best-practices-for-faster-reviews)* guide; +the *[How to get faster PR reviews](https://github.com/kubernetes/community/blob/261cb0fd089b64002c91e8eddceebf032462ccd6/contributors/guide/pull-requests.md#best-practices-for-faster-reviews)* guide; it has lots of useful tips for any project you may want to contribute. Some of the key points: From 7707ad7a0a6cda66036bd0eec2dead95d8664326 Mon Sep 17 00:00:00 2001 From: stevegt Date: Thu, 31 May 2018 04:13:55 -0700 Subject: [PATCH 012/182] add simple descriptions for swagger validate (#4087) * Partial fix for #4010 Swagger needs a comment line above each swagger:response comment -- it uses these to populate the description: fields. Adding minimal text for now on the way to getting swagger validate to pass. Many standard swagger client libraries will not work at all with gitea until validate passes, so prioritizing that over better descriptions for now. Signed-off-by: Steve Traugott --- public/swagger.v1.json | 41 +++++++++++++++++++++++++++++++ routers/api/v1/swagger/issue.go | 10 ++++++++ routers/api/v1/swagger/key.go | 6 +++++ routers/api/v1/swagger/misc.go | 1 + routers/api/v1/swagger/options.go | 1 + routers/api/v1/swagger/org.go | 4 +++ routers/api/v1/swagger/repo.go | 16 ++++++++++++ routers/api/v1/swagger/user.go | 3 +++ 8 files changed, 82 insertions(+) diff --git a/public/swagger.v1.json b/public/swagger.v1.json index c5b1baa9a..3027564db 100644 --- a/public/swagger.v1.json +++ b/public/swagger.v1.json @@ -7376,11 +7376,13 @@ "description": "AccessTokenList represents a list of API access token." }, "Attachment": { + "description": "Attachment", "schema": { "$ref": "#/definitions/Attachment" } }, "AttachmentList": { + "description": "AttachmentList", "schema": { "type": "array", "items": { @@ -7389,11 +7391,13 @@ } }, "Branch": { + "description": "Branch", "schema": { "$ref": "#/definitions/Branch" } }, "BranchList": { + "description": "BranchList", "schema": { "type": "array", "items": { @@ -7402,11 +7406,13 @@ } }, "Comment": { + "description": "Comment", "schema": { "$ref": "#/definitions/Comment" } }, "CommentList": { + "description": "CommentList", "schema": { "type": "array", "items": { @@ -7415,11 +7421,13 @@ } }, "DeployKey": { + "description": "DeployKey", "schema": { "$ref": "#/definitions/DeployKey" } }, "DeployKeyList": { + "description": "DeployKeyList", "schema": { "type": "array", "items": { @@ -7428,6 +7436,7 @@ } }, "EmailList": { + "description": "EmailList", "schema": { "type": "array", "items": { @@ -7436,11 +7445,13 @@ } }, "GPGKey": { + "description": "GPGKey", "schema": { "$ref": "#/definitions/GPGKey" } }, "GPGKeyList": { + "description": "GPGKeyList", "schema": { "type": "array", "items": { @@ -7449,6 +7460,7 @@ } }, "Hook": { + "description": "Hook", "schema": { "type": "array", "items": { @@ -7457,6 +7469,7 @@ } }, "HookList": { + "description": "HookList", "schema": { "type": "array", "items": { @@ -7465,11 +7478,13 @@ } }, "Issue": { + "description": "Issue", "schema": { "$ref": "#/definitions/Issue" } }, "IssueList": { + "description": "IssueList", "schema": { "type": "array", "items": { @@ -7478,11 +7493,13 @@ } }, "Label": { + "description": "Label", "schema": { "$ref": "#/definitions/Label" } }, "LabelList": { + "description": "LabelList", "schema": { "type": "array", "items": { @@ -7494,11 +7511,13 @@ "description": "MarkdownRender is a rendered markdown document" }, "Milestone": { + "description": "Milestone", "schema": { "$ref": "#/definitions/Milestone" } }, "MilestoneList": { + "description": "MilestoneList", "schema": { "type": "array", "items": { @@ -7507,11 +7526,13 @@ } }, "Organization": { + "description": "Organization", "schema": { "$ref": "#/definitions/Organization" } }, "OrganizationList": { + "description": "OrganizationList", "schema": { "type": "array", "items": { @@ -7520,11 +7541,13 @@ } }, "PublicKey": { + "description": "PublicKey", "schema": { "$ref": "#/definitions/PublicKey" } }, "PublicKeyList": { + "description": "PublicKeyList", "schema": { "type": "array", "items": { @@ -7533,11 +7556,13 @@ } }, "PullRequest": { + "description": "PullRequest", "schema": { "$ref": "#/definitions/PullRequest" } }, "PullRequestList": { + "description": "PullRequestList", "schema": { "type": "array", "items": { @@ -7546,11 +7571,13 @@ } }, "Release": { + "description": "Release", "schema": { "$ref": "#/definitions/Release" } }, "ReleaseList": { + "description": "ReleaseList", "schema": { "type": "array", "items": { @@ -7559,11 +7586,13 @@ } }, "Repository": { + "description": "Repository", "schema": { "$ref": "#/definitions/Repository" } }, "RepositoryList": { + "description": "RepositoryList", "schema": { "type": "array", "items": { @@ -7572,6 +7601,7 @@ } }, "SearchResults": { + "description": "SearchResults", "schema": { "$ref": "#/definitions/SearchResults" }, @@ -7580,16 +7610,19 @@ } }, "ServerVersion": { + "description": "ServerVersion", "schema": { "$ref": "#/definitions/ServerVersion" } }, "Status": { + "description": "Status", "schema": { "$ref": "#/definitions/Status" } }, "StatusList": { + "description": "StatusList", "schema": { "type": "array", "items": { @@ -7598,11 +7631,13 @@ } }, "Team": { + "description": "Team", "schema": { "$ref": "#/definitions/Team" } }, "TeamList": { + "description": "TeamList", "schema": { "type": "array", "items": { @@ -7611,11 +7646,13 @@ } }, "TrackedTime": { + "description": "TrackedTime", "schema": { "$ref": "#/definitions/TrackedTime" } }, "TrackedTimeList": { + "description": "TrackedTimeList", "schema": { "type": "array", "items": { @@ -7624,11 +7661,13 @@ } }, "User": { + "description": "User", "schema": { "$ref": "#/definitions/User" } }, "UserList": { + "description": "UserList", "schema": { "type": "array", "items": { @@ -7637,6 +7676,7 @@ } }, "WatchInfo": { + "description": "WatchInfo", "schema": { "$ref": "#/definitions/WatchInfo" } @@ -7670,6 +7710,7 @@ "description": "APINotFound is a not found empty response" }, "parameterBodies": { + "description": "parameterBodies", "schema": { "$ref": "#/definitions/EditAttachmentOptions" }, diff --git a/routers/api/v1/swagger/issue.go b/routers/api/v1/swagger/issue.go index 1ebb17b24..0d4e40616 100644 --- a/routers/api/v1/swagger/issue.go +++ b/routers/api/v1/swagger/issue.go @@ -8,60 +8,70 @@ import ( api "code.gitea.io/sdk/gitea" ) +// Issue // swagger:response Issue type swaggerResponseIssue struct { // in:body Body api.Issue `json:"body"` } +// IssueList // swagger:response IssueList type swaggerResponseIssueList struct { // in:body Body []api.Issue `json:"body"` } +// Comment // swagger:response Comment type swaggerResponseComment struct { // in:body Body api.Comment `json:"body"` } +// CommentList // swagger:response CommentList type swaggerResponseCommentList struct { // in:body Body []api.Comment `json:"body"` } +// Label // swagger:response Label type swaggerResponseLabel struct { // in:body Body api.Label `json:"body"` } +// LabelList // swagger:response LabelList type swaggerResponseLabelList struct { // in:body Body []api.Label `json:"body"` } +// Milestone // swagger:response Milestone type swaggerResponseMilestone struct { // in:body Body api.Milestone `json:"body"` } +// MilestoneList // swagger:response MilestoneList type swaggerResponseMilestoneList struct { // in:body Body []api.Milestone `json:"body"` } +// TrackedTime // swagger:response TrackedTime type swaggerResponseTrackedTime struct { // in:body Body api.TrackedTime `json:"body"` } +// TrackedTimeList // swagger:response TrackedTimeList type swaggerResponseTrackedTimeList struct { // in:body diff --git a/routers/api/v1/swagger/key.go b/routers/api/v1/swagger/key.go index 344d54c87..b24783238 100644 --- a/routers/api/v1/swagger/key.go +++ b/routers/api/v1/swagger/key.go @@ -8,36 +8,42 @@ import ( api "code.gitea.io/sdk/gitea" ) +// PublicKey // swagger:response PublicKey type swaggerResponsePublicKey struct { // in:body Body api.PublicKey `json:"body"` } +// PublicKeyList // swagger:response PublicKeyList type swaggerResponsePublicKeyList struct { // in:body Body []api.PublicKey `json:"body"` } +// GPGKey // swagger:response GPGKey type swaggerResponseGPGKey struct { // in:body Body api.GPGKey `json:"body"` } +// GPGKeyList // swagger:response GPGKeyList type swaggerResponseGPGKeyList struct { // in:body Body []api.GPGKey `json:"body"` } +// DeployKey // swagger:response DeployKey type swaggerResponseDeployKey struct { // in:body Body api.DeployKey `json:"body"` } +// DeployKeyList // swagger:response DeployKeyList type swaggerResponseDeployKeyList struct { // in:body diff --git a/routers/api/v1/swagger/misc.go b/routers/api/v1/swagger/misc.go index 8ec0d53a7..c28ba02db 100644 --- a/routers/api/v1/swagger/misc.go +++ b/routers/api/v1/swagger/misc.go @@ -8,6 +8,7 @@ import ( api "code.gitea.io/sdk/gitea" ) +// ServerVersion // swagger:response ServerVersion type swaggerResponseServerVersion struct { // in:body diff --git a/routers/api/v1/swagger/options.go b/routers/api/v1/swagger/options.go index 3ea324186..8d9363fe9 100644 --- a/routers/api/v1/swagger/options.go +++ b/routers/api/v1/swagger/options.go @@ -12,6 +12,7 @@ import ( // not actually a response, just a hack to get go-swagger to include definitions // of the various XYZOption structs +// parameterBodies // swagger:response parameterBodies type swaggerParameterBodies struct { AddCollaboratorOption api.AddCollaboratorOption diff --git a/routers/api/v1/swagger/org.go b/routers/api/v1/swagger/org.go index 46bd56646..eb4a1084e 100644 --- a/routers/api/v1/swagger/org.go +++ b/routers/api/v1/swagger/org.go @@ -8,24 +8,28 @@ import ( api "code.gitea.io/sdk/gitea" ) +// Organization // swagger:response Organization type swaggerResponseOrganization struct { // in:body Body api.Organization `json:"body"` } +// OrganizationList // swagger:response OrganizationList type swaggerResponseOrganizationList struct { // in:body Body []api.Organization `json:"body"` } +// Team // swagger:response Team type swaggerResponseTeam struct { // in:body Body api.Team `json:"body"` } +// TeamList // swagger:response TeamList type swaggerResponseTeamList struct { // in:body diff --git a/routers/api/v1/swagger/repo.go b/routers/api/v1/swagger/repo.go index 1f2569110..97837dfc2 100644 --- a/routers/api/v1/swagger/repo.go +++ b/routers/api/v1/swagger/repo.go @@ -8,95 +8,111 @@ import ( api "code.gitea.io/sdk/gitea" ) +// Repository // swagger:response Repository type swaggerResponseRepository struct { // in:body Body api.Repository `json:"body"` } +// RepositoryList // swagger:response RepositoryList type swaggerResponseRepositoryList struct { // in:body Body []api.Repository `json:"body"` } +// Branch // swagger:response Branch type swaggerResponseBranch struct { // in:body Body api.Branch `json:"body"` } +// BranchList // swagger:response BranchList type swaggerResponseBranchList struct { // in:body Body []api.Branch `json:"body"` } +// Hook // swagger:response Hook type swaggerResponseHook struct { // in:body Body []api.Branch `json:"body"` } +// HookList // swagger:response HookList type swaggerResponseHookList struct { // in:body Body []api.Branch `json:"body"` } +// Release // swagger:response Release type swaggerResponseRelease struct { // in:body Body api.Release `json:"body"` } +// ReleaseList // swagger:response ReleaseList type swaggerResponseReleaseList struct { // in:body Body []api.Release `json:"body"` } +// PullRequest // swagger:response PullRequest type swaggerResponsePullRequest struct { // in:body Body api.PullRequest `json:"body"` } +// PullRequestList // swagger:response PullRequestList type swaggerResponsePullRequestList struct { // in:body Body []api.PullRequest `json:"body"` } +// Status // swagger:response Status type swaggerResponseStatus struct { // in:body Body api.Status `json:"body"` } +// StatusList // swagger:response StatusList type swaggerResponseStatusList struct { // in:body Body []api.Status `json:"body"` } +// WatchInfo // swagger:response WatchInfo type swaggerResponseWatchInfo struct { // in:body Body api.WatchInfo `json:"body"` } +// SearchResults // swagger:response SearchResults type swaggerResponseSearchResults struct { Body api.SearchResults `json:"body"` } +// AttachmentList // swagger:response AttachmentList type swaggerResponseAttachmentList struct { //in: body Body []api.Attachment `json:"body"` } +// Attachment // swagger:response Attachment type swaggerResponseAttachment struct { //in: body diff --git a/routers/api/v1/swagger/user.go b/routers/api/v1/swagger/user.go index 2bb8f1b76..7ae046a9b 100644 --- a/routers/api/v1/swagger/user.go +++ b/routers/api/v1/swagger/user.go @@ -8,18 +8,21 @@ import ( api "code.gitea.io/sdk/gitea" ) +// User // swagger:response User type swaggerResponseUser struct { // in:body Body api.User `json:"body"` } +// UserList // swagger:response UserList type swaggerResponseUserList struct { // in:body Body []api.User `json:"body"` } +// EmailList // swagger:response EmailList type swaggerResponseEmailList struct { // in:body From 39f2aa7c12004d5536810e7178d2c5de806855de Mon Sep 17 00:00:00 2001 From: stevegt Date: Thu, 31 May 2018 22:51:49 -0700 Subject: [PATCH 013/182] add simple descriptions for file API responses (#4089) * Partial fix for #4010 Swagger needs a description field in each swagger:operation response. Adding minimal text for now on the way to getting swagger validate to pass. Many standard swagger client libraries will not work with gitea until validate passes, so prioritizing that over better descriptions for now. Signed-off-by: Steve Traugott --- public/swagger.v1.json | 12 +++++++++--- routers/api/v1/repo/file.go | 9 ++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/public/swagger.v1.json b/public/swagger.v1.json index 3027564db..6595d96f0 100644 --- a/public/swagger.v1.json +++ b/public/swagger.v1.json @@ -1028,7 +1028,9 @@ } ], "responses": { - "200": {} + "200": { + "description": "success" + } } } }, @@ -1338,7 +1340,9 @@ } ], "responses": { - "200": {} + "200": { + "description": "success" + } } } }, @@ -3261,7 +3265,9 @@ } ], "responses": { - "200": {} + "200": { + "description": "success" + } } } }, diff --git a/routers/api/v1/repo/file.go b/routers/api/v1/repo/file.go index 306b65a32..a3c8309ac 100644 --- a/routers/api/v1/repo/file.go +++ b/routers/api/v1/repo/file.go @@ -36,7 +36,8 @@ func GetRawFile(ctx *context.APIContext) { // type: string // required: true // responses: - // 200: + // 200: + // description: success if !ctx.Repo.HasAccess() { ctx.Status(404) return @@ -85,7 +86,8 @@ func GetArchive(ctx *context.APIContext) { // type: string // required: true // responses: - // 200: + // 200: + // description: success repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame")) gitRepo, err := git.OpenRepository(repoPath) if err != nil { @@ -121,7 +123,8 @@ func GetEditorconfig(ctx *context.APIContext) { // type: string // required: true // responses: - // 200: + // 200: + // description: success ec, err := ctx.Repo.GetEditorconfig() if err != nil { if git.IsErrNotExist(err) { From 0549762fd00a60d0d47380d67621f7076fc25c0f Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Fri, 1 Jun 2018 05:52:46 +0000 Subject: [PATCH 014/182] [skip ci] Updated translations via Crowdin --- options/locale/locale_uk-UA.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 8bfa5459b..5afe7a1be 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -465,7 +465,7 @@ pulls=Запити на злиття labels=Мітки milestones=Етап commits=Коміти -commit=Змина +commit=Коміт releases=Релізи file_raw=Неформатований file_history=Історія @@ -562,6 +562,7 @@ issues.filter_sort.recentupdate=Нещодавно оновлено issues.filter_sort.leastupdate=Найдавніше оновлені issues.filter_sort.mostcomment=Найбільш коментовані issues.filter_sort.leastcomment=Найменш коментовані +issues.filter_sort.mostforks=Найбільше форків issues.action_open=Відкрити issues.action_close=Закрити issues.action_label=Мітка From 28fb255d91dc4fef45f96773374b73d40320b2f3 Mon Sep 17 00:00:00 2001 From: Fluf <36822577+flufmonster@users.noreply.github.com> Date: Sat, 2 Jun 2018 07:29:12 -0400 Subject: [PATCH 015/182] Add make command to validate swagger file (#4096) Partial fix for #4088 --- Makefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Makefile b/Makefile index 2dea0a9ea..c052ebbb0 100644 --- a/Makefile +++ b/Makefile @@ -100,6 +100,13 @@ swagger-check: generate-swagger exit 1; \ fi; +.PHONY: swagger-validate +swagger-validate: + @hash swagger > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ + $(GO) get -u github.com/go-swagger/go-swagger/cmd/swagger; \ + fi + swagger validate ./public/swagger.v1.json + .PHONY: errcheck errcheck: @hash errcheck > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ From b8c1dc55b42d928bebb70ccd3b172140b124a45f Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Sat, 2 Jun 2018 11:30:08 +0000 Subject: [PATCH 016/182] [skip ci] Updated translations via Crowdin --- options/locale/locale_ru-RU.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index bb6de1052..18c9f8bae 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -536,6 +536,7 @@ editor.new_branch_name_desc=Новое название ветки… editor.cancel=Отмена editor.filename_cannot_be_empty=Имя файла не может быть пустым. editor.branch_already_exists=Ветка «%s» уже существует в этом репозитории. +editor.file_changed_while_editing=Содержимое файла изменилось с момента начала редактирования. Нажмите здесь, чтобы увидеть, что было изменено, или Зафиксировать изменения снова, чтобы заменить их. editor.no_changes_to_show=Нет изменений. editor.fail_to_update_file=Не удалось обновить/создать файл «%s» из-за ошибки: %v editor.unable_to_upload_files=Не удалось загрузить файлы в «%s» из-за ошибки: %v From a5f63fc4d1a6b65be22efdb68a45873a31a08ae0 Mon Sep 17 00:00:00 2001 From: stevegt Date: Sat, 2 Jun 2018 08:20:28 -0700 Subject: [PATCH 017/182] swagger: add 'required: true' for params in URL (#4097) * Partial fix for #4010 Swagger validation needs 'required: true' for parameters that are in the URL path. Signed-off-by: Steve Traugott --- public/swagger.v1.json | 6 ++++-- routers/api/v1/org/org.go | 1 + routers/api/v1/user/watch.go | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/public/swagger.v1.json b/public/swagger.v1.json index 6595d96f0..2c263ef1f 100644 --- a/public/swagger.v1.json +++ b/public/swagger.v1.json @@ -5005,7 +5005,8 @@ "type": "string", "description": "username of user", "name": "username", - "in": "path" + "in": "path", + "required": true } ], "responses": { @@ -5279,7 +5280,8 @@ "type": "string", "description": "username of the user", "name": "username", - "in": "path" + "in": "path", + "required": true } ], "responses": { diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go index c24a4aeb1..29d45d2f2 100644 --- a/routers/api/v1/org/org.go +++ b/routers/api/v1/org/org.go @@ -51,6 +51,7 @@ func ListUserOrgs(ctx *context.APIContext) { // in: path // description: username of user // type: string + // required: true // responses: // "200": // "$ref": "#/responses/OrganizationList" diff --git a/routers/api/v1/user/watch.go b/routers/api/v1/user/watch.go index af7b9b4cc..2971bf686 100644 --- a/routers/api/v1/user/watch.go +++ b/routers/api/v1/user/watch.go @@ -43,6 +43,7 @@ func GetWatchedRepos(ctx *context.APIContext) { // type: string // in: path // description: username of the user + // required: true // responses: // "200": // "$ref": "#/responses/RepositoryList" From 9a1772b0fabee0117f3e4f62621a044209da5c6d Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Sat, 2 Jun 2018 15:21:24 +0000 Subject: [PATCH 018/182] [skip ci] Updated translations via Crowdin --- options/locale/locale_ru-RU.ini | 290 ++++++++++++++++++++++++++++++++ 1 file changed, 290 insertions(+) diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 18c9f8bae..c6c8e1f47 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -102,11 +102,13 @@ lfs_path_helper=В этой папке будут храниться файлы run_user=Запуск от имени пользователя run_user_helper=Введите имя пользователя операционной системы, под которым работает Gitea. Обратите внимание, что этот пользователь должен иметь доступ к корневому пути репозиториев. domain=Домен SSH сервера +domain_helper=Влияет на URL-адреса для клонирования по SSH. ssh_port=Порт SSH сервера ssh_port_helper=Номер порта, который использует SSH сервер. Оставьте пустым, чтобы отключить SSH. http_port=Gitea HTTP порт http_port_helper=Номер порта, который будет прослушиваться Gitea веб-сервером. app_url=Базовый URL-адрес Gitea +app_url_helper=Этот параметр влияет на URL для клонирования по HTTP/HTTPS и на некоторые уведомления по электронной почте. log_root_path=Путь к журналу log_root_path_helper=Файлы журнала будут записываться в этот каталог. @@ -124,6 +126,7 @@ 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=Запретить самостоятельную регистрацию. Только администраторы смогут создавать новые учетные записи пользователей. @@ -136,6 +139,7 @@ enable_captcha=Включить CAPTCHA enable_captcha_popup=Запрашивать капчу при регистрации пользователя. require_sign_in_view=Требовать авторизации для просмотра страниц require_sign_in_view_popup=Ограничение доступа к страницам только для пользователей, выполнивших вход. Посетители увидят только страницы входа и регистрации. +admin_setting_desc=Создание учетной записи администратора необязательно. Первый зарегистрированный пользователь автоматически становится администратором. admin_title=Настройки учётной записи администратора admin_name=Логин администратора admin_password=Пароль @@ -146,6 +150,7 @@ test_git_failed=Не удалось проверить 'git' команду: %v sqlite3_not_available=Эта версия Gitea не поддерживает SQLite3. Пожалуйста, загрузите официальную бинарную версию из %s (не 'go build' версия). invalid_db_setting=Недопустимые параметры настройки базы данных: %v invalid_repo_path=Недопустимый путь к корню репозитория: %v +run_user_not_match=Текущий пользователь не является пользователем для запуска: %s -> %s save_config_failed=Не удалось сохранить конфигурацию: %v invalid_admin_setting=Указан недопустимый параметр учетной записи администратора: %v install_success=Добро пожаловать! Благодарим вас за выбор Gitea, пользуйтесь с удовольствием! @@ -157,11 +162,13 @@ 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=Имя пользователя / Email password_holder=Пароль switch_dashboard_context=Переключить контекст панели управления +my_repos=Репозитории show_more_repos=Показать больше репозиториев… collaborative_repos=Совместные репозитории my_orgs=Мои организации @@ -186,6 +193,7 @@ code_search_results=Результаты поиска для '%s' [auth] create_new_account=Регистрация аккаунта register_helper_msg=Уже есть аккаунт? Авторизуйтесь! +social_register_helper_msg=Уже есть аккаунт? Свяжите его сейчас! disable_register_prompt=Извините, возможность регистрации отключена. Пожалуйста, свяжитесь с администратором сайта. disable_register_mail=Подтверждение регистрации по электронной почте отключено. remember_me=Запомнить меня @@ -217,7 +225,9 @@ 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=К сожалению сброс пароля отключен. Пожалуйста, свяжитесь с администратором сайта. @@ -254,6 +264,8 @@ TreeName=Путь к файлу Content=Содержимое require_error=` не может быть пустым.` +alpha_dash_error=` должен содержать только буквенно-цифровые символы, тире (' - ') и подчеркивания ('_').` +alpha_dash_dot_error=` должен содержать только буквенно-цифровые символы, тире ('-'), подчеркивания ('_') и точки ('.').` git_ref_name_error=` должно быть правильным ссылочным именем Git.` size_error=` должен быть размер %s.` min_size_error=«должен содержать по крайней мере %s символов.» @@ -277,31 +289,43 @@ 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=Ваша учетная запись владеет одним или несколькими репозиториями; удалите или перенесите их в первую очередь. +still_has_org=Ваша учетная запись является членом одной или нескольких организаций; выйдите из них в первую очередь. +org_still_own_repo=Эта организация по-прежнему владеет одним или несколькими репозиториями; сначала удалите или перенесите их. target_branch_not_exist=Целевая ветка не существует [user] +change_avatar=Измените свой авататар… join_on=Присоединился repositories=Репозитории activity=Активность followers=Подписчики +starred=Избранные репозитории following=Подписан follow=Подписаться unfollow=Отписаться form.name_reserved=Имя пользователя '%s' зарезервировано. +form.name_pattern_not_allowed=Шаблон '%s' не допускается в имени пользователя. [settings] profile=Профиль +account=Аккаунт password=Пароль security=Безопасность avatar=Аватар ssh_gpg_keys=SSH / GPG ключи social=Учетные записи в соцсетях +applications=Приложения orgs=Управление организациями repos=Репозитории delete=Удалить аккаунт @@ -309,6 +333,7 @@ twofa=Двухфакторная аутентификация account_link=Привязанные аккаунты organization=Организации uid=UID +u2f=Ключи безопасности public_profile=Открытый профиль profile_desc=Ваш адрес электронной почты будет использован для уведомлений и других операций. @@ -350,19 +375,31 @@ email_deletion=Удалить адрес электронной почты email_deletion_desc=Адрес электронной почты и вся связанная с ним информация будет удалена из вашего аккаунта. Коммиты, сделанные от имени этого адреса электронной почты, не будут изменены. Продолжить? email_deletion_success=Ваш Email адрес был удален. openid_deletion=Удалить OpenID URI +openid_deletion_success=OpenID был удален. add_new_email=Добавить новый адрес электронной почты +add_new_openid=Добавить новый OpenID URI add_email=Добавить новый адрес электронной почты add_openid=Добавить адрес OpenID add_email_confirmation_sent=Письмо для подтверждения было отправлено на '%s'. Пожалуйста, проверьте ваш почтовый ящик в течение %s, чтобы завершить процесс подтверждения. +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 ключами 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 ключ с таким же идентификатором уже существует. +gpg_no_key_email_found=Этот ключ GPG не может использоваться с любым адресом электронной почты, привязанной к вашей учетной записи. subkeys=Подключи key_id=ИД ключа key_name=Имя ключа @@ -370,6 +407,10 @@ 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_desc=Удаление SSH ключа аннулирует его доступ к вашей учетной записи. Продолжить? +gpg_key_deletion_desc=Удаление GPG ключа отменяет проверку подписанных им коммитов. Продолжить? ssh_key_deletion_success=SSH ключ был удален. gpg_key_deletion_success=GPG ключ был удален. add_on=Добавлено @@ -389,7 +430,9 @@ manage_social=Управление привязанными учетными з unbind=Удалить связь unbind_success=Связанная внешняя учётная запись была удалена. +manage_access_token=Управление токенами generate_new_token=Создать новый токен +tokens_desc=Эти токены предоставляют доступ к вашей учетной записи с помощью Gitea API. token_name=Имя токена generate_token=Генерировать токен generate_token_success=Новый токен создан. Скопируйте и сохраните его сейчас, так как он не будет показан снова. @@ -420,14 +463,20 @@ 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=Владелец @@ -436,6 +485,7 @@ repo_name_helper=Лучшие названия репозиториев сост visibility=Видимость visiblity_helper=Сделать репозиторий приватным visiblity_fork_helper=(Изменение этого повлияет на все форки.) +clone_helper=Нужна помощь в клонировании? Посетите страницу справки. fork_repo=Форкнуть репозиторий fork_from=Форк от fork_visiblity_helper=Видимость форкнутого репозитория изменить нельзя. @@ -452,6 +502,8 @@ default_branch=Ветка по умолчанию mirror_prune=Очистить mirror_interval=Интервал зеркалирования (допустимы единицы времени 'h', 'm', 's') mirror_interval_invalid=Недопустимый интервал зеркалирования. +mirror_address=Клонировать по URL +mirror_address_desc=Укажите необходимые учетные данные в адресе. mirror_last_synced=Последняя синхронизация watchers=Наблюдатели stargazers=Звездочеты @@ -461,10 +513,13 @@ reactions_more=и ещё %d form.reach_limit_of_creation=Вы уже достигли ваш предел %d репозиториев. form.name_reserved=Имя репозитория '%s' зарезервировано. +form.name_pattern_not_allowed=Шаблон имени репозитория '%s' не допускается. migrate_type=Тип миграции migrate_type_helper=Этот репозиторий будет зеркалом migrate_repo=Перенос репозитория +migrate.clone_address=Перенос / Клонирование по URL +migrate.clone_address_desc=Это может быть HTTP/HTTPS/GIT адрес или локальный путь существующего репозитория на сервере. migrate.clone_local_path=или путь к локальному серверу migrate.permission_denied=У вас нет прав на импорт локальных репозиториев. migrate.invalid_local_path=Недопустимый локальный путь. Возможно он не существует или не является папкой. @@ -510,6 +565,7 @@ file_raw=Исходник file_history=История file_view_raw=Посмотреть исходник file_permalink=Постоянная ссылка +file_too_large=Этот файл слишком большой, поэтому он не может быть отображён. video_not_supported_in_browser=Ваш браузер не поддерживает HTML5 'video' тэг. stored_lfs=Хранится Git LFS @@ -522,6 +578,7 @@ editor.edit_this_file=Редактировать файл editor.delete_this_file=Удалить файл editor.file_delete_success=Файл '%s' удалён. editor.name_your_file=Назовите свой файл… +editor.filename_help=Чтобы добавить каталог, просто наберите название и нажмите /. Чтобы удалить каталог, перейдите к началу поля и нажмите клавишу backspace. editor.or=или editor.cancel_lower=Отменить editor.commit_changes=Сохранить правки @@ -539,10 +596,14 @@ editor.branch_already_exists=Ветка «%s» уже существует в э editor.file_changed_while_editing=Содержимое файла изменилось с момента начала редактирования. Нажмите здесь, чтобы увидеть, что было изменено, или Зафиксировать изменения снова, чтобы заменить их. 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=Поиск commits.search_all=Все ветки commits.author=Автор @@ -551,7 +612,10 @@ commits.date=Дата commits.older=Раньше commits.newer=Новее commits.signed_by=Подписано +commits.gpg_key_id=Идентификатор GPG ключа +ext_issues=Внешние задачи +ext_issues.desc=Ссылка на внешнюю систему отслеживания ошибок. issues.new=Новая задача issues.new.labels=Метки @@ -562,12 +626,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 @@ -587,6 +657,7 @@ 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=Назначено вам @@ -599,6 +670,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=Метка @@ -617,7 +692,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` @@ -638,6 +715,8 @@ 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=Размер @@ -647,23 +726,42 @@ 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=Дата окончания должна быть в формате 'гггг-мм-дд'. +issues.error_modifying_due_date=Не удалось изменить срок выполнения. +issues.error_removing_due_date=Не удалось убрать срок выполнения. +issues.due_date_form=гггг-мм-дд +issues.due_date_not_set=Срок выполнения не установлен. +issues.due_date_overdue=Просроченные pulls.desc=Включить Pull Request'ы и интерфейс согласования правок. pulls.new=Новый Pull Request pulls.compare_changes=Новый Pull Request +pulls.compare_changes_desc=Сравнить две ветки и создать запрос на слияние для изменений. +pulls.compare_base=родительская ветка +pulls.compare_compare=сравнить pulls.filter_branch=Фильтр по ветке pulls.no_results=Результатов не найдено. +pulls.nothing_to_compare=Нечего сравнивать, родительская и текущая ветка одинаковые. +pulls.has_pull_request=`Уже существует запрос на слияние между двумя целями: %[2]s#%[3]d` pulls.create=Создать Pull Request pulls.title_desc=хочет смерджить %[1]d коммит(ов) из %[2]s в %[3]s pulls.merged_title_desc=слито %[1]d коммит(ов) из %[2]s в %[3]s %[4]s @@ -672,10 +770,16 @@ pulls.tab_commits=Коммиты pulls.tab_files=Измененные файлы pulls.reopen_to_merge=Пожалуйста, переоткройте этот Pull Request для выполнения слияния. pulls.merged=Слито +pulls.has_merged=Слияние этого запроса успешно завершено. +pulls.data_broken=Содержимое этого запроса было нарушено вследствие удаления информации форка. +pulls.is_checking=Продолжается проверка конфликтов, пожалуйста обновите страницу несколько позже. pulls.can_auto_merge_desc=Этот Pull Request может быть объединён автоматически. +pulls.cannot_auto_merge_desc=Этот запрос на слияние не может быть объединён автоматически. +pulls.cannot_auto_merge_helper=Пожалуйста, совершите слияние вручную для урегулирования конфликтов. pulls.merge_pull_request=Принять Pull Request pulls.rebase_merge_pull_request=Выполнить rebase и принять PR pulls.squash_merge_pull_request=Объединить и принять PR +pulls.open_unmerged_pull_exists=`Вы не можете снова открыть, поскольку уже существует запрос на слияние (#%d) из того же репозитория с той же информацией о слиянии и ожидающий слияния.` milestones.new=Новый этап milestones.open_tab=%d открыты @@ -684,13 +788,21 @@ 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_success=Контрольная точка успешно удалена. milestones.filter_sort.closest_due_date=Ближайшее по дате milestones.filter_sort.furthest_due_date=Дальнее по дате milestones.filter_sort.least_complete=Менее полное @@ -698,17 +810,25 @@ milestones.filter_sort.most_complete=Более полное milestones.filter_sort.most_issues=Большинство задач milestones.filter_sort.least_issues=Меньшинство задач +ext_wiki=Внешняя вики +ext_wiki.desc=Ссылка на внешнюю вики. wiki=Вики +wiki.welcome=Добро пожаловать в Вики. +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 @@ -767,66 +887,145 @@ settings.hooks=Автоматическое обновление settings.githooks=Git хуки settings.basic_settings=Основные параметры settings.mirror_settings=Настройки зеркалирования +settings.sync_mirror=Синхронизировать settings.site=Сайт settings.update_settings=Обновить настройки settings.advanced_settings=Расширенные настройки +settings.wiki_desc=Включить Вики для репозитория +settings.use_internal_wiki=Использовать встроенную вики-систему +settings.use_external_wiki=Использовать внешнюю вики-систему settings.external_wiki_url=URL-адрес внешней Вики +settings.external_wiki_url_error=URL внешней вики не является допустимым 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=Внешний формат ссылки системы отслеживания ошибок. +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.pulls_desc=Включить публичные запросы на слияние settings.admin_settings=Настройки администратора 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=- Это навсегда удалит и отключит Вики для %s. settings.delete=Удалить этот репозиторий +settings.delete_desc=Будьте внимательны! Как только вы удалите репозиторий — пути назад не будет. settings.delete_notices_1=- Эта операция НЕ МОЖЕТ быть отменена. +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=Добавить Webhook +settings.hooks_desc=Webhooks позволяют внешним службам получать уведомления при возникновении определенных событий на Gitea. При возникновении указанных событий мы отправим запрос POST на каждый заданный вами URL. Узнать больше можно в нашем руководстве по webhooks. +settings.webhook_deletion=Удалить Webhook +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=Название Hook'a settings.githook_content=Перехватить содержание settings.update_githook=Обновить Hook +settings.payload_url=URL обработчика +settings.content_type=Тип содержимого settings.secret=Секретный ключ settings.slack_username=Имя пользователя settings.slack_icon_url=URL иконки settings.discord_username=Имя пользователя settings.discord_icon_url=URL иконки settings.slack_color=Цвет +settings.event_desc=На какие события этот webhook должен срабатывать? +settings.event_push_only=Просто push событие +settings.event_send_everything=Все события +settings.event_choose=Позвольте мне выбрать то, что нужно. settings.event_create=Создать +settings.event_create_desc=Ветка или тэг созданы. +settings.event_delete=Удалить settings.event_fork=Форкнуть +settings.event_fork_desc=Репозиторий склонирован settings.event_issues=Задачи settings.event_pull_request=Pull Request +settings.event_pull_request_desc=Запрос слияния открыт, закрыт, переоткрыт, изменён, назначен, снят, метка обновлена, метка убрана, или синхронизирован. settings.event_push=Push +settings.event_push_desc=Push в репозиторий. settings.event_repository=Репозиторий settings.event_repository_desc=Репозиторий создан или удален. +settings.active=Активен settings.add_hook_success=Webhook был добавлен. settings.update_webhook=Обновление Webhook settings.update_hook_success=Webhook был обновлен. +settings.delete_webhook=Удалить Webhook settings.recent_deliveries=Недавние рассылки settings.hook_type=Тип перехватчика +settings.add_slack_hook_desc=Добавить интеграцию с Slack в ваш репозиторий. settings.slack_token=Slack токен settings.slack_domain=Домен settings.slack_channel=Канал settings.deploy_keys=Ключи развертывания settings.add_deploy_key=Добавить ключ развертывания +settings.deploy_key_desc=Ключи развёртывания доступны только для чтения. Это не то же самое что и SSH-ключи аккаунта. settings.is_writable=Разрешить запись +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.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.protect_this_branch=Защитить эту ветку +settings.protect_this_branch_desc=Выключить принудительный push и защитить от удаления. +settings.protect_whitelist_committers=Белый список тех, кто может делать push в эту ветку +settings.protect_whitelist_users=Пользователи, которые могут делать push в эту ветку: +settings.protect_whitelist_search_users=Поиск пользователей… +settings.protect_whitelist_teams=Команды, члены которых могут делать push в эту ветку: +settings.protect_whitelist_search_teams=Поиск команд… settings.add_protected_branch=Включить защиту settings.delete_protected_branch=Отключить защиту +settings.protected_branch_deletion_desc=Любой пользователь с разрешениями на запись сможет выполнять push в эту ветку. Вы уверены? settings.choose_branch=Выберите ветку… +settings.no_protected_branch=Нет защищённых веток. diff.browse_source=Просмотр исходного кода diff.parent=Родитель @@ -856,10 +1055,17 @@ release.content=Содержимое release.write=Редактирование release.preview=Предварительный просмотр release.loading=Загрузка… +release.prerelease_desc=Это предварительный релиз +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=Имя ветки @@ -868,6 +1074,10 @@ 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.branch_already_exists=Ветка '%s' уже существует в репозитории. @@ -879,6 +1089,7 @@ topic.done=Сохранить [org] org_name_holder=Название организации org_full_name_holder=Полное название организации +org_name_helper=Лучшие названия организаций коротки и запоминаемы. create_org=Создать организацию repo_updated=Обновлено people=Люди @@ -890,9 +1101,13 @@ create_team=Создать команду org_desc=Описание team_name=Название команды team_desc=Описание +team_desc_helper=Что это за команда? team_permission_desc=Разрешение team_unit_desc=Разрешить доступ к разделам репозитория +form.name_reserved=Наименование организации '%s' зарезервированно. +form.name_pattern_not_allowed=Шаблон организации '%s' не допускается. +form.create_org_not_allowed=Этому пользователю не разрешено создавать организацию. settings=Настройки settings.options=Организация @@ -901,8 +1116,11 @@ settings.website=Сайт settings.location=Местоположение settings.update_settings=Обновить настройки settings.update_setting_success=Настройки организации обновлены. +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=Эта организация будет безвозвратно удалена. Продолжить? @@ -931,12 +1149,16 @@ teams.admin_access=Доступ администратора teams.admin_access_helper=Участники могут выполнять pull, push в командные репозитории и добавлять соавторов в команду. teams.no_desc=Эта группа не имеет описания teams.settings=Настройки +teams.owners_permission_desc=Владельцы имеют полный доступ ко всем репозиториям и имеют права администратора организации. teams.members=Члены группы разработки teams.update_settings=Обновить настройки teams.delete_team=Удалить команду teams.add_team_member=Добавление члена группы разработки teams.delete_team_title=Удалить команду teams.delete_team_success=Команда удалена. +teams.read_permission_desc=Эта команда предоставляет доступ на Чтение: члены могут просматривать и клонировать репозитории команды. +teams.write_permission_desc=Эта команда предоставляет доступ на Запись: члены могут получать и выполнять push команды в репозитории. +teams.admin_permission_desc=Эта команда дает административный доступ: участники могут читать, пушить и добавлять соавторов к ее репозиториям. teams.repositories=Репозитории группы разработки teams.search_repo_placeholder=Поиск репозитория… teams.add_team_repository=Добавить репозиторий группы разработки @@ -945,8 +1167,10 @@ teams.add_nonexistent_repo=Вы добавляете в отсутствующи [admin] dashboard=Панель +users=Пользователи organizations=Организации repositories=Репозитории +authentication=Авторизация config=Конфигурация notices=Системные уведомления monitor=Мониторинг @@ -954,6 +1178,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 веб-хуков, %d этапов, %d меток, %d задач хуков, %d команд, %d задач по обновлению, %d присоединенных файлов. dashboard.operation_name=Имя операции dashboard.operation_switch=Переключить dashboard.operation_run=Запуск @@ -961,9 +1189,18 @@ dashboard.clean_unbind_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.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.server_uptime=Время непрерывной работы сервера dashboard.current_goroutine=Текущее количество Goroutines @@ -971,6 +1208,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=Текущее использование кучи dashboard.heap_memory_obtained=Получено динамической памяти dashboard.heap_memory_idle=Не используется динамической памяти @@ -993,14 +1232,37 @@ dashboard.total_gc_pause=Итоговая задержка GC 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.send_register_notify=Отправить пользователю уведомление о регистрации +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=Ограничение максимального количества создаваемых репозиториев +users.max_repo_creation_desc=(Установите -1 для использования стандартного глобального значения предела) +users.is_activated=Эта учетная запись активирована +users.prohibit_login=Этой учетной записи запрещен вход в систему +users.is_admin=У этой учетной записи есть права администратора +users.allow_git_hook=Эта учетная запись имеет разрешение на создание Git-хуков +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=Управление организациями orgs.name=Название @@ -1014,12 +1276,16 @@ repos.name=Название repos.private=Личный repos.watches=Следят repos.stars=Звезды +repos.forks=Форки repos.issues=Задачи repos.size=Размер +auths.auth_manage_panel=Управление аутентификацией +auths.new=Добавить новый источник auths.name=Имя auths.type=Тип auths.enabled=Включено +auths.syncenabled=Включить синхронизацию пользователей auths.updated=Обновлено auths.auth_type=Тип аутентификации auths.auth_name=Имя аутентификации @@ -1031,6 +1297,7 @@ auths.bind_dn=Bind DN auths.bind_password=Привязать пароль auths.user_base=База для поиска пользователя auths.user_dn=DN пользователя +auths.attribute_username_placeholder=Оставьте пустым, чтобы использовать имя пользователя для регистрации. auths.use_paged_search=Использовать постраничный поиск auths.search_page_size=Размер страницы auths.filter=Фильтр пользователя @@ -1061,8 +1328,16 @@ auths.tip.facebook=Создайте новое приложение на https:/ auths.tip.github=Добавьте OAuth приложение на https://github.com/settings/applications/new auths.tip.gitlab=Добавьте новое приложение на https://gitlab.com/profile/applications auths.tip.openid_connect=Используйте OpenID Connect Discovery URL (/.well-known/openid-configuration) для автоматической настройки входа OAuth +auths.edit=Обновить параметры аутентификации +auths.activated=Эта аутентификация активирована auths.new_success=Метод аутентификации '%s' был добавлен. +auths.update_success=Параметры аутентификации обновлены. +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=Название сайта @@ -1076,12 +1351,14 @@ 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=Имя пользователя для авторизации на reverse proxy config.ssh_config=Конфигурация SSH config.ssh_enabled=SSH включён config.ssh_start_builtin_server=Использовать встроенный сервер +config.ssh_domain=Домен config.ssh_port=Порт config.ssh_listen_port=Прослушиваемый порт config.ssh_root_path=Корневой путь @@ -1094,27 +1371,33 @@ config.db_config=Конфигурация базы данных config.db_type=Тип config.db_host=Сервер config.db_name=Имя +config.db_user=Пользователь config.db_ssl_mode=SSL config.db_ssl_mode_helper=(только для "postgres") config.db_path=Путь config.db_path_helper=(для "sqlite3" и "tidb") config.service_config=Сервисная конфигурация +config.register_email_confirm=Требуется подтверждение по электронной почте config.disable_register=Отключить самостоятельную регистрацию 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=Включить CAPTCHA config.active_code_lives=Время жизни кода для активации config.reset_password_code_lives=Время жизни кода на сброс пароля config.enable_timetracking=Включить отслеживание времени config.default_enable_timetracking=Включить отслеживание времени по умолчанию +config.no_reply_address=No-reply адрес config.webhook_config=Конфигурация Webhooks config.queue_length=Длина очереди config.deliver_timeout=Задержка доставки config.skip_tls_verify=Пропустить проверку TLS +config.mailer_config=Настройки почты config.mailer_enabled=Почта включена config.mailer_disable_helo=Отключить HELO config.mailer_name=Имя @@ -1122,6 +1405,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=Конфигурация OAuth config.oauth_enabled=OAuth включен @@ -1141,6 +1427,7 @@ config.session_life_time=Время жизни сессии config.https_only=Только HTTPS config.cookie_life_time=Время жизни файла cookie +config.picture_config=Настройка изображения config.picture_service=Сервис изображений config.disable_gravatar=Отключить Gravatar config.enable_federated_avatar=Включить внешние аватары @@ -1165,6 +1452,7 @@ monitor.name=Название monitor.schedule=Расписание monitor.next=Следующий раз monitor.previous=Предыдущий раз +monitor.execute_times=Количество выполнений monitor.process=Запущенные процессы monitor.desc=Описание monitor.start=Время начала @@ -1234,6 +1522,8 @@ remove_file=Удалить файл notifications=Уведомления unread=Непрочитанные read=Прочитанные +no_unread=У вас нет непрочитанных уведомлений. +no_read=У вас нет прочитанных уведомлений. pin=Прикрепить уведомление mark_as_read=Отметить как прочитанное mark_as_unread=Пометить как непрочитанное From 7893e5939a4bafbd4a3e5a7699c81e7780429eda Mon Sep 17 00:00:00 2001 From: Alexey Terentyev Date: Sat, 2 Jun 2018 18:54:40 +0300 Subject: [PATCH 019/182] Update gitgraph.js to fix "Cannot read property color of undefined" (#4095) Signed-off-by: Alexey Terentyev --- public/vendor/VERSIONS | 2 +- public/vendor/plugins/gitgraph/gitgraph.js | 71 ++++++++++++++-------- 2 files changed, 45 insertions(+), 28 deletions(-) diff --git a/public/vendor/VERSIONS b/public/vendor/VERSIONS index 0ce93fe10..561d3d3e4 100644 --- a/public/vendor/VERSIONS +++ b/public/vendor/VERSIONS @@ -15,7 +15,7 @@ File(s): /vendor/plugins/clipboard/clipboard.min.js Version: 1.5.9 File(s): /vendor/plugins/gitgraph/gitgraph.js -Version: 9b492e8bf1ddf7908a4997b8f83fa38a809a9da3 +Version: 745f604212e2abfe2f0a59169ea530857b46625c File(s): /vendor/plugins/vue/vue.min.js Version: 2.1.10 diff --git a/public/vendor/plugins/gitgraph/gitgraph.js b/public/vendor/plugins/gitgraph/gitgraph.js index bab36e770..05ca0844d 100644 --- a/public/vendor/plugins/gitgraph/gitgraph.js +++ b/public/vendor/plugins/gitgraph/gitgraph.js @@ -126,7 +126,20 @@ var gitGraph = function (canvas, rawGraphList, config) { !(row[i - 2] && row[i] === "_" && row[i - 2] === "|")) {} return i; - } + }; + + var findLineBreak = function (row) { + if (!row) { + return -1 + } + + var i = row.length; + + while (i-- && + !(row[i - 1] && row[i - 2] && row[i] === " " && row[i - 1] === "|" && row[i - 2] === "_")) {} + + return i; + }; var genNewFlow = function () { var newId; @@ -138,21 +151,21 @@ var gitGraph = function (canvas, rawGraphList, config) { return {id:newId, color:"#" + newId}; }; - //draw method - var drawLineRight = function (x, y, color) { + //Draw methods + var drawLine = function (moveX, moveY, lineX, lineY, color) { ctx.strokeStyle = color; ctx.beginPath(); - ctx.moveTo(x, y + config.unitSize / 2); - ctx.lineTo(x + config.unitSize, y + config.unitSize / 2); + ctx.moveTo(moveX, moveY); + ctx.lineTo(lineX, lineY); ctx.stroke(); }; + var drawLineRight = function (x, y, color) { + drawLine(x, y + config.unitSize / 2, x + config.unitSize, y + config.unitSize / 2, color); + }; + var drawLineUp = function (x, y, color) { - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(x, y + config.unitSize / 2); - ctx.lineTo(x, y - config.unitSize / 2); - ctx.stroke(); + drawLine(x, y + config.unitSize / 2, x, y - config.unitSize / 2, color); }; var drawNode = function (x, y, color) { @@ -166,37 +179,28 @@ var gitGraph = function (canvas, rawGraphList, config) { }; var drawLineIn = function (x, y, color) { - ctx.strokeStyle = color; - - ctx.beginPath(); - ctx.moveTo(x + config.unitSize, y + config.unitSize / 2); - ctx.lineTo(x, y - config.unitSize / 2); - ctx.stroke(); + drawLine(x + config.unitSize, y + config.unitSize / 2, x, y - config.unitSize / 2, color); }; var drawLineOut = function (x, y, color) { - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(x, y + config.unitSize / 2); - ctx.lineTo(x + config.unitSize, y - config.unitSize / 2); - ctx.stroke(); + drawLine(x, y + config.unitSize / 2, x + config.unitSize, y - config.unitSize / 2, color); }; var draw = function (graphList) { - var colomn, colomnIndex, prevColomn, condenseIndex; + var colomn, colomnIndex, prevColomn, condenseIndex, breakIndex = -1; var x, y; var color; - var nodePos, outPos; + var nodePos; var tempFlow; var prevRowLength = 0; var flowSwapPos = -1; var lastLinePos; - var i, k, l; + var i, l; var condenseCurrentLength, condensePrevLength = 0, condenseNextLength = 0; var inlineIntersect = false; - //initiate for first row + //initiate color array for first row for (i = 0, l = graphList[0].length; i < l; i++) { if (graphList[0][i] !== "_" && graphList[0][i] !== " ") { flows.push(genNewFlow()); @@ -275,6 +279,7 @@ var gitGraph = function (canvas, rawGraphList, config) { colomnIndex = 0; //reset index condenseIndex = 0; condensePrevLength = 0; + breakIndex = -1; //reset break index while (colomnIndex < currentRow.length) { colomn = currentRow[colomnIndex]; @@ -282,6 +287,18 @@ var gitGraph = function (canvas, rawGraphList, config) { ++condensePrevLength; } + //check and fix line break in next row + if (colomn === "/" && currentRow[colomnIndex - 1] && currentRow[colomnIndex - 1] === "|") { + if ((breakIndex = findLineBreak(nextRow)) !== -1) { + nextRow.splice(breakIndex, 1); + } + } + //if line break found replace all '/' with '|' after breakIndex in previous row + if (breakIndex !== - 1 && colomn === "/" && colomnIndex > breakIndex) { + currentRow[colomnIndex] = "|"; + colomn = "|"; + } + if (colomn === " " && currentRow[colomnIndex + 1] && currentRow[colomnIndex + 1] === "_" && @@ -294,7 +311,7 @@ var gitGraph = function (canvas, rawGraphList, config) { colomn = "/"; } - //create new flow only when no intersetc happened + //create new flow only when no intersect happened if (flowSwapPos === -1 && colomn === "/" && currentRow[colomnIndex - 1] && @@ -415,4 +432,4 @@ var gitGraph = function (canvas, rawGraphList, config) { init(); draw(graphList); }; -// @end-license +// @end-license \ No newline at end of file From 85b7fd1e61d277179662a6652b26e2ee91bba11b Mon Sep 17 00:00:00 2001 From: Fluf <36822577+flufmonster@users.noreply.github.com> Date: Sat, 2 Jun 2018 21:14:37 -0400 Subject: [PATCH 020/182] Remove dupelicate link (#4100) --- 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 a486d9b9b..fb9611cb6 100644 --- a/templates/base/head.tmpl +++ b/templates/base/head.tmpl @@ -141,7 +141,7 @@ @@ -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 125/182] [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 126/182] 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 127/182] 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 128/182] [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 129/182] 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 130/182] [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 131/182] 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 132/182] 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 133/182] 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 134/182] 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 170/182] [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 171/182] 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 172/182] 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 173/182] [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 174/182] 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 175/182] [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 176/182] 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 177/182] 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 178/182] [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 179/182] 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 180/182] [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 From ae9dd239fbfc3b9f18ff2ccbdbe6fdf236db2b36 Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Sun, 22 Jul 2018 06:15:11 +0300 Subject: [PATCH 181/182] Fix migration from older releases (#4495) --- models/migrations/v39.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/migrations/v39.go b/models/migrations/v39.go index 42197e80f..9fb7390c7 100644 --- a/models/migrations/v39.go +++ b/models/migrations/v39.go @@ -34,7 +34,7 @@ func releaseAddColumnIsTagAndSyncTags(x *xorm.Engine) error { pageSize := models.RepositoryListDefaultPageSize for { repos := make([]*models.Repository, 0, pageSize) - if err := x.Table("repository").Asc("id").Limit(pageSize, offset).Find(&repos); err != nil { + if err := x.Table("repository").Cols("id", "name", "owner_id").Asc("id").Limit(pageSize, offset).Find(&repos); err != nil { return fmt.Errorf("select repos [offset: %d]: %v", offset, err) } for _, repo := range repos { From ba358ecbf5d58dc6b2f166a84a4b6c6633cfa397 Mon Sep 17 00:00:00 2001 From: Kjell Kvinge Date: Mon, 23 Jul 2018 16:12:06 +0200 Subject: [PATCH 182/182] Make max commits in graph configurable (#4498) --- custom/conf/app.ini.sample | 2 ++ docs/content/doc/advanced/config-cheat-sheet.en-us.md | 1 + models/graph.go | 3 ++- modules/setting/setting.go | 2 ++ 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/custom/conf/app.ini.sample b/custom/conf/app.ini.sample index f087e9913..12e50e8cb 100644 --- a/custom/conf/app.ini.sample +++ b/custom/conf/app.ini.sample @@ -67,6 +67,8 @@ EXPLORE_PAGING_NUM = 20 ISSUE_PAGING_NUM = 10 ; Number of maximum commits displayed in one activity feed FEED_MAX_COMMIT_NUM = 5 +; Number of maximum commits displayed in commit graph. +GRAPH_MAX_COMMIT_NUM = 100 ; Value of `theme-color` meta tag, used by Android >= 5.0 ; An invalid color like "none" or "disable" will have the default style ; More info: https://developers.google.com/web/updates/2014/11/Support-for-theme-color-in-Chrome-39-for-Android 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 5ed2ce43e..29489d885 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -68,6 +68,7 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`. - `EXPLORE_PAGING_NUM`: **20**: Number of repositories that are shown in one explore page. - `ISSUE_PAGING_NUM`: **10**: Number of issues that are shown in one page (for all pages that list issues). - `FEED_MAX_COMMIT_NUM`: **5**: Number of maximum commits shown in one activity feed. +- `GRAPH_MAX_COMMIT_NUM`: **100**: Number of maximum commits shown in the commit graph. - `DEFAULT_THEME`: **gitea**: \[gitea, arc-green\]: Set the default theme for the Gitea install. ### UI - Admin (`ui.admin`) diff --git a/models/graph.go b/models/graph.go index 8ecea9c09..90b9ff11f 100644 --- a/models/graph.go +++ b/models/graph.go @@ -9,6 +9,7 @@ import ( "strings" "code.gitea.io/git" + "code.gitea.io/gitea/modules/setting" ) // GraphItem represent one commit, or one relation in timeline @@ -41,7 +42,7 @@ func GetCommitGraph(r *git.Repository) (GraphItems, error) { "--all", "-C", "-M", - "-n 100", + fmt.Sprintf("-n %d", setting.UI.GraphMaxCommitNum), "--date=iso", fmt.Sprintf("--pretty=format:%s", format), ) diff --git a/modules/setting/setting.go b/modules/setting/setting.go index b44ba4d11..396dec254 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -276,6 +276,7 @@ var ( IssuePagingNum int RepoSearchPagingNum int FeedMaxCommitNum int + GraphMaxCommitNum int ReactionMaxUserNum int ThemeColorMetaTag string MaxDisplayFileSize int64 @@ -301,6 +302,7 @@ var ( IssuePagingNum: 10, RepoSearchPagingNum: 10, FeedMaxCommitNum: 5, + GraphMaxCommitNum: 100, ReactionMaxUserNum: 10, ThemeColorMetaTag: `#6cc644`, MaxDisplayFileSize: 8388608,