* [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] Re: [tarantool-patches] [PATCH] sql: remove support of partial indexes
2018-04-03 11:42 [tarantool-patches] [PATCH] sql: remove support of partial indexes Gleb
@ 2018-04-04 0:21 ` Alexander Turenko
2018-04-04 15:27 ` [tarantool-patches] " n.pettik
1 sibling, 0 replies; 6+ messages in thread
From: Alexander Turenko @ 2018-04-04 0:21 UTC (permalink / raw)
To: n.pettik; +Cc: tarantool-patches
Looks good except trailing spaces in analyze9 test.
Nikita, can you looks into this patch?
Gleb, please remove the trailing spaces and answer that is done (no need
to resend the whole patch, IMO).
WBR, Alexander Turenko.
>Вторник, 3 апреля 2018, 14:43 +03:00 от Gleb <dmarc-noreply@freelists.org>:
>
>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 .
> ...
^ permalink raw reply [flat|nested] 6+ messages in thread
* [tarantool-patches] Re: [PATCH] sql: remove support of partial indexes
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 ` n.pettik
1 sibling, 0 replies; 6+ messages in thread
From: n.pettik @ 2018-04-04 15:27 UTC (permalink / raw)
To: tarantool-patches; +Cc: gleb-skiba
[-- Attachment #1: Type: text/plain, Size: 115929 bytes --]
Hello. Firstly, set up your email settings.
I can’t directly reply to your message:
It is substituted with dmarc-noreply@freelists.org
Moreover, if you send new version of patch, please,
specify it with --subject-prefix='PATCH v2’ and provide change log.
However, you can avoid doing that by replying to message that contains
review comments and providing only new changes.
> On 3 Apr 2018, at 14:42, Gleb (Redacted sender "gleb-skiba" for DMARC) <dmarc-noreply@freelists.org> wrote:
>
> Remove support partial indexes.
> Add test which check inaccessibility of partial index syntax.
Typo: checks.
> 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-*’;
This is redundant diff, I guess.
> 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>
> +-- })
Actually, I am against turning off these tests cases only due to the fact that
partial index is used to fill this table. You can easily rewrite 17.1 test
without it.
>
> ---------------------------------------------------------------------------
>
> 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>
> +-- })
The same is here: it is test suit for foreign keys and it shouldn’t
be turned off only due to unavailability of partial indexes.
Please, don’t comment them but refactor without using partial indexes.
>
> 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
>
>
[-- Attachment #2: Type: text/html, Size: 203531 bytes --]
^ 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
* [tarantool-patches] Re: [PATCH] sql: remove support of partial indexes
2018-03-29 10:58 [tarantool-patches] " Gleb
@ 2018-04-02 12:31 ` Alexander Turenko
0 siblings, 0 replies; 6+ messages in thread
From: Alexander Turenko @ 2018-04-02 12:31 UTC (permalink / raw)
To: Gleb Skiba; +Cc: tarantool-patches
Hi, Gleb!
Please, consider the review below. It mostly about changes that are not
related to the issue you resolving. Try to make your commits atomic:
just change that you describe in the commit header, nothing more.
Please, regenerate and commit your parse.c.
WBR, Alexander Turenko.
On Thu, Mar 29, 2018 at 01:58:51PM +0300, Gleb wrote:
> ...
> 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
> ...
> @@ -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>
Trailing spaces and redundant changes.
> -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>
> +-- })
Please, comment entire block like so:
> -- ...
> -- -- <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;
> ]])
Redundant changes.
> 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>
> })
>
Redundant changes.
> 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>
> })
Extra empty line added after plan, one empty line removed after SELECT.
Don't see how it correspond to the issue you solving here. Is it some
kind of code style refactoring? Why it was not discussed before
implementing?
> 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()
It is good to separate tables elements using comma and space.
Suggest to leave a comment that the test intended to be deleted after
partial index implementing in #2626.
> 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)
> +
>
Extra newline added.
^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <1521937705-8170-1-git-send-email-gleb-skiba@mail.ru>]
* [tarantool-patches] Re: [PATCH] sql: remove support of partial indexes
[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
0 siblings, 1 reply; 6+ messages in thread
From: Alexander Turenko @ 2018-03-29 10:10 UTC (permalink / raw)
To: Gleb; +Cc: tarantool-patches
Hi, Gleb!
Please, squash your two commits into one and resend the patch.
WBR, Alexander Turenko.
On Sun, Mar 25, 2018 at 03:28:25AM +0300, Gleb wrote:
> Issue from https://github.com/tarantool/tarantool/issues/2165.
> Source from https://github.com/tarantool/tarantool/tree/gh-2165-remove-support-partial-indexes.
Place it under --- mark.
> Remove support partial indexes.
> Add test which check inaccessibility of partial index syntax.
> Comment tests which use partial index, they can be uncomment when partial index will be available.
The line length exceeds 72 symbols.
> Fixed comments as per review.
That should not be part of the commit message.
>
> Fixes #2165
> ---
Here you should place issue/branch names, changelog and other things
that should not be part of the commit.
> src/box/sql/build.c | 11 +-
> src/box/sql/parse.c | 205 +++++++++---------
> src/box/sql/parse.y | 2 +-
> test/sql-tap/analyze9.test.lua | 18 +-
> test/sql-tap/autoindex4.test.lua | 5 +-
> test/sql-tap/fkey1.test.lua | 1 -
> test/sql-tap/index6.test.lua | 437 +++++++++++++++++++--------------------
> test/sql-tap/suite.ini | 1 +
> 8 files changed, 333 insertions(+), 347 deletions(-)
>
> ...
>
> diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
> index 472bad7..206ae16 100755
> --- a/test/sql-tap/analyze9.test.lua
> +++ b/test/sql-tap/analyze9.test.lua
> ...
> @@ -1177,9 +1172,9 @@ test:do_execsql_test(
> -- [[
> -- EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
> -- ]], {
> --- -- <17.6>
> + -- <17.6>
> -- 0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
> --- -- </17.6>
> + -- </17.6>
> -- })
>
Use -- *at start* of each line for the entire block or --[[ ... ]]--.
I'm about '<17.6>' lines.
> diff --git a/test/sql-tap/suite.ini b/test/sql-tap/suite.ini
> index 0bc9e83..d6ce75e 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;
Space before ';' is needed according to [1]. Write a comment with the
issue re partial index enabling (#2626), please.
> --
> 2.7.4
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [tarantool-patches] Re: [tarantool-patches] Re: [PATCH] sql: remove support of partial indexes
2018-03-29 10:10 ` Alexander Turenko
@ 2018-03-29 10:14 ` GLEB SKIBA
2018-03-29 10:21 ` Alexander Turenko
0 siblings, 1 reply; 6+ messages in thread
From: GLEB SKIBA @ 2018-03-29 10:14 UTC (permalink / raw)
To: tarantool-patches
[-- Attachment #1: Type: text/plain, Size: 2742 bytes --]
Hi, this is old version of my commit, which i accidentally send. I resend correct version. Is it available?
>Четверг, 29 марта 2018, 13:10 +03:00 от Alexander Turenko <alexander.turenko@tarantool.org>:
>
>Hi, Gleb!
>
>Please, squash your two commits into one and resend the patch.
>
>WBR, Alexander Turenko.
>
>On Sun, Mar 25, 2018 at 03:28:25AM +0300, Gleb wrote:
>> Issue from https://github.com/tarantool/tarantool/issues/2165 .
>> Source from https://github.com/tarantool/tarantool/tree/gh-2165-remove-support-partial-indexes .
>
>Place it under --- mark.
>
>> Remove support partial indexes.
>> Add test which check inaccessibility of partial index syntax.
>> Comment tests which use partial index, they can be uncomment when partial index will be available.
>
>The line length exceeds 72 symbols.
>
>> Fixed comments as per review.
>
>That should not be part of the commit message.
>
>>
>> Fixes #2165
>> ---
>
>Here you should place issue/branch names, changelog and other things
>that should not be part of the commit.
>
>> src/box/sql/build.c | 11 +-
>> src/box/sql/parse.c | 205 +++++++++---------
>> src/box/sql/parse.y | 2 +-
>> test/sql-tap/analyze9.test.lua | 18 +-
>> test/sql-tap/autoindex4.test.lua | 5 +-
>> test/sql-tap/fkey1.test.lua | 1 -
>> test/sql-tap/index6.test.lua | 437 +++++++++++++++++++--------------------
>> test/sql-tap/suite.ini | 1 +
>> 8 files changed, 333 insertions(+), 347 deletions(-)
>>
>> ...
>>
>> diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
>> index 472bad7..206ae16 100755
>> --- a/test/sql-tap/analyze9.test.lua
>> +++ b/test/sql-tap/analyze9.test.lua
>> ...
>> @@ -1177,9 +1172,9 @@ test:do_execsql_test(
>> -- [[
>> -- EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
>> -- ]], {
>> --- -- <17.6>
>> + -- <17.6>
>> -- 0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
>> --- -- </17.6>
>> + -- </17.6>
>> -- })
>>
>
>Use -- *at start* of each line for the entire block or --[[ ... ]]--.
>I'm about '<17.6>' lines.
>
>> diff --git a/test/sql-tap/suite.ini b/test/sql-tap/suite.ini
>> index 0bc9e83..d6ce75e 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;
>
>Space before ';' is needed according to [1]. Write a comment with the
>issue re partial index enabling (#2626), please.
>
>> --
>> 2.7.4
>>
>
[-- Attachment #2: Type: text/html, Size: 3822 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* [tarantool-patches] Re: [PATCH] sql: remove support of partial indexes
2018-03-29 10:14 ` [tarantool-patches] " GLEB SKIBA
@ 2018-03-29 10:21 ` Alexander Turenko
0 siblings, 0 replies; 6+ messages in thread
From: Alexander Turenko @ 2018-03-29 10:21 UTC (permalink / raw)
To: tarantool-patches
The branch contains two commits too.
WBR, Alexander Turenko.
On Thu, Mar 29, 2018 at 01:14:56PM +0300, GLEB SKIBA wrote:
> Hi, this is old version of my commit, which i accidentally send. I
> resend correct version. Is it available?
>
> Четверг, 29 марта 2018, 13:10 +03:00 от Alexander Turenko
> <alexander.turenko@tarantool.org>:
>
> Hi, Gleb!
> Please, squash your two commits into one and resend the patch.
> WBR, Alexander Turenko.
> On Sun, Mar 25, 2018 at 03:28:25AM +0300, Gleb wrote:
^ permalink raw reply [flat|nested] 6+ messages in thread
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