Tarantool development patches archive
 help / color / mirror / Atom feed
* [tarantool-patches] [PATCH] sql: remove support of partial indexes
@ 2018-04-03 11:42 Gleb
  2018-04-04  0:21 ` [tarantool-patches] " Alexander Turenko
  2018-04-04 15:27 ` [tarantool-patches] " n.pettik
  0 siblings, 2 replies; 6+ messages in thread
From: Gleb @ 2018-04-03 11:42 UTC (permalink / raw)
  To: tarantool-patches

Remove support partial indexes.
Add test which check inaccessibility of partial index syntax.
Comment tests which use partial index.
They can be enabled after #2626.

Fixes #2165
---
Issue from https://github.com/tarantool/tarantool/issues/2165.
Source from https://github.com/tarantool/tarantool/tree/gh-2165-remove-support-partial-indexes.
 src/box/sql/parse.c                                | 918 +++++++++++----------
 src/box/sql/parse.y                                |   4 +-
 test/sql-tap/analyze9.test.lua                     | 146 ++--
 test/sql-tap/autoindex4.test.lua                   |  35 +-
 test/sql-tap/fkey1.test.lua                        |  64 +-
 ...gh-2165-remove-support-partial-indexes.test.lua |  17 +
 test/sql-tap/index7.test.lua                       |  80 +-
 test/sql-tap/suite.ini                             |   1 +
 8 files changed, 643 insertions(+), 622 deletions(-)
 create mode 100755 test/sql-tap/gh-2165-remove-support-partial-indexes.test.lua

diff --git a/src/box/sql/parse.c b/src/box/sql/parse.c
index 0019b77..8af15f1 100644
--- a/src/box/sql/parse.c
+++ b/src/box/sql/parse.c
@@ -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 YYNSTATE             411
 #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 YY_MAX_SHIFT         410
