From 28709baf9446e567577ede65e73969f51160a025 Mon Sep 17 00:00:00 2001 From: zhyass <34016424+zhyass@users.noreply.github.com> Date: Fri, 3 Apr 2020 12:34:20 +0800 Subject: [PATCH] * : complete create index syntax support #592 [summary] 1. create index syntax. CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name ON tbl_name (key_part,...) [index_option] [algorithm_option | lock_option] ... key_part: col_name [(length)] index_option: KEY_BLOCK_SIZE [=] value | index_type | WITH PARSER NGRAM | COMMENT 'string' index_type: USING {BTREE | HASH} algorithm_option: ALGORITHM [=] {DEFAULT | INPLACE | COPY} lock_option: LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE} 2. create table index definition syntax. index_definition: PRIMARY KEY (key_part,...) | UNIQUE [index_or_key] index_name (key_part,...) [index_option] | index_or_key index_name (key_part,...) [index_option] | FULLTEXT index_or_key index_name (key_part,...) [index_option] | SPATIAL index_or_key index_name (key_part,...) [index_option] index_or_key: INDEX | KEY [test case] src/planner/ddl_plan_test.go src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ddl_test.go src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/parse_test.go [patch codecov] src/planner/ddl_plan.go 93.8% src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ast.go 86.4% --- docs/radon_sql_support.md | 23 +- intergration/radon-test/r/ddl.result | 34 + intergration/radon-test/t/ddl.test | 21 + src/planner/ddl_plan.go | 3 +- src/planner/ddl_plan_test.go | 116 +- src/proxy/ddl.go | 12 +- .../xelabs/go-mysqlstack/sqlparser/ast.go | 205 +- .../go-mysqlstack/sqlparser/ddl_test.go | 56 +- .../go-mysqlstack/sqlparser/parse_test.go | 14 +- .../xelabs/go-mysqlstack/sqlparser/sql.go | 4910 +++++++++-------- .../xelabs/go-mysqlstack/sqlparser/sql.y | 266 +- .../xelabs/go-mysqlstack/sqlparser/token.go | 17 +- 12 files changed, 3204 insertions(+), 2473 deletions(-) diff --git a/docs/radon_sql_support.md b/docs/radon_sql_support.md index bc68021b..78640358 100644 --- a/docs/radon_sql_support.md +++ b/docs/radon_sql_support.md @@ -463,7 +463,28 @@ RadonDB only supports the `CREATE/DROP INDEX` syntax in order to simplify the in `Syntax` ``` -CREATE INDEX index_name ON table_name (index_col_name,...) +CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name + ON tbl_name (key_part,...) + [index_option] + [algorithm_option | lock_option] ... + +key_part: + col_name [(length)] + +index_option: + KEY_BLOCK_SIZE [=] value + | index_type + | WITH PARSER NGRAM + | COMMENT 'string' + +index_type: + USING {BTREE | HASH} + +algorithm_option: + ALGORITHM [=] {DEFAULT | INPLACE | COPY} + +lock_option: + LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE} ``` `Instructions` diff --git a/intergration/radon-test/r/ddl.result b/intergration/radon-test/r/ddl.result index 021bf2e7..7cd3a280 100644 --- a/intergration/radon-test/r/ddl.result +++ b/intergration/radon-test/r/ddl.result @@ -25,4 +25,38 @@ t CREATE TABLE `t` (\n `a` int(11) NOT NULL,\n `b` int(11) NOT NULL,\n `c` ch drop table integrate_test.t; +create table integrate_test.t( + a int, + b int, + c char(10), + unique key a_idx(a) using btree comment 'unique', + fulltext index c_idx(c) KEY_BLOCK_SIZE=10 WITH PARSER ngram + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +show create table integrate_test.t; +Table Create Table +t CREATE TABLE `t` (\n `a` int(11) DEFAULT NULL,\n `b` int(11) DEFAULT NULL,\n `c` char(10) DEFAULT NULL,\n UNIQUE KEY `a_idx` (`a`) USING BTREE COMMENT 'unique',\n FULLTEXT KEY `c_idx` (`c`) KEY_BLOCK_SIZE=10 /*!50100 WITH PARSER `ngram` */ \n) ENGINE=InnoDB DEFAULT CHARSET=utf8\n/*!50100 PARTITION BY HASH(a) */ + +drop table integrate_test.t; + + +create table integrate_test.t( + a int, + b int, + c char(10) + ) PARTITION BY HASH(a) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +create unique index a_idx on integrate_test.t(a); + +create index b_idx on integrate_test.t(b) using btree KEY_BLOCK_SIZE=10 LOCK=DEFAULT ALGORITHM=COPY; + +create FULLTEXT index c_idx on integrate_test.t(c) WITH PARSER ngram comment 'fulltext' ALGORITHM=DEFAULT LOCK=SHARED; + +show create table integrate_test.t; +Table Create Table +t CREATE TABLE `t` (\n `a` int(11) DEFAULT NULL,\n `b` int(11) DEFAULT NULL,\n `c` char(10) DEFAULT NULL,\n UNIQUE KEY `a_idx` (`a`),\n KEY `b_idx` (`b`) USING BTREE KEY_BLOCK_SIZE=10,\n FULLTEXT KEY `c_idx` (`c`) COMMENT 'fulltext' /*!50100 WITH PARSER `ngram` */ \n) ENGINE=InnoDB DEFAULT CHARSET=utf8\n/*!50100 PARTITION BY HASH(a) */ + +drop table integrate_test.t; + + drop database integrate_test; diff --git a/intergration/radon-test/t/ddl.test b/intergration/radon-test/t/ddl.test index 6c812155..d9e58e51 100644 --- a/intergration/radon-test/t/ddl.test +++ b/intergration/radon-test/t/ddl.test @@ -14,4 +14,25 @@ create table integrate_test.t( show create table integrate_test.t; drop table integrate_test.t; +create table integrate_test.t( + a int, + b int, + c char(10), + unique key a_idx(a) using btree comment 'unique', + fulltext index c_idx(c) KEY_BLOCK_SIZE=10 WITH PARSER ngram + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +show create table integrate_test.t; +drop table integrate_test.t; + +create table integrate_test.t( + a int, + b int, + c char(10) + ) PARTITION BY HASH(a) ENGINE=InnoDB DEFAULT CHARSET=utf8; +create unique index a_idx on integrate_test.t(a); +create index b_idx on integrate_test.t(b) using btree KEY_BLOCK_SIZE=10 LOCK=DEFAULT ALGORITHM=COPY; +create FULLTEXT index c_idx on integrate_test.t(c) WITH PARSER ngram comment 'fulltext' ALGORITHM=DEFAULT LOCK=SHARED; +show create table integrate_test.t; +drop table integrate_test.t; + drop database integrate_test; diff --git a/src/planner/ddl_plan.go b/src/planner/ddl_plan.go index 85e1d6d0..3bbfed96 100644 --- a/src/planner/ddl_plan.go +++ b/src/planner/ddl_plan.go @@ -101,8 +101,7 @@ func (p *DDLPlan) checkUnsupportedOperations(database, table string) error { } // constraint check in index definition for _, index := range node.TableSpec.Indexes { - info := index.Info - if info.Unique || info.Primary { + if index.Unique || index.Primary { err := fmt.Sprintf("The unique/primary constraint should be only defined on the sharding key column[%s]", shardKey) return errors.New(err) } diff --git a/src/planner/ddl_plan_test.go b/src/planner/ddl_plan_test.go index 209fdee0..ea76be89 100644 --- a/src/planner/ddl_plan_test.go +++ b/src/planner/ddl_plan_test.go @@ -24,7 +24,7 @@ func TestDDLPlan1(t *testing.T) { "{\n\t\"RawQuery\": \"create table G(a int)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.G (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend1\",\n\t\t\t\"Range\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.G (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"\"\n\t\t}\n\t]\n}", "{\n\t\"RawQuery\": \"create table S(a int)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.S (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend1\",\n\t\t\t\"Range\": \"\"\n\t\t}\n\t]\n}", "{\n\t\"RawQuery\": \"alter table A engine = tokudb\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A0 engine = tokudb\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A2 engine = tokudb\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A4 engine = tokudb\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A8 engine = tokudb\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", - "{\n\t\"RawQuery\": \"create index idx_a on A(a)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create index idx_a on sbtest.A0\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create index idx_a on sbtest.A2\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create index idx_a on sbtest.A4\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create index idx_a on sbtest.A8\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", + "{\n\t\"RawQuery\": \"create index idx_a on A(a)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create index idx_a on sbtest.A0(`a`)\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create index idx_a on sbtest.A2(`a`)\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create index idx_a on sbtest.A4(`a`)\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create index idx_a on sbtest.A8(`a`)\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", "{\n\t\"RawQuery\": \"drop index idx_a on sbtest.A\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"drop index idx_a on sbtest.A0\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"drop index idx_a on sbtest.A2\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"drop index idx_a on sbtest.A4\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"drop index idx_a on sbtest.A8\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", "{\n\t\"RawQuery\": \"alter table A add column(b int)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A0 add column (\\n\\t`b` int\\n)\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A2 add column (\\n\\t`b` int\\n)\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A4 add column (\\n\\t`b` int\\n)\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A8 add column (\\n\\t`b` int\\n)\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", "{\n\t\"RawQuery\": \"alter table sbtest.A add column(b int)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A0 add column (\\n\\t`b` int\\n)\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A2 add column (\\n\\t`b` int\\n)\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A4 add column (\\n\\t`b` int\\n)\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"alter table sbtest.A8 add column (\\n\\t`b` int\\n)\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", @@ -202,13 +202,117 @@ func TestDDLAlterError(t *testing.T) { } } -func TestDDLPlanCreateIndexWithTableNameIssue10(t *testing.T) { +func TestDDLPlanCreateIndex(t *testing.T) { results := []string{ - "{\n\t\"RawQuery\": \"create index idx_A_id on A(a)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create index idx_A_id on sbtest.A0\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create index idx_A_id on sbtest.A2\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create index idx_A_id on sbtest.A4\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create index idx_A_id on sbtest.A8\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", + `{ + "RawQuery": "create index idx_A_id on A(a)", + "Partitions": [ + { + "Query": "create index idx_A_id on sbtest.A0(` + "`a`" + `)", + "Backend": "backend0", + "Range": "[0-2)" + }, + { + "Query": "create index idx_A_id on sbtest.A2(` + "`a`" + `)", + "Backend": "backend2", + "Range": "[2-4)" + }, + { + "Query": "create index idx_A_id on sbtest.A4(` + "`a`" + `)", + "Backend": "backend4", + "Range": "[4-8)" + }, + { + "Query": "create index idx_A_id on sbtest.A8(` + "`a`" + `)", + "Backend": "backend8", + "Range": "[8-4096)" + } + ] +}`, + `{ + "RawQuery": "create fulltext index idx on A(a) with parser ngram lock=none algorithm=copy", + "Partitions": [ + { + "Query": "create fulltext index idx on sbtest.A0(` + "`a`" + `) WITH PARSER ngram algorithm = copy lock = none", + "Backend": "backend0", + "Range": "[0-2)" + }, + { + "Query": "create fulltext index idx on sbtest.A2(` + "`a`" + `) WITH PARSER ngram algorithm = copy lock = none", + "Backend": "backend2", + "Range": "[2-4)" + }, + { + "Query": "create fulltext index idx on sbtest.A4(` + "`a`" + `) WITH PARSER ngram algorithm = copy lock = none", + "Backend": "backend4", + "Range": "[4-8)" + }, + { + "Query": "create fulltext index idx on sbtest.A8(` + "`a`" + `) WITH PARSER ngram algorithm = copy lock = none", + "Backend": "backend8", + "Range": "[8-4096)" + } + ] +}`, + `{ + "RawQuery": "create index idx on A(a) using hash comment 'c' lock=shared", + "Partitions": [ + { + "Query": "create index idx on sbtest.A0(` + "`a`" + `) using hash comment 'c' lock = shared", + "Backend": "backend0", + "Range": "[0-2)" + }, + { + "Query": "create index idx on sbtest.A2(` + "`a`" + `) using hash comment 'c' lock = shared", + "Backend": "backend2", + "Range": "[2-4)" + }, + { + "Query": "create index idx on sbtest.A4(` + "`a`" + `) using hash comment 'c' lock = shared", + "Backend": "backend4", + "Range": "[4-8)" + }, + { + "Query": "create index idx on sbtest.A8(` + "`a`" + `) using hash comment 'c' lock = shared", + "Backend": "backend8", + "Range": "[8-4096)" + } + ] +}`, + `{ + "RawQuery": "create spatial index idx on A(gis) key_block_size=10 algorithm=default", + "Partitions": [ + { + "Query": "create spatial index idx on sbtest.A0(` + "`gis`" + `) key_block_size = 10 algorithm = default", + "Backend": "backend0", + "Range": "[0-2)" + }, + { + "Query": "create spatial index idx on sbtest.A2(` + "`gis`" + `) key_block_size = 10 algorithm = default", + "Backend": "backend2", + "Range": "[2-4)" + }, + { + "Query": "create spatial index idx on sbtest.A4(` + "`gis`" + `) key_block_size = 10 algorithm = default", + "Backend": "backend4", + "Range": "[4-8)" + }, + { + "Query": "create spatial index idx on sbtest.A8(` + "`gis`" + `) key_block_size = 10 algorithm = default", + "Backend": "backend8", + "Range": "[8-4096)" + } + ] +}`, } querys := []string{ + // issue 10. "create index idx_A_id on A(a)", + // issue 592. + "create fulltext index idx on A(a) with parser ngram lock=none algorithm=copy", + "create index idx on A(a) using hash comment 'c' lock=shared", + "create spatial index idx on A(gis) key_block_size=10 algorithm=default", } log := xlog.NewStdLog(xlog.Level(xlog.PANIC)) @@ -252,6 +356,8 @@ func TestDDLPlanWithQuote(t *testing.T) { "{\n\t\"RawQuery\": \"create table sbtest.A (\\n\\t`a` int\\n)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A0 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A2 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A4 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A8 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", "{\n\t\"RawQuery\": \"create table sbtest.A (\\n\\t`a` int\\n)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A0 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A2 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A4 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A8 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", "{\n\t\"RawQuery\": \"create table sbtest.A (\\n\\t`a` int\\n)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A0 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend0\",\n\t\t\t\"Range\": \"[0-2)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A2 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[2-4)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A4 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend4\",\n\t\t\t\"Range\": \"[4-8)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.A8 (\\n\\t`a` int\\n)\",\n\t\t\t\"Backend\": \"backend8\",\n\t\t\t\"Range\": \"[8-4096)\"\n\t\t}\n\t]\n}", + "{\n\t\"RawQuery\": \"create table B (\\n\\t`a` int,\\n\\t`b` varchar(10),\\n\\tunique key `a_idx` (`a`) using btree comment 'key'\\n)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.B0 (\\n\\t`a` int,\\n\\t`b` varchar(10),\\n\\tunique key `a_idx` (`a`) using btree comment 'key'\\n)\",\n\t\t\t\"Backend\": \"backend1\",\n\t\t\t\"Range\": \"[0-512)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.B1 (\\n\\t`a` int,\\n\\t`b` varchar(10),\\n\\tunique key `a_idx` (`a`) using btree comment 'key'\\n)\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[512-4096)\"\n\t\t}\n\t]\n}", + "{\n\t\"RawQuery\": \"create table B (\\n\\t`b` varchar(10),\\n\\tfulltext index `b_idx` (`b`) key_block_size = 10 WITH PARSER ngram\\n)\",\n\t\"Partitions\": [\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.B0 (\\n\\t`b` varchar(10),\\n\\tfulltext index `b_idx` (`b`) key_block_size = 10 WITH PARSER ngram\\n)\",\n\t\t\t\"Backend\": \"backend1\",\n\t\t\t\"Range\": \"[0-512)\"\n\t\t},\n\t\t{\n\t\t\t\"Query\": \"create table sbtest.B1 (\\n\\t`b` varchar(10),\\n\\tfulltext index `b_idx` (`b`) key_block_size = 10 WITH PARSER ngram\\n)\",\n\t\t\t\"Backend\": \"backend2\",\n\t\t\t\"Range\": \"[512-4096)\"\n\t\t}\n\t]\n}", } querys := []string{ @@ -262,6 +368,8 @@ func TestDDLPlanWithQuote(t *testing.T) { "create table sbtest.`A`(a int)", "create table `sbtest`.A(a int)", "create table `sbtest`.`A`(a int)", + "create table B(a int, b varchar(10), unique key a_idx(a) using btree comment 'key')", + "create table B(b varchar(10), fulltext index b_idx(b) with parser ngram key_block_size=10)", } log := xlog.NewStdLog(xlog.Level(xlog.PANIC)) @@ -270,7 +378,7 @@ func TestDDLPlanWithQuote(t *testing.T) { route, cleanup := router.MockNewRouter(log) defer cleanup() - err := route.AddForTest(database, router.MockTableAConfig()) + err := route.AddForTest(database, router.MockTableAConfig(), router.MockTableBConfig()) assert.Nil(t, err) for i, query := range querys { log.Debug("%v", query) diff --git a/src/proxy/ddl.go b/src/proxy/ddl.go index ecaec0d3..53827741 100644 --- a/src/proxy/ddl.go +++ b/src/proxy/ddl.go @@ -78,9 +78,8 @@ func tryGetShardKey(ddl *sqlparser.DDL) (string, error) { // constraint check in index definition for _, index := range ddl.TableSpec.Indexes { constraintCheckOK = false - info := index.Info - if info.Unique || info.Primary { - for _, colIdx := range index.Columns { + if index.Unique || index.Primary { + for _, colIdx := range index.Opts.Columns { colName := colIdx.Column.String() if colName == shardKey { constraintCheckOK = true @@ -103,10 +102,9 @@ func tryGetShardKey(ddl *sqlparser.DDL) (string, error) { } // constraint check in index definition. for _, index := range ddl.TableSpec.Indexes { - info := index.Info - if info.Unique || info.Primary { - if len(index.Columns) == 1 { - return index.Columns[0].Column.String(), nil + if index.Unique || index.Primary { + if len(index.Opts.Columns) == 1 { + return index.Opts.Columns[0].Column.String(), nil } } } diff --git a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ast.go b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ast.go index c8fcf0a7..2a1c87e6 100644 --- a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ast.go +++ b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ast.go @@ -571,6 +571,10 @@ type DDL struct { DatabaseOptions DatabaseOptionListOpt TableSpec *TableSpec + // [UNIQUE | FULLTEXT | SPATIAL] index. + IndexType string + IndexOpts *IndexOptions + // Tables is set if Action is DropStr. Tables TableNames @@ -607,6 +611,14 @@ const ( PartitionTableList = "partitiontablelist" ) +// Index key type strings. +const ( + IndexStr = "index " + FullTextStr = "fulltext index " + SpatialStr = "spatial index " + UniqueStr = "unique index " +) + // Format formats the node. func (node *DDL) Format(buf *TrackedBuffer) { switch node.Action { @@ -634,7 +646,7 @@ func (node *DDL) Format(buf *TrackedBuffer) { buf.Myprintf("%s%s %v %v", node.Action, ifnotexists, node.NewName, node.TableSpec) } case CreateIndexStr: - buf.Myprintf("%s %s on %v", node.Action, node.IndexName, node.NewName) + buf.Myprintf("create %s%s on %v%v", node.IndexType, node.IndexName, node.NewName, node.IndexOpts) case DropTableStr: exists := "" if node.IfExists { @@ -799,6 +811,139 @@ func (opts TableOptions) WalkSubtree(visit Visit) error { return nil } +// IndexOptionType is the type for IndexOption. +type IndexOptionType int + +const ( + // IndexOptionNone enum. + IndexOptionNone IndexOptionType = iota + // IndexOptionComment is 'comment' enum. + IndexOptionComment + // IndexOptionUsing is 'using' enum. + IndexOptionUsing + // IndexOptionBlockSize is 'key_block_size' enum. + IndexOptionBlockSize + // IndexOptionParser is 'with parser' enum. + IndexOptionParser + // IndexOptionAlgorithm is 'algorithm' enum. + IndexOptionAlgorithm + // IndexOptionLock is 'lock' enum. + IndexOptionLock +) + +// IndexOption represents the index options. +// See https://dev.mysql.com/doc/refman/5.7/en/create-index.html. +type IndexOption struct { + Type IndexOptionType + Val *SQLVal +} + +// IndexOptionList ... +type IndexOptionList []*IndexOption + +// IndexOptions is used by IndexOpts. +type IndexOptions struct { + Columns []*IndexColumn + Using string + Comment string + BlockSize *SQLVal + Parser string + Algorithm string + Lock string +} + +// NewIndexOptions use to create IndexOptions. +func NewIndexOptions(columns []*IndexColumn, idxOptList IndexOptionList) *IndexOptions { + idxOpts := &IndexOptions{ + Columns: columns, + } + for _, idxOpt := range idxOptList { + switch idxOpt.Type { + case IndexOptionComment: + idxOpts.Comment = String(idxOpt.Val) + case IndexOptionUsing: + idxOpts.Using = String(idxOpt.Val) + case IndexOptionBlockSize: + idxOpts.BlockSize = idxOpt.Val + case IndexOptionParser: + idxOpts.Parser = String(idxOpt.Val) + case IndexOptionAlgorithm: + idxOpts.Algorithm = String(idxOpt.Val) + case IndexOptionLock: + idxOpts.Lock = String(idxOpt.Val) + } + } + return idxOpts +} + +// Format formats the node. +func (opts *IndexOptions) Format(buf *TrackedBuffer) { + buf.Myprintf("(") + for i, col := range opts.Columns { + if i != 0 { + buf.Myprintf(", `%s`", col.Column.String()) + } else { + buf.Myprintf("`%s`", col.Column.String()) + } + if col.Length != nil { + buf.Myprintf("(%v)", col.Length) + } + } + buf.Myprintf(")") + if opts.Using != "" { + buf.Myprintf(" using %s", opts.Using) + } + if opts.Comment != "" { + buf.Myprintf(" comment %s", opts.Comment) + } + if opts.BlockSize != nil { + buf.Myprintf(" key_block_size = %v", opts.BlockSize) + } + if opts.Parser != "" { + buf.Myprintf(" WITH PARSER %s", opts.Parser) + } + if opts.Algorithm != "" { + buf.Myprintf(" algorithm = %s", opts.Algorithm) + } + if opts.Lock != "" { + buf.Myprintf(" lock = %s", opts.Lock) + } +} + +// WalkSubtree walks the nodes of the subtree. +func (opts *IndexOptions) WalkSubtree(visit Visit) error { + if opts == nil { + return nil + } + + for _, n := range opts.Columns { + if err := Walk(visit, n.Column); err != nil { + return err + } + } + return nil +} + +// CheckIndexLock use to check if the string value matches a supported value. +// Supported values: default, exclusive, none, shared. +func CheckIndexLock(lock string) bool { + switch strings.ToLower(lock) { + case "default", "exclusive", "none", "shared": + return true + } + return false +} + +// CheckIndexAlgorithm use to check if the string value matches a supported value. +// Supported values: inplace, copy, default. +func CheckIndexAlgorithm(algorithm string) bool { + switch strings.ToLower(algorithm) { + case "copy", "default", "inplace": + return true + } + return false +} + // TableSpec describes the structure of a table from a CREATE TABLE statement type TableSpec struct { Columns []*ColumnDefinition @@ -1038,27 +1183,21 @@ func (ct *ColumnType) WalkSubtree(visit Visit) error { // IndexDefinition describes an index in a CREATE TABLE statement type IndexDefinition struct { - Info *IndexInfo - Columns []*IndexColumn + Type string + Name ColIdent + Opts *IndexOptions + Primary bool + Unique bool } // Format formats the node. func (idx *IndexDefinition) Format(buf *TrackedBuffer) { - buf.Myprintf("%v (", idx.Info) - for i, col := range idx.Columns { - if i != 0 { - buf.Myprintf(", `%s`", col.Column.String()) - } else { - buf.Myprintf("`%s`", col.Column.String()) - } - if col.Length != nil { - buf.Myprintf("(%v)", col.Length) - } - } - buf.Myprintf(")") - if idx.Info.Fulltext { - buf.Myprintf(" WITH PARSER ngram") + if idx.Primary { + buf.Myprintf("%s", idx.Type) + } else { + buf.Myprintf("%s `%v`", idx.Type, idx.Name) } + buf.Myprintf(" %v", idx.Opts) } // WalkSubtree walks the nodes of the subtree. @@ -1066,37 +1205,7 @@ func (idx *IndexDefinition) WalkSubtree(visit Visit) error { if idx == nil { return nil } - - for _, n := range idx.Columns { - if err := Walk(visit, n.Column); err != nil { - return err - } - } - - return nil -} - -// IndexInfo describes the name and type of an index in a CREATE TABLE statement -type IndexInfo struct { - Type string - Name ColIdent - Primary bool - Unique bool - Fulltext bool -} - -// Format formats the node. -func (ii *IndexInfo) Format(buf *TrackedBuffer) { - if ii.Primary { - buf.Myprintf("%s", ii.Type) - } else { - buf.Myprintf("%s `%v`", ii.Type, ii.Name) - } -} - -// WalkSubtree walks the nodes of the subtree. -func (ii *IndexInfo) WalkSubtree(visit Visit) error { - return Walk(visit, ii.Name) + return Walk(visit, idx.Opts) } // IndexColumn describes a column in an index definition with optional length diff --git a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ddl_test.go b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ddl_test.go index 936dcd0b..04d30676 100644 --- a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ddl_test.go +++ b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ddl_test.go @@ -483,17 +483,23 @@ func TestDDL1(t *testing.T) { ")", }, - // Fulltext. + // TODO: SPATIAL INDEX only support Spatial Data Types, now radon donot support. { input: "create table t (\n" + - " id INT PRIMARY KEY,\n" + + " id INT,\n" + " title VARCHAR(200),\n" + - " FULLTEXT KEY ngram_idx(title,body) /*!50100 WITH PARSER `ngram` */ \n" + + " gis int,\n" + + " UNIQUE KEY id_idx(id) using btree comment 'a',\n" + + " FULLTEXT INDEX ngram_idx(title) WITH PARSER ngram,\n" + + " SPATIAL INDEX gis_idx(gis) key_block_size=10\n" + ")", output: "create table t (\n" + - " `id` int primary key,\n" + + " `id` int,\n" + " `title` varchar(200),\n" + - " fulltext key `ngram_idx` (`title`, `body`) WITH PARSER ngram\n" + + " `gis` int,\n" + + " unique key `id_idx` (`id`) using btree comment 'a',\n" + + " fulltext index `ngram_idx` (`title`) WITH PARSER ngram,\n" + + " spatial index `gis_idx` (`gis`) key_block_size = 10\n" + ")", }, @@ -681,28 +687,24 @@ func TestDDL1(t *testing.T) { // Index. { - input: "create index idx on test(a,b)", - output: "create index idx on test", + input: "create index idx on test(a,b) using hash comment 'c' lock=EXCLUSIVE", + output: "create index idx on test(`a`, `b`) using hash comment 'c' lock = EXCLUSIVE", }, { input: "drop index idx on test", output: "drop index idx on test", }, { - input: "create unique index a on b", - output: "create index a on b", - }, - { - input: "create unique index a on b(foo)", - output: "create index a on b", + input: "create unique index a on b(foo) using btree key_block_size=10 algorithm=copy", + output: "create unique index a on b(`foo`) using btree key_block_size = 10 algorithm = copy", }, { - input: "create fulltext index a on b(foo)", - output: "create index a on b", + input: "create fulltext index a on b(foo) with parser ngram comment 'c' lock=none algorithm=inplace", + output: "create fulltext index a on b(`foo`) comment 'c' WITH PARSER ngram algorithm = inplace lock = none", }, { - input: "create spatial index a on b(foo)", - output: "create index a on b", + input: "create spatial index a on b(foo) comment 'c' key_block_size=10 algorithm=default lock=shared", + output: "create spatial index a on b(`foo`) comment 'c' key_block_size = 10 algorithm = default lock = shared", }, // Add column. @@ -958,6 +960,26 @@ func TestDDL1ParseError(t *testing.T) { ") single engine=tokudb comment 'str' charset \"utf8\" partition by hash(id)", output: "SINGLE or GLOBAL should not be used simultaneously with PARTITION at position 140", }, + { // create index without index columns. + input: "create unique index a on b", + output: "syntax error at position 28", + }, + { // create index lock type error. + input: "create index idx on t(a,b) lock=d", + output: "unknown lock type at position 34 near 'd'", + }, + { // create index algorithm type error. + input: "create index idx on t(a,b) algorithm=d", + output: "unknown algorithm type at position 39 near 'd'", + }, + { // create index in the wrong order. + input: "create index idx on t(a,b) algorithm=default using btree", + output: "syntax error at position 51 near 'using'", + }, + { // create index use wrong options. + input: "create unique index idx on t(a,b) with parser ngram", + output: "syntax error at position 39 near 'with'", + }, } for _, ddl := range invalidSQL { diff --git a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/parse_test.go b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/parse_test.go index c3897319..621b61d0 100644 --- a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/parse_test.go +++ b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/parse_test.go @@ -16,8 +16,10 @@ limitations under the License. package sqlparser -import "strings" -import "testing" +import ( + "strings" + "testing" +) func TestValid(t *testing.T) { validSQL := []struct { @@ -655,8 +657,8 @@ func TestValid(t *testing.T) { input: "create table if not exists a (\n\t`a` int\n)", output: "create table if not exists a (\n\t`a` int\n)", }, { - input: "create index a on b", - output: "create index a on b", + input: "create index a on b(c)", + output: "create index a on b(`c`)", }, { input: "drop table a", output: "drop table a", @@ -797,8 +799,8 @@ func TestCaseSensitivity(t *testing.T) { }{{ input: "create table A (\n\t`B` int\n)", }, { - input: "create index b on A", - output: "create index b on A", + input: "create index b on A(B)", + output: "create index b on A(`B`)", }, { input: "alter table A foo", output: "alter table A", diff --git a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/sql.go b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/sql.go index 5bed9b6c..558a8f1e 100644 --- a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/sql.go +++ b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/sql.go @@ -89,9 +89,10 @@ type yySymType struct { LengthScaleOption LengthScaleOption columnDefinition *ColumnDefinition indexDefinition *IndexDefinition - indexInfo *IndexInfo indexColumn *IndexColumn indexColumns []*IndexColumn + indexOptionList IndexOptionList + indexOption *IndexOption columnOptionListOpt ColumnOptionListOpt columnOptionList ColumnOptionList columnOption *ColumnOption @@ -118,208 +119,212 @@ const BY = 57357 const LIMIT = 57358 const OFFSET = 57359 const FOR = 57360 -const FULLTEXT = 57361 -const PARSER = 57362 -const NGRAM = 57363 -const UNIQUE = 57364 -const KEY = 57365 -const ALL = 57366 -const DISTINCT = 57367 -const AS = 57368 -const EXISTS = 57369 -const ASC = 57370 -const DESC = 57371 -const INTO = 57372 -const DUPLICATE = 57373 -const DEFAULT = 57374 -const SET = 57375 -const LOCK = 57376 -const FULL = 57377 -const CHECKSUM = 57378 -const VALUES = 57379 -const LAST_INSERT_ID = 57380 -const NEXT = 57381 -const VALUE = 57382 -const SHARE = 57383 -const MODE = 57384 -const SQL_NO_CACHE = 57385 -const SQL_CACHE = 57386 -const JOIN = 57387 -const STRAIGHT_JOIN = 57388 -const LEFT = 57389 -const RIGHT = 57390 -const INNER = 57391 -const OUTER = 57392 -const CROSS = 57393 -const NATURAL = 57394 -const USE = 57395 -const FORCE = 57396 -const ON = 57397 -const ID = 57398 -const HEX = 57399 -const STRING = 57400 -const INTEGRAL = 57401 -const FLOAT = 57402 -const HEXNUM = 57403 -const VALUE_ARG = 57404 -const LIST_ARG = 57405 -const COMMENT = 57406 -const COMMENT_KEYWORD = 57407 -const NULL = 57408 -const TRUE = 57409 -const FALSE = 57410 -const OFF = 57411 -const OR = 57412 -const AND = 57413 -const NOT = 57414 -const BETWEEN = 57415 -const CASE = 57416 -const WHEN = 57417 -const THEN = 57418 -const ELSE = 57419 -const END = 57420 -const LE = 57421 -const GE = 57422 -const NE = 57423 -const NULL_SAFE_EQUAL = 57424 -const IS = 57425 -const LIKE = 57426 -const REGEXP = 57427 -const IN = 57428 -const SHIFT_LEFT = 57429 -const SHIFT_RIGHT = 57430 -const DIV = 57431 -const MOD = 57432 -const UNARY = 57433 -const COLLATE = 57434 -const BINARY = 57435 -const INTERVAL = 57436 -const JSON_EXTRACT_OP = 57437 -const JSON_UNQUOTE_EXTRACT_OP = 57438 -const CREATE = 57439 -const ALTER = 57440 -const DROP = 57441 -const RENAME = 57442 -const ANALYZE = 57443 -const ADD = 57444 -const MODIFY = 57445 -const TABLE = 57446 -const INDEX = 57447 -const VIEW = 57448 -const TO = 57449 -const IGNORE = 57450 -const IF = 57451 -const USING = 57452 -const PRIMARY = 57453 -const COLUMN = 57454 -const SHOW = 57455 -const DESCRIBE = 57456 -const EXPLAIN = 57457 -const DATE = 57458 -const ESCAPE = 57459 -const REPAIR = 57460 -const OPTIMIZE = 57461 -const TRUNCATE = 57462 -const BIT = 57463 -const TINYINT = 57464 -const SMALLINT = 57465 -const MEDIUMINT = 57466 -const INT = 57467 -const INTEGER = 57468 -const BIGINT = 57469 -const INTNUM = 57470 -const REAL = 57471 -const DOUBLE = 57472 -const FLOAT_TYPE = 57473 -const DECIMAL = 57474 -const NUMERIC = 57475 -const TIME = 57476 -const TIMESTAMP = 57477 -const DATETIME = 57478 -const YEAR = 57479 -const CHAR = 57480 -const VARCHAR = 57481 -const BOOL = 57482 -const CHARACTER = 57483 -const VARBINARY = 57484 -const NCHAR = 57485 -const CHARSET = 57486 -const TEXT = 57487 -const TINYTEXT = 57488 -const MEDIUMTEXT = 57489 -const LONGTEXT = 57490 -const BLOB = 57491 -const TINYBLOB = 57492 -const MEDIUMBLOB = 57493 -const LONGBLOB = 57494 -const JSON = 57495 -const ENUM = 57496 -const NULLX = 57497 -const AUTO_INCREMENT = 57498 -const APPROXNUM = 57499 -const SIGNED = 57500 -const UNSIGNED = 57501 -const ZEROFILL = 57502 -const DATABASES = 57503 -const TABLES = 57504 -const WARNINGS = 57505 -const VARIABLES = 57506 -const EVENTS = 57507 -const BINLOG = 57508 -const GTID = 57509 -const STATUS = 57510 -const COLUMNS = 57511 -const FIELDS = 57512 -const CURRENT_TIMESTAMP = 57513 -const DATABASE = 57514 -const CURRENT_DATE = 57515 -const CURRENT_TIME = 57516 -const LOCALTIME = 57517 -const LOCALTIMESTAMP = 57518 -const UTC_DATE = 57519 -const UTC_TIME = 57520 -const UTC_TIMESTAMP = 57521 -const REPLACE = 57522 -const CONVERT = 57523 -const CAST = 57524 -const GROUP_CONCAT = 57525 -const SEPARATOR = 57526 -const MATCH = 57527 -const AGAINST = 57528 -const BOOLEAN = 57529 -const LANGUAGE = 57530 -const WITH = 57531 -const QUERY = 57532 -const EXPANSION = 57533 -const UNUSED = 57534 -const PARTITION = 57535 -const PARTITIONS = 57536 -const HASH = 57537 -const LIST = 57538 -const XA = 57539 -const DISTRIBUTED = 57540 -const ENGINES = 57541 -const VERSIONS = 57542 -const PROCESSLIST = 57543 -const QUERYZ = 57544 -const TXNZ = 57545 -const KILL = 57546 -const ENGINE = 57547 -const SINGLE = 57548 -const BEGIN = 57549 -const START = 57550 -const TRANSACTION = 57551 -const COMMIT = 57552 -const ROLLBACK = 57553 -const GLOBAL = 57554 -const SESSION = 57555 -const NAMES = 57556 -const RADON = 57557 -const ATTACH = 57558 -const ATTACHLIST = 57559 -const DETACH = 57560 -const RESHARD = 57561 -const CLEANUP = 57562 +const ALGORITHM = 57361 +const BTREE = 57362 +const FULLTEXT = 57363 +const KEY_BLOCK_SIZE = 57364 +const NGRAM = 57365 +const PARSER = 57366 +const SPATIAL = 57367 +const UNIQUE = 57368 +const KEY = 57369 +const ALL = 57370 +const DISTINCT = 57371 +const AS = 57372 +const EXISTS = 57373 +const ASC = 57374 +const DESC = 57375 +const INTO = 57376 +const DUPLICATE = 57377 +const DEFAULT = 57378 +const SET = 57379 +const LOCK = 57380 +const FULL = 57381 +const CHECKSUM = 57382 +const VALUES = 57383 +const LAST_INSERT_ID = 57384 +const NEXT = 57385 +const VALUE = 57386 +const SHARE = 57387 +const MODE = 57388 +const SQL_NO_CACHE = 57389 +const SQL_CACHE = 57390 +const JOIN = 57391 +const STRAIGHT_JOIN = 57392 +const LEFT = 57393 +const RIGHT = 57394 +const INNER = 57395 +const OUTER = 57396 +const CROSS = 57397 +const NATURAL = 57398 +const USE = 57399 +const FORCE = 57400 +const ON = 57401 +const ID = 57402 +const HEX = 57403 +const STRING = 57404 +const INTEGRAL = 57405 +const FLOAT = 57406 +const HEXNUM = 57407 +const VALUE_ARG = 57408 +const LIST_ARG = 57409 +const COMMENT = 57410 +const COMMENT_KEYWORD = 57411 +const NULL = 57412 +const TRUE = 57413 +const FALSE = 57414 +const OFF = 57415 +const OR = 57416 +const AND = 57417 +const NOT = 57418 +const BETWEEN = 57419 +const CASE = 57420 +const WHEN = 57421 +const THEN = 57422 +const ELSE = 57423 +const END = 57424 +const LE = 57425 +const GE = 57426 +const NE = 57427 +const NULL_SAFE_EQUAL = 57428 +const IS = 57429 +const LIKE = 57430 +const REGEXP = 57431 +const IN = 57432 +const SHIFT_LEFT = 57433 +const SHIFT_RIGHT = 57434 +const DIV = 57435 +const MOD = 57436 +const UNARY = 57437 +const COLLATE = 57438 +const BINARY = 57439 +const INTERVAL = 57440 +const JSON_EXTRACT_OP = 57441 +const JSON_UNQUOTE_EXTRACT_OP = 57442 +const CREATE = 57443 +const ALTER = 57444 +const DROP = 57445 +const RENAME = 57446 +const ANALYZE = 57447 +const ADD = 57448 +const MODIFY = 57449 +const TABLE = 57450 +const INDEX = 57451 +const VIEW = 57452 +const TO = 57453 +const IGNORE = 57454 +const IF = 57455 +const USING = 57456 +const PRIMARY = 57457 +const COLUMN = 57458 +const SHOW = 57459 +const DESCRIBE = 57460 +const EXPLAIN = 57461 +const DATE = 57462 +const ESCAPE = 57463 +const REPAIR = 57464 +const OPTIMIZE = 57465 +const TRUNCATE = 57466 +const BIT = 57467 +const TINYINT = 57468 +const SMALLINT = 57469 +const MEDIUMINT = 57470 +const INT = 57471 +const INTEGER = 57472 +const BIGINT = 57473 +const INTNUM = 57474 +const REAL = 57475 +const DOUBLE = 57476 +const FLOAT_TYPE = 57477 +const DECIMAL = 57478 +const NUMERIC = 57479 +const TIME = 57480 +const TIMESTAMP = 57481 +const DATETIME = 57482 +const YEAR = 57483 +const CHAR = 57484 +const VARCHAR = 57485 +const BOOL = 57486 +const CHARACTER = 57487 +const VARBINARY = 57488 +const NCHAR = 57489 +const CHARSET = 57490 +const TEXT = 57491 +const TINYTEXT = 57492 +const MEDIUMTEXT = 57493 +const LONGTEXT = 57494 +const BLOB = 57495 +const TINYBLOB = 57496 +const MEDIUMBLOB = 57497 +const LONGBLOB = 57498 +const JSON = 57499 +const ENUM = 57500 +const NULLX = 57501 +const AUTO_INCREMENT = 57502 +const APPROXNUM = 57503 +const SIGNED = 57504 +const UNSIGNED = 57505 +const ZEROFILL = 57506 +const DATABASES = 57507 +const TABLES = 57508 +const WARNINGS = 57509 +const VARIABLES = 57510 +const EVENTS = 57511 +const BINLOG = 57512 +const GTID = 57513 +const STATUS = 57514 +const COLUMNS = 57515 +const FIELDS = 57516 +const CURRENT_TIMESTAMP = 57517 +const DATABASE = 57518 +const CURRENT_DATE = 57519 +const CURRENT_TIME = 57520 +const LOCALTIME = 57521 +const LOCALTIMESTAMP = 57522 +const UTC_DATE = 57523 +const UTC_TIME = 57524 +const UTC_TIMESTAMP = 57525 +const REPLACE = 57526 +const CONVERT = 57527 +const CAST = 57528 +const GROUP_CONCAT = 57529 +const SEPARATOR = 57530 +const MATCH = 57531 +const AGAINST = 57532 +const BOOLEAN = 57533 +const LANGUAGE = 57534 +const WITH = 57535 +const QUERY = 57536 +const EXPANSION = 57537 +const UNUSED = 57538 +const PARTITION = 57539 +const PARTITIONS = 57540 +const HASH = 57541 +const LIST = 57542 +const XA = 57543 +const DISTRIBUTED = 57544 +const ENGINES = 57545 +const VERSIONS = 57546 +const PROCESSLIST = 57547 +const QUERYZ = 57548 +const TXNZ = 57549 +const KILL = 57550 +const ENGINE = 57551 +const SINGLE = 57552 +const BEGIN = 57553 +const START = 57554 +const TRANSACTION = 57555 +const COMMIT = 57556 +const ROLLBACK = 57557 +const GLOBAL = 57558 +const SESSION = 57559 +const NAMES = 57560 +const RADON = 57561 +const ATTACH = 57562 +const ATTACHLIST = 57563 +const DETACH = 57564 +const RESHARD = 57565 +const CLEANUP = 57566 var yyToknames = [...]string{ "$end", @@ -340,9 +345,13 @@ var yyToknames = [...]string{ "LIMIT", "OFFSET", "FOR", + "ALGORITHM", + "BTREE", "FULLTEXT", - "PARSER", + "KEY_BLOCK_SIZE", "NGRAM", + "PARSER", + "SPATIAL", "UNIQUE", "KEY", "ALL", @@ -567,7 +576,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line sql.y:3671 +//line sql.y:3841 //line yacctab:1 var yyExca = [...]int{ @@ -578,753 +587,786 @@ var yyExca = [...]int{ 5, 27, -2, 4, -1, 180, - 83, 675, + 87, 696, -2, 40, -1, 185, - 83, 552, - -2, 500, - -1, 412, - 111, 536, - -2, 532, - -1, 413, - 111, 537, - -2, 533, - -1, 440, - 158, 58, - 161, 58, - -2, 71, - -1, 479, - 1, 52, - 238, 52, - -2, 58, - -1, 594, + 87, 571, + -2, 520, + -1, 416, + 115, 555, + -2, 551, + -1, 417, + 115, 556, + -2, 552, + -1, 444, + 162, 81, + 165, 81, + -2, 92, + -1, 483, + 1, 75, + 242, 75, + -2, 81, + -1, 600, 5, 27, - -2, 476, - -1, 617, - 158, 58, - 161, 58, - -2, 72, - -1, 684, - 1, 53, - 238, 53, - -2, 58, - -1, 769, - 111, 539, - -2, 535, - -1, 899, + -2, 496, + -1, 623, + 162, 81, + 165, 81, + -2, 93, + -1, 690, + 1, 76, + 242, 76, + -2, 81, + -1, 777, + 115, 558, + -2, 554, + -1, 909, 5, 28, - -2, 355, - -1, 923, + -2, 375, + -1, 933, 5, 28, - -2, 477, - -1, 1011, + -2, 497, + -1, 1022, 5, 27, - -2, 479, - -1, 1115, + -2, 499, + -1, 1145, 5, 28, - -2, 480, + -2, 500, } const yyPrivate = 57344 -const yyLast = 6718 +const yyLast = 7049 var yyAct = [...]int{ - 413, 960, 366, 1120, 1154, 500, 1056, 1002, 597, 1070, - 667, 943, 798, 680, 607, 390, 936, 962, 388, 1001, - 765, 753, 159, 1067, 799, 884, 981, 184, 892, 554, - 3, 74, 768, 310, 66, 795, 598, 763, 140, 311, - 56, 760, 779, 730, 710, 503, 816, 611, 819, 72, - 642, 421, 636, 685, 626, 618, 493, 364, 178, 676, - 168, 368, 355, 55, 140, 565, 74, 415, 313, 149, - 151, 150, 152, 153, 146, 1079, 307, 613, 614, 1121, - 158, 308, 1168, 181, 183, 1153, 1167, 1142, 1165, 143, - 1081, 1152, 994, 762, 630, 1141, 1050, 141, 947, 117, - 118, 831, 832, 833, 337, 707, 326, 325, 330, 834, - 841, 660, 361, 391, 50, 332, 333, 821, 855, 176, - 820, 140, 140, 966, 668, 1088, 1045, 1043, 867, 866, - 624, 865, 320, 1110, 1112, 315, 116, 142, 140, 145, - 505, 147, 148, 864, 154, 155, 156, 157, 1134, 639, - 1133, 862, 701, 140, 505, 1132, 316, 24, 51, 26, - 27, 1077, 639, 318, 50, 347, 349, 119, 821, 137, - 700, 820, 164, 140, 327, 902, 140, 121, 74, 120, - 46, 358, 416, 74, 28, 60, 319, 36, 544, 545, - 1035, 509, 508, 926, 418, 181, 183, 703, 826, 898, - 896, 434, 808, 417, 37, 1111, 699, 53, 510, 353, - 553, 62, 63, 64, 65, 661, 136, 428, 951, 612, - 532, 780, 328, 329, 668, 334, 335, 336, 835, 338, - 339, 340, 341, 342, 144, 629, 522, 1158, 504, 532, - 135, 344, 507, 510, 346, 903, 817, 1140, 638, 350, - 861, 352, 504, 696, 694, 690, 863, 693, 695, 580, - 581, 638, 712, 348, 348, 30, 31, 32, 952, 34, - 523, 524, 525, 526, 527, 528, 529, 522, 50, 807, - 532, 35, 47, 39, 625, 628, 48, 49, 33, 982, - 1032, 627, 508, 432, 996, 123, 698, 431, 480, 656, - 655, 512, 130, 830, 509, 508, 322, 423, 510, 652, - 737, 697, 53, 984, 780, 140, 909, 1030, 140, 140, - 140, 510, 733, 140, 735, 736, 734, 140, 140, 986, - 1118, 990, 658, 985, 1025, 983, 692, 509, 508, 115, - 988, 511, 711, 1024, 998, 657, 650, 702, 52, 941, - 987, 419, 651, 853, 510, 989, 991, 509, 508, 124, - 691, 134, 132, 852, 122, 38, 129, 1031, 904, 501, - 842, 345, 40, 314, 510, 41, 42, 1091, 44, 43, - 937, 513, 938, 45, 530, 531, 523, 524, 525, 526, - 527, 528, 529, 522, 496, 1023, 532, 125, 133, 127, - 128, 131, 172, 509, 508, 654, 525, 526, 527, 528, - 529, 522, 501, 935, 532, 509, 508, 871, 870, 563, - 510, 74, 723, 725, 726, 542, 140, 851, 724, 140, - 599, 74, 510, 877, 878, 879, 754, 838, 755, 586, - 582, 497, 313, 498, 317, 499, 600, 502, 181, 183, - 653, 1028, 1137, 610, 594, 1085, 604, 1161, 354, 1135, - 354, 602, 1054, 354, 669, 670, 671, 567, 568, 569, - 570, 571, 572, 573, 968, 631, 541, 543, 1027, 965, - 584, 946, 546, 547, 548, 549, 550, 551, 140, 609, - 1021, 1020, 682, 890, 354, 140, 140, 957, 956, 954, - 953, 354, 552, 945, 140, 555, 556, 557, 558, 559, - 560, 561, 706, 564, 566, 566, 566, 566, 566, 566, - 566, 566, 574, 575, 576, 577, 925, 354, 22, 720, - 721, 731, 727, 728, 686, 678, 679, 827, 595, 1124, - 521, 520, 530, 531, 523, 524, 525, 526, 527, 528, - 529, 522, 74, 615, 532, 380, 379, 381, 382, 383, - 384, 811, 756, 481, 385, 74, 716, 354, 441, 440, - 759, 767, 183, 24, 321, 1084, 501, 732, 1083, 774, - 775, 769, 948, 781, 796, 771, 806, 163, 716, 708, - 709, 806, 921, 1054, 715, 599, 74, 24, 955, 416, - 592, 797, 757, 758, 593, 890, 57, 608, 704, 800, - 430, 600, 805, 777, 804, 918, 313, 784, 578, 53, - 662, 681, 67, 53, 823, 802, 677, 729, 583, 810, - 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, - 748, 749, 750, 751, 752, 788, 787, 53, 809, 890, - 772, 773, 1125, 806, 776, 814, 672, 50, 165, 1128, - 590, 796, 890, 688, 663, 664, 665, 666, 783, 555, - 785, 786, 818, 815, 843, 844, 822, 487, 1131, 673, - 674, 675, 24, 794, 1130, 1100, 1103, 1099, 825, 140, - 828, 1104, 829, 520, 530, 531, 523, 524, 525, 526, - 527, 528, 529, 522, 1159, 140, 532, 801, 53, 50, - 717, 1101, 1151, 1010, 876, 845, 1102, 847, 848, 849, - 1105, 719, 1062, 1063, 169, 170, 422, 812, 813, 1150, - 793, 792, 53, 872, 630, 856, 859, 874, 854, 686, - 420, 1058, 1061, 1062, 1063, 1059, 356, 1060, 1064, 1033, - 731, 1129, 940, 846, 1058, 1061, 1062, 1063, 1059, 873, - 1060, 1064, 357, 437, 770, 427, 74, 389, 919, 687, - 486, 1066, 166, 167, 422, 1008, 782, 837, 880, 836, - 824, 1138, 1122, 791, 894, 160, 1094, 858, 1093, 439, - 140, 790, 438, 161, 57, 1053, 732, 608, 494, 495, - 490, 910, 175, 1074, 869, 138, 839, 506, 59, 599, - 61, 54, 1, 313, 313, 1119, 875, 684, 683, 641, - 640, 908, 501, 942, 74, 600, 930, 183, 929, 633, - 617, 174, 931, 920, 616, 309, 769, 632, 850, 647, - 646, 645, 944, 928, 643, 840, 927, 659, 881, 882, - 883, 1029, 932, 933, 1026, 889, 1078, 623, 74, 622, - 140, 621, 620, 619, 648, 649, 939, 644, 313, 444, - 445, 906, 443, 447, 446, 442, 183, 177, 1065, 1069, - 891, 897, 69, 860, 689, 540, 789, 182, 174, 174, - 433, 949, 950, 803, 74, 579, 414, 1092, 1052, 74, - 967, 969, 958, 959, 907, 174, 562, 970, 778, 367, - 722, 378, 894, 375, 767, 183, 980, 183, 377, 140, - 174, 376, 976, 585, 769, 992, 74, 74, 975, 978, - 997, 993, 999, 591, 514, 74, 1018, 800, 365, 979, - 174, 359, 1000, 174, 1013, 1014, 1009, 995, 1109, 1004, - 1015, 484, 331, 183, 1011, 126, 1019, 424, 964, 1057, - 1055, 1003, 917, 489, 1049, 1123, 887, 589, 25, 58, - 888, 961, 171, 14, 21, 15, 13, 12, 29, 10, - 1005, 899, 900, 901, 9, 8, 905, 7, 6, 5, - 4, 911, 162, 912, 913, 914, 915, 23, 972, 973, - 1041, 2, 20, 19, 18, 17, 16, 140, 140, 11, - 0, 922, 923, 924, 0, 0, 0, 0, 0, 1051, - 0, 0, 74, 1075, 934, 0, 800, 0, 0, 0, - 0, 0, 1006, 1082, 0, 801, 74, 0, 1012, 0, - 944, 0, 1076, 0, 0, 0, 0, 0, 961, 0, - 1087, 0, 0, 980, 183, 140, 140, 140, 140, 0, - 0, 0, 0, 1096, 0, 1098, 140, 0, 1005, 140, - 0, 1106, 140, 0, 1095, 0, 1097, 599, 74, 74, - 1117, 1113, 479, 1114, 1034, 174, 174, 174, 0, 0, - 488, 0, 1007, 600, 174, 174, 1116, 183, 771, 974, - 1127, 0, 0, 0, 0, 0, 0, 0, 1048, 0, - 0, 0, 0, 0, 1126, 501, 1005, 1005, 1005, 1005, - 1068, 0, 0, 0, 801, 0, 50, 0, 0, 0, - 1005, 1080, 0, 0, 0, 0, 0, 74, 1149, 1148, - 0, 0, 1016, 1017, 0, 0, 74, 74, 74, 1143, - 1144, 1156, 1157, 0, 0, 183, 173, 0, 0, 0, - 1022, 1089, 74, 0, 1155, 1155, 1155, 0, 1006, 1006, - 1006, 1006, 0, 0, 1164, 0, 0, 0, 0, 0, - 1166, 0, 1068, 0, 0, 0, 0, 0, 0, 1036, - 0, 1037, 961, 174, 0, 601, 603, 0, 1038, 1039, - 0, 1040, 1046, 1047, 1042, 0, 1044, 0, 0, 0, - 0, 0, 0, 323, 324, 0, 0, 521, 520, 530, - 531, 523, 524, 525, 526, 527, 528, 529, 522, 0, - 343, 532, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 351, 1145, 1146, 1147, 0, - 961, 0, 0, 0, 0, 174, 0, 885, 0, 1090, - 0, 0, 174, 174, 0, 426, 0, 0, 429, 0, - 0, 174, 348, 0, 0, 0, 0, 1108, 0, 516, - 0, 519, 0, 0, 0, 0, 1115, 533, 534, 535, - 536, 537, 538, 539, 0, 517, 518, 515, 521, 520, - 530, 531, 523, 524, 525, 526, 527, 528, 529, 522, - 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, - 766, 603, 0, 0, 766, 766, 0, 0, 766, 1136, - 0, 0, 0, 1139, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 766, 766, 766, 0, 95, 0, 88, - 0, 0, 0, 971, 0, 0, 0, 766, 0, 0, - 601, 82, 0, 0, 1160, 0, 1162, 1163, 92, 0, - 0, 98, 93, 521, 520, 530, 531, 523, 524, 525, - 526, 527, 528, 529, 522, 0, 0, 532, 0, 73, - 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, + 417, 1044, 1216, 1029, 1160, 1178, 1150, 824, 1185, 1034, + 394, 506, 392, 1159, 603, 1077, 686, 1013, 370, 560, + 3, 673, 1091, 806, 992, 946, 761, 1154, 807, 1012, + 768, 613, 1088, 1033, 181, 894, 66, 184, 99, 159, + 776, 604, 902, 787, 141, 56, 312, 617, 738, 771, + 718, 509, 313, 827, 803, 648, 632, 691, 624, 419, + 359, 425, 178, 168, 99, 499, 189, 770, 315, 682, + 158, 55, 368, 636, 146, 641, 1151, 309, 183, 1208, + 99, 99, 310, 1100, 142, 1236, 145, 1215, 147, 148, + 1180, 154, 155, 156, 157, 619, 620, 99, 149, 151, + 150, 152, 153, 1235, 1195, 143, 372, 1233, 1214, 630, + 1005, 1071, 330, 70, 958, 395, 50, 71, 73, 1194, + 341, 76, 77, 715, 329, 849, 666, 176, 332, 333, + 60, 338, 339, 340, 1118, 342, 343, 344, 345, 346, + 1181, 829, 773, 334, 828, 571, 977, 839, 840, 841, + 336, 337, 863, 99, 674, 842, 62, 63, 64, 65, + 351, 353, 1066, 95, 1064, 877, 50, 876, 875, 511, + 1180, 1140, 1142, 99, 164, 324, 99, 709, 189, 317, + 331, 75, 874, 189, 422, 1098, 1172, 94, 348, 78, + 183, 350, 645, 645, 993, 438, 354, 322, 356, 708, + 1171, 872, 829, 1170, 511, 828, 912, 618, 421, 320, + 319, 318, 96, 80, 635, 79, 1056, 72, 995, 936, + 1181, 908, 515, 514, 550, 551, 711, 906, 833, 538, + 1050, 816, 667, 674, 997, 707, 1001, 559, 996, 516, + 994, 432, 82, 1141, 122, 999, 101, 962, 642, 89, + 144, 1220, 643, 640, 645, 998, 528, 1048, 513, 538, + 1000, 1002, 109, 631, 634, 352, 352, 510, 720, 119, + 633, 1193, 125, 120, 843, 1207, 913, 514, 1189, 1182, + 50, 516, 704, 702, 698, 68, 701, 703, 586, 587, + 314, 644, 644, 516, 914, 518, 423, 963, 825, 105, + 871, 873, 510, 362, 420, 435, 83, 1049, 93, 91, + 815, 81, 436, 88, 745, 1007, 484, 99, 788, 515, + 514, 323, 99, 99, 99, 706, 1009, 99, 743, 744, + 742, 99, 99, 515, 514, 838, 516, 357, 427, 517, + 705, 515, 514, 1221, 84, 92, 86, 87, 90, 788, + 516, 919, 719, 644, 134, 515, 514, 53, 516, 639, + 515, 514, 1148, 1205, 106, 700, 124, 741, 132, 102, + 316, 1121, 516, 887, 888, 889, 710, 516, 108, 114, + 1043, 1180, 130, 131, 107, 135, 1042, 951, 103, 699, + 861, 121, 503, 129, 504, 947, 505, 948, 508, 860, + 326, 117, 110, 762, 850, 763, 126, 502, 349, 531, + 532, 533, 534, 535, 528, 1041, 128, 538, 113, 945, + 731, 733, 734, 881, 1046, 189, 732, 880, 859, 846, + 99, 1181, 1175, 99, 100, 189, 118, 592, 123, 112, + 133, 1227, 358, 321, 606, 1115, 315, 183, 600, 979, + 605, 1045, 976, 111, 127, 1173, 358, 1103, 1157, 358, + 116, 588, 957, 136, 137, 139, 138, 140, 104, 956, + 610, 1103, 1156, 608, 548, 1103, 1153, 1075, 358, 675, + 676, 677, 547, 549, 1103, 358, 1111, 590, 1103, 1107, + 1103, 1106, 637, 953, 99, 507, 834, 615, 819, 688, + 764, 99, 99, 1103, 1102, 900, 358, 519, 558, 487, + 99, 561, 562, 563, 564, 565, 566, 567, 486, 570, + 572, 572, 572, 572, 572, 572, 572, 572, 580, 581, + 582, 583, 739, 968, 967, 714, 965, 964, 507, 485, + 692, 325, 716, 717, 601, 569, 74, 723, 1110, 684, + 685, 573, 574, 575, 576, 577, 578, 579, 189, 621, + 384, 383, 385, 386, 387, 388, 935, 358, 57, 389, + 767, 189, 183, 724, 358, 445, 444, 959, 804, 616, + 814, 779, 724, 789, 536, 537, 529, 530, 531, 532, + 533, 534, 535, 528, 775, 928, 538, 777, 24, 814, + 931, 24, 189, 1075, 614, 966, 900, 712, 24, 172, + 808, 606, 792, 805, 812, 900, 434, 605, 584, 165, + 53, 810, 315, 765, 766, 668, 687, 1040, 740, 785, + 780, 781, 598, 1021, 784, 813, 599, 662, 661, 826, + 1039, 1036, 67, 830, 795, 1166, 900, 658, 791, 796, + 793, 794, 53, 804, 814, 53, 955, 728, 729, 817, + 735, 736, 53, 802, 954, 50, 952, 683, 678, 696, + 664, 695, 22, 53, 822, 694, 493, 561, 1135, 1169, + 1083, 1084, 823, 663, 656, 669, 670, 671, 672, 1133, + 657, 851, 852, 1131, 1134, 99, 99, 99, 1132, 596, + 679, 680, 681, 837, 507, 1168, 1130, 782, 783, 1225, + 1129, 169, 170, 99, 1213, 809, 832, 50, 835, 836, + 886, 853, 727, 855, 856, 857, 426, 420, 1203, 801, + 800, 163, 1211, 1054, 360, 820, 821, 950, 854, 441, + 424, 431, 868, 660, 636, 929, 864, 692, 862, 693, + 869, 1210, 492, 739, 361, 1087, 426, 818, 1019, 879, + 589, 845, 529, 530, 531, 532, 533, 534, 535, 528, + 844, 885, 538, 883, 189, 1079, 1082, 1083, 1084, 1080, + 831, 1081, 1085, 166, 167, 1167, 904, 1212, 659, 1224, + 160, 890, 1124, 443, 442, 161, 57, 1123, 99, 1074, + 1162, 527, 526, 536, 537, 529, 530, 531, 532, 533, + 534, 535, 528, 614, 500, 538, 799, 501, 496, 175, + 1095, 315, 315, 847, 798, 512, 59, 606, 61, 183, + 918, 54, 1, 605, 1149, 949, 690, 899, 689, 1079, + 1082, 1083, 1084, 1080, 725, 1081, 1085, 647, 646, 740, + 1206, 940, 69, 916, 777, 1177, 938, 941, 1209, 937, + 930, 1179, 1187, 882, 623, 622, 311, 884, 638, 858, + 99, 969, 970, 942, 943, 653, 652, 651, 315, 649, + 848, 665, 1047, 1099, 629, 365, 628, 627, 626, 625, + 654, 907, 655, 650, 448, 449, 447, 451, 778, 960, + 961, 450, 446, 177, 189, 1086, 1090, 901, 870, 189, + 790, 697, 978, 1163, 546, 975, 904, 797, 182, 183, + 437, 183, 811, 585, 980, 418, 1122, 981, 1073, 99, + 917, 920, 568, 786, 371, 730, 189, 189, 990, 1004, + 1003, 775, 808, 991, 777, 189, 987, 989, 1024, 1025, + 986, 382, 507, 189, 1022, 189, 189, 183, 939, 1010, + 1020, 1011, 1006, 379, 381, 1035, 380, 1035, 1035, 591, + 597, 520, 189, 189, 189, 1032, 369, 1026, 363, 1031, + 1139, 971, 972, 973, 1035, 1035, 1035, 1015, 1037, 1038, + 490, 335, 85, 428, 1078, 1076, 1014, 927, 495, 1070, + 393, 1161, 595, 25, 58, 1051, 1052, 1053, 171, 14, + 21, 15, 13, 12, 1062, 29, 10, 9, 99, 99, + 527, 526, 536, 537, 529, 530, 531, 532, 533, 534, + 535, 528, 808, 8, 538, 1016, 7, 189, 97, 6, + 189, 189, 5, 1097, 1017, 1096, 4, 809, 162, 1035, + 1023, 23, 1035, 1035, 2, 20, 19, 189, 18, 17, + 1030, 16, 1008, 11, 174, 0, 0, 0, 0, 183, + 1105, 0, 0, 1108, 1109, 0, 99, 99, 99, 99, + 174, 174, 1117, 0, 0, 0, 0, 99, 0, 0, + 99, 991, 0, 99, 1126, 0, 1128, 174, 0, 189, + 189, 1136, 897, 1147, 189, 1125, 898, 1127, 606, 779, + 1144, 1146, 183, 1152, 605, 1143, 1035, 909, 910, 911, + 0, 1069, 915, 0, 1016, 0, 0, 921, 0, 922, + 923, 924, 925, 1089, 1031, 1155, 1165, 809, 0, 50, + 1158, 0, 1018, 0, 1101, 0, 0, 932, 933, 934, + 0, 0, 1072, 174, 0, 0, 0, 0, 0, 0, + 944, 0, 1184, 0, 0, 1188, 1191, 0, 1186, 1190, + 1183, 0, 0, 174, 0, 189, 174, 0, 1202, 0, + 1201, 1176, 1016, 1016, 1016, 1016, 0, 183, 1204, 1188, + 1191, 1017, 1017, 1017, 1017, 0, 1016, 0, 0, 189, + 189, 189, 1218, 1219, 0, 1089, 173, 0, 0, 1031, + 0, 1217, 1217, 1217, 0, 1030, 0, 0, 1222, 1223, + 0, 0, 327, 328, 1231, 1232, 1059, 1060, 189, 1061, + 0, 1230, 1063, 0, 1065, 0, 0, 985, 0, 347, + 1234, 0, 527, 526, 536, 537, 529, 530, 531, 532, + 533, 534, 535, 528, 0, 0, 538, 0, 0, 552, + 553, 554, 555, 556, 557, 0, 1164, 507, 1104, 0, + 0, 0, 0, 0, 0, 0, 0, 982, 0, 0, + 1027, 1028, 895, 0, 0, 0, 1198, 1199, 1200, 0, + 1030, 0, 0, 0, 0, 355, 0, 527, 526, 536, + 537, 529, 530, 531, 532, 533, 534, 535, 528, 1196, + 1197, 538, 0, 0, 454, 430, 0, 483, 433, 0, + 0, 0, 174, 174, 174, 0, 0, 494, 1057, 0, + 1058, 174, 174, 0, 0, 0, 352, 0, 466, 0, + 0, 1067, 1068, 471, 472, 473, 474, 475, 476, 477, + 0, 478, 479, 480, 481, 482, 467, 468, 469, 470, + 452, 453, 0, 0, 455, 0, 0, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1112, + 1113, 1114, 526, 536, 537, 529, 530, 531, 532, 533, + 534, 535, 528, 0, 0, 538, 737, 0, 1120, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, + 757, 758, 759, 760, 0, 0, 1138, 0, 0, 522, + 174, 525, 607, 609, 0, 1145, 0, 539, 540, 541, + 542, 543, 544, 545, 0, 523, 524, 521, 527, 526, + 536, 537, 529, 530, 531, 532, 533, 534, 535, 528, + 0, 0, 538, 0, 488, 489, 491, 0, 0, 0, + 0, 0, 0, 497, 498, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1174, 0, 0, + 0, 0, 0, 0, 174, 0, 0, 0, 0, 1192, + 896, 174, 174, 0, 24, 0, 0, 0, 0, 0, + 174, 0, 0, 0, 0, 122, 0, 101, 0, 115, + 527, 526, 536, 537, 529, 530, 531, 532, 533, 534, + 535, 528, 0, 109, 538, 0, 0, 0, 0, 0, + 119, 0, 0, 125, 120, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1226, 0, 1228, 1229, 53, 774, + 609, 98, 0, 774, 774, 0, 0, 774, 0, 0, + 105, 0, 602, 0, 0, 0, 0, 0, 0, 0, + 0, 774, 774, 774, 774, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 774, 0, 0, 607, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 134, 0, 0, 0, 891, + 892, 893, 0, 0, 0, 106, 713, 124, 0, 132, + 102, 0, 0, 721, 722, 0, 0, 0, 0, 108, + 114, 0, 726, 130, 131, 107, 135, 0, 0, 103, + 0, 0, 121, 0, 129, 0, 0, 0, 0, 0, + 0, 0, 117, 110, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 128, 0, 113, + 0, 0, 0, 0, 0, 174, 174, 174, 0, 0, + 0, 0, 0, 0, 0, 100, 0, 118, 0, 123, + 112, 133, 0, 174, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 111, 127, 0, 0, 0, 0, + 0, 116, 0, 0, 136, 137, 139, 138, 140, 104, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 983, 984, 0, 0, 0, 774, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 607, 0, 609, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 865, 866, 867, + 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, + 101, 0, 115, 0, 0, 878, 0, 0, 0, 0, + 769, 0, 367, 0, 0, 0, 109, 366, 1055, 0, + 174, 0, 403, 119, 0, 0, 125, 120, 0, 0, + 0, 0, 396, 397, 0, 0, 0, 0, 0, 0, + 0, 53, 0, 0, 416, 384, 383, 385, 386, 387, + 388, 774, 0, 105, 389, 390, 391, 609, 774, 0, + 364, 377, 0, 402, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, + 0, 0, 0, 374, 375, 772, 0, 0, 0, 414, + 926, 376, 0, 0, 373, 378, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1119, 0, 0, 134, 0, + 0, 412, 0, 0, 0, 0, 0, 0, 106, 0, + 124, 0, 132, 102, 0, 0, 0, 0, 0, 0, + 0, 0, 108, 114, 0, 0, 130, 131, 107, 135, + 0, 0, 103, 0, 0, 121, 0, 129, 0, 0, + 0, 0, 0, 0, 0, 117, 110, 0, 0, 0, + 126, 0, 974, 0, 0, 0, 0, 0, 174, 1093, + 128, 0, 113, 404, 413, 410, 411, 408, 409, 407, + 406, 405, 415, 398, 399, 401, 0, 400, 100, 0, + 118, 0, 123, 112, 133, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 111, 127, 0, + 0, 0, 0, 0, 116, 0, 0, 136, 137, 139, + 138, 140, 104, 0, 0, 0, 174, 174, 174, 174, + 0, 0, 0, 0, 0, 0, 0, 1137, 0, 0, + 174, 0, 0, 1093, 0, 0, 607, 292, 277, 237, + 295, 213, 228, 307, 230, 231, 267, 198, 247, 122, + 226, 101, 0, 115, 0, 0, 0, 0, 293, 244, + 0, 216, 191, 223, 192, 214, 241, 109, 212, 279, + 250, 229, 0, 301, 119, 259, 0, 125, 120, 0, + 0, 243, 282, 245, 276, 236, 268, 205, 258, 296, + 227, 264, 0, 0, 0, 188, 0, 0, 0, 0, + 0, 0, 0, 0, 105, 261, 290, 225, 263, 266, + 190, 260, 0, 194, 199, 306, 288, 219, 220, 0, + 0, 0, 0, 0, 0, 0, 242, 246, 273, 234, + 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, + 257, 0, 0, 0, 201, 196, 240, 0, 0, 0, + 204, 0, 218, 274, 0, 0, 0, 283, 235, 134, + 289, 233, 232, 297, 270, 0, 280, 215, 224, 106, + 222, 124, 265, 132, 102, 286, 281, 255, 238, 239, + 195, 0, 272, 108, 114, 211, 262, 130, 131, 107, + 135, 200, 303, 103, 186, 302, 121, 185, 129, 287, + 256, 252, 197, 285, 254, 251, 117, 110, 0, 193, + 0, 126, 294, 308, 210, 284, 0, 0, 0, 0, + 0, 128, 202, 113, 208, 209, 206, 207, 248, 249, + 298, 299, 300, 275, 203, 0, 0, 278, 253, 100, + 0, 118, 305, 123, 112, 133, 0, 0, 0, 0, + 0, 0, 221, 304, 271, 269, 291, 0, 111, 127, + 0, 0, 0, 0, 0, 180, 179, 187, 136, 137, + 139, 138, 140, 104, 292, 277, 237, 295, 213, 228, + 307, 230, 231, 267, 198, 247, 122, 226, 101, 0, + 115, 0, 0, 0, 0, 293, 244, 0, 216, 191, + 223, 192, 214, 241, 109, 212, 279, 250, 229, 0, + 301, 119, 259, 0, 125, 120, 0, 0, 243, 282, + 245, 276, 236, 268, 205, 258, 296, 227, 264, 53, + 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, + 0, 105, 261, 290, 225, 263, 266, 190, 260, 0, + 194, 199, 306, 288, 219, 220, 0, 0, 0, 0, + 0, 0, 0, 242, 246, 273, 234, 0, 0, 0, + 0, 0, 0, 0, 0, 217, 0, 257, 0, 0, + 0, 201, 196, 240, 0, 0, 0, 204, 0, 218, + 274, 0, 0, 0, 283, 235, 134, 289, 233, 232, + 297, 270, 0, 280, 215, 224, 106, 222, 124, 265, + 132, 102, 286, 281, 255, 238, 239, 195, 0, 272, + 108, 114, 211, 262, 130, 131, 107, 135, 200, 303, + 103, 611, 302, 121, 612, 129, 287, 256, 252, 197, + 285, 254, 251, 117, 110, 0, 193, 0, 126, 294, + 308, 210, 284, 0, 0, 0, 0, 0, 128, 202, + 113, 208, 209, 206, 207, 248, 249, 298, 299, 300, + 275, 203, 0, 0, 278, 253, 100, 0, 118, 305, + 123, 112, 133, 0, 0, 0, 0, 0, 0, 221, + 304, 271, 269, 291, 0, 111, 127, 0, 0, 0, + 0, 0, 116, 0, 0, 136, 137, 139, 138, 140, + 104, 292, 277, 237, 295, 213, 228, 307, 230, 231, + 267, 198, 247, 122, 226, 101, 0, 115, 0, 0, + 0, 0, 293, 244, 0, 216, 191, 223, 192, 214, + 241, 109, 212, 279, 250, 229, 0, 301, 119, 259, + 0, 125, 120, 0, 0, 243, 282, 245, 276, 236, + 268, 205, 258, 296, 227, 264, 0, 0, 0, 188, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 261, + 290, 225, 263, 266, 190, 260, 0, 194, 199, 306, + 288, 219, 220, 0, 0, 0, 0, 0, 0, 0, + 242, 246, 273, 234, 0, 0, 0, 0, 0, 0, + 1116, 0, 217, 0, 257, 0, 0, 0, 201, 196, + 240, 0, 0, 0, 204, 0, 218, 274, 0, 0, + 0, 283, 235, 134, 289, 233, 232, 297, 270, 0, + 280, 215, 224, 106, 222, 124, 265, 132, 102, 286, + 281, 255, 238, 239, 195, 0, 272, 108, 114, 211, + 262, 130, 131, 107, 135, 200, 303, 103, 611, 302, + 121, 612, 129, 287, 256, 252, 197, 285, 254, 251, + 117, 110, 0, 193, 0, 126, 294, 308, 210, 284, + 0, 0, 0, 0, 0, 128, 202, 113, 208, 209, + 206, 207, 248, 249, 298, 299, 300, 275, 203, 0, + 0, 278, 253, 100, 0, 118, 305, 123, 112, 133, + 0, 0, 0, 0, 0, 0, 221, 304, 271, 269, + 291, 0, 111, 127, 0, 0, 0, 0, 0, 116, + 0, 0, 136, 137, 139, 138, 140, 104, 292, 277, + 237, 295, 213, 228, 307, 230, 231, 267, 198, 247, + 122, 226, 101, 0, 115, 0, 0, 0, 0, 293, + 244, 0, 216, 191, 223, 192, 214, 241, 109, 212, + 279, 250, 229, 0, 301, 119, 259, 0, 125, 120, + 0, 0, 243, 282, 245, 276, 236, 268, 205, 258, + 296, 227, 264, 0, 0, 0, 416, 0, 0, 0, + 0, 0, 0, 0, 0, 105, 261, 290, 225, 263, + 266, 190, 260, 0, 194, 199, 306, 288, 219, 220, + 0, 0, 0, 0, 0, 0, 0, 242, 246, 273, + 234, 0, 0, 0, 0, 0, 0, 988, 0, 217, + 0, 257, 0, 0, 0, 201, 196, 240, 0, 0, + 0, 204, 0, 218, 274, 0, 0, 0, 283, 235, + 134, 289, 233, 232, 297, 270, 0, 280, 215, 224, + 106, 222, 124, 265, 132, 102, 286, 281, 255, 238, + 239, 195, 0, 272, 108, 114, 211, 262, 130, 131, + 107, 135, 200, 303, 103, 611, 302, 121, 612, 129, + 287, 256, 252, 197, 285, 254, 251, 117, 110, 0, + 193, 0, 126, 294, 308, 210, 284, 0, 0, 0, + 0, 0, 128, 202, 113, 208, 209, 206, 207, 248, + 249, 298, 299, 300, 275, 203, 0, 0, 278, 253, + 100, 0, 118, 305, 123, 112, 133, 0, 0, 0, + 0, 0, 0, 221, 304, 271, 269, 291, 0, 111, + 127, 0, 0, 0, 0, 0, 116, 0, 0, 136, + 137, 139, 138, 140, 104, 292, 277, 237, 295, 213, + 228, 307, 230, 231, 267, 198, 247, 122, 226, 101, + 0, 115, 0, 0, 0, 0, 293, 244, 0, 216, + 191, 223, 192, 214, 241, 109, 212, 279, 250, 229, + 0, 301, 119, 259, 0, 125, 120, 0, 0, 243, + 282, 245, 276, 236, 268, 205, 258, 296, 227, 264, + 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, + 0, 0, 105, 261, 290, 225, 263, 266, 190, 260, + 0, 194, 199, 306, 288, 219, 220, 0, 0, 0, + 0, 0, 0, 0, 242, 246, 273, 234, 0, 0, + 0, 0, 0, 0, 0, 0, 217, 0, 257, 0, + 0, 0, 201, 196, 240, 0, 0, 0, 204, 0, + 218, 274, 0, 0, 0, 283, 235, 134, 289, 233, + 232, 297, 270, 0, 280, 215, 224, 106, 222, 124, + 265, 132, 102, 286, 281, 255, 238, 239, 195, 0, + 272, 108, 114, 211, 262, 130, 131, 107, 135, 200, + 303, 103, 186, 302, 121, 185, 129, 287, 256, 252, + 197, 285, 254, 251, 117, 110, 0, 193, 0, 126, + 294, 308, 210, 284, 0, 0, 0, 0, 0, 128, + 202, 113, 208, 209, 206, 207, 248, 249, 298, 299, + 300, 275, 203, 0, 0, 278, 253, 100, 0, 118, + 305, 123, 112, 133, 0, 0, 0, 0, 0, 0, + 221, 304, 271, 269, 291, 0, 111, 127, 0, 0, + 0, 0, 0, 116, 0, 187, 136, 137, 139, 138, + 140, 104, 292, 277, 237, 295, 213, 228, 307, 230, + 231, 267, 198, 247, 122, 226, 101, 0, 115, 0, + 0, 0, 0, 293, 244, 0, 216, 191, 223, 192, + 214, 241, 109, 212, 279, 250, 229, 0, 301, 119, + 259, 0, 125, 120, 0, 0, 243, 282, 245, 276, + 236, 268, 205, 258, 296, 227, 264, 0, 0, 0, + 188, 0, 0, 0, 0, 0, 0, 0, 0, 105, + 261, 290, 225, 263, 266, 190, 260, 0, 194, 199, + 306, 288, 219, 220, 0, 0, 0, 0, 0, 0, + 0, 242, 246, 273, 234, 0, 0, 0, 0, 0, + 0, 0, 0, 217, 0, 257, 0, 0, 0, 201, + 196, 240, 0, 0, 0, 204, 0, 218, 274, 0, + 0, 0, 283, 235, 134, 289, 233, 232, 297, 270, + 0, 280, 215, 224, 106, 222, 124, 265, 132, 102, + 286, 281, 255, 238, 239, 195, 0, 272, 108, 114, + 211, 262, 130, 131, 107, 135, 200, 303, 103, 611, + 302, 121, 612, 129, 287, 256, 252, 197, 285, 254, + 251, 117, 110, 0, 193, 0, 126, 294, 308, 210, + 284, 0, 0, 0, 0, 0, 128, 202, 113, 208, + 209, 206, 207, 248, 249, 298, 299, 300, 275, 203, + 0, 0, 278, 253, 100, 0, 118, 305, 123, 112, + 133, 0, 0, 0, 0, 0, 0, 221, 304, 271, + 269, 291, 0, 111, 127, 0, 0, 0, 0, 0, + 116, 0, 0, 136, 137, 139, 138, 140, 104, 292, + 277, 237, 295, 213, 228, 307, 230, 231, 267, 198, + 247, 122, 226, 101, 0, 115, 0, 0, 0, 0, + 293, 244, 0, 216, 191, 223, 192, 214, 241, 109, + 212, 279, 250, 229, 0, 301, 119, 259, 0, 125, + 120, 0, 0, 243, 282, 245, 276, 236, 268, 205, + 258, 296, 227, 264, 0, 0, 0, 416, 0, 0, + 0, 0, 0, 0, 0, 0, 105, 261, 290, 225, + 263, 266, 190, 260, 0, 194, 199, 306, 288, 219, + 220, 0, 0, 0, 0, 0, 0, 0, 242, 246, + 273, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 217, 0, 257, 0, 0, 0, 201, 196, 240, 0, + 0, 0, 204, 0, 218, 274, 0, 0, 0, 283, + 235, 134, 289, 233, 232, 297, 270, 0, 280, 215, + 224, 106, 222, 124, 265, 132, 102, 286, 281, 255, + 238, 239, 195, 0, 272, 108, 114, 211, 262, 130, + 131, 107, 135, 200, 303, 103, 611, 302, 121, 612, + 129, 287, 256, 252, 197, 285, 254, 251, 117, 110, + 0, 193, 0, 126, 294, 308, 210, 284, 0, 0, + 0, 0, 0, 128, 202, 113, 208, 209, 206, 207, + 248, 249, 298, 299, 300, 275, 203, 0, 0, 278, + 253, 100, 0, 118, 305, 123, 112, 133, 0, 0, + 0, 0, 0, 0, 221, 304, 271, 269, 291, 0, + 111, 127, 0, 0, 0, 0, 0, 116, 0, 0, + 136, 137, 139, 138, 140, 104, 292, 277, 237, 295, + 213, 228, 307, 230, 231, 267, 198, 247, 122, 226, + 101, 0, 115, 0, 0, 0, 0, 293, 244, 0, + 216, 191, 223, 192, 214, 241, 109, 212, 279, 250, + 229, 0, 301, 119, 259, 0, 125, 120, 0, 0, + 243, 282, 245, 276, 236, 268, 205, 258, 296, 227, + 264, 0, 0, 0, 98, 0, 0, 0, 0, 0, + 0, 0, 0, 105, 261, 290, 225, 263, 266, 190, + 260, 0, 194, 199, 306, 288, 219, 220, 0, 0, + 0, 0, 0, 0, 0, 242, 246, 273, 234, 0, + 0, 0, 0, 0, 0, 0, 0, 217, 0, 257, + 0, 0, 0, 201, 196, 240, 0, 0, 0, 204, + 0, 218, 274, 0, 0, 0, 283, 235, 134, 289, + 233, 232, 297, 270, 0, 280, 215, 224, 106, 222, + 124, 265, 132, 102, 286, 281, 255, 238, 239, 195, + 0, 272, 108, 114, 211, 262, 130, 131, 107, 135, + 200, 303, 103, 611, 302, 121, 612, 129, 287, 256, + 252, 197, 285, 254, 251, 117, 110, 0, 193, 0, + 126, 294, 308, 210, 284, 0, 0, 0, 0, 0, + 128, 202, 113, 208, 209, 206, 207, 248, 249, 298, + 299, 300, 275, 203, 0, 0, 278, 253, 100, 0, + 118, 305, 123, 112, 133, 0, 0, 0, 0, 0, + 0, 221, 304, 271, 269, 291, 0, 111, 127, 122, + 0, 101, 0, 115, 116, 0, 0, 136, 137, 139, + 138, 140, 104, 367, 0, 0, 0, 109, 366, 0, + 0, 0, 0, 403, 119, 0, 0, 125, 120, 0, + 0, 0, 0, 396, 397, 0, 0, 0, 0, 0, + 0, 0, 53, 0, 0, 416, 384, 383, 385, 386, + 387, 388, 0, 0, 105, 389, 390, 391, 0, 0, + 0, 364, 377, 0, 402, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 374, 375, 772, 0, 0, 0, + 414, 0, 376, 0, 0, 373, 378, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, + 0, 0, 412, 0, 0, 0, 0, 0, 0, 106, + 0, 124, 0, 132, 102, 0, 0, 0, 0, 0, + 0, 0, 0, 108, 114, 0, 0, 130, 131, 107, + 135, 0, 0, 103, 0, 0, 121, 0, 129, 0, + 0, 0, 0, 0, 0, 0, 117, 110, 0, 0, + 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 128, 0, 113, 404, 413, 410, 411, 408, 409, + 407, 406, 405, 415, 398, 399, 401, 0, 400, 100, + 0, 118, 0, 123, 112, 133, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 111, 127, + 122, 0, 101, 0, 115, 116, 0, 0, 136, 137, + 139, 138, 140, 104, 367, 0, 0, 0, 109, 366, + 0, 0, 0, 0, 403, 119, 0, 0, 125, 120, + 0, 0, 0, 0, 396, 397, 0, 0, 0, 0, + 0, 0, 0, 53, 0, 358, 416, 384, 383, 385, + 386, 387, 388, 0, 0, 105, 389, 390, 391, 0, + 0, 0, 364, 377, 0, 402, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 374, 375, 0, 0, 0, + 0, 414, 0, 376, 0, 0, 373, 378, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 134, 0, 0, 412, 0, 0, 0, 0, 0, 0, + 106, 0, 124, 0, 132, 102, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 114, 0, 0, 130, 131, + 107, 135, 0, 0, 103, 0, 0, 121, 0, 129, + 0, 0, 0, 0, 0, 0, 0, 117, 110, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 128, 0, 113, 404, 413, 410, 411, 408, + 409, 407, 406, 405, 415, 398, 399, 401, 0, 400, + 100, 0, 118, 0, 123, 112, 133, 0, 0, 0, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 111, + 127, 122, 0, 101, 0, 115, 116, 0, 0, 136, + 137, 139, 138, 140, 104, 367, 0, 0, 0, 109, + 366, 0, 0, 0, 0, 403, 119, 0, 0, 125, + 120, 0, 0, 0, 0, 396, 397, 0, 0, 0, + 0, 0, 0, 0, 53, 0, 0, 416, 384, 383, + 385, 386, 387, 388, 0, 0, 105, 389, 390, 391, + 0, 0, 0, 364, 377, 0, 402, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 374, 375, 0, 0, + 0, 0, 414, 0, 376, 0, 0, 373, 378, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 134, 0, 0, 412, 0, 0, 0, 0, 0, + 0, 106, 0, 124, 0, 132, 102, 0, 0, 0, + 0, 0, 0, 0, 0, 108, 114, 0, 0, 130, + 131, 107, 135, 0, 0, 103, 0, 0, 121, 0, + 129, 0, 0, 0, 0, 0, 0, 0, 117, 110, + 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 0, 113, 404, 413, 410, 411, + 408, 409, 407, 406, 405, 415, 398, 399, 401, 0, + 400, 100, 0, 118, 0, 123, 112, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 482, 483, 485, 0, 0, 0, 0, 0, 0, 491, - 492, 886, 0, 0, 521, 520, 530, 531, 523, 524, - 525, 526, 527, 528, 529, 522, 0, 0, 532, 0, - 0, 521, 520, 530, 531, 523, 524, 525, 526, 527, - 528, 529, 522, 107, 0, 532, 174, 0, 0, 0, - 0, 0, 0, 79, 0, 97, 0, 105, 76, 0, - 0, 0, 174, 0, 0, 0, 0, 81, 87, 0, - 0, 103, 104, 80, 108, 0, 0, 77, 0, 95, - 94, 637, 102, 0, 635, 639, 0, 0, 0, 0, - 90, 83, 0, 82, 0, 99, 0, 0, 0, 0, - 92, 0, 0, 98, 93, 101, 0, 86, 596, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, - 0, 312, 0, 75, 0, 91, 0, 96, 85, 106, - 78, 0, 0, 0, 0, 766, 0, 0, 0, 0, - 0, 0, 84, 100, 0, 0, 0, 174, 0, 89, - 0, 0, 109, 110, 112, 111, 113, 114, 0, 0, - 0, 0, 0, 0, 601, 0, 603, 0, 0, 0, - 705, 0, 0, 0, 0, 0, 0, 713, 714, 0, - 0, 0, 0, 0, 638, 107, 718, 95, 0, 88, - 634, 0, 0, 0, 0, 79, 893, 97, 0, 105, - 76, 82, 0, 0, 0, 0, 0, 0, 92, 81, - 87, 98, 93, 103, 104, 80, 108, 174, 0, 77, - 0, 0, 94, 0, 102, 0, 0, 0, 0, 73, - 0, 895, 90, 83, 0, 0, 0, 99, 78, 0, - 0, 0, 0, 509, 508, 0, 0, 101, 766, 86, - 0, 0, 0, 0, 603, 766, 0, 0, 0, 0, - 510, 0, 0, 0, 0, 75, 0, 91, 0, 96, - 85, 106, 0, 0, 0, 0, 174, 0, 0, 0, - 0, 0, 0, 0, 84, 100, 0, 0, 0, 0, - 0, 89, 0, 107, 109, 110, 112, 111, 113, 114, - 0, 0, 0, 79, 0, 97, 0, 105, 76, 0, - 0, 0, 0, 0, 0, 0, 0, 81, 87, 0, - 0, 103, 104, 80, 108, 0, 0, 77, 0, 0, - 94, 0, 102, 0, 0, 0, 0, 0, 0, 0, - 90, 83, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 101, 0, 86, 0, 0, - 0, 0, 0, 0, 174, 1072, 0, 0, 0, 0, - 0, 857, 0, 75, 0, 91, 0, 96, 85, 106, - 0, 0, 0, 0, 0, 0, 0, 868, 0, 0, - 0, 0, 84, 100, 0, 0, 0, 0, 0, 89, - 0, 0, 109, 110, 112, 111, 113, 114, 0, 0, - 0, 0, 174, 174, 174, 174, 0, 0, 0, 0, - 0, 0, 0, 1107, 0, 0, 174, 0, 0, 1072, - 0, 0, 601, 0, 290, 275, 235, 293, 211, 226, - 305, 228, 229, 265, 196, 245, 95, 224, 88, 0, - 0, 291, 242, 0, 214, 189, 221, 190, 212, 239, - 82, 210, 277, 248, 227, 0, 299, 92, 257, 0, - 98, 93, 916, 0, 241, 280, 243, 274, 234, 266, - 203, 256, 294, 225, 262, 0, 0, 0, 73, 0, - 0, 0, 0, 0, 0, 0, 0, 78, 259, 288, - 223, 261, 264, 188, 258, 0, 192, 197, 304, 286, - 217, 218, 0, 0, 0, 0, 0, 0, 0, 240, - 244, 271, 232, 0, 0, 0, 0, 0, 0, 0, - 0, 215, 0, 255, 0, 0, 0, 199, 194, 238, - 0, 0, 963, 202, 0, 216, 272, 0, 0, 0, - 281, 233, 107, 287, 231, 230, 295, 268, 0, 278, - 213, 222, 79, 220, 97, 263, 105, 76, 284, 279, - 253, 236, 237, 193, 0, 270, 81, 87, 209, 260, - 103, 104, 80, 108, 198, 301, 77, 186, 300, 94, - 185, 102, 285, 254, 250, 195, 283, 252, 249, 90, - 83, 0, 191, 0, 99, 292, 306, 208, 282, 0, - 0, 0, 0, 0, 101, 200, 86, 206, 207, 204, - 205, 246, 247, 296, 297, 298, 273, 201, 0, 0, - 276, 251, 75, 0, 91, 303, 96, 85, 106, 0, - 0, 0, 0, 0, 0, 219, 302, 269, 267, 289, - 0, 84, 100, 0, 0, 0, 0, 0, 180, 179, - 187, 109, 110, 112, 111, 113, 114, 290, 275, 235, - 293, 211, 226, 305, 228, 229, 265, 196, 245, 95, - 224, 88, 0, 0, 291, 242, 0, 214, 189, 221, - 190, 212, 239, 82, 210, 277, 248, 227, 0, 299, - 92, 257, 0, 98, 93, 0, 0, 241, 280, 243, - 274, 234, 266, 203, 256, 294, 225, 262, 53, 0, - 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, - 78, 259, 288, 223, 261, 264, 188, 258, 0, 192, - 197, 304, 286, 217, 218, 0, 0, 0, 0, 0, - 0, 0, 240, 244, 271, 232, 0, 0, 0, 0, - 0, 0, 0, 0, 215, 0, 255, 0, 0, 0, - 199, 194, 238, 0, 0, 0, 202, 0, 216, 272, - 0, 0, 0, 281, 233, 107, 287, 231, 230, 295, - 268, 0, 278, 213, 222, 79, 220, 97, 263, 105, - 76, 284, 279, 253, 236, 237, 193, 0, 270, 81, - 87, 209, 260, 103, 104, 80, 108, 198, 301, 77, - 605, 300, 94, 606, 102, 285, 254, 250, 195, 283, - 252, 249, 90, 83, 0, 191, 0, 99, 292, 306, - 208, 282, 0, 0, 0, 0, 0, 101, 200, 86, - 206, 207, 204, 205, 246, 247, 296, 297, 298, 273, - 201, 0, 0, 276, 251, 75, 0, 91, 303, 96, - 85, 106, 0, 0, 0, 0, 0, 0, 219, 302, - 269, 267, 289, 0, 84, 100, 0, 0, 0, 0, - 0, 89, 0, 0, 109, 110, 112, 111, 113, 114, - 290, 275, 235, 293, 211, 226, 305, 228, 229, 265, - 196, 245, 95, 224, 88, 0, 0, 291, 242, 0, - 214, 189, 221, 190, 212, 239, 82, 210, 277, 248, - 227, 0, 299, 92, 257, 0, 98, 93, 0, 0, - 241, 280, 243, 274, 234, 266, 203, 256, 294, 225, - 262, 0, 0, 0, 73, 0, 0, 0, 0, 0, - 0, 0, 0, 78, 259, 288, 223, 261, 264, 188, - 258, 0, 192, 197, 304, 286, 217, 218, 0, 0, - 0, 0, 0, 0, 0, 240, 244, 271, 232, 0, - 0, 0, 0, 0, 0, 1086, 0, 215, 0, 255, - 0, 0, 0, 199, 194, 238, 0, 0, 0, 202, - 0, 216, 272, 0, 0, 0, 281, 233, 107, 287, - 231, 230, 295, 268, 0, 278, 213, 222, 79, 220, - 97, 263, 105, 76, 284, 279, 253, 236, 237, 193, - 0, 270, 81, 87, 209, 260, 103, 104, 80, 108, - 198, 301, 77, 605, 300, 94, 606, 102, 285, 254, - 250, 195, 283, 252, 249, 90, 83, 0, 191, 0, - 99, 292, 306, 208, 282, 0, 0, 0, 0, 0, - 101, 200, 86, 206, 207, 204, 205, 246, 247, 296, - 297, 298, 273, 201, 0, 0, 276, 251, 75, 0, - 91, 303, 96, 85, 106, 0, 0, 0, 0, 0, - 0, 219, 302, 269, 267, 289, 0, 84, 100, 0, - 0, 0, 0, 0, 89, 0, 0, 109, 110, 112, - 111, 113, 114, 290, 275, 235, 293, 211, 226, 305, - 228, 229, 265, 196, 245, 95, 224, 88, 0, 0, - 291, 242, 0, 214, 189, 221, 190, 212, 239, 82, - 210, 277, 248, 227, 0, 299, 92, 257, 0, 98, - 93, 0, 0, 241, 280, 243, 274, 234, 266, 203, - 256, 294, 225, 262, 0, 0, 0, 412, 0, 0, - 0, 0, 0, 0, 0, 0, 78, 259, 288, 223, - 261, 264, 188, 258, 0, 192, 197, 304, 286, 217, - 218, 0, 0, 0, 0, 0, 0, 0, 240, 244, - 271, 232, 0, 0, 0, 0, 0, 0, 977, 0, - 215, 0, 255, 0, 0, 0, 199, 194, 238, 0, - 0, 0, 202, 0, 216, 272, 0, 0, 0, 281, - 233, 107, 287, 231, 230, 295, 268, 0, 278, 213, - 222, 79, 220, 97, 263, 105, 76, 284, 279, 253, - 236, 237, 193, 0, 270, 81, 87, 209, 260, 103, - 104, 80, 108, 198, 301, 77, 605, 300, 94, 606, - 102, 285, 254, 250, 195, 283, 252, 249, 90, 83, - 0, 191, 0, 99, 292, 306, 208, 282, 0, 0, - 0, 0, 0, 101, 200, 86, 206, 207, 204, 205, - 246, 247, 296, 297, 298, 273, 201, 0, 0, 276, - 251, 75, 0, 91, 303, 96, 85, 106, 0, 0, - 0, 0, 0, 0, 219, 302, 269, 267, 289, 0, - 84, 100, 0, 0, 0, 0, 0, 89, 0, 0, - 109, 110, 112, 111, 113, 114, 290, 275, 235, 293, - 211, 226, 305, 228, 229, 265, 196, 245, 95, 224, - 88, 0, 0, 291, 242, 0, 214, 189, 221, 190, - 212, 239, 82, 210, 277, 248, 227, 0, 299, 92, - 257, 0, 98, 93, 0, 0, 241, 280, 243, 274, - 234, 266, 203, 256, 294, 225, 262, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 0, 0, 78, - 259, 288, 223, 261, 264, 188, 258, 0, 192, 197, - 304, 286, 217, 218, 0, 0, 0, 0, 0, 0, - 0, 240, 244, 271, 232, 0, 0, 0, 0, 0, - 0, 0, 0, 215, 0, 255, 0, 0, 0, 199, - 194, 238, 0, 0, 0, 202, 0, 216, 272, 0, - 0, 0, 281, 233, 107, 287, 231, 230, 295, 268, - 0, 278, 213, 222, 79, 220, 97, 263, 105, 76, - 284, 279, 253, 236, 237, 193, 0, 270, 81, 87, - 209, 260, 103, 104, 80, 108, 198, 301, 77, 186, - 300, 94, 185, 102, 285, 254, 250, 195, 283, 252, - 249, 90, 83, 0, 191, 0, 99, 292, 306, 208, - 282, 0, 0, 0, 0, 0, 101, 200, 86, 206, - 207, 204, 205, 246, 247, 296, 297, 298, 273, 201, - 0, 0, 276, 251, 75, 0, 91, 303, 96, 85, - 106, 0, 0, 0, 0, 0, 0, 219, 302, 269, - 267, 289, 0, 84, 100, 0, 0, 0, 0, 0, - 89, 0, 187, 109, 110, 112, 111, 113, 114, 290, - 275, 235, 293, 211, 226, 305, 228, 229, 265, 196, - 245, 95, 224, 88, 0, 0, 291, 242, 0, 214, - 189, 221, 190, 212, 239, 82, 210, 277, 248, 227, - 0, 299, 92, 257, 0, 98, 93, 0, 0, 241, - 280, 243, 274, 234, 266, 203, 256, 294, 225, 262, - 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, - 0, 0, 78, 259, 288, 223, 261, 264, 188, 258, - 0, 192, 197, 304, 286, 217, 218, 0, 0, 0, - 0, 0, 0, 0, 240, 244, 271, 232, 0, 0, - 0, 0, 0, 0, 0, 0, 215, 0, 255, 0, - 0, 0, 199, 194, 238, 0, 0, 0, 202, 0, - 216, 272, 0, 0, 0, 281, 233, 107, 287, 231, - 230, 295, 268, 0, 278, 213, 222, 79, 220, 97, - 263, 105, 76, 284, 279, 253, 236, 237, 193, 0, - 270, 81, 87, 209, 260, 103, 104, 80, 108, 198, - 301, 77, 605, 300, 94, 606, 102, 285, 254, 250, - 195, 283, 252, 249, 90, 83, 0, 191, 0, 99, - 292, 306, 208, 282, 0, 0, 0, 0, 0, 101, - 200, 86, 206, 207, 204, 205, 246, 247, 296, 297, - 298, 273, 201, 0, 0, 276, 251, 75, 0, 91, - 303, 96, 85, 106, 0, 0, 0, 0, 0, 0, - 219, 302, 269, 267, 289, 0, 84, 100, 0, 0, - 0, 0, 0, 89, 0, 0, 109, 110, 112, 111, - 113, 114, 290, 275, 235, 293, 211, 226, 305, 228, - 229, 265, 196, 245, 95, 224, 88, 0, 0, 291, - 242, 0, 214, 189, 221, 190, 212, 239, 82, 210, - 277, 248, 227, 0, 299, 92, 257, 0, 98, 93, - 0, 0, 241, 280, 243, 274, 234, 266, 203, 256, - 294, 225, 262, 0, 0, 0, 412, 0, 0, 0, - 0, 0, 0, 0, 0, 78, 259, 288, 223, 261, - 264, 188, 258, 0, 192, 197, 304, 286, 217, 218, - 0, 0, 0, 0, 0, 0, 0, 240, 244, 271, - 232, 0, 0, 0, 0, 0, 0, 0, 0, 215, - 0, 255, 0, 0, 0, 199, 194, 238, 0, 0, - 0, 202, 0, 216, 272, 0, 0, 0, 281, 233, - 107, 287, 231, 230, 295, 268, 0, 278, 213, 222, - 79, 220, 97, 263, 105, 76, 284, 279, 253, 236, - 237, 193, 0, 270, 81, 87, 209, 260, 103, 104, - 80, 108, 198, 301, 77, 605, 300, 94, 606, 102, - 285, 254, 250, 195, 283, 252, 249, 90, 83, 0, - 191, 0, 99, 292, 306, 208, 282, 0, 0, 0, - 0, 0, 101, 200, 86, 206, 207, 204, 205, 246, - 247, 296, 297, 298, 273, 201, 0, 0, 276, 251, - 75, 0, 91, 303, 96, 85, 106, 0, 0, 0, - 0, 0, 0, 219, 302, 269, 267, 289, 0, 84, - 100, 0, 0, 0, 0, 0, 89, 0, 0, 109, - 110, 112, 111, 113, 114, 290, 275, 235, 293, 211, - 226, 305, 228, 229, 265, 196, 245, 95, 224, 88, - 0, 0, 291, 242, 0, 214, 189, 221, 190, 212, - 239, 82, 210, 277, 248, 227, 0, 299, 92, 257, - 0, 98, 93, 0, 0, 241, 280, 243, 274, 234, - 266, 203, 256, 294, 225, 262, 0, 0, 0, 139, - 0, 0, 0, 0, 0, 0, 0, 0, 78, 259, - 288, 223, 261, 264, 188, 258, 0, 192, 197, 304, - 286, 217, 218, 0, 0, 0, 0, 0, 0, 0, - 240, 244, 271, 232, 0, 0, 0, 0, 0, 0, - 0, 0, 215, 0, 255, 0, 0, 0, 199, 194, - 238, 0, 0, 0, 202, 0, 216, 272, 0, 0, - 0, 281, 233, 107, 287, 231, 230, 295, 268, 0, - 278, 213, 222, 79, 220, 97, 263, 105, 76, 284, - 279, 253, 236, 237, 193, 0, 270, 81, 87, 209, - 260, 103, 104, 80, 108, 198, 301, 77, 605, 300, - 94, 606, 102, 285, 254, 250, 195, 283, 252, 249, - 90, 83, 0, 191, 0, 99, 292, 306, 208, 282, - 0, 0, 0, 0, 0, 101, 200, 86, 206, 207, - 204, 205, 246, 247, 296, 297, 298, 273, 201, 0, - 0, 276, 251, 75, 0, 91, 303, 96, 85, 106, - 0, 0, 0, 0, 0, 0, 219, 302, 269, 267, - 289, 0, 84, 100, 0, 0, 0, 0, 0, 89, - 0, 0, 109, 110, 112, 111, 113, 114, 95, 0, - 88, 0, 0, 0, 0, 0, 761, 0, 363, 0, - 0, 0, 82, 362, 0, 0, 0, 0, 399, 92, - 0, 0, 98, 93, 0, 0, 0, 0, 392, 393, - 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, - 412, 380, 379, 381, 382, 383, 384, 0, 0, 78, - 385, 386, 387, 0, 0, 0, 360, 373, 0, 398, - 521, 520, 530, 531, 523, 524, 525, 526, 527, 528, - 529, 522, 0, 0, 532, 0, 0, 0, 0, 370, - 371, 764, 0, 0, 0, 410, 0, 372, 0, 0, - 369, 374, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 107, 0, 0, 408, 0, 0, - 0, 0, 0, 0, 79, 0, 97, 0, 105, 76, - 0, 0, 0, 0, 0, 0, 0, 0, 81, 87, - 0, 0, 103, 104, 80, 108, 0, 0, 77, 0, - 0, 94, 0, 102, 0, 0, 0, 0, 0, 0, - 0, 90, 83, 0, 0, 0, 99, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 101, 0, 86, 400, - 409, 406, 407, 404, 405, 403, 402, 401, 411, 394, - 395, 397, 0, 396, 75, 0, 91, 0, 96, 85, - 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 100, 0, 0, 0, 0, 95, - 89, 88, 0, 109, 110, 112, 111, 113, 114, 363, - 0, 0, 0, 82, 362, 0, 0, 0, 0, 399, - 92, 0, 0, 98, 93, 0, 0, 0, 0, 392, - 393, 0, 0, 0, 0, 0, 0, 0, 53, 0, - 0, 412, 380, 379, 381, 382, 383, 384, 0, 0, - 78, 385, 386, 387, 0, 0, 0, 360, 373, 0, - 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 111, 127, 122, 0, 101, 0, 115, 116, 0, 0, + 136, 137, 139, 138, 140, 104, 367, 0, 0, 0, + 109, 366, 0, 0, 0, 0, 403, 119, 0, 0, + 125, 120, 0, 0, 0, 0, 396, 397, 0, 0, + 0, 0, 0, 0, 0, 53, 0, 0, 416, 384, + 383, 385, 386, 387, 388, 0, 0, 105, 389, 390, + 391, 0, 0, 0, 364, 377, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 370, 371, 764, 0, 0, 0, 410, 0, 372, 0, - 0, 369, 374, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 107, 0, 0, 408, 0, - 0, 0, 0, 0, 0, 79, 0, 97, 0, 105, - 76, 0, 0, 0, 0, 0, 0, 0, 0, 81, - 87, 0, 0, 103, 104, 80, 108, 0, 0, 77, - 0, 0, 94, 0, 102, 0, 0, 0, 0, 0, - 0, 0, 90, 83, 0, 0, 0, 99, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 101, 0, 86, - 400, 409, 406, 407, 404, 405, 403, 402, 401, 411, - 394, 395, 397, 0, 396, 75, 0, 91, 0, 96, - 85, 106, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 84, 100, 0, 0, 0, 0, - 95, 89, 88, 0, 109, 110, 112, 111, 113, 114, - 363, 0, 0, 0, 82, 362, 0, 0, 0, 0, - 399, 92, 0, 0, 98, 93, 0, 0, 0, 0, - 392, 393, 0, 0, 0, 0, 0, 0, 0, 53, - 0, 354, 412, 380, 379, 381, 382, 383, 384, 0, - 0, 78, 385, 386, 387, 0, 0, 0, 360, 373, - 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 374, 375, 0, + 0, 0, 0, 414, 0, 376, 0, 0, 373, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 370, 371, 0, 0, 0, 0, 410, 0, 372, - 0, 0, 369, 374, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 107, 0, 0, 408, - 0, 0, 0, 0, 0, 0, 79, 0, 97, 0, - 105, 76, 0, 0, 0, 0, 0, 0, 0, 0, - 81, 87, 0, 0, 103, 104, 80, 108, 0, 0, - 77, 0, 0, 94, 0, 102, 0, 0, 0, 0, - 0, 0, 0, 90, 83, 0, 0, 0, 99, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, - 86, 400, 409, 406, 407, 404, 405, 403, 402, 401, - 411, 394, 395, 397, 0, 396, 75, 0, 91, 0, - 96, 85, 106, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 84, 100, 0, 0, 0, - 0, 95, 89, 88, 0, 109, 110, 112, 111, 113, - 114, 363, 0, 0, 0, 82, 362, 0, 0, 0, - 0, 399, 92, 0, 0, 98, 93, 0, 0, 0, - 0, 392, 393, 0, 0, 0, 0, 0, 0, 0, - 53, 0, 0, 412, 380, 379, 381, 382, 383, 384, - 0, 0, 78, 385, 386, 387, 0, 0, 0, 360, - 373, 0, 398, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 134, 0, 0, 412, 0, 0, 0, 0, + 0, 0, 106, 0, 124, 0, 132, 102, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 114, 0, 0, + 130, 131, 107, 135, 0, 0, 103, 0, 0, 121, + 0, 129, 0, 0, 0, 0, 0, 0, 0, 117, + 110, 0, 0, 0, 126, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 128, 0, 113, 404, 413, 410, + 411, 408, 409, 407, 406, 405, 415, 398, 399, 401, + 0, 400, 100, 0, 118, 0, 123, 112, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 370, 371, 0, 0, 0, 0, 410, 0, - 372, 0, 0, 369, 374, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, - 408, 0, 0, 0, 0, 0, 0, 79, 0, 97, - 0, 105, 76, 0, 0, 0, 0, 0, 0, 0, - 0, 81, 87, 0, 0, 103, 104, 80, 108, 0, - 0, 77, 0, 0, 94, 0, 102, 0, 0, 0, - 0, 0, 0, 0, 90, 83, 0, 0, 0, 99, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, - 0, 86, 400, 409, 406, 407, 404, 405, 403, 402, - 401, 411, 394, 395, 397, 0, 396, 75, 0, 91, - 0, 96, 85, 106, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 100, 0, 0, - 0, 0, 95, 89, 88, 0, 109, 110, 112, 111, - 113, 114, 363, 0, 0, 0, 82, 362, 0, 0, - 0, 0, 399, 92, 0, 0, 98, 93, 0, 0, - 0, 0, 392, 393, 0, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 412, 380, 379, 381, 382, 383, - 384, 0, 0, 78, 385, 386, 387, 0, 0, 0, - 360, 373, 0, 398, 0, 0, 0, 0, 0, 0, + 0, 111, 127, 122, 0, 101, 0, 115, 116, 0, + 0, 136, 137, 139, 138, 140, 104, 0, 0, 0, + 0, 109, 0, 0, 0, 0, 0, 403, 119, 0, + 0, 125, 120, 0, 0, 0, 0, 396, 397, 0, + 0, 0, 0, 0, 0, 0, 53, 0, 0, 416, + 384, 383, 385, 386, 387, 388, 0, 0, 105, 389, + 390, 391, 0, 0, 0, 0, 377, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 370, 371, 0, 0, 0, 0, 410, - 0, 372, 0, 0, 369, 374, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, - 0, 408, 0, 0, 0, 0, 0, 0, 79, 0, - 97, 0, 105, 76, 0, 0, 0, 0, 0, 0, - 0, 0, 81, 87, 0, 0, 103, 104, 80, 108, - 0, 0, 77, 0, 0, 94, 0, 102, 0, 0, - 0, 0, 0, 0, 0, 90, 83, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 101, 0, 86, 400, 409, 406, 407, 404, 405, 403, - 402, 401, 411, 394, 395, 397, 0, 396, 75, 0, - 91, 0, 96, 85, 106, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 84, 100, 95, - 0, 88, 0, 0, 89, 0, 0, 109, 110, 112, - 111, 113, 114, 82, 0, 0, 0, 0, 0, 399, - 92, 0, 0, 98, 93, 0, 0, 0, 0, 392, - 393, 0, 0, 0, 0, 0, 0, 0, 53, 0, - 0, 412, 380, 379, 381, 382, 383, 384, 0, 0, - 78, 385, 386, 387, 0, 0, 0, 0, 373, 0, - 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 374, 375, + 0, 0, 0, 0, 414, 0, 376, 0, 0, 373, + 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 134, 0, 0, 412, 0, 0, 0, + 0, 0, 0, 106, 0, 124, 0, 132, 102, 0, + 0, 0, 0, 0, 0, 0, 0, 108, 114, 0, + 0, 130, 131, 107, 135, 0, 0, 103, 0, 0, + 121, 0, 129, 0, 0, 0, 0, 0, 0, 0, + 117, 110, 0, 0, 0, 126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 128, 0, 113, 404, 413, + 410, 411, 408, 409, 407, 406, 405, 415, 398, 399, + 401, 0, 400, 100, 0, 118, 0, 123, 112, 133, + 0, 0, 0, 122, 0, 101, 0, 115, 0, 0, + 0, 0, 111, 127, 0, 0, 0, 0, 0, 116, + 0, 109, 136, 137, 139, 138, 140, 104, 119, 0, + 0, 125, 120, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 370, 371, 0, 0, 0, 0, 410, 0, 372, 0, - 0, 369, 374, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 107, 0, 0, 408, 0, - 0, 0, 0, 0, 0, 79, 0, 97, 0, 105, - 76, 0, 0, 0, 0, 0, 0, 0, 0, 81, - 87, 0, 0, 103, 104, 80, 108, 0, 0, 77, - 0, 95, 94, 88, 102, 0, 71, 0, 0, 0, - 0, 0, 90, 83, 0, 82, 0, 99, 0, 0, - 0, 0, 92, 0, 0, 98, 93, 101, 0, 86, - 400, 409, 406, 407, 404, 405, 403, 402, 401, 411, - 394, 395, 397, 73, 396, 75, 0, 91, 0, 96, - 85, 106, 78, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 84, 100, 0, 0, 0, 0, - 0, 89, 0, 0, 109, 110, 112, 111, 113, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 70, 0, 107, 0, 95, - 0, 88, 0, 0, 0, 0, 0, 79, 0, 97, - 0, 105, 76, 82, 0, 0, 0, 0, 0, 0, - 92, 81, 87, 98, 93, 103, 104, 80, 108, 0, - 0, 77, 0, 0, 94, 0, 102, 0, 53, 0, - 0, 139, 0, 0, 90, 83, 0, 0, 0, 99, - 78, 0, 0, 0, 0, 0, 0, 0, 0, 101, - 0, 86, 0, 68, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 75, 0, 91, - 0, 96, 85, 106, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 100, 0, 0, - 0, 0, 0, 89, 0, 107, 109, 110, 112, 111, - 113, 114, 0, 0, 0, 79, 0, 97, 0, 105, - 76, 0, 0, 0, 0, 0, 0, 0, 0, 81, - 87, 0, 0, 103, 104, 80, 108, 0, 0, 77, - 0, 0, 94, 0, 102, 0, 0, 0, 0, 0, - 0, 0, 90, 83, 0, 0, 95, 99, 88, 0, - 0, 0, 0, 0, 0, 1071, 0, 101, 0, 86, - 82, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 98, 93, 0, 0, 0, 75, 0, 91, 0, 96, - 85, 106, 0, 0, 0, 0, 0, 0, 139, 0, - 1073, 0, 0, 0, 84, 100, 0, 78, 0, 0, - 0, 89, 0, 0, 109, 110, 112, 111, 113, 114, + 0, 0, 0, 0, 527, 526, 536, 537, 529, 530, + 531, 532, 533, 534, 535, 528, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 106, 0, 124, 0, 132, 102, 0, + 0, 0, 0, 0, 0, 0, 0, 108, 114, 0, + 0, 130, 131, 107, 135, 0, 0, 103, 0, 0, + 121, 0, 129, 0, 122, 0, 101, 0, 115, 0, + 117, 110, 0, 0, 0, 126, 0, 903, 0, 0, + 0, 0, 109, 0, 0, 128, 0, 113, 0, 119, + 0, 0, 125, 120, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 0, 118, 0, 123, 112, 133, + 188, 0, 905, 0, 0, 0, 0, 0, 0, 105, + 0, 0, 111, 127, 515, 514, 0, 0, 0, 116, + 0, 0, 136, 137, 139, 138, 140, 104, 0, 0, + 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, - 0, 0, 107, 0, 95, 0, 88, 0, 0, 0, - 0, 0, 79, 0, 97, 0, 105, 76, 82, 0, - 0, 0, 0, 0, 0, 92, 81, 87, 98, 93, - 103, 104, 80, 108, 0, 0, 77, 0, 0, 94, - 0, 102, 0, 53, 0, 0, 73, 0, 0, 90, - 83, 0, 0, 0, 99, 78, 0, 0, 0, 0, - 0, 0, 0, 0, 101, 0, 86, 0, 0, 0, + 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 106, 0, 124, 0, 132, 102, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 114, + 0, 0, 130, 131, 107, 135, 0, 0, 103, 0, + 0, 121, 0, 129, 0, 122, 0, 101, 0, 115, + 0, 117, 110, 0, 0, 0, 126, 0, 1092, 0, + 0, 0, 0, 109, 0, 0, 128, 0, 113, 0, + 119, 0, 0, 125, 120, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 100, 0, 118, 0, 123, 112, + 133, 98, 0, 1094, 0, 0, 0, 0, 0, 0, + 105, 0, 0, 111, 127, 0, 0, 0, 0, 0, + 116, 0, 0, 136, 137, 139, 138, 140, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 75, 0, 91, 0, 96, 85, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 84, 100, 0, 0, 0, 0, 0, 89, 0, - 107, 109, 110, 112, 111, 113, 114, 0, 0, 0, - 79, 0, 97, 0, 105, 76, 0, 0, 0, 0, - 0, 95, 0, 88, 81, 87, 0, 0, 103, 104, - 80, 108, 0, 0, 77, 82, 0, 94, 0, 102, - 0, 0, 92, 0, 0, 98, 93, 90, 83, 0, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 101, 73, 86, 0, 587, 0, 0, 588, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, - 75, 0, 91, 0, 96, 85, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, - 100, 0, 0, 0, 0, 0, 89, 0, 0, 109, - 110, 112, 111, 113, 114, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 107, 0, 95, - 0, 88, 0, 0, 0, 0, 0, 79, 0, 97, - 0, 105, 76, 82, 436, 0, 0, 0, 0, 0, - 92, 81, 87, 98, 93, 103, 104, 80, 108, 0, - 0, 77, 0, 0, 94, 0, 102, 0, 0, 0, - 0, 73, 0, 435, 90, 83, 0, 0, 0, 99, - 78, 0, 0, 0, 0, 0, 0, 0, 0, 101, - 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 75, 0, 91, - 0, 96, 85, 106, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 100, 0, 0, - 0, 0, 0, 89, 0, 107, 109, 110, 112, 111, - 113, 114, 0, 0, 0, 79, 0, 97, 0, 105, - 76, 0, 0, 0, 95, 0, 88, 0, 0, 81, - 87, 0, 0, 103, 104, 80, 108, 0, 82, 77, - 0, 0, 94, 0, 102, 92, 0, 0, 98, 93, - 0, 0, 90, 83, 0, 0, 0, 99, 0, 0, - 0, 0, 0, 0, 0, 0, 139, 101, 1073, 86, - 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 75, 0, 91, 0, 96, - 85, 106, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 84, 100, 0, 0, 0, 0, - 0, 89, 0, 0, 109, 110, 112, 111, 113, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 107, 0, 95, 0, 88, 0, 0, 0, 0, 0, - 79, 0, 97, 0, 105, 76, 82, 0, 0, 0, - 0, 0, 0, 92, 81, 87, 98, 93, 103, 104, - 80, 108, 0, 0, 77, 0, 0, 94, 0, 102, - 0, 53, 0, 0, 139, 0, 0, 90, 83, 0, - 0, 0, 99, 78, 0, 0, 0, 0, 0, 0, - 0, 0, 101, 0, 86, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, + 0, 24, 0, 0, 0, 106, 0, 124, 0, 132, + 102, 0, 122, 0, 101, 0, 115, 0, 0, 108, + 114, 0, 0, 130, 131, 107, 135, 0, 0, 103, + 109, 0, 121, 0, 129, 0, 0, 119, 0, 0, + 125, 120, 117, 110, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 0, 0, 53, 0, 128, 188, 113, + 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, + 0, 0, 0, 0, 0, 100, 0, 118, 0, 123, + 112, 133, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 111, 127, 0, 0, 0, 0, + 0, 116, 0, 0, 136, 137, 139, 138, 140, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 0, 91, 0, 96, 85, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, - 100, 0, 0, 0, 0, 0, 89, 0, 107, 109, - 110, 112, 111, 113, 114, 0, 0, 0, 79, 0, - 97, 0, 105, 76, 0, 0, 0, 95, 0, 88, - 0, 0, 81, 87, 0, 0, 103, 104, 80, 108, - 0, 82, 77, 0, 0, 94, 0, 102, 92, 0, - 0, 98, 93, 0, 0, 90, 83, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 0, 0, 73, - 101, 895, 86, 0, 0, 0, 0, 0, 78, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, - 91, 0, 96, 85, 106, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 84, 100, 0, - 0, 0, 0, 0, 89, 0, 0, 109, 110, 112, - 111, 113, 114, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 79, 0, 97, 0, 105, 76, 0, - 0, 0, 95, 0, 88, 0, 0, 81, 87, 0, - 0, 103, 104, 80, 108, 425, 82, 77, 0, 0, - 94, 0, 102, 92, 0, 0, 98, 93, 0, 0, - 90, 83, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 139, 101, 0, 86, 0, 0, - 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 75, 0, 91, 0, 96, 85, 106, + 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 106, 0, 124, 0, 132, 102, 0, 122, + 0, 101, 0, 115, 0, 0, 108, 114, 0, 0, + 130, 131, 107, 135, 0, 0, 103, 109, 0, 121, + 0, 129, 0, 0, 119, 0, 0, 125, 120, 117, + 110, 0, 0, 0, 126, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 128, 188, 113, 0, 593, 0, + 0, 594, 0, 0, 105, 0, 0, 0, 0, 0, + 0, 0, 100, 0, 118, 0, 123, 112, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84, 100, 0, 0, 0, 0, 0, 89, - 0, 0, 109, 110, 112, 111, 113, 114, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, - 95, 0, 88, 0, 0, 0, 0, 0, 79, 0, - 97, 0, 105, 76, 82, 0, 0, 0, 0, 0, - 0, 92, 81, 87, 98, 93, 103, 104, 80, 108, - 0, 0, 77, 0, 0, 94, 0, 102, 0, 0, - 0, 0, 73, 0, 0, 90, 83, 0, 0, 0, - 99, 78, 0, 0, 0, 0, 0, 0, 0, 0, - 101, 0, 86, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, - 91, 0, 96, 85, 106, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 84, 100, 0, - 0, 0, 0, 0, 89, 0, 107, 109, 110, 112, - 111, 113, 114, 0, 0, 0, 79, 0, 97, 0, - 105, 76, 0, 0, 0, 95, 0, 88, 0, 0, - 81, 87, 0, 0, 103, 104, 80, 108, 0, 82, - 77, 0, 0, 94, 0, 102, 92, 0, 0, 98, - 93, 0, 0, 90, 83, 0, 0, 0, 99, 0, - 0, 0, 0, 0, 0, 0, 0, 412, 101, 0, - 86, 0, 0, 0, 0, 0, 78, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 75, 0, 91, 0, - 96, 85, 106, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 84, 100, 0, 0, 0, - 0, 0, 89, 0, 0, 109, 110, 112, 111, 113, - 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 107, 0, 95, 0, 88, 0, 0, 0, 0, - 0, 79, 0, 97, 0, 105, 76, 82, 0, 0, - 0, 0, 0, 0, 92, 81, 87, 98, 93, 103, - 104, 80, 108, 0, 0, 77, 0, 0, 94, 0, - 102, 0, 0, 0, 0, 139, 0, 0, 90, 83, - 0, 0, 0, 99, 78, 0, 0, 0, 0, 0, - 0, 0, 0, 101, 0, 86, 0, 0, 0, 0, + 0, 111, 127, 0, 0, 0, 0, 0, 116, 0, + 0, 136, 137, 139, 138, 140, 104, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, + 0, 124, 0, 132, 102, 0, 122, 0, 101, 0, + 115, 0, 0, 108, 114, 0, 0, 130, 131, 107, + 135, 0, 0, 103, 109, 440, 121, 0, 129, 0, + 0, 119, 0, 0, 125, 120, 117, 110, 0, 0, + 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 128, 188, 113, 439, 0, 0, 0, 0, 0, + 0, 105, 0, 0, 0, 0, 0, 0, 0, 100, + 0, 118, 0, 123, 112, 133, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 111, 127, + 0, 0, 0, 0, 0, 116, 0, 0, 136, 137, + 139, 138, 140, 104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 106, 0, 124, 0, + 132, 102, 0, 122, 0, 101, 0, 115, 0, 0, + 108, 114, 0, 0, 130, 131, 107, 135, 0, 0, + 103, 109, 0, 121, 0, 129, 0, 0, 119, 0, + 0, 125, 120, 117, 110, 0, 0, 0, 126, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 128, 98, + 113, 1094, 0, 0, 0, 0, 0, 0, 105, 0, + 0, 0, 0, 0, 0, 0, 100, 0, 118, 0, + 123, 112, 133, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 111, 127, 0, 0, 0, + 0, 0, 116, 0, 0, 136, 137, 139, 138, 140, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 106, 0, 124, 0, 132, 102, 0, + 122, 0, 101, 0, 115, 0, 0, 108, 114, 0, + 0, 130, 131, 107, 135, 0, 0, 103, 109, 0, + 121, 0, 129, 0, 0, 119, 0, 0, 125, 120, + 117, 110, 0, 0, 0, 126, 0, 0, 0, 0, + 0, 0, 0, 53, 0, 128, 98, 113, 0, 0, + 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, + 0, 0, 0, 100, 0, 118, 0, 123, 112, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 75, 0, 91, 0, 96, 85, 106, 0, 0, + 0, 0, 111, 127, 0, 0, 0, 0, 0, 116, + 0, 0, 136, 137, 139, 138, 140, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84, 100, 0, 0, 0, 0, 0, 89, 0, 107, - 109, 110, 112, 111, 113, 114, 0, 0, 0, 79, - 0, 97, 0, 105, 76, 0, 0, 0, 95, 0, - 88, 0, 0, 81, 87, 0, 0, 103, 104, 80, - 108, 0, 82, 77, 0, 0, 94, 0, 102, 92, - 0, 0, 98, 93, 0, 0, 90, 83, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 101, 0, 86, 0, 0, 0, 0, 0, 78, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, - 0, 91, 0, 96, 85, 106, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84, 100, - 0, 0, 0, 0, 0, 89, 0, 0, 109, 110, - 112, 111, 113, 114, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 0, 97, 0, 105, 76, - 0, 0, 0, 0, 0, 0, 0, 0, 81, 87, - 0, 0, 103, 104, 80, 108, 0, 0, 77, 0, - 0, 94, 0, 102, 0, 0, 0, 0, 0, 0, - 0, 90, 83, 0, 0, 0, 99, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 101, 0, 86, 0, + 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 106, 0, 124, 0, 132, 102, 0, 122, 0, 101, + 0, 115, 0, 0, 108, 114, 0, 0, 130, 131, + 107, 135, 0, 0, 103, 109, 0, 121, 0, 129, + 0, 0, 119, 0, 0, 125, 120, 117, 110, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 128, 188, 113, 905, 0, 0, 0, 0, + 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, + 100, 0, 118, 0, 123, 112, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, + 127, 0, 0, 0, 0, 0, 116, 0, 0, 136, + 137, 139, 138, 140, 104, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 106, 0, 124, + 0, 132, 102, 0, 0, 0, 0, 0, 0, 0, + 0, 108, 114, 0, 0, 130, 131, 107, 135, 0, + 0, 103, 0, 0, 121, 0, 129, 0, 122, 0, + 101, 0, 115, 0, 117, 110, 0, 0, 0, 126, + 0, 0, 0, 0, 0, 429, 109, 0, 0, 128, + 0, 113, 0, 119, 0, 0, 125, 120, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 100, 0, 118, + 0, 123, 112, 133, 98, 0, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 111, 127, 0, 0, + 0, 0, 0, 116, 0, 0, 136, 137, 139, 138, + 140, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 0, 91, 0, 96, 85, - 106, 0, 0, 0, 0, 450, 0, 0, 0, 0, - 0, 0, 0, 84, 100, 0, 0, 0, 0, 0, - 89, 0, 0, 109, 110, 112, 111, 113, 114, 462, - 0, 0, 0, 0, 467, 468, 469, 470, 471, 472, - 473, 0, 474, 475, 476, 477, 478, 463, 464, 465, - 466, 448, 449, 0, 0, 451, 0, 0, 452, 453, - 454, 455, 456, 457, 458, 459, 460, 461, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, + 124, 0, 132, 102, 0, 122, 0, 101, 0, 115, + 0, 0, 108, 114, 0, 0, 130, 131, 107, 135, + 0, 0, 103, 109, 0, 121, 0, 129, 0, 0, + 119, 0, 0, 125, 120, 117, 110, 0, 0, 0, + 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 128, 188, 113, 0, 0, 0, 0, 0, 0, 0, + 105, 0, 0, 0, 0, 0, 0, 0, 100, 0, + 118, 0, 123, 112, 133, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 111, 127, 0, + 0, 0, 0, 0, 116, 0, 0, 136, 137, 139, + 138, 140, 104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 106, 0, 124, 0, 132, + 102, 0, 122, 0, 101, 0, 115, 0, 0, 108, + 114, 0, 0, 130, 131, 107, 135, 0, 0, 103, + 109, 0, 121, 0, 129, 0, 0, 119, 0, 0, + 125, 120, 117, 110, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 128, 416, 113, + 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, + 0, 0, 0, 0, 0, 100, 0, 118, 0, 123, + 112, 133, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 111, 127, 0, 0, 0, 0, + 0, 116, 0, 0, 136, 137, 139, 138, 140, 104, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 106, 0, 124, 0, 132, 102, 0, 122, + 0, 101, 0, 115, 0, 0, 108, 114, 0, 0, + 130, 131, 107, 135, 0, 0, 103, 109, 0, 121, + 0, 129, 0, 0, 119, 0, 0, 125, 120, 117, + 110, 0, 0, 0, 126, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 128, 98, 113, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, + 0, 0, 100, 0, 118, 0, 123, 112, 133, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 111, 127, 0, 0, 0, 0, 0, 116, 0, + 0, 136, 137, 139, 138, 140, 104, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, + 0, 124, 0, 132, 102, 0, 122, 0, 101, 0, + 115, 0, 0, 108, 114, 0, 0, 130, 131, 107, + 135, 0, 0, 103, 109, 0, 121, 0, 129, 0, + 0, 119, 0, 0, 125, 120, 117, 110, 0, 0, + 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 128, 314, 113, 0, 0, 0, 0, 0, 0, + 0, 105, 0, 0, 0, 0, 0, 0, 0, 100, + 0, 118, 0, 123, 112, 133, 0, 0, 24, 51, + 26, 27, 0, 0, 0, 0, 0, 0, 111, 127, + 0, 0, 0, 0, 0, 116, 0, 0, 136, 137, + 139, 138, 140, 104, 0, 46, 0, 0, 0, 28, + 0, 0, 36, 0, 0, 0, 134, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 106, 0, 124, 37, + 132, 102, 53, 0, 0, 0, 0, 0, 0, 0, + 108, 114, 0, 0, 130, 131, 107, 135, 0, 0, + 103, 0, 0, 121, 0, 129, 0, 0, 0, 0, + 0, 0, 0, 117, 110, 0, 0, 0, 126, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 31, 32, 0, 34, 0, 100, 0, 118, 0, + 123, 112, 133, 0, 0, 0, 35, 47, 39, 0, + 0, 48, 49, 33, 0, 111, 127, 0, 0, 0, + 0, 0, 116, 0, 0, 136, 137, 139, 138, 140, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 38, 0, 0, 0, 0, 0, 0, 40, 0, 0, + 41, 42, 0, 44, 43, 0, 0, 0, 45, } var yyPact = [...]int{ - 151, -1000, -175, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 6812, -1000, -171, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 782, 821, -1000, -1000, -1000, -1000, -1000, 582, + 92, 52, -4, 90, 88, 124, 87, 6602, -1000, -1000, + 39, -1000, -156, -1000, -1000, -139, -1000, -1000, -1000, -1000, + 602, -1000, -1000, -1000, -1000, -1000, 774, 780, 613, 755, + 664, -1000, 52, 6602, 809, 2092, -137, 6729, 49, 85, + 84, 83, 49, -1000, 72, -1000, 45, 478, 45, 6602, + 6602, -62, -13, -1000, -1000, -40, -1000, -1000, -1000, -69, + -1000, -1000, -1000, -1000, -1000, -1000, 6602, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 780, 803, -1000, -1000, -1000, -1000, -1000, 566, - 4884, 11, -22, 58, 56, 181, 48, 6316, -1000, -1000, - 27, -1000, -152, -1000, -1000, -164, -1000, -1000, -1000, -1000, - 591, -1000, -1000, -1000, -1000, -1000, 769, 778, 652, 748, - 681, -1000, 11, 6316, 792, 1839, -134, 6441, 9, 34, - 9, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 42, -1000, 6, 515, 6, - 6316, 6316, -75, -15, -1000, -1000, -71, -1000, -1000, -1000, - -81, -1000, -1000, -1000, -1000, -1000, -1000, 6316, -1000, -1000, - -1000, -1000, -1000, -1000, 309, -1000, -1000, -1000, -1000, 563, - 563, -1000, 6316, -1000, -1000, -1000, -1000, -1000, 443, 728, - 4535, 4535, 780, -1000, 591, -1000, -1000, -1000, 701, -1000, - -1000, 240, 5975, 732, 106, 6316, 553, 2771, -1000, -1000, - -1000, 210, 5492, -1000, -1000, -1000, 730, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 342, -1000, -1000, -1000, -1000, 560, + 560, -1000, 6602, -1000, -1000, -1000, -1000, -1000, 397, 716, + 4595, 4595, 782, -1000, 602, -1000, -1000, -1000, 697, -1000, + -1000, 267, 6221, 704, 126, 6602, 555, 3040, -1000, -1000, + -1000, 225, 5689, -1000, -1000, -1000, 702, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -1336,148 +1378,158 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 777, 774, 511, - -1000, 6546, -1000, -1000, 6316, 223, 504, 6316, 6316, 6316, - 743, 622, 6316, -1000, -1000, 790, 6316, 6316, -1000, -1000, - 788, 789, -1000, -1000, -1000, -1000, -1000, 788, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 4535, -1000, - -1000, 114, -1000, -1000, -1000, -1000, 799, 149, 284, -1000, - 4535, 1204, 563, 563, -1000, -1000, 76, -1000, -1000, 4742, - 4742, 4742, 4742, 4742, 4742, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 563, 99, - -1000, 4324, 563, 563, 563, 563, 563, 563, 4535, 563, - 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, - 563, 563, -1000, -1000, 561, -1000, 231, 769, 443, 681, - 5384, 614, -1000, -1000, 567, 6316, -1000, 6208, 3470, 786, - 2771, 553, 4535, 111, -1000, -1000, -1000, -1000, -135, 563, - 62, 1472, 277, -65, -1000, -1000, 564, -1000, 564, 564, - 564, 564, -34, -34, -34, -34, -1000, -1000, -1000, -1000, - -1000, 600, -1000, 564, 564, 564, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 570, 570, 570, 565, 565, 702, - 742, 608, -1000, 138, 551, -1000, -1000, 6316, -1000, 769, - -79, -1000, -1000, 251, 6316, 6316, -1000, -1000, -1000, -1000, - 509, 330, -1000, 6316, -1000, -1000, -1000, 680, 4535, 4535, - 353, 4535, 4535, 153, 4742, 256, 233, 4742, 4742, 4742, - 4742, 4742, 4742, 4742, 4742, 4742, 4742, 4742, 4742, 4742, - 4742, 4742, 377, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 503, -1000, 591, 495, 495, 112, 112, 112, 112, - 112, 1330, 3691, 3237, 443, 4324, 3902, 3902, 4535, 4535, - 3902, 749, 142, 330, 6083, -1000, 443, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 3902, 3902, 3902, 3902, 4535, -1000, - -1000, -1000, 728, -1000, 749, 773, -1000, 694, 693, 3902, - -1000, 606, 6208, 563, -1000, 5257, -1000, 596, -1000, 196, - -1000, 91, -1000, -1000, -1000, -1000, -1000, 780, 4535, -1000, - 330, -1000, 502, 563, 563, 6441, -1000, 62, -1000, -1000, - -1000, -1000, -1000, -1000, 163, 163, -41, -1000, -1000, 163, - -1000, -1000, -1000, 568, 757, 139, 478, 126, -1000, -1000, - -1000, 277, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 234, 40, -1000, 756, -1000, 754, 376, 798, -67, - -1000, -1000, 308, -34, -34, -1000, -1000, 111, 720, 111, - 111, 111, 366, -1000, -1000, -1000, -1000, 301, -1000, -1000, - -1000, 291, -1000, -1000, 702, -1000, 10, -1000, 6316, -1000, - 128, 173, 19, 2, 0, -1, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 6316, -1000, -1000, 357, -1000, -1000, - -1000, 356, 4535, -1000, 251, -1000, 4535, -1000, -1000, 672, - 153, 218, -1000, -1000, 364, -1000, -1000, 330, 330, 3676, - -1000, -1000, -1000, -1000, 256, 4742, 4742, 4742, 1123, 3676, - 1347, 288, 598, 112, 306, 306, 131, 131, 131, 131, - 131, 172, 172, -1000, -1000, -1000, 443, -1000, -1000, -1000, - 443, 3902, 548, -1000, -1000, 1580, 89, 563, 88, -1000, - -1000, 443, 436, 436, 118, 342, 436, 3902, 235, -1000, - 4535, 443, -1000, 436, 443, 436, 436, -1000, -1000, 6316, - -1000, -1000, -1000, -1000, 605, -1000, 737, 529, 535, -1000, - -1000, 4113, 443, 469, 82, 780, 6208, 4535, 3237, 769, - 330, -1000, 6441, 6441, 443, -1000, 352, -1000, 321, 163, - -1000, 719, 287, 6083, -1000, 444, -1000, -1000, 422, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -90, - -1000, -1000, 524, 111, 111, -1000, 159, -1000, -1000, -1000, - 442, -1000, 541, 440, -1000, 163, 163, 2072, -1000, 6316, - -1000, -1000, -1000, 420, -35, 566, 415, 6441, -1000, -1000, - -1000, -1000, 330, -1000, 330, -1000, -1000, -1000, -1000, -1000, - -1000, 1123, 3676, 1279, -1000, 4742, 4742, -1000, -1000, 436, - 3902, -1000, -1000, 5850, -1000, -1000, 2538, 3902, 3004, -1000, - -1000, -1000, 180, 377, 180, -111, 592, 212, -1000, 4535, - 264, -1000, -1000, -1000, -1000, -1000, -1000, 786, 5725, 752, - -1000, 563, -1000, -1000, 676, 6083, 6083, 769, -1000, 330, - -1000, -1000, 443, 443, 2072, -1000, -1000, -1000, -1000, 321, - -1000, -1000, 433, -1000, 564, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 334, 281, -1000, 272, 419, 258, - -1000, -1000, -1000, -1000, -1000, -1000, 716, -1000, -1000, -1000, - -1000, 4742, 3676, 3676, -1000, -1000, -1000, -1000, 79, 443, - -1000, 443, 564, 564, -1000, 564, 565, -1000, 564, -16, - 564, -17, 443, 443, 563, -105, -1000, 330, 4535, 783, - 536, 709, -1000, -1000, -1000, 745, 4992, 5149, 795, -1000, - 563, -1000, 591, 50, -1000, -1000, -136, 563, -1000, -1000, - -116, 6083, -1000, -1000, 520, 517, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 396, 3676, 2305, -1000, -1000, -1000, 66, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 4742, 443, - 316, 330, 775, 771, 5725, 5725, 5725, 5725, -1000, 642, - 640, -1000, 666, 641, 675, 6316, -1000, 405, 4992, 80, - -1000, 5617, -1000, -1000, 6208, 535, 443, 6083, 2072, 268, - -131, 762, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 446, - -1000, -1000, -1000, 4535, 4535, 709, 604, 696, -1000, -1000, - -1000, -1000, 639, -1000, 633, -1000, -1000, -1000, -1000, -1000, - 33, 28, 26, -1000, 534, -1000, -1000, -1000, -1000, 402, - -1000, 393, 760, 443, 43, -120, 330, 531, 4535, 4535, - -1000, -1000, 563, 563, 563, -131, 2072, 692, -1000, -1000, - 670, -114, -123, 330, 330, 6083, 6083, 6083, -1000, -1000, - 144, -1000, 662, -1000, 400, -1000, 400, 400, 563, -118, - -1000, 6083, -1000, -1000, -1000, -121, -1000, -126, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 779, + 778, 514, -1000, 1201, -1000, -1000, 6602, 237, 476, 455, + 446, 6602, 6602, 6602, 721, 617, 6602, -1000, -1000, 808, + 6602, 6602, -1000, -1000, 804, 807, -1000, -1000, -1000, -1000, + -1000, 804, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 4595, -1000, -1000, 139, -1000, -1000, -1000, -1000, + 817, 161, 278, -1000, 4595, 1350, 560, 560, -1000, -1000, + 108, -1000, -1000, 4806, 4806, 4806, 4806, 4806, 4806, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 560, 122, -1000, 4384, 560, 560, 560, 560, + 560, 560, 4595, 560, 560, 560, 560, 560, 560, 560, + 560, 560, 560, 560, 560, 560, -1000, -1000, 557, -1000, + 256, 774, 397, 664, 5562, 649, -1000, -1000, 595, 6602, + -1000, 6475, 3751, 802, 3040, 555, 4595, 95, -1000, -1000, + -1000, -1000, -121, 560, 37, 227, 611, -54, -1000, -1000, + 565, -1000, 565, 565, 565, 565, -8, -8, -8, -8, + -1000, -1000, -1000, -1000, -1000, 608, -1000, 565, 565, 565, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 607, 607, + 607, 566, 566, 708, 718, 616, 612, 610, -1000, 163, + 546, -1000, -1000, 6602, -1000, 774, -65, -1000, -1000, 257, + 6602, 6602, -1000, -1000, -1000, -1000, 512, 283, -1000, 6602, + -1000, -1000, -1000, 677, 4595, 4595, 347, 4595, 4595, 187, + 4806, 297, 233, 4806, 4806, 4806, 4806, 4806, 4806, 4806, + 4806, 4806, 4806, 4806, 4806, 4806, 4806, 4806, 340, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 437, -1000, 602, + 496, 496, 117, 117, 117, 117, 117, 5006, 1831, 3514, + 397, 4384, 3962, 3962, 4595, 4595, 3962, 727, 235, 283, + 6348, -1000, 397, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 3962, 3962, 3962, 3962, 4595, -1000, -1000, -1000, 716, -1000, + 727, 806, -1000, 689, 688, 3962, -1000, 594, 6475, 560, + -1000, 5435, -1000, 593, -1000, 223, -1000, 116, -1000, -1000, + -1000, -1000, -1000, 782, 4595, -1000, 283, -1000, 435, 560, + 560, 6729, -1000, 37, -1000, -1000, -1000, -1000, -1000, -1000, + 211, 211, -21, -1000, -1000, 211, -1000, -1000, -1000, 753, + 165, 433, 166, 166, -1000, -1000, -1000, 611, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 262, 82, -1000, + 743, -1000, 734, 364, 815, -56, -1000, -1000, 338, -8, + -8, -1000, -1000, 95, 701, 95, 95, 95, 363, -1000, + -1000, -1000, -1000, 333, -1000, -1000, -1000, 324, -1000, -1000, + 708, -1000, 40, -1000, 6602, 6602, 6602, -1000, 174, 214, + 54, 35, 34, 32, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 6602, -1000, -1000, 362, -1000, -1000, -1000, 358, + 4595, -1000, 257, -1000, 4595, -1000, -1000, 674, 187, 199, + -1000, -1000, 300, -1000, -1000, 283, 283, 922, -1000, -1000, + -1000, -1000, 297, 4806, 4806, 4806, 1144, 922, 1422, 484, + 1293, 117, 305, 305, 147, 147, 147, 147, 147, 660, + 660, -1000, -1000, -1000, 397, -1000, -1000, -1000, 397, 3962, + 545, -1000, -1000, 5157, 112, 560, 106, -1000, -1000, 397, + 444, 444, 145, 264, 444, 3962, 266, -1000, 4595, 397, + -1000, 444, 397, 444, 444, -1000, -1000, 6602, -1000, -1000, + -1000, -1000, 585, -1000, 710, 519, 539, -1000, -1000, 4173, + 397, 505, 104, 782, 6475, 4595, 3514, 774, 283, -1000, + 6729, 6729, 397, -1000, 354, -1000, 332, 211, -1000, 700, + 321, 606, 430, 604, 596, 406, 399, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -78, -1000, -1000, + 515, 95, 95, -1000, 184, -1000, -1000, -1000, 475, -1000, + 544, 472, -1000, 211, 211, 560, 560, 560, -1000, 6602, + -1000, -1000, -1000, 389, -16, 582, 386, 6729, -1000, -1000, + -1000, -1000, 283, -1000, 283, -1000, -1000, -1000, -1000, -1000, + -1000, 1144, 922, 1199, -1000, 4806, 4806, -1000, -1000, 444, + 3962, -1000, -1000, 6070, -1000, -1000, 2803, 3962, 3277, -1000, + -1000, -1000, 81, 340, 81, -97, 554, 229, -1000, 4595, + 242, -1000, -1000, -1000, -1000, -1000, -1000, 802, 5943, 731, + -1000, 560, -1000, -1000, 592, 6348, 6348, 774, -1000, 283, + -1000, -1000, 397, 397, 2329, -1000, -1000, -1000, -1000, 332, + -1000, -1000, 6348, 581, 6348, 6348, 580, 567, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 350, 320, -1000, 314, 388, + 194, 6348, 6348, 6348, -1000, -1000, -1000, 696, -1000, -1000, + -1000, -1000, 4806, 922, 922, -1000, -1000, -1000, -1000, 101, + 397, -1000, 397, 565, 565, -1000, 565, 566, -1000, 565, + 17, 565, 15, 397, 397, 560, -94, -1000, 283, 4595, + 787, 542, 790, -1000, -1000, -1000, 725, 1498, 5308, 812, + -1000, 560, -1000, 602, 70, -1000, -1000, -132, 560, -1000, + -1000, -1000, -1000, 442, -1000, 565, 6348, 429, 427, 6348, + 6348, -1000, 486, 424, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 423, 423, 423, 382, 922, 2566, -1000, -1000, -1000, + 71, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 4806, + 397, 306, 283, 784, 777, 5943, 5943, 5943, 5943, -1000, + 661, 657, -1000, 644, 640, 629, 6602, -1000, 416, 1498, + 114, -1000, 5816, -1000, -1000, 6475, 539, 397, 6348, 2329, + 296, -138, -1000, 6348, -1000, 414, -1000, -1000, 410, 396, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 703, + -1000, -1000, -1000, 4595, 4595, 790, 586, 726, -1000, -1000, + -1000, -1000, 656, -1000, 630, -1000, -1000, -1000, -1000, -1000, + 77, 74, 60, -1000, 538, -1000, -1000, -1000, -1000, 394, + -1000, 369, -1000, -1000, 148, 148, -1000, -1000, 148, 68, + 359, 397, 63, -107, 283, 521, 4595, 4595, -1000, -1000, + 560, 560, 560, -138, 2329, 687, 148, -1000, -1000, -1000, + 211, 298, 59, 68, 359, 713, 713, -1000, -1000, 763, + 713, -1000, -1000, 668, -101, -125, 283, 283, 6348, 6348, + 6348, -1000, -1000, 154, 277, -1000, -1000, -1000, -1000, -1000, + 211, 211, 766, -1000, 663, -1000, 380, -1000, 380, 380, + 560, -1000, 388, 388, -1000, -103, -1000, 6348, -1000, -1000, + -1000, -1000, -1000, -108, -1000, -127, -1000, } var yyPgo = [...]int{ - 0, 1009, 1006, 1005, 1004, 1003, 1002, 1001, 29, 528, - 997, 992, 990, 989, 988, 987, 985, 984, 979, 978, - 977, 976, 975, 974, 973, 185, 972, 969, 968, 51, - 967, 60, 965, 964, 963, 25, 93, 41, 37, 20, - 962, 23, 19, 7, 961, 960, 6, 959, 1092, 957, - 56, 955, 952, 44, 951, 949, 948, 4, 14, 941, - 938, 934, 933, 57, 112, 923, 921, 918, 913, 911, - 910, 43, 5, 12, 15, 24, 909, 61, 2, 908, - 42, 906, 904, 898, 897, 40, 896, 67, 895, 22, - 62, 893, 35, 8, 36, 119, 58, 890, 887, 886, - 339, 885, 186, 373, 884, 45, 883, 882, 27, 0, - 18, 17, 28, 880, 39, 767, 32, 9, 879, 878, - 97, 1, 21, 877, 26, 875, 874, 873, 872, 870, - 869, 215, 867, 865, 864, 863, 862, 861, 859, 857, - 856, 10, 47, 16, 854, 48, 46, 54, 851, 847, - 845, 59, 13, 844, 841, 840, 839, 838, 33, 837, - 52, 34, 835, 834, 830, 55, 829, 11, 823, 820, - 819, 50, 818, 817, 53, 3, 815, 812, 811, 113, - 209, 810, 65, + 0, 1063, 1061, 1059, 1058, 1056, 1055, 1054, 19, 672, + 1051, 1048, 1046, 1042, 1039, 1036, 1033, 1017, 1016, 1015, + 1013, 1012, 1011, 1010, 1009, 130, 1008, 1004, 1003, 61, + 1002, 63, 1001, 999, 998, 35, 67, 30, 49, 142, + 997, 32, 29, 17, 996, 995, 15, 994, 1142, 993, + 65, 992, 991, 50, 990, 987, 980, 2, 31, 978, + 976, 971, 970, 72, 885, 969, 966, 964, 963, 951, + 935, 48, 11, 23, 10, 28, 934, 106, 18, 933, + 43, 932, 930, 928, 926, 45, 925, 59, 923, 39, + 60, 922, 54, 14, 41, 127, 62, 920, 918, 917, + 546, 914, 321, 370, 911, 51, 908, 37, 0, 12, + 34, 42, 907, 52, 1000, 40, 22, 906, 905, 44, + 3, 26, 903, 24, 902, 901, 897, 896, 895, 894, + 232, 893, 892, 890, 889, 888, 887, 886, 884, 883, + 21, 47, 25, 53, 7, 56, 882, 881, 880, 69, + 16, 879, 877, 876, 875, 869, 46, 868, 75, 36, + 866, 865, 864, 58, 9, 33, 13, 8, 27, 4, + 5, 862, 861, 858, 855, 852, 850, 1, 848, 847, + 55, 838, 836, 57, 6, 834, 832, 831, 115, 337, + 828, 145, } var yyR1 = [...]int{ - 0, 177, 178, 178, 7, 7, 7, 7, 7, 7, + 0, 186, 187, 187, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 9, 10, 10, 11, - 11, 12, 12, 28, 28, 13, 14, 15, 15, 123, - 123, 176, 176, 175, 140, 140, 16, 16, 16, 16, - 16, 16, 172, 172, 173, 173, 174, 174, 147, 147, - 146, 146, 145, 145, 144, 144, 148, 148, 148, 19, - 161, 163, 163, 164, 164, 165, 165, 165, 165, 165, - 139, 143, 143, 135, 136, 137, 138, 138, 162, 162, - 162, 158, 114, 114, 125, 125, 125, 169, 169, 170, - 170, 171, 171, 171, 171, 171, 171, 171, 128, 128, - 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, - 127, 127, 129, 129, 129, 129, 129, 130, 130, 130, - 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, - 130, 157, 157, 131, 131, 151, 151, 152, 152, 152, - 149, 149, 150, 150, 153, 153, 132, 132, 132, 132, - 132, 133, 154, 141, 141, 141, 142, 142, 155, 155, - 156, 156, 134, 159, 159, 166, 166, 166, 166, 166, - 160, 160, 168, 168, 167, 17, 17, 17, 17, 17, + 11, 12, 12, 28, 28, 13, 14, 15, 15, 122, + 122, 185, 185, 184, 139, 139, 16, 16, 16, 16, + 16, 16, 16, 16, 176, 176, 177, 177, 172, 170, + 170, 168, 168, 174, 174, 166, 166, 171, 171, 169, + 169, 167, 167, 173, 173, 181, 181, 182, 182, 183, + 183, 145, 145, 144, 144, 143, 143, 146, 146, 146, + 19, 159, 161, 161, 162, 162, 163, 163, 163, 163, + 163, 138, 142, 142, 134, 135, 136, 137, 137, 160, + 160, 160, 156, 113, 113, 124, 124, 124, 178, 178, + 179, 179, 180, 180, 180, 180, 180, 180, 180, 127, + 127, 125, 125, 125, 125, 125, 125, 125, 126, 126, + 126, 126, 126, 128, 128, 128, 128, 128, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 155, 155, 130, 130, 149, 149, 150, 150, + 150, 147, 147, 148, 148, 151, 151, 131, 131, 131, + 131, 131, 132, 152, 140, 140, 140, 141, 141, 153, + 153, 154, 154, 133, 157, 157, 157, 157, 157, 157, + 158, 158, 165, 165, 164, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 54, 54, 1, 20, 2, 3, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 34, 34, 50, 50, 51, 51, 52, 52, 53, 53, 53, - 24, 22, 23, 23, 23, 23, 181, 25, 26, 26, + 24, 22, 23, 23, 23, 23, 190, 25, 26, 26, 27, 27, 27, 31, 31, 31, 29, 29, 30, 30, - 37, 37, 36, 36, 38, 38, 38, 38, 113, 113, - 113, 112, 112, 40, 40, 41, 41, 42, 42, 43, - 43, 43, 55, 44, 44, 44, 44, 119, 119, 118, - 118, 118, 117, 117, 45, 45, 45, 45, 46, 46, + 37, 37, 36, 36, 38, 38, 38, 38, 112, 112, + 112, 111, 111, 40, 40, 41, 41, 42, 42, 43, + 43, 43, 55, 44, 44, 44, 44, 118, 118, 117, + 117, 117, 116, 116, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 49, 49, 48, 48, 56, 56, 56, 56, 57, 57, 58, 58, 39, 39, 39, 39, 39, 39, 39, 101, 101, 60, 60, 59, 59, 59, @@ -1488,10 +1540,10 @@ var yyR1 = [...]int{ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 68, 68, 68, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 67, 67, 67, 67, 67, 67, 67, 67, 182, 182, - 69, 69, 69, 69, 32, 32, 32, 32, 32, 122, - 122, 124, 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 81, 81, 33, 33, 79, 79, + 67, 67, 67, 67, 67, 67, 67, 67, 191, 191, + 69, 69, 69, 69, 32, 32, 32, 32, 32, 121, + 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 81, 81, 33, 33, 79, 79, 80, 82, 82, 78, 78, 78, 63, 63, 63, 63, 63, 63, 63, 65, 65, 65, 83, 83, 84, 84, 85, 85, 86, 86, 87, 88, 88, 88, 89, 89, @@ -1500,25 +1552,25 @@ var yyR1 = [...]int{ 75, 74, 76, 93, 93, 94, 95, 95, 96, 96, 98, 98, 98, 97, 97, 97, 99, 99, 102, 102, 103, 103, 100, 100, 104, 104, 104, 104, 104, 104, - 104, 104, 104, 104, 105, 105, 105, 106, 106, 107, - 107, 107, 110, 110, 111, 111, 115, 115, 116, 116, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 104, 104, 104, 104, 105, 105, 105, 106, 106, 175, + 175, 109, 109, 110, 110, 114, 114, 115, 115, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 179, 180, 120, 121, 121, 121, + 108, 188, 189, 119, 120, 120, 120, } var yyR2 = [...]int{ @@ -1527,19 +1579,21 @@ var yyR2 = [...]int{ 1, 1, 1, 4, 6, 7, 10, 1, 3, 1, 3, 6, 7, 1, 1, 8, 7, 3, 4, 1, 1, 1, 3, 5, 0, 2, 2, 10, 12, 8, - 5, 7, 0, 1, 1, 2, 4, 4, 0, 1, - 0, 1, 1, 2, 1, 1, 1, 1, 1, 4, - 4, 0, 1, 1, 2, 1, 1, 1, 1, 1, - 3, 1, 1, 3, 3, 4, 1, 1, 1, 3, - 3, 3, 1, 1, 3, 1, 1, 0, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 1, 2, 2, 2, 1, 4, 4, 2, - 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, - 4, 1, 3, 0, 3, 0, 5, 0, 3, 5, - 0, 1, 0, 1, 1, 2, 2, 2, 2, 2, - 2, 3, 1, 0, 3, 3, 0, 2, 2, 1, - 2, 1, 2, 4, 7, 2, 3, 2, 2, 3, + 5, 11, 11, 11, 1, 1, 1, 1, 2, 3, + 2, 0, 2, 1, 1, 0, 2, 1, 3, 0, + 2, 0, 2, 3, 3, 0, 1, 1, 2, 4, + 4, 0, 1, 0, 1, 1, 2, 1, 1, 1, + 4, 4, 0, 1, 1, 2, 1, 1, 1, 1, + 1, 3, 1, 1, 3, 3, 4, 1, 1, 1, + 3, 3, 3, 1, 1, 3, 1, 1, 0, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 1, 2, 2, 2, 1, 4, 4, + 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, + 1, 4, 1, 3, 0, 3, 0, 5, 0, 3, + 5, 0, 1, 0, 1, 1, 2, 2, 2, 2, + 2, 2, 3, 1, 0, 3, 3, 0, 2, 2, + 1, 2, 1, 2, 5, 7, 6, 6, 7, 7, 1, 1, 1, 3, 2, 6, 7, 7, 7, 9, 7, 7, 7, 4, 5, 4, 1, 3, 3, 3, 2, 2, 3, 4, 2, 3, 2, 2, 4, 4, @@ -1596,259 +1650,273 @@ var yyR2 = [...]int{ } var yyChk = [...]int{ - -1000, -177, -7, -8, -12, -13, -14, -15, -16, -17, + -1000, -186, -7, -8, -12, -13, -14, -15, -16, -17, -18, -1, -20, -21, -24, -22, -2, -3, -4, -5, - -6, -23, -9, -10, 6, -28, 8, 9, 33, -19, - 114, 115, 116, 137, 118, 130, 36, 53, 214, 132, - 221, 224, 225, 228, 227, 232, 29, 131, 135, 136, - -179, 7, 197, 56, -178, 238, -85, 14, -27, 5, - -25, -181, -25, -25, -25, -25, -161, 56, 189, -107, - 121, 22, -110, 59, -109, 203, 138, 157, 68, 133, - 153, 147, 31, 171, 222, 208, 187, 148, 19, 229, - 170, 205, 38, 42, 160, 17, 207, 135, 41, 175, - 223, 185, 162, 151, 152, 137, 209, 123, 154, 232, - 233, 235, 234, 236, 237, -100, 125, 121, 122, 189, - 121, 121, 183, 114, 178, 216, -51, 218, 219, 185, - 121, 220, 181, 217, 180, 59, 35, 121, -115, 59, - -109, -120, -120, 62, 207, -120, 226, -120, -120, 233, - 235, 234, 236, 237, -120, -120, -120, -120, -8, -89, - 16, 15, -11, -9, -179, 6, 24, 25, -31, 43, - 44, -26, -100, -48, -115, 10, -95, -123, -96, 230, - 229, -111, -98, -110, -108, 161, 158, 231, 74, 26, - 28, 173, 77, 144, 109, 166, 15, 78, 155, 108, - 186, 198, 114, 51, 190, 191, 188, 189, 178, 149, - 32, 9, 29, 131, 25, 102, 116, 81, 82, 216, - 134, 27, 132, 71, 18, 54, 10, 35, 12, 13, - 126, 125, 93, 122, 49, 7, 142, 143, 110, 30, - 90, 45, 23, 47, 91, 16, 192, 193, 34, 169, - 165, 202, 168, 141, 164, 104, 52, 39, 75, 69, - 150, 72, 55, 136, 73, 14, 50, 219, 128, 218, - 146, 92, 117, 197, 48, 6, 201, 33, 130, 140, - 46, 121, 179, 167, 139, 163, 80, 124, 70, 220, - 5, 22, 176, 8, 53, 127, 194, 195, 196, 37, - 159, 156, 217, 206, 79, 11, 177, 210, 215, -162, - -158, -114, 59, -109, -103, 126, 122, -103, 121, -102, - 126, 59, -102, -48, -48, 182, 121, 189, -120, -120, - 179, -52, 186, 187, -120, -120, -120, 185, -120, -120, - -120, -120, -120, -48, -120, 62, -120, -74, -179, -74, - -120, -48, -120, -180, 58, -90, 18, 34, -39, -59, - 75, -64, 32, 27, -63, -60, -78, -76, -77, 109, - 98, 99, 106, 76, 110, -68, -66, -67, -69, 61, - 60, 62, 63, 64, 65, 69, 70, 71, -110, -115, - -74, -179, 47, 48, 198, 199, 202, 200, 78, 37, - 188, 196, 195, 194, 192, 193, 190, 191, 126, 189, - 104, 197, 59, -109, -86, -87, -39, -85, -8, -25, - 39, -29, 25, 67, -49, 30, -48, 33, 111, -48, - 57, -95, 83, -97, -110, 61, 32, 33, 15, 15, - 58, 57, -125, -128, -130, -129, -126, -127, 155, 156, - 109, 159, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 133, 151, 152, 153, 154, 138, 139, 140, - 141, 142, 143, 144, 146, 147, 148, 149, 150, -115, - 75, 59, -48, -48, -54, -48, 27, 55, -115, -34, - 10, -48, -48, -50, 10, 10, -50, -120, -120, -120, - -72, -39, -120, -105, 124, 26, 8, 93, 74, 73, - 90, 57, 17, -39, -61, 93, 75, 91, 92, 77, - 95, 94, 105, 98, 99, 100, 101, 102, 103, 104, - 96, 97, 108, 83, 84, 85, 86, 87, 88, 89, - -101, -179, -77, -179, 112, 113, -64, -64, -64, -64, - -64, -64, -179, 111, -8, -179, -179, -179, -179, -179, - -179, -179, -81, -39, -179, -182, -179, -182, -182, -182, - -182, -182, -182, -182, -179, -179, -179, -179, 57, -88, - 28, 29, -89, -180, -31, -65, -110, 62, 65, -30, - 46, -62, 33, 37, -8, -179, -48, -93, -94, -78, - -110, -115, -116, -115, -108, 158, 161, -58, 11, -96, - -39, -142, 108, 212, 213, -179, -163, -164, -165, -135, - -136, -137, -138, -139, 68, 222, -147, 229, 223, 173, - 32, -158, -159, -166, 128, 22, -160, 19, 122, 23, - -169, -170, -171, -153, -132, -154, -155, -156, -134, -133, - 69, 75, 32, 173, 128, 23, 22, 68, 55, -149, - 176, -131, 56, -131, -131, -131, -131, -141, 158, -141, - -141, -141, 56, -131, -131, -131, -151, 56, -151, -151, - -152, 56, -152, -172, -173, -174, -147, 27, 55, -104, - 117, 222, 198, 119, 116, 120, 115, 173, 158, 68, - 32, 14, 209, 59, 57, -48, -89, 184, -120, -120, - -53, 91, 11, -48, -48, -120, 57, -180, -48, 41, - -39, -39, -70, 69, 75, 70, 71, -39, -39, -64, - -71, -74, -77, 66, 93, 91, 92, 77, -64, -64, + -6, -23, -9, -10, 6, -28, 8, 9, 37, -19, + 118, 119, 120, 141, 122, 134, 40, 57, 218, 136, + 225, 228, 229, 232, 231, 236, 33, 135, 139, 140, + -188, 7, 201, 60, -187, 242, -85, 14, -27, 5, + -25, -190, -25, -25, -25, -25, -159, 60, 193, -175, + 21, 25, 125, 26, -100, 129, 125, 126, 193, 125, + 125, 187, 118, 182, 220, -51, 222, 223, 189, 125, + 224, 185, 221, 184, 63, 39, 125, -114, 63, -108, + 207, 19, 142, 161, 241, 72, 137, 157, 151, 35, + 175, 226, 212, 191, 152, 21, 233, 174, 209, 42, + 46, 164, 17, 211, 139, 45, 179, 227, 189, 166, + 155, 156, 141, 213, 127, 158, 236, 237, 239, 238, + 240, -119, -119, 66, 211, -119, 230, -119, -119, 237, + 239, 238, 240, 241, -119, -119, -119, -119, -8, -89, + 16, 15, -11, -9, -188, 6, 28, 29, -31, 47, + 48, -26, -100, -48, -114, 10, -95, -122, -96, 234, + 233, -110, -98, -109, -107, 165, 162, 235, 63, -108, + 78, 30, 32, 177, 81, 148, 113, 170, 15, 82, + 159, 112, 190, 202, 118, 55, 194, 195, 192, 193, + 182, 153, 36, 9, 33, 135, 29, 106, 120, 85, + 86, 220, 138, 31, 136, 75, 18, 58, 10, 39, + 12, 13, 130, 129, 97, 126, 53, 7, 146, 147, + 114, 34, 94, 49, 27, 51, 95, 16, 196, 197, + 38, 173, 169, 206, 172, 145, 168, 108, 56, 43, + 79, 73, 154, 76, 59, 140, 77, 14, 54, 223, + 132, 222, 150, 96, 121, 201, 52, 6, 205, 37, + 134, 144, 50, 125, 183, 171, 143, 167, 84, 128, + 74, 224, 5, 26, 180, 8, 57, 131, 198, 199, + 200, 41, 163, 160, 221, 210, 83, 11, 181, 214, + 219, -160, -156, -113, 63, -108, -103, 130, 126, 126, + 126, -103, 125, -102, 130, 63, -102, -48, -48, 186, + 125, 193, -119, -119, 183, -52, 190, 191, -119, -119, + -119, 189, -119, -119, -119, -119, -119, -48, -119, 66, + -119, -74, -188, -74, -119, -48, -119, -189, 62, -90, + 18, 38, -39, -59, 79, -64, 36, 31, -63, -60, + -78, -76, -77, 113, 102, 103, 110, 80, 114, -68, + -66, -67, -69, 65, 64, 66, 67, 68, 69, 73, + 74, 75, -109, -114, -74, -188, 51, 52, 202, 203, + 206, 204, 82, 41, 192, 200, 199, 198, 196, 197, + 194, 195, 130, 193, 108, 201, 63, -108, -86, -87, + -39, -85, -8, -25, 43, -29, 29, 71, -49, 34, + -48, 37, 115, -48, 61, -95, 87, -97, -109, 65, + 36, 37, 15, 15, 62, 61, -124, -127, -129, -128, + -125, -126, 159, 160, 113, 163, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 137, 155, 156, 157, + 158, 142, 143, 144, 145, 146, 147, 148, 150, 151, + 152, 153, 154, -114, 79, 63, 63, 63, -48, -48, + -54, -48, 31, 59, -114, -34, 10, -48, -48, -50, + 10, 10, -50, -119, -119, -119, -72, -39, -119, -105, + 128, 30, 8, 97, 78, 77, 94, 61, 17, -39, + -61, 97, 79, 95, 96, 81, 99, 98, 109, 102, + 103, 104, 105, 106, 107, 108, 100, 101, 112, 87, + 88, 89, 90, 91, 92, 93, -101, -188, -77, -188, + 116, 117, -64, -64, -64, -64, -64, -64, -188, 115, + -8, -188, -188, -188, -188, -188, -188, -188, -81, -39, + -188, -191, -188, -191, -191, -191, -191, -191, -191, -191, + -188, -188, -188, -188, 61, -88, 32, 33, -89, -189, + -31, -65, -109, 66, 69, -30, 50, -62, 37, 41, + -8, -188, -48, -93, -94, -78, -109, -114, -115, -114, + -107, 162, 165, -58, 11, -96, -39, -141, 112, 216, + 217, -188, -161, -162, -163, -134, -135, -136, -137, -138, + 72, 226, -145, 233, 227, 177, 36, -156, -157, 132, + 26, -158, 21, 25, 126, 27, -178, -179, -180, -151, + -131, -152, -153, -154, -133, -132, 73, 79, 36, 177, + 132, 27, 26, 72, 59, -147, 180, -130, 60, -130, + -130, -130, -130, -140, 162, -140, -140, -140, 60, -130, + -130, -130, -149, 60, -149, -149, -150, 60, -150, -181, + -182, -183, -145, 31, 59, 59, 59, -104, 121, 226, + 202, 123, 120, 124, 119, 177, 162, 72, 36, 14, + 213, 63, 61, -48, -89, 188, -119, -119, -53, 95, + 11, -48, -48, -119, 61, -189, -48, 45, -39, -39, + -70, 73, 79, 74, 75, -39, -39, -64, -71, -74, + -77, 70, 97, 95, 96, 81, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, - -64, -64, -64, -122, 59, 61, 59, -63, -63, -110, - -37, 25, -36, -38, 100, -39, -115, -111, -116, -108, - -180, -8, -36, -36, -39, -39, -36, -29, -79, -80, - 79, -110, -180, -36, -37, -36, -36, -87, -90, -99, - 18, 10, 37, 37, -36, -92, 55, -93, -73, -75, - -74, -179, -8, -91, -110, -58, 57, 83, 111, -85, - -39, 59, -179, -179, -114, -165, -146, 83, -146, -145, - 161, 158, -146, 56, 23, -160, 59, 59, -160, -171, - 69, 61, 62, 63, 69, 188, 23, 23, 61, 8, - -150, 177, 62, -141, -141, -142, 33, -142, -142, -142, - -157, 61, 62, 62, -174, 108, -145, -48, -120, -105, - -106, 122, 23, 83, 124, 129, 129, 129, -48, -120, - 61, 61, -39, -53, -39, -120, 42, 69, 70, 71, - -71, -64, -64, -64, -35, 134, 74, -180, -180, -36, - 57, -113, -112, 26, -110, 61, 111, -179, 111, -180, - -180, -180, 57, 127, 26, -180, -36, -82, -80, 81, - -39, -180, -180, -180, -180, -180, -48, -40, 10, 31, - -92, 57, -180, -180, -180, 57, 111, -85, -94, -39, - -111, -89, -114, -114, -180, 61, -143, 59, 61, -146, - 33, 62, -168, -167, -110, 59, 59, 188, 58, -142, - -142, 59, 109, 58, 57, 57, 58, 57, -146, -146, - -121, -179, -111, -48, -120, 59, 158, -161, 59, -158, - -35, 74, -64, -64, -180, -38, -112, 100, -116, -37, - -111, -124, 109, 155, 133, 153, 149, 170, 160, 175, - 151, 176, -122, -124, 203, -85, 82, -39, 80, -58, - -41, -42, -43, -44, -55, -77, -179, -48, 23, -75, - 37, -8, -179, -110, -110, -89, -180, -180, -121, -143, - 58, 57, -131, 61, 62, 62, -144, 59, 32, -148, - 59, 109, 32, 33, -64, 111, -180, -180, -131, -131, - -131, -152, -131, 143, -131, 143, -180, -180, -179, -33, - 201, -39, -83, 12, 57, -45, -46, -47, 45, 49, - 51, 46, 47, 48, 52, -119, 26, -41, -179, -118, - -117, 26, -115, 61, 8, -73, -8, 111, -140, 211, - -179, 206, -167, 58, 58, 59, 100, -141, 59, -64, - -180, 61, -84, 13, 15, -42, -43, -42, -43, 45, - 45, 45, 50, 45, 50, 45, -46, -115, -180, -56, - 53, 125, 54, -117, -93, -180, -110, -121, 62, -176, - -175, 210, 20, -32, 93, 206, -39, -72, 55, 55, - 45, 45, 122, 122, 122, 57, -180, 59, 21, -180, - 204, 52, 207, -39, -39, -179, -179, -179, -175, -121, - 37, 42, 205, 208, -57, -110, -57, -57, 93, 42, - -180, 57, -180, -180, -74, 206, -110, 207, 208, + -64, -121, 63, 65, 63, -63, -63, -109, -37, 29, + -36, -38, 104, -39, -114, -110, -115, -107, -189, -8, + -36, -36, -39, -39, -36, -29, -79, -80, 83, -109, + -189, -36, -37, -36, -36, -87, -90, -99, 18, 10, + 41, 41, -36, -92, 59, -93, -73, -75, -74, -188, + -8, -91, -109, -58, 61, 87, 115, -85, -39, 63, + -188, -188, -113, -163, -144, 87, -144, -143, 165, 162, + -144, 27, -158, 63, 63, -158, -158, -180, 73, 65, + 66, 67, 73, 192, 27, 27, 65, 8, -148, 181, + 66, -140, -140, -141, 37, -141, -141, -141, -155, 65, + 66, 66, -183, 112, -143, -48, -48, -48, -119, -105, + -106, 126, 27, 87, 128, 133, 133, 133, -48, -119, + 65, 65, -39, -53, -39, -119, 46, 73, 74, 75, + -71, -64, -64, -64, -35, 138, 78, -189, -189, -36, + 61, -112, -111, 30, -109, 65, 115, -188, 115, -189, + -189, -189, 61, 131, 30, -189, -36, -82, -80, 85, + -39, -189, -189, -189, -189, -189, -48, -40, 10, 35, + -92, 61, -189, -189, -189, 61, 115, -85, -94, -39, + -110, -89, -113, -113, -189, 65, -142, 63, 65, -144, + 37, 66, 60, 63, 60, 60, 63, 63, 192, 62, + -141, -141, 63, 113, 62, 61, 61, 62, 61, -144, + -144, -188, -188, -188, -48, -119, 63, 162, -159, 63, + -156, -35, 78, -64, -64, -189, -38, -111, 104, -115, + -37, -110, -123, 113, 159, 137, 157, 153, 174, 164, + 179, 155, 180, -121, -123, 207, -85, 86, -39, 84, + -58, -41, -42, -43, -44, -55, -77, -188, -48, 27, + -75, 41, -8, -188, -109, -109, -89, -189, -189, -120, + -188, -110, -142, -165, -164, -109, 60, -165, -165, 60, + 60, 65, 66, 66, -177, 63, 36, -146, 63, 113, + 36, -165, -165, -165, 37, -64, 115, -189, -189, -130, + -130, -130, -150, -130, 147, -130, 147, -189, -189, -188, + -33, 205, -39, -83, 12, 61, -45, -46, -47, 49, + 53, 55, 50, 51, 52, 56, -118, 30, -41, -188, + -117, -116, 30, -114, 65, 8, -73, -8, 115, -139, + 215, -188, 62, 61, -130, -165, 62, 62, -165, -165, + 62, 62, -189, -189, -189, 63, 104, -140, 63, -64, + -189, 65, -84, 13, 15, -42, -43, -42, -43, 49, + 49, 49, 54, 49, 54, 49, -46, -114, -189, -56, + 57, 129, 58, -116, -93, -189, -109, -120, 66, -185, + -184, 214, -164, 62, -168, -168, 62, 62, -168, -166, + -169, -32, 97, 210, -39, -72, 59, 59, 49, 49, + 126, 126, 126, 61, -189, 63, -168, -174, -170, -172, + 22, 72, 131, -166, -169, -167, -167, -171, -170, 210, + -167, -170, -189, 208, 56, 211, -39, -39, -188, -188, + -188, -184, -120, 41, -144, 65, -176, 216, 20, -173, + 38, 19, 24, 46, 209, 212, -57, -109, -57, -57, + 97, 66, -144, -144, 23, 46, -189, 61, -189, -189, + -74, -177, -177, 210, -109, 211, 212, } var yyDef = [...]int{ 0, -2, 2, -2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 460, 0, 246, 246, 246, 246, 246, 0, - 529, 512, 0, 0, 0, 233, 0, 0, 703, 703, - 0, 703, 0, 703, 703, 0, 703, 703, 703, 703, - 0, 33, 34, 701, 1, 3, 468, 0, 0, 250, - 253, 248, 512, 0, 0, 0, 46, 0, 510, 0, - 510, 530, 531, 532, 533, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 0, 513, 508, 0, 508, - 0, 0, 0, 0, 703, 703, 0, 703, 703, 703, - 0, 703, 703, 703, 703, 703, 234, 0, 241, 536, - 537, 200, 201, 703, 0, 204, 703, 206, 207, 0, - 0, 703, 0, 703, 242, 243, 244, 245, 27, 472, - 0, 0, 460, 29, 0, 246, 251, 252, 256, 254, - 255, 247, 0, 0, 306, 0, 37, 0, 496, 39, - -2, 0, 0, 534, 535, -2, 551, 502, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 553, - 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, - 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, - 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, - 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, - 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, - 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, - 654, 655, 656, 657, 658, 659, 660, 0, 0, 0, - 88, 0, 92, 93, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 199, 229, 0, 0, 216, 217, - 231, 0, 235, 236, 220, 221, 222, 231, 224, 225, - 226, 227, 228, 703, 202, 703, 205, 703, 0, 703, - 210, 524, 212, 28, 702, 23, 0, 0, 469, 316, - 0, 321, 323, 0, 358, 359, 360, 361, 362, 0, - 0, 0, 0, 0, 0, 384, 385, 386, 387, 446, - 447, 448, 449, 450, 451, 452, 325, 326, 443, 0, - 492, 0, 0, 0, 0, 0, 0, 0, 434, 0, - 408, 408, 408, 408, 408, 408, 408, 408, 0, 0, - 0, 0, -2, -2, 461, 462, 465, 468, 27, 253, - 0, 258, 257, 249, 0, 0, 305, 0, 0, 314, - 0, 38, 0, 166, 503, 504, 505, 501, 0, 0, - -2, 0, 97, 150, 95, 96, 143, 109, 143, 143, - 143, 143, 163, 163, 163, 163, 135, 136, 137, 138, - 139, 0, 122, 143, 143, 143, 126, 110, 111, 112, - 113, 114, 115, 116, 145, 145, 145, 147, 147, -2, - 0, 0, 69, 0, 193, 196, 509, 0, 195, 468, - 0, 703, 703, 237, 0, 0, 703, 240, 203, 208, - 0, 356, 209, 0, 525, 526, 473, 0, 0, 0, - 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, + 21, 22, 480, 0, 266, 266, 266, 266, 266, 0, + 549, 532, 0, 0, 0, 253, 0, 0, 723, 723, + 0, 723, 0, 723, 723, 0, 723, 723, 723, 723, + 0, 33, 34, 721, 1, 3, 488, 0, 0, 270, + 273, 268, 532, 0, 0, 0, 46, 0, 530, 0, + 0, 0, 530, 550, 0, 533, 528, 0, 528, 0, + 0, 0, 0, 723, 723, 0, 723, 723, 723, 0, + 723, 723, 723, 723, 723, 254, 0, 261, 555, 556, + 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, + 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 220, 221, 723, 0, 224, 723, 226, 227, 0, + 0, 723, 0, 723, 262, 263, 264, 265, 27, 492, + 0, 0, 480, 29, 0, 266, 271, 272, 276, 274, + 275, 267, 0, 0, 326, 0, 37, 0, 516, 39, + -2, 0, 0, 553, 554, -2, 570, 522, 551, 552, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 679, 0, + 0, 0, 109, 0, 113, 114, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 218, 219, 249, + 0, 0, 236, 237, 251, 0, 255, 256, 240, 241, + 242, 251, 244, 245, 246, 247, 248, 723, 222, 723, + 225, 723, 0, 723, 230, 544, 232, 28, 722, 23, + 0, 0, 489, 336, 0, 341, 343, 0, 378, 379, + 380, 381, 382, 0, 0, 0, 0, 0, 0, 404, + 405, 406, 407, 466, 467, 468, 469, 470, 471, 472, + 345, 346, 463, 0, 512, 0, 0, 0, 0, 0, + 0, 0, 454, 0, 428, 428, 428, 428, 428, 428, + 428, 428, 0, 0, 0, 0, -2, -2, 481, 482, + 485, 488, 27, 273, 0, 278, 277, 269, 0, 0, + 325, 0, 0, 334, 0, 38, 0, 187, 523, 524, + 525, 521, 0, 0, -2, 0, 118, 171, 116, 117, + 164, 130, 164, 164, 164, 164, 184, 184, 184, 184, + 156, 157, 158, 159, 160, 0, 143, 164, 164, 164, + 147, 131, 132, 133, 134, 135, 136, 137, 166, 166, + 166, 168, 168, -2, 0, 0, 0, 0, 90, 0, + 213, 216, 529, 0, 215, 488, 0, 723, 723, 257, + 0, 0, 723, 260, 223, 228, 0, 376, 229, 0, + 545, 546, 493, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 343, 344, 345, 346, 347, 348, 349, - 322, 0, 336, 0, 0, 0, 378, 379, 380, 381, - 382, 0, 260, 0, 27, 0, 0, 0, 0, 0, - 0, 256, 0, 435, 0, 400, 0, 401, 402, 403, - 404, 405, 406, 407, 0, 260, 0, 0, 0, 464, - 466, 467, 472, 30, 256, 0, 453, 0, 0, 0, - 259, 485, 0, 0, -2, 0, 304, 314, 493, 0, - 443, 0, 307, 538, 539, 551, 552, 460, 0, 497, - 498, 499, 0, 0, 0, 0, 70, -2, 73, 75, - 76, 77, 78, 79, 60, 60, 0, 86, 87, 60, - 59, 89, 90, 0, 0, 0, 0, 674, 180, 181, - 91, 98, 99, 101, 102, 103, 104, 105, 106, 107, - 154, 0, 0, 162, 0, 169, 171, 0, 0, 152, - 151, 108, 0, 163, 163, 129, 130, 166, 0, 166, - 166, 166, 0, 123, 124, 125, 117, 0, 118, 119, - 120, 0, 121, 50, -2, 54, 0, 511, 0, 703, - 524, 0, 521, 0, 519, 0, 514, 515, 516, 517, - 518, 520, 522, 523, 0, 194, 703, 0, 214, 215, - 218, 0, 0, 232, 237, 223, 0, 491, 703, 0, - 317, 318, 320, 337, 0, 339, 341, 470, 471, 327, - 328, 352, 353, 354, 0, 0, 0, 0, 350, 332, - 0, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 377, 419, 420, 0, 375, 376, 383, - 0, 0, 261, 262, 264, 268, 0, 444, 0, -2, - 355, 27, 0, 0, 0, 0, 0, 0, 441, 438, - 0, 0, 409, 0, 0, 0, 0, 463, 24, 0, - 506, 507, 454, 455, 273, 31, 0, 485, 475, 487, - 489, 0, 27, 0, 481, 460, 0, 0, 0, 468, - 315, 167, 0, 0, 0, 74, 0, 61, 0, 60, - 62, 0, 0, 0, 175, 0, 177, 178, 0, 100, - 155, 156, 157, 158, 159, 160, 168, 170, 172, 0, - 94, 153, 0, 166, 166, 131, 0, 132, 133, 134, - 0, 141, 0, 0, 55, 60, 60, 704, 185, 0, - 703, 527, 528, 0, 0, 0, 0, 0, 197, 213, - 230, 238, 239, 219, 357, 211, 474, 338, 340, 342, - 329, 350, 333, 0, 330, 0, 0, 324, 388, 0, - 0, 265, 269, 0, 271, 272, 0, 260, 0, -2, - 391, 392, 0, 0, 0, 0, 460, 0, 439, 0, - 0, 399, 410, 411, 412, 413, 25, 314, 0, 0, - 32, 0, 490, -2, 0, 0, 0, 468, 494, 495, - 444, 36, 0, 0, 704, 83, 84, 81, 82, 0, - 63, 80, 0, 182, 143, 176, 179, 161, 144, 127, - 128, 164, 165, 140, 0, 0, 148, 0, 0, 0, - 51, 705, 706, 186, 187, 188, 0, 190, 191, 192, - 331, 0, 351, 334, 389, 263, 270, 266, 0, 0, - 445, 0, 143, 143, 424, 143, 147, 427, 143, 429, - 143, 432, 0, 0, 0, 436, 398, 442, 0, 456, - 274, 275, 277, 278, 279, 287, 0, 289, 0, 488, - 0, -2, 0, 483, 482, 35, 44, 0, 49, 85, - 173, 0, 184, 142, 0, 0, 56, 64, 65, 57, - 66, 67, 68, 0, 335, 0, 390, 393, 421, 163, - 425, 426, 428, 430, 431, 433, 395, 394, 0, 0, - 0, 440, 458, 0, 0, 0, 0, 0, 294, 0, - 0, 297, 0, 0, 0, 0, 288, 0, 0, 308, - 290, 0, 292, 293, 0, 478, 27, 0, 704, 0, - 0, 0, 183, 146, 149, 189, 267, 422, 423, 414, - 397, 437, 26, 0, 0, 276, 283, 0, 286, 295, - 296, 298, 0, 300, 0, 302, 303, 280, 281, 282, - 0, 0, 0, 291, 486, -2, 484, 47, 45, 0, - 41, 0, 0, 0, 0, 0, 459, 457, 0, 0, - 299, 301, 0, 0, 0, 0, 704, 0, 174, 396, - 0, 0, 0, 284, 285, 0, 0, 0, 42, 48, - 0, 415, 0, 418, 0, 312, 0, 0, 0, 416, - 309, 0, 310, 311, 43, 0, 313, 0, 417, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, + 364, 365, 366, 367, 368, 369, 342, 0, 356, 0, + 0, 0, 398, 399, 400, 401, 402, 0, 280, 0, + 27, 0, 0, 0, 0, 0, 0, 276, 0, 455, + 0, 420, 0, 421, 422, 423, 424, 425, 426, 427, + 0, 280, 0, 0, 0, 484, 486, 487, 492, 30, + 276, 0, 473, 0, 0, 0, 279, 505, 0, 0, + -2, 0, 324, 334, 513, 0, 463, 0, 327, 557, + 558, 570, 571, 480, 0, 517, 518, 519, 0, 0, + 0, 0, 91, -2, 94, 96, 97, 98, 99, 100, + 83, 83, 0, 107, 108, 83, 82, 110, 111, 0, + 0, 0, 695, 0, 200, 201, 112, 119, 120, 122, + 123, 124, 125, 126, 127, 128, 175, 0, 0, 183, + 0, 190, 192, 0, 0, 173, 172, 129, 0, 184, + 184, 150, 151, 187, 0, 187, 187, 187, 0, 144, + 145, 146, 138, 0, 139, 140, 141, 0, 142, 50, + -2, 77, 0, 531, 0, 0, 0, 723, 544, 0, + 541, 0, 539, 0, 534, 535, 536, 537, 538, 540, + 542, 543, 0, 214, 723, 0, 234, 235, 238, 0, + 0, 252, 257, 243, 0, 511, 723, 0, 337, 338, + 340, 357, 0, 359, 361, 490, 491, 347, 348, 372, + 373, 374, 0, 0, 0, 0, 370, 352, 0, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 397, 439, 440, 0, 395, 396, 403, 0, 0, + 281, 282, 284, 288, 0, 464, 0, -2, 375, 27, + 0, 0, 0, 0, 0, 0, 461, 458, 0, 0, + 429, 0, 0, 0, 0, 483, 24, 0, 526, 527, + 474, 475, 293, 31, 0, 505, 495, 507, 509, 0, + 27, 0, 501, 480, 0, 0, 0, 488, 335, 188, + 0, 0, 0, 95, 0, 84, 0, 83, 85, 0, + 0, 0, 0, 0, 0, 0, 0, 121, 176, 177, + 178, 179, 180, 181, 189, 191, 193, 0, 115, 174, + 0, 187, 187, 152, 0, 153, 154, 155, 0, 162, + 0, 0, 78, 83, 83, 0, 0, 0, 205, 0, + 723, 547, 548, 0, 0, 0, 0, 0, 217, 233, + 250, 258, 259, 239, 377, 231, 494, 358, 360, 362, + 349, 370, 353, 0, 350, 0, 0, 344, 408, 0, + 0, 285, 289, 0, 291, 292, 0, 280, 0, -2, + 411, 412, 0, 0, 0, 0, 480, 0, 459, 0, + 0, 419, 430, 431, 432, 433, 25, 334, 0, 0, + 32, 0, 510, -2, 0, 0, 0, 488, 514, 515, + 464, 36, 0, 0, 724, 104, 105, 102, 103, 0, + 86, 101, 0, 0, 0, 0, 0, 0, 182, 165, + 148, 149, 185, 186, 161, 0, 0, 169, 0, 0, + 0, 0, 0, 0, 206, 207, 208, 0, 210, 211, + 212, 351, 0, 371, 354, 409, 283, 290, 286, 0, + 0, 465, 0, 164, 164, 444, 164, 168, 447, 164, + 449, 164, 452, 0, 0, 0, 456, 418, 462, 0, + 476, 294, 295, 297, 298, 299, 307, 0, 309, 0, + 508, 0, -2, 0, 503, 502, 35, 44, 0, 49, + 725, 726, 106, 0, 202, 164, 0, 0, 0, 0, + 0, 163, 0, 0, 79, 56, 57, 80, 87, 88, + 89, 0, 0, 0, 0, 355, 0, 410, 413, 441, + 184, 445, 446, 448, 450, 451, 453, 415, 414, 0, + 0, 0, 460, 478, 0, 0, 0, 0, 0, 314, + 0, 0, 317, 0, 0, 0, 0, 308, 0, 0, + 328, 310, 0, 312, 313, 0, 498, 27, 0, 724, + 0, 0, 194, 0, 204, 0, 61, 61, 0, 0, + 167, 170, 61, 65, 69, 209, 287, 442, 443, 434, + 417, 457, 26, 0, 0, 296, 303, 0, 306, 315, + 316, 318, 0, 320, 0, 322, 323, 300, 301, 302, + 0, 0, 0, 311, 506, -2, 504, 47, 45, 0, + 41, 0, 203, 61, 196, 197, 65, 69, 71, 71, + 71, 0, 0, 0, 479, 477, 0, 0, 319, 321, + 0, 0, 0, 0, 724, 0, 195, 62, 63, 64, + 83, 0, 0, 198, 199, 51, 52, 66, 67, 0, + 53, 70, 416, 0, 0, 0, 304, 305, 0, 0, + 0, 42, 48, 0, 0, 60, 58, 54, 55, 72, + 83, 83, 0, 435, 0, 438, 0, 332, 0, 0, + 0, 59, 0, 0, 68, 436, 329, 0, 330, 331, + 43, 73, 74, 0, 333, 0, 437, } var yyTok1 = [...]int{ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 76, 3, 3, 3, 103, 95, 3, - 56, 58, 100, 98, 57, 99, 111, 101, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 238, - 84, 83, 85, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 80, 3, 3, 3, 107, 99, 3, + 60, 62, 104, 102, 61, 103, 115, 105, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 242, + 88, 87, 89, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 105, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 109, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 94, 3, 106, + 3, 3, 3, 3, 98, 3, 110, } var yyTok2 = [...]int{ @@ -1857,11 +1925,11 @@ var yyTok2 = [...]int{ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 59, 60, 61, 62, 63, 64, + 52, 53, 54, 55, 56, 57, 58, 59, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 77, 78, 79, 80, 81, 82, 86, 87, 88, - 89, 90, 91, 92, 93, 96, 97, 102, 104, 107, - 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, + 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, + 86, 90, 91, 92, 93, 94, 95, 96, 97, 100, + 101, 106, 108, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, @@ -1873,7 +1941,8 @@ var yyTok2 = [...]int{ 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, } var yyTok3 = [...]int{ 0, @@ -2218,29 +2287,29 @@ yydefault: case 1: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:878 +//line sql.y:896 { setParseTree(yylex, yyDollar[1].statement) } case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:884 +//line sql.y:902 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:886 +//line sql.y:904 { } case 4: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:890 +//line sql.y:908 { yyVAL.statement = yyDollar[1].selStmt } case 23: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:914 +//line sql.y:932 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -2250,49 +2319,49 @@ yydefault: } case 24: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:922 +//line sql.y:940 { yyVAL.selStmt = &Union{Type: yyDollar[2].str, Left: yyDollar[1].selStmt, Right: yyDollar[3].selStmt, OrderBy: yyDollar[4].orderBy, Limit: yyDollar[5].limit, Lock: yyDollar[6].str} } case 25: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:926 +//line sql.y:944 { yyVAL.selStmt = &Select{Comments: Comments(yyDollar[2].bytes2), Cache: yyDollar[3].str, SelectExprs: SelectExprs{Nextval{Expr: yyDollar[5].expr}}, From: TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}} } case 26: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:933 +//line sql.y:951 { yyVAL.selStmt = &Select{Comments: Comments(yyDollar[2].bytes2), Cache: yyDollar[3].str, Distinct: yyDollar[4].str, Hints: yyDollar[5].str, SelectExprs: yyDollar[6].selectExprs, From: yyDollar[7].tableExprs, Where: NewWhere(WhereStr, yyDollar[8].expr), GroupBy: GroupBy(yyDollar[9].exprs), Having: NewWhere(HavingStr, yyDollar[10].expr)} } case 27: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:939 +//line sql.y:957 { yyVAL.selStmt = yyDollar[1].selStmt } case 28: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:943 +//line sql.y:961 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } case 29: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:949 +//line sql.y:967 { yyVAL.selStmt = yyDollar[1].selStmt } case 30: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:953 +//line sql.y:971 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } case 31: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:959 +//line sql.y:977 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[5].ins @@ -2305,7 +2374,7 @@ yydefault: } case 32: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:970 +//line sql.y:988 { cols := make(Columns, 0, len(yyDollar[6].updateExprs)) vals := make(ValTuple, 0, len(yyDollar[7].updateExprs)) @@ -2317,79 +2386,79 @@ yydefault: } case 33: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:982 +//line sql.y:1000 { yyVAL.str = InsertStr } case 34: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:986 +//line sql.y:1004 { yyVAL.str = ReplaceStr } case 35: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:992 +//line sql.y:1010 { yyVAL.statement = &Update{Comments: Comments(yyDollar[2].bytes2), Table: yyDollar[3].tableName, Exprs: yyDollar[5].updateExprs, Where: NewWhere(WhereStr, yyDollar[6].expr), OrderBy: yyDollar[7].orderBy, Limit: yyDollar[8].limit} } case 36: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:998 +//line sql.y:1016 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Table: yyDollar[4].tableName, Where: NewWhere(WhereStr, yyDollar[5].expr), OrderBy: yyDollar[6].orderBy, Limit: yyDollar[7].limit} } case 37: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1004 +//line sql.y:1022 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[3].setExprs} } case 38: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1008 +//line sql.y:1026 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[4].setExprs} } case 39: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1014 +//line sql.y:1032 { yyVAL.str = SessionStr } case 40: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1018 +//line sql.y:1036 { yyVAL.str = GlobalStr } case 41: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1024 +//line sql.y:1042 { yyVAL.partitionDefinitions = []*PartitionDefinition{yyDollar[1].partitionDefinition} } case 42: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1028 +//line sql.y:1046 { yyVAL.partitionDefinitions = append(yyDollar[1].partitionDefinitions, yyDollar[3].partitionDefinition) } case 43: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1034 +//line sql.y:1052 { yyVAL.partitionDefinition = &PartitionDefinition{Backend: string(yyDollar[2].bytes), Row: yyDollar[5].valTuple} } case 44: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1040 +//line sql.y:1058 { yyVAL.optVal = nil } case 45: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1044 +//line sql.y:1062 { if string(yyDollar[2].bytes) == "0" { yylex.Error("Number of partitions must be a positive integer") @@ -2399,7 +2468,7 @@ yydefault: } case 46: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1054 +//line sql.y:1072 { yyDollar[1].ddl.Action = CreateTableStr yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec @@ -2407,7 +2476,7 @@ yydefault: } case 47: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:1060 +//line sql.y:1078 { yyDollar[1].ddl.Action = CreateTableStr yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec @@ -2423,7 +2492,7 @@ yydefault: } case 48: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1074 +//line sql.y:1092 { yyDollar[1].ddl.Action = CreateTableStr yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec @@ -2434,7 +2503,7 @@ yydefault: } case 49: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1083 +//line sql.y:1101 { yyDollar[1].ddl.Action = CreateTableStr yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec @@ -2449,7 +2518,7 @@ yydefault: } case 50: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1096 +//line sql.y:1114 { var ifnotexists bool if yyDollar[3].byt != 0 { @@ -2458,119 +2527,270 @@ yydefault: yyVAL.statement = &DDL{Action: CreateDBStr, IfNotExists: ifnotexists, Database: yyDollar[4].tableIdent, DatabaseOptions: yyDollar[5].databaseOptionListOpt} } case 51: - yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1104 + yyDollar = yyS[yypt-11 : yypt+1] +//line sql.y:1122 { - // Change this to an alter statement - yyVAL.statement = &DDL{Action: CreateIndexStr, IndexName: string(yyDollar[4].bytes), Table: yyDollar[6].tableName, NewName: yyDollar[6].tableName} + yyVAL.statement = &DDL{Action: CreateIndexStr, IndexType: yyDollar[2].str, IndexName: string(yyDollar[4].bytes), Table: yyDollar[6].tableName, NewName: yyDollar[6].tableName, IndexOpts: NewIndexOptions(yyDollar[8].indexColumns, append(yyDollar[10].indexOptionList, yyDollar[11].indexOptionList...))} } case 52: + yyDollar = yyS[yypt-11 : yypt+1] +//line sql.y:1126 + { + yyVAL.statement = &DDL{Action: CreateIndexStr, IndexType: FullTextStr, IndexName: string(yyDollar[4].bytes), Table: yyDollar[6].tableName, NewName: yyDollar[6].tableName, IndexOpts: NewIndexOptions(yyDollar[8].indexColumns, append(yyDollar[10].indexOptionList, yyDollar[11].indexOptionList...))} + } + case 53: + yyDollar = yyS[yypt-11 : yypt+1] +//line sql.y:1130 + { + yyVAL.statement = &DDL{Action: CreateIndexStr, IndexType: SpatialStr, IndexName: string(yyDollar[4].bytes), Table: yyDollar[6].tableName, NewName: yyDollar[6].tableName, IndexOpts: NewIndexOptions(yyDollar[8].indexColumns, append(yyDollar[10].indexOptionList, yyDollar[11].indexOptionList...))} + } + case 54: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1136 + { + yyVAL.str = "hash" + } + case 55: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1140 + { + yyVAL.str = "btree" + } + case 56: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1146 + { + yyVAL.str = string(yyDollar[1].bytes) + } + case 57: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1150 + { + yyVAL.str = "default" + } + case 58: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1156 + { + yyVAL.indexOption = &IndexOption{ + Type: IndexOptionUsing, + Val: NewStrValWithoutQuote([]byte(yyDollar[2].str)), + } + } + case 59: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1165 + { + yyVAL.indexOption = &IndexOption{ + Type: IndexOptionBlockSize, + Val: NewIntVal(yyDollar[3].bytes), + } + } + case 60: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1172 + { + yyVAL.indexOption = &IndexOption{ + Type: IndexOptionComment, + Val: NewStrVal(yyDollar[2].bytes), + } + } + case 61: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:1180 + { + yyVAL.indexOptionList = []*IndexOption{} + } + case 62: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1184 + { + yyVAL.indexOptionList = append(yyDollar[1].indexOptionList, yyDollar[2].indexOption) + } + case 63: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1190 + { + yyVAL.indexOption = yyDollar[1].indexOption + } + case 64: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1194 + { + yyVAL.indexOption = yyDollar[1].indexOption + } + case 65: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:1199 + { + yyVAL.indexOptionList = []*IndexOption{} + } + case 66: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1203 + { + yyVAL.indexOptionList = append(yyDollar[1].indexOptionList, yyDollar[2].indexOption) + } + case 67: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1209 + { + yyVAL.indexOption = yyDollar[1].indexOption + } + case 68: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1213 + { + yyVAL.indexOption = &IndexOption{ + Type: IndexOptionParser, + Val: NewStrValWithoutQuote(yyDollar[3].bytes), + } + } + case 69: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:1221 + { + yyVAL.indexOptionList = []*IndexOption{} + } + case 70: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1225 + { + yyVAL.indexOptionList = append(yyDollar[1].indexOptionList, yyDollar[2].indexOption) + } + case 71: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:1230 + { + yyVAL.indexOptionList = []*IndexOption{} + } + case 72: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1234 + { + yyVAL.indexOptionList = append(yyDollar[1].indexOptionList, yyDollar[2].indexOption) + } + case 73: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1240 + { + if !CheckIndexLock(yyDollar[3].str) { + yylex.Error("unknown lock type") + return 1 + } + yyVAL.indexOption = &IndexOption{ + Type: IndexOptionLock, + Val: NewStrValWithoutQuote([]byte(yyDollar[3].str)), + } + } + case 74: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1251 + { + if !CheckIndexAlgorithm(yyDollar[3].str) { + yylex.Error("unknown algorithm type") + return 1 + } + yyVAL.indexOption = &IndexOption{ + Type: IndexOptionAlgorithm, + Val: NewStrValWithoutQuote([]byte(yyDollar[3].str)), + } + } + case 75: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1110 +//line sql.y:1263 { yyVAL.databaseOptionListOpt.DBOptList = []*DatabaseOption{} } - case 53: + case 76: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1114 +//line sql.y:1267 { yyVAL.databaseOptionListOpt.DBOptList = yyDollar[1].databaseOptionList } - case 54: + case 77: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1120 +//line sql.y:1273 { yyVAL.databaseOptionList = append(yyVAL.databaseOptionList, yyDollar[1].databaseOption) } - case 55: + case 78: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1124 +//line sql.y:1277 { yyVAL.databaseOptionList = append(yyDollar[1].databaseOptionList, yyDollar[2].databaseOption) } - case 56: + case 79: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1130 +//line sql.y:1283 { yyVAL.databaseOption = &DatabaseOption{ CharsetOrCollate: string(yyDollar[2].bytes), Value: yyDollar[4].str, } } - case 57: + case 80: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1137 +//line sql.y:1290 { yyVAL.databaseOption = &DatabaseOption{ CharsetOrCollate: string(yyDollar[2].str), Value: yyDollar[4].str, } } - case 58: + case 81: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1145 +//line sql.y:1298 { } - case 59: + case 82: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1147 +//line sql.y:1300 { } - case 60: + case 83: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1150 +//line sql.y:1303 { } - case 61: + case 84: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1152 +//line sql.y:1305 { } - case 62: + case 85: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1156 +//line sql.y:1309 { yyVAL.str = string(yyDollar[1].bytes) } - case 63: + case 86: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1160 +//line sql.y:1313 { yyVAL.str = "character set" } - case 64: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1166 - { - yyVAL.str = string(yyDollar[1].bytes) - } - case 65: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1170 - { - yyVAL.str = "default" - } - case 66: + case 87: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1176 +//line sql.y:1319 { yyVAL.str = string(yyDollar[1].bytes) } - case 67: + case 88: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1180 +//line sql.y:1323 { yyVAL.str = string(yyDollar[1].bytes) } - case 68: + case 89: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1184 +//line sql.y:1327 { yyVAL.str = "default" } - case 69: + case 90: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1190 +//line sql.y:1333 { var ifnotexists bool if yyDollar[3].byt != 0 { @@ -2579,9 +2799,9 @@ yydefault: yyVAL.ddl = &DDL{Action: CreateTableStr, IfNotExists: ifnotexists, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName} setDDL(yylex, yyVAL.ddl) } - case 70: + case 91: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1201 +//line sql.y:1344 { yyVAL.TableSpec = yyDollar[2].TableSpec @@ -2607,146 +2827,146 @@ yydefault: yyVAL.TableSpec.Options.Type = NormalTableType } } - case 71: + case 92: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1228 +//line sql.y:1371 { yyVAL.TableOptionListOpt.TblOptList = []*TableOption{} } - case 72: + case 93: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1232 +//line sql.y:1375 { yyVAL.TableOptionListOpt.TblOptList = yyDollar[1].TableOptionList } - case 73: + case 94: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1238 +//line sql.y:1381 { yyVAL.TableOptionList = append(yyVAL.TableOptionList, yyDollar[1].tableOption) } - case 74: + case 95: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1242 +//line sql.y:1385 { yyVAL.TableOptionList = append(yyDollar[1].TableOptionList, yyDollar[2].tableOption) } - case 75: + case 96: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1248 +//line sql.y:1391 { yyVAL.tableOption = &TableOption{ Type: TableOptionComment, Val: yyDollar[1].optVal, } } - case 76: + case 97: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1255 +//line sql.y:1398 { yyVAL.tableOption = &TableOption{ Type: TableOptionEngine, Val: yyDollar[1].optVal, } } - case 77: + case 98: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1262 +//line sql.y:1405 { yyVAL.tableOption = &TableOption{ Type: TableOptionCharset, Val: yyDollar[1].optVal, } } - case 78: + case 99: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1269 +//line sql.y:1412 { yyVAL.tableOption = &TableOption{ Type: TableOptionTableType, Val: yyDollar[1].optVal, } } - case 79: + case 100: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1276 +//line sql.y:1419 { yyVAL.tableOption = &TableOption{ Type: TableOptionAutoInc, Val: yyDollar[1].optVal, } } - case 80: + case 101: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1285 +//line sql.y:1428 { } - case 81: + case 102: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1289 +//line sql.y:1432 { // Normal str as a identify, without quote yyVAL.optVal = NewStrValWithoutQuote(yyDollar[1].bytes) } - case 82: + case 103: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1294 +//line sql.y:1437 { // Str with Quote, it will be parsed by Lex begin with quote \' or \" yyVAL.optVal = NewStrVal(yyDollar[1].bytes) } - case 83: + case 104: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1301 +//line sql.y:1444 { yyVAL.optVal = NewStrVal(yyDollar[3].bytes) } - case 84: + case 105: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1307 +//line sql.y:1450 { yyVAL.optVal = yyDollar[3].optVal } - case 85: + case 106: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1313 +//line sql.y:1456 { yyVAL.optVal = yyDollar[4].optVal } - case 86: + case 107: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1319 +//line sql.y:1462 { yyVAL.optVal = NewStrValWithoutQuote([]byte(GlobalTableType)) } - case 87: + case 108: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1323 +//line sql.y:1466 { yyVAL.optVal = NewStrValWithoutQuote([]byte(SingleTableType)) } - case 88: + case 109: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1329 +//line sql.y:1472 { yyVAL.TableSpec = &TableSpec{} yyVAL.TableSpec.AddColumn(yyDollar[1].columnDefinition) } - case 89: + case 110: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1334 +//line sql.y:1477 { yyVAL.TableSpec.AddColumn(yyDollar[3].columnDefinition) } - case 90: + case 111: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1338 +//line sql.y:1481 { yyVAL.TableSpec.AddIndex(yyDollar[3].indexDefinition) } - case 91: + case 112: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1344 +//line sql.y:1487 { yyDollar[2].columnType.NotNull = yyDollar[3].columnOptionListOpt.GetColumnOption(ColumnOptionNotNull).NotNull yyDollar[2].columnType.Autoincrement = yyDollar[3].columnOptionListOpt.GetColumnOption(ColumnOptionAutoincrement).Autoincrement @@ -2757,651 +2977,681 @@ yydefault: yyDollar[2].columnType.UniqueKeyOpt = yyDollar[3].columnOptionListOpt.GetColumnOption(ColumnOptionKeyUniqueOpt).UniqueKeyOpt yyVAL.columnDefinition = &ColumnDefinition{Name: yyDollar[1].colIdent, Type: yyDollar[2].columnType} } - case 92: + case 113: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1357 +//line sql.y:1500 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 93: + case 114: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1361 +//line sql.y:1504 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 94: + case 115: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1367 +//line sql.y:1510 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].boolVal yyVAL.columnType.Zerofill = yyDollar[3].boolVal } - case 97: + case 118: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1376 +//line sql.y:1519 { yyVAL.columnOptionListOpt.ColOptList = []*ColumnOption{} } - case 98: + case 119: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1380 +//line sql.y:1523 { yyVAL.columnOptionListOpt.ColOptList = yyDollar[1].columnOptionList } - case 99: + case 120: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1386 +//line sql.y:1529 { yyVAL.columnOptionList = append(yyVAL.columnOptionList, yyDollar[1].columnOption) } - case 100: + case 121: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1390 +//line sql.y:1533 { yyVAL.columnOptionList = append(yyDollar[1].columnOptionList, yyDollar[2].columnOption) } - case 101: + case 122: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1396 +//line sql.y:1539 { yyVAL.columnOption = &ColumnOption{ typ: ColumnOptionNotNull, NotNull: yyDollar[1].boolVal, } } - case 102: + case 123: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1403 +//line sql.y:1546 { yyVAL.columnOption = &ColumnOption{ typ: ColumnOptionDefault, Default: yyDollar[1].optVal, } } - case 103: + case 124: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1410 +//line sql.y:1553 { yyVAL.columnOption = &ColumnOption{ typ: ColumnOptionAutoincrement, Autoincrement: yyDollar[1].boolVal, } } - case 104: + case 125: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1417 +//line sql.y:1560 { yyVAL.columnOption = &ColumnOption{ typ: ColumnOptionKeyPrimaryOpt, PrimaryKeyOpt: yyDollar[1].colPrimaryKeyOpt, } } - case 105: + case 126: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1424 +//line sql.y:1567 { yyVAL.columnOption = &ColumnOption{ typ: ColumnOptionKeyUniqueOpt, UniqueKeyOpt: yyDollar[1].colUniqueKeyOpt, } } - case 106: + case 127: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1431 +//line sql.y:1574 { yyVAL.columnOption = &ColumnOption{ typ: ColumnOptionComment, Comment: yyDollar[1].optVal, } } - case 107: + case 128: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1438 +//line sql.y:1581 { yyVAL.columnOption = &ColumnOption{ typ: ColumnOptionOnUpdate, OnUpdate: yyDollar[1].optVal, } } - case 108: + case 129: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1447 +//line sql.y:1590 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].optVal } - case 109: + case 130: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1452 +//line sql.y:1595 { yyVAL.columnType = yyDollar[1].columnType } - case 110: + case 131: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1458 +//line sql.y:1601 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 111: + case 132: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1462 +//line sql.y:1605 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 112: + case 133: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1466 +//line sql.y:1609 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 113: + case 134: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1470 +//line sql.y:1613 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 114: + case 135: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1474 +//line sql.y:1617 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 115: + case 136: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1478 +//line sql.y:1621 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 116: + case 137: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1482 +//line sql.y:1625 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 117: + case 138: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1488 +//line sql.y:1631 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 118: + case 139: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1494 +//line sql.y:1637 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 119: + case 140: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1500 +//line sql.y:1643 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 120: + case 141: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1506 +//line sql.y:1649 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 121: + case 142: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1512 +//line sql.y:1655 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 122: + case 143: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1520 +//line sql.y:1663 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 123: + case 144: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1524 +//line sql.y:1667 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 124: + case 145: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1528 +//line sql.y:1671 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 125: + case 146: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1532 +//line sql.y:1675 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 126: + case 147: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1536 +//line sql.y:1679 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 127: + case 148: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1542 +//line sql.y:1685 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } - case 128: + case 149: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1546 +//line sql.y:1689 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } - case 129: + case 150: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1550 +//line sql.y:1693 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 130: + case 151: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1554 +//line sql.y:1697 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 131: + case 152: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1558 +//line sql.y:1701 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 132: + case 153: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1562 +//line sql.y:1705 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 133: + case 154: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1566 +//line sql.y:1709 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 134: + case 155: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1570 +//line sql.y:1713 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 135: + case 156: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1574 +//line sql.y:1717 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 136: + case 157: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1578 +//line sql.y:1721 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 137: + case 158: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1582 +//line sql.y:1725 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 138: + case 159: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1586 +//line sql.y:1729 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 139: + case 160: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1590 +//line sql.y:1733 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 140: + case 161: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1594 +//line sql.y:1737 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs} } - case 141: + case 162: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1600 +//line sql.y:1743 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") } - case 142: + case 163: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1605 +//line sql.y:1748 { yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") } - case 143: + case 164: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1610 +//line sql.y:1753 { yyVAL.optVal = nil } - case 144: + case 165: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1614 +//line sql.y:1757 { yyVAL.optVal = NewIntVal(yyDollar[2].bytes) } - case 145: + case 166: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1619 +//line sql.y:1762 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 146: + case 167: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1623 +//line sql.y:1766 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 147: + case 168: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1631 +//line sql.y:1774 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 148: + case 169: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1635 +//line sql.y:1778 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), } } - case 149: + case 170: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1641 +//line sql.y:1784 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 150: + case 171: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1649 +//line sql.y:1792 { yyVAL.boolVal = BoolVal(false) } - case 151: + case 172: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1653 +//line sql.y:1796 { yyVAL.boolVal = BoolVal(true) } - case 152: + case 173: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1658 +//line sql.y:1801 { yyVAL.boolVal = BoolVal(false) } - case 153: + case 174: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1662 +//line sql.y:1805 { yyVAL.boolVal = BoolVal(true) } - case 154: + case 175: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1669 +//line sql.y:1812 { yyVAL.boolVal = BoolVal(false) } - case 155: + case 176: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1673 +//line sql.y:1816 { yyVAL.boolVal = BoolVal(true) } - case 156: + case 177: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1679 +//line sql.y:1822 { yyVAL.optVal = NewStrVal(yyDollar[2].bytes) } - case 157: + case 178: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1683 +//line sql.y:1826 { yyVAL.optVal = NewIntVal(yyDollar[2].bytes) } - case 158: + case 179: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1687 +//line sql.y:1830 { yyVAL.optVal = NewFloatVal(yyDollar[2].bytes) } - case 159: + case 180: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1691 +//line sql.y:1834 { yyVAL.optVal = NewValArg(yyDollar[2].bytes) } - case 160: + case 181: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1695 +//line sql.y:1838 { yyVAL.optVal = NewValArg(yyDollar[2].bytes) } - case 161: + case 182: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1701 +//line sql.y:1844 { yyVAL.optVal = NewValArg(yyDollar[3].bytes) } - case 162: + case 183: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1707 +//line sql.y:1850 { yyVAL.boolVal = BoolVal(true) } - case 163: + case 184: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1712 +//line sql.y:1855 { yyVAL.str = "" } - case 164: + case 185: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1716 +//line sql.y:1859 { yyVAL.str = string(yyDollar[3].bytes) } - case 165: + case 186: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1720 +//line sql.y:1863 { yyVAL.str = string(yyDollar[3].bytes) } - case 166: + case 187: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1725 +//line sql.y:1868 { yyVAL.str = "" } - case 167: + case 188: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1729 +//line sql.y:1872 { yyVAL.str = string(yyDollar[2].bytes) } - case 168: + case 189: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1735 +//line sql.y:1878 { yyVAL.colPrimaryKeyOpt = ColKeyPrimary } - case 169: + case 190: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1739 +//line sql.y:1882 { // KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY // can also be specified as just KEY when given in a column definition. // See http://dev.mysql.com/doc/refman/5.7/en/create-table.html yyVAL.colPrimaryKeyOpt = ColKeyPrimary } - case 170: + case 191: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1748 +//line sql.y:1891 { yyVAL.colUniqueKeyOpt = ColKeyUniqueKey } - case 171: + case 192: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1752 +//line sql.y:1895 { yyVAL.colUniqueKeyOpt = ColKeyUniqueKey } - case 172: + case 193: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1758 +//line sql.y:1901 { yyVAL.optVal = NewStrVal(yyDollar[2].bytes) } - case 173: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1764 - { - yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} + case 194: + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:1907 + { + yyVAL.indexDefinition = &IndexDefinition{ + Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), + Name: NewColIdent("PRIMARY"), + Opts: NewIndexOptions(yyDollar[4].indexColumns, nil), + Primary: true, + Unique: true, + } } - case 174: + case 195: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1768 - { - yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} - } - case 175: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1774 - { - yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} +//line sql.y:1917 + { + yyVAL.indexDefinition = &IndexDefinition{ + Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), + Name: NewColIdent(string(yyDollar[3].bytes)), + Opts: NewIndexOptions(yyDollar[5].indexColumns, yyDollar[7].indexOptionList), + Primary: false, + Unique: true, + } } - case 176: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1778 - { - yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(string(yyDollar[3].bytes)), Primary: false, Unique: true} + case 196: + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:1927 + { + yyVAL.indexDefinition = &IndexDefinition{ + Type: string(yyDollar[1].bytes), + Name: NewColIdent(string(yyDollar[2].bytes)), + Opts: NewIndexOptions(yyDollar[4].indexColumns, yyDollar[6].indexOptionList), + Primary: false, + Unique: true, + } } - case 177: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1782 + case 197: + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:1937 { - yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes), Name: NewColIdent(string(yyDollar[2].bytes)), Primary: false, Unique: true} + yyVAL.indexDefinition = &IndexDefinition{ + Type: string(yyDollar[1].str), + Name: NewColIdent(string(yyDollar[2].bytes)), + Opts: NewIndexOptions(yyDollar[4].indexColumns, yyDollar[6].indexOptionList), + Primary: false, + Unique: false, + } } - case 178: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1786 + case 198: + yyDollar = yyS[yypt-7 : yypt+1] +//line sql.y:1947 { - yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].str), Name: NewColIdent(string(yyDollar[2].bytes)), Primary: false, Unique: false} + yyVAL.indexDefinition = &IndexDefinition{ + Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), + Name: NewColIdent(string(yyDollar[3].bytes)), + Opts: NewIndexOptions(yyDollar[5].indexColumns, yyDollar[7].indexOptionList), + Primary: false, + Unique: false, + } } - case 179: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1790 - { - yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(string(yyDollar[3].bytes)), Primary: false, Unique: false, Fulltext: true} + case 199: + yyDollar = yyS[yypt-7 : yypt+1] +//line sql.y:1957 + { + yyVAL.indexDefinition = &IndexDefinition{ + Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), + Name: NewColIdent(string(yyDollar[3].bytes)), + Opts: NewIndexOptions(yyDollar[5].indexColumns, yyDollar[7].indexOptionList), + Primary: false, + Unique: false, + } } - case 180: + case 200: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1796 +//line sql.y:1969 { yyVAL.str = string(yyDollar[1].bytes) } - case 181: + case 201: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1800 +//line sql.y:1973 { yyVAL.str = string(yyDollar[1].bytes) } - case 182: + case 202: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1806 +//line sql.y:1979 { yyVAL.indexColumns = []*IndexColumn{yyDollar[1].indexColumn} } - case 183: + case 203: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1810 +//line sql.y:1983 { yyVAL.indexColumns = append(yyVAL.indexColumns, yyDollar[3].indexColumn) } - case 184: + case 204: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1816 +//line sql.y:1989 { yyVAL.indexColumn = &IndexColumn{Column: yyDollar[1].colIdent, Length: yyDollar[2].optVal} } - case 185: + case 205: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1822 +//line sql.y:1995 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName} } - case 186: + case 206: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1826 +//line sql.y:1999 { // Change this to a rename statement yyVAL.statement = &DDL{Action: RenameStr, Table: yyDollar[4].tableName, NewName: yyDollar[7].tableName} } - case 187: + case 207: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1831 +//line sql.y:2004 { // Rename an index can just be an alter yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName} } - case 188: + case 208: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1836 +//line sql.y:2009 { yyVAL.statement = &DDL{Action: AlterEngineStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName, Engine: string(yyDollar[7].bytes)} } - case 189: + case 209: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:1840 +//line sql.y:2013 { yyVAL.statement = &DDL{Action: AlterCharsetStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName, Charset: string(yyDollar[9].bytes)} } - case 190: + case 210: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1844 +//line sql.y:2017 { yyVAL.statement = &DDL{Action: AlterAddColumnStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName, TableSpec: yyDollar[7].TableSpec} } - case 191: + case 211: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1848 +//line sql.y:2021 { yyVAL.statement = &DDL{Action: AlterDropColumnStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName, DropColumnName: string(yyDollar[7].bytes)} } - case 192: + case 212: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1852 +//line sql.y:2025 { yyVAL.statement = &DDL{Action: AlterModifyColumnStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName, ModifyColumnDef: yyDollar[7].columnDefinition} } - case 193: + case 213: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1858 +//line sql.y:2031 { var exists bool if yyDollar[3].byt != 0 { @@ -3409,16 +3659,16 @@ yydefault: } yyVAL.statement = &DDL{Action: DropTableStr, Tables: yyDollar[4].tableNames, IfExists: exists} } - case 194: + case 214: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1866 +//line sql.y:2039 { // Change this to an alter statement yyVAL.statement = &DDL{Action: DropIndexStr, IndexName: string(yyDollar[3].bytes), Table: yyDollar[5].tableName, NewName: yyDollar[5].tableName} } - case 195: + case 215: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1871 +//line sql.y:2044 { var exists bool if yyDollar[3].byt != 0 { @@ -3426,628 +3676,628 @@ yydefault: } yyVAL.statement = &DDL{Action: DropDBStr, Database: yyDollar[4].tableIdent, IfExists: exists} } - case 196: + case 216: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1881 +//line sql.y:2054 { yyVAL.tableNames = TableNames{yyDollar[1].tableName} } - case 197: + case 217: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1885 +//line sql.y:2058 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } - case 198: + case 218: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1891 +//line sql.y:2064 { yyVAL.statement = &DDL{Action: TruncateTableStr, Table: yyDollar[3].tableName, NewName: yyDollar[3].tableName} } - case 199: + case 219: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1897 +//line sql.y:2070 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName, NewName: yyDollar[3].tableName} } - case 200: + case 220: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1903 +//line sql.y:2076 { yyVAL.statement = &Xa{} } - case 201: + case 221: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1909 +//line sql.y:2082 { yyVAL.statement = &Explain{} } - case 202: + case 222: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1915 +//line sql.y:2088 { yyVAL.statement = &Kill{QueryID: &NumVal{raw: string(yyDollar[2].bytes)}} } - case 203: + case 223: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1919 +//line sql.y:2092 { yyVAL.statement = &Kill{QueryID: &NumVal{raw: string(yyDollar[3].bytes)}} } - case 204: + case 224: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1925 +//line sql.y:2098 { yyVAL.statement = &Transaction{Action: BeginTxnStr} } - case 205: + case 225: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1929 +//line sql.y:2102 { yyVAL.statement = &Transaction{Action: StartTxnStr} } - case 206: + case 226: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1933 +//line sql.y:2106 { yyVAL.statement = &Transaction{Action: RollbackTxnStr} } - case 207: + case 227: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1937 +//line sql.y:2110 { yyVAL.statement = &Transaction{Action: CommitTxnStr} } - case 208: + case 228: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1943 +//line sql.y:2116 { yyVAL.statement = &Radon{Action: AttachStr, Row: yyDollar[3].valTuple} } - case 209: + case 229: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1947 +//line sql.y:2120 { yyVAL.statement = &Radon{Action: DetachStr, Row: yyDollar[3].valTuple} } - case 210: + case 230: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1951 +//line sql.y:2124 { yyVAL.statement = &Radon{Action: AttachListStr} } - case 211: + case 231: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1955 +//line sql.y:2128 { yyVAL.statement = &Radon{Action: ReshardStr, Table: yyDollar[3].tableName, NewName: yyDollar[5].tableName} } - case 212: + case 232: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1959 +//line sql.y:2132 { yyVAL.statement = &Radon{Action: CleanupStr} } - case 213: + case 233: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1965 +//line sql.y:2138 { yyVAL.statement = &Show{Type: ShowBinlogEventsStr, From: yyDollar[4].str, Limit: yyDollar[5].limit} } - case 214: + case 234: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1969 +//line sql.y:2142 { yyVAL.statement = &Show{Type: ShowCreateTableStr, Table: yyDollar[4].tableName} } - case 215: + case 235: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1973 +//line sql.y:2146 { yyVAL.statement = &Show{Type: ShowCreateDatabaseStr, Database: yyDollar[4].tableName} } - case 216: + case 236: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1977 +//line sql.y:2150 { yyVAL.statement = &Show{Type: ShowDatabasesStr} } - case 217: + case 237: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1981 +//line sql.y:2154 { yyVAL.statement = &Show{Type: ShowEnginesStr} } - case 218: + case 238: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1985 +//line sql.y:2158 { yyVAL.statement = &Show{Full: yyDollar[2].str, Type: ShowTablesStr, Database: yyDollar[4].tableName, Filter: yyDollar[5].showFilter} } - case 219: + case 239: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1989 +//line sql.y:2162 { yyVAL.statement = &Show{Full: yyDollar[2].str, Type: ShowColumnsStr, Table: yyDollar[5].tableName, Filter: yyDollar[6].showFilter} } - case 220: + case 240: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1993 +//line sql.y:2166 { yyVAL.statement = &Show{Type: ShowProcesslistStr} } - case 221: + case 241: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1997 +//line sql.y:2170 { yyVAL.statement = &Show{Type: ShowQueryzStr} } - case 222: + case 242: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2001 +//line sql.y:2174 { yyVAL.statement = &Show{Type: ShowStatusStr} } - case 223: + case 243: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2005 +//line sql.y:2178 { yyVAL.statement = &Show{Type: ShowTableStatusStr, Database: yyDollar[4].tableName} } - case 224: + case 244: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2009 +//line sql.y:2182 { yyVAL.statement = &Show{Type: ShowTxnzStr} } - case 225: + case 245: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2013 +//line sql.y:2186 { yyVAL.statement = &Show{Type: ShowVariablesStr} } - case 226: + case 246: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2017 +//line sql.y:2190 { yyVAL.statement = &Show{Type: ShowVersionsStr} } - case 227: + case 247: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2021 +//line sql.y:2194 { yyVAL.statement = &Show{Type: ShowWarningsStr} } - case 228: + case 248: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2025 +//line sql.y:2198 { yyVAL.statement = &Show{Type: ShowUnsupportedStr} } - case 229: + case 249: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2030 +//line sql.y:2203 { yyVAL.str = "" } - case 230: + case 250: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2034 +//line sql.y:2207 { yyVAL.str = string(yyDollar[3].bytes) } - case 231: + case 251: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2039 +//line sql.y:2212 { yyVAL.tableName = TableName{} } - case 232: + case 252: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2043 +//line sql.y:2216 { yyVAL.tableName = yyDollar[2].tableName } - case 233: + case 253: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2049 +//line sql.y:2222 { yyVAL.str = "" } - case 234: + case 254: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2053 +//line sql.y:2226 { yyVAL.str = "full " } - case 235: + case 255: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2059 +//line sql.y:2232 { yyVAL.str = string(yyDollar[1].bytes) } - case 236: + case 256: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2063 +//line sql.y:2236 { yyVAL.str = string(yyDollar[1].bytes) } - case 237: + case 257: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2069 +//line sql.y:2242 { yyVAL.showFilter = nil } - case 238: + case 258: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2073 +//line sql.y:2246 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 239: + case 259: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2077 +//line sql.y:2250 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } - case 240: + case 260: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2083 +//line sql.y:2256 { yyVAL.statement = &Checksum{Table: yyDollar[3].tableName} } - case 241: + case 261: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2089 +//line sql.y:2262 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } - case 242: + case 262: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2095 +//line sql.y:2268 { yyVAL.statement = &OtherRead{} } - case 243: + case 263: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2099 +//line sql.y:2272 { yyVAL.statement = &OtherRead{} } - case 244: + case 264: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2103 +//line sql.y:2276 { yyVAL.statement = &OtherAdmin{} } - case 245: + case 265: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2107 +//line sql.y:2280 { yyVAL.statement = &OtherAdmin{} } - case 246: + case 266: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2112 +//line sql.y:2285 { setAllowComments(yylex, true) } - case 247: + case 267: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2115 +//line sql.y:2288 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } - case 248: + case 268: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2121 +//line sql.y:2294 { yyVAL.bytes2 = nil } - case 249: + case 269: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2125 +//line sql.y:2298 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } - case 250: + case 270: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2131 +//line sql.y:2304 { yyVAL.str = UnionStr } - case 251: + case 271: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2135 +//line sql.y:2308 { yyVAL.str = UnionAllStr } - case 252: + case 272: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2139 +//line sql.y:2312 { yyVAL.str = UnionDistinctStr } - case 253: + case 273: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2144 +//line sql.y:2317 { yyVAL.str = "" } - case 254: + case 274: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2148 +//line sql.y:2321 { yyVAL.str = SQLNoCacheStr } - case 255: + case 275: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2152 +//line sql.y:2325 { yyVAL.str = SQLCacheStr } - case 256: + case 276: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2157 +//line sql.y:2330 { yyVAL.str = "" } - case 257: + case 277: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2161 +//line sql.y:2334 { yyVAL.str = DistinctStr } - case 258: + case 278: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2166 +//line sql.y:2339 { yyVAL.str = "" } - case 259: + case 279: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2170 +//line sql.y:2343 { yyVAL.str = StraightJoinHint } - case 260: + case 280: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2175 +//line sql.y:2348 { yyVAL.selectExprs = nil } - case 261: + case 281: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2179 +//line sql.y:2352 { yyVAL.selectExprs = yyDollar[1].selectExprs } - case 262: + case 282: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2185 +//line sql.y:2358 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } - case 263: + case 283: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2189 +//line sql.y:2362 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } - case 264: + case 284: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2195 +//line sql.y:2368 { yyVAL.selectExpr = &StarExpr{} } - case 265: + case 285: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2199 +//line sql.y:2372 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } - case 266: + case 286: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2203 +//line sql.y:2376 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } - case 267: + case 287: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2207 +//line sql.y:2380 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } - case 268: + case 288: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2212 +//line sql.y:2385 { yyVAL.colIdent = ColIdent{} } - case 269: + case 289: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2216 +//line sql.y:2389 { yyVAL.colIdent = yyDollar[1].colIdent } - case 270: + case 290: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2220 +//line sql.y:2393 { yyVAL.colIdent = yyDollar[2].colIdent } - case 272: + case 292: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2227 +//line sql.y:2400 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 273: + case 293: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2232 +//line sql.y:2405 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } - case 274: + case 294: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2236 +//line sql.y:2409 { yyVAL.tableExprs = yyDollar[2].tableExprs } - case 275: + case 295: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2242 +//line sql.y:2415 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } - case 276: + case 296: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2246 +//line sql.y:2419 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } - case 279: + case 299: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2256 +//line sql.y:2429 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } - case 280: + case 300: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2260 +//line sql.y:2433 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } - case 281: + case 301: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2264 +//line sql.y:2437 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } - case 282: + case 302: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2270 +//line sql.y:2443 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } - case 283: + case 303: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2283 +//line sql.y:2456 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 284: + case 304: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2287 +//line sql.y:2460 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, On: yyDollar[5].expr} } - case 285: + case 305: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2291 +//line sql.y:2464 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, On: yyDollar[5].expr} } - case 286: + case 306: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2295 +//line sql.y:2468 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 287: + case 307: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2300 +//line sql.y:2473 { yyVAL.empty = struct{}{} } - case 288: + case 308: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2304 +//line sql.y:2477 { yyVAL.empty = struct{}{} } - case 289: + case 309: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2309 +//line sql.y:2482 { yyVAL.tableIdent = NewTableIdent("") } - case 290: + case 310: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2313 +//line sql.y:2486 { yyVAL.tableIdent = yyDollar[1].tableIdent } - case 291: + case 311: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2317 +//line sql.y:2490 { yyVAL.tableIdent = yyDollar[2].tableIdent } - case 293: + case 313: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2324 +//line sql.y:2497 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 294: + case 314: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2330 +//line sql.y:2503 { yyVAL.str = JoinStr } - case 295: + case 315: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2334 +//line sql.y:2507 { yyVAL.str = JoinStr } - case 296: + case 316: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2338 +//line sql.y:2511 { yyVAL.str = JoinStr } - case 297: + case 317: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2342 +//line sql.y:2515 { yyVAL.str = StraightJoinStr } - case 298: + case 318: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2348 +//line sql.y:2521 { yyVAL.str = LeftJoinStr } - case 299: + case 319: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2352 +//line sql.y:2525 { yyVAL.str = LeftJoinStr } - case 300: + case 320: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2356 +//line sql.y:2529 { yyVAL.str = RightJoinStr } - case 301: + case 321: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2360 +//line sql.y:2533 { yyVAL.str = RightJoinStr } - case 302: + case 322: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2366 +//line sql.y:2539 { yyVAL.str = NaturalJoinStr } - case 303: + case 323: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2370 +//line sql.y:2543 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -4055,459 +4305,459 @@ yydefault: yyVAL.str = NaturalRightJoinStr } } - case 304: + case 324: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2380 +//line sql.y:2553 { yyVAL.tableName = yyDollar[2].tableName } - case 305: + case 325: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2384 +//line sql.y:2557 { yyVAL.tableName = yyDollar[1].tableName } - case 306: + case 326: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2390 +//line sql.y:2563 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 307: + case 327: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2394 +//line sql.y:2567 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } - case 308: + case 328: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2399 +//line sql.y:2572 { yyVAL.indexHints = nil } - case 309: + case 329: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2403 +//line sql.y:2576 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].colIdents} } - case 310: + case 330: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2407 +//line sql.y:2580 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].colIdents} } - case 311: + case 331: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2411 +//line sql.y:2584 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].colIdents} } - case 312: + case 332: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2417 +//line sql.y:2590 { yyVAL.colIdents = []ColIdent{yyDollar[1].colIdent} } - case 313: + case 333: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2421 +//line sql.y:2594 { yyVAL.colIdents = append(yyDollar[1].colIdents, yyDollar[3].colIdent) } - case 314: + case 334: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2426 +//line sql.y:2599 { yyVAL.expr = nil } - case 315: + case 335: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2430 +//line sql.y:2603 { yyVAL.expr = yyDollar[2].expr } - case 316: + case 336: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2436 +//line sql.y:2609 { yyVAL.expr = yyDollar[1].expr } - case 317: + case 337: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2440 +//line sql.y:2613 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 318: + case 338: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2444 +//line sql.y:2617 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 319: + case 339: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2448 +//line sql.y:2621 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } - case 320: + case 340: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2452 +//line sql.y:2625 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } - case 321: + case 341: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2456 +//line sql.y:2629 { yyVAL.expr = yyDollar[1].expr } - case 322: + case 342: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2460 +//line sql.y:2633 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } - case 323: + case 343: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2466 +//line sql.y:2639 { yyVAL.str = "" } - case 324: + case 344: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2470 +//line sql.y:2643 { yyVAL.str = string(yyDollar[2].bytes) } - case 325: + case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2476 +//line sql.y:2649 { yyVAL.boolVal = BoolVal(true) } - case 326: + case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2480 +//line sql.y:2653 { yyVAL.boolVal = BoolVal(false) } - case 327: + case 347: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2486 +//line sql.y:2659 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } - case 328: + case 348: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2490 +//line sql.y:2663 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } - case 329: + case 349: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2494 +//line sql.y:2667 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } - case 330: + case 350: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2498 +//line sql.y:2671 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 331: + case 351: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2502 +//line sql.y:2675 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 332: + case 352: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2506 +//line sql.y:2679 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } - case 333: + case 353: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2510 +//line sql.y:2683 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } - case 334: + case 354: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2514 +//line sql.y:2687 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } - case 335: + case 355: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2518 +//line sql.y:2691 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } - case 336: + case 356: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2522 +//line sql.y:2695 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } - case 337: + case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2528 +//line sql.y:2701 { yyVAL.str = IsNullStr } - case 338: + case 358: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2532 +//line sql.y:2705 { yyVAL.str = IsNotNullStr } - case 339: + case 359: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2536 +//line sql.y:2709 { yyVAL.str = IsTrueStr } - case 340: + case 360: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2540 +//line sql.y:2713 { yyVAL.str = IsNotTrueStr } - case 341: + case 361: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2544 +//line sql.y:2717 { yyVAL.str = IsFalseStr } - case 342: + case 362: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2548 +//line sql.y:2721 { yyVAL.str = IsNotFalseStr } - case 343: + case 363: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2554 +//line sql.y:2727 { yyVAL.str = EqualStr } - case 344: + case 364: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2558 +//line sql.y:2731 { yyVAL.str = LessThanStr } - case 345: + case 365: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2562 +//line sql.y:2735 { yyVAL.str = GreaterThanStr } - case 346: + case 366: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2566 +//line sql.y:2739 { yyVAL.str = LessEqualStr } - case 347: + case 367: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2570 +//line sql.y:2743 { yyVAL.str = GreaterEqualStr } - case 348: + case 368: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2574 +//line sql.y:2747 { yyVAL.str = NotEqualStr } - case 349: + case 369: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2578 +//line sql.y:2751 { yyVAL.str = NullSafeEqualStr } - case 350: + case 370: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2583 +//line sql.y:2756 { yyVAL.expr = nil } - case 351: + case 371: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2587 +//line sql.y:2760 { yyVAL.expr = yyDollar[2].expr } - case 352: + case 372: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2593 +//line sql.y:2766 { yyVAL.colTuple = yyDollar[1].valTuple } - case 353: + case 373: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2597 +//line sql.y:2770 { yyVAL.colTuple = yyDollar[1].subquery } - case 354: + case 374: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2601 +//line sql.y:2774 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } - case 355: + case 375: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2607 +//line sql.y:2780 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 356: + case 376: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2613 +//line sql.y:2786 { yyVAL.exprs = Exprs{yyDollar[1].expr} } - case 357: + case 377: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2617 +//line sql.y:2790 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } - case 358: + case 378: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2623 +//line sql.y:2796 { yyVAL.expr = yyDollar[1].expr } - case 359: + case 379: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2627 +//line sql.y:2800 { yyVAL.expr = yyDollar[1].boolVal } - case 360: + case 380: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2631 +//line sql.y:2804 { yyVAL.expr = yyDollar[1].colName } - case 361: + case 381: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2635 +//line sql.y:2808 { yyVAL.expr = yyDollar[1].expr } - case 362: + case 382: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2639 +//line sql.y:2812 { yyVAL.expr = yyDollar[1].subquery } - case 363: + case 383: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2643 +//line sql.y:2816 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } - case 364: + case 384: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2647 +//line sql.y:2820 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } - case 365: + case 385: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2651 +//line sql.y:2824 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } - case 366: + case 386: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2655 +//line sql.y:2828 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } - case 367: + case 387: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2659 +//line sql.y:2832 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } - case 368: + case 388: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2663 +//line sql.y:2836 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } - case 369: + case 389: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2667 +//line sql.y:2840 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } - case 370: + case 390: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2671 +//line sql.y:2844 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } - case 371: + case 391: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2675 +//line sql.y:2848 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 372: + case 392: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2679 +//line sql.y:2852 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 373: + case 393: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2683 +//line sql.y:2856 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } - case 374: + case 394: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2687 +//line sql.y:2860 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } - case 375: + case 395: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2691 +//line sql.y:2864 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } - case 376: + case 396: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2695 +//line sql.y:2868 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } - case 377: + case 397: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2699 +//line sql.y:2872 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } - case 378: + case 398: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2703 +//line sql.y:2876 { yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } - case 379: + case 399: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2707 +//line sql.y:2880 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { yyVAL.expr = num @@ -4515,9 +4765,9 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UPlusStr, Expr: yyDollar[2].expr} } } - case 380: + case 400: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2715 +//line sql.y:2888 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { // Handle double negative @@ -4531,21 +4781,21 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UMinusStr, Expr: yyDollar[2].expr} } } - case 381: + case 401: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2729 +//line sql.y:2902 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } - case 382: + case 402: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2733 +//line sql.y:2906 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } - case 383: + case 403: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2737 +//line sql.y:2910 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -4553,389 +4803,389 @@ yydefault: // will be non-trivial because of grammar conflicts. yyVAL.expr = &IntervalExpr{Expr: yyDollar[2].expr, Unit: yyDollar[3].colIdent.String()} } - case 388: + case 408: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2755 +//line sql.y:2928 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } - case 389: + case 409: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2759 +//line sql.y:2932 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 390: + case 410: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2763 +//line sql.y:2936 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } - case 391: + case 411: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2773 +//line sql.y:2946 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } - case 392: + case 412: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2777 +//line sql.y:2950 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } - case 393: + case 413: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2781 +//line sql.y:2954 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 394: + case 414: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2785 +//line sql.y:2958 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 395: + case 415: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2789 +//line sql.y:2962 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } - case 396: + case 416: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:2793 +//line sql.y:2966 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } - case 397: + case 417: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2797 +//line sql.y:2970 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str} } - case 398: + case 418: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2801 +//line sql.y:2974 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } - case 399: + case 419: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2805 +//line sql.y:2978 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colIdent} } - case 400: + case 420: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2815 +//line sql.y:2988 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } - case 401: + case 421: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2819 +//line sql.y:2992 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } - case 402: + case 422: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2823 +//line sql.y:2996 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } - case 403: + case 423: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2827 +//line sql.y:3000 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } - case 404: + case 424: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2832 +//line sql.y:3005 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } - case 405: + case 425: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2837 +//line sql.y:3010 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } - case 406: + case 426: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2842 +//line sql.y:3015 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } - case 407: + case 427: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2847 +//line sql.y:3020 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } - case 410: + case 430: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2862 +//line sql.y:3035 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } - case 411: + case 431: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2866 +//line sql.y:3039 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } - case 412: + case 432: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2870 +//line sql.y:3043 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } - case 413: + case 433: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2874 +//line sql.y:3047 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } - case 414: + case 434: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2880 +//line sql.y:3053 { yyVAL.str = "" } - case 415: + case 435: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2884 +//line sql.y:3057 { yyVAL.str = BooleanModeStr } - case 416: + case 436: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2888 +//line sql.y:3061 { yyVAL.str = NaturalLanguageModeStr } - case 417: + case 437: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2892 +//line sql.y:3065 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } - case 418: + case 438: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2896 +//line sql.y:3069 { yyVAL.str = QueryExpansionStr } - case 419: + case 439: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2902 +//line sql.y:3075 { yyVAL.str = string(yyDollar[1].bytes) } - case 420: + case 440: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2906 +//line sql.y:3079 { yyVAL.str = string(yyDollar[1].bytes) } - case 421: + case 441: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2912 +//line sql.y:3085 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 422: + case 442: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2916 +//line sql.y:3089 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } - case 423: + case 443: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2920 +//line sql.y:3093 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: string(yyDollar[3].bytes)} } - case 424: + case 444: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2924 +//line sql.y:3097 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 425: + case 445: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2928 +//line sql.y:3101 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 426: + case 446: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2932 +//line sql.y:3105 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.convertType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 427: + case 447: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2938 +//line sql.y:3111 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 428: + case 448: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2942 +//line sql.y:3115 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 429: + case 449: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2946 +//line sql.y:3119 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 430: + case 450: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2950 +//line sql.y:3123 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 431: + case 451: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2954 +//line sql.y:3127 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 432: + case 452: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2958 +//line sql.y:3131 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 433: + case 453: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2962 +//line sql.y:3135 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 434: + case 454: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2967 +//line sql.y:3140 { yyVAL.expr = nil } - case 435: + case 455: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2971 +//line sql.y:3144 { yyVAL.expr = yyDollar[1].expr } - case 436: + case 456: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2976 +//line sql.y:3149 { yyVAL.str = string("") } - case 437: + case 457: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2980 +//line sql.y:3153 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } - case 438: + case 458: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2986 +//line sql.y:3159 { yyVAL.whens = []*When{yyDollar[1].when} } - case 439: + case 459: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2990 +//line sql.y:3163 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } - case 440: + case 460: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2996 +//line sql.y:3169 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } - case 441: + case 461: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3001 +//line sql.y:3174 { yyVAL.expr = nil } - case 442: + case 462: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3005 +//line sql.y:3178 { yyVAL.expr = yyDollar[2].expr } - case 443: + case 463: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3011 +//line sql.y:3184 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } - case 444: + case 464: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3015 +//line sql.y:3188 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } - case 445: + case 465: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3019 +//line sql.y:3192 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } - case 446: + case 466: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3025 +//line sql.y:3198 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 447: + case 467: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3029 +//line sql.y:3202 { yyVAL.expr = NewHexVal(yyDollar[1].bytes) } - case 448: + case 468: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3033 +//line sql.y:3206 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 449: + case 469: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3037 +//line sql.y:3210 { yyVAL.expr = NewFloatVal(yyDollar[1].bytes) } - case 450: + case 470: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3041 +//line sql.y:3214 { yyVAL.expr = NewHexNum(yyDollar[1].bytes) } - case 451: + case 471: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3045 +//line sql.y:3218 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 452: + case 472: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3049 +//line sql.y:3222 { yyVAL.expr = &NullVal{} } - case 453: + case 473: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3055 +//line sql.y:3228 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -4944,239 +5194,239 @@ yydefault: } yyVAL.expr = NewIntVal([]byte("1")) } - case 454: + case 474: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3064 +//line sql.y:3237 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 455: + case 475: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3068 +//line sql.y:3241 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 456: + case 476: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3073 +//line sql.y:3246 { yyVAL.exprs = nil } - case 457: + case 477: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3077 +//line sql.y:3250 { yyVAL.exprs = yyDollar[3].exprs } - case 458: + case 478: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3082 +//line sql.y:3255 { yyVAL.expr = nil } - case 459: + case 479: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3086 +//line sql.y:3259 { yyVAL.expr = yyDollar[2].expr } - case 460: + case 480: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3091 +//line sql.y:3264 { yyVAL.orderBy = nil } - case 461: + case 481: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3095 +//line sql.y:3268 { yyVAL.orderBy = yyDollar[3].orderBy } - case 462: + case 482: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3101 +//line sql.y:3274 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } - case 463: + case 483: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3105 +//line sql.y:3278 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } - case 464: + case 484: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3111 +//line sql.y:3284 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } - case 465: + case 485: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3116 +//line sql.y:3289 { yyVAL.str = AscScr } - case 466: + case 486: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3120 +//line sql.y:3293 { yyVAL.str = AscScr } - case 467: + case 487: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3124 +//line sql.y:3297 { yyVAL.str = DescScr } - case 468: + case 488: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3129 +//line sql.y:3302 { yyVAL.limit = nil } - case 469: + case 489: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3133 +//line sql.y:3306 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } - case 470: + case 490: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3137 +//line sql.y:3310 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } - case 471: + case 491: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3141 +//line sql.y:3314 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } - case 472: + case 492: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3146 +//line sql.y:3319 { yyVAL.str = "" } - case 473: + case 493: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3150 +//line sql.y:3323 { yyVAL.str = ForUpdateStr } - case 474: + case 494: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3154 +//line sql.y:3327 { yyVAL.str = ShareModeStr } - case 475: + case 495: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3167 +//line sql.y:3340 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } - case 476: + case 496: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3171 +//line sql.y:3344 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } - case 477: + case 497: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3175 +//line sql.y:3348 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Rows: yyDollar[2].selStmt} } - case 478: + case 498: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3180 +//line sql.y:3353 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } - case 479: + case 499: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3184 +//line sql.y:3357 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } - case 480: + case 500: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3188 +//line sql.y:3361 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].selStmt} } - case 481: + case 501: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3195 +//line sql.y:3368 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 482: + case 502: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3199 +//line sql.y:3372 { yyVAL.columns = Columns{yyDollar[3].colIdent} } - case 483: + case 503: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3203 +//line sql.y:3376 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 484: + case 504: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3207 +//line sql.y:3380 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } - case 485: + case 505: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3212 +//line sql.y:3385 { yyVAL.updateExprs = nil } - case 486: + case 506: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3216 +//line sql.y:3389 { yyVAL.updateExprs = yyDollar[5].updateExprs } - case 487: + case 507: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3222 +//line sql.y:3395 { yyVAL.values = Values{yyDollar[1].valTuple} } - case 488: + case 508: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3226 +//line sql.y:3399 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } - case 489: + case 509: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3232 +//line sql.y:3405 { yyVAL.valTuple = yyDollar[1].valTuple } - case 490: + case 510: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3236 +//line sql.y:3409 { yyVAL.valTuple = ValTuple{} } - case 491: + case 511: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3242 +//line sql.y:3415 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } - case 492: + case 512: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3248 +//line sql.y:3421 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = &ParenExpr{yyDollar[1].valTuple[0]} @@ -5184,288 +5434,282 @@ yydefault: yyVAL.expr = yyDollar[1].valTuple } } - case 493: + case 513: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3258 +//line sql.y:3431 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } - case 494: + case 514: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3262 +//line sql.y:3435 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } - case 495: + case 515: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3268 +//line sql.y:3441 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } - case 496: + case 516: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3274 +//line sql.y:3447 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 497: + case 517: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3278 +//line sql.y:3451 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } - case 498: + case 518: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3284 +//line sql.y:3457 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr} } - case 499: + case 519: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3288 +//line sql.y:3461 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Expr: yyDollar[2].expr} } - case 501: + case 521: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3295 +//line sql.y:3468 { yyVAL.bytes = []byte("charset") } - case 503: + case 523: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3302 +//line sql.y:3475 { yyVAL.expr = NewStrVal([]byte(yyDollar[1].colIdent.String())) } - case 504: + case 524: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3306 +//line sql.y:3479 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 505: + case 525: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3310 +//line sql.y:3483 { yyVAL.expr = &Default{} } - case 508: + case 528: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3319 +//line sql.y:3492 { yyVAL.byt = 0 } - case 509: + case 529: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3323 +//line sql.y:3496 { yyVAL.byt = 1 } - case 510: + case 530: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3328 +//line sql.y:3501 { yyVAL.byt = 0 } - case 511: + case 531: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3332 +//line sql.y:3505 { yyVAL.byt = 1 } - case 512: + case 532: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3337 +//line sql.y:3510 { yyVAL.str = "" } - case 513: + case 533: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3341 +//line sql.y:3514 { yyVAL.str = IgnoreStr } - case 514: + case 534: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3347 +//line sql.y:3520 { yyVAL.empty = struct{}{} } - case 515: + case 535: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3351 +//line sql.y:3524 { yyVAL.empty = struct{}{} } - case 516: + case 536: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3355 +//line sql.y:3528 { yyVAL.empty = struct{}{} } - case 517: + case 537: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3359 +//line sql.y:3532 { yyVAL.empty = struct{}{} } - case 518: + case 538: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3363 +//line sql.y:3536 { yyVAL.empty = struct{}{} } - case 519: + case 539: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3367 +//line sql.y:3540 { yyVAL.empty = struct{}{} } - case 520: + case 540: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3371 +//line sql.y:3544 { yyVAL.empty = struct{}{} } - case 521: + case 541: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3375 +//line sql.y:3548 { yyVAL.empty = struct{}{} } - case 522: + case 542: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3379 +//line sql.y:3552 { yyVAL.empty = struct{}{} } - case 523: + case 543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3383 +//line sql.y:3556 { yyVAL.empty = struct{}{} } - case 524: + case 544: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3388 +//line sql.y:3561 { yyVAL.empty = struct{}{} } - case 525: + case 545: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3392 +//line sql.y:3565 { yyVAL.empty = struct{}{} } - case 526: + case 546: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3396 +//line sql.y:3569 { yyVAL.empty = struct{}{} } - case 527: + case 547: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3402 +//line sql.y:3575 { yyVAL.empty = struct{}{} } - case 528: + case 548: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3406 +//line sql.y:3579 { yyVAL.empty = struct{}{} } - case 529: + case 549: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3411 - { - yyVAL.empty = struct{}{} - } - case 530: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3415 +//line sql.y:3584 { - yyVAL.empty = struct{}{} + yyVAL.str = IndexStr } - case 531: + case 550: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3419 +//line sql.y:3588 { - yyVAL.empty = struct{}{} + yyVAL.str = UniqueStr } - case 532: + case 551: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3425 +//line sql.y:3594 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 533: + case 552: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3429 +//line sql.y:3598 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 535: + case 554: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3436 +//line sql.y:3605 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 536: + case 555: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3442 +//line sql.y:3611 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 537: + case 556: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3446 +//line sql.y:3615 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 539: + case 558: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3453 +//line sql.y:3622 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 701: + case 721: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3641 +//line sql.y:3811 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 702: + case 722: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3650 +//line sql.y:3820 { decNesting(yylex) } - case 703: + case 723: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3655 +//line sql.y:3825 { forceEOF(yylex) } - case 704: + case 724: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3660 +//line sql.y:3830 { forceEOF(yylex) } - case 705: + case 725: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3664 +//line sql.y:3834 { forceEOF(yylex) } - case 706: + case 726: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3668 +//line sql.y:3838 { forceEOF(yylex) } diff --git a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/sql.y b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/sql.y index 02d9b1ba..e93fad5b 100644 --- a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/sql.y +++ b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/sql.y @@ -99,9 +99,10 @@ func forceEOF(yylex interface{}) { LengthScaleOption LengthScaleOption columnDefinition *ColumnDefinition indexDefinition *IndexDefinition - indexInfo *IndexInfo indexColumn *IndexColumn indexColumns []*IndexColumn + indexOptionList IndexOptionList + indexOption *IndexOption columnOptionListOpt ColumnOptionListOpt columnOptionList ColumnOptionList columnOption *ColumnOption @@ -133,11 +134,15 @@ func forceEOF(yylex interface{}) { FOR -// FULLTEXT. +// INDEX. %token + ALGORITHM + BTREE FULLTEXT - PARSER + KEY_BLOCK_SIZE NGRAM + PARSER + SPATIAL // Resolve shift/reduce conflict on 'UNIQUE KEY', if we don`t define the precedence, the code @@ -721,7 +726,6 @@ func forceEOF(yylex interface{}) { non_rename_operation to_opt index_opt - constraint_opt %type reserved_keyword @@ -786,7 +790,6 @@ func forceEOF(yylex interface{}) { id_or_string %type - collate_name_or_default opt_charset opt_equal opt_default @@ -835,15 +838,30 @@ func forceEOF(yylex interface{}) { %type table_option -%type - index_info - %type index_column %type index_column_list +%type + fulltext_key_opts + lock_algorithm_opts + normal_key_opts + spatial_key_opts + +%type + all_key_opt + fulltext_key_opt + index_using_opt + lock_algorithm_opt + normal_key_opt + +%type + constraint_opt + index_using_str + id_or_default + %type column_option_list_opt @@ -1100,10 +1118,145 @@ create_statement: } $$ = &DDL{Action: CreateDBStr, IfNotExists: ifnotexists, Database: $4, DatabaseOptions: $5} } -| CREATE constraint_opt INDEX ID ON table_name ddl_force_eof +| CREATE constraint_opt INDEX ID ON table_name openb index_column_list closeb normal_key_opts lock_algorithm_opts { - // Change this to an alter statement - $$ = &DDL{Action: CreateIndexStr, IndexName: string($4), Table: $6, NewName: $6} + $$ = &DDL{Action: CreateIndexStr, IndexType: $2, IndexName: string($4), Table: $6, NewName: $6, IndexOpts: NewIndexOptions($8, append($10, $11...))} + } +| CREATE FULLTEXT INDEX ID ON table_name openb index_column_list closeb fulltext_key_opts lock_algorithm_opts + { + $$ = &DDL{Action: CreateIndexStr, IndexType: FullTextStr, IndexName: string($4), Table: $6, NewName: $6, IndexOpts: NewIndexOptions($8, append($10, $11...))} + } +| CREATE SPATIAL INDEX ID ON table_name openb index_column_list closeb spatial_key_opts lock_algorithm_opts + { + $$ = &DDL{Action: CreateIndexStr, IndexType: SpatialStr, IndexName: string($4), Table: $6, NewName: $6, IndexOpts: NewIndexOptions($8, append($10, $11...))} + } + +index_using_str: + HASH + { + $$ = "hash" + } +| BTREE + { + $$ = "btree" + } + +id_or_default: + ID + { + $$ = string($1) + } +| DEFAULT + { + $$ = "default" + } + +index_using_opt: + USING index_using_str + { + $$ = &IndexOption{ + Type: IndexOptionUsing, + Val: NewStrValWithoutQuote([]byte($2)), + } + } + +all_key_opt: + KEY_BLOCK_SIZE opt_equal INTEGRAL + { + $$ = &IndexOption{ + Type: IndexOptionBlockSize, + Val: NewIntVal($3), + } + } +| COMMENT_KEYWORD STRING + { + $$ = &IndexOption{ + Type: IndexOptionComment, + Val: NewStrVal($2), + } + } + +normal_key_opts: + { + $$ = []*IndexOption{} + } +| normal_key_opts normal_key_opt + { + $$ = append($1, $2) + } + +normal_key_opt: + all_key_opt + { + $$ = $1 + } +| index_using_opt + { + $$ = $1 + } + +fulltext_key_opts: + { + $$ = []*IndexOption{} + } +| fulltext_key_opts fulltext_key_opt + { + $$ = append($1, $2) + } + +fulltext_key_opt: + all_key_opt + { + $$ = $1 + } +| WITH PARSER NGRAM + { + $$ = &IndexOption{ + Type: IndexOptionParser, + Val: NewStrValWithoutQuote($3), + } + } + +spatial_key_opts: + { + $$ = []*IndexOption{} + } +| spatial_key_opts all_key_opt + { + $$ = append($1, $2) + } + +lock_algorithm_opts: + { + $$ = []*IndexOption{} + } +| lock_algorithm_opts lock_algorithm_opt + { + $$ = append($1, $2) + } + +lock_algorithm_opt: + LOCK opt_equal id_or_default + { + if !CheckIndexLock($3) { + yylex.Error("unknown lock type") + return 1 + } + $$ = &IndexOption{ + Type: IndexOptionLock, + Val: NewStrValWithoutQuote([]byte($3)), + } + } +| ALGORITHM opt_equal id_or_default + { + if !CheckIndexAlgorithm($3) { + yylex.Error("unknown algorithm type") + return 1 + } + $$ = &IndexOption{ + Type: IndexOptionAlgorithm, + Val: NewStrValWithoutQuote([]byte($3)), + } } database_option_list_opt: @@ -1126,7 +1279,7 @@ database_option_list: } database_option: - opt_default COLLATE opt_equal collate_name_or_default + opt_default COLLATE opt_equal id_or_default { $$ = &DatabaseOption{ CharsetOrCollate: string($2), @@ -1161,16 +1314,6 @@ opt_charset: $$ = "character set" } -collate_name_or_default: - ID - { - $$ = string($1) - } -| DEFAULT - { - $$ = "default" - } - charset_name_or_default: ID { @@ -1760,35 +1903,65 @@ column_comment_opt: } index_definition: - index_info '(' index_column_list ')' - { - $$ = &IndexDefinition{Info: $1, Columns: $3} - } -| index_info '(' index_column_list ')' WITH PARSER NGRAM - { - $$ = &IndexDefinition{Info: $1, Columns: $3} + PRIMARY KEY '(' index_column_list ')' + { + $$ = &IndexDefinition { + Type: string($1) + " " + string($2), + Name: NewColIdent("PRIMARY"), + Opts: NewIndexOptions($4, nil), + Primary: true, + Unique: true, + } } - -index_info: - PRIMARY KEY +| UNIQUE index_or_key ID '(' index_column_list ')' normal_key_opts { - $$ = &IndexInfo{Type: string($1) + " " + string($2), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} + $$ = &IndexDefinition { + Type: string($1) + " " + string($2), + Name: NewColIdent(string($3)), + Opts: NewIndexOptions($5, $7), + Primary: false, + Unique: true, + } } -| UNIQUE index_or_key ID +| UNIQUE ID '(' index_column_list ')' normal_key_opts { - $$ = &IndexInfo{Type: string($1) + " " + string($2), Name: NewColIdent(string($3)), Primary: false, Unique: true} + $$ = &IndexDefinition { + Type: string($1), + Name: NewColIdent(string($2)), + Opts: NewIndexOptions($4, $6), + Primary: false, + Unique: true, + } } -| UNIQUE ID +| index_or_key ID '(' index_column_list ')' normal_key_opts { - $$ = &IndexInfo{Type: string($1), Name: NewColIdent(string($2)), Primary: false, Unique: true} + $$ = &IndexDefinition { + Type: string($1), + Name: NewColIdent(string($2)), + Opts: NewIndexOptions($4, $6), + Primary: false, + Unique: false, + } } -| index_or_key ID +| FULLTEXT index_or_key ID '(' index_column_list ')' fulltext_key_opts { - $$ = &IndexInfo{Type: string($1), Name: NewColIdent(string($2)), Primary: false, Unique: false} + $$ = &IndexDefinition { + Type: string($1) + " " + string($2), + Name: NewColIdent(string($3)), + Opts: NewIndexOptions($5, $7), + Primary: false, + Unique: false, + } } -| FULLTEXT index_or_key ID +| SPATIAL index_or_key ID '(' index_column_list ')' spatial_key_opts { - $$ = &IndexInfo{Type: string($1) + " " + string($2), Name: NewColIdent(string($3)), Primary: false, Unique: false, Fulltext: true} + $$ = &IndexDefinition { + Type: string($1) + " " + string($2), + Name: NewColIdent(string($3)), + Opts: NewIndexOptions($5, $7), + Primary: false, + Unique: false, + } } index_or_key: @@ -3409,15 +3582,11 @@ index_opt: constraint_opt: { - $$ = struct{}{} + $$ = IndexStr } | UNIQUE { - $$ = struct{}{} - } -| sql_id - { - $$ = struct{}{} + $$ = UniqueStr } sql_id: @@ -3596,8 +3765,10 @@ reserved_keyword: */ non_reserved_keyword: AGAINST +| ALGORITHM | BIT | BOOL +| CLEANUP | COMMENT_KEYWORD | DATE | DATETIME @@ -3634,7 +3805,6 @@ non_reserved_keyword: | DETACH | ATTACHLIST | RESHARD -| CLEANUP openb: '(' diff --git a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/token.go b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/token.go index 8661af10..627bd9f7 100644 --- a/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/token.go +++ b/src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/token.go @@ -63,6 +63,7 @@ var keywords = map[string]int{ "accessible": UNUSED, "add": ADD, "against": AGAINST, + "algorithm": ALGORITHM, "all": ALL, "alter": ALTER, "analyze": ANALYZE, @@ -70,6 +71,8 @@ var keywords = map[string]int{ "as": AS, "asc": ASC, "asensitive": UNUSED, + "attach": ATTACH, + "attachlist": ATTACHLIST, "auto_increment": AUTO_INCREMENT, "before": UNUSED, "begin": BEGIN, @@ -82,6 +85,7 @@ var keywords = map[string]int{ "bool": BOOL, "boolean": BOOLEAN, "both": UNUSED, + "btree": BTREE, "by": BY, "call": UNUSED, "cascade": UNUSED, @@ -93,6 +97,7 @@ var keywords = map[string]int{ "charset": CHARSET, "check": UNUSED, "checksum": CHECKSUM, + "cleanup": CLEANUP, "collate": COLLATE, "column": COLUMN, "columns": COLUMNS, @@ -125,6 +130,7 @@ var keywords = map[string]int{ "delete": DELETE, "desc": DESC, "describe": DESCRIBE, + "detach": DETACH, "deterministic": UNUSED, "distinct": DISTINCT, "distinctrow": UNUSED, @@ -198,6 +204,7 @@ var keywords = map[string]int{ "json": JSON, "key": KEY, "keys": UNUSED, + "key_block_size": KEY_BLOCK_SIZE, "kill": KILL, "language": LANGUAGE, "last_insert_id": LAST_INSERT_ID, @@ -260,6 +267,7 @@ var keywords = map[string]int{ "processlist": PROCESSLIST, "query": QUERY, "queryz": QUERYZ, + "radon": RADON, "range": UNUSED, "read": UNUSED, "reads": UNUSED, @@ -273,6 +281,7 @@ var keywords = map[string]int{ "repeat": UNUSED, "replace": REPLACE, "require": UNUSED, + "reshard": RESHARD, "resignal": UNUSED, "restrict": UNUSED, "return": UNUSED, @@ -294,7 +303,7 @@ var keywords = map[string]int{ "signed": SIGNED, "single": SINGLE, "smallint": SMALLINT, - "spatial": UNUSED, + "spatial": SPATIAL, "specific": UNUSED, "sql": UNUSED, "sqlexception": UNUSED, @@ -360,12 +369,6 @@ var keywords = map[string]int{ "year": YEAR, "year_month": UNUSED, "zerofill": ZEROFILL, - "radon": RADON, - "attach": ATTACH, - "detach": DETACH, - "attachlist": ATTACHLIST, - "reshard": RESHARD, - "cleanup": CLEANUP, } // keywordStrings contains the reverse mapping of token to keyword strings