<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 21 Feb 2018, at 16:33, Kirill Yukhin <<a href="mailto:kyukhin@tarantool.org" class="">kyukhin@tarantool.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Hello,</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Three nits below.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Otherwise OK.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">On 21 фев 16:23, Nikita Pettik wrote:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">Now one can type box.sql.execute("pragma") in lua mode, or pragma in SQL<br class="">mode and get list of pragmas and their statuses -- active or disabled.<br class=""></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Please re-phrase the message: explicitly mention, that only boolean</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">type of pragmas are being dumped. Also, I don't think it worst to mention,</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">that syntax is similar in Lua & SQL, that is obvious.</span><br class=""></div></blockquote><div><br class=""></div><div>Fixed.</div><br class=""><blockquote type="cite" class=""><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>for (i = 0; i < ArraySize(aPragmaName); ++i) {<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>if (aPragmaName[i].ePragTyp == PragTyp_FLAG) {<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>PRINT_PRAGMA(aPragmaName[i].zName, aPragmaName[i].iArg);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>}<br class=""></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Single line within if-stmt. No need for braces.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Fixed.</div><br class=""><blockquote type="cite" class=""><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>for (i = 0; i < ArraySize(aPragmaName); ++i) {<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>if (aPragmaName[i].ePragTyp != PragTyp_FLAG) {<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>printf("-- %s \n", aPragmaName[i].zName);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>}<br class=""></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Ditto.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Fixed.</div><div><br class=""></div><div>sql: add print info about pragmas</div><br class=""></div><div><div>Now one can type box.sql.execute("pragma") and get list of available</div><div>pragmas. For flag pragmas also display their statuses: active or</div><div>disabled.</div><div><br class=""></div><div>Closes #3054</div><div>---</div><div> src/box/sql/parse.c | 1037 +++++++++++++++++++++++++-------------------------</div><div> src/box/sql/parse.y | 3 +</div><div> src/box/sql/pragma.c | 33 +-</div><div> 3 files changed, 558 insertions(+), 515 deletions(-)</div><div><br class=""></div><div>diff --git a/src/box/sql/parse.c b/src/box/sql/parse.c</div><div>index d05bed0c3..0019b77dc 100644</div><div>--- a/src/box/sql/parse.c</div><div>+++ b/src/box/sql/parse.c</div><div>@@ -316,15 +316,15 @@ typedef union {</div><div> #define sqlite3ParserARG_STORE yypParser->pParse = pParse</div><div> #define YYFALLBACK 1</div><div> #define YYNSTATE 412</div><div>-#define YYNRULE 299</div><div>+#define YYNRULE 300</div><div> #define YY_MAX_SHIFT 411</div><div> #define YY_MIN_SHIFTREDUCE 608</div><div>-#define YY_MAX_SHIFTREDUCE 906</div><div>-#define YY_MIN_REDUCE 907</div><div>-#define YY_MAX_REDUCE 1205</div><div>-#define YY_ERROR_ACTION 1206</div><div>-#define YY_ACCEPT_ACTION 1207</div><div>-#define YY_NO_ACTION 1208</div><div>+#define YY_MAX_SHIFTREDUCE 907</div><div>+#define YY_MIN_REDUCE 908</div><div>+#define YY_MAX_REDUCE 1207</div><div>+#define YY_ERROR_ACTION 1208</div><div>+#define YY_ACCEPT_ACTION 1209</div><div>+#define YY_NO_ACTION 1210</div><div> /************* End control #defines *******************************************/</div><div> </div><div> /* Define the yytestcase() macro to be a no-op if is not already defined</div><div>@@ -402,10 +402,10 @@ static const YYACTIONTYPE yy_action[] = {</div><div> /* 10 */ 89, 89, 90, 90, 90, 90, 309, 88, 88, 88,</div><div> /* 20 */ 88, 87, 87, 86, 86, 86, 85, 309, 90, 90,</div><div> /* 30 */ 90, 90, 83, 88, 88, 88, 88, 87, 87, 86,</div><div>- /* 40 */ 86, 86, 85, 309, 210, 122, 891, 90, 90, 90,</div><div>+ /* 40 */ 86, 86, 85, 309, 210, 122, 892, 90, 90, 90,</div><div> /* 50 */ 90, 634, 88, 88, 88, 88, 87, 87, 86, 86,</div><div> /* 60 */ 86, 85, 309, 87, 87, 86, 86, 86, 85, 309,</div><div>- /* 70 */ 891, 86, 86, 86, 85, 309, 91, 92, 287, 82,</div><div>+ /* 70 */ 892, 86, 86, 86, 85, 309, 91, 92, 287, 82,</div><div> /* 80 */ 775, 775, 787, 790, 779, 779, 89, 89, 90, 90,</div><div> /* 90 */ 90, 90, 637, 88, 88, 88, 88, 87, 87, 86,</div><div> /* 100 */ 86, 86, 85, 309, 91, 92, 287, 82, 775, 775,</div><div>@@ -415,19 +415,19 @@ static const YYACTIONTYPE yy_action[] = {</div><div> /* 140 */ 790, 779, 779, 89, 89, 90, 90, 90, 90, 67,</div><div> /* 150 */ 88, 88, 88, 88, 87, 87, 86, 86, 86, 85,</div><div> /* 160 */ 309, 776, 776, 788, 791, 320, 93, 84, 81, 176,</div><div>- /* 170 */ 307, 306, 1207, 411, 3, 723, 245, 609, 312, 725,</div><div>+ /* 170 */ 307, 306, 1209, 411, 3, 723, 245, 609, 312, 725,</div><div> /* 180 */ 726, 376, 91, 92, 287, 82, 775, 775, 787, 790,</div><div>- /* 190 */ 779, 779, 89, 89, 90, 90, 90, 90, 883, 88,</div><div>+ /* 190 */ 779, 779, 89, 89, 90, 90, 90, 90, 884, 88,</div><div> /* 200 */ 88, 88, 88, 87, 87, 86, 86, 86, 85, 309,</div><div> /* 210 */ 88, 88, 88, 88, 87, 87, 86, 86, 86, 85,</div><div>- /* 220 */ 309, 122, 84, 81, 176, 642, 377, 1158, 1158, 827,</div><div>+ /* 220 */ 309, 122, 84, 81, 176, 642, 377, 1160, 1160, 828,</div><div> /* 230 */ 780, 91, 92, 287, 82, 775, 775, 787, 790, 779,</div><div> /* 240 */ 779, 89, 89, 90, 90, 90, 90, 364, 88, 88,</div><div>- /* 250 */ 88, 88, 87, 87, 86, 86, 86, 85, 309, 902,</div><div>- /* 260 */ 747, 902, 122, 410, 410, 172, 653, 710, 765, 220,</div><div>- /* 270 */ 758, 119, 876, 753, 635, 683, 238, 333, 237, 652,</div><div>+ /* 250 */ 88, 88, 87, 87, 86, 86, 86, 85, 309, 903,</div><div>+ /* 260 */ 747, 903, 122, 410, 410, 172, 653, 710, 765, 220,</div><div>+ /* 270 */ 758, 119, 877, 753, 635, 683, 238, 333, 237, 652,</div><div> /* 280 */ 91, 92, 287, 82, 775, 775, 787, 790, 779, 779,</div><div>- /* 290 */ 89, 89, 90, 90, 90, 90, 876, 88, 88, 88,</div><div>+ /* 290 */ 89, 89, 90, 90, 90, 90, 877, 88, 88, 88,</div><div> /* 300 */ 88, 87, 87, 86, 86, 86, 85, 309, 22, 747,</div><div> /* 310 */ 757, 757, 759, 201, 693, 651, 359, 356, 355, 692,</div><div> /* 320 */ 165, 710, 703, 766, 122, 238, 333, 237, 354, 91,</div><div>@@ -450,7 +450,7 @@ static const YYACTIONTYPE yy_action[] = {</div><div> /* 490 */ 308, 308, 308, 85, 309, 70, 92, 287, 82, 775,</div><div> /* 500 */ 775, 787, 790, 779, 779, 89, 89, 90, 90, 90,</div><div> /* 510 */ 90, 164, 88, 88, 88, 88, 87, 87, 86, 86,</div><div>- /* 520 */ 86, 85, 309, 73, 628, 628, 833, 833, 328, 91,</div><div>+ /* 520 */ 86, 85, 309, 73, 628, 628, 834, 834, 328, 91,</div><div> /* 530 */ 80, 287, 82, 775, 775, 787, 790, 779, 779, 89,</div><div> /* 540 */ 89, 90, 90, 90, 90, 390, 88, 88, 88, 88,</div><div> /* 550 */ 87, 87, 86, 86, 86, 85, 309, 287, 82, 775,</div><div>@@ -458,42 +458,42 @@ static const YYACTIONTYPE yy_action[] = {</div><div> /* 570 */ 90, 78, 88, 88, 88, 88, 87, 87, 86, 86,</div><div> /* 580 */ 86, 85, 309, 218, 369, 698, 141, 374, 301, 141,</div><div> /* 590 */ 75, 76, 275, 628, 628, 283, 282, 77, 286, 280,</div><div>- /* 600 */ 279, 278, 222, 276, 849, 78, 622, 143, 628, 628,</div><div>- /* 610 */ 403, 2, 1103, 298, 318, 310, 310, 202, 850, 202,</div><div>- /* 620 */ 109, 342, 879, 407, 75, 76, 851, 676, 318, 317,</div><div>+ /* 600 */ 279, 278, 222, 276, 850, 78, 622, 143, 628, 628,</div><div>+ /* 610 */ 403, 2, 1104, 298, 318, 310, 310, 202, 851, 202,</div><div>+ /* 620 */ 109, 342, 880, 407, 75, 76, 852, 676, 318, 317,</div><div> /* 630 */ 644, 77, 392, 182, 677, 162, 174, 765, 336, 758,</div><div> /* 640 */ 48, 48, 753, 347, 403, 2, 344, 407, 137, 310,</div><div> /* 650 */ 310, 407, 628, 628, 288, 386, 266, 219, 155, 255,</div><div> /* 660 */ 362, 250, 361, 205, 48, 48, 392, 755, 48, 48,</div><div> /* 670 */ 248, 765, 709, 758, 407, 302, 753, 675, 675, 757,</div><div>- /* 680 */ 757, 759, 760, 406, 18, 673, 673, 184, 109, 846,</div><div>+ /* 680 */ 757, 759, 760, 406, 18, 673, 673, 184, 109, 847,</div><div> /* 690 */ 318, 48, 48, 180, 315, 122, 336, 122, 751, 385,</div><div> /* 700 */ 387, 755, 185, 385, 370, 190, 373, 307, 306, 78,</div><div> /* 710 */ 314, 628, 628, 757, 757, 759, 760, 406, 18, 210,</div><div>- /* 720 */ 407, 891, 109, 9, 9, 331, 385, 375, 75, 76,</div><div>+ /* 720 */ 407, 892, 109, 9, 9, 331, 385, 375, 75, 76,</div><div> /* 730 */ 697, 122, 628, 628, 167, 77, 201, 48, 48, 359,</div><div>- /* 740 */ 356, 355, 401, 78, 685, 891, 334, 267, 403, 2,</div><div>- /* 750 */ 20, 354, 266, 310, 310, 372, 897, 744, 901, 23,</div><div>- /* 760 */ 191, 327, 75, 76, 332, 899, 342, 900, 407, 77,</div><div>- /* 770 */ 392, 267, 385, 384, 217, 765, 407, 758, 849, 296,</div><div>+ /* 740 */ 356, 355, 401, 78, 685, 892, 334, 267, 403, 2,</div><div>+ /* 750 */ 20, 354, 266, 310, 310, 372, 898, 744, 902, 23,</div><div>+ /* 760 */ 191, 327, 75, 76, 332, 900, 342, 901, 407, 77,</div><div>+ /* 770 */ 392, 267, 385, 384, 217, 765, 407, 758, 850, 296,</div><div> /* 780 */ 753, 19, 403, 2, 54, 10, 10, 310, 310, 407,</div><div>- /* 790 */ 109, 338, 850, 48, 48, 407, 902, 366, 902, 295,</div><div>- /* 800 */ 851, 391, 709, 305, 392, 755, 30, 30, 830, 765,</div><div>- /* 810 */ 829, 758, 10, 10, 753, 407, 326, 757, 757, 759,</div><div>+ /* 790 */ 109, 338, 851, 48, 48, 407, 903, 366, 903, 295,</div><div>+ /* 800 */ 852, 391, 709, 305, 392, 755, 30, 30, 831, 765,</div><div>+ /* 810 */ 830, 758, 10, 10, 753, 407, 326, 757, 757, 759,</div><div> /* 820 */ 760, 406, 18, 177, 177, 407, 297, 407, 385, 365,</div><div> /* 830 */ 109, 407, 10, 10, 709, 372, 157, 156, 397, 755,</div><div> /* 840 */ 225, 367, 48, 48, 10, 10, 200, 68, 47, 47,</div><div> /* 850 */ 236, 757, 757, 759, 760, 406, 18, 95, 382, 231,</div><div>- /* 860 */ 319, 638, 638, 846, 243, 656, 75, 76, 351, 756,</div><div>+ /* 860 */ 319, 638, 638, 847, 243, 656, 75, 76, 351, 756,</div><div> /* 870 */ 203, 360, 186, 77, 820, 822, 657, 380, 177, 177,</div><div>- /* 880 */ 892, 892, 146, 765, 709, 758, 403, 2, 753, 203,</div><div>- /* 890 */ 372, 310, 310, 5, 299, 210, 109, 891, 257, 892,</div><div>- /* 900 */ 892, 810, 265, 709, 321, 74, 407, 72, 392, 230,</div><div>- /* 910 */ 826, 407, 826, 765, 242, 758, 709, 407, 753, 254,</div><div>- /* 920 */ 334, 891, 187, 34, 34, 757, 757, 759, 35, 35,</div><div>- /* 930 */ 253, 407, 893, 712, 36, 36, 820, 110, 343, 149,</div><div>- /* 940 */ 229, 852, 228, 755, 407, 289, 709, 234, 37, 37,</div><div>- /* 950 */ 248, 893, 711, 259, 324, 757, 757, 759, 760, 406,</div><div>+ /* 880 */ 893, 893, 146, 765, 709, 758, 403, 2, 753, 203,</div><div>+ /* 890 */ 372, 310, 310, 5, 299, 210, 109, 892, 257, 893,</div><div>+ /* 900 */ 893, 810, 265, 709, 321, 74, 407, 72, 392, 230,</div><div>+ /* 910 */ 827, 407, 827, 765, 242, 758, 709, 407, 753, 254,</div><div>+ /* 920 */ 334, 892, 187, 34, 34, 757, 757, 759, 35, 35,</div><div>+ /* 930 */ 253, 407, 894, 712, 36, 36, 820, 110, 343, 149,</div><div>+ /* 940 */ 229, 853, 228, 755, 407, 289, 709, 234, 37, 37,</div><div>+ /* 950 */ 248, 894, 711, 259, 324, 757, 757, 759, 760, 406,</div><div> /* 960 */ 18, 38, 38, 407, 289, 407, 161, 160, 159, 407,</div><div> /* 970 */ 709, 407, 7, 407, 138, 407, 261, 407, 628, 628,</div><div> /* 980 */ 26, 26, 27, 27, 682, 407, 29, 29, 39, 39,</div><div>@@ -501,9 +501,9 @@ static const YYACTIONTYPE yy_action[] = {</div><div> /* 1000 */ 407, 163, 42, 42, 692, 407, 342, 407, 678, 407,</div><div> /* 1010 */ 264, 407, 710, 97, 97, 43, 43, 44, 44, 407,</div><div> /* 1020 */ 751, 407, 31, 31, 45, 45, 46, 46, 32, 32,</div><div>- /* 1030 */ 407, 1181, 407, 665, 407, 233, 112, 112, 113, 113,</div><div>- /* 1040 */ 407, 751, 858, 407, 751, 407, 844, 114, 114, 52,</div><div>- /* 1050 */ 52, 33, 33, 407, 857, 407, 681, 98, 98, 407,</div><div>+ /* 1030 */ 407, 1183, 407, 665, 407, 233, 112, 112, 113, 113,</div><div>+ /* 1040 */ 407, 751, 859, 407, 751, 407, 845, 114, 114, 52,</div><div>+ /* 1050 */ 52, 33, 33, 407, 858, 407, 681, 98, 98, 407,</div><div> /* 1060 */ 49, 49, 99, 99, 407, 165, 710, 407, 751, 407,</div><div> /* 1070 */ 100, 100, 96, 96, 169, 407, 111, 111, 407, 109,</div><div> /* 1080 */ 407, 108, 108, 292, 104, 104, 103, 103, 407, 109,</div><div>@@ -511,33 +511,33 @@ static const YYACTIONTYPE yy_action[] = {</div><div> /* 1100 */ 368, 626, 688, 688, 293, 53, 53, 294, 50, 50,</div><div> /* 1110 */ 24, 25, 25, 662, 628, 628, 28, 28, 1, 394,</div><div> /* 1120 */ 107, 398, 628, 628, 632, 627, 290, 402, 404, 290,</div><div>- /* 1130 */ 66, 303, 175, 174, 109, 725, 726, 64, 890, 749,</div><div>+ /* 1130 */ 66, 303, 175, 174, 109, 725, 726, 64, 891, 749,</div><div> /* 1140 */ 335, 208, 208, 337, 239, 208, 66, 352, 632, 214,</div><div>- /* 1150 */ 855, 246, 109, 66, 109, 645, 645, 178, 655, 654,</div><div>+ /* 1150 */ 856, 246, 109, 66, 109, 645, 645, 178, 655, 654,</div><div> /* 1160 */ 109, 316, 690, 647, 69, 824, 719, 663, 208, 291,</div><div>- /* 1170 */ 817, 817, 813, 825, 214, 825, 630, 739, 106, 322,</div><div>- /* 1180 */ 761, 761, 227, 818, 168, 235, 843, 841, 339, 840,</div><div>+ /* 1170 */ 817, 817, 813, 826, 214, 826, 630, 739, 106, 322,</div><div>+ /* 1180 */ 761, 761, 227, 818, 168, 235, 844, 842, 339, 841,</div><div> /* 1190 */ 153, 345, 346, 241, 621, 244, 357, 666, 650, 649,</div><div> /* 1200 */ 158, 252, 249, 717, 750, 263, 393, 699, 815, 268,</div><div>- /* 1210 */ 814, 927, 269, 274, 872, 154, 135, 633, 619, 618,</div><div>- /* 1220 */ 124, 620, 869, 117, 64, 736, 325, 55, 330, 828,</div><div>+ /* 1210 */ 814, 928, 269, 274, 873, 154, 135, 633, 619, 618,</div><div>+ /* 1220 */ 124, 620, 870, 117, 64, 736, 325, 55, 330, 829,</div><div> /* 1230 */ 126, 350, 232, 189, 196, 144, 128, 129, 197, 147,</div><div> /* 1240 */ 363, 198, 130, 300, 647, 131, 669, 139, 348, 746,</div><div>- /* 1250 */ 378, 668, 284, 6, 63, 795, 845, 71, 211, 667,</div><div>+ /* 1250 */ 378, 668, 284, 6, 63, 795, 846, 71, 211, 667,</div><div> /* 1260 */ 304, 94, 383, 285, 660, 640, 21, 641, 65, 251,</div><div>- /* 1270 */ 639, 809, 659, 381, 881, 870, 224, 611, 614, 221,</div><div>+ /* 1270 */ 639, 809, 659, 381, 882, 871, 224, 611, 614, 221,</div><div> /* 1280 */ 311, 396, 223, 408, 409, 616, 179, 615, 612, 281,</div><div> /* 1290 */ 115, 313, 400, 123, 181, 823, 821, 183, 745, 125,</div><div>- /* 1300 */ 116, 120, 127, 679, 188, 831, 105, 204, 208, 132,</div><div>- /* 1310 */ 133, 839, 329, 707, 904, 136, 256, 134, 56, 708,</div><div>+ /* 1300 */ 116, 120, 127, 679, 188, 832, 105, 204, 208, 132,</div><div>+ /* 1310 */ 133, 840, 329, 707, 905, 136, 256, 134, 56, 708,</div><div> /* 1320 */ 258, 273, 271, 689, 706, 260, 270, 705, 262, 272,</div><div>- /* 1330 */ 57, 58, 59, 121, 842, 192, 838, 194, 8, 212,</div><div>+ /* 1330 */ 57, 58, 59, 121, 843, 192, 839, 194, 8, 212,</div><div> /* 1340 */ 12, 240, 253, 195, 213, 148, 624, 349, 199, 353,</div><div> /* 1350 */ 140, 358, 60, 13, 206, 247, 14, 118, 61, 687,</div><div> /* 1360 */ 764, 763, 658, 170, 713, 793, 15, 4, 62, 691,</div><div> /* 1370 */ 207, 171, 371, 173, 142, 16, 718, 17, 69, 66,</div><div>- /* 1380 */ 808, 794, 792, 797, 848, 216, 847, 389, 166, 215,</div><div>- /* 1390 */ 862, 150, 395, 608, 863, 151, 399, 796, 152, 1163,</div><div>+ /* 1380 */ 808, 794, 792, 797, 849, 216, 848, 389, 166, 215,</div><div>+ /* 1390 */ 863, 150, 395, 608, 864, 151, 399, 796, 152, 1165,</div><div> /* 1400 */ 762, 388, 631, 79, 277, 625,</div><div> };</div><div> static const YYCODETYPE yy_lookahead[] = {</div><div>@@ -767,48 +767,48 @@ static const short yy_reduce_ofst[] = {</div><div> /* 280 */ 1145, 1146, 1148, 1137, 1140, 1141, 1147,</div><div> };</div><div> static const YYACTIONTYPE yy_default[] = {</div><div>- /* 0 */ 1164, 1158, 1158, 1158, 1103, 1103, 1103, 1103, 1158, 999,</div><div>- /* 10 */ 1026, 1026, 1206, 1206, 1206, 1206, 1206, 1206, 1102, 1206,</div><div>- /* 20 */ 1206, 1206, 1206, 1158, 1003, 1032, 1206, 1206, 1206, 1104,</div><div>- /* 30 */ 1105, 1206, 1206, 1206, 1136, 1042, 1041, 1040, 1039, 1013,</div><div>- /* 40 */ 1037, 1030, 1034, 1104, 1098, 1099, 1097, 1101, 1105, 1206,</div><div>- /* 50 */ 1033, 1067, 1082, 1066, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 60 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 70 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 80 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 90 */ 1206, 1206, 1206, 1206, 1206, 1206, 1076, 1081, 1088, 1080,</div><div>- /* 100 */ 1077, 1069, 1068, 1070, 1071, 970, 1206, 1206, 1072, 1206,</div><div>- /* 110 */ 1206, 1073, 1085, 1084, 1083, 1173, 1172, 1206, 1206, 1110,</div><div>- /* 120 */ 1206, 1206, 1206, 1206, 1158, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 130 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 140 */ 1206, 928, 1206, 1206, 1206, 928, 1206, 1158, 1158, 1158,</div><div>- /* 150 */ 1158, 1158, 1158, 1003, 994, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 160 */ 1206, 1206, 1206, 999, 1206, 1206, 1206, 1206, 1131, 1206,</div><div>- /* 170 */ 1206, 999, 999, 999, 1206, 1001, 1206, 983, 993, 1206,</div><div>- /* 180 */ 1155, 1206, 1152, 1206, 1206, 1036, 1015, 1015, 1206, 1206,</div><div>- /* 190 */ 1205, 1036, 1206, 1205, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 200 */ 945, 1206, 1184, 1206, 942, 1206, 1026, 1206, 1206, 1015,</div><div>- /* 210 */ 1206, 1100, 1026, 1026, 1206, 1206, 1206, 1000, 993, 1206,</div><div>- /* 220 */ 1206, 1206, 1206, 1206, 1167, 1047, 973, 1036, 979, 979,</div><div>- /* 230 */ 979, 979, 1135, 1202, 922, 1036, 1047, 973, 973, 1036,</div><div>- /* 240 */ 922, 1111, 922, 922, 1111, 971, 971, 971, 960, 1111,</div><div>- /* 250 */ 971, 945, 971, 960, 971, 971, 1019, 1014, 1019, 1014,</div><div>- /* 260 */ 1019, 1014, 1019, 1014, 1106, 1206, 1111, 1115, 1115, 1111,</div><div>- /* 270 */ 1031, 1020, 1029, 1027, 1036, 963, 1170, 1170, 1166, 1166,</div><div>- /* 280 */ 1166, 1166, 912, 1179, 947, 947, 1179, 1206, 1206, 1206,</div><div>- /* 290 */ 1174, 1118, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 300 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 310 */ 1053, 1206, 909, 1206, 1206, 1206, 1153, 1206, 1206, 1197,</div><div>- /* 320 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1134, 1133, 1206,</div><div>- /* 330 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 340 */ 1206, 1206, 1204, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 350 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 360 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 985, 1206,</div><div>- /* 370 */ 1206, 1206, 1188, 1206, 1206, 1206, 1206, 1206, 1206, 1206,</div><div>- /* 380 */ 1028, 1206, 1021, 1206, 1206, 1194, 1206, 1206, 1206, 1206,</div><div>- /* 390 */ 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1160, 1206, 1206,</div><div>- /* 400 */ 1206, 1159, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 916,</div><div>- /* 410 */ 1206, 1206,</div><div>+ /* 0 */ 1166, 1160, 1160, 1160, 1104, 1104, 1104, 1104, 1160, 1000,</div><div>+ /* 10 */ 1027, 1027, 1208, 1208, 1208, 1208, 1208, 1208, 1103, 1208,</div><div>+ /* 20 */ 1208, 1208, 1208, 1160, 1004, 1033, 1208, 1208, 1208, 1105,</div><div>+ /* 30 */ 1106, 1208, 1208, 1208, 1138, 1043, 1042, 1041, 1040, 1014,</div><div>+ /* 40 */ 1038, 1031, 1035, 1105, 1099, 1100, 1098, 1102, 1106, 1208,</div><div>+ /* 50 */ 1034, 1068, 1083, 1067, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 60 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 70 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 80 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 90 */ 1208, 1208, 1208, 1208, 1208, 1208, 1077, 1082, 1089, 1081,</div><div>+ /* 100 */ 1078, 1070, 1069, 1071, 1072, 971, 1208, 1208, 1073, 1208,</div><div>+ /* 110 */ 1208, 1074, 1086, 1085, 1084, 1175, 1174, 1208, 1208, 1111,</div><div>+ /* 120 */ 1208, 1208, 1208, 1208, 1160, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 130 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 140 */ 1208, 929, 1208, 1208, 1208, 929, 1208, 1160, 1160, 1160,</div><div>+ /* 150 */ 1160, 1160, 1160, 1004, 995, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 160 */ 1208, 1208, 1208, 1000, 1208, 1208, 1208, 1208, 1133, 1208,</div><div>+ /* 170 */ 1208, 1000, 1000, 1000, 1208, 1002, 1208, 984, 994, 1208,</div><div>+ /* 180 */ 1157, 1208, 1154, 1208, 1125, 1037, 1016, 1016, 1208, 1208,</div><div>+ /* 190 */ 1207, 1037, 1208, 1207, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 200 */ 946, 1208, 1186, 1208, 943, 1208, 1027, 1208, 1208, 1016,</div><div>+ /* 210 */ 1208, 1101, 1027, 1027, 1208, 1208, 1208, 1001, 994, 1208,</div><div>+ /* 220 */ 1208, 1208, 1208, 1208, 1169, 1048, 974, 1037, 980, 980,</div><div>+ /* 230 */ 980, 980, 1137, 1204, 923, 1037, 1048, 974, 974, 1037,</div><div>+ /* 240 */ 923, 1112, 923, 923, 1112, 972, 972, 972, 961, 1112,</div><div>+ /* 250 */ 972, 946, 972, 961, 972, 972, 1020, 1015, 1020, 1015,</div><div>+ /* 260 */ 1020, 1015, 1020, 1015, 1107, 1208, 1112, 1116, 1116, 1112,</div><div>+ /* 270 */ 1032, 1021, 1030, 1028, 1037, 964, 1172, 1172, 1168, 1168,</div><div>+ /* 280 */ 1168, 1168, 913, 1181, 948, 948, 1181, 1208, 1208, 1208,</div><div>+ /* 290 */ 1176, 1119, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 300 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 310 */ 1054, 1208, 910, 1208, 1208, 1208, 1155, 1208, 1208, 1199,</div><div>+ /* 320 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1136, 1135, 1208,</div><div>+ /* 330 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 340 */ 1208, 1208, 1206, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 350 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 360 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 986, 1208,</div><div>+ /* 370 */ 1208, 1208, 1190, 1208, 1208, 1208, 1208, 1208, 1208, 1208,</div><div>+ /* 380 */ 1029, 1208, 1022, 1208, 1208, 1196, 1208, 1208, 1208, 1208,</div><div>+ /* 390 */ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1162, 1208, 1208,</div><div>+ /* 400 */ 1208, 1161, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 917,</div><div>+ /* 410 */ 1208, 1208,</div><div> };</div><div> /********** End of lemon-generated parsing tables *****************************/</div><div> </div><div>@@ -1270,88 +1270,89 @@ static const char *const yyRuleName[] = {</div><div> /* 214 */ "cmd ::= PRAGMA nm EQ minus_num",</div><div> /* 215 */ "cmd ::= PRAGMA nm LP minus_num RP",</div><div> /* 216 */ "cmd ::= PRAGMA nm EQ nm DOT nm",</div><div>- /* 217 */ "plus_num ::= PLUS INTEGER|FLOAT",</div><div>- /* 218 */ "minus_num ::= MINUS INTEGER|FLOAT",</div><div>- /* 219 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",</div><div>- /* 220 */ "trigger_decl ::= TRIGGER ifnotexists nm trigger_time trigger_event ON fullname foreach_clause when_clause",</div><div>- /* 221 */ "trigger_time ::= BEFORE",</div><div>- /* 222 */ "trigger_time ::= AFTER",</div><div>- /* 223 */ "trigger_time ::= INSTEAD OF",</div><div>- /* 224 */ "trigger_time ::=",</div><div>- /* 225 */ "trigger_event ::= DELETE|INSERT",</div><div>- /* 226 */ "trigger_event ::= UPDATE",</div><div>- /* 227 */ "trigger_event ::= UPDATE OF idlist",</div><div>- /* 228 */ "when_clause ::=",</div><div>- /* 229 */ "when_clause ::= WHEN expr",</div><div>- /* 230 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",</div><div>- /* 231 */ "trigger_cmd_list ::= trigger_cmd SEMI",</div><div>- /* 232 */ "trnm ::= nm DOT nm",</div><div>- /* 233 */ "tridxby ::= INDEXED BY nm",</div><div>- /* 234 */ "tridxby ::= NOT INDEXED",</div><div>- /* 235 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt",</div><div>- /* 236 */ "trigger_cmd ::= insert_cmd INTO trnm idlist_opt select",</div><div>- /* 237 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt",</div><div>- /* 238 */ "trigger_cmd ::= select",</div><div>- /* 239 */ "expr ::= RAISE LP IGNORE RP",</div><div>- /* 240 */ "expr ::= RAISE LP raisetype COMMA STRING RP",</div><div>- /* 241 */ "raisetype ::= ROLLBACK",</div><div>- /* 242 */ "raisetype ::= ABORT",</div><div>- /* 243 */ "raisetype ::= FAIL",</div><div>- /* 244 */ "cmd ::= DROP TRIGGER ifexists fullname",</div><div>- /* 245 */ "cmd ::= REINDEX",</div><div>- /* 246 */ "cmd ::= REINDEX nm",</div><div>- /* 247 */ "cmd ::= REINDEX nm ON nm",</div><div>- /* 248 */ "cmd ::= ANALYZE",</div><div>- /* 249 */ "cmd ::= ANALYZE nm",</div><div>- /* 250 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",</div><div>- /* 251 */ "with ::=",</div><div>- /* 252 */ "with ::= WITH wqlist",</div><div>- /* 253 */ "with ::= WITH RECURSIVE wqlist",</div><div>- /* 254 */ "wqlist ::= nm eidlist_opt AS LP select RP",</div><div>- /* 255 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",</div><div>- /* 256 */ "input ::= ecmd",</div><div>- /* 257 */ "explain ::=",</div><div>- /* 258 */ "cmdx ::= cmd",</div><div>- /* 259 */ "trans_opt ::=",</div><div>- /* 260 */ "trans_opt ::= TRANSACTION",</div><div>- /* 261 */ "trans_opt ::= TRANSACTION nm",</div><div>- /* 262 */ "savepoint_opt ::= SAVEPOINT",</div><div>- /* 263 */ "savepoint_opt ::=",</div><div>- /* 264 */ "cmd ::= create_table create_table_args",</div><div>- /* 265 */ "columnlist ::= columnlist COMMA columnname carglist",</div><div>- /* 266 */ "columnlist ::= columnname carglist",</div><div>- /* 267 */ "typetoken ::= typename",</div><div>- /* 268 */ "typename ::= ID|STRING",</div><div>- /* 269 */ "signed ::= plus_num",</div><div>- /* 270 */ "signed ::= minus_num",</div><div>- /* 271 */ "carglist ::= carglist ccons",</div><div>- /* 272 */ "carglist ::=",</div><div>- /* 273 */ "ccons ::= NULL onconf",</div><div>- /* 274 */ "conslist_opt ::= COMMA conslist",</div><div>- /* 275 */ "conslist ::= conslist tconscomma tcons",</div><div>- /* 276 */ "conslist ::= tcons",</div><div>- /* 277 */ "tconscomma ::=",</div><div>- /* 278 */ "defer_subclause_opt ::= defer_subclause",</div><div>- /* 279 */ "resolvetype ::= raisetype",</div><div>- /* 280 */ "selectnowith ::= oneselect",</div><div>- /* 281 */ "oneselect ::= values",</div><div>- /* 282 */ "sclp ::= selcollist COMMA",</div><div>- /* 283 */ "as ::= ID|STRING",</div><div>- /* 284 */ "join_nm ::= ID|INDEXED",</div><div>- /* 285 */ "join_nm ::= JOIN_KW",</div><div>- /* 286 */ "expr ::= term",</div><div>- /* 287 */ "exprlist ::= nexprlist",</div><div>- /* 288 */ "nmnum ::= plus_num",</div><div>- /* 289 */ "nmnum ::= STRING",</div><div>- /* 290 */ "nmnum ::= nm",</div><div>- /* 291 */ "nmnum ::= ON",</div><div>- /* 292 */ "nmnum ::= DELETE",</div><div>- /* 293 */ "nmnum ::= DEFAULT",</div><div>- /* 294 */ "plus_num ::= INTEGER|FLOAT",</div><div>- /* 295 */ "foreach_clause ::=",</div><div>- /* 296 */ "foreach_clause ::= FOR EACH ROW",</div><div>- /* 297 */ "trnm ::= nm",</div><div>- /* 298 */ "tridxby ::=",</div><div>+ /* 217 */ "cmd ::= PRAGMA",</div><div>+ /* 218 */ "plus_num ::= PLUS INTEGER|FLOAT",</div><div>+ /* 219 */ "minus_num ::= MINUS INTEGER|FLOAT",</div><div>+ /* 220 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",</div><div>+ /* 221 */ "trigger_decl ::= TRIGGER ifnotexists nm trigger_time trigger_event ON fullname foreach_clause when_clause",</div><div>+ /* 222 */ "trigger_time ::= BEFORE",</div><div>+ /* 223 */ "trigger_time ::= AFTER",</div><div>+ /* 224 */ "trigger_time ::= INSTEAD OF",</div><div>+ /* 225 */ "trigger_time ::=",</div><div>+ /* 226 */ "trigger_event ::= DELETE|INSERT",</div><div>+ /* 227 */ "trigger_event ::= UPDATE",</div><div>+ /* 228 */ "trigger_event ::= UPDATE OF idlist",</div><div>+ /* 229 */ "when_clause ::=",</div><div>+ /* 230 */ "when_clause ::= WHEN expr",</div><div>+ /* 231 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",</div><div>+ /* 232 */ "trigger_cmd_list ::= trigger_cmd SEMI",</div><div>+ /* 233 */ "trnm ::= nm DOT nm",</div><div>+ /* 234 */ "tridxby ::= INDEXED BY nm",</div><div>+ /* 235 */ "tridxby ::= NOT INDEXED",</div><div>+ /* 236 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt",</div><div>+ /* 237 */ "trigger_cmd ::= insert_cmd INTO trnm idlist_opt select",</div><div>+ /* 238 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt",</div><div>+ /* 239 */ "trigger_cmd ::= select",</div><div>+ /* 240 */ "expr ::= RAISE LP IGNORE RP",</div><div>+ /* 241 */ "expr ::= RAISE LP raisetype COMMA STRING RP",</div><div>+ /* 242 */ "raisetype ::= ROLLBACK",</div><div>+ /* 243 */ "raisetype ::= ABORT",</div><div>+ /* 244 */ "raisetype ::= FAIL",</div><div>+ /* 245 */ "cmd ::= DROP TRIGGER ifexists fullname",</div><div>+ /* 246 */ "cmd ::= REINDEX",</div><div>+ /* 247 */ "cmd ::= REINDEX nm",</div><div>+ /* 248 */ "cmd ::= REINDEX nm ON nm",</div><div>+ /* 249 */ "cmd ::= ANALYZE",</div><div>+ /* 250 */ "cmd ::= ANALYZE nm",</div><div>+ /* 251 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",</div><div>+ /* 252 */ "with ::=",</div><div>+ /* 253 */ "with ::= WITH wqlist",</div><div>+ /* 254 */ "with ::= WITH RECURSIVE wqlist",</div><div>+ /* 255 */ "wqlist ::= nm eidlist_opt AS LP select RP",</div><div>+ /* 256 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",</div><div>+ /* 257 */ "input ::= ecmd",</div><div>+ /* 258 */ "explain ::=",</div><div>+ /* 259 */ "cmdx ::= cmd",</div><div>+ /* 260 */ "trans_opt ::=",</div><div>+ /* 261 */ "trans_opt ::= TRANSACTION",</div><div>+ /* 262 */ "trans_opt ::= TRANSACTION nm",</div><div>+ /* 263 */ "savepoint_opt ::= SAVEPOINT",</div><div>+ /* 264 */ "savepoint_opt ::=",</div><div>+ /* 265 */ "cmd ::= create_table create_table_args",</div><div>+ /* 266 */ "columnlist ::= columnlist COMMA columnname carglist",</div><div>+ /* 267 */ "columnlist ::= columnname carglist",</div><div>+ /* 268 */ "typetoken ::= typename",</div><div>+ /* 269 */ "typename ::= ID|STRING",</div><div>+ /* 270 */ "signed ::= plus_num",</div><div>+ /* 271 */ "signed ::= minus_num",</div><div>+ /* 272 */ "carglist ::= carglist ccons",</div><div>+ /* 273 */ "carglist ::=",</div><div>+ /* 274 */ "ccons ::= NULL onconf",</div><div>+ /* 275 */ "conslist_opt ::= COMMA conslist",</div><div>+ /* 276 */ "conslist ::= conslist tconscomma tcons",</div><div>+ /* 277 */ "conslist ::= tcons",</div><div>+ /* 278 */ "tconscomma ::=",</div><div>+ /* 279 */ "defer_subclause_opt ::= defer_subclause",</div><div>+ /* 280 */ "resolvetype ::= raisetype",</div><div>+ /* 281 */ "selectnowith ::= oneselect",</div><div>+ /* 282 */ "oneselect ::= values",</div><div>+ /* 283 */ "sclp ::= selcollist COMMA",</div><div>+ /* 284 */ "as ::= ID|STRING",</div><div>+ /* 285 */ "join_nm ::= ID|INDEXED",</div><div>+ /* 286 */ "join_nm ::= JOIN_KW",</div><div>+ /* 287 */ "expr ::= term",</div><div>+ /* 288 */ "exprlist ::= nexprlist",</div><div>+ /* 289 */ "nmnum ::= plus_num",</div><div>+ /* 290 */ "nmnum ::= STRING",</div><div>+ /* 291 */ "nmnum ::= nm",</div><div>+ /* 292 */ "nmnum ::= ON",</div><div>+ /* 293 */ "nmnum ::= DELETE",</div><div>+ /* 294 */ "nmnum ::= DEFAULT",</div><div>+ /* 295 */ "plus_num ::= INTEGER|FLOAT",</div><div>+ /* 296 */ "foreach_clause ::=",</div><div>+ /* 297 */ "foreach_clause ::= FOR EACH ROW",</div><div>+ /* 298 */ "trnm ::= nm",</div><div>+ /* 299 */ "tridxby ::=",</div><div> };</div><div> #endif /* NDEBUG */</div><div> </div><div>@@ -1469,7 +1470,7 @@ static void yy_destructor(</div><div> {</div><div> #line 386 "parse.y"</div><div> sqlite3SelectDelete(pParse->db, (yypminor->yy279));</div><div>-#line 1473 "parse.c"</div><div>+#line 1474 "parse.c"</div><div> }</div><div> break;</div><div> case 160: /* term */</div><div>@@ -1477,7 +1478,7 @@ sqlite3SelectDelete(pParse->db, (yypminor->yy279));</div><div> {</div><div> #line 829 "parse.y"</div><div> sqlite3ExprDelete(pParse->db, (yypminor->yy162).pExpr);</div><div>-#line 1481 "parse.c"</div><div>+#line 1482 "parse.c"</div><div> }</div><div> break;</div><div> case 165: /* eidlist_opt */</div><div>@@ -1495,7 +1496,7 @@ sqlite3ExprDelete(pParse->db, (yypminor->yy162).pExpr);</div><div> {</div><div> #line 1261 "parse.y"</div><div> sqlite3ExprListDelete(pParse->db, (yypminor->yy382));</div><div>-#line 1499 "parse.c"</div><div>+#line 1500 "parse.c"</div><div> }</div><div> break;</div><div> case 181: /* fullname */</div><div>@@ -1505,15 +1506,15 @@ sqlite3ExprListDelete(pParse->db, (yypminor->yy382));</div><div> {</div><div> #line 613 "parse.y"</div><div> sqlite3SrcListDelete(pParse->db, (yypminor->yy387));</div><div>-#line 1509 "parse.c"</div><div>+#line 1510 "parse.c"</div><div> }</div><div> break;</div><div> case 184: /* with */</div><div> case 229: /* wqlist */</div><div> {</div><div>-#line 1507 "parse.y"</div><div>+#line 1510 "parse.y"</div><div> sqlite3WithDelete(pParse->db, (yypminor->yy151));</div><div>-#line 1517 "parse.c"</div><div>+#line 1518 "parse.c"</div><div> }</div><div> break;</div><div> case 189: /* where_opt */</div><div>@@ -1525,7 +1526,7 @@ sqlite3WithDelete(pParse->db, (yypminor->yy151));</div><div> {</div><div> #line 738 "parse.y"</div><div> sqlite3ExprDelete(pParse->db, (yypminor->yy362));</div><div>-#line 1529 "parse.c"</div><div>+#line 1530 "parse.c"</div><div> }</div><div> break;</div><div> case 204: /* using_opt */</div><div>@@ -1534,22 +1535,22 @@ sqlite3ExprDelete(pParse->db, (yypminor->yy362));</div><div> {</div><div> #line 650 "parse.y"</div><div> sqlite3IdListDelete(pParse->db, (yypminor->yy40));</div><div>-#line 1538 "parse.c"</div><div>+#line 1539 "parse.c"</div><div> }</div><div> break;</div><div> case 221: /* trigger_cmd_list */</div><div> case 226: /* trigger_cmd */</div><div> {</div><div>-#line 1381 "parse.y"</div><div>+#line 1384 "parse.y"</div><div> sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy427));</div><div>-#line 1546 "parse.c"</div><div>+#line 1547 "parse.c"</div><div> }</div><div> break;</div><div> case 223: /* trigger_event */</div><div> {</div><div>-#line 1367 "parse.y"</div><div>+#line 1370 "parse.y"</div><div> sqlite3IdListDelete(pParse->db, (yypminor->yy10).b);</div><div>-#line 1553 "parse.c"</div><div>+#line 1554 "parse.c"</div><div> }</div><div> break;</div><div> /********* End destructor definitions *****************************************/</div><div>@@ -1724,7 +1725,7 @@ static void yyStackOverflow(yyParser *yypParser){</div><div> #line 41 "parse.y"</div><div> </div><div> sqlite3ErrorMsg(pParse, "parser stack overflow");</div><div>-#line 1728 "parse.c"</div><div>+#line 1729 "parse.c"</div><div> /******** End %stack_overflow code ********************************************/</div><div> sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */</div><div> }</div><div>@@ -2015,6 +2016,7 @@ static const struct {</div><div> { 140, 4 },</div><div> { 140, 5 },</div><div> { 140, 6 },</div><div>+ { 140, 1 },</div><div> { 157, 2 },</div><div> { 158, 2 },</div><div> { 140, 5 },</div><div>@@ -2163,83 +2165,83 @@ static void yy_reduce(</div><div> case 0: /* ecmd ::= explain cmdx SEMI */</div><div> #line 111 "parse.y"</div><div> { sqlite3FinishCoding(pParse); }</div><div>-#line 2167 "parse.c"</div><div>+#line 2169 "parse.c"</div><div> break;</div><div> case 1: /* ecmd ::= SEMI */</div><div> #line 112 "parse.y"</div><div> {</div><div> sqlite3ErrorMsg(pParse, "syntax error: empty request");</div><div> }</div><div>-#line 2174 "parse.c"</div><div>+#line 2176 "parse.c"</div><div> break;</div><div> case 2: /* explain ::= EXPLAIN */</div><div> #line 117 "parse.y"</div><div> { pParse->explain = 1; }</div><div>-#line 2179 "parse.c"</div><div>+#line 2181 "parse.c"</div><div> break;</div><div> case 3: /* explain ::= EXPLAIN QUERY PLAN */</div><div> #line 118 "parse.y"</div><div> { pParse->explain = 2; }</div><div>-#line 2184 "parse.c"</div><div>+#line 2186 "parse.c"</div><div> break;</div><div> case 4: /* cmd ::= BEGIN transtype trans_opt */</div><div> #line 150 "parse.y"</div><div> {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy52);}</div><div>-#line 2189 "parse.c"</div><div>+#line 2191 "parse.c"</div><div> break;</div><div> case 5: /* transtype ::= */</div><div> #line 155 "parse.y"</div><div> {yymsp[1].minor.yy52 = TK_DEFERRED;}</div><div>-#line 2194 "parse.c"</div><div>+#line 2196 "parse.c"</div><div> break;</div><div> case 6: /* transtype ::= DEFERRED */</div><div> #line 156 "parse.y"</div><div> {yymsp[0].minor.yy52 = yymsp[0].major; /*A-overwrites-X*/}</div><div>-#line 2199 "parse.c"</div><div>+#line 2201 "parse.c"</div><div> break;</div><div> case 7: /* cmd ::= COMMIT trans_opt */</div><div> case 8: /* cmd ::= END trans_opt */ yytestcase(yyruleno==8);</div><div> #line 157 "parse.y"</div><div> {sqlite3CommitTransaction(pParse);}</div><div>-#line 2205 "parse.c"</div><div>+#line 2207 "parse.c"</div><div> break;</div><div> case 9: /* cmd ::= ROLLBACK trans_opt */</div><div> #line 159 "parse.y"</div><div> {sqlite3RollbackTransaction(pParse);}</div><div>-#line 2210 "parse.c"</div><div>+#line 2212 "parse.c"</div><div> break;</div><div> case 10: /* cmd ::= SAVEPOINT nm */</div><div> #line 163 "parse.y"</div><div> {</div><div> sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0);</div><div> }</div><div>-#line 2217 "parse.c"</div><div>+#line 2219 "parse.c"</div><div> break;</div><div> case 11: /* cmd ::= RELEASE savepoint_opt nm */</div><div> #line 166 "parse.y"</div><div> {</div><div> sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0);</div><div> }</div><div>-#line 2224 "parse.c"</div><div>+#line 2226 "parse.c"</div><div> break;</div><div> case 12: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */</div><div> #line 169 "parse.y"</div><div> {</div><div> sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0);</div><div> }</div><div>-#line 2231 "parse.c"</div><div>+#line 2233 "parse.c"</div><div> break;</div><div> case 13: /* create_table ::= createkw TABLE ifnotexists nm */</div><div> #line 176 "parse.y"</div><div> {</div><div> sqlite3StartTable(pParse,&yymsp[0].minor.yy0,yymsp[-1].minor.yy52);</div><div> }</div><div>-#line 2238 "parse.c"</div><div>+#line 2240 "parse.c"</div><div> break;</div><div> case 14: /* createkw ::= CREATE */</div><div> #line 179 "parse.y"</div><div> {disableLookaside(pParse);}</div><div>-#line 2243 "parse.c"</div><div>+#line 2245 "parse.c"</div><div> break;</div><div> case 15: /* ifnotexists ::= */</div><div> case 38: /* autoinc ::= */ yytestcase(yyruleno==38);</div><div>@@ -2250,19 +2252,19 @@ static void yy_reduce(</div><div> case 208: /* collate ::= */ yytestcase(yyruleno==208);</div><div> #line 182 "parse.y"</div><div> {yymsp[1].minor.yy52 = 0;}</div><div>-#line 2254 "parse.c"</div><div>+#line 2256 "parse.c"</div><div> break;</div><div> case 16: /* ifnotexists ::= IF NOT EXISTS */</div><div> #line 183 "parse.y"</div><div> {yymsp[-2].minor.yy52 = 1;}</div><div>-#line 2259 "parse.c"</div><div>+#line 2261 "parse.c"</div><div> break;</div><div> case 17: /* create_table_args ::= LP columnlist conslist_opt RP */</div><div> #line 185 "parse.y"</div><div> {</div><div> sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);</div><div> }</div><div>-#line 2266 "parse.c"</div><div>+#line 2268 "parse.c"</div><div> break;</div><div> case 18: /* create_table_args ::= AS select */</div><div> #line 188 "parse.y"</div><div>@@ -2270,12 +2272,12 @@ static void yy_reduce(</div><div> sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy279);</div><div> sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy279);</div><div> }</div><div>-#line 2274 "parse.c"</div><div>+#line 2276 "parse.c"</div><div> break;</div><div> case 19: /* columnname ::= nm typetoken */</div><div> #line 194 "parse.y"</div><div> {sqlite3AddColumn(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}</div><div>-#line 2279 "parse.c"</div><div>+#line 2281 "parse.c"</div><div> break;</div><div> case 20: /* nm ::= ID|INDEXED */</div><div> #line 225 "parse.y"</div><div>@@ -2284,50 +2286,50 @@ static void yy_reduce(</div><div> sqlite3ErrorMsg(pParse, "keyword \"%T\" is reserved", &yymsp[0].minor.yy0);</div><div> }</div><div> }</div><div>-#line 2288 "parse.c"</div><div>+#line 2290 "parse.c"</div><div> break;</div><div> case 21: /* typetoken ::= */</div><div> case 56: /* conslist_opt ::= */ yytestcase(yyruleno==56);</div><div> case 92: /* as ::= */ yytestcase(yyruleno==92);</div><div> #line 236 "parse.y"</div><div> {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;}</div><div>-#line 2295 "parse.c"</div><div>+#line 2297 "parse.c"</div><div> break;</div><div> case 22: /* typetoken ::= typename LP signed RP */</div><div> #line 238 "parse.y"</div><div> {</div><div> yymsp[-3].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z);</div><div> }</div><div>-#line 2302 "parse.c"</div><div>+#line 2304 "parse.c"</div><div> break;</div><div> case 23: /* typetoken ::= typename LP signed COMMA signed RP */</div><div> #line 241 "parse.y"</div><div> {</div><div> yymsp[-5].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z);</div><div> }</div><div>-#line 2309 "parse.c"</div><div>+#line 2311 "parse.c"</div><div> break;</div><div> case 24: /* typename ::= typename ID|STRING */</div><div> #line 246 "parse.y"</div><div> {yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);}</div><div>-#line 2314 "parse.c"</div><div>+#line 2316 "parse.c"</div><div> break;</div><div> case 25: /* ccons ::= CONSTRAINT nm */</div><div> case 58: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==58);</div><div> #line 255 "parse.y"</div><div> {pParse->constraintName = yymsp[0].minor.yy0;}</div><div>-#line 2320 "parse.c"</div><div>+#line 2322 "parse.c"</div><div> break;</div><div> case 26: /* ccons ::= DEFAULT term */</div><div> case 28: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==28);</div><div> #line 256 "parse.y"</div><div> {sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy162);}</div><div>-#line 2326 "parse.c"</div><div>+#line 2328 "parse.c"</div><div> break;</div><div> case 27: /* ccons ::= DEFAULT LP expr RP */</div><div> #line 257 "parse.y"</div><div> {sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy162);}</div><div>-#line 2331 "parse.c"</div><div>+#line 2333 "parse.c"</div><div> break;</div><div> case 29: /* ccons ::= DEFAULT MINUS term */</div><div> #line 259 "parse.y"</div><div>@@ -2338,7 +2340,7 @@ static void yy_reduce(</div><div> v.zEnd = yymsp[0].minor.yy162.zEnd;</div><div> sqlite3AddDefaultValue(pParse,&v);</div><div> }</div><div>-#line 2342 "parse.c"</div><div>+#line 2344 "parse.c"</div><div> break;</div><div> case 30: /* ccons ::= DEFAULT ID|INDEXED */</div><div> #line 266 "parse.y"</div><div>@@ -2347,115 +2349,115 @@ static void yy_reduce(</div><div> spanExpr(&v, pParse, TK_STRING, yymsp[0].minor.yy0);</div><div> sqlite3AddDefaultValue(pParse,&v);</div><div> }</div><div>-#line 2351 "parse.c"</div><div>+#line 2353 "parse.c"</div><div> break;</div><div> case 31: /* ccons ::= NOT NULL onconf */</div><div> #line 276 "parse.y"</div><div> {sqlite3AddNotNull(pParse, yymsp[0].minor.yy52);}</div><div>-#line 2356 "parse.c"</div><div>+#line 2358 "parse.c"</div><div> break;</div><div> case 32: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */</div><div> #line 278 "parse.y"</div><div> {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy52,yymsp[0].minor.yy52,yymsp[-2].minor.yy52);}</div><div>-#line 2361 "parse.c"</div><div>+#line 2363 "parse.c"</div><div> break;</div><div> case 33: /* ccons ::= UNIQUE onconf */</div><div> #line 279 "parse.y"</div><div> {sqlite3CreateIndex(pParse,0,0,0,yymsp[0].minor.yy52,0,0,0,0,</div><div> SQLITE_IDXTYPE_UNIQUE);}</div><div>-#line 2367 "parse.c"</div><div>+#line 2369 "parse.c"</div><div> break;</div><div> case 34: /* ccons ::= CHECK LP expr RP */</div><div> #line 281 "parse.y"</div><div> {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy162.pExpr);}</div><div>-#line 2372 "parse.c"</div><div>+#line 2374 "parse.c"</div><div> break;</div><div> case 35: /* ccons ::= REFERENCES nm eidlist_opt refargs */</div><div> #line 283 "parse.y"</div><div> {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy382,yymsp[0].minor.yy52);}</div><div>-#line 2377 "parse.c"</div><div>+#line 2379 "parse.c"</div><div> break;</div><div> case 36: /* ccons ::= defer_subclause */</div><div> #line 284 "parse.y"</div><div> {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy52);}</div><div>-#line 2382 "parse.c"</div><div>+#line 2384 "parse.c"</div><div> break;</div><div> case 37: /* ccons ::= COLLATE ID|INDEXED */</div><div> #line 285 "parse.y"</div><div> {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}</div><div>-#line 2387 "parse.c"</div><div>+#line 2389 "parse.c"</div><div> break;</div><div> case 39: /* autoinc ::= AUTOINCR */</div><div> #line 290 "parse.y"</div><div> {yymsp[0].minor.yy52 = 1;}</div><div>-#line 2392 "parse.c"</div><div>+#line 2394 "parse.c"</div><div> break;</div><div> case 40: /* refargs ::= */</div><div> #line 298 "parse.y"</div><div> { yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_NONE*0x0101; /* EV: R-19803-45884 */}</div><div>-#line 2397 "parse.c"</div><div>+#line 2399 "parse.c"</div><div> break;</div><div> case 41: /* refargs ::= refargs refarg */</div><div> #line 299 "parse.y"</div><div> { yymsp[-1].minor.yy52 = (yymsp[-1].minor.yy52 & ~yymsp[0].minor.yy107.mask) | yymsp[0].minor.yy107.value; }</div><div>-#line 2402 "parse.c"</div><div>+#line 2404 "parse.c"</div><div> break;</div><div> case 42: /* refarg ::= MATCH nm */</div><div> #line 301 "parse.y"</div><div> { yymsp[-1].minor.yy107.value = 0; yymsp[-1].minor.yy107.mask = 0x000000; }</div><div>-#line 2407 "parse.c"</div><div>+#line 2409 "parse.c"</div><div> break;</div><div> case 43: /* refarg ::= ON INSERT refact */</div><div> #line 302 "parse.y"</div><div> { yymsp[-2].minor.yy107.value = 0; yymsp[-2].minor.yy107.mask = 0x000000; }</div><div>-#line 2412 "parse.c"</div><div>+#line 2414 "parse.c"</div><div> break;</div><div> case 44: /* refarg ::= ON DELETE refact */</div><div> #line 303 "parse.y"</div><div> { yymsp[-2].minor.yy107.value = yymsp[0].minor.yy52; yymsp[-2].minor.yy107.mask = 0x0000ff; }</div><div>-#line 2417 "parse.c"</div><div>+#line 2419 "parse.c"</div><div> break;</div><div> case 45: /* refarg ::= ON UPDATE refact */</div><div> #line 304 "parse.y"</div><div> { yymsp[-2].minor.yy107.value = yymsp[0].minor.yy52<<8; yymsp[-2].minor.yy107.mask = 0x00ff00; }</div><div>-#line 2422 "parse.c"</div><div>+#line 2424 "parse.c"</div><div> break;</div><div> case 46: /* refact ::= SET NULL */</div><div> #line 306 "parse.y"</div><div> { yymsp[-1].minor.yy52 = OE_SetNull; /* EV: R-33326-45252 */}</div><div>-#line 2427 "parse.c"</div><div>+#line 2429 "parse.c"</div><div> break;</div><div> case 47: /* refact ::= SET DEFAULT */</div><div> #line 307 "parse.y"</div><div> { yymsp[-1].minor.yy52 = OE_SetDflt; /* EV: R-33326-45252 */}</div><div>-#line 2432 "parse.c"</div><div>+#line 2434 "parse.c"</div><div> break;</div><div> case 48: /* refact ::= CASCADE */</div><div> #line 308 "parse.y"</div><div> { yymsp[0].minor.yy52 = OE_Cascade; /* EV: R-33326-45252 */}</div><div>-#line 2437 "parse.c"</div><div>+#line 2439 "parse.c"</div><div> break;</div><div> case 49: /* refact ::= RESTRICT */</div><div> #line 309 "parse.y"</div><div> { yymsp[0].minor.yy52 = OE_Restrict; /* EV: R-33326-45252 */}</div><div>-#line 2442 "parse.c"</div><div>+#line 2444 "parse.c"</div><div> break;</div><div> case 50: /* refact ::= NO ACTION */</div><div> #line 310 "parse.y"</div><div> { yymsp[-1].minor.yy52 = ON_CONFLICT_ACTION_NONE; /* EV: R-33326-45252 */}</div><div>-#line 2447 "parse.c"</div><div>+#line 2449 "parse.c"</div><div> break;</div><div> case 51: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */</div><div> #line 312 "parse.y"</div><div> {yymsp[-2].minor.yy52 = 0;}</div><div>-#line 2452 "parse.c"</div><div>+#line 2454 "parse.c"</div><div> break;</div><div> case 52: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */</div><div> case 67: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==67);</div><div> case 138: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==138);</div><div> #line 313 "parse.y"</div><div> {yymsp[-1].minor.yy52 = yymsp[0].minor.yy52;}</div><div>-#line 2459 "parse.c"</div><div>+#line 2461 "parse.c"</div><div> break;</div><div> case 54: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */</div><div> case 71: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==71);</div><div>@@ -2464,33 +2466,33 @@ static void yy_reduce(</div><div> case 209: /* collate ::= COLLATE ID|INDEXED */ yytestcase(yyruleno==209);</div><div> #line 316 "parse.y"</div><div> {yymsp[-1].minor.yy52 = 1;}</div><div>-#line 2468 "parse.c"</div><div>+#line 2470 "parse.c"</div><div> break;</div><div> case 55: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */</div><div> #line 317 "parse.y"</div><div> {yymsp[-1].minor.yy52 = 0;}</div><div>-#line 2473 "parse.c"</div><div>+#line 2475 "parse.c"</div><div> break;</div><div> case 57: /* tconscomma ::= COMMA */</div><div> #line 323 "parse.y"</div><div> {pParse->constraintName.n = 0;}</div><div>-#line 2478 "parse.c"</div><div>+#line 2480 "parse.c"</div><div> break;</div><div> case 59: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */</div><div> #line 327 "parse.y"</div><div> {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy382,yymsp[0].minor.yy52,yymsp[-2].minor.yy52,0);}</div><div>-#line 2483 "parse.c"</div><div>+#line 2485 "parse.c"</div><div> break;</div><div> case 60: /* tcons ::= UNIQUE LP sortlist RP onconf */</div><div> #line 329 "parse.y"</div><div> {sqlite3CreateIndex(pParse,0,0,yymsp[-2].minor.yy382,yymsp[0].minor.yy52,0,0,0,0,</div><div> SQLITE_IDXTYPE_UNIQUE);}</div><div>-#line 2489 "parse.c"</div><div>+#line 2491 "parse.c"</div><div> break;</div><div> case 61: /* tcons ::= CHECK LP expr RP onconf */</div><div> #line 332 "parse.y"</div><div> {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy162.pExpr);}</div><div>-#line 2494 "parse.c"</div><div>+#line 2496 "parse.c"</div><div> break;</div><div> case 62: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */</div><div> #line 334 "parse.y"</div><div>@@ -2498,50 +2500,50 @@ static void yy_reduce(</div><div> sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy382, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy382, yymsp[-1].minor.yy52);</div><div> sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy52);</div><div> }</div><div>-#line 2502 "parse.c"</div><div>+#line 2504 "parse.c"</div><div> break;</div><div> case 64: /* onconf ::= */</div><div> case 66: /* orconf ::= */ yytestcase(yyruleno==66);</div><div> #line 348 "parse.y"</div><div> {yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_DEFAULT;}</div><div>-#line 2508 "parse.c"</div><div>+#line 2510 "parse.c"</div><div> break;</div><div> case 65: /* onconf ::= ON CONFLICT resolvetype */</div><div> #line 349 "parse.y"</div><div> {yymsp[-2].minor.yy52 = yymsp[0].minor.yy52;}</div><div>-#line 2513 "parse.c"</div><div>+#line 2515 "parse.c"</div><div> break;</div><div> case 68: /* resolvetype ::= IGNORE */</div><div> #line 353 "parse.y"</div><div> {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_IGNORE;}</div><div>-#line 2518 "parse.c"</div><div>+#line 2520 "parse.c"</div><div> break;</div><div> case 69: /* resolvetype ::= REPLACE */</div><div> case 139: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==139);</div><div> #line 354 "parse.y"</div><div> {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_REPLACE;}</div><div>-#line 2524 "parse.c"</div><div>+#line 2526 "parse.c"</div><div> break;</div><div> case 70: /* cmd ::= DROP TABLE ifexists fullname */</div><div> #line 358 "parse.y"</div><div> {</div><div> sqlite3DropTable(pParse, yymsp[0].minor.yy387, 0, yymsp[-1].minor.yy52);</div><div> }</div><div>-#line 2531 "parse.c"</div><div>+#line 2533 "parse.c"</div><div> break;</div><div> case 73: /* cmd ::= createkw VIEW ifnotexists nm eidlist_opt AS select */</div><div> #line 369 "parse.y"</div><div> {</div><div> sqlite3CreateView(pParse, &yymsp[-6].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy382, yymsp[0].minor.yy279, yymsp[-4].minor.yy52);</div><div> }</div><div>-#line 2538 "parse.c"</div><div>+#line 2540 "parse.c"</div><div> break;</div><div> case 74: /* cmd ::= DROP VIEW ifexists fullname */</div><div> #line 372 "parse.y"</div><div> {</div><div> sqlite3DropTable(pParse, yymsp[0].minor.yy387, 1, yymsp[-1].minor.yy52);</div><div> }</div><div>-#line 2545 "parse.c"</div><div>+#line 2547 "parse.c"</div><div> break;</div><div> case 75: /* cmd ::= select */</div><div> #line 379 "parse.y"</div><div>@@ -2550,7 +2552,7 @@ static void yy_reduce(</div><div> sqlite3Select(pParse, yymsp[0].minor.yy279, &dest);</div><div> sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy279);</div><div> }</div><div>-#line 2554 "parse.c"</div><div>+#line 2556 "parse.c"</div><div> break;</div><div> case 76: /* select ::= with selectnowith */</div><div> #line 416 "parse.y"</div><div>@@ -2564,7 +2566,7 @@ static void yy_reduce(</div><div> }</div><div> yymsp[-1].minor.yy279 = p; /*A-overwrites-W*/</div><div> }</div><div>-#line 2568 "parse.c"</div><div>+#line 2570 "parse.c"</div><div> break;</div><div> case 77: /* selectnowith ::= selectnowith multiselect_op oneselect */</div><div> #line 429 "parse.y"</div><div>@@ -2590,18 +2592,18 @@ static void yy_reduce(</div><div> }</div><div> yymsp[-2].minor.yy279 = pRhs;</div><div> }</div><div>-#line 2594 "parse.c"</div><div>+#line 2596 "parse.c"</div><div> break;</div><div> case 78: /* multiselect_op ::= UNION */</div><div> case 80: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==80);</div><div> #line 452 "parse.y"</div><div> {yymsp[0].minor.yy52 = yymsp[0].major; /*A-overwrites-OP*/}</div><div>-#line 2600 "parse.c"</div><div>+#line 2602 "parse.c"</div><div> break;</div><div> case 79: /* multiselect_op ::= UNION ALL */</div><div> #line 453 "parse.y"</div><div> {yymsp[-1].minor.yy52 = TK_ALL;}</div><div>-#line 2605 "parse.c"</div><div>+#line 2607 "parse.c"</div><div> break;</div><div> case 81: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */</div><div> #line 457 "parse.y"</div><div>@@ -2635,14 +2637,14 @@ static void yy_reduce(</div><div> }</div><div> #endif /* SELECTRACE_ENABLED */</div><div> }</div><div>-#line 2639 "parse.c"</div><div>+#line 2641 "parse.c"</div><div> break;</div><div> case 82: /* values ::= VALUES LP nexprlist RP */</div><div> #line 491 "parse.y"</div><div> {</div><div> yymsp[-3].minor.yy279 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy382,0,0,0,0,0,SF_Values,0,0);</div><div> }</div><div>-#line 2646 "parse.c"</div><div>+#line 2648 "parse.c"</div><div> break;</div><div> case 83: /* values ::= values COMMA LP exprlist RP */</div><div> #line 494 "parse.y"</div><div>@@ -2658,17 +2660,17 @@ static void yy_reduce(</div><div> yymsp[-4].minor.yy279 = pLeft;</div><div> }</div><div> }</div><div>-#line 2662 "parse.c"</div><div>+#line 2664 "parse.c"</div><div> break;</div><div> case 84: /* distinct ::= DISTINCT */</div><div> #line 511 "parse.y"</div><div> {yymsp[0].minor.yy52 = SF_Distinct;}</div><div>-#line 2667 "parse.c"</div><div>+#line 2669 "parse.c"</div><div> break;</div><div> case 85: /* distinct ::= ALL */</div><div> #line 512 "parse.y"</div><div> {yymsp[0].minor.yy52 = SF_All;}</div><div>-#line 2672 "parse.c"</div><div>+#line 2674 "parse.c"</div><div> break;</div><div> case 87: /* sclp ::= */</div><div> case 113: /* orderby_opt ::= */ yytestcase(yyruleno==113);</div><div>@@ -2678,7 +2680,7 @@ static void yy_reduce(</div><div> case 204: /* eidlist_opt ::= */ yytestcase(yyruleno==204);</div><div> #line 525 "parse.y"</div><div> {yymsp[1].minor.yy382 = 0;}</div><div>-#line 2682 "parse.c"</div><div>+#line 2684 "parse.c"</div><div> break;</div><div> case 88: /* selcollist ::= sclp expr as */</div><div> #line 526 "parse.y"</div><div>@@ -2687,7 +2689,7 @@ static void yy_reduce(</div><div> if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-2].minor.yy382, &yymsp[0].minor.yy0, 1);</div><div> sqlite3ExprListSetSpan(pParse,yymsp[-2].minor.yy382,&yymsp[-1].minor.yy162);</div><div> }</div><div>-#line 2691 "parse.c"</div><div>+#line 2693 "parse.c"</div><div> break;</div><div> case 89: /* selcollist ::= sclp STAR */</div><div> #line 531 "parse.y"</div><div>@@ -2695,7 +2697,7 @@ static void yy_reduce(</div><div> Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);</div><div> yymsp[-1].minor.yy382 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy382, p);</div><div> }</div><div>-#line 2699 "parse.c"</div><div>+#line 2701 "parse.c"</div><div> break;</div><div> case 90: /* selcollist ::= sclp nm DOT STAR */</div><div> #line 535 "parse.y"</div><div>@@ -2705,19 +2707,19 @@ static void yy_reduce(</div><div> Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);</div><div> yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382, pDot);</div><div> }</div><div>-#line 2709 "parse.c"</div><div>+#line 2711 "parse.c"</div><div> break;</div><div> case 91: /* as ::= AS nm */</div><div>- case 217: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==217);</div><div>- case 218: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==218);</div><div>+ case 218: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==218);</div><div>+ case 219: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==219);</div><div> #line 546 "parse.y"</div><div> {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}</div><div>-#line 2716 "parse.c"</div><div>+#line 2718 "parse.c"</div><div> break;</div><div> case 93: /* from ::= */</div><div> #line 560 "parse.y"</div><div> {yymsp[1].minor.yy387 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy387));}</div><div>-#line 2721 "parse.c"</div><div>+#line 2723 "parse.c"</div><div> break;</div><div> case 94: /* from ::= FROM seltablist */</div><div> #line 561 "parse.y"</div><div>@@ -2725,19 +2727,19 @@ static void yy_reduce(</div><div> yymsp[-1].minor.yy387 = yymsp[0].minor.yy387;</div><div> sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy387);</div><div> }</div><div>-#line 2729 "parse.c"</div><div>+#line 2731 "parse.c"</div><div> break;</div><div> case 95: /* stl_prefix ::= seltablist joinop */</div><div> #line 569 "parse.y"</div><div> {</div><div> 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;</div><div> }</div><div>-#line 2736 "parse.c"</div><div>+#line 2738 "parse.c"</div><div> break;</div><div> case 96: /* stl_prefix ::= */</div><div> #line 572 "parse.y"</div><div> {yymsp[1].minor.yy387 = 0;}</div><div>-#line 2741 "parse.c"</div><div>+#line 2743 "parse.c"</div><div> break;</div><div> case 97: /* seltablist ::= stl_prefix nm as indexed_opt on_opt using_opt */</div><div> #line 574 "parse.y"</div><div>@@ -2745,7 +2747,7 @@ static void yy_reduce(</div><div> 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);</div><div> sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy387, &yymsp[-2].minor.yy0);</div><div> }</div><div>-#line 2749 "parse.c"</div><div>+#line 2751 "parse.c"</div><div> break;</div><div> case 98: /* seltablist ::= stl_prefix nm LP exprlist RP as on_opt using_opt */</div><div> #line 579 "parse.y"</div><div>@@ -2753,14 +2755,14 @@ static void yy_reduce(</div><div> 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);</div><div> sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy387, yymsp[-4].minor.yy382);</div><div> }</div><div>-#line 2757 "parse.c"</div><div>+#line 2759 "parse.c"</div><div> break;</div><div> case 99: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */</div><div> #line 585 "parse.y"</div><div> {</div><div> 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);</div><div> }</div><div>-#line 2764 "parse.c"</div><div>+#line 2766 "parse.c"</div><div> break;</div><div> case 100: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */</div><div> #line 589 "parse.y"</div><div>@@ -2785,32 +2787,32 @@ static void yy_reduce(</div><div> yymsp[-6].minor.yy387 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy387,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy362,yymsp[0].minor.yy40);</div><div> }</div><div> }</div><div>-#line 2789 "parse.c"</div><div>+#line 2791 "parse.c"</div><div> break;</div><div> case 101: /* fullname ::= nm */</div><div> #line 615 "parse.y"</div><div> {yymsp[0].minor.yy387 = sqlite3SrcListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}</div><div>-#line 2794 "parse.c"</div><div>+#line 2796 "parse.c"</div><div> break;</div><div> case 102: /* joinop ::= COMMA|JOIN */</div><div> #line 621 "parse.y"</div><div> { yymsp[0].minor.yy52 = JT_INNER; }</div><div>-#line 2799 "parse.c"</div><div>+#line 2801 "parse.c"</div><div> break;</div><div> case 103: /* joinop ::= JOIN_KW JOIN */</div><div> #line 623 "parse.y"</div><div> {yymsp[-1].minor.yy52 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}</div><div>-#line 2804 "parse.c"</div><div>+#line 2806 "parse.c"</div><div> break;</div><div> case 104: /* joinop ::= JOIN_KW join_nm JOIN */</div><div> #line 625 "parse.y"</div><div> {yymsp[-2].minor.yy52 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}</div><div>-#line 2809 "parse.c"</div><div>+#line 2811 "parse.c"</div><div> break;</div><div> case 105: /* joinop ::= JOIN_KW join_nm join_nm JOIN */</div><div> #line 627 "parse.y"</div><div> {yymsp[-3].minor.yy52 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}</div><div>-#line 2814 "parse.c"</div><div>+#line 2816 "parse.c"</div><div> break;</div><div> case 106: /* on_opt ::= ON expr */</div><div> case 123: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==123);</div><div>@@ -2818,7 +2820,7 @@ static void yy_reduce(</div><div> case 192: /* case_else ::= ELSE expr */ yytestcase(yyruleno==192);</div><div> #line 631 "parse.y"</div><div> {yymsp[-1].minor.yy362 = yymsp[0].minor.yy162.pExpr;}</div><div>-#line 2822 "parse.c"</div><div>+#line 2824 "parse.c"</div><div> break;</div><div> case 107: /* on_opt ::= */</div><div> case 122: /* having_opt ::= */ yytestcase(yyruleno==122);</div><div>@@ -2827,39 +2829,39 @@ static void yy_reduce(</div><div> case 195: /* case_operand ::= */ yytestcase(yyruleno==195);</div><div> #line 632 "parse.y"</div><div> {yymsp[1].minor.yy362 = 0;}</div><div>-#line 2831 "parse.c"</div><div>+#line 2833 "parse.c"</div><div> break;</div><div> case 108: /* indexed_opt ::= */</div><div> #line 645 "parse.y"</div><div> {yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;}</div><div>-#line 2836 "parse.c"</div><div>+#line 2838 "parse.c"</div><div> break;</div><div> case 109: /* indexed_opt ::= INDEXED BY nm */</div><div> #line 646 "parse.y"</div><div> {yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;}</div><div>-#line 2841 "parse.c"</div><div>+#line 2843 "parse.c"</div><div> break;</div><div> case 110: /* indexed_opt ::= NOT INDEXED */</div><div> #line 647 "parse.y"</div><div> {yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;}</div><div>-#line 2846 "parse.c"</div><div>+#line 2848 "parse.c"</div><div> break;</div><div> case 111: /* using_opt ::= USING LP idlist RP */</div><div> #line 651 "parse.y"</div><div> {yymsp[-3].minor.yy40 = yymsp[-1].minor.yy40;}</div><div>-#line 2851 "parse.c"</div><div>+#line 2853 "parse.c"</div><div> break;</div><div> case 112: /* using_opt ::= */</div><div> case 140: /* idlist_opt ::= */ yytestcase(yyruleno==140);</div><div> #line 652 "parse.y"</div><div> {yymsp[1].minor.yy40 = 0;}</div><div>-#line 2857 "parse.c"</div><div>+#line 2859 "parse.c"</div><div> break;</div><div> case 114: /* orderby_opt ::= ORDER BY sortlist */</div><div> case 121: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==121);</div><div> #line 666 "parse.y"</div><div> {yymsp[-2].minor.yy382 = yymsp[0].minor.yy382;}</div><div>-#line 2863 "parse.c"</div><div>+#line 2865 "parse.c"</div><div> break;</div><div> case 115: /* sortlist ::= sortlist COMMA expr sortorder */</div><div> #line 667 "parse.y"</div><div>@@ -2867,7 +2869,7 @@ static void yy_reduce(</div><div> yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382,yymsp[-1].minor.yy162.pExpr);</div><div> sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy382,yymsp[0].minor.yy52);</div><div> }</div><div>-#line 2871 "parse.c"</div><div>+#line 2873 "parse.c"</div><div> break;</div><div> case 116: /* sortlist ::= expr sortorder */</div><div> #line 671 "parse.y"</div><div>@@ -2875,42 +2877,42 @@ static void yy_reduce(</div><div> yymsp[-1].minor.yy382 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy162.pExpr); /*A-overwrites-Y*/</div><div> sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy382,yymsp[0].minor.yy52);</div><div> }</div><div>-#line 2879 "parse.c"</div><div>+#line 2881 "parse.c"</div><div> break;</div><div> case 117: /* sortorder ::= ASC */</div><div> #line 678 "parse.y"</div><div> {yymsp[0].minor.yy52 = SQLITE_SO_ASC;}</div><div>-#line 2884 "parse.c"</div><div>+#line 2886 "parse.c"</div><div> break;</div><div> case 118: /* sortorder ::= DESC */</div><div> #line 679 "parse.y"</div><div> {yymsp[0].minor.yy52 = SQLITE_SO_DESC;}</div><div>-#line 2889 "parse.c"</div><div>+#line 2891 "parse.c"</div><div> break;</div><div> case 119: /* sortorder ::= */</div><div> #line 680 "parse.y"</div><div> {yymsp[1].minor.yy52 = SQLITE_SO_UNDEFINED;}</div><div>-#line 2894 "parse.c"</div><div>+#line 2896 "parse.c"</div><div> break;</div><div> case 124: /* limit_opt ::= */</div><div> #line 705 "parse.y"</div><div> {yymsp[1].minor.yy384.pLimit = 0; yymsp[1].minor.yy384.pOffset = 0;}</div><div>-#line 2899 "parse.c"</div><div>+#line 2901 "parse.c"</div><div> break;</div><div> case 125: /* limit_opt ::= LIMIT expr */</div><div> #line 706 "parse.y"</div><div> {yymsp[-1].minor.yy384.pLimit = yymsp[0].minor.yy162.pExpr; yymsp[-1].minor.yy384.pOffset = 0;}</div><div>-#line 2904 "parse.c"</div><div>+#line 2906 "parse.c"</div><div> break;</div><div> case 126: /* limit_opt ::= LIMIT expr OFFSET expr */</div><div> #line 708 "parse.y"</div><div> {yymsp[-3].minor.yy384.pLimit = yymsp[-2].minor.yy162.pExpr; yymsp[-3].minor.yy384.pOffset = yymsp[0].minor.yy162.pExpr;}</div><div>-#line 2909 "parse.c"</div><div>+#line 2911 "parse.c"</div><div> break;</div><div> case 127: /* limit_opt ::= LIMIT expr COMMA expr */</div><div> #line 710 "parse.y"</div><div> {yymsp[-3].minor.yy384.pOffset = yymsp[-2].minor.yy162.pExpr; yymsp[-3].minor.yy384.pLimit = yymsp[0].minor.yy162.pExpr;}</div><div>-#line 2914 "parse.c"</div><div>+#line 2916 "parse.c"</div><div> break;</div><div> case 128: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */</div><div> #line 727 "parse.y"</div><div>@@ -2922,7 +2924,7 @@ static void yy_reduce(</div><div> pParse->initiateTTrans = true;</div><div> sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy387,yymsp[0].minor.yy362);</div><div> }</div><div>-#line 2926 "parse.c"</div><div>+#line 2928 "parse.c"</div><div> break;</div><div> case 131: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */</div><div> #line 760 "parse.y"</div><div>@@ -2935,7 +2937,7 @@ static void yy_reduce(</div><div> pParse->initiateTTrans = true;</div><div> sqlite3Update(pParse,yymsp[-4].minor.yy387,yymsp[-1].minor.yy382,yymsp[0].minor.yy362,yymsp[-5].minor.yy52);</div><div> }</div><div>-#line 2939 "parse.c"</div><div>+#line 2941 "parse.c"</div><div> break;</div><div> case 132: /* setlist ::= setlist COMMA nm EQ expr */</div><div> #line 774 "parse.y"</div><div>@@ -2943,14 +2945,14 @@ static void yy_reduce(</div><div> yymsp[-4].minor.yy382 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy382, yymsp[0].minor.yy162.pExpr);</div><div> sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy382, &yymsp[-2].minor.yy0, 1);</div><div> }</div><div>-#line 2947 "parse.c"</div><div>+#line 2949 "parse.c"</div><div> break;</div><div> case 133: /* setlist ::= setlist COMMA LP idlist RP EQ expr */</div><div> #line 778 "parse.y"</div><div> {</div><div> yymsp[-6].minor.yy382 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy382, yymsp[-3].minor.yy40, yymsp[0].minor.yy162.pExpr);</div><div> }</div><div>-#line 2954 "parse.c"</div><div>+#line 2956 "parse.c"</div><div> break;</div><div> case 134: /* setlist ::= nm EQ expr */</div><div> #line 781 "parse.y"</div><div>@@ -2958,7 +2960,7 @@ static void yy_reduce(</div><div> yylhsminor.yy382 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy162.pExpr);</div><div> sqlite3ExprListSetName(pParse, yylhsminor.yy382, &yymsp[-2].minor.yy0, 1);</div><div> }</div><div>-#line 2962 "parse.c"</div><div>+#line 2964 "parse.c"</div><div> yymsp[-2].minor.yy382 = yylhsminor.yy382;</div><div> break;</div><div> case 135: /* setlist ::= LP idlist RP EQ expr */</div><div>@@ -2966,7 +2968,7 @@ static void yy_reduce(</div><div> {</div><div> yymsp[-4].minor.yy382 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy40, yymsp[0].minor.yy162.pExpr);</div><div> }</div><div>-#line 2970 "parse.c"</div><div>+#line 2972 "parse.c"</div><div> break;</div><div> case 136: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */</div><div> #line 791 "parse.y"</div><div>@@ -2977,7 +2979,7 @@ static void yy_reduce(</div><div> pParse->initiateTTrans = true;</div><div> sqlite3Insert(pParse, yymsp[-2].minor.yy387, yymsp[0].minor.yy279, yymsp[-1].minor.yy40, yymsp[-4].minor.yy52);</div><div> }</div><div>-#line 2981 "parse.c"</div><div>+#line 2983 "parse.c"</div><div> break;</div><div> case 137: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */</div><div> #line 799 "parse.y"</div><div>@@ -2988,40 +2990,40 @@ static void yy_reduce(</div><div> pParse->initiateTTrans = true;</div><div> sqlite3Insert(pParse, yymsp[-3].minor.yy387, 0, yymsp[-2].minor.yy40, yymsp[-5].minor.yy52);</div><div> }</div><div>-#line 2992 "parse.c"</div><div>+#line 2994 "parse.c"</div><div> break;</div><div> case 141: /* idlist_opt ::= LP idlist RP */</div><div> #line 817 "parse.y"</div><div> {yymsp[-2].minor.yy40 = yymsp[-1].minor.yy40;}</div><div>-#line 2997 "parse.c"</div><div>+#line 2999 "parse.c"</div><div> break;</div><div> case 142: /* idlist ::= idlist COMMA nm */</div><div> #line 819 "parse.y"</div><div> {yymsp[-2].minor.yy40 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy40,&yymsp[0].minor.yy0);}</div><div>-#line 3002 "parse.c"</div><div>+#line 3004 "parse.c"</div><div> break;</div><div> case 143: /* idlist ::= nm */</div><div> #line 821 "parse.y"</div><div> {yymsp[0].minor.yy40 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}</div><div>-#line 3007 "parse.c"</div><div>+#line 3009 "parse.c"</div><div> break;</div><div> case 144: /* expr ::= LP expr RP */</div><div> #line 870 "parse.y"</div><div> {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;}</div><div>-#line 3012 "parse.c"</div><div>+#line 3014 "parse.c"</div><div> break;</div><div> case 145: /* term ::= NULL */</div><div> case 149: /* term ::= FLOAT|BLOB */ yytestcase(yyruleno==149);</div><div> case 150: /* term ::= STRING */ yytestcase(yyruleno==150);</div><div> #line 871 "parse.y"</div><div> {spanExpr(&yymsp[0].minor.yy162,pParse,yymsp[0].major,yymsp[0].minor.yy0);/*A-overwrites-X*/}</div><div>-#line 3019 "parse.c"</div><div>+#line 3021 "parse.c"</div><div> break;</div><div> case 146: /* expr ::= ID|INDEXED */</div><div> case 147: /* expr ::= JOIN_KW */ yytestcase(yyruleno==147);</div><div> #line 872 "parse.y"</div><div> {spanExpr(&yymsp[0].minor.yy162,pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}</div><div>-#line 3025 "parse.c"</div><div>+#line 3027 "parse.c"</div><div> break;</div><div> case 148: /* expr ::= nm DOT nm */</div><div> #line 874 "parse.y"</div><div>@@ -3031,7 +3033,7 @@ static void yy_reduce(</div><div> spanSet(&yymsp[-2].minor.yy162,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/</div><div> yymsp[-2].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);</div><div> }</div><div>-#line 3035 "parse.c"</div><div>+#line 3037 "parse.c"</div><div> break;</div><div> case 151: /* term ::= INTEGER */</div><div> #line 882 "parse.y"</div><div>@@ -3041,7 +3043,7 @@ static void yy_reduce(</div><div> yylhsminor.yy162.zEnd = yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n;</div><div> if( yylhsminor.yy162.pExpr ) yylhsminor.yy162.pExpr->flags |= EP_Leaf;</div><div> }</div><div>-#line 3045 "parse.c"</div><div>+#line 3047 "parse.c"</div><div> yymsp[0].minor.yy162 = yylhsminor.yy162;</div><div> break;</div><div> case 152: /* expr ::= VARIABLE */</div><div>@@ -3067,7 +3069,7 @@ static void yy_reduce(</div><div> }</div><div> }</div><div> }</div><div>-#line 3071 "parse.c"</div><div>+#line 3073 "parse.c"</div><div> break;</div><div> case 153: /* expr ::= expr COLLATE ID|INDEXED */</div><div> #line 909 "parse.y"</div><div>@@ -3075,7 +3077,7 @@ static void yy_reduce(</div><div> yymsp[-2].minor.yy162.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy162.pExpr, &yymsp[0].minor.yy0, 1);</div><div> yymsp[-2].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];</div><div> }</div><div>-#line 3079 "parse.c"</div><div>+#line 3081 "parse.c"</div><div> break;</div><div> case 154: /* expr ::= CAST LP expr AS typetoken RP */</div><div> #line 914 "parse.y"</div><div>@@ -3084,7 +3086,7 @@ static void yy_reduce(</div><div> yymsp[-5].minor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);</div><div> sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy162.pExpr, yymsp[-3].minor.yy162.pExpr, 0);</div><div> }</div><div>-#line 3088 "parse.c"</div><div>+#line 3090 "parse.c"</div><div> break;</div><div> case 155: /* expr ::= ID|INDEXED LP distinct exprlist RP */</div><div> #line 920 "parse.y"</div><div>@@ -3098,7 +3100,7 @@ static void yy_reduce(</div><div> yylhsminor.yy162.pExpr->flags |= EP_Distinct;</div><div> }</div><div> }</div><div>-#line 3102 "parse.c"</div><div>+#line 3104 "parse.c"</div><div> yymsp[-4].minor.yy162 = yylhsminor.yy162;</div><div> break;</div><div> case 156: /* expr ::= ID|INDEXED LP STAR RP */</div><div>@@ -3107,7 +3109,7 @@ static void yy_reduce(</div><div> yylhsminor.yy162.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);</div><div> spanSet(&yylhsminor.yy162,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);</div><div> }</div><div>-#line 3111 "parse.c"</div><div>+#line 3113 "parse.c"</div><div> yymsp[-3].minor.yy162 = yylhsminor.yy162;</div><div> break;</div><div> case 157: /* term ::= CTIME_KW */</div><div>@@ -3116,7 +3118,7 @@ static void yy_reduce(</div><div> yylhsminor.yy162.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0);</div><div> spanSet(&yylhsminor.yy162, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);</div><div> }</div><div>-#line 3120 "parse.c"</div><div>+#line 3122 "parse.c"</div><div> yymsp[0].minor.yy162 = yylhsminor.yy162;</div><div> break;</div><div> case 158: /* expr ::= LP nexprlist COMMA expr RP */</div><div>@@ -3131,7 +3133,7 @@ static void yy_reduce(</div><div> sqlite3ExprListDelete(pParse->db, pList);</div><div> }</div><div> }</div><div>-#line 3135 "parse.c"</div><div>+#line 3137 "parse.c"</div><div> yymsp[-4].minor.yy162 = yylhsminor.yy162;</div><div> break;</div><div> case 159: /* expr ::= expr AND expr */</div><div>@@ -3144,17 +3146,17 @@ static void yy_reduce(</div><div> case 166: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==166);</div><div> #line 974 "parse.y"</div><div> {spanBinaryExpr(pParse,yymsp[-1].major,&yymsp[-2].minor.yy162,&yymsp[0].minor.yy162);}</div><div>-#line 3148 "parse.c"</div><div>+#line 3150 "parse.c"</div><div> break;</div><div> case 167: /* likeop ::= LIKE_KW|MATCH */</div><div> #line 987 "parse.y"</div><div> {yymsp[0].minor.yy0=yymsp[0].minor.yy0;/*A-overwrites-X*/}</div><div>-#line 3153 "parse.c"</div><div>+#line 3155 "parse.c"</div><div> break;</div><div> case 168: /* likeop ::= NOT LIKE_KW|MATCH */</div><div> #line 988 "parse.y"</div><div> {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/}</div><div>-#line 3158 "parse.c"</div><div>+#line 3160 "parse.c"</div><div> break;</div><div> case 169: /* expr ::= expr likeop expr */</div><div> #line 989 "parse.y"</div><div>@@ -3169,7 +3171,7 @@ static void yy_reduce(</div><div> yymsp[-2].minor.yy162.zEnd = yymsp[0].minor.yy162.zEnd;</div><div> if( yymsp[-2].minor.yy162.pExpr ) yymsp[-2].minor.yy162.pExpr->flags |= EP_InfixFunc;</div><div> }</div><div>-#line 3173 "parse.c"</div><div>+#line 3175 "parse.c"</div><div> break;</div><div> case 170: /* expr ::= expr likeop expr ESCAPE expr */</div><div> #line 1000 "parse.y"</div><div>@@ -3185,17 +3187,17 @@ static void yy_reduce(</div><div> yymsp[-4].minor.yy162.zEnd = yymsp[0].minor.yy162.zEnd;</div><div> if( yymsp[-4].minor.yy162.pExpr ) yymsp[-4].minor.yy162.pExpr->flags |= EP_InfixFunc;</div><div> }</div><div>-#line 3189 "parse.c"</div><div>+#line 3191 "parse.c"</div><div> break;</div><div> case 171: /* expr ::= expr ISNULL|NOTNULL */</div><div> #line 1027 "parse.y"</div><div> {spanUnaryPostfix(pParse,yymsp[0].major,&yymsp[-1].minor.yy162,&yymsp[0].minor.yy0);}</div><div>-#line 3194 "parse.c"</div><div>+#line 3196 "parse.c"</div><div> break;</div><div> case 172: /* expr ::= expr NOT NULL */</div><div> #line 1028 "parse.y"</div><div> {spanUnaryPostfix(pParse,TK_NOTNULL,&yymsp[-2].minor.yy162,&yymsp[0].minor.yy0);}</div><div>-#line 3199 "parse.c"</div><div>+#line 3201 "parse.c"</div><div> break;</div><div> case 173: /* expr ::= expr IS expr */</div><div> #line 1049 "parse.y"</div><div>@@ -3203,7 +3205,7 @@ static void yy_reduce(</div><div> spanBinaryExpr(pParse,TK_IS,&yymsp[-2].minor.yy162,&yymsp[0].minor.yy162);</div><div> binaryToUnaryIfNull(pParse, yymsp[0].minor.yy162.pExpr, yymsp[-2].minor.yy162.pExpr, TK_ISNULL);</div><div> }</div><div>-#line 3207 "parse.c"</div><div>+#line 3209 "parse.c"</div><div> break;</div><div> case 174: /* expr ::= expr IS NOT expr */</div><div> #line 1053 "parse.y"</div><div>@@ -3211,29 +3213,29 @@ static void yy_reduce(</div><div> spanBinaryExpr(pParse,TK_ISNOT,&yymsp[-3].minor.yy162,&yymsp[0].minor.yy162);</div><div> binaryToUnaryIfNull(pParse, yymsp[0].minor.yy162.pExpr, yymsp[-3].minor.yy162.pExpr, TK_NOTNULL);</div><div> }</div><div>-#line 3215 "parse.c"</div><div>+#line 3217 "parse.c"</div><div> break;</div><div> case 175: /* expr ::= NOT expr */</div><div> case 176: /* expr ::= BITNOT expr */ yytestcase(yyruleno==176);</div><div> #line 1077 "parse.y"</div><div> {spanUnaryPrefix(&yymsp[-1].minor.yy162,pParse,yymsp[-1].major,&yymsp[0].minor.yy162,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}</div><div>-#line 3221 "parse.c"</div><div>+#line 3223 "parse.c"</div><div> break;</div><div> case 177: /* expr ::= MINUS expr */</div><div> #line 1081 "parse.y"</div><div> {spanUnaryPrefix(&yymsp[-1].minor.yy162,pParse,TK_UMINUS,&yymsp[0].minor.yy162,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}</div><div>-#line 3226 "parse.c"</div><div>+#line 3228 "parse.c"</div><div> break;</div><div> case 178: /* expr ::= PLUS expr */</div><div> #line 1083 "parse.y"</div><div> {spanUnaryPrefix(&yymsp[-1].minor.yy162,pParse,TK_UPLUS,&yymsp[0].minor.yy162,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}</div><div>-#line 3231 "parse.c"</div><div>+#line 3233 "parse.c"</div><div> break;</div><div> case 179: /* between_op ::= BETWEEN */</div><div> case 182: /* in_op ::= IN */ yytestcase(yyruleno==182);</div><div> #line 1086 "parse.y"</div><div> {yymsp[0].minor.yy52 = 0;}</div><div>-#line 3237 "parse.c"</div><div>+#line 3239 "parse.c"</div><div> break;</div><div> case 181: /* expr ::= expr between_op expr AND expr */</div><div> #line 1088 "parse.y"</div><div>@@ -3249,7 +3251,7 @@ static void yy_reduce(</div><div> exprNot(pParse, yymsp[-3].minor.yy52, &yymsp[-4].minor.yy162);</div><div> yymsp[-4].minor.yy162.zEnd = yymsp[0].minor.yy162.zEnd;</div><div> }</div><div>-#line 3253 "parse.c"</div><div>+#line 3255 "parse.c"</div><div> break;</div><div> case 184: /* expr ::= expr in_op LP exprlist RP */</div><div> #line 1104 "parse.y"</div><div>@@ -3304,7 +3306,7 @@ static void yy_reduce(</div><div> }</div><div> yymsp[-4].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];</div><div> }</div><div>-#line 3308 "parse.c"</div><div>+#line 3310 "parse.c"</div><div> break;</div><div> case 185: /* expr ::= LP select RP */</div><div> #line 1155 "parse.y"</div><div>@@ -3313,7 +3315,7 @@ static void yy_reduce(</div><div> yymsp[-2].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0);</div><div> sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy162.pExpr, yymsp[-1].minor.yy279);</div><div> }</div><div>-#line 3317 "parse.c"</div><div>+#line 3319 "parse.c"</div><div> break;</div><div> case 186: /* expr ::= expr in_op LP select RP */</div><div> #line 1160 "parse.y"</div><div>@@ -3323,7 +3325,7 @@ static void yy_reduce(</div><div> exprNot(pParse, yymsp[-3].minor.yy52, &yymsp[-4].minor.yy162);</div><div> yymsp[-4].minor.yy162.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];</div><div> }</div><div>-#line 3327 "parse.c"</div><div>+#line 3329 "parse.c"</div><div> break;</div><div> case 187: /* expr ::= expr in_op nm paren_exprlist */</div><div> #line 1166 "parse.y"</div><div>@@ -3336,7 +3338,7 @@ static void yy_reduce(</div><div> exprNot(pParse, yymsp[-2].minor.yy52, &yymsp[-3].minor.yy162);</div><div> yymsp[-3].minor.yy162.zEnd = &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n];</div><div> }</div><div>-#line 3340 "parse.c"</div><div>+#line 3342 "parse.c"</div><div> break;</div><div> case 188: /* expr ::= EXISTS LP select RP */</div><div> #line 1175 "parse.y"</div><div>@@ -3346,7 +3348,7 @@ static void yy_reduce(</div><div> p = yymsp[-3].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);</div><div> sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy279);</div><div> }</div><div>-#line 3350 "parse.c"</div><div>+#line 3352 "parse.c"</div><div> break;</div><div> case 189: /* expr ::= CASE case_operand case_exprlist case_else END */</div><div> #line 1184 "parse.y"</div><div>@@ -3361,7 +3363,7 @@ static void yy_reduce(</div><div> sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy362);</div><div> }</div><div> }</div><div>-#line 3365 "parse.c"</div><div>+#line 3367 "parse.c"</div><div> break;</div><div> case 190: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */</div><div> #line 1197 "parse.y"</div><div>@@ -3369,7 +3371,7 @@ static void yy_reduce(</div><div> yymsp[-4].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy382, yymsp[-2].minor.yy162.pExpr);</div><div> yymsp[-4].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy382, yymsp[0].minor.yy162.pExpr);</div><div> }</div><div>-#line 3373 "parse.c"</div><div>+#line 3375 "parse.c"</div><div> break;</div><div> case 191: /* case_exprlist ::= WHEN expr THEN expr */</div><div> #line 1201 "parse.y"</div><div>@@ -3377,28 +3379,28 @@ static void yy_reduce(</div><div> yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy162.pExpr);</div><div> yymsp[-3].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy382, yymsp[0].minor.yy162.pExpr);</div><div> }</div><div>-#line 3381 "parse.c"</div><div>+#line 3383 "parse.c"</div><div> break;</div><div> case 194: /* case_operand ::= expr */</div><div> #line 1211 "parse.y"</div><div> {yymsp[0].minor.yy362 = yymsp[0].minor.yy162.pExpr; /*A-overwrites-X*/}</div><div>-#line 3386 "parse.c"</div><div>+#line 3388 "parse.c"</div><div> break;</div><div> case 197: /* nexprlist ::= nexprlist COMMA expr */</div><div> #line 1222 "parse.y"</div><div> {yymsp[-2].minor.yy382 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy382,yymsp[0].minor.yy162.pExpr);}</div><div>-#line 3391 "parse.c"</div><div>+#line 3393 "parse.c"</div><div> break;</div><div> case 198: /* nexprlist ::= expr */</div><div> #line 1224 "parse.y"</div><div> {yymsp[0].minor.yy382 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy162.pExpr); /*A-overwrites-Y*/}</div><div>-#line 3396 "parse.c"</div><div>+#line 3398 "parse.c"</div><div> break;</div><div> case 200: /* paren_exprlist ::= LP exprlist RP */</div><div> case 205: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==205);</div><div> #line 1232 "parse.y"</div><div> {yymsp[-2].minor.yy382 = yymsp[-1].minor.yy382;}</div><div>-#line 3402 "parse.c"</div><div>+#line 3404 "parse.c"</div><div> break;</div><div> case 201: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm ON nm LP sortlist RP where_opt */</div><div> #line 1239 "parse.y"</div><div>@@ -3407,208 +3409,215 @@ static void yy_reduce(</div><div> sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0), yymsp[-2].minor.yy382, yymsp[-9].minor.yy52,</div><div> &yymsp[-10].minor.yy0, yymsp[0].minor.yy362, SQLITE_SO_ASC, yymsp[-7].minor.yy52, SQLITE_IDXTYPE_APPDEF);</div><div> }</div><div>-#line 3411 "parse.c"</div><div>+#line 3413 "parse.c"</div><div> break;</div><div> case 202: /* uniqueflag ::= UNIQUE */</div><div>- case 242: /* raisetype ::= ABORT */ yytestcase(yyruleno==242);</div><div>+ case 243: /* raisetype ::= ABORT */ yytestcase(yyruleno==243);</div><div> #line 1246 "parse.y"</div><div> {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_ABORT;}</div><div>-#line 3417 "parse.c"</div><div>+#line 3419 "parse.c"</div><div> break;</div><div> case 203: /* uniqueflag ::= */</div><div> #line 1247 "parse.y"</div><div> {yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_NONE;}</div><div>-#line 3422 "parse.c"</div><div>+#line 3424 "parse.c"</div><div> break;</div><div> case 206: /* eidlist ::= eidlist COMMA nm collate sortorder */</div><div> #line 1290 "parse.y"</div><div> {</div><div> yymsp[-4].minor.yy382 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy382, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy52, yymsp[0].minor.yy52);</div><div> }</div><div>-#line 3429 "parse.c"</div><div>+#line 3431 "parse.c"</div><div> break;</div><div> case 207: /* eidlist ::= nm collate sortorder */</div><div> #line 1293 "parse.y"</div><div> {</div><div> yymsp[-2].minor.yy382 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy52, yymsp[0].minor.yy52); /*A-overwrites-Y*/</div><div> }</div><div>-#line 3436 "parse.c"</div><div>+#line 3438 "parse.c"</div><div> break;</div><div> case 210: /* cmd ::= DROP INDEX ifexists fullname ON nm */</div><div> #line 1304 "parse.y"</div><div> {</div><div> sqlite3DropIndex(pParse, yymsp[-2].minor.yy387, &yymsp[0].minor.yy0, yymsp[-3].minor.yy52);</div><div> }</div><div>-#line 3443 "parse.c"</div><div>+#line 3445 "parse.c"</div><div> break;</div><div> case 211: /* cmd ::= PRAGMA nm */</div><div> #line 1311 "parse.y"</div><div> {</div><div> sqlite3Pragma(pParse,&yymsp[0].minor.yy0,0,0,0,0);</div><div> }</div><div>-#line 3450 "parse.c"</div><div>+#line 3452 "parse.c"</div><div> break;</div><div> case 212: /* cmd ::= PRAGMA nm EQ nmnum */</div><div> #line 1314 "parse.y"</div><div> {</div><div> sqlite3Pragma(pParse,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy0,0,0);</div><div> }</div><div>-#line 3457 "parse.c"</div><div>+#line 3459 "parse.c"</div><div> break;</div><div> case 213: /* cmd ::= PRAGMA nm LP nmnum RP */</div><div> #line 1317 "parse.y"</div><div> {</div><div> sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,0,&yymsp[-1].minor.yy0,0,0);</div><div> }</div><div>-#line 3464 "parse.c"</div><div>+#line 3466 "parse.c"</div><div> break;</div><div> case 214: /* cmd ::= PRAGMA nm EQ minus_num */</div><div> #line 1320 "parse.y"</div><div> {</div><div> sqlite3Pragma(pParse,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy0,0,1);</div><div> }</div><div>-#line 3471 "parse.c"</div><div>+#line 3473 "parse.c"</div><div> break;</div><div> case 215: /* cmd ::= PRAGMA nm LP minus_num RP */</div><div> #line 1323 "parse.y"</div><div> {</div><div> sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,0,&yymsp[-1].minor.yy0,0,1);</div><div> }</div><div>-#line 3478 "parse.c"</div><div>+#line 3480 "parse.c"</div><div> break;</div><div> case 216: /* cmd ::= PRAGMA nm EQ nm DOT nm */</div><div> #line 1326 "parse.y"</div><div> {</div><div> sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0,0);</div><div> }</div><div>-#line 3485 "parse.c"</div><div>+#line 3487 "parse.c"</div><div>+ break;</div><div>+ case 217: /* cmd ::= PRAGMA */</div><div>+#line 1329 "parse.y"</div><div>+{</div><div>+ sqlite3Pragma(pParse, 0,0,0,0,0);</div><div>+}</div><div>+#line 3494 "parse.c"</div><div> break;</div><div>- case 219: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */</div><div>-#line 1346 "parse.y"</div><div>+ case 220: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */</div><div>+#line 1349 "parse.y"</div><div> {</div><div> Token all;</div><div> all.z = yymsp[-3].minor.yy0.z;</div><div> all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;</div><div> sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy427, &all);</div><div> }</div><div>-#line 3495 "parse.c"</div><div>+#line 3504 "parse.c"</div><div> break;</div><div>- case 220: /* trigger_decl ::= TRIGGER ifnotexists nm trigger_time trigger_event ON fullname foreach_clause when_clause */</div><div>-#line 1355 "parse.y"</div><div>+ case 221: /* trigger_decl ::= TRIGGER ifnotexists nm trigger_time trigger_event ON fullname foreach_clause when_clause */</div><div>+#line 1358 "parse.y"</div><div> {</div><div> 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);</div><div> yymsp[-8].minor.yy0 = yymsp[-6].minor.yy0; /*yymsp[-8].minor.yy0-overwrites-T*/</div><div> }</div><div>-#line 3503 "parse.c"</div><div>+#line 3512 "parse.c"</div><div> break;</div><div>- case 221: /* trigger_time ::= BEFORE */</div><div>-#line 1361 "parse.y"</div><div>+ case 222: /* trigger_time ::= BEFORE */</div><div>+#line 1364 "parse.y"</div><div> { yymsp[0].minor.yy52 = TK_BEFORE; }</div><div>-#line 3508 "parse.c"</div><div>+#line 3517 "parse.c"</div><div> break;</div><div>- case 222: /* trigger_time ::= AFTER */</div><div>-#line 1362 "parse.y"</div><div>+ case 223: /* trigger_time ::= AFTER */</div><div>+#line 1365 "parse.y"</div><div> { yymsp[0].minor.yy52 = TK_AFTER; }</div><div>-#line 3513 "parse.c"</div><div>+#line 3522 "parse.c"</div><div> break;</div><div>- case 223: /* trigger_time ::= INSTEAD OF */</div><div>-#line 1363 "parse.y"</div><div>+ case 224: /* trigger_time ::= INSTEAD OF */</div><div>+#line 1366 "parse.y"</div><div> { yymsp[-1].minor.yy52 = TK_INSTEAD;}</div><div>-#line 3518 "parse.c"</div><div>+#line 3527 "parse.c"</div><div> break;</div><div>- case 224: /* trigger_time ::= */</div><div>-#line 1364 "parse.y"</div><div>+ case 225: /* trigger_time ::= */</div><div>+#line 1367 "parse.y"</div><div> { yymsp[1].minor.yy52 = TK_BEFORE; }</div><div>-#line 3523 "parse.c"</div><div>+#line 3532 "parse.c"</div><div> break;</div><div>- case 225: /* trigger_event ::= DELETE|INSERT */</div><div>- case 226: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==226);</div><div>-#line 1368 "parse.y"</div><div>+ case 226: /* trigger_event ::= DELETE|INSERT */</div><div>+ case 227: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==227);</div><div>+#line 1371 "parse.y"</div><div> {yymsp[0].minor.yy10.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy10.b = 0;}</div><div>-#line 3529 "parse.c"</div><div>+#line 3538 "parse.c"</div><div> break;</div><div>- case 227: /* trigger_event ::= UPDATE OF idlist */</div><div>-#line 1370 "parse.y"</div><div>+ case 228: /* trigger_event ::= UPDATE OF idlist */</div><div>+#line 1373 "parse.y"</div><div> {yymsp[-2].minor.yy10.a = TK_UPDATE; yymsp[-2].minor.yy10.b = yymsp[0].minor.yy40;}</div><div>-#line 3534 "parse.c"</div><div>+#line 3543 "parse.c"</div><div> break;</div><div>- case 228: /* when_clause ::= */</div><div>-#line 1377 "parse.y"</div><div>+ case 229: /* when_clause ::= */</div><div>+#line 1380 "parse.y"</div><div> { yymsp[1].minor.yy362 = 0; }</div><div>-#line 3539 "parse.c"</div><div>+#line 3548 "parse.c"</div><div> break;</div><div>- case 229: /* when_clause ::= WHEN expr */</div><div>-#line 1378 "parse.y"</div><div>+ case 230: /* when_clause ::= WHEN expr */</div><div>+#line 1381 "parse.y"</div><div> { yymsp[-1].minor.yy362 = yymsp[0].minor.yy162.pExpr; }</div><div>-#line 3544 "parse.c"</div><div>+#line 3553 "parse.c"</div><div> break;</div><div>- case 230: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */</div><div>-#line 1382 "parse.y"</div><div>+ case 231: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */</div><div>+#line 1385 "parse.y"</div><div> {</div><div> assert( yymsp[-2].minor.yy427!=0 );</div><div> yymsp[-2].minor.yy427->pLast->pNext = yymsp[-1].minor.yy427;</div><div> yymsp[-2].minor.yy427->pLast = yymsp[-1].minor.yy427;</div><div> }</div><div>-#line 3553 "parse.c"</div><div>+#line 3562 "parse.c"</div><div> break;</div><div>- case 231: /* trigger_cmd_list ::= trigger_cmd SEMI */</div><div>-#line 1387 "parse.y"</div><div>+ case 232: /* trigger_cmd_list ::= trigger_cmd SEMI */</div><div>+#line 1390 "parse.y"</div><div> { </div><div> assert( yymsp[-1].minor.yy427!=0 );</div><div> yymsp[-1].minor.yy427->pLast = yymsp[-1].minor.yy427;</div><div> }</div><div>-#line 3561 "parse.c"</div><div>+#line 3570 "parse.c"</div><div> break;</div><div>- case 232: /* trnm ::= nm DOT nm */</div><div>-#line 1398 "parse.y"</div><div>+ case 233: /* trnm ::= nm DOT nm */</div><div>+#line 1401 "parse.y"</div><div> {</div><div> yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;</div><div> sqlite3ErrorMsg(pParse, </div><div> "qualified table names are not allowed on INSERT, UPDATE, and DELETE "</div><div> "statements within triggers");</div><div> }</div><div>-#line 3571 "parse.c"</div><div>+#line 3580 "parse.c"</div><div> break;</div><div>- case 233: /* tridxby ::= INDEXED BY nm */</div><div>-#line 1410 "parse.y"</div><div>+ case 234: /* tridxby ::= INDEXED BY nm */</div><div>+#line 1413 "parse.y"</div><div> {</div><div> sqlite3ErrorMsg(pParse,</div><div> "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "</div><div> "within triggers");</div><div> }</div><div>-#line 3580 "parse.c"</div><div>+#line 3589 "parse.c"</div><div> break;</div><div>- case 234: /* tridxby ::= NOT INDEXED */</div><div>-#line 1415 "parse.y"</div><div>+ case 235: /* tridxby ::= NOT INDEXED */</div><div>+#line 1418 "parse.y"</div><div> {</div><div> sqlite3ErrorMsg(pParse,</div><div> "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "</div><div> "within triggers");</div><div> }</div><div>-#line 3589 "parse.c"</div><div>+#line 3598 "parse.c"</div><div> break;</div><div>- case 235: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */</div><div>-#line 1428 "parse.y"</div><div>+ case 236: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */</div><div>+#line 1431 "parse.y"</div><div> {yymsp[-6].minor.yy427 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy382, yymsp[0].minor.yy362, yymsp[-5].minor.yy52);}</div><div>-#line 3594 "parse.c"</div><div>+#line 3603 "parse.c"</div><div> break;</div><div>- case 236: /* trigger_cmd ::= insert_cmd INTO trnm idlist_opt select */</div><div>-#line 1432 "parse.y"</div><div>+ case 237: /* trigger_cmd ::= insert_cmd INTO trnm idlist_opt select */</div><div>+#line 1435 "parse.y"</div><div> {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*/}</div><div>-#line 3599 "parse.c"</div><div>+#line 3608 "parse.c"</div><div> break;</div><div>- case 237: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */</div><div>-#line 1436 "parse.y"</div><div>+ case 238: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */</div><div>+#line 1439 "parse.y"</div><div> {yymsp[-4].minor.yy427 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy362);}</div><div>-#line 3604 "parse.c"</div><div>+#line 3613 "parse.c"</div><div> break;</div><div>- case 238: /* trigger_cmd ::= select */</div><div>-#line 1440 "parse.y"</div><div>+ case 239: /* trigger_cmd ::= select */</div><div>+#line 1443 "parse.y"</div><div> {yymsp[0].minor.yy427 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy279); /*A-overwrites-X*/}</div><div>-#line 3609 "parse.c"</div><div>+#line 3618 "parse.c"</div><div> break;</div><div>- case 239: /* expr ::= RAISE LP IGNORE RP */</div><div>-#line 1443 "parse.y"</div><div>+ case 240: /* expr ::= RAISE LP IGNORE RP */</div><div>+#line 1446 "parse.y"</div><div> {</div><div> spanSet(&yymsp[-3].minor.yy162,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/</div><div> yymsp[-3].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0); </div><div>@@ -3616,10 +3625,10 @@ static void yy_reduce(</div><div> yymsp[-3].minor.yy162.pExpr->affinity = ON_CONFLICT_ACTION_IGNORE;</div><div> }</div><div> }</div><div>-#line 3620 "parse.c"</div><div>+#line 3629 "parse.c"</div><div> break;</div><div>- case 240: /* expr ::= RAISE LP raisetype COMMA STRING RP */</div><div>-#line 1450 "parse.y"</div><div>+ case 241: /* expr ::= RAISE LP raisetype COMMA STRING RP */</div><div>+#line 1453 "parse.y"</div><div> {</div><div> spanSet(&yymsp[-5].minor.yy162,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/</div><div> yymsp[-5].minor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); </div><div>@@ -3627,130 +3636,130 @@ static void yy_reduce(</div><div> yymsp[-5].minor.yy162.pExpr->affinity = (char)yymsp[-3].minor.yy52;</div><div> }</div><div> }</div><div>-#line 3631 "parse.c"</div><div>+#line 3640 "parse.c"</div><div> break;</div><div>- case 241: /* raisetype ::= ROLLBACK */</div><div>-#line 1460 "parse.y"</div><div>+ case 242: /* raisetype ::= ROLLBACK */</div><div>+#line 1463 "parse.y"</div><div> {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_ROLLBACK;}</div><div>-#line 3636 "parse.c"</div><div>+#line 3645 "parse.c"</div><div> break;</div><div>- case 243: /* raisetype ::= FAIL */</div><div>-#line 1462 "parse.y"</div><div>+ case 244: /* raisetype ::= FAIL */</div><div>+#line 1465 "parse.y"</div><div> {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_FAIL;}</div><div>-#line 3641 "parse.c"</div><div>+#line 3650 "parse.c"</div><div> break;</div><div>- case 244: /* cmd ::= DROP TRIGGER ifexists fullname */</div><div>-#line 1467 "parse.y"</div><div>+ case 245: /* cmd ::= DROP TRIGGER ifexists fullname */</div><div>+#line 1470 "parse.y"</div><div> {</div><div> sqlite3DropTrigger(pParse,yymsp[0].minor.yy387,yymsp[-1].minor.yy52);</div><div> }</div><div>-#line 3648 "parse.c"</div><div>+#line 3657 "parse.c"</div><div> break;</div><div>- case 245: /* cmd ::= REINDEX */</div><div>-#line 1474 "parse.y"</div><div>+ case 246: /* cmd ::= REINDEX */</div><div>+#line 1477 "parse.y"</div><div> {sqlite3Reindex(pParse, 0, 0);}</div><div>-#line 3653 "parse.c"</div><div>+#line 3662 "parse.c"</div><div> break;</div><div>- case 246: /* cmd ::= REINDEX nm */</div><div>-#line 1475 "parse.y"</div><div>+ case 247: /* cmd ::= REINDEX nm */</div><div>+#line 1478 "parse.y"</div><div> {sqlite3Reindex(pParse, &yymsp[0].minor.yy0, 0);}</div><div>-#line 3658 "parse.c"</div><div>+#line 3667 "parse.c"</div><div> break;</div><div>- case 247: /* cmd ::= REINDEX nm ON nm */</div><div>-#line 1476 "parse.y"</div><div>+ case 248: /* cmd ::= REINDEX nm ON nm */</div><div>+#line 1479 "parse.y"</div><div> {sqlite3Reindex(pParse, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}</div><div>-#line 3663 "parse.c"</div><div>+#line 3672 "parse.c"</div><div> break;</div><div>- case 248: /* cmd ::= ANALYZE */</div><div>-#line 1481 "parse.y"</div><div>+ case 249: /* cmd ::= ANALYZE */</div><div>+#line 1484 "parse.y"</div><div> {sqlite3Analyze(pParse, 0);}</div><div>-#line 3668 "parse.c"</div><div>+#line 3677 "parse.c"</div><div> break;</div><div>- case 249: /* cmd ::= ANALYZE nm */</div><div>-#line 1482 "parse.y"</div><div>+ case 250: /* cmd ::= ANALYZE nm */</div><div>+#line 1485 "parse.y"</div><div> {sqlite3Analyze(pParse, &yymsp[0].minor.yy0);}</div><div>-#line 3673 "parse.c"</div><div>+#line 3682 "parse.c"</div><div> break;</div><div>- case 250: /* cmd ::= ALTER TABLE fullname RENAME TO nm */</div><div>-#line 1487 "parse.y"</div><div>+ case 251: /* cmd ::= ALTER TABLE fullname RENAME TO nm */</div><div>+#line 1490 "parse.y"</div><div> {</div><div> sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy387,&yymsp[0].minor.yy0);</div><div> }</div><div>-#line 3680 "parse.c"</div><div>+#line 3689 "parse.c"</div><div> break;</div><div>- case 251: /* with ::= */</div><div>-#line 1510 "parse.y"</div><div>+ case 252: /* with ::= */</div><div>+#line 1513 "parse.y"</div><div> {yymsp[1].minor.yy151 = 0;}</div><div>-#line 3685 "parse.c"</div><div>+#line 3694 "parse.c"</div><div> break;</div><div>- case 252: /* with ::= WITH wqlist */</div><div>-#line 1512 "parse.y"</div><div>+ case 253: /* with ::= WITH wqlist */</div><div>+#line 1515 "parse.y"</div><div> { yymsp[-1].minor.yy151 = yymsp[0].minor.yy151; }</div><div>-#line 3690 "parse.c"</div><div>+#line 3699 "parse.c"</div><div> break;</div><div>- case 253: /* with ::= WITH RECURSIVE wqlist */</div><div>-#line 1513 "parse.y"</div><div>+ case 254: /* with ::= WITH RECURSIVE wqlist */</div><div>+#line 1516 "parse.y"</div><div> { yymsp[-2].minor.yy151 = yymsp[0].minor.yy151; }</div><div>-#line 3695 "parse.c"</div><div>+#line 3704 "parse.c"</div><div> break;</div><div>- case 254: /* wqlist ::= nm eidlist_opt AS LP select RP */</div><div>-#line 1515 "parse.y"</div><div>+ case 255: /* wqlist ::= nm eidlist_opt AS LP select RP */</div><div>+#line 1518 "parse.y"</div><div> {</div><div> yymsp[-5].minor.yy151 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy382, yymsp[-1].minor.yy279); /*A-overwrites-X*/</div><div> }</div><div>-#line 3702 "parse.c"</div><div>+#line 3711 "parse.c"</div><div> break;</div><div>- case 255: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */</div><div>-#line 1518 "parse.y"</div><div>+ case 256: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */</div><div>+#line 1521 "parse.y"</div><div> {</div><div> yymsp[-7].minor.yy151 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy151, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy382, yymsp[-1].minor.yy279);</div><div> }</div><div>-#line 3709 "parse.c"</div><div>+#line 3718 "parse.c"</div><div> break;</div><div> default:</div><div>- /* (256) input ::= ecmd */ yytestcase(yyruleno==256);</div><div>- /* (257) explain ::= */ yytestcase(yyruleno==257);</div><div>- /* (258) cmdx ::= cmd (OPTIMIZED OUT) */ assert(yyruleno!=258);</div><div>- /* (259) trans_opt ::= */ yytestcase(yyruleno==259);</div><div>- /* (260) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==260);</div><div>- /* (261) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==261);</div><div>- /* (262) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==262);</div><div>- /* (263) savepoint_opt ::= */ yytestcase(yyruleno==263);</div><div>- /* (264) cmd ::= create_table create_table_args */ yytestcase(yyruleno==264);</div><div>- /* (265) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==265);</div><div>- /* (266) columnlist ::= columnname carglist */ yytestcase(yyruleno==266);</div><div>- /* (267) typetoken ::= typename */ yytestcase(yyruleno==267);</div><div>- /* (268) typename ::= ID|STRING */ yytestcase(yyruleno==268);</div><div>- /* (269) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=269);</div><div>- /* (270) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=270);</div><div>- /* (271) carglist ::= carglist ccons */ yytestcase(yyruleno==271);</div><div>- /* (272) carglist ::= */ yytestcase(yyruleno==272);</div><div>- /* (273) ccons ::= NULL onconf */ yytestcase(yyruleno==273);</div><div>- /* (274) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==274);</div><div>- /* (275) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==275);</div><div>- /* (276) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=276);</div><div>- /* (277) tconscomma ::= */ yytestcase(yyruleno==277);</div><div>- /* (278) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=278);</div><div>- /* (279) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=279);</div><div>- /* (280) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=280);</div><div>- /* (281) oneselect ::= values */ yytestcase(yyruleno==281);</div><div>- /* (282) sclp ::= selcollist COMMA */ yytestcase(yyruleno==282);</div><div>- /* (283) as ::= ID|STRING */ yytestcase(yyruleno==283);</div><div>- /* (284) join_nm ::= ID|INDEXED */ yytestcase(yyruleno==284);</div><div>- /* (285) join_nm ::= JOIN_KW */ yytestcase(yyruleno==285);</div><div>- /* (286) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=286);</div><div>- /* (287) exprlist ::= nexprlist */ yytestcase(yyruleno==287);</div><div>- /* (288) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=288);</div><div>- /* (289) nmnum ::= STRING */ yytestcase(yyruleno==289);</div><div>- /* (290) nmnum ::= nm */ yytestcase(yyruleno==290);</div><div>- /* (291) nmnum ::= ON */ yytestcase(yyruleno==291);</div><div>- /* (292) nmnum ::= DELETE */ yytestcase(yyruleno==292);</div><div>- /* (293) nmnum ::= DEFAULT */ yytestcase(yyruleno==293);</div><div>- /* (294) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==294);</div><div>- /* (295) foreach_clause ::= */ yytestcase(yyruleno==295);</div><div>- /* (296) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==296);</div><div>- /* (297) trnm ::= nm */ yytestcase(yyruleno==297);</div><div>- /* (298) tridxby ::= */ yytestcase(yyruleno==298);</div><div>+ /* (257) input ::= ecmd */ yytestcase(yyruleno==257);</div><div>+ /* (258) explain ::= */ yytestcase(yyruleno==258);</div><div>+ /* (259) cmdx ::= cmd (OPTIMIZED OUT) */ assert(yyruleno!=259);</div><div>+ /* (260) trans_opt ::= */ yytestcase(yyruleno==260);</div><div>+ /* (261) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==261);</div><div>+ /* (262) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==262);</div><div>+ /* (263) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==263);</div><div>+ /* (264) savepoint_opt ::= */ yytestcase(yyruleno==264);</div><div>+ /* (265) cmd ::= create_table create_table_args */ yytestcase(yyruleno==265);</div><div>+ /* (266) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==266);</div><div>+ /* (267) columnlist ::= columnname carglist */ yytestcase(yyruleno==267);</div><div>+ /* (268) typetoken ::= typename */ yytestcase(yyruleno==268);</div><div>+ /* (269) typename ::= ID|STRING */ yytestcase(yyruleno==269);</div><div>+ /* (270) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=270);</div><div>+ /* (271) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=271);</div><div>+ /* (272) carglist ::= carglist ccons */ yytestcase(yyruleno==272);</div><div>+ /* (273) carglist ::= */ yytestcase(yyruleno==273);</div><div>+ /* (274) ccons ::= NULL onconf */ yytestcase(yyruleno==274);</div><div>+ /* (275) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==275);</div><div>+ /* (276) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==276);</div><div>+ /* (277) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=277);</div><div>+ /* (278) tconscomma ::= */ yytestcase(yyruleno==278);</div><div>+ /* (279) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=279);</div><div>+ /* (280) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=280);</div><div>+ /* (281) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=281);</div><div>+ /* (282) oneselect ::= values */ yytestcase(yyruleno==282);</div><div>+ /* (283) sclp ::= selcollist COMMA */ yytestcase(yyruleno==283);</div><div>+ /* (284) as ::= ID|STRING */ yytestcase(yyruleno==284);</div><div>+ /* (285) join_nm ::= ID|INDEXED */ yytestcase(yyruleno==285);</div><div>+ /* (286) join_nm ::= JOIN_KW */ yytestcase(yyruleno==286);</div><div>+ /* (287) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=287);</div><div>+ /* (288) exprlist ::= nexprlist */ yytestcase(yyruleno==288);</div><div>+ /* (289) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=289);</div><div>+ /* (290) nmnum ::= STRING */ yytestcase(yyruleno==290);</div><div>+ /* (291) nmnum ::= nm */ yytestcase(yyruleno==291);</div><div>+ /* (292) nmnum ::= ON */ yytestcase(yyruleno==292);</div><div>+ /* (293) nmnum ::= DELETE */ yytestcase(yyruleno==293);</div><div>+ /* (294) nmnum ::= DEFAULT */ yytestcase(yyruleno==294);</div><div>+ /* (295) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==295);</div><div>+ /* (296) foreach_clause ::= */ yytestcase(yyruleno==296);</div><div>+ /* (297) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==297);</div><div>+ /* (298) trnm ::= nm */ yytestcase(yyruleno==298);</div><div>+ /* (299) tridxby ::= */ yytestcase(yyruleno==299);</div><div> break;</div><div> /********** End reduce actions ************************************************/</div><div> };</div><div>@@ -3816,7 +3825,7 @@ static void yy_syntax_error(</div><div> } else {</div><div> sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);</div><div> }</div><div>-#line 3820 "parse.c"</div><div>+#line 3829 "parse.c"</div><div> /************ End %syntax_error code ******************************************/</div><div> sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */</div><div> }</div><div>diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y</div><div>index a62b97811..914fc53b8 100644</div><div>--- a/src/box/sql/parse.y</div><div>+++ b/src/box/sql/parse.y</div><div>@@ -1326,6 +1326,9 @@ cmd ::= PRAGMA nm(X) LP minus_num(Y) RP. {</div><div> cmd ::= PRAGMA nm(X) EQ nm(Z) DOT nm(Y). {</div><div> sqlite3Pragma(pParse,&X,0,&Y,&Z,0);</div><div> }</div><div>+cmd ::= PRAGMA . {</div><div>+ sqlite3Pragma(pParse, 0,0,0,0,0);</div><div>+}</div><div> </div><div> nmnum(A) ::= plus_num(A).</div><div> nmnum(A) ::= STRING(A).</div><div>diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c</div><div>index 03ae926e0..40c6e5302 100644</div><div>--- a/src/box/sql/pragma.c</div><div>+++ b/src/box/sql/pragma.c</div><div>@@ -221,6 +221,34 @@ pragmaLocate(const char *zName)</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>return lwr > upr ? 0 : &aPragmaName[mid];</div><div> }</div><div> </div><div>+#ifdef PRINT_PRAGMA</div><div>+#undef PRINT_PRAGMA</div><div>+#endif</div><div>+#define PRINT_PRAGMA(pragma_name, pragma_flag) do {<span class="Apple-tab-span" style="white-space:pre"> </span> \</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>int nCoolSpaces = 30 - strlen(pragma_name);<span class="Apple-tab-span" style="white-space:pre"> </span> \</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>if (user_session->sql_flags & (pragma_flag)) {<span class="Apple-tab-span" style="white-space:pre"> </span> \</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>printf("%s %*c -- [true] \n", pragma_name, nCoolSpaces, ' '); \</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>} else {<span class="Apple-tab-span" style="white-space:pre"> </span> \</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>printf("%s %*c -- [false] \n", pragma_name, nCoolSpaces, ' ');\</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>}<span class="Apple-tab-span" style="white-space:pre"> </span> \</div><div>+} while (0)</div><div>+</div><div>+static void</div><div>+printActivePragmas(struct session *user_session)</div><div>+{</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>int i;</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>for (i = 0; i < ArraySize(aPragmaName); ++i) {</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>if (aPragmaName[i].ePragTyp == PragTyp_FLAG)</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>PRINT_PRAGMA(aPragmaName[i].zName, aPragmaName[i].iArg);</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>printf("Other available pragmas: \n");</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>for (i = 0; i < ArraySize(aPragmaName); ++i) {</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>if (aPragmaName[i].ePragTyp != PragTyp_FLAG)</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>printf("-- %s \n", aPragmaName[i].zName);</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div>+}</div><div>+</div><div> /*</div><div> * Process a pragma statement.</div><div> *</div><div>@@ -262,8 +290,11 @@ sqlite3Pragma(Parse * pParse, Token * pId,<span class="Apple-tab-span" style="white-space:pre"> </span>/* First part of [schema.]id field */</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>pDb = &db->mdb;</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>zLeft = sqlite3NameFromToken(db, pId);</div><div>-<span class="Apple-tab-span" style="white-space:pre"> </span>if (!zLeft)</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>if (!zLeft) {</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>printActivePragmas(user_session);</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>return;</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div>+</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>if (minusFlag) {</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>zRight = sqlite3MPrintf(db, "-%T", pValue);</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>} else {</div></div><br class=""></body></html>