+#define YY_MIN_SHIFTREDUCE   607
+#define YY_MAX_SHIFTREDUCE   906
+#define YY_MIN_REDUCE        907
+#define YY_MAX_REDUCE        1206
+#define YY_ERROR_ACTION      1207
+#define YY_ACCEPT_ACTION     1208
+#define YY_NO_ACTION         1209
 /************* End control #defines *******************************************/
 
 /* Define the yytestcase() macro to be a no-op if is not already defined
@@ -396,149 +396,151 @@ typedef union {
 **  yy_default[]       Default action for each state.
 **
 *********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (1406)
+#define YY_ACTTAB_COUNT (1430)
 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,  286,   82,  774,  774,  786,  789,  778,  778,
+ /*    10 */    89,   89,   90,   90,   90,   90,  308,   88,   88,   88,
+ /*    20 */    88,   87,   87,   86,   86,   86,   85,  308,   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,  308,  210,  122,  891,   90,   90,   90,
+ /*    50 */    90,  633,   88,   88,   88,   88,   87,   87,   86,   86,
+ /*    60 */    86,   85,  308,   87,   87,   86,   86,   86,   85,  308,
+ /*    70 */   891,   86,   86,   86,   85,  308,   91,   92,  286,   82,
+ /*    80 */   774,  774,  786,  789,  778,  778,   89,   89,   90,   90,
+ /*    90 */    90,   90,  636,   88,   88,   88,   88,   87,   87,   86,
+ /*   100 */    86,   86,   85,  308,   91,   92,  286,   82,  774,  774,
+ /*   110 */   786,  789,  778,  778,   89,   89,   90,   90,   90,   90,
+ /*   120 */   723,   88,   88,   88,   88,   87,   87,   86,   86,   86,
+ /*   130 */    85,  308,  635,   91,   92,  286,   82,  774,  774,  786,
+ /*   140 */   789,  778,  778,   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 */   308,  775,  775,  787,  790,  319,   93,   84,   81,  176,
+ /*   170 */   306,  305, 1208,  410,    3,  722,  244,  608,  311,  724,
+ /*   180 */   725,  375,   91,   92,  286,   82,  774,  774,  786,  789,
+ /*   190 */   778,  778,   89,   89,   90,   90,   90,   90,  883,   88,
+ /*   200 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  308,
  /*   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,
+ /*   220 */   308,  122,   84,   81,  176,  641,  376, 1159, 1159,  827,
+ /*   230 */   779,   91,   92,  286,   82,  774,  774,  786,  789,  778,
+ /*   240 */   778,   89,   89,   90,   90,   90,   90,  363,   88,   88,
+ /*   250 */    88,   88,   87,   87,   86,   86,   86,   85,  308,  902,
+ /*   260 */   746,  902,  122,  409,  409,  172,  652,  709,  764,  220,
+ /*   270 */   757,  119,  876,  752,  634,  682,  238,  332,  237,  651,
+ /*   280 */    91,   92,  286,   82,  774,  774,  786,  789,  778,  778,
+ /*   290 */    89,   89,   90,   90,   90,   90,  876,   88,   88,   88,
+ /*   300 */    88,   87,   87,   86,   86,   86,   85,  308,   22,  746,
+ /*   310 */   756,  756,  758,  201,  692,  650,  358,  355,  354,  691,
+ /*   320 */   165,  709,  702,  765,  122,  238,  332,  237,  353,   91,
+ /*   330 */    92,  286,   82,  774,  774,  786,  789,  778,  778,   89,
+ /*   340 */    89,   90,   90,   90,   90,  746,   88,   88,   88,   88,
+ /*   350 */    87,   87,   86,   86,   86,   85,  308,  695,   84,   81,
+ /*   360 */   176,  238,  322,  226,  404,  404,  404,  669,  648,   84,
+ /*   370 */    81,  176,  751,  122,  218,  368,  669,  339,   91,   92,
+ /*   380 */   286,   82,  774,  774,  786,  789,  778,  778,   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,
+ /*   400 */    87,   86,   86,   86,   85,  308,   91,   92,  286,   82,
+ /*   410 */   774,  774,  786,  789,  778,  778,   89,   89,   90,   90,
+ /*   420 */    90,   90,  340,   88,   88,   88,   88,   87,   87,   86,
+ /*   430 */    86,   86,   85,  308,   91,   92,  286,   82,  774,  774,
+ /*   440 */   786,  789,  778,  778,   89,   89,   90,   90,   90,   90,
+ /*   450 */   378,   88,   88,   88,   88,   87,   87,   86,   86,   86,
+ /*   460 */    85,  308,   91,   92,  286,   82,  774,  774,  786,  789,
+ /*   470 */   778,  778,   89,   89,   90,   90,   90,   90,  145,   88,
+ /*   480 */    88,   88,   88,   87,   87,   86,   86,   86,   85,  308,
+ /*   490 */   307,  307,  307,   85,  308,   70,   92,  286,   82,  774,
+ /*   500 */   774,  786,  789,  778,  778,   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,
+ /*   520 */    86,   85,  308,   73,  627,  627,  833,  833,  327,   91,
+ /*   530 */    80,  286,   82,  774,  774,  786,  789,  778,  778,   89,
+ /*   540 */    89,   90,   90,   90,   90,  389,   88,   88,   88,   88,
+ /*   550 */    87,   87,   86,   86,   86,   85,  308,  286,   82,  774,
+ /*   560 */   774,  786,  789,  778,  778,   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,  308,  218,  368,  697,  141,  373,  300,  141,
+ /*   590 */    75,   76,  274,  627,  627,  282,  281,   77,  285,  279,
+ /*   600 */   278,  277,  222,  275,  849,   78,  621,  143,  627,  627,
+ /*   610 */   402,    2, 1103,  297,  317,  309,  309,  202,  850,  202,
+ /*   620 */   109,  341,  879,  406,   75,   76,  851,  675,  317,  316,
+ /*   630 */   643,   77,  391,  182,  676,  162,  174,  764,  335,  757,
+ /*   640 */    48,   48,  752,  346,  402,    2,  343,  406,  137,  309,
+ /*   650 */   309,  406,  627,  627,  287,  385,  265,  219,  155,  254,
+ /*   660 */   361,  249,  360,  205,   48,   48,  391,  754,   48,   48,
+ /*   670 */   247,  764,  708,  757,  406,  301,  752,  674,  674,  756,
+ /*   680 */   756,  758,  759,  405,   18,  672,  672,  184,  109,  846,
+ /*   690 */   317,   48,   48,  180,  314,  122,  335,  122,  750,  384,
+ /*   700 */   386,  754,  185,  384,  369,  190,  372,  306,  305,   78,
+ /*   710 */   313,  627,  627,  756,  756,  758,  759,  405,   18,  210,
+ /*   720 */   406,  891,  109,    9,    9,  330,  384,  374,   75,   76,
+ /*   730 */   696,  122,  627,  627,  167,   77,  201,   48,   48,  358,
+ /*   740 */   355,  354,  400,   78,  684,  891,  333,  266,  402,    2,
+ /*   750 */    20,  353,  265,  309,  309,  371,  897,  743,  901,   23,
+ /*   760 */   191,  326,   75,   76,  331,  899,  341,  900,  406,   77,
+ /*   770 */   391,  266,  384,  383,  217,  764,  406,  757,  849,  295,
+ /*   780 */   752,   19,  402,    2,   54,   10,   10,  309,  309,  406,
+ /*   790 */   109,  337,  850,   48,   48,  406,  902,  365,  902,  294,
+ /*   800 */   851,  390,  708,  304,  391,  754,   30,   30,  830,  764,
+ /*   810 */   829,  757,   10,   10,  752,  406,  325,  756,  756,  758,
+ /*   820 */   759,  405,   18,  177,  177,  406,  296,  406,  384,  364,
+ /*   830 */   109,  406,   10,   10,  708,  371,  157,  156,  396,  754,
+ /*   840 */   225,  366,   48,   48,   10,   10,  200,   68,   47,   47,
+ /*   850 */   236,  756,  756,  758,  759,  405,   18,   95,  381,  231,
+ /*   860 */   318,  637,  637,  846,  242,  655,   75,   76,  350,  755,
+ /*   870 */   203,  359,  186,   77,  819,  821,  656,  379,  177,  177,
+ /*   880 */   892,  892,  146,  764,  708,  757,  402,    2,  752,  203,
+ /*   890 */   371,  309,  309,    5,  298,  210,  109,  891,  256,  892,
+ /*   900 */   892,  809,  264,  708,  320,   74,  406,   72,  391,  230,
+ /*   910 */   826,  406,  826,  764,  241,  757,  708,  406,  752,  253,
+ /*   920 */   333,  891,  187,   34,   34,  756,  756,  758,   35,   35,
+ /*   930 */   252,  406,  893,  711,   36,   36,  819,  110,  342,  149,
+ /*   940 */   229,  852,  228,  754,  406,  288,  708,  234,   37,   37,
+ /*   950 */   247,  893,  710,  258,  323,  756,  756,  758,  759,  405,
+ /*   960 */    18,   38,   38,  406,  288,  406,  161,  160,  159,  406,
+ /*   970 */   708,  406,    7,  406,  138,  406,  260,  406,  627,  627,
+ /*   980 */    26,   26,   27,   27,  681,  406,   29,   29,   39,   39,
+ /*   990 */    40,   40,   41,   41,   11,   11,  406,  708,  406,  692,
+ /*  1000 */   406,  163,   42,   42,  691,  406,  341,  406,  677,  406,
+ /*  1010 */   263,  406,  709,   97,   97,   43,   43,   44,   44,  406,
+ /*  1020 */   750,  406,   31,   31,   45,   45,   46,   46,   32,   32,
+ /*  1030 */   406, 1182,  406,  664,  406,  233,  112,  112,  113,  113,
+ /*  1040 */   406,  750,  858,  406,  750,  406,  844,  114,  114,   52,
+ /*  1050 */    52,   33,   33,  406,  857,  406,  680,   98,   98,  406,
+ /*  1060 */    49,   49,   99,   99,  406,  165,  709,  406,  750,  406,
+ /*  1070 */   100,  100,   96,   96,  169,  406,  111,  111,  406,  109,
+ /*  1080 */   406,  108,  108,  291,  104,  104,  103,  103,  406,  109,
+ /*  1090 */   193,  406,  101,  101,  406,  102,  102,   51,   51,  406,
+ /*  1100 */   367,  625,  687,  687,  292,   53,   53,  293,   50,   50,
+ /*  1110 */    24,   25,   25,  661,  627,  627,   28,   28,    1,  393,
+ /*  1120 */   107,  397,  627,  627,  631,  626,  289,  401,  403,  289,
+ /*  1130 */    66,  302,  175,  174,  109,  724,  725,   64,  890,  748,
+ /*  1140 */   334,  208,  208,  336,  808,  208,   66,  351,  631,  214,
+ /*  1150 */   855,  245,  109,   66,  109,  644,  644,  178,  654,  653,
+ /*  1160 */   109,  315,  689,  646,   69,  823,  718,  662,  208,  290,
+ /*  1170 */   816,  816,  812,  825,  214,  825,  629,  738,  106,  321,
+ /*  1180 */   760,  760,  227,  817,  168,  235,  843,  841,  338,  840,
+ /*  1190 */   153,  344,  345,  240,  620,  243,  356,  665,  649,  648,
+ /*  1200 */   158,  251,  248,  716,  749,  262,  392,  698,  814,  267,
+ /*  1210 */   813,  927,  268,  273,  872,  154,  135,  632,  618,  617,
+ /*  1220 */   124,  619,  869,  117,   64,  735,  324,   55,  329,  828,
+ /*  1230 */   126,  349,  232,  189,  196,  144,  128,  129,  197,  147,
+ /*  1240 */   362,  198,  130,  299,  668,  131,  667,  139,  347,  745,
+ /*  1250 */   646,  666,  283,  377,   63,    6,  845,   71,  211,  303,
+ /*  1260 */   640,   94,  284,   65,  659,  639,  382,  250,  380,  638,
+ /*  1270 */   881,   21,  658,  870,  224,  610,  613,  221,  223,  310,
+ /*  1280 */   408,  407,  615,  614,  611,  280,  179,  312,  395,  123,
+ /*  1290 */   181,  822,  399,  820,  183,  744,  115,  125,  120,  127,
+ /*  1300 */   188,  116,  678,  831,  208,  132,  133,  904,  328,  839,
+ /*  1310 */    56,  105,  204,  706,  134,  255,  136,  707,  257,   57,
+ /*  1320 */   705,  704,  269,  259,  261,  688,  270,  271,  272,   58,
+ /*  1330 */    59,  842,  194,  192,  838,  794,  121,   12,    8,  195,
+ /*  1340 */   148,  239,  623,  212,  213,  348,  252,  199,  140,  352,
+ /*  1350 */   246,  357,   60,   13,   14,  206,  686,   61,  118,  763,
+ /*  1360 */   762,  170,  712,  657,  792,   62,   15,  370,  690,    4,
+ /*  1370 */   717,  171,  173,  207,  142,   69,   66,   16,   17,  807,
+ /*  1380 */   793,  796,  791,  848,  607,  847,  388,  166,  394,  862,
+ /*  1390 */   276,  150,  215,  863,  151,  398,  387,  795,  152, 1164,
+ /*  1400 */   761,  630,   79,  909,  624,  909,  909,  909,  909,  909,
+ /*  1410 */   909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+ /*  1420 */   909,  909,  909,  909,  909,  909,  909,  909,  909,  216,
 };
 static const YYCODETYPE yy_lookahead[] = {
  /*     0 */     5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
@@ -665,26 +667,28 @@ static const YYCODETYPE yy_lookahead[] = {
  /*  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,
+ /*  1240 */    84,  148,  180,   63,  162,  180,  162,  177,  165,  177,
+ /*  1250 */    83,  162,  165,  106,   84,   47,  189,  121,  215,   32,
+ /*  1260 */   162,  112,  165,  111,  170,  164,  107,  162,  110,  162,
+ /*  1270 */   162,   50,  170,   40,   35,    4,   36,  144,  144,    3,
+ /*  1280 */   142,  150,  142,  142,  142,  141,   42,   72,  165,   43,
+ /*  1290 */    84,   48,  165,   48,  101,   99,  153,  114,   88,  102,
+ /*  1300 */    84,  153,   46,  127,   50,  127,   84,  130,  129,    1,
+ /*  1310 */    16,  166,  166,  204,  102,  203,  114,  204,  203,   16,
+ /*  1320 */   204,  204,  192,  203,  203,  193,  191,  190,  189,   16,
+ /*  1330 */    16,   52,  101,  105,    1,  213,   88,   47,   34,   84,
+ /*  1340 */    49,  124,   46,  218,  218,    7,   89,   82,   47,   66,
+ /*  1350 */    48,   66,   47,   47,   47,   66,   95,   47,   60,   48,
+ /*  1360 */    48,  101,  104,   54,   48,   50,   47,   50,   48,   47,
+ /*  1370 */    52,   48,   48,  105,   47,   50,   50,  105,  105,   48,
+ /*  1380 */    48,   38,   48,   48,    1,   48,   50,   47,   49,   48,
+ /*  1390 */    42,   47,   50,   48,   47,   49,   75,   48,   47,    0,
+ /*  1400 */    48,   48,   47,  230,   48,  230,  230,  230,  230,  230,
+ /*  1410 */   230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+ /*  1420 */   230,  230,  230,  230,  230,  230,  230,  230,  230,  101,
 };
-#define YY_SHIFT_USE_DFLT (1406)
-#define YY_SHIFT_COUNT    (411)
+#define YY_SHIFT_USE_DFLT (1430)
+#define YY_SHIFT_COUNT    (410)
 #define YY_SHIFT_MIN      (-88)
 #define YY_SHIFT_MAX      (1399)
 static const short yy_shift_ofst[] = {
@@ -699,11 +703,11 @@ static const short yy_shift_ofst[] = {
  /*    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,
+ /*   110 */   542,  -16, 1430, 1430, 1430,  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,
+ /*   150 */   -88,  -88,  -88, 1430, 1430,  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,
@@ -711,28 +715,28 @@ static const short yy_shift_ofst[] = {
  /*   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,
+ /*   230 */  1181, 1181, 1106, 1100, 1186, 1111, 1169, 1218, 1218, 1186,
+ /*   240 */  1188, 1186, 1186, 1188, 1156, 1156, 1156, 1180, 1188, 1156,
+ /*   250 */  1167, 1156, 1180, 1156, 1156, 1147, 1170, 1147, 1170, 1147,
+ /*   260 */  1170, 1147, 1170, 1208, 1136, 1188, 1227, 1227, 1188, 1149,
+ /*   270 */  1159, 1152, 1158, 1111, 1221, 1233, 1233, 1239, 1239, 1239,
+ /*   280 */  1239, 1240, 1430, 1430, 1430, 1430,  152,  816,  881, 1073,
+ /*   290 */   734, 1091, 1092, 1095, 1096, 1099, 1103, 1104, 1081, 1077,
+ /*   300 */   841, 1114, 1118, 1119, 1124,  795, 1058, 1128, 1129, 1110,
+ /*   310 */  1271, 1276, 1244, 1215, 1246, 1206, 1243, 1245, 1193, 1196,
+ /*   320 */  1183, 1210, 1197, 1216, 1256, 1176, 1254, 1178, 1177, 1179,
+ /*   330 */  1222, 1308, 1212, 1202, 1294, 1303, 1313, 1314, 1248, 1279,
+ /*   340 */  1228, 1231, 1333, 1304, 1290, 1255, 1217, 1291, 1296, 1338,
+ /*   350 */  1257, 1265, 1301, 1283, 1305, 1306, 1302, 1307, 1285, 1309,
+ /*   360 */  1310, 1289, 1298, 1311, 1312, 1316, 1315, 1261, 1319, 1320,
+ /*   370 */  1322, 1317, 1260, 1323, 1324, 1318, 1268, 1327, 1258, 1325,
+ /*   380 */  1272, 1326, 1273, 1331, 1325, 1332, 1334, 1335, 1321, 1336,
+ /*   390 */  1337, 1340, 1343, 1341, 1344, 1339, 1342, 1345, 1347, 1346,
+ /*   400 */  1342, 1349, 1351, 1352, 1353, 1355, 1328, 1356, 1348, 1383,
+ /*   410 */  1399,
 };
 #define YY_REDUCE_USE_DFLT (-110)
-#define YY_REDUCE_COUNT (286)
+#define YY_REDUCE_COUNT (285)
 #define YY_REDUCE_MIN   (-109)
 #define YY_REDUCE_MAX   (1148)
 static const short yy_reduce_ofst[] = {
@@ -759,56 +763,56 @@ static const short yy_reduce_ofst[] = {
  /*   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,
+ /*   230 */  1062, 1065, 1004, 1008, 1085, 1067, 1030, 1070, 1072, 1086,
+ /*   240 */  1083, 1090, 1093, 1087, 1082, 1084, 1089, 1094, 1097, 1098,
+ /*   250 */  1101, 1105, 1102, 1107, 1108, 1109, 1112, 1113, 1115, 1116,
+ /*   260 */  1120, 1117, 1121, 1122, 1043, 1123, 1125, 1126, 1127, 1132,
+ /*   270 */  1130, 1135, 1137, 1139, 1131, 1133, 1134, 1138, 1140, 1141,
+ /*   280 */  1142, 1144, 1143, 1145, 1146, 1148,
 };
 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 */  1165, 1159, 1159, 1159, 1103, 1103, 1103, 1103, 1159,  999,
+ /*    10 */  1026, 1026, 1207, 1207, 1207, 1207, 1207, 1207, 1102, 1207,
+ /*    20 */  1207, 1207, 1207, 1159, 1003, 1032, 1207, 1207, 1207, 1104,
+ /*    30 */  1105, 1207, 1207, 1207, 1137, 1042, 1041, 1040, 1039, 1013,
+ /*    40 */  1037, 1030, 1034, 1104, 1098, 1099, 1097, 1101, 1105, 1207,
+ /*    50 */  1033, 1067, 1082, 1066, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*    60 */  1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*    70 */  1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*    80 */  1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*    90 */  1207, 1207, 1207, 1207, 1207, 1207, 1076, 1081, 1088, 1080,
+ /*   100 */  1077, 1069, 1068, 1070, 1071,  970, 1207, 1207, 1072, 1207,
+ /*   110 */  1207, 1073, 1085, 1084, 1083, 1174, 1173, 1207, 1207, 1110,
+ /*   120 */  1207, 1207, 1207, 1207, 1159, 1207, 1207, 1207, 1207, 1207,
+ /*   130 */  1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*   140 */  1207,  928, 1207, 1207, 1207,  928, 1207, 1159, 1159, 1159,
+ /*   150 */  1159, 1159, 1159, 1003,  994, 1207, 1207, 1207, 1207, 1207,
+ /*   160 */  1207, 1207, 1207,  999, 1207, 1207, 1207, 1207, 1132, 1207,
+ /*   170 */  1207,  999,  999,  999, 1207, 1001, 1207,  983,  993, 1207,
+ /*   180 */  1156, 1207, 1153, 1207, 1124, 1036, 1015, 1015, 1207, 1207,
+ /*   190 */  1206, 1036, 1207, 1206, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*   200 */   945, 1207, 1185, 1207,  942, 1207, 1026, 1207, 1207, 1015,
+ /*   210 */  1207, 1100, 1026, 1026, 1207, 1207, 1207, 1000,  993, 1207,
+ /*   220 */  1207, 1207, 1207, 1207, 1168, 1047,  973, 1036,  979,  979,
+ /*   230 */   979,  979, 1136, 1203,  922, 1036, 1047,  973,  973,  922,
+ /*   240 */  1111,  922,  922, 1111,  971,  971,  971,  960, 1111,  971,
+ /*   250 */   945,  971,  960,  971,  971, 1019, 1014, 1019, 1014, 1019,
+ /*   260 */  1014, 1019, 1014, 1106, 1207, 1111, 1115, 1115, 1111, 1031,
+ /*   270 */  1020, 1029, 1027, 1036,  963, 1171, 1171, 1167, 1167, 1167,
+ /*   280 */  1167,  912, 1180,  947,  947, 1180, 1207, 1207, 1207, 1175,
+ /*   290 */  1118, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*   300 */  1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1053,
+ /*   310 */  1207,  909, 1207, 1207, 1207, 1154, 1207, 1207, 1198, 1207,
+ /*   320 */  1207, 1207, 1207, 1207, 1207, 1207, 1135, 1134, 1207, 1207,
+ /*   330 */  1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*   340 */  1207, 1205, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*   350 */  1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ /*   360 */  1207, 1207, 1207, 1207, 1207, 1207, 1207,  985, 1207, 1207,
+ /*   370 */  1207, 1189, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1028,
+ /*   380 */  1207, 1021, 1207, 1207, 1195, 1207, 1207, 1207, 1207, 1207,
+ /*   390 */  1207, 1207, 1207, 1207, 1207, 1207, 1161, 1207, 1207, 1207,
+ /*   400 */  1160, 1207, 1207, 1207, 1207, 1207, 1207, 1207,  916, 1207,
+ /*   410 */  1207,
 };
 /********** End of lemon-generated parsing tables *****************************/
 
@@ -1254,7 +1258,7 @@ static const char *const yyRuleName[] = {
  /* 198 */ "nexprlist ::= expr",
  /* 199 */ "paren_exprlist ::=",
  /* 200 */ "paren_exprlist ::= LP exprlist RP",
- /* 201 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm ON nm LP sortlist RP where_opt",
+ /* 201 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm ON nm LP sortlist RP",
  /* 202 */ "uniqueflag ::= UNIQUE",
  /* 203 */ "uniqueflag ::=",
  /* 204 */ "eidlist_opt ::=",
@@ -1470,7 +1474,7 @@ static void yy_destructor(
 {
 #line 386 "parse.y"
 sqlite3SelectDelete(pParse->db, (yypminor->yy279));
-#line 1474 "parse.c"
+#line 1478 "parse.c"
 }
       break;
     case 160: /* term */
@@ -1478,7 +1482,7 @@ sqlite3SelectDelete(pParse->db, (yypminor->yy279));
 {
 #line 829 "parse.y"
 sqlite3ExprDelete(pParse->db, (yypminor->yy162).pExpr);
-#line 1482 "parse.c"
+#line 1486 "parse.c"
 }
       break;
     case 165: /* eidlist_opt */
@@ -1496,7 +1500,7 @@ sqlite3ExprDelete(pParse->db, (yypminor->yy162).pExpr);
 {
 #line 1261 "parse.y"
 sqlite3ExprListDelete(pParse->db, (yypminor->yy382));
-#line 1500 "parse.c"
+#line 1504 "parse.c"
 }
       break;
     case 181: /* fullname */
@@ -1506,7 +1510,7 @@ sqlite3ExprListDelete(pParse->db, (yypminor->yy382));
 {
 #line 613 "parse.y"
 sqlite3SrcListDelete(pParse->db, (yypminor->yy387));
-#line 1510 "parse.c"
+#line 1514 "parse.c"
 }
       break;
     case 184: /* with */
@@ -1514,7 +1518,7 @@ sqlite3SrcListDelete(pParse->db, (yypminor->yy387));
 {
 #line 1510 "parse.y"
 sqlite3WithDelete(pParse->db, (yypminor->yy151));
-#line 1518 "parse.c"
+#line 1522 "parse.c"
 }
       break;
     case 189: /* where_opt */
@@ -1526,7 +1530,7 @@ sqlite3WithDelete(pParse->db, (yypminor->yy151));
 {
 #line 738 "parse.y"
 sqlite3ExprDelete(pParse->db, (yypminor->yy362));
-#line 1530 "parse.c"
+#line 1534 "parse.c"
 }
       break;
     case 204: /* using_opt */
@@ -1535,7 +1539,7 @@ sqlite3ExprDelete(pParse->db, (yypminor->yy362));
 {
 #line 650 "parse.y"
 sqlite3IdListDelete(pParse->db, (yypminor->yy40));
-#line 1539 "parse.c"
+#line 1543 "parse.c"
 }
       break;
     case 221: /* trigger_cmd_list */
@@ -1543,14 +1547,14 @@ sqlite3IdListDelete(pParse->db, (yypminor->yy40));
 {
 #line 1384 "parse.y"
 sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy427));
-#line 1547 "parse.c"
+#line 1551 "parse.c"
 }
       break;
     case 223: /* trigger_event */
 {
 #line 1370 "parse.y"
 sqlite3IdListDelete(pParse->db, (yypminor->yy10).b);
-#line 1554 "parse.c"
+#line 1558 "parse.c"
 }
       break;
 /********* End destructor definitions *****************************************/
@@ -1725,7 +1729,7 @@ static void yyStackOverflow(yyParser *yypParser){
 #line 41 "parse.y"
 
   sqlite3ErrorMsg(pParse, "parser stack overflow");
-#line 1729 "parse.c"
+#line 1733 "parse.c"
 /******** End %stack_overflow code ********************************************/
    sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */
 }
@@ -2000,7 +2004,7 @@ static const struct {
   { 195, 1 },
   { 213, 0 },
   { 213, 3 },
-  { 140, 11 },
+  { 140, 10 },
   { 217, 1 },
   { 217, 0 },
   { 165, 0 },
@@ -2165,83 +2169,83 @@ static void yy_reduce(
       case 0: /* ecmd ::= explain cmdx SEMI */
 #line 111 "parse.y"
 { sqlite3FinishCoding(pParse); }
-#line 2169 "parse.c"
+#line 2173 "parse.c"
         break;
       case 1: /* ecmd ::= SEMI */
 #line 112 "parse.y"
 {
   sqlite3ErrorMsg(pParse, "syntax error: empty request");
 }
-#line 2176 "parse.c"
+#line 2180 "parse.c"
         break;
       case 2: /* explain ::= EXPLAIN */
 #line 117 "parse.y"
 { pParse->explain = 1; }
-#line 2181 "parse.c"
+#line 2185 "parse.c"
         break;
       case 3: /* explain ::= EXPLAIN QUERY PLAN */
 #line 118 "parse.y"
 { pParse->explain = 2; }
-#line 2186 "parse.c"
+#line 2190 "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 2195 "parse.c"
         break;
       case 5: /* transtype ::= */
 #line 155 "parse.y"
 {yymsp[1].minor.yy52 = TK_DEFERRED;}
-#line 2196 "parse.c"
+#line 2200 "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 2205 "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 2211 "parse.c"
         break;
       case 9: /* cmd ::= ROLLBACK trans_opt */
 #line 159 "parse.y"
 {sqlite3RollbackTransaction(pParse);}
-#line 2212 "parse.c"
+#line 2216 "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 2223 "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 2230 "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 2237 "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 2244 "parse.c"
         break;
       case 14: /* createkw ::= CREATE */
 #line 179 "parse.y"
 {disableLookaside(pParse);}
-#line 2245 "parse.c"
+#line 2249 "parse.c"
         break;
       case 15: /* ifnotexists ::= */
       case 38: /* autoinc ::= */ yytestcase(yyruleno==38);
@@ -2252,19 +2256,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 2260 "parse.c"
         break;
       case 16: /* ifnotexists ::= IF NOT EXISTS */
 #line 183 "parse.y"
 {yymsp[-2].minor.yy52 = 1;}
-#line 2261 "parse.c"
+#line 2265 "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 2272 "parse.c"
         break;
       case 18: /* create_table_args ::= AS select */
 #line 188 "parse.y"
@@ -2272,12 +2276,12 @@ 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 2280 "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 2285 "parse.c"
         break;
       case 20: /* nm ::= ID|INDEXED */
 #line 225 "parse.y"
@@ -2286,50 +2290,50 @@ static void yy_reduce(
     sqlite3ErrorMsg(pParse, "keyword \"%T\" is reserved", &yymsp[0].minor.yy0);
   }
 }
-#line 2290 "parse.c"
+#line 2294 "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 2301 "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 2308 "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 2315 "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 2320 "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 2326 "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"
+#line 2332 "parse.c"
         break;
       case 27: /* ccons ::= DEFAULT LP expr RP */
 #line 257 "parse.y"
 {sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy162);}
-#line 2333 "parse.c"
+#line 2337 "parse.c"
         break;
       case 29: /* ccons ::= DEFAULT MINUS term */
 #line 259 "parse.y"
@@ -2340,7 +2344,7 @@ static void yy_reduce(
   v.zEnd = yymsp[0].minor.yy162.zEnd;
   sqlite3AddDefaultValue(pParse,&v);
 }
-#line 2344 "parse.c"
+#line 2348 "parse.c"
         break;
       case 30: /* ccons ::= DEFAULT ID|INDEXED */
 #line 266 "parse.y"
@@ -2349,115 +2353,115 @@ static void yy_reduce(
   spanExpr(&v, pParse, TK_STRING, yymsp[0].minor.yy0);
   sqlite3AddDefaultValue(pParse,&v);
 }
-#line 2353 "parse.c"
+#line 2357 "parse.c"
         break;
       case 31: /* ccons ::= NOT NULL onconf */
 #line 276 "parse.y"
 {sqlite3AddNotNull(pParse, yymsp[0].minor.yy52);}
-#line 2358 "parse.c"
+#line 2362 "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"
+#line 2367 "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,
                                    SQLITE_IDXTYPE_UNIQUE);}
-#line 2369 "parse.c"
+#line 2373 "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"
+#line 2378 "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"
+#line 2383 "parse.c"
         break;
       case 36: /* ccons ::= defer_subclause */
 #line 284 "parse.y"
 {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy52);}
