Tarantool development patches archive
 help / color / mirror / Atom feed
* [tarantool-patches] Re: [patches] [PATCH] Ban of REINDEX syntax.
       [not found] <1521051043-28203-1-git-send-email-vanyail@yandex.ru>
@ 2018-03-15 13:34 ` Alexander Turenko
  2018-03-15 13:56   ` [tarantool-patches] Re[2]: " Alexander Turenko
                     ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Alexander Turenko @ 2018-03-15 13:34 UTC (permalink / raw)
  To: vanyail; +Cc: tarantool-patches


Hi, Ivan!

Congratulations with the first contribution!

Consider the review below. Please, update the patch accordingly and send again.

WBR, Alexander Turenko.
----

Common:
- I suggest to have real name in the 'user.name' git-config setting
- rebase on top of the current 2.0

Subject line:
- add 'sql:' prefix
- remove period at the end

>Среда, 14 марта 2018, 21:12 +03:00 от vanyail < vanyail@yandex.ru >:
>
>This change cut REINDEX syntax from keywords and also disables tests which were using this syntax.

Wrap commit message lines to be 72 symbols wide.

>
>This patch is not totally removing this syntax because it will be allowed in future releases.

I would say that the change is about parser, but the implementation under hood
was hold as is, because it is planned to fix and enable this feature in the 
scope of #3195.

>
>Fixes #2174
>---

Add links to the issue and the branch here (right below --- mark).

> extra/mkkeywordhash.c                            |    6 -
> src/box/sql/keywordhash.h                        |  614 +++++-----
> src/box/sql/parse.c                              | 1413 +++++++++++-----------
> src/box/sql/parse.y                              |    7 -
> test/sql-tap/gh-2174-ban-reindex-syntax.test.lua |   15 +
> test/sql-tap/keyword1.test.lua                   |    3 +-
> test/sql-tap/suite.ini                           |    3 +-
> 7 files changed, 1018 insertions(+), 1043 deletions(-)
> create mode 100755 test/sql-tap/gh-2174-ban-reindex-syntax.test.lua


>diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
>index 914fc53..738d130 100644
>--- a/src/box/sql/parse.y
>+++ b/src/box/sql/parse.y
>@@ -1472,13 +1472,6 @@ cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
> }
> %endif  !SQLITE_OMIT_TRIGGER
>
>-////////////////////////// REINDEX collation //////////////////////////////////
>-%ifndef SQLITE_OMIT_REINDEX
>-cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
>-cmd ::= REINDEX nm(X).          {sqlite3Reindex(pParse, &X, 0);}
>-cmd ::= REINDEX nm(X) ON nm(Y). {sqlite3Reindex(pParse, &X, &Y);}
>-%endif  SQLITE_OMIT_REINDEX
>-

It is better to leave the REINDEX parser code commented (see the ALTER ADD 
COLUMN case below). It is good to link the issue in the scope of which it was
commented and the issue in the scope of which it will be fixed and enabled.

>
> /////////////////////////////////// ANALYZE ///////////////////////////////////
> %ifndef SQLITE_OMIT_ANALYZE
> cmd ::= ANALYZE.                {sqlite3Analyze(pParse, 0);}
>diff --git a/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua b/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua
>new file mode 100755
>index 0000000..97c8390
>--- /dev/null
>+++ b/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua
>@@ -0,0 +1,15 @@
>+#!/usr/bin/env tarantool

It would be food to note that the test is to be deleted in the scope of #3195.

>
>+test = require("sqltester")
>+test:plan(1)
>+
>+test:execsql("DROP TABLE IF EXISTS t1");
>+test:execsql("CREATE TABLE t1(a INT PRIMARY KEY)");
>+test:execsql("CREATE INDEX i1 on t1(a)");
>+
>+local ok = pcall(test.execsql, test, [[
>+    REINDEX i1 ON t1
>+]])
>+
>+test:ok(not ok, 'reindex syntax must be banned')
>+
>+test:finish_test()
>diff --git a/test/sql-tap/keyword1.test.lua b/test/sql-tap/keyword1.test.lua
>index 23a561f..fbcd173 100755
>--- a/test/sql-tap/keyword1.test.lua
>+++ b/test/sql-tap/keyword1.test.lua
>@@ -1,6 +1,6 @@
> #!/usr/bin/env tarantool
> test = require("sqltester")
>-test:plan(176)
>+test:plan(175)
>
> --!./tcltestrunner.lua
> -- 2009 January 29
>@@ -107,7 +107,6 @@ local bannedkws = {
> "primary",
> "recursive",
> "references",
>-"reindex",
> "release",
> "rename",
> "replace",
>diff --git a/test/sql-tap/suite.ini b/test/sql-tap/suite.ini
>index 0bc9e83..eac10a9 100644
>--- a/test/sql-tap/suite.ini
>+++ b/test/sql-tap/suite.ini
>@@ -1,5 +1,6 @@
> [default]
> core = app
>-description = Database tests with #! using TAP
>+description = Some test are banned until REINDEX syntax will not be allowed. Database tests with #! using TAP 

This information should not be part of the description.

>
>+disabled = reindex.test.lua gh2130-index-refer-table.test.lua misc3.test.lua 

State explicitly the reason why each test was disabled or, better, when exactly
it should be enabled. It may look like so:

disabled = \
    reindex.test.lua ; to be enabled in #3195 \
    gh2130-index-refer-table.test.lua ; to be enabled in #3195 \
    misc3.test.lua ; to be enabled in #3195

>
> lua_libs = lua/sqltester.lua ../sql/lua/sql_tokenizer.lua ../box/lua/identifier.lua
> is_parallel = True
>-- 
>2.7.4
>




^ permalink raw reply	[flat|nested] 9+ messages in thread

* [tarantool-patches] Re[2]: [patches] [PATCH] Ban of REINDEX syntax.
  2018-03-15 13:34 ` [tarantool-patches] Re: [patches] [PATCH] Ban of REINDEX syntax Alexander Turenko
@ 2018-03-15 13:56   ` Alexander Turenko
  2018-03-19 19:22   ` [tarantool-patches] [PATCH] sql: ban " Ivan Ilyin
  2018-03-21 11:06   ` Ivan Ilyin
  2 siblings, 0 replies; 9+ messages in thread
From: Alexander Turenko @ 2018-03-15 13:56 UTC (permalink / raw)
  To: vanyail; +Cc: tarantool-patches

[-- Attachment #1: Type: text/plain, Size: 429 bytes --]


One more note.

>Четверг, 15 марта 2018, 16:34 +03:00 от Alexander Turenko < alexander.turenko@tarantool.org >:
>

>>-description = Database tests with #! using TAP
>>+description = Some test are banned until REINDEX syntax will not be allowed. Database tests with #! using TAP 
>
>This information should not be part of the description.
>

Don't leave a trailing space (at end of a line).

WBR, Alexander Turenko.

[-- Attachment #2: Type: text/html, Size: 875 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [tarantool-patches] [PATCH] sql: ban of REINDEX syntax
  2018-03-15 13:34 ` [tarantool-patches] Re: [patches] [PATCH] Ban of REINDEX syntax Alexander Turenko
  2018-03-15 13:56   ` [tarantool-patches] Re[2]: " Alexander Turenko
@ 2018-03-19 19:22   ` Ivan Ilyin
  2018-03-21 11:06   ` Ivan Ilyin
  2 siblings, 0 replies; 9+ messages in thread
From: Ivan Ilyin @ 2018-03-19 19:22 UTC (permalink / raw)
  To: tarantool-patches; +Cc: alexander.turenko, vanyail

From: vanyail <vanyail@yandex.ru>

This change cut REINDEX syntax from keywords and also disables tests which
were using this syntax.

This patch affects only parser, REINDEX implementation still exists, because
it is planned to be fixed and enabled in the scope of #3195.

Fixes #2174

---

branch: https://github.com/tarantool/tarantool/tree/gh-2174-ban-reindex-syntax
---
 extra/mkkeywordhash.c                            |    6 -
 src/box/sql/keywordhash.h                        |  614 +++--
 src/box/sql/opcodes.c                            |    8 +-
 src/box/sql/opcodes.h                            |   10 +-
 src/box/sql/parse.c                              | 2810 +++++++++++-----------
 src/box/sql/parse.h                              |  171 +-
 src/box/sql/parse.y                              |   13 +-
 test/sql-tap/gh-2174-ban-reindex-syntax.test.lua |   17 +
 test/sql-tap/keyword1.test.lua                   |    3 +-
 test/sql-tap/suite.ini                           |    4 +
 10 files changed, 1821 insertions(+), 1835 deletions(-)
 create mode 100755 test/sql-tap/gh-2174-ban-reindex-syntax.test.lua

diff --git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
index 259b168..525acee 100644
--- a/extra/mkkeywordhash.c
+++ b/extra/mkkeywordhash.c
@@ -99,11 +99,6 @@ struct Keyword {
 #else
 #  define PRAGMA     0x00000400
 #endif
-#ifdef SQLITE_OMIT_REINDEX
-#  define REINDEX    0
-#else
-#  define REINDEX    0x00000800
-#endif
 #ifdef SQLITE_OMIT_SUBQUERY
 #  define SUBQUERY   0
 #else
@@ -222,7 +217,6 @@ static Keyword aKeywordTable[] = {
   { "RECURSIVE",              "TK_RECURSIVE",   CTE,              true  },
   { "REFERENCES",             "TK_REFERENCES",  FKEY,             true  },
   { "REGEXP",                 "TK_LIKE_KW",     ALWAYS,           false },
-  { "REINDEX",                "TK_REINDEX",     REINDEX,          true  },
   { "RELEASE",                "TK_RELEASE",     ALWAYS,           true  },
   { "RENAME",                 "TK_RENAME",      ALTER,            true  },
   { "REPLACE",                "TK_REPLACE",     CONFLICT,         true  },
diff --git a/src/box/sql/keywordhash.h b/src/box/sql/keywordhash.h
index 222b900..843f789 100644
--- a/src/box/sql/keywordhash.h
+++ b/src/box/sql/keywordhash.h
@@ -11,201 +11,198 @@
 ** is substantially reduced.  This is important for embedded applications
 ** on platforms with limited memory.
 */
-/* Hash score: 276 */
+/* Hash score: 274 */
 static int keywordCode(const char *z, int n, int *pType, bool *pFlag){
-  /* zText[] encodes 1198 bytes of keywords in 780 bytes */
-  /*   REINDEXEDECIMALTEREGEXPLAINOUTERELEASENSITIVEACHARACTERAISE        */
-  /*   LECTABLEAVELSEIFOREIGNOREFERENCESCAPENDECLARESIGNALIKEYBEFORE      */
-  /*   VOKEXCEPTHENATURALIMITERATEXISTSAVEPOINTEGERANGETRANSACTION        */
-  /*   OTNULLEFTRIGGEREADSMALLINTERSECTVARCHARECURSIVECASECONSTRAINTO     */
-  /*   FFSETUNIQUERYBEGINSTEADDEFERRABLEBETWEENCASCADESCRIBECASTART       */
-  /*   COMMITCURSORDERENAMEDOUBLEFETCHECKGROUPDATEJOINNEREPEATMATCH       */
-  /*   AVINGLOBINARYPLANALYZEPRAGMABORTPROCEDUREPLACEVALUESPECIFICALL     */
-  /*   OCALTIMESTAMPARTITIONWHERESTRICTWHILEWITHAFTERETURNANDEFAULT       */
-  /*   AUTOINCREMENTCOLLATECOLUMNCONDITIONCONFLICTCONNECTCREATECROSS      */
-  /*   QLOOPRECISIONCURRENT_DATECURRENT_TIMESTAMPRIMARYCURRENT_USER       */
-  /*   IGHTDEFERREDELETEDENSE_RANKDETERMINISTICDISTINCTDROPFAILFLOAT      */
-  /*   FROMFUNCTIONGRANTIMMEDIATEINSENSITIVEINSERTISNULLOVEROLLBACK       */
-  /*   ROWSYSTEMROW_NUMBERUNIONUSINGVIEWHENEVERANYBYINITIALLY             */
-  static const char zText[779] = {
-    'R','E','I','N','D','E','X','E','D','E','C','I','M','A','L','T','E','R',
-    'E','G','E','X','P','L','A','I','N','O','U','T','E','R','E','L','E','A',
-    'S','E','N','S','I','T','I','V','E','A','C','H','A','R','A','C','T','E',
-    'R','A','I','S','E','L','E','C','T','A','B','L','E','A','V','E','L','S',
-    'E','I','F','O','R','E','I','G','N','O','R','E','F','E','R','E','N','C',
-    'E','S','C','A','P','E','N','D','E','C','L','A','R','E','S','I','G','N',
-    'A','L','I','K','E','Y','B','E','F','O','R','E','V','O','K','E','X','C',
-    'E','P','T','H','E','N','A','T','U','R','A','L','I','M','I','T','E','R',
-    'A','T','E','X','I','S','T','S','A','V','E','P','O','I','N','T','E','G',
-    'E','R','A','N','G','E','T','R','A','N','S','A','C','T','I','O','N','O',
-    'T','N','U','L','L','E','F','T','R','I','G','G','E','R','E','A','D','S',
-    'M','A','L','L','I','N','T','E','R','S','E','C','T','V','A','R','C','H',
-    'A','R','E','C','U','R','S','I','V','E','C','A','S','E','C','O','N','S',
-    'T','R','A','I','N','T','O','F','F','S','E','T','U','N','I','Q','U','E',
-    'R','Y','B','E','G','I','N','S','T','E','A','D','D','E','F','E','R','R',
-    'A','B','L','E','B','E','T','W','E','E','N','C','A','S','C','A','D','E',
-    'S','C','R','I','B','E','C','A','S','T','A','R','T','C','O','M','M','I',
-    'T','C','U','R','S','O','R','D','E','R','E','N','A','M','E','D','O','U',
-    'B','L','E','F','E','T','C','H','E','C','K','G','R','O','U','P','D','A',
-    'T','E','J','O','I','N','N','E','R','E','P','E','A','T','M','A','T','C',
-    'H','A','V','I','N','G','L','O','B','I','N','A','R','Y','P','L','A','N',
-    'A','L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','P','R','O',
-    'C','E','D','U','R','E','P','L','A','C','E','V','A','L','U','E','S','P',
-    'E','C','I','F','I','C','A','L','L','O','C','A','L','T','I','M','E','S',
-    'T','A','M','P','A','R','T','I','T','I','O','N','W','H','E','R','E','S',
-    'T','R','I','C','T','W','H','I','L','E','W','I','T','H','A','F','T','E',
-    'R','E','T','U','R','N','A','N','D','E','F','A','U','L','T','A','U','T',
-    'O','I','N','C','R','E','M','E','N','T','C','O','L','L','A','T','E','C',
-    'O','L','U','M','N','C','O','N','D','I','T','I','O','N','C','O','N','F',
-    'L','I','C','T','C','O','N','N','E','C','T','C','R','E','A','T','E','C',
-    'R','O','S','S','Q','L','O','O','P','R','E','C','I','S','I','O','N','C',
-    'U','R','R','E','N','T','_','D','A','T','E','C','U','R','R','E','N','T',
-    '_','T','I','M','E','S','T','A','M','P','R','I','M','A','R','Y','C','U',
-    'R','R','E','N','T','_','U','S','E','R','I','G','H','T','D','E','F','E',
-    'R','R','E','D','E','L','E','T','E','D','E','N','S','E','_','R','A','N',
-    'K','D','E','T','E','R','M','I','N','I','S','T','I','C','D','I','S','T',
-    'I','N','C','T','D','R','O','P','F','A','I','L','F','L','O','A','T','F',
-    'R','O','M','F','U','N','C','T','I','O','N','G','R','A','N','T','I','M',
-    'M','E','D','I','A','T','E','I','N','S','E','N','S','I','T','I','V','E',
-    'I','N','S','E','R','T','I','S','N','U','L','L','O','V','E','R','O','L',
-    'L','B','A','C','K','R','O','W','S','Y','S','T','E','M','R','O','W','_',
-    'N','U','M','B','E','R','U','N','I','O','N','U','S','I','N','G','V','I',
-    'E','W','H','E','N','E','V','E','R','A','N','Y','B','Y','I','N','I','T',
-    'I','A','L','L','Y',
+  /* zText[] encodes 1190 bytes of keywords in 775 bytes */
+  /*   BEFOREIGNOREGEXPLAINOUTERELEASENSITIVEACHARACTERAISELECTABLE       */
+  /*   AVELSEIFETCHECKEYVARCHARANGETHENDECIMALTEREFERENCESCAPEXCEPT       */
+  /*   RANSACTIONATURALIKEXISTSAVEPOINTEGERESIGNALIMITERATECASE           */
+  /*   CONSTRAINTERSECTRIGGEREVOKESMALLINTOFFSETUNIQUERYBEGINSTEADD       */
+  /*   ECLAREADSPECIFICASCADEFERRABLEFTBETWEENOTNULLOCALTIMESTAMPLAN      */
+  /*   ALYZECASTARTCOMMITCURSORDERECURSIVEDESCRIBEDOUBLEGROUPDATEJOIN     */
+  /*   DEXEDEFAULTMATCHAVINGLOBINARYPRAGMABORTPROCEDURENAMEVALUESQL       */
+  /*   OOPARTITIONWHEREPEATWHILEWITHAFTEREPLACEANDEFERREDELETE            */
+  /*   AUTOINCREMENTCALLCOLLATECOLUMNCONDITIONCONFLICTCONNECTCREATE       */
+  /*   CROSSYSTEMCURRENT_DATECURRENT_TIMESTAMPRECISIONCURRENT_USER        */
+  /*   ESTRICTDENSE_RANKDETERMINISTICDISTINCTDROPRIMARYFAILFLOATFROM      */
+  /*   FUNCTIONGRANTIMMEDIATEINNERETURNINSENSITIVEINSERTISNULLOVER        */
+  /*   IGHTROLLBACKROWSROW_NUMBERUNIONUSINGVIEWHENEVERANYBYINITIALLY      */
+  static const char zText[774] = {
+    'B','E','F','O','R','E','I','G','N','O','R','E','G','E','X','P','L','A',
+    'I','N','O','U','T','E','R','E','L','E','A','S','E','N','S','I','T','I',
+    'V','E','A','C','H','A','R','A','C','T','E','R','A','I','S','E','L','E',
+    'C','T','A','B','L','E','A','V','E','L','S','E','I','F','E','T','C','H',
+    'E','C','K','E','Y','V','A','R','C','H','A','R','A','N','G','E','T','H',
+    'E','N','D','E','C','I','M','A','L','T','E','R','E','F','E','R','E','N',
+    'C','E','S','C','A','P','E','X','C','E','P','T','R','A','N','S','A','C',
+    'T','I','O','N','A','T','U','R','A','L','I','K','E','X','I','S','T','S',
+    'A','V','E','P','O','I','N','T','E','G','E','R','E','S','I','G','N','A',
+    'L','I','M','I','T','E','R','A','T','E','C','A','S','E','C','O','N','S',
+    'T','R','A','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R',
+    'E','V','O','K','E','S','M','A','L','L','I','N','T','O','F','F','S','E',
+    'T','U','N','I','Q','U','E','R','Y','B','E','G','I','N','S','T','E','A',
+    'D','D','E','C','L','A','R','E','A','D','S','P','E','C','I','F','I','C',
+    'A','S','C','A','D','E','F','E','R','R','A','B','L','E','F','T','B','E',
+    'T','W','E','E','N','O','T','N','U','L','L','O','C','A','L','T','I','M',
+    'E','S','T','A','M','P','L','A','N','A','L','Y','Z','E','C','A','S','T',
+    'A','R','T','C','O','M','M','I','T','C','U','R','S','O','R','D','E','R',
+    'E','C','U','R','S','I','V','E','D','E','S','C','R','I','B','E','D','O',
+    'U','B','L','E','G','R','O','U','P','D','A','T','E','J','O','I','N','D',
+    'E','X','E','D','E','F','A','U','L','T','M','A','T','C','H','A','V','I',
+    'N','G','L','O','B','I','N','A','R','Y','P','R','A','G','M','A','B','O',
+    'R','T','P','R','O','C','E','D','U','R','E','N','A','M','E','V','A','L',
+    'U','E','S','Q','L','O','O','P','A','R','T','I','T','I','O','N','W','H',
+    'E','R','E','P','E','A','T','W','H','I','L','E','W','I','T','H','A','F',
+    'T','E','R','E','P','L','A','C','E','A','N','D','E','F','E','R','R','E',
+    'D','E','L','E','T','E','A','U','T','O','I','N','C','R','E','M','E','N',
+    'T','C','A','L','L','C','O','L','L','A','T','E','C','O','L','U','M','N',
+    'C','O','N','D','I','T','I','O','N','C','O','N','F','L','I','C','T','C',
+    'O','N','N','E','C','T','C','R','E','A','T','E','C','R','O','S','S','Y',
+    'S','T','E','M','C','U','R','R','E','N','T','_','D','A','T','E','C','U',
+    'R','R','E','N','T','_','T','I','M','E','S','T','A','M','P','R','E','C',
+    'I','S','I','O','N','C','U','R','R','E','N','T','_','U','S','E','R','E',
+    'S','T','R','I','C','T','D','E','N','S','E','_','R','A','N','K','D','E',
+    'T','E','R','M','I','N','I','S','T','I','C','D','I','S','T','I','N','C',
+    'T','D','R','O','P','R','I','M','A','R','Y','F','A','I','L','F','L','O',
+    'A','T','F','R','O','M','F','U','N','C','T','I','O','N','G','R','A','N',
+    'T','I','M','M','E','D','I','A','T','E','I','N','N','E','R','E','T','U',
+    'R','N','I','N','S','E','N','S','I','T','I','V','E','I','N','S','E','R',
+    'T','I','S','N','U','L','L','O','V','E','R','I','G','H','T','R','O','L',
+    'L','B','A','C','K','R','O','W','S','R','O','W','_','N','U','M','B','E',
+    'R','U','N','I','O','N','U','S','I','N','G','V','I','E','W','H','E','N',
+    'E','V','E','R','A','N','Y','B','Y','I','N','I','T','I','A','L','L','Y',
   };
   static const unsigned short aHash[128] = {
-     153, 158, 166, 128, 114,   0, 136, 102,   0,  92,   0, 126,  65,
-     160,  96,  70,   0, 137, 167,  93, 161, 159, 107,   0,  57,  43,
-      20, 163, 110,   0,  38, 118,  21,  35,   0,   0, 119, 124,   0,
-      61,  14,   0,  68, 115, 134,   0, 162, 133,   0,   0,   0,   0,
-     142,  72,   0,  76,  30, 165,   0, 130,   0,  77,  94,  22, 120,
-     148,   0, 171, 146, 151, 170,  69,  86,  87,   0, 116, 105, 132,
-      37, 121, 125,   0,   0,  15,  78, 117, 135, 131, 147,   7, 150,
-     149,  81,  99,  16,  13, 112, 169,  45,   9, 164,  98, 156,  51,
-      54,  40, 154,   0, 168, 103, 157,  82,   0,  58,   0,   0,  49,
-      44, 111,  90,  53,   0,  19,  50,   0,  88, 155, 144,
+     152, 158, 165, 132, 151,   0, 134, 103,   0,  95,   0, 104,  56,
+     137,  78,  92,   0, 157, 166,  96, 160, 159,  77,   0,  53,  42,
+      20, 162, 135,   0,  29, 117,  21,  12,   0,   0, 119, 124,   0,
+      48,  14,   0,  59, 113, 143,   0, 161, 131,   0,   0,   0,   0,
+     138,  69,   0,  86,  63, 164,   0, 128,   0,  87,  97,  22, 120,
+     145,   0, 170, 142, 148, 169,  60,  37,  93,   0,  94, 118, 130,
+      35, 121, 125,   0,   0,  31,  80, 116, 133, 129, 144,   7, 147,
+     146,  83, 100,  16,  13, 112, 168,  27,   9, 163,  99, 155,  73,
+      70,  46, 153,   0, 167,  65, 156,  84,   0,  50,   0,   0,  38,
+      43, 109, 150,  75,   0,  19,  72,   0,  90, 154, 140,
   };
-  static const unsigned short aNext[171] = {
+  static const unsigned short aNext[170] = {
+       0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-       0,   4,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-       0,   0,   0,   0,   0,   0,  27,   0,  12,   0,   0,   6,   0,
-       0,   0,   0,   0,   0,  17,   0,   0,   0,   0,  39,   0,   0,
-       0,  25,   0,   0,   0,   0,   0,   0,   1,   0,   0,   0,  41,
-       0,   8,   0,   0,   2,   0,   0,   0,   0,   0,   0,  28,   0,
-       0,   0,   0,  10,  36,   0,   0,  48,   3,  67,  64,  52,   0,
-      59,  66,   0,   0,  32,   0,  95,   0,  89,  11,   0,  63,  56,
-       0,  60,  18,   0,   0,   0, 109, 101,   5,  31,  71,  42,  23,
-       0,  74,   0,   0,   0, 113,  85,   0,   0,   0, 108,   0,  29,
-     123,  24, 129,  97,  80,   0,  47,   0,  84,   0,  26, 138,   0,
-       0,  34, 145, 122,   0, 140,  62,  73,   0,   0,   0,   0, 100,
-     106,  55,  79, 141, 104,  75,  33, 127, 139, 152,  91, 143,  83,
-       0,  46,
+      17,   0,   6,   0,  15,   0,   0,   0,   0,   0,  24,   0,   0,
+      33,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+       0,   0,   0,  47,   0,   8,   0,   0,   0,   0,   0,   0,  54,
+      64,   0,   0,   0,   4,   0,  39,   0,   0,   0,   0,  18,  45,
+       0,   0,   0,   0,   0,  10,  76,   0,  34,   0,   0,  58,  55,
+      61,  89,  41,  26,  57,   0,   0,  98,   0,  91,  52,   0,   0,
+       0,   0,   0,   0, 107,  11,  32, 110,  62,   0,  88,   2,   0,
+       0,  67,   0,   0,   0, 111,  23,   0,   5,   0,  30, 123,   3,
+     127, 106,  82,   0,   0,   0, 126, 114,   0,   0,  25, 141,  79,
+     122,   0, 136,  49,  71,   0,  74,  44,   0,   0,   0, 101,  85,
+      36,  51,  81,  66,  68,  40, 105, 115, 149, 108, 139, 102,   0,
+      28,
   };
-  static const unsigned char aLen[171] = {
-       7,   7,   5,   7,   5,   6,   7,   5,   3,   5,   7,  10,   2,
-       4,   9,   4,   5,   6,   5,   5,   6,   4,   7,   3,   2,   6,
-      10,   6,   3,   7,   8,   6,   4,   3,   6,   6,   6,   4,   7,
-       5,   7,   6,   9,   7,   5,   3,  11,   6,   2,   7,   3,   2,
-       4,   4,   7,   5,   8,   9,   7,   9,   4,  10,   4,   6,   2,
-       3,   6,   5,   5,   7,   3,  10,   7,   7,   3,   8,   4,   4,
-       5,   6,   6,   5,   6,   6,   5,   5,   5,   6,   4,   5,   6,
-       5,   6,   4,   6,   4,   7,   6,   5,   9,   7,   6,   8,   2,
-       4,  14,   9,   9,   5,   8,   5,   4,   5,   6,   3,   7,  13,
-       2,   7,   6,   9,   8,   7,   6,   5,   3,   4,   9,  12,   4,
-       7,  17,  12,   7,  12,   4,   5,   8,   6,  10,   4,  13,   2,
-       2,   8,   4,   4,   5,   4,   8,   5,   9,  11,   9,   6,   6,
-       4,   8,   4,   6,  10,   3,   5,   5,   4,   8,   4,   3,   2,
-       9,   3,
+  static const unsigned char aLen[170] = {
+       6,   7,   3,   2,   6,   6,   7,   5,   3,   5,   7,  10,   2,
+       4,   9,   4,   5,   6,   5,   5,   6,   4,   5,   5,   3,   7,
+       5,   3,   4,   3,   7,   5,  10,   6,   6,  11,   6,   2,   7,
+       4,   6,   9,   7,   8,   6,   5,   7,   4,  10,   9,   7,   6,
+       8,   4,   6,   2,   3,   6,   5,   5,   7,   3,   7,   5,   8,
+       2,   7,   3,  10,   4,   7,   7,   3,   2,   4,  14,   9,   4,
+       7,   4,   5,   6,   6,   5,   9,   8,   4,   6,   5,   6,   4,
+       7,   5,   7,   5,   6,   4,   6,   6,   5,   9,   6,   6,   3,
+       4,   9,   5,   6,   5,   4,   5,   7,   3,   8,   6,  13,   2,
+       4,   7,   6,   9,   8,   7,   6,   5,   6,  12,   4,   7,  17,
+      12,   9,  12,   4,   8,  10,   4,  13,   2,   2,   8,   4,   7,
+       4,   5,   4,   8,   5,   9,   5,   6,  11,   9,   6,   6,   4,
+       5,   8,   4,  10,   3,   5,   5,   4,   8,   4,   3,   2,   9,
+       3,
   };
-  static const unsigned short int aOffset[171] = {
-       0,   2,   2,   8,  13,  17,  20,  25,  27,  27,  31,  35,  35,
-      44,  46,  46,  54,  57,  62,  65,  69,  69,  74,  74,  75,  78,
-      82,  90,  95,  97, 102, 104, 109, 111, 114, 118, 123, 128, 131,
-     137, 140, 146, 151, 157, 163, 166, 168, 173, 177, 178, 178, 178,
-     181, 184, 187, 193, 197, 202, 211, 217, 226, 230, 237, 240, 240,
-     243, 246, 249, 254, 257, 262, 264, 274, 281, 282, 286, 286, 294,
-     296, 301, 307, 311, 315, 321, 327, 330, 335, 338, 344, 346, 350,
-     356, 360, 365, 368, 374, 376, 383, 388, 393, 400, 407, 412, 416,
-     419, 422, 422, 435, 444, 447, 455, 460, 464, 468, 474, 476, 483,
-     485, 496, 503, 509, 518, 526, 533, 539, 543, 545, 548, 557, 565,
-     569, 569, 569, 585, 592, 600, 603, 608, 615, 621, 627, 631, 637,
-     639, 644, 652, 656, 660, 665, 669, 677, 682, 691, 693, 702, 708,
-     714, 717, 725, 728, 734, 734, 744, 749, 754, 757, 757, 765, 768,
-     770, 775,
+  static const unsigned short int aOffset[170] = {
+       0,   2,   2,   3,   6,  10,  13,  18,  20,  20,  24,  28,  28,
+      37,  39,  39,  47,  50,  55,  58,  62,  62,  67,  70,  74,  77,
+      83,  86,  88,  90,  92,  97, 101, 109, 114, 119, 124, 128, 129,
+     135, 138, 143, 149, 155, 157, 162, 165, 172, 176, 183, 191, 197,
+     203, 208, 211, 211, 214, 217, 220, 225, 228, 233, 235, 240, 244,
+     248, 251, 252, 256, 264, 268, 274, 274, 274, 277, 280, 280, 293,
+     295, 302, 304, 309, 315, 319, 323, 332, 332, 340, 346, 349, 355,
+     357, 357, 363, 370, 374, 379, 382, 388, 393, 398, 405, 411, 416,
+     418, 421, 430, 433, 439, 444, 448, 452, 459, 461, 468, 474, 476,
+     487, 491, 498, 504, 513, 521, 528, 534, 538, 544, 552, 556, 556,
+     556, 572, 581, 589, 592, 600, 606, 610, 616, 618, 623, 631, 634,
+     641, 645, 650, 654, 662, 667, 676, 680, 686, 688, 697, 703, 709,
+     712, 717, 725, 729, 729, 739, 744, 749, 752, 752, 760, 763, 765,
+     770,
   };
-  static const unsigned char aCode[171] = {
-    TK_REINDEX,    TK_INDEXED,    TK_INDEX,      TK_ID,         TK_ALTER,      
+  static const unsigned char aCode[170] = {
+    TK_BEFORE,     TK_FOREIGN,    TK_FOR,        TK_OR,         TK_IGNORE,     
     TK_LIKE_KW,    TK_EXPLAIN,    TK_STANDARD,   TK_STANDARD,   TK_JOIN_KW,    
     TK_RELEASE,    TK_STANDARD,   TK_AS,         TK_EACH,       TK_ID,         
     TK_ID,         TK_RAISE,      TK_SELECT,     TK_TABLE,      TK_STANDARD,   
-    TK_STANDARD,   TK_ELSE,       TK_FOREIGN,    TK_FOR,        TK_OR,         
-    TK_IGNORE,     TK_REFERENCES, TK_ESCAPE,     TK_END,        TK_STANDARD,   
-    TK_STANDARD,   TK_STANDARD,   TK_LIKE_KW,    TK_KEY,        TK_BEFORE,     
-    TK_STANDARD,   TK_EXCEPT,     TK_THEN,       TK_JOIN_KW,    TK_LIMIT,      
-    TK_STANDARD,   TK_EXISTS,     TK_SAVEPOINT,  TK_ID,         TK_STANDARD,   
-    TK_STANDARD,   TK_TRANSACTION,TK_ACTION,     TK_ON,         TK_NOTNULL,    
-    TK_NOT,        TK_NO,         TK_NULL,       TK_JOIN_KW,    TK_TRIGGER,    
-    TK_STANDARD,   TK_ID,         TK_INTERSECT,  TK_ID,         TK_RECURSIVE,  
-    TK_CASE,       TK_CONSTRAINT, TK_INTO,       TK_OFFSET,     TK_OF,         
-    TK_SET,        TK_UNIQUE,     TK_QUERY,      TK_BEGIN,      TK_INSTEAD,    
-    TK_ADD,        TK_DEFERRABLE, TK_BETWEEN,    TK_CASCADE,    TK_ASC,        
-    TK_STANDARD,   TK_DESC,       TK_CAST,       TK_STANDARD,   TK_COMMIT,     
-    TK_STANDARD,   TK_ORDER,      TK_RENAME,     TK_ID,         TK_STANDARD,   
-    TK_CHECK,      TK_GROUP,      TK_UPDATE,     TK_JOIN,       TK_JOIN_KW,    
-    TK_STANDARD,   TK_MATCH,      TK_HAVING,     TK_LIKE_KW,    TK_ID,         
-    TK_PLAN,       TK_ANALYZE,    TK_PRAGMA,     TK_ABORT,      TK_STANDARD,   
-    TK_REPLACE,    TK_VALUES,     TK_STANDARD,   TK_IF,         TK_STANDARD,   
-    TK_STANDARD,   TK_STANDARD,   TK_STANDARD,   TK_WHERE,      TK_RESTRICT,   
-    TK_STANDARD,   TK_WITH,       TK_AFTER,      TK_STANDARD,   TK_AND,        
-    TK_DEFAULT,    TK_AUTOINCR,   TK_TO,         TK_COLLATE,    TK_STANDARD,   
+    TK_STANDARD,   TK_ELSE,       TK_STANDARD,   TK_CHECK,      TK_KEY,        
+    TK_ID,         TK_STANDARD,   TK_STANDARD,   TK_THEN,       TK_END,        
+    TK_ID,         TK_ALTER,      TK_REFERENCES, TK_ESCAPE,     TK_EXCEPT,     
+    TK_TRANSACTION,TK_ACTION,     TK_ON,         TK_JOIN_KW,    TK_LIKE_KW,    
+    TK_EXISTS,     TK_SAVEPOINT,  TK_ID,         TK_STANDARD,   TK_STANDARD,   
+    TK_LIMIT,      TK_STANDARD,   TK_CASE,       TK_CONSTRAINT, TK_INTERSECT,  
+    TK_TRIGGER,    TK_STANDARD,   TK_ID,         TK_INTO,       TK_OFFSET,     
+    TK_OF,         TK_SET,        TK_UNIQUE,     TK_QUERY,      TK_BEGIN,      
+    TK_INSTEAD,    TK_ADD,        TK_STANDARD,   TK_STANDARD,   TK_STANDARD,   
+    TK_IF,         TK_CASCADE,    TK_ASC,        TK_DEFERRABLE, TK_JOIN_KW,    
+    TK_BETWEEN,    TK_NOTNULL,    TK_NOT,        TK_NO,         TK_NULL,       
+    TK_STANDARD,   TK_STANDARD,   TK_PLAN,       TK_ANALYZE,    TK_CAST,       
+    TK_STANDARD,   TK_COMMIT,     TK_STANDARD,   TK_ORDER,      TK_RECURSIVE,  
+    TK_STANDARD,   TK_DESC,       TK_ID,         TK_GROUP,      TK_UPDATE,     
+    TK_JOIN,       TK_INDEXED,    TK_INDEX,      TK_DEFAULT,    TK_MATCH,      
+    TK_HAVING,     TK_LIKE_KW,    TK_ID,         TK_PRAGMA,     TK_ABORT,      
+    TK_STANDARD,   TK_RENAME,     TK_VALUES,     TK_STANDARD,   TK_STANDARD,   
+    TK_STANDARD,   TK_WHERE,      TK_STANDARD,   TK_STANDARD,   TK_WITH,       
+    TK_AFTER,      TK_REPLACE,    TK_AND,        TK_DEFERRED,   TK_DELETE,     
+    TK_AUTOINCR,   TK_TO,         TK_STANDARD,   TK_COLLATE,    TK_STANDARD,   
     TK_STANDARD,   TK_CONFLICT,   TK_STANDARD,   TK_CREATE,     TK_JOIN_KW,    
-    TK_STANDARD,   TK_STANDARD,   TK_STANDARD,   TK_CTIME_KW,   TK_ID,         
-    TK_STANDARD,   TK_CTIME_KW,   TK_CTIME_KW,   TK_PRIMARY,    TK_STANDARD,   
-    TK_STANDARD,   TK_JOIN_KW,    TK_DEFERRED,   TK_DELETE,     TK_STANDARD,   
-    TK_STANDARD,   TK_STANDARD,   TK_IN,         TK_IS,         TK_DISTINCT,   
-    TK_DROP,       TK_FAIL,       TK_ID,         TK_FROM,       TK_STANDARD,   
-    TK_STANDARD,   TK_IMMEDIATE,  TK_STANDARD,   TK_STANDARD,   TK_INSERT,     
-    TK_ISNULL,     TK_STANDARD,   TK_ROLLBACK,   TK_STANDARD,   TK_STANDARD,   
-    TK_STANDARD,   TK_ROW,        TK_UNION,      TK_USING,      TK_VIEW,       
-    TK_STANDARD,   TK_WHEN,       TK_STANDARD,   TK_BY,         TK_INITIALLY,  
-    TK_ALL,        
+    TK_STANDARD,   TK_CTIME_KW,   TK_ID,         TK_STANDARD,   TK_CTIME_KW,   
+    TK_CTIME_KW,   TK_STANDARD,   TK_STANDARD,   TK_STANDARD,   TK_RESTRICT,   
+    TK_STANDARD,   TK_STANDARD,   TK_STANDARD,   TK_IN,         TK_IS,         
+    TK_DISTINCT,   TK_DROP,       TK_PRIMARY,    TK_FAIL,       TK_ID,         
+    TK_FROM,       TK_STANDARD,   TK_STANDARD,   TK_IMMEDIATE,  TK_JOIN_KW,    
+    TK_STANDARD,   TK_STANDARD,   TK_STANDARD,   TK_INSERT,     TK_ISNULL,     
+    TK_STANDARD,   TK_JOIN_KW,    TK_ROLLBACK,   TK_STANDARD,   TK_STANDARD,   
+    TK_ROW,        TK_UNION,      TK_USING,      TK_VIEW,       TK_STANDARD,   
+    TK_WHEN,       TK_STANDARD,   TK_BY,         TK_INITIALLY,  TK_ALL,        
   };
-  static const bool aFlag[171] = {
-    true,          false,         true,          true,          true,          
+  static const bool aFlag[170] = {
+    false,         true,          true,          true,          false,         
     false,         true,          true,          true,          true,          
     true,          true,          true,          true,          true,          
     true,          false,         true,          true,          true,          
-    true,          true,          true,          true,          true,          
-    false,         true,          true,          true,          true,          
-    true,          true,          true,          false,         false,         
     true,          true,          true,          true,          false,         
     true,          true,          true,          true,          true,          
-    true,          true,          false,         true,          false,         
+    true,          true,          true,          true,          true,          
     true,          false,         true,          true,          true,          
     true,          true,          true,          true,          true,          
+    false,         true,          true,          true,          true,          
+    true,          true,          true,          true,          false,         
     true,          true,          true,          false,         true,          
+    false,         false,         true,          true,          true,          
+    true,          false,         true,          false,         true,          
+    true,          false,         true,          false,         true,          
     true,          true,          false,         true,          false,         
-    false,         false,         true,          false,         true,          
-    true,          true,          false,         true,          true,          
     true,          true,          true,          true,          true,          
     true,          true,          true,          true,          true,          
-    true,          true,          true,          false,         true,          
-    false,         true,          true,          false,         true,          
-    true,          true,          true,          true,          true,          
-    true,          true,          true,          true,          false,         
-    true,          true,          false,         true,          true,          
     true,          false,         true,          true,          true,          
-    true,          false,         true,          true,          true,          
-    true,          true,          true,          true,          true,          
+    true,          false,         true,          true,          false,         
     true,          true,          true,          true,          true,          
-    true,          true,          false,         true,          true,          
     true,          true,          true,          true,          true,          
+    false,         true,          true,          false,         true,          
+    false,         true,          true,          true,          true,          
     true,          false,         true,          true,          true,          
     true,          true,          true,          true,          true,          
-    false,         true,          true,          true,          true,          
+    true,          true,          true,          true,          false,         
+    true,          true,          true,          true,          true,          
+    true,          true,          true,          false,         true,          
     true,          true,          true,          true,          true,          
     true,          true,          true,          true,          false,         
-    true,          
+    true,          true,          true,          true,          true,          
+    true,          true,          true,          true,          true,          
+    true,          true,          true,          false,         true,          
   };
   int i, j;
   const char *zKW;
@@ -222,11 +219,11 @@ static int keywordCode(const char *z, int n, int *pType, bool *pFlag){
       while( j<n && toupper(z[j])==zKW[j] ){ j++; }
 #endif
       if( j<n ) continue;
-      testcase( i==0 ); /* REINDEX */
-      testcase( i==1 ); /* INDEXED */
-      testcase( i==2 ); /* INDEX */
-      testcase( i==3 ); /* DECIMAL */
-      testcase( i==4 ); /* ALTER */
+      testcase( i==0 ); /* BEFORE */
+      testcase( i==1 ); /* FOREIGN */
+      testcase( i==2 ); /* FOR */
+      testcase( i==3 ); /* OR */
+      testcase( i==4 ); /* IGNORE */
       testcase( i==5 ); /* REGEXP */
       testcase( i==6 ); /* EXPLAIN */
       testcase( i==7 ); /* INOUT */
@@ -244,102 +241,102 @@ static int keywordCode(const char *z, int n, int *pType, bool *pFlag){
       testcase( i==19 ); /* LEAVE */
       testcase( i==20 ); /* ELSEIF */
       testcase( i==21 ); /* ELSE */
-      testcase( i==22 ); /* FOREIGN */
-      testcase( i==23 ); /* FOR */
-      testcase( i==24 ); /* OR */
-      testcase( i==25 ); /* IGNORE */
-      testcase( i==26 ); /* REFERENCES */
-      testcase( i==27 ); /* ESCAPE */
-      testcase( i==28 ); /* END */
-      testcase( i==29 ); /* DECLARE */
-      testcase( i==30 ); /* RESIGNAL */
-      testcase( i==31 ); /* SIGNAL */
-      testcase( i==32 ); /* LIKE */
-      testcase( i==33 ); /* KEY */
-      testcase( i==34 ); /* BEFORE */
-      testcase( i==35 ); /* REVOKE */
-      testcase( i==36 ); /* EXCEPT */
-      testcase( i==37 ); /* THEN */
+      testcase( i==22 ); /* FETCH */
+      testcase( i==23 ); /* CHECK */
+      testcase( i==24 ); /* KEY */
+      testcase( i==25 ); /* VARCHAR */
+      testcase( i==26 ); /* RANGE */
+      testcase( i==27 ); /* GET */
+      testcase( i==28 ); /* THEN */
+      testcase( i==29 ); /* END */
+      testcase( i==30 ); /* DECIMAL */
+      testcase( i==31 ); /* ALTER */
+      testcase( i==32 ); /* REFERENCES */
+      testcase( i==33 ); /* ESCAPE */
+      testcase( i==34 ); /* EXCEPT */
+      testcase( i==35 ); /* TRANSACTION */
+      testcase( i==36 ); /* ACTION */
+      testcase( i==37 ); /* ON */
       testcase( i==38 ); /* NATURAL */
-      testcase( i==39 ); /* LIMIT */
-      testcase( i==40 ); /* ITERATE */
-      testcase( i==41 ); /* EXISTS */
-      testcase( i==42 ); /* SAVEPOINT */
-      testcase( i==43 ); /* INTEGER */
-      testcase( i==44 ); /* RANGE */
-      testcase( i==45 ); /* GET */
-      testcase( i==46 ); /* TRANSACTION */
-      testcase( i==47 ); /* ACTION */
-      testcase( i==48 ); /* ON */
-      testcase( i==49 ); /* NOTNULL */
-      testcase( i==50 ); /* NOT */
-      testcase( i==51 ); /* NO */
-      testcase( i==52 ); /* NULL */
-      testcase( i==53 ); /* LEFT */
-      testcase( i==54 ); /* TRIGGER */
-      testcase( i==55 ); /* READS */
-      testcase( i==56 ); /* SMALLINT */
-      testcase( i==57 ); /* INTERSECT */
-      testcase( i==58 ); /* VARCHAR */
-      testcase( i==59 ); /* RECURSIVE */
-      testcase( i==60 ); /* CASE */
-      testcase( i==61 ); /* CONSTRAINT */
-      testcase( i==62 ); /* INTO */
-      testcase( i==63 ); /* OFFSET */
-      testcase( i==64 ); /* OF */
-      testcase( i==65 ); /* SET */
-      testcase( i==66 ); /* UNIQUE */
-      testcase( i==67 ); /* QUERY */
-      testcase( i==68 ); /* BEGIN */
-      testcase( i==69 ); /* INSTEAD */
-      testcase( i==70 ); /* ADD */
-      testcase( i==71 ); /* DEFERRABLE */
-      testcase( i==72 ); /* BETWEEN */
-      testcase( i==73 ); /* CASCADE */
-      testcase( i==74 ); /* ASC */
-      testcase( i==75 ); /* DESCRIBE */
-      testcase( i==76 ); /* DESC */
-      testcase( i==77 ); /* CAST */
-      testcase( i==78 ); /* START */
-      testcase( i==79 ); /* COMMIT */
-      testcase( i==80 ); /* CURSOR */
-      testcase( i==81 ); /* ORDER */
-      testcase( i==82 ); /* RENAME */
-      testcase( i==83 ); /* DOUBLE */
-      testcase( i==84 ); /* FETCH */
-      testcase( i==85 ); /* CHECK */
-      testcase( i==86 ); /* GROUP */
-      testcase( i==87 ); /* UPDATE */
-      testcase( i==88 ); /* JOIN */
-      testcase( i==89 ); /* INNER */
-      testcase( i==90 ); /* REPEAT */
-      testcase( i==91 ); /* MATCH */
-      testcase( i==92 ); /* HAVING */
-      testcase( i==93 ); /* GLOB */
-      testcase( i==94 ); /* BINARY */
-      testcase( i==95 ); /* PLAN */
-      testcase( i==96 ); /* ANALYZE */
-      testcase( i==97 ); /* PRAGMA */
-      testcase( i==98 ); /* ABORT */
-      testcase( i==99 ); /* PROCEDURE */
-      testcase( i==100 ); /* REPLACE */
-      testcase( i==101 ); /* VALUES */
-      testcase( i==102 ); /* SPECIFIC */
-      testcase( i==103 ); /* IF */
-      testcase( i==104 ); /* CALL */
-      testcase( i==105 ); /* LOCALTIMESTAMP */
-      testcase( i==106 ); /* LOCALTIME */
-      testcase( i==107 ); /* PARTITION */
-      testcase( i==108 ); /* WHERE */
-      testcase( i==109 ); /* RESTRICT */
-      testcase( i==110 ); /* WHILE */
-      testcase( i==111 ); /* WITH */
-      testcase( i==112 ); /* AFTER */
-      testcase( i==113 ); /* RETURN */
-      testcase( i==114 ); /* AND */
-      testcase( i==115 ); /* DEFAULT */
-      testcase( i==116 ); /* AUTOINCREMENT */
-      testcase( i==117 ); /* TO */
+      testcase( i==39 ); /* LIKE */
+      testcase( i==40 ); /* EXISTS */
+      testcase( i==41 ); /* SAVEPOINT */
+      testcase( i==42 ); /* INTEGER */
+      testcase( i==43 ); /* RESIGNAL */
+      testcase( i==44 ); /* SIGNAL */
+      testcase( i==45 ); /* LIMIT */
+      testcase( i==46 ); /* ITERATE */
+      testcase( i==47 ); /* CASE */
+      testcase( i==48 ); /* CONSTRAINT */
+      testcase( i==49 ); /* INTERSECT */
+      testcase( i==50 ); /* TRIGGER */
+      testcase( i==51 ); /* REVOKE */
+      testcase( i==52 ); /* SMALLINT */
+      testcase( i==53 ); /* INTO */
+      testcase( i==54 ); /* OFFSET */
+      testcase( i==55 ); /* OF */
+      testcase( i==56 ); /* SET */
+      testcase( i==57 ); /* UNIQUE */
+      testcase( i==58 ); /* QUERY */
+      testcase( i==59 ); /* BEGIN */
+      testcase( i==60 ); /* INSTEAD */
+      testcase( i==61 ); /* ADD */
+      testcase( i==62 ); /* DECLARE */
+      testcase( i==63 ); /* READS */
+      testcase( i==64 ); /* SPECIFIC */
+      testcase( i==65 ); /* IF */
+      testcase( i==66 ); /* CASCADE */
+      testcase( i==67 ); /* ASC */
+      testcase( i==68 ); /* DEFERRABLE */
+      testcase( i==69 ); /* LEFT */
+      testcase( i==70 ); /* BETWEEN */
+      testcase( i==71 ); /* NOTNULL */
+      testcase( i==72 ); /* NOT */
+      testcase( i==73 ); /* NO */
+      testcase( i==74 ); /* NULL */
+      testcase( i==75 ); /* LOCALTIMESTAMP */
+      testcase( i==76 ); /* LOCALTIME */
+      testcase( i==77 ); /* PLAN */
+      testcase( i==78 ); /* ANALYZE */
+      testcase( i==79 ); /* CAST */
+      testcase( i==80 ); /* START */
+      testcase( i==81 ); /* COMMIT */
+      testcase( i==82 ); /* CURSOR */
+      testcase( i==83 ); /* ORDER */
+      testcase( i==84 ); /* RECURSIVE */
+      testcase( i==85 ); /* DESCRIBE */
+      testcase( i==86 ); /* DESC */
+      testcase( i==87 ); /* DOUBLE */
+      testcase( i==88 ); /* GROUP */
+      testcase( i==89 ); /* UPDATE */
+      testcase( i==90 ); /* JOIN */
+      testcase( i==91 ); /* INDEXED */
+      testcase( i==92 ); /* INDEX */
+      testcase( i==93 ); /* DEFAULT */
+      testcase( i==94 ); /* MATCH */
+      testcase( i==95 ); /* HAVING */
+      testcase( i==96 ); /* GLOB */
+      testcase( i==97 ); /* BINARY */
+      testcase( i==98 ); /* PRAGMA */
+      testcase( i==99 ); /* ABORT */
+      testcase( i==100 ); /* PROCEDURE */
+      testcase( i==101 ); /* RENAME */
+      testcase( i==102 ); /* VALUES */
+      testcase( i==103 ); /* SQL */
+      testcase( i==104 ); /* LOOP */
+      testcase( i==105 ); /* PARTITION */
+      testcase( i==106 ); /* WHERE */
+      testcase( i==107 ); /* REPEAT */
+      testcase( i==108 ); /* WHILE */
+      testcase( i==109 ); /* WITH */
+      testcase( i==110 ); /* AFTER */
+      testcase( i==111 ); /* REPLACE */
+      testcase( i==112 ); /* AND */
+      testcase( i==113 ); /* DEFERRED */
+      testcase( i==114 ); /* DELETE */
+      testcase( i==115 ); /* AUTOINCREMENT */
+      testcase( i==116 ); /* TO */
+      testcase( i==117 ); /* CALL */
       testcase( i==118 ); /* COLLATE */
       testcase( i==119 ); /* COLUMN */
       testcase( i==120 ); /* CONDITION */
@@ -347,52 +344,51 @@ static int keywordCode(const char *z, int n, int *pType, bool *pFlag){
       testcase( i==122 ); /* CONNECT */
       testcase( i==123 ); /* CREATE */
       testcase( i==124 ); /* CROSS */
-      testcase( i==125 ); /* SQL */
-      testcase( i==126 ); /* LOOP */
-      testcase( i==127 ); /* PRECISION */
-      testcase( i==128 ); /* CURRENT_DATE */
-      testcase( i==129 ); /* DATE */
-      testcase( i==130 ); /* CURRENT */
-      testcase( i==131 ); /* CURRENT_TIMESTAMP */
-      testcase( i==132 ); /* CURRENT_TIME */
-      testcase( i==133 ); /* PRIMARY */
-      testcase( i==134 ); /* CURRENT_USER */
-      testcase( i==135 ); /* USER */
-      testcase( i==136 ); /* RIGHT */
-      testcase( i==137 ); /* DEFERRED */
-      testcase( i==138 ); /* DELETE */
-      testcase( i==139 ); /* DENSE_RANK */
-      testcase( i==140 ); /* RANK */
-      testcase( i==141 ); /* DETERMINISTIC */
-      testcase( i==142 ); /* IN */
-      testcase( i==143 ); /* IS */
-      testcase( i==144 ); /* DISTINCT */
-      testcase( i==145 ); /* DROP */
-      testcase( i==146 ); /* FAIL */
-      testcase( i==147 ); /* FLOAT */
-      testcase( i==148 ); /* FROM */
-      testcase( i==149 ); /* FUNCTION */
-      testcase( i==150 ); /* GRANT */
-      testcase( i==151 ); /* IMMEDIATE */
-      testcase( i==152 ); /* INSENSITIVE */
-      testcase( i==153 ); /* SENSITIVE */
-      testcase( i==154 ); /* INSERT */
-      testcase( i==155 ); /* ISNULL */
-      testcase( i==156 ); /* OVER */
+      testcase( i==125 ); /* SYSTEM */
+      testcase( i==126 ); /* CURRENT_DATE */
+      testcase( i==127 ); /* DATE */
+      testcase( i==128 ); /* CURRENT */
+      testcase( i==129 ); /* CURRENT_TIMESTAMP */
+      testcase( i==130 ); /* CURRENT_TIME */
+      testcase( i==131 ); /* PRECISION */
+      testcase( i==132 ); /* CURRENT_USER */
+      testcase( i==133 ); /* USER */
+      testcase( i==134 ); /* RESTRICT */
+      testcase( i==135 ); /* DENSE_RANK */
+      testcase( i==136 ); /* RANK */
+      testcase( i==137 ); /* DETERMINISTIC */
+      testcase( i==138 ); /* IN */
+      testcase( i==139 ); /* IS */
+      testcase( i==140 ); /* DISTINCT */
+      testcase( i==141 ); /* DROP */
+      testcase( i==142 ); /* PRIMARY */
+      testcase( i==143 ); /* FAIL */
+      testcase( i==144 ); /* FLOAT */
+      testcase( i==145 ); /* FROM */
+      testcase( i==146 ); /* FUNCTION */
+      testcase( i==147 ); /* GRANT */
+      testcase( i==148 ); /* IMMEDIATE */
+      testcase( i==149 ); /* INNER */
+      testcase( i==150 ); /* RETURN */
+      testcase( i==151 ); /* INSENSITIVE */
+      testcase( i==152 ); /* SENSITIVE */
+      testcase( i==153 ); /* INSERT */
+      testcase( i==154 ); /* ISNULL */
+      testcase( i==155 ); /* OVER */
+      testcase( i==156 ); /* RIGHT */
       testcase( i==157 ); /* ROLLBACK */
       testcase( i==158 ); /* ROWS */
-      testcase( i==159 ); /* SYSTEM */
-      testcase( i==160 ); /* ROW_NUMBER */
-      testcase( i==161 ); /* ROW */
-      testcase( i==162 ); /* UNION */
-      testcase( i==163 ); /* USING */
-      testcase( i==164 ); /* VIEW */
-      testcase( i==165 ); /* WHENEVER */
-      testcase( i==166 ); /* WHEN */
-      testcase( i==167 ); /* ANY */
-      testcase( i==168 ); /* BY */
-      testcase( i==169 ); /* INITIALLY */
-      testcase( i==170 ); /* ALL */
+      testcase( i==159 ); /* ROW_NUMBER */
+      testcase( i==160 ); /* ROW */
+      testcase( i==161 ); /* UNION */
+      testcase( i==162 ); /* USING */
+      testcase( i==163 ); /* VIEW */
+      testcase( i==164 ); /* WHENEVER */
+      testcase( i==165 ); /* WHEN */
+      testcase( i==166 ); /* ANY */
+      testcase( i==167 ); /* BY */
+      testcase( i==168 ); /* INITIALLY */
+      testcase( i==169 ); /* ALL */
       *pType = aCode[i];
       if (pFlag) {
         *pFlag = aFlag[i];
@@ -407,4 +403,4 @@ int sqlite3KeywordCode(const unsigned char *z, int n){
   keywordCode((char*)z, n, &id, NULL);
   return id;
 }
-#define SQLITE_N_KEYWORD 171
+#define SQLITE_N_KEYWORD 170
diff --git a/src/box/sql/opcodes.c b/src/box/sql/opcodes.c
index 4481895..d09b0e1 100644
--- a/src/box/sql/opcodes.c
+++ b/src/box/sql/opcodes.c
@@ -85,8 +85,8 @@ const char *sqlite3OpcodeName(int i){
     /*  71 */ "Null"             OpHelp("r[P2..P3]=NULL"),
     /*  72 */ "SoftNull"         OpHelp("r[P1]=NULL"),
     /*  73 */ "Blob"             OpHelp("r[P2]=P4 (len=P1, subtype=P3)"),
-    /*  74 */ "Variable"         OpHelp("r[P2]=parameter(P1,P4)"),
-    /*  75 */ "String8"          OpHelp("r[P2]='P4'"),
+    /*  74 */ "String8"          OpHelp("r[P2]='P4'"),
+    /*  75 */ "Variable"         OpHelp("r[P2]=parameter(P1,P4)"),
     /*  76 */ "Move"             OpHelp("r[P2@P3]=r[P1@P3]"),
     /*  77 */ "Copy"             OpHelp("r[P2@P3+1]=r[P1@P3+1]"),
     /*  78 */ "SCopy"            OpHelp("r[P2]=r[P1]"),
@@ -125,8 +125,8 @@ const char *sqlite3OpcodeName(int i){
     /* 111 */ "ResetCount"       OpHelp(""),
     /* 112 */ "SorterCompare"    OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"),
     /* 113 */ "SorterData"       OpHelp("r[P2]=data"),
-    /* 114 */ "RowData"          OpHelp("r[P2]=data"),
-    /* 115 */ "Real"             OpHelp("r[P2]=P4"),
+    /* 114 */ "Real"             OpHelp("r[P2]=P4"),
+    /* 115 */ "RowData"          OpHelp("r[P2]=data"),
     /* 116 */ "NullRow"          OpHelp(""),
     /* 117 */ "SorterInsert"     OpHelp("key=r[P2]"),
     /* 118 */ "IdxReplace"       OpHelp("key=r[P2]"),
diff --git a/src/box/sql/opcodes.h b/src/box/sql/opcodes.h
index ccca237..d646ab9 100644
--- a/src/box/sql/opcodes.h
+++ b/src/box/sql/opcodes.h
@@ -74,8 +74,8 @@
 #define OP_Null           71 /* synopsis: r[P2..P3]=NULL                   */
 #define OP_SoftNull       72 /* synopsis: r[P1]=NULL                       */
 #define OP_Blob           73 /* synopsis: r[P2]=P4 (len=P1, subtype=P3)    */
-#define OP_Variable       74 /* synopsis: r[P2]=parameter(P1,P4)           */
-#define OP_String8        75 /* same as TK_STRING, synopsis: r[P2]='P4'    */
+#define OP_String8        74 /* same as TK_STRING, synopsis: r[P2]='P4'    */
+#define OP_Variable       75 /* synopsis: r[P2]=parameter(P1,P4)           */
 #define OP_Move           76 /* synopsis: r[P2@P3]=r[P1@P3]                */
 #define OP_Copy           77 /* synopsis: r[P2@P3+1]=r[P1@P3+1]            */
 #define OP_SCopy          78 /* synopsis: r[P2]=r[P1]                      */
@@ -114,8 +114,8 @@
 #define OP_ResetCount    111
 #define OP_SorterCompare 112 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */
 #define OP_SorterData    113 /* synopsis: r[P2]=data                       */
-#define OP_RowData       114 /* synopsis: r[P2]=data                       */
-#define OP_Real          115 /* same as TK_FLOAT, synopsis: r[P2]=P4       */
+#define OP_Real          114 /* same as TK_FLOAT, synopsis: r[P2]=P4       */
+#define OP_RowData       115 /* synopsis: r[P2]=data                       */
 #define OP_NullRow       116
 #define OP_SorterInsert  117 /* synopsis: key=r[P2]                        */
 #define OP_IdxReplace    118 /* synopsis: key=r[P2]                        */
@@ -168,7 +168,7 @@
 /*  88 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10,\
 /*  96 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
 /* 104 */ 0x00, 0x00, 0x10, 0x20, 0x00, 0x10, 0x00, 0x00,\
-/* 112 */ 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x04,\
+/* 112 */ 0x00, 0x00, 0x10, 0x00, 0x00, 0x04, 0x00, 0x04,\
 /* 120 */ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
 /* 128 */ 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x1a, 0x00,\
 /* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}
diff --git a/src/box/sql/parse.c b/src/box/sql/parse.c
index 0019b77..5117bab 100644
--- a/src/box/sql/parse.c
+++ b/src/box/sql/parse.c
@@ -287,25 +287,25 @@ static void disableLookaside(Parse *pParse){
 #endif
 /************* Begin control #defines *****************************************/
 #define YYCODETYPE unsigned char
-#define YYNOCODE 231
+#define YYNOCODE 230
 #define YYACTIONTYPE unsigned short int
-#define YYWILDCARD 74
+#define YYWILDCARD 73
 #define sqlite3ParserTOKENTYPE Token
 typedef union {
   int yyinit;
   sqlite3ParserTOKENTYPE yy0;
-  struct TrigEvent yy10;
-  IdList* yy40;
-  int yy52;
-  struct {int value; int mask;} yy107;
-  With* yy151;
-  ExprSpan yy162;
-  Select* yy279;
-  Expr* yy362;
-  ExprList* yy382;
-  struct LimitVal yy384;
-  SrcList* yy387;
-  TriggerStep* yy427;
+  SrcList* yy41;
+  struct LimitVal yy76;
+  ExprList* yy162;
+  struct TrigEvent yy184;
+  Select* yy203;
+  ExprSpan yy266;
+  With* yy273;
+  IdList* yy306;
+  struct {int value; int mask;} yy331;
+  Expr* yy396;
+  int yy444;
+  TriggerStep* yy451;
 } YYMINORTYPE;
 #ifndef YYSTACKDEPTH
 #define YYSTACKDEPTH 100
@@ -315,16 +315,16 @@ typedef union {
 #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse
 #define sqlite3ParserARG_STORE yypParser->pParse = pParse
 #define YYFALLBACK 1
-#define YYNSTATE             412
-#define YYNRULE              300
-#define YY_MAX_SHIFT         411
-#define YY_MIN_SHIFTREDUCE   608
-#define YY_MAX_SHIFTREDUCE   907
-#define YY_MIN_REDUCE        908
-#define YY_MAX_REDUCE        1207
-#define YY_ERROR_ACTION      1208
-#define YY_ACCEPT_ACTION     1209
-#define YY_NO_ACTION         1210
+#define YYNSTATE             409
+#define YYNRULE              297
+#define YY_MAX_SHIFT         408
+#define YY_MIN_SHIFTREDUCE   604
+#define YY_MAX_SHIFTREDUCE   900
+#define YY_MIN_REDUCE        901
+#define YY_MAX_REDUCE        1197
+#define YY_ERROR_ACTION      1198
+#define YY_ACCEPT_ACTION     1199
+#define YY_NO_ACTION         1200
 /************* End control #defines *******************************************/
 
 /* Define the yytestcase() macro to be a no-op if is not already defined
@@ -396,419 +396,417 @@ typedef union {
 **  yy_default[]       Default action for each state.
 **
 *********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (1406)
+#define YY_ACTTAB_COUNT (1404)
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */    91,   92,  287,   82,  775,  775,  787,  790,  779,  779,
- /*    10 */    89,   89,   90,   90,   90,   90,  309,   88,   88,   88,
- /*    20 */    88,   87,   87,   86,   86,   86,   85,  309,   90,   90,
+ /*     0 */    91,   92,  285,   82,  771,  771,  783,  786,  775,  775,
+ /*    10 */    89,   89,   90,   90,   90,   90,  307,   88,   88,   88,
+ /*    20 */    88,   87,   87,   86,   86,   86,   85,  307,   90,   90,
  /*    30 */    90,   90,   83,   88,   88,   88,   88,   87,   87,   86,
- /*    40 */    86,   86,   85,  309,  210,  122,  892,   90,   90,   90,
- /*    50 */    90,  634,   88,   88,   88,   88,   87,   87,   86,   86,
- /*    60 */    86,   85,  309,   87,   87,   86,   86,   86,   85,  309,
- /*    70 */   892,   86,   86,   86,   85,  309,   91,   92,  287,   82,
- /*    80 */   775,  775,  787,  790,  779,  779,   89,   89,   90,   90,
- /*    90 */    90,   90,  637,   88,   88,   88,   88,   87,   87,   86,
- /*   100 */    86,   86,   85,  309,   91,   92,  287,   82,  775,  775,
- /*   110 */   787,  790,  779,  779,   89,   89,   90,   90,   90,   90,
- /*   120 */   724,   88,   88,   88,   88,   87,   87,   86,   86,   86,
- /*   130 */    85,  309,  636,   91,   92,  287,   82,  775,  775,  787,
- /*   140 */   790,  779,  779,   89,   89,   90,   90,   90,   90,   67,
- /*   150 */    88,   88,   88,   88,   87,   87,   86,   86,   86,   85,
- /*   160 */   309,  776,  776,  788,  791,  320,   93,   84,   81,  176,
- /*   170 */   307,  306, 1209,  411,    3,  723,  245,  609,  312,  725,
- /*   180 */   726,  376,   91,   92,  287,   82,  775,  775,  787,  790,
- /*   190 */   779,  779,   89,   89,   90,   90,   90,   90,  884,   88,
- /*   200 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  309,
- /*   210 */    88,   88,   88,   88,   87,   87,   86,   86,   86,   85,
- /*   220 */   309,  122,   84,   81,  176,  642,  377, 1160, 1160,  828,
- /*   230 */   780,   91,   92,  287,   82,  775,  775,  787,  790,  779,
- /*   240 */   779,   89,   89,   90,   90,   90,   90,  364,   88,   88,
- /*   250 */    88,   88,   87,   87,   86,   86,   86,   85,  309,  903,
- /*   260 */   747,  903,  122,  410,  410,  172,  653,  710,  765,  220,
- /*   270 */   758,  119,  877,  753,  635,  683,  238,  333,  237,  652,
- /*   280 */    91,   92,  287,   82,  775,  775,  787,  790,  779,  779,
- /*   290 */    89,   89,   90,   90,   90,   90,  877,   88,   88,   88,
- /*   300 */    88,   87,   87,   86,   86,   86,   85,  309,   22,  747,
- /*   310 */   757,  757,  759,  201,  693,  651,  359,  356,  355,  692,
- /*   320 */   165,  710,  703,  766,  122,  238,  333,  237,  354,   91,
- /*   330 */    92,  287,   82,  775,  775,  787,  790,  779,  779,   89,
- /*   340 */    89,   90,   90,   90,   90,  747,   88,   88,   88,   88,
- /*   350 */    87,   87,   86,   86,   86,   85,  309,  696,   84,   81,
- /*   360 */   176,  238,  323,  226,  405,  405,  405,  670,  649,   84,
- /*   370 */    81,  176,  752,  122,  218,  369,  670,  340,   91,   92,
- /*   380 */   287,   82,  775,  775,  787,  790,  779,  779,   89,   89,
- /*   390 */    90,   90,   90,   90,  209,   88,   88,   88,   88,   87,
- /*   400 */    87,   86,   86,   86,   85,  309,   91,   92,  287,   82,
- /*   410 */   775,  775,  787,  790,  779,  779,   89,   89,   90,   90,
- /*   420 */    90,   90,  341,   88,   88,   88,   88,   87,   87,   86,
- /*   430 */    86,   86,   85,  309,   91,   92,  287,   82,  775,  775,
- /*   440 */   787,  790,  779,  779,   89,   89,   90,   90,   90,   90,
- /*   450 */   379,   88,   88,   88,   88,   87,   87,   86,   86,   86,
- /*   460 */    85,  309,   91,   92,  287,   82,  775,  775,  787,  790,
- /*   470 */   779,  779,   89,   89,   90,   90,   90,   90,  145,   88,
- /*   480 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  309,
- /*   490 */   308,  308,  308,   85,  309,   70,   92,  287,   82,  775,
- /*   500 */   775,  787,  790,  779,  779,   89,   89,   90,   90,   90,
- /*   510 */    90,  164,   88,   88,   88,   88,   87,   87,   86,   86,
- /*   520 */    86,   85,  309,   73,  628,  628,  834,  834,  328,   91,
- /*   530 */    80,  287,   82,  775,  775,  787,  790,  779,  779,   89,
- /*   540 */    89,   90,   90,   90,   90,  390,   88,   88,   88,   88,
- /*   550 */    87,   87,   86,   86,   86,   85,  309,  287,   82,  775,
- /*   560 */   775,  787,  790,  779,  779,   89,   89,   90,   90,   90,
- /*   570 */    90,   78,   88,   88,   88,   88,   87,   87,   86,   86,
- /*   580 */    86,   85,  309,  218,  369,  698,  141,  374,  301,  141,
- /*   590 */    75,   76,  275,  628,  628,  283,  282,   77,  286,  280,
- /*   600 */   279,  278,  222,  276,  850,   78,  622,  143,  628,  628,
- /*   610 */   403,    2, 1104,  298,  318,  310,  310,  202,  851,  202,
- /*   620 */   109,  342,  880,  407,   75,   76,  852,  676,  318,  317,
- /*   630 */   644,   77,  392,  182,  677,  162,  174,  765,  336,  758,
- /*   640 */    48,   48,  753,  347,  403,    2,  344,  407,  137,  310,
- /*   650 */   310,  407,  628,  628,  288,  386,  266,  219,  155,  255,
- /*   660 */   362,  250,  361,  205,   48,   48,  392,  755,   48,   48,
- /*   670 */   248,  765,  709,  758,  407,  302,  753,  675,  675,  757,
- /*   680 */   757,  759,  760,  406,   18,  673,  673,  184,  109,  847,
- /*   690 */   318,   48,   48,  180,  315,  122,  336,  122,  751,  385,
- /*   700 */   387,  755,  185,  385,  370,  190,  373,  307,  306,   78,
- /*   710 */   314,  628,  628,  757,  757,  759,  760,  406,   18,  210,
- /*   720 */   407,  892,  109,    9,    9,  331,  385,  375,   75,   76,
- /*   730 */   697,  122,  628,  628,  167,   77,  201,   48,   48,  359,
- /*   740 */   356,  355,  401,   78,  685,  892,  334,  267,  403,    2,
- /*   750 */    20,  354,  266,  310,  310,  372,  898,  744,  902,   23,
- /*   760 */   191,  327,   75,   76,  332,  900,  342,  901,  407,   77,
- /*   770 */   392,  267,  385,  384,  217,  765,  407,  758,  850,  296,
- /*   780 */   753,   19,  403,    2,   54,   10,   10,  310,  310,  407,
- /*   790 */   109,  338,  851,   48,   48,  407,  903,  366,  903,  295,
- /*   800 */   852,  391,  709,  305,  392,  755,   30,   30,  831,  765,
- /*   810 */   830,  758,   10,   10,  753,  407,  326,  757,  757,  759,
- /*   820 */   760,  406,   18,  177,  177,  407,  297,  407,  385,  365,
- /*   830 */   109,  407,   10,   10,  709,  372,  157,  156,  397,  755,
- /*   840 */   225,  367,   48,   48,   10,   10,  200,   68,   47,   47,
- /*   850 */   236,  757,  757,  759,  760,  406,   18,   95,  382,  231,
- /*   860 */   319,  638,  638,  847,  243,  656,   75,   76,  351,  756,
- /*   870 */   203,  360,  186,   77,  820,  822,  657,  380,  177,  177,
- /*   880 */   893,  893,  146,  765,  709,  758,  403,    2,  753,  203,
- /*   890 */   372,  310,  310,    5,  299,  210,  109,  892,  257,  893,
- /*   900 */   893,  810,  265,  709,  321,   74,  407,   72,  392,  230,
- /*   910 */   827,  407,  827,  765,  242,  758,  709,  407,  753,  254,
- /*   920 */   334,  892,  187,   34,   34,  757,  757,  759,   35,   35,
- /*   930 */   253,  407,  894,  712,   36,   36,  820,  110,  343,  149,
- /*   940 */   229,  853,  228,  755,  407,  289,  709,  234,   37,   37,
- /*   950 */   248,  894,  711,  259,  324,  757,  757,  759,  760,  406,
- /*   960 */    18,   38,   38,  407,  289,  407,  161,  160,  159,  407,
- /*   970 */   709,  407,    7,  407,  138,  407,  261,  407,  628,  628,
- /*   980 */    26,   26,   27,   27,  682,  407,   29,   29,   39,   39,
- /*   990 */    40,   40,   41,   41,   11,   11,  407,  709,  407,  693,
- /*  1000 */   407,  163,   42,   42,  692,  407,  342,  407,  678,  407,
- /*  1010 */   264,  407,  710,   97,   97,   43,   43,   44,   44,  407,
- /*  1020 */   751,  407,   31,   31,   45,   45,   46,   46,   32,   32,
- /*  1030 */   407, 1183,  407,  665,  407,  233,  112,  112,  113,  113,
- /*  1040 */   407,  751,  859,  407,  751,  407,  845,  114,  114,   52,
- /*  1050 */    52,   33,   33,  407,  858,  407,  681,   98,   98,  407,
- /*  1060 */    49,   49,   99,   99,  407,  165,  710,  407,  751,  407,
- /*  1070 */   100,  100,   96,   96,  169,  407,  111,  111,  407,  109,
- /*  1080 */   407,  108,  108,  292,  104,  104,  103,  103,  407,  109,
- /*  1090 */   193,  407,  101,  101,  407,  102,  102,   51,   51,  407,
- /*  1100 */   368,  626,  688,  688,  293,   53,   53,  294,   50,   50,
- /*  1110 */    24,   25,   25,  662,  628,  628,   28,   28,    1,  394,
- /*  1120 */   107,  398,  628,  628,  632,  627,  290,  402,  404,  290,
- /*  1130 */    66,  303,  175,  174,  109,  725,  726,   64,  891,  749,
- /*  1140 */   335,  208,  208,  337,  239,  208,   66,  352,  632,  214,
- /*  1150 */   856,  246,  109,   66,  109,  645,  645,  178,  655,  654,
- /*  1160 */   109,  316,  690,  647,   69,  824,  719,  663,  208,  291,
- /*  1170 */   817,  817,  813,  826,  214,  826,  630,  739,  106,  322,
- /*  1180 */   761,  761,  227,  818,  168,  235,  844,  842,  339,  841,
- /*  1190 */   153,  345,  346,  241,  621,  244,  357,  666,  650,  649,
- /*  1200 */   158,  252,  249,  717,  750,  263,  393,  699,  815,  268,
- /*  1210 */   814,  928,  269,  274,  873,  154,  135,  633,  619,  618,
- /*  1220 */   124,  620,  870,  117,   64,  736,  325,   55,  330,  829,
- /*  1230 */   126,  350,  232,  189,  196,  144,  128,  129,  197,  147,
- /*  1240 */   363,  198,  130,  300,  647,  131,  669,  139,  348,  746,
- /*  1250 */   378,  668,  284,    6,   63,  795,  846,   71,  211,  667,
- /*  1260 */   304,   94,  383,  285,  660,  640,   21,  641,   65,  251,
- /*  1270 */   639,  809,  659,  381,  882,  871,  224,  611,  614,  221,
- /*  1280 */   311,  396,  223,  408,  409,  616,  179,  615,  612,  281,
- /*  1290 */   115,  313,  400,  123,  181,  823,  821,  183,  745,  125,
- /*  1300 */   116,  120,  127,  679,  188,  832,  105,  204,  208,  132,
- /*  1310 */   133,  840,  329,  707,  905,  136,  256,  134,   56,  708,
- /*  1320 */   258,  273,  271,  689,  706,  260,  270,  705,  262,  272,
- /*  1330 */    57,   58,   59,  121,  843,  192,  839,  194,    8,  212,
- /*  1340 */    12,  240,  253,  195,  213,  148,  624,  349,  199,  353,
- /*  1350 */   140,  358,   60,   13,  206,  247,   14,  118,   61,  687,
- /*  1360 */   764,  763,  658,  170,  713,  793,   15,    4,   62,  691,
- /*  1370 */   207,  171,  371,  173,  142,   16,  718,   17,   69,   66,
- /*  1380 */   808,  794,  792,  797,  849,  216,  848,  389,  166,  215,
- /*  1390 */   863,  150,  395,  608,  864,  151,  399,  796,  152, 1165,
- /*  1400 */   762,  388,  631,   79,  277,  625,
+ /*    40 */    86,   86,   85,  307,  208,  870,  885,   90,   90,   90,
+ /*    50 */    90,  122,   88,   88,   88,   88,   87,   87,   86,   86,
+ /*    60 */    86,   85,  307,   86,   86,   86,   85,  307,  870,  885,
+ /*    70 */  1199,  408,    3,  605,  310,   91,   92,  285,   82,  771,
+ /*    80 */   771,  783,  786,  775,  775,   89,   89,   90,   90,   90,
+ /*    90 */    90,  630,   88,   88,   88,   88,   87,   87,   86,   86,
+ /*   100 */    86,   85,  307,   91,   92,  285,   82,  771,  771,  783,
+ /*   110 */   786,  775,  775,   89,   89,   90,   90,   90,   90,  633,
+ /*   120 */    88,   88,   88,   88,   87,   87,   86,   86,   86,   85,
+ /*   130 */   307,  371,   91,   92,  285,   82,  771,  771,  783,  786,
+ /*   140 */   775,  775,   89,   89,   90,   90,   90,   90,   67,   88,
+ /*   150 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  307,
+ /*   160 */   772,  772,  784,  787,  109,   93,   87,   87,   86,   86,
+ /*   170 */    86,   85,  307,  305,  304,  243,  264,  721,  722,  162,
+ /*   180 */   174,   91,   92,  285,   82,  771,  771,  783,  786,  775,
+ /*   190 */   775,   89,   89,   90,   90,   90,   90,  299,   88,   88,
+ /*   200 */    88,   88,   87,   87,   86,   86,   86,   85,  307,   88,
+ /*   210 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  307,
+ /*   220 */   666,  645,  296,  365,  638,  684,  684,  229,  776,  666,
+ /*   230 */    91,   92,  285,   82,  771,  771,  783,  786,  775,  775,
+ /*   240 */    89,   89,   90,   90,   90,   90,  692,   88,   88,   88,
+ /*   250 */    88,   87,   87,   86,   86,   86,   85,  307,   84,   81,
+ /*   260 */   176,  896,  398,  896,  317,  217,  155,  253,  359,  248,
+ /*   270 */   358,  203,  761,  631,  754,  339,  228,  749,  246,   91,
+ /*   280 */    92,  285,   82,  771,  771,  783,  786,  775,  775,   89,
+ /*   290 */    89,   90,   90,   90,   90,  632,   88,   88,   88,   88,
+ /*   300 */    87,   87,   86,   86,   86,   85,  307,  227,  404,  226,
+ /*   310 */   344,  407,  407,  341,  753,  753,  755,  218,  720,  119,
+ /*   320 */   122,  719,  762,  679,  740,   48,   48,  824,   91,   92,
+ /*   330 */   285,   82,  771,  771,  783,  786,  775,  775,   89,   89,
+ /*   340 */    90,   90,   90,   90,  265,   88,   88,   88,   88,   87,
+ /*   350 */    87,   86,   86,   86,   85,  307,   22,  109,  743,  188,
+ /*   360 */   382,  367,   84,   81,  176,   84,   81,  176,   84,   81,
+ /*   370 */   176,  748,  649,  236,  330,  235,  294,   91,   92,  285,
+ /*   380 */    82,  771,  771,  783,  786,  775,  775,   89,   89,   90,
+ /*   390 */    90,   90,   90,  877,   88,   88,   88,   88,   87,   87,
+ /*   400 */    86,   86,   86,   85,  307,   91,   92,  285,   82,  771,
+ /*   410 */   771,  783,  786,  775,  775,   89,   89,   90,   90,   90,
+ /*   420 */    90,  122,   88,   88,   88,   88,   87,   87,   86,   86,
+ /*   430 */    86,   85,  307,   91,   92,  285,   82,  771,  771,  783,
+ /*   440 */   786,  775,  775,   89,   89,   90,   90,   90,   90,  648,
+ /*   450 */    88,   88,   88,   88,   87,   87,   86,   86,   86,   85,
+ /*   460 */   307,   91,   92,  285,   82,  771,  771,  783,  786,  775,
+ /*   470 */   775,   89,   89,   90,   90,   90,   90,  145,   88,   88,
+ /*   480 */    88,   88,   87,   87,   86,   86,   86,   85,  307, 1150,
+ /*   490 */  1150,   85,  307,   70,   92,  285,   82,  771,  771,  783,
+ /*   500 */   786,  775,  775,   89,   89,   90,   90,   90,   90,  647,
+ /*   510 */    88,   88,   88,   88,   87,   87,   86,   86,   86,   85,
+ /*   520 */   307,   73,  216,  366,  122,  624,  624,   91,   80,  285,
+ /*   530 */    82,  771,  771,  783,  786,  775,  775,   89,   89,   90,
+ /*   540 */    90,   90,   90,  747,   88,   88,   88,   88,   87,   87,
+ /*   550 */    86,   86,   86,   85,  307,  285,   82,  771,  771,  783,
+ /*   560 */   786,  775,  775,   89,   89,   90,   90,   90,   90,   78,
+ /*   570 */    88,   88,   88,   88,   87,   87,   86,   86,   86,   85,
+ /*   580 */   307,  886,  886,  743, 1173,  404,  661,  404,   75,   76,
+ /*   590 */   402,  402,  402,  383,  747,   77,  624,  624,  236,  330,
+ /*   600 */   235,  339,   48,   48,   47,   47,  324,  143,  400,    2,
+ /*   610 */  1097,  404,  280,  308,  308,  278,  277,  276,  220,  274,
+ /*   620 */   199,   78,  618,  356,  353,  352,  109,  743,   48,   48,
+ /*   630 */   389,  404,  887,  708,  761,  351,  754,  382,  384,  749,
+ /*   640 */    75,   76,  236,  320,  224,  873,  122,   77,   48,   48,
+ /*   650 */   306,  306,  306,  640,  404,  216,  366,  290,  263,  315,
+ /*   660 */   400,    2,  363,  300,  751,  308,  308,  305,  304,  286,
+ /*   670 */   843,   30,   30,  315,  314,  846,  753,  753,  755,  756,
+ /*   680 */   403,   18,  389,  382,  372,  234,  761,  376,  754,  847,
+ /*   690 */   699,  749,  624,  624,  122,  109,  404,  848,  672,   78,
+ /*   700 */   177,  177,  182,  109,  207,  673,  364,  107,  180,  313,
+ /*   710 */   122,  628,  369,   48,   48,  891,  751,  895,   75,   76,
+ /*   720 */   693,  624,  624,  404,  893,   77,  894,  331,  753,  753,
+ /*   730 */   755,  756,  403,   18,  628,  315,  404,  747,  400,    2,
+ /*   740 */    48,   48,  164,  308,  308,  340,  122,  264,  382,  381,
+ /*   750 */   747,   78,  265,   10,   10,  896,  328,  896,  199,   68,
+ /*   760 */   389,  356,  353,  352,  761,  404,  754,  293,  843,  749,
+ /*   770 */    75,   76,  316,  351,  747,  382,  362,   77,   75,   76,
+ /*   780 */   671,  671,   48,   48,  303,   77,  816,  818,  886,  886,
+ /*   790 */   400,    2,  669,  669,  751,  308,  308,  404,  400,    2,
+ /*   800 */   291,  109,  387,  308,  308,  404,  753,  753,  755,  756,
+ /*   810 */   403,   18,  389,  292,   10,   10,  761,  377,  754,  373,
+ /*   820 */   389,  749,   10,   10,  761,  331,  754,  705,  295,  749,
+ /*   830 */   157,  156,  348,  394,  201,  370,  198,  301,   23,  887,
+ /*   840 */   707,  241,   74,  329,   72,  172,  751,  706,  816,  623,
+ /*   850 */   288,   95,    9,    9,  751,  634,  634,  404,  753,  753,
+ /*   860 */   755,  756,  403,   18,  374,  312,  753,  753,  755,  756,
+ /*   870 */   403,   18,  333,  141,   10,   10,  761,  806,  754,  177,
+ /*   880 */   177,  749,  284,  652,  830,  830,  325,  141,  379,  357,
+ /*   890 */   240,  369,  333,  273,  653,  167,  281,  404,  361,  165,
+ /*   900 */   706,  200,    5,  200,  208,  318,  885,  335,  287,  404,
+ /*   910 */   846,  297,  705,  246,   34,   34,  401,  288,  753,  753,
+ /*   920 */   755,  404,  752,  232,  847,  404,   35,   35,  404,  885,
+ /*   930 */   404,  255,  848,  388,  404,  705,  183,  404,   36,   36,
+ /*   940 */   706,  404,   37,   37,  404,   38,   38,   26,   26,  404,
+ /*   950 */   223,   27,   27,  404,   29,   29,  189,  404,   39,   39,
+ /*   960 */   404,   40,   40,  404,  689,  404,   41,   41,  404,  688,
+ /*   970 */    11,   11,  404,  184,   42,   42,  681,   97,   97,  404,
+ /*   980 */    43,   43,   44,   44,  404,   31,   31,  369,  404,   45,
+ /*   990 */    45,  404,  165,  706,  404,  163,   46,   46,  404,  262,
+ /*  1000 */   404,   32,   32,  404,  146,  112,  112,   20,  113,  113,
+ /*  1010 */   404,  114,  114,  841,  404,   52,   52,   33,   33,  404,
+ /*  1020 */    98,   98,  404,  339,  404,  137,  404,   49,   49,  624,
+ /*  1030 */   624,   99,   99,  404,  175,  174,  100,  100,   19,   96,
+ /*  1040 */    96,  111,  111,  108,  108,  404,  109,  404,  169,  404,
+ /*  1050 */   104,  104,  404,  201,  404,  745,  404,  206,  404,  721,
+ /*  1060 */   722,  404,  103,  103,  101,  101,  102,  102,  694,   51,
+ /*  1070 */    51,   53,   53,   50,   50,   25,   25,  705,   28,   28,
+ /*  1080 */   138,  827,  705,  826,  624,  624,  208,  705,  885,  323,
+ /*  1090 */    24,  624,  624,    1,  624,  624,  705,  624,  624,  161,
+ /*  1100 */   160,  159,  705,  705,  215,  677,  622,  191,  337,  391,
+ /*  1110 */    64,  885,  395,  399,   54,  185,   66,  884,  689,  110,
+ /*  1120 */   849,  149,  332,  688,  206,  321,  334,  287,  206,  237,
+ /*  1130 */   349,   66,  212,  244,  678,   66,  651,  650,  109,  109,
+ /*  1140 */   674,  231,  109,  641,  641,  109,  109,  658,  643,  823,
+ /*  1150 */   252,  823,  686,  338,   69,  715,  822,  206,  822,  813,
+ /*  1160 */   813,  251,  809,  626,  212,  106,  178,  257,  153,  757,
+ /*  1170 */   757,  259,    7,  852,  851,  233,  820,  735,  289,  354,
+ /*  1180 */   319,  225,  840,  814,  336,  158,  645,  168,  250,  838,
+ /*  1190 */   837,  342,  343,  239,  617,  242,  662,  646,  247,  713,
+ /*  1200 */   659,  746,  261,  695,  272,  390,  266,  267,  154,  135,
+ /*  1210 */   629,  124,  615,  614,  866,  117,  732,  616,  863,  921,
+ /*  1220 */   811,   64,  322,   55,  810,  327,  825,  230,  347,  147,
+ /*  1230 */   360,  187,  144,  298,  643,  375,   63,  194,    6,  126,
+ /*  1240 */   195,  196,  703,  209,  302,   71,   94,  210,  380,   65,
+ /*  1250 */   791,   21,  378,  864,  222,  345,  128,  610,  129,  130,
+ /*  1260 */   282,  665,  131,  139,  742,  636,  664,  663,  656,  607,
+ /*  1270 */   309,  637,  179,  311,  842,  406,  283,  805,  249,  123,
+ /*  1280 */   279,  635,  655,  875,  219,  405,  612,  221,  819,  611,
+ /*  1290 */   608,  393,  817,  397,  181,  741,  120,  254,  115,  125,
+ /*  1300 */   704,  127,  675,  186,  828,  206,  116,  132,  898,  133,
+ /*  1310 */   326,  836,  134,   56,   57,  105,  202,  136,  256,   58,
+ /*  1320 */    59,  271,  269,  685,  702,  258,  270,  701,  260,  268,
+ /*  1330 */   121,  839,  190,  192,  835,    8,   12,  193,  238,  148,
+ /*  1340 */   620,  346,  197,  140,  350,  211,  251,   60,  355,   13,
+ /*  1350 */   204,  118,  170,  245,   14,   61,  683,  760,  604,  759,
+ /*  1360 */   654,  789,   62,   15,  368,  687,    4,  714,  171,  173,
+ /*  1370 */   205,  142,  709,   69,   16,   66,   17,  804,  790,  788,
+ /*  1380 */   845,  793, 1155,  214,  844,  386,  166,  392,  856,  150,
+ /*  1390 */   903,  213,  385,  857,  151,  396,  792,  152,  275,  758,
+ /*  1400 */   627,   79,  903,  621,
 };
 static const YYCODETYPE yy_lookahead[] = {
  /*     0 */     5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
  /*    10 */    15,   16,   17,   18,   19,   20,   32,   22,   23,   24,
  /*    20 */    25,   26,   27,   28,   29,   30,   31,   32,   17,   18,
  /*    30 */    19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
- /*    40 */    29,   30,   31,   32,   49,  133,   51,   17,   18,   19,
- /*    50 */    20,  160,   22,   23,   24,   25,   26,   27,   28,   29,
- /*    60 */    30,   31,   32,   26,   27,   28,   29,   30,   31,   32,
- /*    70 */    75,   28,   29,   30,   31,   32,    5,    6,    7,    8,
- /*    80 */     9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
- /*    90 */    19,   20,  160,   22,   23,   24,   25,   26,   27,   28,
- /*   100 */    29,   30,   31,   32,    5,    6,    7,    8,    9,   10,
- /*   110 */    11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
- /*   120 */   163,   22,   23,   24,   25,   26,   27,   28,   29,   30,
- /*   130 */    31,   32,  160,    5,    6,    7,    8,    9,   10,   11,
- /*   140 */    12,   13,   14,   15,   16,   17,   18,   19,   20,   50,
- /*   150 */    22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
- /*   160 */    32,    9,   10,   11,   12,   77,   67,  210,  211,  212,
- /*   170 */    26,   27,  136,  137,  138,  163,   48,    1,    2,  108,
- /*   180 */   109,    7,    5,    6,    7,    8,    9,   10,   11,   12,
- /*   190 */    13,   14,   15,   16,   17,   18,   19,   20,  173,   22,
- /*   200 */    23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
- /*   210 */    22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
- /*   220 */    32,  133,  210,  211,  212,   48,   52,   98,   99,   38,
- /*   230 */    78,    5,    6,    7,    8,    9,   10,   11,   12,   13,
- /*   240 */    14,   15,   16,   17,   18,   19,   20,   28,   22,   23,
- /*   250 */    24,   25,   26,   27,   28,   29,   30,   31,   32,  115,
- /*   260 */    69,  117,  133,  139,  140,   48,  169,   50,   73,  145,
- /*   270 */    75,  147,   51,   78,   48,  151,   85,   86,   87,  169,
- /*   280 */     5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
- /*   290 */    15,   16,   17,   18,   19,   20,   75,   22,   23,   24,
- /*   300 */    25,   26,   27,   28,   29,   30,   31,   32,  184,   69,
- /*   310 */   115,  116,  117,   76,   95,  169,   79,   80,   81,  100,
- /*   320 */   103,  104,  201,   48,  133,   85,   86,   87,   91,    5,
- /*   330 */     6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
- /*   340 */    16,   17,   18,   19,   20,   69,   22,   23,   24,   25,
- /*   350 */    26,   27,   28,   29,   30,   31,   32,  198,  210,  211,
- /*   360 */   212,   85,   86,   87,  156,  157,  158,  167,  168,  210,
- /*   370 */   211,  212,   48,  133,   98,   99,  176,    7,    5,    6,
- /*   380 */     7,    8,    9,   10,   11,   12,   13,   14,   15,   16,
- /*   390 */    17,   18,   19,   20,  198,   22,   23,   24,   25,   26,
- /*   400 */    27,   28,   29,   30,   31,   32,    5,    6,    7,    8,
- /*   410 */     9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
- /*   420 */    19,   20,   52,   22,   23,   24,   25,   26,   27,   28,
- /*   430 */    29,   30,   31,   32,    5,    6,    7,    8,    9,   10,
- /*   440 */    11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
- /*   450 */   205,   22,   23,   24,   25,   26,   27,   28,   29,   30,
- /*   460 */    31,   32,    5,    6,    7,    8,    9,   10,   11,   12,
- /*   470 */    13,   14,   15,   16,   17,   18,   19,   20,   49,   22,
- /*   480 */    23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
- /*   490 */   156,  157,  158,   31,   32,  122,    6,    7,    8,    9,
- /*   500 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
- /*   510 */    20,  205,   22,   23,   24,   25,   26,   27,   28,   29,
- /*   520 */    30,   31,   32,  122,   51,   52,   85,   86,   87,    5,
- /*   530 */     6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
- /*   540 */    16,   17,   18,   19,   20,  179,   22,   23,   24,   25,
- /*   550 */    26,   27,   28,   29,   30,   31,   32,    7,    8,    9,
- /*   560 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
- /*   570 */    20,    7,   22,   23,   24,   25,   26,   27,   28,   29,
- /*   580 */    30,   31,   32,   98,   99,   28,  143,  151,    7,  143,
- /*   590 */    26,   27,  149,   51,   52,  152,   34,   33,  152,   37,
- /*   600 */    38,   39,   40,   41,   39,    7,   44,  134,   51,   52,
- /*   610 */    46,   47,   48,   32,  143,   51,   52,  171,   53,  173,
- /*   620 */   184,  143,  159,  143,   26,   27,   61,   62,  157,  158,
- /*   630 */   167,   33,   68,   71,   69,  199,  200,   73,  143,   75,
- /*   640 */   160,  161,   78,  217,   46,   47,  220,  143,   47,   51,
- /*   650 */    52,  143,   51,   52,   92,  151,  143,   76,   77,   78,
- /*   660 */    79,   80,   81,   82,  160,  161,   68,  103,  160,  161,
- /*   670 */    89,   73,  143,   75,  143,  195,   78,  178,  179,  115,
- /*   680 */   116,  117,  118,  119,  120,  178,  179,  125,  184,  151,
- /*   690 */   219,  160,  161,  131,  132,  133,  143,  133,  143,  195,
- /*   700 */   196,  103,  207,  195,  196,  227,  143,   26,   27,    7,
- /*   710 */   181,   51,   52,  115,  116,  117,  118,  119,  120,   49,
- /*   720 */   143,   51,  184,  160,  161,  223,  195,  196,   26,   27,
- /*   730 */    28,  133,   51,   52,  222,   33,   76,  160,  161,   79,
- /*   740 */    80,   81,  229,    7,  183,   75,  208,  143,   46,   47,
- /*   750 */    16,   91,  143,   51,   52,  194,   75,  151,   77,  221,
- /*   760 */   207,  206,   26,   27,  226,   84,  143,   86,  143,   33,
- /*   770 */    68,  143,  195,  196,  187,   73,  143,   75,   39,  175,
- /*   780 */    78,   47,   46,   47,  197,  160,  161,   51,   52,  143,
- /*   790 */   184,  143,   53,  160,  161,  143,  115,  151,  117,  174,
- /*   800 */    61,   62,  143,  175,   68,  103,  160,  161,   56,   73,
- /*   810 */    58,   75,  160,  161,   78,  143,   64,  115,  116,  117,
- /*   820 */   118,  119,  120,  182,  183,  143,  174,  143,  195,  196,
- /*   830 */   184,  143,  160,  161,  143,  194,   26,   27,  229,  103,
- /*   840 */   181,  195,  160,  161,  160,  161,  174,    7,  160,  161,
- /*   850 */   227,  115,  116,  117,  118,  119,  120,   47,  174,   43,
- /*   860 */   143,   51,   52,  151,   43,   59,   26,   27,    7,  143,
- /*   870 */     9,   65,  181,   33,  157,  158,   70,  195,  182,  183,
- /*   880 */    51,   52,  185,   73,  143,   75,   46,   47,   78,    9,
- /*   890 */   194,   51,   52,   47,   88,   49,  184,   51,  198,   51,
- /*   900 */    52,   80,  214,  143,  208,  121,  143,  123,   68,   93,
- /*   910 */   115,  143,  117,   73,   93,   75,  143,  143,   78,   78,
- /*   920 */   208,   75,  181,  160,  161,  115,  116,  117,  160,  161,
- /*   930 */    89,  143,  103,  104,  160,  161,  219,   47,  226,   49,
- /*   940 */   124,  181,  126,  103,  143,   84,  143,  126,  160,  161,
- /*   950 */    89,  103,  104,  198,  181,  115,  116,  117,  118,  119,
- /*   960 */   120,  160,  161,  143,   84,  143,   85,   86,   87,  143,
- /*   970 */   143,  143,  186,  143,   47,  143,  198,  143,   51,   52,
- /*   980 */   160,  161,  160,  161,  181,  143,  160,  161,  160,  161,
- /*   990 */   160,  161,  160,  161,  160,  161,  143,  143,  143,   95,
- /*  1000 */   143,  143,  160,  161,  100,  143,  143,  143,  181,  143,
- /*  1010 */   143,  143,   50,  160,  161,  160,  161,  160,  161,  143,
- /*  1020 */   143,  143,  160,  161,  160,  161,  160,  161,  160,  161,
- /*  1030 */   143,   48,  143,   50,  143,  181,  160,  161,  160,  161,
- /*  1040 */   143,  143,  143,  143,  143,  143,  151,  160,  161,  160,
- /*  1050 */   161,  160,  161,  143,  143,  143,  151,  160,  161,  143,
- /*  1060 */   160,  161,  160,  161,  143,  103,  104,  143,  143,  143,
- /*  1070 */   160,  161,  160,  161,   50,  143,  160,  161,  143,  184,
- /*  1080 */   143,  160,  161,  206,  160,  161,  160,  161,  143,  184,
- /*  1090 */   227,  143,  160,  161,  143,  160,  161,  160,  161,  143,
- /*  1100 */    94,  151,   96,   97,  206,  160,  161,  206,  160,  161,
- /*  1110 */    47,  160,  161,   36,   51,   52,  160,  161,   47,  151,
- /*  1120 */    47,  151,   51,   52,   51,  154,  155,  151,  154,  155,
- /*  1130 */    50,  206,  199,  200,  184,  108,  109,  113,   50,   48,
- /*  1140 */    48,   50,   50,   48,   48,   50,   50,   48,   75,   50,
- /*  1150 */   143,   48,  184,   50,  184,   51,   52,   47,   77,   78,
- /*  1160 */   184,  143,   48,   83,   50,  143,   48,   90,   50,  143,
- /*  1170 */    51,   52,   48,  115,   50,  117,   48,  189,   50,  202,
- /*  1180 */    51,   52,  202,  143,  143,  228,  189,  143,  228,  143,
- /*  1190 */   102,  143,  143,  143,  143,  143,  164,  143,  143,  168,
- /*  1200 */   172,  163,  143,  143,  143,  202,  216,  143,  163,  143,
- /*  1210 */   163,  101,  143,  188,  146,  186,   47,  143,  143,  143,
- /*  1220 */   209,  143,  143,    5,  113,  189,   45,  121,  128,  225,
- /*  1230 */   177,   45,  224,  148,  148,   47,  180,  180,  148,  209,
- /*  1240 */    84,  148,  180,   63,   83,  180,  162,  177,  165,  177,
- /*  1250 */   106,  162,  165,   47,   84,  213,  189,  121,  215,  162,
- /*  1260 */    32,  112,  107,  165,  170,  164,   50,  162,  111,  162,
- /*  1270 */   162,  189,  170,  110,  162,   40,   35,    4,   36,  144,
- /*  1280 */     3,  165,  144,  150,  142,  142,   42,  142,  142,  141,
- /*  1290 */   153,   72,  165,   43,   84,   48,   48,  101,   99,  114,
- /*  1300 */   153,   88,  102,   46,   84,  127,  166,  166,   50,  127,
- /*  1310 */    84,    1,  129,  204,  130,  114,  203,  102,   16,  204,
- /*  1320 */   203,  189,  191,  193,  204,  203,  192,  204,  203,  190,
- /*  1330 */    16,   16,   16,   88,   52,  105,    1,  101,   34,  218,
- /*  1340 */    47,  124,   89,   84,  218,   49,   46,    7,   82,   66,
- /*  1350 */    47,   66,   47,   47,   66,   48,   47,   60,   47,   95,
- /*  1360 */    48,   48,   54,  101,  104,   48,   47,   47,   50,   48,
- /*  1370 */   105,   48,   50,   48,   47,  105,   52,  105,   50,   50,
- /*  1380 */    48,   48,   48,   38,   48,  101,   48,   50,   47,   50,
- /*  1390 */    48,   47,   49,    1,   48,   47,   49,   48,   47,    0,
- /*  1400 */    48,   75,   48,   47,   42,   48,
+ /*    40 */    29,   30,   31,   32,   49,   51,   51,   17,   18,   19,
+ /*    50 */    20,  132,   22,   23,   24,   25,   26,   27,   28,   29,
+ /*    60 */    30,   31,   32,   28,   29,   30,   31,   32,   74,   74,
+ /*    70 */   135,  136,  137,    1,    2,    5,    6,    7,    8,    9,
+ /*    80 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
+ /*    90 */    20,  159,   22,   23,   24,   25,   26,   27,   28,   29,
+ /*   100 */    30,   31,   32,    5,    6,    7,    8,    9,   10,   11,
+ /*   110 */    12,   13,   14,   15,   16,   17,   18,   19,   20,  159,
+ /*   120 */    22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
+ /*   130 */    32,  150,    5,    6,    7,    8,    9,   10,   11,   12,
+ /*   140 */    13,   14,   15,   16,   17,   18,   19,   20,   50,   22,
+ /*   150 */    23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
+ /*   160 */     9,   10,   11,   12,  183,   67,   26,   27,   28,   29,
+ /*   170 */    30,   31,   32,   26,   27,   48,  142,  107,  108,  198,
+ /*   180 */   199,    5,    6,    7,    8,    9,   10,   11,   12,   13,
+ /*   190 */    14,   15,   16,   17,   18,   19,   20,    7,   22,   23,
+ /*   200 */    24,   25,   26,   27,   28,   29,   30,   31,   32,   22,
+ /*   210 */    23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
+ /*   220 */   166,  167,   32,   93,   48,   95,   96,   43,   77,  175,
+ /*   230 */     5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
+ /*   240 */    15,   16,   17,   18,   19,   20,  197,   22,   23,   24,
+ /*   250 */    25,   26,   27,   28,   29,   30,   31,   32,  209,  210,
+ /*   260 */   211,  114,  228,  116,   76,   75,   76,   77,   78,   79,
+ /*   270 */    80,   81,   72,   48,   74,  142,   92,   77,   88,    5,
+ /*   280 */     6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
+ /*   290 */    16,   17,   18,   19,   20,  159,   22,   23,   24,   25,
+ /*   300 */    26,   27,   28,   29,   30,   31,   32,  123,  142,  125,
+ /*   310 */   216,  138,  139,  219,  114,  115,  116,  144,  162,  146,
+ /*   320 */   132,  162,   48,  150,  150,  159,  160,   38,    5,    6,
+ /*   330 */     7,    8,    9,   10,   11,   12,   13,   14,   15,   16,
+ /*   340 */    17,   18,   19,   20,  142,   22,   23,   24,   25,   26,
+ /*   350 */    27,   28,   29,   30,   31,   32,  183,  183,   69,  226,
+ /*   360 */   194,  195,  209,  210,  211,  209,  210,  211,  209,  210,
+ /*   370 */   211,   48,  168,   84,   85,   86,  174,    5,    6,    7,
+ /*   380 */     8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
+ /*   390 */    18,   19,   20,  172,   22,   23,   24,   25,   26,   27,
+ /*   400 */    28,   29,   30,   31,   32,    5,    6,    7,    8,    9,
+ /*   410 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
+ /*   420 */    20,  132,   22,   23,   24,   25,   26,   27,   28,   29,
+ /*   430 */    30,   31,   32,    5,    6,    7,    8,    9,   10,   11,
+ /*   440 */    12,   13,   14,   15,   16,   17,   18,   19,   20,  168,
+ /*   450 */    22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
+ /*   460 */    32,    5,    6,    7,    8,    9,   10,   11,   12,   13,
+ /*   470 */    14,   15,   16,   17,   18,   19,   20,   49,   22,   23,
+ /*   480 */    24,   25,   26,   27,   28,   29,   30,   31,   32,   97,
+ /*   490 */    98,   31,   32,  121,    6,    7,    8,    9,   10,   11,
+ /*   500 */    12,   13,   14,   15,   16,   17,   18,   19,   20,  168,
+ /*   510 */    22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
+ /*   520 */    32,  121,   97,   98,  132,   51,   52,    5,    6,    7,
+ /*   530 */     8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
+ /*   540 */    18,   19,   20,  142,   22,   23,   24,   25,   26,   27,
+ /*   550 */    28,   29,   30,   31,   32,    7,    8,    9,   10,   11,
+ /*   560 */    12,   13,   14,   15,   16,   17,   18,   19,   20,    7,
+ /*   570 */    22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
+ /*   580 */    32,   51,   52,   69,   48,  142,   50,  142,   26,   27,
+ /*   590 */   155,  156,  157,  150,  142,   33,   51,   52,   84,   85,
+ /*   600 */    86,  142,  159,  160,  159,  160,  205,  133,   46,   47,
+ /*   610 */    48,  142,   34,   51,   52,   37,   38,   39,   40,   41,
+ /*   620 */    75,    7,   44,   78,   79,   80,  183,   69,  159,  160,
+ /*   630 */    68,  142,  102,  103,   72,   90,   74,  194,  195,   77,
+ /*   640 */    26,   27,   84,   85,   86,  158,  132,   33,  159,  160,
+ /*   650 */   155,  156,  157,  166,  142,   97,   98,  205,  213,  142,
+ /*   660 */    46,   47,  150,  194,  102,   51,   52,   26,   27,   91,
+ /*   670 */   150,  159,  160,  156,  157,   39,  114,  115,  116,  117,
+ /*   680 */   118,  119,   68,  194,  195,  226,   72,  204,   74,   53,
+ /*   690 */   200,   77,   51,   52,  132,  183,  142,   61,   62,    7,
+ /*   700 */   181,  182,  124,  183,  197,   69,  194,   47,  130,  131,
+ /*   710 */   132,   51,  193,  159,  160,   74,  102,   76,   26,   27,
+ /*   720 */    28,   51,   52,  142,   83,   33,   85,  207,  114,  115,
+ /*   730 */   116,  117,  118,  119,   74,  218,  142,  142,   46,   47,
+ /*   740 */   159,  160,  204,   51,   52,  225,  132,  142,  194,  195,
+ /*   750 */   142,    7,  142,  159,  160,  114,  222,  116,   75,    7,
+ /*   760 */    68,   78,   79,   80,   72,  142,   74,  173,  150,   77,
+ /*   770 */    26,   27,  142,   90,  142,  194,  195,   33,   26,   27,
+ /*   780 */   177,  178,  159,  160,  174,   33,  156,  157,   51,   52,
+ /*   790 */    46,   47,  177,  178,  102,   51,   52,  142,   46,   47,
+ /*   800 */   205,  183,  178,   51,   52,  142,  114,  115,  116,  117,
+ /*   810 */   118,  119,   68,  205,  159,  160,   72,  194,   74,    7,
+ /*   820 */    68,   77,  159,  160,   72,  207,   74,  142,  173,   77,
+ /*   830 */    26,   27,    7,  228,    9,  142,  173,  205,  220,  102,
+ /*   840 */   103,   43,  120,  225,  122,   48,  102,   50,  218,  153,
+ /*   850 */   154,   47,  159,  160,  102,   51,   52,  142,  114,  115,
+ /*   860 */   116,  117,  118,  119,   52,  180,  114,  115,  116,  117,
+ /*   870 */   118,  119,  142,  142,  159,  160,   72,   79,   74,  181,
+ /*   880 */   182,   77,  151,   59,   84,   85,   86,  142,  173,   65,
+ /*   890 */    92,  193,  142,  148,   70,  221,  151,  142,   28,  102,
+ /*   900 */   103,  170,   47,  172,   49,  207,   51,  142,   83,  142,
+ /*   910 */    39,   87,  142,   88,  159,  160,  153,  154,  114,  115,
+ /*   920 */   116,  142,  142,  125,   53,  142,  159,  160,  142,   74,
+ /*   930 */   142,  197,   61,   62,  142,  142,  206,  142,  159,  160,
+ /*   940 */    50,  142,  159,  160,  142,  159,  160,  159,  160,  142,
+ /*   950 */   180,  159,  160,  142,  159,  160,  206,  142,  159,  160,
+ /*   960 */   142,  159,  160,  142,   94,  142,  159,  160,  142,   99,
+ /*   970 */   159,  160,  142,  180,  159,  160,  182,  159,  160,  142,
+ /*   980 */   159,  160,  159,  160,  142,  159,  160,  193,  142,  159,
+ /*   990 */   160,  142,  102,  103,  142,  142,  159,  160,  142,  142,
+ /*  1000 */   142,  159,  160,  142,  184,  159,  160,   16,  159,  160,
+ /*  1010 */   142,  159,  160,  150,  142,  159,  160,  159,  160,  142,
+ /*  1020 */   159,  160,  142,  142,  142,   47,  142,  159,  160,   51,
+ /*  1030 */    52,  159,  160,  142,  198,  199,  159,  160,   47,  159,
+ /*  1040 */   160,  159,  160,  159,  160,  142,  183,  142,   50,  142,
+ /*  1050 */   159,  160,  142,    9,  142,   48,  142,   50,  142,  107,
+ /*  1060 */   108,  142,  159,  160,  159,  160,  159,  160,   28,  159,
+ /*  1070 */   160,  159,  160,  159,  160,  159,  160,  142,  159,  160,
+ /*  1080 */    47,   56,  142,   58,   51,   52,   49,  142,   51,   64,
+ /*  1090 */    47,   51,   52,   47,   51,   52,  142,   51,   52,   84,
+ /*  1100 */    85,   86,  142,  142,  186,  150,  150,  226,    7,  150,
+ /*  1110 */   112,   74,  150,  150,  196,  180,   50,   50,   94,   47,
+ /*  1120 */   180,   49,   48,   99,   50,  180,   48,   83,   50,   48,
+ /*  1130 */    48,   50,   50,   48,  180,   50,   76,   77,  183,  183,
+ /*  1140 */   180,  180,  183,   51,   52,  183,  183,   36,   82,  114,
+ /*  1150 */    77,  116,   48,   52,   50,   48,  114,   50,  116,   51,
+ /*  1160 */    52,   88,   48,   48,   50,   50,   47,  197,  101,   51,
+ /*  1170 */    52,  197,  185,  142,  142,  227,  142,  188,  142,  163,
+ /*  1180 */   201,  201,  188,  142,  227,  171,  167,  142,  162,  142,
+ /*  1190 */   142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
+ /*  1200 */    89,  142,  201,  142,  187,  215,  142,  142,  185,   47,
+ /*  1210 */   142,  208,  142,  142,  145,    5,  188,  142,  142,  100,
+ /*  1220 */   162,  112,   45,  120,  162,  127,  224,  223,   45,  208,
+ /*  1230 */    83,  147,   47,   63,   82,  105,   83,  147,   47,  176,
+ /*  1240 */   147,  147,  203,  214,   32,  120,  111,  217,  106,  110,
+ /*  1250 */   212,   50,  109,   40,   35,  164,  179,   36,  179,  179,
+ /*  1260 */   164,  161,  179,  176,  176,  163,  161,  161,  169,    4,
+ /*  1270 */     3,  161,   42,   71,  188,  141,  164,  188,  161,   43,
+ /*  1280 */   140,  161,  169,  161,  143,  149,  141,  143,   48,  141,
+ /*  1290 */   141,  164,   48,  164,  100,   98,   87,  202,  152,  113,
+ /*  1300 */   203,  101,   46,   83,  126,   50,  152,  126,  129,   83,
+ /*  1310 */   128,    1,  101,   16,   16,  165,  165,  113,  202,   16,
+ /*  1320 */    16,  188,  190,  192,  203,  202,  189,  203,  202,  191,
+ /*  1330 */    87,   52,  104,  100,    1,   34,   47,   83,  123,   49,
+ /*  1340 */    46,    7,   81,   47,   66,  217,   88,   47,   66,   47,
+ /*  1350 */    66,   60,  100,   48,   47,   47,   94,   48,    1,   48,
+ /*  1360 */    54,   48,   50,   47,   50,   48,   47,   52,   48,   48,
+ /*  1370 */   104,   47,  103,   50,  104,   50,  104,   48,   48,   48,
+ /*  1380 */    48,   38,    0,  100,   48,   50,   47,   49,   48,   47,
+ /*  1390 */   229,   50,   74,   48,   47,   49,   48,   47,   42,   48,
+ /*  1400 */    48,   47,  229,   48,
 };
-#define YY_SHIFT_USE_DFLT (1406)
-#define YY_SHIFT_COUNT    (411)
-#define YY_SHIFT_MIN      (-88)
-#define YY_SHIFT_MAX      (1399)
+#define YY_SHIFT_USE_DFLT (1404)
+#define YY_SHIFT_COUNT    (408)
+#define YY_SHIFT_MIN      (-81)
+#define YY_SHIFT_MAX      (1382)
 static const short yy_shift_ofst[] = {
- /*     0 */   176,  564,  598,  562,  736,  736,  736,  736,  240,   -5,
- /*    10 */    71,   71,  736,  736,  736,  736,  736,  736,  736,  681,
- /*    20 */   681,  660,  276,  191,  129,   99,  128,  177,  226,  275,
- /*    30 */   324,  373,  401,  429,  457,  457,  457,  457,  457,  457,
- /*    40 */   457,  457,  457,  457,  457,  457,  457,  457,  457,  524,
- /*    50 */   457,  490,  550,  550,  702,  736,  736,  736,  736,  736,
- /*    60 */   736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
- /*    70 */   736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
- /*    80 */   736,  736,  840,  736,  736,  736,  736,  736,  736,  736,
- /*    90 */   736,  736,  736,  736,  736,  736,   11,   30,   30,   30,
- /*   100 */    30,   30,  188,   37,   43,  861,  144,  144,  462,  485,
- /*   110 */   542,  -16, 1406, 1406, 1406,  581,  581,  565,  565,  821,
- /*   120 */   601,  601,  473,  542,   88,  542,  542,  542,  542,  542,
- /*   130 */   542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
- /*   140 */   542,  221,  542,  542,  542,  221,  485,  -88,  -88,  -88,
- /*   150 */   -88,  -88,  -88, 1406, 1406,  810,  195,  195,  237,  806,
- /*   160 */   806,  806,  217,  846,  829,  848,  739,  441,  752,  927,
- /*   170 */   557,  670,  670,  670, 1063,  962, 1071, 1006,  219,  542,
- /*   180 */   542,  542,  542,  542,  542, 1024,  174,  174,  542,  542,
- /*   190 */   370, 1024,  542,  370,  542,  542,  542,  542,  542,  542,
- /*   200 */  1080,  542,  983,  542,  880,  542, 1027,  542,  542,  174,
- /*   210 */   542,  784, 1027, 1027,  542,  542,  542, 1088,  904,  542,
- /*   220 */   890,  542,  542,  542,  542, 1169, 1218, 1111, 1181, 1181,
- /*   230 */  1181, 1181, 1106, 1100, 1186, 1111, 1169, 1218, 1218, 1111,
- /*   240 */  1186, 1188, 1186, 1186, 1188, 1156, 1156, 1156, 1180, 1188,
- /*   250 */  1156, 1161, 1156, 1180, 1156, 1156, 1144, 1170, 1144, 1170,
- /*   260 */  1144, 1170, 1144, 1170, 1206, 1136, 1188, 1228, 1228, 1188,
- /*   270 */  1149, 1155, 1157, 1163, 1111, 1216, 1235, 1235, 1241, 1241,
- /*   280 */  1241, 1241, 1242, 1406, 1406, 1406, 1406,  152,  816,  881,
- /*   290 */  1073,  734, 1091, 1092, 1095, 1096, 1099, 1103, 1104, 1081,
- /*   300 */  1077,  841, 1114, 1118, 1119, 1124,  795, 1058, 1128, 1129,
- /*   310 */  1110, 1273, 1277, 1244, 1219, 1250, 1210, 1247, 1248, 1196,
- /*   320 */  1199, 1185, 1213, 1200, 1220, 1257, 1178, 1258, 1182, 1184,
- /*   330 */  1183, 1226, 1310, 1215, 1201, 1302, 1314, 1315, 1316, 1245,
- /*   340 */  1282, 1230, 1236, 1335, 1304, 1293, 1259, 1217, 1296, 1300,
- /*   350 */  1340, 1253, 1266, 1303, 1283, 1305, 1306, 1307, 1309, 1285,
- /*   360 */  1308, 1311, 1288, 1297, 1312, 1313, 1317, 1318, 1264, 1319,
- /*   370 */  1321, 1320, 1322, 1262, 1323, 1325, 1324, 1265, 1327, 1260,
- /*   380 */  1328, 1270, 1329, 1272, 1332, 1328, 1333, 1334, 1336, 1326,
- /*   390 */  1337, 1338, 1341, 1345, 1342, 1344, 1343, 1339, 1346, 1348,
- /*   400 */  1347, 1339, 1349, 1351, 1352, 1354, 1356, 1284, 1357, 1362,
- /*   410 */  1392, 1399,
+ /*     0 */    72,  562,  614,  578,  744,  744,  744,  744,  514,   -5,
+ /*    10 */    70,   70,  744,  744,  744,  744,  744,  744,  744,  641,
+ /*    20 */   641,  545,  558,  289,  392,   98,  127,  176,  225,  274,
+ /*    30 */   323,  372,  400,  428,  456,  456,  456,  456,  456,  456,
+ /*    40 */   456,  456,  456,  456,  456,  456,  456,  456,  456,  522,
+ /*    50 */   456,  488,  548,  548,  692,  744,  744,  744,  744,  744,
+ /*    60 */   744,  744,  744,  744,  744,  744,  744,  744,  744,  744,
+ /*    70 */   744,  744,  744,  744,  744,  744,  744,  744,  744,  744,
+ /*    80 */   744,  744,  752,  744,  744,  744,  744,  744,  744,  744,
+ /*    90 */   744,  744,  744,  744,  744,  744,   11,   30,   30,   30,
+ /*   100 */    30,   30,  187,  140,   35,  825,  147,  147,  460,  425,
+ /*   110 */   670,  -16, 1404, 1404, 1404,  190,  190,  636,  636,  798,
+ /*   120 */   978,  978,  474,  670,  188,  670,  670,  670,  670,  670,
+ /*   130 */   670,  670,  670,  670,  670,  670,  670,  670,  670,  670,
+ /*   140 */   670,   -6,  670,  670,  670,   -6,  425,  -81,  -81,  -81,
+ /*   150 */   -81,  -81,  -81, 1404, 1404,  804,  200,  200,  683,  824,
+ /*   160 */   824,  824,  797,  855,  530,  737,  871,  800, 1025, 1033,
+ /*   170 */  1040, 1037, 1037, 1037, 1043,  890, 1046,  130,  870,  670,
+ /*   180 */   670,  670,  670,  998,  812,  812,  670,  670, 1101,  998,
+ /*   190 */   670, 1101,  670,  670,  670,  670,  670,  670, 1066,  670,
+ /*   200 */   536,  670, 1044,  670,  952,  670,  670,  812,  670,  722,
+ /*   210 */   952,  952,  670,  670,  670, 1067, 1024,  670, 1072,  670,
+ /*   220 */   670,  670,  670, 1162, 1210, 1109, 1177, 1177, 1177, 1177,
+ /*   230 */  1103, 1098, 1183, 1109, 1162, 1210, 1210, 1109, 1183, 1185,
+ /*   240 */  1183, 1183, 1185, 1147, 1147, 1147, 1170, 1185, 1147, 1152,
+ /*   250 */  1147, 1170, 1147, 1147, 1130, 1153, 1130, 1153, 1130, 1153,
+ /*   260 */  1130, 1153, 1191, 1125, 1185, 1212, 1212, 1185, 1135, 1142,
+ /*   270 */  1139, 1143, 1109, 1201, 1213, 1213, 1219, 1219, 1219, 1219,
+ /*   280 */  1221, 1404, 1404, 1404, 1404,  151,  184, 1015,  660,  991,
+ /*   290 */  1007, 1074, 1078, 1081, 1082, 1085, 1092, 1060, 1111, 1073,
+ /*   300 */  1104, 1107, 1108, 1114, 1035, 1042, 1115, 1118, 1119, 1265,
+ /*   310 */  1267, 1230, 1202, 1236, 1240, 1244, 1194, 1197, 1186, 1209,
+ /*   320 */  1200, 1220, 1256, 1178, 1255, 1181, 1179, 1182, 1226, 1310,
+ /*   330 */  1211, 1204, 1297, 1298, 1303, 1304, 1243, 1279, 1228, 1233,
+ /*   340 */  1333, 1301, 1289, 1254, 1215, 1290, 1294, 1334, 1258, 1261,
+ /*   350 */  1296, 1278, 1300, 1302, 1305, 1307, 1282, 1306, 1308, 1284,
+ /*   360 */  1291, 1309, 1311, 1313, 1312, 1262, 1316, 1317, 1319, 1314,
+ /*   370 */  1252, 1320, 1321, 1315, 1266, 1324, 1269, 1323, 1270, 1325,
+ /*   380 */  1272, 1329, 1323, 1330, 1331, 1332, 1318, 1335, 1336, 1339,
+ /*   390 */  1343, 1340, 1342, 1338, 1341, 1345, 1347, 1346, 1341, 1348,
+ /*   400 */  1350, 1351, 1352, 1354, 1283, 1355, 1356, 1357, 1382,
 };
-#define YY_REDUCE_USE_DFLT (-110)
-#define YY_REDUCE_COUNT (286)
-#define YY_REDUCE_MIN   (-109)
-#define YY_REDUCE_MAX   (1148)
+#define YY_REDUCE_USE_DFLT (-69)
+#define YY_REDUCE_COUNT (284)
+#define YY_REDUCE_MIN   (-68)
+#define YY_REDUCE_MAX   (1154)
 static const short yy_reduce_ofst[] = {
- /*     0 */    36,  504,  646,  124,  508,  531,  577,  633,  538,  159,
- /*    10 */   -43,   12,  625,  652,  672,  480,  682,  684,  688,  471,
- /*    20 */   717,  446,  696,  712,  436,  148,  148,  148,  148,  148,
- /*    30 */   148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
- /*    40 */   148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
- /*    50 */   148,  148,  148,  148,  563,  763,  768,  774,  788,  801,
- /*    60 */   820,  822,  826,  828,  830,  832,  834,  842,  853,  855,
- /*    70 */   857,  862,  864,  866,  868,  876,  878,  887,  889,  891,
- /*    80 */   897,  900,  902,  910,  912,  916,  921,  924,  926,  932,
- /*    90 */   935,  937,  945,  948,  951,  956,  148,  148,  148,  148,
- /*   100 */   148,  148,  148,  148,  148,  200,  208,  334,  148,  641,
- /*   110 */   443,  148,  148,  148,  148,  463,  463,  499,  507,  426,
- /*   120 */   495,  553,  513,  529,  606,  659,  691,  741,  760,  773,
- /*   130 */   803,  827,  555,  854,  478,  877,  623,  898,  901,  863,
- /*   140 */   604,  971,  925,  609,  628,  974,  561,  895,  905,  950,
- /*   150 */   968,  970,  976,  933,  587, -109,  -68,  -28,   25,   97,
- /*   160 */   110,  146,  121,  196,  245,  306,  366,  502,  512,  648,
- /*   170 */   726,  700,  755,  778,  858,  121,  867,  697,  786,  899,
- /*   180 */   911, 1007, 1018, 1022, 1026,  988,  977,  980, 1040, 1041,
- /*   190 */   957,  997, 1044,  960, 1046, 1048, 1049, 1050, 1051, 1052,
- /*   200 */  1032, 1054, 1028, 1055, 1031, 1059, 1038, 1060, 1061, 1003,
- /*   210 */  1064,  990, 1045, 1047, 1066, 1069,  726, 1025, 1029, 1074,
- /*   220 */  1068, 1075, 1076, 1078, 1079, 1011, 1053, 1036, 1056, 1057,
- /*   230 */  1062, 1065, 1004, 1008, 1085, 1067, 1030, 1070, 1072, 1082,
- /*   240 */  1086, 1083, 1090, 1093, 1087, 1084, 1089, 1097, 1094, 1098,
- /*   250 */  1105, 1101, 1107, 1102, 1108, 1112, 1109, 1113, 1115, 1117,
- /*   260 */  1120, 1122, 1123, 1125, 1042, 1043, 1116, 1121, 1126, 1127,
- /*   270 */  1130, 1134, 1131, 1139, 1132, 1133, 1135, 1138, 1142, 1143,
- /*   280 */  1145, 1146, 1148, 1137, 1140, 1141, 1147,
+ /*     0 */   -65,  443,  512,  173,  166,  489,  554,  581,  618,   49,
+ /*    10 */   156,  159,  594,  655,  663,  469,  623,  715,  445,  517,
+ /*    20 */   630,  731,  698,  520,  -19,  153,  153,  153,  153,  153,
+ /*    30 */   153,  153,  153,  153,  153,  153,  153,  153,  153,  153,
+ /*    40 */   153,  153,  153,  153,  153,  153,  153,  153,  153,  153,
+ /*    50 */   153,  153,  153,  153,  693,  755,  767,  779,  783,  786,
+ /*    60 */   788,  792,  795,  799,  802,  807,  811,  815,  818,  821,
+ /*    70 */   823,  826,  830,  837,  842,  846,  849,  852,  856,  858,
+ /*    80 */   861,  868,  872,  877,  880,  882,  884,  891,  903,  905,
+ /*    90 */   907,  910,  912,  914,  916,  919,  153,  153,  153,  153,
+ /*   100 */   153,  153,  153,  153,  153,   54,  435,  495,  153,  519,
+ /*   110 */   745,  153,  153,  153,  153,  487,  487,  603,  615,   94,
+ /*   120 */   730,  750,   34,  685,  174,  770,  793,  935,  940,  945,
+ /*   130 */   954,  960,  401,  961,  133,  452,  459,  595,  608,  881,
+ /*   140 */   202,  696,  632,  605,  610,  763,  794,  863,  955,  956,
+ /*   150 */   959,  962,  963,  836,  918,  -68,  -40,  136,  221,  204,
+ /*   160 */   281,  341,  490,  507,  483,  538,  624,  534,  674,  765,
+ /*   170 */   780,  734,  970,  974,  853,  490,  857,  820,  987, 1031,
+ /*   180 */  1032, 1034, 1036,  989,  979,  980, 1041, 1045,  948,  994,
+ /*   190 */  1047,  957, 1048, 1049, 1050, 1051, 1052, 1053, 1016, 1054,
+ /*   200 */  1014, 1055, 1019, 1056, 1026, 1057, 1059, 1001, 1061,  990,
+ /*   210 */  1058, 1062, 1064, 1065,  780, 1017, 1023, 1068, 1069, 1070,
+ /*   220 */  1071, 1075, 1076, 1003, 1063, 1028, 1077, 1079, 1080, 1083,
+ /*   230 */  1002, 1004, 1084, 1086, 1021, 1087, 1088, 1089, 1090, 1091,
+ /*   240 */  1093, 1094, 1096, 1100, 1105, 1106, 1099, 1112, 1110, 1102,
+ /*   250 */  1117, 1113, 1120, 1122, 1039, 1095, 1097, 1116, 1121, 1123,
+ /*   260 */  1124, 1126, 1038, 1029, 1127, 1030, 1128, 1129, 1131, 1138,
+ /*   270 */  1132, 1137, 1133, 1136, 1141, 1144, 1134, 1145, 1148, 1149,
+ /*   280 */  1140, 1146, 1150, 1151, 1154,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */  1166, 1160, 1160, 1160, 1104, 1104, 1104, 1104, 1160, 1000,
- /*    10 */  1027, 1027, 1208, 1208, 1208, 1208, 1208, 1208, 1103, 1208,
- /*    20 */  1208, 1208, 1208, 1160, 1004, 1033, 1208, 1208, 1208, 1105,
- /*    30 */  1106, 1208, 1208, 1208, 1138, 1043, 1042, 1041, 1040, 1014,
- /*    40 */  1038, 1031, 1035, 1105, 1099, 1100, 1098, 1102, 1106, 1208,
- /*    50 */  1034, 1068, 1083, 1067, 1208, 1208, 1208, 1208, 1208, 1208,
- /*    60 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*    70 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*    80 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*    90 */  1208, 1208, 1208, 1208, 1208, 1208, 1077, 1082, 1089, 1081,
- /*   100 */  1078, 1070, 1069, 1071, 1072,  971, 1208, 1208, 1073, 1208,
- /*   110 */  1208, 1074, 1086, 1085, 1084, 1175, 1174, 1208, 1208, 1111,
- /*   120 */  1208, 1208, 1208, 1208, 1160, 1208, 1208, 1208, 1208, 1208,
- /*   130 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   140 */  1208,  929, 1208, 1208, 1208,  929, 1208, 1160, 1160, 1160,
- /*   150 */  1160, 1160, 1160, 1004,  995, 1208, 1208, 1208, 1208, 1208,
- /*   160 */  1208, 1208, 1208, 1000, 1208, 1208, 1208, 1208, 1133, 1208,
- /*   170 */  1208, 1000, 1000, 1000, 1208, 1002, 1208,  984,  994, 1208,
- /*   180 */  1157, 1208, 1154, 1208, 1125, 1037, 1016, 1016, 1208, 1208,
- /*   190 */  1207, 1037, 1208, 1207, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   200 */   946, 1208, 1186, 1208,  943, 1208, 1027, 1208, 1208, 1016,
- /*   210 */  1208, 1101, 1027, 1027, 1208, 1208, 1208, 1001,  994, 1208,
- /*   220 */  1208, 1208, 1208, 1208, 1169, 1048,  974, 1037,  980,  980,
- /*   230 */   980,  980, 1137, 1204,  923, 1037, 1048,  974,  974, 1037,
- /*   240 */   923, 1112,  923,  923, 1112,  972,  972,  972,  961, 1112,
- /*   250 */   972,  946,  972,  961,  972,  972, 1020, 1015, 1020, 1015,
- /*   260 */  1020, 1015, 1020, 1015, 1107, 1208, 1112, 1116, 1116, 1112,
- /*   270 */  1032, 1021, 1030, 1028, 1037,  964, 1172, 1172, 1168, 1168,
- /*   280 */  1168, 1168,  913, 1181,  948,  948, 1181, 1208, 1208, 1208,
- /*   290 */  1176, 1119, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   300 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   310 */  1054, 1208,  910, 1208, 1208, 1208, 1155, 1208, 1208, 1199,
- /*   320 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1136, 1135, 1208,
- /*   330 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   340 */  1208, 1208, 1206, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   350 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   360 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,  986, 1208,
- /*   370 */  1208, 1208, 1190, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   380 */  1029, 1208, 1022, 1208, 1208, 1196, 1208, 1208, 1208, 1208,
- /*   390 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1162, 1208, 1208,
- /*   400 */  1208, 1161, 1208, 1208, 1208, 1208, 1208, 1208, 1208,  917,
- /*   410 */  1208, 1208,
+ /*     0 */  1156, 1150, 1150, 1150, 1097, 1097, 1097, 1097, 1150,  993,
+ /*    10 */  1020, 1020, 1198, 1198, 1198, 1198, 1198, 1198, 1096, 1198,
+ /*    20 */  1198, 1198, 1198, 1150,  997, 1026, 1198, 1198, 1198, 1098,
+ /*    30 */  1099, 1198, 1198, 1198, 1131, 1036, 1035, 1034, 1033, 1007,
+ /*    40 */  1031, 1024, 1028, 1098, 1092, 1093, 1091, 1095, 1099, 1198,
+ /*    50 */  1027, 1061, 1076, 1060, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*    60 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*    70 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*    80 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*    90 */  1198, 1198, 1198, 1198, 1198, 1198, 1070, 1075, 1082, 1074,
+ /*   100 */  1071, 1063, 1062, 1064, 1065,  964, 1198, 1198, 1066, 1198,
+ /*   110 */  1198, 1067, 1079, 1078, 1077, 1165, 1164, 1198, 1198, 1104,
+ /*   120 */  1198, 1198, 1198, 1198, 1150, 1198, 1198, 1198, 1198, 1198,
+ /*   130 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   140 */  1198,  922, 1198, 1198, 1198,  922, 1198, 1150, 1150, 1150,
+ /*   150 */  1150, 1150, 1150,  997,  988, 1198, 1198, 1198, 1198, 1198,
+ /*   160 */  1198, 1198, 1198,  993, 1198, 1198, 1198, 1198, 1126, 1198,
+ /*   170 */  1198,  993,  993,  993, 1198,  995, 1198,  977,  987, 1198,
+ /*   180 */  1147, 1198, 1118, 1030, 1009, 1009, 1198, 1198, 1197, 1030,
+ /*   190 */  1198, 1197, 1198, 1198, 1198, 1198, 1198, 1198,  939, 1198,
+ /*   200 */  1176, 1198,  936, 1198, 1020, 1198, 1198, 1009, 1198, 1094,
+ /*   210 */  1020, 1020, 1198, 1198, 1198,  994,  987, 1198, 1198, 1198,
+ /*   220 */  1198, 1198, 1159, 1041,  967, 1030,  973,  973,  973,  973,
+ /*   230 */  1130, 1194,  916, 1030, 1041,  967,  967, 1030,  916, 1105,
+ /*   240 */   916,  916, 1105,  965,  965,  965,  954, 1105,  965,  939,
+ /*   250 */   965,  954,  965,  965, 1013, 1008, 1013, 1008, 1013, 1008,
+ /*   260 */  1013, 1008, 1100, 1198, 1105, 1109, 1109, 1105, 1025, 1014,
+ /*   270 */  1023, 1021, 1030,  957, 1162, 1162, 1158, 1158, 1158, 1158,
+ /*   280 */   906, 1171,  941,  941, 1171, 1198, 1198, 1198, 1166, 1112,
+ /*   290 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   300 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1047, 1198,
+ /*   310 */   903, 1198, 1198, 1198, 1198, 1198, 1189, 1198, 1198, 1198,
+ /*   320 */  1198, 1198, 1198, 1198, 1129, 1128, 1198, 1198, 1198, 1198,
+ /*   330 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1196,
+ /*   340 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   350 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   360 */  1198, 1198, 1198, 1198, 1198,  979, 1198, 1198, 1198, 1180,
+ /*   370 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1022, 1198, 1015,
+ /*   380 */  1198, 1198, 1186, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   390 */  1198, 1198, 1198, 1198, 1152, 1198, 1198, 1198, 1151, 1198,
+ /*   400 */  1198, 1198, 1198, 1198, 1198, 1198,  910, 1198, 1198,
 };
 /********** End of lemon-generated parsing tables *****************************/
 
@@ -899,7 +897,6 @@ static const YYCODETYPE yyFallback[] = {
    51,  /*      RAISE => ID */
    51,  /*    REPLACE => ID */
    51,  /*   RESTRICT => ID */
-   51,  /*    REINDEX => ID */
    51,  /*     RENAME => ID */
    51,  /*   CTIME_KW => ID */
 };
@@ -1005,47 +1002,47 @@ static const char *const yyTokenName[] = {
   "AFTER",         "AUTOINCREMENT",  "BEFORE",        "CASCADE",     
   "CONFLICT",      "FAIL",          "IGNORE",        "INITIALLY",   
   "INSTEAD",       "NO",            "KEY",           "OFFSET",      
-  "RAISE",         "REPLACE",       "RESTRICT",      "REINDEX",     
-  "RENAME",        "CTIME_KW",      "ANY",           "STRING",      
-  "CONSTRAINT",    "DEFAULT",       "NULL",          "PRIMARY",     
-  "UNIQUE",        "CHECK",         "REFERENCES",    "AUTOINCR",    
-  "ON",            "INSERT",        "DELETE",        "UPDATE",      
-  "SET",           "DEFERRABLE",    "IMMEDIATE",     "FOREIGN",     
-  "DROP",          "VIEW",          "UNION",         "ALL",         
-  "EXCEPT",        "INTERSECT",     "SELECT",        "VALUES",      
-  "DISTINCT",      "DOT",           "FROM",          "JOIN_KW",     
-  "JOIN",          "BY",            "USING",         "ORDER",       
-  "ASC",           "DESC",          "GROUP",         "HAVING",      
-  "LIMIT",         "WHERE",         "INTO",          "FLOAT",       
-  "BLOB",          "INTEGER",       "VARIABLE",      "CAST",        
-  "CASE",          "WHEN",          "THEN",          "ELSE",        
-  "INDEX",         "PRAGMA",        "TRIGGER",       "OF",          
-  "FOR",           "EACH",          "ROW",           "ANALYZE",     
-  "ALTER",         "WITH",          "RECURSIVE",     "error",       
-  "input",         "ecmd",          "explain",       "cmdx",        
-  "cmd",           "transtype",     "trans_opt",     "nm",          
-  "savepoint_opt",  "create_table",  "create_table_args",  "createkw",    
-  "ifnotexists",   "columnlist",    "conslist_opt",  "select",      
-  "columnname",    "carglist",      "typetoken",     "typename",    
-  "signed",        "plus_num",      "minus_num",     "ccons",       
-  "term",          "expr",          "onconf",        "sortorder",   
-  "autoinc",       "eidlist_opt",   "refargs",       "defer_subclause",
-  "refarg",        "refact",        "init_deferred_pred_opt",  "conslist",    
-  "tconscomma",    "tcons",         "sortlist",      "eidlist",     
-  "defer_subclause_opt",  "orconf",        "resolvetype",   "raisetype",   
-  "ifexists",      "fullname",      "selectnowith",  "oneselect",   
-  "with",          "multiselect_op",  "distinct",      "selcollist",  
-  "from",          "where_opt",     "groupby_opt",   "having_opt",  
-  "orderby_opt",   "limit_opt",     "values",        "nexprlist",   
-  "exprlist",      "sclp",          "as",            "seltablist",  
-  "stl_prefix",    "joinop",        "indexed_opt",   "on_opt",      
-  "using_opt",     "join_nm",       "idlist",        "setlist",     
-  "insert_cmd",    "idlist_opt",    "likeop",        "between_op",  
-  "in_op",         "paren_exprlist",  "case_operand",  "case_exprlist",
-  "case_else",     "uniqueflag",    "collate",       "nmnum",       
-  "trigger_decl",  "trigger_cmd_list",  "trigger_time",  "trigger_event",
-  "foreach_clause",  "when_clause",   "trigger_cmd",   "trnm",        
-  "tridxby",       "wqlist",      
+  "RAISE",         "REPLACE",       "RESTRICT",      "RENAME",      
+  "CTIME_KW",      "ANY",           "STRING",        "CONSTRAINT",  
+  "DEFAULT",       "NULL",          "PRIMARY",       "UNIQUE",      
+  "CHECK",         "REFERENCES",    "AUTOINCR",      "ON",          
+  "INSERT",        "DELETE",        "UPDATE",        "SET",         
+  "DEFERRABLE",    "IMMEDIATE",     "FOREIGN",       "DROP",        
+  "VIEW",          "UNION",         "ALL",           "EXCEPT",      
+  "INTERSECT",     "SELECT",        "VALUES",        "DISTINCT",    
+  "DOT",           "FROM",          "JOIN_KW",       "JOIN",        
+  "BY",            "USING",         "ORDER",         "ASC",         
+  "DESC",          "GROUP",         "HAVING",        "LIMIT",       
+  "WHERE",         "INTO",          "FLOAT",         "BLOB",        
+  "INTEGER",       "VARIABLE",      "CAST",          "CASE",        
+  "WHEN",          "THEN",          "ELSE",          "INDEX",       
+  "PRAGMA",        "TRIGGER",       "OF",            "FOR",         
+  "EACH",          "ROW",           "ANALYZE",       "ALTER",       
+  "WITH",          "RECURSIVE",     "error",         "input",       
+  "ecmd",          "explain",       "cmdx",          "cmd",         
+  "transtype",     "trans_opt",     "nm",            "savepoint_opt",
+  "create_table",  "create_table_args",  "createkw",      "ifnotexists", 
+  "columnlist",    "conslist_opt",  "select",        "columnname",  
+  "carglist",      "typetoken",     "typename",      "signed",      
+  "plus_num",      "minus_num",     "ccons",         "term",        
+  "expr",          "onconf",        "sortorder",     "autoinc",     
+  "eidlist_opt",   "refargs",       "defer_subclause",  "refarg",      
+  "refact",        "init_deferred_pred_opt",  "conslist",      "tconscomma",  
+  "tcons",         "sortlist",      "eidlist",       "defer_subclause_opt",
+  "orconf",        "resolvetype",   "raisetype",     "ifexists",    
+  "fullname",      "selectnowith",  "oneselect",     "with",        
+  "multiselect_op",  "distinct",      "selcollist",    "from",        
+  "where_opt",     "groupby_opt",   "having_opt",    "orderby_opt", 
+  "limit_opt",     "values",        "nexprlist",     "exprlist",    
+  "sclp",          "as",            "seltablist",    "stl_prefix",  
+  "joinop",        "indexed_opt",   "on_opt",        "using_opt",   
+  "join_nm",       "idlist",        "setlist",       "insert_cmd",  
+  "idlist_opt",    "likeop",        "between_op",    "in_op",       
+  "paren_exprlist",  "case_operand",  "case_exprlist",  "case_else",   
+  "uniqueflag",    "collate",       "nmnum",         "trigger_decl",
+  "trigger_cmd_list",  "trigger_time",  "trigger_event",  "foreach_clause",
+  "when_clause",   "trigger_cmd",   "trnm",          "tridxby",     
+  "wqlist",      
 };
 #endif /* NDEBUG */
 
@@ -1299,60 +1296,57 @@ static const char *const yyRuleName[] = {
  /* 243 */ "raisetype ::= ABORT",
  /* 244 */ "raisetype ::= FAIL",
  /* 245 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 246 */ "cmd ::= REINDEX",
- /* 247 */ "cmd ::= REINDEX nm",
- /* 248 */ "cmd ::= REINDEX nm ON nm",
- /* 249 */ "cmd ::= ANALYZE",
- /* 250 */ "cmd ::= ANALYZE nm",
- /* 251 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 252 */ "with ::=",
- /* 253 */ "with ::= WITH wqlist",
- /* 254 */ "with ::= WITH RECURSIVE wqlist",
- /* 255 */ "wqlist ::= nm eidlist_opt AS LP select RP",
- /* 256 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",
- /* 257 */ "input ::= ecmd",
- /* 258 */ "explain ::=",
- /* 259 */ "cmdx ::= cmd",
- /* 260 */ "trans_opt ::=",
- /* 261 */ "trans_opt ::= TRANSACTION",
- /* 262 */ "trans_opt ::= TRANSACTION nm",
- /* 263 */ "savepoint_opt ::= SAVEPOINT",
- /* 264 */ "savepoint_opt ::=",
- /* 265 */ "cmd ::= create_table create_table_args",
- /* 266 */ "columnlist ::= columnlist COMMA columnname carglist",
- /* 267 */ "columnlist ::= columnname carglist",
- /* 268 */ "typetoken ::= typename",
- /* 269 */ "typename ::= ID|STRING",
- /* 270 */ "signed ::= plus_num",
- /* 271 */ "signed ::= minus_num",
- /* 272 */ "carglist ::= carglist ccons",
- /* 273 */ "carglist ::=",
- /* 274 */ "ccons ::= NULL onconf",
- /* 275 */ "conslist_opt ::= COMMA conslist",
- /* 276 */ "conslist ::= conslist tconscomma tcons",
- /* 277 */ "conslist ::= tcons",
- /* 278 */ "tconscomma ::=",
- /* 279 */ "defer_subclause_opt ::= defer_subclause",
- /* 280 */ "resolvetype ::= raisetype",
- /* 281 */ "selectnowith ::= oneselect",
- /* 282 */ "oneselect ::= values",
- /* 283 */ "sclp ::= selcollist COMMA",
- /* 284 */ "as ::= ID|STRING",
- /* 285 */ "join_nm ::= ID|INDEXED",
- /* 286 */ "join_nm ::= JOIN_KW",
- /* 287 */ "expr ::= term",
- /* 288 */ "exprlist ::= nexprlist",
- /* 289 */ "nmnum ::= plus_num",
- /* 290 */ "nmnum ::= STRING",
- /* 291 */ "nmnum ::= nm",
- /* 292 */ "nmnum ::= ON",
- /* 293 */ "nmnum ::= DELETE",
- /* 294 */ "nmnum ::= DEFAULT",
- /* 295 */ "plus_num ::= INTEGER|FLOAT",
- /* 296 */ "foreach_clause ::=",
- /* 297 */ "foreach_clause ::= FOR EACH ROW",
- /* 298 */ "trnm ::= nm",
- /* 299 */ "tridxby ::=",
+ /* 246 */ "cmd ::= ANALYZE",
+ /* 247 */ "cmd ::= ANALYZE nm",
+ /* 248 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 249 */ "with ::=",
+ /* 250 */ "with ::= WITH wqlist",
+ /* 251 */ "with ::= WITH RECURSIVE wqlist",
+ /* 252 */ "wqlist ::= nm eidlist_opt AS LP select RP",
+ /* 253 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",
+ /* 254 */ "input ::= ecmd",
+ /* 255 */ "explain ::=",
+ /* 256 */ "cmdx ::= cmd",
+ /* 257 */ "trans_opt ::=",
+ /* 258 */ "trans_opt ::= TRANSACTION",
+ /* 259 */ "trans_opt ::= TRANSACTION nm",
+ /* 260 */ "savepoint_opt ::= SAVEPOINT",
+ /* 261 */ "savepoint_opt ::=",
+ /* 262 */ "cmd ::= create_table create_table_args",
+ /* 263 */ "columnlist ::= columnlist COMMA columnname carglist",
+ /* 264 */ "columnlist ::= columnname carglist",
+ /* 265 */ "typetoken ::= typename",
+ /* 266 */ "typename ::= ID|STRING",
+ /* 267 */ "signed ::= plus_num",
+ /* 268 */ "signed ::= minus_num",
+ /* 269 */ "carglist ::= carglist ccons",
+ /* 270 */ "carglist ::=",
+ /* 271 */ "ccons ::= NULL onconf",
+ /* 272 */ "conslist_opt ::= COMMA conslist",
+ /* 273 */ "conslist ::= conslist tconscomma tcons",
+ /* 274 */ "conslist ::= tcons",
+ /* 275 */ "tconscomma ::=",
+ /* 276 */ "defer_subclause_opt ::= defer_subclause",
+ /* 277 */ "resolvetype ::= raisetype",
+ /* 278 */ "selectnowith ::= oneselect",
+ /* 279 */ "oneselect ::= values",
+ /* 280 */ "sclp ::= selcollist COMMA",
+ /* 281 */ "as ::= ID|STRING",
+ /* 282 */ "join_nm ::= ID|INDEXED",
+ /* 283 */ "join_nm ::= JOIN_KW",
+ /* 284 */ "expr ::= term",
+ /* 285 */ "exprlist ::= nexprlist",
+ /* 286 */ "nmnum ::= plus_num",
+ /* 287 */ "nmnum ::= STRING",
+ /* 288 */ "nmnum ::= nm",
+ /* 289 */ "nmnum ::= ON",
+ /* 290 */ "nmnum ::= DELETE",
+ /* 291 */ "nmnum ::= DEFAULT",
+ /* 292 */ "plus_num ::= INTEGER|FLOAT",
+ /* 293 */ "foreach_clause ::=",
+ /* 294 */ "foreach_clause ::= FOR EACH ROW",
+ /* 295 */ "trnm ::= nm",
+ /* 296 */ "tridxby ::=",
 };
 #endif /* NDEBUG */
 
@@ -1463,94 +1457,94 @@ static void yy_destructor(
     ** inside the C code.
     */
 /********* Begin destructor definitions ***************************************/
-    case 151: /* select */
-    case 182: /* selectnowith */
-    case 183: /* oneselect */
-    case 194: /* values */
+    case 150: /* select */
+    case 181: /* selectnowith */
+    case 182: /* oneselect */
+    case 193: /* values */
 {
 #line 386 "parse.y"
-sqlite3SelectDelete(pParse->db, (yypminor->yy279));
-#line 1474 "parse.c"
+sqlite3SelectDelete(pParse->db, (yypminor->yy203));
+#line 1468 "parse.c"
 }
       break;
-    case 160: /* term */
-    case 161: /* expr */
+    case 159: /* term */
+    case 160: /* expr */
 {
 #line 829 "parse.y"
-sqlite3ExprDelete(pParse->db, (yypminor->yy162).pExpr);
-#line 1482 "parse.c"
+sqlite3ExprDelete(pParse->db, (yypminor->yy266).pExpr);
+#line 1476 "parse.c"
 }
       break;
-    case 165: /* eidlist_opt */
-    case 174: /* sortlist */
-    case 175: /* eidlist */
-    case 187: /* selcollist */
-    case 190: /* groupby_opt */
-    case 192: /* orderby_opt */
-    case 195: /* nexprlist */
-    case 196: /* exprlist */
-    case 197: /* sclp */
-    case 207: /* setlist */
-    case 213: /* paren_exprlist */
-    case 215: /* case_exprlist */
+    case 164: /* eidlist_opt */
+    case 173: /* sortlist */
+    case 174: /* eidlist */
+    case 186: /* selcollist */
+    case 189: /* groupby_opt */
+    case 191: /* orderby_opt */
+    case 194: /* nexprlist */
+    case 195: /* exprlist */
+    case 196: /* sclp */
+    case 206: /* setlist */
+    case 212: /* paren_exprlist */
+    case 214: /* case_exprlist */
 {
 #line 1261 "parse.y"
-sqlite3ExprListDelete(pParse->db, (yypminor->yy382));
-#line 1500 "parse.c"
+sqlite3ExprListDelete(pParse->db, (yypminor->yy162));
+#line 1494 "parse.c"
 }
       break;
-    case 181: /* fullname */
-    case 188: /* from */
-    case 199: /* seltablist */
-    case 200: /* stl_prefix */
+    case 180: /* fullname */
+    case 187: /* from */
+    case 198: /* seltablist */
+    case 199: /* stl_prefix */
 {
 #line 613 "parse.y"
-sqlite3SrcListDelete(pParse->db, (yypminor->yy387));
-#line 1510 "parse.c"
+sqlite3SrcListDelete(pParse->db, (yypminor->yy41));
+#line 1504 "parse.c"
 }
       break;
-    case 184: /* with */
-    case 229: /* wqlist */
+    case 183: /* with */
+    case 228: /* wqlist */
 {
-#line 1510 "parse.y"
-sqlite3WithDelete(pParse->db, (yypminor->yy151));
-#line 1518 "parse.c"
+#line 1511 "parse.y"
+sqlite3WithDelete(pParse->db, (yypminor->yy273));
+#line 1512 "parse.c"
 }
       break;
-    case 189: /* where_opt */
-    case 191: /* having_opt */
-    case 203: /* on_opt */
-    case 214: /* case_operand */
-    case 216: /* case_else */
-    case 225: /* when_clause */
+    case 188: /* where_opt */
+    case 190: /* having_opt */
+    case 202: /* on_opt */
+    case 213: /* case_operand */
+    case 215: /* case_else */
+    case 224: /* when_clause */
 {
 #line 738 "parse.y"
-sqlite3ExprDelete(pParse->db, (yypminor->yy362));
-#line 1530 "parse.c"
+sqlite3ExprDelete(pParse->db, (yypminor->yy396));
+#line 1524 "parse.c"
 }
       break;
-    case 204: /* using_opt */
-    case 206: /* idlist */
-    case 209: /* idlist_opt */
+    case 203: /* using_opt */
+    case 205: /* idlist */
+    case 208: /* idlist_opt */
 {
 #line 650 "parse.y"
-sqlite3IdListDelete(pParse->db, (yypminor->yy40));
-#line 1539 "parse.c"
+sqlite3IdListDelete(pParse->db, (yypminor->yy306));
+#line 1533 "parse.c"
 }
       break;
-    case 221: /* trigger_cmd_list */
-    case 226: /* trigger_cmd */
+    case 220: /* trigger_cmd_list */
+    case 225: /* trigger_cmd */
 {
 #line 1384 "parse.y"
-sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy427));
-#line 1547 "parse.c"
+sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy451));
+#line 1541 "parse.c"
 }
       break;
-    case 223: /* trigger_event */
+    case 222: /* trigger_event */
 {
 #line 1370 "parse.y"
-sqlite3IdListDelete(pParse->db, (yypminor->yy10).b);
-#line 1554 "parse.c"
+sqlite3IdListDelete(pParse->db, (yypminor->yy184).b);
+#line 1548 "parse.c"
 }
       break;
 /********* End destructor definitions *****************************************/
@@ -1725,7 +1719,7 @@ static void yyStackOverflow(yyParser *yypParser){
 #line 41 "parse.y"
 
   sqlite3ErrorMsg(pParse, "parser stack overflow");
-#line 1729 "parse.c"
+#line 1723 "parse.c"
 /******** End %stack_overflow code ********************************************/
    sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */
 }
@@ -1799,306 +1793,303 @@ static const struct {
   YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
   unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
 } yyRuleInfo[] = {
-  { 137, 3 },
+  { 136, 3 },
+  { 136, 1 },
   { 137, 1 },
-  { 138, 1 },
-  { 138, 3 },
-  { 140, 3 },
-  { 141, 0 },
-  { 141, 1 },
-  { 140, 2 },
-  { 140, 2 },
-  { 140, 2 },
-  { 140, 2 },
-  { 140, 3 },
-  { 140, 5 },
+  { 137, 3 },
+  { 139, 3 },
+  { 140, 0 },
+  { 140, 1 },
+  { 139, 2 },
+  { 139, 2 },
+  { 139, 2 },
+  { 139, 2 },
+  { 139, 3 },
+  { 139, 5 },
+  { 144, 4 },
+  { 146, 1 },
+  { 147, 0 },
+  { 147, 3 },
   { 145, 4 },
-  { 147, 1 },
-  { 148, 0 },
-  { 148, 3 },
-  { 146, 4 },
-  { 146, 2 },
-  { 152, 2 },
-  { 143, 1 },
-  { 154, 0 },
-  { 154, 4 },
-  { 154, 6 },
-  { 155, 2 },
-  { 159, 2 },
-  { 159, 2 },
-  { 159, 4 },
-  { 159, 3 },
-  { 159, 3 },
-  { 159, 2 },
-  { 159, 3 },
-  { 159, 5 },
-  { 159, 2 },
-  { 159, 4 },
-  { 159, 4 },
-  { 159, 1 },
-  { 159, 2 },
-  { 164, 0 },
-  { 164, 1 },
-  { 166, 0 },
-  { 166, 2 },
+  { 145, 2 },
+  { 151, 2 },
+  { 142, 1 },
+  { 153, 0 },
+  { 153, 4 },
+  { 153, 6 },
+  { 154, 2 },
+  { 158, 2 },
+  { 158, 2 },
+  { 158, 4 },
+  { 158, 3 },
+  { 158, 3 },
+  { 158, 2 },
+  { 158, 3 },
+  { 158, 5 },
+  { 158, 2 },
+  { 158, 4 },
+  { 158, 4 },
+  { 158, 1 },
+  { 158, 2 },
+  { 163, 0 },
+  { 163, 1 },
+  { 165, 0 },
+  { 165, 2 },
+  { 167, 2 },
+  { 167, 3 },
+  { 167, 3 },
+  { 167, 3 },
   { 168, 2 },
-  { 168, 3 },
-  { 168, 3 },
-  { 168, 3 },
-  { 169, 2 },
+  { 168, 2 },
+  { 168, 1 },
+  { 168, 1 },
+  { 168, 2 },
+  { 166, 3 },
+  { 166, 2 },
+  { 169, 0 },
   { 169, 2 },
-  { 169, 1 },
-  { 169, 1 },
   { 169, 2 },
-  { 167, 3 },
-  { 167, 2 },
-  { 170, 0 },
-  { 170, 2 },
-  { 170, 2 },
-  { 150, 0 },
-  { 172, 1 },
-  { 173, 2 },
-  { 173, 7 },
-  { 173, 5 },
-  { 173, 5 },
-  { 173, 10 },
+  { 149, 0 },
+  { 171, 1 },
+  { 172, 2 },
+  { 172, 7 },
+  { 172, 5 },
+  { 172, 5 },
+  { 172, 10 },
+  { 175, 0 },
+  { 161, 0 },
+  { 161, 3 },
   { 176, 0 },
-  { 162, 0 },
-  { 162, 3 },
-  { 177, 0 },
-  { 177, 2 },
-  { 178, 1 },
-  { 178, 1 },
-  { 140, 4 },
-  { 180, 2 },
-  { 180, 0 },
-  { 140, 7 },
-  { 140, 4 },
-  { 140, 1 },
-  { 151, 2 },
-  { 182, 3 },
+  { 176, 2 },
+  { 177, 1 },
+  { 177, 1 },
+  { 139, 4 },
+  { 179, 2 },
+  { 179, 0 },
+  { 139, 7 },
+  { 139, 4 },
+  { 139, 1 },
+  { 150, 2 },
+  { 181, 3 },
+  { 184, 1 },
+  { 184, 2 },
+  { 184, 1 },
+  { 182, 9 },
+  { 193, 4 },
+  { 193, 5 },
   { 185, 1 },
-  { 185, 2 },
   { 185, 1 },
-  { 183, 9 },
-  { 194, 4 },
-  { 194, 5 },
-  { 186, 1 },
-  { 186, 1 },
-  { 186, 0 },
+  { 185, 0 },
+  { 196, 0 },
+  { 186, 3 },
+  { 186, 2 },
+  { 186, 4 },
+  { 197, 2 },
   { 197, 0 },
-  { 187, 3 },
+  { 187, 0 },
   { 187, 2 },
-  { 187, 4 },
-  { 198, 2 },
-  { 198, 0 },
-  { 188, 0 },
-  { 188, 2 },
+  { 199, 2 },
+  { 199, 0 },
+  { 198, 6 },
+  { 198, 8 },
+  { 198, 7 },
+  { 198, 7 },
+  { 180, 1 },
+  { 200, 1 },
   { 200, 2 },
-  { 200, 0 },
-  { 199, 6 },
-  { 199, 8 },
-  { 199, 7 },
-  { 199, 7 },
-  { 181, 1 },
-  { 201, 1 },
-  { 201, 2 },
+  { 200, 3 },
+  { 200, 4 },
+  { 202, 2 },
+  { 202, 0 },
+  { 201, 0 },
   { 201, 3 },
-  { 201, 4 },
-  { 203, 2 },
+  { 201, 2 },
+  { 203, 4 },
   { 203, 0 },
-  { 202, 0 },
-  { 202, 3 },
-  { 202, 2 },
-  { 204, 4 },
-  { 204, 0 },
-  { 192, 0 },
-  { 192, 3 },
-  { 174, 4 },
-  { 174, 2 },
-  { 163, 1 },
-  { 163, 1 },
-  { 163, 0 },
-  { 190, 0 },
-  { 190, 3 },
   { 191, 0 },
-  { 191, 2 },
-  { 193, 0 },
-  { 193, 2 },
-  { 193, 4 },
-  { 193, 4 },
-  { 140, 6 },
+  { 191, 3 },
+  { 173, 4 },
+  { 173, 2 },
+  { 162, 1 },
+  { 162, 1 },
+  { 162, 0 },
   { 189, 0 },
-  { 189, 2 },
-  { 140, 8 },
-  { 207, 5 },
-  { 207, 7 },
-  { 207, 3 },
-  { 207, 5 },
-  { 140, 6 },
-  { 140, 7 },
-  { 208, 2 },
-  { 208, 1 },
-  { 209, 0 },
-  { 209, 3 },
+  { 189, 3 },
+  { 190, 0 },
+  { 190, 2 },
+  { 192, 0 },
+  { 192, 2 },
+  { 192, 4 },
+  { 192, 4 },
+  { 139, 6 },
+  { 188, 0 },
+  { 188, 2 },
+  { 139, 8 },
+  { 206, 5 },
+  { 206, 7 },
   { 206, 3 },
-  { 206, 1 },
-  { 161, 3 },
-  { 160, 1 },
-  { 161, 1 },
-  { 161, 1 },
-  { 161, 3 },
-  { 160, 1 },
+  { 206, 5 },
+  { 139, 6 },
+  { 139, 7 },
+  { 207, 2 },
+  { 207, 1 },
+  { 208, 0 },
+  { 208, 3 },
+  { 205, 3 },
+  { 205, 1 },
+  { 160, 3 },
+  { 159, 1 },
   { 160, 1 },
   { 160, 1 },
-  { 161, 1 },
-  { 161, 3 },
-  { 161, 6 },
-  { 161, 5 },
-  { 161, 4 },
+  { 160, 3 },
+  { 159, 1 },
+  { 159, 1 },
+  { 159, 1 },
   { 160, 1 },
-  { 161, 5 },
-  { 161, 3 },
-  { 161, 3 },
-  { 161, 3 },
-  { 161, 3 },
-  { 161, 3 },
-  { 161, 3 },
-  { 161, 3 },
-  { 161, 3 },
+  { 160, 3 },
+  { 160, 6 },
+  { 160, 5 },
+  { 160, 4 },
+  { 159, 1 },
+  { 160, 5 },
+  { 160, 3 },
+  { 160, 3 },
+  { 160, 3 },
+  { 160, 3 },
+  { 160, 3 },
+  { 160, 3 },
+  { 160, 3 },
+  { 160, 3 },
+  { 209, 1 },
+  { 209, 2 },
+  { 160, 3 },
+  { 160, 5 },
+  { 160, 2 },
+  { 160, 3 },
+  { 160, 3 },
+  { 160, 4 },
+  { 160, 2 },
+  { 160, 2 },
+  { 160, 2 },
+  { 160, 2 },
   { 210, 1 },
   { 210, 2 },
-  { 161, 3 },
-  { 161, 5 },
-  { 161, 2 },
-  { 161, 3 },
-  { 161, 3 },
-  { 161, 4 },
-  { 161, 2 },
-  { 161, 2 },
-  { 161, 2 },
-  { 161, 2 },
+  { 160, 5 },
   { 211, 1 },
   { 211, 2 },
-  { 161, 5 },
-  { 212, 1 },
-  { 212, 2 },
-  { 161, 5 },
-  { 161, 3 },
-  { 161, 5 },
-  { 161, 4 },
-  { 161, 4 },
-  { 161, 5 },
-  { 215, 5 },
-  { 215, 4 },
-  { 216, 2 },
-  { 216, 0 },
-  { 214, 1 },
-  { 214, 0 },
-  { 196, 0 },
-  { 195, 3 },
-  { 195, 1 },
+  { 160, 5 },
+  { 160, 3 },
+  { 160, 5 },
+  { 160, 4 },
+  { 160, 4 },
+  { 160, 5 },
+  { 214, 5 },
+  { 214, 4 },
+  { 215, 2 },
+  { 215, 0 },
+  { 213, 1 },
   { 213, 0 },
-  { 213, 3 },
-  { 140, 11 },
-  { 217, 1 },
+  { 195, 0 },
+  { 194, 3 },
+  { 194, 1 },
+  { 212, 0 },
+  { 212, 3 },
+  { 139, 11 },
+  { 216, 1 },
+  { 216, 0 },
+  { 164, 0 },
+  { 164, 3 },
+  { 174, 5 },
+  { 174, 3 },
   { 217, 0 },
-  { 165, 0 },
-  { 165, 3 },
-  { 175, 5 },
-  { 175, 3 },
-  { 218, 0 },
-  { 218, 2 },
-  { 140, 6 },
-  { 140, 2 },
-  { 140, 4 },
-  { 140, 5 },
-  { 140, 4 },
-  { 140, 5 },
-  { 140, 6 },
-  { 140, 1 },
+  { 217, 2 },
+  { 139, 6 },
+  { 139, 2 },
+  { 139, 4 },
+  { 139, 5 },
+  { 139, 4 },
+  { 139, 5 },
+  { 139, 6 },
+  { 139, 1 },
+  { 156, 2 },
   { 157, 2 },
-  { 158, 2 },
-  { 140, 5 },
-  { 220, 9 },
+  { 139, 5 },
+  { 219, 9 },
+  { 221, 1 },
+  { 221, 1 },
+  { 221, 2 },
+  { 221, 0 },
   { 222, 1 },
   { 222, 1 },
-  { 222, 2 },
-  { 222, 0 },
-  { 223, 1 },
-  { 223, 1 },
-  { 223, 3 },
-  { 225, 0 },
-  { 225, 2 },
-  { 221, 3 },
-  { 221, 2 },
+  { 222, 3 },
+  { 224, 0 },
+  { 224, 2 },
+  { 220, 3 },
+  { 220, 2 },
+  { 226, 3 },
   { 227, 3 },
-  { 228, 3 },
-  { 228, 2 },
-  { 226, 7 },
-  { 226, 5 },
-  { 226, 5 },
-  { 226, 1 },
-  { 161, 4 },
-  { 161, 6 },
-  { 179, 1 },
-  { 179, 1 },
-  { 179, 1 },
-  { 140, 4 },
-  { 140, 1 },
-  { 140, 2 },
-  { 140, 4 },
-  { 140, 1 },
-  { 140, 2 },
-  { 140, 6 },
-  { 184, 0 },
-  { 184, 2 },
-  { 184, 3 },
-  { 229, 6 },
-  { 229, 8 },
-  { 136, 1 },
-  { 138, 0 },
+  { 227, 2 },
+  { 225, 7 },
+  { 225, 5 },
+  { 225, 5 },
+  { 225, 1 },
+  { 160, 4 },
+  { 160, 6 },
+  { 178, 1 },
+  { 178, 1 },
+  { 178, 1 },
+  { 139, 4 },
   { 139, 1 },
-  { 142, 0 },
-  { 142, 1 },
-  { 142, 2 },
-  { 144, 1 },
-  { 144, 0 },
-  { 140, 2 },
-  { 149, 4 },
-  { 149, 2 },
+  { 139, 2 },
+  { 139, 6 },
+  { 183, 0 },
+  { 183, 2 },
+  { 183, 3 },
+  { 228, 6 },
+  { 228, 8 },
+  { 135, 1 },
+  { 137, 0 },
+  { 138, 1 },
+  { 141, 0 },
+  { 141, 1 },
+  { 141, 2 },
+  { 143, 1 },
+  { 143, 0 },
+  { 139, 2 },
+  { 148, 4 },
+  { 148, 2 },
+  { 153, 1 },
   { 154, 1 },
   { 155, 1 },
-  { 156, 1 },
-  { 156, 1 },
-  { 153, 2 },
-  { 153, 0 },
-  { 159, 2 },
-  { 150, 2 },
-  { 171, 3 },
-  { 171, 1 },
-  { 172, 0 },
-  { 176, 1 },
-  { 178, 1 },
+  { 155, 1 },
+  { 152, 2 },
+  { 152, 0 },
+  { 158, 2 },
+  { 149, 2 },
+  { 170, 3 },
+  { 170, 1 },
+  { 171, 0 },
+  { 175, 1 },
+  { 177, 1 },
+  { 181, 1 },
   { 182, 1 },
-  { 183, 1 },
-  { 197, 2 },
-  { 198, 1 },
-  { 205, 1 },
-  { 205, 1 },
-  { 161, 1 },
-  { 196, 1 },
-  { 219, 1 },
-  { 219, 1 },
-  { 219, 1 },
-  { 219, 1 },
-  { 219, 1 },
-  { 219, 1 },
-  { 157, 1 },
-  { 224, 0 },
-  { 224, 3 },
-  { 227, 1 },
-  { 228, 0 },
+  { 196, 2 },
+  { 197, 1 },
+  { 204, 1 },
+  { 204, 1 },
+  { 160, 1 },
+  { 195, 1 },
+  { 218, 1 },
+  { 218, 1 },
+  { 218, 1 },
+  { 218, 1 },
+  { 218, 1 },
+  { 218, 1 },
+  { 156, 1 },
+  { 223, 0 },
+  { 223, 3 },
+  { 226, 1 },
+  { 227, 0 },
 };
 
 static void yy_accept(yyParser*);  /* Forward Declaration */
@@ -2165,83 +2156,83 @@ static void yy_reduce(
       case 0: /* ecmd ::= explain cmdx SEMI */
 #line 111 "parse.y"
 { sqlite3FinishCoding(pParse); }
-#line 2169 "parse.c"
+#line 2160 "parse.c"
         break;
       case 1: /* ecmd ::= SEMI */
 #line 112 "parse.y"
 {
   sqlite3ErrorMsg(pParse, "syntax error: empty request");
 }
-#line 2176 "parse.c"
+#line 2167 "parse.c"
         break;
       case 2: /* explain ::= EXPLAIN */
 #line 117 "parse.y"
 { pParse->explain = 1; }
-#line 2181 "parse.c"
+#line 2172 "parse.c"
         break;
       case 3: /* explain ::= EXPLAIN QUERY PLAN */
 #line 118 "parse.y"
 { pParse->explain = 2; }
-#line 2186 "parse.c"
+#line 2177 "parse.c"
         break;
       case 4: /* cmd ::= BEGIN transtype trans_opt */
 #line 150 "parse.y"
-{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy52);}
-#line 2191 "parse.c"
+{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy444);}
+#line 2182 "parse.c"
         break;
       case 5: /* transtype ::= */
 #line 155 "parse.y"
-{yymsp[1].minor.yy52 = TK_DEFERRED;}
-#line 2196 "parse.c"
+{yymsp[1].minor.yy444 = TK_DEFERRED;}
+#line 2187 "parse.c"
         break;
       case 6: /* transtype ::= DEFERRED */
 #line 156 "parse.y"
-{yymsp[0].minor.yy52 = yymsp[0].major; /*A-overwrites-X*/}
-#line 2201 "parse.c"
+{yymsp[0].minor.yy444 = yymsp[0].major; /*A-overwrites-X*/}
+#line 2192 "parse.c"
         break;
       case 7: /* cmd ::= COMMIT trans_opt */
       case 8: /* cmd ::= END trans_opt */ yytestcase(yyruleno==8);
 #line 157 "parse.y"
 {sqlite3CommitTransaction(pParse);}
-#line 2207 "parse.c"
+#line 2198 "parse.c"
         break;
       case 9: /* cmd ::= ROLLBACK trans_opt */
 #line 159 "parse.y"
 {sqlite3RollbackTransaction(pParse);}
-#line 2212 "parse.c"
+#line 2203 "parse.c"
         break;
       case 10: /* cmd ::= SAVEPOINT nm */
 #line 163 "parse.y"
 {
   sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0);
 }
-#line 2219 "parse.c"
+#line 2210 "parse.c"
         break;
       case 11: /* cmd ::= RELEASE savepoint_opt nm */
 #line 166 "parse.y"
 {
   sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0);
 }
-#line 2226 "parse.c"
+#line 2217 "parse.c"
         break;
       case 12: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
 #line 169 "parse.y"
 {
   sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0);
 }
-#line 2233 "parse.c"
+#line 2224 "parse.c"
         break;
       case 13: /* create_table ::= createkw TABLE ifnotexists nm */
 #line 176 "parse.y"
 {
-   sqlite3StartTable(pParse,&yymsp[0].minor.yy0,yymsp[-1].minor.yy52);
+   sqlite3StartTable(pParse,&yymsp[0].minor.yy0,yymsp[-1].minor.yy444);
 }
-#line 2240 "parse.c"
+#line 2231 "parse.c"
         break;
       case 14: /* createkw ::= CREATE */
 #line 179 "parse.y"
 {disableLookaside(pParse);}
-#line 2245 "parse.c"
+#line 2236 "parse.c"
         break;
       case 15: /* ifnotexists ::= */
       case 38: /* autoinc ::= */ yytestcase(yyruleno==38);
@@ -2251,33 +2242,33 @@ static void yy_reduce(
       case 86: /* distinct ::= */ yytestcase(yyruleno==86);
       case 208: /* collate ::= */ yytestcase(yyruleno==208);
 #line 182 "parse.y"
-{yymsp[1].minor.yy52 = 0;}
-#line 2256 "parse.c"
+{yymsp[1].minor.yy444 = 0;}
+#line 2247 "parse.c"
         break;
       case 16: /* ifnotexists ::= IF NOT EXISTS */
 #line 183 "parse.y"
-{yymsp[-2].minor.yy52 = 1;}
-#line 2261 "parse.c"
+{yymsp[-2].minor.yy444 = 1;}
+#line 2252 "parse.c"
         break;
       case 17: /* create_table_args ::= LP columnlist conslist_opt RP */
 #line 185 "parse.y"
 {
   sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);
 }
-#line 2268 "parse.c"
+#line 2259 "parse.c"
         break;
       case 18: /* create_table_args ::= AS select */
 #line 188 "parse.y"
 {
-  sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy279);
-  sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy279);
+  sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy203);
+  sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy203);
 }
-#line 2276 "parse.c"
+#line 2267 "parse.c"
         break;
       case 19: /* columnname ::= nm typetoken */
 #line 194 "parse.y"
 {sqlite3AddColumn(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
-#line 2281 "parse.c"
+#line 2272 "parse.c"
         break;
       case 20: /* nm ::= ID|INDEXED */
 #line 225 "parse.y"
@@ -2286,61 +2277,61 @@ static void yy_reduce(
     sqlite3ErrorMsg(pParse, "keyword \"%T\" is reserved", &yymsp[0].minor.yy0);
   }
 }
-#line 2290 "parse.c"
+#line 2281 "parse.c"
         break;
       case 21: /* typetoken ::= */
       case 56: /* conslist_opt ::= */ yytestcase(yyruleno==56);
       case 92: /* as ::= */ yytestcase(yyruleno==92);
 #line 236 "parse.y"
 {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;}
-#line 2297 "parse.c"
+#line 2288 "parse.c"
         break;
       case 22: /* typetoken ::= typename LP signed RP */
 #line 238 "parse.y"
 {
   yymsp[-3].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z);
 }
-#line 2304 "parse.c"
+#line 2295 "parse.c"
         break;
       case 23: /* typetoken ::= typename LP signed COMMA signed RP */
 #line 241 "parse.y"
 {
   yymsp[-5].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z);
 }
-#line 2311 "parse.c"
+#line 2302 "parse.c"
         break;
       case 24: /* typename ::= typename ID|STRING */
 #line 246 "parse.y"
 {yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);}
-#line 2316 "parse.c"
+#line 2307 "parse.c"
         break;
       case 25: /* ccons ::= CONSTRAINT nm */
       case 58: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==58);
 #line 255 "parse.y"
 {pParse->constraintName = yymsp[0].minor.yy0;}
-#line 2322 "parse.c"
+#line 2313 "parse.c"
         break;
       case 26: /* ccons ::= DEFAULT term */
       case 28: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==28);
 #line 256 "parse.y"
-{sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy162);}
-#line 2328 "parse.c"
+{sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy266);}
+#line 2319 "parse.c"
         break;
       case 27: /* ccons ::= DEFAULT LP expr RP */
 #line 257 "parse.y"
-{sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy162);}
-#line 2333 "parse.c"
+{sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy266);}
+#line 2324 "parse.c"
         break;
       case 29: /* ccons ::= DEFAULT MINUS term */
 #line 259 "parse.y"
 {
   ExprSpan v;
-  v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy162.pExpr, 0);
+  v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy266.pExpr, 0);
   v.zStart = yymsp[-1].minor.yy0.z;
-  v.zEnd = yymsp[0].minor.yy162.zEnd;
+  v.zEnd = yymsp[0].minor.yy266.zEnd;
   sqlite3AddDefaultValue(pParse,&v);
 }
-#line 2344 "parse.c"
+#line 2335 "parse.c"
         break;
       case 30: /* ccons ::= DEFAULT ID|INDEXED */
 #line 266 "parse.y"
@@ -2349,115 +2340,115 @@ static void yy_reduce(
   spanExpr(&v, pParse, TK_STRING, yymsp[0].minor.yy0);
   sqlite3AddDefaultValue(pParse,&v);
 }
-#line 2353 "parse.c"
+#line 2344 "parse.c"
         break;
       case 31: /* ccons ::= NOT NULL onconf */
 #line 276 "parse.y"
-{sqlite3AddNotNull(pParse, yymsp[0].minor.yy52);}
-#line 2358 "parse.c"
+{sqlite3AddNotNull(pParse, yymsp[0].minor.yy444);}
+#line 2349 "parse.c"
         break;
       case 32: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
 #line 278 "parse.y"
-{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy52,yymsp[0].minor.yy52,yymsp[-2].minor.yy52);}
-#line 2363 "parse.c"
+{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy444,yymsp[0].minor.yy444,yymsp[-2].minor.yy444);}
+#line 2354 "parse.c"
         break;
       case 33: /* ccons ::= UNIQUE onconf */
 #line 279 "parse.y"
-{sqlite3CreateIndex(pParse,0,0,0,yymsp[0].minor.yy52,0,0,0,0,
+{sqlite3CreateIndex(pParse,0,0,0,yymsp[0].minor.yy444,0,0,0,0,
                                    SQLITE_IDXTYPE_UNIQUE);}
-#line 2369 "parse.c"
+#line 2360 "parse.c"
         break;
       case 34: /* ccons ::= CHECK LP expr RP */
 #line 281 "parse.y"
-{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy162.pExpr);}
-#line 2374 "parse.c"
+{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy266.pExpr);}
+#line 2365 "parse.c"
         break;
       case 35: /* ccons ::= REFERENCES nm eidlist_opt refargs */
 #line 283 "parse.y"
-{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy382,yymsp[0].minor.yy52);}
-#line 2379 "parse.c"
+{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy162,yymsp[0].minor.yy444);}
+#line 2370 "parse.c"
         break;
       case 36: /* ccons ::= defer_subclause */
 #line 284 "parse.y"
-{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy52);}
-#line 2384 "parse.c"
+{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy444);}
+#line 2375 "parse.c"
         break;
       case 37: /* ccons ::= COLLATE ID|INDEXED */
 #line 285 "parse.y"
 {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
-#line 2389 "parse.c"
+#line 2380 "parse.c"
         break;
       case 39: /* autoinc ::= AUTOINCR */
 #line 290 "parse.y"
-{yymsp[0].minor.yy52 = 1;}
-#line 2394 "parse.c"
+{yymsp[0].minor.yy444 = 1;}
+#line 2385 "parse.c"
         break;
       case 40: /* refargs ::= */
 #line 298 "parse.y"
-{ yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_NONE*0x0101; /* EV: R-19803-45884 */}
-#line 2399 "parse.c"
+{ yymsp[1].minor.yy444 = ON_CONFLICT_ACTION_NONE*0x0101; /* EV: R-19803-45884 */}
+#line 2390 "parse.c"
         break;
       case 41: /* refargs ::= refargs refarg */
 #line 299 "parse.y"
-{ yymsp[-1].minor.yy52 = (yymsp[-1].minor.yy52 & ~yymsp[0].minor.yy107.mask) | yymsp[0].minor.yy107.value; }
-#line 2404 "parse.c"
+{ yymsp[-1].minor.yy444 = (yymsp[-1].minor.yy444 & ~yymsp[0].minor.yy331.mask) | yymsp[0].minor.yy331.value; }
+#line 2395 "parse.c"
         break;
       case 42: /* refarg ::= MATCH nm */
 #line 301 "parse.y"
-{ yymsp[-1].minor.yy107.value = 0;     yymsp[-1].minor.yy107.mask = 0x000000; }
-#line 2409 "parse.c"
+{ yymsp[-1].minor.yy331.value = 0;     yymsp[-1].minor.yy331.mask = 0x000000; }
+#line 2400 "parse.c"
         break;
       case 43: /* refarg ::= ON INSERT refact */
 #line 302 "parse.y"
-{ yymsp[-2].minor.yy107.value = 0;     yymsp[-2].minor.yy107.mask = 0x000000; }
-#line 2414 "parse.c"
+{ yymsp[-2].minor.yy331.value = 0;     yymsp[-2].minor.yy331.mask = 0x000000; }
+#line 2405 "parse.c"
         break;
       case 44: /* refarg ::= ON DELETE refact */
 #line 303 "parse.y"
-{ yymsp[-2].minor.yy107.value = yymsp[0].minor.yy52;     yymsp[-2].minor.yy107.mask = 0x0000ff; }
-#line 2419 "parse.c"
+{ yymsp[-2].minor.yy331.value = yymsp[0].minor.yy444;     yymsp[-2].minor.yy331.mask = 0x0000ff; }
+#line 2410 "parse.c"
         break;
       case 45: /* refarg ::= ON UPDATE refact */
 #line 304 "parse.y"
-{ yymsp[-2].minor.yy107.value = yymsp[0].minor.yy52<<8;  yymsp[-2].minor.yy107.mask = 0x00ff00; }
-#line 2424 "parse.c"
+{ yymsp[-2].minor.yy331.value = yymsp[0].minor.yy444<<8;  yymsp[-2].minor.yy331.mask = 0x00ff00; }
+#line 2415 "parse.c"
         break;
       case 46: /* refact ::= SET NULL */
 #line 306 "parse.y"
-{ yymsp[-1].minor.yy52 = OE_SetNull;  /* EV: R-33326-45252 */}
-#line 2429 "parse.c"
+{ yymsp[-1].minor.yy444 = OE_SetNull;  /* EV: R-33326-45252 */}
+#line 2420 "parse.c"
         break;
       case 47: /* refact ::= SET DEFAULT */
 #line 307 "parse.y"
-{ yymsp[-1].minor.yy52 = OE_SetDflt;  /* EV: R-33326-45252 */}
-#line 2434 "parse.c"
+{ yymsp[-1].minor.yy444 = OE_SetDflt;  /* EV: R-33326-45252 */}
+#line 2425 "parse.c"
         break;
       case 48: /* refact ::= CASCADE */
 #line 308 "parse.y"
-{ yymsp[0].minor.yy52 = OE_Cascade;  /* EV: R-33326-45252 */}
-#line 2439 "parse.c"
+{ yymsp[0].minor.yy444 = OE_Cascade;  /* EV: R-33326-45252 */}
+#line 2430 "parse.c"
         break;
       case 49: /* refact ::= RESTRICT */
 #line 309 "parse.y"
-{ yymsp[0].minor.yy52 = OE_Restrict; /* EV: R-33326-45252 */}
-#line 2444 "parse.c"
+{ yymsp[0].minor.yy444 = OE_Restrict; /* EV: R-33326-45252 */}
+#line 2435 "parse.c"
         break;
       case 50: /* refact ::= NO ACTION */
 #line 310 "parse.y"
-{ yymsp[-1].minor.yy52 = ON_CONFLICT_ACTION_NONE;     /* EV: R-33326-45252 */}
-#line 2449 "parse.c"
+{ yymsp[-1].minor.yy444 = ON_CONFLICT_ACTION_NONE;     /* EV: R-33326-45252 */}
+#line 2440 "parse.c"
         break;
       case 51: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
 #line 312 "parse.y"
-{yymsp[-2].minor.yy52 = 0;}
-#line 2454 "parse.c"
+{yymsp[-2].minor.yy444 = 0;}
+#line 2445 "parse.c"
         break;
       case 52: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
       case 67: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==67);
       case 138: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==138);
 #line 313 "parse.y"
-{yymsp[-1].minor.yy52 = yymsp[0].minor.yy52;}
-#line 2461 "parse.c"
+{yymsp[-1].minor.yy444 = yymsp[0].minor.yy444;}
+#line 2452 "parse.c"
         break;
       case 54: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
       case 71: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==71);
@@ -2465,114 +2456,114 @@ static void yy_reduce(
       case 183: /* in_op ::= NOT IN */ yytestcase(yyruleno==183);
       case 209: /* collate ::= COLLATE ID|INDEXED */ yytestcase(yyruleno==209);
 #line 316 "parse.y"
-{yymsp[-1].minor.yy52 = 1;}
-#line 2470 "parse.c"
+{yymsp[-1].minor.yy444 = 1;}
+#line 2461 "parse.c"
         break;
       case 55: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
 #line 317 "parse.y"
-{yymsp[-1].minor.yy52 = 0;}
-#line 2475 "parse.c"
+{yymsp[-1].minor.yy444 = 0;}
+#line 2466 "parse.c"
         break;
       case 57: /* tconscomma ::= COMMA */
 #line 323 "parse.y"
 {pParse->constraintName.n = 0;}
-#line 2480 "parse.c"
+#line 2471 "parse.c"
         break;
       case 59: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
 #line 327 "parse.y"
-{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy382,yymsp[0].minor.yy52,yymsp[-2].minor.yy52,0);}
-#line 2485 "parse.c"
+{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy162,yymsp[0].minor.yy444,yymsp[-2].minor.yy444,0);}
+#line 2476 "parse.c"
         break;
       case 60: /* tcons ::= UNIQUE LP sortlist RP onconf */
 #line 329 "parse.y"
-{sqlite3CreateIndex(pParse,0,0,yymsp[-2].minor.yy382,yymsp[0].minor.yy52,0,0,0,0,
+{sqlite3CreateIndex(pParse,0,0,yymsp[-2].minor.yy162,yymsp[0].minor.yy444,0,0,0,0,
                                        SQLITE_IDXTYPE_UNIQUE);}
-#line 2491 "parse.c"
+#line 2482 "parse.c"
         break;
       case 61: /* tcons ::= CHECK LP expr RP onconf */
 #line 332 "parse.y"
-{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy162.pExpr);}
-#line 2496 "parse.c"
+{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy266.pExpr);}
+#line 2487 "parse.c"
         break;
       case 62: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
 #line 334 "parse.y"
 {
-    sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy382, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy382, yymsp[-1].minor.yy52);
-    sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy52);
+    sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy162, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy162, yymsp[-1].minor.yy444);
+    sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy444);
 }
-#line 2504 "parse.c"
+#line 2495 "parse.c"
         break;
       case 64: /* onconf ::= */
       case 66: /* orconf ::= */ yytestcase(yyruleno==66);
 #line 348 "parse.y"
-{yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_DEFAULT;}
-#line 2510 "parse.c"
+{yymsp[1].minor.yy444 = ON_CONFLICT_ACTION_DEFAULT;}
+#line 2501 "parse.c"
         break;
       case 65: /* onconf ::= ON CONFLICT resolvetype */
 #line 349 "parse.y"
-{yymsp[-2].minor.yy52 = yymsp[0].minor.yy52;}
-#line 2515 "parse.c"
+{yymsp[-2].minor.yy444 = yymsp[0].minor.yy444;}
+#line 2506 "parse.c"
         break;
       case 68: /* resolvetype ::= IGNORE */
 #line 353 "parse.y"
-{yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_IGNORE;}
-#line 2520 "parse.c"
+{yymsp[0].minor.yy444 = ON_CONFLICT_ACTION_IGNORE;}
+#line 2511 "parse.c"
         break;
       case 69: /* resolvetype ::= REPLACE */
       case 139: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==139);
 #line 354 "parse.y"
-{yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_REPLACE;}
-#line 2526 "parse.c"
+{yymsp[0].minor.yy444 = ON_CONFLICT_ACTION_REPLACE;}
+#line 2517 "parse.c"
         break;
       case 70: /* cmd ::= DROP TABLE ifexists fullname */
 #line 358 "parse.y"
 {
-  sqlite3DropTable(pParse, yymsp[0].minor.yy387, 0, yymsp[-1].minor.yy52);
+  sqlite3DropTable(pParse, yymsp[0].minor.yy41, 0, yymsp[-1].minor.yy444);
 }
-#line 2533 "parse.c"
+#line 2524 "parse.c"
         break;
       case 73: /* cmd ::= createkw VIEW ifnotexists nm eidlist_opt AS select */
 #line 369 "parse.y"
 {
-  sqlite3CreateView(pParse, &yymsp[-6].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy382, yymsp[0].minor.yy279, yymsp[-4].minor.yy52);
+  sqlite3CreateView(pParse, &yymsp[-6].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy162, yymsp[0].minor.yy203, yymsp[-4].minor.yy444);
 }
-#line 2540 "parse.c"
+#line 2531 "parse.c"
         break;
       case 74: /* cmd ::= DROP VIEW ifexists fullname */
 #line 372 "parse.y"
 {
-  sqlite3DropTable(pParse, yymsp[0].minor.yy387, 1, yymsp[-1].minor.yy52);
+  sqlite3DropTable(pParse, yymsp[0].minor.yy41, 1, yymsp[-1].minor.yy444);
 }
-#line 2547 "parse.c"
+#line 2538 "parse.c"
         break;
       case 75: /* cmd ::= select */
 #line 379 "parse.y"
 {
   SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
-  sqlite3Select(pParse, yymsp[0].minor.yy279, &dest);
-  sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy279);
+  sqlite3Select(pParse, yymsp[0].minor.yy203, &dest);
+  sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy203);
 }
-#line 2556 "parse.c"
+#line 2547 "parse.c"
         break;
       case 76: /* select ::= with selectnowith */
 #line 416 "parse.y"
 {
-  Select *p = yymsp[0].minor.yy279;
+  Select *p = yymsp[0].minor.yy203;
   if( p ){
-    p->pWith = yymsp[-1].minor.yy151;
+    p->pWith = yymsp[-1].minor.yy273;
     parserDoubleLinkSelect(pParse, p);
   }else{
-    sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy151);
+    sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy273);
   }
-  yymsp[-1].minor.yy279 = p; /*A-overwrites-W*/
+  yymsp[-1].minor.yy203 = p; /*A-overwrites-W*/
 }
-#line 2570 "parse.c"
+#line 2561 "parse.c"
         break;
       case 77: /* selectnowith ::= selectnowith multiselect_op oneselect */
 #line 429 "parse.y"
 {
-  Select *pRhs = yymsp[0].minor.yy279;
-  Select *pLhs = yymsp[-2].minor.yy279;
+  Select *pRhs = yymsp[0].minor.yy203;
+  Select *pLhs = yymsp[-2].minor.yy203;
   if( pRhs && pRhs->pPrior ){
     SrcList *pFrom;
     Token x;
@@ -2582,28 +2573,28 @@ static void yy_reduce(
     pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0,0);
   }
   if( pRhs ){
-    pRhs->op = (u8)yymsp[-1].minor.yy52;
+    pRhs->op = (u8)yymsp[-1].minor.yy444;
     pRhs->pPrior = pLhs;
     if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
     pRhs->selFlags &= ~SF_MultiValue;
-    if( yymsp[-1].minor.yy52!=TK_ALL ) pParse->hasCompound = 1;
+    if( yymsp[-1].minor.yy444!=TK_ALL ) pParse->hasCompound = 1;
   }else{
     sqlite3SelectDelete(pParse->db, pLhs);
   }
-  yymsp[-2].minor.yy279 = pRhs;
+  yymsp[-2].minor.yy203 = pRhs;
 }
-#line 2596 "parse.c"
+#line 2587 "parse.c"
         break;
       case 78: /* multiselect_op ::= UNION */
       case 80: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==80);
 #line 452 "parse.y"
-{yymsp[0].minor.yy52 = yymsp[0].major; /*A-overwrites-OP*/}
-#line 2602 "parse.c"
+{yymsp[0].minor.yy444 = yymsp[0].major; /*A-overwrites-OP*/}
+#line 2593 "parse.c"
         break;
       case 79: /* multiselect_op ::= UNION ALL */
 #line 453 "parse.y"
-{yymsp[-1].minor.yy52 = TK_ALL;}
-#line 2607 "parse.c"
+{yymsp[-1].minor.yy444 = TK_ALL;}
+#line 2598 "parse.c"
         break;
       case 81: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
 #line 457 "parse.y"
@@ -2611,7 +2602,7 @@ static void yy_reduce(
 #ifdef SELECTTRACE_ENABLED
   Token s = yymsp[-8].minor.yy0; /*A-overwrites-S*/
 #endif
-  yymsp[-8].minor.yy279 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy382,yymsp[-5].minor.yy387,yymsp[-4].minor.yy362,yymsp[-3].minor.yy382,yymsp[-2].minor.yy362,yymsp[-1].minor.yy382,yymsp[-7].minor.yy52,yymsp[0].minor.yy384.pLimit,yymsp[0].minor.yy384.pOffset);
+  yymsp[-8].minor.yy203 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy162,yymsp[-5].minor.yy41,yymsp[-4].minor.yy396,yymsp[-3].minor.yy162,yymsp[-2].minor.yy396,yymsp[-1].minor.yy162,yymsp[-7].minor.yy444,yymsp[0].minor.yy76.pLimit,yymsp[0].minor.yy76.pOffset);
 #ifdef SELECTTRACE_ENABLED
   /* Populate the Select.zSelName[] string that is used to help with
   ** query planner debugging, to differentiate between multiple Select
@@ -2622,55 +2613,55 @@ static void yy_reduce(
   ** comment to be the zSelName value.  Otherwise, the label is #N where
   ** is an integer that is incremented with each SELECT statement seen.
   */
-  if( yymsp[-8].minor.yy279!=0 ){
+  if( yymsp[-8].minor.yy203!=0 ){
     const char *z = s.z+6;
     int i;
-    sqlite3_snprintf(sizeof(yymsp[-8].minor.yy279->zSelName), yymsp[-8].minor.yy279->zSelName, "#%d",
+    sqlite3_snprintf(sizeof(yymsp[-8].minor.yy203->zSelName), yymsp[-8].minor.yy203->zSelName, "#%d",
                      ++pParse->nSelect);
     while( z[0]==' ' ) z++;
     if( z[0]=='/' && z[1]=='*' ){
       z += 2;
       while( z[0]==' ' ) z++;
       for(i=0; sqlite3Isalnum(z[i]); i++){}
-      sqlite3_snprintf(sizeof(yymsp[-8].minor.yy279->zSelName), yymsp[-8].minor.yy279->zSelName, "%.*s", i, z);
+      sqlite3_snprintf(sizeof(yymsp[-8].minor.yy203->zSelName), yymsp[-8].minor.yy203->zSelName, "%.*s", i, z);
     }
   }
 #endif /* SELECTRACE_ENABLED */
 }
-#line 2641 "parse.c"
+#line 2632 "parse.c"
         break;
       case 82: /* values ::= VALUES LP nexprlist RP */
 #line 491 "parse.y"
 {
-  yymsp[-3].minor.yy279 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy382,0,0,0,0,0,SF_Values,0,0);
+  yymsp[-3].minor.yy203 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy162,0,0,0,0,0,SF_Values,0,0);
 }
-#line 2648 "parse.c"
+#line 2639 "parse.c"
         break;
       case 83: /* values ::= values COMMA LP exprlist RP */
 #line 494 "parse.y"
 {
-  Select *pRight, *pLeft = yymsp[-4].minor.yy279;
-  pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy382,0,0,0,0,0,SF_Values|SF_MultiValue,0,0);
+  Select *pRight, *pLeft = yymsp[-4].minor.yy203;
+  pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy162,0,0,0,0,0,SF_Values|SF_MultiValue,0,0);
   if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
   if( pRight ){
     pRight->op = TK_ALL;
     pRight->pPrior = pLeft;
-    yymsp[-4].minor.yy279 = pRight;
+    yymsp[-4].minor.yy203 = pRight;
   }else{
-    yymsp[-4].minor.yy279 = pLeft;
+    yymsp[-4].minor.yy203 = pLeft;
   }
 }
-#line 2664 "parse.c"
+#line 2655 "parse.c"
         break;
       case 84: /* distinct ::= DISTINCT */
 #line 511 "parse.y"
-{yymsp[0].minor.yy52 = SF_Distinct;}
-#line 2669 "parse.c"
+{yymsp[0].minor.yy444 = SF_Distinct;}
+#line 2660 "parse.c"
         break;
       case 85: /* distinct ::= ALL */
 #line 512 "parse.y"
-{yymsp[0].minor.yy52 = SF_All;}
-#line 2674 "parse.c"
+{yymsp[0].minor.yy444 = SF_All;}
+#line 2665 "parse.c"
         break;
       case 87: /* sclp ::= */
       case 113: /* orderby_opt ::= */ yytestcase(yyruleno==113);
@@ -2679,25 +2670,25 @@ static void yy_reduce(
       case 199: /* paren_exprlist ::= */ yytestcase(yyruleno==199);
       case 204: /* eidlist_opt ::= */ yytestcase(yyruleno==204);
 #line 525 "parse.y"
-{yymsp[1].minor.yy382 = 0;}
-#line 2684 "parse.c"
+{yymsp[1].minor.yy162 = 0;}
+#line 2675 "parse.c"
         break;
       case 88: /* selcollist ::= sclp expr as */
 #line 526 "parse.y"
 {
-   yymsp[-2].minor.yy382 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy382, yymsp[-1].minor.yy162.pExpr);
-   if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-2].minor.yy382, &yymsp[0].minor.yy0, 1);
-   sqlite3ExprListSetSpan(pParse,yymsp[-2].minor.yy382,&yymsp[-1].minor.yy162);
+   yymsp[-2].minor.yy162 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy162, yymsp[-1].minor.yy266.pExpr);
+   if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-2].minor.yy162, &yymsp[0].minor.yy0, 1);
+   sqlite3ExprListSetSpan(pParse,yymsp[-2].minor.yy162,&yymsp[-1].minor.yy266);
 }
-#line 2693 "parse.c"
+#line 2684 "parse.c"
         break;
       case 89: /* selcollist ::= sclp STAR */
 #line 531 "parse.y"
 {
   Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
-  yymsp[-1].minor.yy382 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy382, p);
+  yymsp[-1].minor.yy162 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy162, p);
 }
-#line 2701 "parse.c"
+#line 2692 "parse.c"
         break;
       case 90: /* selcollist ::= sclp nm DOT STAR */
 #line 535 "parse.y"
@@ -2705,122 +2696,122 @@ static void yy_reduce(
   Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
   Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
-  yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382, pDot);
+  yymsp[-3].minor.yy162 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy162, pDot);
 }
-#line 2711 "parse.c"
+#line 2702 "parse.c"
         break;
       case 91: /* as ::= AS nm */
       case 218: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==218);
       case 219: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==219);
 #line 546 "parse.y"
 {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}
-#line 2718 "parse.c"
+#line 2709 "parse.c"
         break;
       case 93: /* from ::= */
 #line 560 "parse.y"
-{yymsp[1].minor.yy387 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy387));}
-#line 2723 "parse.c"
+{yymsp[1].minor.yy41 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy41));}
+#line 2714 "parse.c"
         break;
       case 94: /* from ::= FROM seltablist */
 #line 561 "parse.y"
 {
-  yymsp[-1].minor.yy387 = yymsp[0].minor.yy387;
-  sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy387);
+  yymsp[-1].minor.yy41 = yymsp[0].minor.yy41;
+  sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy41);
 }
-#line 2731 "parse.c"
+#line 2722 "parse.c"
         break;
       case 95: /* stl_prefix ::= seltablist joinop */
 #line 569 "parse.y"
 {
-   if( ALWAYS(yymsp[-1].minor.yy387 && yymsp[-1].minor.yy387->nSrc>0) ) yymsp[-1].minor.yy387->a[yymsp[-1].minor.yy387->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy52;
+   if( ALWAYS(yymsp[-1].minor.yy41 && yymsp[-1].minor.yy41->nSrc>0) ) yymsp[-1].minor.yy41->a[yymsp[-1].minor.yy41->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy444;
 }
-#line 2738 "parse.c"
+#line 2729 "parse.c"
         break;
       case 96: /* stl_prefix ::= */
 #line 572 "parse.y"
-{yymsp[1].minor.yy387 = 0;}
-#line 2743 "parse.c"
+{yymsp[1].minor.yy41 = 0;}
+#line 2734 "parse.c"
         break;
       case 97: /* seltablist ::= stl_prefix nm as indexed_opt on_opt using_opt */
 #line 574 "parse.y"
 {
-  yymsp[-5].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy387,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);
-  sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy387, &yymsp[-2].minor.yy0);
+  yymsp[-5].minor.yy41 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy41,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy396,yymsp[0].minor.yy306);
+  sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy41, &yymsp[-2].minor.yy0);
 }
-#line 2751 "parse.c"
+#line 2742 "parse.c"
         break;
       case 98: /* seltablist ::= stl_prefix nm LP exprlist RP as on_opt using_opt */
 #line 579 "parse.y"
 {
-  yymsp[-7].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy387,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);
-  sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy387, yymsp[-4].minor.yy382);
+  yymsp[-7].minor.yy41 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy41,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy396,yymsp[0].minor.yy306);
+  sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy41, yymsp[-4].minor.yy162);
 }
-#line 2759 "parse.c"
+#line 2750 "parse.c"
         break;
       case 99: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
 #line 585 "parse.y"
 {
-    yymsp[-6].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy387,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy279,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);
+    yymsp[-6].minor.yy41 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy41,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy203,yymsp[-1].minor.yy396,yymsp[0].minor.yy306);
   }
-#line 2766 "parse.c"
+#line 2757 "parse.c"
         break;
       case 100: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
 #line 589 "parse.y"
 {
-    if( yymsp[-6].minor.yy387==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy362==0 && yymsp[0].minor.yy40==0 ){
-      yymsp[-6].minor.yy387 = yymsp[-4].minor.yy387;
-    }else if( yymsp[-4].minor.yy387->nSrc==1 ){
-      yymsp[-6].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy387,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);
-      if( yymsp[-6].minor.yy387 ){
-        struct SrcList_item *pNew = &yymsp[-6].minor.yy387->a[yymsp[-6].minor.yy387->nSrc-1];
-        struct SrcList_item *pOld = yymsp[-4].minor.yy387->a;
+    if( yymsp[-6].minor.yy41==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy396==0 && yymsp[0].minor.yy306==0 ){
+      yymsp[-6].minor.yy41 = yymsp[-4].minor.yy41;
+    }else if( yymsp[-4].minor.yy41->nSrc==1 ){
+      yymsp[-6].minor.yy41 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy41,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy396,yymsp[0].minor.yy306);
+      if( yymsp[-6].minor.yy41 ){
+        struct SrcList_item *pNew = &yymsp[-6].minor.yy41->a[yymsp[-6].minor.yy41->nSrc-1];
+        struct SrcList_item *pOld = yymsp[-4].minor.yy41->a;
         pNew->zName = pOld->zName;
         pNew->pSelect = pOld->pSelect;
         pOld->zName =  0;
         pOld->pSelect = 0;
       }
-      sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy387);
+      sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy41);
     }else{
       Select *pSubquery;
-      sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy387);
-      pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy387,0,0,0,0,SF_NestedFrom,0,0);
-      yymsp[-6].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy387,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);
+      sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy41);
+      pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy41,0,0,0,0,SF_NestedFrom,0,0);
+      yymsp[-6].minor.yy41 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy41,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy396,yymsp[0].minor.yy306);
     }
   }
-#line 2791 "parse.c"
+#line 2782 "parse.c"
         break;
       case 101: /* fullname ::= nm */
 #line 615 "parse.y"
-{yymsp[0].minor.yy387 = sqlite3SrcListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
-#line 2796 "parse.c"
+{yymsp[0].minor.yy41 = sqlite3SrcListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
+#line 2787 "parse.c"
         break;
       case 102: /* joinop ::= COMMA|JOIN */
 #line 621 "parse.y"
-{ yymsp[0].minor.yy52 = JT_INNER; }
-#line 2801 "parse.c"
+{ yymsp[0].minor.yy444 = JT_INNER; }
+#line 2792 "parse.c"
         break;
       case 103: /* joinop ::= JOIN_KW JOIN */
 #line 623 "parse.y"
-{yymsp[-1].minor.yy52 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0);  /*X-overwrites-A*/}
-#line 2806 "parse.c"
+{yymsp[-1].minor.yy444 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0);  /*X-overwrites-A*/}
+#line 2797 "parse.c"
         break;
       case 104: /* joinop ::= JOIN_KW join_nm JOIN */
 #line 625 "parse.y"
-{yymsp[-2].minor.yy52 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
-#line 2811 "parse.c"
+{yymsp[-2].minor.yy444 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
+#line 2802 "parse.c"
         break;
       case 105: /* joinop ::= JOIN_KW join_nm join_nm JOIN */
 #line 627 "parse.y"
-{yymsp[-3].minor.yy52 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
-#line 2816 "parse.c"
+{yymsp[-3].minor.yy444 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
+#line 2807 "parse.c"
         break;
       case 106: /* on_opt ::= ON expr */
       case 123: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==123);
       case 130: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==130);
       case 192: /* case_else ::= ELSE expr */ yytestcase(yyruleno==192);
 #line 631 "parse.y"
-{yymsp[-1].minor.yy362 = yymsp[0].minor.yy162.pExpr;}
-#line 2824 "parse.c"
+{yymsp[-1].minor.yy396 = yymsp[0].minor.yy266.pExpr;}
+#line 2815 "parse.c"
         break;
       case 107: /* on_opt ::= */
       case 122: /* having_opt ::= */ yytestcase(yyruleno==122);
@@ -2828,313 +2819,313 @@ static void yy_reduce(
       case 193: /* case_else ::= */ yytestcase(yyruleno==193);
       case 195: /* case_operand ::= */ yytestcase(yyruleno==195);
 #line 632 "parse.y"
-{yymsp[1].minor.yy362 = 0;}
-#line 2833 "parse.c"
+{yymsp[1].minor.yy396 = 0;}
+#line 2824 "parse.c"
         break;
       case 108: /* indexed_opt ::= */
 #line 645 "parse.y"
 {yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;}
-#line 2838 "parse.c"
+#line 2829 "parse.c"
         break;
       case 109: /* indexed_opt ::= INDEXED BY nm */
 #line 646 "parse.y"
 {yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;}
-#line 2843 "parse.c"
+#line 2834 "parse.c"
         break;
       case 110: /* indexed_opt ::= NOT INDEXED */
 #line 647 "parse.y"
 {yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;}
-#line 2848 "parse.c"
+#line 2839 "parse.c"
         break;
       case 111: /* using_opt ::= USING LP idlist RP */
 #line 651 "parse.y"
-{yymsp[-3].minor.yy40 = yymsp[-1].minor.yy40;}
-#line 2853 "parse.c"
+{yymsp[-3].minor.yy306 = yymsp[-1].minor.yy306;}
+#line 2844 "parse.c"
         break;
       case 112: /* using_opt ::= */
       case 140: /* idlist_opt ::= */ yytestcase(yyruleno==140);
 #line 652 "parse.y"
-{yymsp[1].minor.yy40 = 0;}
-#line 2859 "parse.c"
+{yymsp[1].minor.yy306 = 0;}
+#line 2850 "parse.c"
         break;
       case 114: /* orderby_opt ::= ORDER BY sortlist */
       case 121: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==121);
 #line 666 "parse.y"
-{yymsp[-2].minor.yy382 = yymsp[0].minor.yy382;}
-#line 2865 "parse.c"
+{yymsp[-2].minor.yy162 = yymsp[0].minor.yy162;}
+#line 2856 "parse.c"
         break;
       case 115: /* sortlist ::= sortlist COMMA expr sortorder */
 #line 667 "parse.y"
 {
-  yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382,yymsp[-1].minor.yy162.pExpr);
-  sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy382,yymsp[0].minor.yy52);
+  yymsp[-3].minor.yy162 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy162,yymsp[-1].minor.yy266.pExpr);
+  sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy162,yymsp[0].minor.yy444);
 }
-#line 2873 "parse.c"
+#line 2864 "parse.c"
         break;
       case 116: /* sortlist ::= expr sortorder */
 #line 671 "parse.y"
 {
-  yymsp[-1].minor.yy382 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy162.pExpr); /*A-overwrites-Y*/
-  sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy382,yymsp[0].minor.yy52);
+  yymsp[-1].minor.yy162 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy266.pExpr); /*A-overwrites-Y*/
+  sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy162,yymsp[0].minor.yy444);
 }
-#line 2881 "parse.c"
+#line 2872 "parse.c"
         break;
       case 117: /* sortorder ::= ASC */
 #line 678 "parse.y"
-{yymsp[0].minor.yy52 = SQLITE_SO_ASC;}
-#line 2886 "parse.c"
+{yymsp[0].minor.yy444 = SQLITE_SO_ASC;}
+#line 2877 "parse.c"
         break;
       case 118: /* sortorder ::= DESC */
 #line 679 "parse.y"
-{yymsp[0].minor.yy52 = SQLITE_SO_DESC;}
-#line 2891 "parse.c"
+{yymsp[0].minor.yy444 = SQLITE_SO_DESC;}
+#line 2882 "parse.c"
         break;
       case 119: /* sortorder ::= */
 #line 680 "parse.y"
-{yymsp[1].minor.yy52 = SQLITE_SO_UNDEFINED;}
-#line 2896 "parse.c"
+{yymsp[1].minor.yy444 = SQLITE_SO_UNDEFINED;}
+#line 2887 "parse.c"
         break;
       case 124: /* limit_opt ::= */
 #line 705 "parse.y"
-{yymsp[1].minor.yy384.pLimit = 0; yymsp[1].minor.yy384.pOffset = 0;}
-#line 2901 "parse.c"
+{yymsp[1].minor.yy76.pLimit = 0; yymsp[1].minor.yy76.pOffset = 0;}
+#line 2892 "parse.c"
         break;
       case 125: /* limit_opt ::= LIMIT expr */
 #line 706 "parse.y"
-{yymsp[-1].minor.yy384.pLimit = yymsp[0].minor.yy162.pExpr; yymsp[-1].minor.yy384.pOffset = 0;}
-#line 2906 "parse.c"
+{yymsp[-1].minor.yy76.pLimit = yymsp[0].minor.yy266.pExpr; yymsp[-1].minor.yy76.pOffset = 0;}
+#line 2897 "parse.c"
         break;
       case 126: /* limit_opt ::= LIMIT expr OFFSET expr */
 #line 708 "parse.y"
-{yymsp[-3].minor.yy384.pLimit = yymsp[-2].minor.yy162.pExpr; yymsp[-3].minor.yy384.pOffset = yymsp[0].minor.yy162.pExpr;}
-#line 2911 "parse.c"
+{yymsp[-3].minor.yy76.pLimit = yymsp[-2].minor.yy266.pExpr; yymsp[-3].minor.yy76.pOffset = yymsp[0].minor.yy266.pExpr;}
+#line 2902 "parse.c"
         break;
       case 127: /* limit_opt ::= LIMIT expr COMMA expr */
 #line 710 "parse.y"
-{yymsp[-3].minor.yy384.pOffset = yymsp[-2].minor.yy162.pExpr; yymsp[-3].minor.yy384.pLimit = yymsp[0].minor.yy162.pExpr;}
-#line 2916 "parse.c"
+{yymsp[-3].minor.yy76.pOffset = yymsp[-2].minor.yy266.pExpr; yymsp[-3].minor.yy76.pLimit = yymsp[0].minor.yy266.pExpr;}
+#line 2907 "parse.c"
         break;
       case 128: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */
 #line 727 "parse.y"
 {
-  sqlite3WithPush(pParse, yymsp[-5].minor.yy151, 1);
-  sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy387, &yymsp[-1].minor.yy0);
+  sqlite3WithPush(pParse, yymsp[-5].minor.yy273, 1);
+  sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy41, &yymsp[-1].minor.yy0);
   sqlSubProgramsRemaining = SQL_MAX_COMPILING_TRIGGERS;
   /* Instruct SQL to initate Tarantool's transaction.  */
   pParse->initiateTTrans = true;
-  sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy387,yymsp[0].minor.yy362);
+  sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy41,yymsp[0].minor.yy396);
 }
-#line 2928 "parse.c"
+#line 2919 "parse.c"
         break;
       case 131: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */
 #line 760 "parse.y"
 {
-  sqlite3WithPush(pParse, yymsp[-7].minor.yy151, 1);
-  sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy387, &yymsp[-3].minor.yy0);
-  sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy382,"set list"); 
+  sqlite3WithPush(pParse, yymsp[-7].minor.yy273, 1);
+  sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy41, &yymsp[-3].minor.yy0);
+  sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy162,"set list"); 
   sqlSubProgramsRemaining = SQL_MAX_COMPILING_TRIGGERS;
   /* Instruct SQL to initate Tarantool's transaction.  */
   pParse->initiateTTrans = true;
-  sqlite3Update(pParse,yymsp[-4].minor.yy387,yymsp[-1].minor.yy382,yymsp[0].minor.yy362,yymsp[-5].minor.yy52);
+  sqlite3Update(pParse,yymsp[-4].minor.yy41,yymsp[-1].minor.yy162,yymsp[0].minor.yy396,yymsp[-5].minor.yy444);
 }
-#line 2941 "parse.c"
+#line 2932 "parse.c"
         break;
       case 132: /* setlist ::= setlist COMMA nm EQ expr */
 #line 774 "parse.y"
 {
-  yymsp[-4].minor.yy382 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy382, yymsp[0].minor.yy162.pExpr);
-  sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy382, &yymsp[-2].minor.yy0, 1);
+  yymsp[-4].minor.yy162 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy162, yymsp[0].minor.yy266.pExpr);
+  sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy162, &yymsp[-2].minor.yy0, 1);
 }
-#line 2949 "parse.c"
+#line 2940 "parse.c"
         break;
       case 133: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
 #line 778 "parse.y"
 {
-  yymsp[-6].minor.yy382 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy382, yymsp[-3].minor.yy40, yymsp[0].minor.yy162.pExpr);
+  yymsp[-6].minor.yy162 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy162, yymsp[-3].minor.yy306, yymsp[0].minor.yy266.pExpr);
 }
-#line 2956 "parse.c"
+#line 2947 "parse.c"
         break;
       case 134: /* setlist ::= nm EQ expr */
 #line 781 "parse.y"
 {
-  yylhsminor.yy382 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy162.pExpr);
-  sqlite3ExprListSetName(pParse, yylhsminor.yy382, &yymsp[-2].minor.yy0, 1);
+  yylhsminor.yy162 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy266.pExpr);
+  sqlite3ExprListSetName(pParse, yylhsminor.yy162, &yymsp[-2].minor.yy0, 1);
 }
-#line 2964 "parse.c"
-  yymsp[-2].minor.yy382 = yylhsminor.yy382;
+#line 2955 "parse.c"
+  yymsp[-2].minor.yy162 = yylhsminor.yy162;
         break;
       case 135: /* setlist ::= LP idlist RP EQ expr */
 #line 785 "parse.y"
 {
-  yymsp[-4].minor.yy382 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy40, yymsp[0].minor.yy162.pExpr);
+  yymsp[-4].minor.yy162 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy306, yymsp[0].minor.yy266.pExpr);
 }
-#line 2972 "parse.c"
+#line 2963 "parse.c"
         break;
       case 136: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */
 #line 791 "parse.y"
 {
-  sqlite3WithPush(pParse, yymsp[-5].minor.yy151, 1);
+  sqlite3WithPush(pParse, yymsp[-5].minor.yy273, 1);
   sqlSubProgramsRemaining = SQL_MAX_COMPILING_TRIGGERS;
   /* Instruct SQL to initate Tarantool's transaction.  */
   pParse->initiateTTrans = true;
-  sqlite3Insert(pParse, yymsp[-2].minor.yy387, yymsp[0].minor.yy279, yymsp[-1].minor.yy40, yymsp[-4].minor.yy52);
+  sqlite3Insert(pParse, yymsp[-2].minor.yy41, yymsp[0].minor.yy203, yymsp[-1].minor.yy306, yymsp[-4].minor.yy444);
 }
-#line 2983 "parse.c"
+#line 2974 "parse.c"
         break;
       case 137: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */
 #line 799 "parse.y"
 {
-  sqlite3WithPush(pParse, yymsp[-6].minor.yy151, 1);
+  sqlite3WithPush(pParse, yymsp[-6].minor.yy273, 1);
   sqlSubProgramsRemaining = SQL_MAX_COMPILING_TRIGGERS;
   /* Instruct SQL to initate Tarantool's transaction.  */
   pParse->initiateTTrans = true;
-  sqlite3Insert(pParse, yymsp[-3].minor.yy387, 0, yymsp[-2].minor.yy40, yymsp[-5].minor.yy52);
+  sqlite3Insert(pParse, yymsp[-3].minor.yy41, 0, yymsp[-2].minor.yy306, yymsp[-5].minor.yy444);
 }
-#line 2994 "parse.c"
+#line 2985 "parse.c"
         break;
       case 141: /* idlist_opt ::= LP idlist RP */
 #line 817 "parse.y"
-{yymsp[-2].minor.yy40 = yymsp[-1].minor.yy40;}
-#line 2999 "parse.c"
+{yymsp[-2].minor.yy306 = yymsp[-1].minor.yy306;}
+#line 2990 "parse.c"
         break;
       case 142: /* idlist ::= idlist COMMA nm */
 #line 819 "parse.y"
-{yymsp[-2].minor.yy40 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy40,&yymsp[0].minor.yy0);}
-#line 3004 "parse.c"
+{yymsp[-2].minor.yy306 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy306,&yymsp[0].minor.yy0);}
+#line 2995 "parse.c"
         break;
       case 143: /* idlist ::= nm */
 #line 821 "parse.y"
-{yymsp[0].minor.yy40 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
-#line 3009 "parse.c"
+{yymsp[0].minor.yy306 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
+#line 3000 "parse.c"
         break;
       case 144: /* expr ::= LP expr RP */
 #line 870 "parse.y"
-{spanSet(&yymsp[-2].minor.yy162,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/  yymsp[-2].minor.yy162.pExpr = yymsp[-1].minor.yy162.pExpr;}
-#line 3014 "parse.c"
+{spanSet(&yymsp[-2].minor.yy266,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/  yymsp[-2].minor.yy266.pExpr = yymsp[-1].minor.yy266.pExpr;}
+#line 3005 "parse.c"
         break;
       case 145: /* term ::= NULL */
       case 149: /* term ::= FLOAT|BLOB */ yytestcase(yyruleno==149);
       case 150: /* term ::= STRING */ yytestcase(yyruleno==150);
 #line 871 "parse.y"
-{spanExpr(&yymsp[0].minor.yy162,pParse,yymsp[0].major,yymsp[0].minor.yy0);/*A-overwrites-X*/}
-#line 3021 "parse.c"
+{spanExpr(&yymsp[0].minor.yy266,pParse,yymsp[0].major,yymsp[0].minor.yy0);/*A-overwrites-X*/}
+#line 3012 "parse.c"
         break;
       case 146: /* expr ::= ID|INDEXED */
       case 147: /* expr ::= JOIN_KW */ yytestcase(yyruleno==147);
 #line 872 "parse.y"
-{spanExpr(&yymsp[0].minor.yy162,pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
-#line 3027 "parse.c"
+{spanExpr(&yymsp[0].minor.yy266,pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+#line 3018 "parse.c"
         break;
       case 148: /* expr ::= nm DOT nm */
 #line 874 "parse.y"
 {
   Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
   Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1);
-  spanSet(&yymsp[-2].minor.yy162,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
-  yymsp[-2].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
+  spanSet(&yymsp[-2].minor.yy266,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
+  yymsp[-2].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
 }
-#line 3037 "parse.c"
+#line 3028 "parse.c"
         break;
       case 151: /* term ::= INTEGER */
 #line 882 "parse.y"
 {
-  yylhsminor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
-  yylhsminor.yy162.zStart = yymsp[0].minor.yy0.z;
-  yylhsminor.yy162.zEnd = yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n;
-  if( yylhsminor.yy162.pExpr ) yylhsminor.yy162.pExpr->flags |= EP_Leaf;
+  yylhsminor.yy266.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
+  yylhsminor.yy266.zStart = yymsp[0].minor.yy0.z;
+  yylhsminor.yy266.zEnd = yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n;
+  if( yylhsminor.yy266.pExpr ) yylhsminor.yy266.pExpr->flags |= EP_Leaf;
 }
-#line 3047 "parse.c"
-  yymsp[0].minor.yy162 = yylhsminor.yy162;
+#line 3038 "parse.c"
+  yymsp[0].minor.yy266 = yylhsminor.yy266;
         break;
       case 152: /* expr ::= VARIABLE */
 #line 888 "parse.y"
 {
   if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){
     u32 n = yymsp[0].minor.yy0.n;
-    spanExpr(&yymsp[0].minor.yy162, pParse, TK_VARIABLE, yymsp[0].minor.yy0);
-    sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy162.pExpr, n);
+    spanExpr(&yymsp[0].minor.yy266, pParse, TK_VARIABLE, yymsp[0].minor.yy0);
+    sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy266.pExpr, n);
   }else{
     /* When doing a nested parse, one can include terms in an expression
     ** that look like this:   #1 #2 ...  These terms refer to registers
     ** in the virtual machine.  #N is the N-th register. */
     Token t = yymsp[0].minor.yy0; /*A-overwrites-X*/
     assert( t.n>=2 );
-    spanSet(&yymsp[0].minor.yy162, &t, &t);
+    spanSet(&yymsp[0].minor.yy266, &t, &t);
     if( pParse->nested==0 ){
       sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
-      yymsp[0].minor.yy162.pExpr = 0;
+      yymsp[0].minor.yy266.pExpr = 0;
     }else{
-      yymsp[0].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
-      if( yymsp[0].minor.yy162.pExpr ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy162.pExpr->iTable);
+      yymsp[0].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
+      if( yymsp[0].minor.yy266.pExpr ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy266.pExpr->iTable);
     }
   }
 }
-#line 3073 "parse.c"
+#line 3064 "parse.c"
         break;
       case 153: /* expr ::= expr COLLATE ID|INDEXED */
 #line 909 "parse.y"
 {
-  yymsp[-2].minor.yy162.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy162.pExpr, &yymsp[0].minor.yy0, 1);
-  yymsp[-2].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
+  yymsp[-2].minor.yy266.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy266.pExpr, &yymsp[0].minor.yy0, 1);
+  yymsp[-2].minor.yy266.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
 }
-#line 3081 "parse.c"
+#line 3072 "parse.c"
         break;
       case 154: /* expr ::= CAST LP expr AS typetoken RP */
 #line 914 "parse.y"
 {
-  spanSet(&yymsp[-5].minor.yy162,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
-  yymsp[-5].minor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
-  sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy162.pExpr, yymsp[-3].minor.yy162.pExpr, 0);
+  spanSet(&yymsp[-5].minor.yy266,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
+  yymsp[-5].minor.yy266.pExpr = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
+  sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy266.pExpr, yymsp[-3].minor.yy266.pExpr, 0);
 }
-#line 3090 "parse.c"
+#line 3081 "parse.c"
         break;
       case 155: /* expr ::= ID|INDEXED LP distinct exprlist RP */
 #line 920 "parse.y"
 {
-  if( yymsp[-1].minor.yy382 && yymsp[-1].minor.yy382->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
+  if( yymsp[-1].minor.yy162 && yymsp[-1].minor.yy162->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
     sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0);
   }
-  yylhsminor.yy162.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy382, &yymsp[-4].minor.yy0);
-  spanSet(&yylhsminor.yy162,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
-  if( yymsp[-2].minor.yy52==SF_Distinct && yylhsminor.yy162.pExpr ){
-    yylhsminor.yy162.pExpr->flags |= EP_Distinct;
+  yylhsminor.yy266.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy162, &yymsp[-4].minor.yy0);
+  spanSet(&yylhsminor.yy266,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
+  if( yymsp[-2].minor.yy444==SF_Distinct && yylhsminor.yy266.pExpr ){
+    yylhsminor.yy266.pExpr->flags |= EP_Distinct;
   }
 }
-#line 3104 "parse.c"
-  yymsp[-4].minor.yy162 = yylhsminor.yy162;
+#line 3095 "parse.c"
+  yymsp[-4].minor.yy266 = yylhsminor.yy266;
         break;
       case 156: /* expr ::= ID|INDEXED LP STAR RP */
 #line 930 "parse.y"
 {
-  yylhsminor.yy162.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);
-  spanSet(&yylhsminor.yy162,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
+  yylhsminor.yy266.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);
+  spanSet(&yylhsminor.yy266,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
 }
-#line 3113 "parse.c"
-  yymsp[-3].minor.yy162 = yylhsminor.yy162;
+#line 3104 "parse.c"
+  yymsp[-3].minor.yy266 = yylhsminor.yy266;
         break;
       case 157: /* term ::= CTIME_KW */
 #line 934 "parse.y"
 {
-  yylhsminor.yy162.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0);
-  spanSet(&yylhsminor.yy162, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
+  yylhsminor.yy266.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0);
+  spanSet(&yylhsminor.yy266, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
 }
-#line 3122 "parse.c"
-  yymsp[0].minor.yy162 = yylhsminor.yy162;
+#line 3113 "parse.c"
+  yymsp[0].minor.yy266 = yylhsminor.yy266;
         break;
       case 158: /* expr ::= LP nexprlist COMMA expr RP */
 #line 963 "parse.y"
 {
-  ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy382, yymsp[-1].minor.yy162.pExpr);
-  yylhsminor.yy162.pExpr = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
-  if( yylhsminor.yy162.pExpr ){
-    yylhsminor.yy162.pExpr->x.pList = pList;
-    spanSet(&yylhsminor.yy162, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0);
+  ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy162, yymsp[-1].minor.yy266.pExpr);
+  yylhsminor.yy266.pExpr = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
+  if( yylhsminor.yy266.pExpr ){
+    yylhsminor.yy266.pExpr->x.pList = pList;
+    spanSet(&yylhsminor.yy266, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0);
   }else{
     sqlite3ExprListDelete(pParse->db, pList);
   }
 }
-#line 3137 "parse.c"
-  yymsp[-4].minor.yy162 = yylhsminor.yy162;
+#line 3128 "parse.c"
+  yymsp[-4].minor.yy266 = yylhsminor.yy266;
         break;
       case 159: /* expr ::= expr AND expr */
       case 160: /* expr ::= expr OR expr */ yytestcase(yyruleno==160);
@@ -3145,18 +3136,18 @@ static void yy_reduce(
       case 165: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==165);
       case 166: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==166);
 #line 974 "parse.y"
-{spanBinaryExpr(pParse,yymsp[-1].major,&yymsp[-2].minor.yy162,&yymsp[0].minor.yy162);}
-#line 3150 "parse.c"
+{spanBinaryExpr(pParse,yymsp[-1].major,&yymsp[-2].minor.yy266,&yymsp[0].minor.yy266);}
+#line 3141 "parse.c"
         break;
       case 167: /* likeop ::= LIKE_KW|MATCH */
 #line 987 "parse.y"
 {yymsp[0].minor.yy0=yymsp[0].minor.yy0;/*A-overwrites-X*/}
-#line 3155 "parse.c"
+#line 3146 "parse.c"
         break;
       case 168: /* likeop ::= NOT LIKE_KW|MATCH */
 #line 988 "parse.y"
 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/}
-#line 3160 "parse.c"
+#line 3151 "parse.c"
         break;
       case 169: /* expr ::= expr likeop expr */
 #line 989 "parse.y"
@@ -3164,14 +3155,14 @@ static void yy_reduce(
   ExprList *pList;
   int bNot = yymsp[-1].minor.yy0.n & 0x80000000;
   yymsp[-1].minor.yy0.n &= 0x7fffffff;
-  pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy162.pExpr);
-  pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy162.pExpr);
-  yymsp[-2].minor.yy162.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0);
-  exprNot(pParse, bNot, &yymsp[-2].minor.yy162);
-  yymsp[-2].minor.yy162.zEnd = yymsp[0].minor.yy162.zEnd;
-  if( yymsp[-2].minor.yy162.pExpr ) yymsp[-2].minor.yy162.pExpr->flags |= EP_InfixFunc;
+  pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy266.pExpr);
+  pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy266.pExpr);
+  yymsp[-2].minor.yy266.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0);
+  exprNot(pParse, bNot, &yymsp[-2].minor.yy266);
+  yymsp[-2].minor.yy266.zEnd = yymsp[0].minor.yy266.zEnd;
+  if( yymsp[-2].minor.yy266.pExpr ) yymsp[-2].minor.yy266.pExpr->flags |= EP_InfixFunc;
 }
-#line 3175 "parse.c"
+#line 3166 "parse.c"
         break;
       case 170: /* expr ::= expr likeop expr ESCAPE expr */
 #line 1000 "parse.y"
@@ -3179,84 +3170,84 @@ static void yy_reduce(
   ExprList *pList;
   int bNot = yymsp[-3].minor.yy0.n & 0x80000000;
   yymsp[-3].minor.yy0.n &= 0x7fffffff;
-  pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy162.pExpr);
-  pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy162.pExpr);
-  pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy162.pExpr);
-  yymsp[-4].minor.yy162.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0);
-  exprNot(pParse, bNot, &yymsp[-4].minor.yy162);
-  yymsp[-4].minor.yy162.zEnd = yymsp[0].minor.yy162.zEnd;
-  if( yymsp[-4].minor.yy162.pExpr ) yymsp[-4].minor.yy162.pExpr->flags |= EP_InfixFunc;
+  pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy266.pExpr);
+  pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy266.pExpr);
+  pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy266.pExpr);
+  yymsp[-4].minor.yy266.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0);
+  exprNot(pParse, bNot, &yymsp[-4].minor.yy266);
+  yymsp[-4].minor.yy266.zEnd = yymsp[0].minor.yy266.zEnd;
+  if( yymsp[-4].minor.yy266.pExpr ) yymsp[-4].minor.yy266.pExpr->flags |= EP_InfixFunc;
 }
-#line 3191 "parse.c"
+#line 3182 "parse.c"
         break;
       case 171: /* expr ::= expr ISNULL|NOTNULL */
 #line 1027 "parse.y"
-{spanUnaryPostfix(pParse,yymsp[0].major,&yymsp[-1].minor.yy162,&yymsp[0].minor.yy0);}
-#line 3196 "parse.c"
+{spanUnaryPostfix(pParse,yymsp[0].major,&yymsp[-1].minor.yy266,&yymsp[0].minor.yy0);}
+#line 3187 "parse.c"
         break;
       case 172: /* expr ::= expr NOT NULL */
 #line 1028 "parse.y"
-{spanUnaryPostfix(pParse,TK_NOTNULL,&yymsp[-2].minor.yy162,&yymsp[0].minor.yy0);}
-#line 3201 "parse.c"
+{spanUnaryPostfix(pParse,TK_NOTNULL,&yymsp[-2].minor.yy266,&yymsp[0].minor.yy0);}
+#line 3192 "parse.c"
         break;
       case 173: /* expr ::= expr IS expr */
 #line 1049 "parse.y"
 {
-  spanBinaryExpr(pParse,TK_IS,&yymsp[-2].minor.yy162,&yymsp[0].minor.yy162);
-  binaryToUnaryIfNull(pParse, yymsp[0].minor.yy162.pExpr, yymsp[-2].minor.yy162.pExpr, TK_ISNULL);
+  spanBinaryExpr(pParse,TK_IS,&yymsp[-2].minor.yy266,&yymsp[0].minor.yy266);
+  binaryToUnaryIfNull(pParse, yymsp[0].minor.yy266.pExpr, yymsp[-2].minor.yy266.pExpr, TK_ISNULL);
 }
-#line 3209 "parse.c"
+#line 3200 "parse.c"
         break;
       case 174: /* expr ::= expr IS NOT expr */
 #line 1053 "parse.y"
 {
-  spanBinaryExpr(pParse,TK_ISNOT,&yymsp[-3].minor.yy162,&yymsp[0].minor.yy162);
-  binaryToUnaryIfNull(pParse, yymsp[0].minor.yy162.pExpr, yymsp[-3].minor.yy162.pExpr, TK_NOTNULL);
+  spanBinaryExpr(pParse,TK_ISNOT,&yymsp[-3].minor.yy266,&yymsp[0].minor.yy266);
+  binaryToUnaryIfNull(pParse, yymsp[0].minor.yy266.pExpr, yymsp[-3].minor.yy266.pExpr, TK_NOTNULL);
 }
-#line 3217 "parse.c"
+#line 3208 "parse.c"
         break;
       case 175: /* expr ::= NOT expr */
       case 176: /* expr ::= BITNOT expr */ yytestcase(yyruleno==176);
 #line 1077 "parse.y"
-{spanUnaryPrefix(&yymsp[-1].minor.yy162,pParse,yymsp[-1].major,&yymsp[0].minor.yy162,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
-#line 3223 "parse.c"
+{spanUnaryPrefix(&yymsp[-1].minor.yy266,pParse,yymsp[-1].major,&yymsp[0].minor.yy266,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
+#line 3214 "parse.c"
         break;
       case 177: /* expr ::= MINUS expr */
 #line 1081 "parse.y"
-{spanUnaryPrefix(&yymsp[-1].minor.yy162,pParse,TK_UMINUS,&yymsp[0].minor.yy162,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
-#line 3228 "parse.c"
+{spanUnaryPrefix(&yymsp[-1].minor.yy266,pParse,TK_UMINUS,&yymsp[0].minor.yy266,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
+#line 3219 "parse.c"
         break;
       case 178: /* expr ::= PLUS expr */
 #line 1083 "parse.y"
-{spanUnaryPrefix(&yymsp[-1].minor.yy162,pParse,TK_UPLUS,&yymsp[0].minor.yy162,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
-#line 3233 "parse.c"
+{spanUnaryPrefix(&yymsp[-1].minor.yy266,pParse,TK_UPLUS,&yymsp[0].minor.yy266,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
+#line 3224 "parse.c"
         break;
       case 179: /* between_op ::= BETWEEN */
       case 182: /* in_op ::= IN */ yytestcase(yyruleno==182);
 #line 1086 "parse.y"
-{yymsp[0].minor.yy52 = 0;}
-#line 3239 "parse.c"
+{yymsp[0].minor.yy444 = 0;}
+#line 3230 "parse.c"
         break;
       case 181: /* expr ::= expr between_op expr AND expr */
 #line 1088 "parse.y"
 {
-  ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy162.pExpr);
-  pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy162.pExpr);
-  yymsp[-4].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy162.pExpr, 0);
-  if( yymsp[-4].minor.yy162.pExpr ){
-    yymsp[-4].minor.yy162.pExpr->x.pList = pList;
+  ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy266.pExpr);
+  pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy266.pExpr);
+  yymsp[-4].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy266.pExpr, 0);
+  if( yymsp[-4].minor.yy266.pExpr ){
+    yymsp[-4].minor.yy266.pExpr->x.pList = pList;
   }else{
     sqlite3ExprListDelete(pParse->db, pList);
   } 
-  exprNot(pParse, yymsp[-3].minor.yy52, &yymsp[-4].minor.yy162);
-  yymsp[-4].minor.yy162.zEnd = yymsp[0].minor.yy162.zEnd;
+  exprNot(pParse, yymsp[-3].minor.yy444, &yymsp[-4].minor.yy266);
+  yymsp[-4].minor.yy266.zEnd = yymsp[0].minor.yy266.zEnd;
 }
-#line 3255 "parse.c"
+#line 3246 "parse.c"
         break;
       case 184: /* expr ::= expr in_op LP exprlist RP */
 #line 1104 "parse.y"
 {
-    if( yymsp[-1].minor.yy382==0 ){
+    if( yymsp[-1].minor.yy162==0 ){
       /* Expressions of the form
       **
       **      expr1 IN ()
@@ -3265,9 +3256,9 @@ static void yy_reduce(
       ** simplify to constants 0 (false) and 1 (true), respectively,
       ** regardless of the value of expr1.
       */
-      sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy162.pExpr);
-      yymsp[-4].minor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy52],1);
-    }else if( yymsp[-1].minor.yy382->nExpr==1 ){
+      sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy266.pExpr);
+      yymsp[-4].minor.yy266.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy444],1);
+    }else if( yymsp[-1].minor.yy162->nExpr==1 ){
       /* Expressions of the form:
       **
       **      expr1 IN (?1)
@@ -3284,213 +3275,213 @@ static void yy_reduce(
       ** affinity or the collating sequence to use for comparison.  Otherwise,
       ** the semantics would be subtly different from IN or NOT IN.
       */
-      Expr *pRHS = yymsp[-1].minor.yy382->a[0].pExpr;
-      yymsp[-1].minor.yy382->a[0].pExpr = 0;
-      sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy382);
+      Expr *pRHS = yymsp[-1].minor.yy162->a[0].pExpr;
+      yymsp[-1].minor.yy162->a[0].pExpr = 0;
+      sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy162);
       /* pRHS cannot be NULL because a malloc error would have been detected
       ** before now and control would have never reached this point */
       if( ALWAYS(pRHS) ){
         pRHS->flags &= ~EP_Collate;
         pRHS->flags |= EP_Generic;
       }
-      yymsp[-4].minor.yy162.pExpr = sqlite3PExpr(pParse, yymsp[-3].minor.yy52 ? TK_NE : TK_EQ, yymsp[-4].minor.yy162.pExpr, pRHS);
+      yymsp[-4].minor.yy266.pExpr = sqlite3PExpr(pParse, yymsp[-3].minor.yy444 ? TK_NE : TK_EQ, yymsp[-4].minor.yy266.pExpr, pRHS);
     }else{
-      yymsp[-4].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy162.pExpr, 0);
-      if( yymsp[-4].minor.yy162.pExpr ){
-        yymsp[-4].minor.yy162.pExpr->x.pList = yymsp[-1].minor.yy382;
-        sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy162.pExpr);
+      yymsp[-4].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy266.pExpr, 0);
+      if( yymsp[-4].minor.yy266.pExpr ){
+        yymsp[-4].minor.yy266.pExpr->x.pList = yymsp[-1].minor.yy162;
+        sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy266.pExpr);
       }else{
-        sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy382);
+        sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy162);
       }
-      exprNot(pParse, yymsp[-3].minor.yy52, &yymsp[-4].minor.yy162);
+      exprNot(pParse, yymsp[-3].minor.yy444, &yymsp[-4].minor.yy266);
     }
-    yymsp[-4].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
+    yymsp[-4].minor.yy266.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
   }
-#line 3310 "parse.c"
+#line 3301 "parse.c"
         break;
       case 185: /* expr ::= LP select RP */
 #line 1155 "parse.y"
 {
-    spanSet(&yymsp[-2].minor.yy162,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/
-    yymsp[-2].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
-    sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy162.pExpr, yymsp[-1].minor.yy279);
+    spanSet(&yymsp[-2].minor.yy266,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/
+    yymsp[-2].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
+    sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy266.pExpr, yymsp[-1].minor.yy203);
   }
-#line 3319 "parse.c"
+#line 3310 "parse.c"
         break;
       case 186: /* expr ::= expr in_op LP select RP */
 #line 1160 "parse.y"
 {
-    yymsp[-4].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy162.pExpr, 0);
-    sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy162.pExpr, yymsp[-1].minor.yy279);
-    exprNot(pParse, yymsp[-3].minor.yy52, &yymsp[-4].minor.yy162);
-    yymsp[-4].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
+    yymsp[-4].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy266.pExpr, 0);
+    sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy266.pExpr, yymsp[-1].minor.yy203);
+    exprNot(pParse, yymsp[-3].minor.yy444, &yymsp[-4].minor.yy266);
+    yymsp[-4].minor.yy266.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
   }
-#line 3329 "parse.c"
+#line 3320 "parse.c"
         break;
       case 187: /* expr ::= expr in_op nm paren_exprlist */
 #line 1166 "parse.y"
 {
     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-1].minor.yy0);
     Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
-    if( yymsp[0].minor.yy382 )  sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy382);
-    yymsp[-3].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy162.pExpr, 0);
-    sqlite3PExprAddSelect(pParse, yymsp[-3].minor.yy162.pExpr, pSelect);
-    exprNot(pParse, yymsp[-2].minor.yy52, &yymsp[-3].minor.yy162);
-    yymsp[-3].minor.yy162.zEnd = &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n];
+    if( yymsp[0].minor.yy162 )  sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy162);
+    yymsp[-3].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy266.pExpr, 0);
+    sqlite3PExprAddSelect(pParse, yymsp[-3].minor.yy266.pExpr, pSelect);
+    exprNot(pParse, yymsp[-2].minor.yy444, &yymsp[-3].minor.yy266);
+    yymsp[-3].minor.yy266.zEnd = &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n];
   }
-#line 3342 "parse.c"
+#line 3333 "parse.c"
         break;
       case 188: /* expr ::= EXISTS LP select RP */
 #line 1175 "parse.y"
 {
     Expr *p;
-    spanSet(&yymsp[-3].minor.yy162,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/
-    p = yymsp[-3].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
-    sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy279);
+    spanSet(&yymsp[-3].minor.yy266,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/
+    p = yymsp[-3].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
+    sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy203);
   }
-#line 3352 "parse.c"
+#line 3343 "parse.c"
         break;
       case 189: /* expr ::= CASE case_operand case_exprlist case_else END */
 #line 1184 "parse.y"
 {
-  spanSet(&yymsp[-4].minor.yy162,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-C*/
-  yymsp[-4].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy362, 0);
-  if( yymsp[-4].minor.yy162.pExpr ){
-    yymsp[-4].minor.yy162.pExpr->x.pList = yymsp[-1].minor.yy362 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy382,yymsp[-1].minor.yy362) : yymsp[-2].minor.yy382;
-    sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy162.pExpr);
+  spanSet(&yymsp[-4].minor.yy266,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-C*/
+  yymsp[-4].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy396, 0);
+  if( yymsp[-4].minor.yy266.pExpr ){
+    yymsp[-4].minor.yy266.pExpr->x.pList = yymsp[-1].minor.yy396 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy162,yymsp[-1].minor.yy396) : yymsp[-2].minor.yy162;
+    sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy266.pExpr);
   }else{
-    sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy382);
-    sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy362);
+    sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy162);
+    sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy396);
   }
 }
-#line 3367 "parse.c"
+#line 3358 "parse.c"
         break;
       case 190: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
 #line 1197 "parse.y"
 {
-  yymsp[-4].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy382, yymsp[-2].minor.yy162.pExpr);
-  yymsp[-4].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy382, yymsp[0].minor.yy162.pExpr);
+  yymsp[-4].minor.yy162 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy162, yymsp[-2].minor.yy266.pExpr);
+  yymsp[-4].minor.yy162 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy162, yymsp[0].minor.yy266.pExpr);
 }
-#line 3375 "parse.c"
+#line 3366 "parse.c"
         break;
       case 191: /* case_exprlist ::= WHEN expr THEN expr */
 #line 1201 "parse.y"
 {
-  yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy162.pExpr);
-  yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382, yymsp[0].minor.yy162.pExpr);
+  yymsp[-3].minor.yy162 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy266.pExpr);
+  yymsp[-3].minor.yy162 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy162, yymsp[0].minor.yy266.pExpr);
 }
-#line 3383 "parse.c"
+#line 3374 "parse.c"
         break;
       case 194: /* case_operand ::= expr */
 #line 1211 "parse.y"
-{yymsp[0].minor.yy362 = yymsp[0].minor.yy162.pExpr; /*A-overwrites-X*/}
-#line 3388 "parse.c"
+{yymsp[0].minor.yy396 = yymsp[0].minor.yy266.pExpr; /*A-overwrites-X*/}
+#line 3379 "parse.c"
         break;
       case 197: /* nexprlist ::= nexprlist COMMA expr */
 #line 1222 "parse.y"
-{yymsp[-2].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy382,yymsp[0].minor.yy162.pExpr);}
-#line 3393 "parse.c"
+{yymsp[-2].minor.yy162 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy162,yymsp[0].minor.yy266.pExpr);}
+#line 3384 "parse.c"
         break;
       case 198: /* nexprlist ::= expr */
 #line 1224 "parse.y"
-{yymsp[0].minor.yy382 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy162.pExpr); /*A-overwrites-Y*/}
-#line 3398 "parse.c"
+{yymsp[0].minor.yy162 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy266.pExpr); /*A-overwrites-Y*/}
+#line 3389 "parse.c"
         break;
       case 200: /* paren_exprlist ::= LP exprlist RP */
       case 205: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==205);
 #line 1232 "parse.y"
-{yymsp[-2].minor.yy382 = yymsp[-1].minor.yy382;}
-#line 3404 "parse.c"
+{yymsp[-2].minor.yy162 = yymsp[-1].minor.yy162;}
+#line 3395 "parse.c"
         break;
       case 201: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm ON nm LP sortlist RP where_opt */
 #line 1239 "parse.y"
 {
   sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy0, 
-                     sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0), yymsp[-2].minor.yy382, yymsp[-9].minor.yy52,
-                      &yymsp[-10].minor.yy0, yymsp[0].minor.yy362, SQLITE_SO_ASC, yymsp[-7].minor.yy52, SQLITE_IDXTYPE_APPDEF);
+                     sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0), yymsp[-2].minor.yy162, yymsp[-9].minor.yy444,
+                      &yymsp[-10].minor.yy0, yymsp[0].minor.yy396, SQLITE_SO_ASC, yymsp[-7].minor.yy444, SQLITE_IDXTYPE_APPDEF);
 }
-#line 3413 "parse.c"
+#line 3404 "parse.c"
         break;
       case 202: /* uniqueflag ::= UNIQUE */
       case 243: /* raisetype ::= ABORT */ yytestcase(yyruleno==243);
 #line 1246 "parse.y"
-{yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_ABORT;}
-#line 3419 "parse.c"
+{yymsp[0].minor.yy444 = ON_CONFLICT_ACTION_ABORT;}
+#line 3410 "parse.c"
         break;
       case 203: /* uniqueflag ::= */
 #line 1247 "parse.y"
-{yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_NONE;}
-#line 3424 "parse.c"
+{yymsp[1].minor.yy444 = ON_CONFLICT_ACTION_NONE;}
+#line 3415 "parse.c"
         break;
       case 206: /* eidlist ::= eidlist COMMA nm collate sortorder */
 #line 1290 "parse.y"
 {
-  yymsp[-4].minor.yy382 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy382, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy52, yymsp[0].minor.yy52);
+  yymsp[-4].minor.yy162 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy162, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy444, yymsp[0].minor.yy444);
 }
-#line 3431 "parse.c"
+#line 3422 "parse.c"
         break;
       case 207: /* eidlist ::= nm collate sortorder */
 #line 1293 "parse.y"
 {
-  yymsp[-2].minor.yy382 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy52, yymsp[0].minor.yy52); /*A-overwrites-Y*/
+  yymsp[-2].minor.yy162 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy444, yymsp[0].minor.yy444); /*A-overwrites-Y*/
 }
-#line 3438 "parse.c"
+#line 3429 "parse.c"
         break;
       case 210: /* cmd ::= DROP INDEX ifexists fullname ON nm */
 #line 1304 "parse.y"
 {
-    sqlite3DropIndex(pParse, yymsp[-2].minor.yy387, &yymsp[0].minor.yy0, yymsp[-3].minor.yy52);
+    sqlite3DropIndex(pParse, yymsp[-2].minor.yy41, &yymsp[0].minor.yy0, yymsp[-3].minor.yy444);
 }
-#line 3445 "parse.c"
+#line 3436 "parse.c"
         break;
       case 211: /* cmd ::= PRAGMA nm */
 #line 1311 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[0].minor.yy0,0,0,0,0);
 }
-#line 3452 "parse.c"
+#line 3443 "parse.c"
         break;
       case 212: /* cmd ::= PRAGMA nm EQ nmnum */
 #line 1314 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy0,0,0);
 }
-#line 3459 "parse.c"
+#line 3450 "parse.c"
         break;
       case 213: /* cmd ::= PRAGMA nm LP nmnum RP */
 #line 1317 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,0,&yymsp[-1].minor.yy0,0,0);
 }
-#line 3466 "parse.c"
+#line 3457 "parse.c"
         break;
       case 214: /* cmd ::= PRAGMA nm EQ minus_num */
 #line 1320 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy0,0,1);
 }
-#line 3473 "parse.c"
+#line 3464 "parse.c"
         break;
       case 215: /* cmd ::= PRAGMA nm LP minus_num RP */
 #line 1323 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,0,&yymsp[-1].minor.yy0,0,1);
 }
-#line 3480 "parse.c"
+#line 3471 "parse.c"
         break;
       case 216: /* cmd ::= PRAGMA nm EQ nm DOT nm */
 #line 1326 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0,0);
 }
-#line 3487 "parse.c"
+#line 3478 "parse.c"
         break;
       case 217: /* cmd ::= PRAGMA */
 #line 1329 "parse.y"
 {
     sqlite3Pragma(pParse, 0,0,0,0,0);
 }
-#line 3494 "parse.c"
+#line 3485 "parse.c"
         break;
       case 220: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
 #line 1349 "parse.y"
@@ -3498,75 +3489,75 @@ static void yy_reduce(
   Token all;
   all.z = yymsp[-3].minor.yy0.z;
   all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
-  sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy427, &all);
+  sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy451, &all);
 }
-#line 3504 "parse.c"
+#line 3495 "parse.c"
         break;
       case 221: /* trigger_decl ::= TRIGGER ifnotexists nm trigger_time trigger_event ON fullname foreach_clause when_clause */
 #line 1358 "parse.y"
 {
-  sqlite3BeginTrigger(pParse, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy52, yymsp[-4].minor.yy10.a, yymsp[-4].minor.yy10.b, yymsp[-2].minor.yy387, yymsp[0].minor.yy362, yymsp[-7].minor.yy52);
+  sqlite3BeginTrigger(pParse, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy444, yymsp[-4].minor.yy184.a, yymsp[-4].minor.yy184.b, yymsp[-2].minor.yy41, yymsp[0].minor.yy396, yymsp[-7].minor.yy444);
   yymsp[-8].minor.yy0 = yymsp[-6].minor.yy0; /*yymsp[-8].minor.yy0-overwrites-T*/
 }
-#line 3512 "parse.c"
+#line 3503 "parse.c"
         break;
       case 222: /* trigger_time ::= BEFORE */
 #line 1364 "parse.y"
-{ yymsp[0].minor.yy52 = TK_BEFORE; }
-#line 3517 "parse.c"
+{ yymsp[0].minor.yy444 = TK_BEFORE; }
+#line 3508 "parse.c"
         break;
       case 223: /* trigger_time ::= AFTER */
 #line 1365 "parse.y"
-{ yymsp[0].minor.yy52 = TK_AFTER;  }
-#line 3522 "parse.c"
+{ yymsp[0].minor.yy444 = TK_AFTER;  }
+#line 3513 "parse.c"
         break;
       case 224: /* trigger_time ::= INSTEAD OF */
 #line 1366 "parse.y"
-{ yymsp[-1].minor.yy52 = TK_INSTEAD;}
-#line 3527 "parse.c"
+{ yymsp[-1].minor.yy444 = TK_INSTEAD;}
+#line 3518 "parse.c"
         break;
       case 225: /* trigger_time ::= */
 #line 1367 "parse.y"
-{ yymsp[1].minor.yy52 = TK_BEFORE; }
-#line 3532 "parse.c"
+{ yymsp[1].minor.yy444 = TK_BEFORE; }
+#line 3523 "parse.c"
         break;
       case 226: /* trigger_event ::= DELETE|INSERT */
       case 227: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==227);
 #line 1371 "parse.y"
-{yymsp[0].minor.yy10.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy10.b = 0;}
-#line 3538 "parse.c"
+{yymsp[0].minor.yy184.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy184.b = 0;}
+#line 3529 "parse.c"
         break;
       case 228: /* trigger_event ::= UPDATE OF idlist */
 #line 1373 "parse.y"
-{yymsp[-2].minor.yy10.a = TK_UPDATE; yymsp[-2].minor.yy10.b = yymsp[0].minor.yy40;}
-#line 3543 "parse.c"
+{yymsp[-2].minor.yy184.a = TK_UPDATE; yymsp[-2].minor.yy184.b = yymsp[0].minor.yy306;}
+#line 3534 "parse.c"
         break;
       case 229: /* when_clause ::= */
 #line 1380 "parse.y"
-{ yymsp[1].minor.yy362 = 0; }
-#line 3548 "parse.c"
+{ yymsp[1].minor.yy396 = 0; }
+#line 3539 "parse.c"
         break;
       case 230: /* when_clause ::= WHEN expr */
 #line 1381 "parse.y"
-{ yymsp[-1].minor.yy362 = yymsp[0].minor.yy162.pExpr; }
-#line 3553 "parse.c"
+{ yymsp[-1].minor.yy396 = yymsp[0].minor.yy266.pExpr; }
+#line 3544 "parse.c"
         break;
       case 231: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
 #line 1385 "parse.y"
 {
-  assert( yymsp[-2].minor.yy427!=0 );
-  yymsp[-2].minor.yy427->pLast->pNext = yymsp[-1].minor.yy427;
-  yymsp[-2].minor.yy427->pLast = yymsp[-1].minor.yy427;
+  assert( yymsp[-2].minor.yy451!=0 );
+  yymsp[-2].minor.yy451->pLast->pNext = yymsp[-1].minor.yy451;
+  yymsp[-2].minor.yy451->pLast = yymsp[-1].minor.yy451;
 }
-#line 3562 "parse.c"
+#line 3553 "parse.c"
         break;
       case 232: /* trigger_cmd_list ::= trigger_cmd SEMI */
 #line 1390 "parse.y"
 { 
-  assert( yymsp[-1].minor.yy427!=0 );
-  yymsp[-1].minor.yy427->pLast = yymsp[-1].minor.yy427;
+  assert( yymsp[-1].minor.yy451!=0 );
+  yymsp[-1].minor.yy451->pLast = yymsp[-1].minor.yy451;
 }
-#line 3570 "parse.c"
+#line 3561 "parse.c"
         break;
       case 233: /* trnm ::= nm DOT nm */
 #line 1401 "parse.y"
@@ -3576,7 +3567,7 @@ static void yy_reduce(
         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
         "statements within triggers");
 }
-#line 3580 "parse.c"
+#line 3571 "parse.c"
         break;
       case 234: /* tridxby ::= INDEXED BY nm */
 #line 1413 "parse.y"
@@ -3585,7 +3576,7 @@ static void yy_reduce(
         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
         "within triggers");
 }
-#line 3589 "parse.c"
+#line 3580 "parse.c"
         break;
       case 235: /* tridxby ::= NOT INDEXED */
 #line 1418 "parse.y"
@@ -3594,172 +3585,157 @@ static void yy_reduce(
         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
         "within triggers");
 }
-#line 3598 "parse.c"
+#line 3589 "parse.c"
         break;
       case 236: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */
 #line 1431 "parse.y"
-{yymsp[-6].minor.yy427 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy382, yymsp[0].minor.yy362, yymsp[-5].minor.yy52);}
-#line 3603 "parse.c"
+{yymsp[-6].minor.yy451 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy162, yymsp[0].minor.yy396, yymsp[-5].minor.yy444);}
+#line 3594 "parse.c"
         break;
       case 237: /* trigger_cmd ::= insert_cmd INTO trnm idlist_opt select */
 #line 1435 "parse.y"
-{yymsp[-4].minor.yy427 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy40, yymsp[0].minor.yy279, yymsp[-4].minor.yy52);/*A-overwrites-R*/}
-#line 3608 "parse.c"
+{yymsp[-4].minor.yy451 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy306, yymsp[0].minor.yy203, yymsp[-4].minor.yy444);/*A-overwrites-R*/}
+#line 3599 "parse.c"
         break;
       case 238: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */
 #line 1439 "parse.y"
-{yymsp[-4].minor.yy427 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy362);}
-#line 3613 "parse.c"
+{yymsp[-4].minor.yy451 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy396);}
+#line 3604 "parse.c"
         break;
       case 239: /* trigger_cmd ::= select */
 #line 1443 "parse.y"
-{yymsp[0].minor.yy427 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy279); /*A-overwrites-X*/}
-#line 3618 "parse.c"
+{yymsp[0].minor.yy451 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy203); /*A-overwrites-X*/}
+#line 3609 "parse.c"
         break;
       case 240: /* expr ::= RAISE LP IGNORE RP */
 #line 1446 "parse.y"
 {
-  spanSet(&yymsp[-3].minor.yy162,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-X*/
-  yymsp[-3].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0); 
-  if( yymsp[-3].minor.yy162.pExpr ){
-    yymsp[-3].minor.yy162.pExpr->affinity = ON_CONFLICT_ACTION_IGNORE;
+  spanSet(&yymsp[-3].minor.yy266,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-X*/
+  yymsp[-3].minor.yy266.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0); 
+  if( yymsp[-3].minor.yy266.pExpr ){
+    yymsp[-3].minor.yy266.pExpr->affinity = ON_CONFLICT_ACTION_IGNORE;
   }
 }
-#line 3629 "parse.c"
+#line 3620 "parse.c"
         break;
       case 241: /* expr ::= RAISE LP raisetype COMMA STRING RP */
 #line 1453 "parse.y"
 {
-  spanSet(&yymsp[-5].minor.yy162,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-X*/
-  yymsp[-5].minor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); 
-  if( yymsp[-5].minor.yy162.pExpr ) {
-    yymsp[-5].minor.yy162.pExpr->affinity = (char)yymsp[-3].minor.yy52;
+  spanSet(&yymsp[-5].minor.yy266,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-X*/
+  yymsp[-5].minor.yy266.pExpr = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); 
+  if( yymsp[-5].minor.yy266.pExpr ) {
+    yymsp[-5].minor.yy266.pExpr->affinity = (char)yymsp[-3].minor.yy444;
   }
 }
-#line 3640 "parse.c"
+#line 3631 "parse.c"
         break;
       case 242: /* raisetype ::= ROLLBACK */
 #line 1463 "parse.y"
-{yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_ROLLBACK;}
-#line 3645 "parse.c"
+{yymsp[0].minor.yy444 = ON_CONFLICT_ACTION_ROLLBACK;}
+#line 3636 "parse.c"
         break;
       case 244: /* raisetype ::= FAIL */
 #line 1465 "parse.y"
-{yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_FAIL;}
-#line 3650 "parse.c"
+{yymsp[0].minor.yy444 = ON_CONFLICT_ACTION_FAIL;}
+#line 3641 "parse.c"
         break;
       case 245: /* cmd ::= DROP TRIGGER ifexists fullname */
 #line 1470 "parse.y"
 {
-  sqlite3DropTrigger(pParse,yymsp[0].minor.yy387,yymsp[-1].minor.yy52);
+  sqlite3DropTrigger(pParse,yymsp[0].minor.yy41,yymsp[-1].minor.yy444);
 }
-#line 3657 "parse.c"
-        break;
-      case 246: /* cmd ::= REINDEX */
-#line 1477 "parse.y"
-{sqlite3Reindex(pParse, 0, 0);}
-#line 3662 "parse.c"
+#line 3648 "parse.c"
         break;
-      case 247: /* cmd ::= REINDEX nm */
-#line 1478 "parse.y"
-{sqlite3Reindex(pParse, &yymsp[0].minor.yy0, 0);}
-#line 3667 "parse.c"
-        break;
-      case 248: /* cmd ::= REINDEX nm ON nm */
-#line 1479 "parse.y"
-{sqlite3Reindex(pParse, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
-#line 3672 "parse.c"
-        break;
-      case 249: /* cmd ::= ANALYZE */
-#line 1484 "parse.y"
+      case 246: /* cmd ::= ANALYZE */
+#line 1485 "parse.y"
 {sqlite3Analyze(pParse, 0);}
-#line 3677 "parse.c"
+#line 3653 "parse.c"
         break;
-      case 250: /* cmd ::= ANALYZE nm */
-#line 1485 "parse.y"
+      case 247: /* cmd ::= ANALYZE nm */
+#line 1486 "parse.y"
 {sqlite3Analyze(pParse, &yymsp[0].minor.yy0);}
-#line 3682 "parse.c"
+#line 3658 "parse.c"
         break;
-      case 251: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
-#line 1490 "parse.y"
+      case 248: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+#line 1491 "parse.y"
 {
-  sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy387,&yymsp[0].minor.yy0);
+  sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy41,&yymsp[0].minor.yy0);
 }
-#line 3689 "parse.c"
-        break;
-      case 252: /* with ::= */
-#line 1513 "parse.y"
-{yymsp[1].minor.yy151 = 0;}
-#line 3694 "parse.c"
+#line 3665 "parse.c"
         break;
-      case 253: /* with ::= WITH wqlist */
-#line 1515 "parse.y"
-{ yymsp[-1].minor.yy151 = yymsp[0].minor.yy151; }
-#line 3699 "parse.c"
+      case 249: /* with ::= */
+#line 1514 "parse.y"
+{yymsp[1].minor.yy273 = 0;}
+#line 3670 "parse.c"
         break;
-      case 254: /* with ::= WITH RECURSIVE wqlist */
+      case 250: /* with ::= WITH wqlist */
 #line 1516 "parse.y"
-{ yymsp[-2].minor.yy151 = yymsp[0].minor.yy151; }
-#line 3704 "parse.c"
+{ yymsp[-1].minor.yy273 = yymsp[0].minor.yy273; }
+#line 3675 "parse.c"
         break;
-      case 255: /* wqlist ::= nm eidlist_opt AS LP select RP */
-#line 1518 "parse.y"
+      case 251: /* with ::= WITH RECURSIVE wqlist */
+#line 1517 "parse.y"
+{ yymsp[-2].minor.yy273 = yymsp[0].minor.yy273; }
+#line 3680 "parse.c"
+        break;
+      case 252: /* wqlist ::= nm eidlist_opt AS LP select RP */
+#line 1519 "parse.y"
 {
-  yymsp[-5].minor.yy151 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy382, yymsp[-1].minor.yy279); /*A-overwrites-X*/
+  yymsp[-5].minor.yy273 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy162, yymsp[-1].minor.yy203); /*A-overwrites-X*/
 }
-#line 3711 "parse.c"
+#line 3687 "parse.c"
         break;
-      case 256: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
-#line 1521 "parse.y"
+      case 253: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
+#line 1522 "parse.y"
 {
-  yymsp[-7].minor.yy151 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy151, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy382, yymsp[-1].minor.yy279);
+  yymsp[-7].minor.yy273 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy273, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy162, yymsp[-1].minor.yy203);
 }
-#line 3718 "parse.c"
+#line 3694 "parse.c"
         break;
       default:
-      /* (257) input ::= ecmd */ yytestcase(yyruleno==257);
-      /* (258) explain ::= */ yytestcase(yyruleno==258);
-      /* (259) cmdx ::= cmd (OPTIMIZED OUT) */ assert(yyruleno!=259);
-      /* (260) trans_opt ::= */ yytestcase(yyruleno==260);
-      /* (261) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==261);
-      /* (262) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==262);
-      /* (263) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==263);
-      /* (264) savepoint_opt ::= */ yytestcase(yyruleno==264);
-      /* (265) cmd ::= create_table create_table_args */ yytestcase(yyruleno==265);
-      /* (266) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==266);
-      /* (267) columnlist ::= columnname carglist */ yytestcase(yyruleno==267);
-      /* (268) typetoken ::= typename */ yytestcase(yyruleno==268);
-      /* (269) typename ::= ID|STRING */ yytestcase(yyruleno==269);
-      /* (270) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=270);
-      /* (271) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=271);
-      /* (272) carglist ::= carglist ccons */ yytestcase(yyruleno==272);
-      /* (273) carglist ::= */ yytestcase(yyruleno==273);
-      /* (274) ccons ::= NULL onconf */ yytestcase(yyruleno==274);
-      /* (275) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==275);
-      /* (276) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==276);
-      /* (277) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=277);
-      /* (278) tconscomma ::= */ yytestcase(yyruleno==278);
-      /* (279) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=279);
-      /* (280) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=280);
-      /* (281) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=281);
-      /* (282) oneselect ::= values */ yytestcase(yyruleno==282);
-      /* (283) sclp ::= selcollist COMMA */ yytestcase(yyruleno==283);
-      /* (284) as ::= ID|STRING */ yytestcase(yyruleno==284);
-      /* (285) join_nm ::= ID|INDEXED */ yytestcase(yyruleno==285);
-      /* (286) join_nm ::= JOIN_KW */ yytestcase(yyruleno==286);
-      /* (287) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=287);
-      /* (288) exprlist ::= nexprlist */ yytestcase(yyruleno==288);
-      /* (289) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=289);
-      /* (290) nmnum ::= STRING */ yytestcase(yyruleno==290);
-      /* (291) nmnum ::= nm */ yytestcase(yyruleno==291);
-      /* (292) nmnum ::= ON */ yytestcase(yyruleno==292);
-      /* (293) nmnum ::= DELETE */ yytestcase(yyruleno==293);
-      /* (294) nmnum ::= DEFAULT */ yytestcase(yyruleno==294);
-      /* (295) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==295);
-      /* (296) foreach_clause ::= */ yytestcase(yyruleno==296);
-      /* (297) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==297);
-      /* (298) trnm ::= nm */ yytestcase(yyruleno==298);
-      /* (299) tridxby ::= */ yytestcase(yyruleno==299);
+      /* (254) input ::= ecmd */ yytestcase(yyruleno==254);
+      /* (255) explain ::= */ yytestcase(yyruleno==255);
+      /* (256) cmdx ::= cmd (OPTIMIZED OUT) */ assert(yyruleno!=256);
+      /* (257) trans_opt ::= */ yytestcase(yyruleno==257);
+      /* (258) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==258);
+      /* (259) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==259);
+      /* (260) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==260);
+      /* (261) savepoint_opt ::= */ yytestcase(yyruleno==261);
+      /* (262) cmd ::= create_table create_table_args */ yytestcase(yyruleno==262);
+      /* (263) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==263);
+      /* (264) columnlist ::= columnname carglist */ yytestcase(yyruleno==264);
+      /* (265) typetoken ::= typename */ yytestcase(yyruleno==265);
+      /* (266) typename ::= ID|STRING */ yytestcase(yyruleno==266);
+      /* (267) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=267);
+      /* (268) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=268);
+      /* (269) carglist ::= carglist ccons */ yytestcase(yyruleno==269);
+      /* (270) carglist ::= */ yytestcase(yyruleno==270);
+      /* (271) ccons ::= NULL onconf */ yytestcase(yyruleno==271);
+      /* (272) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==272);
+      /* (273) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==273);
+      /* (274) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=274);
+      /* (275) tconscomma ::= */ yytestcase(yyruleno==275);
+      /* (276) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=276);
+      /* (277) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=277);
+      /* (278) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=278);
+      /* (279) oneselect ::= values */ yytestcase(yyruleno==279);
+      /* (280) sclp ::= selcollist COMMA */ yytestcase(yyruleno==280);
+      /* (281) as ::= ID|STRING */ yytestcase(yyruleno==281);
+      /* (282) join_nm ::= ID|INDEXED */ yytestcase(yyruleno==282);
+      /* (283) join_nm ::= JOIN_KW */ yytestcase(yyruleno==283);
+      /* (284) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=284);
+      /* (285) exprlist ::= nexprlist */ yytestcase(yyruleno==285);
+      /* (286) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=286);
+      /* (287) nmnum ::= STRING */ yytestcase(yyruleno==287);
+      /* (288) nmnum ::= nm */ yytestcase(yyruleno==288);
+      /* (289) nmnum ::= ON */ yytestcase(yyruleno==289);
+      /* (290) nmnum ::= DELETE */ yytestcase(yyruleno==290);
+      /* (291) nmnum ::= DEFAULT */ yytestcase(yyruleno==291);
+      /* (292) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==292);
+      /* (293) foreach_clause ::= */ yytestcase(yyruleno==293);
+      /* (294) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==294);
+      /* (295) trnm ::= nm */ yytestcase(yyruleno==295);
+      /* (296) tridxby ::= */ yytestcase(yyruleno==296);
         break;
 /********** End reduce actions ************************************************/
   };
@@ -3825,7 +3801,7 @@ static void yy_syntax_error(
   } else {
     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
   }
-#line 3829 "parse.c"
+#line 3805 "parse.c"
 /************ End %syntax_error code ******************************************/
   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
 }
diff --git a/src/box/sql/parse.h b/src/box/sql/parse.h
index 8a1823e..2d3e904 100644
--- a/src/box/sql/parse.h
+++ b/src/box/sql/parse.h
@@ -68,92 +68,91 @@
 #define TK_RAISE                           68
 #define TK_REPLACE                         69
 #define TK_RESTRICT                        70
-#define TK_REINDEX                         71
-#define TK_RENAME                          72
-#define TK_CTIME_KW                        73
-#define TK_ANY                             74
-#define TK_STRING                          75
-#define TK_CONSTRAINT                      76
-#define TK_DEFAULT                         77
-#define TK_NULL                            78
-#define TK_PRIMARY                         79
-#define TK_UNIQUE                          80
-#define TK_CHECK                           81
-#define TK_REFERENCES                      82
-#define TK_AUTOINCR                        83
-#define TK_ON                              84
-#define TK_INSERT                          85
-#define TK_DELETE                          86
-#define TK_UPDATE                          87
-#define TK_SET                             88
-#define TK_DEFERRABLE                      89
-#define TK_IMMEDIATE                       90
-#define TK_FOREIGN                         91
-#define TK_DROP                            92
-#define TK_VIEW                            93
-#define TK_UNION                           94
-#define TK_ALL                             95
-#define TK_EXCEPT                          96
-#define TK_INTERSECT                       97
-#define TK_SELECT                          98
-#define TK_VALUES                          99
-#define TK_DISTINCT                       100
-#define TK_DOT                            101
-#define TK_FROM                           102
-#define TK_JOIN_KW                        103
-#define TK_JOIN                           104
-#define TK_BY                             105
-#define TK_USING                          106
-#define TK_ORDER                          107
-#define TK_ASC                            108
-#define TK_DESC                           109
-#define TK_GROUP                          110
-#define TK_HAVING                         111
-#define TK_LIMIT                          112
-#define TK_WHERE                          113
-#define TK_INTO                           114
-#define TK_FLOAT                          115
-#define TK_BLOB                           116
-#define TK_INTEGER                        117
-#define TK_VARIABLE                       118
-#define TK_CAST                           119
-#define TK_CASE                           120
-#define TK_WHEN                           121
-#define TK_THEN                           122
-#define TK_ELSE                           123
-#define TK_INDEX                          124
-#define TK_PRAGMA                         125
-#define TK_TRIGGER                        126
-#define TK_OF                             127
-#define TK_FOR                            128
-#define TK_EACH                           129
-#define TK_ROW                            130
-#define TK_ANALYZE                        131
-#define TK_ALTER                          132
-#define TK_WITH                           133
-#define TK_RECURSIVE                      134
-#define TK_STANDARD                       135
-#define TK_TO_TEXT                        136
-#define TK_TO_BLOB                        137
-#define TK_TO_NUMERIC                     138
-#define TK_TO_INT                         139
-#define TK_TO_REAL                        140
-#define TK_ISNOT                          141
-#define TK_END_OF_FILE                    142
-#define TK_UNCLOSED_STRING                143
-#define TK_FUNCTION                       144
-#define TK_COLUMN                         145
-#define TK_AGG_FUNCTION                   146
-#define TK_AGG_COLUMN                     147
-#define TK_UMINUS                         148
-#define TK_UPLUS                          149
-#define TK_REGISTER                       150
-#define TK_VECTOR                         151
-#define TK_SELECT_COLUMN                  152
-#define TK_ASTERISK                       153
-#define TK_SPAN                           154
-#define TK_SPACE                          155
-#define TK_ILLEGAL                        156
+#define TK_RENAME                          71
+#define TK_CTIME_KW                        72
+#define TK_ANY                             73
+#define TK_STRING                          74
+#define TK_CONSTRAINT                      75
+#define TK_DEFAULT                         76
+#define TK_NULL                            77
+#define TK_PRIMARY                         78
+#define TK_UNIQUE                          79
+#define TK_CHECK                           80
+#define TK_REFERENCES                      81
+#define TK_AUTOINCR                        82
+#define TK_ON                              83
+#define TK_INSERT                          84
+#define TK_DELETE                          85
+#define TK_UPDATE                          86
+#define TK_SET                             87
+#define TK_DEFERRABLE                      88
+#define TK_IMMEDIATE                       89
+#define TK_FOREIGN                         90
+#define TK_DROP                            91
+#define TK_VIEW                            92
+#define TK_UNION                           93
+#define TK_ALL                             94
+#define TK_EXCEPT                          95
+#define TK_INTERSECT                       96
+#define TK_SELECT                          97
+#define TK_VALUES                          98
+#define TK_DISTINCT                        99
+#define TK_DOT                            100
+#define TK_FROM                           101
+#define TK_JOIN_KW                        102
+#define TK_JOIN                           103
+#define TK_BY                             104
+#define TK_USING                          105
+#define TK_ORDER                          106
+#define TK_ASC                            107
+#define TK_DESC                           108
+#define TK_GROUP                          109
+#define TK_HAVING                         110
+#define TK_LIMIT                          111
+#define TK_WHERE                          112
+#define TK_INTO                           113
+#define TK_FLOAT                          114
+#define TK_BLOB                           115
+#define TK_INTEGER                        116
+#define TK_VARIABLE                       117
+#define TK_CAST                           118
+#define TK_CASE                           119
+#define TK_WHEN                           120
+#define TK_THEN                           121
+#define TK_ELSE                           122
+#define TK_INDEX                          123
+#define TK_PRAGMA                         124
+#define TK_TRIGGER                        125
+#define TK_OF                             126
+#define TK_FOR                            127
+#define TK_EACH                           128
+#define TK_ROW                            129
+#define TK_ANALYZE                        130
+#define TK_ALTER                          131
+#define TK_WITH                           132
+#define TK_RECURSIVE                      133
+#define TK_STANDARD                       134
+#define TK_TO_TEXT                        135
+#define TK_TO_BLOB                        136
+#define TK_TO_NUMERIC                     137
+#define TK_TO_INT                         138
+#define TK_TO_REAL                        139
+#define TK_ISNOT                          140
+#define TK_END_OF_FILE                    141
+#define TK_UNCLOSED_STRING                142
+#define TK_FUNCTION                       143
+#define TK_COLUMN                         144
+#define TK_AGG_FUNCTION                   145
+#define TK_AGG_COLUMN                     146
+#define TK_UMINUS                         147
+#define TK_UPLUS                          148
+#define TK_REGISTER                       149
+#define TK_VECTOR                         150
+#define TK_SELECT_COLUMN                  151
+#define TK_ASTERISK                       152
+#define TK_SPAN                           153
+#define TK_SPACE                          154
+#define TK_ILLEGAL                        155
 
 /* The token codes above must all fit in 8 bits */
 #define TKFLG_MASK           0xff  
diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
index 914fc53..40cb80f 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -210,7 +210,7 @@ columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
 %ifdef SQLITE_OMIT_COMPOUND_SELECT
   INTERSECT 
 %endif SQLITE_OMIT_COMPOUND_SELECT
-  REINDEX RENAME CTIME_KW IF
+  RENAME CTIME_KW IF
   .
 %wildcard ANY.
 
@@ -1473,11 +1473,12 @@ cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
 %endif  !SQLITE_OMIT_TRIGGER
 
 ////////////////////////// REINDEX collation //////////////////////////////////
-%ifndef SQLITE_OMIT_REINDEX
-cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
-cmd ::= REINDEX nm(X).          {sqlite3Reindex(pParse, &X, 0);}
-cmd ::= REINDEX nm(X) ON nm(Y). {sqlite3Reindex(pParse, &X, &Y);}
-%endif  SQLITE_OMIT_REINDEX
+/* gh-2174: Commended until REINDEX is implemented in scope of gh-3195*/
+/*%ifndef SQLITE_OMIT_REINDEX */
+/*cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}*/
+/*cmd ::= REINDEX nm(X).          {sqlite3Reindex(pParse, &X, 0);}*/
+/*cmd ::= REINDEX nm(X) ON nm(Y). {sqlite3Reindex(pParse, &X, &Y);}*/
+/*%endif  SQLITE_OMIT_REINDEX*/
 
 /////////////////////////////////// ANALYZE ///////////////////////////////////
 %ifndef SQLITE_OMIT_ANALYZE
diff --git a/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua b/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua
new file mode 100755
index 0000000..6aef438
--- /dev/null
+++ b/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua
@@ -0,0 +1,17 @@
+#!/usr/bin/env tarantool
+
+-- this test will be deleted in scope of #3195
+test = require("sqltester")
+test:plan(1)
+
+test:execsql("DROP TABLE IF EXISTS t1");
+test:execsql("CREATE TABLE t1(a INT PRIMARY KEY)");
+test:execsql("CREATE INDEX i1 on t1(a)");
+
+local ok = pcall(test.execsql, test, [[
+    REINDEX i1 ON t1
+]])
+
+test:ok(not ok, 'reindex syntax must be banned')
+
+test:finish_test()
diff --git a/test/sql-tap/keyword1.test.lua b/test/sql-tap/keyword1.test.lua
index 23a561f..fbcd173 100755
--- a/test/sql-tap/keyword1.test.lua
+++ b/test/sql-tap/keyword1.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(176)
+test:plan(175)
 
 --!./tcltestrunner.lua
 -- 2009 January 29
@@ -107,7 +107,6 @@ local bannedkws = {
 	"primary",
 	"recursive",
 	"references",
-	"reindex",
 	"release",
 	"rename",
 	"replace",
diff --git a/test/sql-tap/suite.ini b/test/sql-tap/suite.ini
index 0bc9e83..4be7b42 100644
--- a/test/sql-tap/suite.ini
+++ b/test/sql-tap/suite.ini
@@ -1,5 +1,9 @@
 [default]
 core = app
 description = Database tests with #! using TAP
+disabled = \
+	reindex.test.lua ; These three tests are banned in scope of #2174 \
+	gh2130-index-refer-table.test.lua 
+	misc3.test.lua 
 lua_libs = lua/sqltester.lua ../sql/lua/sql_tokenizer.lua ../box/lua/identifier.lua
 is_parallel = True
-- 
2.7.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [tarantool-patches] [PATCH] sql: ban of REINDEX syntax
  2018-03-15 13:34 ` [tarantool-patches] Re: [patches] [PATCH] Ban of REINDEX syntax Alexander Turenko
  2018-03-15 13:56   ` [tarantool-patches] Re[2]: " Alexander Turenko
  2018-03-19 19:22   ` [tarantool-patches] [PATCH] sql: ban " Ivan Ilyin
@ 2018-03-21 11:06   ` Ivan Ilyin
  2018-03-21 13:02     ` [tarantool-patches] " Alexander Turenko
  2 siblings, 1 reply; 9+ messages in thread
From: Ivan Ilyin @ 2018-03-21 11:06 UTC (permalink / raw)
  To: tarantool-patches; +Cc: alexander.turenko, vanyail

From: vanyail <vanyail@yandex.ru>

This change cut REINDEX syntax from keywords and also disables tests
which were using this syntax.

This patch affects only parser, REINDEX implementation still exists,
because it is planned to be fixed and enabled in the scope of #3195.

Note that REINDEX keyword is still in '%fallback' directive in
'parse.y'. The reason described in 'parse.y' in comment related
to '%fallback'.

Fixes #2174
---

branch: https://github.com/tarantool/tarantool/tree/gh-2174-ban-reindex-syntax
---
 src/box/sql/parse.c                              | 1797 +++++++++++-----------
 src/box/sql/parse.y                              |   22 +-
 test/sql-tap/gh-2174-ban-reindex-syntax.test.lua |   17 +
 test/sql-tap/suite.ini                           |    4 +
 4 files changed, 925 insertions(+), 915 deletions(-)
 create mode 100755 test/sql-tap/gh-2174-ban-reindex-syntax.test.lua

diff --git a/src/box/sql/parse.c b/src/box/sql/parse.c
index 0019b77..3e0d0ef 100644
--- a/src/box/sql/parse.c
+++ b/src/box/sql/parse.c
@@ -81,7 +81,7 @@ static void disableLookaside(Parse *pParse){
   pParse->db->lookaside.bDisable++;
 }
 
-#line 392 "parse.y"
+#line 403 "parse.y"
 
   /*
   ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
@@ -104,7 +104,7 @@ static void disableLookaside(Parse *pParse){
       }
     }
   }
-#line 831 "parse.y"
+#line 842 "parse.y"
 
   /* This is a utility routine used to set the ExprSpan.zStart and
   ** ExprSpan.zEnd values of pOut so that the span covers the complete
@@ -140,7 +140,7 @@ static void disableLookaside(Parse *pParse){
     pOut->zStart = t.z;
     pOut->zEnd = &t.z[t.n];
   }
-#line 939 "parse.y"
+#line 950 "parse.y"
 
   /* This routine constructs a binary expression node out of two ExprSpan
   ** objects and uses the result to populate a new ExprSpan object.
@@ -163,7 +163,7 @@ static void disableLookaside(Parse *pParse){
       pSpan->pExpr = sqlite3PExpr(pParse, TK_NOT, pSpan->pExpr, 0);
     }
   }
-#line 1013 "parse.y"
+#line 1024 "parse.y"
 
   /* Construct an expression node for a unary postfix operator
   */
@@ -176,7 +176,7 @@ static void disableLookaside(Parse *pParse){
     pOperand->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0);
     pOperand->zEnd = &pPostOp->z[pPostOp->n];
   }                           
-#line 1030 "parse.y"
+#line 1041 "parse.y"
 
   /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
   ** unary TK_ISNULL or TK_NOTNULL expression. */
@@ -188,7 +188,7 @@ static void disableLookaside(Parse *pParse){
       pA->pRight = 0;
     }
   }
-#line 1058 "parse.y"
+#line 1069 "parse.y"
 
   /* Construct an expression node for a unary prefix operator
   */
@@ -203,7 +203,7 @@ static void disableLookaside(Parse *pParse){
     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0);
     pOut->zEnd = pOperand->zEnd;
   }
-#line 1263 "parse.y"
+#line 1274 "parse.y"
 
   /* Add a single new term to an ExprList that is used to store a
   ** list of identifiers.  Report an error if the ID list contains
@@ -315,16 +315,16 @@ typedef union {
 #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse
 #define sqlite3ParserARG_STORE yypParser->pParse = pParse
 #define YYFALLBACK 1
-#define YYNSTATE             412
-#define YYNRULE              300
-#define YY_MAX_SHIFT         411
-#define YY_MIN_SHIFTREDUCE   608
-#define YY_MAX_SHIFTREDUCE   907
-#define YY_MIN_REDUCE        908
-#define YY_MAX_REDUCE        1207
-#define YY_ERROR_ACTION      1208
-#define YY_ACCEPT_ACTION     1209
-#define YY_NO_ACTION         1210
+#define YYNSTATE             409
+#define YYNRULE              297
+#define YY_MAX_SHIFT         408
+#define YY_MIN_SHIFTREDUCE   604
+#define YY_MAX_SHIFTREDUCE   900
+#define YY_MIN_REDUCE        901
+#define YY_MAX_REDUCE        1197
+#define YY_ERROR_ACTION      1198
+#define YY_ACCEPT_ACTION     1199
+#define YY_NO_ACTION         1200
 /************* End control #defines *******************************************/
 
 /* Define the yytestcase() macro to be a no-op if is not already defined
@@ -396,301 +396,301 @@ typedef union {
 **  yy_default[]       Default action for each state.
 **
 *********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (1406)
+#define YY_ACTTAB_COUNT (1402)
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */    91,   92,  287,   82,  775,  775,  787,  790,  779,  779,
- /*    10 */    89,   89,   90,   90,   90,   90,  309,   88,   88,   88,
- /*    20 */    88,   87,   87,   86,   86,   86,   85,  309,   90,   90,
+ /*     0 */    91,   92,  285,   82,  771,  771,  783,  786,  775,  775,
+ /*    10 */    89,   89,   90,   90,   90,   90,  307,   88,   88,   88,
+ /*    20 */    88,   87,   87,   86,   86,   86,   85,  307,   90,   90,
  /*    30 */    90,   90,   83,   88,   88,   88,   88,   87,   87,   86,
- /*    40 */    86,   86,   85,  309,  210,  122,  892,   90,   90,   90,
- /*    50 */    90,  634,   88,   88,   88,   88,   87,   87,   86,   86,
- /*    60 */    86,   85,  309,   87,   87,   86,   86,   86,   85,  309,
- /*    70 */   892,   86,   86,   86,   85,  309,   91,   92,  287,   82,
- /*    80 */   775,  775,  787,  790,  779,  779,   89,   89,   90,   90,
- /*    90 */    90,   90,  637,   88,   88,   88,   88,   87,   87,   86,
- /*   100 */    86,   86,   85,  309,   91,   92,  287,   82,  775,  775,
- /*   110 */   787,  790,  779,  779,   89,   89,   90,   90,   90,   90,
- /*   120 */   724,   88,   88,   88,   88,   87,   87,   86,   86,   86,
- /*   130 */    85,  309,  636,   91,   92,  287,   82,  775,  775,  787,
- /*   140 */   790,  779,  779,   89,   89,   90,   90,   90,   90,   67,
+ /*    40 */    86,   86,   85,  307,  208,  201,  885,   90,   90,   90,
+ /*    50 */    90,  122,   88,   88,   88,   88,   87,   87,   86,   86,
+ /*    60 */    86,   85,  307,   87,   87,   86,   86,   86,   85,  307,
+ /*    70 */   885,   86,   86,   86,   85,  307,   91,   92,  285,   82,
+ /*    80 */   771,  771,  783,  786,  775,  775,   89,   89,   90,   90,
+ /*    90 */    90,   90,  630,   88,   88,   88,   88,   87,   87,   86,
+ /*   100 */    86,   86,   85,  307,   91,   92,  285,   82,  771,  771,
+ /*   110 */   783,  786,  775,  775,   89,   89,   90,   90,   90,   90,
+ /*   120 */   287,   88,   88,   88,   88,   87,   87,   86,   86,   86,
+ /*   130 */    85,  307,  705,   91,   92,  285,   82,  771,  771,  783,
+ /*   140 */   786,  775,  775,   89,   89,   90,   90,   90,   90,   67,
  /*   150 */    88,   88,   88,   88,   87,   87,   86,   86,   86,   85,
- /*   160 */   309,  776,  776,  788,  791,  320,   93,   84,   81,  176,
- /*   170 */   307,  306, 1209,  411,    3,  723,  245,  609,  312,  725,
- /*   180 */   726,  376,   91,   92,  287,   82,  775,  775,  787,  790,
- /*   190 */   779,  779,   89,   89,   90,   90,   90,   90,  884,   88,
- /*   200 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  309,
+ /*   160 */   307,  772,  772,  784,  787,  740,   93,  172,  280,  706,
+ /*   170 */   312,  278,  277,  276,  220,  274,  243,  633,  618,  721,
+ /*   180 */   722,  632,   91,   92,  285,   82,  771,  771,  783,  786,
+ /*   190 */   775,  775,   89,   89,   90,   90,   90,   90,  109,   88,
+ /*   200 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  307,
  /*   210 */    88,   88,   88,   88,   87,   87,   86,   86,   86,   85,
- /*   220 */   309,  122,   84,   81,  176,  642,  377, 1160, 1160,  828,
- /*   230 */   780,   91,   92,  287,   82,  775,  775,  787,  790,  779,
- /*   240 */   779,   89,   89,   90,   90,   90,   90,  364,   88,   88,
- /*   250 */    88,   88,   87,   87,   86,   86,   86,   85,  309,  903,
- /*   260 */   747,  903,  122,  410,  410,  172,  653,  710,  765,  220,
- /*   270 */   758,  119,  877,  753,  635,  683,  238,  333,  237,  652,
- /*   280 */    91,   92,  287,   82,  775,  775,  787,  790,  779,  779,
- /*   290 */    89,   89,   90,   90,   90,   90,  877,   88,   88,   88,
- /*   300 */    88,   87,   87,   86,   86,   86,   85,  309,   22,  747,
- /*   310 */   757,  757,  759,  201,  693,  651,  359,  356,  355,  692,
- /*   320 */   165,  710,  703,  766,  122,  238,  333,  237,  354,   91,
- /*   330 */    92,  287,   82,  775,  775,  787,  790,  779,  779,   89,
- /*   340 */    89,   90,   90,   90,   90,  747,   88,   88,   88,   88,
- /*   350 */    87,   87,   86,   86,   86,   85,  309,  696,   84,   81,
- /*   360 */   176,  238,  323,  226,  405,  405,  405,  670,  649,   84,
- /*   370 */    81,  176,  752,  122,  218,  369,  670,  340,   91,   92,
- /*   380 */   287,   82,  775,  775,  787,  790,  779,  779,   89,   89,
- /*   390 */    90,   90,   90,   90,  209,   88,   88,   88,   88,   87,
- /*   400 */    87,   86,   86,   86,   85,  309,   91,   92,  287,   82,
- /*   410 */   775,  775,  787,  790,  779,  779,   89,   89,   90,   90,
- /*   420 */    90,   90,  341,   88,   88,   88,   88,   87,   87,   86,
- /*   430 */    86,   86,   85,  309,   91,   92,  287,   82,  775,  775,
- /*   440 */   787,  790,  779,  779,   89,   89,   90,   90,   90,   90,
- /*   450 */   379,   88,   88,   88,   88,   87,   87,   86,   86,   86,
- /*   460 */    85,  309,   91,   92,  287,   82,  775,  775,  787,  790,
- /*   470 */   779,  779,   89,   89,   90,   90,   90,   90,  145,   88,
- /*   480 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  309,
- /*   490 */   308,  308,  308,   85,  309,   70,   92,  287,   82,  775,
- /*   500 */   775,  787,  790,  779,  779,   89,   89,   90,   90,   90,
- /*   510 */    90,  164,   88,   88,   88,   88,   87,   87,   86,   86,
- /*   520 */    86,   85,  309,   73,  628,  628,  834,  834,  328,   91,
- /*   530 */    80,  287,   82,  775,  775,  787,  790,  779,  779,   89,
- /*   540 */    89,   90,   90,   90,   90,  390,   88,   88,   88,   88,
- /*   550 */    87,   87,   86,   86,   86,   85,  309,  287,   82,  775,
- /*   560 */   775,  787,  790,  779,  779,   89,   89,   90,   90,   90,
+ /*   220 */   307,  344,  165,  706,  341,  638,  286,  305,  304,  824,
+ /*   230 */   776,   91,   92,  285,   82,  771,  771,  783,  786,  775,
+ /*   240 */   775,   89,   89,   90,   90,   90,   90,  333,   88,   88,
+ /*   250 */    88,   88,   87,   87,   86,   86,   86,   85,  307,  182,
+ /*   260 */   743,  666,  645,  407,  407,  180,  313,  122,  137,  218,
+ /*   270 */   666,  119,  624,  624,  631,  679,  236,  330,  235,  877,
+ /*   280 */    91,   92,  285,   82,  771,  771,  783,  786,  775,  775,
+ /*   290 */    89,   89,   90,   90,   90,   90,  743,   88,   88,   88,
+ /*   300 */    88,   87,   87,   86,   86,   86,   85,  307,   22,  215,
+ /*   310 */   404,  183,  236,  320,  224,  761,  896,  754,  896,   54,
+ /*   320 */   749,  720,  705,  762,  122,  216,  366,   48,   48,   91,
+ /*   330 */    92,  285,   82,  771,  771,  783,  786,  775,  775,   89,
+ /*   340 */    89,   90,   90,   90,   90,  265,   88,   88,   88,   88,
+ /*   350 */    87,   87,   86,   86,   86,   85,  307,  753,  753,  755,
+ /*   360 */   223,  199,  382,  367,  356,  353,  352,  649,   84,   81,
+ /*   370 */   176,  699,  748, 1199,  408,    3,  351,  294,   91,   92,
+ /*   380 */   285,   82,  771,  771,  783,  786,  775,  775,   89,   89,
+ /*   390 */    90,   90,   90,   90,  317,   88,   88,   88,   88,   87,
+ /*   400 */    87,   86,   86,   86,   85,  307,   91,   92,  285,   82,
+ /*   410 */   771,  771,  783,  786,  775,  775,   89,   89,   90,   90,
+ /*   420 */    90,   90,  648,   88,   88,   88,   88,   87,   87,   86,
+ /*   430 */    86,   86,   85,  307,   91,   92,  285,   82,  771,  771,
+ /*   440 */   783,  786,  775,  775,   89,   89,   90,   90,   90,   90,
+ /*   450 */   122,   88,   88,   88,   88,   87,   87,   86,   86,   86,
+ /*   460 */    85,  307,   91,   92,  285,   82,  771,  771,  783,  786,
+ /*   470 */   775,  775,   89,   89,   90,   90,   90,   90,  145,   88,
+ /*   480 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  307,
+ /*   490 */  1150, 1150,   84,   81,  176,   70,   92,  285,   82,  771,
+ /*   500 */   771,  783,  786,  775,  775,   89,   89,   90,   90,   90,
+ /*   510 */    90,  647,   88,   88,   88,   88,   87,   87,   86,   86,
+ /*   520 */    86,   85,  307,   73,  207,  122,  402,  402,  402,   91,
+ /*   530 */    80,  285,   82,  771,  771,  783,  786,  775,  775,   89,
+ /*   540 */    89,   90,   90,   90,   90,  376,   88,   88,   88,   88,
+ /*   550 */    87,   87,   86,   86,   86,   85,  307,  285,   82,  771,
+ /*   560 */   771,  783,  786,  775,  775,   89,   89,   90,   90,   90,
  /*   570 */    90,   78,   88,   88,   88,   88,   87,   87,   86,   86,
- /*   580 */    86,   85,  309,  218,  369,  698,  141,  374,  301,  141,
- /*   590 */    75,   76,  275,  628,  628,  283,  282,   77,  286,  280,
- /*   600 */   279,  278,  222,  276,  850,   78,  622,  143,  628,  628,
- /*   610 */   403,    2, 1104,  298,  318,  310,  310,  202,  851,  202,
- /*   620 */   109,  342,  880,  407,   75,   76,  852,  676,  318,  317,
- /*   630 */   644,   77,  392,  182,  677,  162,  174,  765,  336,  758,
- /*   640 */    48,   48,  753,  347,  403,    2,  344,  407,  137,  310,
- /*   650 */   310,  407,  628,  628,  288,  386,  266,  219,  155,  255,
- /*   660 */   362,  250,  361,  205,   48,   48,  392,  755,   48,   48,
- /*   670 */   248,  765,  709,  758,  407,  302,  753,  675,  675,  757,
- /*   680 */   757,  759,  760,  406,   18,  673,  673,  184,  109,  847,
- /*   690 */   318,   48,   48,  180,  315,  122,  336,  122,  751,  385,
- /*   700 */   387,  755,  185,  385,  370,  190,  373,  307,  306,   78,
- /*   710 */   314,  628,  628,  757,  757,  759,  760,  406,   18,  210,
- /*   720 */   407,  892,  109,    9,    9,  331,  385,  375,   75,   76,
- /*   730 */   697,  122,  628,  628,  167,   77,  201,   48,   48,  359,
- /*   740 */   356,  355,  401,   78,  685,  892,  334,  267,  403,    2,
- /*   750 */    20,  354,  266,  310,  310,  372,  898,  744,  902,   23,
- /*   760 */   191,  327,   75,   76,  332,  900,  342,  901,  407,   77,
- /*   770 */   392,  267,  385,  384,  217,  765,  407,  758,  850,  296,
- /*   780 */   753,   19,  403,    2,   54,   10,   10,  310,  310,  407,
- /*   790 */   109,  338,  851,   48,   48,  407,  903,  366,  903,  295,
- /*   800 */   852,  391,  709,  305,  392,  755,   30,   30,  831,  765,
- /*   810 */   830,  758,   10,   10,  753,  407,  326,  757,  757,  759,
- /*   820 */   760,  406,   18,  177,  177,  407,  297,  407,  385,  365,
- /*   830 */   109,  407,   10,   10,  709,  372,  157,  156,  397,  755,
- /*   840 */   225,  367,   48,   48,   10,   10,  200,   68,   47,   47,
- /*   850 */   236,  757,  757,  759,  760,  406,   18,   95,  382,  231,
- /*   860 */   319,  638,  638,  847,  243,  656,   75,   76,  351,  756,
- /*   870 */   203,  360,  186,   77,  820,  822,  657,  380,  177,  177,
- /*   880 */   893,  893,  146,  765,  709,  758,  403,    2,  753,  203,
- /*   890 */   372,  310,  310,    5,  299,  210,  109,  892,  257,  893,
- /*   900 */   893,  810,  265,  709,  321,   74,  407,   72,  392,  230,
- /*   910 */   827,  407,  827,  765,  242,  758,  709,  407,  753,  254,
- /*   920 */   334,  892,  187,   34,   34,  757,  757,  759,   35,   35,
- /*   930 */   253,  407,  894,  712,   36,   36,  820,  110,  343,  149,
- /*   940 */   229,  853,  228,  755,  407,  289,  709,  234,   37,   37,
- /*   950 */   248,  894,  711,  259,  324,  757,  757,  759,  760,  406,
- /*   960 */    18,   38,   38,  407,  289,  407,  161,  160,  159,  407,
- /*   970 */   709,  407,    7,  407,  138,  407,  261,  407,  628,  628,
- /*   980 */    26,   26,   27,   27,  682,  407,   29,   29,   39,   39,
- /*   990 */    40,   40,   41,   41,   11,   11,  407,  709,  407,  693,
- /*  1000 */   407,  163,   42,   42,  692,  407,  342,  407,  678,  407,
- /*  1010 */   264,  407,  710,   97,   97,   43,   43,   44,   44,  407,
- /*  1020 */   751,  407,   31,   31,   45,   45,   46,   46,   32,   32,
- /*  1030 */   407, 1183,  407,  665,  407,  233,  112,  112,  113,  113,
- /*  1040 */   407,  751,  859,  407,  751,  407,  845,  114,  114,   52,
- /*  1050 */    52,   33,   33,  407,  858,  407,  681,   98,   98,  407,
- /*  1060 */    49,   49,   99,   99,  407,  165,  710,  407,  751,  407,
- /*  1070 */   100,  100,   96,   96,  169,  407,  111,  111,  407,  109,
- /*  1080 */   407,  108,  108,  292,  104,  104,  103,  103,  407,  109,
- /*  1090 */   193,  407,  101,  101,  407,  102,  102,   51,   51,  407,
- /*  1100 */   368,  626,  688,  688,  293,   53,   53,  294,   50,   50,
- /*  1110 */    24,   25,   25,  662,  628,  628,   28,   28,    1,  394,
- /*  1120 */   107,  398,  628,  628,  632,  627,  290,  402,  404,  290,
- /*  1130 */    66,  303,  175,  174,  109,  725,  726,   64,  891,  749,
- /*  1140 */   335,  208,  208,  337,  239,  208,   66,  352,  632,  214,
- /*  1150 */   856,  246,  109,   66,  109,  645,  645,  178,  655,  654,
- /*  1160 */   109,  316,  690,  647,   69,  824,  719,  663,  208,  291,
- /*  1170 */   817,  817,  813,  826,  214,  826,  630,  739,  106,  322,
- /*  1180 */   761,  761,  227,  818,  168,  235,  844,  842,  339,  841,
- /*  1190 */   153,  345,  346,  241,  621,  244,  357,  666,  650,  649,
- /*  1200 */   158,  252,  249,  717,  750,  263,  393,  699,  815,  268,
- /*  1210 */   814,  928,  269,  274,  873,  154,  135,  633,  619,  618,
- /*  1220 */   124,  620,  870,  117,   64,  736,  325,   55,  330,  829,
- /*  1230 */   126,  350,  232,  189,  196,  144,  128,  129,  197,  147,
- /*  1240 */   363,  198,  130,  300,  647,  131,  669,  139,  348,  746,
- /*  1250 */   378,  668,  284,    6,   63,  795,  846,   71,  211,  667,
- /*  1260 */   304,   94,  383,  285,  660,  640,   21,  641,   65,  251,
- /*  1270 */   639,  809,  659,  381,  882,  871,  224,  611,  614,  221,
- /*  1280 */   311,  396,  223,  408,  409,  616,  179,  615,  612,  281,
- /*  1290 */   115,  313,  400,  123,  181,  823,  821,  183,  745,  125,
- /*  1300 */   116,  120,  127,  679,  188,  832,  105,  204,  208,  132,
- /*  1310 */   133,  840,  329,  707,  905,  136,  256,  134,   56,  708,
- /*  1320 */   258,  273,  271,  689,  706,  260,  270,  705,  262,  272,
- /*  1330 */    57,   58,   59,  121,  843,  192,  839,  194,    8,  212,
- /*  1340 */    12,  240,  253,  195,  213,  148,  624,  349,  199,  353,
- /*  1350 */   140,  358,   60,   13,  206,  247,   14,  118,   61,  687,
- /*  1360 */   764,  763,  658,  170,  713,  793,   15,    4,   62,  691,
- /*  1370 */   207,  171,  371,  173,  142,   16,  718,   17,   69,   66,
- /*  1380 */   808,  794,  792,  797,  849,  216,  848,  389,  166,  215,
- /*  1390 */   863,  150,  395,  608,  864,  151,  399,  796,  152, 1165,
- /*  1400 */   762,  388,  631,   79,  277,  625,
+ /*   580 */    86,   85,  307,  404,  306,  306,  306,  605,  310,  141,
+ /*   590 */    75,   76,  264,  624,  624,  692,  873,   77,  284,  315,
+ /*   600 */    48,   48,  305,  304,  640,   78,  265,   84,   81,  176,
+ /*   610 */   400,    2, 1097,  315,  314,  308,  308,  200,  199,  200,
+ /*   620 */   141,  356,  353,  352,   75,   76,  273,  624,  624,  281,
+ /*   630 */   404,   77,  389,  351,  387,  382,  372,  761,  303,  754,
+ /*   640 */   743, 1173,  749,  661,  400,    2,  404,   10,   10,  308,
+ /*   650 */   308,  891,  299,  895,  383,  373,  236,  330,  235,  371,
+ /*   660 */   893,  293,  894,   48,   48,  361,  389,  751,  348,  333,
+ /*   670 */   201,  761,  846,  754,  705,  315,  749,  296,  398,  753,
+ /*   680 */   753,  755,  756,  403,   18,  138,  847,  109,  404,  624,
+ /*   690 */   624,  896,  109,  896,  848,  672,  164,  122,  382,  384,
+ /*   700 */   374,  751,  673,  843,  122,   48,   48,  162,  174,   78,
+ /*   710 */   719,  843,  184,  753,  753,  755,  756,  403,   18,  886,
+ /*   720 */   886,  217,  155,  253,  359,  248,  358,  203,   75,   76,
+ /*   730 */   693,  122,  689,  189,  246,   77,  109,  688,  404,  328,
+ /*   740 */   382,  381,  870,   78,  109,  287,  363,  404,  400,    2,
+ /*   750 */   246,   85,  307,  308,  308,   30,   30,   84,   81,  176,
+ /*   760 */   331,  658,   75,   76,   48,   48,  870,  404,  331,   77,
+ /*   770 */   389,  887,  708,   23,  370,  761,  167,  754,  329,  109,
+ /*   780 */   749,  255,  400,    2,   10,   10,  340,  308,  308,  404,
+ /*   790 */   364,    9,    9,  216,  366,  404,  177,  177,  295,  382,
+ /*   800 */   362,  830,  830,  325,  389,  751,   48,   48,  369,  761,
+ /*   810 */   705,  754,   10,   10,  749,  659,  404,  753,  753,  755,
+ /*   820 */   756,  403,   18,  624,  624,  404,  198,  404,  339,  886,
+ /*   830 */   886,  671,  671,   48,   48,  316,  157,  156,  823,  751,
+ /*   840 */   823,  300,   47,   47,   10,   10,   66,   68,  185,  816,
+ /*   850 */   818,  753,  753,  755,  756,  403,   18,   95,  379,  146,
+ /*   860 */   404,  634,  634,  177,  177,  652,   75,   76,  377,  241,
+ /*   870 */     5,  357,  208,   77,  885,  369,  653,   34,   34,  643,
+ /*   880 */   339,  887,  707,  761,  404,  754,  400,    2,  749,  318,
+ /*   890 */   705,  308,  308,  706,  297,  229,  263,  705,  885,  404,
+ /*   900 */    24,   35,   35,  335,  624,  624,  806,  846,  389,  624,
+ /*   910 */   624,  816,  188,  761,  404,  754,   36,   36,  749,  240,
+ /*   920 */   178,  847,  404,  747,  404,  753,  753,  755,  849,  848,
+ /*   930 */   388,   37,   37,  404,  705,  321,  404,  669,  669,   38,
+ /*   940 */    38,   26,   26,  751,  404,  228,  165,  706,  404,  841,
+ /*   950 */    27,   27,  232,   29,   29,  753,  753,  755,  756,  403,
+ /*   960 */    18,   39,   39,  404,  234,   40,   40,  827,  264,  826,
+ /*   970 */   404,  705,  678,  404,  921,  323,  227,  404,  226,  404,
+ /*   980 */    41,   41,  109,  623,  288,  404,  324,   11,   11,  404,
+ /*   990 */    42,   42,  143,  404,   97,   97,   43,   43,  404,  747,
+ /*  1000 */   404,  257,   44,   44,  404,  339,   31,   31,  404,  674,
+ /*  1010 */    45,   45,  404,  747,  404,   46,   46,   32,   32,  404,
+ /*  1020 */   752,  112,  112,  252,  694,  113,  113,  404,  705,  114,
+ /*  1030 */   114,   52,   52,  404,  251,  404,   33,   33,  404,  677,
+ /*  1040 */   404,  208,  404,  885,   98,   98,  404,  624,  624,  259,
+ /*  1050 */    49,   49,   99,   99,  394,  100,  100,   96,   96,  111,
+ /*  1060 */   111,  404,  290,  108,  108,  404,  231,  885,  404,  747,
+ /*  1070 */   404,  747,  109,  404,  163,  404,  291,  404,  104,  104,
+ /*  1080 */   404,  169,  103,  103,  404,  101,  101,  102,  102,  191,
+ /*  1090 */    51,   51,   53,   53,   50,   50,  107,   25,   25,    1,
+ /*  1100 */   628,   28,   28,  624,  624,  365,  681,  684,  684,  622,
+ /*  1110 */   161,  160,  159,  401,  288,  391,  395,  369,  399,  175,
+ /*  1120 */   174,  337,  721,  722,  628,   74,  884,   72,  689,  110,
+ /*  1130 */   262,  149,  292,  688,  301,  745,   20,  206,  332,  334,
+ /*  1140 */   206,  206,  109,  237,   64,   66,  651,  650,  109,  109,
+ /*  1150 */   349,  109,  212,  244,  822,   66,  822,  641,  641,  686,
+ /*  1160 */   715,   69,  206,    7,  813,  813,  338,   19,  735,  809,
+ /*  1170 */   626,  212,  106,  852,  757,  757,  319,  851,  153,  820,
+ /*  1180 */   289,  814,  225,  168,  233,  838,  840,  837,  336,  342,
+ /*  1190 */   343,  239,  354,  617,  242,  158,  662,  646,  247,  713,
+ /*  1200 */   645,  746,  261,  695,  250,  390,  811,  266,  810,  267,
+ /*  1210 */   272,  629,  154,  866,  615,  614,  616,  863,  135,  124,
+ /*  1220 */   117,   64,  322,  825,  732,   55,  327,  230,  347,  187,
+ /*  1230 */   147,  194,  144,  195,  126,  360,  196,  298,  643,  128,
+ /*  1240 */   665,  129,  130,  131,  345,  282,  664,  139,  663,  375,
+ /*  1250 */    63,    6,  742,   71,  842,  637,  302,  283,  636,  656,
+ /*  1260 */    94,  249,  635,  875,  380,   65,  805,  655,  378,   21,
+ /*  1270 */   864,  222,  607,  610,  309,  179,  819,  219,  279,  221,
+ /*  1280 */   405,  406,  612,  611,  608,  311,  123,  817,  181,  393,
+ /*  1290 */   741,  115,  397,  125,  120,  127,  186,  675,  116,  828,
+ /*  1300 */   703,  133,  206,  132,  836,  898,  254,  326,  136,  134,
+ /*  1310 */   105,  704,  256,  202,  702,   56,   57,   58,  258,  269,
+ /*  1320 */   701,  260,  685,  268,  270,  271,   59,  839,  121,  835,
+ /*  1330 */   791,  190,  192,   12,  209,  238,    8,  193,  148,  620,
+ /*  1340 */   346,  197,  140,  210,  211,  251,  350,  355,  654,  204,
+ /*  1350 */   118,   60,   13,  683,  245,   14,   61,   62,  170,  760,
+ /*  1360 */   759,  789,   15,  385,  687,    4,  714,  368,  171,  173,
+ /*  1370 */   205,  142,   69,  709,  166,   16,   66,   17,  804,  790,
+ /*  1380 */   788,  793,  845,  214,  844,  386,  856,  150,  392,  275,
+ /*  1390 */   857,  213,  151,  396,  792,  152,  604,  758,  627,   79,
+ /*  1400 */  1155,  621,
 };
 static const YYCODETYPE yy_lookahead[] = {
  /*     0 */     5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
  /*    10 */    15,   16,   17,   18,   19,   20,   32,   22,   23,   24,
  /*    20 */    25,   26,   27,   28,   29,   30,   31,   32,   17,   18,
  /*    30 */    19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
- /*    40 */    29,   30,   31,   32,   49,  133,   51,   17,   18,   19,
- /*    50 */    20,  160,   22,   23,   24,   25,   26,   27,   28,   29,
+ /*    40 */    29,   30,   31,   32,   49,    9,   51,   17,   18,   19,
+ /*    50 */    20,  133,   22,   23,   24,   25,   26,   27,   28,   29,
  /*    60 */    30,   31,   32,   26,   27,   28,   29,   30,   31,   32,
  /*    70 */    75,   28,   29,   30,   31,   32,    5,    6,    7,    8,
  /*    80 */     9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
  /*    90 */    19,   20,  160,   22,   23,   24,   25,   26,   27,   28,
  /*   100 */    29,   30,   31,   32,    5,    6,    7,    8,    9,   10,
  /*   110 */    11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
- /*   120 */   163,   22,   23,   24,   25,   26,   27,   28,   29,   30,
- /*   130 */    31,   32,  160,    5,    6,    7,    8,    9,   10,   11,
+ /*   120 */    84,   22,   23,   24,   25,   26,   27,   28,   29,   30,
+ /*   130 */    31,   32,  143,    5,    6,    7,    8,    9,   10,   11,
  /*   140 */    12,   13,   14,   15,   16,   17,   18,   19,   20,   50,
  /*   150 */    22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
- /*   160 */    32,    9,   10,   11,   12,   77,   67,  210,  211,  212,
- /*   170 */    26,   27,  136,  137,  138,  163,   48,    1,    2,  108,
- /*   180 */   109,    7,    5,    6,    7,    8,    9,   10,   11,   12,
- /*   190 */    13,   14,   15,   16,   17,   18,   19,   20,  173,   22,
+ /*   160 */    32,    9,   10,   11,   12,  151,   67,   48,   34,   50,
+ /*   170 */   181,   37,   38,   39,   40,   41,   48,  160,   44,  108,
+ /*   180 */   109,  160,    5,    6,    7,    8,    9,   10,   11,   12,
+ /*   190 */    13,   14,   15,   16,   17,   18,   19,   20,  184,   22,
  /*   200 */    23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
  /*   210 */    22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
- /*   220 */    32,  133,  210,  211,  212,   48,   52,   98,   99,   38,
+ /*   220 */    32,  217,  103,  104,  220,   48,   92,   26,   27,   38,
  /*   230 */    78,    5,    6,    7,    8,    9,   10,   11,   12,   13,
- /*   240 */    14,   15,   16,   17,   18,   19,   20,   28,   22,   23,
- /*   250 */    24,   25,   26,   27,   28,   29,   30,   31,   32,  115,
- /*   260 */    69,  117,  133,  139,  140,   48,  169,   50,   73,  145,
- /*   270 */    75,  147,   51,   78,   48,  151,   85,   86,   87,  169,
+ /*   240 */    14,   15,   16,   17,   18,   19,   20,  143,   22,   23,
+ /*   250 */    24,   25,   26,   27,   28,   29,   30,   31,   32,  125,
+ /*   260 */    69,  167,  168,  139,  140,  131,  132,  133,   47,  145,
+ /*   270 */   176,  147,   51,   52,   48,  151,   85,   86,   87,  173,
  /*   280 */     5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
- /*   290 */    15,   16,   17,   18,   19,   20,   75,   22,   23,   24,
- /*   300 */    25,   26,   27,   28,   29,   30,   31,   32,  184,   69,
- /*   310 */   115,  116,  117,   76,   95,  169,   79,   80,   81,  100,
- /*   320 */   103,  104,  201,   48,  133,   85,   86,   87,   91,    5,
+ /*   290 */    15,   16,   17,   18,   19,   20,   69,   22,   23,   24,
+ /*   300 */    25,   26,   27,   28,   29,   30,   31,   32,  184,  187,
+ /*   310 */   143,  207,   85,   86,   87,   73,  115,   75,  117,  197,
+ /*   320 */    78,  163,  143,   48,  133,   98,   99,  160,  161,    5,
  /*   330 */     6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
- /*   340 */    16,   17,   18,   19,   20,   69,   22,   23,   24,   25,
- /*   350 */    26,   27,   28,   29,   30,   31,   32,  198,  210,  211,
- /*   360 */   212,   85,   86,   87,  156,  157,  158,  167,  168,  210,
- /*   370 */   211,  212,   48,  133,   98,   99,  176,    7,    5,    6,
+ /*   340 */    16,   17,   18,   19,   20,  143,   22,   23,   24,   25,
+ /*   350 */    26,   27,   28,   29,   30,   31,   32,  115,  116,  117,
+ /*   360 */   181,   76,  195,  196,   79,   80,   81,  169,  210,  211,
+ /*   370 */   212,  201,   48,  136,  137,  138,   91,  175,    5,    6,
  /*   380 */     7,    8,    9,   10,   11,   12,   13,   14,   15,   16,
- /*   390 */    17,   18,   19,   20,  198,   22,   23,   24,   25,   26,
+ /*   390 */    17,   18,   19,   20,   77,   22,   23,   24,   25,   26,
  /*   400 */    27,   28,   29,   30,   31,   32,    5,    6,    7,    8,
  /*   410 */     9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
- /*   420 */    19,   20,   52,   22,   23,   24,   25,   26,   27,   28,
+ /*   420 */    19,   20,  169,   22,   23,   24,   25,   26,   27,   28,
  /*   430 */    29,   30,   31,   32,    5,    6,    7,    8,    9,   10,
  /*   440 */    11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
- /*   450 */   205,   22,   23,   24,   25,   26,   27,   28,   29,   30,
+ /*   450 */   133,   22,   23,   24,   25,   26,   27,   28,   29,   30,
  /*   460 */    31,   32,    5,    6,    7,    8,    9,   10,   11,   12,
  /*   470 */    13,   14,   15,   16,   17,   18,   19,   20,   49,   22,
  /*   480 */    23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
- /*   490 */   156,  157,  158,   31,   32,  122,    6,    7,    8,    9,
+ /*   490 */    98,   99,  210,  211,  212,  122,    6,    7,    8,    9,
  /*   500 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
- /*   510 */    20,  205,   22,   23,   24,   25,   26,   27,   28,   29,
- /*   520 */    30,   31,   32,  122,   51,   52,   85,   86,   87,    5,
+ /*   510 */    20,  169,   22,   23,   24,   25,   26,   27,   28,   29,
+ /*   520 */    30,   31,   32,  122,  198,  133,  156,  157,  158,    5,
  /*   530 */     6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
- /*   540 */    16,   17,   18,   19,   20,  179,   22,   23,   24,   25,
+ /*   540 */    16,   17,   18,   19,   20,  205,   22,   23,   24,   25,
  /*   550 */    26,   27,   28,   29,   30,   31,   32,    7,    8,    9,
  /*   560 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
  /*   570 */    20,    7,   22,   23,   24,   25,   26,   27,   28,   29,
- /*   580 */    30,   31,   32,   98,   99,   28,  143,  151,    7,  143,
- /*   590 */    26,   27,  149,   51,   52,  152,   34,   33,  152,   37,
- /*   600 */    38,   39,   40,   41,   39,    7,   44,  134,   51,   52,
- /*   610 */    46,   47,   48,   32,  143,   51,   52,  171,   53,  173,
- /*   620 */   184,  143,  159,  143,   26,   27,   61,   62,  157,  158,
- /*   630 */   167,   33,   68,   71,   69,  199,  200,   73,  143,   75,
- /*   640 */   160,  161,   78,  217,   46,   47,  220,  143,   47,   51,
- /*   650 */    52,  143,   51,   52,   92,  151,  143,   76,   77,   78,
- /*   660 */    79,   80,   81,   82,  160,  161,   68,  103,  160,  161,
- /*   670 */    89,   73,  143,   75,  143,  195,   78,  178,  179,  115,
- /*   680 */   116,  117,  118,  119,  120,  178,  179,  125,  184,  151,
- /*   690 */   219,  160,  161,  131,  132,  133,  143,  133,  143,  195,
- /*   700 */   196,  103,  207,  195,  196,  227,  143,   26,   27,    7,
- /*   710 */   181,   51,   52,  115,  116,  117,  118,  119,  120,   49,
- /*   720 */   143,   51,  184,  160,  161,  223,  195,  196,   26,   27,
- /*   730 */    28,  133,   51,   52,  222,   33,   76,  160,  161,   79,
- /*   740 */    80,   81,  229,    7,  183,   75,  208,  143,   46,   47,
- /*   750 */    16,   91,  143,   51,   52,  194,   75,  151,   77,  221,
- /*   760 */   207,  206,   26,   27,  226,   84,  143,   86,  143,   33,
- /*   770 */    68,  143,  195,  196,  187,   73,  143,   75,   39,  175,
- /*   780 */    78,   47,   46,   47,  197,  160,  161,   51,   52,  143,
- /*   790 */   184,  143,   53,  160,  161,  143,  115,  151,  117,  174,
- /*   800 */    61,   62,  143,  175,   68,  103,  160,  161,   56,   73,
- /*   810 */    58,   75,  160,  161,   78,  143,   64,  115,  116,  117,
- /*   820 */   118,  119,  120,  182,  183,  143,  174,  143,  195,  196,
- /*   830 */   184,  143,  160,  161,  143,  194,   26,   27,  229,  103,
- /*   840 */   181,  195,  160,  161,  160,  161,  174,    7,  160,  161,
- /*   850 */   227,  115,  116,  117,  118,  119,  120,   47,  174,   43,
- /*   860 */   143,   51,   52,  151,   43,   59,   26,   27,    7,  143,
- /*   870 */     9,   65,  181,   33,  157,  158,   70,  195,  182,  183,
- /*   880 */    51,   52,  185,   73,  143,   75,   46,   47,   78,    9,
- /*   890 */   194,   51,   52,   47,   88,   49,  184,   51,  198,   51,
- /*   900 */    52,   80,  214,  143,  208,  121,  143,  123,   68,   93,
- /*   910 */   115,  143,  117,   73,   93,   75,  143,  143,   78,   78,
- /*   920 */   208,   75,  181,  160,  161,  115,  116,  117,  160,  161,
- /*   930 */    89,  143,  103,  104,  160,  161,  219,   47,  226,   49,
- /*   940 */   124,  181,  126,  103,  143,   84,  143,  126,  160,  161,
- /*   950 */    89,  103,  104,  198,  181,  115,  116,  117,  118,  119,
- /*   960 */   120,  160,  161,  143,   84,  143,   85,   86,   87,  143,
- /*   970 */   143,  143,  186,  143,   47,  143,  198,  143,   51,   52,
- /*   980 */   160,  161,  160,  161,  181,  143,  160,  161,  160,  161,
- /*   990 */   160,  161,  160,  161,  160,  161,  143,  143,  143,   95,
- /*  1000 */   143,  143,  160,  161,  100,  143,  143,  143,  181,  143,
- /*  1010 */   143,  143,   50,  160,  161,  160,  161,  160,  161,  143,
- /*  1020 */   143,  143,  160,  161,  160,  161,  160,  161,  160,  161,
- /*  1030 */   143,   48,  143,   50,  143,  181,  160,  161,  160,  161,
- /*  1040 */   143,  143,  143,  143,  143,  143,  151,  160,  161,  160,
- /*  1050 */   161,  160,  161,  143,  143,  143,  151,  160,  161,  143,
- /*  1060 */   160,  161,  160,  161,  143,  103,  104,  143,  143,  143,
- /*  1070 */   160,  161,  160,  161,   50,  143,  160,  161,  143,  184,
- /*  1080 */   143,  160,  161,  206,  160,  161,  160,  161,  143,  184,
- /*  1090 */   227,  143,  160,  161,  143,  160,  161,  160,  161,  143,
- /*  1100 */    94,  151,   96,   97,  206,  160,  161,  206,  160,  161,
- /*  1110 */    47,  160,  161,   36,   51,   52,  160,  161,   47,  151,
- /*  1120 */    47,  151,   51,   52,   51,  154,  155,  151,  154,  155,
- /*  1130 */    50,  206,  199,  200,  184,  108,  109,  113,   50,   48,
- /*  1140 */    48,   50,   50,   48,   48,   50,   50,   48,   75,   50,
- /*  1150 */   143,   48,  184,   50,  184,   51,   52,   47,   77,   78,
- /*  1160 */   184,  143,   48,   83,   50,  143,   48,   90,   50,  143,
- /*  1170 */    51,   52,   48,  115,   50,  117,   48,  189,   50,  202,
- /*  1180 */    51,   52,  202,  143,  143,  228,  189,  143,  228,  143,
- /*  1190 */   102,  143,  143,  143,  143,  143,  164,  143,  143,  168,
- /*  1200 */   172,  163,  143,  143,  143,  202,  216,  143,  163,  143,
- /*  1210 */   163,  101,  143,  188,  146,  186,   47,  143,  143,  143,
- /*  1220 */   209,  143,  143,    5,  113,  189,   45,  121,  128,  225,
- /*  1230 */   177,   45,  224,  148,  148,   47,  180,  180,  148,  209,
- /*  1240 */    84,  148,  180,   63,   83,  180,  162,  177,  165,  177,
- /*  1250 */   106,  162,  165,   47,   84,  213,  189,  121,  215,  162,
- /*  1260 */    32,  112,  107,  165,  170,  164,   50,  162,  111,  162,
- /*  1270 */   162,  189,  170,  110,  162,   40,   35,    4,   36,  144,
- /*  1280 */     3,  165,  144,  150,  142,  142,   42,  142,  142,  141,
- /*  1290 */   153,   72,  165,   43,   84,   48,   48,  101,   99,  114,
- /*  1300 */   153,   88,  102,   46,   84,  127,  166,  166,   50,  127,
- /*  1310 */    84,    1,  129,  204,  130,  114,  203,  102,   16,  204,
- /*  1320 */   203,  189,  191,  193,  204,  203,  192,  204,  203,  190,
- /*  1330 */    16,   16,   16,   88,   52,  105,    1,  101,   34,  218,
- /*  1340 */    47,  124,   89,   84,  218,   49,   46,    7,   82,   66,
- /*  1350 */    47,   66,   47,   47,   66,   48,   47,   60,   47,   95,
- /*  1360 */    48,   48,   54,  101,  104,   48,   47,   47,   50,   48,
- /*  1370 */   105,   48,   50,   48,   47,  105,   52,  105,   50,   50,
- /*  1380 */    48,   48,   48,   38,   48,  101,   48,   50,   47,   50,
- /*  1390 */    48,   47,   49,    1,   48,   47,   49,   48,   47,    0,
- /*  1400 */    48,   75,   48,   47,   42,   48,
+ /*   580 */    30,   31,   32,  143,  156,  157,  158,    1,    2,  143,
+ /*   590 */    26,   27,  143,   51,   52,  198,  159,   33,  152,  143,
+ /*   600 */   160,  161,   26,   27,  167,    7,  143,  210,  211,  212,
+ /*   610 */    46,   47,   48,  157,  158,   51,   52,  171,   76,  173,
+ /*   620 */   143,   79,   80,   81,   26,   27,  149,   51,   52,  152,
+ /*   630 */   143,   33,   68,   91,  179,  195,  196,   73,  175,   75,
+ /*   640 */    69,   48,   78,   50,   46,   47,  143,  160,  161,   51,
+ /*   650 */    52,   75,    7,   77,  151,    7,   85,   86,   87,  151,
+ /*   660 */    84,  174,   86,  160,  161,   28,   68,  103,    7,  143,
+ /*   670 */     9,   73,   39,   75,  143,  219,   78,   32,  229,  115,
+ /*   680 */   116,  117,  118,  119,  120,   47,   53,  184,  143,   51,
+ /*   690 */    52,  115,  184,  117,   61,   62,  205,  133,  195,  196,
+ /*   700 */    52,  103,   69,  151,  133,  160,  161,  199,  200,    7,
+ /*   710 */   163,  151,  181,  115,  116,  117,  118,  119,  120,   51,
+ /*   720 */    52,   76,   77,   78,   79,   80,   81,   82,   26,   27,
+ /*   730 */    28,  133,   95,  207,   89,   33,  184,  100,  143,  223,
+ /*   740 */   195,  196,   51,    7,  184,   84,  151,  143,   46,   47,
+ /*   750 */    89,   31,   32,   51,   52,  160,  161,  210,  211,  212,
+ /*   760 */   208,   36,   26,   27,  160,  161,   75,  143,  208,   33,
+ /*   770 */    68,  103,  104,  221,  143,   73,  222,   75,  226,  184,
+ /*   780 */    78,  198,   46,   47,  160,  161,  226,   51,   52,  143,
+ /*   790 */   195,  160,  161,   98,   99,  143,  182,  183,  174,  195,
+ /*   800 */   196,   85,   86,   87,   68,  103,  160,  161,  194,   73,
+ /*   810 */   143,   75,  160,  161,   78,   90,  143,  115,  116,  117,
+ /*   820 */   118,  119,  120,   51,   52,  143,  174,  143,  143,   51,
+ /*   830 */    52,  178,  179,  160,  161,  143,   26,   27,  115,  103,
+ /*   840 */   117,  195,  160,  161,  160,  161,   50,    7,  181,  157,
+ /*   850 */   158,  115,  116,  117,  118,  119,  120,   47,  174,  185,
+ /*   860 */   143,   51,   52,  182,  183,   59,   26,   27,  195,   43,
+ /*   870 */    47,   65,   49,   33,   51,  194,   70,  160,  161,   83,
+ /*   880 */   143,  103,  104,   73,  143,   75,   46,   47,   78,  208,
+ /*   890 */   143,   51,   52,   50,   88,   43,  214,  143,   75,  143,
+ /*   900 */    47,  160,  161,  143,   51,   52,   80,   39,   68,   51,
+ /*   910 */    52,  219,  227,   73,  143,   75,  160,  161,   78,   93,
+ /*   920 */    47,   53,  143,  143,  143,  115,  116,  117,  181,   61,
+ /*   930 */    62,  160,  161,  143,  143,  181,  143,  178,  179,  160,
+ /*   940 */   161,  160,  161,  103,  143,   93,  103,  104,  143,  151,
+ /*   950 */   160,  161,  126,  160,  161,  115,  116,  117,  118,  119,
+ /*   960 */   120,  160,  161,  143,  227,  160,  161,   56,  143,   58,
+ /*   970 */   143,  143,  181,  143,  101,   64,  124,  143,  126,  143,
+ /*   980 */   160,  161,  184,  154,  155,  143,  206,  160,  161,  143,
+ /*   990 */   160,  161,  134,  143,  160,  161,  160,  161,  143,  143,
+ /*  1000 */   143,  198,  160,  161,  143,  143,  160,  161,  143,  181,
+ /*  1010 */   160,  161,  143,  143,  143,  160,  161,  160,  161,  143,
+ /*  1020 */   143,  160,  161,   78,   28,  160,  161,  143,  143,  160,
+ /*  1030 */   161,  160,  161,  143,   89,  143,  160,  161,  143,  151,
+ /*  1040 */   143,   49,  143,   51,  160,  161,  143,   51,   52,  198,
+ /*  1050 */   160,  161,  160,  161,  229,  160,  161,  160,  161,  160,
+ /*  1060 */   161,  143,  206,  160,  161,  143,  181,   75,  143,  143,
+ /*  1070 */   143,  143,  184,  143,  143,  143,  206,  143,  160,  161,
+ /*  1080 */   143,   50,  160,  161,  143,  160,  161,  160,  161,  227,
+ /*  1090 */   160,  161,  160,  161,  160,  161,   47,  160,  161,   47,
+ /*  1100 */    51,  160,  161,   51,   52,   94,  183,   96,   97,  151,
+ /*  1110 */    85,   86,   87,  154,  155,  151,  151,  194,  151,  199,
+ /*  1120 */   200,    7,  108,  109,   75,  121,   50,  123,   95,   47,
+ /*  1130 */   143,   49,  206,  100,  206,   48,   16,   50,   48,   48,
+ /*  1140 */    50,   50,  184,   48,  113,   50,   77,   78,  184,  184,
+ /*  1150 */    48,  184,   50,   48,  115,   50,  117,   51,   52,   48,
+ /*  1160 */    48,   50,   50,  186,   51,   52,   52,   47,  189,   48,
+ /*  1170 */    48,   50,   50,  143,   51,   52,  202,  143,  102,  143,
+ /*  1180 */   143,  143,  202,  143,  228,  143,  189,  143,  228,  143,
+ /*  1190 */   143,  143,  164,  143,  143,  172,  143,  143,  143,  143,
+ /*  1200 */   168,  143,  202,  143,  163,  216,  163,  143,  163,  143,
+ /*  1210 */   188,  143,  186,  146,  143,  143,  143,  143,   47,  209,
+ /*  1220 */     5,  113,   45,  225,  189,  121,  128,  224,   45,  148,
+ /*  1230 */   209,  148,   47,  148,  177,   84,  148,   63,   83,  180,
+ /*  1240 */   162,  180,  180,  180,  165,  165,  162,  177,  162,  106,
+ /*  1250 */    84,   47,  177,  121,  189,  162,   32,  165,  164,  170,
+ /*  1260 */   112,  162,  162,  162,  107,  111,  189,  170,  110,   50,
+ /*  1270 */    40,   35,    4,   36,    3,   42,   48,  144,  141,  144,
+ /*  1280 */   150,  142,  142,  142,  142,   72,   43,   48,  101,  165,
+ /*  1290 */    99,  153,  165,  114,   88,  102,   84,   46,  153,  127,
+ /*  1300 */   204,   84,   50,  127,    1,  130,  203,  129,  114,  102,
+ /*  1310 */   166,  204,  203,  166,  204,   16,   16,   16,  203,  191,
+ /*  1320 */   204,  203,  193,  192,  190,  189,   16,   52,   88,    1,
+ /*  1330 */   213,  105,  101,   47,  215,  124,   34,   84,   49,   46,
+ /*  1340 */     7,   82,   47,  218,  218,   89,   66,   66,   54,   66,
+ /*  1350 */    60,   47,   47,   95,   48,   47,   47,   50,  101,   48,
+ /*  1360 */    48,   48,   47,   75,   48,   47,   52,   50,   48,   48,
+ /*  1370 */   105,   47,   50,  104,   47,  105,   50,  105,   48,   48,
+ /*  1380 */    48,   38,   48,  101,   48,   50,   48,   47,   49,   42,
+ /*  1390 */    48,   50,   47,   49,   48,   47,    1,   48,   48,   47,
+ /*  1400 */     0,   48,
 };
-#define YY_SHIFT_USE_DFLT (1406)
-#define YY_SHIFT_COUNT    (411)
-#define YY_SHIFT_MIN      (-88)
-#define YY_SHIFT_MAX      (1399)
+#define YY_SHIFT_USE_DFLT (1402)
+#define YY_SHIFT_COUNT    (408)
+#define YY_SHIFT_MIN      (-82)
+#define YY_SHIFT_MAX      (1400)
 static const short yy_shift_ofst[] = {
- /*     0 */   176,  564,  598,  562,  736,  736,  736,  736,  240,   -5,
- /*    10 */    71,   71,  736,  736,  736,  736,  736,  736,  736,  681,
- /*    20 */   681,  660,  276,  191,  129,   99,  128,  177,  226,  275,
+ /*     0 */   586,  564,  598,  134,  736,  736,  736,  736,  571,   -5,
+ /*    10 */    71,   71,  736,  736,  736,  736,  736,  736,  736,  576,
+ /*    20 */   576,  542,  227,  191,  392,   99,  128,  177,  226,  275,
  /*    30 */   324,  373,  401,  429,  457,  457,  457,  457,  457,  457,
  /*    40 */   457,  457,  457,  457,  457,  457,  457,  457,  457,  524,
  /*    50 */   457,  490,  550,  550,  702,  736,  736,  736,  736,  736,
@@ -698,117 +698,115 @@ static const short yy_shift_ofst[] = {
  /*    70 */   736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
  /*    80 */   736,  736,  840,  736,  736,  736,  736,  736,  736,  736,
  /*    90 */   736,  736,  736,  736,  736,  736,   11,   30,   30,   30,
- /*   100 */    30,   30,  188,   37,   43,  861,  144,  144,  462,  485,
- /*   110 */   542,  -16, 1406, 1406, 1406,  581,  581,  565,  565,  821,
- /*   120 */   601,  601,  473,  542,   88,  542,  542,  542,  542,  542,
- /*   130 */   542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
- /*   140 */   542,  221,  542,  542,  542,  221,  485,  -88,  -88,  -88,
- /*   150 */   -88,  -88,  -88, 1406, 1406,  810,  195,  195,  237,  806,
- /*   160 */   806,  806,  217,  846,  829,  848,  739,  441,  752,  927,
- /*   170 */   557,  670,  670,  670, 1063,  962, 1071, 1006,  219,  542,
- /*   180 */   542,  542,  542,  542,  542, 1024,  174,  174,  542,  542,
- /*   190 */   370, 1024,  542,  370,  542,  542,  542,  542,  542,  542,
- /*   200 */  1080,  542,  983,  542,  880,  542, 1027,  542,  542,  174,
- /*   210 */   542,  784, 1027, 1027,  542,  542,  542, 1088,  904,  542,
- /*   220 */   890,  542,  542,  542,  542, 1169, 1218, 1111, 1181, 1181,
- /*   230 */  1181, 1181, 1106, 1100, 1186, 1111, 1169, 1218, 1218, 1111,
- /*   240 */  1186, 1188, 1186, 1186, 1188, 1156, 1156, 1156, 1180, 1188,
- /*   250 */  1156, 1161, 1156, 1180, 1156, 1156, 1144, 1170, 1144, 1170,
- /*   260 */  1144, 1170, 1144, 1170, 1206, 1136, 1188, 1228, 1228, 1188,
- /*   270 */  1149, 1155, 1157, 1163, 1111, 1216, 1235, 1235, 1241, 1241,
- /*   280 */  1241, 1241, 1242, 1406, 1406, 1406, 1406,  152,  816,  881,
- /*   290 */  1073,  734, 1091, 1092, 1095, 1096, 1099, 1103, 1104, 1081,
- /*   300 */  1077,  841, 1114, 1118, 1119, 1124,  795, 1058, 1128, 1129,
- /*   310 */  1110, 1273, 1277, 1244, 1219, 1250, 1210, 1247, 1248, 1196,
- /*   320 */  1199, 1185, 1213, 1200, 1220, 1257, 1178, 1258, 1182, 1184,
- /*   330 */  1183, 1226, 1310, 1215, 1201, 1302, 1314, 1315, 1316, 1245,
- /*   340 */  1282, 1230, 1236, 1335, 1304, 1293, 1259, 1217, 1296, 1300,
- /*   350 */  1340, 1253, 1266, 1303, 1283, 1305, 1306, 1307, 1309, 1285,
- /*   360 */  1308, 1311, 1288, 1297, 1312, 1313, 1317, 1318, 1264, 1319,
- /*   370 */  1321, 1320, 1322, 1262, 1323, 1325, 1324, 1265, 1327, 1260,
- /*   380 */  1328, 1270, 1329, 1272, 1332, 1328, 1333, 1334, 1336, 1326,
- /*   390 */  1337, 1338, 1341, 1345, 1342, 1344, 1343, 1339, 1346, 1348,
- /*   400 */  1347, 1339, 1349, 1351, 1352, 1354, 1356, 1284, 1357, 1362,
- /*   410 */  1392, 1399,
+ /*   100 */    30,   30,  188,   37,   43,  661,  201,  201,  720,  695,
+ /*   110 */   772,  -16, 1402, 1402, 1402,  645,  645,  633,  633,  826,
+ /*   120 */   221,  221,  858,  772,  317,  772,  772,  772,  772,  772,
+ /*   130 */   772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
+ /*   140 */   772,  691,  772,  772,  772,  691,  695,  -82,  -82,  -82,
+ /*   150 */   -82,  -82,  -82, 1402, 1402,  810,  242,  242,  285,  806,
+ /*   160 */   806,  806,  119,  823,  668,  778,  868,  716,  911,  638,
+ /*   170 */   996,  992,  992,  992,  853,  843, 1052, 1011,  637,  772,
+ /*   180 */   772,  772,  772, 1031,  648,  648,  772,  772, 1114, 1031,
+ /*   190 */   772, 1114,  772,  772,  772,  772,  772,  772,  796,  772,
+ /*   200 */   593,  772,   36,  772, 1014,  772,  772,  648,  772, 1004,
+ /*   210 */  1014, 1014,  772,  772,  772, 1076, 1033,  772, 1082,  772,
+ /*   220 */   772,  772,  772, 1171, 1215, 1108, 1177, 1177, 1177, 1177,
+ /*   230 */  1104, 1098, 1183, 1108, 1171, 1215, 1215, 1108, 1183, 1185,
+ /*   240 */  1183, 1183, 1185, 1151, 1151, 1151, 1174, 1185, 1151, 1155,
+ /*   250 */  1151, 1174, 1151, 1151, 1143, 1166, 1143, 1166, 1143, 1166,
+ /*   260 */  1143, 1166, 1204, 1132, 1185, 1224, 1224, 1185, 1148, 1157,
+ /*   270 */  1154, 1158, 1108, 1219, 1230, 1230, 1236, 1236, 1236, 1236,
+ /*   280 */  1237, 1402, 1402, 1402, 1402,  152,  852, 1025, 1049, 1120,
+ /*   290 */  1087, 1090, 1091, 1095, 1102, 1105, 1106, 1069,  725,  945,
+ /*   300 */  1111, 1112, 1113, 1121,  723, 1039, 1122, 1123,  873, 1268,
+ /*   310 */  1271, 1233, 1213, 1243, 1228, 1239, 1187, 1191, 1179, 1206,
+ /*   320 */  1193, 1212, 1251, 1172, 1252, 1176, 1175, 1178, 1217, 1303,
+ /*   330 */  1207, 1194, 1299, 1300, 1301, 1310, 1240, 1275, 1226, 1231,
+ /*   340 */  1328, 1302, 1286, 1253, 1211, 1289, 1293, 1333, 1256, 1259,
+ /*   350 */  1295, 1280, 1304, 1305, 1306, 1308, 1281, 1294, 1309, 1283,
+ /*   360 */  1290, 1311, 1312, 1313, 1307, 1258, 1315, 1316, 1318, 1317,
+ /*   370 */  1257, 1320, 1321, 1314, 1265, 1324, 1269, 1322, 1270, 1326,
+ /*   380 */  1272, 1330, 1322, 1331, 1332, 1334, 1288, 1335, 1336, 1327,
+ /*   390 */  1343, 1338, 1340, 1339, 1341, 1342, 1345, 1344, 1341, 1346,
+ /*   400 */  1348, 1349, 1350, 1352, 1282, 1353, 1347, 1395, 1400,
 };
-#define YY_REDUCE_USE_DFLT (-110)
-#define YY_REDUCE_COUNT (286)
-#define YY_REDUCE_MIN   (-109)
-#define YY_REDUCE_MAX   (1148)
+#define YY_REDUCE_USE_DFLT (-69)
+#define YY_REDUCE_COUNT (284)
+#define YY_REDUCE_MIN   (-68)
+#define YY_REDUCE_MAX   (1147)
 static const short yy_reduce_ofst[] = {
- /*     0 */    36,  504,  646,  124,  508,  531,  577,  633,  538,  159,
- /*    10 */   -43,   12,  625,  652,  672,  480,  682,  684,  688,  471,
- /*    20 */   717,  446,  696,  712,  436,  148,  148,  148,  148,  148,
- /*    30 */   148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
- /*    40 */   148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
- /*    50 */   148,  148,  148,  148,  563,  763,  768,  774,  788,  801,
- /*    60 */   820,  822,  826,  828,  830,  832,  834,  842,  853,  855,
- /*    70 */   857,  862,  864,  866,  868,  876,  878,  887,  889,  891,
- /*    80 */   897,  900,  902,  910,  912,  916,  921,  924,  926,  932,
- /*    90 */   935,  937,  945,  948,  951,  956,  148,  148,  148,  148,
- /*   100 */   148,  148,  148,  148,  148,  200,  208,  334,  148,  641,
- /*   110 */   443,  148,  148,  148,  148,  463,  463,  499,  507,  426,
- /*   120 */   495,  553,  513,  529,  606,  659,  691,  741,  760,  773,
- /*   130 */   803,  827,  555,  854,  478,  877,  623,  898,  901,  863,
- /*   140 */   604,  971,  925,  609,  628,  974,  561,  895,  905,  950,
- /*   150 */   968,  970,  976,  933,  587, -109,  -68,  -28,   25,   97,
- /*   160 */   110,  146,  121,  196,  245,  306,  366,  502,  512,  648,
- /*   170 */   726,  700,  755,  778,  858,  121,  867,  697,  786,  899,
- /*   180 */   911, 1007, 1018, 1022, 1026,  988,  977,  980, 1040, 1041,
- /*   190 */   957,  997, 1044,  960, 1046, 1048, 1049, 1050, 1051, 1052,
- /*   200 */  1032, 1054, 1028, 1055, 1031, 1059, 1038, 1060, 1061, 1003,
- /*   210 */  1064,  990, 1045, 1047, 1066, 1069,  726, 1025, 1029, 1074,
- /*   220 */  1068, 1075, 1076, 1078, 1079, 1011, 1053, 1036, 1056, 1057,
- /*   230 */  1062, 1065, 1004, 1008, 1085, 1067, 1030, 1070, 1072, 1082,
- /*   240 */  1086, 1083, 1090, 1093, 1087, 1084, 1089, 1097, 1094, 1098,
- /*   250 */  1105, 1101, 1107, 1102, 1108, 1112, 1109, 1113, 1115, 1117,
- /*   260 */  1120, 1122, 1123, 1125, 1042, 1043, 1116, 1121, 1126, 1127,
- /*   270 */  1130, 1134, 1131, 1139, 1132, 1133, 1135, 1138, 1142, 1143,
- /*   280 */  1145, 1146, 1148, 1137, 1140, 1141, 1147,
+ /*     0 */   237,  503,  595,  124,  167,  440,  545,  604,  552,  397,
+ /*    10 */   158,  547,  487,  624,  652,  646,  673,  684,  682,  456,
+ /*    20 */   692,  446,  681,  560,  508,  282,  282,  282,  282,  282,
+ /*    30 */   282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
+ /*    40 */   282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
+ /*    50 */   282,  282,  282,  282,  631,  717,  741,  756,  771,  779,
+ /*    60 */   781,  790,  793,  801,  805,  820,  827,  830,  834,  836,
+ /*    70 */   842,  846,  850,  855,  857,  861,  865,  869,  871,  876,
+ /*    80 */   884,  890,  892,  895,  897,  899,  903,  918,  922,  925,
+ /*    90 */   927,  930,  932,  934,  937,  941,  282,  282,  282,  282,
+ /*   100 */   282,  282,  282,  282,  282,   94,  370,  428,  282,  614,
+ /*   110 */   477,  282,  282,  282,  282,  437,  437,  653,  759,    4,
+ /*   120 */   104,  526,  449,  -11,   14,  179,  531,  667,  747,  754,
+ /*   130 */   791,  828,  780,  885,  685,  856,  737,  870,  926,  862,
+ /*   140 */   202,  829,  928,  825,  463,  959,  923,  798,  888,  958,
+ /*   150 */   964,  965,  967,  920,  122,  -68,   17,   21,  106,  198,
+ /*   160 */   253,  342,  170,  326,  340,  491,  455,  516,  554,  760,
+ /*   170 */   877,  583,  803,  851,  931,  170,  987,  674,  977, 1030,
+ /*   180 */  1034, 1036, 1037,  979,  974,  980, 1038, 1040,  956,  997,
+ /*   190 */  1042,  960, 1044, 1046, 1047, 1048, 1050, 1051, 1028, 1053,
+ /*   200 */  1023, 1054, 1032, 1055, 1041, 1056, 1058, 1000, 1060,  989,
+ /*   210 */  1043, 1045, 1064, 1066,  877, 1022, 1026, 1068, 1067, 1071,
+ /*   220 */  1072, 1073, 1074, 1010, 1057, 1035, 1059, 1061, 1062, 1063,
+ /*   230 */   998, 1003, 1081, 1065, 1021, 1070, 1075, 1077, 1083, 1079,
+ /*   240 */  1085, 1088, 1080, 1078, 1084, 1086, 1089, 1092, 1093, 1094,
+ /*   250 */  1099, 1097, 1100, 1101, 1096, 1103, 1107, 1109, 1110, 1115,
+ /*   260 */  1116, 1118, 1117, 1119, 1124, 1125, 1126, 1127, 1129, 1131,
+ /*   270 */  1128, 1134, 1136, 1130, 1133, 1135, 1139, 1140, 1141, 1142,
+ /*   280 */  1137, 1138, 1144, 1147, 1145,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */  1166, 1160, 1160, 1160, 1104, 1104, 1104, 1104, 1160, 1000,
- /*    10 */  1027, 1027, 1208, 1208, 1208, 1208, 1208, 1208, 1103, 1208,
- /*    20 */  1208, 1208, 1208, 1160, 1004, 1033, 1208, 1208, 1208, 1105,
- /*    30 */  1106, 1208, 1208, 1208, 1138, 1043, 1042, 1041, 1040, 1014,
- /*    40 */  1038, 1031, 1035, 1105, 1099, 1100, 1098, 1102, 1106, 1208,
- /*    50 */  1034, 1068, 1083, 1067, 1208, 1208, 1208, 1208, 1208, 1208,
- /*    60 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*    70 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*    80 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*    90 */  1208, 1208, 1208, 1208, 1208, 1208, 1077, 1082, 1089, 1081,
- /*   100 */  1078, 1070, 1069, 1071, 1072,  971, 1208, 1208, 1073, 1208,
- /*   110 */  1208, 1074, 1086, 1085, 1084, 1175, 1174, 1208, 1208, 1111,
- /*   120 */  1208, 1208, 1208, 1208, 1160, 1208, 1208, 1208, 1208, 1208,
- /*   130 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   140 */  1208,  929, 1208, 1208, 1208,  929, 1208, 1160, 1160, 1160,
- /*   150 */  1160, 1160, 1160, 1004,  995, 1208, 1208, 1208, 1208, 1208,
- /*   160 */  1208, 1208, 1208, 1000, 1208, 1208, 1208, 1208, 1133, 1208,
- /*   170 */  1208, 1000, 1000, 1000, 1208, 1002, 1208,  984,  994, 1208,
- /*   180 */  1157, 1208, 1154, 1208, 1125, 1037, 1016, 1016, 1208, 1208,
- /*   190 */  1207, 1037, 1208, 1207, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   200 */   946, 1208, 1186, 1208,  943, 1208, 1027, 1208, 1208, 1016,
- /*   210 */  1208, 1101, 1027, 1027, 1208, 1208, 1208, 1001,  994, 1208,
- /*   220 */  1208, 1208, 1208, 1208, 1169, 1048,  974, 1037,  980,  980,
- /*   230 */   980,  980, 1137, 1204,  923, 1037, 1048,  974,  974, 1037,
- /*   240 */   923, 1112,  923,  923, 1112,  972,  972,  972,  961, 1112,
- /*   250 */   972,  946,  972,  961,  972,  972, 1020, 1015, 1020, 1015,
- /*   260 */  1020, 1015, 1020, 1015, 1107, 1208, 1112, 1116, 1116, 1112,
- /*   270 */  1032, 1021, 1030, 1028, 1037,  964, 1172, 1172, 1168, 1168,
- /*   280 */  1168, 1168,  913, 1181,  948,  948, 1181, 1208, 1208, 1208,
- /*   290 */  1176, 1119, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   300 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   310 */  1054, 1208,  910, 1208, 1208, 1208, 1155, 1208, 1208, 1199,
- /*   320 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1136, 1135, 1208,
- /*   330 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   340 */  1208, 1208, 1206, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   350 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   360 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,  986, 1208,
- /*   370 */  1208, 1208, 1190, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- /*   380 */  1029, 1208, 1022, 1208, 1208, 1196, 1208, 1208, 1208, 1208,
- /*   390 */  1208, 1208, 1208, 1208, 1208, 1208, 1208, 1162, 1208, 1208,
- /*   400 */  1208, 1161, 1208, 1208, 1208, 1208, 1208, 1208, 1208,  917,
- /*   410 */  1208, 1208,
+ /*     0 */  1156, 1150, 1150, 1150, 1097, 1097, 1097, 1097, 1150,  993,
+ /*    10 */  1020, 1020, 1198, 1198, 1198, 1198, 1198, 1198, 1096, 1198,
+ /*    20 */  1198, 1198, 1198, 1150,  997, 1026, 1198, 1198, 1198, 1098,
+ /*    30 */  1099, 1198, 1198, 1198, 1131, 1036, 1035, 1034, 1033, 1007,
+ /*    40 */  1031, 1024, 1028, 1098, 1092, 1093, 1091, 1095, 1099, 1198,
+ /*    50 */  1027, 1061, 1076, 1060, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*    60 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*    70 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*    80 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*    90 */  1198, 1198, 1198, 1198, 1198, 1198, 1070, 1075, 1082, 1074,
+ /*   100 */  1071, 1063, 1062, 1064, 1065,  964, 1198, 1198, 1066, 1198,
+ /*   110 */  1198, 1067, 1079, 1078, 1077, 1165, 1164, 1198, 1198, 1104,
+ /*   120 */  1198, 1198, 1198, 1198, 1150, 1198, 1198, 1198, 1198, 1198,
+ /*   130 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   140 */  1198,  922, 1198, 1198, 1198,  922, 1198, 1150, 1150, 1150,
+ /*   150 */  1150, 1150, 1150,  997,  988, 1198, 1198, 1198, 1198, 1198,
+ /*   160 */  1198, 1198, 1198,  993, 1198, 1198, 1198, 1198, 1126, 1198,
+ /*   170 */  1198,  993,  993,  993, 1198,  995, 1198,  977,  987, 1198,
+ /*   180 */  1147, 1198, 1118, 1030, 1009, 1009, 1198, 1198, 1197, 1030,
+ /*   190 */  1198, 1197, 1198, 1198, 1198, 1198, 1198, 1198,  939, 1198,
+ /*   200 */  1176, 1198,  936, 1198, 1020, 1198, 1198, 1009, 1198, 1094,
+ /*   210 */  1020, 1020, 1198, 1198, 1198,  994,  987, 1198, 1198, 1198,
+ /*   220 */  1198, 1198, 1159, 1041,  967, 1030,  973,  973,  973,  973,
+ /*   230 */  1130, 1194,  916, 1030, 1041,  967,  967, 1030,  916, 1105,
+ /*   240 */   916,  916, 1105,  965,  965,  965,  954, 1105,  965,  939,
+ /*   250 */   965,  954,  965,  965, 1013, 1008, 1013, 1008, 1013, 1008,
+ /*   260 */  1013, 1008, 1100, 1198, 1105, 1109, 1109, 1105, 1025, 1014,
+ /*   270 */  1023, 1021, 1030,  957, 1162, 1162, 1158, 1158, 1158, 1158,
+ /*   280 */   906, 1171,  941,  941, 1171, 1198, 1198, 1198, 1166, 1112,
+ /*   290 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   300 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1047, 1198,
+ /*   310 */   903, 1198, 1198, 1198, 1198, 1198, 1189, 1198, 1198, 1198,
+ /*   320 */  1198, 1198, 1198, 1198, 1129, 1128, 1198, 1198, 1198, 1198,
+ /*   330 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1196,
+ /*   340 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   350 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   360 */  1198, 1198, 1198, 1198, 1198,  979, 1198, 1198, 1198, 1180,
+ /*   370 */  1198, 1198, 1198, 1198, 1198, 1198, 1198, 1022, 1198, 1015,
+ /*   380 */  1198, 1198, 1186, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ /*   390 */  1198, 1198, 1198, 1198, 1152, 1198, 1198, 1198, 1151, 1198,
+ /*   400 */  1198, 1198, 1198, 1198, 1198, 1198,  910, 1198, 1198,
 };
 /********** End of lemon-generated parsing tables *****************************/
 
@@ -1299,60 +1297,57 @@ static const char *const yyRuleName[] = {
  /* 243 */ "raisetype ::= ABORT",
  /* 244 */ "raisetype ::= FAIL",
  /* 245 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 246 */ "cmd ::= REINDEX",
- /* 247 */ "cmd ::= REINDEX nm",
- /* 248 */ "cmd ::= REINDEX nm ON nm",
- /* 249 */ "cmd ::= ANALYZE",
- /* 250 */ "cmd ::= ANALYZE nm",
- /* 251 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 252 */ "with ::=",
- /* 253 */ "with ::= WITH wqlist",
- /* 254 */ "with ::= WITH RECURSIVE wqlist",
- /* 255 */ "wqlist ::= nm eidlist_opt AS LP select RP",
- /* 256 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",
- /* 257 */ "input ::= ecmd",
- /* 258 */ "explain ::=",
- /* 259 */ "cmdx ::= cmd",
- /* 260 */ "trans_opt ::=",
- /* 261 */ "trans_opt ::= TRANSACTION",
- /* 262 */ "trans_opt ::= TRANSACTION nm",
- /* 263 */ "savepoint_opt ::= SAVEPOINT",
- /* 264 */ "savepoint_opt ::=",
- /* 265 */ "cmd ::= create_table create_table_args",
- /* 266 */ "columnlist ::= columnlist COMMA columnname carglist",
- /* 267 */ "columnlist ::= columnname carglist",
- /* 268 */ "typetoken ::= typename",
- /* 269 */ "typename ::= ID|STRING",
- /* 270 */ "signed ::= plus_num",
- /* 271 */ "signed ::= minus_num",
- /* 272 */ "carglist ::= carglist ccons",
- /* 273 */ "carglist ::=",
- /* 274 */ "ccons ::= NULL onconf",
- /* 275 */ "conslist_opt ::= COMMA conslist",
- /* 276 */ "conslist ::= conslist tconscomma tcons",
- /* 277 */ "conslist ::= tcons",
- /* 278 */ "tconscomma ::=",
- /* 279 */ "defer_subclause_opt ::= defer_subclause",
- /* 280 */ "resolvetype ::= raisetype",
- /* 281 */ "selectnowith ::= oneselect",
- /* 282 */ "oneselect ::= values",
- /* 283 */ "sclp ::= selcollist COMMA",
- /* 284 */ "as ::= ID|STRING",
- /* 285 */ "join_nm ::= ID|INDEXED",
- /* 286 */ "join_nm ::= JOIN_KW",
- /* 287 */ "expr ::= term",
- /* 288 */ "exprlist ::= nexprlist",
- /* 289 */ "nmnum ::= plus_num",
- /* 290 */ "nmnum ::= STRING",
- /* 291 */ "nmnum ::= nm",
- /* 292 */ "nmnum ::= ON",
- /* 293 */ "nmnum ::= DELETE",
- /* 294 */ "nmnum ::= DEFAULT",
- /* 295 */ "plus_num ::= INTEGER|FLOAT",
- /* 296 */ "foreach_clause ::=",
- /* 297 */ "foreach_clause ::= FOR EACH ROW",
- /* 298 */ "trnm ::= nm",
- /* 299 */ "tridxby ::=",
+ /* 246 */ "cmd ::= ANALYZE",
+ /* 247 */ "cmd ::= ANALYZE nm",
+ /* 248 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 249 */ "with ::=",
+ /* 250 */ "with ::= WITH wqlist",
+ /* 251 */ "with ::= WITH RECURSIVE wqlist",
+ /* 252 */ "wqlist ::= nm eidlist_opt AS LP select RP",
+ /* 253 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",
+ /* 254 */ "input ::= ecmd",
+ /* 255 */ "explain ::=",
+ /* 256 */ "cmdx ::= cmd",
+ /* 257 */ "trans_opt ::=",
+ /* 258 */ "trans_opt ::= TRANSACTION",
+ /* 259 */ "trans_opt ::= TRANSACTION nm",
+ /* 260 */ "savepoint_opt ::= SAVEPOINT",
+ /* 261 */ "savepoint_opt ::=",
+ /* 262 */ "cmd ::= create_table create_table_args",
+ /* 263 */ "columnlist ::= columnlist COMMA columnname carglist",
+ /* 264 */ "columnlist ::= columnname carglist",
+ /* 265 */ "typetoken ::= typename",
+ /* 266 */ "typename ::= ID|STRING",
+ /* 267 */ "signed ::= plus_num",
+ /* 268 */ "signed ::= minus_num",
+ /* 269 */ "carglist ::= carglist ccons",
+ /* 270 */ "carglist ::=",
+ /* 271 */ "ccons ::= NULL onconf",
+ /* 272 */ "conslist_opt ::= COMMA conslist",
+ /* 273 */ "conslist ::= conslist tconscomma tcons",
+ /* 274 */ "conslist ::= tcons",
+ /* 275 */ "tconscomma ::=",
+ /* 276 */ "defer_subclause_opt ::= defer_subclause",
+ /* 277 */ "resolvetype ::= raisetype",
+ /* 278 */ "selectnowith ::= oneselect",
+ /* 279 */ "oneselect ::= values",
+ /* 280 */ "sclp ::= selcollist COMMA",
+ /* 281 */ "as ::= ID|STRING",
+ /* 282 */ "join_nm ::= ID|INDEXED",
+ /* 283 */ "join_nm ::= JOIN_KW",
+ /* 284 */ "expr ::= term",
+ /* 285 */ "exprlist ::= nexprlist",
+ /* 286 */ "nmnum ::= plus_num",
+ /* 287 */ "nmnum ::= STRING",
+ /* 288 */ "nmnum ::= nm",
+ /* 289 */ "nmnum ::= ON",
+ /* 290 */ "nmnum ::= DELETE",
+ /* 291 */ "nmnum ::= DEFAULT",
+ /* 292 */ "plus_num ::= INTEGER|FLOAT",
+ /* 293 */ "foreach_clause ::=",
+ /* 294 */ "foreach_clause ::= FOR EACH ROW",
+ /* 295 */ "trnm ::= nm",
+ /* 296 */ "tridxby ::=",
 };
 #endif /* NDEBUG */
 
@@ -1468,17 +1463,17 @@ static void yy_destructor(
     case 183: /* oneselect */
     case 194: /* values */
 {
-#line 386 "parse.y"
+#line 397 "parse.y"
 sqlite3SelectDelete(pParse->db, (yypminor->yy279));
-#line 1474 "parse.c"
+#line 1469 "parse.c"
 }
       break;
     case 160: /* term */
     case 161: /* expr */
 {
-#line 829 "parse.y"
+#line 840 "parse.y"
 sqlite3ExprDelete(pParse->db, (yypminor->yy162).pExpr);
-#line 1482 "parse.c"
+#line 1477 "parse.c"
 }
       break;
     case 165: /* eidlist_opt */
@@ -1494,9 +1489,9 @@ sqlite3ExprDelete(pParse->db, (yypminor->yy162).pExpr);
     case 213: /* paren_exprlist */
     case 215: /* case_exprlist */
 {
-#line 1261 "parse.y"
+#line 1272 "parse.y"
 sqlite3ExprListDelete(pParse->db, (yypminor->yy382));
-#line 1500 "parse.c"
+#line 1495 "parse.c"
 }
       break;
     case 181: /* fullname */
@@ -1504,17 +1499,17 @@ sqlite3ExprListDelete(pParse->db, (yypminor->yy382));
     case 199: /* seltablist */
     case 200: /* stl_prefix */
 {
-#line 613 "parse.y"
+#line 624 "parse.y"
 sqlite3SrcListDelete(pParse->db, (yypminor->yy387));
-#line 1510 "parse.c"
+#line 1505 "parse.c"
 }
       break;
     case 184: /* with */
     case 229: /* wqlist */
 {
-#line 1510 "parse.y"
+#line 1522 "parse.y"
 sqlite3WithDelete(pParse->db, (yypminor->yy151));
-#line 1518 "parse.c"
+#line 1513 "parse.c"
 }
       break;
     case 189: /* where_opt */
@@ -1524,33 +1519,33 @@ sqlite3WithDelete(pParse->db, (yypminor->yy151));
     case 216: /* case_else */
     case 225: /* when_clause */
 {
-#line 738 "parse.y"
+#line 749 "parse.y"
 sqlite3ExprDelete(pParse->db, (yypminor->yy362));
-#line 1530 "parse.c"
+#line 1525 "parse.c"
 }
       break;
     case 204: /* using_opt */
     case 206: /* idlist */
     case 209: /* idlist_opt */
 {
-#line 650 "parse.y"
+#line 661 "parse.y"
 sqlite3IdListDelete(pParse->db, (yypminor->yy40));
-#line 1539 "parse.c"
+#line 1534 "parse.c"
 }
       break;
     case 221: /* trigger_cmd_list */
     case 226: /* trigger_cmd */
 {
-#line 1384 "parse.y"
+#line 1395 "parse.y"
 sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy427));
-#line 1547 "parse.c"
+#line 1542 "parse.c"
 }
       break;
     case 223: /* trigger_event */
 {
-#line 1370 "parse.y"
+#line 1381 "parse.y"
 sqlite3IdListDelete(pParse->db, (yypminor->yy10).b);
-#line 1554 "parse.c"
+#line 1549 "parse.c"
 }
       break;
 /********* End destructor definitions *****************************************/
@@ -1725,7 +1720,7 @@ static void yyStackOverflow(yyParser *yypParser){
 #line 41 "parse.y"
 
   sqlite3ErrorMsg(pParse, "parser stack overflow");
-#line 1729 "parse.c"
+#line 1724 "parse.c"
 /******** End %stack_overflow code ********************************************/
    sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */
 }
@@ -2047,9 +2042,6 @@ static const struct {
   { 140, 4 },
   { 140, 1 },
   { 140, 2 },
-  { 140, 4 },
-  { 140, 1 },
-  { 140, 2 },
   { 140, 6 },
   { 184, 0 },
   { 184, 2 },
@@ -2165,83 +2157,83 @@ static void yy_reduce(
       case 0: /* ecmd ::= explain cmdx SEMI */
 #line 111 "parse.y"
 { sqlite3FinishCoding(pParse); }
-#line 2169 "parse.c"
+#line 2161 "parse.c"
         break;
       case 1: /* ecmd ::= SEMI */
 #line 112 "parse.y"
 {
   sqlite3ErrorMsg(pParse, "syntax error: empty request");
 }
-#line 2176 "parse.c"
+#line 2168 "parse.c"
         break;
       case 2: /* explain ::= EXPLAIN */
 #line 117 "parse.y"
 { pParse->explain = 1; }
-#line 2181 "parse.c"
+#line 2173 "parse.c"
         break;
       case 3: /* explain ::= EXPLAIN QUERY PLAN */
 #line 118 "parse.y"
 { pParse->explain = 2; }
-#line 2186 "parse.c"
+#line 2178 "parse.c"
         break;
       case 4: /* cmd ::= BEGIN transtype trans_opt */
 #line 150 "parse.y"
 {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy52);}
-#line 2191 "parse.c"
+#line 2183 "parse.c"
         break;
       case 5: /* transtype ::= */
 #line 155 "parse.y"
 {yymsp[1].minor.yy52 = TK_DEFERRED;}
-#line 2196 "parse.c"
+#line 2188 "parse.c"
         break;
       case 6: /* transtype ::= DEFERRED */
 #line 156 "parse.y"
 {yymsp[0].minor.yy52 = yymsp[0].major; /*A-overwrites-X*/}
-#line 2201 "parse.c"
+#line 2193 "parse.c"
         break;
       case 7: /* cmd ::= COMMIT trans_opt */
       case 8: /* cmd ::= END trans_opt */ yytestcase(yyruleno==8);
 #line 157 "parse.y"
 {sqlite3CommitTransaction(pParse);}
-#line 2207 "parse.c"
+#line 2199 "parse.c"
         break;
       case 9: /* cmd ::= ROLLBACK trans_opt */
 #line 159 "parse.y"
 {sqlite3RollbackTransaction(pParse);}
-#line 2212 "parse.c"
+#line 2204 "parse.c"
         break;
       case 10: /* cmd ::= SAVEPOINT nm */
 #line 163 "parse.y"
 {
   sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0);
 }
-#line 2219 "parse.c"
+#line 2211 "parse.c"
         break;
       case 11: /* cmd ::= RELEASE savepoint_opt nm */
 #line 166 "parse.y"
 {
   sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0);
 }
-#line 2226 "parse.c"
+#line 2218 "parse.c"
         break;
       case 12: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
 #line 169 "parse.y"
 {
   sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0);
 }
-#line 2233 "parse.c"
+#line 2225 "parse.c"
         break;
       case 13: /* create_table ::= createkw TABLE ifnotexists nm */
 #line 176 "parse.y"
 {
    sqlite3StartTable(pParse,&yymsp[0].minor.yy0,yymsp[-1].minor.yy52);
 }
-#line 2240 "parse.c"
+#line 2232 "parse.c"
         break;
       case 14: /* createkw ::= CREATE */
 #line 179 "parse.y"
 {disableLookaside(pParse);}
-#line 2245 "parse.c"
+#line 2237 "parse.c"
         break;
       case 15: /* ifnotexists ::= */
       case 38: /* autoinc ::= */ yytestcase(yyruleno==38);
@@ -2252,19 +2244,19 @@ static void yy_reduce(
       case 208: /* collate ::= */ yytestcase(yyruleno==208);
 #line 182 "parse.y"
 {yymsp[1].minor.yy52 = 0;}
-#line 2256 "parse.c"
+#line 2248 "parse.c"
         break;
       case 16: /* ifnotexists ::= IF NOT EXISTS */
 #line 183 "parse.y"
 {yymsp[-2].minor.yy52 = 1;}
-#line 2261 "parse.c"
+#line 2253 "parse.c"
         break;
       case 17: /* create_table_args ::= LP columnlist conslist_opt RP */
 #line 185 "parse.y"
 {
   sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);
 }
-#line 2268 "parse.c"
+#line 2260 "parse.c"
         break;
       case 18: /* create_table_args ::= AS select */
 #line 188 "parse.y"
@@ -2272,67 +2264,67 @@ static void yy_reduce(
   sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy279);
   sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy279);
 }
-#line 2276 "parse.c"
+#line 2268 "parse.c"
         break;
       case 19: /* columnname ::= nm typetoken */
 #line 194 "parse.y"
 {sqlite3AddColumn(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
-#line 2281 "parse.c"
+#line 2273 "parse.c"
         break;
       case 20: /* nm ::= ID|INDEXED */
-#line 225 "parse.y"
+#line 236 "parse.y"
 {
   if(yymsp[0].minor.yy0.isReserved) {
     sqlite3ErrorMsg(pParse, "keyword \"%T\" is reserved", &yymsp[0].minor.yy0);
   }
 }
-#line 2290 "parse.c"
+#line 2282 "parse.c"
         break;
       case 21: /* typetoken ::= */
       case 56: /* conslist_opt ::= */ yytestcase(yyruleno==56);
       case 92: /* as ::= */ yytestcase(yyruleno==92);
-#line 236 "parse.y"
+#line 247 "parse.y"
 {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;}
-#line 2297 "parse.c"
+#line 2289 "parse.c"
         break;
       case 22: /* typetoken ::= typename LP signed RP */
-#line 238 "parse.y"
+#line 249 "parse.y"
 {
   yymsp[-3].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z);
 }
-#line 2304 "parse.c"
+#line 2296 "parse.c"
         break;
       case 23: /* typetoken ::= typename LP signed COMMA signed RP */
-#line 241 "parse.y"
+#line 252 "parse.y"
 {
   yymsp[-5].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z);
 }
-#line 2311 "parse.c"
+#line 2303 "parse.c"
         break;
       case 24: /* typename ::= typename ID|STRING */
-#line 246 "parse.y"
+#line 257 "parse.y"
 {yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);}
-#line 2316 "parse.c"
+#line 2308 "parse.c"
         break;
       case 25: /* ccons ::= CONSTRAINT nm */
       case 58: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==58);
-#line 255 "parse.y"
+#line 266 "parse.y"
 {pParse->constraintName = yymsp[0].minor.yy0;}
-#line 2322 "parse.c"
+#line 2314 "parse.c"
         break;
       case 26: /* ccons ::= DEFAULT term */
       case 28: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==28);
-#line 256 "parse.y"
+#line 267 "parse.y"
 {sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy162);}
-#line 2328 "parse.c"
+#line 2320 "parse.c"
         break;
       case 27: /* ccons ::= DEFAULT LP expr RP */
-#line 257 "parse.y"
+#line 268 "parse.y"
 {sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy162);}
-#line 2333 "parse.c"
+#line 2325 "parse.c"
         break;
       case 29: /* ccons ::= DEFAULT MINUS term */
-#line 259 "parse.y"
+#line 270 "parse.y"
 {
   ExprSpan v;
   v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy162.pExpr, 0);
@@ -2340,222 +2332,222 @@ static void yy_reduce(
   v.zEnd = yymsp[0].minor.yy162.zEnd;
   sqlite3AddDefaultValue(pParse,&v);
 }
-#line 2344 "parse.c"
+#line 2336 "parse.c"
         break;
       case 30: /* ccons ::= DEFAULT ID|INDEXED */
-#line 266 "parse.y"
+#line 277 "parse.y"
 {
   ExprSpan v;
   spanExpr(&v, pParse, TK_STRING, yymsp[0].minor.yy0);
   sqlite3AddDefaultValue(pParse,&v);
 }
-#line 2353 "parse.c"
+#line 2345 "parse.c"
         break;
       case 31: /* ccons ::= NOT NULL onconf */
-#line 276 "parse.y"
+#line 287 "parse.y"
 {sqlite3AddNotNull(pParse, yymsp[0].minor.yy52);}
-#line 2358 "parse.c"
+#line 2350 "parse.c"
         break;
       case 32: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
-#line 278 "parse.y"
+#line 289 "parse.y"
 {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy52,yymsp[0].minor.yy52,yymsp[-2].minor.yy52);}
-#line 2363 "parse.c"
+#line 2355 "parse.c"
         break;
       case 33: /* ccons ::= UNIQUE onconf */
-#line 279 "parse.y"
+#line 290 "parse.y"
 {sqlite3CreateIndex(pParse,0,0,0,yymsp[0].minor.yy52,0,0,0,0,
                                    SQLITE_IDXTYPE_UNIQUE);}
-#line 2369 "parse.c"
+#line 2361 "parse.c"
         break;
       case 34: /* ccons ::= CHECK LP expr RP */
-#line 281 "parse.y"
+#line 292 "parse.y"
 {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy162.pExpr);}
-#line 2374 "parse.c"
+#line 2366 "parse.c"
         break;
       case 35: /* ccons ::= REFERENCES nm eidlist_opt refargs */
-#line 283 "parse.y"
+#line 294 "parse.y"
 {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy382,yymsp[0].minor.yy52);}
-#line 2379 "parse.c"
+#line 2371 "parse.c"
         break;
       case 36: /* ccons ::= defer_subclause */
-#line 284 "parse.y"
+#line 295 "parse.y"
 {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy52);}
-#line 2384 "parse.c"
+#line 2376 "parse.c"
         break;
       case 37: /* ccons ::= COLLATE ID|INDEXED */
-#line 285 "parse.y"
+#line 296 "parse.y"
 {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
-#line 2389 "parse.c"
+#line 2381 "parse.c"
         break;
       case 39: /* autoinc ::= AUTOINCR */
-#line 290 "parse.y"
+#line 301 "parse.y"
 {yymsp[0].minor.yy52 = 1;}
-#line 2394 "parse.c"
+#line 2386 "parse.c"
         break;
       case 40: /* refargs ::= */
-#line 298 "parse.y"
+#line 309 "parse.y"
 { yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_NONE*0x0101; /* EV: R-19803-45884 */}
-#line 2399 "parse.c"
+#line 2391 "parse.c"
         break;
       case 41: /* refargs ::= refargs refarg */
-#line 299 "parse.y"
+#line 310 "parse.y"
 { yymsp[-1].minor.yy52 = (yymsp[-1].minor.yy52 & ~yymsp[0].minor.yy107.mask) | yymsp[0].minor.yy107.value; }
-#line 2404 "parse.c"
+#line 2396 "parse.c"
         break;
       case 42: /* refarg ::= MATCH nm */
-#line 301 "parse.y"
+#line 312 "parse.y"
 { yymsp[-1].minor.yy107.value = 0;     yymsp[-1].minor.yy107.mask = 0x000000; }
-#line 2409 "parse.c"
+#line 2401 "parse.c"
         break;
       case 43: /* refarg ::= ON INSERT refact */
-#line 302 "parse.y"
+#line 313 "parse.y"
 { yymsp[-2].minor.yy107.value = 0;     yymsp[-2].minor.yy107.mask = 0x000000; }
-#line 2414 "parse.c"
+#line 2406 "parse.c"
         break;
       case 44: /* refarg ::= ON DELETE refact */
-#line 303 "parse.y"
+#line 314 "parse.y"
 { yymsp[-2].minor.yy107.value = yymsp[0].minor.yy52;     yymsp[-2].minor.yy107.mask = 0x0000ff; }
-#line 2419 "parse.c"
+#line 2411 "parse.c"
         break;
       case 45: /* refarg ::= ON UPDATE refact */
-#line 304 "parse.y"
+#line 315 "parse.y"
 { yymsp[-2].minor.yy107.value = yymsp[0].minor.yy52<<8;  yymsp[-2].minor.yy107.mask = 0x00ff00; }
-#line 2424 "parse.c"
+#line 2416 "parse.c"
         break;
       case 46: /* refact ::= SET NULL */
-#line 306 "parse.y"
+#line 317 "parse.y"
 { yymsp[-1].minor.yy52 = OE_SetNull;  /* EV: R-33326-45252 */}
-#line 2429 "parse.c"
+#line 2421 "parse.c"
         break;
       case 47: /* refact ::= SET DEFAULT */
-#line 307 "parse.y"
+#line 318 "parse.y"
 { yymsp[-1].minor.yy52 = OE_SetDflt;  /* EV: R-33326-45252 */}
-#line 2434 "parse.c"
+#line 2426 "parse.c"
         break;
       case 48: /* refact ::= CASCADE */
-#line 308 "parse.y"
+#line 319 "parse.y"
 { yymsp[0].minor.yy52 = OE_Cascade;  /* EV: R-33326-45252 */}
-#line 2439 "parse.c"
+#line 2431 "parse.c"
         break;
       case 49: /* refact ::= RESTRICT */
-#line 309 "parse.y"
+#line 320 "parse.y"
 { yymsp[0].minor.yy52 = OE_Restrict; /* EV: R-33326-45252 */}
-#line 2444 "parse.c"
+#line 2436 "parse.c"
         break;
       case 50: /* refact ::= NO ACTION */
-#line 310 "parse.y"
+#line 321 "parse.y"
 { yymsp[-1].minor.yy52 = ON_CONFLICT_ACTION_NONE;     /* EV: R-33326-45252 */}
-#line 2449 "parse.c"
+#line 2441 "parse.c"
         break;
       case 51: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
-#line 312 "parse.y"
+#line 323 "parse.y"
 {yymsp[-2].minor.yy52 = 0;}
-#line 2454 "parse.c"
+#line 2446 "parse.c"
         break;
       case 52: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
       case 67: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==67);
       case 138: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==138);
-#line 313 "parse.y"
+#line 324 "parse.y"
 {yymsp[-1].minor.yy52 = yymsp[0].minor.yy52;}
-#line 2461 "parse.c"
+#line 2453 "parse.c"
         break;
       case 54: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
       case 71: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==71);
       case 180: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==180);
       case 183: /* in_op ::= NOT IN */ yytestcase(yyruleno==183);
       case 209: /* collate ::= COLLATE ID|INDEXED */ yytestcase(yyruleno==209);
-#line 316 "parse.y"
+#line 327 "parse.y"
 {yymsp[-1].minor.yy52 = 1;}
-#line 2470 "parse.c"
+#line 2462 "parse.c"
         break;
       case 55: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
-#line 317 "parse.y"
+#line 328 "parse.y"
 {yymsp[-1].minor.yy52 = 0;}
-#line 2475 "parse.c"
+#line 2467 "parse.c"
         break;
       case 57: /* tconscomma ::= COMMA */
-#line 323 "parse.y"
+#line 334 "parse.y"
 {pParse->constraintName.n = 0;}
-#line 2480 "parse.c"
+#line 2472 "parse.c"
         break;
       case 59: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
-#line 327 "parse.y"
+#line 338 "parse.y"
 {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy382,yymsp[0].minor.yy52,yymsp[-2].minor.yy52,0);}
-#line 2485 "parse.c"
+#line 2477 "parse.c"
         break;
       case 60: /* tcons ::= UNIQUE LP sortlist RP onconf */
-#line 329 "parse.y"
+#line 340 "parse.y"
 {sqlite3CreateIndex(pParse,0,0,yymsp[-2].minor.yy382,yymsp[0].minor.yy52,0,0,0,0,
                                        SQLITE_IDXTYPE_UNIQUE);}
-#line 2491 "parse.c"
+#line 2483 "parse.c"
         break;
       case 61: /* tcons ::= CHECK LP expr RP onconf */
-#line 332 "parse.y"
+#line 343 "parse.y"
 {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy162.pExpr);}
-#line 2496 "parse.c"
+#line 2488 "parse.c"
         break;
       case 62: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
-#line 334 "parse.y"
+#line 345 "parse.y"
 {
     sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy382, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy382, yymsp[-1].minor.yy52);
     sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy52);
 }
-#line 2504 "parse.c"
+#line 2496 "parse.c"
         break;
       case 64: /* onconf ::= */
       case 66: /* orconf ::= */ yytestcase(yyruleno==66);
-#line 348 "parse.y"
+#line 359 "parse.y"
 {yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_DEFAULT;}
-#line 2510 "parse.c"
+#line 2502 "parse.c"
         break;
       case 65: /* onconf ::= ON CONFLICT resolvetype */
-#line 349 "parse.y"
+#line 360 "parse.y"
 {yymsp[-2].minor.yy52 = yymsp[0].minor.yy52;}
-#line 2515 "parse.c"
+#line 2507 "parse.c"
         break;
       case 68: /* resolvetype ::= IGNORE */
-#line 353 "parse.y"
+#line 364 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_IGNORE;}
-#line 2520 "parse.c"
+#line 2512 "parse.c"
         break;
       case 69: /* resolvetype ::= REPLACE */
       case 139: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==139);
-#line 354 "parse.y"
+#line 365 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_REPLACE;}
-#line 2526 "parse.c"
+#line 2518 "parse.c"
         break;
       case 70: /* cmd ::= DROP TABLE ifexists fullname */
-#line 358 "parse.y"
+#line 369 "parse.y"
 {
   sqlite3DropTable(pParse, yymsp[0].minor.yy387, 0, yymsp[-1].minor.yy52);
 }
-#line 2533 "parse.c"
+#line 2525 "parse.c"
         break;
       case 73: /* cmd ::= createkw VIEW ifnotexists nm eidlist_opt AS select */
-#line 369 "parse.y"
+#line 380 "parse.y"
 {
   sqlite3CreateView(pParse, &yymsp[-6].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy382, yymsp[0].minor.yy279, yymsp[-4].minor.yy52);
 }
-#line 2540 "parse.c"
+#line 2532 "parse.c"
         break;
       case 74: /* cmd ::= DROP VIEW ifexists fullname */
-#line 372 "parse.y"
+#line 383 "parse.y"
 {
   sqlite3DropTable(pParse, yymsp[0].minor.yy387, 1, yymsp[-1].minor.yy52);
 }
-#line 2547 "parse.c"
+#line 2539 "parse.c"
         break;
       case 75: /* cmd ::= select */
-#line 379 "parse.y"
+#line 390 "parse.y"
 {
   SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
   sqlite3Select(pParse, yymsp[0].minor.yy279, &dest);
   sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy279);
 }
-#line 2556 "parse.c"
+#line 2548 "parse.c"
         break;
       case 76: /* select ::= with selectnowith */
-#line 416 "parse.y"
+#line 427 "parse.y"
 {
   Select *p = yymsp[0].minor.yy279;
   if( p ){
@@ -2566,10 +2558,10 @@ static void yy_reduce(
   }
   yymsp[-1].minor.yy279 = p; /*A-overwrites-W*/
 }
-#line 2570 "parse.c"
+#line 2562 "parse.c"
         break;
       case 77: /* selectnowith ::= selectnowith multiselect_op oneselect */
-#line 429 "parse.y"
+#line 440 "parse.y"
 {
   Select *pRhs = yymsp[0].minor.yy279;
   Select *pLhs = yymsp[-2].minor.yy279;
@@ -2592,21 +2584,21 @@ static void yy_reduce(
   }
   yymsp[-2].minor.yy279 = pRhs;
 }
-#line 2596 "parse.c"
+#line 2588 "parse.c"
         break;
       case 78: /* multiselect_op ::= UNION */
       case 80: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==80);
-#line 452 "parse.y"
+#line 463 "parse.y"
 {yymsp[0].minor.yy52 = yymsp[0].major; /*A-overwrites-OP*/}
-#line 2602 "parse.c"
+#line 2594 "parse.c"
         break;
       case 79: /* multiselect_op ::= UNION ALL */
-#line 453 "parse.y"
+#line 464 "parse.y"
 {yymsp[-1].minor.yy52 = TK_ALL;}
-#line 2607 "parse.c"
+#line 2599 "parse.c"
         break;
       case 81: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
-#line 457 "parse.y"
+#line 468 "parse.y"
 {
 #ifdef SELECTTRACE_ENABLED
   Token s = yymsp[-8].minor.yy0; /*A-overwrites-S*/
@@ -2637,17 +2629,17 @@ static void yy_reduce(
   }
 #endif /* SELECTRACE_ENABLED */
 }
-#line 2641 "parse.c"
+#line 2633 "parse.c"
         break;
       case 82: /* values ::= VALUES LP nexprlist RP */
-#line 491 "parse.y"
+#line 502 "parse.y"
 {
   yymsp[-3].minor.yy279 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy382,0,0,0,0,0,SF_Values,0,0);
 }
-#line 2648 "parse.c"
+#line 2640 "parse.c"
         break;
       case 83: /* values ::= values COMMA LP exprlist RP */
-#line 494 "parse.y"
+#line 505 "parse.y"
 {
   Select *pRight, *pLeft = yymsp[-4].minor.yy279;
   pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy382,0,0,0,0,0,SF_Values|SF_MultiValue,0,0);
@@ -2660,17 +2652,17 @@ static void yy_reduce(
     yymsp[-4].minor.yy279 = pLeft;
   }
 }
-#line 2664 "parse.c"
+#line 2656 "parse.c"
         break;
       case 84: /* distinct ::= DISTINCT */
-#line 511 "parse.y"
+#line 522 "parse.y"
 {yymsp[0].minor.yy52 = SF_Distinct;}
-#line 2669 "parse.c"
+#line 2661 "parse.c"
         break;
       case 85: /* distinct ::= ALL */
-#line 512 "parse.y"
+#line 523 "parse.y"
 {yymsp[0].minor.yy52 = SF_All;}
-#line 2674 "parse.c"
+#line 2666 "parse.c"
         break;
       case 87: /* sclp ::= */
       case 113: /* orderby_opt ::= */ yytestcase(yyruleno==113);
@@ -2678,94 +2670,94 @@ static void yy_reduce(
       case 196: /* exprlist ::= */ yytestcase(yyruleno==196);
       case 199: /* paren_exprlist ::= */ yytestcase(yyruleno==199);
       case 204: /* eidlist_opt ::= */ yytestcase(yyruleno==204);
-#line 525 "parse.y"
+#line 536 "parse.y"
 {yymsp[1].minor.yy382 = 0;}
-#line 2684 "parse.c"
+#line 2676 "parse.c"
         break;
       case 88: /* selcollist ::= sclp expr as */
-#line 526 "parse.y"
+#line 537 "parse.y"
 {
    yymsp[-2].minor.yy382 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy382, yymsp[-1].minor.yy162.pExpr);
    if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-2].minor.yy382, &yymsp[0].minor.yy0, 1);
    sqlite3ExprListSetSpan(pParse,yymsp[-2].minor.yy382,&yymsp[-1].minor.yy162);
 }
-#line 2693 "parse.c"
+#line 2685 "parse.c"
         break;
       case 89: /* selcollist ::= sclp STAR */
-#line 531 "parse.y"
+#line 542 "parse.y"
 {
   Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
   yymsp[-1].minor.yy382 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy382, p);
 }
-#line 2701 "parse.c"
+#line 2693 "parse.c"
         break;
       case 90: /* selcollist ::= sclp nm DOT STAR */
-#line 535 "parse.y"
+#line 546 "parse.y"
 {
   Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
   Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
   yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382, pDot);
 }
-#line 2711 "parse.c"
+#line 2703 "parse.c"
         break;
       case 91: /* as ::= AS nm */
       case 218: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==218);
       case 219: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==219);
-#line 546 "parse.y"
+#line 557 "parse.y"
 {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}
-#line 2718 "parse.c"
+#line 2710 "parse.c"
         break;
       case 93: /* from ::= */
-#line 560 "parse.y"
+#line 571 "parse.y"
 {yymsp[1].minor.yy387 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy387));}
-#line 2723 "parse.c"
+#line 2715 "parse.c"
         break;
       case 94: /* from ::= FROM seltablist */
-#line 561 "parse.y"
+#line 572 "parse.y"
 {
   yymsp[-1].minor.yy387 = yymsp[0].minor.yy387;
   sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy387);
 }
-#line 2731 "parse.c"
+#line 2723 "parse.c"
         break;
       case 95: /* stl_prefix ::= seltablist joinop */
-#line 569 "parse.y"
+#line 580 "parse.y"
 {
    if( ALWAYS(yymsp[-1].minor.yy387 && yymsp[-1].minor.yy387->nSrc>0) ) yymsp[-1].minor.yy387->a[yymsp[-1].minor.yy387->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy52;
 }
-#line 2738 "parse.c"
+#line 2730 "parse.c"
         break;
       case 96: /* stl_prefix ::= */
-#line 572 "parse.y"
+#line 583 "parse.y"
 {yymsp[1].minor.yy387 = 0;}
-#line 2743 "parse.c"
+#line 2735 "parse.c"
         break;
       case 97: /* seltablist ::= stl_prefix nm as indexed_opt on_opt using_opt */
-#line 574 "parse.y"
+#line 585 "parse.y"
 {
   yymsp[-5].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy387,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);
   sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy387, &yymsp[-2].minor.yy0);
 }
-#line 2751 "parse.c"
+#line 2743 "parse.c"
         break;
       case 98: /* seltablist ::= stl_prefix nm LP exprlist RP as on_opt using_opt */
-#line 579 "parse.y"
+#line 590 "parse.y"
 {
   yymsp[-7].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy387,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);
   sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy387, yymsp[-4].minor.yy382);
 }
-#line 2759 "parse.c"
+#line 2751 "parse.c"
         break;
       case 99: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
-#line 585 "parse.y"
+#line 596 "parse.y"
 {
     yymsp[-6].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy387,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy279,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);
   }
-#line 2766 "parse.c"
+#line 2758 "parse.c"
         break;
       case 100: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
-#line 589 "parse.y"
+#line 600 "parse.y"
 {
     if( yymsp[-6].minor.yy387==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy362==0 && yymsp[0].minor.yy40==0 ){
       yymsp[-6].minor.yy387 = yymsp[-4].minor.yy387;
@@ -2787,135 +2779,135 @@ static void yy_reduce(
       yymsp[-6].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy387,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);
     }
   }
-#line 2791 "parse.c"
+#line 2783 "parse.c"
         break;
       case 101: /* fullname ::= nm */
-#line 615 "parse.y"
+#line 626 "parse.y"
 {yymsp[0].minor.yy387 = sqlite3SrcListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
-#line 2796 "parse.c"
+#line 2788 "parse.c"
         break;
       case 102: /* joinop ::= COMMA|JOIN */
-#line 621 "parse.y"
+#line 632 "parse.y"
 { yymsp[0].minor.yy52 = JT_INNER; }
-#line 2801 "parse.c"
+#line 2793 "parse.c"
         break;
       case 103: /* joinop ::= JOIN_KW JOIN */
-#line 623 "parse.y"
+#line 634 "parse.y"
 {yymsp[-1].minor.yy52 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0);  /*X-overwrites-A*/}
-#line 2806 "parse.c"
+#line 2798 "parse.c"
         break;
       case 104: /* joinop ::= JOIN_KW join_nm JOIN */
-#line 625 "parse.y"
+#line 636 "parse.y"
 {yymsp[-2].minor.yy52 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
-#line 2811 "parse.c"
+#line 2803 "parse.c"
         break;
       case 105: /* joinop ::= JOIN_KW join_nm join_nm JOIN */
-#line 627 "parse.y"
+#line 638 "parse.y"
 {yymsp[-3].minor.yy52 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
-#line 2816 "parse.c"
+#line 2808 "parse.c"
         break;
       case 106: /* on_opt ::= ON expr */
       case 123: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==123);
       case 130: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==130);
       case 192: /* case_else ::= ELSE expr */ yytestcase(yyruleno==192);
-#line 631 "parse.y"
+#line 642 "parse.y"
 {yymsp[-1].minor.yy362 = yymsp[0].minor.yy162.pExpr;}
-#line 2824 "parse.c"
+#line 2816 "parse.c"
         break;
       case 107: /* on_opt ::= */
       case 122: /* having_opt ::= */ yytestcase(yyruleno==122);
       case 129: /* where_opt ::= */ yytestcase(yyruleno==129);
       case 193: /* case_else ::= */ yytestcase(yyruleno==193);
       case 195: /* case_operand ::= */ yytestcase(yyruleno==195);
-#line 632 "parse.y"
+#line 643 "parse.y"
 {yymsp[1].minor.yy362 = 0;}
-#line 2833 "parse.c"
+#line 2825 "parse.c"
         break;
       case 108: /* indexed_opt ::= */
-#line 645 "parse.y"
+#line 656 "parse.y"
 {yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;}
-#line 2838 "parse.c"
+#line 2830 "parse.c"
         break;
       case 109: /* indexed_opt ::= INDEXED BY nm */
-#line 646 "parse.y"
+#line 657 "parse.y"
 {yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;}
-#line 2843 "parse.c"
+#line 2835 "parse.c"
         break;
       case 110: /* indexed_opt ::= NOT INDEXED */
-#line 647 "parse.y"
+#line 658 "parse.y"
 {yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;}
-#line 2848 "parse.c"
+#line 2840 "parse.c"
         break;
       case 111: /* using_opt ::= USING LP idlist RP */
-#line 651 "parse.y"
+#line 662 "parse.y"
 {yymsp[-3].minor.yy40 = yymsp[-1].minor.yy40;}
-#line 2853 "parse.c"
+#line 2845 "parse.c"
         break;
       case 112: /* using_opt ::= */
       case 140: /* idlist_opt ::= */ yytestcase(yyruleno==140);
-#line 652 "parse.y"
+#line 663 "parse.y"
 {yymsp[1].minor.yy40 = 0;}
-#line 2859 "parse.c"
+#line 2851 "parse.c"
         break;
       case 114: /* orderby_opt ::= ORDER BY sortlist */
       case 121: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==121);
-#line 666 "parse.y"
+#line 677 "parse.y"
 {yymsp[-2].minor.yy382 = yymsp[0].minor.yy382;}
-#line 2865 "parse.c"
+#line 2857 "parse.c"
         break;
       case 115: /* sortlist ::= sortlist COMMA expr sortorder */
-#line 667 "parse.y"
+#line 678 "parse.y"
 {
   yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382,yymsp[-1].minor.yy162.pExpr);
   sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy382,yymsp[0].minor.yy52);
 }
-#line 2873 "parse.c"
+#line 2865 "parse.c"
         break;
       case 116: /* sortlist ::= expr sortorder */
-#line 671 "parse.y"
+#line 682 "parse.y"
 {
   yymsp[-1].minor.yy382 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy162.pExpr); /*A-overwrites-Y*/
   sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy382,yymsp[0].minor.yy52);
 }
-#line 2881 "parse.c"
+#line 2873 "parse.c"
         break;
       case 117: /* sortorder ::= ASC */
-#line 678 "parse.y"
+#line 689 "parse.y"
 {yymsp[0].minor.yy52 = SQLITE_SO_ASC;}
-#line 2886 "parse.c"
+#line 2878 "parse.c"
         break;
       case 118: /* sortorder ::= DESC */
-#line 679 "parse.y"
+#line 690 "parse.y"
 {yymsp[0].minor.yy52 = SQLITE_SO_DESC;}
-#line 2891 "parse.c"
+#line 2883 "parse.c"
         break;
       case 119: /* sortorder ::= */
-#line 680 "parse.y"
+#line 691 "parse.y"
 {yymsp[1].minor.yy52 = SQLITE_SO_UNDEFINED;}
-#line 2896 "parse.c"
+#line 2888 "parse.c"
         break;
       case 124: /* limit_opt ::= */
-#line 705 "parse.y"
+#line 716 "parse.y"
 {yymsp[1].minor.yy384.pLimit = 0; yymsp[1].minor.yy384.pOffset = 0;}
-#line 2901 "parse.c"
+#line 2893 "parse.c"
         break;
       case 125: /* limit_opt ::= LIMIT expr */
-#line 706 "parse.y"
+#line 717 "parse.y"
 {yymsp[-1].minor.yy384.pLimit = yymsp[0].minor.yy162.pExpr; yymsp[-1].minor.yy384.pOffset = 0;}
-#line 2906 "parse.c"
+#line 2898 "parse.c"
         break;
       case 126: /* limit_opt ::= LIMIT expr OFFSET expr */
-#line 708 "parse.y"
+#line 719 "parse.y"
 {yymsp[-3].minor.yy384.pLimit = yymsp[-2].minor.yy162.pExpr; yymsp[-3].minor.yy384.pOffset = yymsp[0].minor.yy162.pExpr;}
-#line 2911 "parse.c"
+#line 2903 "parse.c"
         break;
       case 127: /* limit_opt ::= LIMIT expr COMMA expr */
-#line 710 "parse.y"
+#line 721 "parse.y"
 {yymsp[-3].minor.yy384.pOffset = yymsp[-2].minor.yy162.pExpr; yymsp[-3].minor.yy384.pLimit = yymsp[0].minor.yy162.pExpr;}
-#line 2916 "parse.c"
+#line 2908 "parse.c"
         break;
       case 128: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */
-#line 727 "parse.y"
+#line 738 "parse.y"
 {
   sqlite3WithPush(pParse, yymsp[-5].minor.yy151, 1);
   sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy387, &yymsp[-1].minor.yy0);
@@ -2924,10 +2916,10 @@ static void yy_reduce(
   pParse->initiateTTrans = true;
   sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy387,yymsp[0].minor.yy362);
 }
-#line 2928 "parse.c"
+#line 2920 "parse.c"
         break;
       case 131: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */
-#line 760 "parse.y"
+#line 771 "parse.y"
 {
   sqlite3WithPush(pParse, yymsp[-7].minor.yy151, 1);
   sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy387, &yymsp[-3].minor.yy0);
@@ -2937,41 +2929,41 @@ static void yy_reduce(
   pParse->initiateTTrans = true;
   sqlite3Update(pParse,yymsp[-4].minor.yy387,yymsp[-1].minor.yy382,yymsp[0].minor.yy362,yymsp[-5].minor.yy52);
 }
-#line 2941 "parse.c"
+#line 2933 "parse.c"
         break;
       case 132: /* setlist ::= setlist COMMA nm EQ expr */
-#line 774 "parse.y"
+#line 785 "parse.y"
 {
   yymsp[-4].minor.yy382 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy382, yymsp[0].minor.yy162.pExpr);
   sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy382, &yymsp[-2].minor.yy0, 1);
 }
-#line 2949 "parse.c"
+#line 2941 "parse.c"
         break;
       case 133: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
-#line 778 "parse.y"
+#line 789 "parse.y"
 {
   yymsp[-6].minor.yy382 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy382, yymsp[-3].minor.yy40, yymsp[0].minor.yy162.pExpr);
 }
-#line 2956 "parse.c"
+#line 2948 "parse.c"
         break;
       case 134: /* setlist ::= nm EQ expr */
-#line 781 "parse.y"
+#line 792 "parse.y"
 {
   yylhsminor.yy382 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy162.pExpr);
   sqlite3ExprListSetName(pParse, yylhsminor.yy382, &yymsp[-2].minor.yy0, 1);
 }
-#line 2964 "parse.c"
+#line 2956 "parse.c"
   yymsp[-2].minor.yy382 = yylhsminor.yy382;
         break;
       case 135: /* setlist ::= LP idlist RP EQ expr */
-#line 785 "parse.y"
+#line 796 "parse.y"
 {
   yymsp[-4].minor.yy382 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy40, yymsp[0].minor.yy162.pExpr);
 }
-#line 2972 "parse.c"
+#line 2964 "parse.c"
         break;
       case 136: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */
-#line 791 "parse.y"
+#line 802 "parse.y"
 {
   sqlite3WithPush(pParse, yymsp[-5].minor.yy151, 1);
   sqlSubProgramsRemaining = SQL_MAX_COMPILING_TRIGGERS;
@@ -2979,10 +2971,10 @@ static void yy_reduce(
   pParse->initiateTTrans = true;
   sqlite3Insert(pParse, yymsp[-2].minor.yy387, yymsp[0].minor.yy279, yymsp[-1].minor.yy40, yymsp[-4].minor.yy52);
 }
-#line 2983 "parse.c"
+#line 2975 "parse.c"
         break;
       case 137: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */
-#line 799 "parse.y"
+#line 810 "parse.y"
 {
   sqlite3WithPush(pParse, yymsp[-6].minor.yy151, 1);
   sqlSubProgramsRemaining = SQL_MAX_COMPILING_TRIGGERS;
@@ -2990,64 +2982,64 @@ static void yy_reduce(
   pParse->initiateTTrans = true;
   sqlite3Insert(pParse, yymsp[-3].minor.yy387, 0, yymsp[-2].minor.yy40, yymsp[-5].minor.yy52);
 }
-#line 2994 "parse.c"
+#line 2986 "parse.c"
         break;
       case 141: /* idlist_opt ::= LP idlist RP */
-#line 817 "parse.y"
+#line 828 "parse.y"
 {yymsp[-2].minor.yy40 = yymsp[-1].minor.yy40;}
-#line 2999 "parse.c"
+#line 2991 "parse.c"
         break;
       case 142: /* idlist ::= idlist COMMA nm */
-#line 819 "parse.y"
+#line 830 "parse.y"
 {yymsp[-2].minor.yy40 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy40,&yymsp[0].minor.yy0);}
-#line 3004 "parse.c"
+#line 2996 "parse.c"
         break;
       case 143: /* idlist ::= nm */
-#line 821 "parse.y"
+#line 832 "parse.y"
 {yymsp[0].minor.yy40 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
-#line 3009 "parse.c"
+#line 3001 "parse.c"
         break;
       case 144: /* expr ::= LP expr RP */
-#line 870 "parse.y"
+#line 881 "parse.y"
 {spanSet(&yymsp[-2].minor.yy162,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/  yymsp[-2].minor.yy162.pExpr = yymsp[-1].minor.yy162.pExpr;}
-#line 3014 "parse.c"
+#line 3006 "parse.c"
         break;
       case 145: /* term ::= NULL */
       case 149: /* term ::= FLOAT|BLOB */ yytestcase(yyruleno==149);
       case 150: /* term ::= STRING */ yytestcase(yyruleno==150);
-#line 871 "parse.y"
+#line 882 "parse.y"
 {spanExpr(&yymsp[0].minor.yy162,pParse,yymsp[0].major,yymsp[0].minor.yy0);/*A-overwrites-X*/}
-#line 3021 "parse.c"
+#line 3013 "parse.c"
         break;
       case 146: /* expr ::= ID|INDEXED */
       case 147: /* expr ::= JOIN_KW */ yytestcase(yyruleno==147);
-#line 872 "parse.y"
+#line 883 "parse.y"
 {spanExpr(&yymsp[0].minor.yy162,pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
-#line 3027 "parse.c"
+#line 3019 "parse.c"
         break;
       case 148: /* expr ::= nm DOT nm */
-#line 874 "parse.y"
+#line 885 "parse.y"
 {
   Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
   Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1);
   spanSet(&yymsp[-2].minor.yy162,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
   yymsp[-2].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
 }
-#line 3037 "parse.c"
+#line 3029 "parse.c"
         break;
       case 151: /* term ::= INTEGER */
-#line 882 "parse.y"
+#line 893 "parse.y"
 {
   yylhsminor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
   yylhsminor.yy162.zStart = yymsp[0].minor.yy0.z;
   yylhsminor.yy162.zEnd = yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n;
   if( yylhsminor.yy162.pExpr ) yylhsminor.yy162.pExpr->flags |= EP_Leaf;
 }
-#line 3047 "parse.c"
+#line 3039 "parse.c"
   yymsp[0].minor.yy162 = yylhsminor.yy162;
         break;
       case 152: /* expr ::= VARIABLE */
-#line 888 "parse.y"
+#line 899 "parse.y"
 {
   if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){
     u32 n = yymsp[0].minor.yy0.n;
@@ -3069,27 +3061,27 @@ static void yy_reduce(
     }
   }
 }
-#line 3073 "parse.c"
+#line 3065 "parse.c"
         break;
       case 153: /* expr ::= expr COLLATE ID|INDEXED */
-#line 909 "parse.y"
+#line 920 "parse.y"
 {
   yymsp[-2].minor.yy162.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy162.pExpr, &yymsp[0].minor.yy0, 1);
   yymsp[-2].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
 }
-#line 3081 "parse.c"
+#line 3073 "parse.c"
         break;
       case 154: /* expr ::= CAST LP expr AS typetoken RP */
-#line 914 "parse.y"
+#line 925 "parse.y"
 {
   spanSet(&yymsp[-5].minor.yy162,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
   yymsp[-5].minor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
   sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy162.pExpr, yymsp[-3].minor.yy162.pExpr, 0);
 }
-#line 3090 "parse.c"
+#line 3082 "parse.c"
         break;
       case 155: /* expr ::= ID|INDEXED LP distinct exprlist RP */
-#line 920 "parse.y"
+#line 931 "parse.y"
 {
   if( yymsp[-1].minor.yy382 && yymsp[-1].minor.yy382->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
     sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0);
@@ -3100,29 +3092,29 @@ static void yy_reduce(
     yylhsminor.yy162.pExpr->flags |= EP_Distinct;
   }
 }
-#line 3104 "parse.c"
+#line 3096 "parse.c"
   yymsp[-4].minor.yy162 = yylhsminor.yy162;
         break;
       case 156: /* expr ::= ID|INDEXED LP STAR RP */
-#line 930 "parse.y"
+#line 941 "parse.y"
 {
   yylhsminor.yy162.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);
   spanSet(&yylhsminor.yy162,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
 }
-#line 3113 "parse.c"
+#line 3105 "parse.c"
   yymsp[-3].minor.yy162 = yylhsminor.yy162;
         break;
       case 157: /* term ::= CTIME_KW */
-#line 934 "parse.y"
+#line 945 "parse.y"
 {
   yylhsminor.yy162.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0);
   spanSet(&yylhsminor.yy162, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
 }
-#line 3122 "parse.c"
+#line 3114 "parse.c"
   yymsp[0].minor.yy162 = yylhsminor.yy162;
         break;
       case 158: /* expr ::= LP nexprlist COMMA expr RP */
-#line 963 "parse.y"
+#line 974 "parse.y"
 {
   ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy382, yymsp[-1].minor.yy162.pExpr);
   yylhsminor.yy162.pExpr = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
@@ -3133,7 +3125,7 @@ static void yy_reduce(
     sqlite3ExprListDelete(pParse->db, pList);
   }
 }
-#line 3137 "parse.c"
+#line 3129 "parse.c"
   yymsp[-4].minor.yy162 = yylhsminor.yy162;
         break;
       case 159: /* expr ::= expr AND expr */
@@ -3144,22 +3136,22 @@ static void yy_reduce(
       case 164: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==164);
       case 165: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==165);
       case 166: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==166);
-#line 974 "parse.y"
+#line 985 "parse.y"
 {spanBinaryExpr(pParse,yymsp[-1].major,&yymsp[-2].minor.yy162,&yymsp[0].minor.yy162);}
-#line 3150 "parse.c"
+#line 3142 "parse.c"
         break;
       case 167: /* likeop ::= LIKE_KW|MATCH */
-#line 987 "parse.y"
+#line 998 "parse.y"
 {yymsp[0].minor.yy0=yymsp[0].minor.yy0;/*A-overwrites-X*/}
-#line 3155 "parse.c"
+#line 3147 "parse.c"
         break;
       case 168: /* likeop ::= NOT LIKE_KW|MATCH */
-#line 988 "parse.y"
+#line 999 "parse.y"
 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/}
-#line 3160 "parse.c"
+#line 3152 "parse.c"
         break;
       case 169: /* expr ::= expr likeop expr */
-#line 989 "parse.y"
+#line 1000 "parse.y"
 {
   ExprList *pList;
   int bNot = yymsp[-1].minor.yy0.n & 0x80000000;
@@ -3171,10 +3163,10 @@ static void yy_reduce(
   yymsp[-2].minor.yy162.zEnd = yymsp[0].minor.yy162.zEnd;
   if( yymsp[-2].minor.yy162.pExpr ) yymsp[-2].minor.yy162.pExpr->flags |= EP_InfixFunc;
 }
-#line 3175 "parse.c"
+#line 3167 "parse.c"
         break;
       case 170: /* expr ::= expr likeop expr ESCAPE expr */
-#line 1000 "parse.y"
+#line 1011 "parse.y"
 {
   ExprList *pList;
   int bNot = yymsp[-3].minor.yy0.n & 0x80000000;
@@ -3187,58 +3179,58 @@ static void yy_reduce(
   yymsp[-4].minor.yy162.zEnd = yymsp[0].minor.yy162.zEnd;
   if( yymsp[-4].minor.yy162.pExpr ) yymsp[-4].minor.yy162.pExpr->flags |= EP_InfixFunc;
 }
-#line 3191 "parse.c"
+#line 3183 "parse.c"
         break;
       case 171: /* expr ::= expr ISNULL|NOTNULL */
-#line 1027 "parse.y"
+#line 1038 "parse.y"
 {spanUnaryPostfix(pParse,yymsp[0].major,&yymsp[-1].minor.yy162,&yymsp[0].minor.yy0);}
-#line 3196 "parse.c"
+#line 3188 "parse.c"
         break;
       case 172: /* expr ::= expr NOT NULL */
-#line 1028 "parse.y"
+#line 1039 "parse.y"
 {spanUnaryPostfix(pParse,TK_NOTNULL,&yymsp[-2].minor.yy162,&yymsp[0].minor.yy0);}
-#line 3201 "parse.c"
+#line 3193 "parse.c"
         break;
       case 173: /* expr ::= expr IS expr */
-#line 1049 "parse.y"
+#line 1060 "parse.y"
 {
   spanBinaryExpr(pParse,TK_IS,&yymsp[-2].minor.yy162,&yymsp[0].minor.yy162);
   binaryToUnaryIfNull(pParse, yymsp[0].minor.yy162.pExpr, yymsp[-2].minor.yy162.pExpr, TK_ISNULL);
 }
-#line 3209 "parse.c"
+#line 3201 "parse.c"
         break;
       case 174: /* expr ::= expr IS NOT expr */
-#line 1053 "parse.y"
+#line 1064 "parse.y"
 {
   spanBinaryExpr(pParse,TK_ISNOT,&yymsp[-3].minor.yy162,&yymsp[0].minor.yy162);
   binaryToUnaryIfNull(pParse, yymsp[0].minor.yy162.pExpr, yymsp[-3].minor.yy162.pExpr, TK_NOTNULL);
 }
-#line 3217 "parse.c"
+#line 3209 "parse.c"
         break;
       case 175: /* expr ::= NOT expr */
       case 176: /* expr ::= BITNOT expr */ yytestcase(yyruleno==176);
-#line 1077 "parse.y"
+#line 1088 "parse.y"
 {spanUnaryPrefix(&yymsp[-1].minor.yy162,pParse,yymsp[-1].major,&yymsp[0].minor.yy162,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
-#line 3223 "parse.c"
+#line 3215 "parse.c"
         break;
       case 177: /* expr ::= MINUS expr */
-#line 1081 "parse.y"
+#line 1092 "parse.y"
 {spanUnaryPrefix(&yymsp[-1].minor.yy162,pParse,TK_UMINUS,&yymsp[0].minor.yy162,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
-#line 3228 "parse.c"
+#line 3220 "parse.c"
         break;
       case 178: /* expr ::= PLUS expr */
-#line 1083 "parse.y"
+#line 1094 "parse.y"
 {spanUnaryPrefix(&yymsp[-1].minor.yy162,pParse,TK_UPLUS,&yymsp[0].minor.yy162,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
-#line 3233 "parse.c"
+#line 3225 "parse.c"
         break;
       case 179: /* between_op ::= BETWEEN */
       case 182: /* in_op ::= IN */ yytestcase(yyruleno==182);
-#line 1086 "parse.y"
+#line 1097 "parse.y"
 {yymsp[0].minor.yy52 = 0;}
-#line 3239 "parse.c"
+#line 3231 "parse.c"
         break;
       case 181: /* expr ::= expr between_op expr AND expr */
-#line 1088 "parse.y"
+#line 1099 "parse.y"
 {
   ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy162.pExpr);
   pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy162.pExpr);
@@ -3251,10 +3243,10 @@ static void yy_reduce(
   exprNot(pParse, yymsp[-3].minor.yy52, &yymsp[-4].minor.yy162);
   yymsp[-4].minor.yy162.zEnd = yymsp[0].minor.yy162.zEnd;
 }
-#line 3255 "parse.c"
+#line 3247 "parse.c"
         break;
       case 184: /* expr ::= expr in_op LP exprlist RP */
-#line 1104 "parse.y"
+#line 1115 "parse.y"
 {
     if( yymsp[-1].minor.yy382==0 ){
       /* Expressions of the form
@@ -3306,29 +3298,29 @@ static void yy_reduce(
     }
     yymsp[-4].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
   }
-#line 3310 "parse.c"
+#line 3302 "parse.c"
         break;
       case 185: /* expr ::= LP select RP */
-#line 1155 "parse.y"
+#line 1166 "parse.y"
 {
     spanSet(&yymsp[-2].minor.yy162,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/
     yymsp[-2].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
     sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy162.pExpr, yymsp[-1].minor.yy279);
   }
-#line 3319 "parse.c"
+#line 3311 "parse.c"
         break;
       case 186: /* expr ::= expr in_op LP select RP */
-#line 1160 "parse.y"
+#line 1171 "parse.y"
 {
     yymsp[-4].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy162.pExpr, 0);
     sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy162.pExpr, yymsp[-1].minor.yy279);
     exprNot(pParse, yymsp[-3].minor.yy52, &yymsp[-4].minor.yy162);
     yymsp[-4].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
   }
-#line 3329 "parse.c"
+#line 3321 "parse.c"
         break;
       case 187: /* expr ::= expr in_op nm paren_exprlist */
-#line 1166 "parse.y"
+#line 1177 "parse.y"
 {
     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-1].minor.yy0);
     Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
@@ -3338,20 +3330,20 @@ static void yy_reduce(
     exprNot(pParse, yymsp[-2].minor.yy52, &yymsp[-3].minor.yy162);
     yymsp[-3].minor.yy162.zEnd = &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n];
   }
-#line 3342 "parse.c"
+#line 3334 "parse.c"
         break;
       case 188: /* expr ::= EXISTS LP select RP */
-#line 1175 "parse.y"
+#line 1186 "parse.y"
 {
     Expr *p;
     spanSet(&yymsp[-3].minor.yy162,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/
     p = yymsp[-3].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
     sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy279);
   }
-#line 3352 "parse.c"
+#line 3344 "parse.c"
         break;
       case 189: /* expr ::= CASE case_operand case_exprlist case_else END */
-#line 1184 "parse.y"
+#line 1195 "parse.y"
 {
   spanSet(&yymsp[-4].minor.yy162,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-C*/
   yymsp[-4].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy362, 0);
@@ -3363,261 +3355,261 @@ static void yy_reduce(
     sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy362);
   }
 }
-#line 3367 "parse.c"
+#line 3359 "parse.c"
         break;
       case 190: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
-#line 1197 "parse.y"
+#line 1208 "parse.y"
 {
   yymsp[-4].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy382, yymsp[-2].minor.yy162.pExpr);
   yymsp[-4].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy382, yymsp[0].minor.yy162.pExpr);
 }
-#line 3375 "parse.c"
+#line 3367 "parse.c"
         break;
       case 191: /* case_exprlist ::= WHEN expr THEN expr */
-#line 1201 "parse.y"
+#line 1212 "parse.y"
 {
   yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy162.pExpr);
   yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382, yymsp[0].minor.yy162.pExpr);
 }
-#line 3383 "parse.c"
+#line 3375 "parse.c"
         break;
       case 194: /* case_operand ::= expr */
-#line 1211 "parse.y"
+#line 1222 "parse.y"
 {yymsp[0].minor.yy362 = yymsp[0].minor.yy162.pExpr; /*A-overwrites-X*/}
-#line 3388 "parse.c"
+#line 3380 "parse.c"
         break;
       case 197: /* nexprlist ::= nexprlist COMMA expr */
-#line 1222 "parse.y"
+#line 1233 "parse.y"
 {yymsp[-2].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy382,yymsp[0].minor.yy162.pExpr);}
-#line 3393 "parse.c"
+#line 3385 "parse.c"
         break;
       case 198: /* nexprlist ::= expr */
-#line 1224 "parse.y"
+#line 1235 "parse.y"
 {yymsp[0].minor.yy382 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy162.pExpr); /*A-overwrites-Y*/}
-#line 3398 "parse.c"
+#line 3390 "parse.c"
         break;
       case 200: /* paren_exprlist ::= LP exprlist RP */
       case 205: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==205);
-#line 1232 "parse.y"
+#line 1243 "parse.y"
 {yymsp[-2].minor.yy382 = yymsp[-1].minor.yy382;}
-#line 3404 "parse.c"
+#line 3396 "parse.c"
         break;
       case 201: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm ON nm LP sortlist RP where_opt */
-#line 1239 "parse.y"
+#line 1250 "parse.y"
 {
   sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy0, 
                      sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0), yymsp[-2].minor.yy382, yymsp[-9].minor.yy52,
                       &yymsp[-10].minor.yy0, yymsp[0].minor.yy362, SQLITE_SO_ASC, yymsp[-7].minor.yy52, SQLITE_IDXTYPE_APPDEF);
 }
-#line 3413 "parse.c"
+#line 3405 "parse.c"
         break;
       case 202: /* uniqueflag ::= UNIQUE */
       case 243: /* raisetype ::= ABORT */ yytestcase(yyruleno==243);
-#line 1246 "parse.y"
+#line 1257 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_ABORT;}
-#line 3419 "parse.c"
+#line 3411 "parse.c"
         break;
       case 203: /* uniqueflag ::= */
-#line 1247 "parse.y"
+#line 1258 "parse.y"
 {yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_NONE;}
-#line 3424 "parse.c"
+#line 3416 "parse.c"
         break;
       case 206: /* eidlist ::= eidlist COMMA nm collate sortorder */
-#line 1290 "parse.y"
+#line 1301 "parse.y"
 {
   yymsp[-4].minor.yy382 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy382, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy52, yymsp[0].minor.yy52);
 }
-#line 3431 "parse.c"
+#line 3423 "parse.c"
         break;
       case 207: /* eidlist ::= nm collate sortorder */
-#line 1293 "parse.y"
+#line 1304 "parse.y"
 {
   yymsp[-2].minor.yy382 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy52, yymsp[0].minor.yy52); /*A-overwrites-Y*/
 }
-#line 3438 "parse.c"
+#line 3430 "parse.c"
         break;
       case 210: /* cmd ::= DROP INDEX ifexists fullname ON nm */
-#line 1304 "parse.y"
+#line 1315 "parse.y"
 {
     sqlite3DropIndex(pParse, yymsp[-2].minor.yy387, &yymsp[0].minor.yy0, yymsp[-3].minor.yy52);
 }
-#line 3445 "parse.c"
+#line 3437 "parse.c"
         break;
       case 211: /* cmd ::= PRAGMA nm */
-#line 1311 "parse.y"
+#line 1322 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[0].minor.yy0,0,0,0,0);
 }
-#line 3452 "parse.c"
+#line 3444 "parse.c"
         break;
       case 212: /* cmd ::= PRAGMA nm EQ nmnum */
-#line 1314 "parse.y"
+#line 1325 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy0,0,0);
 }
-#line 3459 "parse.c"
+#line 3451 "parse.c"
         break;
       case 213: /* cmd ::= PRAGMA nm LP nmnum RP */
-#line 1317 "parse.y"
+#line 1328 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,0,&yymsp[-1].minor.yy0,0,0);
 }
-#line 3466 "parse.c"
+#line 3458 "parse.c"
         break;
       case 214: /* cmd ::= PRAGMA nm EQ minus_num */
-#line 1320 "parse.y"
+#line 1331 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy0,0,1);
 }
-#line 3473 "parse.c"
+#line 3465 "parse.c"
         break;
       case 215: /* cmd ::= PRAGMA nm LP minus_num RP */
-#line 1323 "parse.y"
+#line 1334 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,0,&yymsp[-1].minor.yy0,0,1);
 }
-#line 3480 "parse.c"
+#line 3472 "parse.c"
         break;
       case 216: /* cmd ::= PRAGMA nm EQ nm DOT nm */
-#line 1326 "parse.y"
+#line 1337 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0,0);
 }
-#line 3487 "parse.c"
+#line 3479 "parse.c"
         break;
       case 217: /* cmd ::= PRAGMA */
-#line 1329 "parse.y"
+#line 1340 "parse.y"
 {
     sqlite3Pragma(pParse, 0,0,0,0,0);
 }
-#line 3494 "parse.c"
+#line 3486 "parse.c"
         break;
       case 220: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
-#line 1349 "parse.y"
+#line 1360 "parse.y"
 {
   Token all;
   all.z = yymsp[-3].minor.yy0.z;
   all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
   sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy427, &all);
 }
-#line 3504 "parse.c"
+#line 3496 "parse.c"
         break;
       case 221: /* trigger_decl ::= TRIGGER ifnotexists nm trigger_time trigger_event ON fullname foreach_clause when_clause */
-#line 1358 "parse.y"
+#line 1369 "parse.y"
 {
   sqlite3BeginTrigger(pParse, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy52, yymsp[-4].minor.yy10.a, yymsp[-4].minor.yy10.b, yymsp[-2].minor.yy387, yymsp[0].minor.yy362, yymsp[-7].minor.yy52);
   yymsp[-8].minor.yy0 = yymsp[-6].minor.yy0; /*yymsp[-8].minor.yy0-overwrites-T*/
 }
-#line 3512 "parse.c"
+#line 3504 "parse.c"
         break;
       case 222: /* trigger_time ::= BEFORE */
-#line 1364 "parse.y"
+#line 1375 "parse.y"
 { yymsp[0].minor.yy52 = TK_BEFORE; }
-#line 3517 "parse.c"
+#line 3509 "parse.c"
         break;
       case 223: /* trigger_time ::= AFTER */
-#line 1365 "parse.y"
+#line 1376 "parse.y"
 { yymsp[0].minor.yy52 = TK_AFTER;  }
-#line 3522 "parse.c"
+#line 3514 "parse.c"
         break;
       case 224: /* trigger_time ::= INSTEAD OF */
-#line 1366 "parse.y"
+#line 1377 "parse.y"
 { yymsp[-1].minor.yy52 = TK_INSTEAD;}
-#line 3527 "parse.c"
+#line 3519 "parse.c"
         break;
       case 225: /* trigger_time ::= */
-#line 1367 "parse.y"
+#line 1378 "parse.y"
 { yymsp[1].minor.yy52 = TK_BEFORE; }
-#line 3532 "parse.c"
+#line 3524 "parse.c"
         break;
       case 226: /* trigger_event ::= DELETE|INSERT */
       case 227: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==227);
-#line 1371 "parse.y"
+#line 1382 "parse.y"
 {yymsp[0].minor.yy10.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy10.b = 0;}
-#line 3538 "parse.c"
+#line 3530 "parse.c"
         break;
       case 228: /* trigger_event ::= UPDATE OF idlist */
-#line 1373 "parse.y"
+#line 1384 "parse.y"
 {yymsp[-2].minor.yy10.a = TK_UPDATE; yymsp[-2].minor.yy10.b = yymsp[0].minor.yy40;}
-#line 3543 "parse.c"
+#line 3535 "parse.c"
         break;
       case 229: /* when_clause ::= */
-#line 1380 "parse.y"
+#line 1391 "parse.y"
 { yymsp[1].minor.yy362 = 0; }
-#line 3548 "parse.c"
+#line 3540 "parse.c"
         break;
       case 230: /* when_clause ::= WHEN expr */
-#line 1381 "parse.y"
+#line 1392 "parse.y"
 { yymsp[-1].minor.yy362 = yymsp[0].minor.yy162.pExpr; }
-#line 3553 "parse.c"
+#line 3545 "parse.c"
         break;
       case 231: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
-#line 1385 "parse.y"
+#line 1396 "parse.y"
 {
   assert( yymsp[-2].minor.yy427!=0 );
   yymsp[-2].minor.yy427->pLast->pNext = yymsp[-1].minor.yy427;
   yymsp[-2].minor.yy427->pLast = yymsp[-1].minor.yy427;
 }
-#line 3562 "parse.c"
+#line 3554 "parse.c"
         break;
       case 232: /* trigger_cmd_list ::= trigger_cmd SEMI */
-#line 1390 "parse.y"
+#line 1401 "parse.y"
 { 
   assert( yymsp[-1].minor.yy427!=0 );
   yymsp[-1].minor.yy427->pLast = yymsp[-1].minor.yy427;
 }
-#line 3570 "parse.c"
+#line 3562 "parse.c"
         break;
       case 233: /* trnm ::= nm DOT nm */
-#line 1401 "parse.y"
+#line 1412 "parse.y"
 {
   yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;
   sqlite3ErrorMsg(pParse, 
         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
         "statements within triggers");
 }
-#line 3580 "parse.c"
+#line 3572 "parse.c"
         break;
       case 234: /* tridxby ::= INDEXED BY nm */
-#line 1413 "parse.y"
+#line 1424 "parse.y"
 {
   sqlite3ErrorMsg(pParse,
         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
         "within triggers");
 }
-#line 3589 "parse.c"
+#line 3581 "parse.c"
         break;
       case 235: /* tridxby ::= NOT INDEXED */
-#line 1418 "parse.y"
+#line 1429 "parse.y"
 {
   sqlite3ErrorMsg(pParse,
         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
         "within triggers");
 }
-#line 3598 "parse.c"
+#line 3590 "parse.c"
         break;
       case 236: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */
-#line 1431 "parse.y"
+#line 1442 "parse.y"
 {yymsp[-6].minor.yy427 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy382, yymsp[0].minor.yy362, yymsp[-5].minor.yy52);}
-#line 3603 "parse.c"
+#line 3595 "parse.c"
         break;
       case 237: /* trigger_cmd ::= insert_cmd INTO trnm idlist_opt select */
-#line 1435 "parse.y"
+#line 1446 "parse.y"
 {yymsp[-4].minor.yy427 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy40, yymsp[0].minor.yy279, yymsp[-4].minor.yy52);/*A-overwrites-R*/}
-#line 3608 "parse.c"
+#line 3600 "parse.c"
         break;
       case 238: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */
-#line 1439 "parse.y"
+#line 1450 "parse.y"
 {yymsp[-4].minor.yy427 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy362);}
-#line 3613 "parse.c"
+#line 3605 "parse.c"
         break;
       case 239: /* trigger_cmd ::= select */
-#line 1443 "parse.y"
+#line 1454 "parse.y"
 {yymsp[0].minor.yy427 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy279); /*A-overwrites-X*/}
-#line 3618 "parse.c"
+#line 3610 "parse.c"
         break;
       case 240: /* expr ::= RAISE LP IGNORE RP */
-#line 1446 "parse.y"
+#line 1457 "parse.y"
 {
   spanSet(&yymsp[-3].minor.yy162,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-X*/
   yymsp[-3].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0); 
@@ -3625,10 +3617,10 @@ static void yy_reduce(
     yymsp[-3].minor.yy162.pExpr->affinity = ON_CONFLICT_ACTION_IGNORE;
   }
 }
-#line 3629 "parse.c"
+#line 3621 "parse.c"
         break;
       case 241: /* expr ::= RAISE LP raisetype COMMA STRING RP */
-#line 1453 "parse.y"
+#line 1464 "parse.y"
 {
   spanSet(&yymsp[-5].minor.yy162,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-X*/
   yymsp[-5].minor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); 
@@ -3636,130 +3628,115 @@ static void yy_reduce(
     yymsp[-5].minor.yy162.pExpr->affinity = (char)yymsp[-3].minor.yy52;
   }
 }
-#line 3640 "parse.c"
+#line 3632 "parse.c"
         break;
       case 242: /* raisetype ::= ROLLBACK */
-#line 1463 "parse.y"
+#line 1474 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_ROLLBACK;}
-#line 3645 "parse.c"
+#line 3637 "parse.c"
         break;
       case 244: /* raisetype ::= FAIL */
-#line 1465 "parse.y"
+#line 1476 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_FAIL;}
-#line 3650 "parse.c"
+#line 3642 "parse.c"
         break;
       case 245: /* cmd ::= DROP TRIGGER ifexists fullname */
-#line 1470 "parse.y"
+#line 1481 "parse.y"
 {
   sqlite3DropTrigger(pParse,yymsp[0].minor.yy387,yymsp[-1].minor.yy52);
 }
-#line 3657 "parse.c"
-        break;
-      case 246: /* cmd ::= REINDEX */
-#line 1477 "parse.y"
-{sqlite3Reindex(pParse, 0, 0);}
-#line 3662 "parse.c"
-        break;
-      case 247: /* cmd ::= REINDEX nm */
-#line 1478 "parse.y"
-{sqlite3Reindex(pParse, &yymsp[0].minor.yy0, 0);}
-#line 3667 "parse.c"
-        break;
-      case 248: /* cmd ::= REINDEX nm ON nm */
-#line 1479 "parse.y"
-{sqlite3Reindex(pParse, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
-#line 3672 "parse.c"
+#line 3649 "parse.c"
         break;
-      case 249: /* cmd ::= ANALYZE */
-#line 1484 "parse.y"
+      case 246: /* cmd ::= ANALYZE */
+#line 1496 "parse.y"
 {sqlite3Analyze(pParse, 0);}
-#line 3677 "parse.c"
+#line 3654 "parse.c"
         break;
-      case 250: /* cmd ::= ANALYZE nm */
-#line 1485 "parse.y"
+      case 247: /* cmd ::= ANALYZE nm */
+#line 1497 "parse.y"
 {sqlite3Analyze(pParse, &yymsp[0].minor.yy0);}
-#line 3682 "parse.c"
+#line 3659 "parse.c"
         break;
-      case 251: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
-#line 1490 "parse.y"
+      case 248: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+#line 1502 "parse.y"
 {
   sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy387,&yymsp[0].minor.yy0);
 }
-#line 3689 "parse.c"
+#line 3666 "parse.c"
         break;
-      case 252: /* with ::= */
-#line 1513 "parse.y"
+      case 249: /* with ::= */
+#line 1525 "parse.y"
 {yymsp[1].minor.yy151 = 0;}
-#line 3694 "parse.c"
+#line 3671 "parse.c"
         break;
-      case 253: /* with ::= WITH wqlist */
-#line 1515 "parse.y"
+      case 250: /* with ::= WITH wqlist */
+#line 1527 "parse.y"
 { yymsp[-1].minor.yy151 = yymsp[0].minor.yy151; }
-#line 3699 "parse.c"
+#line 3676 "parse.c"
         break;
-      case 254: /* with ::= WITH RECURSIVE wqlist */
-#line 1516 "parse.y"
+      case 251: /* with ::= WITH RECURSIVE wqlist */
+#line 1528 "parse.y"
 { yymsp[-2].minor.yy151 = yymsp[0].minor.yy151; }
-#line 3704 "parse.c"
+#line 3681 "parse.c"
         break;
-      case 255: /* wqlist ::= nm eidlist_opt AS LP select RP */
-#line 1518 "parse.y"
+      case 252: /* wqlist ::= nm eidlist_opt AS LP select RP */
+#line 1530 "parse.y"
 {
   yymsp[-5].minor.yy151 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy382, yymsp[-1].minor.yy279); /*A-overwrites-X*/
 }
-#line 3711 "parse.c"
+#line 3688 "parse.c"
         break;
-      case 256: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
-#line 1521 "parse.y"
+      case 253: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
+#line 1533 "parse.y"
 {
   yymsp[-7].minor.yy151 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy151, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy382, yymsp[-1].minor.yy279);
 }
-#line 3718 "parse.c"
+#line 3695 "parse.c"
         break;
       default:
-      /* (257) input ::= ecmd */ yytestcase(yyruleno==257);
-      /* (258) explain ::= */ yytestcase(yyruleno==258);
-      /* (259) cmdx ::= cmd (OPTIMIZED OUT) */ assert(yyruleno!=259);
-      /* (260) trans_opt ::= */ yytestcase(yyruleno==260);
-      /* (261) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==261);
-      /* (262) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==262);
-      /* (263) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==263);
-      /* (264) savepoint_opt ::= */ yytestcase(yyruleno==264);
-      /* (265) cmd ::= create_table create_table_args */ yytestcase(yyruleno==265);
-      /* (266) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==266);
-      /* (267) columnlist ::= columnname carglist */ yytestcase(yyruleno==267);
-      /* (268) typetoken ::= typename */ yytestcase(yyruleno==268);
-      /* (269) typename ::= ID|STRING */ yytestcase(yyruleno==269);
-      /* (270) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=270);
-      /* (271) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=271);
-      /* (272) carglist ::= carglist ccons */ yytestcase(yyruleno==272);
-      /* (273) carglist ::= */ yytestcase(yyruleno==273);
-      /* (274) ccons ::= NULL onconf */ yytestcase(yyruleno==274);
-      /* (275) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==275);
-      /* (276) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==276);
-      /* (277) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=277);
-      /* (278) tconscomma ::= */ yytestcase(yyruleno==278);
-      /* (279) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=279);
-      /* (280) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=280);
-      /* (281) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=281);
-      /* (282) oneselect ::= values */ yytestcase(yyruleno==282);
-      /* (283) sclp ::= selcollist COMMA */ yytestcase(yyruleno==283);
-      /* (284) as ::= ID|STRING */ yytestcase(yyruleno==284);
-      /* (285) join_nm ::= ID|INDEXED */ yytestcase(yyruleno==285);
-      /* (286) join_nm ::= JOIN_KW */ yytestcase(yyruleno==286);
-      /* (287) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=287);
-      /* (288) exprlist ::= nexprlist */ yytestcase(yyruleno==288);
-      /* (289) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=289);
-      /* (290) nmnum ::= STRING */ yytestcase(yyruleno==290);
-      /* (291) nmnum ::= nm */ yytestcase(yyruleno==291);
-      /* (292) nmnum ::= ON */ yytestcase(yyruleno==292);
-      /* (293) nmnum ::= DELETE */ yytestcase(yyruleno==293);
-      /* (294) nmnum ::= DEFAULT */ yytestcase(yyruleno==294);
-      /* (295) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==295);
-      /* (296) foreach_clause ::= */ yytestcase(yyruleno==296);
-      /* (297) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==297);
-      /* (298) trnm ::= nm */ yytestcase(yyruleno==298);
-      /* (299) tridxby ::= */ yytestcase(yyruleno==299);
+      /* (254) input ::= ecmd */ yytestcase(yyruleno==254);
+      /* (255) explain ::= */ yytestcase(yyruleno==255);
+      /* (256) cmdx ::= cmd (OPTIMIZED OUT) */ assert(yyruleno!=256);
+      /* (257) trans_opt ::= */ yytestcase(yyruleno==257);
+      /* (258) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==258);
+      /* (259) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==259);
+      /* (260) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==260);
+      /* (261) savepoint_opt ::= */ yytestcase(yyruleno==261);
+      /* (262) cmd ::= create_table create_table_args */ yytestcase(yyruleno==262);
+      /* (263) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==263);
+      /* (264) columnlist ::= columnname carglist */ yytestcase(yyruleno==264);
+      /* (265) typetoken ::= typename */ yytestcase(yyruleno==265);
+      /* (266) typename ::= ID|STRING */ yytestcase(yyruleno==266);
+      /* (267) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=267);
+      /* (268) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=268);
+      /* (269) carglist ::= carglist ccons */ yytestcase(yyruleno==269);
+      /* (270) carglist ::= */ yytestcase(yyruleno==270);
+      /* (271) ccons ::= NULL onconf */ yytestcase(yyruleno==271);
+      /* (272) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==272);
+      /* (273) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==273);
+      /* (274) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=274);
+      /* (275) tconscomma ::= */ yytestcase(yyruleno==275);
+      /* (276) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=276);
+      /* (277) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=277);
+      /* (278) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=278);
+      /* (279) oneselect ::= values */ yytestcase(yyruleno==279);
+      /* (280) sclp ::= selcollist COMMA */ yytestcase(yyruleno==280);
+      /* (281) as ::= ID|STRING */ yytestcase(yyruleno==281);
+      /* (282) join_nm ::= ID|INDEXED */ yytestcase(yyruleno==282);
+      /* (283) join_nm ::= JOIN_KW */ yytestcase(yyruleno==283);
+      /* (284) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=284);
+      /* (285) exprlist ::= nexprlist */ yytestcase(yyruleno==285);
+      /* (286) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=286);
+      /* (287) nmnum ::= STRING */ yytestcase(yyruleno==287);
+      /* (288) nmnum ::= nm */ yytestcase(yyruleno==288);
+      /* (289) nmnum ::= ON */ yytestcase(yyruleno==289);
+      /* (290) nmnum ::= DELETE */ yytestcase(yyruleno==290);
+      /* (291) nmnum ::= DEFAULT */ yytestcase(yyruleno==291);
+      /* (292) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==292);
+      /* (293) foreach_clause ::= */ yytestcase(yyruleno==293);
+      /* (294) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==294);
+      /* (295) trnm ::= nm */ yytestcase(yyruleno==295);
+      /* (296) tridxby ::= */ yytestcase(yyruleno==296);
         break;
 /********** End reduce actions ************************************************/
   };
@@ -3825,7 +3802,7 @@ static void yy_syntax_error(
   } else {
     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
   }
-#line 3829 "parse.c"
+#line 3806 "parse.c"
 /************ End %syntax_error code ******************************************/
   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
 }
diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
index 914fc53..5245594 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -202,6 +202,17 @@ columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
 // fallback to ID if they will not parse as their original value.
 // This obviates the need for the "id" nonterminal.
 //
+// A keyword is checked for being a reserve one in `nm`, before
+// processing of this %fallback directive. Reserved keywords included
+// here to avoid the situation when a keyword has no usages within
+// `parse.y` file (a keyword can have more or less usages depending on
+// compiler defines). When a keyword has no usages it is excluded
+// from autogenerated file `parse.h` that lead to compile-time error.
+//
+// See [1] for more information.
+//
+// [1]: https://www.sqlite.org/src/info/007aec11333432e0
+//
 %fallback ID
   ABORT ACTION ADD AFTER AUTOINCREMENT BEFORE CASCADE
   CONFLICT DEFERRED END FAIL
@@ -1473,11 +1484,12 @@ cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
 %endif  !SQLITE_OMIT_TRIGGER
 
 ////////////////////////// REINDEX collation //////////////////////////////////
-%ifndef SQLITE_OMIT_REINDEX
-cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
-cmd ::= REINDEX nm(X).          {sqlite3Reindex(pParse, &X, 0);}
-cmd ::= REINDEX nm(X) ON nm(Y). {sqlite3Reindex(pParse, &X, &Y);}
-%endif  SQLITE_OMIT_REINDEX
+/* gh-2174: Commended until REINDEX is implemented in scope of gh-3195 */
+/* %ifndef SQLITE_OMIT_REINDEX */
+/* cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);} */
+/* cmd ::= REINDEX nm(X).          {sqlite3Reindex(pParse, &X, 0);} */
+/* cmd ::= REINDEX nm(X) ON nm(Y). {sqlite3Reindex(pParse, &X, &Y);} */
+/* %endif  SQLITE_OMIT_REINDEX*/
 
 /////////////////////////////////// ANALYZE ///////////////////////////////////
 %ifndef SQLITE_OMIT_ANALYZE
diff --git a/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua b/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua
new file mode 100755
index 0000000..6aef438
--- /dev/null
+++ b/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua
@@ -0,0 +1,17 @@
+#!/usr/bin/env tarantool
+
+-- this test will be deleted in scope of #3195
+test = require("sqltester")
+test:plan(1)
+
+test:execsql("DROP TABLE IF EXISTS t1");
+test:execsql("CREATE TABLE t1(a INT PRIMARY KEY)");
+test:execsql("CREATE INDEX i1 on t1(a)");
+
+local ok = pcall(test.execsql, test, [[
+    REINDEX i1 ON t1
+]])
+
+test:ok(not ok, 'reindex syntax must be banned')
+
+test:finish_test()
diff --git a/test/sql-tap/suite.ini b/test/sql-tap/suite.ini
index 0bc9e83..e3db3f0 100644
--- a/test/sql-tap/suite.ini
+++ b/test/sql-tap/suite.ini
@@ -1,5 +1,9 @@
 [default]
 core = app
 description = Database tests with #! using TAP
+disabled =
+	reindex.test.lua ; These three tests are banned in scope of #2174
+	gh2130-index-refer-table.test.lua
+	misc3.test.lua
 lua_libs = lua/sqltester.lua ../sql/lua/sql_tokenizer.lua ../box/lua/identifier.lua
 is_parallel = True
-- 
2.7.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [tarantool-patches] Re: [PATCH] sql: ban of REINDEX syntax
  2018-03-21 11:06   ` Ivan Ilyin
@ 2018-03-21 13:02     ` Alexander Turenko
  2018-03-21 15:37       ` n.pettik
  0 siblings, 1 reply; 9+ messages in thread
From: Alexander Turenko @ 2018-03-21 13:02 UTC (permalink / raw)
  To: Nikita Pettik; +Cc: tarantool-patches, Ival Ilyin

LGTM. Thanks!

Nikita, can you please look into this patch?

WBR, Alexander Turenko.

On Wed, Mar 21, 2018 at 02:06:08PM +0300, Ivan Ilyin wrote:
> From: vanyail <vanyail@yandex.ru>
> 
> This change cut REINDEX syntax from keywords and also disables tests
> which were using this syntax.
> 
> This patch affects only parser, REINDEX implementation still exists,
> because it is planned to be fixed and enabled in the scope of #3195.
> 
> Note that REINDEX keyword is still in '%fallback' directive in
> 'parse.y'. The reason described in 'parse.y' in comment related
> to '%fallback'.
> 
> Fixes #2174
> ---
> 
> branch: https://github.com/tarantool/tarantool/tree/gh-2174-ban-reindex-syntax
> ---
>  src/box/sql/parse.c                              | 1797 +++++++++++-----------
>  src/box/sql/parse.y                              |   22 +-
>  test/sql-tap/gh-2174-ban-reindex-syntax.test.lua |   17 +
>  test/sql-tap/suite.ini                           |    4 +
>  4 files changed, 925 insertions(+), 915 deletions(-)
>  create mode 100755 test/sql-tap/gh-2174-ban-reindex-syntax.test.lua
> 
> ...

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [tarantool-patches] Re: [PATCH] sql: ban of REINDEX syntax
  2018-03-21 13:02     ` [tarantool-patches] " Alexander Turenko
@ 2018-03-21 15:37       ` n.pettik
  2018-03-21 16:08         ` Alexander Turenko
  0 siblings, 1 reply; 9+ messages in thread
From: n.pettik @ 2018-03-21 15:37 UTC (permalink / raw)
  To: tarantool-patches, vanyail; +Cc: Alexander Turenko

Hello. See comments below.

>This change cut

Misspelling: cut(s).

>The reason described in 'parse.y' in comment related
>to '%fallback'.

Don't reffer to comments in your commit message. Instead, provide
short desctiption/explanation.

Also put link to the issue in your cover letter.

>---
>
>branch: https://github.com/tarantool/tarantool/tree/gh-2174-ban-reindex-syntax
>---

Don't add extra '---', just put issue and branch right after
auto-generated delimiter.

>+++ b/src/box/sql/parse.y
>@@ -202,6 +202,17 @@ columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
>// fallback to ID if they will not parse as their original value.
>// This obviates the need for the "id" nonterminal.
>//
>+// A keyword is checked for being a reserve one in `nm`, before
>+// processing of this %fallback directive. Reserved keywords included
>+// here to avoid the situation when a keyword has no usages within
>+// `parse.y` file (a keyword can have more or less usages depending on
>+// compiler defines). When a keyword has no usages it is excluded
>+// from autogenerated file `parse.h` that lead to compile-time error.
>+//
>+// See [1] for more information.
>+//
>+// [1]: https://www.sqlite.org/src/info/007aec11333432e0
>+//

I would better put link to commit message or to comments of original
issue. I stick to the point that source code doesn't seem to be good
place for links. Also, in Tarantool we use C-like commenting style.

>@@ -1473,11 +1484,12 @@ cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
>%endif  !SQLITE_OMIT_TRIGGER
>
>////////////////////////// REINDEX collation //////////////////////////////////
>-%ifndef SQLITE_OMIT_REINDEX
>-cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
>-cmd ::= REINDEX nm(X).          {sqlite3Reindex(pParse, &X, 0);}
>-cmd ::= REINDEX nm(X) ON nm(Y). {sqlite3Reindex(pParse, &X, &Y);}
>-%endif  SQLITE_OMIT_REINDEX
>+/* gh-2174: Commended until REINDEX is implemented in scope of gh-3195 */
>+/* %ifndef SQLITE_OMIT_REINDEX */
>+/* cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);} */
>+/* cmd ::= REINDEX nm(X).          {sqlite3Reindex(pParse, &X, 0);} */

This variant of REINDEX syntax should be removed completely, since in
our SQL index naming exists only in scope of tables, i.e. two tables
are able to feature indexes with the same name.

>+++ b/test/sql-tap/gh-2174-ban-reindex-syntax.test.lua
>@@ -0,0 +1,17 @@
>+#!/usr/bin/env tarantool
>+
>+-- this test will be deleted in scope of #3195
>+test = require("sqltester")
>+test:plan(1)
>+
>+test:execsql("DROP TABLE IF EXISTS t1");

AFAIK in sql-tap tests you don't need to make any preliminary clean-up:
each test suite starts on brand new instance of Tarantool.

>+test:execsql("CREATE TABLE t1(a INT PRIMARY KEY)");
>+test:execsql("CREATE INDEX i1 on t1(a)");

You have banned three variants of REINDEX syntax, but in your
tests you check only one. Add more test cases.

Finally, I would suggest to use special testing facilities instead of
primitive pcall (such as test:do_catchsql_test function).
You can investigate other test examples in sql-tap.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [tarantool-patches] Re: [PATCH] sql: ban of REINDEX syntax
  2018-03-21 15:37       ` n.pettik
@ 2018-03-21 16:08         ` Alexander Turenko
  2018-03-21 16:42           ` Kirill Yukhin
  0 siblings, 1 reply; 9+ messages in thread
From: Alexander Turenko @ 2018-03-21 16:08 UTC (permalink / raw)
  To: tarantool-patches, Kirill Yukhin, Nikita Pettik; +Cc: vanyail

Kirill, can you suggest best ways to go forward on detable questions
below?

On Wed, Mar 21, 2018 at 06:37:38PM +0300, n.pettik wrote:
> Hello. See comments below.
> 
> >This change cut
> 
> Misspelling: cut(s).
> 
> >The reason described in 'parse.y' in comment related
> >to '%fallback'.
> 
> Don't reffer to comments in your commit message. Instead, provide
> short desctiption/explanation.
> 

Why we need to duplicate explanation? A commit message is a part of the
commit.

> >+++ b/src/box/sql/parse.y
> >@@ -202,6 +202,17 @@ columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
> >// fallback to ID if they will not parse as their original value.
> >// This obviates the need for the "id" nonterminal.
> >//
> >+// A keyword is checked for being a reserve one in `nm`, before
> >+// processing of this %fallback directive. Reserved keywords included
> >+// here to avoid the situation when a keyword has no usages within
> >+// `parse.y` file (a keyword can have more or less usages depending on
> >+// compiler defines). When a keyword has no usages it is excluded
> >+// from autogenerated file `parse.h` that lead to compile-time error.
> >+//
> >+// See [1] for more information.
> >+//
> >+// [1]: https://www.sqlite.org/src/info/007aec11333432e0
> >+//
> 
> I would better put link to commit message or to comments of original
> issue. I stick to the point that source code doesn't seem to be good
> place for links. Also, in Tarantool we use C-like commenting style.
> 

I don't see nothing bad with using links, epsecially when it can
simplify reader experience.

WBR, Alexander Turenko.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [tarantool-patches] Re: [PATCH] sql: ban of REINDEX syntax
  2018-03-21 16:08         ` Alexander Turenko
@ 2018-03-21 16:42           ` Kirill Yukhin
  2018-03-21 20:10             ` Alexander Turenko
  0 siblings, 1 reply; 9+ messages in thread
From: Kirill Yukhin @ 2018-03-21 16:42 UTC (permalink / raw)
  To: Alexander Turenko; +Cc: tarantool-patches, Nikita Pettik, vanyail

On 21 мар 19:08, Alexander Turenko wrote:
> Kirill, can you suggest best ways to go forward on detable questions
> below?
I think there're no specific ways to raise such. If you'd like to bring
my attention: CC me explicitly in e-mail.

> 
> On Wed, Mar 21, 2018 at 06:37:38PM +0300, n.pettik wrote:
> > Hello. See comments below.
> > 
> > >This change cut
> > 
> > Misspelling: cut(s).
> > 
> > >The reason described in 'parse.y' in comment related
> > >to '%fallback'.
> > 
> > Don't reffer to comments in your commit message. Instead, provide
> > short desctiption/explanation.
> > 
> 
> Why we need to duplicate explanation? A commit message is a part of the
> commit.
You might break commit-comment connection by commits that follows. 

> > >+++ b/src/box/sql/parse.y
> > >@@ -202,6 +202,17 @@ columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
> > >// fallback to ID if they will not parse as their original value.
> > >// This obviates the need for the "id" nonterminal.
> > >//
> > >+// A keyword is checked for being a reserve one in `nm`, before
> > >+// processing of this %fallback directive. Reserved keywords included
> > >+// here to avoid the situation when a keyword has no usages within
> > >+// `parse.y` file (a keyword can have more or less usages depending on
> > >+// compiler defines). When a keyword has no usages it is excluded
> > >+// from autogenerated file `parse.h` that lead to compile-time error.
> > >+//
> > >+// See [1] for more information.
> > >+//
> > >+// [1]: https://www.sqlite.org/src/info/007aec11333432e0
> > >+//
> > 
> > I would better put link to commit message or to comments of original
> > issue. I stick to the point that source code doesn't seem to be good
> > place for links. Also, in Tarantool we use C-like commenting style.
> > 
> 
> I don't see nothing bad with using links, epsecially when it can
> simplify reader experience.
IMHO, internet is volatile. WWW-links are not verbatim enough to me, and
hence are fallcious artifacts to put into comment. I'd defer final decision
to 1st level reviewer.

> 
> WBR, Alexander Turenko.

--
Thanks, Kirill

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [tarantool-patches] Re: [PATCH] sql: ban of REINDEX syntax
  2018-03-21 16:42           ` Kirill Yukhin
@ 2018-03-21 20:10             ` Alexander Turenko
  0 siblings, 0 replies; 9+ messages in thread
From: Alexander Turenko @ 2018-03-21 20:10 UTC (permalink / raw)
  To: Ivan Ilyin, tarantool-patches; +Cc: Nikita Pettik, Kirill Yukhin

Ivan, please consider decisions below, update the commit and send it
again.

WBR, Alexander Turenko.

On Wed, Mar 21, 2018 at 07:42:52PM +0300, Kirill Yukhin wrote:
> On 21 мар 19:08, Alexander Turenko wrote:
> > Kirill, can you suggest best ways to go forward on detable questions
> > below?
> I think there're no specific ways to raise such. If you'd like to bring
> my attention: CC me explicitly in e-mail.
> 
> > 
> > On Wed, Mar 21, 2018 at 06:37:38PM +0300, n.pettik wrote:
> > > Hello. See comments below.
> > > 
> > > >This change cut
> > > 
> > > Misspelling: cut(s).
> > > 
> > > >The reason described in 'parse.y' in comment related
> > > >to '%fallback'.
> > > 
> > > Don't reffer to comments in your commit message. Instead, provide
> > > short desctiption/explanation.
> > > 
> > 
> > Why we need to duplicate explanation? A commit message is a part of the
> > commit.
> You might break commit-comment connection by commits that follows. 
> 

Proposed to describe it shortly in the commit message like so:

Note that REINDEX keyword is still in '%fallback' directive in
'parse.y', because we need at least one usage of a keyword in 'parse.y'
to prevent exclusion from 'parse.h' (it would break the build).

> > > >+++ b/src/box/sql/parse.y
> > > >@@ -202,6 +202,17 @@ columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
> > > >// fallback to ID if they will not parse as their original value.
> > > >// This obviates the need for the "id" nonterminal.
> > > >//
> > > >+// A keyword is checked for being a reserve one in `nm`, before
> > > >+// processing of this %fallback directive. Reserved keywords included
> > > >+// here to avoid the situation when a keyword has no usages within
> > > >+// `parse.y` file (a keyword can have more or less usages depending on
> > > >+// compiler defines). When a keyword has no usages it is excluded
> > > >+// from autogenerated file `parse.h` that lead to compile-time error.
> > > >+//
> > > >+// See [1] for more information.
> > > >+//
> > > >+// [1]: https://www.sqlite.org/src/info/007aec11333432e0
> > > >+//
> > > 
> > > I would better put link to commit message or to comments of original
> > > issue. I stick to the point that source code doesn't seem to be good
> > > place for links. Also, in Tarantool we use C-like commenting style.
> > > 
> > 
> > I don't see nothing bad with using links, epsecially when it can
> > simplify reader experience.
> IMHO, internet is volatile. WWW-links are not verbatim enough to me, and
> hence are fallcious artifacts to put into comment. I'd defer final decision
> to 1st level reviewer.
> 

Link with SHA1 is better IMO than just SHA1, but I understood that the
point is about our feelings of the code we write. Proposed to include it
like so:

See fossil check-in [007aec11] or CVS commit 2045 in SQLite for more
information.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2018-03-21 20:10 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1521051043-28203-1-git-send-email-vanyail@yandex.ru>
2018-03-15 13:34 ` [tarantool-patches] Re: [patches] [PATCH] Ban of REINDEX syntax Alexander Turenko
2018-03-15 13:56   ` [tarantool-patches] Re[2]: " Alexander Turenko
2018-03-19 19:22   ` [tarantool-patches] [PATCH] sql: ban " Ivan Ilyin
2018-03-21 11:06   ` Ivan Ilyin
2018-03-21 13:02     ` [tarantool-patches] " Alexander Turenko
2018-03-21 15:37       ` n.pettik
2018-03-21 16:08         ` Alexander Turenko
2018-03-21 16:42           ` Kirill Yukhin
2018-03-21 20:10             ` Alexander Turenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox