/* Driver template for the LEMON parser generator.
-** The author disclaims copyright to this source code.
+** The author disclaims copyright to this source code.
*/
/* First off, code is include which follows the "include" declaration
** in the input file. */
#include <stdio.h>
-#line 33 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 51 "parse.y"
#include "sqliteInt.h"
#include "parse.h"
*/
struct AttachKey { int type; Token key; };
-#line 48 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 48 "parse.c"
/* Next is all token values, in a form suitable for use by makeheaders.
** This section will be null unless lemon is run with the -m switch.
*/
** defined, then do no error processing.
*/
#define YYCODETYPE unsigned char
-#define YYNOCODE 241
+#define YYNOCODE 244
#define YYACTIONTYPE unsigned short int
#define sqlite3ParserTOKENTYPE Token
typedef union {
sqlite3ParserTOKENTYPE yy0;
- Expr* yy2;
- struct {int value; int mask;} yy47;
- SrcList* yy67;
- ExprList* yy82;
- struct AttachKey yy132;
- struct TrigEvent yy210;
- IdList* yy240;
- struct LimitVal yy244;
- Token yy258;
- TriggerStep* yy347;
- int yy412;
- struct LikeOp yy438;
- Select* yy459;
- int yy481;
+ struct {int value; int mask;} yy35;
+ Expr* yy44;
+ int yy58;
+ Select* yy99;
+ struct LimitVal yy112;
+ Token yy144;
+ TriggerStep* yy203;
+ struct TrigEvent yy234;
+ IdList* yy258;
+ struct AttachKey yy300;
+ SrcList* yy367;
+ ExprList* yy412;
+ struct LikeOp yy432;
+ int yy487;
} YYMINORTYPE;
#define YYSTACKDEPTH 100
#define sqlite3ParserARG_SDECL Parse *pParse;
#define sqlite3ParserARG_PDECL ,Parse *pParse
#define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse
#define sqlite3ParserARG_STORE yypParser->pParse = pParse
-#define YYNSTATE 565
-#define YYNRULE 305
-#define YYERRORSYMBOL 141
-#define YYERRSYMDT yy481
+#define YYNSTATE 578
+#define YYNRULE 310
+#define YYERRORSYMBOL 143
+#define YYERRSYMDT yy487
#define YYFALLBACK 1
#define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
** yy_default[] Default action for each state.
*/
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 259, 65, 257, 112, 114, 110, 116, 66, 122, 124,
- /* 10 */ 126, 128, 130, 132, 134, 136, 138, 140, 568, 142,
- /* 20 */ 150, 122, 124, 126, 128, 130, 132, 134, 136, 138,
- /* 30 */ 140, 130, 132, 134, 136, 138, 140, 108, 94, 143,
- /* 40 */ 153, 158, 163, 152, 157, 118, 120, 112, 114, 110,
- /* 50 */ 116, 72, 122, 124, 126, 128, 130, 132, 134, 136,
- /* 60 */ 138, 140, 7, 106, 219, 258, 122, 124, 126, 128,
- /* 70 */ 130, 132, 134, 136, 138, 140, 367, 13, 9, 369,
- /* 80 */ 376, 381, 142, 871, 1, 564, 92, 27, 4, 399,
- /* 90 */ 363, 384, 844, 341, 291, 28, 10, 95, 398, 33,
- /* 100 */ 108, 94, 143, 153, 158, 163, 152, 157, 118, 120,
- /* 110 */ 112, 114, 110, 116, 96, 122, 124, 126, 128, 130,
- /* 120 */ 132, 134, 136, 138, 140, 456, 565, 142, 395, 305,
- /* 130 */ 101, 102, 103, 288, 75, 394, 3, 563, 231, 275,
- /* 140 */ 14, 15, 575, 597, 437, 108, 94, 143, 153, 158,
- /* 150 */ 163, 152, 157, 118, 120, 112, 114, 110, 116, 13,
- /* 160 */ 122, 124, 126, 128, 130, 132, 134, 136, 138, 140,
- /* 170 */ 573, 77, 142, 223, 232, 13, 490, 462, 452, 167,
- /* 180 */ 306, 169, 170, 276, 254, 3, 563, 81, 277, 183,
- /* 190 */ 108, 94, 143, 153, 158, 163, 152, 157, 118, 120,
- /* 200 */ 112, 114, 110, 116, 52, 122, 124, 126, 128, 130,
- /* 210 */ 132, 134, 136, 138, 140, 48, 54, 799, 448, 51,
- /* 220 */ 797, 77, 14, 15, 49, 363, 134, 136, 138, 140,
- /* 230 */ 16, 17, 18, 32, 33, 50, 308, 197, 14, 15,
- /* 240 */ 367, 261, 13, 369, 376, 381, 142, 37, 337, 40,
- /* 250 */ 59, 67, 69, 301, 332, 384, 364, 397, 259, 807,
- /* 260 */ 257, 334, 51, 193, 108, 94, 143, 153, 158, 163,
- /* 270 */ 152, 157, 118, 120, 112, 114, 110, 116, 262, 122,
- /* 280 */ 124, 126, 128, 130, 132, 134, 136, 138, 140, 13,
- /* 290 */ 171, 142, 40, 59, 67, 69, 301, 332, 642, 148,
- /* 300 */ 365, 159, 164, 261, 334, 14, 15, 44, 45, 108,
- /* 310 */ 94, 143, 153, 158, 163, 152, 157, 118, 120, 112,
- /* 320 */ 114, 110, 116, 258, 122, 124, 126, 128, 130, 132,
- /* 330 */ 134, 136, 138, 140, 148, 218, 159, 164, 184, 12,
- /* 340 */ 284, 417, 48, 360, 358, 293, 290, 347, 352, 353,
- /* 350 */ 289, 49, 14, 15, 688, 2, 96, 148, 4, 159,
- /* 360 */ 164, 257, 50, 530, 46, 142, 367, 155, 165, 369,
- /* 370 */ 376, 381, 13, 576, 47, 167, 75, 169, 170, 554,
- /* 380 */ 172, 384, 207, 108, 94, 143, 153, 158, 163, 152,
- /* 390 */ 157, 118, 120, 112, 114, 110, 116, 154, 122, 124,
- /* 400 */ 126, 128, 130, 132, 134, 136, 138, 140, 299, 354,
- /* 410 */ 350, 352, 353, 96, 96, 13, 34, 20, 294, 362,
- /* 420 */ 345, 144, 581, 167, 258, 169, 170, 821, 142, 558,
- /* 430 */ 213, 244, 254, 75, 75, 14, 15, 172, 186, 167,
- /* 440 */ 533, 169, 170, 146, 147, 417, 108, 94, 143, 153,
- /* 450 */ 158, 163, 152, 157, 118, 120, 112, 114, 110, 116,
- /* 460 */ 96, 122, 124, 126, 128, 130, 132, 134, 136, 138,
- /* 470 */ 140, 145, 354, 142, 22, 239, 383, 589, 14, 15,
- /* 480 */ 75, 36, 336, 419, 172, 187, 842, 213, 528, 582,
- /* 490 */ 331, 108, 94, 143, 153, 158, 163, 152, 157, 118,
- /* 500 */ 120, 112, 114, 110, 116, 249, 122, 124, 126, 128,
- /* 510 */ 130, 132, 134, 136, 138, 140, 306, 661, 142, 327,
- /* 520 */ 574, 849, 148, 11, 159, 164, 309, 316, 318, 168,
- /* 530 */ 42, 327, 666, 327, 212, 393, 108, 94, 143, 153,
- /* 540 */ 158, 163, 152, 157, 118, 120, 112, 114, 110, 116,
- /* 550 */ 96, 122, 124, 126, 128, 130, 132, 134, 136, 138,
- /* 560 */ 140, 847, 83, 142, 321, 641, 372, 31, 663, 282,
- /* 570 */ 75, 242, 308, 689, 231, 246, 167, 334, 169, 170,
- /* 580 */ 269, 108, 94, 143, 153, 158, 163, 152, 157, 118,
- /* 590 */ 120, 112, 114, 110, 116, 324, 122, 124, 126, 128,
- /* 600 */ 130, 132, 134, 136, 138, 140, 246, 328, 142, 328,
- /* 610 */ 225, 434, 24, 39, 433, 210, 167, 211, 169, 170,
- /* 620 */ 167, 331, 169, 170, 583, 435, 108, 161, 143, 153,
- /* 630 */ 158, 163, 152, 157, 118, 120, 112, 114, 110, 116,
- /* 640 */ 248, 122, 124, 126, 128, 130, 132, 134, 136, 138,
- /* 650 */ 140, 57, 58, 142, 624, 837, 323, 727, 271, 261,
- /* 660 */ 167, 243, 169, 170, 313, 312, 247, 167, 798, 169,
- /* 670 */ 170, 248, 94, 143, 153, 158, 163, 152, 157, 118,
- /* 680 */ 120, 112, 114, 110, 116, 96, 122, 124, 126, 128,
- /* 690 */ 130, 132, 134, 136, 138, 140, 279, 247, 142, 360,
- /* 700 */ 358, 6, 5, 363, 346, 75, 274, 25, 257, 489,
- /* 710 */ 13, 561, 33, 503, 13, 268, 267, 269, 143, 153,
- /* 720 */ 158, 163, 152, 157, 118, 120, 112, 114, 110, 116,
- /* 730 */ 64, 122, 124, 126, 128, 130, 132, 134, 136, 138,
- /* 740 */ 140, 26, 76, 96, 400, 77, 71, 584, 96, 451,
- /* 750 */ 166, 485, 29, 76, 402, 78, 167, 71, 169, 170,
- /* 760 */ 295, 451, 211, 75, 30, 257, 314, 172, 75, 195,
- /* 770 */ 514, 258, 292, 14, 15, 690, 77, 14, 15, 106,
- /* 780 */ 195, 77, 77, 173, 191, 315, 203, 77, 344, 215,
- /* 790 */ 106, 690, 327, 77, 173, 495, 338, 588, 529, 403,
- /* 800 */ 179, 177, 296, 453, 251, 209, 475, 327, 175, 73,
- /* 810 */ 74, 179, 177, 95, 531, 532, 35, 213, 475, 175,
- /* 820 */ 73, 74, 457, 38, 95, 378, 438, 459, 258, 501,
- /* 830 */ 449, 497, 841, 411, 461, 406, 653, 76, 311, 459,
- /* 840 */ 387, 71, 322, 81, 323, 42, 101, 102, 103, 104,
- /* 850 */ 105, 181, 185, 96, 356, 357, 96, 101, 102, 103,
- /* 860 */ 104, 105, 181, 185, 195, 76, 655, 544, 328, 71,
- /* 870 */ 96, 271, 431, 75, 106, 354, 75, 489, 173, 327,
- /* 880 */ 298, 215, 410, 328, 428, 430, 429, 426, 427, 96,
- /* 890 */ 75, 721, 195, 76, 91, 179, 177, 71, 348, 379,
- /* 900 */ 349, 323, 106, 175, 73, 74, 173, 467, 95, 75,
- /* 910 */ 271, 499, 445, 93, 77, 388, 446, 323, 323, 521,
- /* 920 */ 195, 454, 45, 179, 177, 285, 836, 42, 41, 432,
- /* 930 */ 106, 175, 73, 74, 173, 480, 95, 269, 488, 43,
- /* 940 */ 486, 101, 102, 103, 104, 105, 181, 185, 800, 721,
- /* 950 */ 417, 179, 177, 229, 422, 328, 96, 96, 96, 175,
- /* 960 */ 73, 74, 814, 96, 95, 522, 53, 486, 479, 101,
- /* 970 */ 102, 103, 104, 105, 181, 185, 75, 75, 75, 13,
- /* 980 */ 107, 109, 423, 75, 55, 8, 106, 111, 496, 857,
- /* 990 */ 19, 21, 23, 401, 96, 472, 56, 101, 102, 103,
- /* 1000 */ 104, 105, 181, 185, 536, 240, 81, 339, 342, 863,
- /* 1010 */ 546, 61, 96, 96, 75, 96, 341, 482, 113, 483,
- /* 1020 */ 95, 96, 525, 417, 456, 542, 13, 96, 96, 523,
- /* 1030 */ 417, 549, 75, 75, 552, 75, 115, 117, 472, 119,
- /* 1040 */ 96, 75, 14, 15, 81, 121, 96, 75, 75, 77,
- /* 1050 */ 417, 123, 125, 101, 102, 103, 60, 519, 466, 96,
- /* 1060 */ 75, 498, 417, 240, 127, 417, 75, 64, 500, 62,
- /* 1070 */ 129, 96, 63, 690, 96, 504, 508, 452, 68, 75,
- /* 1080 */ 417, 494, 96, 131, 96, 96, 81, 96, 502, 14,
- /* 1090 */ 15, 75, 96, 96, 75, 133, 555, 70, 135, 96,
- /* 1100 */ 506, 512, 75, 510, 75, 75, 137, 75, 139, 141,
- /* 1110 */ 96, 149, 75, 75, 81, 96, 151, 160, 516, 75,
- /* 1120 */ 96, 96, 96, 162, 598, 80, 599, 96, 96, 82,
- /* 1130 */ 75, 240, 221, 84, 174, 75, 96, 96, 96, 176,
- /* 1140 */ 75, 75, 75, 96, 178, 180, 192, 75, 75, 518,
- /* 1150 */ 96, 194, 204, 96, 79, 286, 75, 75, 75, 237,
- /* 1160 */ 206, 208, 220, 75, 96, 96, 96, 236, 85, 235,
- /* 1170 */ 75, 96, 87, 75, 241, 75, 867, 273, 215, 283,
- /* 1180 */ 86, 77, 90, 97, 75, 75, 75, 88, 382, 470,
- /* 1190 */ 474, 75, 89, 98, 99, 487, 100, 140, 156, 214,
- /* 1200 */ 667, 668, 669, 182, 205, 188, 190, 189, 196, 199,
- /* 1210 */ 198, 201, 215, 200, 202, 216, 217, 224, 222, 228,
- /* 1220 */ 227, 229, 230, 226, 234, 238, 211, 245, 233, 253,
- /* 1230 */ 250, 252, 255, 272, 260, 263, 265, 256, 264, 266,
- /* 1240 */ 270, 278, 287, 280, 297, 281, 300, 320, 303, 302,
- /* 1250 */ 305, 307, 304, 325, 333, 329, 310, 317, 326, 351,
- /* 1260 */ 355, 370, 359, 330, 319, 340, 343, 368, 371, 361,
- /* 1270 */ 374, 377, 385, 335, 375, 373, 396, 386, 380, 389,
- /* 1280 */ 390, 54, 366, 391, 404, 392, 407, 405, 409, 408,
- /* 1290 */ 412, 413, 418, 416, 829, 414, 424, 425, 415, 834,
- /* 1300 */ 420, 439, 835, 421, 436, 440, 441, 442, 443, 444,
- /* 1310 */ 447, 805, 450, 806, 455, 458, 828, 460, 728, 464,
- /* 1320 */ 729, 843, 453, 465, 468, 471, 463, 845, 476, 469,
- /* 1330 */ 481, 478, 473, 477, 484, 846, 493, 491, 848, 492,
- /* 1340 */ 660, 662, 813, 855, 505, 507, 720, 509, 511, 723,
- /* 1350 */ 513, 726, 515, 815, 524, 526, 527, 520, 517, 816,
- /* 1360 */ 817, 818, 819, 534, 535, 820, 856, 539, 858, 540,
- /* 1370 */ 545, 538, 543, 859, 862, 548, 551, 864, 553, 550,
- /* 1380 */ 537, 557, 541, 547, 865, 556, 866, 560, 559, 547,
- /* 1390 */ 562,
+ /* 0 */ 283, 581, 110, 137, 139, 135, 141, 268, 147, 149,
+ /* 10 */ 151, 153, 155, 157, 159, 161, 163, 165, 114, 119,
+ /* 20 */ 120, 167, 175, 147, 149, 151, 153, 155, 157, 159,
+ /* 30 */ 161, 163, 165, 155, 157, 159, 161, 163, 165, 132,
+ /* 40 */ 94, 168, 178, 183, 188, 177, 182, 143, 145, 137,
+ /* 50 */ 139, 135, 141, 72, 147, 149, 151, 153, 155, 157,
+ /* 60 */ 159, 161, 163, 165, 44, 45, 245, 111, 147, 149,
+ /* 70 */ 151, 153, 155, 157, 159, 161, 163, 165, 13, 427,
+ /* 80 */ 121, 578, 657, 639, 375, 347, 167, 39, 6, 5,
+ /* 90 */ 92, 3, 576, 363, 25, 355, 299, 255, 34, 269,
+ /* 100 */ 513, 129, 372, 112, 132, 94, 168, 178, 183, 188,
+ /* 110 */ 177, 182, 143, 145, 137, 139, 135, 141, 567, 147,
+ /* 120 */ 149, 151, 153, 155, 157, 159, 161, 163, 165, 77,
+ /* 130 */ 109, 373, 133, 77, 117, 119, 120, 7, 13, 32,
+ /* 140 */ 33, 300, 280, 14, 15, 377, 301, 610, 379, 386,
+ /* 150 */ 391, 167, 377, 366, 369, 379, 386, 391, 524, 330,
+ /* 160 */ 394, 64, 368, 374, 407, 705, 95, 394, 571, 132,
+ /* 170 */ 94, 168, 178, 183, 188, 177, 182, 143, 145, 137,
+ /* 180 */ 139, 135, 141, 9, 147, 149, 151, 153, 155, 157,
+ /* 190 */ 159, 161, 163, 165, 127, 125, 121, 373, 167, 101,
+ /* 200 */ 102, 103, 28, 14, 15, 408, 33, 860, 889, 1,
+ /* 210 */ 577, 3, 576, 4, 540, 332, 132, 94, 168, 178,
+ /* 220 */ 183, 188, 177, 182, 143, 145, 137, 139, 135, 141,
+ /* 230 */ 295, 147, 149, 151, 153, 155, 157, 159, 161, 163,
+ /* 240 */ 165, 2, 466, 377, 4, 167, 379, 386, 391, 16,
+ /* 250 */ 17, 18, 285, 159, 161, 163, 165, 240, 394, 173,
+ /* 260 */ 243, 184, 189, 132, 94, 168, 178, 183, 188, 177,
+ /* 270 */ 182, 143, 145, 137, 139, 135, 141, 96, 147, 149,
+ /* 280 */ 151, 153, 155, 157, 159, 161, 163, 165, 815, 291,
+ /* 290 */ 308, 813, 51, 500, 472, 462, 588, 539, 75, 322,
+ /* 300 */ 27, 133, 409, 704, 81, 272, 10, 173, 96, 184,
+ /* 310 */ 189, 96, 190, 13, 541, 542, 13, 393, 78, 167,
+ /* 320 */ 37, 361, 40, 59, 67, 69, 325, 356, 586, 75,
+ /* 330 */ 197, 368, 75, 316, 358, 95, 218, 132, 94, 168,
+ /* 340 */ 178, 183, 188, 177, 182, 143, 145, 137, 139, 135,
+ /* 350 */ 141, 77, 147, 149, 151, 153, 155, 157, 159, 161,
+ /* 360 */ 163, 165, 173, 113, 184, 189, 167, 110, 101, 102,
+ /* 370 */ 103, 318, 274, 405, 329, 121, 12, 461, 14, 15,
+ /* 380 */ 404, 14, 15, 238, 132, 94, 168, 178, 183, 188,
+ /* 390 */ 177, 182, 143, 145, 137, 139, 135, 141, 273, 147,
+ /* 400 */ 149, 151, 153, 155, 157, 159, 161, 163, 165, 96,
+ /* 410 */ 77, 51, 315, 427, 48, 36, 360, 196, 317, 129,
+ /* 420 */ 130, 112, 314, 49, 355, 209, 313, 13, 96, 110,
+ /* 430 */ 75, 197, 111, 96, 814, 485, 50, 589, 46, 461,
+ /* 440 */ 167, 40, 59, 67, 69, 325, 356, 482, 47, 75,
+ /* 450 */ 257, 467, 429, 358, 75, 197, 469, 232, 132, 94,
+ /* 460 */ 168, 178, 183, 188, 177, 182, 143, 145, 137, 139,
+ /* 470 */ 135, 141, 77, 147, 149, 151, 153, 155, 157, 159,
+ /* 480 */ 161, 163, 165, 323, 237, 13, 830, 169, 249, 258,
+ /* 490 */ 13, 703, 14, 15, 111, 96, 265, 485, 96, 192,
+ /* 500 */ 96, 194, 195, 13, 192, 167, 194, 195, 238, 171,
+ /* 510 */ 172, 476, 192, 471, 194, 195, 75, 211, 469, 75,
+ /* 520 */ 257, 75, 91, 132, 94, 168, 178, 183, 188, 177,
+ /* 530 */ 182, 143, 145, 137, 139, 135, 141, 170, 147, 149,
+ /* 540 */ 151, 153, 155, 157, 159, 161, 163, 165, 365, 48,
+ /* 550 */ 14, 15, 216, 65, 228, 14, 15, 298, 49, 251,
+ /* 560 */ 66, 13, 602, 13, 330, 96, 676, 212, 14, 15,
+ /* 570 */ 167, 50, 865, 222, 57, 58, 678, 275, 192, 20,
+ /* 580 */ 194, 195, 277, 403, 26, 351, 75, 499, 132, 94,
+ /* 590 */ 168, 178, 183, 188, 177, 182, 143, 145, 137, 139,
+ /* 600 */ 135, 141, 96, 147, 149, 151, 153, 155, 157, 159,
+ /* 610 */ 161, 163, 165, 587, 863, 83, 11, 167, 742, 345,
+ /* 620 */ 332, 312, 306, 75, 93, 358, 14, 15, 14, 15,
+ /* 630 */ 858, 173, 495, 184, 189, 132, 94, 168, 178, 183,
+ /* 640 */ 188, 177, 182, 143, 145, 137, 139, 135, 141, 594,
+ /* 650 */ 147, 149, 151, 153, 155, 157, 159, 161, 163, 165,
+ /* 660 */ 22, 272, 352, 192, 167, 194, 195, 192, 295, 194,
+ /* 670 */ 195, 285, 505, 192, 42, 194, 195, 192, 351, 194,
+ /* 680 */ 195, 595, 132, 94, 168, 178, 183, 188, 177, 182,
+ /* 690 */ 143, 145, 137, 139, 135, 141, 338, 147, 149, 151,
+ /* 700 */ 153, 155, 157, 159, 161, 163, 165, 837, 511, 286,
+ /* 710 */ 507, 167, 382, 127, 125, 192, 339, 194, 195, 192,
+ /* 720 */ 543, 194, 195, 333, 340, 342, 351, 442, 274, 132,
+ /* 730 */ 94, 168, 178, 183, 188, 177, 182, 143, 145, 137,
+ /* 740 */ 139, 135, 141, 96, 147, 149, 151, 153, 155, 157,
+ /* 750 */ 159, 161, 163, 165, 273, 352, 110, 371, 167, 373,
+ /* 760 */ 388, 438, 440, 439, 75, 499, 362, 574, 33, 335,
+ /* 770 */ 538, 668, 656, 351, 31, 413, 132, 186, 168, 178,
+ /* 780 */ 183, 188, 177, 182, 143, 145, 137, 139, 135, 141,
+ /* 790 */ 509, 147, 149, 151, 153, 155, 157, 159, 161, 163,
+ /* 800 */ 165, 96, 736, 352, 283, 167, 110, 397, 123, 124,
+ /* 810 */ 531, 421, 193, 416, 115, 681, 116, 235, 477, 236,
+ /* 820 */ 351, 111, 75, 244, 94, 168, 178, 183, 188, 177,
+ /* 830 */ 182, 143, 145, 137, 139, 135, 141, 96, 147, 149,
+ /* 840 */ 151, 153, 155, 157, 159, 161, 163, 165, 96, 879,
+ /* 850 */ 352, 881, 167, 292, 455, 293, 270, 280, 75, 108,
+ /* 860 */ 554, 319, 857, 236, 42, 447, 13, 351, 13, 75,
+ /* 870 */ 134, 111, 168, 178, 183, 188, 177, 182, 143, 145,
+ /* 880 */ 137, 139, 135, 141, 96, 147, 149, 151, 153, 155,
+ /* 890 */ 157, 159, 161, 163, 165, 96, 76, 352, 444, 96,
+ /* 900 */ 71, 96, 443, 52, 208, 75, 136, 76, 106, 24,
+ /* 910 */ 412, 71, 180, 596, 445, 54, 75, 138, 266, 106,
+ /* 920 */ 75, 140, 75, 142, 441, 220, 96, 337, 336, 29,
+ /* 930 */ 96, 14, 15, 14, 15, 133, 220, 77, 96, 198,
+ /* 940 */ 96, 458, 179, 346, 348, 347, 133, 75, 433, 96,
+ /* 950 */ 198, 75, 144, 389, 285, 347, 204, 202, 320, 75,
+ /* 960 */ 146, 75, 148, 410, 200, 73, 74, 204, 202, 95,
+ /* 970 */ 75, 150, 398, 96, 347, 200, 73, 74, 852, 96,
+ /* 980 */ 95, 76, 823, 448, 597, 71, 432, 459, 293, 420,
+ /* 990 */ 96, 705, 303, 106, 75, 480, 77, 436, 437, 81,
+ /* 1000 */ 75, 152, 101, 102, 103, 104, 105, 206, 210, 705,
+ /* 1010 */ 220, 75, 154, 101, 102, 103, 104, 105, 206, 210,
+ /* 1020 */ 133, 30, 77, 240, 198, 456, 96, 347, 35, 464,
+ /* 1030 */ 45, 490, 463, 293, 96, 873, 498, 96, 496, 96,
+ /* 1040 */ 76, 204, 202, 736, 71, 96, 601, 75, 156, 200,
+ /* 1050 */ 73, 74, 106, 96, 95, 75, 158, 295, 75, 160,
+ /* 1060 */ 75, 162, 38, 492, 96, 853, 75, 164, 76, 220,
+ /* 1070 */ 41, 191, 71, 552, 75, 166, 482, 43, 427, 133,
+ /* 1080 */ 106, 528, 568, 198, 96, 75, 197, 101, 102, 103,
+ /* 1090 */ 104, 105, 206, 210, 816, 670, 77, 220, 240, 81,
+ /* 1100 */ 204, 202, 309, 96, 77, 75, 174, 133, 200, 73,
+ /* 1110 */ 74, 198, 493, 95, 77, 8, 489, 506, 427, 427,
+ /* 1120 */ 19, 21, 23, 411, 75, 176, 42, 234, 204, 202,
+ /* 1130 */ 427, 81, 427, 562, 427, 546, 200, 73, 74, 238,
+ /* 1140 */ 522, 95, 556, 96, 529, 427, 101, 102, 103, 104,
+ /* 1150 */ 105, 206, 210, 532, 535, 496, 466, 508, 510, 266,
+ /* 1160 */ 96, 533, 885, 559, 75, 185, 565, 96, 56, 512,
+ /* 1170 */ 96, 516, 96, 520, 101, 102, 103, 104, 105, 206,
+ /* 1180 */ 210, 75, 187, 55, 526, 53, 60, 61, 75, 199,
+ /* 1190 */ 96, 75, 201, 75, 203, 96, 64, 62, 96, 70,
+ /* 1200 */ 96, 63, 96, 68, 96, 611, 96, 514, 518, 462,
+ /* 1210 */ 84, 75, 205, 504, 96, 612, 75, 217, 81, 75,
+ /* 1220 */ 219, 75, 229, 75, 231, 75, 233, 75, 246, 81,
+ /* 1230 */ 79, 80, 96, 266, 82, 75, 262, 96, 263, 310,
+ /* 1240 */ 86, 96, 261, 96, 85, 96, 247, 96, 87, 97,
+ /* 1250 */ 99, 88, 90, 75, 267, 107, 89, 98, 75, 297,
+ /* 1260 */ 75, 307, 75, 364, 75, 392, 75, 484, 75, 497,
+ /* 1270 */ 118, 100, 131, 128, 165, 122, 181, 682, 239, 683,
+ /* 1280 */ 684, 207, 230, 213, 126, 214, 215, 221, 225, 224,
+ /* 1290 */ 223, 226, 240, 227, 241, 248, 242, 250, 254, 253,
+ /* 1300 */ 252, 255, 236, 264, 259, 256, 260, 271, 276, 278,
+ /* 1310 */ 279, 281, 284, 296, 282, 289, 287, 290, 288, 294,
+ /* 1320 */ 302, 305, 311, 304, 321, 324, 326, 344, 328, 327,
+ /* 1330 */ 331, 349, 357, 329, 353, 334, 341, 343, 380, 350,
+ /* 1340 */ 378, 381, 354, 367, 359, 370, 384, 387, 396, 395,
+ /* 1350 */ 399, 400, 385, 54, 406, 414, 376, 401, 390, 383,
+ /* 1360 */ 415, 417, 418, 402, 419, 422, 425, 423, 424, 434,
+ /* 1370 */ 426, 428, 430, 845, 431, 435, 850, 446, 851, 449,
+ /* 1380 */ 450, 451, 452, 453, 821, 454, 822, 457, 460, 465,
+ /* 1390 */ 743, 468, 744, 844, 470, 859, 463, 481, 475, 479,
+ /* 1400 */ 861, 474, 473, 478, 483, 486, 487, 491, 488, 494,
+ /* 1410 */ 862, 501, 502, 503, 864, 675, 677, 829, 871, 517,
+ /* 1420 */ 515, 735, 519, 521, 523, 738, 525, 741, 831, 534,
+ /* 1430 */ 832, 833, 530, 536, 834, 527, 537, 835, 544, 836,
+ /* 1440 */ 545, 547, 872, 874, 549, 875, 557, 555, 548, 550,
+ /* 1450 */ 553, 878, 880, 882, 561, 558, 883, 560, 551, 563,
+ /* 1460 */ 566, 569, 564, 570, 572, 573, 884, 555, 555, 555,
+ /* 1470 */ 555, 575,
};
static const YYCODETYPE yy_lookahead[] = {
- /* 0 */ 25, 30, 27, 72, 73, 74, 75, 36, 77, 78,
- /* 10 */ 79, 80, 81, 82, 83, 84, 85, 86, 10, 44,
- /* 20 */ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- /* 30 */ 86, 81, 82, 83, 84, 85, 86, 62, 63, 64,
+ /* 0 */ 25, 10, 27, 74, 75, 76, 77, 26, 79, 80,
+ /* 10 */ 81, 82, 83, 84, 85, 86, 87, 88, 168, 169,
+ /* 20 */ 170, 46, 78, 79, 80, 81, 82, 83, 84, 85,
+ /* 30 */ 86, 87, 88, 83, 84, 85, 86, 87, 88, 64,
/* 40 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- /* 50 */ 75, 23, 77, 78, 79, 80, 81, 82, 83, 84,
- /* 60 */ 85, 86, 10, 60, 26, 90, 77, 78, 79, 80,
- /* 70 */ 81, 82, 83, 84, 85, 86, 92, 27, 148, 95,
- /* 80 */ 96, 97, 44, 142, 143, 144, 48, 23, 147, 25,
- /* 90 */ 150, 107, 18, 90, 24, 155, 149, 94, 158, 159,
- /* 100 */ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- /* 110 */ 72, 73, 74, 75, 150, 77, 78, 79, 80, 81,
- /* 120 */ 82, 83, 84, 85, 86, 51, 0, 44, 177, 178,
- /* 130 */ 127, 128, 129, 83, 170, 184, 10, 11, 174, 157,
- /* 140 */ 90, 91, 10, 115, 22, 62, 63, 64, 65, 66,
- /* 150 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 27,
- /* 160 */ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- /* 170 */ 10, 189, 44, 209, 210, 27, 102, 103, 104, 109,
- /* 180 */ 45, 111, 112, 201, 202, 10, 11, 113, 206, 157,
- /* 190 */ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- /* 200 */ 72, 73, 74, 75, 94, 77, 78, 79, 80, 81,
- /* 210 */ 82, 83, 84, 85, 86, 19, 106, 134, 96, 64,
- /* 220 */ 18, 189, 90, 91, 28, 150, 83, 84, 85, 86,
- /* 230 */ 14, 15, 16, 158, 159, 39, 101, 41, 90, 91,
- /* 240 */ 92, 163, 27, 95, 96, 97, 44, 92, 93, 94,
- /* 250 */ 95, 96, 97, 98, 99, 107, 181, 182, 25, 137,
- /* 260 */ 27, 106, 64, 135, 62, 63, 64, 65, 66, 67,
- /* 270 */ 68, 69, 70, 71, 72, 73, 74, 75, 200, 77,
- /* 280 */ 78, 79, 80, 81, 82, 83, 84, 85, 86, 27,
- /* 290 */ 24, 44, 94, 95, 96, 97, 98, 99, 24, 217,
- /* 300 */ 26, 219, 220, 163, 106, 90, 91, 186, 187, 62,
- /* 310 */ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- /* 320 */ 73, 74, 75, 90, 77, 78, 79, 80, 81, 82,
- /* 330 */ 83, 84, 85, 86, 217, 218, 219, 220, 24, 150,
- /* 340 */ 200, 150, 19, 81, 82, 24, 110, 165, 166, 167,
- /* 350 */ 114, 28, 90, 91, 24, 144, 150, 217, 147, 219,
- /* 360 */ 220, 27, 39, 101, 41, 44, 92, 64, 23, 95,
- /* 370 */ 96, 97, 27, 10, 51, 109, 170, 111, 112, 188,
- /* 380 */ 174, 107, 135, 62, 63, 64, 65, 66, 67, 68,
- /* 390 */ 69, 70, 71, 72, 73, 74, 75, 94, 77, 78,
- /* 400 */ 79, 80, 81, 82, 83, 84, 85, 86, 24, 227,
- /* 410 */ 165, 166, 167, 150, 150, 27, 160, 149, 212, 163,
- /* 420 */ 164, 44, 10, 109, 90, 111, 112, 10, 44, 238,
- /* 430 */ 224, 201, 202, 170, 170, 90, 91, 174, 174, 109,
- /* 440 */ 23, 111, 112, 66, 67, 150, 62, 63, 64, 65,
- /* 450 */ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- /* 460 */ 150, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- /* 470 */ 86, 94, 227, 44, 149, 212, 171, 10, 90, 91,
- /* 480 */ 170, 168, 169, 188, 174, 221, 12, 224, 71, 10,
- /* 490 */ 177, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- /* 500 */ 71, 72, 73, 74, 75, 117, 77, 78, 79, 80,
- /* 510 */ 81, 82, 83, 84, 85, 86, 45, 10, 44, 150,
- /* 520 */ 10, 10, 217, 13, 219, 220, 102, 103, 104, 110,
- /* 530 */ 101, 150, 113, 150, 224, 64, 62, 63, 64, 65,
- /* 540 */ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- /* 550 */ 150, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- /* 560 */ 86, 10, 192, 44, 183, 24, 183, 26, 10, 199,
- /* 570 */ 170, 26, 101, 24, 174, 26, 109, 106, 111, 112,
- /* 580 */ 26, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- /* 590 */ 71, 72, 73, 74, 75, 226, 77, 78, 79, 80,
- /* 600 */ 81, 82, 83, 84, 85, 86, 26, 226, 44, 226,
- /* 610 */ 210, 29, 149, 169, 32, 24, 109, 26, 111, 112,
- /* 620 */ 109, 177, 111, 112, 10, 43, 62, 63, 64, 65,
- /* 630 */ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- /* 640 */ 91, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- /* 650 */ 86, 14, 15, 44, 24, 101, 26, 10, 150, 163,
- /* 660 */ 109, 116, 111, 112, 93, 94, 117, 109, 18, 111,
- /* 670 */ 112, 91, 63, 64, 65, 66, 67, 68, 69, 70,
- /* 680 */ 71, 72, 73, 74, 75, 150, 77, 78, 79, 80,
- /* 690 */ 81, 82, 83, 84, 85, 86, 200, 117, 44, 81,
- /* 700 */ 82, 145, 146, 150, 23, 170, 23, 151, 27, 174,
- /* 710 */ 27, 158, 159, 157, 27, 24, 208, 26, 64, 65,
- /* 720 */ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- /* 730 */ 100, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- /* 740 */ 86, 152, 23, 150, 157, 189, 27, 10, 150, 157,
- /* 750 */ 157, 216, 156, 23, 153, 157, 109, 27, 111, 112,
- /* 760 */ 24, 157, 26, 170, 24, 27, 33, 174, 170, 50,
- /* 770 */ 214, 90, 174, 90, 91, 101, 189, 90, 91, 60,
- /* 780 */ 50, 189, 189, 64, 134, 52, 136, 189, 162, 115,
- /* 790 */ 60, 25, 150, 189, 64, 21, 170, 10, 150, 21,
- /* 800 */ 81, 82, 83, 62, 117, 212, 214, 150, 89, 90,
- /* 810 */ 91, 81, 82, 94, 166, 167, 161, 224, 214, 89,
- /* 820 */ 90, 91, 230, 150, 94, 183, 225, 235, 90, 55,
- /* 830 */ 229, 57, 12, 55, 230, 57, 10, 23, 105, 235,
- /* 840 */ 183, 27, 24, 113, 26, 101, 127, 128, 129, 130,
- /* 850 */ 131, 132, 133, 150, 127, 128, 150, 127, 128, 129,
- /* 860 */ 130, 131, 132, 133, 50, 23, 125, 129, 226, 27,
- /* 870 */ 150, 150, 47, 170, 60, 227, 170, 174, 64, 150,
- /* 880 */ 174, 115, 157, 226, 102, 103, 104, 53, 54, 150,
- /* 890 */ 170, 10, 50, 23, 174, 81, 82, 27, 24, 24,
- /* 900 */ 26, 26, 60, 89, 90, 91, 64, 26, 94, 170,
- /* 910 */ 150, 137, 183, 174, 189, 24, 24, 26, 26, 216,
- /* 920 */ 50, 186, 187, 81, 82, 83, 101, 101, 171, 208,
- /* 930 */ 60, 89, 90, 91, 64, 24, 94, 26, 24, 34,
- /* 940 */ 26, 127, 128, 129, 130, 131, 132, 133, 134, 10,
- /* 950 */ 150, 81, 82, 27, 134, 226, 150, 150, 150, 89,
- /* 960 */ 90, 91, 10, 150, 94, 24, 171, 26, 208, 127,
- /* 970 */ 128, 129, 130, 131, 132, 133, 170, 170, 170, 27,
- /* 980 */ 174, 174, 174, 170, 180, 12, 60, 174, 188, 10,
- /* 990 */ 17, 18, 19, 20, 150, 150, 42, 127, 128, 129,
- /* 1000 */ 130, 131, 132, 133, 31, 124, 113, 81, 82, 10,
- /* 1010 */ 37, 172, 150, 150, 170, 150, 90, 157, 174, 126,
- /* 1020 */ 94, 150, 49, 150, 51, 46, 27, 150, 150, 56,
- /* 1030 */ 150, 58, 170, 170, 61, 170, 174, 174, 150, 174,
- /* 1040 */ 150, 170, 90, 91, 113, 174, 150, 170, 170, 189,
- /* 1050 */ 150, 174, 174, 127, 128, 129, 46, 126, 213, 150,
- /* 1060 */ 170, 188, 150, 124, 174, 150, 170, 100, 188, 171,
- /* 1070 */ 174, 150, 173, 10, 150, 102, 103, 104, 171, 170,
- /* 1080 */ 150, 108, 150, 174, 150, 150, 113, 150, 188, 90,
- /* 1090 */ 91, 170, 150, 150, 170, 174, 59, 23, 174, 150,
- /* 1100 */ 188, 213, 170, 188, 170, 170, 174, 170, 174, 174,
- /* 1110 */ 150, 174, 170, 170, 113, 150, 174, 174, 188, 170,
- /* 1120 */ 150, 150, 150, 174, 115, 189, 115, 150, 150, 191,
- /* 1130 */ 170, 124, 119, 193, 174, 170, 150, 150, 150, 174,
- /* 1140 */ 170, 170, 170, 150, 174, 174, 174, 170, 170, 157,
- /* 1150 */ 150, 174, 174, 150, 190, 150, 170, 170, 170, 121,
- /* 1160 */ 174, 174, 174, 170, 150, 150, 150, 174, 194, 122,
- /* 1170 */ 170, 150, 196, 170, 174, 170, 139, 174, 115, 174,
- /* 1180 */ 195, 189, 123, 115, 170, 170, 170, 197, 174, 174,
- /* 1190 */ 174, 170, 198, 150, 115, 174, 150, 86, 94, 150,
- /* 1200 */ 113, 113, 113, 23, 134, 222, 18, 223, 23, 187,
- /* 1210 */ 24, 150, 115, 26, 24, 150, 154, 26, 120, 99,
- /* 1220 */ 172, 27, 162, 211, 172, 120, 26, 203, 211, 117,
- /* 1230 */ 150, 150, 150, 101, 150, 204, 118, 154, 205, 23,
- /* 1240 */ 150, 24, 115, 204, 24, 205, 171, 23, 175, 150,
- /* 1250 */ 178, 150, 176, 211, 162, 211, 179, 179, 172, 24,
- /* 1260 */ 228, 46, 228, 172, 179, 170, 170, 150, 23, 163,
- /* 1270 */ 24, 23, 46, 180, 171, 173, 182, 23, 171, 98,
- /* 1280 */ 150, 106, 182, 175, 150, 176, 150, 154, 25, 154,
- /* 1290 */ 150, 154, 154, 101, 12, 231, 40, 38, 232, 101,
- /* 1300 */ 233, 137, 101, 234, 47, 150, 154, 101, 150, 23,
- /* 1310 */ 171, 10, 12, 137, 185, 18, 10, 10, 125, 150,
- /* 1320 */ 125, 18, 62, 105, 150, 194, 185, 10, 125, 71,
- /* 1330 */ 215, 23, 71, 150, 23, 10, 194, 116, 10, 150,
- /* 1340 */ 10, 10, 10, 10, 116, 194, 10, 185, 105, 10,
- /* 1350 */ 194, 10, 125, 10, 150, 150, 154, 23, 215, 10,
- /* 1360 */ 10, 10, 10, 150, 24, 10, 10, 25, 10, 150,
- /* 1370 */ 35, 163, 163, 10, 10, 150, 154, 10, 21, 150,
- /* 1380 */ 236, 150, 237, 236, 10, 138, 10, 239, 139, 240,
- /* 1390 */ 140,
+ /* 50 */ 75, 76, 77, 23, 79, 80, 81, 82, 83, 84,
+ /* 60 */ 85, 86, 87, 88, 189, 190, 26, 92, 79, 80,
+ /* 70 */ 81, 82, 83, 84, 85, 86, 87, 88, 27, 152,
+ /* 80 */ 230, 0, 24, 24, 26, 26, 46, 172, 147, 148,
+ /* 90 */ 50, 10, 11, 23, 153, 180, 159, 27, 162, 118,
+ /* 100 */ 159, 165, 166, 167, 64, 65, 66, 67, 68, 69,
+ /* 110 */ 70, 71, 72, 73, 74, 75, 76, 77, 191, 79,
+ /* 120 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 192,
+ /* 130 */ 25, 152, 62, 192, 168, 169, 170, 10, 27, 160,
+ /* 140 */ 161, 204, 205, 92, 93, 94, 209, 117, 97, 98,
+ /* 150 */ 99, 46, 94, 83, 84, 97, 98, 99, 217, 47,
+ /* 160 */ 109, 102, 92, 184, 185, 25, 96, 109, 241, 64,
+ /* 170 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ /* 180 */ 75, 76, 77, 150, 79, 80, 81, 82, 83, 84,
+ /* 190 */ 85, 86, 87, 88, 83, 84, 230, 152, 46, 129,
+ /* 200 */ 130, 131, 157, 92, 93, 160, 161, 18, 144, 145,
+ /* 210 */ 146, 10, 11, 149, 103, 103, 64, 65, 66, 67,
+ /* 220 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ /* 230 */ 152, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ /* 240 */ 88, 146, 53, 94, 149, 46, 97, 98, 99, 14,
+ /* 250 */ 15, 16, 165, 85, 86, 87, 88, 117, 109, 220,
+ /* 260 */ 221, 222, 223, 64, 65, 66, 67, 68, 69, 70,
+ /* 270 */ 71, 72, 73, 74, 75, 76, 77, 152, 79, 80,
+ /* 280 */ 81, 82, 83, 84, 85, 86, 87, 88, 136, 211,
+ /* 290 */ 203, 18, 66, 104, 105, 106, 10, 152, 173, 174,
+ /* 300 */ 23, 62, 25, 24, 115, 26, 151, 220, 152, 222,
+ /* 310 */ 223, 152, 23, 27, 169, 170, 27, 175, 159, 46,
+ /* 320 */ 94, 95, 96, 97, 98, 99, 100, 101, 10, 173,
+ /* 330 */ 174, 92, 173, 174, 108, 96, 137, 64, 65, 66,
+ /* 340 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ /* 350 */ 77, 192, 79, 80, 81, 82, 83, 84, 85, 86,
+ /* 360 */ 87, 88, 220, 23, 222, 223, 46, 27, 129, 130,
+ /* 370 */ 131, 215, 93, 180, 181, 230, 152, 159, 92, 93,
+ /* 380 */ 187, 92, 93, 227, 64, 65, 66, 67, 68, 69,
+ /* 390 */ 70, 71, 72, 73, 74, 75, 76, 77, 119, 79,
+ /* 400 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 152,
+ /* 410 */ 192, 66, 24, 152, 19, 171, 172, 24, 24, 165,
+ /* 420 */ 166, 167, 112, 28, 180, 24, 116, 27, 152, 27,
+ /* 430 */ 173, 174, 92, 152, 18, 217, 41, 10, 43, 159,
+ /* 440 */ 46, 96, 97, 98, 99, 100, 101, 152, 53, 173,
+ /* 450 */ 174, 233, 191, 108, 173, 174, 238, 137, 64, 65,
+ /* 460 */ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ /* 470 */ 76, 77, 192, 79, 80, 81, 82, 83, 84, 85,
+ /* 480 */ 86, 87, 88, 24, 227, 27, 10, 46, 212, 213,
+ /* 490 */ 27, 24, 92, 93, 92, 152, 215, 217, 152, 111,
+ /* 500 */ 152, 113, 114, 27, 111, 46, 113, 114, 227, 68,
+ /* 510 */ 69, 216, 111, 233, 113, 114, 173, 174, 238, 173,
+ /* 520 */ 174, 173, 174, 64, 65, 66, 67, 68, 69, 70,
+ /* 530 */ 71, 72, 73, 74, 75, 76, 77, 96, 79, 80,
+ /* 540 */ 81, 82, 83, 84, 85, 86, 87, 88, 24, 19,
+ /* 550 */ 92, 93, 136, 31, 138, 92, 93, 23, 28, 213,
+ /* 560 */ 38, 27, 10, 27, 47, 152, 10, 224, 92, 93,
+ /* 570 */ 46, 41, 10, 43, 14, 15, 10, 119, 111, 151,
+ /* 580 */ 113, 114, 119, 66, 154, 152, 173, 174, 64, 65,
+ /* 590 */ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ /* 600 */ 76, 77, 152, 79, 80, 81, 82, 83, 84, 85,
+ /* 610 */ 86, 87, 88, 10, 10, 195, 13, 46, 10, 186,
+ /* 620 */ 103, 85, 202, 173, 174, 108, 92, 93, 92, 93,
+ /* 630 */ 12, 220, 219, 222, 223, 64, 65, 66, 67, 68,
+ /* 640 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 10,
+ /* 650 */ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
+ /* 660 */ 151, 26, 229, 111, 46, 113, 114, 111, 152, 113,
+ /* 670 */ 114, 165, 21, 111, 103, 113, 114, 111, 152, 113,
+ /* 680 */ 114, 10, 64, 65, 66, 67, 68, 69, 70, 71,
+ /* 690 */ 72, 73, 74, 75, 76, 77, 34, 79, 80, 81,
+ /* 700 */ 82, 83, 84, 85, 86, 87, 88, 10, 57, 203,
+ /* 710 */ 59, 46, 186, 83, 84, 111, 54, 113, 114, 111,
+ /* 720 */ 23, 113, 114, 104, 105, 106, 152, 211, 93, 64,
+ /* 730 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ /* 740 */ 75, 76, 77, 152, 79, 80, 81, 82, 83, 84,
+ /* 750 */ 85, 86, 87, 88, 119, 229, 27, 164, 46, 152,
+ /* 760 */ 186, 104, 105, 106, 173, 174, 173, 160, 161, 107,
+ /* 770 */ 73, 10, 24, 152, 26, 21, 64, 65, 66, 67,
+ /* 780 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ /* 790 */ 139, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ /* 800 */ 88, 152, 10, 229, 25, 46, 27, 186, 129, 130,
+ /* 810 */ 219, 57, 112, 59, 24, 115, 26, 24, 26, 26,
+ /* 820 */ 152, 92, 173, 174, 65, 66, 67, 68, 69, 70,
+ /* 830 */ 71, 72, 73, 74, 75, 76, 77, 152, 79, 80,
+ /* 840 */ 81, 82, 83, 84, 85, 86, 87, 88, 152, 10,
+ /* 850 */ 229, 10, 46, 24, 186, 26, 204, 205, 173, 174,
+ /* 860 */ 131, 24, 12, 26, 103, 22, 27, 152, 27, 173,
+ /* 870 */ 174, 92, 66, 67, 68, 69, 70, 71, 72, 73,
+ /* 880 */ 74, 75, 76, 77, 152, 79, 80, 81, 82, 83,
+ /* 890 */ 84, 85, 86, 87, 88, 152, 23, 229, 29, 152,
+ /* 900 */ 27, 152, 33, 96, 159, 173, 174, 23, 35, 151,
+ /* 910 */ 155, 27, 66, 10, 45, 108, 173, 174, 126, 35,
+ /* 920 */ 173, 174, 173, 174, 49, 52, 152, 95, 96, 158,
+ /* 930 */ 152, 92, 93, 92, 93, 62, 52, 192, 152, 66,
+ /* 940 */ 152, 98, 96, 24, 229, 26, 62, 173, 174, 152,
+ /* 950 */ 66, 173, 174, 24, 165, 26, 83, 84, 85, 173,
+ /* 960 */ 174, 173, 174, 159, 91, 92, 93, 83, 84, 96,
+ /* 970 */ 173, 174, 24, 152, 26, 91, 92, 93, 103, 152,
+ /* 980 */ 96, 23, 139, 228, 10, 27, 136, 232, 26, 159,
+ /* 990 */ 152, 10, 203, 35, 173, 174, 192, 55, 56, 115,
+ /* 1000 */ 173, 174, 129, 130, 131, 132, 133, 134, 135, 103,
+ /* 1010 */ 52, 173, 174, 129, 130, 131, 132, 133, 134, 135,
+ /* 1020 */ 62, 24, 192, 117, 66, 24, 152, 26, 163, 189,
+ /* 1030 */ 190, 24, 64, 26, 152, 10, 24, 152, 26, 152,
+ /* 1040 */ 23, 83, 84, 10, 27, 152, 10, 173, 174, 91,
+ /* 1050 */ 92, 93, 35, 152, 96, 173, 174, 152, 173, 174,
+ /* 1060 */ 173, 174, 152, 159, 152, 103, 173, 174, 23, 52,
+ /* 1070 */ 175, 159, 27, 48, 173, 174, 152, 36, 152, 62,
+ /* 1080 */ 35, 159, 61, 66, 152, 173, 174, 129, 130, 131,
+ /* 1090 */ 132, 133, 134, 135, 136, 127, 192, 52, 117, 115,
+ /* 1100 */ 83, 84, 85, 152, 192, 173, 174, 62, 91, 92,
+ /* 1110 */ 93, 66, 128, 96, 192, 12, 211, 191, 152, 152,
+ /* 1120 */ 17, 18, 19, 20, 173, 174, 103, 215, 83, 84,
+ /* 1130 */ 152, 115, 152, 30, 152, 32, 91, 92, 93, 227,
+ /* 1140 */ 216, 96, 39, 152, 128, 152, 129, 130, 131, 132,
+ /* 1150 */ 133, 134, 135, 24, 51, 26, 53, 191, 191, 126,
+ /* 1160 */ 152, 58, 141, 60, 173, 174, 63, 152, 44, 191,
+ /* 1170 */ 152, 191, 152, 191, 129, 130, 131, 132, 133, 134,
+ /* 1180 */ 135, 173, 174, 183, 191, 175, 48, 176, 173, 174,
+ /* 1190 */ 152, 173, 174, 173, 174, 152, 102, 175, 152, 23,
+ /* 1200 */ 152, 177, 152, 175, 152, 117, 152, 104, 105, 106,
+ /* 1210 */ 196, 173, 174, 110, 152, 117, 173, 174, 115, 173,
+ /* 1220 */ 174, 173, 174, 173, 174, 173, 174, 173, 174, 115,
+ /* 1230 */ 193, 192, 152, 126, 194, 173, 174, 152, 123, 152,
+ /* 1240 */ 198, 152, 124, 152, 197, 152, 121, 152, 199, 117,
+ /* 1250 */ 117, 200, 125, 173, 174, 23, 201, 152, 173, 174,
+ /* 1260 */ 173, 174, 173, 174, 173, 174, 173, 174, 173, 174,
+ /* 1270 */ 24, 152, 24, 165, 88, 231, 96, 115, 152, 115,
+ /* 1280 */ 115, 23, 136, 225, 231, 226, 18, 23, 26, 190,
+ /* 1290 */ 24, 152, 117, 24, 152, 122, 156, 26, 101, 176,
+ /* 1300 */ 214, 27, 26, 122, 214, 164, 176, 206, 152, 152,
+ /* 1310 */ 119, 152, 152, 103, 156, 120, 207, 23, 208, 152,
+ /* 1320 */ 24, 208, 117, 207, 24, 175, 152, 23, 179, 178,
+ /* 1330 */ 152, 214, 164, 181, 214, 182, 182, 182, 48, 176,
+ /* 1340 */ 152, 23, 176, 173, 183, 173, 24, 23, 23, 48,
+ /* 1350 */ 100, 152, 175, 108, 185, 152, 185, 178, 175, 177,
+ /* 1360 */ 156, 152, 156, 179, 25, 152, 235, 156, 234, 42,
+ /* 1370 */ 103, 156, 236, 12, 237, 40, 103, 49, 103, 139,
+ /* 1380 */ 152, 156, 103, 152, 10, 23, 139, 175, 12, 188,
+ /* 1390 */ 127, 18, 127, 10, 10, 18, 64, 197, 107, 73,
+ /* 1400 */ 10, 152, 188, 152, 73, 127, 152, 218, 23, 23,
+ /* 1410 */ 10, 118, 152, 197, 10, 10, 10, 10, 10, 197,
+ /* 1420 */ 118, 10, 188, 107, 197, 10, 127, 10, 10, 152,
+ /* 1430 */ 10, 10, 23, 152, 10, 218, 156, 10, 152, 10,
+ /* 1440 */ 24, 239, 10, 10, 25, 10, 239, 37, 165, 152,
+ /* 1450 */ 165, 10, 10, 10, 156, 152, 10, 152, 240, 152,
+ /* 1460 */ 21, 140, 156, 152, 141, 242, 10, 243, 243, 243,
+ /* 1470 */ 243, 142,
};
-#define YY_SHIFT_USE_DFLT (-70)
+#define YY_SHIFT_USE_DFLT (-72)
static const short yy_shift_ofst[] = {
- /* 0 */ 175, 126, -70, -70, 973, 8, 52, -70, 216, 510,
- /* 10 */ 160, 132, 363, -70, -70, -70, -70, -70, -70, 510,
- /* 20 */ 412, 510, 479, 510, 614, 64, 737, 215, 541, 740,
- /* 30 */ 787, 148, -70, 334, -70, 155, -70, 215, 198, -70,
- /* 40 */ 744, -70, 905, 323, -70, -70, -70, -70, -70, -70,
- /* 50 */ -70, 110, 744, -70, 954, -70, 637, -70, -70, 1010,
- /* 60 */ -29, 744, 967, -70, -70, -70, -70, 744, -70, 1074,
- /* 70 */ 870, 28, 719, 1009, 1011, -70, 730, -70, 70, 1001,
- /* 80 */ -70, 236, -70, 545, 1007, 1038, 1047, 1013, 1059, -70,
- /* 90 */ 870, 38, 870, 519, 870, -70, 1068, 215, 1079, 215,
- /* 100 */ -70, -70, -70, -70, -70, -70, -70, 654, 870, 609,
- /* 110 */ 870, -11, 870, -11, 870, -11, 870, -11, 870, -69,
- /* 120 */ 870, -69, 870, -50, 870, -50, 870, -50, 870, -50,
- /* 130 */ 870, 143, 870, 143, 870, 1111, 870, 1111, 870, 1111,
- /* 140 */ 870, -70, -70, 377, -70, -70, -70, -70, 870, -56,
- /* 150 */ 870, -11, -70, 303, -70, 1104, -70, -70, -70, 870,
- /* 160 */ 564, 870, -69, -70, 345, 730, 266, 419, 1087, 1088,
- /* 170 */ 1089, -70, 519, 870, 654, 870, -70, 870, -70, 870,
- /* 180 */ -70, 1180, 1001, 314, -70, 814, 83, 1070, 650, 1188,
- /* 190 */ -70, 870, 128, 870, 519, 1185, 196, 1186, -70, 1187,
- /* 200 */ 215, 1190, -70, 870, 202, 870, 247, 870, 519, 591,
- /* 210 */ -70, 870, -70, -70, 1097, 215, -70, -70, -70, 870,
- /* 220 */ 519, 1098, 870, 1191, 870, 1120, -29, -70, 1194, -70,
- /* 230 */ -70, 519, 1120, -29, -70, 870, 519, 1105, 870, 1200,
- /* 240 */ 870, 519, -70, -70, 580, -70, -70, -70, 388, -70,
- /* 250 */ 687, -70, 1112, -70, 683, 1097, 233, -70, -70, 215,
- /* 260 */ -70, -70, 1132, 1118, -70, 1216, 215, 691, -70, 215,
- /* 270 */ -70, -70, 870, 519, 1001, 330, 549, 1217, 233, 1132,
- /* 280 */ 1118, -70, 842, -25, -70, -70, 1127, 50, -70, -70,
- /* 290 */ -70, -70, 321, -70, 736, -70, 1220, -70, 384, 744,
- /* 300 */ -70, 215, 1224, -70, 135, -70, 215, -70, 424, 733,
- /* 310 */ -70, 571, -70, -70, -70, -70, 733, -70, 733, -70,
- /* 320 */ 215, 818, -70, 215, 1120, -29, -70, -70, 1120, -29,
- /* 330 */ -70, -70, 1194, -70, 954, -70, -70, 926, -70, 3,
- /* 340 */ -70, -70, 3, -70, -70, 681, 618, 874, -70, 618,
- /* 350 */ 1235, -70, -70, -70, 727, -70, -70, -70, 727, -70,
- /* 360 */ -70, -70, -70, -70, 274, -16, -70, 215, -70, 1215,
- /* 370 */ 1245, 215, 630, 1246, 744, -70, 1248, 215, 875, 744,
- /* 380 */ -70, 870, 429, -70, 1226, 1254, 215, 891, 1181, 215,
- /* 390 */ 1224, -70, 471, 1175, -70, -70, -70, -70, -70, 1001,
- /* 400 */ 467, 122, 778, 215, 1097, -70, 215, 766, 1263, 1001,
- /* 410 */ 507, 215, 1097, 582, 782, 1192, 215, 1097, -70, 1256,
- /* 420 */ 820, 1282, 870, 474, 1259, 834, -70, -70, 1198, 1201,
- /* 430 */ 825, 215, 554, -70, -70, 1257, -70, -70, 1164, 215,
- /* 440 */ 674, 1206, 215, 1286, 215, 892, 826, 1301, 1176, 1300,
- /* 450 */ 74, 511, 741, 323, -70, 1193, 1195, 1297, 1306, 1307,
- /* 460 */ 74, 1303, 1260, 215, 1218, 215, 881, 215, 1258, 870,
- /* 470 */ 519, 1317, 1261, 870, 519, 1203, 215, 1308, 215, 911,
- /* 480 */ -70, 893, 551, 1311, 870, 914, 870, 519, 1325, 519,
- /* 490 */ 1221, 215, 939, 1328, 774, 215, 1330, 215, 1331, 215,
- /* 500 */ 1332, 215, 1333, 558, 1228, 215, 939, 1336, 1260, 215,
- /* 510 */ 1243, 215, 881, 1339, 1227, 215, 1308, 931, 647, 1334,
- /* 520 */ 870, 941, 1341, 952, 1343, 215, 1097, 417, 262, 1349,
- /* 530 */ 1350, 1351, 1352, 215, 1340, 1355, 1335, 334, 1342, 215,
- /* 540 */ 979, 1356, 738, 1358, 1363, -70, 1335, 215, 1364, 999,
- /* 550 */ 1063, 1367, 1357, 215, 1037, 1247, 215, 1374, 1249, 1250,
- /* 560 */ 215, 1376, -70, -70, -70,
+ /* 0 */ 201, 81, -72, -72, 1103, -9, 127, -72, 235, 603,
+ /* 10 */ 318, 286, 427, -72, -72, -72, -72, -72, -72, 603,
+ /* 20 */ 639, 603, 671, 603, 903, 277, 974, 400, 748, 997,
+ /* 30 */ 1036, 51, -72, 402, -72, 226, -72, 400, 345, -72,
+ /* 40 */ 1023, -72, 1041, 395, -72, -72, -72, -72, -72, -72,
+ /* 50 */ -72, 807, 1023, -72, 1124, -72, 560, -72, -72, 1138,
+ /* 60 */ 522, 1023, 1094, -72, -72, -72, -72, 1023, -72, 1176,
+ /* 70 */ 1045, 30, 873, 1088, 1098, -72, 884, -72, 388, 1114,
+ /* 80 */ -72, 310, -72, -19, 1107, 1115, 1118, 1125, 1127, -72,
+ /* 90 */ 1045, 40, 1045, 665, 1045, -72, 1132, 400, 1133, 400,
+ /* 100 */ -72, -72, -72, -72, -72, -72, 1232, 1045, 105, 402,
+ /* 110 */ -72, -72, 340, 630, 790, -72, 630, 1246, -72, -72,
+ /* 120 */ -72, 679, -72, -72, -72, 679, -72, -72, -72, -72,
+ /* 130 */ 1248, -72, 1045, -72, 759, 1045, -11, 1045, -11, 1045,
+ /* 140 */ -11, 1045, -11, 1045, -71, 1045, -71, 1045, -50, 1045,
+ /* 150 */ -50, 1045, -50, 1045, -50, 1045, 168, 1045, 168, 1045,
+ /* 160 */ 1186, 1045, 1186, 1045, 1186, 1045, -72, -72, 441, -72,
+ /* 170 */ -72, -72, -72, 1045, -56, 1045, -11, -72, 846, -72,
+ /* 180 */ 1180, -72, -72, -72, 1045, 712, 1045, -71, -72, 289,
+ /* 190 */ 884, 393, 700, 1162, 1164, 1165, -72, 665, 1045, 806,
+ /* 200 */ 1045, -72, 1045, -72, 1045, -72, 1258, 1114, 401, -72,
+ /* 210 */ 958, 152, 1146, 416, 1268, -72, 1045, 199, 1045, 665,
+ /* 220 */ 1264, 530, 1266, -72, 1262, 400, 1269, -72, 1045, 273,
+ /* 230 */ 1045, 320, 1045, 665, 793, -72, 1045, -72, -72, 1175,
+ /* 240 */ 400, -72, -72, -72, 806, 1045, 665, 1173, 1045, 1271,
+ /* 250 */ 1045, 1197, 522, -72, 1274, -72, -72, 665, 1197, 522,
+ /* 260 */ -72, 1045, 665, 1181, 1045, 1276, 1045, 665, -72, -72,
+ /* 270 */ 635, -72, -72, -72, 458, -72, 463, -72, 1191, -72,
+ /* 280 */ 534, 1175, 779, 400, -72, -72, 1210, 1195, -72, 1294,
+ /* 290 */ 400, 829, -72, 400, -72, -72, 1045, 665, 1114, 467,
+ /* 300 */ 279, 1296, 779, 1210, 1195, -72, 1017, -25, -72, -72,
+ /* 310 */ 1205, 536, -72, -72, -72, -72, 394, -72, 837, -72,
+ /* 320 */ 1300, -72, 459, 1023, -72, 400, 1304, -72, 112, -72,
+ /* 330 */ 400, -72, 619, 662, -72, 832, -72, -72, -72, -72,
+ /* 340 */ 662, -72, 662, -72, 400, 919, -72, 400, 1197, 522,
+ /* 350 */ -72, -72, 1197, 522, -72, -72, 1274, -72, 1124, -72,
+ /* 360 */ -72, 70, -72, 1045, 524, -72, 239, -72, -72, 239,
+ /* 370 */ -72, -72, -72, -72, 58, 149, -72, 400, -72, 1290,
+ /* 380 */ 1318, 400, 59, 1322, 1023, -72, 1324, 400, 929, 1023,
+ /* 390 */ -72, 1045, 571, -72, 1301, 1325, 400, 948, 1250, 400,
+ /* 400 */ 1304, -72, 517, 1245, -72, -72, -72, -72, -72, 1114,
+ /* 410 */ 552, 843, 754, 400, 1175, -72, 400, 140, 1339, 1114,
+ /* 420 */ 556, 400, 1175, 869, 657, 1267, 400, 1175, -72, 1327,
+ /* 430 */ 850, 1361, 1045, 618, 1335, 942, -72, -72, 1273, 1275,
+ /* 440 */ 875, 400, 962, -72, -72, 1328, -72, -72, 1240, 400,
+ /* 450 */ 906, 1279, 400, 1362, 400, 1001, 761, 1374, 1247, 1376,
+ /* 460 */ 189, 562, 968, 395, -72, 1263, 1265, 1373, 1383, 1384,
+ /* 470 */ 189, 1377, 1332, 400, 1291, 400, 792, 400, 1326, 1045,
+ /* 480 */ 665, 1390, 1331, 1045, 665, 1278, 400, 1385, 400, 1007,
+ /* 490 */ -72, 984, 604, 1386, 1045, 1012, 1045, 665, 1400, 665,
+ /* 500 */ 1293, 400, 1033, 1404, 651, 400, 1405, 400, 1406, 400,
+ /* 510 */ 1407, 400, 1408, 566, 1302, 400, 1033, 1411, 1332, 400,
+ /* 520 */ 1316, 400, 792, 1415, 1299, 400, 1385, 1016, 608, 1409,
+ /* 530 */ 1045, 1129, 1417, 476, 1418, 400, 1175, 697, 111, 1420,
+ /* 540 */ 1421, 1424, 1427, 400, 1416, 1429, 1410, 402, 1419, 400,
+ /* 550 */ 1025, 1432, 729, 1433, 1435, -72, 1410, 400, 1441, 839,
+ /* 560 */ 981, 1442, 841, 981, 1443, 1439, 400, 1021, 1321, 400,
+ /* 570 */ 1446, 1323, 1329, 400, 1456, -72, -72, -72,
};
-#define YY_REDUCE_USE_DFLT (-71)
+#define YY_REDUCE_USE_DFLT (-151)
static const short yy_reduce_ofst[] = {
- /* 0 */ -59, 211, -71, -71, 556, -71, -71, -71, -70, -53,
- /* 10 */ -71, 189, -71, -71, -71, -71, -71, -71, -71, 268,
- /* 20 */ -71, 325, -71, 463, -71, 589, -71, -60, 596, -71,
- /* 30 */ -71, 75, -71, 256, 655, 313, -71, 673, 444, -71,
- /* 40 */ 757, -71, -71, 121, -71, -71, -71, -71, -71, -71,
- /* 50 */ -71, -71, 795, -71, 804, -71, -71, -71, -71, -71,
- /* 60 */ 839, 898, 899, -71, -71, -71, -71, 907, -71, -71,
- /* 70 */ 706, -71, 206, -71, -71, -71, 598, -71, 964, 936,
- /* 80 */ -71, 938, 370, 940, 974, 985, 976, 990, 994, -71,
- /* 90 */ 720, 82, 739, 82, 806, -71, -71, 1043, -71, 1046,
- /* 100 */ -71, -71, -71, -71, -71, -71, -71, 82, 807, 82,
- /* 110 */ 813, 82, 844, 82, 862, 82, 863, 82, 865, 82,
- /* 120 */ 871, 82, 877, 82, 878, 82, 890, 82, 896, 82,
- /* 130 */ 909, 82, 921, 82, 924, 82, 932, 82, 934, 82,
- /* 140 */ 935, 82, -71, -71, -71, -71, -71, -71, 937, 117,
- /* 150 */ 942, 82, -71, -71, -71, -71, -71, -71, -71, 943,
- /* 160 */ 82, 949, 82, -71, 1049, 593, 964, -71, -71, -71,
- /* 170 */ -71, -71, 82, 960, 82, 965, 82, 970, 82, 971,
- /* 180 */ 82, -71, 32, 964, -71, 264, 82, 983, 984, -71,
- /* 190 */ -71, 972, 82, 977, 82, -71, 1022, -71, -71, -71,
- /* 200 */ 1061, -71, -71, 978, 82, 986, 82, 987, 82, -71,
- /* 210 */ -71, 310, -71, -71, 1062, 1065, -71, -71, -71, 988,
- /* 220 */ 82, -71, -36, -71, 400, 1012, 1048, -71, 1060, -71,
- /* 230 */ -71, 82, 1017, 1052, -71, 993, 82, -71, 263, -71,
- /* 240 */ 1000, 82, -71, 230, 1024, -71, -71, -71, 1080, -71,
- /* 250 */ 1081, -71, -71, -71, 1082, 1083, 78, -71, -71, 1084,
- /* 260 */ -71, -71, 1031, 1033, -71, -71, 508, -71, -71, 1090,
- /* 270 */ -71, -71, 1003, 82, -18, 964, 1024, -71, 496, 1039,
- /* 280 */ 1040, -71, 1005, 140, -71, -71, -71, 1043, -71, -71,
- /* 290 */ -71, -71, 82, -71, -71, -71, -71, -71, 82, 1075,
- /* 300 */ -71, 1099, 1073, 1076, 1072, -71, 1101, -71, -71, 1077,
- /* 310 */ -71, -71, -71, -71, -71, -71, 1078, -71, 1085, -71,
- /* 320 */ 381, -71, -71, 369, 1042, 1086, -71, -71, 1044, 1091,
- /* 330 */ -71, -71, 1092, -71, 1093, -71, -71, 626, -71, 1095,
- /* 340 */ -71, -71, 1096, -71, -71, 1106, 182, -71, -71, 245,
- /* 350 */ -71, -71, -71, -71, 1032, -71, -71, -71, 1034, -71,
- /* 360 */ -71, -71, -71, -71, 1094, 1100, -71, 1117, -71, -71,
- /* 370 */ -71, 383, 1102, -71, 1103, -71, -71, 642, -71, 1107,
- /* 380 */ -71, 1014, 305, -71, -71, -71, 657, -71, -71, 1130,
- /* 390 */ 1108, 1109, -49, -71, -71, -71, -71, -71, -71, 587,
- /* 400 */ 964, 601, -71, 1134, 1133, -71, 1136, 1135, -71, 725,
- /* 410 */ 964, 1140, 1137, 1064, 1066, -71, 295, 1138, -71, 1067,
- /* 420 */ 1069, -71, 808, 82, -71, -71, -71, -71, -71, -71,
- /* 430 */ -71, 721, -71, -71, -71, -71, -71, -71, -71, 1155,
- /* 440 */ 1152, -71, 1158, -71, 729, -71, 1139, -71, -71, -71,
- /* 450 */ 592, 964, 1129, 735, -71, -71, -71, -71, -71, -71,
- /* 460 */ 604, -71, 1141, 1169, -71, 845, 1131, 1174, -71, 1015,
- /* 470 */ 82, -71, -71, 1016, 82, -71, 1183, 1115, 760, -71,
- /* 480 */ -71, 860, 964, -71, 535, -71, 1021, 82, -71, 82,
- /* 490 */ -71, 1189, 1142, -71, -71, 800, -71, 873, -71, 880,
- /* 500 */ -71, 900, -71, 964, -71, 912, 1151, -71, 1162, 915,
- /* 510 */ -71, 888, 1156, -71, -71, 930, 1143, 992, 964, -71,
- /* 520 */ 703, -71, -71, 1204, -71, 1205, 1202, -71, 648, -71,
- /* 530 */ -71, -71, -71, 1213, -71, -71, 1144, 1208, -71, 1219,
- /* 540 */ 1145, -71, 1209, -71, -71, -71, 1147, 1225, -71, 1229,
- /* 550 */ 1222, -71, -71, 191, -71, -71, 1231, -71, -71, 1148,
- /* 560 */ 553, -71, -71, -71, -71,
+ /* 0 */ 64, 95, -151, -151, -59, -151, -151, -151, 33, 155,
+ /* 10 */ -151, 224, -151, -151, -151, -151, -151, -151, -151, 428,
+ /* 20 */ -151, 509, -151, 758, -151, 430, -151, 45, 771, -151,
+ /* 30 */ -151, -21, -151, -64, 865, 244, -151, 910, -85, -151,
+ /* 40 */ 895, -151, -151, -125, -151, -151, -151, -151, -151, -151,
+ /* 50 */ -151, -151, 1010, -151, 1000, -151, -151, -151, -151, -151,
+ /* 60 */ 1011, 1022, 1024, -151, -151, -151, -151, 1028, -151, -151,
+ /* 70 */ 125, -151, 156, -151, -151, -151, 159, -151, 1037, 1039,
+ /* 80 */ -151, 1040, 420, 1014, 1047, 1042, 1049, 1051, 1055, -151,
+ /* 90 */ 348, 411, 450, 411, 649, -151, -151, 1105, -151, 1119,
+ /* 100 */ -151, -151, -151, -151, -151, -151, -151, 685, 411, 254,
+ /* 110 */ -151, -151, 1108, -150, -151, -151, -34, -151, -151, -151,
+ /* 120 */ -151, 1044, -151, -151, -151, 1053, -151, -151, -151, -151,
+ /* 130 */ -151, -151, 696, -151, 411, 732, 411, 743, 411, 747,
+ /* 140 */ 411, 749, 411, 778, 411, 786, 411, 788, 411, 797,
+ /* 150 */ 411, 827, 411, 838, 411, 874, 411, 882, 411, 885,
+ /* 160 */ 411, 887, 411, 893, 411, 901, 411, -151, -151, -151,
+ /* 170 */ -151, -151, -151, 932, 39, 951, 411, -151, -151, -151,
+ /* 180 */ -151, -151, -151, -151, 991, 411, 1008, 411, -151, 1126,
+ /* 190 */ 912, 1037, -151, -151, -151, -151, -151, 411, 1015, 411,
+ /* 200 */ 1018, 411, 1020, 411, 1038, 411, -151, 745, 1037, -151,
+ /* 210 */ 343, 411, 1058, 1059, -151, -151, 1043, 411, 1046, 411,
+ /* 220 */ -151, 1099, -151, -151, -151, 1139, -151, -151, 1048, 411,
+ /* 230 */ 1050, 411, 1052, 411, -151, -151, 257, -151, -151, 1140,
+ /* 240 */ 1142, -151, -151, -151, 411, 1054, 411, -151, 276, -151,
+ /* 250 */ 346, 1086, 1123, -151, 1141, -151, -151, 411, 1090, 1130,
+ /* 260 */ -151, 1062, 411, -151, 281, -151, 1080, 411, -151, 652,
+ /* 270 */ 1101, -151, -151, -151, 1156, -151, 1157, -151, -151, -151,
+ /* 280 */ 1159, 1158, 506, 1160, -151, -151, 1109, 1110, -151, -151,
+ /* 290 */ 78, -151, -151, 1167, -151, -151, 1085, 411, -63, 1037,
+ /* 300 */ 1101, -151, 789, 1116, 1113, -151, 1087, 87, -151, -151,
+ /* 310 */ -151, 1105, -151, -151, -151, -151, 411, -151, -151, -151,
+ /* 320 */ -151, -151, 411, 1150, -151, 1174, 1151, 1149, 1152, -151,
+ /* 330 */ 1178, -151, -151, 1153, -151, -151, -151, -151, -151, -151,
+ /* 340 */ 1154, -151, 1155, -151, 433, -151, -151, 715, 1117, 1163,
+ /* 350 */ -151, -151, 1120, 1166, -151, -151, 1168, -151, 1161, -151,
+ /* 360 */ -151, 593, -151, 1089, 411, -151, 1170, -151, -151, 1172,
+ /* 370 */ -151, -151, -151, -151, 1169, 1171, -151, 1188, -151, -151,
+ /* 380 */ -151, 526, 1182, -151, 1177, -151, -151, 574, -151, 1183,
+ /* 390 */ -151, 1091, 142, -151, -151, -151, 621, -151, -151, 1199,
+ /* 400 */ 1179, 1184, 193, -151, -151, -151, -151, -151, -151, 804,
+ /* 410 */ 1037, 755, -151, 1203, 1204, -151, 1209, 1206, -151, 830,
+ /* 420 */ 1037, 1213, 1211, 1134, 1131, -151, 261, 1215, -151, 1136,
+ /* 430 */ 1137, -151, 774, 411, -151, -151, -151, -151, -151, -151,
+ /* 440 */ -151, 516, -151, -151, -151, -151, -151, -151, -151, 1228,
+ /* 450 */ 1225, -151, 1231, -151, 668, -151, 1212, -151, -151, -151,
+ /* 460 */ 218, 1037, 1201, 840, -151, -151, -151, -151, -151, -151,
+ /* 470 */ 280, -151, 1214, 1249, -151, 295, 1200, 1251, -151, 821,
+ /* 480 */ 411, -151, -151, 1093, 411, -151, 1254, 1189, 905, -151,
+ /* 490 */ -151, 904, 1037, -151, 413, -151, 1095, 411, -151, 411,
+ /* 500 */ -151, 1260, 1216, -151, -151, 926, -151, 966, -151, 967,
+ /* 510 */ -151, 978, -151, 1037, -151, 980, 1222, -151, 1234, 982,
+ /* 520 */ -151, 924, 1227, -151, -151, 993, 1217, 922, 1037, -151,
+ /* 530 */ 591, -151, -151, 1277, -151, 1281, 1280, -151, 145, -151,
+ /* 540 */ -151, -151, -151, 1286, -151, -151, 1202, 1283, -151, 1297,
+ /* 550 */ 1218, -151, 1285, -151, -151, -151, 1207, 1303, -151, 1305,
+ /* 560 */ 1298, -151, 1307, 1306, -151, -151, -73, -151, -151, 1311,
+ /* 570 */ -151, -151, 1223, 607, -151, -151, -151, -151,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 571, 571, 566, 569, 870, 870, 870, 570, 577, 870,
- /* 10 */ 870, 870, 870, 597, 598, 599, 578, 579, 580, 870,
- /* 20 */ 870, 870, 870, 870, 870, 870, 870, 870, 870, 870,
- /* 30 */ 870, 870, 590, 600, 609, 592, 608, 870, 870, 610,
- /* 40 */ 653, 616, 870, 870, 654, 657, 658, 659, 852, 853,
- /* 50 */ 854, 870, 653, 617, 638, 636, 870, 639, 640, 870,
- /* 60 */ 709, 653, 624, 618, 625, 707, 708, 653, 619, 870,
- /* 70 */ 870, 739, 804, 745, 740, 736, 870, 664, 870, 870,
- /* 80 */ 665, 673, 675, 682, 721, 712, 714, 702, 716, 670,
- /* 90 */ 870, 717, 870, 718, 870, 738, 870, 870, 741, 870,
- /* 100 */ 742, 743, 744, 746, 747, 748, 751, 752, 870, 753,
- /* 110 */ 870, 754, 870, 755, 870, 756, 870, 757, 870, 758,
- /* 120 */ 870, 759, 870, 760, 870, 761, 870, 762, 870, 763,
- /* 130 */ 870, 764, 870, 765, 870, 766, 870, 767, 870, 768,
- /* 140 */ 870, 769, 770, 870, 771, 778, 785, 788, 870, 773,
- /* 150 */ 870, 772, 775, 870, 776, 870, 779, 777, 784, 870,
- /* 160 */ 870, 870, 786, 787, 870, 804, 870, 870, 870, 870,
- /* 170 */ 870, 791, 803, 870, 780, 870, 781, 870, 782, 870,
- /* 180 */ 783, 870, 870, 870, 793, 870, 870, 870, 870, 870,
- /* 190 */ 794, 870, 870, 870, 795, 870, 870, 870, 850, 870,
- /* 200 */ 870, 870, 851, 870, 870, 870, 870, 870, 796, 870,
- /* 210 */ 789, 804, 801, 802, 690, 870, 691, 792, 774, 870,
- /* 220 */ 719, 870, 870, 703, 870, 710, 709, 704, 870, 594,
- /* 230 */ 711, 706, 710, 709, 705, 870, 715, 870, 804, 713,
- /* 240 */ 870, 722, 674, 685, 683, 684, 693, 694, 870, 695,
- /* 250 */ 870, 696, 870, 697, 870, 690, 681, 595, 596, 870,
- /* 260 */ 679, 680, 699, 701, 686, 870, 870, 870, 700, 870,
- /* 270 */ 734, 735, 870, 698, 685, 870, 870, 870, 681, 699,
- /* 280 */ 701, 687, 870, 681, 676, 677, 870, 870, 678, 671,
- /* 290 */ 672, 790, 870, 737, 870, 749, 870, 750, 870, 653,
- /* 300 */ 620, 870, 808, 626, 621, 627, 870, 628, 870, 870,
- /* 310 */ 629, 870, 632, 633, 634, 635, 870, 630, 870, 631,
- /* 320 */ 870, 870, 809, 870, 710, 709, 810, 812, 710, 709,
- /* 330 */ 811, 622, 870, 623, 638, 637, 611, 870, 612, 870,
- /* 340 */ 613, 745, 870, 614, 615, 601, 827, 870, 602, 827,
- /* 350 */ 870, 603, 606, 607, 870, 822, 824, 825, 870, 823,
- /* 360 */ 826, 605, 604, 593, 870, 870, 643, 870, 646, 870,
- /* 370 */ 870, 870, 870, 870, 653, 647, 870, 870, 870, 653,
- /* 380 */ 648, 870, 653, 649, 870, 870, 870, 870, 870, 870,
- /* 390 */ 808, 626, 651, 870, 650, 652, 644, 645, 591, 870,
- /* 400 */ 870, 587, 870, 870, 690, 585, 870, 870, 870, 870,
- /* 410 */ 870, 870, 690, 833, 870, 870, 870, 690, 692, 838,
- /* 420 */ 870, 870, 870, 870, 870, 870, 839, 840, 870, 870,
- /* 430 */ 870, 870, 870, 830, 831, 870, 832, 586, 870, 870,
- /* 440 */ 870, 870, 870, 870, 870, 870, 870, 870, 870, 870,
- /* 450 */ 870, 870, 870, 870, 656, 870, 870, 870, 870, 870,
- /* 460 */ 870, 870, 655, 870, 870, 870, 870, 870, 870, 870,
- /* 470 */ 724, 870, 870, 870, 725, 870, 870, 732, 870, 870,
- /* 480 */ 733, 870, 870, 870, 870, 870, 870, 730, 870, 731,
- /* 490 */ 870, 870, 870, 870, 870, 870, 870, 870, 870, 870,
- /* 500 */ 870, 870, 870, 870, 870, 870, 870, 870, 655, 870,
- /* 510 */ 870, 870, 870, 870, 870, 870, 732, 870, 870, 870,
- /* 520 */ 870, 870, 870, 870, 870, 870, 690, 870, 827, 870,
- /* 530 */ 870, 870, 870, 870, 870, 870, 861, 870, 870, 870,
- /* 540 */ 870, 870, 870, 870, 870, 860, 861, 870, 870, 870,
- /* 550 */ 870, 870, 870, 870, 870, 870, 870, 870, 870, 868,
- /* 560 */ 870, 870, 869, 572, 567,
+ /* 0 */ 584, 584, 579, 582, 888, 888, 888, 583, 590, 888,
+ /* 10 */ 888, 888, 888, 610, 611, 612, 591, 592, 593, 888,
+ /* 20 */ 888, 888, 888, 888, 888, 888, 888, 888, 888, 888,
+ /* 30 */ 888, 888, 603, 613, 623, 605, 622, 888, 888, 624,
+ /* 40 */ 668, 631, 888, 888, 669, 672, 673, 674, 868, 869,
+ /* 50 */ 870, 888, 668, 632, 653, 651, 888, 654, 655, 888,
+ /* 60 */ 724, 668, 639, 633, 640, 722, 723, 668, 634, 888,
+ /* 70 */ 888, 754, 820, 760, 755, 751, 888, 679, 888, 888,
+ /* 80 */ 680, 688, 690, 697, 736, 727, 729, 717, 731, 685,
+ /* 90 */ 888, 732, 888, 733, 888, 753, 888, 888, 756, 888,
+ /* 100 */ 757, 758, 759, 761, 762, 763, 888, 888, 888, 888,
+ /* 110 */ 608, 609, 615, 843, 888, 616, 843, 888, 617, 620,
+ /* 120 */ 621, 888, 838, 840, 841, 888, 839, 842, 619, 618,
+ /* 130 */ 888, 764, 888, 767, 769, 888, 770, 888, 771, 888,
+ /* 140 */ 772, 888, 773, 888, 774, 888, 775, 888, 776, 888,
+ /* 150 */ 777, 888, 778, 888, 779, 888, 780, 888, 781, 888,
+ /* 160 */ 782, 888, 783, 888, 784, 888, 785, 786, 888, 787,
+ /* 170 */ 794, 801, 804, 888, 789, 888, 788, 791, 888, 792,
+ /* 180 */ 888, 795, 793, 800, 888, 888, 888, 802, 803, 888,
+ /* 190 */ 820, 888, 888, 888, 888, 888, 807, 819, 888, 796,
+ /* 200 */ 888, 797, 888, 798, 888, 799, 888, 888, 888, 809,
+ /* 210 */ 888, 888, 888, 888, 888, 810, 888, 888, 888, 811,
+ /* 220 */ 888, 888, 888, 866, 888, 888, 888, 867, 888, 888,
+ /* 230 */ 888, 888, 888, 812, 888, 805, 820, 817, 818, 705,
+ /* 240 */ 888, 706, 808, 790, 768, 888, 734, 888, 888, 718,
+ /* 250 */ 888, 725, 724, 719, 888, 607, 726, 721, 725, 724,
+ /* 260 */ 720, 888, 730, 888, 820, 728, 888, 737, 689, 700,
+ /* 270 */ 698, 699, 708, 709, 888, 710, 888, 711, 888, 712,
+ /* 280 */ 888, 705, 696, 888, 694, 695, 714, 716, 701, 888,
+ /* 290 */ 888, 888, 715, 888, 749, 750, 888, 713, 700, 888,
+ /* 300 */ 888, 888, 696, 714, 716, 702, 888, 696, 691, 692,
+ /* 310 */ 888, 888, 693, 686, 687, 806, 888, 752, 888, 765,
+ /* 320 */ 888, 766, 888, 668, 635, 888, 824, 641, 636, 642,
+ /* 330 */ 888, 643, 888, 888, 644, 888, 647, 648, 649, 650,
+ /* 340 */ 888, 645, 888, 646, 888, 888, 825, 888, 725, 724,
+ /* 350 */ 826, 828, 725, 724, 827, 637, 888, 638, 653, 652,
+ /* 360 */ 625, 888, 626, 888, 888, 627, 888, 628, 760, 888,
+ /* 370 */ 629, 630, 614, 606, 888, 888, 658, 888, 661, 888,
+ /* 380 */ 888, 888, 888, 888, 668, 662, 888, 888, 888, 668,
+ /* 390 */ 663, 888, 668, 664, 888, 888, 888, 888, 888, 888,
+ /* 400 */ 824, 641, 666, 888, 665, 667, 659, 660, 604, 888,
+ /* 410 */ 888, 600, 888, 888, 705, 598, 888, 888, 888, 888,
+ /* 420 */ 888, 888, 705, 849, 888, 888, 888, 705, 707, 854,
+ /* 430 */ 888, 888, 888, 888, 888, 888, 855, 856, 888, 888,
+ /* 440 */ 888, 888, 888, 846, 847, 888, 848, 599, 888, 888,
+ /* 450 */ 888, 888, 888, 888, 888, 888, 888, 888, 888, 888,
+ /* 460 */ 888, 888, 888, 888, 671, 888, 888, 888, 888, 888,
+ /* 470 */ 888, 888, 670, 888, 888, 888, 888, 888, 888, 888,
+ /* 480 */ 739, 888, 888, 888, 740, 888, 888, 747, 888, 888,
+ /* 490 */ 748, 888, 888, 888, 888, 888, 888, 745, 888, 746,
+ /* 500 */ 888, 888, 888, 888, 888, 888, 888, 888, 888, 888,
+ /* 510 */ 888, 888, 888, 888, 888, 888, 888, 888, 670, 888,
+ /* 520 */ 888, 888, 888, 888, 888, 888, 747, 888, 888, 888,
+ /* 530 */ 888, 888, 888, 888, 888, 888, 705, 888, 843, 888,
+ /* 540 */ 888, 888, 888, 888, 888, 888, 877, 888, 888, 888,
+ /* 550 */ 888, 888, 888, 888, 888, 876, 877, 888, 888, 888,
+ /* 560 */ 888, 888, 888, 888, 888, 888, 888, 888, 888, 888,
+ /* 570 */ 888, 888, 886, 888, 888, 887, 585, 580,
};
#define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0]))
0, /* ID => nothing */
27, /* ABORT => ID */
27, /* AFTER => ID */
+ 27, /* ANALYZE => ID */
27, /* ASC => ID */
27, /* ATTACH => ID */
27, /* BEFORE => ID */
27, /* CASCADE => ID */
+ 27, /* CAST => ID */
27, /* CONFLICT => ID */
27, /* DATABASE => ID */
27, /* DESC => ID */
"EXCLUSIVE", "COMMIT", "END", "ROLLBACK",
"CREATE", "TABLE", "TEMP", "LP",
"RP", "AS", "COMMA", "ID",
- "ABORT", "AFTER", "ASC", "ATTACH",
- "BEFORE", "CASCADE", "CONFLICT", "DATABASE",
- "DESC", "DETACH", "EACH", "FAIL",
- "FOR", "IGNORE", "INITIALLY", "INSTEAD",
- "LIKE_KW", "MATCH", "KEY", "OF",
- "OFFSET", "PRAGMA", "RAISE", "REPLACE",
- "RESTRICT", "ROW", "STATEMENT", "TRIGGER",
- "VACUUM", "VIEW", "REINDEX", "RENAME",
- "CTIME_KW", "ALTER", "OR", "AND",
- "NOT", "IS", "BETWEEN", "IN",
- "ISNULL", "NOTNULL", "NE", "EQ",
- "GT", "LE", "LT", "GE",
- "ESCAPE", "BITAND", "BITOR", "LSHIFT",
- "RSHIFT", "PLUS", "MINUS", "STAR",
- "SLASH", "REM", "CONCAT", "UMINUS",
- "UPLUS", "BITNOT", "STRING", "JOIN_KW",
- "CONSTRAINT", "DEFAULT", "NULL", "PRIMARY",
- "UNIQUE", "CHECK", "REFERENCES", "COLLATE",
- "AUTOINCR", "ON", "DELETE", "UPDATE",
- "INSERT", "SET", "DEFERRABLE", "FOREIGN",
- "DROP", "UNION", "ALL", "INTERSECT",
- "EXCEPT", "SELECT", "DISTINCT", "DOT",
- "FROM", "JOIN", "USING", "ORDER",
- "BY", "GROUP", "HAVING", "LIMIT",
- "WHERE", "INTO", "VALUES", "INTEGER",
- "FLOAT", "BLOB", "REGISTER", "VARIABLE",
- "EXISTS", "CASE", "WHEN", "THEN",
- "ELSE", "INDEX", "TO", "ADD",
- "COLUMNKW", "error", "input", "cmdlist",
- "ecmd", "cmdx", "cmd", "explain",
- "transtype", "trans_opt", "nm", "create_table",
- "create_table_args", "temp", "dbnm", "columnlist",
- "conslist_opt", "select", "column", "columnid",
- "type", "carglist", "id", "ids",
- "typename", "signed", "plus_num", "minus_num",
- "carg", "ccons", "term", "onconf",
- "sortorder", "autoinc", "expr", "idxlist_opt",
- "refargs", "defer_subclause", "refarg", "refact",
- "init_deferred_pred_opt", "conslist", "tcons", "idxlist",
- "defer_subclause_opt", "orconf", "resolvetype", "raisetype",
- "fullname", "oneselect", "multiselect_op", "distinct",
- "selcollist", "from", "where_opt", "groupby_opt",
- "having_opt", "orderby_opt", "limit_opt", "sclp",
- "as", "seltablist", "stl_prefix", "joinop",
- "on_opt", "using_opt", "seltablist_paren", "joinop2",
- "inscollist", "sortlist", "sortitem", "collate",
- "exprlist", "setlist", "insert_cmd", "inscollist_opt",
- "itemlist", "likeop", "escape", "between_op",
- "in_op", "case_operand", "case_exprlist", "case_else",
- "expritem", "uniqueflag", "idxitem", "plus_opt",
- "number", "trigger_decl", "trigger_cmd_list", "trigger_time",
- "trigger_event", "foreach_clause", "when_clause", "trigger_cmd",
- "database_kw_opt", "key_opt", "add_column_fullname", "kwcolumn_opt",
+ "ABORT", "AFTER", "ANALYZE", "ASC",
+ "ATTACH", "BEFORE", "CASCADE", "CAST",
+ "CONFLICT", "DATABASE", "DESC", "DETACH",
+ "EACH", "FAIL", "FOR", "IGNORE",
+ "INITIALLY", "INSTEAD", "LIKE_KW", "MATCH",
+ "KEY", "OF", "OFFSET", "PRAGMA",
+ "RAISE", "REPLACE", "RESTRICT", "ROW",
+ "STATEMENT", "TRIGGER", "VACUUM", "VIEW",
+ "REINDEX", "RENAME", "CTIME_KW", "ALTER",
+ "OR", "AND", "NOT", "IS",
+ "BETWEEN", "IN", "ISNULL", "NOTNULL",
+ "NE", "EQ", "GT", "LE",
+ "LT", "GE", "ESCAPE", "BITAND",
+ "BITOR", "LSHIFT", "RSHIFT", "PLUS",
+ "MINUS", "STAR", "SLASH", "REM",
+ "CONCAT", "UMINUS", "UPLUS", "BITNOT",
+ "STRING", "JOIN_KW", "CONSTRAINT", "DEFAULT",
+ "NULL", "PRIMARY", "UNIQUE", "CHECK",
+ "REFERENCES", "COLLATE", "AUTOINCR", "ON",
+ "DELETE", "UPDATE", "INSERT", "SET",
+ "DEFERRABLE", "FOREIGN", "DROP", "UNION",
+ "ALL", "INTERSECT", "EXCEPT", "SELECT",
+ "DISTINCT", "DOT", "FROM", "JOIN",
+ "USING", "ORDER", "BY", "GROUP",
+ "HAVING", "LIMIT", "WHERE", "INTO",
+ "VALUES", "INTEGER", "FLOAT", "BLOB",
+ "REGISTER", "VARIABLE", "EXISTS", "CASE",
+ "WHEN", "THEN", "ELSE", "INDEX",
+ "TO", "ADD", "COLUMNKW", "error",
+ "input", "cmdlist", "ecmd", "cmdx",
+ "cmd", "explain", "transtype", "trans_opt",
+ "nm", "create_table", "create_table_args", "temp",
+ "dbnm", "columnlist", "conslist_opt", "select",
+ "column", "columnid", "type", "carglist",
+ "id", "ids", "typetoken", "typename",
+ "signed", "plus_num", "minus_num", "carg",
+ "ccons", "term", "expr", "onconf",
+ "sortorder", "autoinc", "idxlist_opt", "refargs",
+ "defer_subclause", "refarg", "refact", "init_deferred_pred_opt",
+ "conslist", "tcons", "idxlist", "defer_subclause_opt",
+ "orconf", "resolvetype", "raisetype", "fullname",
+ "oneselect", "multiselect_op", "distinct", "selcollist",
+ "from", "where_opt", "groupby_opt", "having_opt",
+ "orderby_opt", "limit_opt", "sclp", "as",
+ "seltablist", "stl_prefix", "joinop", "on_opt",
+ "using_opt", "seltablist_paren", "joinop2", "inscollist",
+ "sortlist", "sortitem", "collate", "exprlist",
+ "setlist", "insert_cmd", "inscollist_opt", "itemlist",
+ "likeop", "escape", "between_op", "in_op",
+ "case_operand", "case_exprlist", "case_else", "expritem",
+ "uniqueflag", "idxitem", "plus_opt", "number",
+ "trigger_decl", "trigger_cmd_list", "trigger_time", "trigger_event",
+ "foreach_clause", "when_clause", "trigger_cmd", "database_kw_opt",
+ "key_opt", "add_column_fullname", "kwcolumn_opt",
};
#endif /* NDEBUG */
/* 33 */ "nm ::= STRING",
/* 34 */ "nm ::= JOIN_KW",
/* 35 */ "type ::=",
- /* 36 */ "type ::= typename",
- /* 37 */ "type ::= typename LP signed RP",
- /* 38 */ "type ::= typename LP signed COMMA signed RP",
- /* 39 */ "typename ::= ids",
- /* 40 */ "typename ::= typename ids",
- /* 41 */ "signed ::= plus_num",
- /* 42 */ "signed ::= minus_num",
- /* 43 */ "carglist ::= carglist carg",
- /* 44 */ "carglist ::=",
- /* 45 */ "carg ::= CONSTRAINT nm ccons",
- /* 46 */ "carg ::= ccons",
- /* 47 */ "carg ::= DEFAULT term",
- /* 48 */ "carg ::= DEFAULT PLUS term",
- /* 49 */ "carg ::= DEFAULT MINUS term",
- /* 50 */ "carg ::= DEFAULT id",
- /* 51 */ "ccons ::= NULL onconf",
- /* 52 */ "ccons ::= NOT NULL onconf",
- /* 53 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
- /* 54 */ "ccons ::= UNIQUE onconf",
- /* 55 */ "ccons ::= CHECK LP expr RP onconf",
- /* 56 */ "ccons ::= REFERENCES nm idxlist_opt refargs",
- /* 57 */ "ccons ::= defer_subclause",
- /* 58 */ "ccons ::= COLLATE id",
- /* 59 */ "autoinc ::=",
- /* 60 */ "autoinc ::= AUTOINCR",
- /* 61 */ "refargs ::=",
- /* 62 */ "refargs ::= refargs refarg",
- /* 63 */ "refarg ::= MATCH nm",
- /* 64 */ "refarg ::= ON DELETE refact",
- /* 65 */ "refarg ::= ON UPDATE refact",
- /* 66 */ "refarg ::= ON INSERT refact",
- /* 67 */ "refact ::= SET NULL",
- /* 68 */ "refact ::= SET DEFAULT",
- /* 69 */ "refact ::= CASCADE",
- /* 70 */ "refact ::= RESTRICT",
- /* 71 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
- /* 72 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
- /* 73 */ "init_deferred_pred_opt ::=",
- /* 74 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
- /* 75 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
- /* 76 */ "conslist_opt ::=",
- /* 77 */ "conslist_opt ::= COMMA conslist",
- /* 78 */ "conslist ::= conslist COMMA tcons",
- /* 79 */ "conslist ::= conslist tcons",
- /* 80 */ "conslist ::= tcons",
- /* 81 */ "tcons ::= CONSTRAINT nm",
- /* 82 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf",
- /* 83 */ "tcons ::= UNIQUE LP idxlist RP onconf",
- /* 84 */ "tcons ::= CHECK expr onconf",
- /* 85 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt",
- /* 86 */ "defer_subclause_opt ::=",
- /* 87 */ "defer_subclause_opt ::= defer_subclause",
- /* 88 */ "onconf ::=",
- /* 89 */ "onconf ::= ON CONFLICT resolvetype",
- /* 90 */ "orconf ::=",
- /* 91 */ "orconf ::= OR resolvetype",
- /* 92 */ "resolvetype ::= raisetype",
- /* 93 */ "resolvetype ::= IGNORE",
- /* 94 */ "resolvetype ::= REPLACE",
- /* 95 */ "cmd ::= DROP TABLE fullname",
- /* 96 */ "cmd ::= CREATE temp VIEW nm dbnm AS select",
- /* 97 */ "cmd ::= DROP VIEW fullname",
- /* 98 */ "cmd ::= select",
- /* 99 */ "select ::= oneselect",
- /* 100 */ "select ::= select multiselect_op oneselect",
- /* 101 */ "multiselect_op ::= UNION",
- /* 102 */ "multiselect_op ::= UNION ALL",
- /* 103 */ "multiselect_op ::= INTERSECT",
- /* 104 */ "multiselect_op ::= EXCEPT",
- /* 105 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
- /* 106 */ "distinct ::= DISTINCT",
- /* 107 */ "distinct ::= ALL",
- /* 108 */ "distinct ::=",
- /* 109 */ "sclp ::= selcollist COMMA",
- /* 110 */ "sclp ::=",
- /* 111 */ "selcollist ::= sclp expr as",
- /* 112 */ "selcollist ::= sclp STAR",
- /* 113 */ "selcollist ::= sclp nm DOT STAR",
- /* 114 */ "as ::= AS nm",
- /* 115 */ "as ::= ids",
- /* 116 */ "as ::=",
- /* 117 */ "from ::=",
- /* 118 */ "from ::= FROM seltablist",
- /* 119 */ "stl_prefix ::= seltablist joinop",
- /* 120 */ "stl_prefix ::=",
- /* 121 */ "seltablist ::= stl_prefix nm dbnm as on_opt using_opt",
- /* 122 */ "seltablist ::= stl_prefix LP seltablist_paren RP as on_opt using_opt",
- /* 123 */ "seltablist_paren ::= select",
- /* 124 */ "seltablist_paren ::= seltablist",
- /* 125 */ "dbnm ::=",
- /* 126 */ "dbnm ::= DOT nm",
- /* 127 */ "fullname ::= nm dbnm",
- /* 128 */ "joinop ::= COMMA",
- /* 129 */ "joinop ::= JOIN",
- /* 130 */ "joinop ::= JOIN_KW JOIN",
- /* 131 */ "joinop ::= JOIN_KW nm JOIN",
- /* 132 */ "joinop ::= JOIN_KW nm nm JOIN",
- /* 133 */ "on_opt ::= ON expr",
- /* 134 */ "on_opt ::=",
- /* 135 */ "using_opt ::= USING LP inscollist RP",
- /* 136 */ "using_opt ::=",
- /* 137 */ "orderby_opt ::=",
- /* 138 */ "orderby_opt ::= ORDER BY sortlist",
- /* 139 */ "sortlist ::= sortlist COMMA sortitem collate sortorder",
- /* 140 */ "sortlist ::= sortitem collate sortorder",
- /* 141 */ "sortitem ::= expr",
- /* 142 */ "sortorder ::= ASC",
- /* 143 */ "sortorder ::= DESC",
- /* 144 */ "sortorder ::=",
- /* 145 */ "collate ::=",
- /* 146 */ "collate ::= COLLATE id",
- /* 147 */ "groupby_opt ::=",
- /* 148 */ "groupby_opt ::= GROUP BY exprlist",
- /* 149 */ "having_opt ::=",
- /* 150 */ "having_opt ::= HAVING expr",
- /* 151 */ "limit_opt ::=",
- /* 152 */ "limit_opt ::= LIMIT expr",
- /* 153 */ "limit_opt ::= LIMIT expr OFFSET expr",
- /* 154 */ "limit_opt ::= LIMIT expr COMMA expr",
- /* 155 */ "cmd ::= DELETE FROM fullname where_opt",
- /* 156 */ "where_opt ::=",
- /* 157 */ "where_opt ::= WHERE expr",
- /* 158 */ "cmd ::= UPDATE orconf fullname SET setlist where_opt",
- /* 159 */ "setlist ::= setlist COMMA nm EQ expr",
- /* 160 */ "setlist ::= nm EQ expr",
- /* 161 */ "cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP",
- /* 162 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select",
- /* 163 */ "insert_cmd ::= INSERT orconf",
- /* 164 */ "insert_cmd ::= REPLACE",
- /* 165 */ "itemlist ::= itemlist COMMA expr",
- /* 166 */ "itemlist ::= expr",
- /* 167 */ "inscollist_opt ::=",
- /* 168 */ "inscollist_opt ::= LP inscollist RP",
- /* 169 */ "inscollist ::= inscollist COMMA nm",
- /* 170 */ "inscollist ::= nm",
- /* 171 */ "expr ::= term",
- /* 172 */ "expr ::= LP expr RP",
- /* 173 */ "term ::= NULL",
- /* 174 */ "expr ::= ID",
- /* 175 */ "expr ::= JOIN_KW",
- /* 176 */ "expr ::= nm DOT nm",
- /* 177 */ "expr ::= nm DOT nm DOT nm",
- /* 178 */ "term ::= INTEGER",
- /* 179 */ "term ::= FLOAT",
- /* 180 */ "term ::= STRING",
- /* 181 */ "term ::= BLOB",
- /* 182 */ "expr ::= REGISTER",
- /* 183 */ "expr ::= VARIABLE",
- /* 184 */ "expr ::= ID LP exprlist RP",
- /* 185 */ "expr ::= ID LP STAR RP",
- /* 186 */ "term ::= CTIME_KW",
- /* 187 */ "expr ::= expr AND expr",
- /* 188 */ "expr ::= expr OR expr",
- /* 189 */ "expr ::= expr LT expr",
- /* 190 */ "expr ::= expr GT expr",
- /* 191 */ "expr ::= expr LE expr",
- /* 192 */ "expr ::= expr GE expr",
- /* 193 */ "expr ::= expr NE expr",
- /* 194 */ "expr ::= expr EQ expr",
- /* 195 */ "expr ::= expr BITAND expr",
- /* 196 */ "expr ::= expr BITOR expr",
- /* 197 */ "expr ::= expr LSHIFT expr",
- /* 198 */ "expr ::= expr RSHIFT expr",
- /* 199 */ "expr ::= expr PLUS expr",
- /* 200 */ "expr ::= expr MINUS expr",
- /* 201 */ "expr ::= expr STAR expr",
- /* 202 */ "expr ::= expr SLASH expr",
- /* 203 */ "expr ::= expr REM expr",
- /* 204 */ "expr ::= expr CONCAT expr",
- /* 205 */ "likeop ::= LIKE_KW",
- /* 206 */ "likeop ::= NOT LIKE_KW",
- /* 207 */ "escape ::= ESCAPE expr",
- /* 208 */ "escape ::=",
- /* 209 */ "expr ::= expr likeop expr escape",
- /* 210 */ "expr ::= expr ISNULL",
- /* 211 */ "expr ::= expr IS NULL",
- /* 212 */ "expr ::= expr NOTNULL",
- /* 213 */ "expr ::= expr NOT NULL",
- /* 214 */ "expr ::= expr IS NOT NULL",
- /* 215 */ "expr ::= NOT expr",
- /* 216 */ "expr ::= BITNOT expr",
- /* 217 */ "expr ::= MINUS expr",
- /* 218 */ "expr ::= PLUS expr",
- /* 219 */ "between_op ::= BETWEEN",
- /* 220 */ "between_op ::= NOT BETWEEN",
- /* 221 */ "expr ::= expr between_op expr AND expr",
- /* 222 */ "in_op ::= IN",
- /* 223 */ "in_op ::= NOT IN",
- /* 224 */ "expr ::= expr in_op LP exprlist RP",
- /* 225 */ "expr ::= LP select RP",
- /* 226 */ "expr ::= expr in_op LP select RP",
- /* 227 */ "expr ::= expr in_op nm dbnm",
- /* 228 */ "expr ::= EXISTS LP select RP",
- /* 229 */ "expr ::= CASE case_operand case_exprlist case_else END",
- /* 230 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 231 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 232 */ "case_else ::= ELSE expr",
- /* 233 */ "case_else ::=",
- /* 234 */ "case_operand ::= expr",
- /* 235 */ "case_operand ::=",
- /* 236 */ "exprlist ::= exprlist COMMA expritem",
- /* 237 */ "exprlist ::= expritem",
- /* 238 */ "expritem ::= expr",
- /* 239 */ "expritem ::=",
- /* 240 */ "cmd ::= CREATE uniqueflag INDEX nm dbnm ON nm LP idxlist RP onconf",
- /* 241 */ "uniqueflag ::= UNIQUE",
- /* 242 */ "uniqueflag ::=",
- /* 243 */ "idxlist_opt ::=",
- /* 244 */ "idxlist_opt ::= LP idxlist RP",
- /* 245 */ "idxlist ::= idxlist COMMA idxitem collate sortorder",
- /* 246 */ "idxlist ::= idxitem collate sortorder",
- /* 247 */ "idxitem ::= nm",
- /* 248 */ "cmd ::= DROP INDEX fullname",
- /* 249 */ "cmd ::= VACUUM",
- /* 250 */ "cmd ::= VACUUM nm",
- /* 251 */ "cmd ::= PRAGMA nm dbnm EQ nm",
- /* 252 */ "cmd ::= PRAGMA nm dbnm EQ ON",
- /* 253 */ "cmd ::= PRAGMA nm dbnm EQ plus_num",
- /* 254 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 255 */ "cmd ::= PRAGMA nm dbnm LP nm RP",
- /* 256 */ "cmd ::= PRAGMA nm dbnm",
- /* 257 */ "plus_num ::= plus_opt number",
- /* 258 */ "minus_num ::= MINUS number",
- /* 259 */ "number ::= INTEGER",
- /* 260 */ "number ::= FLOAT",
- /* 261 */ "plus_opt ::= PLUS",
- /* 262 */ "plus_opt ::=",
- /* 263 */ "cmd ::= CREATE trigger_decl BEGIN trigger_cmd_list END",
- /* 264 */ "trigger_decl ::= temp TRIGGER nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
- /* 265 */ "trigger_time ::= BEFORE",
- /* 266 */ "trigger_time ::= AFTER",
- /* 267 */ "trigger_time ::= INSTEAD OF",
- /* 268 */ "trigger_time ::=",
- /* 269 */ "trigger_event ::= DELETE",
- /* 270 */ "trigger_event ::= INSERT",
- /* 271 */ "trigger_event ::= UPDATE",
- /* 272 */ "trigger_event ::= UPDATE OF inscollist",
- /* 273 */ "foreach_clause ::=",
- /* 274 */ "foreach_clause ::= FOR EACH ROW",
- /* 275 */ "foreach_clause ::= FOR EACH STATEMENT",
- /* 276 */ "when_clause ::=",
- /* 277 */ "when_clause ::= WHEN expr",
- /* 278 */ "trigger_cmd_list ::= trigger_cmd SEMI trigger_cmd_list",
- /* 279 */ "trigger_cmd_list ::=",
- /* 280 */ "trigger_cmd ::= UPDATE orconf nm SET setlist where_opt",
- /* 281 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt VALUES LP itemlist RP",
- /* 282 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt select",
- /* 283 */ "trigger_cmd ::= DELETE FROM nm where_opt",
- /* 284 */ "trigger_cmd ::= select",
- /* 285 */ "expr ::= RAISE LP IGNORE RP",
- /* 286 */ "expr ::= RAISE LP raisetype COMMA nm RP",
- /* 287 */ "raisetype ::= ROLLBACK",
- /* 288 */ "raisetype ::= ABORT",
- /* 289 */ "raisetype ::= FAIL",
- /* 290 */ "cmd ::= DROP TRIGGER fullname",
- /* 291 */ "cmd ::= ATTACH database_kw_opt ids AS nm key_opt",
- /* 292 */ "key_opt ::=",
- /* 293 */ "key_opt ::= KEY ids",
- /* 294 */ "key_opt ::= KEY BLOB",
- /* 295 */ "database_kw_opt ::= DATABASE",
- /* 296 */ "database_kw_opt ::=",
- /* 297 */ "cmd ::= DETACH database_kw_opt nm",
- /* 298 */ "cmd ::= REINDEX",
- /* 299 */ "cmd ::= REINDEX nm dbnm",
- /* 300 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 301 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column",
- /* 302 */ "add_column_fullname ::= fullname",
- /* 303 */ "kwcolumn_opt ::=",
- /* 304 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 36 */ "type ::= typetoken",
+ /* 37 */ "typetoken ::= typename",
+ /* 38 */ "typetoken ::= typename LP signed RP",
+ /* 39 */ "typetoken ::= typename LP signed COMMA signed RP",
+ /* 40 */ "typename ::= ids",
+ /* 41 */ "typename ::= typename ids",
+ /* 42 */ "signed ::= plus_num",
+ /* 43 */ "signed ::= minus_num",
+ /* 44 */ "carglist ::= carglist carg",
+ /* 45 */ "carglist ::=",
+ /* 46 */ "carg ::= CONSTRAINT nm ccons",
+ /* 47 */ "carg ::= ccons",
+ /* 48 */ "carg ::= DEFAULT term",
+ /* 49 */ "carg ::= DEFAULT LP expr RP",
+ /* 50 */ "carg ::= DEFAULT PLUS term",
+ /* 51 */ "carg ::= DEFAULT MINUS term",
+ /* 52 */ "carg ::= DEFAULT id",
+ /* 53 */ "ccons ::= NULL onconf",
+ /* 54 */ "ccons ::= NOT NULL onconf",
+ /* 55 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
+ /* 56 */ "ccons ::= UNIQUE onconf",
+ /* 57 */ "ccons ::= CHECK LP expr RP onconf",
+ /* 58 */ "ccons ::= REFERENCES nm idxlist_opt refargs",
+ /* 59 */ "ccons ::= defer_subclause",
+ /* 60 */ "ccons ::= COLLATE id",
+ /* 61 */ "autoinc ::=",
+ /* 62 */ "autoinc ::= AUTOINCR",
+ /* 63 */ "refargs ::=",
+ /* 64 */ "refargs ::= refargs refarg",
+ /* 65 */ "refarg ::= MATCH nm",
+ /* 66 */ "refarg ::= ON DELETE refact",
+ /* 67 */ "refarg ::= ON UPDATE refact",
+ /* 68 */ "refarg ::= ON INSERT refact",
+ /* 69 */ "refact ::= SET NULL",
+ /* 70 */ "refact ::= SET DEFAULT",
+ /* 71 */ "refact ::= CASCADE",
+ /* 72 */ "refact ::= RESTRICT",
+ /* 73 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
+ /* 74 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
+ /* 75 */ "init_deferred_pred_opt ::=",
+ /* 76 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
+ /* 77 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
+ /* 78 */ "conslist_opt ::=",
+ /* 79 */ "conslist_opt ::= COMMA conslist",
+ /* 80 */ "conslist ::= conslist COMMA tcons",
+ /* 81 */ "conslist ::= conslist tcons",
+ /* 82 */ "conslist ::= tcons",
+ /* 83 */ "tcons ::= CONSTRAINT nm",
+ /* 84 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf",
+ /* 85 */ "tcons ::= UNIQUE LP idxlist RP onconf",
+ /* 86 */ "tcons ::= CHECK expr onconf",
+ /* 87 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt",
+ /* 88 */ "defer_subclause_opt ::=",
+ /* 89 */ "defer_subclause_opt ::= defer_subclause",
+ /* 90 */ "onconf ::=",
+ /* 91 */ "onconf ::= ON CONFLICT resolvetype",
+ /* 92 */ "orconf ::=",
+ /* 93 */ "orconf ::= OR resolvetype",
+ /* 94 */ "resolvetype ::= raisetype",
+ /* 95 */ "resolvetype ::= IGNORE",
+ /* 96 */ "resolvetype ::= REPLACE",
+ /* 97 */ "cmd ::= DROP TABLE fullname",
+ /* 98 */ "cmd ::= CREATE temp VIEW nm dbnm AS select",
+ /* 99 */ "cmd ::= DROP VIEW fullname",
+ /* 100 */ "cmd ::= select",
+ /* 101 */ "select ::= oneselect",
+ /* 102 */ "select ::= select multiselect_op oneselect",
+ /* 103 */ "multiselect_op ::= UNION",
+ /* 104 */ "multiselect_op ::= UNION ALL",
+ /* 105 */ "multiselect_op ::= INTERSECT",
+ /* 106 */ "multiselect_op ::= EXCEPT",
+ /* 107 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
+ /* 108 */ "distinct ::= DISTINCT",
+ /* 109 */ "distinct ::= ALL",
+ /* 110 */ "distinct ::=",
+ /* 111 */ "sclp ::= selcollist COMMA",
+ /* 112 */ "sclp ::=",
+ /* 113 */ "selcollist ::= sclp expr as",
+ /* 114 */ "selcollist ::= sclp STAR",
+ /* 115 */ "selcollist ::= sclp nm DOT STAR",
+ /* 116 */ "as ::= AS nm",
+ /* 117 */ "as ::= ids",
+ /* 118 */ "as ::=",
+ /* 119 */ "from ::=",
+ /* 120 */ "from ::= FROM seltablist",
+ /* 121 */ "stl_prefix ::= seltablist joinop",
+ /* 122 */ "stl_prefix ::=",
+ /* 123 */ "seltablist ::= stl_prefix nm dbnm as on_opt using_opt",
+ /* 124 */ "seltablist ::= stl_prefix LP seltablist_paren RP as on_opt using_opt",
+ /* 125 */ "seltablist_paren ::= select",
+ /* 126 */ "seltablist_paren ::= seltablist",
+ /* 127 */ "dbnm ::=",
+ /* 128 */ "dbnm ::= DOT nm",
+ /* 129 */ "fullname ::= nm dbnm",
+ /* 130 */ "joinop ::= COMMA",
+ /* 131 */ "joinop ::= JOIN",
+ /* 132 */ "joinop ::= JOIN_KW JOIN",
+ /* 133 */ "joinop ::= JOIN_KW nm JOIN",
+ /* 134 */ "joinop ::= JOIN_KW nm nm JOIN",
+ /* 135 */ "on_opt ::= ON expr",
+ /* 136 */ "on_opt ::=",
+ /* 137 */ "using_opt ::= USING LP inscollist RP",
+ /* 138 */ "using_opt ::=",
+ /* 139 */ "orderby_opt ::=",
+ /* 140 */ "orderby_opt ::= ORDER BY sortlist",
+ /* 141 */ "sortlist ::= sortlist COMMA sortitem collate sortorder",
+ /* 142 */ "sortlist ::= sortitem collate sortorder",
+ /* 143 */ "sortitem ::= expr",
+ /* 144 */ "sortorder ::= ASC",
+ /* 145 */ "sortorder ::= DESC",
+ /* 146 */ "sortorder ::=",
+ /* 147 */ "collate ::=",
+ /* 148 */ "collate ::= COLLATE id",
+ /* 149 */ "groupby_opt ::=",
+ /* 150 */ "groupby_opt ::= GROUP BY exprlist",
+ /* 151 */ "having_opt ::=",
+ /* 152 */ "having_opt ::= HAVING expr",
+ /* 153 */ "limit_opt ::=",
+ /* 154 */ "limit_opt ::= LIMIT expr",
+ /* 155 */ "limit_opt ::= LIMIT expr OFFSET expr",
+ /* 156 */ "limit_opt ::= LIMIT expr COMMA expr",
+ /* 157 */ "cmd ::= DELETE FROM fullname where_opt",
+ /* 158 */ "where_opt ::=",
+ /* 159 */ "where_opt ::= WHERE expr",
+ /* 160 */ "cmd ::= UPDATE orconf fullname SET setlist where_opt",
+ /* 161 */ "setlist ::= setlist COMMA nm EQ expr",
+ /* 162 */ "setlist ::= nm EQ expr",
+ /* 163 */ "cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP",
+ /* 164 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select",
+ /* 165 */ "insert_cmd ::= INSERT orconf",
+ /* 166 */ "insert_cmd ::= REPLACE",
+ /* 167 */ "itemlist ::= itemlist COMMA expr",
+ /* 168 */ "itemlist ::= expr",
+ /* 169 */ "inscollist_opt ::=",
+ /* 170 */ "inscollist_opt ::= LP inscollist RP",
+ /* 171 */ "inscollist ::= inscollist COMMA nm",
+ /* 172 */ "inscollist ::= nm",
+ /* 173 */ "expr ::= term",
+ /* 174 */ "expr ::= LP expr RP",
+ /* 175 */ "term ::= NULL",
+ /* 176 */ "expr ::= ID",
+ /* 177 */ "expr ::= JOIN_KW",
+ /* 178 */ "expr ::= nm DOT nm",
+ /* 179 */ "expr ::= nm DOT nm DOT nm",
+ /* 180 */ "term ::= INTEGER",
+ /* 181 */ "term ::= FLOAT",
+ /* 182 */ "term ::= STRING",
+ /* 183 */ "term ::= BLOB",
+ /* 184 */ "expr ::= REGISTER",
+ /* 185 */ "expr ::= VARIABLE",
+ /* 186 */ "expr ::= CAST LP expr AS typetoken RP",
+ /* 187 */ "expr ::= ID LP exprlist RP",
+ /* 188 */ "expr ::= ID LP STAR RP",
+ /* 189 */ "term ::= CTIME_KW",
+ /* 190 */ "expr ::= expr AND expr",
+ /* 191 */ "expr ::= expr OR expr",
+ /* 192 */ "expr ::= expr LT expr",
+ /* 193 */ "expr ::= expr GT expr",
+ /* 194 */ "expr ::= expr LE expr",
+ /* 195 */ "expr ::= expr GE expr",
+ /* 196 */ "expr ::= expr NE expr",
+ /* 197 */ "expr ::= expr EQ expr",
+ /* 198 */ "expr ::= expr BITAND expr",
+ /* 199 */ "expr ::= expr BITOR expr",
+ /* 200 */ "expr ::= expr LSHIFT expr",
+ /* 201 */ "expr ::= expr RSHIFT expr",
+ /* 202 */ "expr ::= expr PLUS expr",
+ /* 203 */ "expr ::= expr MINUS expr",
+ /* 204 */ "expr ::= expr STAR expr",
+ /* 205 */ "expr ::= expr SLASH expr",
+ /* 206 */ "expr ::= expr REM expr",
+ /* 207 */ "expr ::= expr CONCAT expr",
+ /* 208 */ "likeop ::= LIKE_KW",
+ /* 209 */ "likeop ::= NOT LIKE_KW",
+ /* 210 */ "escape ::= ESCAPE expr",
+ /* 211 */ "escape ::=",
+ /* 212 */ "expr ::= expr likeop expr escape",
+ /* 213 */ "expr ::= expr ISNULL",
+ /* 214 */ "expr ::= expr IS NULL",
+ /* 215 */ "expr ::= expr NOTNULL",
+ /* 216 */ "expr ::= expr NOT NULL",
+ /* 217 */ "expr ::= expr IS NOT NULL",
+ /* 218 */ "expr ::= NOT expr",
+ /* 219 */ "expr ::= BITNOT expr",
+ /* 220 */ "expr ::= MINUS expr",
+ /* 221 */ "expr ::= PLUS expr",
+ /* 222 */ "between_op ::= BETWEEN",
+ /* 223 */ "between_op ::= NOT BETWEEN",
+ /* 224 */ "expr ::= expr between_op expr AND expr",
+ /* 225 */ "in_op ::= IN",
+ /* 226 */ "in_op ::= NOT IN",
+ /* 227 */ "expr ::= expr in_op LP exprlist RP",
+ /* 228 */ "expr ::= LP select RP",
+ /* 229 */ "expr ::= expr in_op LP select RP",
+ /* 230 */ "expr ::= expr in_op nm dbnm",
+ /* 231 */ "expr ::= EXISTS LP select RP",
+ /* 232 */ "expr ::= CASE case_operand case_exprlist case_else END",
+ /* 233 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 234 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 235 */ "case_else ::= ELSE expr",
+ /* 236 */ "case_else ::=",
+ /* 237 */ "case_operand ::= expr",
+ /* 238 */ "case_operand ::=",
+ /* 239 */ "exprlist ::= exprlist COMMA expritem",
+ /* 240 */ "exprlist ::= expritem",
+ /* 241 */ "expritem ::= expr",
+ /* 242 */ "expritem ::=",
+ /* 243 */ "cmd ::= CREATE uniqueflag INDEX nm dbnm ON nm LP idxlist RP onconf",
+ /* 244 */ "uniqueflag ::= UNIQUE",
+ /* 245 */ "uniqueflag ::=",
+ /* 246 */ "idxlist_opt ::=",
+ /* 247 */ "idxlist_opt ::= LP idxlist RP",
+ /* 248 */ "idxlist ::= idxlist COMMA idxitem collate sortorder",
+ /* 249 */ "idxlist ::= idxitem collate sortorder",
+ /* 250 */ "idxitem ::= nm",
+ /* 251 */ "cmd ::= DROP INDEX fullname",
+ /* 252 */ "cmd ::= VACUUM",
+ /* 253 */ "cmd ::= VACUUM nm",
+ /* 254 */ "cmd ::= PRAGMA nm dbnm EQ nm",
+ /* 255 */ "cmd ::= PRAGMA nm dbnm EQ ON",
+ /* 256 */ "cmd ::= PRAGMA nm dbnm EQ plus_num",
+ /* 257 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 258 */ "cmd ::= PRAGMA nm dbnm LP nm RP",
+ /* 259 */ "cmd ::= PRAGMA nm dbnm",
+ /* 260 */ "plus_num ::= plus_opt number",
+ /* 261 */ "minus_num ::= MINUS number",
+ /* 262 */ "number ::= INTEGER",
+ /* 263 */ "number ::= FLOAT",
+ /* 264 */ "plus_opt ::= PLUS",
+ /* 265 */ "plus_opt ::=",
+ /* 266 */ "cmd ::= CREATE trigger_decl BEGIN trigger_cmd_list END",
+ /* 267 */ "trigger_decl ::= temp TRIGGER nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
+ /* 268 */ "trigger_time ::= BEFORE",
+ /* 269 */ "trigger_time ::= AFTER",
+ /* 270 */ "trigger_time ::= INSTEAD OF",
+ /* 271 */ "trigger_time ::=",
+ /* 272 */ "trigger_event ::= DELETE",
+ /* 273 */ "trigger_event ::= INSERT",
+ /* 274 */ "trigger_event ::= UPDATE",
+ /* 275 */ "trigger_event ::= UPDATE OF inscollist",
+ /* 276 */ "foreach_clause ::=",
+ /* 277 */ "foreach_clause ::= FOR EACH ROW",
+ /* 278 */ "foreach_clause ::= FOR EACH STATEMENT",
+ /* 279 */ "when_clause ::=",
+ /* 280 */ "when_clause ::= WHEN expr",
+ /* 281 */ "trigger_cmd_list ::= trigger_cmd SEMI trigger_cmd_list",
+ /* 282 */ "trigger_cmd_list ::=",
+ /* 283 */ "trigger_cmd ::= UPDATE orconf nm SET setlist where_opt",
+ /* 284 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt VALUES LP itemlist RP",
+ /* 285 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt select",
+ /* 286 */ "trigger_cmd ::= DELETE FROM nm where_opt",
+ /* 287 */ "trigger_cmd ::= select",
+ /* 288 */ "expr ::= RAISE LP IGNORE RP",
+ /* 289 */ "expr ::= RAISE LP raisetype COMMA nm RP",
+ /* 290 */ "raisetype ::= ROLLBACK",
+ /* 291 */ "raisetype ::= ABORT",
+ /* 292 */ "raisetype ::= FAIL",
+ /* 293 */ "cmd ::= DROP TRIGGER fullname",
+ /* 294 */ "cmd ::= ATTACH database_kw_opt ids AS nm key_opt",
+ /* 295 */ "key_opt ::=",
+ /* 296 */ "key_opt ::= KEY ids",
+ /* 297 */ "key_opt ::= KEY BLOB",
+ /* 298 */ "database_kw_opt ::= DATABASE",
+ /* 299 */ "database_kw_opt ::=",
+ /* 300 */ "cmd ::= DETACH database_kw_opt nm",
+ /* 301 */ "cmd ::= REINDEX",
+ /* 302 */ "cmd ::= REINDEX nm dbnm",
+ /* 303 */ "cmd ::= ANALYZE",
+ /* 304 */ "cmd ::= ANALYZE nm dbnm",
+ /* 305 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 306 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column",
+ /* 307 */ "add_column_fullname ::= fullname",
+ /* 308 */ "kwcolumn_opt ::=",
+ /* 309 */ "kwcolumn_opt ::= COLUMNKW",
};
#endif /* NDEBUG */
** which appear on the RHS of the rule, but which are not used
** inside the C code.
*/
- case 157:
- case 189:
- case 206:
-#line 334 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3SelectDelete((yypminor->yy459));}
-#line 1301 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 159:
+ case 192:
+ case 209:
+#line 369 "parse.y"
+{sqlite3SelectDelete((yypminor->yy99));}
+#line 1328 "parse.c"
break;
- case 170:
+ case 173:
case 174:
- case 194:
- case 196:
- case 204:
- case 210:
- case 224:
-#line 593 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3ExprDelete((yypminor->yy2));}
-#line 1312 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 175:
- case 183:
- case 192:
- case 195:
case 197:
case 199:
- case 209:
- case 212:
+ case 207:
case 213:
- case 216:
- case 222:
-#line 812 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3ExprListDelete((yypminor->yy82));}
-#line 1327 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 227:
+#line 628 "parse.y"
+{sqlite3ExprDelete((yypminor->yy44));}
+#line 1339 "parse.c"
break;
- case 188:
- case 193:
- case 201:
+ case 178:
+ case 186:
+ case 195:
+ case 198:
+ case 200:
case 202:
-#line 463 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3SrcListDelete((yypminor->yy67));}
-#line 1335 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 212:
+ case 215:
+ case 216:
+ case 219:
+ case 225:
+#line 853 "parse.y"
+{sqlite3ExprListDelete((yypminor->yy412));}
+#line 1354 "parse.c"
break;
- case 198:
-#line 525 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 191:
+ case 196:
+ case 204:
+ case 205:
+#line 498 "parse.y"
+{sqlite3SrcListDelete((yypminor->yy367));}
+#line 1362 "parse.c"
+ break;
+ case 201:
+#line 560 "parse.y"
{
- sqlite3ExprDelete((yypminor->yy244).pLimit);
- sqlite3ExprDelete((yypminor->yy244).pOffset);
+ sqlite3ExprDelete((yypminor->yy112).pLimit);
+ sqlite3ExprDelete((yypminor->yy112).pOffset);
}
-#line 1343 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1370 "parse.c"
break;
- case 205:
case 208:
- case 215:
-#line 481 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3IdListDelete((yypminor->yy240));}
-#line 1350 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 211:
+ case 218:
+#line 516 "parse.y"
+{sqlite3IdListDelete((yypminor->yy258));}
+#line 1377 "parse.c"
break;
- case 230:
- case 235:
-#line 905 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3DeleteTriggerStep((yypminor->yy347));}
-#line 1356 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 233:
+ case 238:
+#line 946 "parse.y"
+{sqlite3DeleteTriggerStep((yypminor->yy203));}
+#line 1383 "parse.c"
break;
- case 232:
-#line 889 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3IdListDelete((yypminor->yy210).b);}
-#line 1361 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 235:
+#line 930 "parse.y"
+{sqlite3IdListDelete((yypminor->yy234).b);}
+#line 1388 "parse.c"
break;
default: break; /* If no destructor action specified: do nothing */
}
YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
unsigned char nrhs; /* Number of right-hand side symbols in the rule */
} yyRuleInfo[] = {
- { 142, 1 },
- { 143, 2 },
- { 143, 1 },
- { 145, 1 },
{ 144, 1 },
- { 144, 3 },
- { 147, 0 },
+ { 145, 2 },
+ { 145, 1 },
{ 147, 1 },
+ { 146, 1 },
{ 146, 3 },
{ 149, 0 },
{ 149, 1 },
- { 149, 2 },
- { 148, 0 },
- { 148, 1 },
- { 148, 1 },
- { 148, 1 },
- { 146, 2 },
- { 146, 2 },
- { 146, 2 },
- { 146, 2 },
- { 151, 5 },
- { 153, 1 },
- { 153, 0 },
- { 152, 4 },
- { 152, 2 },
- { 155, 3 },
- { 155, 1 },
- { 158, 3 },
- { 159, 1 },
- { 162, 1 },
- { 163, 1 },
- { 163, 1 },
+ { 148, 3 },
+ { 151, 0 },
+ { 151, 1 },
+ { 151, 2 },
+ { 150, 0 },
{ 150, 1 },
{ 150, 1 },
{ 150, 1 },
- { 160, 0 },
- { 160, 1 },
- { 160, 4 },
- { 160, 6 },
+ { 148, 2 },
+ { 148, 2 },
+ { 148, 2 },
+ { 148, 2 },
+ { 153, 5 },
+ { 155, 1 },
+ { 155, 0 },
+ { 154, 4 },
+ { 154, 2 },
+ { 157, 3 },
+ { 157, 1 },
+ { 160, 3 },
+ { 161, 1 },
{ 164, 1 },
- { 164, 2 },
{ 165, 1 },
{ 165, 1 },
- { 161, 2 },
- { 161, 0 },
- { 168, 3 },
+ { 152, 1 },
+ { 152, 1 },
+ { 152, 1 },
+ { 162, 0 },
+ { 162, 1 },
+ { 166, 1 },
+ { 166, 4 },
+ { 166, 6 },
+ { 167, 1 },
+ { 167, 2 },
{ 168, 1 },
- { 168, 2 },
- { 168, 3 },
- { 168, 3 },
- { 168, 2 },
- { 169, 2 },
- { 169, 3 },
- { 169, 5 },
- { 169, 2 },
- { 169, 5 },
- { 169, 4 },
- { 169, 1 },
- { 169, 2 },
- { 173, 0 },
- { 173, 1 },
- { 176, 0 },
- { 176, 2 },
- { 178, 2 },
- { 178, 3 },
- { 178, 3 },
- { 178, 3 },
- { 179, 2 },
+ { 168, 1 },
+ { 163, 2 },
+ { 163, 0 },
+ { 171, 3 },
+ { 171, 1 },
+ { 171, 2 },
+ { 171, 4 },
+ { 171, 3 },
+ { 171, 3 },
+ { 171, 2 },
+ { 172, 2 },
+ { 172, 3 },
+ { 172, 5 },
+ { 172, 2 },
+ { 172, 5 },
+ { 172, 4 },
+ { 172, 1 },
+ { 172, 2 },
+ { 177, 0 },
+ { 177, 1 },
+ { 179, 0 },
{ 179, 2 },
- { 179, 1 },
- { 179, 1 },
- { 177, 3 },
- { 177, 2 },
- { 180, 0 },
- { 180, 2 },
- { 180, 2 },
- { 156, 0 },
- { 156, 2 },
- { 181, 3 },
{ 181, 2 },
- { 181, 1 },
+ { 181, 3 },
+ { 181, 3 },
+ { 181, 3 },
+ { 182, 2 },
{ 182, 2 },
- { 182, 7 },
- { 182, 5 },
- { 182, 3 },
- { 182, 10 },
- { 184, 0 },
+ { 182, 1 },
+ { 182, 1 },
+ { 180, 3 },
+ { 180, 2 },
+ { 183, 0 },
+ { 183, 2 },
+ { 183, 2 },
+ { 158, 0 },
+ { 158, 2 },
+ { 184, 3 },
+ { 184, 2 },
{ 184, 1 },
- { 171, 0 },
- { 171, 3 },
- { 185, 0 },
{ 185, 2 },
- { 186, 1 },
- { 186, 1 },
- { 186, 1 },
- { 146, 3 },
- { 146, 7 },
- { 146, 3 },
- { 146, 1 },
- { 157, 1 },
- { 157, 3 },
- { 190, 1 },
- { 190, 2 },
- { 190, 1 },
- { 190, 1 },
- { 189, 9 },
- { 191, 1 },
- { 191, 1 },
- { 191, 0 },
- { 199, 2 },
- { 199, 0 },
- { 192, 3 },
- { 192, 2 },
- { 192, 4 },
- { 200, 2 },
- { 200, 1 },
- { 200, 0 },
- { 193, 0 },
+ { 185, 7 },
+ { 185, 5 },
+ { 185, 3 },
+ { 185, 10 },
+ { 187, 0 },
+ { 187, 1 },
+ { 175, 0 },
+ { 175, 3 },
+ { 188, 0 },
+ { 188, 2 },
+ { 189, 1 },
+ { 189, 1 },
+ { 189, 1 },
+ { 148, 3 },
+ { 148, 7 },
+ { 148, 3 },
+ { 148, 1 },
+ { 159, 1 },
+ { 159, 3 },
+ { 193, 1 },
{ 193, 2 },
+ { 193, 1 },
+ { 193, 1 },
+ { 192, 9 },
+ { 194, 1 },
+ { 194, 1 },
+ { 194, 0 },
{ 202, 2 },
{ 202, 0 },
- { 201, 6 },
- { 201, 7 },
- { 206, 1 },
- { 206, 1 },
- { 154, 0 },
- { 154, 2 },
- { 188, 2 },
- { 203, 1 },
- { 203, 1 },
- { 203, 2 },
- { 203, 3 },
- { 203, 4 },
- { 204, 2 },
- { 204, 0 },
- { 205, 4 },
- { 205, 0 },
- { 197, 0 },
- { 197, 3 },
- { 209, 5 },
- { 209, 3 },
- { 210, 1 },
- { 172, 1 },
- { 172, 1 },
- { 172, 0 },
- { 211, 0 },
- { 211, 2 },
- { 195, 0 },
{ 195, 3 },
+ { 195, 2 },
+ { 195, 4 },
+ { 203, 2 },
+ { 203, 1 },
+ { 203, 0 },
{ 196, 0 },
{ 196, 2 },
- { 198, 0 },
- { 198, 2 },
- { 198, 4 },
- { 198, 4 },
- { 146, 4 },
- { 194, 0 },
- { 194, 2 },
- { 146, 6 },
- { 213, 5 },
- { 213, 3 },
- { 146, 8 },
- { 146, 5 },
+ { 205, 2 },
+ { 205, 0 },
+ { 204, 6 },
+ { 204, 7 },
+ { 209, 1 },
+ { 209, 1 },
+ { 156, 0 },
+ { 156, 2 },
+ { 191, 2 },
+ { 206, 1 },
+ { 206, 1 },
+ { 206, 2 },
+ { 206, 3 },
+ { 206, 4 },
+ { 207, 2 },
+ { 207, 0 },
+ { 208, 4 },
+ { 208, 0 },
+ { 200, 0 },
+ { 200, 3 },
+ { 212, 5 },
+ { 212, 3 },
+ { 213, 1 },
+ { 176, 1 },
+ { 176, 1 },
+ { 176, 0 },
+ { 214, 0 },
{ 214, 2 },
- { 214, 1 },
+ { 198, 0 },
+ { 198, 3 },
+ { 199, 0 },
+ { 199, 2 },
+ { 201, 0 },
+ { 201, 2 },
+ { 201, 4 },
+ { 201, 4 },
+ { 148, 4 },
+ { 197, 0 },
+ { 197, 2 },
+ { 148, 6 },
+ { 216, 5 },
{ 216, 3 },
- { 216, 1 },
- { 215, 0 },
- { 215, 3 },
- { 208, 3 },
- { 208, 1 },
+ { 148, 8 },
+ { 148, 5 },
+ { 217, 2 },
+ { 217, 1 },
+ { 219, 3 },
+ { 219, 1 },
+ { 218, 0 },
+ { 218, 3 },
+ { 211, 3 },
+ { 211, 1 },
{ 174, 1 },
{ 174, 3 },
- { 170, 1 },
+ { 173, 1 },
{ 174, 1 },
{ 174, 1 },
{ 174, 3 },
{ 174, 5 },
- { 170, 1 },
- { 170, 1 },
- { 170, 1 },
- { 170, 1 },
+ { 173, 1 },
+ { 173, 1 },
+ { 173, 1 },
+ { 173, 1 },
{ 174, 1 },
{ 174, 1 },
+ { 174, 6 },
{ 174, 4 },
{ 174, 4 },
- { 170, 1 },
+ { 173, 1 },
{ 174, 3 },
{ 174, 3 },
{ 174, 3 },
{ 174, 3 },
{ 174, 3 },
{ 174, 3 },
- { 217, 1 },
- { 217, 2 },
- { 218, 2 },
- { 218, 0 },
+ { 220, 1 },
+ { 220, 2 },
+ { 221, 2 },
+ { 221, 0 },
{ 174, 4 },
{ 174, 2 },
{ 174, 3 },
{ 174, 2 },
{ 174, 2 },
{ 174, 2 },
- { 219, 1 },
- { 219, 2 },
+ { 222, 1 },
+ { 222, 2 },
{ 174, 5 },
- { 220, 1 },
- { 220, 2 },
+ { 223, 1 },
+ { 223, 2 },
{ 174, 5 },
{ 174, 3 },
{ 174, 5 },
{ 174, 4 },
{ 174, 4 },
{ 174, 5 },
- { 222, 5 },
- { 222, 4 },
- { 223, 2 },
- { 223, 0 },
- { 221, 1 },
- { 221, 0 },
- { 212, 3 },
- { 212, 1 },
+ { 225, 5 },
+ { 225, 4 },
+ { 226, 2 },
+ { 226, 0 },
{ 224, 1 },
{ 224, 0 },
- { 146, 11 },
- { 225, 1 },
- { 225, 0 },
- { 175, 0 },
- { 175, 3 },
- { 183, 5 },
- { 183, 3 },
- { 226, 1 },
- { 146, 3 },
- { 146, 1 },
- { 146, 2 },
- { 146, 5 },
- { 146, 5 },
- { 146, 5 },
- { 146, 5 },
- { 146, 6 },
- { 146, 3 },
- { 166, 2 },
- { 167, 2 },
- { 228, 1 },
- { 228, 1 },
+ { 215, 3 },
+ { 215, 1 },
{ 227, 1 },
{ 227, 0 },
- { 146, 5 },
- { 229, 10 },
+ { 148, 11 },
+ { 228, 1 },
+ { 228, 0 },
+ { 178, 0 },
+ { 178, 3 },
+ { 186, 5 },
+ { 186, 3 },
+ { 229, 1 },
+ { 148, 3 },
+ { 148, 1 },
+ { 148, 2 },
+ { 148, 5 },
+ { 148, 5 },
+ { 148, 5 },
+ { 148, 5 },
+ { 148, 6 },
+ { 148, 3 },
+ { 169, 2 },
+ { 170, 2 },
{ 231, 1 },
{ 231, 1 },
- { 231, 2 },
- { 231, 0 },
- { 232, 1 },
- { 232, 1 },
- { 232, 1 },
- { 232, 3 },
- { 233, 0 },
- { 233, 3 },
- { 233, 3 },
- { 234, 0 },
- { 234, 2 },
- { 230, 3 },
+ { 230, 1 },
{ 230, 0 },
- { 235, 6 },
- { 235, 8 },
- { 235, 5 },
- { 235, 4 },
+ { 148, 5 },
+ { 232, 10 },
+ { 234, 1 },
+ { 234, 1 },
+ { 234, 2 },
+ { 234, 0 },
{ 235, 1 },
- { 174, 4 },
- { 174, 6 },
- { 187, 1 },
- { 187, 1 },
- { 187, 1 },
- { 146, 3 },
- { 146, 6 },
+ { 235, 1 },
+ { 235, 1 },
+ { 235, 3 },
+ { 236, 0 },
+ { 236, 3 },
+ { 236, 3 },
{ 237, 0 },
{ 237, 2 },
- { 237, 2 },
- { 236, 1 },
- { 236, 0 },
- { 146, 3 },
- { 146, 1 },
- { 146, 3 },
- { 146, 6 },
- { 146, 6 },
+ { 233, 3 },
+ { 233, 0 },
+ { 238, 6 },
+ { 238, 8 },
+ { 238, 5 },
+ { 238, 4 },
{ 238, 1 },
- { 239, 0 },
+ { 174, 4 },
+ { 174, 6 },
+ { 190, 1 },
+ { 190, 1 },
+ { 190, 1 },
+ { 148, 3 },
+ { 148, 6 },
+ { 240, 0 },
+ { 240, 2 },
+ { 240, 2 },
{ 239, 1 },
+ { 239, 0 },
+ { 148, 3 },
+ { 148, 1 },
+ { 148, 3 },
+ { 148, 1 },
+ { 148, 3 },
+ { 148, 6 },
+ { 148, 6 },
+ { 241, 1 },
+ { 242, 0 },
+ { 242, 1 },
};
static void yy_accept(yyParser*); /* Forward Declaration */
** break;
*/
case 3:
-#line 84 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 102 "parse.y"
{ sqlite3FinishCoding(pParse); }
-#line 1893 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1925 "parse.c"
break;
case 6:
-#line 87 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 105 "parse.y"
{ sqlite3BeginParse(pParse, 0); }
-#line 1898 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1930 "parse.c"
break;
case 7:
-#line 89 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 107 "parse.y"
{ sqlite3BeginParse(pParse, 1); }
-#line 1903 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1935 "parse.c"
break;
case 8:
-#line 95 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy412);}
-#line 1908 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 113 "parse.y"
+{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy58);}
+#line 1940 "parse.c"
break;
case 12:
-#line 100 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = TK_DEFERRED;}
-#line 1913 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 118 "parse.y"
+{yygotominor.yy58 = TK_DEFERRED;}
+#line 1945 "parse.c"
break;
case 13:
case 14:
case 15:
- case 101:
case 103:
- case 104:
-#line 101 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = yymsp[0].major;}
-#line 1923 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 105:
+ case 106:
+#line 119 "parse.y"
+{yygotominor.yy58 = yymsp[0].major;}
+#line 1955 "parse.c"
break;
case 16:
case 17:
-#line 104 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 122 "parse.y"
{sqlite3CommitTransaction(pParse);}
-#line 1929 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1961 "parse.c"
break;
case 18:
-#line 106 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 124 "parse.y"
{sqlite3RollbackTransaction(pParse);}
-#line 1934 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1966 "parse.c"
break;
case 20:
-#line 111 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 129 "parse.y"
{
- sqlite3StartTable(pParse,&yymsp[-4].minor.yy0,&yymsp[-1].minor.yy258,&yymsp[0].minor.yy258,yymsp[-3].minor.yy412,0);
+ sqlite3StartTable(pParse,&yymsp[-4].minor.yy0,&yymsp[-1].minor.yy144,&yymsp[0].minor.yy144,yymsp[-3].minor.yy58,0);
}
-#line 1941 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1973 "parse.c"
break;
case 21:
- case 60:
- case 74:
- case 106:
- case 220:
+ case 62:
+ case 76:
+ case 108:
case 223:
-#line 116 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = 1;}
-#line 1951 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 226:
+#line 134 "parse.y"
+{yygotominor.yy58 = 1;}
+#line 1983 "parse.c"
break;
case 22:
- case 59:
- case 73:
+ case 61:
case 75:
- case 86:
- case 107:
- case 108:
- case 219:
+ case 77:
+ case 88:
+ case 109:
+ case 110:
case 222:
-#line 118 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = 0;}
-#line 1964 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 225:
+#line 136 "parse.y"
+{yygotominor.yy58 = 0;}
+#line 1996 "parse.c"
break;
case 23:
-#line 119 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 137 "parse.y"
{
- sqlite3EndTable(pParse,&yymsp[-1].minor.yy258,&yymsp[0].minor.yy0,0);
+ sqlite3EndTable(pParse,&yymsp[-1].minor.yy144,&yymsp[0].minor.yy0,0);
}
-#line 1971 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2003 "parse.c"
break;
case 24:
-#line 122 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 140 "parse.y"
{
- sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy459);
- sqlite3SelectDelete(yymsp[0].minor.yy459);
+ sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy99);
+ sqlite3SelectDelete(yymsp[0].minor.yy99);
}
-#line 1979 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2011 "parse.c"
break;
case 27:
-#line 133 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 152 "parse.y"
{
- yygotominor.yy258.z = yymsp[-2].minor.yy258.z;
- yygotominor.yy258.n = (pParse->sLastToken.z-yymsp[-2].minor.yy258.z) + pParse->sLastToken.n;
+ yygotominor.yy144.z = yymsp[-2].minor.yy144.z;
+ yygotominor.yy144.n = (pParse->sLastToken.z-yymsp[-2].minor.yy144.z) + pParse->sLastToken.n;
}
-#line 1987 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2019 "parse.c"
break;
case 28:
-#line 137 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 156 "parse.y"
{
- sqlite3AddColumn(pParse,&yymsp[0].minor.yy258);
- yygotominor.yy258 = yymsp[0].minor.yy258;
+ sqlite3AddColumn(pParse,&yymsp[0].minor.yy144);
+ yygotominor.yy144 = yymsp[0].minor.yy144;
}
-#line 1995 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2027 "parse.c"
break;
case 29:
case 30:
case 32:
case 33:
case 34:
- case 259:
- case 260:
-#line 147 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy258 = yymsp[0].minor.yy0;}
-#line 2007 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 262:
+ case 263:
+#line 166 "parse.y"
+{yygotominor.yy144 = yymsp[0].minor.yy0;}
+#line 2039 "parse.c"
break;
case 36:
-#line 202 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3AddColumnType(pParse,&yymsp[0].minor.yy258,&yymsp[0].minor.yy258);}
-#line 2012 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 226 "parse.y"
+{sqlite3AddColumnType(pParse,&yymsp[0].minor.yy144);}
+#line 2044 "parse.c"
break;
case 37:
-#line 203 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3AddColumnType(pParse,&yymsp[-3].minor.yy258,&yymsp[0].minor.yy0);}
-#line 2017 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 40:
+ case 116:
+ case 117:
+ case 128:
+ case 148:
+ case 250:
+ case 260:
+ case 261:
+#line 227 "parse.y"
+{yygotominor.yy144 = yymsp[0].minor.yy144;}
+#line 2057 "parse.c"
break;
case 38:
-#line 205 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3AddColumnType(pParse,&yymsp[-5].minor.yy258,&yymsp[0].minor.yy0);}
-#line 2022 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 228 "parse.y"
+{
+ yygotominor.yy144.z = yymsp[-3].minor.yy144.z;
+ yygotominor.yy144.n = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy144.z;
+}
+#line 2065 "parse.c"
break;
case 39:
- case 114:
- case 115:
- case 126:
- case 146:
- case 247:
- case 257:
- case 258:
-#line 207 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy258 = yymsp[0].minor.yy258;}
-#line 2034 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 40:
-#line 208 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy258.z=yymsp[-1].minor.yy258.z; yygotominor.yy258.n=yymsp[0].minor.yy258.n+(yymsp[0].minor.yy258.z-yymsp[-1].minor.yy258.z);}
-#line 2039 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 232 "parse.y"
+{
+ yygotominor.yy144.z = yymsp[-5].minor.yy144.z;
+ yygotominor.yy144.n = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy144.z;
+}
+#line 2073 "parse.c"
break;
case 41:
-#line 210 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = atoi(yymsp[0].minor.yy258.z); }
-#line 2044 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 238 "parse.y"
+{yygotominor.yy144.z=yymsp[-1].minor.yy144.z; yygotominor.yy144.n=yymsp[0].minor.yy144.n+(yymsp[0].minor.yy144.z-yymsp[-1].minor.yy144.z);}
+#line 2078 "parse.c"
break;
case 42:
-#line 211 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = -atoi(yymsp[0].minor.yy258.z); }
-#line 2049 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 240 "parse.y"
+{ yygotominor.yy58 = atoi(yymsp[0].minor.yy144.z); }
+#line 2083 "parse.c"
+ break;
+ case 43:
+#line 241 "parse.y"
+{ yygotominor.yy58 = -atoi(yymsp[0].minor.yy144.z); }
+#line 2088 "parse.c"
break;
- case 47:
case 48:
-#line 216 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy2);}
-#line 2055 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 50:
+#line 250 "parse.y"
+{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy44);}
+#line 2094 "parse.c"
break;
case 49:
-#line 218 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 251 "parse.y"
+{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy44);}
+#line 2099 "parse.c"
+ break;
+ case 51:
+#line 253 "parse.y"
{
- Expr *p = sqlite3Expr(TK_UMINUS, yymsp[0].minor.yy2, 0, 0);
+ Expr *p = sqlite3Expr(TK_UMINUS, yymsp[0].minor.yy44, 0, 0);
sqlite3AddDefaultValue(pParse,p);
}
-#line 2063 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2107 "parse.c"
break;
- case 50:
-#line 222 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 52:
+#line 257 "parse.y"
{
- Expr *p = sqlite3Expr(TK_STRING, 0, 0, &yymsp[0].minor.yy258);
+ Expr *p = sqlite3Expr(TK_STRING, 0, 0, &yymsp[0].minor.yy144);
sqlite3AddDefaultValue(pParse,p);
}
-#line 2071 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 52:
-#line 231 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3AddNotNull(pParse, yymsp[0].minor.yy412);}
-#line 2076 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 53:
-#line 233 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy412,yymsp[0].minor.yy412);}
-#line 2081 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2115 "parse.c"
break;
case 54:
-#line 234 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy412,0,0);}
-#line 2086 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 266 "parse.y"
+{sqlite3AddNotNull(pParse, yymsp[0].minor.yy58);}
+#line 2120 "parse.c"
break;
case 55:
-#line 235 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3ExprDelete(yymsp[-2].minor.yy2);}
-#line 2091 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 268 "parse.y"
+{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy58,yymsp[0].minor.yy58);}
+#line 2125 "parse.c"
break;
case 56:
-#line 237 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy258,yymsp[-1].minor.yy82,yymsp[0].minor.yy412);}
-#line 2096 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 269 "parse.y"
+{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy58,0,0);}
+#line 2130 "parse.c"
break;
case 57:
-#line 238 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy412);}
-#line 2101 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 270 "parse.y"
+{sqlite3ExprDelete(yymsp[-2].minor.yy44);}
+#line 2135 "parse.c"
break;
case 58:
-#line 239 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3AddCollateType(pParse, yymsp[0].minor.yy258.z, yymsp[0].minor.yy258.n);}
-#line 2106 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 272 "parse.y"
+{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy144,yymsp[-1].minor.yy412,yymsp[0].minor.yy58);}
+#line 2140 "parse.c"
break;
- case 61:
-#line 252 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = OE_Restrict * 0x010101; }
-#line 2111 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 59:
+#line 273 "parse.y"
+{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy58);}
+#line 2145 "parse.c"
break;
- case 62:
-#line 253 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = (yymsp[-1].minor.yy412 & yymsp[0].minor.yy47.mask) | yymsp[0].minor.yy47.value; }
-#line 2116 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 60:
+#line 274 "parse.y"
+{sqlite3AddCollateType(pParse, yymsp[0].minor.yy144.z, yymsp[0].minor.yy144.n);}
+#line 2150 "parse.c"
break;
case 63:
-#line 255 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy47.value = 0; yygotominor.yy47.mask = 0x000000; }
-#line 2121 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 287 "parse.y"
+{ yygotominor.yy58 = OE_Restrict * 0x010101; }
+#line 2155 "parse.c"
break;
case 64:
-#line 256 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy47.value = yymsp[0].minor.yy412; yygotominor.yy47.mask = 0x0000ff; }
-#line 2126 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 288 "parse.y"
+{ yygotominor.yy58 = (yymsp[-1].minor.yy58 & yymsp[0].minor.yy35.mask) | yymsp[0].minor.yy35.value; }
+#line 2160 "parse.c"
break;
case 65:
-#line 257 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy47.value = yymsp[0].minor.yy412<<8; yygotominor.yy47.mask = 0x00ff00; }
-#line 2131 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 290 "parse.y"
+{ yygotominor.yy35.value = 0; yygotominor.yy35.mask = 0x000000; }
+#line 2165 "parse.c"
break;
case 66:
-#line 258 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy47.value = yymsp[0].minor.yy412<<16; yygotominor.yy47.mask = 0xff0000; }
-#line 2136 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 291 "parse.y"
+{ yygotominor.yy35.value = yymsp[0].minor.yy58; yygotominor.yy35.mask = 0x0000ff; }
+#line 2170 "parse.c"
break;
case 67:
-#line 260 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = OE_SetNull; }
-#line 2141 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 292 "parse.y"
+{ yygotominor.yy35.value = yymsp[0].minor.yy58<<8; yygotominor.yy35.mask = 0x00ff00; }
+#line 2175 "parse.c"
break;
case 68:
-#line 261 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = OE_SetDflt; }
-#line 2146 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 293 "parse.y"
+{ yygotominor.yy35.value = yymsp[0].minor.yy58<<16; yygotominor.yy35.mask = 0xff0000; }
+#line 2180 "parse.c"
break;
case 69:
-#line 262 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = OE_Cascade; }
-#line 2151 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 295 "parse.y"
+{ yygotominor.yy58 = OE_SetNull; }
+#line 2185 "parse.c"
break;
case 70:
-#line 263 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = OE_Restrict; }
-#line 2156 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 296 "parse.y"
+{ yygotominor.yy58 = OE_SetDflt; }
+#line 2190 "parse.c"
break;
case 71:
+#line 297 "parse.y"
+{ yygotominor.yy58 = OE_Cascade; }
+#line 2195 "parse.c"
+ break;
case 72:
- case 87:
+#line 298 "parse.y"
+{ yygotominor.yy58 = OE_Restrict; }
+#line 2200 "parse.c"
+ break;
+ case 73:
+ case 74:
case 89:
case 91:
- case 92:
- case 163:
-#line 265 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = yymsp[0].minor.yy412;}
-#line 2167 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 76:
-#line 275 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy258.n = 0; yygotominor.yy258.z = 0;}
-#line 2172 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 93:
+ case 94:
+ case 165:
+#line 300 "parse.y"
+{yygotominor.yy58 = yymsp[0].minor.yy58;}
+#line 2211 "parse.c"
break;
- case 77:
-#line 276 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy258 = yymsp[-1].minor.yy0;}
-#line 2177 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 78:
+#line 310 "parse.y"
+{yygotominor.yy144.n = 0; yygotominor.yy144.z = 0;}
+#line 2216 "parse.c"
break;
- case 82:
-#line 282 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy82,yymsp[0].minor.yy412,yymsp[-2].minor.yy412);}
-#line 2182 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 79:
+#line 311 "parse.y"
+{yygotominor.yy144 = yymsp[-1].minor.yy0;}
+#line 2221 "parse.c"
break;
- case 83:
-#line 284 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy82,yymsp[0].minor.yy412,0,0);}
-#line 2187 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 84:
+#line 317 "parse.y"
+{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy412,yymsp[0].minor.yy58,yymsp[-2].minor.yy58);}
+#line 2226 "parse.c"
break;
case 85:
-#line 287 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 319 "parse.y"
+{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy412,yymsp[0].minor.yy58,0,0);}
+#line 2231 "parse.c"
+ break;
+ case 87:
+#line 322 "parse.y"
{
- sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy82, &yymsp[-3].minor.yy258, yymsp[-2].minor.yy82, yymsp[-1].minor.yy412);
- sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy412);
+ sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy412, &yymsp[-3].minor.yy144, yymsp[-2].minor.yy412, yymsp[-1].minor.yy58);
+ sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy58);
}
-#line 2195 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2239 "parse.c"
break;
- case 88:
case 90:
-#line 301 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = OE_Default;}
-#line 2201 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 93:
-#line 306 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = OE_Ignore;}
-#line 2206 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 94:
- case 164:
-#line 307 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = OE_Replace;}
-#line 2212 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 92:
+#line 336 "parse.y"
+{yygotominor.yy58 = OE_Default;}
+#line 2245 "parse.c"
break;
case 95:
-#line 311 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- sqlite3DropTable(pParse, yymsp[0].minor.yy67, 0);
-}
-#line 2219 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 341 "parse.y"
+{yygotominor.yy58 = OE_Ignore;}
+#line 2250 "parse.c"
break;
case 96:
-#line 318 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- sqlite3CreateView(pParse, &yymsp[-6].minor.yy0, &yymsp[-3].minor.yy258, &yymsp[-2].minor.yy258, yymsp[0].minor.yy459, yymsp[-5].minor.yy412);
-}
-#line 2226 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 166:
+#line 342 "parse.y"
+{yygotominor.yy58 = OE_Replace;}
+#line 2256 "parse.c"
break;
case 97:
-#line 321 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 346 "parse.y"
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy67, 1);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy367, 0);
}
-#line 2233 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2263 "parse.c"
break;
case 98:
-#line 328 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 353 "parse.y"
{
- sqlite3Select(pParse, yymsp[0].minor.yy459, SRT_Callback, 0, 0, 0, 0, 0);
- sqlite3SelectDelete(yymsp[0].minor.yy459);
+ sqlite3CreateView(pParse, &yymsp[-6].minor.yy0, &yymsp[-3].minor.yy144, &yymsp[-2].minor.yy144, yymsp[0].minor.yy99, yymsp[-5].minor.yy58);
}
-#line 2241 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2270 "parse.c"
break;
case 99:
- case 123:
-#line 338 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy459 = yymsp[0].minor.yy459;}
-#line 2247 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 356 "parse.y"
+{
+ sqlite3DropTable(pParse, yymsp[0].minor.yy367, 1);
+}
+#line 2277 "parse.c"
break;
case 100:
-#line 340 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 363 "parse.y"
{
- if( yymsp[0].minor.yy459 ){
- yymsp[0].minor.yy459->op = yymsp[-1].minor.yy412;
- yymsp[0].minor.yy459->pPrior = yymsp[-2].minor.yy459;
- }
- yygotominor.yy459 = yymsp[0].minor.yy459;
+ sqlite3Select(pParse, yymsp[0].minor.yy99, SRT_Callback, 0, 0, 0, 0, 0);
+ sqlite3SelectDelete(yymsp[0].minor.yy99);
}
-#line 2258 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2285 "parse.c"
break;
- case 102:
-#line 349 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = TK_ALL;}
-#line 2263 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 101:
+ case 125:
+#line 373 "parse.y"
+{yygotominor.yy99 = yymsp[0].minor.yy99;}
+#line 2291 "parse.c"
break;
- case 105:
-#line 354 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 102:
+#line 375 "parse.y"
{
- yygotominor.yy459 = sqlite3SelectNew(yymsp[-6].minor.yy82,yymsp[-5].minor.yy67,yymsp[-4].minor.yy2,yymsp[-3].minor.yy82,yymsp[-2].minor.yy2,yymsp[-1].minor.yy82,yymsp[-7].minor.yy412,yymsp[0].minor.yy244.pLimit,yymsp[0].minor.yy244.pOffset);
+ if( yymsp[0].minor.yy99 ){
+ yymsp[0].minor.yy99->op = yymsp[-1].minor.yy58;
+ yymsp[0].minor.yy99->pPrior = yymsp[-2].minor.yy99;
+ }
+ yygotominor.yy99 = yymsp[0].minor.yy99;
}
-#line 2270 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2302 "parse.c"
break;
- case 109:
- case 244:
-#line 375 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy82 = yymsp[-1].minor.yy82;}
-#line 2276 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 104:
+#line 384 "parse.y"
+{yygotominor.yy58 = TK_ALL;}
+#line 2307 "parse.c"
break;
- case 110:
- case 137:
- case 147:
- case 243:
-#line 376 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy82 = 0;}
-#line 2284 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 107:
+#line 389 "parse.y"
+{
+ yygotominor.yy99 = sqlite3SelectNew(yymsp[-6].minor.yy412,yymsp[-5].minor.yy367,yymsp[-4].minor.yy44,yymsp[-3].minor.yy412,yymsp[-2].minor.yy44,yymsp[-1].minor.yy412,yymsp[-7].minor.yy58,yymsp[0].minor.yy112.pLimit,yymsp[0].minor.yy112.pOffset);
+}
+#line 2314 "parse.c"
break;
case 111:
-#line 377 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 247:
+#line 410 "parse.y"
+{yygotominor.yy412 = yymsp[-1].minor.yy412;}
+#line 2320 "parse.c"
+ break;
+ case 112:
+ case 139:
+ case 149:
+ case 246:
+#line 411 "parse.y"
+{yygotominor.yy412 = 0;}
+#line 2328 "parse.c"
+ break;
+ case 113:
+#line 412 "parse.y"
{
- yygotominor.yy82 = sqlite3ExprListAppend(yymsp[-2].minor.yy82,yymsp[-1].minor.yy2,yymsp[0].minor.yy258.n?&yymsp[0].minor.yy258:0);
+ yygotominor.yy412 = sqlite3ExprListAppend(yymsp[-2].minor.yy412,yymsp[-1].minor.yy44,yymsp[0].minor.yy144.n?&yymsp[0].minor.yy144:0);
}
-#line 2291 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2335 "parse.c"
break;
- case 112:
-#line 380 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 114:
+#line 415 "parse.y"
{
- yygotominor.yy82 = sqlite3ExprListAppend(yymsp[-1].minor.yy82, sqlite3Expr(TK_ALL, 0, 0, 0), 0);
+ yygotominor.yy412 = sqlite3ExprListAppend(yymsp[-1].minor.yy412, sqlite3Expr(TK_ALL, 0, 0, 0), 0);
}
-#line 2298 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2342 "parse.c"
break;
- case 113:
-#line 383 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 115:
+#line 418 "parse.y"
{
Expr *pRight = sqlite3Expr(TK_ALL, 0, 0, 0);
- Expr *pLeft = sqlite3Expr(TK_ID, 0, 0, &yymsp[-2].minor.yy258);
- yygotominor.yy82 = sqlite3ExprListAppend(yymsp[-3].minor.yy82, sqlite3Expr(TK_DOT, pLeft, pRight, 0), 0);
+ Expr *pLeft = sqlite3Expr(TK_ID, 0, 0, &yymsp[-2].minor.yy144);
+ yygotominor.yy412 = sqlite3ExprListAppend(yymsp[-3].minor.yy412, sqlite3Expr(TK_DOT, pLeft, pRight, 0), 0);
}
-#line 2307 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 116:
-#line 395 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy258.n = 0;}
-#line 2312 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 117:
-#line 407 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy67 = sqliteMalloc(sizeof(*yygotominor.yy67));}
-#line 2317 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2351 "parse.c"
break;
case 118:
-#line 408 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy67 = yymsp[0].minor.yy67;}
-#line 2322 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 430 "parse.y"
+{yygotominor.yy144.n = 0;}
+#line 2356 "parse.c"
break;
case 119:
-#line 413 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- yygotominor.yy67 = yymsp[-1].minor.yy67;
- if( yygotominor.yy67 && yygotominor.yy67->nSrc>0 ) yygotominor.yy67->a[yygotominor.yy67->nSrc-1].jointype = yymsp[0].minor.yy412;
-}
-#line 2330 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 442 "parse.y"
+{yygotominor.yy367 = sqliteMalloc(sizeof(*yygotominor.yy367));}
+#line 2361 "parse.c"
break;
case 120:
-#line 417 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy67 = 0;}
-#line 2335 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 443 "parse.y"
+{yygotominor.yy367 = yymsp[0].minor.yy367;}
+#line 2366 "parse.c"
break;
case 121:
-#line 418 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 448 "parse.y"
{
- yygotominor.yy67 = sqlite3SrcListAppend(yymsp[-5].minor.yy67,&yymsp[-4].minor.yy258,&yymsp[-3].minor.yy258);
- if( yymsp[-2].minor.yy258.n ) sqlite3SrcListAddAlias(yygotominor.yy67,&yymsp[-2].minor.yy258);
- if( yymsp[-1].minor.yy2 ){
- if( yygotominor.yy67 && yygotominor.yy67->nSrc>1 ){ yygotominor.yy67->a[yygotominor.yy67->nSrc-2].pOn = yymsp[-1].minor.yy2; }
- else { sqlite3ExprDelete(yymsp[-1].minor.yy2); }
+ yygotominor.yy367 = yymsp[-1].minor.yy367;
+ if( yygotominor.yy367 && yygotominor.yy367->nSrc>0 ) yygotominor.yy367->a[yygotominor.yy367->nSrc-1].jointype = yymsp[0].minor.yy58;
+}
+#line 2374 "parse.c"
+ break;
+ case 122:
+#line 452 "parse.y"
+{yygotominor.yy367 = 0;}
+#line 2379 "parse.c"
+ break;
+ case 123:
+#line 453 "parse.y"
+{
+ yygotominor.yy367 = sqlite3SrcListAppend(yymsp[-5].minor.yy367,&yymsp[-4].minor.yy144,&yymsp[-3].minor.yy144);
+ if( yymsp[-2].minor.yy144.n ) sqlite3SrcListAddAlias(yygotominor.yy367,&yymsp[-2].minor.yy144);
+ if( yymsp[-1].minor.yy44 ){
+ if( yygotominor.yy367 && yygotominor.yy367->nSrc>1 ){ yygotominor.yy367->a[yygotominor.yy367->nSrc-2].pOn = yymsp[-1].minor.yy44; }
+ else { sqlite3ExprDelete(yymsp[-1].minor.yy44); }
}
- if( yymsp[0].minor.yy240 ){
- if( yygotominor.yy67 && yygotominor.yy67->nSrc>1 ){ yygotominor.yy67->a[yygotominor.yy67->nSrc-2].pUsing = yymsp[0].minor.yy240; }
- else { sqlite3IdListDelete(yymsp[0].minor.yy240); }
+ if( yymsp[0].minor.yy258 ){
+ if( yygotominor.yy367 && yygotominor.yy367->nSrc>1 ){ yygotominor.yy367->a[yygotominor.yy367->nSrc-2].pUsing = yymsp[0].minor.yy258; }
+ else { sqlite3IdListDelete(yymsp[0].minor.yy258); }
}
}
-#line 2351 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2395 "parse.c"
break;
- case 122:
-#line 432 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- yygotominor.yy67 = sqlite3SrcListAppend(yymsp[-6].minor.yy67,0,0);
- yygotominor.yy67->a[yygotominor.yy67->nSrc-1].pSelect = yymsp[-4].minor.yy459;
- if( yymsp[-2].minor.yy258.n ) sqlite3SrcListAddAlias(yygotominor.yy67,&yymsp[-2].minor.yy258);
- if( yymsp[-1].minor.yy2 ){
- if( yygotominor.yy67 && yygotominor.yy67->nSrc>1 ){ yygotominor.yy67->a[yygotominor.yy67->nSrc-2].pOn = yymsp[-1].minor.yy2; }
- else { sqlite3ExprDelete(yymsp[-1].minor.yy2); }
+ case 124:
+#line 467 "parse.y"
+{
+ yygotominor.yy367 = sqlite3SrcListAppend(yymsp[-6].minor.yy367,0,0);
+ yygotominor.yy367->a[yygotominor.yy367->nSrc-1].pSelect = yymsp[-4].minor.yy99;
+ if( yymsp[-2].minor.yy144.n ) sqlite3SrcListAddAlias(yygotominor.yy367,&yymsp[-2].minor.yy144);
+ if( yymsp[-1].minor.yy44 ){
+ if( yygotominor.yy367 && yygotominor.yy367->nSrc>1 ){ yygotominor.yy367->a[yygotominor.yy367->nSrc-2].pOn = yymsp[-1].minor.yy44; }
+ else { sqlite3ExprDelete(yymsp[-1].minor.yy44); }
}
- if( yymsp[0].minor.yy240 ){
- if( yygotominor.yy67 && yygotominor.yy67->nSrc>1 ){ yygotominor.yy67->a[yygotominor.yy67->nSrc-2].pUsing = yymsp[0].minor.yy240; }
- else { sqlite3IdListDelete(yymsp[0].minor.yy240); }
+ if( yymsp[0].minor.yy258 ){
+ if( yygotominor.yy367 && yygotominor.yy367->nSrc>1 ){ yygotominor.yy367->a[yygotominor.yy367->nSrc-2].pUsing = yymsp[0].minor.yy258; }
+ else { sqlite3IdListDelete(yymsp[0].minor.yy258); }
}
}
-#line 2368 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2412 "parse.c"
break;
- case 124:
-#line 453 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 126:
+#line 488 "parse.y"
{
- yygotominor.yy459 = sqlite3SelectNew(0,yymsp[0].minor.yy67,0,0,0,0,0,0,0);
+ yygotominor.yy99 = sqlite3SelectNew(0,yymsp[0].minor.yy367,0,0,0,0,0,0,0);
}
-#line 2375 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 125:
-#line 459 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy258.z=0; yygotominor.yy258.n=0;}
-#line 2380 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2419 "parse.c"
break;
case 127:
-#line 464 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy67 = sqlite3SrcListAppend(0,&yymsp[-1].minor.yy258,&yymsp[0].minor.yy258);}
-#line 2385 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 494 "parse.y"
+{yygotominor.yy144.z=0; yygotominor.yy144.n=0;}
+#line 2424 "parse.c"
break;
- case 128:
case 129:
-#line 468 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = JT_INNER; }
-#line 2391 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 499 "parse.y"
+{yygotominor.yy367 = sqlite3SrcListAppend(0,&yymsp[-1].minor.yy144,&yymsp[0].minor.yy144);}
+#line 2429 "parse.c"
break;
case 130:
-#line 470 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); }
-#line 2396 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
case 131:
-#line 471 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy258,0); }
-#line 2401 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 503 "parse.y"
+{ yygotominor.yy58 = JT_INNER; }
+#line 2435 "parse.c"
break;
case 132:
-#line 473 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy258,&yymsp[-1].minor.yy258); }
-#line 2406 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 505 "parse.y"
+{ yygotominor.yy58 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); }
+#line 2440 "parse.c"
break;
case 133:
- case 141:
- case 150:
- case 157:
- case 171:
- case 207:
- case 232:
- case 234:
- case 238:
-#line 477 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy2 = yymsp[0].minor.yy2;}
-#line 2419 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 506 "parse.y"
+{ yygotominor.yy58 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy144,0); }
+#line 2445 "parse.c"
break;
case 134:
- case 149:
- case 156:
- case 208:
- case 233:
- case 235:
- case 239:
-#line 478 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy2 = 0;}
-#line 2430 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 508 "parse.y"
+{ yygotominor.yy58 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy144,&yymsp[-1].minor.yy144); }
+#line 2450 "parse.c"
break;
case 135:
- case 168:
-#line 482 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy240 = yymsp[-1].minor.yy240;}
-#line 2436 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 143:
+ case 152:
+ case 159:
+ case 173:
+ case 210:
+ case 235:
+ case 237:
+ case 241:
+#line 512 "parse.y"
+{yygotominor.yy44 = yymsp[0].minor.yy44;}
+#line 2463 "parse.c"
break;
case 136:
- case 167:
-#line 483 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy240 = 0;}
-#line 2442 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 151:
+ case 158:
+ case 211:
+ case 236:
+ case 238:
+ case 242:
+#line 513 "parse.y"
+{yygotominor.yy44 = 0;}
+#line 2474 "parse.c"
+ break;
+ case 137:
+ case 170:
+#line 517 "parse.y"
+{yygotominor.yy258 = yymsp[-1].minor.yy258;}
+#line 2480 "parse.c"
break;
case 138:
- case 148:
-#line 494 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy82 = yymsp[0].minor.yy82;}
-#line 2448 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 169:
+#line 518 "parse.y"
+{yygotominor.yy258 = 0;}
+#line 2486 "parse.c"
break;
- case 139:
-#line 495 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 140:
+ case 150:
+#line 529 "parse.y"
+{yygotominor.yy412 = yymsp[0].minor.yy412;}
+#line 2492 "parse.c"
+ break;
+ case 141:
+#line 530 "parse.y"
{
- yygotominor.yy82 = sqlite3ExprListAppend(yymsp[-4].minor.yy82,yymsp[-2].minor.yy2,yymsp[-1].minor.yy258.n>0?&yymsp[-1].minor.yy258:0);
- if( yygotominor.yy82 ) yygotominor.yy82->a[yygotominor.yy82->nExpr-1].sortOrder = yymsp[0].minor.yy412;
+ yygotominor.yy412 = sqlite3ExprListAppend(yymsp[-4].minor.yy412,yymsp[-2].minor.yy44,yymsp[-1].minor.yy144.n>0?&yymsp[-1].minor.yy144:0);
+ if( yygotominor.yy412 ) yygotominor.yy412->a[yygotominor.yy412->nExpr-1].sortOrder = yymsp[0].minor.yy58;
}
-#line 2456 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2500 "parse.c"
break;
- case 140:
-#line 499 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 142:
+#line 534 "parse.y"
{
- yygotominor.yy82 = sqlite3ExprListAppend(0,yymsp[-2].minor.yy2,yymsp[-1].minor.yy258.n>0?&yymsp[-1].minor.yy258:0);
- if( yygotominor.yy82 && yygotominor.yy82->a ) yygotominor.yy82->a[0].sortOrder = yymsp[0].minor.yy412;
+ yygotominor.yy412 = sqlite3ExprListAppend(0,yymsp[-2].minor.yy44,yymsp[-1].minor.yy144.n>0?&yymsp[-1].minor.yy144:0);
+ if( yygotominor.yy412 && yygotominor.yy412->a ) yygotominor.yy412->a[0].sortOrder = yymsp[0].minor.yy58;
}
-#line 2464 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2508 "parse.c"
break;
- case 142:
case 144:
-#line 508 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = SQLITE_SO_ASC;}
-#line 2470 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 143:
-#line 509 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = SQLITE_SO_DESC;}
-#line 2475 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 146:
+#line 543 "parse.y"
+{yygotominor.yy58 = SQLITE_SO_ASC;}
+#line 2514 "parse.c"
break;
case 145:
-#line 511 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy258.z = 0; yygotominor.yy258.n = 0;}
-#line 2480 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 151:
-#line 529 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy244.pLimit = 0; yygotominor.yy244.pOffset = 0;}
-#line 2485 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 544 "parse.y"
+{yygotominor.yy58 = SQLITE_SO_DESC;}
+#line 2519 "parse.c"
break;
- case 152:
-#line 530 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy244.pLimit = yymsp[0].minor.yy2; yygotominor.yy244.pOffset = 0;}
-#line 2490 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 147:
+#line 546 "parse.y"
+{yygotominor.yy144.z = 0; yygotominor.yy144.n = 0;}
+#line 2524 "parse.c"
break;
case 153:
-#line 532 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy244.pLimit = yymsp[-2].minor.yy2; yygotominor.yy244.pOffset = yymsp[0].minor.yy2;}
-#line 2495 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 564 "parse.y"
+{yygotominor.yy112.pLimit = 0; yygotominor.yy112.pOffset = 0;}
+#line 2529 "parse.c"
break;
case 154:
-#line 534 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy244.pOffset = yymsp[-2].minor.yy2; yygotominor.yy244.pLimit = yymsp[0].minor.yy2;}
-#line 2500 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 565 "parse.y"
+{yygotominor.yy112.pLimit = yymsp[0].minor.yy44; yygotominor.yy112.pOffset = 0;}
+#line 2534 "parse.c"
break;
case 155:
-#line 538 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3DeleteFrom(pParse,yymsp[-1].minor.yy67,yymsp[0].minor.yy2);}
-#line 2505 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 567 "parse.y"
+{yygotominor.yy112.pLimit = yymsp[-2].minor.yy44; yygotominor.yy112.pOffset = yymsp[0].minor.yy44;}
+#line 2539 "parse.c"
break;
- case 158:
-#line 549 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Update(pParse,yymsp[-3].minor.yy67,yymsp[-1].minor.yy82,yymsp[0].minor.yy2,yymsp[-4].minor.yy412);}
-#line 2510 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 156:
+#line 569 "parse.y"
+{yygotominor.yy112.pOffset = yymsp[-2].minor.yy44; yygotominor.yy112.pLimit = yymsp[0].minor.yy44;}
+#line 2544 "parse.c"
break;
- case 159:
-#line 555 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy82 = sqlite3ExprListAppend(yymsp[-4].minor.yy82,yymsp[0].minor.yy2,&yymsp[-2].minor.yy258);}
-#line 2515 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 157:
+#line 573 "parse.y"
+{sqlite3DeleteFrom(pParse,yymsp[-1].minor.yy367,yymsp[0].minor.yy44);}
+#line 2549 "parse.c"
break;
case 160:
-#line 556 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy82 = sqlite3ExprListAppend(0,yymsp[0].minor.yy2,&yymsp[-2].minor.yy258);}
-#line 2520 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 584 "parse.y"
+{sqlite3Update(pParse,yymsp[-3].minor.yy367,yymsp[-1].minor.yy412,yymsp[0].minor.yy44,yymsp[-4].minor.yy58);}
+#line 2554 "parse.c"
break;
case 161:
-#line 562 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Insert(pParse, yymsp[-5].minor.yy67, yymsp[-1].minor.yy82, 0, yymsp[-4].minor.yy240, yymsp[-7].minor.yy412);}
-#line 2525 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 590 "parse.y"
+{yygotominor.yy412 = sqlite3ExprListAppend(yymsp[-4].minor.yy412,yymsp[0].minor.yy44,&yymsp[-2].minor.yy144);}
+#line 2559 "parse.c"
break;
case 162:
-#line 564 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Insert(pParse, yymsp[-2].minor.yy67, 0, yymsp[0].minor.yy459, yymsp[-1].minor.yy240, yymsp[-4].minor.yy412);}
-#line 2530 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 591 "parse.y"
+{yygotominor.yy412 = sqlite3ExprListAppend(0,yymsp[0].minor.yy44,&yymsp[-2].minor.yy144);}
+#line 2564 "parse.c"
break;
- case 165:
- case 236:
-#line 574 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy82 = sqlite3ExprListAppend(yymsp[-2].minor.yy82,yymsp[0].minor.yy2,0);}
-#line 2536 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 163:
+#line 597 "parse.y"
+{sqlite3Insert(pParse, yymsp[-5].minor.yy367, yymsp[-1].minor.yy412, 0, yymsp[-4].minor.yy258, yymsp[-7].minor.yy58);}
+#line 2569 "parse.c"
break;
- case 166:
- case 237:
-#line 575 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy82 = sqlite3ExprListAppend(0,yymsp[0].minor.yy2,0);}
-#line 2542 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 164:
+#line 599 "parse.y"
+{sqlite3Insert(pParse, yymsp[-2].minor.yy367, 0, yymsp[0].minor.yy99, yymsp[-1].minor.yy258, yymsp[-4].minor.yy58);}
+#line 2574 "parse.c"
break;
- case 169:
-#line 584 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy240 = sqlite3IdListAppend(yymsp[-2].minor.yy240,&yymsp[0].minor.yy258);}
-#line 2547 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 167:
+ case 239:
+#line 609 "parse.y"
+{yygotominor.yy412 = sqlite3ExprListAppend(yymsp[-2].minor.yy412,yymsp[0].minor.yy44,0);}
+#line 2580 "parse.c"
break;
- case 170:
-#line 585 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy240 = sqlite3IdListAppend(0,&yymsp[0].minor.yy258);}
-#line 2552 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 168:
+ case 240:
+#line 610 "parse.y"
+{yygotominor.yy412 = sqlite3ExprListAppend(0,yymsp[0].minor.yy44,0);}
+#line 2586 "parse.c"
break;
- case 172:
-#line 596 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy2 = yymsp[-1].minor.yy2; sqlite3ExprSpan(yygotominor.yy2,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); }
-#line 2557 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 171:
+#line 619 "parse.y"
+{yygotominor.yy258 = sqlite3IdListAppend(yymsp[-2].minor.yy258,&yymsp[0].minor.yy144);}
+#line 2591 "parse.c"
break;
- case 173:
- case 178:
- case 179:
- case 180:
- case 181:
-#line 597 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy2 = sqlite3Expr(yymsp[0].major, 0, 0, &yymsp[0].minor.yy0);}
-#line 2566 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 172:
+#line 620 "parse.y"
+{yygotominor.yy258 = sqlite3IdListAppend(0,&yymsp[0].minor.yy144);}
+#line 2596 "parse.c"
break;
case 174:
+#line 631 "parse.y"
+{yygotominor.yy44 = yymsp[-1].minor.yy44; sqlite3ExprSpan(yygotominor.yy44,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); }
+#line 2601 "parse.c"
+ break;
case 175:
-#line 598 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy2 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy0);}
-#line 2572 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 180:
+ case 181:
+ case 182:
+ case 183:
+#line 632 "parse.y"
+{yygotominor.yy44 = sqlite3Expr(yymsp[0].major, 0, 0, &yymsp[0].minor.yy0);}
+#line 2610 "parse.c"
break;
case 176:
-#line 600 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 177:
+#line 633 "parse.y"
+{yygotominor.yy44 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy0);}
+#line 2616 "parse.c"
+ break;
+ case 178:
+#line 635 "parse.y"
{
- Expr *temp1 = sqlite3Expr(TK_ID, 0, 0, &yymsp[-2].minor.yy258);
- Expr *temp2 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy258);
- yygotominor.yy2 = sqlite3Expr(TK_DOT, temp1, temp2, 0);
+ Expr *temp1 = sqlite3Expr(TK_ID, 0, 0, &yymsp[-2].minor.yy144);
+ Expr *temp2 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy144);
+ yygotominor.yy44 = sqlite3Expr(TK_DOT, temp1, temp2, 0);
}
-#line 2581 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2625 "parse.c"
break;
- case 177:
-#line 605 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 179:
+#line 640 "parse.y"
{
- Expr *temp1 = sqlite3Expr(TK_ID, 0, 0, &yymsp[-4].minor.yy258);
- Expr *temp2 = sqlite3Expr(TK_ID, 0, 0, &yymsp[-2].minor.yy258);
- Expr *temp3 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy258);
+ Expr *temp1 = sqlite3Expr(TK_ID, 0, 0, &yymsp[-4].minor.yy144);
+ Expr *temp2 = sqlite3Expr(TK_ID, 0, 0, &yymsp[-2].minor.yy144);
+ Expr *temp3 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy144);
Expr *temp4 = sqlite3Expr(TK_DOT, temp2, temp3, 0);
- yygotominor.yy2 = sqlite3Expr(TK_DOT, temp1, temp4, 0);
+ yygotominor.yy44 = sqlite3Expr(TK_DOT, temp1, temp4, 0);
}
-#line 2592 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2636 "parse.c"
break;
- case 182:
-#line 616 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy2 = sqlite3RegisterExpr(pParse, &yymsp[0].minor.yy0);}
-#line 2597 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 184:
+#line 651 "parse.y"
+{yygotominor.yy44 = sqlite3RegisterExpr(pParse, &yymsp[0].minor.yy0);}
+#line 2641 "parse.c"
break;
- case 183:
-#line 617 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 185:
+#line 652 "parse.y"
{
Token *pToken = &yymsp[0].minor.yy0;
- Expr *pExpr = yygotominor.yy2 = sqlite3Expr(TK_VARIABLE, 0, 0, pToken);
+ Expr *pExpr = yygotominor.yy44 = sqlite3Expr(TK_VARIABLE, 0, 0, pToken);
sqlite3ExprAssignVarNumber(pParse, pExpr);
}
-#line 2606 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2650 "parse.c"
break;
- case 184:
-#line 622 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 186:
+#line 658 "parse.y"
{
- yygotominor.yy2 = sqlite3ExprFunction(yymsp[-1].minor.yy82, &yymsp[-3].minor.yy0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
+ yygotominor.yy44 = sqlite3Expr(TK_CAST, yymsp[-3].minor.yy44, 0, &yymsp[-1].minor.yy144);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);
}
-#line 2614 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2658 "parse.c"
break;
- case 185:
-#line 626 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 187:
+#line 663 "parse.y"
{
- yygotominor.yy2 = sqlite3ExprFunction(0, &yymsp[-3].minor.yy0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
+ yygotominor.yy44 = sqlite3ExprFunction(yymsp[-1].minor.yy412, &yymsp[-3].minor.yy0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
}
-#line 2622 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2666 "parse.c"
break;
- case 186:
-#line 630 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 188:
+#line 667 "parse.y"
+{
+ yygotominor.yy44 = sqlite3ExprFunction(0, &yymsp[-3].minor.yy0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
+}
+#line 2674 "parse.c"
+ break;
+ case 189:
+#line 671 "parse.y"
{
/* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are
** treated as functions that return constants */
- yygotominor.yy2 = sqlite3ExprFunction(0,&yymsp[0].minor.yy0);
- if( yygotominor.yy2 ) yygotominor.yy2->op = TK_CONST_FUNC;
+ yygotominor.yy44 = sqlite3ExprFunction(0,&yymsp[0].minor.yy0);
+ if( yygotominor.yy44 ) yygotominor.yy44->op = TK_CONST_FUNC;
}
-#line 2632 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2684 "parse.c"
break;
- case 187:
- case 188:
- case 189:
case 190:
case 191:
case 192:
case 202:
case 203:
case 204:
-#line 636 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy2 = sqlite3Expr(yymsp[-1].major, yymsp[-2].minor.yy2, yymsp[0].minor.yy2, 0);}
-#line 2654 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
case 205:
-#line 655 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy438.operator = yymsp[0].minor.yy0; yygotominor.yy438.not = 0;}
-#line 2659 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
case 206:
-#line 656 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy438.operator = yymsp[0].minor.yy0; yygotominor.yy438.not = 1;}
-#line 2664 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 209:
-#line 660 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- ExprList *pList = sqlite3ExprListAppend(0, yymsp[-1].minor.yy2, 0);
- pList = sqlite3ExprListAppend(pList, yymsp[-3].minor.yy2, 0);
- if( yymsp[0].minor.yy2 ){
- pList = sqlite3ExprListAppend(pList, yymsp[0].minor.yy2, 0);
- }
- yygotominor.yy2 = sqlite3ExprFunction(pList, &yymsp[-2].minor.yy438.operator);
- if( yymsp[-2].minor.yy438.not ) yygotominor.yy2 = sqlite3Expr(TK_NOT, yygotominor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2, &yymsp[-3].minor.yy2->span, &yymsp[-1].minor.yy2->span);
-}
-#line 2678 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 207:
+#line 677 "parse.y"
+{yygotominor.yy44 = sqlite3Expr(yymsp[-1].major, yymsp[-2].minor.yy44, yymsp[0].minor.yy44, 0);}
+#line 2706 "parse.c"
break;
- case 210:
-#line 671 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- yygotominor.yy2 = sqlite3Expr(TK_ISNULL, yymsp[-1].minor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-1].minor.yy2->span,&yymsp[0].minor.yy0);
-}
-#line 2686 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 208:
+#line 696 "parse.y"
+{yygotominor.yy432.operator = yymsp[0].minor.yy0; yygotominor.yy432.not = 0;}
+#line 2711 "parse.c"
break;
- case 211:
-#line 675 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- yygotominor.yy2 = sqlite3Expr(TK_ISNULL, yymsp[-2].minor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-2].minor.yy2->span,&yymsp[0].minor.yy0);
-}
-#line 2694 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 209:
+#line 697 "parse.y"
+{yygotominor.yy432.operator = yymsp[0].minor.yy0; yygotominor.yy432.not = 1;}
+#line 2716 "parse.c"
break;
case 212:
-#line 679 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 701 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(TK_NOTNULL, yymsp[-1].minor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-1].minor.yy2->span,&yymsp[0].minor.yy0);
+ ExprList *pList = sqlite3ExprListAppend(0, yymsp[-1].minor.yy44, 0);
+ pList = sqlite3ExprListAppend(pList, yymsp[-3].minor.yy44, 0);
+ if( yymsp[0].minor.yy44 ){
+ pList = sqlite3ExprListAppend(pList, yymsp[0].minor.yy44, 0);
+ }
+ yygotominor.yy44 = sqlite3ExprFunction(pList, &yymsp[-2].minor.yy432.operator);
+ if( yymsp[-2].minor.yy432.not ) yygotominor.yy44 = sqlite3Expr(TK_NOT, yygotominor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44, &yymsp[-3].minor.yy44->span, &yymsp[-1].minor.yy44->span);
}
-#line 2702 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2730 "parse.c"
break;
case 213:
-#line 683 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 712 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(TK_NOTNULL, yymsp[-2].minor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-2].minor.yy2->span,&yymsp[0].minor.yy0);
+ yygotominor.yy44 = sqlite3Expr(TK_ISNULL, yymsp[-1].minor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-1].minor.yy44->span,&yymsp[0].minor.yy0);
}
-#line 2710 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2738 "parse.c"
break;
case 214:
-#line 687 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 716 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(TK_NOTNULL, yymsp[-3].minor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-3].minor.yy2->span,&yymsp[0].minor.yy0);
+ yygotominor.yy44 = sqlite3Expr(TK_ISNULL, yymsp[-2].minor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-2].minor.yy44->span,&yymsp[0].minor.yy0);
}
-#line 2718 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2746 "parse.c"
break;
case 215:
+#line 720 "parse.y"
+{
+ yygotominor.yy44 = sqlite3Expr(TK_NOTNULL, yymsp[-1].minor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-1].minor.yy44->span,&yymsp[0].minor.yy0);
+}
+#line 2754 "parse.c"
+ break;
case 216:
-#line 691 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 724 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(yymsp[-1].major, yymsp[0].minor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy2->span);
+ yygotominor.yy44 = sqlite3Expr(TK_NOTNULL, yymsp[-2].minor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-2].minor.yy44->span,&yymsp[0].minor.yy0);
}
-#line 2727 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2762 "parse.c"
break;
case 217:
-#line 699 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 728 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(TK_UMINUS, yymsp[0].minor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy2->span);
+ yygotominor.yy44 = sqlite3Expr(TK_NOTNULL, yymsp[-3].minor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-3].minor.yy44->span,&yymsp[0].minor.yy0);
}
-#line 2735 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2770 "parse.c"
break;
case 218:
-#line 703 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 219:
+#line 732 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(TK_UPLUS, yymsp[0].minor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy2->span);
+ yygotominor.yy44 = sqlite3Expr(yymsp[-1].major, yymsp[0].minor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy44->span);
}
-#line 2743 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2779 "parse.c"
+ break;
+ case 220:
+#line 740 "parse.y"
+{
+ yygotominor.yy44 = sqlite3Expr(TK_UMINUS, yymsp[0].minor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy44->span);
+}
+#line 2787 "parse.c"
break;
case 221:
-#line 710 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 744 "parse.y"
{
- ExprList *pList = sqlite3ExprListAppend(0, yymsp[-2].minor.yy2, 0);
- pList = sqlite3ExprListAppend(pList, yymsp[0].minor.yy2, 0);
- yygotominor.yy2 = sqlite3Expr(TK_BETWEEN, yymsp[-4].minor.yy2, 0, 0);
- if( yygotominor.yy2 ) yygotominor.yy2->pList = pList;
- if( yymsp[-3].minor.yy412 ) yygotominor.yy2 = sqlite3Expr(TK_NOT, yygotominor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-4].minor.yy2->span,&yymsp[0].minor.yy2->span);
+ yygotominor.yy44 = sqlite3Expr(TK_UPLUS, yymsp[0].minor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy44->span);
}
-#line 2755 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2795 "parse.c"
break;
case 224:
-#line 722 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 751 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(TK_IN, yymsp[-4].minor.yy2, 0, 0);
- if( yygotominor.yy2 ){
- yygotominor.yy2->pList = yymsp[-1].minor.yy82;
+ ExprList *pList = sqlite3ExprListAppend(0, yymsp[-2].minor.yy44, 0);
+ pList = sqlite3ExprListAppend(pList, yymsp[0].minor.yy44, 0);
+ yygotominor.yy44 = sqlite3Expr(TK_BETWEEN, yymsp[-4].minor.yy44, 0, 0);
+ if( yygotominor.yy44 ) yygotominor.yy44->pList = pList;
+ if( yymsp[-3].minor.yy58 ) yygotominor.yy44 = sqlite3Expr(TK_NOT, yygotominor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-4].minor.yy44->span,&yymsp[0].minor.yy44->span);
+}
+#line 2807 "parse.c"
+ break;
+ case 227:
+#line 763 "parse.y"
+{
+ yygotominor.yy44 = sqlite3Expr(TK_IN, yymsp[-4].minor.yy44, 0, 0);
+ if( yygotominor.yy44 ){
+ yygotominor.yy44->pList = yymsp[-1].minor.yy412;
}else{
- sqlite3ExprListDelete(yymsp[-1].minor.yy82);
+ sqlite3ExprListDelete(yymsp[-1].minor.yy412);
}
- if( yymsp[-3].minor.yy412 ) yygotominor.yy2 = sqlite3Expr(TK_NOT, yygotominor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-4].minor.yy2->span,&yymsp[0].minor.yy0);
+ if( yymsp[-3].minor.yy58 ) yygotominor.yy44 = sqlite3Expr(TK_NOT, yygotominor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-4].minor.yy44->span,&yymsp[0].minor.yy0);
}
-#line 2769 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2821 "parse.c"
break;
- case 225:
-#line 732 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 228:
+#line 773 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(TK_SELECT, 0, 0, 0);
- if( yygotominor.yy2 ) yygotominor.yy2->pSelect = yymsp[-1].minor.yy459;
- if( !yygotominor.yy2 ) sqlite3SelectDelete(yymsp[-1].minor.yy459);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
+ yygotominor.yy44 = sqlite3Expr(TK_SELECT, 0, 0, 0);
+ if( yygotominor.yy44 ) yygotominor.yy44->pSelect = yymsp[-1].minor.yy99;
+ if( !yygotominor.yy44 ) sqlite3SelectDelete(yymsp[-1].minor.yy99);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
}
-#line 2779 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2831 "parse.c"
break;
- case 226:
-#line 738 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 229:
+#line 779 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(TK_IN, yymsp[-4].minor.yy2, 0, 0);
- if( yygotominor.yy2 ) yygotominor.yy2->pSelect = yymsp[-1].minor.yy459;
- if( !yygotominor.yy2 ) sqlite3SelectDelete(yymsp[-1].minor.yy459);
- if( yymsp[-3].minor.yy412 ) yygotominor.yy2 = sqlite3Expr(TK_NOT, yygotominor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-4].minor.yy2->span,&yymsp[0].minor.yy0);
+ yygotominor.yy44 = sqlite3Expr(TK_IN, yymsp[-4].minor.yy44, 0, 0);
+ if( yygotominor.yy44 ) yygotominor.yy44->pSelect = yymsp[-1].minor.yy99;
+ if( !yygotominor.yy44 ) sqlite3SelectDelete(yymsp[-1].minor.yy99);
+ if( yymsp[-3].minor.yy58 ) yygotominor.yy44 = sqlite3Expr(TK_NOT, yygotominor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-4].minor.yy44->span,&yymsp[0].minor.yy0);
}
-#line 2790 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2842 "parse.c"
break;
- case 227:
-#line 745 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 230:
+#line 786 "parse.y"
{
- SrcList *pSrc = sqlite3SrcListAppend(0,&yymsp[-1].minor.yy258,&yymsp[0].minor.yy258);
- yygotominor.yy2 = sqlite3Expr(TK_IN, yymsp[-3].minor.yy2, 0, 0);
- if( yygotominor.yy2 ) yygotominor.yy2->pSelect = sqlite3SelectNew(0,pSrc,0,0,0,0,0,0,0);
- if( yymsp[-2].minor.yy412 ) yygotominor.yy2 = sqlite3Expr(TK_NOT, yygotominor.yy2, 0, 0);
- sqlite3ExprSpan(yygotominor.yy2,&yymsp[-3].minor.yy2->span,yymsp[0].minor.yy258.z?&yymsp[0].minor.yy258:&yymsp[-1].minor.yy258);
+ SrcList *pSrc = sqlite3SrcListAppend(0,&yymsp[-1].minor.yy144,&yymsp[0].minor.yy144);
+ yygotominor.yy44 = sqlite3Expr(TK_IN, yymsp[-3].minor.yy44, 0, 0);
+ if( yygotominor.yy44 ) yygotominor.yy44->pSelect = sqlite3SelectNew(0,pSrc,0,0,0,0,0,0,0);
+ if( yymsp[-2].minor.yy58 ) yygotominor.yy44 = sqlite3Expr(TK_NOT, yygotominor.yy44, 0, 0);
+ sqlite3ExprSpan(yygotominor.yy44,&yymsp[-3].minor.yy44->span,yymsp[0].minor.yy144.z?&yymsp[0].minor.yy144:&yymsp[-1].minor.yy144);
}
-#line 2801 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2853 "parse.c"
break;
- case 228:
-#line 752 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 231:
+#line 793 "parse.y"
{
- Expr *p = yygotominor.yy2 = sqlite3Expr(TK_EXISTS, 0, 0, 0);
+ Expr *p = yygotominor.yy44 = sqlite3Expr(TK_EXISTS, 0, 0, 0);
if( p ){
- p->pSelect = yymsp[-1].minor.yy459;
+ p->pSelect = yymsp[-1].minor.yy99;
sqlite3ExprSpan(p,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
}
- if( !p ) sqlite3SelectDelete(yymsp[-1].minor.yy459);
+ if( !p ) sqlite3SelectDelete(yymsp[-1].minor.yy99);
}
-#line 2813 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2865 "parse.c"
break;
- case 229:
-#line 763 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 232:
+#line 804 "parse.y"
{
- yygotominor.yy2 = sqlite3Expr(TK_CASE, yymsp[-3].minor.yy2, yymsp[-1].minor.yy2, 0);
- if( yygotominor.yy2 ) yygotominor.yy2->pList = yymsp[-2].minor.yy82;
- sqlite3ExprSpan(yygotominor.yy2, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0);
+ yygotominor.yy44 = sqlite3Expr(TK_CASE, yymsp[-3].minor.yy44, yymsp[-1].minor.yy44, 0);
+ if( yygotominor.yy44 ) yygotominor.yy44->pList = yymsp[-2].minor.yy412;
+ sqlite3ExprSpan(yygotominor.yy44, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0);
}
-#line 2822 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2874 "parse.c"
break;
- case 230:
-#line 770 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 233:
+#line 811 "parse.y"
{
- yygotominor.yy82 = sqlite3ExprListAppend(yymsp[-4].minor.yy82, yymsp[-2].minor.yy2, 0);
- yygotominor.yy82 = sqlite3ExprListAppend(yygotominor.yy82, yymsp[0].minor.yy2, 0);
+ yygotominor.yy412 = sqlite3ExprListAppend(yymsp[-4].minor.yy412, yymsp[-2].minor.yy44, 0);
+ yygotominor.yy412 = sqlite3ExprListAppend(yygotominor.yy412, yymsp[0].minor.yy44, 0);
}
-#line 2830 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2882 "parse.c"
break;
- case 231:
-#line 774 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 234:
+#line 815 "parse.y"
{
- yygotominor.yy82 = sqlite3ExprListAppend(0, yymsp[-2].minor.yy2, 0);
- yygotominor.yy82 = sqlite3ExprListAppend(yygotominor.yy82, yymsp[0].minor.yy2, 0);
+ yygotominor.yy412 = sqlite3ExprListAppend(0, yymsp[-2].minor.yy44, 0);
+ yygotominor.yy412 = sqlite3ExprListAppend(yygotominor.yy412, yymsp[0].minor.yy44, 0);
}
-#line 2838 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2890 "parse.c"
break;
- case 240:
-#line 799 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 243:
+#line 840 "parse.y"
{
- if( yymsp[-9].minor.yy412!=OE_None ) yymsp[-9].minor.yy412 = yymsp[0].minor.yy412;
- if( yymsp[-9].minor.yy412==OE_Default) yymsp[-9].minor.yy412 = OE_Abort;
- sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy258, &yymsp[-6].minor.yy258, sqlite3SrcListAppend(0,&yymsp[-4].minor.yy258,0),yymsp[-2].minor.yy82,yymsp[-9].minor.yy412, &yymsp[-10].minor.yy0, &yymsp[-1].minor.yy0);
+ if( yymsp[-9].minor.yy58!=OE_None ) yymsp[-9].minor.yy58 = yymsp[0].minor.yy58;
+ if( yymsp[-9].minor.yy58==OE_Default) yymsp[-9].minor.yy58 = OE_Abort;
+ sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy144, &yymsp[-6].minor.yy144, sqlite3SrcListAppend(0,&yymsp[-4].minor.yy144,0),yymsp[-2].minor.yy412,yymsp[-9].minor.yy58, &yymsp[-10].minor.yy0, &yymsp[-1].minor.yy0);
}
-#line 2847 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2899 "parse.c"
break;
- case 241:
- case 288:
-#line 806 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = OE_Abort;}
-#line 2853 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 242:
-#line 807 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = OE_None;}
-#line 2858 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 244:
+ case 291:
+#line 847 "parse.y"
+{yygotominor.yy58 = OE_Abort;}
+#line 2905 "parse.c"
break;
case 245:
-#line 817 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 848 "parse.y"
+{yygotominor.yy58 = OE_None;}
+#line 2910 "parse.c"
+ break;
+ case 248:
+#line 858 "parse.y"
{
Expr *p = 0;
- if( yymsp[-1].minor.yy258.n>0 ){
+ if( yymsp[-1].minor.yy144.n>0 ){
p = sqlite3Expr(TK_COLUMN, 0, 0, 0);
- if( p ) p->pColl = sqlite3LocateCollSeq(pParse, yymsp[-1].minor.yy258.z, yymsp[-1].minor.yy258.n);
+ if( p ) p->pColl = sqlite3LocateCollSeq(pParse, yymsp[-1].minor.yy144.z, yymsp[-1].minor.yy144.n);
}
- yygotominor.yy82 = sqlite3ExprListAppend(yymsp[-4].minor.yy82, p, &yymsp[-2].minor.yy258);
+ yygotominor.yy412 = sqlite3ExprListAppend(yymsp[-4].minor.yy412, p, &yymsp[-2].minor.yy144);
}
-#line 2870 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2922 "parse.c"
break;
- case 246:
-#line 825 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 249:
+#line 866 "parse.y"
{
Expr *p = 0;
- if( yymsp[-1].minor.yy258.n>0 ){
+ if( yymsp[-1].minor.yy144.n>0 ){
p = sqlite3Expr(TK_COLUMN, 0, 0, 0);
- if( p ) p->pColl = sqlite3LocateCollSeq(pParse, yymsp[-1].minor.yy258.z, yymsp[-1].minor.yy258.n);
+ if( p ) p->pColl = sqlite3LocateCollSeq(pParse, yymsp[-1].minor.yy144.z, yymsp[-1].minor.yy144.n);
}
- yygotominor.yy82 = sqlite3ExprListAppend(0, p, &yymsp[-2].minor.yy258);
+ yygotominor.yy412 = sqlite3ExprListAppend(0, p, &yymsp[-2].minor.yy144);
}
-#line 2882 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 248:
-#line 838 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3DropIndex(pParse, yymsp[0].minor.yy67);}
-#line 2887 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 249:
- case 250:
-#line 842 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Vacuum(pParse,0);}
-#line 2893 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2934 "parse.c"
break;
case 251:
- case 253:
-#line 848 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Pragma(pParse,&yymsp[-3].minor.yy258,&yymsp[-2].minor.yy258,&yymsp[0].minor.yy258,0);}
-#line 2899 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 879 "parse.y"
+{sqlite3DropIndex(pParse, yymsp[0].minor.yy367);}
+#line 2939 "parse.c"
break;
case 252:
-#line 849 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Pragma(pParse,&yymsp[-3].minor.yy258,&yymsp[-2].minor.yy258,&yymsp[0].minor.yy0,0);}
-#line 2904 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 253:
+#line 883 "parse.y"
+{sqlite3Vacuum(pParse,0);}
+#line 2945 "parse.c"
break;
case 254:
-#line 851 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 256:
+#line 889 "parse.y"
+{sqlite3Pragma(pParse,&yymsp[-3].minor.yy144,&yymsp[-2].minor.yy144,&yymsp[0].minor.yy144,0);}
+#line 2951 "parse.c"
+ break;
+ case 255:
+#line 890 "parse.y"
+{sqlite3Pragma(pParse,&yymsp[-3].minor.yy144,&yymsp[-2].minor.yy144,&yymsp[0].minor.yy0,0);}
+#line 2956 "parse.c"
+ break;
+ case 257:
+#line 892 "parse.y"
{
- sqlite3Pragma(pParse,&yymsp[-3].minor.yy258,&yymsp[-2].minor.yy258,&yymsp[0].minor.yy258,1);
+ sqlite3Pragma(pParse,&yymsp[-3].minor.yy144,&yymsp[-2].minor.yy144,&yymsp[0].minor.yy144,1);
}
-#line 2911 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2963 "parse.c"
break;
- case 255:
-#line 854 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Pragma(pParse,&yymsp[-4].minor.yy258,&yymsp[-3].minor.yy258,&yymsp[-1].minor.yy258,0);}
-#line 2916 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 258:
+#line 895 "parse.y"
+{sqlite3Pragma(pParse,&yymsp[-4].minor.yy144,&yymsp[-3].minor.yy144,&yymsp[-1].minor.yy144,0);}
+#line 2968 "parse.c"
break;
- case 256:
-#line 855 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Pragma(pParse,&yymsp[-1].minor.yy258,&yymsp[0].minor.yy258,0,0);}
-#line 2921 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 259:
+#line 896 "parse.y"
+{sqlite3Pragma(pParse,&yymsp[-1].minor.yy144,&yymsp[0].minor.yy144,0,0);}
+#line 2973 "parse.c"
break;
- case 263:
-#line 868 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 266:
+#line 909 "parse.y"
{
Token all;
- all.z = yymsp[-3].minor.yy258.z;
- all.n = (yymsp[0].minor.yy0.z - yymsp[-3].minor.yy258.z) + yymsp[0].minor.yy0.n;
- sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy347, &all);
+ all.z = yymsp[-3].minor.yy144.z;
+ all.n = (yymsp[0].minor.yy0.z - yymsp[-3].minor.yy144.z) + yymsp[0].minor.yy0.n;
+ sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy203, &all);
}
-#line 2931 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2983 "parse.c"
break;
- case 264:
-#line 877 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 267:
+#line 918 "parse.y"
{
- sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy258, &yymsp[-6].minor.yy258, yymsp[-5].minor.yy412, yymsp[-4].minor.yy210.a, yymsp[-4].minor.yy210.b, yymsp[-2].minor.yy67, yymsp[-1].minor.yy412, yymsp[0].minor.yy2, yymsp[-9].minor.yy412);
- yygotominor.yy258 = (yymsp[-6].minor.yy258.n==0?yymsp[-7].minor.yy258:yymsp[-6].minor.yy258);
+ sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy144, &yymsp[-6].minor.yy144, yymsp[-5].minor.yy58, yymsp[-4].minor.yy234.a, yymsp[-4].minor.yy234.b, yymsp[-2].minor.yy367, yymsp[-1].minor.yy58, yymsp[0].minor.yy44, yymsp[-9].minor.yy58);
+ yygotominor.yy144 = (yymsp[-6].minor.yy144.n==0?yymsp[-7].minor.yy144:yymsp[-6].minor.yy144);
}
-#line 2939 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2991 "parse.c"
break;
- case 265:
case 268:
-#line 883 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = TK_BEFORE; }
-#line 2945 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 266:
-#line 884 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = TK_AFTER; }
-#line 2950 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 267:
-#line 885 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = TK_INSTEAD;}
-#line 2955 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 271:
+#line 924 "parse.y"
+{ yygotominor.yy58 = TK_BEFORE; }
+#line 2997 "parse.c"
break;
case 269:
+#line 925 "parse.y"
+{ yygotominor.yy58 = TK_AFTER; }
+#line 3002 "parse.c"
+ break;
case 270:
- case 271:
-#line 890 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy210.a = yymsp[0].major; yygotominor.yy210.b = 0;}
-#line 2962 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 926 "parse.y"
+{ yygotominor.yy58 = TK_INSTEAD;}
+#line 3007 "parse.c"
break;
case 272:
-#line 893 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy210.a = TK_UPDATE; yygotominor.yy210.b = yymsp[0].minor.yy240;}
-#line 2967 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
case 273:
case 274:
-#line 896 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = TK_ROW; }
-#line 2973 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 931 "parse.y"
+{yygotominor.yy234.a = yymsp[0].major; yygotominor.yy234.b = 0;}
+#line 3014 "parse.c"
break;
case 275:
-#line 898 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy412 = TK_STATEMENT; }
-#line 2978 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 934 "parse.y"
+{yygotominor.yy234.a = TK_UPDATE; yygotominor.yy234.b = yymsp[0].minor.yy258;}
+#line 3019 "parse.c"
break;
case 276:
-#line 901 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy2 = 0; }
-#line 2983 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
case 277:
-#line 902 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy2 = yymsp[0].minor.yy2; }
-#line 2988 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 937 "parse.y"
+{ yygotominor.yy58 = TK_ROW; }
+#line 3025 "parse.c"
break;
case 278:
-#line 906 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- yymsp[-2].minor.yy347->pNext = yymsp[0].minor.yy347;
- yygotominor.yy347 = yymsp[-2].minor.yy347;
-}
-#line 2996 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 939 "parse.y"
+{ yygotominor.yy58 = TK_STATEMENT; }
+#line 3030 "parse.c"
break;
case 279:
-#line 910 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy347 = 0; }
-#line 3001 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 942 "parse.y"
+{ yygotominor.yy44 = 0; }
+#line 3035 "parse.c"
break;
case 280:
-#line 916 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy347 = sqlite3TriggerUpdateStep(&yymsp[-3].minor.yy258, yymsp[-1].minor.yy82, yymsp[0].minor.yy2, yymsp[-4].minor.yy412); }
-#line 3006 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 943 "parse.y"
+{ yygotominor.yy44 = yymsp[0].minor.yy44; }
+#line 3040 "parse.c"
break;
case 281:
-#line 921 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy347 = sqlite3TriggerInsertStep(&yymsp[-5].minor.yy258, yymsp[-4].minor.yy240, yymsp[-1].minor.yy82, 0, yymsp[-7].minor.yy412);}
-#line 3011 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 947 "parse.y"
+{
+ yymsp[-2].minor.yy203->pNext = yymsp[0].minor.yy203;
+ yygotominor.yy203 = yymsp[-2].minor.yy203;
+}
+#line 3048 "parse.c"
break;
case 282:
-#line 924 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy347 = sqlite3TriggerInsertStep(&yymsp[-2].minor.yy258, yymsp[-1].minor.yy240, 0, yymsp[0].minor.yy459, yymsp[-4].minor.yy412);}
-#line 3016 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 951 "parse.y"
+{ yygotominor.yy203 = 0; }
+#line 3053 "parse.c"
break;
case 283:
-#line 928 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy347 = sqlite3TriggerDeleteStep(&yymsp[-1].minor.yy258, yymsp[0].minor.yy2);}
-#line 3021 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 957 "parse.y"
+{ yygotominor.yy203 = sqlite3TriggerUpdateStep(&yymsp[-3].minor.yy144, yymsp[-1].minor.yy412, yymsp[0].minor.yy44, yymsp[-4].minor.yy58); }
+#line 3058 "parse.c"
break;
case 284:
-#line 931 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy347 = sqlite3TriggerSelectStep(yymsp[0].minor.yy459); }
-#line 3026 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 962 "parse.y"
+{yygotominor.yy203 = sqlite3TriggerInsertStep(&yymsp[-5].minor.yy144, yymsp[-4].minor.yy258, yymsp[-1].minor.yy412, 0, yymsp[-7].minor.yy58);}
+#line 3063 "parse.c"
break;
case 285:
-#line 934 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- yygotominor.yy2 = sqlite3Expr(TK_RAISE, 0, 0, 0);
- yygotominor.yy2->iColumn = OE_Ignore;
- sqlite3ExprSpan(yygotominor.yy2, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0);
-}
-#line 3035 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 965 "parse.y"
+{yygotominor.yy203 = sqlite3TriggerInsertStep(&yymsp[-2].minor.yy144, yymsp[-1].minor.yy258, 0, yymsp[0].minor.yy99, yymsp[-4].minor.yy58);}
+#line 3068 "parse.c"
break;
case 286:
-#line 939 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{
- yygotominor.yy2 = sqlite3Expr(TK_RAISE, 0, 0, &yymsp[-1].minor.yy258);
- yygotominor.yy2->iColumn = yymsp[-3].minor.yy412;
- sqlite3ExprSpan(yygotominor.yy2, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0);
-}
-#line 3044 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 969 "parse.y"
+{yygotominor.yy203 = sqlite3TriggerDeleteStep(&yymsp[-1].minor.yy144, yymsp[0].minor.yy44);}
+#line 3073 "parse.c"
break;
case 287:
-#line 947 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = OE_Rollback;}
-#line 3049 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 972 "parse.y"
+{yygotominor.yy203 = sqlite3TriggerSelectStep(yymsp[0].minor.yy99); }
+#line 3078 "parse.c"
break;
- case 289:
-#line 949 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy412 = OE_Fail;}
-#line 3054 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 290:
-#line 954 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 288:
+#line 975 "parse.y"
{
- sqlite3DropTrigger(pParse,yymsp[0].minor.yy67);
+ yygotominor.yy44 = sqlite3Expr(TK_RAISE, 0, 0, 0);
+ yygotominor.yy44->iColumn = OE_Ignore;
+ sqlite3ExprSpan(yygotominor.yy44, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0);
}
-#line 3061 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3087 "parse.c"
break;
- case 291:
-#line 960 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 289:
+#line 980 "parse.y"
{
- sqlite3Attach(pParse, &yymsp[-3].minor.yy258, &yymsp[-1].minor.yy258, yymsp[0].minor.yy132.type, &yymsp[0].minor.yy132.key);
+ yygotominor.yy44 = sqlite3Expr(TK_RAISE, 0, 0, &yymsp[-1].minor.yy144);
+ yygotominor.yy44->iColumn = yymsp[-3].minor.yy58;
+ sqlite3ExprSpan(yygotominor.yy44, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0);
}
-#line 3068 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3096 "parse.c"
+ break;
+ case 290:
+#line 988 "parse.y"
+{yygotominor.yy58 = OE_Rollback;}
+#line 3101 "parse.c"
break;
case 292:
-#line 964 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy132.type = 0; }
-#line 3073 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 990 "parse.y"
+{yygotominor.yy58 = OE_Fail;}
+#line 3106 "parse.c"
break;
case 293:
-#line 965 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy132.type=1; yygotominor.yy132.key = yymsp[0].minor.yy258; }
-#line 3078 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 995 "parse.y"
+{
+ sqlite3DropTrigger(pParse,yymsp[0].minor.yy367);
+}
+#line 3113 "parse.c"
break;
case 294:
-#line 966 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{ yygotominor.yy132.type=2; yygotominor.yy132.key = yymsp[0].minor.yy0; }
-#line 3083 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
- break;
- case 297:
-#line 972 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 1001 "parse.y"
{
- sqlite3Detach(pParse, &yymsp[0].minor.yy258);
+ sqlite3Attach(pParse, &yymsp[-3].minor.yy144, &yymsp[-1].minor.yy144, yymsp[0].minor.yy300.type, &yymsp[0].minor.yy300.key);
}
-#line 3090 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3120 "parse.c"
break;
- case 298:
-#line 978 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Reindex(pParse, 0, 0);}
-#line 3095 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 295:
+#line 1005 "parse.y"
+{ yygotominor.yy300.type = 0; }
+#line 3125 "parse.c"
break;
- case 299:
-#line 979 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3Reindex(pParse, &yymsp[-1].minor.yy258, &yymsp[0].minor.yy258);}
-#line 3100 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+ case 296:
+#line 1006 "parse.y"
+{ yygotominor.yy300.type=1; yygotominor.yy300.key = yymsp[0].minor.yy144; }
+#line 3130 "parse.c"
+ break;
+ case 297:
+#line 1007 "parse.y"
+{ yygotominor.yy300.type=2; yygotominor.yy300.key = yymsp[0].minor.yy0; }
+#line 3135 "parse.c"
break;
case 300:
-#line 984 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 1013 "parse.y"
{
- sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy67,&yymsp[0].minor.yy258);
+ sqlite3Detach(pParse, &yymsp[0].minor.yy144);
}
-#line 3107 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3142 "parse.c"
break;
case 301:
-#line 987 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 1019 "parse.y"
+{sqlite3Reindex(pParse, 0, 0);}
+#line 3147 "parse.c"
+ break;
+ case 302:
+#line 1020 "parse.y"
+{sqlite3Reindex(pParse, &yymsp[-1].minor.yy144, &yymsp[0].minor.yy144);}
+#line 3152 "parse.c"
+ break;
+ case 303:
+#line 1025 "parse.y"
+{sqlite3Analyze(pParse, 0, 0);}
+#line 3157 "parse.c"
+ break;
+ case 304:
+#line 1026 "parse.y"
+{sqlite3Analyze(pParse, &yymsp[-1].minor.yy144, &yymsp[0].minor.yy144);}
+#line 3162 "parse.c"
+ break;
+ case 305:
+#line 1031 "parse.y"
{
- sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy258);
+ sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy367,&yymsp[0].minor.yy144);
}
-#line 3114 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3169 "parse.c"
break;
- case 302:
-#line 990 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+ case 306:
+#line 1034 "parse.y"
+{
+ sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy144);
+}
+#line 3176 "parse.c"
+ break;
+ case 307:
+#line 1037 "parse.y"
{
- sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy67);
+ sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy367);
}
-#line 3121 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3183 "parse.c"
break;
};
yygoto = yyRuleInfo[yyruleno].lhs;
){
sqlite3ParserARG_FETCH;
#define TOKEN (yyminor.yy0)
-#line 23 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.y"
+#line 34 "parse.y"
if( pParse->zErrMsg==0 ){
if( TOKEN.z[0] ){
sqlite3ErrorMsg(pParse, "incomplete SQL statement");
}
}
-#line 3188 "/home/rei/php_dev/php5.1/ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3250 "parse.c"
sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
}
*/
#include "sqliteInt.h"
+/*
+** The number of bits in a Bitmask. "BMS" means "BitMask Size".
+*/
+#define BMS (sizeof(Bitmask)*8)
+
+/*
+** Determine the number of elements in an array.
+*/
+#define ARRAYSIZE(X) (sizeof(X)/sizeof(X[0]))
+
+/*
+** Trace output macros
+*/
+#if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
+int sqlite3_where_trace = 0;
+# define TRACE(X) if(sqlite3_where_trace) sqlite3DebugPrintf X
+#else
+# define TRACE(X)
+#endif
+
+/* Forward reference
+*/
+typedef struct WhereClause WhereClause;
+
/*
** The query generator uses an array of instances of this structure to
** help it analyze the subexpressions of the WHERE clause. Each WHERE
** clause subexpression is separated from the others by an AND operator.
**
-** The idxLeft and idxRight fields are the VDBE cursor numbers for the
-** table that contains the column that appears on the left-hand and
-** right-hand side of ExprInfo.p. If either side of ExprInfo.p is
-** something other than a simple column reference, then idxLeft or
-** idxRight are -1.
+** All WhereTerms are collected into a single WhereClause structure.
+** The following identity holds:
+**
+** WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm
+**
+** When a term is of the form:
**
-** It is the VDBE cursor number is the value stored in Expr.iTable
-** when Expr.op==TK_COLUMN and the value stored in SrcList.a[].iCursor.
+** X <op> <expr>
**
-** prereqLeft, prereqRight, and prereqAll record sets of cursor numbers,
+** where X is a column name and <op> is one of certain operators,
+** then WhereTerm.leftCursor and WhereTerm.leftColumn record the
+** cursor number and column number for X. WhereTerm.operator records
+** the <op> using a bitmask encoding defined by WO_xxx below. The
+** use of a bitmask encoding for the operator allows us to search
+** quickly for terms that match any of several different operators.
+**
+** prereqRight and prereqAll record sets of cursor numbers,
** but they do so indirectly. A single ExprMaskSet structure translates
** cursor number into bits and the translated bit is stored in the prereq
** fields. The translation is used in order to maximize the number of
** beginning with 0 in order to make the best possible use of the available
** bits in the Bitmask. So, in the example above, the cursor numbers
** would be mapped into integers 0 through 7.
-**
-** prereqLeft tells us every VDBE cursor that is referenced on the
-** left-hand side of ExprInfo.p. prereqRight does the same for the
-** right-hand side of the expression. The following identity always
-** holds:
-**
-** prereqAll = prereqLeft | prereqRight
-**
-** The ExprInfo.indexable field is true if the ExprInfo.p expression
-** is of a form that might control an index. Indexable expressions
-** look like this:
-**
-** <column> <op> <expr>
-**
-** Where <column> is a simple column name and <op> is on of the operators
-** that allowedOp() recognizes.
*/
-typedef struct ExprInfo ExprInfo;
-struct ExprInfo {
- Expr *p; /* Pointer to the subexpression */
- u8 indexable; /* True if this subexprssion is usable by an index */
- short int idxLeft; /* p->pLeft is a column in this table number. -1 if
- ** p->pLeft is not the column of any table */
- short int idxRight; /* p->pRight is a column in this table number. -1 if
- ** p->pRight is not the column of any table */
- Bitmask prereqLeft; /* Bitmask of tables referenced by p->pLeft */
- Bitmask prereqRight; /* Bitmask of tables referenced by p->pRight */
+typedef struct WhereTerm WhereTerm;
+struct WhereTerm {
+ Expr *pExpr; /* Pointer to the subexpression */
+ i16 iParent; /* Disable pWC->a[iParent] when this term disabled */
+ i16 leftCursor; /* Cursor number of X in "X <op> <expr>" */
+ i16 leftColumn; /* Column number of X in "X <op> <expr>" */
+ u16 operator; /* A WO_xx value describing <op> */
+ u8 flags; /* Bit flags. See below */
+ u8 nChild; /* Number of children that must disable us */
+ WhereClause *pWC; /* The clause this term is part of */
+ Bitmask prereqRight; /* Bitmask of tables used by pRight */
Bitmask prereqAll; /* Bitmask of tables referenced by p */
};
+/*
+** Allowed values of WhereTerm.flags
+*/
+#define TERM_DYNAMIC 0x01 /* Need to call sqlite3ExprDelete(pExpr) */
+#define TERM_VIRTUAL 0x02 /* Added by the optimizer. Do not code */
+#define TERM_CODED 0x04 /* This term is already coded */
+#define TERM_COPIED 0x08 /* Has a child */
+#define TERM_OR_OK 0x10 /* Used during OR-clause processing */
+
+/*
+** An instance of the following structure holds all information about a
+** WHERE clause. Mostly this is a container for one or more WhereTerms.
+*/
+struct WhereClause {
+ Parse *pParse; /* The parser context */
+ int nTerm; /* Number of terms */
+ int nSlot; /* Number of entries in a[] */
+ WhereTerm *a; /* Each a[] describes a term of the WHERE cluase */
+ WhereTerm aStatic[10]; /* Initial static space for a[] */
+};
+
/*
** An instance of the following structure keeps track of a mapping
-** between VDBE cursor numbers and bits of the bitmasks in ExprInfo.
+** between VDBE cursor numbers and bits of the bitmasks in WhereTerm.
**
** The VDBE cursor numbers are small integers contained in
** SrcList_item.iCursor and Expr.iTable fields. For any given WHERE
int ix[sizeof(Bitmask)*8]; /* Cursor assigned to each bit */
};
+
/*
-** Determine the number of elements in an array.
+** Bitmasks for the operators that indices are able to exploit. An
+** OR-ed combination of these values can be used when searching for
+** terms in the where clause.
*/
-#define ARRAYSIZE(X) (sizeof(X)/sizeof(X[0]))
+#define WO_IN 1
+#define WO_EQ 2
+#define WO_LT (WO_EQ<<(TK_LT-TK_EQ))
+#define WO_LE (WO_EQ<<(TK_LE-TK_EQ))
+#define WO_GT (WO_EQ<<(TK_GT-TK_EQ))
+#define WO_GE (WO_EQ<<(TK_GE-TK_EQ))
+
+/*
+** Value for flags returned by bestIndex()
+*/
+#define WHERE_ROWID_EQ 0x0001 /* rowid=EXPR or rowid IN (...) */
+#define WHERE_ROWID_RANGE 0x0002 /* rowid<EXPR and/or rowid>EXPR */
+#define WHERE_COLUMN_EQ 0x0010 /* x=EXPR or x IN (...) */
+#define WHERE_COLUMN_RANGE 0x0020 /* x<EXPR and/or x>EXPR */
+#define WHERE_COLUMN_IN 0x0040 /* x IN (...) */
+#define WHERE_TOP_LIMIT 0x0100 /* x<EXPR or x<=EXPR constraint */
+#define WHERE_BTM_LIMIT 0x0200 /* x>EXPR or x>=EXPR constraint */
+#define WHERE_IDX_ONLY 0x0800 /* Use index only - omit table */
+#define WHERE_ORDERBY 0x1000 /* Output will appear in correct order */
+#define WHERE_REVERSE 0x2000 /* Scan in reverse order */
+#define WHERE_UNIQUE 0x4000 /* Selects no more than one row */
+
+/*
+** Initialize a preallocated WhereClause structure.
+*/
+static void whereClauseInit(WhereClause *pWC, Parse *pParse){
+ pWC->pParse = pParse;
+ pWC->nTerm = 0;
+ pWC->nSlot = ARRAYSIZE(pWC->aStatic);
+ pWC->a = pWC->aStatic;
+}
+
+/*
+** Deallocate a WhereClause structure. The WhereClause structure
+** itself is not freed. This routine is the inverse of whereClauseInit().
+*/
+static void whereClauseClear(WhereClause *pWC){
+ int i;
+ WhereTerm *a;
+ for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){
+ if( a->flags & TERM_DYNAMIC ){
+ sqlite3ExprDelete(a->pExpr);
+ }
+ }
+ if( pWC->a!=pWC->aStatic ){
+ sqliteFree(pWC->a);
+ }
+}
+
+/*
+** Add a new entries to the WhereClause structure. Increase the allocated
+** space as necessary.
+**
+** WARNING: This routine might reallocate the space used to store
+** WhereTerms. All pointers to WhereTerms should be invalided after
+** calling this routine. Such pointers may be reinitialized by referencing
+** the pWC->a[] array.
+*/
+static int whereClauseInsert(WhereClause *pWC, Expr *p, int flags){
+ WhereTerm *pTerm;
+ int idx;
+ if( pWC->nTerm>=pWC->nSlot ){
+ WhereTerm *pOld = pWC->a;
+ pWC->a = sqliteMalloc( sizeof(pWC->a[0])*pWC->nSlot*2 );
+ if( pWC->a==0 ) return 0;
+ memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm);
+ if( pOld!=pWC->aStatic ){
+ sqliteFree(pOld);
+ }
+ pWC->nSlot *= 2;
+ }
+ pTerm = &pWC->a[idx = pWC->nTerm];
+ pWC->nTerm++;
+ pTerm->pExpr = p;
+ pTerm->flags = flags;
+ pTerm->pWC = pWC;
+ pTerm->iParent = -1;
+ return idx;
+}
/*
** This routine identifies subexpressions in the WHERE clause where
-** each subexpression is separate by the AND operator. aSlot is
-** filled with pointers to the subexpressions. For example:
+** each subexpression is separate by the AND operator or some other
+** operator specified in the op parameter. The WhereClause structure
+** is filled with pointers to subexpressions. For example:
**
** WHERE a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22)
** \________/ \_______________/ \________________/
** slot[0] slot[1] slot[2]
**
** The original WHERE clause in pExpr is unaltered. All this routine
-** does is make aSlot[] entries point to substructure within pExpr.
+** does is make slot[] entries point to substructure within pExpr.
**
-** aSlot[] is an array of subexpressions structures. There are nSlot
-** spaces left in this array. This routine finds as many AND-separated
-** subexpressions as it can and puts pointers to those subexpressions
-** into aSlot[] entries. The return value is the number of slots filled.
+** In the previous sentence and in the diagram, "slot[]" refers to
+** the WhereClause.a[] array. This array grows as needed to contain
+** all terms of the WHERE clause.
*/
-static int exprSplit(int nSlot, ExprInfo *aSlot, Expr *pExpr){
- int cnt = 0;
- if( pExpr==0 || nSlot<1 ) return 0;
- if( nSlot==1 || pExpr->op!=TK_AND ){
- aSlot[0].p = pExpr;
- return 1;
- }
- if( pExpr->pLeft->op!=TK_AND ){
- aSlot[0].p = pExpr->pLeft;
- cnt = 1 + exprSplit(nSlot-1, &aSlot[1], pExpr->pRight);
+static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){
+ if( pExpr==0 ) return;
+ if( pExpr->op!=op ){
+ whereClauseInsert(pWC, pExpr, 0);
}else{
- cnt = exprSplit(nSlot, aSlot, pExpr->pLeft);
- cnt += exprSplit(nSlot-cnt, &aSlot[cnt], pExpr->pRight);
+ whereSplit(pWC, pExpr->pLeft, op);
+ whereSplit(pWC, pExpr->pRight, op);
}
- return cnt;
}
/*
/*
** Create a new mask for cursor iCursor.
+**
+** There is one cursor per table in the FROM clause. The number of
+** tables in the FROM clause is limited by a test early in the
+** sqlite3WhereBegin() routien. So we know that the pMaskSet->ix[]
+** array will never overflow.
*/
static void createMask(ExprMaskSet *pMaskSet, int iCursor){
- if( pMaskSet->n<ARRAYSIZE(pMaskSet->ix) ){
- pMaskSet->ix[pMaskSet->n++] = iCursor;
- }
+ assert( pMaskSet->n < ARRAYSIZE(pMaskSet->ix) );
+ pMaskSet->ix[pMaskSet->n++] = iCursor;
}
-/*
-** Destroy an expression mask set
-*/
-#define freeMaskSet(P) /* NO-OP */
-
/*
** This routine walks (recursively) an expression tree and generates
** a bitmask indicating which tables are used in that expression
** the header comment on that routine for additional information.
** The sqlite3ExprResolveNames() routines looks for column names and
** sets their opcodes to TK_COLUMN and their Expr.iTable fields to
-** the VDBE cursor number of the table.
+** the VDBE cursor number of the table. This routine just has to
+** translate the cursor numbers into bitmask values and OR all
+** the bitmasks together.
*/
static Bitmask exprListTableUsage(ExprMaskSet *, ExprList *);
static Bitmask exprTableUsage(ExprMaskSet *pMaskSet, Expr *p){
** "=", "<", ">", "<=", ">=", and "IN".
*/
static int allowedOp(int op){
- assert( TK_GT==TK_LE-1 && TK_LE==TK_LT-1 && TK_LT==TK_GE-1 && TK_EQ==TK_GT-1);
+ assert( TK_GT>TK_EQ && TK_GT<TK_GE );
+ assert( TK_LT>TK_EQ && TK_LT<TK_GE );
+ assert( TK_LE>TK_EQ && TK_LE<TK_GE );
+ assert( TK_GE==TK_EQ+4 );
return op==TK_IN || (op>=TK_EQ && op<=TK_GE);
}
#define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;}
/*
-** Return the index in the SrcList that uses cursor iCur. If iCur is
-** used by the first entry in SrcList return 0. If iCur is used by
-** the second entry return 1. And so forth.
+** Commute a comparision operator. Expressions of the form "X op Y"
+** are converted into "Y op X".
+*/
+static void exprCommute(Expr *pExpr){
+ assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN );
+ SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl);
+ SWAP(Expr*,pExpr->pRight,pExpr->pLeft);
+ if( pExpr->op>=TK_GT ){
+ assert( TK_LT==TK_GT+2 );
+ assert( TK_GE==TK_LE+2 );
+ assert( TK_GT>TK_EQ );
+ assert( TK_GT<TK_LE );
+ assert( pExpr->op>=TK_GT && pExpr->op<=TK_GE );
+ pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT;
+ }
+}
+
+/*
+** Translate from TK_xx operator to WO_xx bitmask.
+*/
+static int operatorMask(int op){
+ int c;
+ assert( allowedOp(op) );
+ if( op==TK_IN ){
+ c = WO_IN;
+ }else{
+ c = WO_EQ<<(op-TK_EQ);
+ }
+ assert( op!=TK_IN || c==WO_IN );
+ assert( op!=TK_EQ || c==WO_EQ );
+ assert( op!=TK_LT || c==WO_LT );
+ assert( op!=TK_LE || c==WO_LE );
+ assert( op!=TK_GT || c==WO_GT );
+ assert( op!=TK_GE || c==WO_GE );
+ return c;
+}
+
+/*
+** Search for a term in the WHERE clause that is of the form "X <op> <expr>"
+** where X is a reference to the iColumn of table iCur and <op> is one of
+** the WO_xx operator codes specified by the op parameter.
+** Return a pointer to the term. Return 0 if not found.
+*/
+static WhereTerm *findTerm(
+ WhereClause *pWC, /* The WHERE clause to be searched */
+ int iCur, /* Cursor number of LHS */
+ int iColumn, /* Column number of LHS */
+ Bitmask notReady, /* RHS must not overlap with this mask */
+ u16 op, /* Mask of WO_xx values describing operator */
+ Index *pIdx /* Must be compatible with this index, if not NULL */
+){
+ WhereTerm *pTerm;
+ int k;
+ for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){
+ if( pTerm->leftCursor==iCur
+ && (pTerm->prereqRight & notReady)==0
+ && pTerm->leftColumn==iColumn
+ && (pTerm->operator & op)!=0
+ ){
+ if( iCur>=0 && pIdx ){
+ Expr *pX = pTerm->pExpr;
+ CollSeq *pColl;
+ char idxaff;
+ int k;
+ Parse *pParse = pWC->pParse;
+
+ idxaff = pIdx->pTable->aCol[iColumn].affinity;
+ if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue;
+ pColl = sqlite3ExprCollSeq(pParse, pX->pLeft);
+ if( !pColl ){
+ if( pX->pRight ){
+ pColl = sqlite3ExprCollSeq(pParse, pX->pRight);
+ }
+ if( !pColl ){
+ pColl = pParse->db->pDfltColl;
+ }
+ }
+ for(k=0; k<pIdx->nColumn && pIdx->aiColumn[k]!=iColumn; k++){}
+ assert( k<pIdx->nColumn );
+ if( pColl!=pIdx->keyInfo.aColl[k] ) continue;
+ }
+ return pTerm;
+ }
+ }
+ return 0;
+}
+
+/* Forward reference */
+static void exprAnalyze(SrcList*, ExprMaskSet*, WhereClause*, int);
+
+/*
+** Call exprAnalyze on all terms in a WHERE clause.
+**
**
-** SrcList is the set of tables in the FROM clause in the order that
-** they will be processed. The value returned here gives us an index
-** of which tables will be processed first.
*/
-static int tableOrder(SrcList *pList, int iCur){
+static void exprAnalyzeAll(
+ SrcList *pTabList, /* the FROM clause */
+ ExprMaskSet *pMaskSet, /* table masks */
+ WhereClause *pWC /* the WHERE clause to be analyzed */
+){
int i;
- struct SrcList_item *pItem;
- for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
- if( pItem->iCursor==iCur ) return i;
+ for(i=pWC->nTerm-1; i>=0; i--){
+ exprAnalyze(pTabList, pMaskSet, pWC, i);
}
- return -1;
}
+#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
/*
-** The input to this routine is an ExprInfo structure with only the
-** "p" field filled in. The job of this routine is to analyze the
-** subexpression and populate all the other fields of the ExprInfo
+** Check to see if the given expression is a LIKE or GLOB operator that
+** can be optimized using inequality constraints. Return TRUE if it is
+** so and false if not.
+**
+** In order for the operator to be optimizible, the RHS must be a string
+** literal that does not begin with a wildcard.
+*/
+static int isLikeOrGlob(
+ sqlite3 *db, /* The database */
+ Expr *pExpr, /* Test this expression */
+ int *pnPattern, /* Number of non-wildcard prefix characters */
+ int *pisComplete /* True if the only wildcard is % in the last character */
+){
+ const char *z;
+ Expr *pRight, *pLeft;
+ ExprList *pList;
+ int c, cnt;
+ char wc[3];
+ if( !sqlite3IsLikeFunction(db, pExpr, wc) ){
+ return 0;
+ }
+ pList = pExpr->pList;
+ pRight = pList->a[0].pExpr;
+ if( pRight->op!=TK_STRING ){
+ return 0;
+ }
+ pLeft = pList->a[1].pExpr;
+ if( pLeft->op!=TK_COLUMN ){
+ return 0;
+ }
+ sqlite3DequoteExpr(pRight);
+ z = pRight->token.z;
+ for(cnt=0; (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2]; cnt++){}
+ if( cnt==0 || 255==(u8)z[cnt] ){
+ return 0;
+ }
+ *pisComplete = z[cnt]==wc[0] && z[cnt+1]==0;
+ *pnPattern = cnt;
+ return 1;
+}
+#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
+
+/*
+** The input to this routine is an WhereTerm structure with only the
+** "pExpr" field filled in. The job of this routine is to analyze the
+** subexpression and populate all the other fields of the WhereTerm
** structure.
+**
+** If the expression is of the form "<expr> <op> X" it gets commuted
+** to the standard form of "X <op> <expr>". If the expression is of
+** the form "X <op> Y" where both X and Y are columns, then the original
+** expression is unchanged and a new virtual expression of the form
+** "Y <op> X" is added to the WHERE clause.
*/
-static void exprAnalyze(SrcList *pSrc, ExprMaskSet *pMaskSet, ExprInfo *pInfo){
- Expr *pExpr = pInfo->p;
- pInfo->prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft);
- pInfo->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight);
- pInfo->prereqAll = exprTableUsage(pMaskSet, pExpr);
- pInfo->indexable = 0;
- pInfo->idxLeft = -1;
- pInfo->idxRight = -1;
- if( allowedOp(pExpr->op) && (pInfo->prereqRight & pInfo->prereqLeft)==0 ){
- if( pExpr->pRight && pExpr->pRight->op==TK_COLUMN ){
- pInfo->idxRight = pExpr->pRight->iTable;
- pInfo->indexable = 1;
+static void exprAnalyze(
+ SrcList *pSrc, /* the FROM clause */
+ ExprMaskSet *pMaskSet, /* table masks */
+ WhereClause *pWC, /* the WHERE clause */
+ int idxTerm /* Index of the term to be analyzed */
+){
+ WhereTerm *pTerm = &pWC->a[idxTerm];
+ Expr *pExpr = pTerm->pExpr;
+ Bitmask prereqLeft;
+ Bitmask prereqAll;
+ int idxRight;
+ int nPattern;
+ int isComplete;
+
+ if( sqlite3_malloc_failed ) return;
+ prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft);
+ pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight);
+ pTerm->prereqAll = prereqAll = exprTableUsage(pMaskSet, pExpr);
+ pTerm->leftCursor = -1;
+ pTerm->iParent = -1;
+ pTerm->operator = 0;
+ idxRight = -1;
+ if( allowedOp(pExpr->op) && (pTerm->prereqRight & prereqLeft)==0 ){
+ Expr *pLeft = pExpr->pLeft;
+ Expr *pRight = pExpr->pRight;
+ if( pLeft->op==TK_COLUMN ){
+ pTerm->leftCursor = pLeft->iTable;
+ pTerm->leftColumn = pLeft->iColumn;
+ pTerm->operator = operatorMask(pExpr->op);
}
- if( pExpr->pLeft->op==TK_COLUMN ){
- pInfo->idxLeft = pExpr->pLeft->iTable;
- pInfo->indexable = 1;
+ if( pRight && pRight->op==TK_COLUMN ){
+ WhereTerm *pNew;
+ Expr *pDup;
+ if( pTerm->leftCursor>=0 ){
+ int idxNew;
+ pDup = sqlite3ExprDup(pExpr);
+ idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
+ if( idxNew==0 ) return;
+ pNew = &pWC->a[idxNew];
+ pNew->iParent = idxTerm;
+ pTerm = &pWC->a[idxTerm];
+ pTerm->nChild = 1;
+ pTerm->flags |= TERM_COPIED;
+ }else{
+ pDup = pExpr;
+ pNew = pTerm;
+ }
+ exprCommute(pDup);
+ pLeft = pDup->pLeft;
+ pNew->leftCursor = pLeft->iTable;
+ pNew->leftColumn = pLeft->iColumn;
+ pNew->prereqRight = prereqLeft;
+ pNew->prereqAll = prereqAll;
+ pNew->operator = operatorMask(pDup->op);
}
}
- if( pInfo->indexable ){
- assert( pInfo->idxLeft!=pInfo->idxRight );
-
- /* We want the expression to be of the form "X = expr", not "expr = X".
- ** So flip it over if necessary. If the expression is "X = Y", then
- ** we want Y to come from an earlier table than X.
- **
- ** The collating sequence rule is to always choose the left expression.
- ** So if we do a flip, we also have to move the collating sequence.
- */
- if( tableOrder(pSrc,pInfo->idxLeft)<tableOrder(pSrc,pInfo->idxRight) ){
- assert( pExpr->op!=TK_IN );
- SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl);
- SWAP(Expr*,pExpr->pRight,pExpr->pLeft);
- if( pExpr->op>=TK_GT ){
- assert( TK_LT==TK_GT+2 );
- assert( TK_GE==TK_LE+2 );
- assert( TK_GT>TK_EQ );
- assert( TK_GT<TK_LE );
- assert( pExpr->op>=TK_GT && pExpr->op<=TK_GE );
- pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT;
+
+#ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION
+ /* If a term is the BETWEEN operator, create two new virtual terms
+ ** that define the range that the BETWEEN implements.
+ */
+ else if( pExpr->op==TK_BETWEEN ){
+ ExprList *pList = pExpr->pList;
+ int i;
+ static const u8 ops[] = {TK_GE, TK_LE};
+ assert( pList!=0 );
+ assert( pList->nExpr==2 );
+ for(i=0; i<2; i++){
+ Expr *pNewExpr;
+ int idxNew;
+ pNewExpr = sqlite3Expr(ops[i], sqlite3ExprDup(pExpr->pLeft),
+ sqlite3ExprDup(pList->a[i].pExpr), 0);
+ idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
+ exprAnalyze(pSrc, pMaskSet, pWC, idxNew);
+ pTerm = &pWC->a[idxTerm];
+ pWC->a[idxNew].iParent = idxTerm;
+ }
+ pTerm->nChild = 2;
+ }
+#endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */
+
+#ifndef SQLITE_OMIT_OR_OPTIMIZATION
+ /* Attempt to convert OR-connected terms into an IN operator so that
+ ** they can make use of indices.
+ */
+ else if( pExpr->op==TK_OR ){
+ int ok;
+ int i, j;
+ int iColumn, iCursor;
+ WhereClause sOr;
+ WhereTerm *pOrTerm;
+
+ assert( (pTerm->flags & TERM_DYNAMIC)==0 );
+ whereClauseInit(&sOr, pWC->pParse);
+ whereSplit(&sOr, pExpr, TK_OR);
+ exprAnalyzeAll(pSrc, pMaskSet, &sOr);
+ assert( sOr.nTerm>0 );
+ j = 0;
+ do{
+ iColumn = sOr.a[j].leftColumn;
+ iCursor = sOr.a[j].leftCursor;
+ ok = iCursor>=0;
+ for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0 && ok; i--, pOrTerm++){
+ if( pOrTerm->operator!=WO_EQ ){
+ goto or_not_possible;
+ }
+ if( pOrTerm->leftCursor==iCursor && pOrTerm->leftColumn==iColumn ){
+ pOrTerm->flags |= TERM_OR_OK;
+ }else if( (pOrTerm->flags & TERM_COPIED)!=0 ||
+ ((pOrTerm->flags & TERM_VIRTUAL)!=0 &&
+ (sOr.a[pOrTerm->iParent].flags & TERM_OR_OK)!=0) ){
+ pOrTerm->flags &= ~TERM_OR_OK;
+ }else{
+ ok = 0;
+ }
+ }
+ }while( !ok && (sOr.a[j++].flags & TERM_COPIED)!=0 && j<sOr.nTerm );
+ if( ok ){
+ ExprList *pList = 0;
+ Expr *pNew, *pDup;
+ for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0 && ok; i--, pOrTerm++){
+ if( (pOrTerm->flags & TERM_OR_OK)==0 ) continue;
+ pDup = sqlite3ExprDup(pOrTerm->pExpr->pRight);
+ pList = sqlite3ExprListAppend(pList, pDup, 0);
+ }
+ pDup = sqlite3Expr(TK_COLUMN, 0, 0, 0);
+ if( pDup ){
+ pDup->iTable = iCursor;
+ pDup->iColumn = iColumn;
}
- SWAP(unsigned, pInfo->prereqLeft, pInfo->prereqRight);
- SWAP(short int, pInfo->idxLeft, pInfo->idxRight);
+ pNew = sqlite3Expr(TK_IN, pDup, 0, 0);
+ if( pNew ) pNew->pList = pList;
+ pTerm->pExpr = pNew;
+ pTerm->flags |= TERM_DYNAMIC;
+ exprAnalyze(pSrc, pMaskSet, pWC, idxTerm);
+ pTerm = &pWC->a[idxTerm];
}
- }
+or_not_possible:
+ whereClauseClear(&sOr);
+ }
+#endif /* SQLITE_OMIT_OR_OPTIMIZATION */
+#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
+ /* Add constraints to reduce the search space on a LIKE or GLOB
+ ** operator.
+ */
+ if( isLikeOrGlob(pWC->pParse->db, pExpr, &nPattern, &isComplete) ){
+ Expr *pLeft, *pRight;
+ Expr *pStr1, *pStr2;
+ Expr *pNewExpr1, *pNewExpr2;
+ int idxNew1, idxNew2;
+
+ pLeft = pExpr->pList->a[1].pExpr;
+ pRight = pExpr->pList->a[0].pExpr;
+ pStr1 = sqlite3Expr(TK_STRING, 0, 0, 0);
+ if( pStr1 ){
+ sqlite3TokenCopy(&pStr1->token, &pRight->token);
+ pStr1->token.n = nPattern;
+ }
+ pStr2 = sqlite3ExprDup(pStr1);
+ if( pStr2 ){
+ assert( pStr2->token.dyn );
+ ++*(u8*)&pStr2->token.z[nPattern-1];
+ }
+ pNewExpr1 = sqlite3Expr(TK_GE, sqlite3ExprDup(pLeft), pStr1, 0);
+ idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC);
+ exprAnalyze(pSrc, pMaskSet, pWC, idxNew1);
+ pNewExpr2 = sqlite3Expr(TK_LT, sqlite3ExprDup(pLeft), pStr2, 0);
+ idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
+ exprAnalyze(pSrc, pMaskSet, pWC, idxNew2);
+ pTerm = &pWC->a[idxTerm];
+ if( isComplete ){
+ pWC->a[idxNew1].iParent = idxTerm;
+ pWC->a[idxNew2].iParent = idxTerm;
+ pTerm->nChild = 2;
+ }
+ }
+#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
}
+
/*
** This routine decides if pIdx can be used to satisfy the ORDER BY
** clause. If it can, it returns 1. If pIdx cannot satisfy the
** constraints. Any of these columns may be missing from the ORDER BY
** clause and the match can still be a success.
**
-** If the index is UNIQUE, then the ORDER BY clause is allowed to have
-** additional terms past the end of the index and the match will still
-** be a success.
-**
** All terms of the ORDER BY that match against the index must be either
** ASC or DESC. (Terms of the ORDER BY clause past the end of a UNIQUE
** index do not need to satisfy this constraint.) The *pbRev value is
}
/* The index can be used for sorting if all terms of the ORDER BY clause
- ** or covered or if we ran out of index columns and the it is a UNIQUE
- ** index.
+ ** are covered.
*/
- if( j>=nTerm || (i>=pIdx->nColumn && pIdx->onError!=OE_None) ){
+ if( j>=nTerm ){
*pbRev = sortOrder==SQLITE_SO_DESC;
return 1;
}
return 0;
}
+/*
+** Prepare a crude estimate of the logorithm of the input value.
+** The results need not be exact. This is only used for estimating
+** the total cost of performing operatings with O(logN) or O(NlogN)
+** complexity. Because N is just a guess, it is no great tragedy if
+** logN is a little off.
+*/
+static double estLog(double N){
+ double logN = 1.0;
+ double x = 10.0;
+ while( N>x ){
+ logN += 1.0;
+ x *= 10;
+ }
+ return logN;
+}
+
+/*
+** Find the best index for accessing a particular table. Return a pointer
+** to the index, flags that describe how the index should be used, the
+** number of equality constraints, and the "cost" for this index.
+**
+** The lowest cost index wins. The cost is an estimate of the amount of
+** CPU and disk I/O need to process the request using the selected index.
+** Factors that influence cost include:
+**
+** * The estimated number of rows that will be retrieved. (The
+** fewer the better.)
+**
+** * Whether or not sorting must occur.
+**
+** * Whether or not there must be separate lookups in the
+** index and in the main table.
+**
+*/
+static double bestIndex(
+ Parse *pParse, /* The parsing context */
+ WhereClause *pWC, /* The WHERE clause */
+ struct SrcList_item *pSrc, /* The FROM clause term to search */
+ Bitmask notReady, /* Mask of cursors that are not available */
+ ExprList *pOrderBy, /* The order by clause */
+ Index **ppIndex, /* Make *ppIndex point to the best index */
+ int *pFlags, /* Put flags describing this choice in *pFlags */
+ int *pnEq /* Put the number of == or IN constraints here */
+){
+ WhereTerm *pTerm;
+ Index *bestIdx = 0; /* Index that gives the lowest cost */
+ double lowestCost = 1.0e99; /* The cost of using bestIdx */
+ int bestFlags = 0; /* Flags associated with bestIdx */
+ int bestNEq = 0; /* Best value for nEq */
+ int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */
+ Index *pProbe; /* An index we are evaluating */
+ int rev; /* True to scan in reverse order */
+ int flags; /* Flags associated with pProbe */
+ int nEq; /* Number of == or IN constraints */
+ double cost; /* Cost of using pProbe */
+
+ TRACE(("bestIndex: tbl=%s notReady=%x\n", pSrc->pTab->zName, notReady));
+
+ /* Check for a rowid=EXPR or rowid IN (...) constraints
+ */
+ pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0);
+ if( pTerm ){
+ Expr *pExpr;
+ *ppIndex = 0;
+ bestFlags = WHERE_ROWID_EQ;
+ if( pTerm->operator & WO_EQ ){
+ /* Rowid== is always the best pick. Look no further. Because only
+ ** a single row is generated, output is always in sorted order */
+ *pFlags = WHERE_ROWID_EQ | WHERE_UNIQUE;
+ *pnEq = 1;
+ TRACE(("... best is rowid\n"));
+ return 0.0;
+ }else if( (pExpr = pTerm->pExpr)->pList!=0 ){
+ /* Rowid IN (LIST): cost is NlogN where N is the number of list
+ ** elements. */
+ lowestCost = pExpr->pList->nExpr;
+ lowestCost *= estLog(lowestCost);
+ }else{
+ /* Rowid IN (SELECT): cost is NlogN where N is the number of rows
+ ** in the result of the inner select. We have no way to estimate
+ ** that value so make a wild guess. */
+ lowestCost = 200.0;
+ }
+ TRACE(("... rowid IN cost: %.9g\n", lowestCost));
+ }
+
+ /* Estimate the cost of a table scan. If we do not know how many
+ ** entries are in the table, use 1 million as a guess.
+ */
+ pProbe = pSrc->pTab->pIndex;
+ cost = pProbe ? pProbe->aiRowEst[0] : 1000000.0;
+ TRACE(("... table scan base cost: %.9g\n", cost));
+ flags = WHERE_ROWID_RANGE;
+
+ /* Check for constraints on a range of rowids in a table scan.
+ */
+ pTerm = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE|WO_GT|WO_GE, 0);
+ if( pTerm ){
+ if( findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0) ){
+ flags |= WHERE_TOP_LIMIT;
+ cost *= 0.333; /* Guess that rowid<EXPR eliminates two-thirds or rows */
+ }
+ if( findTerm(pWC, iCur, -1, notReady, WO_GT|WO_GE, 0) ){
+ flags |= WHERE_BTM_LIMIT;
+ cost *= 0.333; /* Guess that rowid>EXPR eliminates two-thirds of rows */
+ }
+ TRACE(("... rowid range reduces cost to %.9g\n", cost));
+ }else{
+ flags = 0;
+ }
+
+ /* If the table scan does not satisfy the ORDER BY clause, increase
+ ** the cost by NlogN to cover the expense of sorting. */
+ if( pOrderBy ){
+ if( sortableByRowid(iCur, pOrderBy, &rev) ){
+ flags |= WHERE_ORDERBY|WHERE_ROWID_RANGE;
+ if( rev ){
+ flags |= WHERE_REVERSE;
+ }
+ }else{
+ cost += cost*estLog(cost);
+ TRACE(("... sorting increases cost to %.9g\n", cost));
+ }
+ }
+ if( cost<lowestCost ){
+ lowestCost = cost;
+ bestFlags = flags;
+ }
+
+ /* Look at each index.
+ */
+ for(; pProbe; pProbe=pProbe->pNext){
+ int i; /* Loop counter */
+ double inMultiplier = 1.0;
+
+ TRACE(("... index %s:\n", pProbe->zName));
+
+ /* Count the number of columns in the index that are satisfied
+ ** by x=EXPR constraints or x IN (...) constraints.
+ */
+ flags = 0;
+ for(i=0; i<pProbe->nColumn; i++){
+ int j = pProbe->aiColumn[i];
+ pTerm = findTerm(pWC, iCur, j, notReady, WO_EQ|WO_IN, pProbe);
+ if( pTerm==0 ) break;
+ flags |= WHERE_COLUMN_EQ;
+ if( pTerm->operator & WO_IN ){
+ Expr *pExpr = pTerm->pExpr;
+ flags |= WHERE_COLUMN_IN;
+ if( pExpr->pSelect!=0 ){
+ inMultiplier *= 100.0;
+ }else if( pExpr->pList!=0 ){
+ inMultiplier *= pExpr->pList->nExpr + 1.0;
+ }
+ }
+ }
+ cost = pProbe->aiRowEst[i] * inMultiplier * estLog(inMultiplier);
+ nEq = i;
+ if( pProbe->onError!=OE_None && (flags & WHERE_COLUMN_IN)==0
+ && nEq==pProbe->nColumn ){
+ flags |= WHERE_UNIQUE;
+ }
+ TRACE(("...... nEq=%d inMult=%.9g cost=%.9g\n", nEq, inMultiplier, cost));
+
+ /* Look for range constraints
+ */
+ if( nEq<pProbe->nColumn ){
+ int j = pProbe->aiColumn[nEq];
+ pTerm = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pProbe);
+ if( pTerm ){
+ flags |= WHERE_COLUMN_RANGE;
+ if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pProbe) ){
+ flags |= WHERE_TOP_LIMIT;
+ cost *= 0.333;
+ }
+ if( findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pProbe) ){
+ flags |= WHERE_BTM_LIMIT;
+ cost *= 0.333;
+ }
+ TRACE(("...... range reduces cost to %.9g\n", cost));
+ }
+ }
+
+ /* Add the additional cost of sorting if that is a factor.
+ */
+ if( pOrderBy ){
+ if( (flags & WHERE_COLUMN_IN)==0 &&
+ isSortingIndex(pParse,pProbe,pSrc->pTab,iCur,pOrderBy,nEq,&rev) ){
+ if( flags==0 ){
+ flags = WHERE_COLUMN_RANGE;
+ }
+ flags |= WHERE_ORDERBY;
+ if( rev ){
+ flags |= WHERE_REVERSE;
+ }
+ }else{
+ cost += cost*estLog(cost);
+ TRACE(("...... orderby increases cost to %.9g\n", cost));
+ }
+ }
+
+ /* Check to see if we can get away with using just the index without
+ ** ever reading the table. If that is the case, then halve the
+ ** cost of this index.
+ */
+ if( flags && pSrc->colUsed < (((Bitmask)1)<<(BMS-1)) ){
+ Bitmask m = pSrc->colUsed;
+ int j;
+ for(j=0; j<pProbe->nColumn; j++){
+ int x = pProbe->aiColumn[j];
+ if( x<BMS-1 ){
+ m &= ~(((Bitmask)1)<<x);
+ }
+ }
+ if( m==0 ){
+ flags |= WHERE_IDX_ONLY;
+ cost *= 0.5;
+ TRACE(("...... idx-only reduces cost to %.9g\n", cost));
+ }
+ }
+
+ /* If this index has achieved the lowest cost so far, then use it.
+ */
+ if( cost < lowestCost ){
+ bestIdx = pProbe;
+ lowestCost = cost;
+ assert( flags!=0 );
+ bestFlags = flags;
+ bestNEq = nEq;
+ }
+ }
+
+ /* Report the best result
+ */
+ *ppIndex = bestIdx;
+ TRACE(("best index is %s, cost=%.9g, flags=%x, nEq=%d\n",
+ bestIdx ? bestIdx->zName : "(none)", lowestCost, bestFlags, bestNEq));
+ *pFlags = bestFlags;
+ *pnEq = bestNEq;
+ return lowestCost;
+}
+
/*
** Disable a term in the WHERE clause. Except, do not disable the term
** too much. If we disabled in (1), we'd get the wrong answer.
** See ticket #813.
*/
-static void disableTerm(WhereLevel *pLevel, Expr **ppExpr){
- Expr *pExpr = *ppExpr;
- if( pLevel->iLeftJoin==0 || ExprHasProperty(pExpr, EP_FromJoin) ){
- *ppExpr = 0;
+static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
+ if( pTerm
+ && (pTerm->flags & TERM_CODED)==0
+ && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin))
+ ){
+ pTerm->flags |= TERM_CODED;
+ if( pTerm->iParent>=0 ){
+ WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent];
+ if( (--pOther->nChild)==0 ){
+ disableTerm(pLevel, pOther);
+ }
+ }
}
}
sqlite3IndexAffinityStr(v, pIdx);
}
+
/*
-** Generate code for an equality term of the WHERE clause. An equality
-** term can be either X=expr or X IN (...). pTerm is the X.
+** Generate code for a single equality term of the WHERE clause. An equality
+** term can be either X=expr or X IN (...). pTerm is the term to be
+** coded.
+**
+** The current value for the constraint is left on the top of the stack.
+**
+** For a constraint of the form X=expr, the expression is evaluated and its
+** result is left on the stack. For constraints of the form X IN (...)
+** this routine sets up a loop that will iterate over all values of X.
*/
static void codeEqualityTerm(
Parse *pParse, /* The parsing context */
- ExprInfo *pTerm, /* The term of the WHERE clause to be coded */
+ WhereTerm *pTerm, /* The term of the WHERE clause to be coded */
int brk, /* Jump here to abandon the loop */
WhereLevel *pLevel /* When level of the FROM clause we are working on */
){
- Expr *pX = pTerm->p;
+ Expr *pX = pTerm->pExpr;
if( pX->op!=TK_IN ){
assert( pX->op==TK_EQ );
sqlite3ExprCode(pParse, pX->pRight);
#ifndef SQLITE_OMIT_SUBQUERY
}else{
int iTab;
+ int *aIn;
Vdbe *v = pParse->pVdbe;
sqlite3CodeSubselect(pParse, pX);
iTab = pX->iTable;
sqlite3VdbeAddOp(v, OP_Rewind, iTab, brk);
VdbeComment((v, "# %.*s", pX->span.n, pX->span.z));
- pLevel->inP2 = sqlite3VdbeAddOp(v, OP_Column, iTab, 0);
- pLevel->inOp = OP_Next;
- pLevel->inP1 = iTab;
+ pLevel->nIn++;
+ pLevel->aInLoop = aIn = sqliteRealloc(pLevel->aInLoop,
+ sizeof(pLevel->aInLoop[0])*3*pLevel->nIn);
+ if( aIn ){
+ aIn += pLevel->nIn*3 - 3;
+ aIn[0] = OP_Next;
+ aIn[1] = iTab;
+ aIn[2] = sqlite3VdbeAddOp(v, OP_Column, iTab, 0);
+ }else{
+ pLevel->nIn = 0;
+ }
#endif
}
- disableTerm(pLevel, &pTerm->p);
+ disableTerm(pLevel, pTerm);
}
/*
-** The number of bits in a Bitmask
+** Generate code that will evaluate all == and IN constraints for an
+** index. The values for all constraints are left on the stack.
+**
+** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c).
+** Suppose the WHERE clause is this: a==5 AND b IN (1,2,3) AND c>5 AND c<10
+** The index has as many as three equality constraints, but in this
+** example, the third "c" value is an inequality. So only two
+** constraints are coded. This routine will generate code to evaluate
+** a==5 and b IN (1,2,3). The current values for a and b will be left
+** on the stack - a is the deepest and b the shallowest.
+**
+** In the example above nEq==2. But this subroutine works for any value
+** of nEq including 0. If nEq==0, this routine is nearly a no-op.
+** The only thing it does is allocate the pLevel->iMem memory cell.
+**
+** This routine always allocates at least one memory cell and puts
+** the address of that memory cell in pLevel->iMem. The code that
+** calls this routine will use pLevel->iMem to store the termination
+** key value of the loop. If one or more IN operators appear, then
+** this routine allocates an additional nEq memory cells for internal
+** use.
*/
-#define BMS (sizeof(Bitmask)*8-1)
+static void codeAllEqualityTerms(
+ Parse *pParse, /* Parsing context */
+ WhereLevel *pLevel, /* Which nested loop of the FROM we are coding */
+ WhereClause *pWC, /* The WHERE clause */
+ Bitmask notReady, /* Which parts of FROM have not yet been coded */
+ int brk /* Jump here to end the loop */
+){
+ int nEq = pLevel->nEq; /* The number of == or IN constraints to code */
+ int termsInMem = 0; /* If true, store value in mem[] cells */
+ Vdbe *v = pParse->pVdbe; /* The virtual machine under construction */
+ Index *pIdx = pLevel->pIdx; /* The index being used for this loop */
+ int iCur = pLevel->iTabCur; /* The cursor of the table */
+ WhereTerm *pTerm; /* A single constraint term */
+ int j; /* Loop counter */
+
+ /* Figure out how many memory cells we will need then allocate them.
+ ** We always need at least one used to store the loop terminator
+ ** value. If there are IN operators we'll need one for each == or
+ ** IN constraint.
+ */
+ pLevel->iMem = pParse->nMem++;
+ if( pLevel->flags & WHERE_COLUMN_IN ){
+ pParse->nMem += pLevel->nEq;
+ termsInMem = 1;
+ }
+
+ /* Evaluate the equality constraints
+ */
+ for(j=0; j<pIdx->nColumn; j++){
+ int k = pIdx->aiColumn[j];
+ pTerm = findTerm(pWC, iCur, k, notReady, WO_EQ|WO_IN, pIdx);
+ if( pTerm==0 ) break;
+ assert( (pTerm->flags & TERM_CODED)==0 );
+ codeEqualityTerm(pParse, pTerm, brk, pLevel);
+ if( termsInMem ){
+ sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem+j+1, 1);
+ }
+ }
+ assert( j==nEq );
+
+ /* Make sure all the constraint values are on the top of the stack
+ */
+ if( termsInMem ){
+ for(j=0; j<nEq; j++){
+ sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem+j+1, 0);
+ }
+ }
+}
+
+#ifdef SQLITE_TEST
+/*
+** The following variable holds a text description of query plan generated
+** by the most recent call to sqlite3WhereBegin(). Each call to WhereBegin
+** overwrites the previous. This information is used for testing and
+** analysis only.
+*/
+char sqlite3_query_plan[BMS*2*40]; /* Text of the join */
+static int nQPlan = 0; /* Next free slow in _query_plan[] */
+
+#endif /* SQLITE_TEST */
+
/*
** end |-- by sqlite3WhereEnd()
** end /
**
+** Note that the loops might not be nested in the order in which they
+** appear in the FROM clause if a different order is better able to make
+** use of indices. Note also that when the IN operator appears in
+** the WHERE clause, it might result in additional nested loops for
+** scanning through all values on the right-hand side of the IN.
+**
** There are Btree cursors associated with each table. t1 uses cursor
** number pTabList->a[0].iCursor. t2 uses the cursor pTabList->a[1].iCursor.
** And so forth. This routine generates code to open those VDBE cursors
WhereInfo *pWInfo; /* Will become the return value of this function */
Vdbe *v = pParse->pVdbe; /* The virtual database engine */
int brk, cont = 0; /* Addresses used during code generation */
- int nExpr; /* Number of subexpressions in the WHERE clause */
- Bitmask loopMask; /* One bit set for each outer loop */
- ExprInfo *pTerm; /* A single term in the WHERE clause; ptr to aExpr[] */
- ExprMaskSet maskSet; /* The expression mask set */
- int iDirectEq[BMS]; /* Term of the form ROWID==X for the N-th table */
- int iDirectLt[BMS]; /* Term of the form ROWID<X or ROWID<=X */
- int iDirectGt[BMS]; /* Term of the form ROWID>X or ROWID>=X */
- ExprInfo aExpr[101]; /* The WHERE clause is divided into these terms */
+ Bitmask notReady; /* Cursors that are not yet positioned */
+ WhereTerm *pTerm; /* A single term in the WHERE clause */
+ ExprMaskSet maskSet; /* The expression mask set */
+ WhereClause wc; /* The WHERE clause is divided into these terms */
struct SrcList_item *pTabItem; /* A single entry from pTabList */
WhereLevel *pLevel; /* A single level in the pWInfo list */
+ int iFrom; /* First unused FROM clause element */
+ int andFlags; /* AND-ed combination of all wc.a[].flags */
- /* The number of terms in the FROM clause is limited by the number of
+ /* The number of tables in the FROM clause is limited by the number of
** bits in a Bitmask
*/
- if( pTabList->nSrc>sizeof(Bitmask)*8 ){
- sqlite3ErrorMsg(pParse, "at most %d tables in a join",
- sizeof(Bitmask)*8);
+ if( pTabList->nSrc>BMS ){
+ sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS);
return 0;
}
/* Split the WHERE clause into separate subexpressions where each
- ** subexpression is separated by an AND operator. If the aExpr[]
- ** array fills up, the last entry might point to an expression which
- ** contains additional unfactored AND operators.
+ ** subexpression is separated by an AND operator.
*/
initMaskSet(&maskSet);
- memset(aExpr, 0, sizeof(aExpr));
- nExpr = exprSplit(ARRAYSIZE(aExpr), aExpr, pWhere);
- if( nExpr==ARRAYSIZE(aExpr) ){
- sqlite3ErrorMsg(pParse, "WHERE clause too complex - no more "
- "than %d terms allowed", (int)ARRAYSIZE(aExpr)-1);
- return 0;
- }
+ whereClauseInit(&wc, pParse);
+ whereSplit(&wc, pWhere, TK_AND);
/* Allocate and initialize the WhereInfo structure that will become the
** return value.
*/
pWInfo = sqliteMalloc( sizeof(WhereInfo) + pTabList->nSrc*sizeof(WhereLevel));
if( sqlite3_malloc_failed ){
- sqliteFree(pWInfo); /* Avoid leaking memory when malloc fails */
- return 0;
+ goto whereBeginNoMem;
}
pWInfo->pParse = pParse;
pWInfo->pTabList = pTabList;
pWhere = 0;
}
- /* Analyze all of the subexpressions.
+ /* Analyze all of the subexpressions. Note that exprAnalyze() might
+ ** add new virtual terms onto the end of the WHERE clause. We do not
+ ** want to analyze these virtual terms, so start analyzing at the end
+ ** and work forward so that they added virtual terms are never processed.
*/
for(i=0; i<pTabList->nSrc; i++){
createMask(&maskSet, pTabList->a[i].iCursor);
}
- for(pTerm=aExpr, i=0; i<nExpr; i++, pTerm++){
- exprAnalyze(pTabList, &maskSet, pTerm);
+ exprAnalyzeAll(pTabList, &maskSet, &wc);
+ if( sqlite3_malloc_failed ){
+ goto whereBeginNoMem;
}
- /* Figure out what index to use (if any) for each nested loop.
- ** Make pWInfo->a[i].pIdx point to the index to use for the i-th nested
- ** loop where i==0 is the outer loop and i==pTabList->nSrc-1 is the inner
- ** loop.
+ /* Chose the best index to use for each table in the FROM clause.
**
- ** If terms exist that use the ROWID of any table, then set the
- ** iDirectEq[], iDirectLt[], or iDirectGt[] elements for that table
- ** to the index of the term containing the ROWID. We always prefer
- ** to use a ROWID which can directly access a table rather than an
- ** index which requires reading an index first to get the rowid then
- ** doing a second read of the actual database table.
+ ** This loop fills in the following fields:
**
- ** Actually, if there are more than 32 tables in the join, only the
- ** first 32 tables are candidates for indices. This is (again) due
- ** to the limit of 32 bits in an integer bitmask.
+ ** pWInfo->a[].pIdx The index to use for this level of the loop.
+ ** pWInfo->a[].flags WHERE_xxx flags associated with pIdx
+ ** pWInfo->a[].nEq The number of == and IN constraints
+ ** pWInfo->a[].iFrom When term of the FROM clause is being coded
+ ** pWInfo->a[].iTabCur The VDBE cursor for the database table
+ ** pWInfo->a[].iIdxCur The VDBE cursor for the index
+ **
+ ** This loop also figures out the nesting order of tables in the FROM
+ ** clause.
*/
- loopMask = 0;
+ notReady = ~(Bitmask)0;
pTabItem = pTabList->a;
pLevel = pWInfo->a;
- for(i=0; i<pTabList->nSrc && i<ARRAYSIZE(iDirectEq); i++,pTabItem++,pLevel++){
- int j;
- int iCur = pTabItem->iCursor; /* The cursor for this table */
- Bitmask mask = getMask(&maskSet, iCur); /* Cursor mask for this table */
- Table *pTab = pTabItem->pTab;
- Index *pIdx;
- Index *pBestIdx = 0;
- int bestScore = 0;
- int bestRev = 0;
-
- /* Check to see if there is an expression that uses only the
- ** ROWID field of this table. For terms of the form ROWID==expr
- ** set iDirectEq[i] to the index of the term. For terms of the
- ** form ROWID<expr or ROWID<=expr set iDirectLt[i] to the term index.
- ** For terms like ROWID>expr or ROWID>=expr set iDirectGt[i].
- **
- ** (Added:) Treat ROWID IN expr like ROWID=expr.
- */
- pLevel->iIdxCur = -1;
- iDirectEq[i] = -1;
- iDirectLt[i] = -1;
- iDirectGt[i] = -1;
- for(pTerm=aExpr, j=0; j<nExpr; j++, pTerm++){
- Expr *pX = pTerm->p;
- if( pTerm->idxLeft==iCur && pX->pLeft->iColumn<0
- && (pTerm->prereqRight & loopMask)==pTerm->prereqRight ){
- switch( pX->op ){
- case TK_IN:
- case TK_EQ: iDirectEq[i] = j; break;
- case TK_LE:
- case TK_LT: iDirectLt[i] = j; break;
- case TK_GE:
- case TK_GT: iDirectGt[i] = j; break;
- }
- }
- }
-
- /* If we found a term that tests ROWID with == or IN, that term
- ** will be used to locate the rows in the database table. There
- ** is not need to continue into the code below that looks for
- ** an index. We will always use the ROWID over an index.
- */
- if( iDirectEq[i]>=0 ){
- loopMask |= mask;
- pLevel->pIdx = 0;
- continue;
- }
-
- /* Do a search for usable indices. Leave pBestIdx pointing to
- ** the "best" index. pBestIdx is left set to NULL if no indices
- ** are usable.
- **
- ** The best index is the one with the highest score. The score
- ** for the index is determined as follows. For each of the
- ** left-most terms that is fixed by an equality operator, add
- ** 32 to the score. The right-most term of the index may be
- ** constrained by an inequality. Add 4 if for an "x<..." constraint
- ** and add 8 for an "x>..." constraint. If both constraints
- ** are present, add 12.
- **
- ** If the left-most term of the index uses an IN operator
- ** (ex: "x IN (...)") then add 16 to the score.
- **
- ** If an index can be used for sorting, add 2 to the score.
- ** If an index contains all the terms of a table that are ever
- ** used by any expression in the SQL statement, then add 1 to
- ** the score.
- **
- ** This scoring system is designed so that the score can later be
- ** used to determine how the index is used. If the score&0x1c is 0
- ** then all constraints are equalities. If score&0x4 is not 0 then
- ** there is an inequality used as a termination key. (ex: "x<...")
- ** If score&0x8 is not 0 then there is an inequality used as the
- ** start key. (ex: "x>..."). A score or 0x10 is the special case
- ** of an IN operator constraint. (ex: "x IN ...").
- **
- ** The IN operator (as in "<expr> IN (...)") is treated the same as
- ** an equality comparison except that it can only be used on the
- ** left-most column of an index and other terms of the WHERE clause
- ** cannot be used in conjunction with the IN operator to help satisfy
- ** other columns of the index.
- */
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- Bitmask eqMask = 0; /* Index columns covered by an x=... term */
- Bitmask ltMask = 0; /* Index columns covered by an x<... term */
- Bitmask gtMask = 0; /* Index columns covered by an x>... term */
- Bitmask inMask = 0; /* Index columns covered by an x IN .. term */
- Bitmask m;
- int nEq, score, bRev = 0;
-
- if( pIdx->nColumn>sizeof(eqMask)*8 ){
- continue; /* Ignore indices with too many columns to analyze */
- }
- for(pTerm=aExpr, j=0; j<nExpr; j++, pTerm++){
- Expr *pX = pTerm->p;
- CollSeq *pColl = sqlite3ExprCollSeq(pParse, pX->pLeft);
- if( !pColl && pX->pRight ){
- pColl = sqlite3ExprCollSeq(pParse, pX->pRight);
- }
- if( !pColl ){
- pColl = pParse->db->pDfltColl;
- }
- if( pTerm->idxLeft==iCur
- && (pTerm->prereqRight & loopMask)==pTerm->prereqRight ){
- int iColumn = pX->pLeft->iColumn;
- int k;
- char idxaff = iColumn>=0 ? pIdx->pTable->aCol[iColumn].affinity : 0;
- for(k=0; k<pIdx->nColumn; k++){
- /* If the collating sequences or affinities don't match,
- ** ignore this index. */
- if( pColl!=pIdx->keyInfo.aColl[k] ) continue;
- if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue;
- if( pIdx->aiColumn[k]==iColumn ){
- switch( pX->op ){
- case TK_IN: {
- if( k==0 ) inMask |= 1;
- break;
- }
- case TK_EQ: {
- eqMask |= ((Bitmask)1)<<k;
- break;
- }
- case TK_LE:
- case TK_LT: {
- ltMask |= ((Bitmask)1)<<k;
- break;
- }
- case TK_GE:
- case TK_GT: {
- gtMask |= ((Bitmask)1)<<k;
- break;
- }
- default: {
- /* CANT_HAPPEN */
- assert( 0 );
- break;
- }
- }
- break;
- }
- }
- }
- }
-
- /* The following loop ends with nEq set to the number of columns
- ** on the left of the index with == constraints.
- */
- for(nEq=0; nEq<pIdx->nColumn; nEq++){
- m = (((Bitmask)1)<<(nEq+1))-1;
- if( (m & eqMask)!=m ) break;
+ andFlags = ~0;
+ for(i=iFrom=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){
+ Index *pIdx; /* Index for FROM table at pTabItem */
+ int flags; /* Flags asssociated with pIdx */
+ int nEq; /* Number of == or IN constraints */
+ double cost; /* The cost for pIdx */
+ int j; /* For looping over FROM tables */
+ Index *pBest = 0; /* The best index seen so far */
+ int bestFlags = 0; /* Flags associated with pBest */
+ int bestNEq = 0; /* nEq associated with pBest */
+ double lowestCost = 1.0e99; /* Cost of the pBest */
+ int bestJ; /* The value of j */
+ Bitmask m; /* Bitmask value for j or bestJ */
+
+ for(j=iFrom, pTabItem=&pTabList->a[j]; j<pTabList->nSrc; j++, pTabItem++){
+ m = getMask(&maskSet, pTabItem->iCursor);
+ if( (m & notReady)==0 ){
+ if( j==iFrom ) iFrom++;
+ continue;
}
-
- /* Begin assemblying the score
- */
- score = nEq*32; /* Base score is 32 times number of == constraints */
- m = ((Bitmask)1)<<nEq;
- if( m & ltMask ) score+=4; /* Increase score for a < constraint */
- if( m & gtMask ) score+=8; /* Increase score for a > constraint */
- if( score==0 && inMask ) score = 16; /* Default score for IN constraint */
-
- /* Give bonus points if this index can be used for sorting
- */
- if( i==0 && score!=16 && ppOrderBy && *ppOrderBy ){
- int base = pTabList->a[0].iCursor;
- if( isSortingIndex(pParse, pIdx, pTab, base, *ppOrderBy, nEq, &bRev) ){
- score += 2;
- }
+ cost = bestIndex(pParse, &wc, pTabItem, notReady,
+ (j==0 && ppOrderBy) ? *ppOrderBy : 0,
+ &pIdx, &flags, &nEq);
+ if( cost<lowestCost ){
+ lowestCost = cost;
+ pBest = pIdx;
+ bestFlags = flags;
+ bestNEq = nEq;
+ bestJ = j;
}
-
- /* Check to see if we can get away with using just the index without
- ** ever reading the table. If that is the case, then add one bonus
- ** point to the score.
- */
- if( score && pTabItem->colUsed < (((Bitmask)1)<<(BMS-1)) ){
- for(m=0, j=0; j<pIdx->nColumn; j++){
- int x = pIdx->aiColumn[j];
- if( x<BMS-1 ){
- m |= ((Bitmask)1)<<x;
- }
- }
- if( (pTabItem->colUsed & m)==pTabItem->colUsed ){
- score++;
- }
- }
-
- /* If the score for this index is the best we have seen so far, then
- ** save it
- */
- if( score>bestScore ){
- pBestIdx = pIdx;
- bestScore = score;
- bestRev = bRev;
+ if( (pTabItem->jointype & JT_LEFT)!=0
+ || (j>0 && (pTabItem[-1].jointype & JT_LEFT)!=0)
+ ){
+ break;
}
}
- pLevel->pIdx = pBestIdx;
- pLevel->score = bestScore;
- pLevel->bRev = bestRev;
- loopMask |= mask;
- if( pBestIdx ){
+ if( (bestFlags & WHERE_ORDERBY)!=0 ){
+ *ppOrderBy = 0;
+ }
+ andFlags &= bestFlags;
+ pLevel->flags = bestFlags;
+ pLevel->pIdx = pBest;
+ pLevel->nEq = bestNEq;
+ pLevel->aInLoop = 0;
+ pLevel->nIn = 0;
+ if( pBest ){
pLevel->iIdxCur = pParse->nTab++;
+ }else{
+ pLevel->iIdxCur = -1;
}
+ notReady &= ~getMask(&maskSet, pTabList->a[bestJ].iCursor);
+ pLevel->iFrom = bestJ;
}
- /* Check to see if the ORDER BY clause is or can be satisfied by the
- ** use of an index on the first table.
+ /* If the total query only selects a single row, then the ORDER BY
+ ** clause is irrelevant.
*/
- if( ppOrderBy && *ppOrderBy && pTabList->nSrc>0 ){
- Index *pIdx; /* Index derived from the WHERE clause */
- Table *pTab; /* Left-most table in the FROM clause */
- int bRev = 0; /* True to reverse the output order */
- int iCur; /* Btree-cursor that will be used by pTab */
- WhereLevel *pLevel0 = &pWInfo->a[0];
-
- pTab = pTabList->a[0].pTab;
- pIdx = pLevel0->pIdx;
- iCur = pTabList->a[0].iCursor;
- if( pIdx==0 && sortableByRowid(iCur, *ppOrderBy, &bRev) ){
- /* The ORDER BY clause specifies ROWID order, which is what we
- ** were going to be doing anyway...
- */
- *ppOrderBy = 0;
- pLevel0->bRev = bRev;
- }else if( pLevel0->score==16 ){
- /* If there is already an IN index on the left-most table,
- ** it will not give the correct sort order.
- ** So, pretend that no suitable index is found.
- */
- }else if( iDirectEq[0]>=0 || iDirectLt[0]>=0 || iDirectGt[0]>=0 ){
- /* If the left-most column is accessed using its ROWID, then do
- ** not try to sort by index. But do delete the ORDER BY clause
- ** if it is redundant.
- */
- }else if( (pLevel0->score&2)!=0 ){
- /* The index that was selected for searching will cause rows to
- ** appear in sorted order.
- */
- *ppOrderBy = 0;
- }
+ if( (andFlags & WHERE_UNIQUE)!=0 && ppOrderBy ){
+ *ppOrderBy = 0;
}
/* Open all tables in the pTabList and any indices selected for
*/
sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */
pLevel = pWInfo->a;
- for(i=0, pTabItem=pTabList->a; i<pTabList->nSrc; i++, pTabItem++, pLevel++){
+ for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){
Table *pTab;
Index *pIx;
int iIdxCur = pLevel->iIdxCur;
+ pTabItem = &pTabList->a[pLevel->iFrom];
pTab = pTabItem->pTab;
if( pTab->isTransient || pTab->pSelect ) continue;
- if( (pLevel->score & 1)==0 ){
+ if( (pLevel->flags & WHERE_IDX_ONLY)==0 ){
sqlite3OpenTableForReading(v, pTabItem->iCursor, pTab);
}
pLevel->iTabCur = pTabItem->iCursor;
if( (pIx = pLevel->pIdx)!=0 ){
sqlite3VdbeAddOp(v, OP_Integer, pIx->iDb, 0);
+ VdbeComment((v, "# %s", pIx->zName));
sqlite3VdbeOp3(v, OP_OpenRead, iIdxCur, pIx->tnum,
(char*)&pIx->keyInfo, P3_KEYINFO);
}
- if( (pLevel->score & 1)!=0 ){
+ if( (pLevel->flags & WHERE_IDX_ONLY)!=0 ){
sqlite3VdbeAddOp(v, OP_SetNumColumns, iIdxCur, pIx->nColumn+1);
}
sqlite3CodeVerifySchema(pParse, pTab->iDb);
}
pWInfo->iTop = sqlite3VdbeCurrentAddr(v);
- /* Generate the code to do the search
+ /* Generate the code to do the search. Each iteration of the for
+ ** loop below generates code for a single nested loop of the VM
+ ** program.
*/
- loopMask = 0;
- pLevel = pWInfo->a;
- pTabItem = pTabList->a;
- for(i=0; i<pTabList->nSrc; i++, pTabItem++, pLevel++){
- int j, k;
+ notReady = ~(Bitmask)0;
+ for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){
+ int j;
int iCur = pTabItem->iCursor; /* The VDBE cursor for the table */
Index *pIdx; /* The index we will be using */
int iIdxCur; /* The VDBE cursor for the index */
int omitTable; /* True if we use the index only */
+ int bRev; /* True if we need to scan in reverse order */
+ pTabItem = &pTabList->a[pLevel->iFrom];
+ iCur = pTabItem->iCursor;
pIdx = pLevel->pIdx;
iIdxCur = pLevel->iIdxCur;
- pLevel->inOp = OP_Noop;
+ bRev = (pLevel->flags & WHERE_REVERSE)!=0;
+ omitTable = (pLevel->flags & WHERE_IDX_ONLY)!=0;
- /* Check to see if it is appropriate to omit the use of the table
- ** here and use its index instead.
+ /* Create labels for the "break" and "continue" instructions
+ ** for the current loop. Jump to brk to break out of a loop.
+ ** Jump to cont to go immediately to the next iteration of the
+ ** loop.
*/
- omitTable = (pLevel->score&1)!=0;
+ brk = pLevel->brk = sqlite3VdbeMakeLabel(v);
+ cont = pLevel->cont = sqlite3VdbeMakeLabel(v);
/* If this is the right table of a LEFT OUTER JOIN, allocate and
** initialize a memory cell that records if this table matches any
** row of the left table of the join.
*/
- if( i>0 && (pTabList->a[i-1].jointype & JT_LEFT)!=0 ){
+ if( pLevel->iFrom>0 && (pTabItem[-1].jointype & JT_LEFT)!=0 ){
if( !pParse->nMem ) pParse->nMem++;
pLevel->iLeftJoin = pParse->nMem++;
sqlite3VdbeAddOp(v, OP_Null, 0, 0);
VdbeComment((v, "# init LEFT JOIN no-match flag"));
}
- if( i<ARRAYSIZE(iDirectEq) && (k = iDirectEq[i])>=0 ){
+ if( pLevel->flags & WHERE_ROWID_EQ ){
/* Case 1: We can directly reference a single row using an
** equality comparison against the ROWID field. Or
** we reference multiple rows using a "rowid IN (...)"
** construct.
*/
- assert( k<nExpr );
- pTerm = &aExpr[k];
- assert( pTerm->p!=0 );
- assert( pTerm->idxLeft==iCur );
+ pTerm = findTerm(&wc, iCur, -1, notReady, WO_EQ|WO_IN, 0);
+ assert( pTerm!=0 );
+ assert( pTerm->pExpr!=0 );
+ assert( pTerm->leftCursor==iCur );
assert( omitTable==0 );
- brk = pLevel->brk = sqlite3VdbeMakeLabel(v);
codeEqualityTerm(pParse, pTerm, brk, pLevel);
- cont = pLevel->cont = sqlite3VdbeMakeLabel(v);
sqlite3VdbeAddOp(v, OP_MustBeInt, 1, brk);
sqlite3VdbeAddOp(v, OP_NotExists, iCur, brk);
VdbeComment((v, "pk"));
pLevel->op = OP_Noop;
- }else if( pIdx!=0 && pLevel->score>3 && (pLevel->score&0x0c)==0 ){
- /* Case 2: There is an index and all terms of the WHERE clause that
- ** refer to the index using the "==" or "IN" operators.
- */
- int start;
- int nColumn = (pLevel->score+16)/32;
- brk = pLevel->brk = sqlite3VdbeMakeLabel(v);
-
- /* For each column of the index, find the term of the WHERE clause that
- ** constraints that column. If the WHERE clause term is X=expr, then
- ** evaluation expr and leave the result on the stack */
- for(j=0; j<nColumn; j++){
- for(pTerm=aExpr, k=0; k<nExpr; k++, pTerm++){
- Expr *pX = pTerm->p;
- if( pX==0 ) continue;
- if( pTerm->idxLeft==iCur
- && (pTerm->prereqRight & loopMask)==pTerm->prereqRight
- && pX->pLeft->iColumn==pIdx->aiColumn[j]
- && (pX->op==TK_EQ || pX->op==TK_IN)
- ){
- char idxaff = pIdx->pTable->aCol[pX->pLeft->iColumn].affinity;
- if( sqlite3IndexAffinityOk(pX, idxaff) ){
- codeEqualityTerm(pParse, pTerm, brk, pLevel);
- break;
- }
- }
- }
- }
- pLevel->iMem = pParse->nMem++;
- cont = pLevel->cont = sqlite3VdbeMakeLabel(v);
- buildIndexProbe(v, nColumn, brk, pIdx);
- sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 0);
-
- /* Generate code (1) to move to the first matching element of the table.
- ** Then generate code (2) that jumps to "brk" after the cursor is past
- ** the last matching element of the table. The code (1) is executed
- ** once to initialize the search, the code (2) is executed before each
- ** iteration of the scan to see if the scan has finished. */
- if( pLevel->bRev ){
- /* Scan in reverse order */
- sqlite3VdbeAddOp(v, OP_MoveLe, iIdxCur, brk);
- start = sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
- sqlite3VdbeAddOp(v, OP_IdxLT, iIdxCur, brk);
- pLevel->op = OP_Prev;
- }else{
- /* Scan in the forward order */
- sqlite3VdbeAddOp(v, OP_MoveGe, iIdxCur, brk);
- start = sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
- sqlite3VdbeOp3(v, OP_IdxGE, iIdxCur, brk, "+", P3_STATIC);
- pLevel->op = OP_Next;
- }
- sqlite3VdbeAddOp(v, OP_RowKey, iIdxCur, 0);
- sqlite3VdbeAddOp(v, OP_IdxIsNull, nColumn, cont);
- if( !omitTable ){
- sqlite3VdbeAddOp(v, OP_IdxRowid, iIdxCur, 0);
- sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0);
- }
- pLevel->p1 = iIdxCur;
- pLevel->p2 = start;
- }else if( i<ARRAYSIZE(iDirectLt) && (iDirectLt[i]>=0 || iDirectGt[i]>=0) ){
- /* Case 3: We have an inequality comparison against the ROWID field.
+ }else if( pLevel->flags & WHERE_ROWID_RANGE ){
+ /* Case 2: We have an inequality comparison against the ROWID field.
*/
int testOp = OP_Noop;
int start;
- int bRev = pLevel->bRev;
+ WhereTerm *pStart, *pEnd;
assert( omitTable==0 );
- brk = pLevel->brk = sqlite3VdbeMakeLabel(v);
- cont = pLevel->cont = sqlite3VdbeMakeLabel(v);
+ pStart = findTerm(&wc, iCur, -1, notReady, WO_GT|WO_GE, 0);
+ pEnd = findTerm(&wc, iCur, -1, notReady, WO_LT|WO_LE, 0);
if( bRev ){
- int t = iDirectGt[i];
- iDirectGt[i] = iDirectLt[i];
- iDirectLt[i] = t;
+ pTerm = pStart;
+ pStart = pEnd;
+ pEnd = pTerm;
}
- if( iDirectGt[i]>=0 ){
+ if( pStart ){
Expr *pX;
- k = iDirectGt[i];
- assert( k<nExpr );
- pTerm = &aExpr[k];
- pX = pTerm->p;
+ pX = pStart->pExpr;
assert( pX!=0 );
- assert( pTerm->idxLeft==iCur );
+ assert( pStart->leftCursor==iCur );
sqlite3ExprCode(pParse, pX->pRight);
sqlite3VdbeAddOp(v, OP_ForceInt, pX->op==TK_LE || pX->op==TK_GT, brk);
sqlite3VdbeAddOp(v, bRev ? OP_MoveLt : OP_MoveGe, iCur, brk);
VdbeComment((v, "pk"));
- disableTerm(pLevel, &pTerm->p);
+ disableTerm(pLevel, pStart);
}else{
sqlite3VdbeAddOp(v, bRev ? OP_Last : OP_Rewind, iCur, brk);
}
- if( iDirectLt[i]>=0 ){
+ if( pEnd ){
Expr *pX;
- k = iDirectLt[i];
- assert( k<nExpr );
- pTerm = &aExpr[k];
- pX = pTerm->p;
+ pX = pEnd->pExpr;
assert( pX!=0 );
- assert( pTerm->idxLeft==iCur );
+ assert( pEnd->leftCursor==iCur );
sqlite3ExprCode(pParse, pX->pRight);
pLevel->iMem = pParse->nMem++;
sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1);
}else{
testOp = bRev ? OP_Lt : OP_Gt;
}
- disableTerm(pLevel, &pTerm->p);
+ disableTerm(pLevel, pEnd);
}
start = sqlite3VdbeCurrentAddr(v);
pLevel->op = bRev ? OP_Prev : OP_Next;
sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
sqlite3VdbeAddOp(v, testOp, 'n', brk);
}
- }else if( pIdx==0 ){
- /* Case 4: There is no usable index. We must do a complete
- ** scan of the entire database table.
- */
- int start;
- int opRewind;
-
- assert( omitTable==0 );
- brk = pLevel->brk = sqlite3VdbeMakeLabel(v);
- cont = pLevel->cont = sqlite3VdbeMakeLabel(v);
- if( pLevel->bRev ){
- opRewind = OP_Last;
- pLevel->op = OP_Prev;
- }else{
- opRewind = OP_Rewind;
- pLevel->op = OP_Next;
- }
- sqlite3VdbeAddOp(v, opRewind, iCur, brk);
- start = sqlite3VdbeCurrentAddr(v);
- pLevel->p1 = iCur;
- pLevel->p2 = start;
- }else{
- /* Case 5: The WHERE clause term that refers to the right-most
+ }else if( pLevel->flags & WHERE_COLUMN_RANGE ){
+ /* Case 3: The WHERE clause term that refers to the right-most
** column of the index is an inequality. For example, if
** the index is on (x,y,z) and the WHERE clause is of the
** form "x=5 AND y<10" then this case is used. Only the
** right-most column can be an inequality - the rest must
- ** use the "==" operator.
+ ** use the "==" and "IN" operators.
**
** This case is also used when there are no WHERE clause
** constraints but an index is selected anyway, in order
** to force the output order to conform to an ORDER BY.
*/
- int score = pLevel->score;
- int nEqColumn = score/32;
int start;
+ int nEq = pLevel->nEq;
int leFlag=0, geFlag=0;
int testOp;
+ int topLimit = (pLevel->flags & WHERE_TOP_LIMIT)!=0;
+ int btmLimit = (pLevel->flags & WHERE_BTM_LIMIT)!=0;
- /* Evaluate the equality constraints
+ /* Generate code to evaluate all constraint terms using == or IN
+ ** and level the values of those terms on the stack.
*/
- for(j=0; j<nEqColumn; j++){
- int iIdxCol = pIdx->aiColumn[j];
- for(pTerm=aExpr, k=0; k<nExpr; k++, pTerm++){
- Expr *pX = pTerm->p;
- if( pX==0 ) continue;
- if( pTerm->idxLeft==iCur
- && pX->op==TK_EQ
- && (pTerm->prereqRight & loopMask)==pTerm->prereqRight
- && pX->pLeft->iColumn==iIdxCol
- ){
- sqlite3ExprCode(pParse, pX->pRight);
- disableTerm(pLevel, &pTerm->p);
- break;
- }
- }
- }
+ codeAllEqualityTerms(pParse, pLevel, &wc, notReady, brk);
/* Duplicate the equality term values because they will all be
** used twice: once to make the termination key and once to make the
** start key.
*/
- for(j=0; j<nEqColumn; j++){
- sqlite3VdbeAddOp(v, OP_Dup, nEqColumn-1, 0);
+ for(j=0; j<nEq; j++){
+ sqlite3VdbeAddOp(v, OP_Dup, nEq-1, 0);
}
- /* Labels for the beginning and end of the loop
- */
- cont = pLevel->cont = sqlite3VdbeMakeLabel(v);
- brk = pLevel->brk = sqlite3VdbeMakeLabel(v);
-
/* Generate the termination key. This is the key value that
** will end the search. There is no termination key if there
** are no equality terms and no "X<..." term.
** 2002-Dec-04: On a reverse-order scan, the so-called "termination"
** key computed here really ends up being the start key.
*/
- if( (score & 4)!=0 ){
- for(pTerm=aExpr, k=0; k<nExpr; k++, pTerm++){
- Expr *pX = pTerm->p;
- if( pX==0 ) continue;
- if( pTerm->idxLeft==iCur
- && (pX->op==TK_LT || pX->op==TK_LE)
- && (pTerm->prereqRight & loopMask)==pTerm->prereqRight
- && pX->pLeft->iColumn==pIdx->aiColumn[j]
- ){
- sqlite3ExprCode(pParse, pX->pRight);
- leFlag = pX->op==TK_LE;
- disableTerm(pLevel, &pTerm->p);
- break;
- }
- }
+ if( topLimit ){
+ Expr *pX;
+ int k = pIdx->aiColumn[j];
+ pTerm = findTerm(&wc, iCur, k, notReady, WO_LT|WO_LE, pIdx);
+ assert( pTerm!=0 );
+ pX = pTerm->pExpr;
+ assert( (pTerm->flags & TERM_CODED)==0 );
+ sqlite3ExprCode(pParse, pX->pRight);
+ leFlag = pX->op==TK_LE;
+ disableTerm(pLevel, pTerm);
testOp = OP_IdxGE;
}else{
- testOp = nEqColumn>0 ? OP_IdxGE : OP_Noop;
+ testOp = nEq>0 ? OP_IdxGE : OP_Noop;
leFlag = 1;
}
if( testOp!=OP_Noop ){
- int nCol = nEqColumn + ((score & 4)!=0);
+ int nCol = nEq + topLimit;
pLevel->iMem = pParse->nMem++;
buildIndexProbe(v, nCol, brk, pIdx);
- if( pLevel->bRev ){
+ if( bRev ){
int op = leFlag ? OP_MoveLe : OP_MoveLt;
sqlite3VdbeAddOp(v, op, iIdxCur, brk);
}else{
sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1);
}
- }else if( pLevel->bRev ){
+ }else if( bRev ){
sqlite3VdbeAddOp(v, OP_Last, iIdxCur, brk);
}
** 2002-Dec-04: In the case of a reverse-order search, the so-called
** "start" key really ends up being used as the termination key.
*/
- if( (score & 8)!=0 ){
- for(pTerm=aExpr, k=0; k<nExpr; k++, pTerm++){
- Expr *pX = pTerm->p;
- if( pX==0 ) continue;
- if( pTerm->idxLeft==iCur
- && (pX->op==TK_GT || pX->op==TK_GE)
- && (pTerm->prereqRight & loopMask)==pTerm->prereqRight
- && pX->pLeft->iColumn==pIdx->aiColumn[j]
- ){
- sqlite3ExprCode(pParse, pX->pRight);
- geFlag = pX->op==TK_GE;
- disableTerm(pLevel, &pTerm->p);
- break;
- }
- }
+ if( btmLimit ){
+ Expr *pX;
+ int k = pIdx->aiColumn[j];
+ pTerm = findTerm(&wc, iCur, k, notReady, WO_GT|WO_GE, pIdx);
+ assert( pTerm!=0 );
+ pX = pTerm->pExpr;
+ assert( (pTerm->flags & TERM_CODED)==0 );
+ sqlite3ExprCode(pParse, pX->pRight);
+ geFlag = pX->op==TK_GE;
+ disableTerm(pLevel, pTerm);
}else{
geFlag = 1;
}
- if( nEqColumn>0 || (score&8)!=0 ){
- int nCol = nEqColumn + ((score&8)!=0);
+ if( nEq>0 || btmLimit ){
+ int nCol = nEq + btmLimit;
buildIndexProbe(v, nCol, brk, pIdx);
- if( pLevel->bRev ){
+ if( bRev ){
pLevel->iMem = pParse->nMem++;
sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1);
testOp = OP_IdxLT;
int op = geFlag ? OP_MoveGe : OP_MoveGt;
sqlite3VdbeAddOp(v, op, iIdxCur, brk);
}
- }else if( pLevel->bRev ){
+ }else if( bRev ){
testOp = OP_Noop;
}else{
sqlite3VdbeAddOp(v, OP_Rewind, iIdxCur, brk);
if( testOp!=OP_Noop ){
sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
sqlite3VdbeAddOp(v, testOp, iIdxCur, brk);
- if( (leFlag && !pLevel->bRev) || (!geFlag && pLevel->bRev) ){
+ if( (leFlag && !bRev) || (!geFlag && bRev) ){
sqlite3VdbeChangeP3(v, -1, "+", P3_STATIC);
}
}
sqlite3VdbeAddOp(v, OP_RowKey, iIdxCur, 0);
- sqlite3VdbeAddOp(v, OP_IdxIsNull, nEqColumn + ((score&4)!=0), cont);
+ sqlite3VdbeAddOp(v, OP_IdxIsNull, nEq + topLimit, cont);
if( !omitTable ){
sqlite3VdbeAddOp(v, OP_IdxRowid, iIdxCur, 0);
sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0);
/* Record the instruction used to terminate the loop.
*/
- pLevel->op = pLevel->bRev ? OP_Prev : OP_Next;
+ pLevel->op = bRev ? OP_Prev : OP_Next;
+ pLevel->p1 = iIdxCur;
+ pLevel->p2 = start;
+ }else if( pLevel->flags & WHERE_COLUMN_EQ ){
+ /* Case 4: There is an index and all terms of the WHERE clause that
+ ** refer to the index using the "==" or "IN" operators.
+ */
+ int start;
+ int nEq = pLevel->nEq;
+
+ /* Generate code to evaluate all constraint terms using == or IN
+ ** and leave the values of those terms on the stack.
+ */
+ codeAllEqualityTerms(pParse, pLevel, &wc, notReady, brk);
+
+ /* Generate a single key that will be used to both start and terminate
+ ** the search
+ */
+ buildIndexProbe(v, nEq, brk, pIdx);
+ sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 0);
+
+ /* Generate code (1) to move to the first matching element of the table.
+ ** Then generate code (2) that jumps to "brk" after the cursor is past
+ ** the last matching element of the table. The code (1) is executed
+ ** once to initialize the search, the code (2) is executed before each
+ ** iteration of the scan to see if the scan has finished. */
+ if( bRev ){
+ /* Scan in reverse order */
+ sqlite3VdbeAddOp(v, OP_MoveLe, iIdxCur, brk);
+ start = sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
+ sqlite3VdbeAddOp(v, OP_IdxLT, iIdxCur, brk);
+ pLevel->op = OP_Prev;
+ }else{
+ /* Scan in the forward order */
+ sqlite3VdbeAddOp(v, OP_MoveGe, iIdxCur, brk);
+ start = sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
+ sqlite3VdbeOp3(v, OP_IdxGE, iIdxCur, brk, "+", P3_STATIC);
+ pLevel->op = OP_Next;
+ }
+ sqlite3VdbeAddOp(v, OP_RowKey, iIdxCur, 0);
+ sqlite3VdbeAddOp(v, OP_IdxIsNull, nEq, cont);
+ if( !omitTable ){
+ sqlite3VdbeAddOp(v, OP_IdxRowid, iIdxCur, 0);
+ sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0);
+ }
pLevel->p1 = iIdxCur;
pLevel->p2 = start;
+ }else{
+ /* Case 5: There is no usable index. We must do a complete
+ ** scan of the entire table.
+ */
+ assert( omitTable==0 );
+ assert( bRev==0 );
+ pLevel->op = OP_Next;
+ pLevel->p1 = iCur;
+ pLevel->p2 = 1 + sqlite3VdbeAddOp(v, OP_Rewind, iCur, brk);
}
- loopMask |= getMask(&maskSet, iCur);
+ notReady &= ~getMask(&maskSet, iCur);
/* Insert code to test every subexpression that can be completely
** computed using the current set of tables.
*/
- for(pTerm=aExpr, j=0; j<nExpr; j++, pTerm++){
- if( pTerm->p==0 ) continue;
- if( (pTerm->prereqAll & loopMask)!=pTerm->prereqAll ) continue;
- if( pLevel->iLeftJoin && !ExprHasProperty(pTerm->p,EP_FromJoin) ){
+ for(pTerm=wc.a, j=wc.nTerm; j>0; j--, pTerm++){
+ Expr *pE;
+ if( pTerm->flags & (TERM_VIRTUAL|TERM_CODED) ) continue;
+ if( (pTerm->prereqAll & notReady)!=0 ) continue;
+ pE = pTerm->pExpr;
+ assert( pE!=0 );
+ if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
continue;
}
- sqlite3ExprIfFalse(pParse, pTerm->p, cont, 1);
- pTerm->p = 0;
+ sqlite3ExprIfFalse(pParse, pE, cont, 1);
+ pTerm->flags |= TERM_CODED;
}
- brk = cont;
/* For a LEFT OUTER JOIN, generate code that will record the fact that
** at least one row of the right table has matched the left table.
sqlite3VdbeAddOp(v, OP_Integer, 1, 0);
sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1);
VdbeComment((v, "# record LEFT JOIN hit"));
- for(pTerm=aExpr, j=0; j<nExpr; j++, pTerm++){
- if( pTerm->p==0 ) continue;
- if( (pTerm->prereqAll & loopMask)!=pTerm->prereqAll ) continue;
- sqlite3ExprIfFalse(pParse, pTerm->p, cont, 1);
- pTerm->p = 0;
+ for(pTerm=wc.a, j=0; j<wc.nTerm; j++, pTerm++){
+ if( pTerm->flags & (TERM_VIRTUAL|TERM_CODED) ) continue;
+ if( (pTerm->prereqAll & notReady)!=0 ) continue;
+ assert( pTerm->pExpr );
+ sqlite3ExprIfFalse(pParse, pTerm->pExpr, cont, 1);
+ pTerm->flags |= TERM_CODED;
+ }
+ }
+ }
+
+#ifdef SQLITE_TEST /* For testing and debugging use only */
+ /* Record in the query plan information about the current table
+ ** and the index used to access it (if any). If the table itself
+ ** is not used, its name is just '{}'. If no index is used
+ ** the index is listed as "{}". If the primary key is used the
+ ** index name is '*'.
+ */
+ for(i=0; i<pTabList->nSrc; i++){
+ char *z;
+ int n;
+ pLevel = &pWInfo->a[i];
+ pTabItem = &pTabList->a[pLevel->iFrom];
+ z = pTabItem->zAlias;
+ if( z==0 ) z = pTabItem->pTab->zName;
+ n = strlen(z);
+ if( n+nQPlan < sizeof(sqlite3_query_plan)-10 ){
+ if( pLevel->flags & WHERE_IDX_ONLY ){
+ strcpy(&sqlite3_query_plan[nQPlan], "{}");
+ nQPlan += 2;
+ }else{
+ strcpy(&sqlite3_query_plan[nQPlan], z);
+ nQPlan += n;
+ }
+ sqlite3_query_plan[nQPlan++] = ' ';
+ }
+ if( pLevel->flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
+ strcpy(&sqlite3_query_plan[nQPlan], "* ");
+ nQPlan += 2;
+ }else if( pLevel->pIdx==0 ){
+ strcpy(&sqlite3_query_plan[nQPlan], "{} ");
+ nQPlan += 3;
+ }else{
+ n = strlen(pLevel->pIdx->zName);
+ if( n+nQPlan < sizeof(sqlite3_query_plan)-2 ){
+ strcpy(&sqlite3_query_plan[nQPlan], pLevel->pIdx->zName);
+ nQPlan += n;
+ sqlite3_query_plan[nQPlan++] = ' ';
}
}
}
+ while( nQPlan>0 && sqlite3_query_plan[nQPlan-1]==' ' ){
+ sqlite3_query_plan[--nQPlan] = 0;
+ }
+ sqlite3_query_plan[nQPlan] = 0;
+ nQPlan = 0;
+#endif /* SQLITE_TEST // Testing and debugging use only */
+
+ /* Record the continuation address in the WhereInfo structure. Then
+ ** clean up and return.
+ */
pWInfo->iContinue = cont;
- freeMaskSet(&maskSet);
+ whereClauseClear(&wc);
return pWInfo;
+
+ /* Jump here if malloc fails */
+whereBeginNoMem:
+ whereClauseClear(&wc);
+ sqliteFree(pWInfo);
+ return 0;
}
/*
int i;
WhereLevel *pLevel;
SrcList *pTabList = pWInfo->pTabList;
- struct SrcList_item *pTabItem;
/* Generate loop termination code.
*/
sqlite3VdbeAddOp(v, pLevel->op, pLevel->p1, pLevel->p2);
}
sqlite3VdbeResolveLabel(v, pLevel->brk);
- if( pLevel->inOp!=OP_Noop ){
- sqlite3VdbeAddOp(v, pLevel->inOp, pLevel->inP1, pLevel->inP2);
+ if( pLevel->nIn ){
+ int *a;
+ int j;
+ for(j=pLevel->nIn, a=&pLevel->aInLoop[j*3-3]; j>0; j--, a-=3){
+ sqlite3VdbeAddOp(v, a[0], a[1], a[2]);
+ }
+ sqliteFree(pLevel->aInLoop);
}
if( pLevel->iLeftJoin ){
int addr;
*/
sqlite3VdbeResolveLabel(v, pWInfo->iBreak);
- /* Close all of the cursors that were opend by sqlite3WhereBegin.
+ /* Close all of the cursors that were opened by sqlite3WhereBegin.
*/
- pLevel = pWInfo->a;
- pTabItem = pTabList->a;
- for(i=0; i<pTabList->nSrc; i++, pTabItem++, pLevel++){
+ for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){
+ struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom];
Table *pTab = pTabItem->pTab;
assert( pTab!=0 );
if( pTab->isTransient || pTab->pSelect ) continue;
- if( (pLevel->score & 1)==0 ){
+ if( (pLevel->flags & WHERE_IDX_ONLY)==0 ){
sqlite3VdbeAddOp(v, OP_Close, pTabItem->iCursor, 0);
}
if( pLevel->pIdx!=0 ){
** that reference the table and converts them into opcodes that
** reference the index.
*/
- if( pLevel->score & 1 ){
+ if( pLevel->flags & WHERE_IDX_ONLY ){
int i, j, last;
VdbeOp *pOp;
Index *pIdx = pLevel->pIdx;