-#line 2384 "parse.c"
+#line 2388 "parse.c"
         break;
       case 37: /* ccons ::= COLLATE ID|INDEXED */
 #line 285 "parse.y"
 {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
-#line 2389 "parse.c"
+#line 2393 "parse.c"
         break;
       case 39: /* autoinc ::= AUTOINCR */
 #line 290 "parse.y"
 {yymsp[0].minor.yy52 = 1;}
-#line 2394 "parse.c"
+#line 2398 "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"
+#line 2403 "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"
+#line 2408 "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"
+#line 2413 "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"
+#line 2418 "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"
+#line 2423 "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"
+#line 2428 "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"
+#line 2433 "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"
+#line 2438 "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"
+#line 2443 "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"
+#line 2448 "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"
+#line 2453 "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"
+#line 2458 "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"
+#line 2465 "parse.c"
         break;
       case 54: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
       case 71: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==71);
@@ -2466,33 +2470,33 @@ static void yy_reduce(
       case 209: /* collate ::= COLLATE ID|INDEXED */ yytestcase(yyruleno==209);
 #line 316 "parse.y"
 {yymsp[-1].minor.yy52 = 1;}
-#line 2470 "parse.c"
+#line 2474 "parse.c"
         break;
       case 55: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
 #line 317 "parse.y"
 {yymsp[-1].minor.yy52 = 0;}
-#line 2475 "parse.c"
+#line 2479 "parse.c"
         break;
       case 57: /* tconscomma ::= COMMA */
 #line 323 "parse.y"
 {pParse->constraintName.n = 0;}
-#line 2480 "parse.c"
+#line 2484 "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"
+#line 2489 "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,
                                        SQLITE_IDXTYPE_UNIQUE);}
-#line 2491 "parse.c"
+#line 2495 "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"
+#line 2500 "parse.c"
         break;
       case 62: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
 #line 334 "parse.y"
@@ -2500,50 +2504,50 @@ static void yy_reduce(
     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 2508 "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"
+#line 2514 "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"
+#line 2519 "parse.c"
         break;
       case 68: /* resolvetype ::= IGNORE */
 #line 353 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_IGNORE;}
-#line 2520 "parse.c"
+#line 2524 "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"
+#line 2530 "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);
 }
-#line 2533 "parse.c"
+#line 2537 "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);
 }
-#line 2540 "parse.c"
+#line 2544 "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);
 }
-#line 2547 "parse.c"
+#line 2551 "parse.c"
         break;
       case 75: /* cmd ::= select */
 #line 379 "parse.y"
@@ -2552,7 +2556,7 @@ static void yy_reduce(
   sqlite3Select(pParse, yymsp[0].minor.yy279, &dest);
   sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy279);
 }
-#line 2556 "parse.c"
+#line 2560 "parse.c"
         break;
       case 76: /* select ::= with selectnowith */
 #line 416 "parse.y"
@@ -2566,7 +2570,7 @@ static void yy_reduce(
   }
   yymsp[-1].minor.yy279 = p; /*A-overwrites-W*/
 }
-#line 2570 "parse.c"
+#line 2574 "parse.c"
         break;
       case 77: /* selectnowith ::= selectnowith multiselect_op oneselect */
 #line 429 "parse.y"
@@ -2592,18 +2596,18 @@ static void yy_reduce(
   }
   yymsp[-2].minor.yy279 = pRhs;
 }
-#line 2596 "parse.c"
+#line 2600 "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"
+#line 2606 "parse.c"
         break;
       case 79: /* multiselect_op ::= UNION ALL */
 #line 453 "parse.y"
 {yymsp[-1].minor.yy52 = TK_ALL;}
-#line 2607 "parse.c"
+#line 2611 "parse.c"
         break;
       case 81: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
 #line 457 "parse.y"
@@ -2637,14 +2641,14 @@ static void yy_reduce(
   }
 #endif /* SELECTRACE_ENABLED */
 }
-#line 2641 "parse.c"
+#line 2645 "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);
 }
-#line 2648 "parse.c"
+#line 2652 "parse.c"
         break;
       case 83: /* values ::= values COMMA LP exprlist RP */
 #line 494 "parse.y"
@@ -2660,17 +2664,17 @@ static void yy_reduce(
     yymsp[-4].minor.yy279 = pLeft;
   }
 }
-#line 2664 "parse.c"
+#line 2668 "parse.c"
         break;
       case 84: /* distinct ::= DISTINCT */
 #line 511 "parse.y"
 {yymsp[0].minor.yy52 = SF_Distinct;}
-#line 2669 "parse.c"
+#line 2673 "parse.c"
         break;
       case 85: /* distinct ::= ALL */
 #line 512 "parse.y"
 {yymsp[0].minor.yy52 = SF_All;}
-#line 2674 "parse.c"
+#line 2678 "parse.c"
         break;
       case 87: /* sclp ::= */
       case 113: /* orderby_opt ::= */ yytestcase(yyruleno==113);
@@ -2680,7 +2684,7 @@ static void yy_reduce(
       case 204: /* eidlist_opt ::= */ yytestcase(yyruleno==204);
 #line 525 "parse.y"
 {yymsp[1].minor.yy382 = 0;}
-#line 2684 "parse.c"
+#line 2688 "parse.c"
         break;
       case 88: /* selcollist ::= sclp expr as */
 #line 526 "parse.y"
@@ -2689,7 +2693,7 @@ static void yy_reduce(
    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 2697 "parse.c"
         break;
       case 89: /* selcollist ::= sclp STAR */
 #line 531 "parse.y"
@@ -2697,7 +2701,7 @@ static void yy_reduce(
   Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
   yymsp[-1].minor.yy382 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy382, p);
 }
-#line 2701 "parse.c"
+#line 2705 "parse.c"
         break;
       case 90: /* selcollist ::= sclp nm DOT STAR */
 #line 535 "parse.y"
@@ -2707,19 +2711,19 @@ static void yy_reduce(
   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
   yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382, pDot);
 }
-#line 2711 "parse.c"
+#line 2715 "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 2722 "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"
+#line 2727 "parse.c"
         break;
       case 94: /* from ::= FROM seltablist */
 #line 561 "parse.y"
@@ -2727,19 +2731,19 @@ static void yy_reduce(
   yymsp[-1].minor.yy387 = yymsp[0].minor.yy387;
   sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy387);
 }
-#line 2731 "parse.c"
+#line 2735 "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;
 }
-#line 2738 "parse.c"
+#line 2742 "parse.c"
         break;
       case 96: /* stl_prefix ::= */
 #line 572 "parse.y"
 {yymsp[1].minor.yy387 = 0;}
-#line 2743 "parse.c"
+#line 2747 "parse.c"
         break;
       case 97: /* seltablist ::= stl_prefix nm as indexed_opt on_opt using_opt */
 #line 574 "parse.y"
@@ -2747,7 +2751,7 @@ static void yy_reduce(
   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 2755 "parse.c"
         break;
       case 98: /* seltablist ::= stl_prefix nm LP exprlist RP as on_opt using_opt */
 #line 579 "parse.y"
@@ -2755,14 +2759,14 @@ static void yy_reduce(
   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 2763 "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);
   }
-#line 2766 "parse.c"
+#line 2770 "parse.c"
         break;
       case 100: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
 #line 589 "parse.y"
@@ -2787,32 +2791,32 @@ 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 2795 "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"
+#line 2800 "parse.c"
         break;
       case 102: /* joinop ::= COMMA|JOIN */
 #line 621 "parse.y"
 { yymsp[0].minor.yy52 = JT_INNER; }
-#line 2801 "parse.c"
+#line 2805 "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"
+#line 2810 "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"
+#line 2815 "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"
+#line 2820 "parse.c"
         break;
       case 106: /* on_opt ::= ON expr */
       case 123: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==123);
@@ -2820,7 +2824,7 @@ static void yy_reduce(
       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"
+#line 2828 "parse.c"
         break;
       case 107: /* on_opt ::= */
       case 122: /* having_opt ::= */ yytestcase(yyruleno==122);
@@ -2829,39 +2833,39 @@ static void yy_reduce(
       case 195: /* case_operand ::= */ yytestcase(yyruleno==195);
 #line 632 "parse.y"
 {yymsp[1].minor.yy362 = 0;}
-#line 2833 "parse.c"
+#line 2837 "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 2842 "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 2847 "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 2852 "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"
+#line 2857 "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"
+#line 2863 "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"
+#line 2869 "parse.c"
         break;
       case 115: /* sortlist ::= sortlist COMMA expr sortorder */
 #line 667 "parse.y"
@@ -2869,7 +2873,7 @@ static void yy_reduce(
   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 2877 "parse.c"
         break;
       case 116: /* sortlist ::= expr sortorder */
 #line 671 "parse.y"
@@ -2877,42 +2881,42 @@ static void yy_reduce(
   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 2885 "parse.c"
         break;
       case 117: /* sortorder ::= ASC */
 #line 678 "parse.y"
 {yymsp[0].minor.yy52 = SQLITE_SO_ASC;}
-#line 2886 "parse.c"
+#line 2890 "parse.c"
         break;
       case 118: /* sortorder ::= DESC */
 #line 679 "parse.y"
 {yymsp[0].minor.yy52 = SQLITE_SO_DESC;}
-#line 2891 "parse.c"
+#line 2895 "parse.c"
         break;
       case 119: /* sortorder ::= */
 #line 680 "parse.y"
 {yymsp[1].minor.yy52 = SQLITE_SO_UNDEFINED;}
-#line 2896 "parse.c"
+#line 2900 "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"
+#line 2905 "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"
+#line 2910 "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"
+#line 2915 "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"
+#line 2920 "parse.c"
         break;
       case 128: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */
 #line 727 "parse.y"
@@ -2924,7 +2928,7 @@ static void yy_reduce(
   pParse->initiateTTrans = true;
   sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy387,yymsp[0].minor.yy362);
 }
-#line 2928 "parse.c"
+#line 2932 "parse.c"
         break;
       case 131: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */
 #line 760 "parse.y"
@@ -2937,7 +2941,7 @@ 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 2945 "parse.c"
         break;
       case 132: /* setlist ::= setlist COMMA nm EQ expr */
 #line 774 "parse.y"
@@ -2945,14 +2949,14 @@ static void yy_reduce(
   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 2953 "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);
 }
-#line 2956 "parse.c"
+#line 2960 "parse.c"
         break;
       case 134: /* setlist ::= nm EQ expr */
 #line 781 "parse.y"
@@ -2960,7 +2964,7 @@ static void yy_reduce(
   yylhsminor.yy382 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy162.pExpr);
   sqlite3ExprListSetName(pParse, yylhsminor.yy382, &yymsp[-2].minor.yy0, 1);
 }
-#line 2964 "parse.c"
+#line 2968 "parse.c"
   yymsp[-2].minor.yy382 = yylhsminor.yy382;
         break;
       case 135: /* setlist ::= LP idlist RP EQ expr */
@@ -2968,7 +2972,7 @@ static void yy_reduce(
 {
   yymsp[-4].minor.yy382 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy40, yymsp[0].minor.yy162.pExpr);
 }
-#line 2972 "parse.c"
+#line 2976 "parse.c"
         break;
       case 136: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */
 #line 791 "parse.y"
@@ -2979,7 +2983,7 @@ 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 2987 "parse.c"
         break;
       case 137: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */
 #line 799 "parse.y"
@@ -2990,40 +2994,40 @@ 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 2998 "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"
+#line 3003 "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"
+#line 3008 "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"
+#line 3013 "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"
+#line 3018 "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"
+#line 3025 "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"
+#line 3031 "parse.c"
         break;
       case 148: /* expr ::= nm DOT nm */
 #line 874 "parse.y"
@@ -3033,7 +3037,7 @@ static void yy_reduce(
   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 3041 "parse.c"
         break;
       case 151: /* term ::= INTEGER */
 #line 882 "parse.y"
@@ -3043,7 +3047,7 @@ static void yy_reduce(
   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 3051 "parse.c"
   yymsp[0].minor.yy162 = yylhsminor.yy162;
         break;
       case 152: /* expr ::= VARIABLE */
@@ -3069,7 +3073,7 @@ static void yy_reduce(
     }
   }
 }
-#line 3073 "parse.c"
+#line 3077 "parse.c"
         break;
       case 153: /* expr ::= expr COLLATE ID|INDEXED */
 #line 909 "parse.y"
@@ -3077,7 +3081,7 @@ static void yy_reduce(
   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 3085 "parse.c"
         break;
       case 154: /* expr ::= CAST LP expr AS typetoken RP */
 #line 914 "parse.y"
@@ -3086,7 +3090,7 @@ static void yy_reduce(
   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 3094 "parse.c"
         break;
       case 155: /* expr ::= ID|INDEXED LP distinct exprlist RP */
 #line 920 "parse.y"
@@ -3100,7 +3104,7 @@ static void yy_reduce(
     yylhsminor.yy162.pExpr->flags |= EP_Distinct;
   }
 }
-#line 3104 "parse.c"
+#line 3108 "parse.c"
   yymsp[-4].minor.yy162 = yylhsminor.yy162;
         break;
       case 156: /* expr ::= ID|INDEXED LP STAR RP */
@@ -3109,7 +3113,7 @@ static void yy_reduce(
   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 3117 "parse.c"
   yymsp[-3].minor.yy162 = yylhsminor.yy162;
         break;
       case 157: /* term ::= CTIME_KW */
@@ -3118,7 +3122,7 @@ static void yy_reduce(
   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 3126 "parse.c"
   yymsp[0].minor.yy162 = yylhsminor.yy162;
         break;
       case 158: /* expr ::= LP nexprlist COMMA expr RP */
@@ -3133,7 +3137,7 @@ static void yy_reduce(
     sqlite3ExprListDelete(pParse->db, pList);
   }
 }
-#line 3137 "parse.c"
+#line 3141 "parse.c"
   yymsp[-4].minor.yy162 = yylhsminor.yy162;
         break;
       case 159: /* expr ::= expr AND expr */
@@ -3146,17 +3150,17 @@ static void yy_reduce(
       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"
+#line 3154 "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 3159 "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 3164 "parse.c"
         break;
       case 169: /* expr ::= expr likeop expr */
 #line 989 "parse.y"
@@ -3171,7 +3175,7 @@ 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 3179 "parse.c"
         break;
       case 170: /* expr ::= expr likeop expr ESCAPE expr */
 #line 1000 "parse.y"
@@ -3187,17 +3191,17 @@ 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 3195 "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"
+#line 3200 "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"
+#line 3205 "parse.c"
         break;
       case 173: /* expr ::= expr IS expr */
 #line 1049 "parse.y"
@@ -3205,7 +3209,7 @@ static void yy_reduce(
   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 3213 "parse.c"
         break;
       case 174: /* expr ::= expr IS NOT expr */
 #line 1053 "parse.y"
@@ -3213,29 +3217,29 @@ static void yy_reduce(
   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 3221 "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"
+#line 3227 "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"
+#line 3232 "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"
+#line 3237 "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"
+#line 3243 "parse.c"
         break;
       case 181: /* expr ::= expr between_op expr AND expr */
 #line 1088 "parse.y"
@@ -3251,7 +3255,7 @@ 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 3259 "parse.c"
         break;
       case 184: /* expr ::= expr in_op LP exprlist RP */
 #line 1104 "parse.y"
@@ -3306,7 +3310,7 @@ static void yy_reduce(
     }
     yymsp[-4].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
   }
-#line 3310 "parse.c"
+#line 3314 "parse.c"
         break;
       case 185: /* expr ::= LP select RP */
 #line 1155 "parse.y"
@@ -3315,7 +3319,7 @@ static void yy_reduce(
     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 3323 "parse.c"
         break;
       case 186: /* expr ::= expr in_op LP select RP */
 #line 1160 "parse.y"
@@ -3325,7 +3329,7 @@ static void yy_reduce(
     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 3333 "parse.c"
         break;
       case 187: /* expr ::= expr in_op nm paren_exprlist */
 #line 1166 "parse.y"
@@ -3338,7 +3342,7 @@ 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 3346 "parse.c"
         break;
       case 188: /* expr ::= EXISTS LP select RP */
 #line 1175 "parse.y"
@@ -3348,7 +3352,7 @@ static void yy_reduce(
     p = yymsp[-3].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
     sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy279);
   }
-#line 3352 "parse.c"
+#line 3356 "parse.c"
         break;
       case 189: /* expr ::= CASE case_operand case_exprlist case_else END */
 #line 1184 "parse.y"
@@ -3363,7 +3367,7 @@ static void yy_reduce(
     sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy362);
   }
 }
-#line 3367 "parse.c"
+#line 3371 "parse.c"
         break;
       case 190: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
 #line 1197 "parse.y"
@@ -3371,7 +3375,7 @@ static void yy_reduce(
   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 3379 "parse.c"
         break;
       case 191: /* case_exprlist ::= WHEN expr THEN expr */
 #line 1201 "parse.y"
@@ -3379,118 +3383,118 @@ static void yy_reduce(
   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 3387 "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"
+#line 3392 "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"
+#line 3397 "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"
+#line 3402 "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"
+#line 3408 "parse.c"
         break;
-      case 201: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm ON nm LP sortlist RP where_opt */
+      case 201: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm ON nm LP sortlist RP */
 #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);
+  sqlite3CreateIndex(pParse, &yymsp[-5].minor.yy0, 
+                     sqlite3SrcListAppend(pParse->db,0,&yymsp[-3].minor.yy0), yymsp[-1].minor.yy382, yymsp[-8].minor.yy52,
+                      &yymsp[-9].minor.yy0, 0, SQLITE_SO_ASC, yymsp[-6].minor.yy52, SQLITE_IDXTYPE_APPDEF);
 }
-#line 3413 "parse.c"
+#line 3417 "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"
+#line 3423 "parse.c"
         break;
       case 203: /* uniqueflag ::= */
 #line 1247 "parse.y"
 {yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_NONE;}
-#line 3424 "parse.c"
+#line 3428 "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);
 }
-#line 3431 "parse.c"
+#line 3435 "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*/
 }
-#line 3438 "parse.c"
+#line 3442 "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);
 }
-#line 3445 "parse.c"
+#line 3449 "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 3456 "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 3463 "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 3470 "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 3477 "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 3484 "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 3491 "parse.c"
         break;
       case 217: /* cmd ::= PRAGMA */
 #line 1329 "parse.y"
 {
     sqlite3Pragma(pParse, 0,0,0,0,0);
 }
-#line 3494 "parse.c"
+#line 3498 "parse.c"
         break;
       case 220: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
 #line 1349 "parse.y"
@@ -3500,7 +3504,7 @@ static void yy_reduce(
   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 3508 "parse.c"
         break;
       case 221: /* trigger_decl ::= TRIGGER ifnotexists nm trigger_time trigger_event ON fullname foreach_clause when_clause */
 #line 1358 "parse.y"
@@ -3508,48 +3512,48 @@ static void yy_reduce(
   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 3516 "parse.c"
         break;
       case 222: /* trigger_time ::= BEFORE */
 #line 1364 "parse.y"
 { yymsp[0].minor.yy52 = TK_BEFORE; }
-#line 3517 "parse.c"
+#line 3521 "parse.c"
         break;
       case 223: /* trigger_time ::= AFTER */
 #line 1365 "parse.y"
 { yymsp[0].minor.yy52 = TK_AFTER;  }
-#line 3522 "parse.c"
+#line 3526 "parse.c"
         break;
       case 224: /* trigger_time ::= INSTEAD OF */
 #line 1366 "parse.y"
 { yymsp[-1].minor.yy52 = TK_INSTEAD;}
-#line 3527 "parse.c"
+#line 3531 "parse.c"
         break;
       case 225: /* trigger_time ::= */
 #line 1367 "parse.y"
 { yymsp[1].minor.yy52 = TK_BEFORE; }
-#line 3532 "parse.c"
+#line 3536 "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"
+#line 3542 "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"
+#line 3547 "parse.c"
         break;
       case 229: /* when_clause ::= */
 #line 1380 "parse.y"
 { yymsp[1].minor.yy362 = 0; }
-#line 3548 "parse.c"
+#line 3552 "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"
+#line 3557 "parse.c"
         break;
       case 231: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
 #line 1385 "parse.y"
@@ -3558,7 +3562,7 @@ static void yy_reduce(
   yymsp[-2].minor.yy427->pLast->pNext = yymsp[-1].minor.yy427;
   yymsp[-2].minor.yy427->pLast = yymsp[-1].minor.yy427;
 }
-#line 3562 "parse.c"
+#line 3566 "parse.c"
         break;
       case 232: /* trigger_cmd_list ::= trigger_cmd SEMI */
 #line 1390 "parse.y"
@@ -3566,7 +3570,7 @@ static void yy_reduce(
   assert( yymsp[-1].minor.yy427!=0 );
   yymsp[-1].minor.yy427->pLast = yymsp[-1].minor.yy427;
 }
-#line 3570 "parse.c"
+#line 3574 "parse.c"
         break;
       case 233: /* trnm ::= nm DOT nm */
 #line 1401 "parse.y"
@@ -3576,7 +3580,7 @@ static void yy_reduce(
         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
         "statements within triggers");
 }
-#line 3580 "parse.c"
+#line 3584 "parse.c"
         break;
       case 234: /* tridxby ::= INDEXED BY nm */
 #line 1413 "parse.y"
@@ -3585,7 +3589,7 @@ static void yy_reduce(
         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
         "within triggers");
 }
-#line 3589 "parse.c"
+#line 3593 "parse.c"
         break;
       case 235: /* tridxby ::= NOT INDEXED */
 #line 1418 "parse.y"
@@ -3594,27 +3598,27 @@ static void yy_reduce(
         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
         "within triggers");
 }
-#line 3598 "parse.c"
+#line 3602 "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"
+#line 3607 "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"
+#line 3612 "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"
+#line 3617 "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"
+#line 3622 "parse.c"
         break;
       case 240: /* expr ::= RAISE LP IGNORE RP */
 #line 1446 "parse.y"
@@ -3625,7 +3629,7 @@ static void yy_reduce(
     yymsp[-3].minor.yy162.pExpr->affinity = ON_CONFLICT_ACTION_IGNORE;
   }
 }
-#line 3629 "parse.c"
+#line 3633 "parse.c"
         break;
       case 241: /* expr ::= RAISE LP raisetype COMMA STRING RP */
 #line 1453 "parse.y"
@@ -3636,85 +3640,85 @@ static void yy_reduce(
     yymsp[-5].minor.yy162.pExpr->affinity = (char)yymsp[-3].minor.yy52;
   }
 }
-#line 3640 "parse.c"
+#line 3644 "parse.c"
         break;
       case 242: /* raisetype ::= ROLLBACK */
 #line 1463 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_ROLLBACK;}
-#line 3645 "parse.c"
+#line 3649 "parse.c"
         break;
       case 244: /* raisetype ::= FAIL */
 #line 1465 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_FAIL;}
-#line 3650 "parse.c"
+#line 3654 "parse.c"
         break;
       case 245: /* cmd ::= DROP TRIGGER ifexists fullname */
 #line 1470 "parse.y"
 {
   sqlite3DropTrigger(pParse,yymsp[0].minor.yy387,yymsp[-1].minor.yy52);
 }
-#line 3657 "parse.c"
+#line 3661 "parse.c"
         break;
       case 246: /* cmd ::= REINDEX */
 #line 1477 "parse.y"
 {sqlite3Reindex(pParse, 0, 0);}
-#line 3662 "parse.c"
+#line 3666 "parse.c"
         break;
       case 247: /* cmd ::= REINDEX nm */
 #line 1478 "parse.y"
 {sqlite3Reindex(pParse, &yymsp[0].minor.yy0, 0);}
-#line 3667 "parse.c"
+#line 3671 "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 3676 "parse.c"
         break;
       case 249: /* cmd ::= ANALYZE */
 #line 1484 "parse.y"
 {sqlite3Analyze(pParse, 0);}
-#line 3677 "parse.c"
+#line 3681 "parse.c"
         break;
       case 250: /* cmd ::= ANALYZE nm */
 #line 1485 "parse.y"
 {sqlite3Analyze(pParse, &yymsp[0].minor.yy0);}
-#line 3682 "parse.c"
+#line 3686 "parse.c"
         break;
       case 251: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
 #line 1490 "parse.y"
 {
   sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy387,&yymsp[0].minor.yy0);
 }
-#line 3689 "parse.c"
+#line 3693 "parse.c"
         break;
       case 252: /* with ::= */
 #line 1513 "parse.y"
 {yymsp[1].minor.yy151 = 0;}
-#line 3694 "parse.c"
+#line 3698 "parse.c"
         break;
       case 253: /* with ::= WITH wqlist */
 #line 1515 "parse.y"
 { yymsp[-1].minor.yy151 = yymsp[0].minor.yy151; }
-#line 3699 "parse.c"
+#line 3703 "parse.c"
         break;
       case 254: /* with ::= WITH RECURSIVE wqlist */
 #line 1516 "parse.y"
 { yymsp[-2].minor.yy151 = yymsp[0].minor.yy151; }
-#line 3704 "parse.c"
+#line 3708 "parse.c"
         break;
       case 255: /* wqlist ::= nm eidlist_opt AS LP select RP */
 #line 1518 "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 3715 "parse.c"
         break;
       case 256: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
 #line 1521 "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 3722 "parse.c"
         break;
       default:
       /* (257) input ::= ecmd */ yytestcase(yyruleno==257);
@@ -3825,7 +3829,7 @@ static void yy_syntax_error(
   } else {
     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
   }
-#line 3829 "parse.c"
+#line 3833 "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..5fb2c89 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -1236,10 +1236,10 @@ paren_exprlist(A) ::= LP exprlist(X) RP.  {A = X;}
 ///////////////////////////// The CREATE INDEX command ///////////////////////
 //
 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X)
-        ON nm(Y) LP sortlist(Z) RP where_opt(W). {
+        ON nm(Y) LP sortlist(Z) RP. {
   sqlite3CreateIndex(pParse, &X, 
                      sqlite3SrcListAppend(pParse->db,0,&Y), Z, U,
-                      &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
+                      &S, 0, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
 }
 
 %type uniqueflag {int}
diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
index 4ce575e..e8b8cc6 100755
--- a/test/sql-tap/analyze9.test.lua
+++ b/test/sql-tap/analyze9.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(124)
+test:plan(118)
 
 testprefix = "analyze9"
 
@@ -209,7 +209,7 @@ test:do_execsql_test(
         INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
         INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
         INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
-        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';	
+        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';   
         CREATE INDEX t1b ON t1(b);
         ANALYZE;
         SELECT c FROM t1 WHERE b=3 AND a BETWEEN 30 AND 60;
@@ -1105,82 +1105,82 @@ test:do_execsql_test(
 ---------------------------------------------------------------------------
 -- Test that stat4 data may be used with partial indexes.
 --
-test:do_test(
-    17.1,
-    function()
-        test:execsql([[
-            DROP TABLE IF EXISTS t1;
-            CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, a, b, c, d);
-            CREATE INDEX i1 ON t1(a, b) WHERE d IS NOT NULL;
-            INSERT INTO t1 VALUES(null, -1, -1, -1, NULL);
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-        ]])
-        local b = 0
-        for i = 0, 31 do
-            if (i < 8) then
-                b = 0
-            else
-                b = i
-        end
-        test:execsql(string.format(" INSERT INTO t1 VALUES(null, %s%%2, %s, %s/2, 'abc') ", i, b, i))
-    end
-    return test:execsql("ANALYZE")
-    end, {
-        -- <17.1>
-        -- </17.1>
-    })
+--test:do_test(
+--    17.1,
+--    function()
+--        test:execsql([[
+--            DROP TABLE IF EXISTS t1;
+--            CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, a, b, c, d);
+--            CREATE INDEX i1 ON t1(a, b) WHERE d IS NOT NULL;
+--            INSERT INTO t1 VALUES(null, -1, -1, -1, NULL);
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--        ]])
+--        local b = 0
+--        for i = 0, 31 do
+--            if (i < 8) then
+--                b = 0
+--            else
+--                b = i
+--        end
+--        test:execsql(string.format(" INSERT INTO t1 VALUES(null, %s%%2, %s, %s/2, 'abc') ", i, b, i))
+--    end
+--    return test:execsql("ANALYZE")
+--    end, {
+--        -- <17.1>
+--        -- </17.1>
+--    })
 
-test:do_execsql_test(
-    17.2,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
-    ]], {
-        -- <17.2>
-        0, 0, 0, 'SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)'
-        -- </17.2>
-    })
+--test:do_execsql_test(
+--    17.2,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
+--    ]], {
+--        -- <17.2>
+--        0, 0, 0, 'SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)'
+--        -- </17.2>
+--    })
 
-test:do_execsql_test(
-    17.3,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
-    ]], {
-        -- <17.3>
-        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)"
-        -- </17.3>
-    })
+--test:do_execsql_test(
+--    17.3,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
+--    ]], {
+--        -- <17.3>
+--        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)"
+--        -- </17.3>
+--    })
 
-test:do_execsql_test(
-    17.4,
-    [[
-        CREATE INDEX i2 ON t1(c, d);
-        ANALYZE;
-    ]])
+--test:do_execsql_test(
+--    17.4,
+--    [[
+--        CREATE INDEX i2 ON t1(c, d);
+--        ANALYZE;
+--    ]])
 
-test:do_execsql_test(
-    17.5,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
-    ]], {
-        -- <17.5>
-        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
-        -- </17.5>
-    })
+--test:do_execsql_test(
+--    17.5,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
+--    ]], {
+--        -- <17.5>
+--        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
+--        -- </17.5>
+--    })
 
-test:do_execsql_test(
-    17.6,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
-    ]], {
-        -- <17.6>
-        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
-        -- </17.6>
-    })
+--test:do_execsql_test(
+--    17.6,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
+--    ]], {
+--        -- <17.6>
+--        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
+--        -- </17.6>
+--    })
 
 ---------------------------------------------------------------------------
 
diff --git a/test/sql-tap/autoindex4.test.lua b/test/sql-tap/autoindex4.test.lua
index 45bae48..c19639a 100755
--- a/test/sql-tap/autoindex4.test.lua
+++ b/test/sql-tap/autoindex4.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(7)
+test:plan(6)
 
 --!./tcltestrunner.lua
 -- 2014-10-24
@@ -108,22 +108,21 @@ test:do_execsql_test(
         -- </autoindex4-3.0>
     })
 
-test:do_execsql_test(
-    "autoindex4-3.1",
-    [[
-        CREATE INDEX Items_x1 ON Items(ItemName,Name) WHERE ItemName = 'dummy';
-
-        SELECT Items.ItemName
-          FROM Items
-            LEFT JOIN A ON (A.Name = Items.ItemName and Items.ItemName = 'dummy')
-            LEFT JOIN B ON (B.Name = Items.ItemName)
-          WHERE Items.Name = 'Parent'
-          ORDER BY Items.ItemName;
-    ]], {
-        -- <autoindex4-3.1>
-        "Item1", "Item2"
-        -- </autoindex4-3.1>
-    })
+--test:do_execsql_test(
+--    "autoindex4-3.1",
+--    [[
+--        CREATE INDEX Items_x1 ON Items(ItemName,Name) WHERE ItemName = 'dummy';
+--
+--        SELECT Items.ItemName
+--          FROM Items
+--            LEFT JOIN A ON (A.Name = Items.ItemName and Items.ItemName = 'dummy')
+--            LEFT JOIN B ON (B.Name = Items.ItemName)
+--          WHERE Items.Name = 'Parent'
+--          ORDER BY Items.ItemName;
+--    ]], {
+--        -- <autoindex4-3.1>
+--        "Item1", "Item2"
+--        -- </autoindex4-3.1>
+--    })
 
 test:finish_test()
-
diff --git a/test/sql-tap/fkey1.test.lua b/test/sql-tap/fkey1.test.lua
index 8749e1f..fb84968 100755
--- a/test/sql-tap/fkey1.test.lua
+++ b/test/sql-tap/fkey1.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(19)
+test:plan(16)
 
 -- This file implements regression tests for foreign keys.
 
@@ -208,36 +208,36 @@ test:do_execsql_test(
         -- </fkey1-5.6>
     })
 
-test:do_execsql_test(
-    "fkey1-6.1",
-    [[
-        CREATE TABLE p1(id PRIMARY KEY, x, y);
-        CREATE UNIQUE INDEX p1x ON p1(x) WHERE y<2;
-        INSERT INTO p1 VALUES(1, 1, 1);
-        CREATE TABLE c1(a PRIMARY KEY REFERENCES p1(x));
-    ]], {
-        -- <fkey1-6.1>
-        -- </fkey1-6.1>
-    })
-
-test:do_catchsql_test(
-    "fkey1-6.2",
-    [[
-        INSERT INTO c1 VALUES(1);
-    ]], {
-        -- <fkey1-6.2>
-        1, "foreign key mismatch - \"C1\" referencing \"P1\""
-        -- </fkey1-6.2>
-    })
-
-test:do_execsql_test(
-    "fkey1-6.3",
-    [[
-        CREATE UNIQUE INDEX p1x2 ON p1(x);
-        INSERT INTO c1 VALUES(1);
-    ]], {
-        -- <fkey1-6.3>
-        -- </fkey1-6.3>
-    })
+--test:do_execsql_test(
+--    "fkey1-6.1",
+--    [[
+--        CREATE TABLE p1(id PRIMARY KEY, x, y);
+--        CREATE UNIQUE INDEX p1x ON p1(x) WHERE y<2;
+--        INSERT INTO p1 VALUES(1, 1, 1);
+--        CREATE TABLE c1(a PRIMARY KEY REFERENCES p1(x));
+--    ]], {
+--        -- <fkey1-6.1>
+--        -- </fkey1-6.1>
+--    })
+
+--test:do_catchsql_test(
+--    "fkey1-6.2",
+--    [[
+--        INSERT INTO c1 VALUES(1);
+--    ]], {
+--        -- <fkey1-6.2>
+--        1, "foreign key mismatch - \"C1\" referencing \"P1\""
+--        -- </fkey1-6.2>
+--    })
+
+--test:do_execsql_test(
+--    "fkey1-6.3",
+--    [[
+--        CREATE UNIQUE INDEX p1x2 ON p1(x);
+--        INSERT INTO c1 VALUES(1);
+--    ]], {
+--        -- <fkey1-6.3>
+--        -- </fkey1-6.3>
+--    })
 
 test:finish_test()
diff --git a/test/sql-tap/gh-2165-remove-support-partial-indexes.test.lua b/test/sql-tap/gh-2165-remove-support-partial-indexes.test.lua
new file mode 100755
index 0000000..d8210fc
--- /dev/null
+++ b/test/sql-tap/gh-2165-remove-support-partial-indexes.test.lua
@@ -0,0 +1,17 @@
+#!/usr/bin/env tarantool
+test = require("sqltester")
+
+test:plan(1)
+
+
+test:do_catchsql_test(
+    "partial-index-1",
+    [[
+        CREATE TABLE t1 (a INTEGER PRIMARY KEY, b INTEGER)
+        CREATE UNIQUE INDEX i ON t1 (a) WHERE a = 3;
+    ]], {
+        1, "keyword \"CREATE\" is reserved"
+    })
+
+--This test intended to be deleted in #2626
+test:finish_test()
diff --git a/test/sql-tap/index7.test.lua b/test/sql-tap/index7.test.lua
index c8f56eb..c294732 100755
--- a/test/sql-tap/index7.test.lua
+++ b/test/sql-tap/index7.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(5)
+test:plan(1)
 
 --!./tcltestrunner.lua
 -- 2013-11-04
@@ -258,47 +258,47 @@ test:do_execsql_test(
         -- </index7-6.1>
     })
 
-test:do_execsql_test(
-    "index7-6.2",
-    [[
-        CREATE INDEX i4 ON t4(c) WHERE d='xyz';
-        SELECT a,b,c,d FROM (SELECT a,b FROM t5 WHERE a=1 AND b='xyz'), t4 WHERE c='abc';
-    ]], {
-        -- <index7-6.2>
-        1, "xyz", "abc", "not xyz"
-        -- </index7-6.2>
-    })
+--test:do_execsql_test(
+--    "index7-6.2",
+--    [[
+--        CREATE INDEX i4 ON t4(c) WHERE d='xyz';
+--        SELECT a,b,c,d FROM (SELECT a,b FROM t5 WHERE a=1 AND b='xyz'), t4 WHERE c='abc';
+--    ]], {
+--        -- <index7-6.2>
+--        1, "xyz", "abc", "not xyz"
+--        -- </index7-6.2>
+--    })
 
-test:do_execsql_test(
-    "index7-6.3",
-    [[
-        CREATE VIEW v4 AS SELECT c,d FROM t4;
-        INSERT INTO t4 VALUES(2, 'def', 'xyz');
-        SELECT * FROM v4 WHERE d='xyz' AND c='def'
-    ]], {
-        -- <index7-6.3>
-        "def", "xyz"
-        -- </index7-6.3>
-    })
+--test:do_execsql_test(
+--    "index7-6.3",
+--    [[
+--        CREATE VIEW v4 AS SELECT c,d FROM t4;
+--        INSERT INTO t4 VALUES(2, 'def', 'xyz');
+--        SELECT * FROM v4 WHERE d='xyz' AND c='def'
+--    ]], {
+--        -- <index7-6.3>
+--        "def", "xyz"
+--        -- </index7-6.3>
+--    })
 
-test:do_eqp_test(
-    "index7-6.4",
-    [[
-        SELECT * FROM v4 WHERE d='xyz' AND c='def'
-    ]], {
-        -- <index7-6.4>
-    {0, 0, 0, "SEARCH TABLE T4 USING COVERING INDEX I4 (C=?)"}
-        -- </index7-6.4>
-    })
+--test:do_eqp_test(
+--    "index7-6.4",
+--    [[
+--        SELECT * FROM v4 WHERE d='xyz' AND c='def'
+--    ]], {
+--        -- <index7-6.4>
+--    {0, 0, 0, "SEARCH TABLE T4 USING COVERING INDEX I4 (C=?)"}
+--        -- </index7-6.4>
+--    })
 
-test:do_catchsql_test(
-    "index7-6.5",
-    [[
-        CREATE INDEX t5a ON t5(a) WHERE a=#1;
-    ]], {
-        -- <index7-6.5>
-        1, [[near "#1": syntax error]]
-        -- </index7-6.5>
-    })
+--test:do_catchsql_test(
+--    "index7-6.5",
+--    [[
+--        CREATE INDEX t5a ON t5(a) WHERE a=#1;
+--    ]], {
+--        -- <index7-6.5>
+--        1, [[near "#1": syntax error]]
+--        -- </index7-6.5>
+--    })
 
 test:finish_test()
diff --git a/test/sql-tap/suite.ini b/test/sql-tap/suite.ini
index 0bc9e83..d29c1b0 100644
--- a/test/sql-tap/suite.ini
+++ b/test/sql-tap/suite.ini
@@ -3,3 +3,4 @@ core = app
 description = Database tests with #! using TAP
 lua_libs = lua/sqltester.lua ../sql/lua/sql_tokenizer.lua ../box/lua/identifier.lua
 is_parallel = True
+disabled = index6.test.lua ; to be enabled after #2626
-- 
2.7.4

^ permalink raw reply	[flat|nested] 6+ messages in thread
* [tarantool-patches] [PATCH] sql: remove support of partial indexes
@ 2018-03-29 10:58 Gleb
  2018-04-02 12:31 ` [tarantool-patches] " Alexander Turenko
  0 siblings, 1 reply; 6+ messages in thread
From: Gleb @ 2018-03-29 10:58 UTC (permalink / raw)
  To: tarantool-patches

Remove support partial indexes.
Add test which check inaccessibility of partial index syntax.
Comment tests which use partial index.
They can be enabled after #2626.

Fixes #2165
---
Issue from https://github.com/tarantool/tarantool/issues/2165.
Source from https://github.com/tarantool/tarantool/tree/gh-2165-remove-support-partial-indexes.
 src/box/sql/parse.y                                |   4 +-
 test/sql-tap/analyze9.test.lua                     | 158 ++++++++++-----------
 test/sql-tap/autoindex4.test.lua                   |  37 +++--
 test/sql-tap/fkey1.test.lua                        |  66 ++++-----
 ...gh-2165-remove-support-partial-indexes.test.lua |  16 +++
 test/sql-tap/index7.test.lua                       |  81 +++++------
 test/sql-tap/suite.ini                             |   1 +
 7 files changed, 183 insertions(+), 180 deletions(-)
 create mode 100755 test/sql-tap/gh-2165-remove-support-partial-indexes.test.lua

diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
index 914fc53..5fb2c89 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -1236,10 +1236,10 @@ paren_exprlist(A) ::= LP exprlist(X) RP.  {A = X;}
 ///////////////////////////// The CREATE INDEX command ///////////////////////
 //
 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X)
-        ON nm(Y) LP sortlist(Z) RP where_opt(W). {
+        ON nm(Y) LP sortlist(Z) RP. {
   sqlite3CreateIndex(pParse, &X, 
                      sqlite3SrcListAppend(pParse->db,0,&Y), Z, U,
-                      &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
+                      &S, 0, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
 }
 
 %type uniqueflag {int}
diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
index 4ce575e..ddf7a7c 100755
--- a/test/sql-tap/analyze9.test.lua
+++ b/test/sql-tap/analyze9.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(124)
+test:plan(118)
 
 testprefix = "analyze9"
 
@@ -78,7 +78,6 @@ test:do_execsql_test(
     1.3,
     [[
         SELECT "tbl","idx","neq","nlt","ndlt",msgpack_decode_sample("sample") FROM "_sql_stat4" where "idx" = 'T1';
-
     ]], {
         -- <1.3>
         'T1', 'T1', '1', '0', '0', '(0)', 'T1', 'T1', '1', '1', '1', '(1)', 
@@ -209,7 +208,7 @@ test:do_execsql_test(
         INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
         INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
         INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
-        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';	
+        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';    
         CREATE INDEX t1b ON t1(b);
         ANALYZE;
         SELECT c FROM t1 WHERE b=3 AND a BETWEEN 30 AND 60;
@@ -252,16 +251,12 @@ test:do_test(
             INSERT INTO t1(id, c, b, a) VALUES(null, 200, 1, 'a');
             INSERT INTO t1(id, c, b, a) VALUES(null, 200, 1, 'b');
             INSERT INTO t1(id, c, b, a) VALUES(null, 200, 1, 'c');
-
             INSERT INTO t1(id, c, b, a) VALUES(null, 200, 2, 'e');
             INSERT INTO t1(id, c, b, a) VALUES(null, 200, 2, 'f');
-
             INSERT INTO t1(id, c, b, a) VALUES(null, 201, 3, 'g');
             INSERT INTO t1(id, c, b, a) VALUES(null, 201, 4, 'h');
-
             ANALYZE;
             SELECT count(*) FROM "_sql_stat4";
-
         ]])
         end, {
             -- <4.1>
@@ -1105,82 +1100,82 @@ test:do_execsql_test(
 ---------------------------------------------------------------------------
 -- Test that stat4 data may be used with partial indexes.
 --
-test:do_test(
-    17.1,
-    function()
-        test:execsql([[
-            DROP TABLE IF EXISTS t1;
-            CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, a, b, c, d);
-            CREATE INDEX i1 ON t1(a, b) WHERE d IS NOT NULL;
-            INSERT INTO t1 VALUES(null, -1, -1, -1, NULL);
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-        ]])
-        local b = 0
-        for i = 0, 31 do
-            if (i < 8) then
-                b = 0
-            else
-                b = i
-        end
-        test:execsql(string.format(" INSERT INTO t1 VALUES(null, %s%%2, %s, %s/2, 'abc') ", i, b, i))
-    end
-    return test:execsql("ANALYZE")
-    end, {
-        -- <17.1>
-        -- </17.1>
-    })
+--test:do_test(
+--    17.1,
+--    function()
+--        test:execsql([[
+--            DROP TABLE IF EXISTS t1;
+--            CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, a, b, c, d);
+--            CREATE INDEX i1 ON t1(a, b) WHERE d IS NOT NULL;
+--            INSERT INTO t1 VALUES(null, -1, -1, -1, NULL);
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--        ]])
+--        local b = 0
+--        for i = 0, 31 do
+--            if (i < 8) then
+--                b = 0
+--            else
+--                b = i
+--        end
+--        test:execsql(string.format(" INSERT INTO t1 VALUES(null, %s%%2, %s, %s/2, 'abc') ", i, b, i))
+--    end
+--    return test:execsql("ANALYZE")
+--    end, {
+--        -- <17.1>
+--        -- </17.1>
+--    })
 
-test:do_execsql_test(
-    17.2,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
-    ]], {
-        -- <17.2>
-        0, 0, 0, 'SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)'
-        -- </17.2>
-    })
+--test:do_execsql_test(
+--    17.2,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
+--    ]], {
+--        -- <17.2>
+--        0, 0, 0, 'SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)'
+--        -- </17.2>
+--    })
 
-test:do_execsql_test(
-    17.3,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
-    ]], {
-        -- <17.3>
-        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)"
-        -- </17.3>
-    })
+--test:do_execsql_test(
+--    17.3,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
+--    ]], {
+--        -- <17.3>
+--        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)"
+--        -- </17.3>
+--    })
 
-test:do_execsql_test(
-    17.4,
-    [[
-        CREATE INDEX i2 ON t1(c, d);
-        ANALYZE;
-    ]])
+--test:do_execsql_test(
+--    17.4,
+--    [[
+--        CREATE INDEX i2 ON t1(c, d);
+--        ANALYZE;
+--    ]])
 
-test:do_execsql_test(
-    17.5,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
-    ]], {
-        -- <17.5>
-        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
-        -- </17.5>
-    })
+--test:do_execsql_test(
+--    17.5,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
+--    ]], {
+--        -- <17.5>
+--        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
+--        -- </17.5>
+--    })
 
-test:do_execsql_test(
-    17.6,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
-    ]], {
-        -- <17.6>
-        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
-        -- </17.6>
-    })
+--test:do_execsql_test(
+--    17.6,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
+--    ]], {
+          -- <17.6>
+--        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
+          -- </17.6>
+--    })
 
 ---------------------------------------------------------------------------
 
@@ -1308,7 +1303,6 @@ test:do_execsql_test(
         WITH r(x) AS (SELECT 1 UNION ALL SELECT x+1 FROM r WHERE x<=100) 
         INSERT INTO t3 SELECT CASE WHEN (x>45 AND x<96) THEN 'B' ELSE 'A' END,
             x, CASE WHEN (x<51) THEN 'one' ELSE 'two' END, x FROM r;
-
         CREATE INDEX i3 ON t3(c);
         CREATE INDEX i4 ON t3(d);
         ANALYZE;
@@ -1354,7 +1348,6 @@ test:do_execsql_test(
         CREATE TABLE t4(a COLLATE "unicode_ci", b, c, d, e, f, PRIMARY KEY(c, b, a));
         CREATE INDEX i41 ON t4(e);
         CREATE INDEX i42 ON t4(f);
-
         WITH data(a, b, c, d, e, f) AS (SELECT int_to_char(0), 'xyz', 'zyx', '*', 0, 0 UNION ALL 
             SELECT int_to_char(f+1), b, c, d, (e+1) % 2, f+1 FROM data WHERE f<1024) 
                 INSERT INTO t4 SELECT a, b, c, d, e, f FROM data;
@@ -1601,18 +1594,13 @@ test:do_execsql_test(
         CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, x, y, z);
         CREATE INDEX i1 ON t1(x, y);
         CREATE INDEX i2 ON t1(z);
-
-
         WITH cnt(y) AS (SELECT 0 UNION ALL SELECT y+1 FROM cnt WHERE y<99), 
             letters(x) AS (SELECT 'A' UNION SELECT 'B' UNION SELECT 'C' UNION SELECT 'D') 
                 INSERT INTO t1(id, x, y) SELECT null, x, y FROM letters, cnt;
-
         WITH letters(x) AS (SELECT 'A' UNION SELECT 'B' UNION SELECT 'C' UNION SELECT 'D') 
             INSERT INTO t1(id, x, y) SELECT null, x, 70 FROM letters;
-
         WITH cnt(i) AS (SELECT 407 UNION ALL SELECT i+1 FROM cnt WHERE i<9999) 
             INSERT INTO t1(id, x, y) SELECT i, i, i FROM cnt;
-
         UPDATE t1 SET z = (id / 95);
         ANALYZE;
     ]])
diff --git a/test/sql-tap/autoindex4.test.lua b/test/sql-tap/autoindex4.test.lua
index 45bae48..bdb0b98 100755
--- a/test/sql-tap/autoindex4.test.lua
+++ b/test/sql-tap/autoindex4.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(7)
+test:plan(6)
 
 --!./tcltestrunner.lua
 -- 2014-10-24
@@ -27,7 +27,6 @@ test:do_execsql_test(
         INSERT INTO t1 VALUES(123,'abc'),(234,'def'),(234,'ghi'),(345,'jkl');
         CREATE TABLE t2(x,y, primary key(x,y));
         INSERT INTO t2 VALUES(987,'zyx'),(654,'wvu'),(987,'rqp');
-
         SELECT *, '|' FROM t1, t2 WHERE a=234 AND x=987 ORDER BY +b;
     ]], {
         -- <autoindex4-1.0>
@@ -95,7 +94,6 @@ test:do_execsql_test(
         INSERT INTO Items VALUES('Item1','Parent');
         INSERT INTO Items VALUES('Item2','Parent');
         CREATE TABLE B(Name text primary key);
-
         SELECT Items.ItemName
           FROM Items
             LEFT JOIN A ON (A.Name = Items.ItemName and Items.ItemName = 'dummy')
@@ -108,22 +106,21 @@ test:do_execsql_test(
         -- </autoindex4-3.0>
     })
 
-test:do_execsql_test(
-    "autoindex4-3.1",
-    [[
-        CREATE INDEX Items_x1 ON Items(ItemName,Name) WHERE ItemName = 'dummy';
-
-        SELECT Items.ItemName
-          FROM Items
-            LEFT JOIN A ON (A.Name = Items.ItemName and Items.ItemName = 'dummy')
-            LEFT JOIN B ON (B.Name = Items.ItemName)
-          WHERE Items.Name = 'Parent'
-          ORDER BY Items.ItemName;
-    ]], {
-        -- <autoindex4-3.1>
-        "Item1", "Item2"
-        -- </autoindex4-3.1>
-    })
+--test:do_execsql_test(
+--    "autoindex4-3.1",
+--    [[
+--        CREATE INDEX Items_x1 ON Items(ItemName,Name) WHERE ItemName = 'dummy';
+--
+--        SELECT Items.ItemName
+--          FROM Items
+--            LEFT JOIN A ON (A.Name = Items.ItemName and Items.ItemName = 'dummy')
+--            LEFT JOIN B ON (B.Name = Items.ItemName)
+--          WHERE Items.Name = 'Parent'
+--          ORDER BY Items.ItemName;
+--    ]], {
+--        -- <autoindex4-3.1>
+--        "Item1", "Item2"
+--        -- </autoindex4-3.1>
+--    })
 
 test:finish_test()
-
diff --git a/test/sql-tap/fkey1.test.lua b/test/sql-tap/fkey1.test.lua
index 8749e1f..ed40b81 100755
--- a/test/sql-tap/fkey1.test.lua
+++ b/test/sql-tap/fkey1.test.lua
@@ -1,6 +1,7 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(19)
+test:plan(16)
+
 
 -- This file implements regression tests for foreign keys.
 
@@ -123,7 +124,6 @@ test:do_execsql_test(
         INSERT INTO "xx4"("xx5") VALUES('abc');
         INSERT INTO "xx1"("xx2","xx3") VALUES('uvw','xyz');
         SELECT 1, "xx5" FROM "xx4";
-
     ]], {
         -- <fkey1-4.1>
         1, 'abc'
@@ -208,36 +208,36 @@ test:do_execsql_test(
         -- </fkey1-5.6>
     })
 
-test:do_execsql_test(
-    "fkey1-6.1",
-    [[
-        CREATE TABLE p1(id PRIMARY KEY, x, y);
-        CREATE UNIQUE INDEX p1x ON p1(x) WHERE y<2;
-        INSERT INTO p1 VALUES(1, 1, 1);
-        CREATE TABLE c1(a PRIMARY KEY REFERENCES p1(x));
-    ]], {
-        -- <fkey1-6.1>
-        -- </fkey1-6.1>
-    })
-
-test:do_catchsql_test(
-    "fkey1-6.2",
-    [[
-        INSERT INTO c1 VALUES(1);
-    ]], {
-        -- <fkey1-6.2>
-        1, "foreign key mismatch - \"C1\" referencing \"P1\""
-        -- </fkey1-6.2>
-    })
-
-test:do_execsql_test(
-    "fkey1-6.3",
-    [[
-        CREATE UNIQUE INDEX p1x2 ON p1(x);
-        INSERT INTO c1 VALUES(1);
-    ]], {
-        -- <fkey1-6.3>
-        -- </fkey1-6.3>
-    })
+--test:do_execsql_test(
+--    "fkey1-6.1",
+--    [[
+--        CREATE TABLE p1(id PRIMARY KEY, x, y);
+--        CREATE UNIQUE INDEX p1x ON p1(x) WHERE y<2;
+--        INSERT INTO p1 VALUES(1, 1, 1);
+--        CREATE TABLE c1(a PRIMARY KEY REFERENCES p1(x));
+--    ]], {
+--        -- <fkey1-6.1>
+--        -- </fkey1-6.1>
+--    })
+
+--test:do_catchsql_test(
+--    "fkey1-6.2",
+--    [[
+--        INSERT INTO c1 VALUES(1);
+--    ]], {
+--        -- <fkey1-6.2>
+--        1, "foreign key mismatch - \"C1\" referencing \"P1\""
+--        -- </fkey1-6.2>
+--    })
+
+--test:do_execsql_test(
+--    "fkey1-6.3",
+--    [[
+--        CREATE UNIQUE INDEX p1x2 ON p1(x);
+--        INSERT INTO c1 VALUES(1);
+--    ]], {
+--        -- <fkey1-6.3>
+--        -- </fkey1-6.3>
+--    })
 
 test:finish_test()
diff --git a/test/sql-tap/gh-2165-remove-support-partial-indexes.test.lua b/test/sql-tap/gh-2165-remove-support-partial-indexes.test.lua
new file mode 100755
index 0000000..a4e274b
--- /dev/null
+++ b/test/sql-tap/gh-2165-remove-support-partial-indexes.test.lua
@@ -0,0 +1,16 @@
+#!/usr/bin/env tarantool
+test = require("sqltester")
+
+test:plan(1)
+
+
+test:do_catchsql_test(
+    "partial-index-1",
+    [[
+        CREATE TABLE t1 (a INTEGER PRIMARY KEY, b INTEGER)
+        CREATE UNIQUE INDEX i ON t1 (a) WHERE a = 3;
+    ]], {
+        1,"keyword \"CREATE\" is reserved"
+    })
+
+test:finish_test()
diff --git a/test/sql-tap/index7.test.lua b/test/sql-tap/index7.test.lua
index c8f56eb..97ac194 100755
--- a/test/sql-tap/index7.test.lua
+++ b/test/sql-tap/index7.test.lua
@@ -1,6 +1,7 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(5)
+test:plan(1)
+
 
 --!./tcltestrunner.lua
 -- 2013-11-04
@@ -258,47 +259,47 @@ test:do_execsql_test(
         -- </index7-6.1>
     })
 
-test:do_execsql_test(
-    "index7-6.2",
-    [[
-        CREATE INDEX i4 ON t4(c) WHERE d='xyz';
-        SELECT a,b,c,d FROM (SELECT a,b FROM t5 WHERE a=1 AND b='xyz'), t4 WHERE c='abc';
-    ]], {
-        -- <index7-6.2>
-        1, "xyz", "abc", "not xyz"
-        -- </index7-6.2>
-    })
+--test:do_execsql_test(
+--    "index7-6.2",
+--    [[
+--        CREATE INDEX i4 ON t4(c) WHERE d='xyz';
+--        SELECT a,b,c,d FROM (SELECT a,b FROM t5 WHERE a=1 AND b='xyz'), t4 WHERE c='abc';
+--    ]], {
+--        -- <index7-6.2>
+--        1, "xyz", "abc", "not xyz"
+--        -- </index7-6.2>
+--    })
 
-test:do_execsql_test(
-    "index7-6.3",
-    [[
-        CREATE VIEW v4 AS SELECT c,d FROM t4;
-        INSERT INTO t4 VALUES(2, 'def', 'xyz');
-        SELECT * FROM v4 WHERE d='xyz' AND c='def'
-    ]], {
-        -- <index7-6.3>
-        "def", "xyz"
-        -- </index7-6.3>
-    })
+--test:do_execsql_test(
+--    "index7-6.3",
+--    [[
+--        CREATE VIEW v4 AS SELECT c,d FROM t4;
+--        INSERT INTO t4 VALUES(2, 'def', 'xyz');
+--        SELECT * FROM v4 WHERE d='xyz' AND c='def'
+--    ]], {
+--        -- <index7-6.3>
+--        "def", "xyz"
+--        -- </index7-6.3>
+--    })
 
-test:do_eqp_test(
-    "index7-6.4",
-    [[
-        SELECT * FROM v4 WHERE d='xyz' AND c='def'
-    ]], {
-        -- <index7-6.4>
-    {0, 0, 0, "SEARCH TABLE T4 USING COVERING INDEX I4 (C=?)"}
-        -- </index7-6.4>
-    })
+--test:do_eqp_test(
+--    "index7-6.4",
+--    [[
+--        SELECT * FROM v4 WHERE d='xyz' AND c='def'
+--    ]], {
+--        -- <index7-6.4>
+--    {0, 0, 0, "SEARCH TABLE T4 USING COVERING INDEX I4 (C=?)"}
+--        -- </index7-6.4>
+--    })
 
-test:do_catchsql_test(
-    "index7-6.5",
-    [[
-        CREATE INDEX t5a ON t5(a) WHERE a=#1;
-    ]], {
-        -- <index7-6.5>
-        1, [[near "#1": syntax error]]
-        -- </index7-6.5>
-    })
+--test:do_catchsql_test(
+--    "index7-6.5",
+--    [[
+--        CREATE INDEX t5a ON t5(a) WHERE a=#1;
+--    ]], {
+--        -- <index7-6.5>
+--        1, [[near "#1": syntax error]]
+--        -- </index7-6.5>
+--    })
 
 test:finish_test()
diff --git a/test/sql-tap/suite.ini b/test/sql-tap/suite.ini
index 0bc9e83..d29c1b0 100644
--- a/test/sql-tap/suite.ini
+++ b/test/sql-tap/suite.ini
@@ -3,3 +3,4 @@ core = app
 description = Database tests with #! using TAP
 lua_libs = lua/sqltester.lua ../sql/lua/sql_tokenizer.lua ../box/lua/identifier.lua
 is_parallel = True
+disabled = index6.test.lua ; to be enabled after #2626
-- 
2.7.4

^ permalink raw reply	[flat|nested] 6+ messages in thread
[parent not found: <1521937705-8170-1-git-send-email-gleb-skiba@mail.ru>]

end of thread, other threads:[~2018-04-04 15:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-03 11:42 [tarantool-patches] [PATCH] sql: remove support of partial indexes Gleb
2018-04-04  0:21 ` [tarantool-patches] " Alexander Turenko
2018-04-04 15:27 ` [tarantool-patches] " n.pettik
  -- strict thread matches above, loose matches on Subject: below --
2018-03-29 10:58 [tarantool-patches] " Gleb
2018-04-02 12:31 ` [tarantool-patches] " Alexander Turenko
     [not found] <1521937705-8170-1-git-send-email-gleb-skiba@mail.ru>
2018-03-29 10:10 ` Alexander Turenko
2018-03-29 10:14   ` [tarantool-patches] " GLEB SKIBA
2018-03-29 10:21     ` Alexander Turenko

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