diff --git a/src/perfetto_sql/analysis/relation.cc b/src/perfetto_sql/analysis/relation.cc index 50a9a40765..b970bf7edc 100644 --- a/src/perfetto_sql/analysis/relation.cc +++ b/src/perfetto_sql/analysis/relation.cc @@ -705,8 +705,15 @@ RelationAnalyzer::Impl::Select(SyntaqliteParser* p, uint32_t id, int depth) { } return std::move(*left); } - default: - return base::ErrStatus("relation analysis: not a select"); + default: { + std::optional found = catalog_.FindNodeRelation({p, id}); + if (!found) { + return base::ErrStatus("relation analysis: not a select"); + } + preserves_rows_ = false; + std::vector hidden; + return LeafColumns(std::move(*found), hidden); + } } } diff --git a/src/perfetto_sql/analysis/relation.h b/src/perfetto_sql/analysis/relation.h index 6ec2b34c03..a65fd5072c 100644 --- a/src/perfetto_sql/analysis/relation.h +++ b/src/perfetto_sql/analysis/relation.h @@ -71,6 +71,11 @@ class Catalog { std::string_view name) const = 0; virtual std::optional FindViewSql( std::string_view name) const = 0; + // The relation a dialect-specific node, such as a pipeline subquery, + // produces, if the host knows it. + virtual std::optional FindNodeRelation(SqlNode) const { + return std::nullopt; + } }; struct ColumnOrigin { diff --git a/src/perfetto_sql/syntaqlite/perfetto.y b/src/perfetto_sql/syntaqlite/perfetto.y index beebdc440d..fc720888c1 100644 --- a/src/perfetto_sql/syntaqlite/perfetto.y +++ b/src/perfetto_sql/syntaqlite/perfetto.y @@ -200,6 +200,12 @@ perfetto_pipe_source(A) ::= LP select(S) RP as(Z). { A = synq_parse_perfetto_pipe_source(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, S, Z.name, Z.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); } +// A pipeline read by a pipeline is compiled into the same plan, so it is left +// as it is written rather than expanded into SQL. +perfetto_pipe_source(A) ::= LP perfetto_pipeline(P) RP as(Z). { + A = synq_parse_perfetto_pipe_source(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, + P, Z.name, Z.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); +} %type perfetto_tree_direction {int} perfetto_tree_direction(A) ::= UP. { A = SYNTAQLITE_PERFETTO_TREE_DIRECTION_UP; } @@ -424,6 +430,39 @@ perfetto_pipeline(A) ::= INTERVAL INTERSECTION OF LP cmd(A) ::= perfetto_pipeline(P). { A = P; } +// A pipeline in parentheses reads like any other subquery, in a FROM clause or +// as a CTE. Once parsed, it is handed to the engine, which replaces it with +// SQL reading it. +%type perfetto_subquery_pipeline {uint32_t} +perfetto_subquery_pipeline(A) ::= perfetto_pipeline(P). { + A = P; + synq_parser_expand_node(pCtx, P, "pipeline", 8); +} + +seltablist(A) ::= stl_prefix(A) LP perfetto_subquery_pipeline(P) RP as(Z) + on_using(N). { + pCtx->saw_subquery = 1; + uint32_t sub = synq_parse_subquery_table_source( + pCtx, P, Z.name, + Z.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); + if (A == SYNTAQLITE_NULL_NODE) { + synq_reject_dangling_on_using(pCtx, N); + A = sub; + } else { + SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, A); + A = synq_parse_join_clause(pCtx, + pfx->join_prefix.join_type, + pfx->join_prefix.modifiers, + pfx->join_prefix.source, + sub, N.on_expr, N.using_cols); + } +} +wqitem(A) ::= withnm(X) eidlist_opt(Y) wqas(M) LP perfetto_subquery_pipeline(P) + RP. { + A = synq_parse_cte_definition(pCtx, synq_span_dequote(pCtx, X), + (SyntaqliteMaterialized)M, Y, P); +} + // ---------- PERFETTO PRAGMA ---------- // A setting of the engine, rather than of SQLite. Any expression parses; diff --git a/src/perfetto_sql/syntaqlite/syntaqlite_perfetto.c b/src/perfetto_sql/syntaqlite/syntaqlite_perfetto.c index 1d6196d407..06fcd0c635 100644 --- a/src/perfetto_sql/syntaqlite/syntaqlite_perfetto.c +++ b/src/perfetto_sql/syntaqlite/syntaqlite_perfetto.c @@ -13400,29 +13400,29 @@ static inline SyntaqliteTextSpan synq_error_span(SynqParseCtx* pCtx) { #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int -#define YYNOCODE 379 +#define YYNOCODE 380 #define YYACTIONTYPE unsigned short int #define YYWILDCARD 92 #define SynqPerfettoParseTOKENTYPE SynqParseToken typedef union { int yyinit; SynqPerfettoParseTOKENTYPE yy0; - SynqDeferValue yy5; - SynqInsertCmdValue yy88; - SynqJoinOpValue yy132; - SynqTransOptValue yy180; - SynqUpsertValue yy212; - uint32_t yy215; - SynqWithValue yy343; - SynqOnUsingValue yy346; - SynqParenExprlistValue yy360; - SynqColumnNameValue yy386; - SynqConstraintGroups yy399; - SynqAliasValue yy531; - SyntaqliteTemporaryQualifier yy648; - int yy724; - SynqWhereRetValue yy735; - int yy759; + SynqAliasValue yy3; + SynqWhereRetValue yy15; + SynqWithValue yy25; + SynqInsertCmdValue yy98; + SynqColumnNameValue yy192; + SynqDeferValue yy203; + uint32_t yy341; + SynqConstraintGroups yy365; + SynqUpsertValue yy376; + SynqTransOptValue yy377; + SynqJoinOpValue yy508; + SyntaqliteTemporaryQualifier yy540; + SynqParenExprlistValue yy586; + int yy692; + SynqOnUsingValue yy696; + int yy761; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -13441,20 +13441,20 @@ typedef union { #define SynqPerfettoParseCTX_FETCH SynqParseCtx* pCtx=yypParser->pCtx; #define SynqPerfettoParseCTX_STORE yypParser->pCtx=pCtx; #define YYERRORSYMBOL 207 -#define YYERRSYMDT yy759 +#define YYERRSYMDT yy761 #define YYFALLBACK 1 -#define YYNSTATE 751 -#define YYNRULE 509 -#define YYNRULE_WITH_ACTION 509 +#define YYNSTATE 757 +#define YYNRULE 513 +#define YYNRULE_WITH_ACTION 513 #define YYNTOKEN 203 -#define YY_MAX_SHIFT 750 -#define YY_MIN_SHIFTREDUCE 1081 -#define YY_MAX_SHIFTREDUCE 1589 -#define YY_ERROR_ACTION 1590 -#define YY_ACCEPT_ACTION 1591 -#define YY_NO_ACTION 1592 -#define YY_MIN_REDUCE 1593 -#define YY_MAX_REDUCE 2101 +#define YY_MAX_SHIFT 756 +#define YY_MIN_SHIFTREDUCE 1091 +#define YY_MAX_SHIFTREDUCE 1603 +#define YY_ERROR_ACTION 1604 +#define YY_ACCEPT_ACTION 1605 +#define YY_NO_ACTION 1606 +#define YY_MIN_REDUCE 1607 +#define YY_MAX_REDUCE 2119 #define YY_MIN_DSTRCTR 0 #define YY_MAX_DSTRCTR 0 /************* End control #defines *******************************************/ @@ -13539,779 +13539,783 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (2665) +#define YY_ACTTAB_COUNT (2684) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 278, 655, 1675, 1283, 1658, 1293, 100, 102, 1661, 351, - /* 10 */ 1849, 686, 351, 1849, 356, 1294, 1794, 1924, 351, 1849, - /* 20 */ 494, 1658, 93, 94, 506, 50, 1656, 1127, 1127, 1124, - /* 30 */ 1109, 1118, 1118, 95, 95, 96, 96, 96, 96, 1970, - /* 40 */ 482, 401, 684, 1655, 269, 93, 94, 506, 50, 268, - /* 50 */ 1127, 1127, 1124, 1109, 1118, 1118, 95, 95, 96, 96, - /* 60 */ 96, 96, 1256, 647, 124, 567, 351, 1849, 485, 520, - /* 70 */ 96, 96, 96, 96, 99, 743, 72, 6, 397, 1226, - /* 80 */ 1831, 512, 664, 1985, 326, 278, 360, 274, 649, 1823, - /* 90 */ 110, 100, 102, 92, 92, 92, 92, 98, 98, 97, - /* 100 */ 97, 97, 91, 90, 548, 727, 725, 548, 727, 725, - /* 110 */ 1923, 618, 619, 1769, 727, 725, 92, 92, 92, 92, - /* 120 */ 98, 98, 97, 97, 97, 91, 90, 548, 92, 92, - /* 130 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 548, - /* 140 */ 1943, 71, 93, 94, 506, 50, 358, 1127, 1127, 1124, - /* 150 */ 1109, 1118, 1118, 95, 95, 96, 96, 96, 96, 640, - /* 160 */ 437, 435, 727, 725, 93, 94, 506, 50, 735, 1127, - /* 170 */ 1127, 1124, 1109, 1118, 1118, 95, 95, 96, 96, 96, - /* 180 */ 96, 1937, 383, 1256, 444, 125, 440, 2058, 2059, 520, - /* 190 */ 470, 2067, 1990, 55, 2063, 1482, 743, 1482, 92, 92, - /* 200 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 548, - /* 210 */ 2052, 519, 703, 92, 92, 92, 92, 98, 98, 97, - /* 220 */ 97, 97, 91, 90, 548, 98, 98, 97, 97, 97, - /* 230 */ 91, 90, 548, 1664, 1769, 92, 92, 92, 92, 98, - /* 240 */ 98, 97, 97, 97, 91, 90, 548, 93, 94, 506, - /* 250 */ 50, 446, 1127, 1127, 1124, 1109, 1118, 1118, 95, 95, - /* 260 */ 96, 96, 96, 96, 97, 97, 97, 91, 90, 548, - /* 270 */ 1280, 696, 93, 94, 506, 50, 395, 1127, 1127, 1124, - /* 280 */ 1109, 1118, 1118, 95, 95, 96, 96, 96, 96, 1280, - /* 290 */ 279, 705, 591, 1280, 279, 705, 1280, 93, 94, 506, - /* 300 */ 50, 1283, 1127, 1127, 1124, 1109, 1118, 1118, 95, 95, - /* 310 */ 96, 96, 96, 96, 1794, 351, 1849, 487, 92, 92, - /* 320 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 548, - /* 330 */ 2053, 1226, 2040, 587, 2082, 268, 2079, 1280, 1281, 1280, - /* 340 */ 1280, 376, 287, 92, 92, 92, 92, 98, 98, 97, - /* 350 */ 97, 97, 91, 90, 548, 391, 1280, 1281, 1280, 1879, - /* 360 */ 1280, 1281, 1280, 1280, 1281, 1280, 39, 56, 92, 92, - /* 370 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 548, - /* 380 */ 664, 591, 318, 1978, 676, 673, 672, 524, 621, 649, - /* 390 */ 93, 94, 506, 50, 671, 1127, 1127, 1124, 1109, 1118, - /* 400 */ 1118, 95, 95, 96, 96, 96, 96, 1280, 1281, 1280, - /* 410 */ 2081, 727, 725, 435, 633, 422, 1667, 291, 655, 271, - /* 420 */ 93, 94, 506, 50, 259, 1127, 1127, 1124, 1109, 1118, - /* 430 */ 1118, 95, 95, 96, 96, 96, 96, 1615, 351, 1849, - /* 440 */ 489, 2069, 589, 93, 94, 506, 50, 361, 1127, 1127, - /* 450 */ 1124, 1109, 1118, 1118, 95, 95, 96, 96, 96, 96, - /* 460 */ 1666, 92, 92, 92, 92, 98, 98, 97, 97, 97, - /* 470 */ 91, 90, 548, 2058, 2059, 1684, 1256, 1711, 125, 1709, - /* 480 */ 2062, 594, 268, 448, 351, 1849, 600, 38, 583, 743, - /* 490 */ 1280, 92, 92, 92, 92, 98, 98, 97, 97, 97, - /* 500 */ 91, 90, 548, 434, 351, 1849, 365, 351, 1849, 1955, - /* 510 */ 210, 1477, 2091, 677, 92, 92, 92, 92, 98, 98, - /* 520 */ 97, 97, 97, 91, 90, 548, 747, 1769, 1477, 1924, - /* 530 */ 2070, 1477, 727, 725, 727, 725, 1161, 93, 94, 506, - /* 540 */ 50, 285, 1127, 1127, 1124, 1109, 1118, 1118, 95, 95, - /* 550 */ 96, 96, 96, 96, 351, 1849, 1653, 1280, 1281, 1280, - /* 560 */ 93, 94, 506, 50, 707, 1127, 1127, 1124, 1109, 1118, - /* 570 */ 1118, 95, 95, 96, 96, 96, 96, 351, 1849, 736, - /* 580 */ 727, 725, 586, 93, 94, 506, 50, 655, 1127, 1127, - /* 590 */ 1124, 1109, 1118, 1118, 95, 95, 96, 96, 96, 96, - /* 600 */ 727, 725, 1280, 727, 725, 590, 297, 2045, 92, 92, - /* 610 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 548, - /* 620 */ 2058, 2059, 1923, 1921, 1919, 2041, 110, 2062, 595, 283, - /* 630 */ 1153, 92, 92, 92, 92, 98, 98, 97, 97, 97, - /* 640 */ 91, 90, 548, 1790, 351, 1849, 739, 2065, 284, 395, - /* 650 */ 727, 725, 1280, 199, 92, 92, 92, 92, 98, 98, - /* 660 */ 97, 97, 97, 91, 90, 548, 281, 735, 116, 1280, - /* 670 */ 1281, 1280, 367, 727, 725, 235, 1495, 93, 94, 506, - /* 680 */ 50, 383, 1127, 1127, 1124, 1109, 1118, 1118, 95, 95, - /* 690 */ 96, 96, 96, 96, 1280, 348, 1849, 1280, 696, 1720, - /* 700 */ 93, 94, 506, 50, 735, 1127, 1127, 1124, 1109, 1118, - /* 710 */ 1118, 95, 95, 96, 96, 96, 96, 1280, 383, 1280, - /* 720 */ 1281, 1280, 269, 93, 94, 506, 50, 325, 1127, 1127, - /* 730 */ 1124, 1109, 1118, 1118, 95, 95, 96, 96, 96, 96, - /* 740 */ 727, 725, 479, 2068, 1280, 120, 1718, 1280, 92, 92, - /* 750 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 548, - /* 760 */ 118, 1280, 1281, 1280, 1280, 1281, 1280, 236, 480, 2003, - /* 770 */ 1275, 92, 92, 92, 92, 98, 98, 97, 97, 97, - /* 780 */ 91, 90, 548, 491, 1280, 1281, 1280, 91, 90, 548, - /* 790 */ 525, 727, 725, 1258, 92, 92, 92, 92, 98, 98, - /* 800 */ 97, 97, 97, 91, 90, 548, 550, 549, 2047, 697, - /* 810 */ 1977, 1280, 1281, 1280, 1280, 1281, 1280, 1324, 346, 1417, - /* 820 */ 1417, 274, 1326, 53, 290, 1318, 1464, 93, 94, 506, - /* 830 */ 50, 81, 1127, 1127, 1124, 1109, 1118, 1118, 95, 95, - /* 840 */ 96, 96, 96, 96, 1280, 419, 14, 481, 1325, 1463, - /* 850 */ 93, 94, 506, 50, 475, 1127, 1127, 1124, 1109, 1118, - /* 860 */ 1118, 95, 95, 96, 96, 96, 96, 192, 14, 2066, - /* 870 */ 592, 1280, 1720, 93, 94, 506, 50, 1283, 1127, 1127, - /* 880 */ 1124, 1109, 1118, 1118, 95, 95, 96, 96, 96, 96, - /* 890 */ 1794, 1128, 1128, 1125, 1110, 534, 735, 1740, 92, 92, - /* 900 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 548, - /* 910 */ 383, 1280, 1281, 1280, 1720, 479, 1741, 5, 122, 1718, - /* 920 */ 1300, 92, 92, 92, 92, 98, 98, 97, 97, 97, - /* 930 */ 91, 90, 548, 347, 246, 1791, 278, 639, 1280, 1281, - /* 940 */ 1280, 186, 100, 102, 92, 92, 92, 92, 98, 98, - /* 950 */ 97, 97, 97, 91, 90, 548, 664, 479, 88, 656, - /* 960 */ 1256, 1719, 46, 1822, 738, 526, 1106, 1106, 254, 93, - /* 970 */ 94, 506, 50, 743, 1127, 1127, 1124, 1109, 1118, 1118, - /* 980 */ 95, 95, 96, 96, 96, 96, 414, 270, 416, 1119, - /* 990 */ 1097, 93, 101, 506, 50, 1374, 1127, 1127, 1124, 1109, - /* 1000 */ 1118, 1118, 95, 95, 96, 96, 96, 96, 94, 506, - /* 1010 */ 50, 1769, 1127, 1127, 1124, 1109, 1118, 1118, 95, 95, - /* 1020 */ 96, 96, 96, 96, 506, 50, 1185, 1127, 1127, 1124, - /* 1030 */ 1109, 1118, 1118, 95, 95, 96, 96, 96, 96, 1477, + /* 0 */ 15, 278, 1678, 1293, 1293, 1303, 278, 100, 102, 353, + /* 10 */ 1863, 672, 100, 102, 1689, 1304, 1808, 1808, 1672, 1672, + /* 20 */ 1675, 634, 93, 94, 509, 50, 524, 1137, 1137, 1134, + /* 30 */ 1119, 1128, 1128, 95, 95, 96, 96, 96, 96, 669, + /* 40 */ 1669, 1670, 268, 466, 1754, 93, 94, 509, 50, 1727, + /* 50 */ 1137, 1137, 1134, 1119, 1128, 1128, 95, 95, 96, 96, + /* 60 */ 96, 96, 275, 1755, 1266, 1804, 124, 1293, 1755, 396, + /* 70 */ 96, 96, 96, 96, 99, 682, 72, 749, 479, 359, + /* 80 */ 1808, 414, 649, 1859, 315, 1984, 485, 271, 246, 523, + /* 90 */ 606, 624, 1290, 92, 92, 92, 92, 98, 98, 97, + /* 100 */ 97, 97, 91, 90, 551, 733, 731, 98, 98, 97, + /* 110 */ 97, 97, 91, 90, 551, 1783, 92, 92, 92, 92, + /* 120 */ 98, 98, 97, 97, 97, 91, 90, 551, 92, 92, + /* 130 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 551, + /* 140 */ 2104, 71, 93, 94, 509, 50, 1858, 1137, 1137, 1134, + /* 150 */ 1119, 1128, 1128, 95, 95, 96, 96, 96, 96, 1290, + /* 160 */ 1291, 1290, 671, 1107, 93, 94, 509, 50, 1957, 1137, + /* 170 */ 1137, 1134, 1119, 1128, 1128, 95, 95, 96, 96, 96, + /* 180 */ 96, 2073, 2074, 1266, 551, 124, 683, 1991, 2077, 718, + /* 190 */ 483, 2017, 465, 55, 2004, 1492, 749, 1492, 92, 92, + /* 200 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 551, + /* 210 */ 2081, 716, 2095, 92, 92, 92, 92, 98, 98, 97, + /* 220 */ 97, 97, 91, 90, 551, 97, 97, 97, 91, 90, + /* 230 */ 551, 1107, 547, 715, 1783, 92, 92, 92, 92, 98, + /* 240 */ 98, 97, 97, 97, 91, 90, 551, 93, 94, 509, + /* 250 */ 50, 217, 1137, 1137, 1134, 1119, 1128, 1128, 95, 95, + /* 260 */ 96, 96, 96, 96, 1290, 1698, 40, 1725, 1290, 1723, + /* 270 */ 2109, 1290, 93, 94, 509, 50, 268, 1137, 1137, 1134, + /* 280 */ 1119, 1128, 1128, 95, 95, 96, 96, 96, 96, 1290, + /* 290 */ 91, 90, 551, 1290, 314, 93, 94, 509, 50, 570, + /* 300 */ 1137, 1137, 1134, 1119, 1128, 1128, 95, 95, 96, 96, + /* 310 */ 96, 96, 464, 2006, 1138, 1138, 1135, 1120, 92, 92, + /* 320 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 551, + /* 330 */ 474, 1290, 1291, 1290, 524, 1290, 1291, 1290, 1290, 1291, + /* 340 */ 1290, 16, 56, 92, 92, 92, 92, 98, 98, 97, + /* 350 */ 97, 97, 91, 90, 551, 689, 1290, 1291, 1290, 7, + /* 360 */ 1290, 1291, 1290, 268, 680, 1998, 92, 92, 92, 92, + /* 370 */ 98, 98, 97, 97, 97, 91, 90, 551, 625, 432, + /* 380 */ 1236, 7, 307, 2085, 661, 658, 657, 1999, 443, 250, + /* 390 */ 353, 1863, 495, 1734, 656, 93, 94, 509, 50, 259, + /* 400 */ 1137, 1137, 1134, 1119, 1128, 1128, 95, 95, 96, 96, + /* 410 */ 96, 96, 1129, 279, 691, 2073, 2074, 1384, 93, 94, + /* 420 */ 509, 50, 2078, 1137, 1137, 1134, 1119, 1128, 1128, 95, + /* 430 */ 95, 96, 96, 96, 96, 632, 482, 279, 691, 120, + /* 440 */ 1732, 93, 94, 509, 50, 1293, 1137, 1137, 1134, 1119, + /* 450 */ 1128, 1128, 95, 95, 96, 96, 96, 96, 1808, 353, + /* 460 */ 1863, 357, 430, 618, 417, 392, 92, 92, 92, 92, + /* 470 */ 98, 98, 97, 97, 97, 91, 90, 551, 1681, 353, + /* 480 */ 1863, 488, 353, 1863, 490, 219, 733, 731, 662, 92, + /* 490 */ 92, 92, 92, 98, 98, 97, 97, 97, 91, 90, + /* 500 */ 551, 352, 2073, 2074, 353, 1863, 492, 1806, 479, 2077, + /* 510 */ 719, 1171, 92, 92, 92, 92, 98, 98, 97, 97, + /* 520 */ 97, 91, 90, 551, 1860, 278, 1266, 703, 160, 1680, + /* 530 */ 673, 100, 102, 217, 1163, 93, 94, 509, 50, 749, + /* 540 */ 1137, 1137, 1134, 1119, 1128, 1128, 95, 95, 96, 96, + /* 550 */ 96, 96, 353, 1863, 366, 733, 731, 727, 93, 94, + /* 560 */ 509, 50, 467, 1137, 1137, 1134, 1119, 1128, 1128, 95, + /* 570 */ 95, 96, 96, 96, 96, 733, 731, 1783, 733, 731, + /* 580 */ 187, 93, 94, 509, 50, 1293, 1137, 1137, 1134, 1119, + /* 590 */ 1128, 1128, 95, 95, 96, 96, 96, 96, 1808, 1395, + /* 600 */ 733, 731, 1290, 1395, 705, 1908, 92, 92, 92, 92, + /* 610 */ 98, 98, 97, 97, 97, 91, 90, 551, 116, 353, + /* 620 */ 1863, 1969, 353, 1863, 1667, 353, 1863, 745, 199, 92, + /* 630 */ 92, 92, 92, 98, 98, 97, 97, 97, 91, 90, + /* 640 */ 551, 7, 2096, 644, 347, 1863, 692, 1998, 733, 731, + /* 650 */ 2094, 1505, 92, 92, 92, 92, 98, 98, 97, 97, + /* 660 */ 97, 91, 90, 551, 1840, 715, 278, 2060, 530, 1290, + /* 670 */ 1291, 1290, 100, 102, 1285, 93, 94, 509, 50, 636, + /* 680 */ 1137, 1137, 1134, 1119, 1128, 1128, 95, 95, 96, 96, + /* 690 */ 96, 96, 353, 1863, 742, 353, 1863, 729, 93, 94, + /* 700 */ 509, 50, 1528, 1137, 1137, 1134, 1119, 1128, 1128, 95, + /* 710 */ 95, 96, 96, 96, 96, 733, 731, 1734, 733, 731, + /* 720 */ 479, 733, 731, 93, 94, 509, 50, 1908, 1137, 1137, + /* 730 */ 1134, 1119, 1128, 1128, 95, 95, 96, 96, 96, 96, + /* 740 */ 733, 731, 1290, 502, 501, 1290, 92, 92, 92, 92, + /* 750 */ 98, 98, 97, 97, 97, 91, 90, 551, 118, 67, + /* 760 */ 482, 1528, 1951, 122, 1732, 1715, 1487, 1487, 1268, 92, + /* 770 */ 92, 92, 92, 98, 98, 97, 97, 97, 91, 90, + /* 780 */ 551, 753, 695, 1487, 1487, 1528, 1487, 1487, 733, 731, + /* 790 */ 531, 733, 731, 321, 92, 92, 92, 92, 98, 98, + /* 800 */ 97, 97, 97, 91, 90, 551, 1398, 1398, 646, 1290, + /* 810 */ 1291, 1290, 1290, 1291, 1290, 2084, 713, 1334, 110, 693, + /* 820 */ 694, 1938, 1336, 2104, 1290, 1734, 728, 93, 94, 509, + /* 830 */ 50, 81, 1137, 1137, 1134, 1119, 1128, 1128, 95, 95, + /* 840 */ 96, 96, 96, 96, 1290, 710, 1629, 275, 1335, 1600, + /* 850 */ 93, 94, 509, 50, 504, 1137, 1137, 1134, 1119, 1128, + /* 860 */ 1128, 95, 95, 96, 96, 96, 96, 1290, 482, 2117, + /* 870 */ 1290, 119, 1732, 93, 94, 509, 50, 1293, 1137, 1137, + /* 880 */ 1134, 1119, 1128, 1128, 95, 95, 96, 96, 96, 96, + /* 890 */ 1808, 1290, 1291, 1290, 1938, 457, 741, 228, 92, 92, + /* 900 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 551, + /* 910 */ 386, 1290, 1291, 1290, 1937, 603, 604, 229, 545, 741, + /* 920 */ 1310, 92, 92, 92, 92, 98, 98, 97, 97, 97, + /* 930 */ 91, 90, 551, 386, 1290, 1291, 1290, 1290, 1291, 1290, + /* 940 */ 5, 733, 731, 3, 92, 92, 92, 92, 98, 98, + /* 950 */ 97, 97, 97, 91, 90, 551, 649, 677, 88, 439, + /* 960 */ 1266, 435, 46, 1837, 744, 525, 1116, 1116, 254, 93, + /* 970 */ 94, 509, 50, 749, 1137, 1137, 1134, 1119, 1128, 1128, + /* 980 */ 95, 95, 96, 96, 96, 96, 1290, 1937, 1935, 1933, + /* 990 */ 1290, 93, 101, 509, 50, 2082, 1137, 1137, 1134, 1119, + /* 1000 */ 1128, 1128, 95, 95, 96, 96, 96, 96, 94, 509, + /* 1010 */ 50, 1783, 1137, 1137, 1134, 1119, 1128, 1128, 95, 95, + /* 1020 */ 96, 96, 96, 96, 509, 50, 441, 1137, 1137, 1134, + /* 1030 */ 1119, 1128, 1128, 95, 95, 96, 96, 96, 96, 1290, /* 1040 */ 92, 92, 92, 92, 98, 98, 97, 97, 97, 91, - /* 1050 */ 90, 548, 219, 417, 709, 1713, 1477, 1186, 1097, 1477, - /* 1060 */ 480, 2003, 92, 92, 92, 92, 98, 98, 97, 97, - /* 1070 */ 97, 91, 90, 548, 1741, 651, 415, 1283, 92, 92, - /* 1080 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 548, - /* 1090 */ 1794, 1701, 708, 92, 92, 92, 92, 98, 98, 97, - /* 1100 */ 97, 97, 91, 90, 548, 1593, 1256, 629, 124, 299, - /* 1110 */ 625, 403, 318, 339, 676, 673, 672, 525, 1749, 743, - /* 1120 */ 1459, 402, 744, 410, 671, 556, 299, 178, 403, 462, - /* 1130 */ 339, 1256, 1256, 160, 124, 721, 699, 1280, 402, 1283, - /* 1140 */ 410, 1461, 556, 1967, 743, 743, 1967, 465, 351, 1849, - /* 1150 */ 720, 1256, 1794, 167, 1280, 288, 1845, 1769, 1349, 300, - /* 1160 */ 6, 276, 407, 1348, 743, 694, 1984, 409, 181, 464, - /* 1170 */ 1372, 211, 250, 1256, 109, 46, 300, 691, 529, 407, - /* 1180 */ 1288, 177, 1769, 1769, 409, 181, 743, 461, 211, 497, - /* 1190 */ 510, 109, 226, 298, 550, 549, 349, 1849, 1285, 32, - /* 1200 */ 1284, 1286, 1769, 1413, 1280, 1281, 1280, 1417, 1417, 719, - /* 1210 */ 298, 616, 219, 393, 1894, 1286, 1372, 1084, 252, 1931, - /* 1220 */ 1932, 1280, 1281, 1280, 1769, 1591, 1, 1595, 750, 749, - /* 1230 */ 1599, 1415, 210, 588, 1084, 469, 1992, 649, 1414, 2048, - /* 1240 */ 31, 1286, 1287, 657, 727, 725, 351, 1849, 1847, 210, - /* 1250 */ 275, 649, 735, 638, 1256, 1283, 160, 1283, 687, 505, - /* 1260 */ 713, 623, 1990, 110, 410, 1477, 383, 743, 1794, 735, - /* 1270 */ 1794, 354, 372, 746, 188, 1445, 505, 531, 623, 635, - /* 1280 */ 1464, 410, 1477, 383, 742, 1477, 85, 1256, 354, 160, - /* 1290 */ 307, 718, 727, 725, 561, 364, 1702, 369, 1586, 559, - /* 1300 */ 743, 481, 554, 1460, 586, 1769, 1256, 502, 158, 366, - /* 1310 */ 1256, 561, 46, 525, 1156, 535, 559, 732, 2099, 743, - /* 1320 */ 6, 586, 76, 743, 1280, 706, 1984, 1459, 627, 477, - /* 1330 */ 717, 110, 719, 746, 1844, 475, 252, 1894, 1769, 2, - /* 1340 */ 527, 735, 727, 725, 562, 1283, 85, 1439, 1461, 1280, - /* 1350 */ 1968, 8, 1288, 1968, 715, 383, 474, 1769, 1794, 87, - /* 1360 */ 87, 1769, 554, 395, 1288, 719, 1952, 86, 251, 554, - /* 1370 */ 733, 554, 1284, 1286, 2006, 4, 543, 732, 2008, 593, - /* 1380 */ 714, 1156, 1285, 190, 1284, 1286, 740, 1286, 276, 1488, - /* 1390 */ 27, 1280, 1281, 1280, 344, 492, 711, 1372, 2088, 1286, - /* 1400 */ 532, 710, 688, 96, 96, 96, 96, 551, 1099, 735, - /* 1410 */ 1280, 17, 1288, 1286, 1287, 1289, 1280, 1281, 1280, 87, - /* 1420 */ 87, 539, 1488, 383, 252, 1286, 1287, 86, 6, 554, - /* 1430 */ 733, 554, 1284, 1286, 1982, 4, 617, 299, 1599, 403, - /* 1440 */ 1256, 339, 135, 1372, 501, 500, 740, 1286, 1373, 402, - /* 1450 */ 27, 410, 560, 743, 351, 1849, 1847, 351, 1849, 741, - /* 1460 */ 67, 92, 92, 92, 92, 98, 98, 97, 97, 97, - /* 1470 */ 91, 90, 548, 1286, 1287, 1289, 1603, 1280, 1281, 1280, - /* 1480 */ 372, 679, 188, 3, 68, 689, 278, 300, 1179, 1601, - /* 1490 */ 407, 1769, 100, 102, 1280, 409, 181, 2080, 307, 211, - /* 1500 */ 2048, 536, 109, 688, 1931, 1932, 1383, 1256, 89, 46, - /* 1510 */ 83, 746, 368, 6, 452, 1256, 518, 160, 722, 1983, - /* 1520 */ 743, 298, 460, 471, 85, 1256, 680, 160, 743, 553, - /* 1530 */ 324, 342, 682, 455, 681, 323, 6, 1180, 743, 1302, - /* 1540 */ 554, 451, 1981, 690, 1256, 571, 46, 745, 512, 243, - /* 1550 */ 727, 725, 562, 727, 725, 732, 573, 743, 1769, 1303, - /* 1560 */ 210, 1280, 1281, 1280, 68, 1256, 1769, 160, 1256, 6, - /* 1570 */ 46, 296, 574, 244, 711, 1980, 1769, 653, 743, 712, - /* 1580 */ 735, 743, 731, 1256, 35, 160, 689, 505, 42, 623, - /* 1590 */ 1288, 746, 410, 692, 383, 1769, 743, 87, 87, 354, - /* 1600 */ 1301, 480, 2003, 719, 85, 86, 2088, 554, 733, 554, - /* 1610 */ 1284, 1286, 1518, 4, 480, 2003, 1769, 566, 570, 1769, - /* 1620 */ 554, 537, 561, 690, 740, 1286, 1164, 559, 27, 640, - /* 1630 */ 437, 1256, 586, 160, 1769, 732, 1594, 750, 749, 1599, - /* 1640 */ 521, 581, 278, 547, 743, 1256, 1098, 46, 100, 102, - /* 1650 */ 716, 1286, 1287, 1289, 711, 351, 1849, 1847, 743, 710, - /* 1660 */ 654, 378, 1346, 746, 1388, 1388, 661, 1256, 1385, 160, - /* 1670 */ 1288, 1518, 1385, 321, 320, 319, 85, 87, 87, 472, - /* 1680 */ 743, 372, 1769, 188, 1894, 86, 1477, 554, 733, 554, - /* 1690 */ 1284, 1286, 554, 4, 1164, 1518, 1769, 579, 580, 307, - /* 1700 */ 746, 1894, 1280, 1477, 740, 1286, 1477, 732, 27, 545, - /* 1710 */ 359, 322, 659, 49, 1098, 1256, 272, 160, 1769, 194, - /* 1720 */ 1510, 1749, 1256, 1256, 46, 171, 1894, 552, 743, 554, - /* 1730 */ 1346, 1286, 1287, 1289, 387, 743, 743, 513, 220, 191, - /* 1740 */ 645, 1256, 1288, 48, 732, 546, 69, 533, 2, 87, - /* 1750 */ 87, 727, 725, 562, 698, 1525, 1526, 86, 1346, 554, - /* 1760 */ 733, 554, 1284, 1286, 660, 4, 1769, 2083, 1302, 1280, - /* 1770 */ 1281, 1280, 746, 1769, 1769, 107, 740, 1286, 729, 1288, - /* 1780 */ 27, 1720, 1256, 261, 140, 85, 87, 87, 1303, 540, - /* 1790 */ 511, 2039, 1769, 379, 86, 743, 554, 733, 554, 1284, - /* 1800 */ 1286, 554, 4, 1286, 1287, 1289, 628, 2088, 746, 272, - /* 1810 */ 1720, 1230, 577, 740, 1286, 728, 732, 27, 262, 668, - /* 1820 */ 2076, 85, 322, 76, 479, 1231, 1346, 119, 1718, 1301, - /* 1830 */ 1256, 10, 141, 1769, 294, 191, 293, 554, 631, 503, - /* 1840 */ 1286, 1287, 1289, 743, 1170, 632, 503, 642, 503, 2043, - /* 1850 */ 1283, 1288, 732, 479, 646, 503, 121, 1718, 87, 87, - /* 1860 */ 1341, 377, 503, 1794, 459, 1256, 86, 142, 554, 733, - /* 1870 */ 554, 1284, 1286, 1700, 4, 1256, 1191, 143, 743, 58, - /* 1880 */ 258, 1769, 1342, 458, 2064, 740, 1286, 1288, 743, 27, - /* 1890 */ 1256, 262, 47, 717, 87, 87, 1453, 78, 2044, 483, - /* 1900 */ 1688, 511, 86, 743, 554, 733, 554, 1284, 1286, 1293, - /* 1910 */ 4, 486, 1286, 1287, 1289, 1256, 1769, 126, 2051, 1294, - /* 1920 */ 1583, 740, 1286, 572, 596, 27, 1769, 2050, 743, 664, - /* 1930 */ 1256, 1256, 127, 144, 1511, 389, 1821, 605, 209, 451, - /* 1940 */ 1256, 1769, 145, 743, 743, 304, 2049, 306, 1286, 1287, - /* 1950 */ 1289, 1283, 1256, 743, 146, 1519, 1256, 1256, 147, 148, - /* 1960 */ 1256, 1256, 128, 129, 1794, 743, 1769, 1283, 355, 743, - /* 1970 */ 743, 2046, 1545, 743, 743, 227, 1256, 1256, 130, 131, - /* 1980 */ 1794, 1769, 1769, 1256, 1256, 149, 150, 576, 400, 743, - /* 1990 */ 743, 1769, 1256, 1256, 151, 152, 743, 743, 1543, 1687, - /* 2000 */ 1256, 295, 153, 1769, 105, 743, 743, 1769, 1769, 1283, - /* 2010 */ 1349, 1769, 1769, 743, 1519, 1348, 1256, 1507, 123, 1256, - /* 2020 */ 605, 132, 1794, 1256, 1256, 133, 45, 1769, 1769, 743, - /* 2030 */ 1846, 723, 743, 413, 1769, 1769, 743, 743, 1519, 1283, - /* 2040 */ 1256, 404, 134, 1769, 1769, 1256, 1826, 154, 1256, 350, - /* 2050 */ 165, 1769, 1794, 743, 427, 1792, 641, 76, 743, 1283, - /* 2060 */ 1256, 743, 166, 643, 432, 405, 1256, 1769, 155, 406, - /* 2070 */ 1769, 362, 1794, 743, 1769, 1769, 1256, 1177, 136, 743, - /* 2080 */ 1256, 433, 156, 104, 76, 1256, 1178, 137, 1825, 743, - /* 2090 */ 1841, 1769, 2101, 743, 1210, 1256, 1769, 162, 743, 1769, - /* 2100 */ 1256, 624, 204, 1256, 1217, 205, 1247, 1747, 743, 328, - /* 2110 */ 1256, 1769, 157, 743, 1418, 1418, 743, 1769, 622, 1746, - /* 2120 */ 1256, 1290, 138, 743, 1256, 648, 202, 1769, 328, 630, - /* 2130 */ 1256, 1769, 203, 743, 1296, 1297, 1769, 743, 664, 1256, - /* 2140 */ 1256, 173, 161, 743, 650, 1820, 1769, 328, 1416, 1416, - /* 2150 */ 1283, 1769, 743, 743, 1769, 1966, 1256, 1256, 163, 168, - /* 2160 */ 1256, 1769, 172, 1794, 1256, 1256, 196, 174, 425, 743, - /* 2170 */ 743, 1769, 1217, 743, 1256, 1769, 169, 743, 743, 636, - /* 2180 */ 669, 1769, 1256, 332, 164, 1283, 1256, 743, 170, 1290, - /* 2190 */ 1769, 1769, 1256, 1283, 159, 743, 428, 1283, 1794, 743, - /* 2200 */ 1256, 449, 139, 1912, 76, 743, 1794, 1769, 1769, 1377, - /* 2210 */ 1794, 1769, 328, 743, 1213, 1769, 1769, 332, 1449, 1448, - /* 2220 */ 1447, 78, 78, 78, 1095, 1769, 1910, 193, 200, 664, - /* 2230 */ 1877, 76, 439, 1769, 443, 445, 442, 1769, 748, 195, - /* 2240 */ 447, 1705, 1686, 1769, 1685, 454, 1663, 1657, 1891, 241, - /* 2250 */ 1893, 1769, 1997, 1627, 476, 730, 1614, 557, 2036, 2035, - /* 2260 */ 411, 201, 12, 665, 1824, 340, 516, 373, 264, 185, - /* 2270 */ 615, 9, 1817, 1735, 421, 374, 1857, 375, 357, 1852, - /* 2280 */ 424, 431, 1763, 674, 430, 363, 1762, 273, 1882, 495, - /* 2290 */ 436, 1684, 652, 1650, 1883, 1881, 457, 468, 1880, 247, - /* 2300 */ 1726, 734, 1727, 263, 1585, 514, 1512, 248, 515, 398, - /* 2310 */ 599, 517, 222, 582, 597, 490, 598, 331, 265, 338, - /* 2320 */ 2060, 613, 614, 390, 53, 1427, 1330, 301, 1318, 1936, - /* 2330 */ 1934, 523, 626, 604, 112, 260, 180, 608, 182, 113, - /* 2340 */ 620, 1944, 114, 1833, 54, 1736, 522, 1832, 111, 115, - /* 2350 */ 183, 2061, 392, 233, 34, 73, 57, 1734, 717, 420, - /* 2360 */ 216, 601, 230, 423, 399, 1733, 634, 667, 309, 69, - /* 2370 */ 637, 311, 1765, 1950, 493, 1764, 658, 40, 245, 644, - /* 2380 */ 1737, 438, 237, 314, 496, 1896, 63, 663, 441, 341, - /* 2390 */ 315, 1651, 316, 498, 683, 1708, 1707, 1706, 538, 1695, - /* 2400 */ 1678, 499, 65, 1170, 1677, 1672, 1671, 456, 1694, 13, - /* 2410 */ 329, 1851, 685, 1670, 1669, 463, 70, 1850, 253, 693, - /* 2420 */ 330, 466, 541, 11, 1803, 473, 467, 1625, 542, 82, - /* 2430 */ 380, 1988, 1804, 544, 382, 279, 478, 563, 381, 737, - /* 2440 */ 388, 1916, 394, 2093, 1987, 1917, 508, 509, 1915, 206, - /* 2450 */ 221, 1914, 207, 189, 370, 208, 266, 2002, 267, 1437, - /* 2460 */ 507, 51, 555, 336, 558, 52, 257, 280, 484, 564, - /* 2470 */ 565, 384, 1516, 36, 1517, 2092, 568, 569, 37, 255, - /* 2480 */ 2090, 1513, 385, 282, 1582, 575, 386, 352, 605, 578, - /* 2490 */ 286, 256, 488, 175, 584, 585, 224, 15, 353, 223, - /* 2500 */ 292, 289, 225, 295, 108, 179, 228, 1522, 249, 337, - /* 2510 */ 396, 609, 504, 611, 1505, 602, 603, 1504, 606, 607, - /* 2520 */ 1499, 610, 612, 1509, 1497, 408, 1435, 302, 1306, 412, - /* 2530 */ 1410, 1408, 308, 184, 229, 33, 418, 305, 231, 426, - /* 2540 */ 1342, 310, 303, 16, 212, 429, 232, 528, 530, 1396, - /* 2550 */ 59, 213, 234, 60, 61, 62, 1401, 312, 313, 1395, - /* 2560 */ 214, 215, 197, 41, 1386, 238, 328, 1392, 662, 187, - /* 2570 */ 117, 666, 239, 458, 670, 1442, 317, 675, 64, 1168, - /* 2580 */ 18, 678, 19, 450, 1181, 371, 217, 327, 66, 1380, - /* 2590 */ 1375, 453, 176, 343, 218, 345, 20, 240, 277, 78, - /* 2600 */ 1467, 106, 74, 695, 198, 242, 700, 701, 75, 702, - /* 2610 */ 704, 21, 22, 1493, 23, 1479, 1483, 1481, 7, 1487, - /* 2620 */ 76, 24, 1486, 1117, 1112, 1111, 79, 25, 1211, 77, - /* 2630 */ 26, 80, 1131, 724, 29, 30, 726, 1592, 333, 1299, - /* 2640 */ 84, 28, 1592, 43, 1205, 1086, 1793, 1108, 44, 1592, - /* 2650 */ 1592, 1592, 1105, 1592, 1592, 1592, 334, 1592, 1107, 1592, - /* 2660 */ 1096, 1092, 103, 335, 1085, + /* 1050 */ 90, 551, 1908, 1290, 1291, 1290, 1356, 1290, 1291, 1290, + /* 1060 */ 2067, 544, 92, 92, 92, 92, 98, 98, 97, 97, + /* 1070 */ 97, 91, 90, 551, 110, 640, 351, 1863, 92, 92, + /* 1080 */ 92, 92, 98, 98, 97, 97, 97, 91, 90, 551, + /* 1090 */ 685, 192, 53, 92, 92, 92, 92, 98, 98, 97, + /* 1100 */ 97, 97, 91, 90, 551, 1607, 1290, 1291, 1290, 288, + /* 1110 */ 538, 398, 1359, 337, 1383, 532, 325, 1358, 277, 1487, + /* 1120 */ 741, 397, 15, 405, 1356, 559, 288, 1166, 398, 10, + /* 1130 */ 337, 272, 219, 191, 386, 1266, 1487, 124, 397, 1487, + /* 1140 */ 405, 307, 559, 661, 658, 657, 470, 1290, 749, 1734, + /* 1150 */ 634, 634, 741, 656, 346, 613, 1266, 278, 46, 289, + /* 1160 */ 361, 528, 402, 100, 102, 1520, 386, 404, 178, 749, + /* 1170 */ 664, 209, 733, 731, 108, 110, 289, 1298, 748, 402, + /* 1180 */ 1608, 756, 755, 1613, 404, 178, 1783, 533, 209, 1293, + /* 1190 */ 535, 108, 482, 287, 1166, 1295, 1733, 1294, 1296, 353, + /* 1200 */ 1863, 1861, 1808, 447, 727, 1293, 1109, 1783, 362, 365, + /* 1210 */ 287, 455, 1296, 641, 1290, 1291, 1290, 1094, 1808, 313, + /* 1220 */ 340, 667, 450, 666, 312, 373, 1236, 185, 189, 1266, + /* 1230 */ 446, 160, 219, 707, 1094, 1356, 234, 110, 1296, 1297, + /* 1240 */ 612, 1293, 749, 296, 1716, 370, 353, 1863, 706, 219, + /* 1250 */ 524, 750, 741, 741, 1808, 503, 322, 580, 1290, 508, + /* 1260 */ 1189, 608, 2080, 699, 405, 2004, 386, 386, 649, 741, + /* 1270 */ 1290, 355, 1266, 752, 46, 1836, 508, 534, 608, 2097, + /* 1280 */ 1783, 405, 188, 386, 252, 749, 85, 1290, 355, 456, + /* 1290 */ 2062, 498, 2, 242, 564, 733, 731, 565, 665, 562, + /* 1300 */ 34, 1293, 557, 1356, 727, 251, 1455, 705, 430, 1190, + /* 1310 */ 620, 564, 191, 273, 1808, 741, 562, 738, 634, 343, + /* 1320 */ 252, 727, 1382, 1783, 1529, 1290, 1291, 1290, 276, 386, + /* 1330 */ 2103, 110, 1393, 752, 712, 324, 682, 1290, 1291, 1290, + /* 1340 */ 1474, 33, 733, 731, 553, 552, 85, 330, 1945, 1946, + /* 1350 */ 714, 9, 1298, 1423, 1290, 1291, 1290, 1427, 1427, 87, + /* 1360 */ 87, 484, 557, 1473, 1298, 1908, 1293, 86, 1382, 557, + /* 1370 */ 739, 557, 1294, 1296, 378, 4, 367, 738, 1449, 1808, + /* 1380 */ 1839, 1425, 1295, 1529, 1294, 1296, 746, 1296, 1424, 1266, + /* 1390 */ 29, 46, 1893, 536, 369, 674, 697, 1966, 602, 1296, + /* 1400 */ 1613, 696, 749, 96, 96, 96, 96, 1529, 1266, 741, + /* 1410 */ 135, 1734, 1298, 1296, 1297, 1299, 353, 1863, 1861, 87, + /* 1420 */ 87, 749, 2063, 386, 489, 1296, 1297, 86, 645, 557, + /* 1430 */ 739, 557, 1294, 1296, 724, 4, 554, 288, 513, 398, + /* 1440 */ 1783, 337, 373, 1908, 185, 649, 746, 1296, 1992, 397, + /* 1450 */ 29, 405, 1835, 356, 482, 625, 432, 121, 1732, 1783, + /* 1460 */ 296, 92, 92, 92, 92, 98, 98, 97, 97, 97, + /* 1470 */ 91, 90, 551, 1296, 1297, 1299, 640, 68, 675, 1266, + /* 1480 */ 1266, 160, 46, 704, 1266, 236, 160, 289, 556, 2083, + /* 1490 */ 402, 642, 749, 749, 1293, 404, 178, 749, 7, 209, + /* 1500 */ 579, 623, 108, 1266, 1996, 160, 539, 1808, 469, 553, + /* 1510 */ 552, 752, 733, 731, 565, 1266, 749, 46, 408, 545, + /* 1520 */ 237, 287, 1427, 1427, 85, 1266, 7, 134, 749, 1487, + /* 1530 */ 1783, 1783, 1997, 1945, 1946, 1783, 676, 1266, 749, 160, + /* 1540 */ 557, 1805, 353, 1863, 747, 2020, 1487, 2103, 1474, 1487, + /* 1550 */ 749, 1266, 640, 46, 1783, 738, 702, 705, 2055, 711, + /* 1560 */ 219, 429, 705, 717, 749, 1266, 1783, 135, 273, 484, + /* 1570 */ 1266, 1470, 160, 607, 697, 2063, 1783, 1382, 749, 698, + /* 1580 */ 741, 678, 653, 749, 1702, 311, 76, 508, 1783, 608, + /* 1590 */ 1298, 752, 405, 1266, 386, 160, 460, 87, 87, 355, + /* 1600 */ 674, 1617, 1783, 708, 85, 86, 749, 557, 739, 557, + /* 1610 */ 1294, 1296, 1328, 4, 470, 380, 1783, 1266, 459, 158, + /* 1620 */ 557, 1783, 564, 1382, 746, 1296, 601, 562, 29, 1266, + /* 1630 */ 749, 46, 727, 345, 555, 738, 271, 368, 733, 731, + /* 1640 */ 480, 1615, 749, 1266, 1783, 160, 285, 1266, 548, 160, + /* 1650 */ 1290, 1296, 1297, 1299, 697, 542, 749, 1845, 515, 696, + /* 1660 */ 749, 2068, 638, 752, 514, 269, 483, 2017, 1783, 1293, + /* 1670 */ 1298, 549, 563, 1266, 262, 167, 85, 87, 87, 1312, + /* 1680 */ 1783, 1714, 1808, 675, 1201, 86, 749, 557, 739, 557, + /* 1690 */ 1294, 1296, 557, 4, 1783, 310, 309, 308, 1783, 1313, + /* 1700 */ 752, 1290, 446, 614, 746, 1296, 7, 738, 29, 476, + /* 1710 */ 1293, 286, 1995, 49, 1763, 2056, 546, 1290, 1291, 1290, + /* 1720 */ 1701, 550, 1240, 1808, 1783, 381, 483, 2017, 183, 557, + /* 1730 */ 1293, 1296, 1297, 1299, 283, 360, 1241, 1303, 701, 1266, + /* 1740 */ 1311, 171, 1298, 1808, 738, 639, 1763, 1304, 649, 87, + /* 1750 */ 87, 1108, 749, 284, 574, 1834, 409, 86, 411, 557, + /* 1760 */ 739, 557, 1294, 1296, 700, 4, 483, 2017, 1290, 1291, + /* 1770 */ 1290, 281, 752, 1498, 107, 1293, 746, 1296, 735, 1298, + /* 1780 */ 29, 293, 1266, 295, 48, 85, 87, 87, 1808, 1838, + /* 1790 */ 1783, 1195, 1312, 2022, 86, 684, 557, 739, 557, 1294, + /* 1800 */ 1296, 557, 4, 1296, 1297, 1299, 1498, 630, 752, 1831, + /* 1810 */ 751, 515, 1313, 746, 1296, 734, 738, 29, 76, 1108, + /* 1820 */ 105, 85, 1196, 412, 194, 493, 1605, 1, 1609, 756, + /* 1830 */ 755, 1613, 1266, 1783, 140, 737, 576, 557, 7, 1180, + /* 1840 */ 1296, 1297, 1299, 1700, 1994, 749, 410, 353, 1863, 1861, + /* 1850 */ 261, 1298, 738, 1311, 252, 569, 573, 37, 87, 87, + /* 1860 */ 1351, 43, 582, 583, 516, 220, 86, 577, 557, 739, + /* 1870 */ 557, 1294, 1296, 373, 4, 185, 616, 506, 703, 1266, + /* 1880 */ 610, 141, 78, 1783, 454, 746, 1296, 1298, 1266, 29, + /* 1890 */ 142, 296, 749, 311, 87, 87, 617, 506, 89, 104, + /* 1900 */ 83, 749, 86, 453, 557, 739, 557, 1294, 1296, 68, + /* 1910 */ 4, 269, 1296, 1297, 1299, 1266, 1266, 143, 47, 627, + /* 1920 */ 506, 746, 1296, 631, 506, 29, 1536, 1537, 749, 749, + /* 1930 */ 1783, 379, 506, 1266, 1891, 125, 58, 258, 1293, 1783, + /* 1940 */ 2, 69, 526, 733, 731, 565, 749, 1352, 1296, 1297, + /* 1950 */ 1299, 1808, 1266, 328, 126, 327, 262, 1266, 1266, 144, + /* 1960 */ 145, 1266, 584, 146, 1359, 749, 1783, 1783, 676, 1358, + /* 1970 */ 749, 749, 514, 1266, 749, 147, 390, 1266, 2103, 148, + /* 1980 */ 1266, 626, 127, 395, 1783, 1266, 749, 128, 1463, 427, + /* 1990 */ 749, 486, 1266, 749, 129, 399, 1597, 1521, 749, 575, + /* 2000 */ 590, 1174, 1266, 1783, 130, 749, 1293, 1517, 1783, 1783, + /* 2010 */ 590, 1187, 1783, 18, 628, 749, 1266, 1871, 149, 1808, + /* 2020 */ 1188, 1266, 363, 150, 1783, 1266, 709, 151, 1783, 749, + /* 2030 */ 422, 1783, 400, 76, 749, 1266, 1783, 152, 749, 1266, + /* 2040 */ 401, 153, 1266, 1783, 123, 1266, 1855, 131, 749, 1266, + /* 2050 */ 2119, 132, 749, 1783, 609, 749, 406, 1266, 749, 45, + /* 2060 */ 428, 1257, 749, 76, 317, 1761, 1266, 1783, 133, 1174, + /* 2070 */ 749, 1760, 1783, 1306, 1307, 615, 1783, 1980, 1266, 749, + /* 2080 */ 154, 1266, 1266, 165, 166, 649, 1783, 754, 195, 1220, + /* 2090 */ 1783, 749, 437, 1783, 749, 749, 1783, 1266, 420, 155, + /* 2100 */ 1783, 2011, 1266, 1266, 136, 156, 736, 621, 1783, 1266, + /* 2110 */ 749, 137, 1266, 1227, 162, 749, 749, 1783, 1266, 423, + /* 2120 */ 204, 1266, 749, 205, 1266, 749, 157, 1387, 1926, 1783, + /* 2130 */ 317, 749, 1783, 1783, 749, 650, 1266, 749, 138, 633, + /* 2140 */ 1924, 635, 317, 1266, 317, 202, 1300, 654, 1783, 749, + /* 2150 */ 320, 434, 444, 1783, 1783, 76, 749, 1266, 1223, 203, + /* 2160 */ 1783, 320, 438, 1783, 440, 1266, 1266, 173, 161, 1783, + /* 2170 */ 749, 1266, 1783, 163, 1556, 1783, 442, 243, 749, 749, + /* 2180 */ 1719, 1227, 1699, 1266, 749, 168, 1266, 1783, 172, 449, + /* 2190 */ 1266, 1677, 196, 1266, 1783, 174, 749, 1671, 1266, 749, + /* 2200 */ 169, 1905, 1266, 749, 164, 1907, 749, 471, 1783, 1469, + /* 2210 */ 1266, 749, 170, 2054, 1300, 749, 1783, 1783, 1554, 1428, + /* 2220 */ 1428, 329, 1783, 749, 1469, 2091, 1266, 2058, 159, 1266, + /* 2230 */ 1471, 139, 1981, 478, 1783, 1981, 218, 1783, 2079, 749, + /* 2240 */ 1459, 1783, 749, 78, 1783, 1471, 338, 1982, 1458, 1783, + /* 2250 */ 1982, 78, 1457, 1783, 2059, 78, 1426, 1426, 2066, 1105, + /* 2260 */ 200, 1783, 193, 76, 720, 2065, 2064, 2061, 2098, 1641, + /* 2270 */ 1628, 560, 264, 374, 201, 375, 13, 1783, 519, 376, + /* 2280 */ 1783, 600, 1749, 377, 1866, 2051, 416, 2050, 182, 2049, + /* 2290 */ 358, 659, 419, 425, 426, 431, 1777, 364, 1776, 270, + /* 2300 */ 496, 1698, 740, 12, 2105, 1664, 1896, 463, 637, 247, + /* 2310 */ 263, 452, 248, 1599, 1740, 1897, 517, 1895, 1522, 1741, + /* 2320 */ 393, 1894, 518, 598, 599, 53, 1437, 332, 1950, 1340, + /* 2330 */ 1948, 522, 290, 177, 1328, 611, 260, 226, 73, 703, + /* 2340 */ 214, 520, 1750, 585, 586, 223, 1748, 179, 605, 589, + /* 2350 */ 112, 1847, 54, 57, 1958, 111, 180, 1846, 36, 113, + /* 2360 */ 114, 415, 115, 1747, 418, 619, 652, 298, 69, 300, + /* 2370 */ 593, 1964, 622, 521, 494, 1779, 394, 629, 1778, 41, + /* 2380 */ 1751, 497, 230, 238, 643, 433, 63, 648, 303, 1910, + /* 2390 */ 339, 1665, 304, 436, 305, 499, 668, 1722, 1721, 1720, + /* 2400 */ 537, 65, 1709, 500, 1686, 1685, 1692, 1691, 1180, 451, + /* 2410 */ 14, 318, 1708, 1684, 70, 458, 670, 1683, 1865, 253, + /* 2420 */ 679, 319, 461, 2002, 1864, 2001, 540, 11, 1639, 468, + /* 2430 */ 541, 723, 462, 721, 382, 267, 245, 1817, 1818, 722, + /* 2440 */ 473, 383, 2075, 385, 2076, 475, 350, 543, 82, 743, + /* 2450 */ 481, 1930, 279, 2016, 511, 512, 206, 1931, 1929, 505, + /* 2460 */ 221, 1928, 566, 2111, 207, 186, 371, 38, 472, 265, + /* 2470 */ 266, 2110, 39, 208, 51, 2108, 1447, 510, 558, 336, + /* 2480 */ 561, 52, 257, 280, 387, 487, 567, 568, 1526, 1527, + /* 2490 */ 571, 572, 255, 477, 1523, 388, 282, 1596, 389, 578, + /* 2500 */ 354, 581, 590, 391, 256, 491, 249, 594, 596, 1519, + /* 2510 */ 507, 1515, 587, 588, 1514, 591, 592, 1509, 595, 597, + /* 2520 */ 1507, 1445, 1420, 1418, 407, 403, 291, 181, 1316, 292, + /* 2530 */ 35, 294, 224, 1352, 413, 421, 297, 17, 299, 225, + /* 2540 */ 527, 529, 1406, 59, 210, 60, 222, 61, 62, 1411, + /* 2550 */ 301, 1405, 302, 197, 211, 42, 212, 1396, 317, 231, + /* 2560 */ 213, 1402, 227, 647, 117, 424, 651, 1452, 232, 453, + /* 2570 */ 184, 655, 306, 64, 19, 660, 1178, 663, 20, 445, + /* 2580 */ 1191, 372, 215, 448, 66, 1390, 316, 175, 216, 341, + /* 2590 */ 342, 344, 233, 21, 681, 1385, 1477, 106, 78, 74, + /* 2600 */ 235, 198, 274, 686, 687, 22, 688, 75, 690, 1503, + /* 2610 */ 23, 24, 1489, 1493, 1491, 8, 1497, 76, 25, 1496, + /* 2620 */ 77, 1127, 26, 1122, 1532, 1121, 725, 1221, 240, 326, + /* 2630 */ 1590, 384, 1141, 348, 239, 31, 323, 241, 190, 329, + /* 2640 */ 109, 244, 349, 32, 331, 176, 726, 27, 1606, 730, + /* 2650 */ 79, 28, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, + /* 2660 */ 80, 732, 84, 1309, 333, 30, 1807, 1606, 6, 1215, + /* 2670 */ 1115, 44, 1118, 1606, 1117, 1606, 1096, 1106, 1102, 334, + /* 2680 */ 335, 103, 1606, 1095, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 222, 220, 238, 207, 220, 5, 228, 229, 244, 224, - /* 10 */ 225, 226, 224, 225, 226, 15, 220, 220, 224, 225, - /* 20 */ 226, 220, 22, 23, 24, 25, 242, 27, 28, 29, - /* 30 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 325, - /* 40 */ 326, 220, 241, 242, 220, 22, 23, 24, 25, 220, + /* 0 */ 219, 222, 258, 207, 207, 5, 222, 228, 229, 224, + /* 10 */ 225, 226, 228, 229, 238, 15, 220, 220, 220, 220, + /* 20 */ 244, 220, 22, 23, 24, 25, 220, 27, 28, 29, + /* 30 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 241, + /* 40 */ 242, 242, 220, 259, 262, 22, 23, 24, 25, 262, /* 50 */ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - /* 60 */ 37, 38, 207, 269, 209, 40, 224, 225, 226, 220, - /* 70 */ 35, 36, 37, 38, 39, 220, 53, 328, 40, 58, - /* 80 */ 214, 215, 286, 334, 299, 222, 305, 302, 220, 293, - /* 90 */ 69, 228, 229, 93, 94, 95, 96, 97, 98, 99, - /* 100 */ 100, 101, 102, 103, 104, 320, 321, 104, 320, 321, - /* 110 */ 313, 314, 315, 258, 320, 321, 93, 94, 95, 96, + /* 60 */ 37, 38, 220, 281, 207, 213, 209, 207, 281, 220, + /* 70 */ 35, 36, 37, 38, 39, 220, 53, 220, 220, 278, + /* 80 */ 220, 275, 286, 286, 299, 325, 326, 302, 307, 293, + /* 90 */ 294, 310, 40, 93, 94, 95, 96, 97, 98, 99, + /* 100 */ 100, 101, 102, 103, 104, 320, 321, 97, 98, 99, + /* 110 */ 100, 101, 102, 103, 104, 258, 93, 94, 95, 96, /* 120 */ 97, 98, 99, 100, 101, 102, 103, 104, 93, 94, /* 130 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - /* 140 */ 319, 118, 22, 23, 24, 25, 278, 27, 28, 29, - /* 150 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 141, - /* 160 */ 142, 140, 320, 321, 22, 23, 24, 25, 147, 27, + /* 140 */ 355, 118, 22, 23, 24, 25, 286, 27, 28, 29, + /* 150 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 107, + /* 160 */ 108, 109, 377, 40, 22, 23, 24, 25, 319, 27, /* 170 */ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - /* 180 */ 38, 318, 161, 207, 65, 209, 67, 358, 359, 220, - /* 190 */ 335, 367, 337, 51, 365, 75, 220, 77, 93, 94, + /* 180 */ 38, 359, 360, 207, 104, 209, 331, 332, 366, 367, + /* 190 */ 338, 339, 335, 51, 337, 75, 220, 77, 93, 94, /* 200 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - /* 210 */ 361, 362, 86, 93, 94, 95, 96, 97, 98, 99, - /* 220 */ 100, 101, 102, 103, 104, 97, 98, 99, 100, 101, - /* 230 */ 102, 103, 104, 258, 258, 93, 94, 95, 96, 97, + /* 210 */ 368, 369, 354, 93, 94, 95, 96, 97, 98, 99, + /* 220 */ 100, 101, 102, 103, 104, 99, 100, 101, 102, 103, + /* 230 */ 104, 108, 374, 220, 258, 93, 94, 95, 96, 97, /* 240 */ 98, 99, 100, 101, 102, 103, 104, 22, 23, 24, - /* 250 */ 25, 132, 27, 28, 29, 30, 31, 32, 33, 34, - /* 260 */ 35, 36, 37, 38, 99, 100, 101, 102, 103, 104, - /* 270 */ 40, 220, 22, 23, 24, 25, 220, 27, 28, 29, + /* 250 */ 25, 220, 27, 28, 29, 30, 31, 32, 33, 34, + /* 260 */ 35, 36, 37, 38, 40, 236, 351, 238, 40, 240, + /* 270 */ 355, 40, 22, 23, 24, 25, 220, 27, 28, 29, /* 280 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, - /* 290 */ 168, 169, 220, 40, 168, 169, 40, 22, 23, 24, - /* 300 */ 25, 207, 27, 28, 29, 30, 31, 32, 33, 34, - /* 310 */ 35, 36, 37, 38, 220, 224, 225, 226, 93, 94, + /* 290 */ 102, 103, 104, 40, 70, 22, 23, 24, 25, 40, + /* 300 */ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + /* 310 */ 37, 38, 336, 337, 27, 28, 29, 30, 93, 94, /* 320 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - /* 330 */ 361, 58, 356, 357, 220, 220, 371, 107, 108, 109, - /* 340 */ 40, 282, 117, 93, 94, 95, 96, 97, 98, 99, - /* 350 */ 100, 101, 102, 103, 104, 99, 107, 108, 109, 300, - /* 360 */ 107, 108, 109, 107, 108, 109, 113, 117, 93, 94, - /* 370 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - /* 380 */ 286, 220, 133, 332, 135, 136, 137, 293, 294, 220, - /* 390 */ 22, 23, 24, 25, 145, 27, 28, 29, 30, 31, - /* 400 */ 32, 33, 34, 35, 36, 37, 38, 107, 108, 109, - /* 410 */ 354, 320, 321, 140, 141, 142, 258, 117, 220, 119, - /* 420 */ 22, 23, 24, 25, 149, 27, 28, 29, 30, 31, - /* 430 */ 32, 33, 34, 35, 36, 37, 38, 225, 224, 225, - /* 440 */ 226, 369, 370, 22, 23, 24, 25, 278, 27, 28, - /* 450 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - /* 460 */ 258, 93, 94, 95, 96, 97, 98, 99, 100, 101, - /* 470 */ 102, 103, 104, 358, 359, 236, 207, 238, 209, 240, - /* 480 */ 365, 366, 220, 115, 224, 225, 226, 351, 374, 220, - /* 490 */ 40, 93, 94, 95, 96, 97, 98, 99, 100, 101, - /* 500 */ 102, 103, 104, 305, 224, 225, 226, 224, 225, 226, - /* 510 */ 127, 61, 376, 115, 93, 94, 95, 96, 97, 98, - /* 520 */ 99, 100, 101, 102, 103, 104, 76, 258, 78, 220, - /* 530 */ 369, 81, 320, 321, 320, 321, 115, 22, 23, 24, - /* 540 */ 25, 67, 27, 28, 29, 30, 31, 32, 33, 34, - /* 550 */ 35, 36, 37, 38, 224, 225, 226, 107, 108, 109, - /* 560 */ 22, 23, 24, 25, 114, 27, 28, 29, 30, 31, - /* 570 */ 32, 33, 34, 35, 36, 37, 38, 224, 225, 226, - /* 580 */ 320, 321, 199, 22, 23, 24, 25, 220, 27, 28, - /* 590 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - /* 600 */ 320, 321, 40, 320, 321, 220, 132, 220, 93, 94, - /* 610 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - /* 620 */ 358, 359, 313, 314, 315, 356, 69, 365, 366, 155, - /* 630 */ 115, 93, 94, 95, 96, 97, 98, 99, 100, 101, - /* 640 */ 102, 103, 104, 213, 224, 225, 226, 220, 174, 220, - /* 650 */ 320, 321, 40, 115, 93, 94, 95, 96, 97, 98, - /* 660 */ 99, 100, 101, 102, 103, 104, 192, 147, 56, 107, - /* 670 */ 108, 109, 305, 320, 321, 113, 115, 22, 23, 24, - /* 680 */ 25, 161, 27, 28, 29, 30, 31, 32, 33, 34, - /* 690 */ 35, 36, 37, 38, 40, 224, 225, 40, 220, 220, - /* 700 */ 22, 23, 24, 25, 147, 27, 28, 29, 30, 31, - /* 710 */ 32, 33, 34, 35, 36, 37, 38, 40, 161, 107, - /* 720 */ 108, 109, 220, 22, 23, 24, 25, 70, 27, 28, + /* 330 */ 99, 107, 108, 109, 220, 107, 108, 109, 107, 108, + /* 340 */ 109, 113, 117, 93, 94, 95, 96, 97, 98, 99, + /* 350 */ 100, 101, 102, 103, 104, 86, 107, 108, 109, 328, + /* 360 */ 107, 108, 109, 220, 333, 334, 93, 94, 95, 96, + /* 370 */ 97, 98, 99, 100, 101, 102, 103, 104, 141, 142, + /* 380 */ 58, 328, 133, 370, 135, 136, 137, 334, 115, 275, + /* 390 */ 224, 225, 226, 220, 145, 22, 23, 24, 25, 149, + /* 400 */ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + /* 410 */ 37, 38, 125, 168, 169, 359, 360, 164, 22, 23, + /* 420 */ 24, 25, 366, 27, 28, 29, 30, 31, 32, 33, + /* 430 */ 34, 35, 36, 37, 38, 269, 263, 168, 169, 266, + /* 440 */ 267, 22, 23, 24, 25, 207, 27, 28, 29, 30, + /* 450 */ 31, 32, 33, 34, 35, 36, 37, 38, 220, 224, + /* 460 */ 225, 226, 140, 141, 142, 40, 93, 94, 95, 96, + /* 470 */ 97, 98, 99, 100, 101, 102, 103, 104, 258, 224, + /* 480 */ 225, 226, 224, 225, 226, 127, 320, 321, 115, 93, + /* 490 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + /* 500 */ 104, 113, 359, 360, 224, 225, 226, 119, 220, 366, + /* 510 */ 367, 115, 93, 94, 95, 96, 97, 98, 99, 100, + /* 520 */ 101, 102, 103, 104, 286, 222, 207, 114, 209, 258, + /* 530 */ 211, 228, 229, 220, 115, 22, 23, 24, 25, 220, + /* 540 */ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + /* 550 */ 37, 38, 224, 225, 226, 320, 321, 199, 22, 23, + /* 560 */ 24, 25, 259, 27, 28, 29, 30, 31, 32, 33, + /* 570 */ 34, 35, 36, 37, 38, 320, 321, 258, 320, 321, + /* 580 */ 167, 22, 23, 24, 25, 207, 27, 28, 29, 30, + /* 590 */ 31, 32, 33, 34, 35, 36, 37, 38, 220, 3, + /* 600 */ 320, 321, 40, 7, 285, 220, 93, 94, 95, 96, + /* 610 */ 97, 98, 99, 100, 101, 102, 103, 104, 56, 224, + /* 620 */ 225, 226, 224, 225, 226, 224, 225, 226, 115, 93, + /* 630 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + /* 640 */ 104, 328, 354, 47, 224, 225, 333, 334, 320, 321, + /* 650 */ 372, 115, 93, 94, 95, 96, 97, 98, 99, 100, + /* 660 */ 101, 102, 103, 104, 286, 220, 222, 220, 283, 107, + /* 670 */ 108, 109, 228, 229, 115, 22, 23, 24, 25, 220, + /* 680 */ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + /* 690 */ 37, 38, 224, 225, 226, 224, 225, 226, 22, 23, + /* 700 */ 24, 25, 40, 27, 28, 29, 30, 31, 32, 33, + /* 710 */ 34, 35, 36, 37, 38, 320, 321, 220, 320, 321, + /* 720 */ 220, 320, 321, 22, 23, 24, 25, 220, 27, 28, /* 730 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - /* 740 */ 320, 321, 263, 358, 40, 266, 267, 40, 93, 94, - /* 750 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - /* 760 */ 56, 107, 108, 109, 107, 108, 109, 113, 338, 339, - /* 770 */ 115, 93, 94, 95, 96, 97, 98, 99, 100, 101, - /* 780 */ 102, 103, 104, 354, 107, 108, 109, 102, 103, 104, - /* 790 */ 220, 320, 321, 115, 93, 94, 95, 96, 97, 98, - /* 800 */ 99, 100, 101, 102, 103, 104, 97, 98, 220, 331, - /* 810 */ 332, 107, 108, 109, 107, 108, 109, 14, 299, 110, - /* 820 */ 111, 302, 19, 146, 117, 41, 92, 22, 23, 24, + /* 740 */ 320, 321, 40, 97, 98, 40, 93, 94, 95, 96, + /* 750 */ 97, 98, 99, 100, 101, 102, 103, 104, 56, 113, + /* 760 */ 263, 99, 318, 266, 267, 246, 61, 61, 115, 93, + /* 770 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + /* 780 */ 104, 76, 76, 78, 78, 123, 81, 81, 320, 321, + /* 790 */ 283, 320, 321, 117, 93, 94, 95, 96, 97, 98, + /* 800 */ 99, 100, 101, 102, 103, 104, 140, 141, 142, 107, + /* 810 */ 108, 109, 107, 108, 109, 370, 371, 14, 69, 114, + /* 820 */ 114, 220, 19, 355, 40, 220, 355, 22, 23, 24, /* 830 */ 25, 130, 27, 28, 29, 30, 31, 32, 33, 34, - /* 840 */ 35, 36, 37, 38, 40, 275, 219, 113, 45, 115, - /* 850 */ 22, 23, 24, 25, 220, 27, 28, 29, 30, 31, - /* 860 */ 32, 33, 34, 35, 36, 37, 38, 118, 219, 367, - /* 870 */ 368, 40, 220, 22, 23, 24, 25, 207, 27, 28, + /* 840 */ 35, 36, 37, 38, 40, 377, 225, 220, 45, 92, + /* 850 */ 22, 23, 24, 25, 354, 27, 28, 29, 30, 31, + /* 860 */ 32, 33, 34, 35, 36, 37, 38, 40, 263, 112, + /* 870 */ 40, 266, 267, 22, 23, 24, 25, 207, 27, 28, /* 880 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - /* 890 */ 220, 27, 28, 29, 30, 261, 147, 262, 93, 94, + /* 890 */ 220, 107, 108, 109, 220, 220, 147, 113, 93, 94, /* 900 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - /* 910 */ 161, 107, 108, 109, 220, 263, 281, 113, 266, 267, + /* 910 */ 161, 107, 108, 109, 313, 314, 315, 113, 220, 147, /* 920 */ 115, 93, 94, 95, 96, 97, 98, 99, 100, 101, - /* 930 */ 102, 103, 104, 219, 307, 213, 222, 310, 107, 108, - /* 940 */ 109, 157, 228, 229, 93, 94, 95, 96, 97, 98, - /* 950 */ 99, 100, 101, 102, 103, 104, 286, 263, 130, 310, - /* 960 */ 207, 267, 209, 293, 120, 212, 122, 123, 117, 22, + /* 930 */ 102, 103, 104, 161, 107, 108, 109, 107, 108, 109, + /* 940 */ 113, 320, 321, 113, 93, 94, 95, 96, 97, 98, + /* 950 */ 99, 100, 101, 102, 103, 104, 286, 220, 130, 65, + /* 960 */ 207, 67, 209, 293, 120, 212, 122, 123, 117, 22, /* 970 */ 23, 24, 25, 220, 27, 28, 29, 30, 31, 32, - /* 980 */ 33, 34, 35, 36, 37, 38, 65, 220, 67, 125, - /* 990 */ 40, 22, 23, 24, 25, 164, 27, 28, 29, 30, + /* 980 */ 33, 34, 35, 36, 37, 38, 40, 313, 314, 315, + /* 990 */ 40, 22, 23, 24, 25, 368, 27, 28, 29, 30, /* 1000 */ 31, 32, 33, 34, 35, 36, 37, 38, 23, 24, /* 1010 */ 25, 258, 27, 28, 29, 30, 31, 32, 33, 34, - /* 1020 */ 35, 36, 37, 38, 24, 25, 14, 27, 28, 29, - /* 1030 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 61, + /* 1020 */ 35, 36, 37, 38, 24, 25, 132, 27, 28, 29, + /* 1030 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, /* 1040 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - /* 1050 */ 103, 104, 220, 132, 76, 262, 78, 45, 108, 81, - /* 1060 */ 338, 339, 93, 94, 95, 96, 97, 98, 99, 100, - /* 1070 */ 101, 102, 103, 104, 281, 220, 155, 207, 93, 94, + /* 1050 */ 103, 104, 220, 107, 108, 109, 40, 107, 108, 109, + /* 1060 */ 362, 363, 93, 94, 95, 96, 97, 98, 99, 100, + /* 1070 */ 101, 102, 103, 104, 69, 220, 224, 225, 93, 94, /* 1080 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - /* 1090 */ 220, 246, 114, 93, 94, 95, 96, 97, 98, 99, - /* 1100 */ 100, 101, 102, 103, 104, 0, 207, 271, 209, 4, - /* 1110 */ 189, 6, 133, 8, 135, 136, 137, 220, 282, 220, - /* 1120 */ 92, 16, 216, 18, 145, 20, 4, 89, 6, 220, - /* 1130 */ 8, 207, 207, 209, 209, 211, 99, 40, 16, 207, - /* 1140 */ 18, 113, 20, 115, 220, 220, 118, 276, 224, 225, - /* 1150 */ 226, 207, 220, 209, 40, 117, 286, 258, 121, 54, - /* 1160 */ 328, 109, 57, 126, 220, 333, 334, 62, 63, 298, - /* 1170 */ 118, 66, 275, 207, 69, 209, 54, 220, 212, 57, - /* 1180 */ 90, 143, 258, 258, 62, 63, 220, 255, 66, 257, - /* 1190 */ 253, 69, 154, 88, 97, 98, 224, 225, 108, 161, - /* 1200 */ 110, 111, 258, 106, 107, 108, 109, 110, 111, 285, - /* 1210 */ 88, 22, 220, 99, 220, 125, 164, 112, 286, 313, - /* 1220 */ 314, 107, 108, 109, 258, 203, 204, 205, 206, 207, - /* 1230 */ 208, 134, 127, 195, 112, 336, 337, 220, 141, 220, - /* 1240 */ 202, 151, 152, 306, 320, 321, 224, 225, 226, 127, - /* 1250 */ 220, 220, 147, 316, 207, 207, 209, 207, 211, 154, - /* 1260 */ 335, 156, 337, 69, 159, 61, 161, 220, 220, 147, - /* 1270 */ 220, 166, 250, 11, 252, 64, 154, 283, 156, 68, - /* 1280 */ 92, 159, 78, 161, 220, 81, 24, 207, 166, 209, - /* 1290 */ 268, 211, 320, 321, 189, 278, 246, 247, 92, 194, - /* 1300 */ 220, 113, 40, 115, 199, 258, 207, 257, 209, 278, - /* 1310 */ 207, 189, 209, 220, 40, 212, 194, 55, 112, 220, - /* 1320 */ 328, 199, 118, 220, 40, 333, 334, 92, 134, 230, - /* 1330 */ 114, 69, 285, 11, 286, 220, 286, 220, 258, 317, - /* 1340 */ 42, 147, 320, 321, 322, 207, 24, 136, 113, 40, - /* 1350 */ 115, 29, 90, 118, 48, 161, 220, 258, 220, 97, - /* 1360 */ 98, 258, 40, 220, 90, 285, 155, 105, 275, 107, - /* 1370 */ 108, 109, 110, 111, 220, 113, 261, 55, 189, 360, - /* 1380 */ 74, 107, 108, 167, 110, 111, 124, 125, 109, 83, - /* 1390 */ 128, 107, 108, 109, 115, 257, 74, 118, 376, 125, - /* 1400 */ 283, 79, 24, 35, 36, 37, 38, 216, 99, 147, - /* 1410 */ 40, 113, 90, 151, 152, 153, 107, 108, 109, 97, - /* 1420 */ 98, 24, 116, 161, 286, 151, 152, 105, 328, 107, - /* 1430 */ 108, 109, 110, 111, 334, 113, 206, 4, 208, 6, - /* 1440 */ 207, 8, 209, 164, 97, 98, 124, 125, 164, 16, - /* 1450 */ 128, 18, 220, 220, 224, 225, 226, 224, 225, 226, - /* 1460 */ 113, 93, 94, 95, 96, 97, 98, 99, 100, 101, - /* 1470 */ 102, 103, 104, 151, 152, 153, 213, 107, 108, 109, - /* 1480 */ 250, 84, 252, 113, 106, 107, 222, 54, 10, 213, - /* 1490 */ 57, 258, 228, 229, 40, 62, 63, 354, 268, 66, - /* 1500 */ 220, 104, 69, 24, 313, 314, 18, 207, 129, 209, - /* 1510 */ 131, 11, 212, 328, 117, 207, 373, 209, 285, 334, - /* 1520 */ 220, 88, 125, 259, 24, 207, 48, 209, 220, 211, - /* 1530 */ 133, 134, 135, 136, 137, 138, 328, 59, 220, 1, - /* 1540 */ 40, 144, 334, 165, 207, 220, 209, 214, 215, 212, - /* 1550 */ 320, 321, 322, 320, 321, 55, 220, 220, 258, 21, - /* 1560 */ 127, 107, 108, 109, 106, 207, 258, 209, 207, 328, - /* 1570 */ 209, 117, 220, 212, 74, 334, 258, 24, 220, 79, - /* 1580 */ 147, 220, 44, 207, 113, 209, 107, 154, 117, 156, - /* 1590 */ 90, 11, 159, 285, 161, 258, 220, 97, 98, 166, - /* 1600 */ 62, 338, 339, 285, 24, 105, 376, 107, 108, 109, - /* 1610 */ 110, 111, 40, 113, 338, 339, 258, 348, 349, 258, - /* 1620 */ 40, 143, 189, 165, 124, 125, 40, 194, 128, 141, - /* 1630 */ 142, 207, 199, 209, 258, 55, 205, 206, 207, 208, - /* 1640 */ 360, 220, 222, 285, 220, 207, 40, 209, 228, 229, - /* 1650 */ 212, 151, 152, 153, 74, 224, 225, 226, 220, 79, - /* 1660 */ 107, 285, 40, 11, 140, 141, 142, 207, 3, 209, - /* 1670 */ 90, 99, 7, 140, 141, 142, 24, 97, 98, 259, - /* 1680 */ 220, 250, 258, 252, 220, 105, 61, 107, 108, 109, - /* 1690 */ 110, 111, 40, 113, 108, 123, 258, 342, 343, 268, - /* 1700 */ 11, 220, 40, 78, 124, 125, 81, 55, 128, 285, - /* 1710 */ 271, 27, 47, 24, 108, 207, 118, 209, 258, 113, - /* 1720 */ 40, 282, 207, 207, 209, 209, 220, 212, 220, 40, - /* 1730 */ 108, 151, 152, 153, 220, 220, 220, 323, 324, 117, - /* 1740 */ 106, 207, 90, 209, 55, 285, 148, 283, 317, 97, - /* 1750 */ 98, 320, 321, 322, 220, 197, 198, 105, 40, 107, - /* 1760 */ 108, 109, 110, 111, 283, 113, 258, 220, 1, 107, - /* 1770 */ 108, 109, 11, 258, 258, 113, 124, 125, 126, 90, - /* 1780 */ 128, 220, 207, 149, 209, 24, 97, 98, 21, 283, - /* 1790 */ 106, 220, 258, 285, 105, 220, 107, 108, 109, 110, - /* 1800 */ 111, 40, 113, 151, 152, 153, 269, 376, 11, 118, - /* 1810 */ 220, 44, 132, 124, 125, 126, 55, 128, 127, 24, - /* 1820 */ 220, 24, 27, 118, 263, 58, 108, 266, 267, 62, - /* 1830 */ 207, 113, 209, 258, 117, 117, 119, 40, 217, 218, - /* 1840 */ 151, 152, 153, 220, 139, 217, 218, 217, 218, 220, - /* 1850 */ 207, 90, 55, 263, 217, 218, 266, 267, 97, 98, - /* 1860 */ 99, 217, 218, 220, 125, 207, 105, 209, 107, 108, - /* 1870 */ 109, 110, 111, 115, 113, 207, 118, 209, 220, 148, - /* 1880 */ 149, 258, 118, 144, 220, 124, 125, 90, 220, 128, - /* 1890 */ 207, 127, 209, 114, 97, 98, 115, 118, 220, 118, - /* 1900 */ 237, 106, 105, 220, 107, 108, 109, 110, 111, 5, - /* 1910 */ 113, 117, 151, 152, 153, 207, 258, 209, 220, 15, - /* 1920 */ 115, 124, 125, 118, 220, 128, 258, 220, 220, 286, - /* 1930 */ 207, 207, 209, 209, 115, 115, 293, 118, 118, 144, - /* 1940 */ 207, 258, 209, 220, 220, 117, 220, 119, 151, 152, - /* 1950 */ 153, 207, 207, 220, 209, 40, 207, 207, 209, 209, - /* 1960 */ 207, 207, 209, 209, 220, 220, 258, 207, 89, 220, - /* 1970 */ 220, 220, 115, 220, 220, 118, 207, 207, 209, 209, - /* 1980 */ 220, 258, 258, 207, 207, 209, 209, 193, 220, 220, - /* 1990 */ 220, 258, 207, 207, 209, 209, 220, 220, 115, 237, - /* 2000 */ 207, 118, 209, 258, 34, 220, 220, 258, 258, 207, - /* 2010 */ 121, 258, 258, 220, 99, 126, 207, 115, 209, 207, - /* 2020 */ 118, 209, 220, 207, 207, 209, 209, 258, 258, 220, - /* 2030 */ 286, 24, 220, 154, 258, 258, 220, 220, 123, 207, - /* 2040 */ 207, 220, 209, 258, 258, 207, 286, 209, 207, 113, - /* 2050 */ 209, 258, 220, 220, 115, 119, 142, 118, 220, 207, - /* 2060 */ 207, 220, 209, 142, 150, 220, 207, 258, 209, 220, - /* 2070 */ 258, 150, 220, 220, 258, 258, 207, 125, 209, 220, - /* 2080 */ 207, 115, 209, 113, 118, 207, 134, 209, 286, 220, - /* 2090 */ 220, 258, 220, 220, 87, 207, 258, 209, 220, 258, - /* 2100 */ 207, 220, 209, 207, 40, 209, 115, 220, 220, 118, - /* 2110 */ 207, 258, 209, 220, 110, 111, 220, 258, 286, 220, - /* 2120 */ 207, 40, 209, 220, 207, 115, 209, 258, 118, 220, - /* 2130 */ 207, 258, 209, 220, 72, 73, 258, 220, 286, 207, - /* 2140 */ 207, 209, 209, 220, 115, 293, 258, 118, 110, 111, - /* 2150 */ 207, 258, 220, 220, 258, 220, 207, 207, 209, 209, - /* 2160 */ 207, 258, 209, 220, 207, 207, 209, 209, 220, 220, - /* 2170 */ 220, 258, 108, 220, 207, 258, 209, 220, 220, 220, - /* 2180 */ 115, 258, 207, 118, 209, 207, 207, 220, 209, 108, - /* 2190 */ 258, 258, 207, 207, 209, 220, 220, 207, 220, 220, - /* 2200 */ 207, 115, 209, 220, 118, 220, 220, 258, 258, 115, - /* 2210 */ 220, 258, 118, 220, 115, 258, 258, 118, 115, 115, - /* 2220 */ 115, 118, 118, 118, 115, 258, 220, 118, 115, 286, - /* 2230 */ 301, 118, 220, 258, 220, 220, 293, 258, 114, 115, - /* 2240 */ 220, 220, 237, 258, 220, 220, 220, 220, 220, 295, - /* 2250 */ 220, 258, 330, 220, 220, 281, 220, 350, 295, 295, - /* 2260 */ 289, 221, 210, 308, 286, 303, 346, 295, 233, 292, - /* 2270 */ 340, 355, 286, 273, 272, 295, 286, 295, 279, 295, - /* 2280 */ 272, 284, 273, 234, 311, 284, 273, 248, 300, 273, - /* 2290 */ 279, 236, 311, 251, 300, 300, 259, 279, 300, 276, - /* 2300 */ 259, 232, 259, 210, 92, 378, 40, 276, 347, 113, - /* 2310 */ 94, 343, 201, 344, 58, 375, 122, 119, 353, 223, - /* 2320 */ 364, 40, 165, 363, 146, 13, 63, 160, 41, 223, - /* 2330 */ 223, 223, 91, 341, 288, 149, 291, 341, 291, 288, - /* 2340 */ 290, 319, 288, 290, 312, 274, 343, 290, 292, 288, - /* 2350 */ 292, 364, 363, 113, 280, 163, 312, 277, 114, 276, - /* 2360 */ 22, 344, 270, 276, 345, 277, 223, 91, 254, 148, - /* 2370 */ 223, 254, 274, 284, 284, 274, 260, 280, 113, 284, - /* 2380 */ 270, 223, 270, 254, 284, 309, 129, 43, 304, 223, - /* 2390 */ 254, 223, 254, 260, 106, 243, 243, 243, 46, 239, - /* 2400 */ 249, 260, 113, 139, 249, 243, 234, 243, 239, 118, - /* 2410 */ 223, 277, 256, 243, 243, 276, 162, 277, 297, 116, - /* 2420 */ 80, 296, 71, 113, 287, 223, 284, 227, 104, 129, - /* 2430 */ 265, 329, 287, 117, 231, 168, 260, 377, 265, 264, - /* 2440 */ 372, 219, 372, 352, 329, 219, 327, 327, 219, 245, - /* 2450 */ 324, 219, 245, 235, 235, 245, 233, 339, 233, 49, - /* 2460 */ 119, 219, 50, 190, 189, 34, 113, 54, 40, 191, - /* 2470 */ 115, 117, 40, 351, 40, 352, 40, 118, 351, 113, - /* 2480 */ 352, 40, 113, 106, 40, 157, 113, 191, 118, 115, - /* 2490 */ 118, 113, 117, 113, 52, 200, 34, 118, 196, 118, - /* 2500 */ 117, 119, 118, 118, 118, 113, 113, 35, 117, 115, - /* 2510 */ 40, 40, 189, 40, 119, 119, 119, 119, 119, 119, - /* 2520 */ 115, 119, 113, 40, 58, 157, 112, 106, 124, 158, - /* 2530 */ 115, 115, 165, 157, 146, 132, 147, 117, 127, 132, - /* 2540 */ 118, 106, 155, 113, 143, 155, 127, 42, 12, 112, - /* 2550 */ 34, 143, 146, 34, 34, 34, 107, 9, 119, 112, - /* 2560 */ 143, 143, 8, 117, 52, 52, 118, 60, 17, 119, - /* 2570 */ 106, 24, 113, 144, 51, 124, 138, 51, 113, 40, - /* 2580 */ 113, 85, 113, 115, 2, 51, 12, 9, 113, 107, - /* 2590 */ 164, 117, 115, 115, 118, 115, 9, 113, 119, 118, - /* 2600 */ 115, 113, 9, 117, 115, 118, 114, 113, 148, 116, - /* 2610 */ 113, 9, 9, 115, 9, 77, 60, 75, 23, 60, - /* 2620 */ 118, 9, 82, 115, 115, 115, 127, 113, 87, 118, - /* 2630 */ 113, 127, 18, 118, 9, 9, 118, 379, 113, 115, - /* 2640 */ 118, 113, 379, 113, 115, 112, 119, 115, 113, 379, - /* 2650 */ 379, 379, 121, 379, 379, 379, 119, 379, 115, 379, - /* 2660 */ 115, 115, 113, 119, 112, 379, 379, 379, 379, 379, - /* 2670 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2680 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2690 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2700 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2710 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2720 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2730 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2740 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2750 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2760 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2770 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2780 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2790 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2800 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2810 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2820 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2830 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2840 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2850 */ 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - /* 2860 */ 379, 379, 379, 379, 379, 379, 379, 379, + /* 1090 */ 99, 118, 146, 93, 94, 95, 96, 97, 98, 99, + /* 1100 */ 100, 101, 102, 103, 104, 0, 107, 108, 109, 4, + /* 1110 */ 24, 6, 121, 8, 164, 283, 117, 126, 119, 61, + /* 1120 */ 147, 16, 219, 18, 108, 20, 4, 40, 6, 113, + /* 1130 */ 8, 220, 127, 117, 161, 207, 78, 209, 16, 81, + /* 1140 */ 18, 133, 20, 135, 136, 137, 220, 40, 220, 220, + /* 1150 */ 220, 220, 147, 145, 219, 269, 207, 222, 209, 54, + /* 1160 */ 305, 212, 57, 228, 229, 40, 161, 62, 63, 220, + /* 1170 */ 84, 66, 320, 321, 69, 69, 54, 90, 220, 57, + /* 1180 */ 205, 206, 207, 208, 62, 63, 258, 261, 66, 207, + /* 1190 */ 104, 69, 263, 88, 107, 108, 267, 110, 111, 224, + /* 1200 */ 225, 226, 220, 117, 199, 207, 99, 258, 278, 278, + /* 1210 */ 88, 125, 125, 310, 107, 108, 109, 112, 220, 133, + /* 1220 */ 134, 135, 136, 137, 138, 250, 58, 252, 89, 207, + /* 1230 */ 144, 209, 127, 211, 112, 40, 295, 69, 151, 152, + /* 1240 */ 134, 207, 220, 268, 246, 247, 224, 225, 226, 127, + /* 1250 */ 220, 216, 147, 147, 220, 257, 117, 132, 40, 154, + /* 1260 */ 10, 156, 220, 335, 159, 337, 161, 161, 286, 147, + /* 1270 */ 40, 166, 207, 11, 209, 293, 154, 212, 156, 220, + /* 1280 */ 258, 159, 143, 161, 286, 220, 24, 40, 166, 255, + /* 1290 */ 220, 257, 317, 154, 189, 320, 321, 322, 48, 194, + /* 1300 */ 161, 207, 40, 108, 199, 275, 64, 285, 140, 59, + /* 1310 */ 68, 189, 117, 109, 220, 147, 194, 55, 220, 115, + /* 1320 */ 286, 199, 118, 258, 40, 107, 108, 109, 220, 161, + /* 1330 */ 355, 69, 18, 11, 195, 117, 220, 107, 108, 109, + /* 1340 */ 92, 202, 320, 321, 97, 98, 24, 117, 313, 314, + /* 1350 */ 220, 29, 90, 106, 107, 108, 109, 110, 111, 97, + /* 1360 */ 98, 113, 40, 115, 90, 220, 207, 105, 164, 107, + /* 1370 */ 108, 109, 110, 111, 282, 113, 278, 55, 136, 220, + /* 1380 */ 286, 134, 108, 99, 110, 111, 124, 125, 141, 207, + /* 1390 */ 128, 209, 300, 143, 212, 24, 74, 155, 206, 125, + /* 1400 */ 208, 79, 220, 35, 36, 37, 38, 123, 207, 147, + /* 1410 */ 209, 220, 90, 151, 152, 153, 224, 225, 226, 97, + /* 1420 */ 98, 220, 220, 161, 117, 151, 152, 105, 283, 107, + /* 1430 */ 108, 109, 110, 111, 375, 113, 216, 4, 253, 6, + /* 1440 */ 258, 8, 250, 220, 252, 286, 124, 125, 332, 16, + /* 1450 */ 128, 18, 293, 89, 263, 141, 142, 266, 267, 258, + /* 1460 */ 268, 93, 94, 95, 96, 97, 98, 99, 100, 101, + /* 1470 */ 102, 103, 104, 151, 152, 153, 220, 106, 107, 207, + /* 1480 */ 207, 209, 209, 211, 207, 212, 209, 54, 211, 359, + /* 1490 */ 57, 306, 220, 220, 207, 62, 63, 220, 328, 66, + /* 1500 */ 193, 316, 69, 207, 334, 209, 283, 220, 220, 97, + /* 1510 */ 98, 11, 320, 321, 322, 207, 220, 209, 154, 220, + /* 1520 */ 212, 88, 110, 111, 24, 207, 328, 209, 220, 61, + /* 1530 */ 258, 258, 334, 313, 314, 258, 165, 207, 220, 209, + /* 1540 */ 40, 213, 224, 225, 226, 220, 78, 355, 92, 81, + /* 1550 */ 220, 207, 220, 209, 258, 55, 212, 285, 357, 358, + /* 1560 */ 127, 305, 285, 361, 220, 207, 258, 209, 109, 113, + /* 1570 */ 207, 115, 209, 286, 74, 220, 258, 118, 220, 79, + /* 1580 */ 147, 285, 24, 220, 237, 27, 118, 154, 258, 156, + /* 1590 */ 90, 11, 159, 207, 161, 209, 276, 97, 98, 166, + /* 1600 */ 24, 213, 258, 285, 24, 105, 220, 107, 108, 109, + /* 1610 */ 110, 111, 41, 113, 220, 285, 258, 207, 298, 209, + /* 1620 */ 40, 258, 189, 164, 124, 125, 22, 194, 128, 207, + /* 1630 */ 220, 209, 199, 299, 212, 55, 302, 305, 320, 321, + /* 1640 */ 230, 213, 220, 207, 258, 209, 67, 207, 285, 209, + /* 1650 */ 40, 151, 152, 153, 74, 261, 220, 214, 215, 79, + /* 1660 */ 220, 362, 24, 11, 106, 118, 338, 339, 258, 207, + /* 1670 */ 90, 285, 220, 207, 127, 209, 24, 97, 98, 1, + /* 1680 */ 258, 115, 220, 107, 118, 105, 220, 107, 108, 109, + /* 1690 */ 110, 111, 40, 113, 258, 140, 141, 142, 258, 21, + /* 1700 */ 11, 40, 144, 271, 124, 125, 328, 55, 128, 99, + /* 1710 */ 207, 132, 334, 24, 282, 357, 361, 107, 108, 109, + /* 1720 */ 237, 285, 44, 220, 258, 285, 338, 339, 157, 40, + /* 1730 */ 207, 151, 152, 153, 155, 271, 58, 5, 48, 207, + /* 1740 */ 62, 209, 90, 220, 55, 107, 282, 15, 286, 97, + /* 1750 */ 98, 40, 220, 174, 220, 293, 65, 105, 67, 107, + /* 1760 */ 108, 109, 110, 111, 74, 113, 338, 339, 107, 108, + /* 1770 */ 109, 192, 11, 83, 113, 207, 124, 125, 126, 90, + /* 1780 */ 128, 117, 207, 119, 209, 24, 97, 98, 220, 286, + /* 1790 */ 258, 14, 1, 189, 105, 220, 107, 108, 109, 110, + /* 1800 */ 111, 40, 113, 151, 152, 153, 116, 106, 11, 286, + /* 1810 */ 214, 215, 21, 124, 125, 126, 55, 128, 118, 108, + /* 1820 */ 34, 24, 45, 132, 113, 257, 203, 204, 205, 206, + /* 1830 */ 207, 208, 207, 258, 209, 44, 220, 40, 328, 139, + /* 1840 */ 151, 152, 153, 237, 334, 220, 155, 224, 225, 226, + /* 1850 */ 149, 90, 55, 62, 286, 348, 349, 113, 97, 98, + /* 1860 */ 99, 117, 342, 343, 323, 324, 105, 220, 107, 108, + /* 1870 */ 109, 110, 111, 250, 113, 252, 217, 218, 114, 207, + /* 1880 */ 189, 209, 118, 258, 125, 124, 125, 90, 207, 128, + /* 1890 */ 209, 268, 220, 27, 97, 98, 217, 218, 129, 113, + /* 1900 */ 131, 220, 105, 144, 107, 108, 109, 110, 111, 106, + /* 1910 */ 113, 118, 151, 152, 153, 207, 207, 209, 209, 217, + /* 1920 */ 218, 124, 125, 217, 218, 128, 197, 198, 220, 220, + /* 1930 */ 258, 217, 218, 207, 301, 209, 148, 149, 207, 258, + /* 1940 */ 317, 148, 42, 320, 321, 322, 220, 118, 151, 152, + /* 1950 */ 153, 220, 207, 117, 209, 119, 127, 207, 207, 209, + /* 1960 */ 209, 207, 220, 209, 121, 220, 258, 258, 165, 126, + /* 1970 */ 220, 220, 106, 207, 220, 209, 220, 207, 355, 209, + /* 1980 */ 207, 142, 209, 220, 258, 207, 220, 209, 115, 150, + /* 1990 */ 220, 118, 207, 220, 209, 220, 115, 115, 220, 118, + /* 2000 */ 118, 40, 207, 258, 209, 220, 207, 115, 258, 258, + /* 2010 */ 118, 125, 258, 113, 142, 220, 207, 286, 209, 220, + /* 2020 */ 134, 207, 150, 209, 258, 207, 24, 209, 258, 220, + /* 2030 */ 115, 258, 220, 118, 220, 207, 258, 209, 220, 207, + /* 2040 */ 220, 209, 207, 258, 209, 207, 220, 209, 220, 207, + /* 2050 */ 220, 209, 220, 258, 220, 220, 289, 207, 220, 209, + /* 2060 */ 115, 115, 220, 118, 118, 220, 207, 258, 209, 108, + /* 2070 */ 220, 220, 258, 72, 73, 220, 258, 220, 207, 220, + /* 2080 */ 209, 207, 207, 209, 209, 286, 258, 114, 115, 87, + /* 2090 */ 258, 220, 293, 258, 220, 220, 258, 207, 220, 209, + /* 2100 */ 258, 330, 207, 207, 209, 209, 281, 220, 258, 207, + /* 2110 */ 220, 209, 207, 40, 209, 220, 220, 258, 207, 220, + /* 2120 */ 209, 207, 220, 209, 207, 220, 209, 115, 220, 258, + /* 2130 */ 118, 220, 258, 258, 220, 308, 207, 220, 209, 115, + /* 2140 */ 220, 115, 118, 207, 118, 209, 40, 115, 258, 220, + /* 2150 */ 118, 220, 115, 258, 258, 118, 220, 207, 115, 209, + /* 2160 */ 258, 118, 220, 258, 220, 207, 207, 209, 209, 258, + /* 2170 */ 220, 207, 258, 209, 115, 258, 220, 118, 220, 220, + /* 2180 */ 220, 108, 220, 207, 220, 209, 207, 258, 209, 220, + /* 2190 */ 207, 220, 209, 207, 258, 209, 220, 220, 207, 220, + /* 2200 */ 209, 220, 207, 220, 209, 220, 220, 220, 258, 92, + /* 2210 */ 207, 220, 209, 220, 108, 220, 258, 258, 115, 110, + /* 2220 */ 111, 118, 258, 220, 92, 220, 207, 220, 209, 207, + /* 2230 */ 113, 209, 115, 115, 258, 118, 118, 258, 220, 220, + /* 2240 */ 115, 258, 220, 118, 258, 113, 303, 115, 115, 258, + /* 2250 */ 118, 118, 115, 258, 220, 118, 110, 111, 220, 115, + /* 2260 */ 115, 258, 118, 118, 220, 220, 220, 220, 220, 220, + /* 2270 */ 220, 350, 233, 295, 221, 295, 210, 258, 346, 295, + /* 2280 */ 258, 340, 273, 295, 295, 295, 272, 295, 292, 295, + /* 2290 */ 279, 234, 272, 311, 284, 279, 273, 284, 273, 248, + /* 2300 */ 273, 236, 232, 356, 300, 251, 300, 279, 311, 276, + /* 2310 */ 210, 259, 276, 92, 259, 300, 379, 300, 40, 259, + /* 2320 */ 113, 300, 347, 40, 165, 146, 13, 119, 223, 63, + /* 2330 */ 223, 223, 160, 291, 41, 91, 149, 113, 163, 114, + /* 2340 */ 22, 343, 274, 344, 344, 270, 277, 291, 290, 341, + /* 2350 */ 288, 290, 312, 312, 319, 292, 292, 290, 280, 288, + /* 2360 */ 288, 276, 288, 277, 276, 223, 91, 254, 148, 254, + /* 2370 */ 341, 284, 223, 343, 284, 274, 345, 284, 274, 280, + /* 2380 */ 270, 284, 270, 113, 260, 223, 129, 43, 254, 309, + /* 2390 */ 223, 223, 254, 304, 254, 260, 106, 243, 243, 243, + /* 2400 */ 46, 113, 239, 260, 243, 234, 249, 249, 139, 243, + /* 2410 */ 118, 223, 239, 243, 162, 276, 256, 243, 277, 297, + /* 2420 */ 116, 80, 296, 329, 277, 329, 71, 113, 227, 223, + /* 2430 */ 104, 94, 284, 58, 265, 353, 201, 287, 287, 122, + /* 2440 */ 364, 265, 365, 231, 365, 364, 223, 117, 129, 264, + /* 2450 */ 260, 219, 168, 339, 327, 327, 245, 219, 219, 376, + /* 2460 */ 324, 219, 378, 352, 245, 235, 235, 351, 373, 233, + /* 2470 */ 233, 352, 351, 245, 219, 352, 49, 119, 50, 190, + /* 2480 */ 189, 34, 113, 54, 117, 40, 191, 115, 40, 40, + /* 2490 */ 40, 118, 113, 373, 40, 113, 106, 40, 113, 157, + /* 2500 */ 191, 115, 118, 40, 113, 117, 117, 40, 40, 40, + /* 2510 */ 189, 119, 119, 119, 119, 119, 119, 115, 119, 113, + /* 2520 */ 58, 112, 115, 115, 158, 157, 106, 157, 124, 155, + /* 2530 */ 132, 117, 127, 118, 147, 132, 165, 113, 106, 127, + /* 2540 */ 42, 12, 112, 34, 143, 34, 146, 34, 34, 107, + /* 2550 */ 9, 112, 119, 8, 143, 117, 143, 52, 118, 52, + /* 2560 */ 143, 60, 146, 17, 106, 155, 24, 124, 113, 144, + /* 2570 */ 119, 51, 138, 113, 113, 51, 40, 85, 113, 115, + /* 2580 */ 2, 51, 12, 117, 113, 107, 9, 115, 118, 115, + /* 2590 */ 115, 115, 113, 9, 117, 164, 115, 113, 118, 9, + /* 2600 */ 118, 115, 119, 114, 113, 9, 116, 148, 113, 115, + /* 2610 */ 9, 9, 77, 60, 75, 23, 60, 118, 9, 82, + /* 2620 */ 118, 115, 118, 115, 35, 115, 52, 87, 34, 117, + /* 2630 */ 115, 196, 18, 115, 118, 9, 119, 118, 113, 118, + /* 2640 */ 118, 113, 115, 9, 118, 113, 200, 113, 380, 118, + /* 2650 */ 127, 113, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2660 */ 127, 118, 118, 115, 113, 113, 119, 380, 113, 115, + /* 2670 */ 121, 113, 115, 380, 115, 380, 112, 115, 115, 119, + /* 2680 */ 119, 113, 380, 112, 380, 380, 380, 380, 380, 380, + /* 2690 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2700 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2710 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2720 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2730 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2740 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2750 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2760 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2770 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2780 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2790 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2800 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2810 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2820 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2830 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2840 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2850 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2860 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2870 */ 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + /* 2880 */ 380, 380, 380, 380, 380, 380, 380, }; -#define YY_SHIFT_COUNT (750) +#define YY_SHIFT_COUNT (756) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (2626) +#define YY_SHIFT_MAX (2634) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 1122, 1105, 1433, 1262, 1262, 557, 1322, 1500, 1580, 1797, - /* 10 */ 1797, 1797, 1797, 249, 21, 1797, 1797, 1797, 1797, 1797, + /* 0 */ 1122, 1105, 1433, 1262, 1262, 1005, 1005, 1322, 1500, 1580, + /* 10 */ 1797, 1797, 1797, 1797, 249, 1168, 1005, 1797, 1797, 1797, /* 20 */ 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, - /* 30 */ 1797, 256, 256, 230, 1194, 230, 557, 557, 557, 557, - /* 40 */ 557, 557, 557, 557, 557, 0, 0, 142, 947, 1652, + /* 30 */ 1797, 1797, 1797, 231, 231, 52, 1106, 52, 749, 749, + /* 40 */ 749, 749, 749, 749, 749, 0, 0, 142, 947, 1652, /* 50 */ 1689, 1761, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, /* 60 */ 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, /* 70 */ 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, /* 80 */ 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, /* 90 */ 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, - /* 100 */ 1797, 1797, 1797, 1797, 1097, 1097, 450, 450, 256, 612, - /* 110 */ 704, 230, 230, 230, 230, 230, 230, 230, 230, 749, - /* 120 */ 749, 749, 749, 23, 120, 225, 250, 275, 368, 398, - /* 130 */ 421, 515, 538, 561, 655, 678, 701, 805, 828, 851, + /* 100 */ 1797, 1797, 1797, 1797, 1247, 1247, 705, 705, 562, 231, + /* 110 */ 702, 52, 52, 52, 52, 52, 52, 52, 52, 973, + /* 120 */ 973, 973, 973, 23, 120, 225, 250, 273, 373, 396, + /* 130 */ 419, 513, 536, 559, 653, 676, 701, 805, 828, 851, /* 140 */ 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, /* 150 */ 947, 947, 947, 947, 947, 947, 947, 947, 947, 969, /* 160 */ 947, 985, 1000, 1000, 35, 1368, 1368, 1368, 1368, 1368, - /* 170 */ 1368, 1368, 105, 128, 165, 253, 657, 230, 230, 230, - /* 180 */ 230, 230, 230, 230, 230, 230, 230, 230, 1211, 1795, - /* 190 */ 230, 230, 230, 709, 709, 126, 685, 18, 122, 122, - /* 200 */ 122, 520, 3, 3, 2665, 2665, 1397, 1397, 1397, 253, - /* 210 */ 253, 677, 562, 562, 562, 562, 1767, 1767, 657, 978, - /* 220 */ 1028, 1235, 230, 230, 230, 230, 230, 230, 230, 230, - /* 230 */ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - /* 240 */ 230, 1378, 230, 1204, 1204, 230, 1488, 1625, 1625, 383, - /* 250 */ 1479, 1479, 950, 1216, 950, 25, 38, 2665, 2665, 2665, - /* 260 */ 2665, 2665, 2665, 2665, 1274, 1038, 1090, 1090, 300, 707, - /* 270 */ 1454, 1114, 654, 979, 804, 831, 1284, 1309, 1370, 1662, - /* 280 */ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - /* 290 */ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - /* 300 */ 230, 230, 230, 230, 230, 230, 230, 273, 230, 230, - /* 310 */ 230, 230, 230, 230, 230, 230, 230, 230, 230, 1478, - /* 320 */ 1478, 1478, 230, 230, 230, 230, 1279, 230, 230, 1718, - /* 330 */ 1306, 230, 230, 1538, 230, 230, 1572, 1622, 1622, 803, - /* 340 */ 1524, 1665, 1347, 1622, 1622, 1622, 1052, 1622, 844, 844, - /* 350 */ 1037, 844, 1680, 1558, 1189, 784, 1634, 1731, 1691, 1731, - /* 360 */ 1553, 1598, 1634, 1634, 1598, 1634, 1691, 1553, 1705, 1758, - /* 370 */ 1684, 1904, 1471, 1458, 1458, 1458, 1458, 1764, 1779, 1779, - /* 380 */ 1904, 1904, 1379, 1889, 2212, 2266, 38, 2196, 2216, 2111, - /* 390 */ 2256, 2194, 2256, 2194, 2216, 2198, 2281, 2281, 38, 2196, - /* 400 */ 2157, 2178, 2312, 2312, 2198, 2198, 2198, 2263, 2263, 2167, - /* 410 */ 2167, 2167, 2287, 2287, 2241, 2241, 2241, 2241, 2186, 2240, - /* 420 */ 2192, 2244, 2338, 2192, 2244, 2198, 2276, 2221, 2198, 2276, - /* 430 */ 2221, 2186, 2186, 2221, 2240, 2338, 2221, 2338, 2265, 2198, - /* 440 */ 2276, 2257, 2344, 2198, 2276, 2198, 2276, 2265, 2288, 2288, - /* 450 */ 2288, 2352, 2289, 2289, 2265, 2288, 2264, 2288, 2352, 2288, - /* 460 */ 2288, 2291, 2198, 2192, 2244, 2192, 2254, 2303, 2221, 2340, - /* 470 */ 2340, 2351, 2351, 2310, 2198, 2324, 2324, 2300, 2316, 2265, - /* 480 */ 2267, 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, - /* 490 */ 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, - /* 500 */ 2665, 2665, 2665, 2665, 474, 921, 864, 1915, 734, 1188, - /* 510 */ 119, 1533, 1606, 1781, 1206, 1805, 1794, 1819, 1820, 1857, - /* 520 */ 1717, 1883, 1902, 1970, 1879, 1828, 1939, 1914, 1921, 1966, - /* 530 */ 1298, 1991, 2010, 2029, 2065, 2086, 1586, 1952, 1012, 1739, - /* 540 */ 2094, 2062, 2064, 2099, 2007, 2103, 2104, 2105, 2081, 2004, - /* 550 */ 2038, 2109, 2113, 2124, 1936, 2410, 2412, 2341, 2273, 2275, - /* 560 */ 2431, 2413, 2353, 2354, 2428, 2278, 2355, 2432, 2434, 2436, - /* 570 */ 2359, 2366, 2441, 2369, 2377, 2444, 2328, 2373, 2296, 2374, - /* 580 */ 2370, 2378, 2375, 2372, 2380, 2442, 2295, 2379, 2302, 2381, - /* 590 */ 2382, 2462, 2384, 2385, 2386, 2386, 2383, 2392, 2393, 2472, - /* 600 */ 2394, 2391, 2395, 2396, 2397, 2470, 2398, 2399, 2400, 2405, - /* 610 */ 2471, 2402, 2473, 2409, 2483, 2323, 2466, 2414, 2415, 2416, - /* 620 */ 2368, 2371, 2376, 2403, 2421, 2387, 2404, 2389, 2388, 2401, - /* 630 */ 2420, 2422, 2422, 2411, 2367, 2407, 2430, 2435, 2390, 2437, - /* 640 */ 2419, 2408, 2422, 2417, 2505, 2536, 2422, 2406, 2516, 2519, - /* 650 */ 2520, 2521, 2418, 2449, 2548, 2439, 2447, 2554, 2446, 2512, - /* 660 */ 2448, 2513, 2507, 2551, 2450, 2464, 2451, 2547, 2429, 2438, - /* 670 */ 2459, 2523, 2465, 2467, 2468, 2469, 2526, 2539, 2474, 2496, - /* 680 */ 2582, 2475, 2534, 2574, 2476, 2477, 2478, 2480, 2482, 2578, - /* 690 */ 2484, 2426, 2481, 2587, 2485, 2488, 2486, 2487, 2479, 2489, - /* 700 */ 2593, 2492, 2494, 2493, 2460, 2497, 2498, 2602, 2603, 2605, - /* 710 */ 2538, 2556, 2542, 2595, 2559, 2540, 2502, 2612, 2508, 2481, - /* 720 */ 2509, 2510, 2511, 2541, 2514, 2515, 2517, 2518, 2499, 2504, - /* 730 */ 2522, 2524, 2525, 2527, 2614, 2528, 2529, 2530, 2531, 2532, - /* 740 */ 2535, 2543, 2537, 2544, 2545, 2546, 2549, 2625, 2626, 2533, - /* 750 */ 2552, + /* 170 */ 1368, 1368, 105, 10, 126, 224, 228, 52, 52, 52, + /* 180 */ 52, 52, 52, 52, 52, 1242, 1558, 52, 52, 52, + /* 190 */ 52, 52, 52, 1412, 1412, 269, 188, 237, 245, 245, + /* 200 */ 245, 772, 80, 80, 2684, 2684, 1086, 1086, 1086, 946, + /* 210 */ 784, 784, 784, 784, 1678, 1678, 224, 706, 228, 228, + /* 220 */ 2117, 2132, 52, 52, 52, 52, 52, 52, 52, 52, + /* 230 */ 52, 52, 52, 52, 1371, 52, 1468, 1468, 52, 52, + /* 240 */ 52, 52, 52, 52, 52, 52, 1314, 1058, 1058, 358, + /* 250 */ 1576, 1576, 123, 413, 123, 259, 425, 2684, 2684, 2684, + /* 260 */ 2684, 2684, 2684, 2684, 1087, 1274, 1274, 1139, 999, 804, + /* 270 */ 1008, 827, 253, 950, 1107, 1218, 1230, 1610, 830, 1661, + /* 280 */ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + /* 290 */ 52, 52, 52, 52, 52, 52, 322, 52, 52, 52, + /* 300 */ 52, 52, 52, 52, 52, 52, 52, 52, 1250, 1250, + /* 310 */ 1250, 52, 52, 52, 52, 1204, 52, 52, 1016, 1690, + /* 320 */ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + /* 330 */ 52, 52, 52, 1791, 52, 52, 662, 803, 666, 596, + /* 340 */ 646, 1195, 1195, 1195, 1195, 1459, 1195, 844, 1195, 1195, + /* 350 */ 1195, 844, 991, 844, 1125, 1604, 1571, 1701, 1788, 1547, + /* 360 */ 1788, 1638, 1793, 1701, 1701, 1793, 1701, 1547, 1638, 1700, + /* 370 */ 1566, 1866, 1732, 1744, 1803, 1803, 1803, 1803, 1803, 1829, + /* 380 */ 1764, 1764, 1732, 1732, 1729, 1769, 1843, 2221, 2278, 425, + /* 390 */ 2207, 2283, 2283, 425, 2207, 2159, 2179, 2313, 2313, 2208, + /* 400 */ 2208, 2208, 2266, 2266, 2172, 2172, 2172, 2293, 2293, 2244, + /* 410 */ 2244, 2244, 2244, 2187, 2224, 2175, 2225, 2318, 2175, 2225, + /* 420 */ 2208, 2275, 2220, 2208, 2275, 2220, 2187, 2187, 2220, 2224, + /* 430 */ 2318, 2220, 2318, 2270, 2208, 2275, 2257, 2344, 2208, 2275, + /* 440 */ 2208, 2275, 2270, 2290, 2290, 2290, 2354, 2288, 2288, 2270, + /* 450 */ 2290, 2269, 2290, 2354, 2290, 2290, 2292, 2208, 2175, 2225, + /* 460 */ 2175, 2252, 2304, 2220, 2341, 2341, 2355, 2355, 2314, 2208, + /* 470 */ 2326, 2326, 2337, 2375, 2317, 2375, 2317, 2337, 2235, 2208, + /* 480 */ 2319, 2330, 2270, 2284, 2684, 2684, 2684, 2684, 2684, 2684, + /* 490 */ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, + /* 500 */ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1579, 1691, 287, + /* 510 */ 1284, 1248, 1456, 894, 1555, 1711, 1873, 757, 1881, 1307, + /* 520 */ 1882, 1892, 1786, 1364, 1664, 1915, 1839, 1872, 1945, 1900, + /* 530 */ 1946, 2024, 2026, 2032, 2037, 1961, 1886, 1777, 1759, 2012, + /* 540 */ 2001, 2073, 2043, 2002, 2059, 1836, 2103, 2118, 2125, 2133, + /* 550 */ 2137, 2106, 2109, 2146, 2144, 2145, 1973, 388, 2427, 2428, + /* 560 */ 2358, 2289, 2291, 2447, 2429, 2369, 2367, 2445, 2295, 2372, + /* 570 */ 2448, 2449, 2450, 2373, 2379, 2454, 2382, 2390, 2457, 2342, + /* 580 */ 2385, 2309, 2386, 2384, 2391, 2388, 2389, 2392, 2393, 2394, + /* 590 */ 2463, 2395, 2396, 2397, 2402, 2467, 2399, 2468, 2406, 2469, + /* 600 */ 2321, 2462, 2409, 2407, 2408, 2368, 2366, 2370, 2398, 2420, + /* 610 */ 2374, 2404, 2387, 2400, 2401, 2414, 2415, 2415, 2405, 2371, + /* 620 */ 2403, 2424, 2432, 2410, 2430, 2412, 2411, 2415, 2413, 2498, + /* 630 */ 2529, 2415, 2416, 2509, 2511, 2513, 2514, 2417, 2442, 2541, + /* 640 */ 2433, 2439, 2545, 2438, 2505, 2440, 2507, 2501, 2546, 2451, + /* 650 */ 2458, 2443, 2542, 2425, 2434, 2455, 2520, 2460, 2461, 2464, + /* 660 */ 2465, 2524, 2536, 2466, 2492, 2578, 2471, 2530, 2570, 2470, + /* 670 */ 2472, 2474, 2475, 2476, 2478, 2577, 2479, 2431, 2480, 2584, + /* 680 */ 2481, 2484, 2477, 2482, 2483, 2486, 2590, 2489, 2491, 2490, + /* 690 */ 2459, 2495, 2494, 2596, 2601, 2602, 2535, 2553, 2539, 2592, + /* 700 */ 2556, 2537, 2499, 2609, 2506, 2480, 2508, 2510, 2502, 2540, + /* 710 */ 2515, 2504, 2435, 2516, 2517, 2594, 2519, 2521, 2522, 2522, + /* 720 */ 2512, 2525, 2528, 2589, 2526, 2532, 2574, 2446, 2518, 2527, + /* 730 */ 2534, 2531, 2538, 2543, 2523, 2533, 2544, 2548, 2551, 2547, + /* 740 */ 2614, 2552, 2554, 2555, 2549, 2557, 2558, 2559, 2560, 2561, + /* 750 */ 2562, 2563, 2568, 2626, 2634, 2564, 2571, }; -#define YY_REDUCE_COUNT (503) -#define YY_REDUCE_MIN (-286) -#define YY_REDUCE_MAX (2242) +#define YY_REDUCE_COUNT (506) +#define YY_REDUCE_MIN (-256) +#define YY_REDUCE_MAX (2255) static const short yy_reduce_ofst[] = { - /* 0 */ 1022, 1431, 1230, 924, 1233, -215, -145, 899, 925, -24, - /* 10 */ 1047, 1080, 1318, 1050, -206, 269, 753, 966, 1103, 1300, - /* 20 */ 1308, 1337, 1361, 1376, 1438, 1424, 1460, 1099, 1358, 1508, - /* 30 */ 1515, 115, 262, 94, -212, 932, -158, 91, 214, 260, - /* 40 */ 280, 283, 330, 353, 420, 1264, 1420, -137, 714, 944, - /* 50 */ 1516, 1534, 1575, 1623, 1658, 1668, 1683, 1708, 1723, 1724, - /* 60 */ 1733, 1745, 1749, 1750, 1753, 1754, 1769, 1770, 1776, 1777, - /* 70 */ 1785, 1786, 1793, 1809, 1812, 1816, 1817, 1833, 1838, 1841, - /* 80 */ 1853, 1859, 1869, 1873, 1878, 1888, 1893, 1896, 1903, 1913, - /* 90 */ 1917, 1923, 1932, 1933, 1949, 1950, 1953, 1957, 1958, 1967, - /* 100 */ 1975, 1979, 1985, 1993, -203, 309, 832, 992, -171, 479, - /* 110 */ 652, 1138, -204, 670, 1643, 1852, 1561, 1943, 1590, 471, - /* 120 */ 972, 471, 972, -222, -222, -222, -222, -222, -222, -222, - /* 130 */ -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, - /* 140 */ -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, - /* 150 */ -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, - /* 160 */ -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, - /* 170 */ -222, -222, -222, -222, -222, 1143, -199, 72, 502, -151, - /* 180 */ 870, 1048, 1744, 1760, 1802, 1832, 1978, 1986, 937, 239, - /* 190 */ 478, 1990, 694, 906, 1191, 430, -222, 627, 722, 1263, - /* 200 */ 1276, 212, -222, -222, -222, -222, -236, -236, -236, 56, - /* 210 */ 429, -179, -132, 169, 1017, 1031, 635, 793, -216, -251, - /* 220 */ -286, -286, 114, 161, 385, -176, 1019, -31, 1280, 570, - /* 230 */ 897, 1093, -219, 994, 198, 1117, 1464, 367, 1481, 634, - /* 240 */ 1506, 59, 51, 1100, 1185, 1115, 649, 1208, 1241, 136, - /* 250 */ 836, 1439, -134, 871, 1333, 1269, 1355, 1414, 1621, 1628, - /* 260 */ 1630, 1637, 519, 1644, -25, -35, 158, 202, 387, 427, - /* 270 */ 588, 767, 855, 845, 909, 957, 1030, 1064, 1136, 1154, - /* 280 */ 1232, 1325, 1336, 1352, 1421, 1514, 1547, 1571, 1600, 1629, - /* 290 */ 1664, 1678, 1698, 1704, 1707, 1726, 1751, 1768, 1821, 1845, - /* 300 */ 1849, 1870, 1872, 1881, 1887, 1899, 1909, 1537, 1935, 1948, - /* 310 */ 1959, 1976, 1983, 2006, 2012, 2014, 2015, 2020, 2021, 1663, - /* 320 */ 1762, 2005, 2024, 2025, 2026, 2027, 1929, 2028, 2030, 1954, - /* 330 */ 1922, 2033, 2034, 1974, 2036, 1064, 1907, 1963, 1964, 1971, - /* 340 */ 1955, 1962, 2035, 1972, 1980, 1982, 1929, 1984, 2040, 2040, - /* 350 */ 2052, 2040, 1920, 1916, 1930, 1977, 2000, 2002, 1999, 2008, - /* 360 */ 1973, 1997, 2009, 2013, 2001, 2016, 2011, 1981, 2049, 2039, - /* 370 */ 2055, 2037, 2042, 1988, 1994, 1995, 1998, 2018, 2023, 2031, - /* 380 */ 2041, 2043, 2069, 2093, 1927, 1961, 1968, 1969, 1965, 1940, - /* 390 */ 1956, 1960, 1987, 1989, 1965, 2096, 1992, 1996, 2003, 2017, - /* 400 */ 2019, 2022, 2032, 2044, 2106, 2107, 2108, 2045, 2047, 2050, - /* 410 */ 2053, 2057, 2056, 2058, 2046, 2051, 2054, 2061, 2071, 2074, - /* 420 */ 2080, 2083, 2092, 2088, 2087, 2143, 2114, 2089, 2147, 2117, - /* 430 */ 2090, 2098, 2101, 2095, 2097, 2110, 2100, 2112, 2116, 2158, - /* 440 */ 2129, 2076, 2084, 2166, 2136, 2168, 2138, 2133, 2152, 2153, - /* 450 */ 2154, 2160, 2151, 2155, 2141, 2162, 2172, 2164, 2169, 2170, - /* 460 */ 2171, 2156, 2187, 2134, 2139, 2140, 2121, 2125, 2142, 2102, - /* 470 */ 2115, 2137, 2145, 2200, 2202, 2165, 2173, 2203, 2175, 2176, - /* 480 */ 2118, 2119, 2120, 2126, 2060, 2091, 2122, 2123, 2127, 2128, - /* 490 */ 2068, 2070, 2204, 2222, 2226, 2229, 2232, 2207, 2218, 2219, - /* 500 */ 2223, 2225, 2210, 2242, + /* 0 */ 1623, 975, 1192, 1022, 1318, -215, 468, -143, -24, 928, + /* 10 */ 319, 1272, 1201, 1277, 998, 166, 471, 753, 949, 1065, + /* 20 */ 1182, 1296, 1273, 1308, 1330, 1344, 1358, 1363, 1386, 1410, + /* 30 */ 1436, 1440, 1422, -178, 143, -204, 235, 1034, 255, 258, + /* 40 */ 280, 328, 395, 398, 401, -216, 303, 444, 935, 1466, + /* 50 */ 1532, 1575, 1625, 1672, 1681, 1708, 1709, 1726, 1745, 1750, + /* 60 */ 1751, 1754, 1766, 1770, 1773, 1778, 1785, 1795, 1809, 1814, + /* 70 */ 1818, 1828, 1832, 1835, 1838, 1842, 1850, 1859, 1871, 1874, + /* 80 */ 1875, 1890, 1895, 1896, 1902, 1905, 1911, 1914, 1917, 1929, + /* 90 */ 1936, 1950, 1958, 1959, 1964, 1976, 1979, 1983, 1986, 1991, + /* 100 */ 1995, 2003, 2019, 2022, 601, 674, 31, 313, 173, 56, + /* 110 */ 497, 1568, 670, 982, 1159, 1462, 605, 1799, 1191, 420, + /* 120 */ 852, 420, 852, -221, -221, -221, -221, -221, -221, -221, + /* 130 */ -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + /* 140 */ -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + /* 150 */ -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + /* 160 */ -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + /* 170 */ -221, -221, -221, -221, -221, -202, -142, -203, -140, 238, + /* 180 */ 378, 1094, 1287, 1503, 1523, 1185, 29, -145, 445, -158, + /* 190 */ 698, 1731, 929, 1035, 1220, -148, -221, -219, 1328, 1388, + /* 200 */ 1428, 621, -221, -221, -221, -221, -224, -224, -224, -151, + /* 210 */ -199, 930, 931, 1098, -218, -213, -201, 53, 288, 500, + /* 220 */ -240, -240, -194, 114, 1030, 855, 385, 1256, 507, 832, + /* 230 */ 1332, 1145, 926, 1223, 1092, 1116, 1170, 1198, 1394, 13, + /* 240 */ 1130, 627, 1202, 1299, 1355, 1059, 903, 1378, 1510, -85, + /* 250 */ 1432, 1464, 1443, 1320, 1596, 1507, 1520, 1541, 1659, 1679, + /* 260 */ 1702, 1706, 1334, 1714, -256, 220, 271, 278, 447, 459, + /* 270 */ 519, 675, 737, 911, 958, 1042, 1070, 1108, 1288, 1325, + /* 280 */ 1452, 1534, 1616, 1647, 1742, 1756, 1763, 1775, 1812, 1820, + /* 290 */ 1826, 1830, 1834, 1845, 1851, 1855, 886, 1857, 1878, 1887, + /* 300 */ 1899, 1908, 1920, 1931, 1942, 1944, 1956, 1960, 1347, 1483, + /* 310 */ 1606, 1962, 1969, 1971, 1977, 1633, 1981, 1985, 941, 1771, + /* 320 */ 1987, 1993, 2005, 2007, 2018, 2034, 2038, 2044, 2045, 2046, + /* 330 */ 2047, 2048, 2049, 1825, 2050, 958, 1921, 1767, 1827, 1943, + /* 340 */ 2039, 1978, 1980, 1984, 1988, 1633, 1989, 2053, 1990, 1992, + /* 350 */ 1994, 2053, 2066, 2053, 1932, 1941, 1996, 2009, 2014, 2011, + /* 360 */ 2020, 1982, 2010, 2023, 2025, 2013, 2027, 2016, 1997, 2057, + /* 370 */ 2051, 2065, 2052, 2054, 2004, 2006, 2015, 2017, 2021, 2028, + /* 380 */ 2033, 2036, 2055, 2060, 1947, 2070, 2100, 1937, 1975, 1998, + /* 390 */ 1999, 2008, 2029, 2030, 2000, 2031, 2035, 2040, 2041, 2105, + /* 400 */ 2107, 2108, 2042, 2056, 2058, 2061, 2067, 2063, 2064, 2062, + /* 410 */ 2071, 2072, 2074, 2068, 2078, 2069, 2085, 2075, 2086, 2088, + /* 420 */ 2142, 2113, 2087, 2149, 2115, 2090, 2101, 2104, 2093, 2099, + /* 430 */ 2110, 2097, 2112, 2124, 2162, 2134, 2080, 2089, 2167, 2138, + /* 440 */ 2168, 2140, 2135, 2154, 2155, 2156, 2163, 2157, 2158, 2143, + /* 450 */ 2161, 2171, 2166, 2173, 2170, 2174, 2160, 2188, 2141, 2139, + /* 460 */ 2147, 2122, 2126, 2148, 2094, 2096, 2150, 2151, 2201, 2206, + /* 470 */ 2169, 2176, 2082, 2077, 2076, 2079, 2081, 2082, 2083, 2223, + /* 480 */ 2212, 2185, 2190, 2114, 2127, 2128, 2136, 2084, 2111, 2116, + /* 490 */ 2119, 2121, 2123, 2211, 2232, 2238, 2239, 2242, 2219, 2230, + /* 500 */ 2231, 2236, 2237, 2228, 2095, 2120, 2255, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1730, 1730, 1730, 1784, 1590, 1878, 1590, 1590, 1590, 1590, - /* 10 */ 1784, 1784, 1784, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 20 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1649, 1590, 1590, - /* 30 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 40 */ 1590, 1590, 1590, 1590, 1590, 1807, 1807, 1941, 1856, 1590, - /* 50 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 60 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 70 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 80 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 90 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 100 */ 1590, 1590, 1590, 1590, 1590, 1590, 1986, 1986, 1590, 1590, - /* 110 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1732, - /* 120 */ 1731, 1590, 1590, 1874, 1590, 1590, 1590, 1751, 1590, 1590, - /* 130 */ 1590, 1590, 1590, 1590, 1785, 1786, 1590, 1590, 1590, 1590, - /* 140 */ 2089, 1945, 1938, 1942, 1757, 1756, 1755, 1754, 1906, 1888, - /* 150 */ 1866, 1870, 1876, 1875, 1785, 1645, 1646, 1644, 1648, 1590, - /* 160 */ 1786, 1776, 1782, 1775, 1641, 1635, 1634, 1633, 1774, 1642, - /* 170 */ 1638, 1632, 1773, 1777, 1771, 1590, 1654, 1590, 1590, 1590, - /* 180 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1958, 1710, - /* 190 */ 1590, 1590, 1590, 1590, 1590, 1788, 1772, 1856, 1789, 1602, - /* 200 */ 1600, 1590, 1779, 1778, 1781, 1780, 1827, 1660, 1659, 1590, - /* 210 */ 1590, 1946, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1986, - /* 220 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 230 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 240 */ 1590, 1890, 1590, 1986, 1986, 1590, 1856, 1986, 1986, 2032, - /* 250 */ 1748, 1748, 1605, 1871, 1605, 2026, 2012, 1969, 1855, 1855, - /* 260 */ 1855, 1855, 1878, 1855, 1590, 1590, 1590, 1590, 2042, 1590, - /* 270 */ 2043, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 280 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 290 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1935, 1933, - /* 300 */ 1590, 1840, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 310 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 320 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1859, - /* 330 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1859, 1859, 1835, - /* 340 */ 1590, 1899, 1714, 1859, 1859, 1859, 1864, 1859, 1716, 1715, - /* 350 */ 1862, 1848, 1590, 1590, 1956, 1829, 1760, 1750, 1863, 1750, - /* 360 */ 1911, 1865, 1760, 1760, 1865, 1760, 1863, 1911, 1681, 1704, - /* 370 */ 1674, 1807, 1590, 1890, 1890, 1890, 1890, 1863, 1871, 1871, - /* 380 */ 1807, 1807, 1647, 1862, 1590, 1590, 1590, 2018, 2087, 2084, - /* 390 */ 2056, 2054, 2056, 2054, 2086, 1626, 1590, 1590, 1590, 2018, - /* 400 */ 2020, 1946, 1940, 1940, 1626, 1626, 1626, 1843, 1843, 1839, - /* 410 */ 1839, 1839, 1829, 1829, 1819, 1819, 1819, 1819, 1767, 1758, - /* 420 */ 1873, 1871, 1739, 1873, 1871, 1626, 1953, 1865, 1626, 1953, - /* 430 */ 1865, 1767, 1767, 1865, 1758, 1739, 1865, 1739, 1724, 1626, - /* 440 */ 1953, 1905, 1903, 1626, 1953, 1626, 1953, 1724, 1712, 1712, - /* 450 */ 1712, 1696, 1590, 1590, 1724, 1712, 1681, 1712, 1696, 1712, - /* 460 */ 1712, 1699, 1626, 1873, 1871, 1873, 1869, 1867, 1865, 1996, - /* 470 */ 1996, 1810, 1810, 1628, 1626, 1728, 1728, 1590, 1590, 1724, - /* 480 */ 2004, 1974, 1974, 1969, 2096, 2033, 2032, 2033, 2032, 2033, - /* 490 */ 2078, 2078, 1662, 1856, 1856, 1856, 1856, 1662, 1683, 1683, - /* 500 */ 1714, 1714, 1662, 1856, 1590, 1590, 1590, 1590, 1590, 1590, - /* 510 */ 1590, 1590, 1606, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 520 */ 1590, 1590, 1590, 1918, 1828, 1744, 1590, 1590, 1590, 1590, - /* 530 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 540 */ 1590, 1590, 1590, 1590, 1721, 1590, 1590, 1590, 1590, 1590, - /* 550 */ 1590, 1590, 1590, 1590, 1612, 1590, 1948, 2100, 1590, 1590, - /* 560 */ 1590, 1590, 1964, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 570 */ 2027, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 580 */ 2013, 1590, 1590, 2085, 1590, 1590, 1590, 2077, 1590, 2075, - /* 590 */ 2042, 1590, 2074, 2073, 2072, 2071, 1590, 1590, 1590, 1590, - /* 600 */ 1590, 1590, 1590, 1590, 2015, 1590, 1590, 1590, 2014, 1590, - /* 610 */ 1590, 1590, 1590, 2010, 1590, 1590, 1590, 1590, 1590, 1590, - /* 620 */ 1834, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 630 */ 1745, 1752, 1753, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 640 */ 1590, 1590, 1766, 1590, 1590, 1590, 1761, 1590, 1590, 1590, - /* 650 */ 1590, 1590, 1590, 1590, 1590, 1909, 1590, 1590, 1590, 1590, - /* 660 */ 1902, 1901, 1590, 1590, 1816, 1590, 1590, 1590, 1590, 1590, - /* 670 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1679, 1590, 1590, - /* 680 */ 1590, 1590, 1590, 1590, 1652, 1590, 1590, 1590, 1590, 1590, - /* 690 */ 1590, 1590, 1868, 1590, 1590, 1590, 1590, 2001, 1590, 1590, - /* 700 */ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 710 */ 1590, 1590, 1590, 1590, 1590, 1590, 1872, 1590, 1590, 1783, - /* 720 */ 1590, 1590, 1590, 1590, 1590, 1963, 1590, 1962, 1590, 1590, - /* 730 */ 1590, 1590, 1590, 1797, 1590, 1590, 1590, 1590, 1616, 1590, - /* 740 */ 1590, 1590, 1613, 1590, 1590, 1590, 1590, 1590, 1590, 1590, - /* 750 */ 1590, + /* 0 */ 1744, 1744, 1744, 1798, 1604, 1892, 1604, 1604, 1604, 1604, + /* 10 */ 1798, 1798, 1604, 1798, 1604, 1604, 1604, 1604, 1604, 1604, + /* 20 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1663, + /* 30 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 40 */ 1604, 1604, 1604, 1604, 1604, 1821, 1821, 1955, 1870, 1604, + /* 50 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 60 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 70 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 80 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 90 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 100 */ 1604, 1604, 1604, 1604, 1604, 1604, 2000, 2000, 1604, 1604, + /* 110 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1746, + /* 120 */ 1745, 1604, 1604, 1888, 1604, 1604, 1765, 1604, 1604, 1604, + /* 130 */ 1604, 1604, 1604, 1799, 1800, 1604, 1604, 1604, 1604, 1604, + /* 140 */ 2107, 1959, 1952, 1956, 1771, 1770, 1769, 1768, 1920, 1902, + /* 150 */ 1880, 1884, 1890, 1889, 1799, 1659, 1660, 1658, 1662, 1604, + /* 160 */ 1800, 1790, 1796, 1789, 1655, 1649, 1648, 1647, 1788, 1656, + /* 170 */ 1652, 1646, 1787, 1791, 1785, 1668, 1604, 1604, 1604, 1604, + /* 180 */ 1604, 1604, 1604, 1604, 1604, 1972, 1724, 1604, 1604, 1604, + /* 190 */ 1604, 1604, 1604, 1604, 1604, 1802, 1786, 1870, 1803, 1616, + /* 200 */ 1614, 1604, 1793, 1792, 1795, 1794, 1841, 1674, 1673, 1960, + /* 210 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 2000, 1604, 1604, + /* 220 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 230 */ 1604, 1604, 1604, 1604, 1904, 1604, 2000, 2000, 1604, 1604, + /* 240 */ 1604, 1604, 1604, 1604, 1604, 1604, 1870, 2000, 2000, 2046, + /* 250 */ 1762, 1762, 1619, 1885, 1619, 2040, 2026, 1983, 1869, 1869, + /* 260 */ 1869, 1869, 1892, 1869, 1604, 1604, 1604, 1604, 2057, 1604, + /* 270 */ 1604, 1604, 1604, 1604, 1604, 1604, 2058, 1604, 1604, 1604, + /* 280 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1949, 1947, 1604, + /* 290 */ 1854, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 300 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 310 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1873, 1604, + /* 320 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 330 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1849, 1604, 1913, + /* 340 */ 1728, 1873, 1873, 1873, 1873, 1878, 1873, 1730, 1873, 1873, + /* 350 */ 1873, 1729, 1876, 1862, 1604, 1970, 1843, 1774, 1764, 1877, + /* 360 */ 1764, 1925, 1879, 1774, 1774, 1879, 1774, 1877, 1925, 1695, + /* 370 */ 1718, 1688, 1821, 1604, 1904, 1904, 1904, 1904, 1904, 1877, + /* 380 */ 1885, 1885, 1821, 1821, 1604, 1661, 1876, 1604, 1604, 1604, + /* 390 */ 2032, 1604, 1604, 1604, 2032, 2034, 1960, 1954, 1954, 1640, + /* 400 */ 1640, 1640, 1857, 1857, 1853, 1853, 1853, 1843, 1843, 1833, + /* 410 */ 1833, 1833, 1833, 1781, 1772, 1887, 1885, 1753, 1887, 1885, + /* 420 */ 1640, 1967, 1879, 1640, 1967, 1879, 1781, 1781, 1879, 1772, + /* 430 */ 1753, 1879, 1753, 1738, 1640, 1967, 1919, 1917, 1640, 1967, + /* 440 */ 1640, 1967, 1738, 1726, 1726, 1726, 1710, 1604, 1604, 1738, + /* 450 */ 1726, 1695, 1726, 1710, 1726, 1726, 1713, 1640, 1887, 1885, + /* 460 */ 1887, 1883, 1881, 1879, 2010, 2010, 1824, 1824, 1642, 1640, + /* 470 */ 1742, 1742, 2101, 2071, 2069, 2071, 2069, 2102, 2099, 1640, + /* 480 */ 1604, 1604, 1738, 2018, 1988, 1988, 1983, 2114, 2047, 2046, + /* 490 */ 2047, 2046, 2047, 1676, 1870, 1870, 1870, 1870, 1676, 1697, + /* 500 */ 1697, 1728, 1728, 1676, 2093, 2093, 1870, 1604, 1604, 1604, + /* 510 */ 1604, 1604, 1604, 1604, 1604, 1620, 1604, 1604, 1604, 1604, + /* 520 */ 1604, 1604, 1932, 1842, 1758, 1604, 1604, 1604, 1604, 1604, + /* 530 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 540 */ 1604, 1604, 1604, 1735, 1604, 1604, 1604, 1604, 1604, 1604, + /* 550 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1626, 1604, 1962, + /* 560 */ 2118, 1604, 1604, 1604, 1604, 1978, 1604, 1604, 1604, 1604, + /* 570 */ 1604, 1604, 1604, 2041, 1604, 1604, 1604, 1604, 1604, 1604, + /* 580 */ 1604, 1604, 1604, 2027, 1604, 1604, 1604, 1604, 1604, 2029, + /* 590 */ 1604, 1604, 1604, 2028, 1604, 1604, 1604, 1604, 2024, 1604, + /* 600 */ 1604, 1604, 1604, 1604, 1604, 1848, 1604, 1604, 1604, 1604, + /* 610 */ 1604, 1604, 1604, 1604, 1604, 1759, 1766, 1767, 1604, 1604, + /* 620 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1780, 1604, 1604, + /* 630 */ 1604, 1775, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 640 */ 1923, 1604, 1604, 1604, 1604, 1916, 1915, 1604, 1604, 1830, + /* 650 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 660 */ 1604, 1604, 1693, 1604, 1604, 1604, 1604, 1604, 1604, 1666, + /* 670 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1882, 1604, + /* 680 */ 1604, 1604, 1604, 2015, 1604, 1604, 1604, 1604, 1604, 1604, + /* 690 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, + /* 700 */ 1604, 1604, 1886, 1604, 1604, 1797, 1604, 1604, 1604, 1604, + /* 710 */ 1604, 2092, 1604, 2090, 2057, 1604, 2089, 2088, 2087, 2086, + /* 720 */ 1604, 1604, 1604, 1604, 2100, 1604, 1604, 1604, 1604, 1604, + /* 730 */ 1604, 1977, 1604, 1976, 1604, 1604, 1604, 1604, 1604, 1811, + /* 740 */ 1604, 1604, 1604, 1604, 1630, 1604, 1604, 1604, 1627, 1604, + /* 750 */ 1604, 1604, 1604, 1604, 1604, 1604, 1604, }; /********** End of lemon-generated parsing tables *****************************/ @@ -14975,30 +14979,31 @@ static const char *const yyTokenName[] = { /* 352 */ "select_body_end", /* 353 */ "perfetto_pipe", /* 354 */ "perfetto_pipe_source", - /* 355 */ "perfetto_tree_direction", - /* 356 */ "perfetto_tree_aggregate", - /* 357 */ "perfetto_tree_aggregate_list", - /* 358 */ "perfetto_pipe_column", - /* 359 */ "perfetto_pipe_named_column", - /* 360 */ "perfetto_pipe_name_list", - /* 361 */ "perfetto_pipe_replace_item", - /* 362 */ "perfetto_pipe_replace_list", - /* 363 */ "perfetto_pipe_except", - /* 364 */ "perfetto_pipe_replace", - /* 365 */ "perfetto_pipe_select_item", - /* 366 */ "perfetto_pipe_select_list", - /* 367 */ "perfetto_pipe_rename_item", - /* 368 */ "perfetto_pipe_rename_list", - /* 369 */ "perfetto_pipe_set_item", - /* 370 */ "perfetto_pipe_set_list", - /* 371 */ "perfetto_pipe_stage", - /* 372 */ "perfetto_pipe_stage_list", - /* 373 */ "perfetto_pipe_source_list", - /* 374 */ "perfetto_per_col_list", - /* 375 */ "perfetto_per", - /* 376 */ "perfetto_pipeline", - /* 377 */ "before_macro_body", - /* 378 */ "perfetto_macro_body", + /* 355 */ "perfetto_pipeline", + /* 356 */ "perfetto_tree_direction", + /* 357 */ "perfetto_tree_aggregate", + /* 358 */ "perfetto_tree_aggregate_list", + /* 359 */ "perfetto_pipe_column", + /* 360 */ "perfetto_pipe_named_column", + /* 361 */ "perfetto_pipe_name_list", + /* 362 */ "perfetto_pipe_replace_item", + /* 363 */ "perfetto_pipe_replace_list", + /* 364 */ "perfetto_pipe_except", + /* 365 */ "perfetto_pipe_replace", + /* 366 */ "perfetto_pipe_select_item", + /* 367 */ "perfetto_pipe_select_list", + /* 368 */ "perfetto_pipe_rename_item", + /* 369 */ "perfetto_pipe_rename_list", + /* 370 */ "perfetto_pipe_set_item", + /* 371 */ "perfetto_pipe_set_list", + /* 372 */ "perfetto_pipe_stage", + /* 373 */ "perfetto_pipe_stage_list", + /* 374 */ "perfetto_pipe_source_list", + /* 375 */ "perfetto_per_col_list", + /* 376 */ "perfetto_per", + /* 377 */ "perfetto_subquery_pipeline", + /* 378 */ "before_macro_body", + /* 379 */ "perfetto_macro_body", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -15450,71 +15455,75 @@ static const char *const yyRuleName[] = { /* 441 */ "perfetto_pipe ::= BITOR GT", /* 442 */ "perfetto_pipe_source ::= nm dbnm as", /* 443 */ "perfetto_pipe_source ::= LP select RP as", - /* 444 */ "perfetto_tree_direction ::= UP", - /* 445 */ "perfetto_tree_direction ::= DOWN", - /* 446 */ "perfetto_tree_aggregate ::= expr AS nm", - /* 447 */ "perfetto_tree_aggregate_list ::= perfetto_tree_aggregate", - /* 448 */ "perfetto_tree_aggregate_list ::= perfetto_tree_aggregate_list COMMA perfetto_tree_aggregate", - /* 449 */ "perfetto_pipe_column ::= nm", - /* 450 */ "perfetto_pipe_column ::= nm DOT nm", - /* 451 */ "perfetto_pipe_named_column ::= nm AS nm", - /* 452 */ "perfetto_pipe_named_column ::= nm nm", - /* 453 */ "perfetto_pipe_named_column ::= nm DOT nm AS nm", - /* 454 */ "perfetto_pipe_named_column ::= nm DOT nm nm", - /* 455 */ "perfetto_pipe_name_list ::= nm", - /* 456 */ "perfetto_pipe_name_list ::= perfetto_pipe_name_list COMMA nm", - /* 457 */ "perfetto_pipe_replace_item ::= nm AS nm", - /* 458 */ "perfetto_pipe_replace_item ::= nm DOT nm AS nm", - /* 459 */ "perfetto_pipe_replace_list ::= perfetto_pipe_replace_item", - /* 460 */ "perfetto_pipe_replace_list ::= perfetto_pipe_replace_list COMMA perfetto_pipe_replace_item", - /* 461 */ "perfetto_pipe_except ::=", - /* 462 */ "perfetto_pipe_except ::= EXCEPT LP perfetto_pipe_name_list RP", - /* 463 */ "perfetto_pipe_replace ::=", - /* 464 */ "perfetto_pipe_replace ::= REPLACE LP perfetto_pipe_replace_list RP", - /* 465 */ "perfetto_pipe_select_item ::= perfetto_pipe_column", - /* 466 */ "perfetto_pipe_select_item ::= perfetto_pipe_named_column", - /* 467 */ "perfetto_pipe_select_item ::= STAR perfetto_pipe_except perfetto_pipe_replace", - /* 468 */ "perfetto_pipe_select_item ::= nm DOT STAR perfetto_pipe_except perfetto_pipe_replace", - /* 469 */ "perfetto_pipe_select_list ::= perfetto_pipe_select_item", - /* 470 */ "perfetto_pipe_select_list ::= perfetto_pipe_select_list COMMA perfetto_pipe_select_item", - /* 471 */ "perfetto_pipe_rename_item ::= nm AS nm", - /* 472 */ "perfetto_pipe_rename_item ::= nm nm", - /* 473 */ "perfetto_pipe_rename_list ::= perfetto_pipe_rename_item", - /* 474 */ "perfetto_pipe_rename_list ::= perfetto_pipe_rename_list COMMA perfetto_pipe_rename_item", - /* 475 */ "perfetto_pipe_set_item ::= nm EQ perfetto_pipe_column", - /* 476 */ "perfetto_pipe_set_list ::= perfetto_pipe_set_item", - /* 477 */ "perfetto_pipe_set_list ::= perfetto_pipe_set_list COMMA perfetto_pipe_set_item", - /* 478 */ "perfetto_pipe_stage ::= SELECT perfetto_pipe_select_list", - /* 479 */ "perfetto_pipe_stage ::= EXTEND perfetto_pipe_select_list", - /* 480 */ "perfetto_pipe_stage ::= DROP perfetto_pipe_name_list", - /* 481 */ "perfetto_pipe_stage ::= RENAME perfetto_pipe_rename_list", - /* 482 */ "perfetto_pipe_stage ::= SET perfetto_pipe_set_list", - /* 483 */ "perfetto_pipe_stage ::= AS nm", - /* 484 */ "perfetto_pipe_stage ::= TREE ACCUMULATE perfetto_tree_direction perfetto_tree_aggregate_list", - /* 485 */ "perfetto_pipe_stage_list ::=", - /* 486 */ "perfetto_pipe_stage_list ::= perfetto_pipe_stage_list perfetto_pipe perfetto_pipe_stage", - /* 487 */ "perfetto_pipe_source_list ::= perfetto_pipe_source", - /* 488 */ "perfetto_pipe_source_list ::= perfetto_pipe_source_list COMMA perfetto_pipe_source", - /* 489 */ "perfetto_per_col_list ::= nm", - /* 490 */ "perfetto_per_col_list ::= perfetto_per_col_list COMMA nm", - /* 491 */ "perfetto_per ::=", - /* 492 */ "perfetto_per ::= PER perfetto_per_col_list", - /* 493 */ "perfetto_pipeline ::= FROM perfetto_pipe_source perfetto_pipe_stage_list", - /* 494 */ "perfetto_pipeline ::= INTERVAL INTERSECTION OF LP perfetto_pipe_source_list RP perfetto_per perfetto_pipe_stage_list", - /* 495 */ "cmd ::= perfetto_pipeline", - /* 496 */ "cmd ::= PERFETTO PRAGMA nm EQ expr", - /* 497 */ "cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS select_body_start select select_body_end", - /* 498 */ "cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS perfetto_pipeline", - /* 499 */ "cmd ::= CREATE perfetto_or_replace PERFETTO VIEW nm perfetto_table_schema AS select_body_start select select_body_end", - /* 500 */ "cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type AS select_body_start select select_body_end", - /* 501 */ "cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type DELEGATES TO ID", - /* 502 */ "cmd ::= CREATE perfetto_or_replace PERFETTO INDEX nm ON nm LP perfetto_indexed_col_list RP", - /* 503 */ "before_macro_body ::=", - /* 504 */ "perfetto_macro_body ::= ANY", - /* 505 */ "perfetto_macro_body ::= perfetto_macro_body ANY", - /* 506 */ "cmd ::= CREATE perfetto_or_replace PERFETTO MACRO nm LP perfetto_macro_arg_list RP RETURNS ID before_macro_body AS perfetto_macro_body", - /* 507 */ "cmd ::= INCLUDE PERFETTO MODULE perfetto_module_name", - /* 508 */ "cmd ::= DROP PERFETTO INDEX nm ON nm", + /* 444 */ "perfetto_pipe_source ::= LP perfetto_pipeline RP as", + /* 445 */ "perfetto_tree_direction ::= UP", + /* 446 */ "perfetto_tree_direction ::= DOWN", + /* 447 */ "perfetto_tree_aggregate ::= expr AS nm", + /* 448 */ "perfetto_tree_aggregate_list ::= perfetto_tree_aggregate", + /* 449 */ "perfetto_tree_aggregate_list ::= perfetto_tree_aggregate_list COMMA perfetto_tree_aggregate", + /* 450 */ "perfetto_pipe_column ::= nm", + /* 451 */ "perfetto_pipe_column ::= nm DOT nm", + /* 452 */ "perfetto_pipe_named_column ::= nm AS nm", + /* 453 */ "perfetto_pipe_named_column ::= nm nm", + /* 454 */ "perfetto_pipe_named_column ::= nm DOT nm AS nm", + /* 455 */ "perfetto_pipe_named_column ::= nm DOT nm nm", + /* 456 */ "perfetto_pipe_name_list ::= nm", + /* 457 */ "perfetto_pipe_name_list ::= perfetto_pipe_name_list COMMA nm", + /* 458 */ "perfetto_pipe_replace_item ::= nm AS nm", + /* 459 */ "perfetto_pipe_replace_item ::= nm DOT nm AS nm", + /* 460 */ "perfetto_pipe_replace_list ::= perfetto_pipe_replace_item", + /* 461 */ "perfetto_pipe_replace_list ::= perfetto_pipe_replace_list COMMA perfetto_pipe_replace_item", + /* 462 */ "perfetto_pipe_except ::=", + /* 463 */ "perfetto_pipe_except ::= EXCEPT LP perfetto_pipe_name_list RP", + /* 464 */ "perfetto_pipe_replace ::=", + /* 465 */ "perfetto_pipe_replace ::= REPLACE LP perfetto_pipe_replace_list RP", + /* 466 */ "perfetto_pipe_select_item ::= perfetto_pipe_column", + /* 467 */ "perfetto_pipe_select_item ::= perfetto_pipe_named_column", + /* 468 */ "perfetto_pipe_select_item ::= STAR perfetto_pipe_except perfetto_pipe_replace", + /* 469 */ "perfetto_pipe_select_item ::= nm DOT STAR perfetto_pipe_except perfetto_pipe_replace", + /* 470 */ "perfetto_pipe_select_list ::= perfetto_pipe_select_item", + /* 471 */ "perfetto_pipe_select_list ::= perfetto_pipe_select_list COMMA perfetto_pipe_select_item", + /* 472 */ "perfetto_pipe_rename_item ::= nm AS nm", + /* 473 */ "perfetto_pipe_rename_item ::= nm nm", + /* 474 */ "perfetto_pipe_rename_list ::= perfetto_pipe_rename_item", + /* 475 */ "perfetto_pipe_rename_list ::= perfetto_pipe_rename_list COMMA perfetto_pipe_rename_item", + /* 476 */ "perfetto_pipe_set_item ::= nm EQ perfetto_pipe_column", + /* 477 */ "perfetto_pipe_set_list ::= perfetto_pipe_set_item", + /* 478 */ "perfetto_pipe_set_list ::= perfetto_pipe_set_list COMMA perfetto_pipe_set_item", + /* 479 */ "perfetto_pipe_stage ::= SELECT perfetto_pipe_select_list", + /* 480 */ "perfetto_pipe_stage ::= EXTEND perfetto_pipe_select_list", + /* 481 */ "perfetto_pipe_stage ::= DROP perfetto_pipe_name_list", + /* 482 */ "perfetto_pipe_stage ::= RENAME perfetto_pipe_rename_list", + /* 483 */ "perfetto_pipe_stage ::= SET perfetto_pipe_set_list", + /* 484 */ "perfetto_pipe_stage ::= AS nm", + /* 485 */ "perfetto_pipe_stage ::= TREE ACCUMULATE perfetto_tree_direction perfetto_tree_aggregate_list", + /* 486 */ "perfetto_pipe_stage_list ::=", + /* 487 */ "perfetto_pipe_stage_list ::= perfetto_pipe_stage_list perfetto_pipe perfetto_pipe_stage", + /* 488 */ "perfetto_pipe_source_list ::= perfetto_pipe_source", + /* 489 */ "perfetto_pipe_source_list ::= perfetto_pipe_source_list COMMA perfetto_pipe_source", + /* 490 */ "perfetto_per_col_list ::= nm", + /* 491 */ "perfetto_per_col_list ::= perfetto_per_col_list COMMA nm", + /* 492 */ "perfetto_per ::=", + /* 493 */ "perfetto_per ::= PER perfetto_per_col_list", + /* 494 */ "perfetto_pipeline ::= FROM perfetto_pipe_source perfetto_pipe_stage_list", + /* 495 */ "perfetto_pipeline ::= INTERVAL INTERSECTION OF LP perfetto_pipe_source_list RP perfetto_per perfetto_pipe_stage_list", + /* 496 */ "cmd ::= perfetto_pipeline", + /* 497 */ "perfetto_subquery_pipeline ::= perfetto_pipeline", + /* 498 */ "seltablist ::= stl_prefix LP perfetto_subquery_pipeline RP as on_using", + /* 499 */ "wqitem ::= withnm eidlist_opt wqas LP perfetto_subquery_pipeline RP", + /* 500 */ "cmd ::= PERFETTO PRAGMA nm EQ expr", + /* 501 */ "cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS select_body_start select select_body_end", + /* 502 */ "cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS perfetto_pipeline", + /* 503 */ "cmd ::= CREATE perfetto_or_replace PERFETTO VIEW nm perfetto_table_schema AS select_body_start select select_body_end", + /* 504 */ "cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type AS select_body_start select select_body_end", + /* 505 */ "cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type DELEGATES TO ID", + /* 506 */ "cmd ::= CREATE perfetto_or_replace PERFETTO INDEX nm ON nm LP perfetto_indexed_col_list RP", + /* 507 */ "before_macro_body ::=", + /* 508 */ "perfetto_macro_body ::= ANY", + /* 509 */ "perfetto_macro_body ::= perfetto_macro_body ANY", + /* 510 */ "cmd ::= CREATE perfetto_or_replace PERFETTO MACRO nm LP perfetto_macro_arg_list RP RETURNS ID before_macro_body AS perfetto_macro_body", + /* 511 */ "cmd ::= INCLUDE PERFETTO MODULE perfetto_module_name", + /* 512 */ "cmd ::= DROP PERFETTO INDEX nm ON nm", }; #endif /* NDEBUG */ @@ -16384,71 +16393,75 @@ static const YYCODETYPE yyRuleInfoLhs[] = { 353, /* (441) perfetto_pipe ::= BITOR GT */ 354, /* (442) perfetto_pipe_source ::= nm dbnm as */ 354, /* (443) perfetto_pipe_source ::= LP select RP as */ - 355, /* (444) perfetto_tree_direction ::= UP */ - 355, /* (445) perfetto_tree_direction ::= DOWN */ - 356, /* (446) perfetto_tree_aggregate ::= expr AS nm */ - 357, /* (447) perfetto_tree_aggregate_list ::= perfetto_tree_aggregate */ - 357, /* (448) perfetto_tree_aggregate_list ::= perfetto_tree_aggregate_list COMMA perfetto_tree_aggregate */ - 358, /* (449) perfetto_pipe_column ::= nm */ - 358, /* (450) perfetto_pipe_column ::= nm DOT nm */ - 359, /* (451) perfetto_pipe_named_column ::= nm AS nm */ - 359, /* (452) perfetto_pipe_named_column ::= nm nm */ - 359, /* (453) perfetto_pipe_named_column ::= nm DOT nm AS nm */ - 359, /* (454) perfetto_pipe_named_column ::= nm DOT nm nm */ - 360, /* (455) perfetto_pipe_name_list ::= nm */ - 360, /* (456) perfetto_pipe_name_list ::= perfetto_pipe_name_list COMMA nm */ - 361, /* (457) perfetto_pipe_replace_item ::= nm AS nm */ - 361, /* (458) perfetto_pipe_replace_item ::= nm DOT nm AS nm */ - 362, /* (459) perfetto_pipe_replace_list ::= perfetto_pipe_replace_item */ - 362, /* (460) perfetto_pipe_replace_list ::= perfetto_pipe_replace_list COMMA perfetto_pipe_replace_item */ - 363, /* (461) perfetto_pipe_except ::= */ - 363, /* (462) perfetto_pipe_except ::= EXCEPT LP perfetto_pipe_name_list RP */ - 364, /* (463) perfetto_pipe_replace ::= */ - 364, /* (464) perfetto_pipe_replace ::= REPLACE LP perfetto_pipe_replace_list RP */ - 365, /* (465) perfetto_pipe_select_item ::= perfetto_pipe_column */ - 365, /* (466) perfetto_pipe_select_item ::= perfetto_pipe_named_column */ - 365, /* (467) perfetto_pipe_select_item ::= STAR perfetto_pipe_except perfetto_pipe_replace */ - 365, /* (468) perfetto_pipe_select_item ::= nm DOT STAR perfetto_pipe_except perfetto_pipe_replace */ - 366, /* (469) perfetto_pipe_select_list ::= perfetto_pipe_select_item */ - 366, /* (470) perfetto_pipe_select_list ::= perfetto_pipe_select_list COMMA perfetto_pipe_select_item */ - 367, /* (471) perfetto_pipe_rename_item ::= nm AS nm */ - 367, /* (472) perfetto_pipe_rename_item ::= nm nm */ - 368, /* (473) perfetto_pipe_rename_list ::= perfetto_pipe_rename_item */ - 368, /* (474) perfetto_pipe_rename_list ::= perfetto_pipe_rename_list COMMA perfetto_pipe_rename_item */ - 369, /* (475) perfetto_pipe_set_item ::= nm EQ perfetto_pipe_column */ - 370, /* (476) perfetto_pipe_set_list ::= perfetto_pipe_set_item */ - 370, /* (477) perfetto_pipe_set_list ::= perfetto_pipe_set_list COMMA perfetto_pipe_set_item */ - 371, /* (478) perfetto_pipe_stage ::= SELECT perfetto_pipe_select_list */ - 371, /* (479) perfetto_pipe_stage ::= EXTEND perfetto_pipe_select_list */ - 371, /* (480) perfetto_pipe_stage ::= DROP perfetto_pipe_name_list */ - 371, /* (481) perfetto_pipe_stage ::= RENAME perfetto_pipe_rename_list */ - 371, /* (482) perfetto_pipe_stage ::= SET perfetto_pipe_set_list */ - 371, /* (483) perfetto_pipe_stage ::= AS nm */ - 371, /* (484) perfetto_pipe_stage ::= TREE ACCUMULATE perfetto_tree_direction perfetto_tree_aggregate_list */ - 372, /* (485) perfetto_pipe_stage_list ::= */ - 372, /* (486) perfetto_pipe_stage_list ::= perfetto_pipe_stage_list perfetto_pipe perfetto_pipe_stage */ - 373, /* (487) perfetto_pipe_source_list ::= perfetto_pipe_source */ - 373, /* (488) perfetto_pipe_source_list ::= perfetto_pipe_source_list COMMA perfetto_pipe_source */ - 374, /* (489) perfetto_per_col_list ::= nm */ - 374, /* (490) perfetto_per_col_list ::= perfetto_per_col_list COMMA nm */ - 375, /* (491) perfetto_per ::= */ - 375, /* (492) perfetto_per ::= PER perfetto_per_col_list */ - 376, /* (493) perfetto_pipeline ::= FROM perfetto_pipe_source perfetto_pipe_stage_list */ - 376, /* (494) perfetto_pipeline ::= INTERVAL INTERSECTION OF LP perfetto_pipe_source_list RP perfetto_per perfetto_pipe_stage_list */ - 208, /* (495) cmd ::= perfetto_pipeline */ - 208, /* (496) cmd ::= PERFETTO PRAGMA nm EQ expr */ - 208, /* (497) cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS select_body_start select select_body_end */ - 208, /* (498) cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS perfetto_pipeline */ - 208, /* (499) cmd ::= CREATE perfetto_or_replace PERFETTO VIEW nm perfetto_table_schema AS select_body_start select select_body_end */ - 208, /* (500) cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type AS select_body_start select select_body_end */ - 208, /* (501) cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type DELEGATES TO ID */ - 208, /* (502) cmd ::= CREATE perfetto_or_replace PERFETTO INDEX nm ON nm LP perfetto_indexed_col_list RP */ - 377, /* (503) before_macro_body ::= */ - 378, /* (504) perfetto_macro_body ::= ANY */ - 378, /* (505) perfetto_macro_body ::= perfetto_macro_body ANY */ - 208, /* (506) cmd ::= CREATE perfetto_or_replace PERFETTO MACRO nm LP perfetto_macro_arg_list RP RETURNS ID before_macro_body AS perfetto_macro_body */ - 208, /* (507) cmd ::= INCLUDE PERFETTO MODULE perfetto_module_name */ - 208, /* (508) cmd ::= DROP PERFETTO INDEX nm ON nm */ + 354, /* (444) perfetto_pipe_source ::= LP perfetto_pipeline RP as */ + 356, /* (445) perfetto_tree_direction ::= UP */ + 356, /* (446) perfetto_tree_direction ::= DOWN */ + 357, /* (447) perfetto_tree_aggregate ::= expr AS nm */ + 358, /* (448) perfetto_tree_aggregate_list ::= perfetto_tree_aggregate */ + 358, /* (449) perfetto_tree_aggregate_list ::= perfetto_tree_aggregate_list COMMA perfetto_tree_aggregate */ + 359, /* (450) perfetto_pipe_column ::= nm */ + 359, /* (451) perfetto_pipe_column ::= nm DOT nm */ + 360, /* (452) perfetto_pipe_named_column ::= nm AS nm */ + 360, /* (453) perfetto_pipe_named_column ::= nm nm */ + 360, /* (454) perfetto_pipe_named_column ::= nm DOT nm AS nm */ + 360, /* (455) perfetto_pipe_named_column ::= nm DOT nm nm */ + 361, /* (456) perfetto_pipe_name_list ::= nm */ + 361, /* (457) perfetto_pipe_name_list ::= perfetto_pipe_name_list COMMA nm */ + 362, /* (458) perfetto_pipe_replace_item ::= nm AS nm */ + 362, /* (459) perfetto_pipe_replace_item ::= nm DOT nm AS nm */ + 363, /* (460) perfetto_pipe_replace_list ::= perfetto_pipe_replace_item */ + 363, /* (461) perfetto_pipe_replace_list ::= perfetto_pipe_replace_list COMMA perfetto_pipe_replace_item */ + 364, /* (462) perfetto_pipe_except ::= */ + 364, /* (463) perfetto_pipe_except ::= EXCEPT LP perfetto_pipe_name_list RP */ + 365, /* (464) perfetto_pipe_replace ::= */ + 365, /* (465) perfetto_pipe_replace ::= REPLACE LP perfetto_pipe_replace_list RP */ + 366, /* (466) perfetto_pipe_select_item ::= perfetto_pipe_column */ + 366, /* (467) perfetto_pipe_select_item ::= perfetto_pipe_named_column */ + 366, /* (468) perfetto_pipe_select_item ::= STAR perfetto_pipe_except perfetto_pipe_replace */ + 366, /* (469) perfetto_pipe_select_item ::= nm DOT STAR perfetto_pipe_except perfetto_pipe_replace */ + 367, /* (470) perfetto_pipe_select_list ::= perfetto_pipe_select_item */ + 367, /* (471) perfetto_pipe_select_list ::= perfetto_pipe_select_list COMMA perfetto_pipe_select_item */ + 368, /* (472) perfetto_pipe_rename_item ::= nm AS nm */ + 368, /* (473) perfetto_pipe_rename_item ::= nm nm */ + 369, /* (474) perfetto_pipe_rename_list ::= perfetto_pipe_rename_item */ + 369, /* (475) perfetto_pipe_rename_list ::= perfetto_pipe_rename_list COMMA perfetto_pipe_rename_item */ + 370, /* (476) perfetto_pipe_set_item ::= nm EQ perfetto_pipe_column */ + 371, /* (477) perfetto_pipe_set_list ::= perfetto_pipe_set_item */ + 371, /* (478) perfetto_pipe_set_list ::= perfetto_pipe_set_list COMMA perfetto_pipe_set_item */ + 372, /* (479) perfetto_pipe_stage ::= SELECT perfetto_pipe_select_list */ + 372, /* (480) perfetto_pipe_stage ::= EXTEND perfetto_pipe_select_list */ + 372, /* (481) perfetto_pipe_stage ::= DROP perfetto_pipe_name_list */ + 372, /* (482) perfetto_pipe_stage ::= RENAME perfetto_pipe_rename_list */ + 372, /* (483) perfetto_pipe_stage ::= SET perfetto_pipe_set_list */ + 372, /* (484) perfetto_pipe_stage ::= AS nm */ + 372, /* (485) perfetto_pipe_stage ::= TREE ACCUMULATE perfetto_tree_direction perfetto_tree_aggregate_list */ + 373, /* (486) perfetto_pipe_stage_list ::= */ + 373, /* (487) perfetto_pipe_stage_list ::= perfetto_pipe_stage_list perfetto_pipe perfetto_pipe_stage */ + 374, /* (488) perfetto_pipe_source_list ::= perfetto_pipe_source */ + 374, /* (489) perfetto_pipe_source_list ::= perfetto_pipe_source_list COMMA perfetto_pipe_source */ + 375, /* (490) perfetto_per_col_list ::= nm */ + 375, /* (491) perfetto_per_col_list ::= perfetto_per_col_list COMMA nm */ + 376, /* (492) perfetto_per ::= */ + 376, /* (493) perfetto_per ::= PER perfetto_per_col_list */ + 355, /* (494) perfetto_pipeline ::= FROM perfetto_pipe_source perfetto_pipe_stage_list */ + 355, /* (495) perfetto_pipeline ::= INTERVAL INTERSECTION OF LP perfetto_pipe_source_list RP perfetto_per perfetto_pipe_stage_list */ + 208, /* (496) cmd ::= perfetto_pipeline */ + 377, /* (497) perfetto_subquery_pipeline ::= perfetto_pipeline */ + 299, /* (498) seltablist ::= stl_prefix LP perfetto_subquery_pipeline RP as on_using */ + 267, /* (499) wqitem ::= withnm eidlist_opt wqas LP perfetto_subquery_pipeline RP */ + 208, /* (500) cmd ::= PERFETTO PRAGMA nm EQ expr */ + 208, /* (501) cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS select_body_start select select_body_end */ + 208, /* (502) cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS perfetto_pipeline */ + 208, /* (503) cmd ::= CREATE perfetto_or_replace PERFETTO VIEW nm perfetto_table_schema AS select_body_start select select_body_end */ + 208, /* (504) cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type AS select_body_start select select_body_end */ + 208, /* (505) cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type DELEGATES TO ID */ + 208, /* (506) cmd ::= CREATE perfetto_or_replace PERFETTO INDEX nm ON nm LP perfetto_indexed_col_list RP */ + 378, /* (507) before_macro_body ::= */ + 379, /* (508) perfetto_macro_body ::= ANY */ + 379, /* (509) perfetto_macro_body ::= perfetto_macro_body ANY */ + 208, /* (510) cmd ::= CREATE perfetto_or_replace PERFETTO MACRO nm LP perfetto_macro_arg_list RP RETURNS ID before_macro_body AS perfetto_macro_body */ + 208, /* (511) cmd ::= INCLUDE PERFETTO MODULE perfetto_module_name */ + 208, /* (512) cmd ::= DROP PERFETTO INDEX nm ON nm */ }; /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number @@ -16898,71 +16911,75 @@ static const signed char yyRuleInfoNRhs[] = { -2, /* (441) perfetto_pipe ::= BITOR GT */ -3, /* (442) perfetto_pipe_source ::= nm dbnm as */ -4, /* (443) perfetto_pipe_source ::= LP select RP as */ - -1, /* (444) perfetto_tree_direction ::= UP */ - -1, /* (445) perfetto_tree_direction ::= DOWN */ - -3, /* (446) perfetto_tree_aggregate ::= expr AS nm */ - -1, /* (447) perfetto_tree_aggregate_list ::= perfetto_tree_aggregate */ - -3, /* (448) perfetto_tree_aggregate_list ::= perfetto_tree_aggregate_list COMMA perfetto_tree_aggregate */ - -1, /* (449) perfetto_pipe_column ::= nm */ - -3, /* (450) perfetto_pipe_column ::= nm DOT nm */ - -3, /* (451) perfetto_pipe_named_column ::= nm AS nm */ - -2, /* (452) perfetto_pipe_named_column ::= nm nm */ - -5, /* (453) perfetto_pipe_named_column ::= nm DOT nm AS nm */ - -4, /* (454) perfetto_pipe_named_column ::= nm DOT nm nm */ - -1, /* (455) perfetto_pipe_name_list ::= nm */ - -3, /* (456) perfetto_pipe_name_list ::= perfetto_pipe_name_list COMMA nm */ - -3, /* (457) perfetto_pipe_replace_item ::= nm AS nm */ - -5, /* (458) perfetto_pipe_replace_item ::= nm DOT nm AS nm */ - -1, /* (459) perfetto_pipe_replace_list ::= perfetto_pipe_replace_item */ - -3, /* (460) perfetto_pipe_replace_list ::= perfetto_pipe_replace_list COMMA perfetto_pipe_replace_item */ - 0, /* (461) perfetto_pipe_except ::= */ - -4, /* (462) perfetto_pipe_except ::= EXCEPT LP perfetto_pipe_name_list RP */ - 0, /* (463) perfetto_pipe_replace ::= */ - -4, /* (464) perfetto_pipe_replace ::= REPLACE LP perfetto_pipe_replace_list RP */ - -1, /* (465) perfetto_pipe_select_item ::= perfetto_pipe_column */ - -1, /* (466) perfetto_pipe_select_item ::= perfetto_pipe_named_column */ - -3, /* (467) perfetto_pipe_select_item ::= STAR perfetto_pipe_except perfetto_pipe_replace */ - -5, /* (468) perfetto_pipe_select_item ::= nm DOT STAR perfetto_pipe_except perfetto_pipe_replace */ - -1, /* (469) perfetto_pipe_select_list ::= perfetto_pipe_select_item */ - -3, /* (470) perfetto_pipe_select_list ::= perfetto_pipe_select_list COMMA perfetto_pipe_select_item */ - -3, /* (471) perfetto_pipe_rename_item ::= nm AS nm */ - -2, /* (472) perfetto_pipe_rename_item ::= nm nm */ - -1, /* (473) perfetto_pipe_rename_list ::= perfetto_pipe_rename_item */ - -3, /* (474) perfetto_pipe_rename_list ::= perfetto_pipe_rename_list COMMA perfetto_pipe_rename_item */ - -3, /* (475) perfetto_pipe_set_item ::= nm EQ perfetto_pipe_column */ - -1, /* (476) perfetto_pipe_set_list ::= perfetto_pipe_set_item */ - -3, /* (477) perfetto_pipe_set_list ::= perfetto_pipe_set_list COMMA perfetto_pipe_set_item */ - -2, /* (478) perfetto_pipe_stage ::= SELECT perfetto_pipe_select_list */ - -2, /* (479) perfetto_pipe_stage ::= EXTEND perfetto_pipe_select_list */ - -2, /* (480) perfetto_pipe_stage ::= DROP perfetto_pipe_name_list */ - -2, /* (481) perfetto_pipe_stage ::= RENAME perfetto_pipe_rename_list */ - -2, /* (482) perfetto_pipe_stage ::= SET perfetto_pipe_set_list */ - -2, /* (483) perfetto_pipe_stage ::= AS nm */ - -4, /* (484) perfetto_pipe_stage ::= TREE ACCUMULATE perfetto_tree_direction perfetto_tree_aggregate_list */ - 0, /* (485) perfetto_pipe_stage_list ::= */ - -3, /* (486) perfetto_pipe_stage_list ::= perfetto_pipe_stage_list perfetto_pipe perfetto_pipe_stage */ - -1, /* (487) perfetto_pipe_source_list ::= perfetto_pipe_source */ - -3, /* (488) perfetto_pipe_source_list ::= perfetto_pipe_source_list COMMA perfetto_pipe_source */ - -1, /* (489) perfetto_per_col_list ::= nm */ - -3, /* (490) perfetto_per_col_list ::= perfetto_per_col_list COMMA nm */ - 0, /* (491) perfetto_per ::= */ - -2, /* (492) perfetto_per ::= PER perfetto_per_col_list */ - -3, /* (493) perfetto_pipeline ::= FROM perfetto_pipe_source perfetto_pipe_stage_list */ - -8, /* (494) perfetto_pipeline ::= INTERVAL INTERSECTION OF LP perfetto_pipe_source_list RP perfetto_per perfetto_pipe_stage_list */ - -1, /* (495) cmd ::= perfetto_pipeline */ - -5, /* (496) cmd ::= PERFETTO PRAGMA nm EQ expr */ - -11, /* (497) cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS select_body_start select select_body_end */ - -9, /* (498) cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS perfetto_pipeline */ - -10, /* (499) cmd ::= CREATE perfetto_or_replace PERFETTO VIEW nm perfetto_table_schema AS select_body_start select select_body_end */ - -14, /* (500) cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type AS select_body_start select select_body_end */ - -13, /* (501) cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type DELEGATES TO ID */ - -10, /* (502) cmd ::= CREATE perfetto_or_replace PERFETTO INDEX nm ON nm LP perfetto_indexed_col_list RP */ - 0, /* (503) before_macro_body ::= */ - -1, /* (504) perfetto_macro_body ::= ANY */ - -2, /* (505) perfetto_macro_body ::= perfetto_macro_body ANY */ - -13, /* (506) cmd ::= CREATE perfetto_or_replace PERFETTO MACRO nm LP perfetto_macro_arg_list RP RETURNS ID before_macro_body AS perfetto_macro_body */ - -4, /* (507) cmd ::= INCLUDE PERFETTO MODULE perfetto_module_name */ - -6, /* (508) cmd ::= DROP PERFETTO INDEX nm ON nm */ + -4, /* (444) perfetto_pipe_source ::= LP perfetto_pipeline RP as */ + -1, /* (445) perfetto_tree_direction ::= UP */ + -1, /* (446) perfetto_tree_direction ::= DOWN */ + -3, /* (447) perfetto_tree_aggregate ::= expr AS nm */ + -1, /* (448) perfetto_tree_aggregate_list ::= perfetto_tree_aggregate */ + -3, /* (449) perfetto_tree_aggregate_list ::= perfetto_tree_aggregate_list COMMA perfetto_tree_aggregate */ + -1, /* (450) perfetto_pipe_column ::= nm */ + -3, /* (451) perfetto_pipe_column ::= nm DOT nm */ + -3, /* (452) perfetto_pipe_named_column ::= nm AS nm */ + -2, /* (453) perfetto_pipe_named_column ::= nm nm */ + -5, /* (454) perfetto_pipe_named_column ::= nm DOT nm AS nm */ + -4, /* (455) perfetto_pipe_named_column ::= nm DOT nm nm */ + -1, /* (456) perfetto_pipe_name_list ::= nm */ + -3, /* (457) perfetto_pipe_name_list ::= perfetto_pipe_name_list COMMA nm */ + -3, /* (458) perfetto_pipe_replace_item ::= nm AS nm */ + -5, /* (459) perfetto_pipe_replace_item ::= nm DOT nm AS nm */ + -1, /* (460) perfetto_pipe_replace_list ::= perfetto_pipe_replace_item */ + -3, /* (461) perfetto_pipe_replace_list ::= perfetto_pipe_replace_list COMMA perfetto_pipe_replace_item */ + 0, /* (462) perfetto_pipe_except ::= */ + -4, /* (463) perfetto_pipe_except ::= EXCEPT LP perfetto_pipe_name_list RP */ + 0, /* (464) perfetto_pipe_replace ::= */ + -4, /* (465) perfetto_pipe_replace ::= REPLACE LP perfetto_pipe_replace_list RP */ + -1, /* (466) perfetto_pipe_select_item ::= perfetto_pipe_column */ + -1, /* (467) perfetto_pipe_select_item ::= perfetto_pipe_named_column */ + -3, /* (468) perfetto_pipe_select_item ::= STAR perfetto_pipe_except perfetto_pipe_replace */ + -5, /* (469) perfetto_pipe_select_item ::= nm DOT STAR perfetto_pipe_except perfetto_pipe_replace */ + -1, /* (470) perfetto_pipe_select_list ::= perfetto_pipe_select_item */ + -3, /* (471) perfetto_pipe_select_list ::= perfetto_pipe_select_list COMMA perfetto_pipe_select_item */ + -3, /* (472) perfetto_pipe_rename_item ::= nm AS nm */ + -2, /* (473) perfetto_pipe_rename_item ::= nm nm */ + -1, /* (474) perfetto_pipe_rename_list ::= perfetto_pipe_rename_item */ + -3, /* (475) perfetto_pipe_rename_list ::= perfetto_pipe_rename_list COMMA perfetto_pipe_rename_item */ + -3, /* (476) perfetto_pipe_set_item ::= nm EQ perfetto_pipe_column */ + -1, /* (477) perfetto_pipe_set_list ::= perfetto_pipe_set_item */ + -3, /* (478) perfetto_pipe_set_list ::= perfetto_pipe_set_list COMMA perfetto_pipe_set_item */ + -2, /* (479) perfetto_pipe_stage ::= SELECT perfetto_pipe_select_list */ + -2, /* (480) perfetto_pipe_stage ::= EXTEND perfetto_pipe_select_list */ + -2, /* (481) perfetto_pipe_stage ::= DROP perfetto_pipe_name_list */ + -2, /* (482) perfetto_pipe_stage ::= RENAME perfetto_pipe_rename_list */ + -2, /* (483) perfetto_pipe_stage ::= SET perfetto_pipe_set_list */ + -2, /* (484) perfetto_pipe_stage ::= AS nm */ + -4, /* (485) perfetto_pipe_stage ::= TREE ACCUMULATE perfetto_tree_direction perfetto_tree_aggregate_list */ + 0, /* (486) perfetto_pipe_stage_list ::= */ + -3, /* (487) perfetto_pipe_stage_list ::= perfetto_pipe_stage_list perfetto_pipe perfetto_pipe_stage */ + -1, /* (488) perfetto_pipe_source_list ::= perfetto_pipe_source */ + -3, /* (489) perfetto_pipe_source_list ::= perfetto_pipe_source_list COMMA perfetto_pipe_source */ + -1, /* (490) perfetto_per_col_list ::= nm */ + -3, /* (491) perfetto_per_col_list ::= perfetto_per_col_list COMMA nm */ + 0, /* (492) perfetto_per ::= */ + -2, /* (493) perfetto_per ::= PER perfetto_per_col_list */ + -3, /* (494) perfetto_pipeline ::= FROM perfetto_pipe_source perfetto_pipe_stage_list */ + -8, /* (495) perfetto_pipeline ::= INTERVAL INTERSECTION OF LP perfetto_pipe_source_list RP perfetto_per perfetto_pipe_stage_list */ + -1, /* (496) cmd ::= perfetto_pipeline */ + -1, /* (497) perfetto_subquery_pipeline ::= perfetto_pipeline */ + -6, /* (498) seltablist ::= stl_prefix LP perfetto_subquery_pipeline RP as on_using */ + -6, /* (499) wqitem ::= withnm eidlist_opt wqas LP perfetto_subquery_pipeline RP */ + -5, /* (500) cmd ::= PERFETTO PRAGMA nm EQ expr */ + -11, /* (501) cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS select_body_start select select_body_end */ + -9, /* (502) cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS perfetto_pipeline */ + -10, /* (503) cmd ::= CREATE perfetto_or_replace PERFETTO VIEW nm perfetto_table_schema AS select_body_start select select_body_end */ + -14, /* (504) cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type AS select_body_start select select_body_end */ + -13, /* (505) cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type DELEGATES TO ID */ + -10, /* (506) cmd ::= CREATE perfetto_or_replace PERFETTO INDEX nm ON nm LP perfetto_indexed_col_list RP */ + 0, /* (507) before_macro_body ::= */ + -1, /* (508) perfetto_macro_body ::= ANY */ + -2, /* (509) perfetto_macro_body ::= perfetto_macro_body ANY */ + -13, /* (510) cmd ::= CREATE perfetto_or_replace PERFETTO MACRO nm LP perfetto_macro_arg_list RP RETURNS ID before_macro_body AS perfetto_macro_body */ + -4, /* (511) cmd ::= INCLUDE PERFETTO MODULE perfetto_module_name */ + -6, /* (512) cmd ::= DROP PERFETTO INDEX nm ON nm */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -17007,12 +17024,12 @@ static YYACTIONTYPE yy_reduce( YYMINORTYPE yylhsminor; case 0: /* input ::= cmdlist */ { - pCtx->root = yymsp[0].minor.yy215; + pCtx->root = yymsp[0].minor.yy341; } break; case 1: /* cmdlist ::= cmdlist ecmd */ { - yymsp[-1].minor.yy215 = synq_pass(pCtx, yymsp[0].minor.yy215); // Just use the last command for now + yymsp[-1].minor.yy341 = synq_pass(pCtx, yymsp[0].minor.yy341); // Just use the last command for now } break; case 2: /* cmdlist ::= ecmd */ @@ -17028,26 +17045,26 @@ static YYACTIONTYPE yy_reduce( case 399: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==399); case 410: /* filter_over ::= over_clause */ yytestcase(yyruleno==410); { - yylhsminor.yy215 = yymsp[0].minor.yy215; + yylhsminor.yy341 = yymsp[0].minor.yy341; } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 3: /* ecmd ::= SEMI */ { - yymsp[0].minor.yy215 = SYNTAQLITE_NULL_NODE; + yymsp[0].minor.yy341 = SYNTAQLITE_NULL_NODE; pCtx->stmt_completed = 1; } break; case 4: /* ecmd ::= cmdx SEMI */ case 261: /* sclp ::= selcollist COMMA */ yytestcase(yyruleno==261); { - yylhsminor.yy215 = synq_pass(pCtx, yymsp[-1].minor.yy215); + yylhsminor.yy341 = synq_pass(pCtx, yymsp[-1].minor.yy341); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 5: /* ecmd ::= error SEMI */ { - yymsp[-1].minor.yy215 = SYNTAQLITE_NULL_NODE; + yymsp[-1].minor.yy341 = SYNTAQLITE_NULL_NODE; pCtx->root = SYNTAQLITE_NULL_NODE; pCtx->stmt_completed = 1; } @@ -17055,8 +17072,8 @@ static YYACTIONTYPE yy_reduce( case 6: /* cmdx ::= cmd */ { if (pCtx->pending_explain_mode) { - yylhsminor.yy215 = synq_parse_explain_stmt( - pCtx, (SyntaqliteExplainMode)(pCtx->pending_explain_mode - 1), yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_explain_stmt( + pCtx, (SyntaqliteExplainMode)(pCtx->pending_explain_mode - 1), yymsp[0].minor.yy341); pCtx->pending_explain_mode = 0; // Widen the wrapper node's extents to cover the EXPLAIN / // EXPLAIN QUERY PLAN keyword, otherwise node_text(), @@ -17072,73 +17089,73 @@ static YYACTIONTYPE yy_reduce( // stack top; the `explain` entry sits directly below it — fold it in // and re-record the widened extents on the wrapper node. synq_extent_fold_below_into_top(pCtx); - synq_extent_record(pCtx, yylhsminor.yy215); + synq_extent_record(pCtx, yylhsminor.yy341); } else { - yylhsminor.yy215 = yymsp[0].minor.yy215; + yylhsminor.yy341 = yymsp[0].minor.yy341; } - pCtx->root = yylhsminor.yy215; + pCtx->root = yylhsminor.yy341; synq_parse_list_flush(pCtx); pCtx->stmt_completed = 1; } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 7: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */ { synq_mark_as_function(pCtx, yymsp[-7].minor.yy0); - yylhsminor.yy215 = synq_parse_aggregate_function_call(pCtx, + yylhsminor.yy341 = synq_parse_aggregate_function_call(pCtx, synq_span(pCtx, yymsp[-7].minor.yy0), - (SyntaqliteAggregateFunctionCallFlags){.raw = (uint8_t)(yymsp[-5].minor.yy215 & 0xFF)}, - yymsp[-4].minor.yy215, - yymsp[-1].minor.yy215, + (SyntaqliteAggregateFunctionCallFlags){.raw = (uint8_t)(yymsp[-5].minor.yy341 & 0xFF)}, + yymsp[-4].minor.yy341, + yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } - yymsp[-7].minor.yy215 = yylhsminor.yy215; + yymsp[-7].minor.yy341 = yylhsminor.yy341; break; case 8: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */ { - SyntaqliteFilterOver *fo = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy215); + SyntaqliteFilterOver *fo = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy341); synq_mark_as_function(pCtx, yymsp[-8].minor.yy0); - yylhsminor.yy215 = synq_parse_aggregate_function_call(pCtx, + yylhsminor.yy341 = synq_parse_aggregate_function_call(pCtx, synq_span(pCtx, yymsp[-8].minor.yy0), - (SyntaqliteAggregateFunctionCallFlags){.raw = (uint8_t)(yymsp[-6].minor.yy215 & 0xFF)}, - yymsp[-5].minor.yy215, - yymsp[-2].minor.yy215, + (SyntaqliteAggregateFunctionCallFlags){.raw = (uint8_t)(yymsp[-6].minor.yy341 & 0xFF)}, + yymsp[-5].minor.yy341, + yymsp[-2].minor.yy341, fo->filter_expr, fo->over_def); } - yymsp[-8].minor.yy215 = yylhsminor.yy215; + yymsp[-8].minor.yy341 = yylhsminor.yy341; break; case 9: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP WITHIN GROUP LP ORDER BY expr RP */ { synq_mark_as_function(pCtx, yymsp[-11].minor.yy0); - yylhsminor.yy215 = synq_parse_ordered_set_function_call(pCtx, + yylhsminor.yy341 = synq_parse_ordered_set_function_call(pCtx, synq_span(pCtx, yymsp[-11].minor.yy0), - (SyntaqliteAggregateFunctionCallFlags){.raw = (uint8_t)(yymsp[-9].minor.yy215 & 0xFF)}, - yymsp[-8].minor.yy215, - yymsp[-1].minor.yy215, + (SyntaqliteAggregateFunctionCallFlags){.raw = (uint8_t)(yymsp[-9].minor.yy341 & 0xFF)}, + yymsp[-8].minor.yy341, + yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } - yymsp[-11].minor.yy215 = yylhsminor.yy215; + yymsp[-11].minor.yy341 = yylhsminor.yy341; break; case 10: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP WITHIN GROUP LP ORDER BY expr RP filter_over */ { - SyntaqliteFilterOver *fo = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy215); + SyntaqliteFilterOver *fo = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy341); synq_mark_as_function(pCtx, yymsp[-12].minor.yy0); - yylhsminor.yy215 = synq_parse_ordered_set_function_call(pCtx, + yylhsminor.yy341 = synq_parse_ordered_set_function_call(pCtx, synq_span(pCtx, yymsp[-12].minor.yy0), - (SyntaqliteAggregateFunctionCallFlags){.raw = (uint8_t)(yymsp[-10].minor.yy215 & 0xFF)}, - yymsp[-9].minor.yy215, - yymsp[-2].minor.yy215, + (SyntaqliteAggregateFunctionCallFlags){.raw = (uint8_t)(yymsp[-10].minor.yy341 & 0xFF)}, + yymsp[-9].minor.yy341, + yymsp[-2].minor.yy341, fo->filter_expr, fo->over_def); } - yymsp[-12].minor.yy215 = yylhsminor.yy215; + yymsp[-12].minor.yy341 = yylhsminor.yy341; break; case 11: /* expr ::= CAST LP expr AS typetoken RP */ { - yymsp[-5].minor.yy215 = synq_parse_cast_expr(pCtx, yymsp[-3].minor.yy215, synq_span(pCtx, yymsp[-1].minor.yy0)); + yymsp[-5].minor.yy341 = synq_parse_cast_expr(pCtx, yymsp[-3].minor.yy341, synq_span(pCtx, yymsp[-1].minor.yy0)); } break; case 12: /* typetoken ::= */ @@ -17180,37 +17197,37 @@ static YYACTIONTYPE yy_reduce( uint32_t expr = synq_parse_ident_name(pCtx, synq_span(pCtx, yymsp[-2].minor.yy0)); uint32_t col = synq_parse_result_column(pCtx, (SyntaqliteResultColumnFlags){.raw = 0x01}, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, expr); - yylhsminor.yy215 = synq_parse_result_column_list(pCtx, yymsp[-4].minor.yy215, col); + yylhsminor.yy341 = synq_parse_result_column_list(pCtx, yymsp[-4].minor.yy341, col); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 19: /* expr ::= ID|INDEXED|JOIN_KW */ { synq_mark_as_id(pCtx, yymsp[0].minor.yy0); - yylhsminor.yy215 = synq_parse_column_ref(pCtx, + yylhsminor.yy341 = synq_parse_column_ref(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0), SYNQ_NO_SPAN, SYNQ_NO_SPAN); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 20: /* expr ::= nm DOT nm */ { - yylhsminor.yy215 = synq_parse_column_ref(pCtx, + yylhsminor.yy341 = synq_parse_column_ref(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0), synq_span_dequote(pCtx, yymsp[-2].minor.yy0), SYNQ_NO_SPAN); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 21: /* expr ::= nm DOT nm DOT nm */ { - yylhsminor.yy215 = synq_parse_column_ref(pCtx, + yylhsminor.yy341 = synq_parse_column_ref(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0), synq_span_dequote(pCtx, yymsp[-2].minor.yy0), synq_span_dequote(pCtx, yymsp[-4].minor.yy0)); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 22: /* selectnowith ::= selectnowith multiselect_op oneselect */ { @@ -17219,50 +17236,50 @@ static YYACTIONTYPE yy_reduce( // An ORDER BY on a non-last arm stays put (SQLite rejects it later). uint32_t orderby = SYNTAQLITE_NULL_NODE; uint32_t limit = SYNTAQLITE_NULL_NODE; - SyntaqliteNode *arm = AST_NODE(&pCtx->ast, yymsp[0].minor.yy215); + SyntaqliteNode *arm = AST_NODE(&pCtx->ast, yymsp[0].minor.yy341); if (arm->tag == SYNTAQLITE_NODE_SELECT_STMT) { orderby = arm->select_stmt.orderby; limit = arm->select_stmt.limit_clause; arm->select_stmt.orderby = SYNTAQLITE_NULL_NODE; arm->select_stmt.limit_clause = SYNTAQLITE_NULL_NODE; } - yymsp[-2].minor.yy215 = synq_parse_compound_select(pCtx, (SyntaqliteCompoundOp)yymsp[-1].minor.yy724, yymsp[-2].minor.yy215, yymsp[0].minor.yy215, orderby, limit); + yymsp[-2].minor.yy341 = synq_parse_compound_select(pCtx, (SyntaqliteCompoundOp)yymsp[-1].minor.yy692, yymsp[-2].minor.yy341, yymsp[0].minor.yy341, orderby, limit); } break; case 23: /* multiselect_op ::= UNION */ -{ yylhsminor.yy724 = 0; (void)yymsp[0].minor.yy0; } - yymsp[0].minor.yy724 = yylhsminor.yy724; +{ yylhsminor.yy692 = 0; (void)yymsp[0].minor.yy0; } + yymsp[0].minor.yy692 = yylhsminor.yy692; break; case 24: /* multiselect_op ::= UNION ALL */ case 29: /* in_op ::= NOT IN */ yytestcase(yyruleno==29); case 416: /* perfetto_or_replace ::= OR REPLACE */ yytestcase(yyruleno==416); -{ yymsp[-1].minor.yy724 = 1; } +{ yymsp[-1].minor.yy692 = 1; } break; case 25: /* multiselect_op ::= EXCEPT|INTERSECT */ { - yylhsminor.yy724 = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_INTERSECT) ? 2 : 3; + yylhsminor.yy692 = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_INTERSECT) ? 2 : 3; } - yymsp[0].minor.yy724 = yylhsminor.yy724; + yymsp[0].minor.yy692 = yylhsminor.yy692; break; case 26: /* expr ::= LP select RP */ { pCtx->saw_subquery = 1; - yymsp[-2].minor.yy215 = synq_parse_subquery_expr(pCtx, yymsp[-1].minor.yy215); + yymsp[-2].minor.yy341 = synq_parse_subquery_expr(pCtx, yymsp[-1].minor.yy341); } break; case 27: /* expr ::= EXISTS LP select RP */ { pCtx->saw_subquery = 1; - yymsp[-3].minor.yy215 = synq_parse_exists_expr(pCtx, yymsp[-1].minor.yy215); + yymsp[-3].minor.yy341 = synq_parse_exists_expr(pCtx, yymsp[-1].minor.yy341); } break; case 28: /* in_op ::= IN */ -{ yymsp[0].minor.yy724 = 0; } +{ yymsp[0].minor.yy692 = 0; } break; case 30: /* expr ::= expr in_op LP exprlist RP */ { - yymsp[-4].minor.yy215 = synq_parse_in_expr(pCtx, (SyntaqliteBool)yymsp[-3].minor.yy724, - SYNTAQLITE_BOOL_FALSE, yymsp[-4].minor.yy215, yymsp[-1].minor.yy215); + yymsp[-4].minor.yy341 = synq_parse_in_expr(pCtx, (SyntaqliteBool)yymsp[-3].minor.yy692, + SYNTAQLITE_BOOL_FALSE, yymsp[-4].minor.yy341, yymsp[-1].minor.yy341); } break; case 31: /* expr ::= expr in_op LP select RP */ @@ -17270,8 +17287,8 @@ static YYACTIONTYPE yy_reduce( pCtx->saw_subquery = 1; // Pass the raw select node directly — InExpr's fmt block already adds // the surrounding parens, so wrapping in SubqueryExpr would double them. - yymsp[-4].minor.yy215 = synq_parse_in_expr(pCtx, (SyntaqliteBool)yymsp[-3].minor.yy724, - SYNTAQLITE_BOOL_FALSE, yymsp[-4].minor.yy215, yymsp[-1].minor.yy215); + yymsp[-4].minor.yy341 = synq_parse_in_expr(pCtx, (SyntaqliteBool)yymsp[-3].minor.yy692, + SYNTAQLITE_BOOL_FALSE, yymsp[-4].minor.yy341, yymsp[-1].minor.yy341); } break; case 32: /* expr ::= expr in_op nm dbnm paren_exprlist */ @@ -17286,12 +17303,12 @@ static YYACTIONTYPE yy_reduce( schema = SYNQ_NO_SPAN; } uint32_t tref = synq_parse_table_ref(pCtx, table_name, schema, - yymsp[0].minor.yy360.has_parens, + yymsp[0].minor.yy586.has_parens, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, - yymsp[0].minor.yy360.args, + yymsp[0].minor.yy586.args, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); - yymsp[-4].minor.yy215 = synq_parse_in_expr(pCtx, (SyntaqliteBool)yymsp[-3].minor.yy724, - SYNTAQLITE_BOOL_TRUE, yymsp[-4].minor.yy215, tref); + yymsp[-4].minor.yy341 = synq_parse_in_expr(pCtx, (SyntaqliteBool)yymsp[-3].minor.yy692, + SYNTAQLITE_BOOL_TRUE, yymsp[-4].minor.yy341, tref); } break; case 33: /* dbnm ::= */ @@ -17302,71 +17319,71 @@ static YYACTIONTYPE yy_reduce( break; case 35: /* paren_exprlist ::= */ { - yymsp[1].minor.yy360.args = SYNTAQLITE_NULL_NODE; - yymsp[1].minor.yy360.has_parens = SYNTAQLITE_BOOL_FALSE; + yymsp[1].minor.yy586.args = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy586.has_parens = SYNTAQLITE_BOOL_FALSE; } break; case 36: /* paren_exprlist ::= LP exprlist RP */ { - yymsp[-2].minor.yy360.args = synq_pass(pCtx, yymsp[-1].minor.yy215); - yymsp[-2].minor.yy360.has_parens = SYNTAQLITE_BOOL_TRUE; + yymsp[-2].minor.yy586.args = synq_pass(pCtx, yymsp[-1].minor.yy341); + yymsp[-2].minor.yy586.has_parens = SYNTAQLITE_BOOL_TRUE; } break; case 37: /* expr ::= expr ISNULL|NOTNULL */ { SyntaqliteIsOp op = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_ISNULL) ? SYNTAQLITE_IS_OP_IS_NULL : SYNTAQLITE_IS_OP_NOT_NULL; - yylhsminor.yy215 = synq_parse_is_expr(pCtx, op, yymsp[-1].minor.yy215, SYNTAQLITE_NULL_NODE); + yylhsminor.yy341 = synq_parse_is_expr(pCtx, op, yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 38: /* expr ::= expr NOT NULL */ { // `NOT NULL` and `NOTNULL` mean the same thing but are different text. - yylhsminor.yy215 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_NOT_NULL_SPACED, yymsp[-2].minor.yy215, + yylhsminor.yy341 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_NOT_NULL_SPACED, yymsp[-2].minor.yy341, SYNTAQLITE_NULL_NODE); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 39: /* expr ::= expr IS expr */ { - yylhsminor.yy215 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_IS, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_IS, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 40: /* expr ::= expr IS NOT expr */ { - yylhsminor.yy215 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_IS_NOT, yymsp[-3].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_IS_NOT, yymsp[-3].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-3].minor.yy215 = yylhsminor.yy215; + yymsp[-3].minor.yy341 = yylhsminor.yy341; break; case 41: /* expr ::= expr IS NOT DISTINCT FROM expr */ { - yylhsminor.yy215 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_IS_NOT_DISTINCT, yymsp[-5].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_IS_NOT_DISTINCT, yymsp[-5].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-5].minor.yy215 = yylhsminor.yy215; + yymsp[-5].minor.yy341 = yylhsminor.yy341; break; case 42: /* expr ::= expr IS DISTINCT FROM expr */ { - yylhsminor.yy215 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_IS_DISTINCT, yymsp[-4].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_is_expr(pCtx, SYNTAQLITE_IS_OP_IS_DISTINCT, yymsp[-4].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 43: /* between_op ::= BETWEEN */ { - yymsp[0].minor.yy215 = 0; + yymsp[0].minor.yy341 = 0; } break; case 44: /* between_op ::= NOT BETWEEN */ case 215: /* nulls ::= NULLS FIRST */ yytestcase(yyruleno==215); { - yymsp[-1].minor.yy215 = 1; + yymsp[-1].minor.yy341 = 1; } break; case 45: /* expr ::= expr between_op expr AND expr */ { - yylhsminor.yy215 = synq_parse_between_expr(pCtx, (SyntaqliteBool)yymsp[-3].minor.yy215, yymsp[-4].minor.yy215, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_between_expr(pCtx, (SyntaqliteBool)yymsp[-3].minor.yy341, yymsp[-4].minor.yy341, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 46: /* likeop ::= LIKE_KW|MATCH */ { @@ -17388,9 +17405,9 @@ static YYACTIONTYPE yy_reduce( : (len == 5) ? SYNTAQLITE_LIKE_KEYWORD_MATCH : (yymsp[-1].minor.yy0.z[0] == 'g' || yymsp[-1].minor.yy0.z[0] == 'G') ? SYNTAQLITE_LIKE_KEYWORD_GLOB : SYNTAQLITE_LIKE_KEYWORD_LIKE; - yylhsminor.yy215 = synq_parse_like_expr(pCtx, negated, kw, yymsp[-2].minor.yy215, yymsp[0].minor.yy215, SYNTAQLITE_NULL_NODE); + yylhsminor.yy341 = synq_parse_like_expr(pCtx, negated, kw, yymsp[-2].minor.yy341, yymsp[0].minor.yy341, SYNTAQLITE_NULL_NODE); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 49: /* expr ::= expr likeop expr ESCAPE expr */ { @@ -17400,26 +17417,26 @@ static YYACTIONTYPE yy_reduce( : (len == 5) ? SYNTAQLITE_LIKE_KEYWORD_MATCH : (yymsp[-3].minor.yy0.z[0] == 'g' || yymsp[-3].minor.yy0.z[0] == 'G') ? SYNTAQLITE_LIKE_KEYWORD_GLOB : SYNTAQLITE_LIKE_KEYWORD_LIKE; - yylhsminor.yy215 = synq_parse_like_expr(pCtx, negated, kw, yymsp[-4].minor.yy215, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_like_expr(pCtx, negated, kw, yymsp[-4].minor.yy341, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 50: /* expr ::= CASE case_operand case_exprlist case_else END */ { - yymsp[-4].minor.yy215 = synq_parse_case_expr(pCtx, yymsp[-3].minor.yy215, yymsp[-1].minor.yy215, yymsp[-2].minor.yy215); + yymsp[-4].minor.yy341 = synq_parse_case_expr(pCtx, yymsp[-3].minor.yy341, yymsp[-1].minor.yy341, yymsp[-2].minor.yy341); } break; case 51: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ { - uint32_t w = synq_parse_case_when(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); - yylhsminor.yy215 = synq_parse_case_when_list(pCtx, yymsp[-4].minor.yy215, w); + uint32_t w = synq_parse_case_when(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); + yylhsminor.yy341 = synq_parse_case_when_list(pCtx, yymsp[-4].minor.yy341, w); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 52: /* case_exprlist ::= WHEN expr THEN expr */ { - uint32_t w = synq_parse_case_when(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); - yymsp[-3].minor.yy215 = synq_parse_case_when_list(pCtx, SYNTAQLITE_NULL_NODE, w); + uint32_t w = synq_parse_case_when(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); + yymsp[-3].minor.yy341 = synq_parse_case_when_list(pCtx, SYNTAQLITE_NULL_NODE, w); } break; case 53: /* case_else ::= ELSE expr */ @@ -17432,7 +17449,7 @@ static YYACTIONTYPE yy_reduce( case 352: /* vinto ::= INTO expr */ yytestcase(yyruleno==352); case 408: /* window_clause ::= WINDOW windowdefn_list */ yytestcase(yyruleno==408); { - yymsp[-1].minor.yy215 = synq_pass(pCtx, yymsp[0].minor.yy215); + yymsp[-1].minor.yy341 = synq_pass(pCtx, yymsp[0].minor.yy341); } break; case 54: /* case_else ::= */ @@ -17457,46 +17474,46 @@ static YYACTIONTYPE yy_reduce( case 353: /* vinto ::= */ yytestcase(yyruleno==353); case 393: /* frame_opt ::= */ yytestcase(yyruleno==393); { - yymsp[1].minor.yy215 = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy341 = SYNTAQLITE_NULL_NODE; } break; case 57: /* cmd ::= create_table create_table_args */ { - // yymsp[0].minor.yy215 is either: (1) a CreateTableStmt node with columns/constraints filled in + // yymsp[0].minor.yy341 is either: (1) a CreateTableStmt node with columns/constraints filled in // or: (2) a CreateTableStmt node with as_select filled in - // yymsp[-1].minor.yy215 has the table name/schema/temp/ifnotexists info packed as a node. - // We need to merge yymsp[-1].minor.yy215 info into yymsp[0].minor.yy215. - SyntaqliteNode *ct_node = AST_NODE(&pCtx->ast, yymsp[-1].minor.yy215); - SyntaqliteNode *args_node = AST_NODE(&pCtx->ast, yymsp[0].minor.yy215); + // yymsp[-1].minor.yy341 has the table name/schema/temp/ifnotexists info packed as a node. + // We need to merge yymsp[-1].minor.yy341 info into yymsp[0].minor.yy341. + SyntaqliteNode *ct_node = AST_NODE(&pCtx->ast, yymsp[-1].minor.yy341); + SyntaqliteNode *args_node = AST_NODE(&pCtx->ast, yymsp[0].minor.yy341); args_node->create_table_stmt.table_name = ct_node->create_table_stmt.table_name; args_node->create_table_stmt.schema = ct_node->create_table_stmt.schema; args_node->create_table_stmt.temporary = ct_node->create_table_stmt.temporary; args_node->create_table_stmt.if_not_exists = ct_node->create_table_stmt.if_not_exists; - yylhsminor.yy215 = synq_pass(pCtx, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_pass(pCtx, yymsp[0].minor.yy341); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 58: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ { SyntaqliteTextSpan tbl_name = yymsp[0].minor.yy0.z ? synq_span_dequote(pCtx, yymsp[0].minor.yy0) : synq_span_dequote(pCtx, yymsp[-1].minor.yy0); SyntaqliteTextSpan tbl_schema = yymsp[0].minor.yy0.z ? synq_span_dequote(pCtx, yymsp[-1].minor.yy0) : SYNQ_NO_SPAN; - yymsp[-5].minor.yy215 = synq_parse_create_table_stmt(pCtx, - tbl_name, tbl_schema, yymsp[-4].minor.yy648, (SyntaqliteBool)yymsp[-2].minor.yy724, + yymsp[-5].minor.yy341 = synq_parse_create_table_stmt(pCtx, + tbl_name, tbl_schema, yymsp[-4].minor.yy540, (SyntaqliteBool)yymsp[-2].minor.yy692, (SyntaqliteCreateTableStmtFlags){.raw = 0}, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } break; case 59: /* create_table_args ::= LP columnlist conslist_opt RP table_option_set */ { - yymsp[-4].minor.yy215 = synq_parse_create_table_stmt(pCtx, + yymsp[-4].minor.yy341 = synq_parse_create_table_stmt(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, SYNTAQLITE_TEMPORARY_QUALIFIER_NONE, SYNTAQLITE_BOOL_FALSE, - (SyntaqliteCreateTableStmtFlags){.raw = (uint8_t)(yymsp[0].minor.yy724 & 0xFF)}, yymsp[-3].minor.yy215, yymsp[-2].minor.yy215, SYNTAQLITE_NULL_NODE); + (SyntaqliteCreateTableStmtFlags){.raw = (uint8_t)(yymsp[0].minor.yy692 & 0xFF)}, yymsp[-3].minor.yy341, yymsp[-2].minor.yy341, SYNTAQLITE_NULL_NODE); } break; case 60: /* create_table_args ::= AS select */ { - yymsp[-1].minor.yy215 = synq_parse_create_table_stmt(pCtx, + yymsp[-1].minor.yy341 = synq_parse_create_table_stmt(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, SYNTAQLITE_TEMPORARY_QUALIFIER_NONE, SYNTAQLITE_BOOL_FALSE, - (SyntaqliteCreateTableStmtFlags){.raw = 0}, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + (SyntaqliteCreateTableStmtFlags){.raw = 0}, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } break; case 61: /* table_option_set ::= */ @@ -17510,7 +17527,7 @@ static YYACTIONTYPE yy_reduce( case 359: /* uniqueflag ::= */ yytestcase(yyruleno==359); case 360: /* ifnotexists ::= */ yytestcase(yyruleno==360); { - yymsp[1].minor.yy724 = 0; + yymsp[1].minor.yy692 = 0; } break; case 62: /* table_option_set ::= table_option */ @@ -17521,17 +17538,17 @@ static YYACTIONTYPE yy_reduce( break; case 63: /* table_option_set ::= table_option_set COMMA table_option */ { - yylhsminor.yy724 = yymsp[-2].minor.yy724 | yymsp[0].minor.yy724; + yylhsminor.yy692 = yymsp[-2].minor.yy692 | yymsp[0].minor.yy692; } - yymsp[-2].minor.yy724 = yylhsminor.yy724; + yymsp[-2].minor.yy692 = yylhsminor.yy692; break; case 64: /* table_option ::= WITHOUT nm */ { // WITHOUT ROWID = bit 0 if (yymsp[0].minor.yy0.n == 5 && SYNQ_STRNCASECMP(yymsp[0].minor.yy0.z, "rowid", 5) == 0) { - yymsp[-1].minor.yy724 = 1; + yymsp[-1].minor.yy692 = 1; } else { - yymsp[-1].minor.yy724 = 0; + yymsp[-1].minor.yy692 = 0; pCtx->error = 1; } } @@ -17540,68 +17557,68 @@ static YYACTIONTYPE yy_reduce( { // STRICT = bit 1 if (yymsp[0].minor.yy0.n == 6 && SYNQ_STRNCASECMP(yymsp[0].minor.yy0.z, "strict", 6) == 0) { - yylhsminor.yy724 = 2; + yylhsminor.yy692 = 2; } else { - yylhsminor.yy724 = 0; + yylhsminor.yy692 = 0; pCtx->error = 1; } } - yymsp[0].minor.yy724 = yylhsminor.yy724; + yymsp[0].minor.yy692 = yylhsminor.yy692; break; case 66: /* columnlist ::= columnlist COMMA columnname carglist */ { - uint32_t col = synq_parse_column_def(pCtx, yymsp[-1].minor.yy386.name, yymsp[-1].minor.yy386.typetoken, yymsp[0].minor.yy215); - yylhsminor.yy215 = synq_parse_column_def_list(pCtx, yymsp[-3].minor.yy215, col); + uint32_t col = synq_parse_column_def(pCtx, yymsp[-1].minor.yy192.name, yymsp[-1].minor.yy192.typetoken, yymsp[0].minor.yy341); + yylhsminor.yy341 = synq_parse_column_def_list(pCtx, yymsp[-3].minor.yy341, col); } - yymsp[-3].minor.yy215 = yylhsminor.yy215; + yymsp[-3].minor.yy341 = yylhsminor.yy341; break; case 67: /* columnlist ::= columnname carglist */ { - uint32_t col = synq_parse_column_def(pCtx, yymsp[-1].minor.yy386.name, yymsp[-1].minor.yy386.typetoken, yymsp[0].minor.yy215); - yylhsminor.yy215 = synq_parse_column_def_list(pCtx, SYNTAQLITE_NULL_NODE, col); + uint32_t col = synq_parse_column_def(pCtx, yymsp[-1].minor.yy192.name, yymsp[-1].minor.yy192.typetoken, yymsp[0].minor.yy341); + yylhsminor.yy341 = synq_parse_column_def_list(pCtx, SYNTAQLITE_NULL_NODE, col); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 68: /* carglist ::= carglist ccons */ { - yylhsminor.yy215 = synq_parse_column_constraint_list(pCtx, yymsp[-1].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_column_constraint_list(pCtx, yymsp[-1].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 70: /* ccons ::= CONSTRAINT nm */ { SyntaqliteTextSpan name = synq_span(pCtx, yymsp[0].minor.yy0); - yymsp[-1].minor.yy215 = synq_parse_constraint_name_declaration(pCtx, name); + yymsp[-1].minor.yy341 = synq_parse_constraint_name_declaration(pCtx, name); } break; case 71: /* ccons ::= DEFAULT scantok term */ { - yymsp[-2].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-2].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_DEFAULT, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, SYNTAQLITE_GENERATED_COLUMN_STORAGE_NONE, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_BOOL_FALSE, - yymsp[0].minor.yy215, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); + yymsp[0].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } break; case 72: /* ccons ::= DEFAULT LP expr RP */ { - yymsp[-3].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-3].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_DEFAULT, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, SYNTAQLITE_GENERATED_COLUMN_STORAGE_NONE, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET, SYNTAQLITE_BOOL_TRUE, SYNTAQLITE_BOOL_FALSE, - yymsp[-1].minor.yy215, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); + yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } break; case 73: /* ccons ::= DEFAULT PLUS scantok term */ { - uint32_t pos = synq_parse_unary_expr(pCtx, SYNTAQLITE_UNARY_OP_PLUS, yymsp[0].minor.yy215); - yymsp[-3].minor.yy215 = synq_parse_column_constraint(pCtx, + uint32_t pos = synq_parse_unary_expr(pCtx, SYNTAQLITE_UNARY_OP_PLUS, yymsp[0].minor.yy341); + yymsp[-3].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_DEFAULT, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, @@ -17614,8 +17631,8 @@ static YYACTIONTYPE yy_reduce( case 74: /* ccons ::= DEFAULT MINUS scantok term */ { // Create a unary minus wrapping the term - uint32_t neg = synq_parse_unary_expr(pCtx, SYNTAQLITE_UNARY_OP_MINUS, yymsp[0].minor.yy215); - yymsp[-3].minor.yy215 = synq_parse_column_constraint(pCtx, + uint32_t neg = synq_parse_unary_expr(pCtx, SYNTAQLITE_UNARY_OP_MINUS, yymsp[0].minor.yy341); + yymsp[-3].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_DEFAULT, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, @@ -17631,7 +17648,7 @@ static YYACTIONTYPE yy_reduce( // a column reference: as an expression it would not be constant. uint32_t ref = synq_parse_literal(pCtx, SYNTAQLITE_LITERAL_TYPE_STRING, synq_span(pCtx, yymsp[0].minor.yy0)); - yymsp[-2].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-2].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_DEFAULT, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, @@ -17643,9 +17660,9 @@ static YYACTIONTYPE yy_reduce( break; case 76: /* ccons ::= NULL onconf */ { - yymsp[-1].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-1].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_NULL, - (SyntaqliteConflictAction)yymsp[0].minor.yy724, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, + (SyntaqliteConflictAction)yymsp[0].minor.yy692, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, SYNTAQLITE_GENERATED_COLUMN_STORAGE_NONE, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET, @@ -17655,9 +17672,9 @@ static YYACTIONTYPE yy_reduce( break; case 77: /* ccons ::= NOT NULL onconf */ { - yymsp[-2].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-2].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_NOT_NULL, - (SyntaqliteConflictAction)yymsp[0].minor.yy724, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, + (SyntaqliteConflictAction)yymsp[0].minor.yy692, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, SYNTAQLITE_GENERATED_COLUMN_STORAGE_NONE, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET, @@ -17667,9 +17684,9 @@ static YYACTIONTYPE yy_reduce( break; case 78: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ { - yymsp[-4].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-4].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_PRIMARY_KEY, - (SyntaqliteConflictAction)yymsp[-1].minor.yy724, (SyntaqliteSortOrder)yymsp[-2].minor.yy215, (SyntaqliteBool)yymsp[0].minor.yy724, + (SyntaqliteConflictAction)yymsp[-1].minor.yy692, (SyntaqliteSortOrder)yymsp[-2].minor.yy341, (SyntaqliteBool)yymsp[0].minor.yy692, SYNQ_NO_SPAN, SYNTAQLITE_GENERATED_COLUMN_STORAGE_NONE, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET, @@ -17679,9 +17696,9 @@ static YYACTIONTYPE yy_reduce( break; case 79: /* ccons ::= UNIQUE onconf */ { - yymsp[-1].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-1].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_UNIQUE, - (SyntaqliteConflictAction)yymsp[0].minor.yy724, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, + (SyntaqliteConflictAction)yymsp[0].minor.yy692, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, SYNTAQLITE_GENERATED_COLUMN_STORAGE_NONE, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET, @@ -17691,22 +17708,22 @@ static YYACTIONTYPE yy_reduce( break; case 80: /* ccons ::= CHECK LP expr RP */ { - yymsp[-3].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-3].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_CHECK, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, SYNTAQLITE_GENERATED_COLUMN_STORAGE_NONE, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_BOOL_FALSE, - SYNTAQLITE_NULL_NODE, yymsp[-1].minor.yy215, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); + SYNTAQLITE_NULL_NODE, yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } break; case 81: /* ccons ::= REFERENCES nm eidlist_opt refargs */ { uint32_t fk = synq_parse_foreign_key_clause(pCtx, - synq_span(pCtx, yymsp[-2].minor.yy0), yymsp[-1].minor.yy215, yymsp[0].minor.yy215, + synq_span(pCtx, yymsp[-2].minor.yy0), yymsp[-1].minor.yy341, yymsp[0].minor.yy341, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET); - yymsp[-3].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-3].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_REFERENCES, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, @@ -17718,21 +17735,21 @@ static YYACTIONTYPE yy_reduce( break; case 82: /* ccons ::= defer_subclause */ { - yylhsminor.yy215 = synq_parse_column_constraint(pCtx, + yylhsminor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_DEFERRABLE, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, SYNTAQLITE_GENERATED_COLUMN_STORAGE_NONE, - yymsp[0].minor.yy5.deferrable, yymsp[0].minor.yy5.initial, + yymsp[0].minor.yy203.deferrable, yymsp[0].minor.yy203.initial, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 83: /* ccons ::= COLLATE ID|STRING */ { - yymsp[-1].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-1].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_COLLATE, 0, 0, 0, synq_span(pCtx, yymsp[0].minor.yy0), @@ -17744,32 +17761,32 @@ static YYACTIONTYPE yy_reduce( break; case 84: /* ccons ::= GENERATED ALWAYS AS generated */ { - yymsp[-3].minor.yy215 = yymsp[0].minor.yy215; - if (yymsp[-3].minor.yy215 != SYNTAQLITE_NULL_NODE) { - SyntaqliteNode *node = AST_NODE(&pCtx->ast, yymsp[-3].minor.yy215); + yymsp[-3].minor.yy341 = yymsp[0].minor.yy341; + if (yymsp[-3].minor.yy341 != SYNTAQLITE_NULL_NODE) { + SyntaqliteNode *node = AST_NODE(&pCtx->ast, yymsp[-3].minor.yy341); node->column_constraint.generated_always = SYNTAQLITE_BOOL_TRUE; } } break; case 85: /* ccons ::= AS generated */ { - yymsp[-1].minor.yy215 = yymsp[0].minor.yy215; - if (yymsp[-1].minor.yy215 != SYNTAQLITE_NULL_NODE && pCtx->generated_always) { - SyntaqliteNode *node = AST_NODE(&pCtx->ast, yymsp[-1].minor.yy215); + yymsp[-1].minor.yy341 = yymsp[0].minor.yy341; + if (yymsp[-1].minor.yy341 != SYNTAQLITE_NULL_NODE && pCtx->generated_always) { + SyntaqliteNode *node = AST_NODE(&pCtx->ast, yymsp[-1].minor.yy341); node->column_constraint.generated_always = SYNTAQLITE_BOOL_TRUE; } } break; case 86: /* generated ::= LP expr RP */ { - yymsp[-2].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-2].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_GENERATED, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, SYNTAQLITE_GENERATED_COLUMN_STORAGE_NONE, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_BOOL_FALSE, - SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[-1].minor.yy215, SYNTAQLITE_NULL_NODE); + SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE); } break; case 87: /* generated ::= LP expr RP ID */ @@ -17781,14 +17798,14 @@ static YYACTIONTYPE yy_reduce( // Quoted spellings land here too, and upstream rejects those as well. pCtx->error = 1; } - yymsp[-3].minor.yy215 = synq_parse_column_constraint(pCtx, + yymsp[-3].minor.yy341 = synq_parse_column_constraint(pCtx, SYNTAQLITE_COLUMN_CONSTRAINT_TYPE_GENERATED, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_SORT_ORDER_NONE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN, storage, SYNTAQLITE_DEFERRABLE_UNSET, SYNTAQLITE_INITIAL_DEFER_MODE_UNSET, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_BOOL_FALSE, - SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[-2].minor.yy215, SYNTAQLITE_NULL_NODE); + SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[-2].minor.yy341, SYNTAQLITE_NULL_NODE); } break; case 89: /* autoinc ::= AUTOINCR */ @@ -17797,178 +17814,178 @@ static YYACTIONTYPE yy_reduce( case 346: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==346); case 358: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==358); { - yymsp[0].minor.yy724 = 1; + yymsp[0].minor.yy692 = 1; } break; case 91: /* refargs ::= refargs refarg */ { - yymsp[-1].minor.yy215 = synq_parse_foreign_key_option_list(pCtx, yymsp[-1].minor.yy215, yymsp[0].minor.yy215); + yymsp[-1].minor.yy341 = synq_parse_foreign_key_option_list(pCtx, yymsp[-1].minor.yy341, yymsp[0].minor.yy341); } break; case 92: /* refarg ::= MATCH nm */ { - yymsp[-1].minor.yy215 = synq_parse_foreign_key_option(pCtx, SYNTAQLITE_FOREIGN_KEY_OPTION_KIND_MATCH, + yymsp[-1].minor.yy341 = synq_parse_foreign_key_option(pCtx, SYNTAQLITE_FOREIGN_KEY_OPTION_KIND_MATCH, SYNTAQLITE_FOREIGN_KEY_ACTION_UNSET, synq_span(pCtx, yymsp[0].minor.yy0)); } break; case 93: /* refarg ::= ON INSERT refact */ { - yymsp[-2].minor.yy215 = synq_parse_foreign_key_option(pCtx, SYNTAQLITE_FOREIGN_KEY_OPTION_KIND_ON_INSERT, - (SyntaqliteForeignKeyAction)yymsp[0].minor.yy724, SYNQ_NO_SPAN); + yymsp[-2].minor.yy341 = synq_parse_foreign_key_option(pCtx, SYNTAQLITE_FOREIGN_KEY_OPTION_KIND_ON_INSERT, + (SyntaqliteForeignKeyAction)yymsp[0].minor.yy692, SYNQ_NO_SPAN); } break; case 94: /* refarg ::= ON DELETE refact */ { - yymsp[-2].minor.yy215 = synq_parse_foreign_key_option(pCtx, SYNTAQLITE_FOREIGN_KEY_OPTION_KIND_ON_DELETE, - (SyntaqliteForeignKeyAction)yymsp[0].minor.yy724, SYNQ_NO_SPAN); + yymsp[-2].minor.yy341 = synq_parse_foreign_key_option(pCtx, SYNTAQLITE_FOREIGN_KEY_OPTION_KIND_ON_DELETE, + (SyntaqliteForeignKeyAction)yymsp[0].minor.yy692, SYNQ_NO_SPAN); } break; case 95: /* refarg ::= ON UPDATE refact */ { - yymsp[-2].minor.yy215 = synq_parse_foreign_key_option(pCtx, SYNTAQLITE_FOREIGN_KEY_OPTION_KIND_ON_UPDATE, - (SyntaqliteForeignKeyAction)yymsp[0].minor.yy724, SYNQ_NO_SPAN); + yymsp[-2].minor.yy341 = synq_parse_foreign_key_option(pCtx, SYNTAQLITE_FOREIGN_KEY_OPTION_KIND_ON_UPDATE, + (SyntaqliteForeignKeyAction)yymsp[0].minor.yy692, SYNQ_NO_SPAN); } break; case 96: /* refact ::= SET NULL */ { - yymsp[-1].minor.yy724 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_SET_NULL; + yymsp[-1].minor.yy692 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_SET_NULL; } break; case 97: /* refact ::= SET DEFAULT */ { - yymsp[-1].minor.yy724 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_SET_DEFAULT; + yymsp[-1].minor.yy692 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_SET_DEFAULT; } break; case 98: /* refact ::= CASCADE */ { - yymsp[0].minor.yy724 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_CASCADE; + yymsp[0].minor.yy692 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_CASCADE; } break; case 99: /* refact ::= RESTRICT */ { - yymsp[0].minor.yy724 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_RESTRICT; + yymsp[0].minor.yy692 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_RESTRICT; } break; case 100: /* refact ::= NO ACTION */ { - yymsp[-1].minor.yy724 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_NO_ACTION; + yymsp[-1].minor.yy692 = (int)SYNTAQLITE_FOREIGN_KEY_ACTION_NO_ACTION; } break; case 101: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ { - yymsp[-2].minor.yy5.deferrable = SYNTAQLITE_DEFERRABLE_NOT_DEFERRABLE; - yymsp[-2].minor.yy5.initial = (SyntaqliteInitialDeferMode)yymsp[0].minor.yy724; + yymsp[-2].minor.yy203.deferrable = SYNTAQLITE_DEFERRABLE_NOT_DEFERRABLE; + yymsp[-2].minor.yy203.initial = (SyntaqliteInitialDeferMode)yymsp[0].minor.yy692; } break; case 102: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ { - yymsp[-1].minor.yy5.deferrable = SYNTAQLITE_DEFERRABLE_DEFERRABLE; - yymsp[-1].minor.yy5.initial = (SyntaqliteInitialDeferMode)yymsp[0].minor.yy724; + yymsp[-1].minor.yy203.deferrable = SYNTAQLITE_DEFERRABLE_DEFERRABLE; + yymsp[-1].minor.yy203.initial = (SyntaqliteInitialDeferMode)yymsp[0].minor.yy692; } break; case 103: /* init_deferred_pred_opt ::= */ { - yymsp[1].minor.yy724 = (int)SYNTAQLITE_INITIAL_DEFER_MODE_UNSET; + yymsp[1].minor.yy692 = (int)SYNTAQLITE_INITIAL_DEFER_MODE_UNSET; } break; case 104: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ { - yymsp[-1].minor.yy724 = (int)SYNTAQLITE_INITIAL_DEFER_MODE_DEFERRED; + yymsp[-1].minor.yy692 = (int)SYNTAQLITE_INITIAL_DEFER_MODE_DEFERRED; } break; case 105: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ { - yymsp[-1].minor.yy724 = (int)SYNTAQLITE_INITIAL_DEFER_MODE_IMMEDIATE; + yymsp[-1].minor.yy692 = (int)SYNTAQLITE_INITIAL_DEFER_MODE_IMMEDIATE; } break; case 107: /* conslist_opt ::= COMMA conslist */ { - yymsp[-1].minor.yy215 = synq_parse_table_constraint_list(pCtx, yymsp[0].minor.yy399.list, yymsp[0].minor.yy399.group); + yymsp[-1].minor.yy341 = synq_parse_table_constraint_list(pCtx, yymsp[0].minor.yy365.list, yymsp[0].minor.yy365.group); } break; case 108: /* conslist ::= conslist tconscomma tcons */ { - yylhsminor.yy399.list = yymsp[-2].minor.yy399.list; - uint32_t group = yymsp[-2].minor.yy399.group; - if (yymsp[-1].minor.yy724) { - yylhsminor.yy399.list = synq_parse_table_constraint_list(pCtx, yymsp[-2].minor.yy399.list, yymsp[-2].minor.yy399.group); + yylhsminor.yy365.list = yymsp[-2].minor.yy365.list; + uint32_t group = yymsp[-2].minor.yy365.group; + if (yymsp[-1].minor.yy692) { + yylhsminor.yy365.list = synq_parse_table_constraint_list(pCtx, yymsp[-2].minor.yy365.list, yymsp[-2].minor.yy365.group); group = SYNTAQLITE_NULL_NODE; } - yylhsminor.yy399.group = synq_parse_list_append_from_children(pCtx, - SYNTAQLITE_NODE_TABLE_CONSTRAINT_GROUP, group, yymsp[0].minor.yy215); + yylhsminor.yy365.group = synq_parse_list_append_from_children(pCtx, + SYNTAQLITE_NODE_TABLE_CONSTRAINT_GROUP, group, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy399 = yylhsminor.yy399; + yymsp[-2].minor.yy365 = yylhsminor.yy365; break; case 109: /* conslist ::= tcons */ { - yylhsminor.yy399.list = SYNTAQLITE_NULL_NODE; - yylhsminor.yy399.group = synq_parse_list_append_from_children(pCtx, - SYNTAQLITE_NODE_TABLE_CONSTRAINT_GROUP, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yylhsminor.yy365.list = SYNTAQLITE_NULL_NODE; + yylhsminor.yy365.group = synq_parse_list_append_from_children(pCtx, + SYNTAQLITE_NODE_TABLE_CONSTRAINT_GROUP, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } - yymsp[0].minor.yy399 = yylhsminor.yy399; + yymsp[0].minor.yy365 = yylhsminor.yy365; break; case 110: /* tconscomma ::= COMMA */ -{ yymsp[0].minor.yy724 = 1; } +{ yymsp[0].minor.yy692 = 1; } break; case 111: /* tconscomma ::= */ case 415: /* perfetto_or_replace ::= */ yytestcase(yyruleno==415); -{ yymsp[1].minor.yy724 = 0; } +{ yymsp[1].minor.yy692 = 0; } break; case 112: /* tcons ::= CONSTRAINT nm */ { - yymsp[-1].minor.yy215 = synq_parse_constraint_name_declaration(pCtx, synq_span(pCtx, yymsp[0].minor.yy0)); + yymsp[-1].minor.yy341 = synq_parse_constraint_name_declaration(pCtx, synq_span(pCtx, yymsp[0].minor.yy0)); } break; case 113: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ { - yymsp[-6].minor.yy215 = synq_parse_table_constraint(pCtx, + yymsp[-6].minor.yy341 = synq_parse_table_constraint(pCtx, SYNTAQLITE_TABLE_CONSTRAINT_TYPE_PRIMARY_KEY, - (SyntaqliteConflictAction)yymsp[0].minor.yy724, (SyntaqliteBool)yymsp[-2].minor.yy724, - yymsp[-3].minor.yy215, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); + (SyntaqliteConflictAction)yymsp[0].minor.yy692, (SyntaqliteBool)yymsp[-2].minor.yy692, + yymsp[-3].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } break; case 114: /* tcons ::= UNIQUE LP sortlist RP onconf */ { - yymsp[-4].minor.yy215 = synq_parse_table_constraint(pCtx, + yymsp[-4].minor.yy341 = synq_parse_table_constraint(pCtx, SYNTAQLITE_TABLE_CONSTRAINT_TYPE_UNIQUE, - (SyntaqliteConflictAction)yymsp[0].minor.yy724, SYNTAQLITE_BOOL_FALSE, - yymsp[-2].minor.yy215, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); + (SyntaqliteConflictAction)yymsp[0].minor.yy692, SYNTAQLITE_BOOL_FALSE, + yymsp[-2].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } break; case 115: /* tcons ::= CHECK LP expr RP onconf */ { - yymsp[-4].minor.yy215 = synq_parse_table_constraint(pCtx, + yymsp[-4].minor.yy341 = synq_parse_table_constraint(pCtx, SYNTAQLITE_TABLE_CONSTRAINT_TYPE_CHECK, - (SyntaqliteConflictAction)yymsp[0].minor.yy724, SYNTAQLITE_BOOL_FALSE, - SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[-2].minor.yy215, SYNTAQLITE_NULL_NODE); + (SyntaqliteConflictAction)yymsp[0].minor.yy692, SYNTAQLITE_BOOL_FALSE, + SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[-2].minor.yy341, SYNTAQLITE_NULL_NODE); } break; case 116: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ { uint32_t fk = synq_parse_foreign_key_clause(pCtx, - synq_span(pCtx, yymsp[-3].minor.yy0), yymsp[-2].minor.yy215, yymsp[-1].minor.yy215, - yymsp[0].minor.yy5.deferrable, yymsp[0].minor.yy5.initial); - yymsp[-9].minor.yy215 = synq_parse_table_constraint(pCtx, + synq_span(pCtx, yymsp[-3].minor.yy0), yymsp[-2].minor.yy341, yymsp[-1].minor.yy341, + yymsp[0].minor.yy203.deferrable, yymsp[0].minor.yy203.initial); + yymsp[-9].minor.yy341 = synq_parse_table_constraint(pCtx, SYNTAQLITE_TABLE_CONSTRAINT_TYPE_FOREIGN_KEY, SYNTAQLITE_CONFLICT_ACTION_DEFAULT, SYNTAQLITE_BOOL_FALSE, - SYNTAQLITE_NULL_NODE, yymsp[-6].minor.yy215, SYNTAQLITE_NULL_NODE, fk); + SYNTAQLITE_NULL_NODE, yymsp[-6].minor.yy341, SYNTAQLITE_NULL_NODE, fk); } break; case 117: /* defer_subclause_opt ::= */ { - yymsp[1].minor.yy5.deferrable = SYNTAQLITE_DEFERRABLE_UNSET; - yymsp[1].minor.yy5.initial = SYNTAQLITE_INITIAL_DEFER_MODE_UNSET; + yymsp[1].minor.yy203.deferrable = SYNTAQLITE_DEFERRABLE_UNSET; + yymsp[1].minor.yy203.initial = SYNTAQLITE_INITIAL_DEFER_MODE_UNSET; } break; case 119: /* onconf ::= */ case 146: /* orconf ::= */ yytestcase(yyruleno==146); { - yymsp[1].minor.yy724 = (int)SYNTAQLITE_CONFLICT_ACTION_DEFAULT; + yymsp[1].minor.yy692 = (int)SYNTAQLITE_CONFLICT_ACTION_DEFAULT; } break; case 120: /* onconf ::= ON CONFLICT resolvetype */ { - yymsp[-2].minor.yy724 = yymsp[0].minor.yy724; + yymsp[-2].minor.yy692 = yymsp[0].minor.yy692; } break; case 121: /* scantok ::= */ @@ -17980,29 +17997,29 @@ static YYACTIONTYPE yy_reduce( break; case 122: /* select ::= WITH wqlist selectnowith */ { - yymsp[-2].minor.yy215 = synq_parse_with_clause(pCtx, 0, yymsp[-1].minor.yy215, yymsp[0].minor.yy215); + yymsp[-2].minor.yy341 = synq_parse_with_clause(pCtx, 0, yymsp[-1].minor.yy341, yymsp[0].minor.yy341); } break; case 123: /* select ::= WITH RECURSIVE wqlist selectnowith */ { - yymsp[-3].minor.yy215 = synq_parse_with_clause(pCtx, 1, yymsp[-1].minor.yy215, yymsp[0].minor.yy215); + yymsp[-3].minor.yy341 = synq_parse_with_clause(pCtx, 1, yymsp[-1].minor.yy341, yymsp[0].minor.yy341); } break; case 124: /* wqitem ::= withnm eidlist_opt wqas LP select RP */ { - yylhsminor.yy215 = synq_parse_cte_definition(pCtx, synq_span_dequote(pCtx, yymsp[-5].minor.yy0), (SyntaqliteMaterialized)yymsp[-3].minor.yy724, yymsp[-4].minor.yy215, yymsp[-1].minor.yy215); + yylhsminor.yy341 = synq_parse_cte_definition(pCtx, synq_span_dequote(pCtx, yymsp[-5].minor.yy0), (SyntaqliteMaterialized)yymsp[-3].minor.yy692, yymsp[-4].minor.yy341, yymsp[-1].minor.yy341); } - yymsp[-5].minor.yy215 = yylhsminor.yy215; + yymsp[-5].minor.yy341 = yylhsminor.yy341; break; case 125: /* wqlist ::= wqitem */ { - yylhsminor.yy215 = synq_parse_cte_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_cte_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 126: /* wqlist ::= wqlist COMMA wqitem */ { - yymsp[-2].minor.yy215 = synq_parse_cte_list(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yymsp[-2].minor.yy341 = synq_parse_cte_list(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } break; case 127: /* withnm ::= nm */ @@ -18012,78 +18029,78 @@ static YYACTIONTYPE yy_reduce( break; case 128: /* wqas ::= AS */ { - yymsp[0].minor.yy724 = (int)SYNTAQLITE_MATERIALIZED_DEFAULT; + yymsp[0].minor.yy692 = (int)SYNTAQLITE_MATERIALIZED_DEFAULT; } break; case 129: /* wqas ::= AS MATERIALIZED */ { - yymsp[-1].minor.yy724 = (int)SYNTAQLITE_MATERIALIZED_MATERIALIZED; + yymsp[-1].minor.yy692 = (int)SYNTAQLITE_MATERIALIZED_MATERIALIZED; } break; case 130: /* wqas ::= AS NOT MATERIALIZED */ { - yymsp[-2].minor.yy724 = (int)SYNTAQLITE_MATERIALIZED_NOT_MATERIALIZED; + yymsp[-2].minor.yy692 = (int)SYNTAQLITE_MATERIALIZED_NOT_MATERIALIZED; } break; case 132: /* eidlist_opt ::= LP eidlist RP */ case 166: /* idlist_opt ::= LP idlist RP */ yytestcase(yyruleno==166); case 324: /* trigger_cmd ::= scanpt select scanpt */ yytestcase(yyruleno==324); { - yymsp[-2].minor.yy215 = synq_pass(pCtx, yymsp[-1].minor.yy215); + yymsp[-2].minor.yy341 = synq_pass(pCtx, yymsp[-1].minor.yy341); } break; case 133: /* eidlist ::= nm collate sortorder */ { - if (yymsp[-1].minor.yy724 || yymsp[0].minor.yy215 != SYNQ_SORTORDER_NONE) { + if (yymsp[-1].minor.yy692 || yymsp[0].minor.yy341 != SYNQ_SORTORDER_NONE) { pCtx->error = 1; } uint32_t col = synq_parse_column_ref(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), SYNQ_NO_SPAN, SYNQ_NO_SPAN); - yylhsminor.yy215 = synq_parse_expr_list(pCtx, SYNTAQLITE_NULL_NODE, col); + yylhsminor.yy341 = synq_parse_expr_list(pCtx, SYNTAQLITE_NULL_NODE, col); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 134: /* eidlist ::= eidlist COMMA nm collate sortorder */ { - if (yymsp[-1].minor.yy724 || yymsp[0].minor.yy215 != SYNQ_SORTORDER_NONE) { + if (yymsp[-1].minor.yy692 || yymsp[0].minor.yy341 != SYNQ_SORTORDER_NONE) { pCtx->error = 1; } uint32_t col = synq_parse_column_ref(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), SYNQ_NO_SPAN, SYNQ_NO_SPAN); - yymsp[-4].minor.yy215 = synq_parse_expr_list(pCtx, yymsp[-4].minor.yy215, col); + yymsp[-4].minor.yy341 = synq_parse_expr_list(pCtx, yymsp[-4].minor.yy341, col); } break; case 136: /* collate ::= COLLATE ID|STRING */ case 225: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==225); { - yymsp[-1].minor.yy724 = 1; + yymsp[-1].minor.yy692 = 1; } break; case 137: /* with ::= */ { - yymsp[1].minor.yy343.cte_list = SYNTAQLITE_NULL_NODE; - yymsp[1].minor.yy343.is_recursive = 0; + yymsp[1].minor.yy25.cte_list = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy25.is_recursive = 0; } break; case 138: /* with ::= WITH wqlist */ { - yymsp[-1].minor.yy343.cte_list = yymsp[0].minor.yy215; - yymsp[-1].minor.yy343.is_recursive = 0; + yymsp[-1].minor.yy25.cte_list = yymsp[0].minor.yy341; + yymsp[-1].minor.yy25.is_recursive = 0; } break; case 139: /* with ::= WITH RECURSIVE wqlist */ { - yymsp[-2].minor.yy343.cte_list = yymsp[0].minor.yy215; - yymsp[-2].minor.yy343.is_recursive = 1; + yymsp[-2].minor.yy25.cte_list = yymsp[0].minor.yy341; + yymsp[-2].minor.yy25.is_recursive = 1; } break; case 140: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret orderby_opt limit_opt */ { - if (yymsp[-1].minor.yy215 != SYNTAQLITE_NULL_NODE || yymsp[0].minor.yy215 != SYNTAQLITE_NULL_NODE) { + if (yymsp[-1].minor.yy341 != SYNTAQLITE_NULL_NODE || yymsp[0].minor.yy341 != SYNTAQLITE_NULL_NODE) { pCtx->saw_update_delete_limit = 1; if (!SYNQ_HAS_CFLAG(pCtx->env, SYNQ_CFLAG_IDX_ENABLE_UPDATE_DELETE_LIMIT)) { pCtx->error = 1; @@ -18092,16 +18109,16 @@ static YYACTIONTYPE yy_reduce( SyntaqliteIndexHint ih = (yymsp[-3].minor.yy0.z != NULL) ? SYNTAQLITE_INDEX_HINT_INDEXED : (yymsp[-3].minor.yy0.n == 1) ? SYNTAQLITE_INDEX_HINT_NOT_INDEXED : SYNTAQLITE_INDEX_HINT_DEFAULT; - yylhsminor.yy215 = synq_parse_delete_stmt(pCtx, - yymsp[-7].minor.yy343.cte_list, - yymsp[-7].minor.yy343.is_recursive ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-4].minor.yy215, ih, synq_span(pCtx, yymsp[-3].minor.yy0), yymsp[-2].minor.yy735.where_expr, yymsp[-1].minor.yy215, yymsp[0].minor.yy215, yymsp[-2].minor.yy735.returning); + yylhsminor.yy341 = synq_parse_delete_stmt(pCtx, + yymsp[-7].minor.yy25.cte_list, + yymsp[-7].minor.yy25.is_recursive ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-4].minor.yy341, ih, synq_span(pCtx, yymsp[-3].minor.yy0), yymsp[-2].minor.yy15.where_expr, yymsp[-1].minor.yy341, yymsp[0].minor.yy341, yymsp[-2].minor.yy15.returning); } - yymsp[-7].minor.yy215 = yylhsminor.yy215; + yymsp[-7].minor.yy341 = yylhsminor.yy341; break; case 141: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret orderby_opt limit_opt */ { - if (yymsp[-1].minor.yy215 != SYNTAQLITE_NULL_NODE || yymsp[0].minor.yy215 != SYNTAQLITE_NULL_NODE) { + if (yymsp[-1].minor.yy341 != SYNTAQLITE_NULL_NODE || yymsp[0].minor.yy341 != SYNTAQLITE_NULL_NODE) { pCtx->saw_update_delete_limit = 1; if (!SYNQ_HAS_CFLAG(pCtx->env, SYNQ_CFLAG_IDX_ENABLE_UPDATE_DELETE_LIMIT)) { pCtx->error = 1; @@ -18110,108 +18127,108 @@ static YYACTIONTYPE yy_reduce( SyntaqliteIndexHint ih = (yymsp[-6].minor.yy0.z != NULL) ? SYNTAQLITE_INDEX_HINT_INDEXED : (yymsp[-6].minor.yy0.n == 1) ? SYNTAQLITE_INDEX_HINT_NOT_INDEXED : SYNTAQLITE_INDEX_HINT_DEFAULT; - yylhsminor.yy215 = synq_parse_update_stmt(pCtx, - yymsp[-10].minor.yy343.cte_list, - yymsp[-10].minor.yy343.is_recursive ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - (SyntaqliteConflictAction)yymsp[-8].minor.yy724, yymsp[-7].minor.yy215, ih, synq_span(pCtx, yymsp[-6].minor.yy0), yymsp[-4].minor.yy215, yymsp[-3].minor.yy215, yymsp[-2].minor.yy735.where_expr, yymsp[-1].minor.yy215, yymsp[0].minor.yy215, yymsp[-2].minor.yy735.returning); + yylhsminor.yy341 = synq_parse_update_stmt(pCtx, + yymsp[-10].minor.yy25.cte_list, + yymsp[-10].minor.yy25.is_recursive ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + (SyntaqliteConflictAction)yymsp[-8].minor.yy692, yymsp[-7].minor.yy341, ih, synq_span(pCtx, yymsp[-6].minor.yy0), yymsp[-4].minor.yy341, yymsp[-3].minor.yy341, yymsp[-2].minor.yy15.where_expr, yymsp[-1].minor.yy341, yymsp[0].minor.yy341, yymsp[-2].minor.yy15.returning); } - yymsp[-10].minor.yy215 = yylhsminor.yy215; + yymsp[-10].minor.yy341 = yylhsminor.yy341; break; case 142: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ { - yylhsminor.yy215 = synq_parse_insert_stmt(pCtx, - yymsp[-6].minor.yy343.cte_list, - yymsp[-6].minor.yy343.is_recursive ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-5].minor.yy88.keyword, yymsp[-5].minor.yy88.conflict_action, yymsp[-3].minor.yy215, yymsp[-2].minor.yy215, yymsp[-1].minor.yy215, yymsp[0].minor.yy212.clauses, yymsp[0].minor.yy212.returning); + yylhsminor.yy341 = synq_parse_insert_stmt(pCtx, + yymsp[-6].minor.yy25.cte_list, + yymsp[-6].minor.yy25.is_recursive ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-5].minor.yy98.keyword, yymsp[-5].minor.yy98.conflict_action, yymsp[-3].minor.yy341, yymsp[-2].minor.yy341, yymsp[-1].minor.yy341, yymsp[0].minor.yy376.clauses, yymsp[0].minor.yy376.returning); } - yymsp[-6].minor.yy215 = yylhsminor.yy215; + yymsp[-6].minor.yy341 = yylhsminor.yy341; break; case 143: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ { - yylhsminor.yy215 = synq_parse_insert_stmt(pCtx, - yymsp[-7].minor.yy343.cte_list, - yymsp[-7].minor.yy343.is_recursive ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-6].minor.yy88.keyword, yymsp[-6].minor.yy88.conflict_action, yymsp[-4].minor.yy215, yymsp[-3].minor.yy215, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_insert_stmt(pCtx, + yymsp[-7].minor.yy25.cte_list, + yymsp[-7].minor.yy25.is_recursive ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-6].minor.yy98.keyword, yymsp[-6].minor.yy98.conflict_action, yymsp[-4].minor.yy341, yymsp[-3].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } - yymsp[-7].minor.yy215 = yylhsminor.yy215; + yymsp[-7].minor.yy341 = yylhsminor.yy341; break; case 144: /* insert_cmd ::= INSERT orconf */ { - yymsp[-1].minor.yy88.keyword = SYNTAQLITE_INSERT_KEYWORD_INSERT; - yymsp[-1].minor.yy88.conflict_action = (SyntaqliteConflictAction)yymsp[0].minor.yy724; + yymsp[-1].minor.yy98.keyword = SYNTAQLITE_INSERT_KEYWORD_INSERT; + yymsp[-1].minor.yy98.conflict_action = (SyntaqliteConflictAction)yymsp[0].minor.yy692; } break; case 145: /* insert_cmd ::= REPLACE */ { - yymsp[0].minor.yy88.keyword = SYNTAQLITE_INSERT_KEYWORD_REPLACE; - yymsp[0].minor.yy88.conflict_action = SYNTAQLITE_CONFLICT_ACTION_REPLACE; + yymsp[0].minor.yy98.keyword = SYNTAQLITE_INSERT_KEYWORD_REPLACE; + yymsp[0].minor.yy98.conflict_action = SYNTAQLITE_CONFLICT_ACTION_REPLACE; } break; case 147: /* orconf ::= OR resolvetype */ case 404: /* frame_exclude_opt ::= EXCLUDE frame_exclude */ yytestcase(yyruleno==404); { - yymsp[-1].minor.yy724 = yymsp[0].minor.yy724; + yymsp[-1].minor.yy692 = yymsp[0].minor.yy692; } break; case 148: /* resolvetype ::= raisetype */ { // raisetype: ROLLBACK=1, ABORT=2, FAIL=3 (SynqRaiseType enum values) // ConflictAction: ROLLBACK=1, ABORT=2, FAIL=3 (same values, direct passthrough) - yylhsminor.yy724 = yymsp[0].minor.yy724; + yylhsminor.yy692 = yymsp[0].minor.yy692; } - yymsp[0].minor.yy724 = yylhsminor.yy724; + yymsp[0].minor.yy692 = yylhsminor.yy692; break; case 149: /* resolvetype ::= IGNORE */ { - yymsp[0].minor.yy724 = (int)SYNTAQLITE_CONFLICT_ACTION_IGNORE; + yymsp[0].minor.yy692 = (int)SYNTAQLITE_CONFLICT_ACTION_IGNORE; } break; case 150: /* resolvetype ::= REPLACE */ { - yymsp[0].minor.yy724 = (int)SYNTAQLITE_CONFLICT_ACTION_REPLACE; + yymsp[0].minor.yy692 = (int)SYNTAQLITE_CONFLICT_ACTION_REPLACE; } break; case 151: /* xfullname ::= nm */ { - yylhsminor.yy215 = synq_parse_table_ref(pCtx, + yylhsminor.yy341 = synq_parse_table_ref(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0), SYNQ_NO_SPAN, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 152: /* xfullname ::= nm DOT nm */ { - yylhsminor.yy215 = synq_parse_table_ref(pCtx, + yylhsminor.yy341 = synq_parse_table_ref(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0), synq_span_dequote(pCtx, yymsp[-2].minor.yy0), SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 153: /* xfullname ::= nm DOT nm AS nm */ { uint32_t alias = synq_parse_ident_name(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); - yylhsminor.yy215 = synq_parse_table_ref(pCtx, + yylhsminor.yy341 = synq_parse_table_ref(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), synq_span_dequote(pCtx, yymsp[-4].minor.yy0), SYNTAQLITE_BOOL_FALSE, alias, SYNTAQLITE_BOOL_TRUE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 154: /* xfullname ::= nm AS nm */ { uint32_t alias = synq_parse_ident_name(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); - yylhsminor.yy215 = synq_parse_table_ref(pCtx, + yylhsminor.yy341 = synq_parse_table_ref(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), SYNQ_NO_SPAN, SYNTAQLITE_BOOL_FALSE, alias, SYNTAQLITE_BOOL_TRUE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 156: /* indexed_opt ::= indexed_by */ case 316: /* trnm ::= nm */ yytestcase(yyruleno==316); @@ -18230,116 +18247,116 @@ static YYACTIONTYPE yy_reduce( break; case 157: /* where_opt_ret ::= */ { - yymsp[1].minor.yy735.where_expr = SYNTAQLITE_NULL_NODE; - yymsp[1].minor.yy735.returning = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy15.where_expr = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy15.returning = SYNTAQLITE_NULL_NODE; } break; case 158: /* where_opt_ret ::= WHERE expr */ { - yymsp[-1].minor.yy735.where_expr = yymsp[0].minor.yy215; - yymsp[-1].minor.yy735.returning = SYNTAQLITE_NULL_NODE; + yymsp[-1].minor.yy15.where_expr = yymsp[0].minor.yy341; + yymsp[-1].minor.yy15.returning = SYNTAQLITE_NULL_NODE; } break; case 159: /* where_opt_ret ::= RETURNING selcollist */ { - yymsp[-1].minor.yy735.where_expr = SYNTAQLITE_NULL_NODE; - yymsp[-1].minor.yy735.returning = yymsp[0].minor.yy215; + yymsp[-1].minor.yy15.where_expr = SYNTAQLITE_NULL_NODE; + yymsp[-1].minor.yy15.returning = yymsp[0].minor.yy341; } break; case 160: /* where_opt_ret ::= WHERE expr RETURNING selcollist */ { - yymsp[-3].minor.yy735.where_expr = yymsp[-2].minor.yy215; - yymsp[-3].minor.yy735.returning = yymsp[0].minor.yy215; + yymsp[-3].minor.yy15.where_expr = yymsp[-2].minor.yy341; + yymsp[-3].minor.yy15.returning = yymsp[0].minor.yy341; } break; case 161: /* setlist ::= setlist COMMA nm EQ expr */ { uint32_t clause = synq_parse_set_clause(pCtx, - synq_span(pCtx, yymsp[-2].minor.yy0), SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); - yylhsminor.yy215 = synq_parse_set_clause_list(pCtx, yymsp[-4].minor.yy215, clause); + synq_span(pCtx, yymsp[-2].minor.yy0), SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); + yylhsminor.yy341 = synq_parse_set_clause_list(pCtx, yymsp[-4].minor.yy341, clause); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 162: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ { uint32_t clause = synq_parse_set_clause(pCtx, - SYNQ_NO_SPAN, yymsp[-3].minor.yy215, yymsp[0].minor.yy215); - yylhsminor.yy215 = synq_parse_set_clause_list(pCtx, yymsp[-6].minor.yy215, clause); + SYNQ_NO_SPAN, yymsp[-3].minor.yy341, yymsp[0].minor.yy341); + yylhsminor.yy341 = synq_parse_set_clause_list(pCtx, yymsp[-6].minor.yy341, clause); } - yymsp[-6].minor.yy215 = yylhsminor.yy215; + yymsp[-6].minor.yy341 = yylhsminor.yy341; break; case 163: /* setlist ::= nm EQ expr */ { uint32_t clause = synq_parse_set_clause(pCtx, - synq_span(pCtx, yymsp[-2].minor.yy0), SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); - yylhsminor.yy215 = synq_parse_set_clause_list(pCtx, SYNTAQLITE_NULL_NODE, clause); + synq_span(pCtx, yymsp[-2].minor.yy0), SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); + yylhsminor.yy341 = synq_parse_set_clause_list(pCtx, SYNTAQLITE_NULL_NODE, clause); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 164: /* setlist ::= LP idlist RP EQ expr */ { uint32_t clause = synq_parse_set_clause(pCtx, - SYNQ_NO_SPAN, yymsp[-3].minor.yy215, yymsp[0].minor.yy215); - yymsp[-4].minor.yy215 = synq_parse_set_clause_list(pCtx, SYNTAQLITE_NULL_NODE, clause); + SYNQ_NO_SPAN, yymsp[-3].minor.yy341, yymsp[0].minor.yy341); + yymsp[-4].minor.yy341 = synq_parse_set_clause_list(pCtx, SYNTAQLITE_NULL_NODE, clause); } break; case 167: /* upsert ::= */ { - yymsp[1].minor.yy212.clauses = SYNTAQLITE_NULL_NODE; - yymsp[1].minor.yy212.returning = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy376.clauses = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy376.returning = SYNTAQLITE_NULL_NODE; } break; case 168: /* upsert ::= RETURNING selcollist */ { - yymsp[-1].minor.yy212.clauses = SYNTAQLITE_NULL_NODE; - yymsp[-1].minor.yy212.returning = yymsp[0].minor.yy215; + yymsp[-1].minor.yy376.clauses = SYNTAQLITE_NULL_NODE; + yymsp[-1].minor.yy376.returning = yymsp[0].minor.yy341; } break; case 169: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ { - uint32_t clause = synq_parse_upsert_clause(pCtx, yymsp[-8].minor.yy215, yymsp[-6].minor.yy215, (SyntaqliteUpsertAction)SYNTAQLITE_UPSERT_ACTION_UPDATE, yymsp[-2].minor.yy215, yymsp[-1].minor.yy215); - yymsp[-11].minor.yy212.clauses = synq_parse_upsert_clause_list(pCtx, yymsp[0].minor.yy212.clauses, clause); - yymsp[-11].minor.yy212.returning = yymsp[0].minor.yy212.returning; + uint32_t clause = synq_parse_upsert_clause(pCtx, yymsp[-8].minor.yy341, yymsp[-6].minor.yy341, (SyntaqliteUpsertAction)SYNTAQLITE_UPSERT_ACTION_UPDATE, yymsp[-2].minor.yy341, yymsp[-1].minor.yy341); + yymsp[-11].minor.yy376.clauses = synq_parse_upsert_clause_list(pCtx, yymsp[0].minor.yy376.clauses, clause); + yymsp[-11].minor.yy376.returning = yymsp[0].minor.yy376.returning; } break; case 170: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ { - uint32_t clause = synq_parse_upsert_clause(pCtx, yymsp[-5].minor.yy215, yymsp[-3].minor.yy215, (SyntaqliteUpsertAction)SYNTAQLITE_UPSERT_ACTION_NOTHING, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); - yymsp[-8].minor.yy212.clauses = synq_parse_upsert_clause_list(pCtx, yymsp[0].minor.yy212.clauses, clause); - yymsp[-8].minor.yy212.returning = yymsp[0].minor.yy212.returning; + uint32_t clause = synq_parse_upsert_clause(pCtx, yymsp[-5].minor.yy341, yymsp[-3].minor.yy341, (SyntaqliteUpsertAction)SYNTAQLITE_UPSERT_ACTION_NOTHING, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); + yymsp[-8].minor.yy376.clauses = synq_parse_upsert_clause_list(pCtx, yymsp[0].minor.yy376.clauses, clause); + yymsp[-8].minor.yy376.returning = yymsp[0].minor.yy376.returning; } break; case 171: /* upsert ::= ON CONFLICT DO NOTHING returning */ { uint32_t clause = synq_parse_upsert_clause(pCtx, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, (SyntaqliteUpsertAction)SYNTAQLITE_UPSERT_ACTION_NOTHING, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); - yymsp[-4].minor.yy212.clauses = synq_parse_upsert_clause_list(pCtx, SYNTAQLITE_NULL_NODE, clause); - yymsp[-4].minor.yy212.returning = yymsp[0].minor.yy215; + yymsp[-4].minor.yy376.clauses = synq_parse_upsert_clause_list(pCtx, SYNTAQLITE_NULL_NODE, clause); + yymsp[-4].minor.yy376.returning = yymsp[0].minor.yy341; } break; case 172: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ { - uint32_t clause = synq_parse_upsert_clause(pCtx, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, (SyntaqliteUpsertAction)SYNTAQLITE_UPSERT_ACTION_UPDATE, yymsp[-2].minor.yy215, yymsp[-1].minor.yy215); - yymsp[-7].minor.yy212.clauses = synq_parse_upsert_clause_list(pCtx, SYNTAQLITE_NULL_NODE, clause); - yymsp[-7].minor.yy212.returning = yymsp[0].minor.yy215; + uint32_t clause = synq_parse_upsert_clause(pCtx, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, (SyntaqliteUpsertAction)SYNTAQLITE_UPSERT_ACTION_UPDATE, yymsp[-2].minor.yy341, yymsp[-1].minor.yy341); + yymsp[-7].minor.yy376.clauses = synq_parse_upsert_clause_list(pCtx, SYNTAQLITE_NULL_NODE, clause); + yymsp[-7].minor.yy376.returning = yymsp[0].minor.yy341; } break; case 175: /* expr ::= error */ case 202: /* nmorerr ::= error */ yytestcase(yyruleno==202); { - yymsp[0].minor.yy215 = synq_parse_error(pCtx, synq_error_span(pCtx)); + yymsp[0].minor.yy341 = synq_parse_error(pCtx, synq_error_span(pCtx)); } break; case 177: /* expr ::= LP expr RP */ { - yymsp[-2].minor.yy215 = synq_parse_paren_expr(pCtx, yymsp[-1].minor.yy215); + yymsp[-2].minor.yy341 = synq_parse_paren_expr(pCtx, yymsp[-1].minor.yy341); } break; case 178: /* expr ::= expr PLUS|MINUS expr */ { SyntaqliteBinaryOp op = (yymsp[-1].minor.yy0.type == SYNTAQLITE_TK_PLUS) ? SYNTAQLITE_BINARY_OP_PLUS : SYNTAQLITE_BINARY_OP_MINUS; - yylhsminor.yy215 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 179: /* expr ::= expr STAR|SLASH|REM expr */ { @@ -18349,9 +18366,9 @@ static YYACTIONTYPE yy_reduce( case SYNTAQLITE_TK_SLASH: op = SYNTAQLITE_BINARY_OP_SLASH; break; default: op = SYNTAQLITE_BINARY_OP_REM; break; } - yylhsminor.yy215 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 180: /* expr ::= expr LT|GT|GE|LE expr */ { @@ -18362,9 +18379,9 @@ static YYACTIONTYPE yy_reduce( case SYNTAQLITE_TK_LE: op = SYNTAQLITE_BINARY_OP_LE; break; default: op = SYNTAQLITE_BINARY_OP_GE; break; } - yylhsminor.yy215 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 181: /* expr ::= expr EQ|NE expr */ { @@ -18377,21 +18394,21 @@ static YYACTIONTYPE yy_reduce( op = (yymsp[-1].minor.yy0.n == 2 && yymsp[-1].minor.yy0.z[0] == '<') ? SYNTAQLITE_BINARY_OP_NE_ANGLE : SYNTAQLITE_BINARY_OP_NE; } - yylhsminor.yy215 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 182: /* expr ::= expr AND expr */ { - yylhsminor.yy215 = synq_parse_binary_expr(pCtx, SYNTAQLITE_BINARY_OP_AND, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_binary_expr(pCtx, SYNTAQLITE_BINARY_OP_AND, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 183: /* expr ::= expr OR expr */ { - yylhsminor.yy215 = synq_parse_binary_expr(pCtx, SYNTAQLITE_BINARY_OP_OR, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_binary_expr(pCtx, SYNTAQLITE_BINARY_OP_OR, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 184: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ { @@ -18402,106 +18419,106 @@ static YYACTIONTYPE yy_reduce( case SYNTAQLITE_TK_LSHIFT: op = SYNTAQLITE_BINARY_OP_LSHIFT; break; default: op = SYNTAQLITE_BINARY_OP_RSHIFT; break; } - yylhsminor.yy215 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 185: /* expr ::= expr CONCAT expr */ { - yylhsminor.yy215 = synq_parse_binary_expr(pCtx, SYNTAQLITE_BINARY_OP_CONCAT, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_binary_expr(pCtx, SYNTAQLITE_BINARY_OP_CONCAT, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 186: /* expr ::= expr PTR expr */ { SyntaqliteBinaryOp op = (yymsp[-1].minor.yy0.n == 3) ? SYNTAQLITE_BINARY_OP_PTR2 : SYNTAQLITE_BINARY_OP_PTR; - yylhsminor.yy215 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_binary_expr(pCtx, op, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 187: /* expr ::= PLUS|MINUS expr */ { SyntaqliteUnaryOp op = (yymsp[-1].minor.yy0.type == SYNTAQLITE_TK_MINUS) ? SYNTAQLITE_UNARY_OP_MINUS : SYNTAQLITE_UNARY_OP_PLUS; - yylhsminor.yy215 = synq_parse_unary_expr(pCtx, op, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_unary_expr(pCtx, op, yymsp[0].minor.yy341); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 188: /* expr ::= BITNOT expr */ { - yymsp[-1].minor.yy215 = synq_parse_unary_expr(pCtx, SYNTAQLITE_UNARY_OP_BIT_NOT, yymsp[0].minor.yy215); + yymsp[-1].minor.yy341 = synq_parse_unary_expr(pCtx, SYNTAQLITE_UNARY_OP_BIT_NOT, yymsp[0].minor.yy341); } break; case 189: /* expr ::= NOT expr */ { - yymsp[-1].minor.yy215 = synq_parse_unary_expr(pCtx, SYNTAQLITE_UNARY_OP_NOT, yymsp[0].minor.yy215); + yymsp[-1].minor.yy341 = synq_parse_unary_expr(pCtx, SYNTAQLITE_UNARY_OP_NOT, yymsp[0].minor.yy341); } break; case 192: /* nexprlist ::= nexprlist COMMA expr */ { - yylhsminor.yy215 = synq_parse_expr_list(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_expr_list(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 193: /* nexprlist ::= expr */ { - yylhsminor.yy215 = synq_parse_expr_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_expr_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 194: /* expr ::= LP nexprlist COMMA expr RP */ { - yymsp[-4].minor.yy215 = synq_parse_row_value(pCtx, synq_parse_expr_list(pCtx, yymsp[-3].minor.yy215, yymsp[-1].minor.yy215)); + yymsp[-4].minor.yy341 = synq_parse_row_value(pCtx, synq_parse_expr_list(pCtx, yymsp[-3].minor.yy341, yymsp[-1].minor.yy341)); } break; case 195: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ { synq_mark_as_function(pCtx, yymsp[-4].minor.yy0); - yylhsminor.yy215 = synq_parse_function_call(pCtx, + yylhsminor.yy341 = synq_parse_function_call(pCtx, synq_span(pCtx, yymsp[-4].minor.yy0), - (SyntaqliteFunctionCallFlags){.raw = (uint8_t)(yymsp[-2].minor.yy215 & 0xFF)}, - yymsp[-1].minor.yy215, + (SyntaqliteFunctionCallFlags){.raw = (uint8_t)(yymsp[-2].minor.yy341 & 0xFF)}, + yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 196: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ { synq_mark_as_function(pCtx, yymsp[-3].minor.yy0); - yylhsminor.yy215 = synq_parse_function_call(pCtx, + yylhsminor.yy341 = synq_parse_function_call(pCtx, synq_span(pCtx, yymsp[-3].minor.yy0), (SyntaqliteFunctionCallFlags){.raw = 0x02}, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } - yymsp[-3].minor.yy215 = yylhsminor.yy215; + yymsp[-3].minor.yy341 = yylhsminor.yy341; break; case 197: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ { - SyntaqliteFilterOver *fo = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy215); + SyntaqliteFilterOver *fo = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy341); synq_mark_as_function(pCtx, yymsp[-5].minor.yy0); - yylhsminor.yy215 = synq_parse_function_call(pCtx, + yylhsminor.yy341 = synq_parse_function_call(pCtx, synq_span(pCtx, yymsp[-5].minor.yy0), - (SyntaqliteFunctionCallFlags){.raw = (uint8_t)(yymsp[-3].minor.yy215 & 0xFF)}, - yymsp[-2].minor.yy215, + (SyntaqliteFunctionCallFlags){.raw = (uint8_t)(yymsp[-3].minor.yy341 & 0xFF)}, + yymsp[-2].minor.yy341, fo->filter_expr, fo->over_def); } - yymsp[-5].minor.yy215 = yylhsminor.yy215; + yymsp[-5].minor.yy341 = yylhsminor.yy341; break; case 198: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ { - SyntaqliteFilterOver *fo = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy215); + SyntaqliteFilterOver *fo = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy341); synq_mark_as_function(pCtx, yymsp[-4].minor.yy0); - yylhsminor.yy215 = synq_parse_function_call(pCtx, + yylhsminor.yy341 = synq_parse_function_call(pCtx, synq_span(pCtx, yymsp[-4].minor.yy0), (SyntaqliteFunctionCallFlags){.raw = 0x02}, SYNTAQLITE_NULL_NODE, fo->filter_expr, fo->over_def); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 199: /* nm ::= ID|INDEXED|JOIN_KW */ case 200: /* nm ::= STRING */ yytestcase(yyruleno==200); @@ -18513,21 +18530,21 @@ static YYACTIONTYPE yy_reduce( break; case 201: /* nmorerr ::= nm */ { - yylhsminor.yy215 = synq_parse_ident_name(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); + yylhsminor.yy341 = synq_parse_ident_name(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 203: /* term ::= INTEGER */ { - yylhsminor.yy215 = synq_parse_literal(pCtx, SYNTAQLITE_LITERAL_TYPE_INTEGER, synq_span(pCtx, yymsp[0].minor.yy0)); + yylhsminor.yy341 = synq_parse_literal(pCtx, SYNTAQLITE_LITERAL_TYPE_INTEGER, synq_span(pCtx, yymsp[0].minor.yy0)); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 204: /* term ::= STRING */ { - yylhsminor.yy215 = synq_parse_literal(pCtx, SYNTAQLITE_LITERAL_TYPE_STRING, synq_span(pCtx, yymsp[0].minor.yy0)); + yylhsminor.yy341 = synq_parse_literal(pCtx, SYNTAQLITE_LITERAL_TYPE_STRING, synq_span(pCtx, yymsp[0].minor.yy0)); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 205: /* term ::= NULL|FLOAT|BLOB */ { @@ -18538,24 +18555,24 @@ static YYACTIONTYPE yy_reduce( case SYNTAQLITE_TK_BLOB: lit_type = SYNTAQLITE_LITERAL_TYPE_BLOB; break; default: lit_type = SYNTAQLITE_LITERAL_TYPE_NULL; break; } - yylhsminor.yy215 = synq_parse_literal(pCtx, lit_type, synq_span(pCtx, yymsp[0].minor.yy0)); + yylhsminor.yy341 = synq_parse_literal(pCtx, lit_type, synq_span(pCtx, yymsp[0].minor.yy0)); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 206: /* term ::= QNUMBER */ { if (!synq_qnumber_is_valid(yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n)) { pCtx->error = 1; } - yylhsminor.yy215 = synq_parse_literal(pCtx, SYNTAQLITE_LITERAL_TYPE_QNUMBER, synq_span(pCtx, yymsp[0].minor.yy0)); + yylhsminor.yy341 = synq_parse_literal(pCtx, SYNTAQLITE_LITERAL_TYPE_QNUMBER, synq_span(pCtx, yymsp[0].minor.yy0)); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 207: /* term ::= CTIME_KW */ { - yylhsminor.yy215 = synq_parse_literal(pCtx, SYNTAQLITE_LITERAL_TYPE_CURRENT, synq_span(pCtx, yymsp[0].minor.yy0)); + yylhsminor.yy341 = synq_parse_literal(pCtx, SYNTAQLITE_LITERAL_TYPE_CURRENT, synq_span(pCtx, yymsp[0].minor.yy0)); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 208: /* expr ::= VARIABLE */ { @@ -18564,147 +18581,147 @@ static YYACTIONTYPE yy_reduce( if (yymsp[0].minor.yy0.n >= 2 && yymsp[0].minor.yy0.z[0] == '#' && yymsp[0].minor.yy0.z[1] >= '0' && yymsp[0].minor.yy0.z[1] <= '9') { pCtx->error = 1; } - yylhsminor.yy215 = synq_parse_variable(pCtx, synq_span(pCtx, yymsp[0].minor.yy0)); + yylhsminor.yy341 = synq_parse_variable(pCtx, synq_span(pCtx, yymsp[0].minor.yy0)); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 209: /* expr ::= expr COLLATE ID|STRING */ { - yylhsminor.yy215 = synq_parse_collate_expr(pCtx, yymsp[-2].minor.yy215, synq_span(pCtx, yymsp[0].minor.yy0)); + yylhsminor.yy341 = synq_parse_collate_expr(pCtx, yymsp[-2].minor.yy341, synq_span(pCtx, yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 210: /* sortlist ::= sortlist COMMA expr sortorder nulls */ { - uint32_t term = synq_parse_ordering_term(pCtx, yymsp[-2].minor.yy215, (SyntaqliteSortOrder)yymsp[-1].minor.yy215, (SyntaqliteNullsOrder)yymsp[0].minor.yy215); - yylhsminor.yy215 = synq_parse_order_by_list(pCtx, yymsp[-4].minor.yy215, term); + uint32_t term = synq_parse_ordering_term(pCtx, yymsp[-2].minor.yy341, (SyntaqliteSortOrder)yymsp[-1].minor.yy341, (SyntaqliteNullsOrder)yymsp[0].minor.yy341); + yylhsminor.yy341 = synq_parse_order_by_list(pCtx, yymsp[-4].minor.yy341, term); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 211: /* sortlist ::= expr sortorder nulls */ { - uint32_t term = synq_parse_ordering_term(pCtx, yymsp[-2].minor.yy215, (SyntaqliteSortOrder)yymsp[-1].minor.yy215, (SyntaqliteNullsOrder)yymsp[0].minor.yy215); - yylhsminor.yy215 = synq_parse_order_by_list(pCtx, SYNTAQLITE_NULL_NODE, term); + uint32_t term = synq_parse_ordering_term(pCtx, yymsp[-2].minor.yy341, (SyntaqliteSortOrder)yymsp[-1].minor.yy341, (SyntaqliteNullsOrder)yymsp[0].minor.yy341); + yylhsminor.yy341 = synq_parse_order_by_list(pCtx, SYNTAQLITE_NULL_NODE, term); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 212: /* sortorder ::= ASC */ case 267: /* distinct ::= DISTINCT */ yytestcase(yyruleno==267); { - yymsp[0].minor.yy215 = 1; + yymsp[0].minor.yy341 = 1; } break; case 213: /* sortorder ::= DESC */ { - yymsp[0].minor.yy215 = 2; + yymsp[0].minor.yy341 = 2; } break; case 214: /* sortorder ::= */ { - yymsp[1].minor.yy215 = SYNQ_SORTORDER_NONE; + yymsp[1].minor.yy341 = SYNQ_SORTORDER_NONE; } break; case 216: /* nulls ::= NULLS LAST */ { - yymsp[-1].minor.yy215 = 2; + yymsp[-1].minor.yy341 = 2; } break; case 217: /* nulls ::= */ case 269: /* distinct ::= */ yytestcase(yyruleno==269); { - yymsp[1].minor.yy215 = 0; + yymsp[1].minor.yy341 = 0; } break; case 218: /* expr ::= RAISE LP IGNORE RP */ { - yymsp[-3].minor.yy215 = synq_parse_raise_expr(pCtx, SYNTAQLITE_RAISE_TYPE_IGNORE, SYNTAQLITE_NULL_NODE); + yymsp[-3].minor.yy341 = synq_parse_raise_expr(pCtx, SYNTAQLITE_RAISE_TYPE_IGNORE, SYNTAQLITE_NULL_NODE); } break; case 219: /* expr ::= RAISE LP raisetype COMMA expr RP */ { - yymsp[-5].minor.yy215 = synq_parse_raise_expr(pCtx, (SyntaqliteRaiseType)yymsp[-3].minor.yy724, yymsp[-1].minor.yy215); + yymsp[-5].minor.yy341 = synq_parse_raise_expr(pCtx, (SyntaqliteRaiseType)yymsp[-3].minor.yy692, yymsp[-1].minor.yy341); } break; case 220: /* raisetype ::= ROLLBACK */ -{ yymsp[0].minor.yy724 = SYNTAQLITE_RAISE_TYPE_ROLLBACK; } +{ yymsp[0].minor.yy692 = SYNTAQLITE_RAISE_TYPE_ROLLBACK; } break; case 221: /* raisetype ::= ABORT */ -{ yymsp[0].minor.yy724 = SYNTAQLITE_RAISE_TYPE_ABORT; } +{ yymsp[0].minor.yy692 = SYNTAQLITE_RAISE_TYPE_ABORT; } break; case 222: /* raisetype ::= FAIL */ -{ yymsp[0].minor.yy724 = SYNTAQLITE_RAISE_TYPE_FAIL; } +{ yymsp[0].minor.yy692 = SYNTAQLITE_RAISE_TYPE_FAIL; } break; case 223: /* fullname ::= nmorerr */ { - yylhsminor.yy215 = synq_parse_qualified_name(pCtx, - yymsp[0].minor.yy215, + yylhsminor.yy341 = synq_parse_qualified_name(pCtx, + yymsp[0].minor.yy341, SYNTAQLITE_NULL_NODE); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 224: /* fullname ::= nmorerr DOT nmorerr */ { - yylhsminor.yy215 = synq_parse_qualified_name(pCtx, - yymsp[0].minor.yy215, - yymsp[-2].minor.yy215); + yylhsminor.yy341 = synq_parse_qualified_name(pCtx, + yymsp[0].minor.yy341, + yymsp[-2].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 227: /* cmd ::= DROP TABLE ifexists fullname */ { - yymsp[-3].minor.yy215 = synq_parse_drop_stmt(pCtx, SYNTAQLITE_DROP_OBJECT_TYPE_TABLE, (SyntaqliteBool)yymsp[-1].minor.yy724, yymsp[0].minor.yy215); + yymsp[-3].minor.yy341 = synq_parse_drop_stmt(pCtx, SYNTAQLITE_DROP_OBJECT_TYPE_TABLE, (SyntaqliteBool)yymsp[-1].minor.yy692, yymsp[0].minor.yy341); } break; case 228: /* cmd ::= DROP VIEW ifexists fullname */ { - yymsp[-3].minor.yy215 = synq_parse_drop_stmt(pCtx, SYNTAQLITE_DROP_OBJECT_TYPE_VIEW, (SyntaqliteBool)yymsp[-1].minor.yy724, yymsp[0].minor.yy215); + yymsp[-3].minor.yy341 = synq_parse_drop_stmt(pCtx, SYNTAQLITE_DROP_OBJECT_TYPE_VIEW, (SyntaqliteBool)yymsp[-1].minor.yy692, yymsp[0].minor.yy341); } break; case 229: /* cmd ::= DROP INDEX ifexists fullname */ { - yymsp[-3].minor.yy215 = synq_parse_drop_stmt(pCtx, SYNTAQLITE_DROP_OBJECT_TYPE_INDEX, (SyntaqliteBool)yymsp[-1].minor.yy724, yymsp[0].minor.yy215); + yymsp[-3].minor.yy341 = synq_parse_drop_stmt(pCtx, SYNTAQLITE_DROP_OBJECT_TYPE_INDEX, (SyntaqliteBool)yymsp[-1].minor.yy692, yymsp[0].minor.yy341); } break; case 230: /* cmd ::= DROP TRIGGER ifexists fullname */ { - yymsp[-3].minor.yy215 = synq_parse_drop_stmt(pCtx, SYNTAQLITE_DROP_OBJECT_TYPE_TRIGGER, (SyntaqliteBool)yymsp[-1].minor.yy724, yymsp[0].minor.yy215); + yymsp[-3].minor.yy341 = synq_parse_drop_stmt(pCtx, SYNTAQLITE_DROP_OBJECT_TYPE_TRIGGER, (SyntaqliteBool)yymsp[-1].minor.yy692, yymsp[0].minor.yy341); } break; case 231: /* cmd ::= ALTER TABLE fullname RENAME TO nmorerr */ { - yymsp[-5].minor.yy215 = synq_parse_alter_table_stmt(pCtx, - SYNTAQLITE_ALTER_OP_RENAME_TABLE, SYNTAQLITE_BOOL_FALSE, yymsp[-3].minor.yy215, - yymsp[0].minor.yy215, + yymsp[-5].minor.yy341 = synq_parse_alter_table_stmt(pCtx, + SYNTAQLITE_ALTER_OP_RENAME_TABLE, SYNTAQLITE_BOOL_FALSE, yymsp[-3].minor.yy341, + yymsp[0].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } break; case 232: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nmorerr TO nmorerr */ { - yymsp[-7].minor.yy215 = synq_parse_alter_table_stmt(pCtx, + yymsp[-7].minor.yy341 = synq_parse_alter_table_stmt(pCtx, SYNTAQLITE_ALTER_OP_RENAME_COLUMN, - yymsp[-3].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[-5].minor.yy215, - yymsp[0].minor.yy215, - yymsp[-2].minor.yy215, + yymsp[-3].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[-5].minor.yy341, + yymsp[0].minor.yy341, + yymsp[-2].minor.yy341, SYNTAQLITE_NULL_NODE); } break; case 233: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nmorerr */ { - yymsp[-5].minor.yy215 = synq_parse_alter_table_stmt(pCtx, + yymsp[-5].minor.yy341 = synq_parse_alter_table_stmt(pCtx, SYNTAQLITE_ALTER_OP_DROP_COLUMN, - yymsp[-1].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[-3].minor.yy215, + yymsp[-1].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[-3].minor.yy341, SYNTAQLITE_NULL_NODE, - yymsp[0].minor.yy215, + yymsp[0].minor.yy341, SYNTAQLITE_NULL_NODE); } break; case 234: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ { - uint32_t col = synq_parse_column_def(pCtx, yymsp[-1].minor.yy386.name, yymsp[-1].minor.yy386.typetoken, yymsp[0].minor.yy215); - yymsp[-6].minor.yy215 = synq_parse_alter_table_stmt(pCtx, + uint32_t col = synq_parse_column_def(pCtx, yymsp[-1].minor.yy192.name, yymsp[-1].minor.yy192.typetoken, yymsp[0].minor.yy341); + yymsp[-6].minor.yy341 = synq_parse_alter_table_stmt(pCtx, SYNTAQLITE_ALTER_OP_ADD_COLUMN, - yymsp[-2].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[-4].minor.yy215, + yymsp[-2].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[-4].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, col); @@ -18712,187 +18729,187 @@ static YYACTIONTYPE yy_reduce( break; case 238: /* columnname ::= nmorerr typetoken */ { - yylhsminor.yy386.name = yymsp[-1].minor.yy215; + yylhsminor.yy192.name = yymsp[-1].minor.yy341; pCtx->generated_always = synq_trim_generated_always(&yymsp[0].minor.yy0); - yylhsminor.yy386.typetoken = (yymsp[0].minor.yy0.z && yymsp[0].minor.yy0.n) ? synq_span(pCtx, yymsp[0].minor.yy0) : SYNQ_NO_SPAN; + yylhsminor.yy192.typetoken = (yymsp[0].minor.yy0.z && yymsp[0].minor.yy0.n) ? synq_span(pCtx, yymsp[0].minor.yy0) : SYNQ_NO_SPAN; } - yymsp[-1].minor.yy386 = yylhsminor.yy386; + yymsp[-1].minor.yy192 = yylhsminor.yy192; break; case 239: /* cmd ::= BEGIN transtype trans_opt */ { - yymsp[-2].minor.yy215 = synq_parse_transaction_stmt(pCtx, + yymsp[-2].minor.yy341 = synq_parse_transaction_stmt(pCtx, SYNTAQLITE_TRANSACTION_OP_BEGIN, - (SyntaqliteTransactionType)yymsp[-1].minor.yy724, - yymsp[0].minor.yy180.has_transaction ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[0].minor.yy180.name.z ? synq_span(pCtx, yymsp[0].minor.yy180.name) : SYNQ_NO_SPAN); + (SyntaqliteTransactionType)yymsp[-1].minor.yy692, + yymsp[0].minor.yy377.has_transaction ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[0].minor.yy377.name.z ? synq_span(pCtx, yymsp[0].minor.yy377.name) : SYNQ_NO_SPAN); } break; case 240: /* cmd ::= COMMIT|END trans_opt */ { // END and COMMIT mean the same thing to SQLite but are different text. - yylhsminor.yy215 = synq_parse_transaction_stmt(pCtx, + yylhsminor.yy341 = synq_parse_transaction_stmt(pCtx, yymsp[-1].minor.yy0.type == SYNTAQLITE_TK_END ? SYNTAQLITE_TRANSACTION_OP_END : SYNTAQLITE_TRANSACTION_OP_COMMIT, SYNTAQLITE_TRANSACTION_TYPE_NONE, - yymsp[0].minor.yy180.has_transaction ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[0].minor.yy180.name.z ? synq_span(pCtx, yymsp[0].minor.yy180.name) : SYNQ_NO_SPAN); + yymsp[0].minor.yy377.has_transaction ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[0].minor.yy377.name.z ? synq_span(pCtx, yymsp[0].minor.yy377.name) : SYNQ_NO_SPAN); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 241: /* cmd ::= ROLLBACK trans_opt */ { - yymsp[-1].minor.yy215 = synq_parse_transaction_stmt(pCtx, + yymsp[-1].minor.yy341 = synq_parse_transaction_stmt(pCtx, SYNTAQLITE_TRANSACTION_OP_ROLLBACK, SYNTAQLITE_TRANSACTION_TYPE_NONE, - yymsp[0].minor.yy180.has_transaction ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[0].minor.yy180.name.z ? synq_span(pCtx, yymsp[0].minor.yy180.name) : SYNQ_NO_SPAN); + yymsp[0].minor.yy377.has_transaction ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[0].minor.yy377.name.z ? synq_span(pCtx, yymsp[0].minor.yy377.name) : SYNQ_NO_SPAN); } break; case 242: /* transtype ::= */ { - yymsp[1].minor.yy724 = (int)SYNTAQLITE_TRANSACTION_TYPE_NONE; + yymsp[1].minor.yy692 = (int)SYNTAQLITE_TRANSACTION_TYPE_NONE; } break; case 243: /* transtype ::= DEFERRED */ { - yymsp[0].minor.yy724 = (int)SYNTAQLITE_TRANSACTION_TYPE_DEFERRED; + yymsp[0].minor.yy692 = (int)SYNTAQLITE_TRANSACTION_TYPE_DEFERRED; } break; case 244: /* transtype ::= IMMEDIATE */ { - yymsp[0].minor.yy724 = (int)SYNTAQLITE_TRANSACTION_TYPE_IMMEDIATE; + yymsp[0].minor.yy692 = (int)SYNTAQLITE_TRANSACTION_TYPE_IMMEDIATE; } break; case 245: /* transtype ::= EXCLUSIVE */ { - yymsp[0].minor.yy724 = (int)SYNTAQLITE_TRANSACTION_TYPE_EXCLUSIVE; + yymsp[0].minor.yy692 = (int)SYNTAQLITE_TRANSACTION_TYPE_EXCLUSIVE; } break; case 246: /* trans_opt ::= */ { - yymsp[1].minor.yy180.has_transaction = 0; - yymsp[1].minor.yy180.name.z = NULL; yymsp[1].minor.yy180.name.n = 0; + yymsp[1].minor.yy377.has_transaction = 0; + yymsp[1].minor.yy377.name.z = NULL; yymsp[1].minor.yy377.name.n = 0; } break; case 247: /* trans_opt ::= TRANSACTION */ { - yymsp[0].minor.yy180.has_transaction = 1; - yymsp[0].minor.yy180.name.z = NULL; yymsp[0].minor.yy180.name.n = 0; + yymsp[0].minor.yy377.has_transaction = 1; + yymsp[0].minor.yy377.name.z = NULL; yymsp[0].minor.yy377.name.n = 0; } break; case 248: /* trans_opt ::= TRANSACTION nm */ { - yymsp[-1].minor.yy180.has_transaction = 1; - yymsp[-1].minor.yy180.name = yymsp[0].minor.yy0; + yymsp[-1].minor.yy377.has_transaction = 1; + yymsp[-1].minor.yy377.name = yymsp[0].minor.yy0; } break; case 251: /* cmd ::= SAVEPOINT nmorerr */ { - yymsp[-1].minor.yy215 = synq_parse_savepoint_stmt(pCtx, + yymsp[-1].minor.yy341 = synq_parse_savepoint_stmt(pCtx, SYNTAQLITE_SAVEPOINT_OP_SAVEPOINT, - yymsp[0].minor.yy215, SYNTAQLITE_BOOL_TRUE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN); + yymsp[0].minor.yy341, SYNTAQLITE_BOOL_TRUE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN); } break; case 252: /* cmd ::= RELEASE savepoint_opt nmorerr */ { - yymsp[-2].minor.yy215 = synq_parse_savepoint_stmt(pCtx, + yymsp[-2].minor.yy341 = synq_parse_savepoint_stmt(pCtx, SYNTAQLITE_SAVEPOINT_OP_RELEASE, - yymsp[0].minor.yy215, yymsp[-1].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[0].minor.yy341, yymsp[-1].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN); } break; case 253: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nmorerr */ { - yymsp[-4].minor.yy215 = synq_parse_savepoint_stmt(pCtx, + yymsp[-4].minor.yy341 = synq_parse_savepoint_stmt(pCtx, SYNTAQLITE_SAVEPOINT_OP_ROLLBACK_TO, - yymsp[0].minor.yy215, yymsp[-1].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-3].minor.yy180.has_transaction ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-3].minor.yy180.name.z ? synq_span(pCtx, yymsp[-3].minor.yy180.name) : SYNQ_NO_SPAN); + yymsp[0].minor.yy341, yymsp[-1].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-3].minor.yy377.has_transaction ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-3].minor.yy377.name.z ? synq_span(pCtx, yymsp[-3].minor.yy377.name) : SYNQ_NO_SPAN); } break; case 257: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ { - yymsp[-8].minor.yy215 = synq_parse_select_stmt(pCtx, (SyntaqliteSelectStmtFlags){.raw = (uint8_t)(yymsp[-7].minor.yy215 & 0xFF)}, yymsp[-6].minor.yy215, yymsp[-5].minor.yy215, yymsp[-4].minor.yy215, yymsp[-3].minor.yy215, yymsp[-2].minor.yy215, yymsp[-1].minor.yy215, yymsp[0].minor.yy215, SYNTAQLITE_NULL_NODE); + yymsp[-8].minor.yy341 = synq_parse_select_stmt(pCtx, (SyntaqliteSelectStmtFlags){.raw = (uint8_t)(yymsp[-7].minor.yy341 & 0xFF)}, yymsp[-6].minor.yy341, yymsp[-5].minor.yy341, yymsp[-4].minor.yy341, yymsp[-3].minor.yy341, yymsp[-2].minor.yy341, yymsp[-1].minor.yy341, yymsp[0].minor.yy341, SYNTAQLITE_NULL_NODE); } break; case 258: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ { - yymsp[-9].minor.yy215 = synq_parse_select_stmt(pCtx, (SyntaqliteSelectStmtFlags){.raw = (uint8_t)(yymsp[-8].minor.yy215 & 0xFF)}, yymsp[-7].minor.yy215, yymsp[-6].minor.yy215, yymsp[-5].minor.yy215, yymsp[-4].minor.yy215, yymsp[-3].minor.yy215, yymsp[-1].minor.yy215, yymsp[0].minor.yy215, yymsp[-2].minor.yy215); + yymsp[-9].minor.yy341 = synq_parse_select_stmt(pCtx, (SyntaqliteSelectStmtFlags){.raw = (uint8_t)(yymsp[-8].minor.yy341 & 0xFF)}, yymsp[-7].minor.yy341, yymsp[-6].minor.yy341, yymsp[-5].minor.yy341, yymsp[-4].minor.yy341, yymsp[-3].minor.yy341, yymsp[-1].minor.yy341, yymsp[0].minor.yy341, yymsp[-2].minor.yy341); } break; case 259: /* selcollist ::= sclp scanpt expr scanpt as */ { - uint32_t col = synq_parse_result_column(pCtx, (SyntaqliteResultColumnFlags){0}, yymsp[0].minor.yy531.name, yymsp[0].minor.yy531.has_as, yymsp[-2].minor.yy215); - yylhsminor.yy215 = synq_parse_result_column_list(pCtx, yymsp[-4].minor.yy215, col); + uint32_t col = synq_parse_result_column(pCtx, (SyntaqliteResultColumnFlags){0}, yymsp[0].minor.yy3.name, yymsp[0].minor.yy3.has_as, yymsp[-2].minor.yy341); + yylhsminor.yy341 = synq_parse_result_column_list(pCtx, yymsp[-4].minor.yy341, col); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 260: /* selcollist ::= sclp scanpt STAR */ { uint32_t col = synq_parse_result_column(pCtx, (SyntaqliteResultColumnFlags){.raw = 0x01}, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE); - yylhsminor.yy215 = synq_parse_result_column_list(pCtx, yymsp[-2].minor.yy215, col); + yylhsminor.yy341 = synq_parse_result_column_list(pCtx, yymsp[-2].minor.yy341, col); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 264: /* as ::= AS nmorerr */ { - yymsp[-1].minor.yy531.name = synq_pass(pCtx, yymsp[0].minor.yy215); - yymsp[-1].minor.yy531.has_as = 1; + yymsp[-1].minor.yy3.name = synq_pass(pCtx, yymsp[0].minor.yy341); + yymsp[-1].minor.yy3.has_as = 1; } break; case 265: /* as ::= ID|STRING */ { - yylhsminor.yy531.name = synq_parse_ident_name(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); - yylhsminor.yy531.has_as = 0; + yylhsminor.yy3.name = synq_parse_ident_name(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); + yylhsminor.yy3.has_as = 0; } - yymsp[0].minor.yy531 = yylhsminor.yy531; + yymsp[0].minor.yy3 = yylhsminor.yy3; break; case 266: /* as ::= */ { - yymsp[1].minor.yy531.name = SYNTAQLITE_NULL_NODE; - yymsp[1].minor.yy531.has_as = 0; + yymsp[1].minor.yy3.name = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy3.has_as = 0; } break; case 268: /* distinct ::= ALL */ { // Bit 2 is STAR in FunctionCallFlags, so ALL takes bit 4 in every set // that this value is cast into. - yymsp[0].minor.yy215 = 4; + yymsp[0].minor.yy341 = 4; } break; case 275: /* groupby_opt ::= GROUP BY nexprlist */ case 279: /* orderby_opt ::= ORDER BY sortlist */ yytestcase(yyruleno==279); { - yymsp[-2].minor.yy215 = synq_pass(pCtx, yymsp[0].minor.yy215); + yymsp[-2].minor.yy341 = synq_pass(pCtx, yymsp[0].minor.yy341); } break; case 281: /* limit_opt ::= LIMIT expr */ { - yymsp[-1].minor.yy215 = synq_parse_limit_clause(pCtx, yymsp[0].minor.yy215, SYNTAQLITE_NULL_NODE, + yymsp[-1].minor.yy341 = synq_parse_limit_clause(pCtx, yymsp[0].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE); } break; case 282: /* limit_opt ::= LIMIT expr OFFSET expr */ { - yymsp[-3].minor.yy215 = synq_parse_limit_clause(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215, SYNTAQLITE_BOOL_FALSE); + yymsp[-3].minor.yy341 = synq_parse_limit_clause(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341, SYNTAQLITE_BOOL_FALSE); } break; case 283: /* limit_opt ::= LIMIT expr COMMA expr */ { - yymsp[-3].minor.yy215 = synq_parse_limit_clause(pCtx, yymsp[0].minor.yy215, yymsp[-2].minor.yy215, SYNTAQLITE_BOOL_TRUE); + yymsp[-3].minor.yy341 = synq_parse_limit_clause(pCtx, yymsp[0].minor.yy341, yymsp[-2].minor.yy341, SYNTAQLITE_BOOL_TRUE); } break; case 284: /* stl_prefix ::= seltablist joinop */ { - yymsp[-1].minor.yy215 = synq_parse_join_prefix(pCtx, yymsp[-1].minor.yy215, yymsp[0].minor.yy132.join_type, yymsp[0].minor.yy132.modifiers); + yymsp[-1].minor.yy341 = synq_parse_join_prefix(pCtx, yymsp[-1].minor.yy341, yymsp[0].minor.yy508.join_type, yymsp[0].minor.yy508.modifiers); } break; case 286: /* seltablist ::= stl_prefix nm dbnm as on_using */ { - uint32_t alias = yymsp[-1].minor.yy531.name; - SyntaqliteBool alias_as = yymsp[-1].minor.yy531.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE; + uint32_t alias = yymsp[-1].minor.yy3.name; + SyntaqliteBool alias_as = yymsp[-1].minor.yy3.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE; SyntaqliteTextSpan table_name; SyntaqliteTextSpan schema; if (yymsp[-2].minor.yy0.z != NULL) { @@ -18906,23 +18923,23 @@ static YYACTIONTYPE yy_reduce( SYNTAQLITE_BOOL_FALSE, alias, alias_as, SYNTAQLITE_NULL_NODE, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); - if (yymsp[-4].minor.yy215 == SYNTAQLITE_NULL_NODE) { - synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy346); - yymsp[-4].minor.yy215 = tref; + if (yymsp[-4].minor.yy341 == SYNTAQLITE_NULL_NODE) { + synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy696); + yymsp[-4].minor.yy341 = tref; } else { - SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-4].minor.yy215); - yymsp[-4].minor.yy215 = synq_parse_join_clause(pCtx, + SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-4].minor.yy341); + yymsp[-4].minor.yy341 = synq_parse_join_clause(pCtx, pfx->join_prefix.join_type, pfx->join_prefix.modifiers, pfx->join_prefix.source, - tref, yymsp[0].minor.yy346.on_expr, yymsp[0].minor.yy346.using_cols); + tref, yymsp[0].minor.yy696.on_expr, yymsp[0].minor.yy696.using_cols); } } break; case 287: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ { - uint32_t alias = yymsp[-2].minor.yy531.name; - SyntaqliteBool alias_as = yymsp[-2].minor.yy531.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE; + uint32_t alias = yymsp[-2].minor.yy3.name; + SyntaqliteBool alias_as = yymsp[-2].minor.yy3.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE; SyntaqliteTextSpan table_name; SyntaqliteTextSpan schema; if (yymsp[-3].minor.yy0.z != NULL) { @@ -18939,23 +18956,23 @@ static YYACTIONTYPE yy_reduce( SYNTAQLITE_BOOL_FALSE, alias, alias_as, SYNTAQLITE_NULL_NODE, ih, synq_span(pCtx, yymsp[-1].minor.yy0)); - if (yymsp[-5].minor.yy215 == SYNTAQLITE_NULL_NODE) { - synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy346); - yymsp[-5].minor.yy215 = tref; + if (yymsp[-5].minor.yy341 == SYNTAQLITE_NULL_NODE) { + synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy696); + yymsp[-5].minor.yy341 = tref; } else { - SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-5].minor.yy215); - yymsp[-5].minor.yy215 = synq_parse_join_clause(pCtx, + SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-5].minor.yy341); + yymsp[-5].minor.yy341 = synq_parse_join_clause(pCtx, pfx->join_prefix.join_type, pfx->join_prefix.modifiers, pfx->join_prefix.source, - tref, yymsp[0].minor.yy346.on_expr, yymsp[0].minor.yy346.using_cols); + tref, yymsp[0].minor.yy696.on_expr, yymsp[0].minor.yy696.using_cols); } } break; case 288: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ { - uint32_t alias = yymsp[-1].minor.yy531.name; - SyntaqliteBool alias_as = yymsp[-1].minor.yy531.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE; + uint32_t alias = yymsp[-1].minor.yy3.name; + SyntaqliteBool alias_as = yymsp[-1].minor.yy3.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE; SyntaqliteTextSpan table_name; SyntaqliteTextSpan schema; if (yymsp[-5].minor.yy0.z != NULL) { @@ -18967,101 +18984,101 @@ static YYACTIONTYPE yy_reduce( } uint32_t tref = synq_parse_table_ref(pCtx, table_name, schema, SYNTAQLITE_BOOL_TRUE, - alias, alias_as, yymsp[-3].minor.yy215, + alias, alias_as, yymsp[-3].minor.yy341, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); - if (yymsp[-7].minor.yy215 == SYNTAQLITE_NULL_NODE) { - synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy346); - yymsp[-7].minor.yy215 = tref; + if (yymsp[-7].minor.yy341 == SYNTAQLITE_NULL_NODE) { + synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy696); + yymsp[-7].minor.yy341 = tref; } else { - SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-7].minor.yy215); - yymsp[-7].minor.yy215 = synq_parse_join_clause(pCtx, + SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-7].minor.yy341); + yymsp[-7].minor.yy341 = synq_parse_join_clause(pCtx, pfx->join_prefix.join_type, pfx->join_prefix.modifiers, pfx->join_prefix.source, - tref, yymsp[0].minor.yy346.on_expr, yymsp[0].minor.yy346.using_cols); + tref, yymsp[0].minor.yy696.on_expr, yymsp[0].minor.yy696.using_cols); } } break; case 289: /* seltablist ::= stl_prefix LP select RP as on_using */ { pCtx->saw_subquery = 1; - uint32_t alias = yymsp[-1].minor.yy531.name; - SyntaqliteBool alias_as = yymsp[-1].minor.yy531.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE; - uint32_t sub = synq_parse_subquery_table_source(pCtx, yymsp[-3].minor.yy215, alias, alias_as); - if (yymsp[-5].minor.yy215 == SYNTAQLITE_NULL_NODE) { - synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy346); - yymsp[-5].minor.yy215 = sub; + uint32_t alias = yymsp[-1].minor.yy3.name; + SyntaqliteBool alias_as = yymsp[-1].minor.yy3.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE; + uint32_t sub = synq_parse_subquery_table_source(pCtx, yymsp[-3].minor.yy341, alias, alias_as); + if (yymsp[-5].minor.yy341 == SYNTAQLITE_NULL_NODE) { + synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy696); + yymsp[-5].minor.yy341 = sub; } else { - SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-5].minor.yy215); - yymsp[-5].minor.yy215 = synq_parse_join_clause(pCtx, + SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-5].minor.yy341); + yymsp[-5].minor.yy341 = synq_parse_join_clause(pCtx, pfx->join_prefix.join_type, pfx->join_prefix.modifiers, pfx->join_prefix.source, - sub, yymsp[0].minor.yy346.on_expr, yymsp[0].minor.yy346.using_cols); + sub, yymsp[0].minor.yy696.on_expr, yymsp[0].minor.yy696.using_cols); } } break; case 290: /* seltablist ::= stl_prefix LP seltablist RP as on_using */ { uint32_t paren = synq_parse_paren_table_source( - pCtx, yymsp[-3].minor.yy215, yymsp[-1].minor.yy531.name, - yymsp[-1].minor.yy531.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); - if (yymsp[-5].minor.yy215 == SYNTAQLITE_NULL_NODE) { - synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy346); - yymsp[-5].minor.yy215 = paren; + pCtx, yymsp[-3].minor.yy341, yymsp[-1].minor.yy3.name, + yymsp[-1].minor.yy3.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); + if (yymsp[-5].minor.yy341 == SYNTAQLITE_NULL_NODE) { + synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy696); + yymsp[-5].minor.yy341 = paren; } else { - SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-5].minor.yy215); - yymsp[-5].minor.yy215 = synq_parse_join_clause(pCtx, + SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-5].minor.yy341); + yymsp[-5].minor.yy341 = synq_parse_join_clause(pCtx, pfx->join_prefix.join_type, pfx->join_prefix.modifiers, pfx->join_prefix.source, - paren, yymsp[0].minor.yy346.on_expr, yymsp[0].minor.yy346.using_cols); + paren, yymsp[0].minor.yy696.on_expr, yymsp[0].minor.yy696.using_cols); } } break; case 291: /* joinop ::= COMMA|JOIN */ { - yylhsminor.yy132.join_type = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_COMMA) + yylhsminor.yy508.join_type = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_COMMA) ? SYNTAQLITE_JOIN_TYPE_COMMA : SYNTAQLITE_JOIN_TYPE_INNER; - yylhsminor.yy132.modifiers = SYNTAQLITE_NULL_NODE; + yylhsminor.yy508.modifiers = SYNTAQLITE_NULL_NODE; } - yymsp[0].minor.yy132 = yylhsminor.yy132; + yymsp[0].minor.yy508 = yylhsminor.yy508; break; case 292: /* joinop ::= JOIN_KW JOIN */ { - yylhsminor.yy132 = synq_join_operator(pCtx, &yymsp[-1].minor.yy0, NULL, NULL); + yylhsminor.yy508 = synq_join_operator(pCtx, &yymsp[-1].minor.yy0, NULL, NULL); } - yymsp[-1].minor.yy132 = yylhsminor.yy132; + yymsp[-1].minor.yy508 = yylhsminor.yy508; break; case 293: /* joinop ::= JOIN_KW nm JOIN */ { - yylhsminor.yy132 = synq_join_operator(pCtx, &yymsp[-2].minor.yy0, &yymsp[-1].minor.yy0, NULL); + yylhsminor.yy508 = synq_join_operator(pCtx, &yymsp[-2].minor.yy0, &yymsp[-1].minor.yy0, NULL); } - yymsp[-2].minor.yy132 = yylhsminor.yy132; + yymsp[-2].minor.yy508 = yylhsminor.yy508; break; case 294: /* joinop ::= JOIN_KW nm nm JOIN */ { - yylhsminor.yy132 = synq_join_operator(pCtx, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[-1].minor.yy0); + yylhsminor.yy508 = synq_join_operator(pCtx, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[-1].minor.yy0); } - yymsp[-3].minor.yy132 = yylhsminor.yy132; + yymsp[-3].minor.yy508 = yylhsminor.yy508; break; case 295: /* on_using ::= ON expr */ { - yymsp[-1].minor.yy346.on_expr = yymsp[0].minor.yy215; - yymsp[-1].minor.yy346.using_cols = SYNTAQLITE_NULL_NODE; + yymsp[-1].minor.yy696.on_expr = yymsp[0].minor.yy341; + yymsp[-1].minor.yy696.using_cols = SYNTAQLITE_NULL_NODE; } break; case 296: /* on_using ::= USING LP idlist RP */ { - yymsp[-3].minor.yy346.on_expr = SYNTAQLITE_NULL_NODE; - yymsp[-3].minor.yy346.using_cols = yymsp[-1].minor.yy215; + yymsp[-3].minor.yy696.on_expr = SYNTAQLITE_NULL_NODE; + yymsp[-3].minor.yy696.using_cols = yymsp[-1].minor.yy341; } break; case 297: /* on_using ::= */ { - yymsp[1].minor.yy346.on_expr = SYNTAQLITE_NULL_NODE; - yymsp[1].minor.yy346.using_cols = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy696.on_expr = SYNTAQLITE_NULL_NODE; + yymsp[1].minor.yy696.using_cols = SYNTAQLITE_NULL_NODE; } break; case 298: /* indexed_by ::= INDEXED BY nm */ @@ -19078,62 +19095,62 @@ static YYACTIONTYPE yy_reduce( { uint32_t col = synq_parse_column_ref(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0), SYNQ_NO_SPAN, SYNQ_NO_SPAN); - yymsp[-2].minor.yy215 = synq_parse_expr_list(pCtx, yymsp[-2].minor.yy215, col); + yymsp[-2].minor.yy341 = synq_parse_expr_list(pCtx, yymsp[-2].minor.yy341, col); } break; case 301: /* idlist ::= nm */ { uint32_t col = synq_parse_column_ref(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0), SYNQ_NO_SPAN, SYNQ_NO_SPAN); - yylhsminor.yy215 = synq_parse_expr_list(pCtx, SYNTAQLITE_NULL_NODE, col); + yylhsminor.yy341 = synq_parse_expr_list(pCtx, SYNTAQLITE_NULL_NODE, col); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 302: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ { - // yymsp[-3].minor.yy215 is a partially-built CreateTriggerStmt, fill in the body - SyntaqliteNode *trig = AST_NODE(&pCtx->ast, yymsp[-3].minor.yy215); - trig->create_trigger_stmt.body = yymsp[-1].minor.yy215; - yymsp[-4].minor.yy215 = synq_pass(pCtx, yymsp[-3].minor.yy215); + // yymsp[-3].minor.yy341 is a partially-built CreateTriggerStmt, fill in the body + SyntaqliteNode *trig = AST_NODE(&pCtx->ast, yymsp[-3].minor.yy341); + trig->create_trigger_stmt.body = yymsp[-1].minor.yy341; + yymsp[-4].minor.yy341 = synq_pass(pCtx, yymsp[-3].minor.yy341); } break; case 303: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ { SyntaqliteTextSpan trig_name = yymsp[-6].minor.yy0.z ? synq_span(pCtx, yymsp[-6].minor.yy0) : synq_span(pCtx, yymsp[-7].minor.yy0); SyntaqliteTextSpan trig_schema = yymsp[-6].minor.yy0.z ? synq_span(pCtx, yymsp[-7].minor.yy0) : SYNQ_NO_SPAN; - // yylhsminor.yy215 TEMP trigger always lives in the temp schema, so it cannot be qualified. - if (yymsp[-10].minor.yy648 != SYNTAQLITE_TEMPORARY_QUALIFIER_NONE && yymsp[-6].minor.yy0.z) { + // yylhsminor.yy341 TEMP trigger always lives in the temp schema, so it cannot be qualified. + if (yymsp[-10].minor.yy540 != SYNTAQLITE_TEMPORARY_QUALIFIER_NONE && yymsp[-6].minor.yy0.z) { pCtx->error = 1; } - yylhsminor.yy215 = synq_parse_create_trigger_stmt(pCtx, + yylhsminor.yy341 = synq_parse_create_trigger_stmt(pCtx, trig_name, trig_schema, - yymsp[-10].minor.yy648, - (SyntaqliteBool)yymsp[-8].minor.yy724, - (SyntaqliteTriggerTiming)yymsp[-5].minor.yy724, - yymsp[-1].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-4].minor.yy215, - yymsp[-2].minor.yy215, - yymsp[0].minor.yy215, + yymsp[-10].minor.yy540, + (SyntaqliteBool)yymsp[-8].minor.yy692, + (SyntaqliteTriggerTiming)yymsp[-5].minor.yy692, + yymsp[-1].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-4].minor.yy341, + yymsp[-2].minor.yy341, + yymsp[0].minor.yy341, SYNTAQLITE_NULL_NODE); // body filled in by cmd rule } - yymsp[-10].minor.yy215 = yylhsminor.yy215; + yymsp[-10].minor.yy341 = yylhsminor.yy341; break; case 304: /* trigger_time ::= BEFORE|AFTER */ { - yylhsminor.yy724 = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_BEFORE) ? (int)SYNTAQLITE_TRIGGER_TIMING_BEFORE + yylhsminor.yy692 = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_BEFORE) ? (int)SYNTAQLITE_TRIGGER_TIMING_BEFORE : (int)SYNTAQLITE_TRIGGER_TIMING_AFTER; } - yymsp[0].minor.yy724 = yylhsminor.yy724; + yymsp[0].minor.yy692 = yylhsminor.yy692; break; case 305: /* trigger_time ::= INSTEAD OF */ { - yymsp[-1].minor.yy724 = (int)SYNTAQLITE_TRIGGER_TIMING_INSTEAD_OF; + yymsp[-1].minor.yy692 = (int)SYNTAQLITE_TRIGGER_TIMING_INSTEAD_OF; } break; case 306: /* trigger_time ::= */ { - yymsp[1].minor.yy724 = (int)SYNTAQLITE_TRIGGER_TIMING_NONE; + yymsp[1].minor.yy692 = (int)SYNTAQLITE_TRIGGER_TIMING_NONE; } break; case 307: /* trigger_event ::= DELETE|INSERT */ @@ -19141,39 +19158,39 @@ static YYACTIONTYPE yy_reduce( SyntaqliteTriggerEventType evt = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_DELETE) ? SYNTAQLITE_TRIGGER_EVENT_TYPE_DELETE : SYNTAQLITE_TRIGGER_EVENT_TYPE_INSERT; - yylhsminor.yy215 = synq_parse_trigger_event(pCtx, evt, SYNTAQLITE_NULL_NODE); + yylhsminor.yy341 = synq_parse_trigger_event(pCtx, evt, SYNTAQLITE_NULL_NODE); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 308: /* trigger_event ::= UPDATE */ { - yymsp[0].minor.yy215 = synq_parse_trigger_event(pCtx, + yymsp[0].minor.yy341 = synq_parse_trigger_event(pCtx, SYNTAQLITE_TRIGGER_EVENT_TYPE_UPDATE, SYNTAQLITE_NULL_NODE); } break; case 309: /* trigger_event ::= UPDATE OF idlist */ { - yymsp[-2].minor.yy215 = synq_parse_trigger_event(pCtx, - SYNTAQLITE_TRIGGER_EVENT_TYPE_UPDATE, yymsp[0].minor.yy215); + yymsp[-2].minor.yy341 = synq_parse_trigger_event(pCtx, + SYNTAQLITE_TRIGGER_EVENT_TYPE_UPDATE, yymsp[0].minor.yy341); } break; case 311: /* foreach_clause ::= FOR EACH ROW */ case 361: /* ifnotexists ::= IF NOT EXISTS */ yytestcase(yyruleno==361); { - yymsp[-2].minor.yy724 = 1; + yymsp[-2].minor.yy692 = 1; } break; case 314: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ { - yylhsminor.yy215 = synq_parse_trigger_cmd_list(pCtx, yymsp[-2].minor.yy215, yymsp[-1].minor.yy215); + yylhsminor.yy341 = synq_parse_trigger_cmd_list(pCtx, yymsp[-2].minor.yy341, yymsp[-1].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 315: /* trigger_cmd_list ::= trigger_cmd SEMI */ { - yylhsminor.yy215 = synq_parse_trigger_cmd_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[-1].minor.yy215); + yylhsminor.yy341 = synq_parse_trigger_cmd_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[-1].minor.yy341); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 317: /* trnm ::= nm DOT nm */ { @@ -19201,11 +19218,11 @@ static YYACTIONTYPE yy_reduce( SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); - yymsp[-8].minor.yy215 = synq_parse_update_stmt(pCtx, + yymsp[-8].minor.yy341 = synq_parse_update_stmt(pCtx, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, - (SyntaqliteConflictAction)yymsp[-7].minor.yy724, tbl, + (SyntaqliteConflictAction)yymsp[-7].minor.yy692, tbl, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN, - yymsp[-3].minor.yy215, yymsp[-2].minor.yy215, yymsp[-1].minor.yy215, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); + yymsp[-3].minor.yy341, yymsp[-2].minor.yy341, yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } break; case 322: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ @@ -19215,13 +19232,13 @@ static YYACTIONTYPE yy_reduce( SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); - if (yymsp[-1].minor.yy212.returning != SYNTAQLITE_NULL_NODE) { + if (yymsp[-1].minor.yy376.returning != SYNTAQLITE_NULL_NODE) { pCtx->error = 1; } - yymsp[-7].minor.yy215 = synq_parse_insert_stmt(pCtx, + yymsp[-7].minor.yy341 = synq_parse_insert_stmt(pCtx, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, - yymsp[-6].minor.yy88.keyword, yymsp[-6].minor.yy88.conflict_action, tbl, yymsp[-3].minor.yy215, yymsp[-2].minor.yy215, - yymsp[-1].minor.yy212.clauses, yymsp[-1].minor.yy212.returning); + yymsp[-6].minor.yy98.keyword, yymsp[-6].minor.yy98.conflict_action, tbl, yymsp[-3].minor.yy341, yymsp[-2].minor.yy341, + yymsp[-1].minor.yy376.clauses, yymsp[-1].minor.yy376.returning); } break; case 323: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ @@ -19231,18 +19248,18 @@ static YYACTIONTYPE yy_reduce( SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN); - yymsp[-5].minor.yy215 = synq_parse_delete_stmt(pCtx, + yymsp[-5].minor.yy341 = synq_parse_delete_stmt(pCtx, SYNTAQLITE_NULL_NODE, SYNTAQLITE_BOOL_FALSE, tbl, SYNTAQLITE_INDEX_HINT_DEFAULT, SYNQ_NO_SPAN, - yymsp[-1].minor.yy215, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); + yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); } break; case 325: /* cmd ::= PRAGMA nm dbnm */ { SyntaqliteTextSpan name_span = yymsp[0].minor.yy0.z ? synq_span(pCtx, yymsp[0].minor.yy0) : synq_span(pCtx, yymsp[-1].minor.yy0); SyntaqliteTextSpan schema_span = yymsp[0].minor.yy0.z ? synq_span(pCtx, yymsp[-1].minor.yy0) : SYNQ_NO_SPAN; - yymsp[-2].minor.yy215 = synq_parse_pragma_stmt(pCtx, name_span, schema_span, SYNQ_NO_SPAN, SYNTAQLITE_PRAGMA_FORM_BARE); + yymsp[-2].minor.yy341 = synq_parse_pragma_stmt(pCtx, name_span, schema_span, SYNQ_NO_SPAN, SYNTAQLITE_PRAGMA_FORM_BARE); } break; case 326: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ @@ -19250,7 +19267,7 @@ static YYACTIONTYPE yy_reduce( { SyntaqliteTextSpan name_span = yymsp[-2].minor.yy0.z ? synq_span(pCtx, yymsp[-2].minor.yy0) : synq_span(pCtx, yymsp[-3].minor.yy0); SyntaqliteTextSpan schema_span = yymsp[-2].minor.yy0.z ? synq_span(pCtx, yymsp[-3].minor.yy0) : SYNQ_NO_SPAN; - yymsp[-4].minor.yy215 = synq_parse_pragma_stmt(pCtx, name_span, schema_span, synq_span(pCtx, yymsp[0].minor.yy0), SYNTAQLITE_PRAGMA_FORM_EQ); + yymsp[-4].minor.yy341 = synq_parse_pragma_stmt(pCtx, name_span, schema_span, synq_span(pCtx, yymsp[0].minor.yy0), SYNTAQLITE_PRAGMA_FORM_EQ); } break; case 327: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ @@ -19258,7 +19275,7 @@ static YYACTIONTYPE yy_reduce( { SyntaqliteTextSpan name_span = yymsp[-3].minor.yy0.z ? synq_span(pCtx, yymsp[-3].minor.yy0) : synq_span(pCtx, yymsp[-4].minor.yy0); SyntaqliteTextSpan schema_span = yymsp[-3].minor.yy0.z ? synq_span(pCtx, yymsp[-4].minor.yy0) : SYNQ_NO_SPAN; - yymsp[-5].minor.yy215 = synq_parse_pragma_stmt(pCtx, name_span, schema_span, synq_span(pCtx, yymsp[-1].minor.yy0), SYNTAQLITE_PRAGMA_FORM_CALL); + yymsp[-5].minor.yy341 = synq_parse_pragma_stmt(pCtx, name_span, schema_span, synq_span(pCtx, yymsp[-1].minor.yy0), SYNTAQLITE_PRAGMA_FORM_CALL); } break; case 335: /* plus_num ::= PLUS INTEGER|FLOAT */ @@ -19278,7 +19295,7 @@ static YYACTIONTYPE yy_reduce( break; case 340: /* cmd ::= ANALYZE */ { - yymsp[0].minor.yy215 = synq_parse_analyze_or_reindex_stmt(pCtx, + yymsp[0].minor.yy341 = synq_parse_analyze_or_reindex_stmt(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, SYNTAQLITE_ANALYZE_OR_REINDEX_OP_ANALYZE); @@ -19288,12 +19305,12 @@ static YYACTIONTYPE yy_reduce( { SyntaqliteTextSpan name_span = yymsp[0].minor.yy0.z ? synq_span(pCtx, yymsp[0].minor.yy0) : synq_span(pCtx, yymsp[-1].minor.yy0); SyntaqliteTextSpan schema_span = yymsp[0].minor.yy0.z ? synq_span(pCtx, yymsp[-1].minor.yy0) : SYNQ_NO_SPAN; - yymsp[-2].minor.yy215 = synq_parse_analyze_or_reindex_stmt(pCtx, name_span, schema_span, SYNTAQLITE_ANALYZE_OR_REINDEX_OP_ANALYZE); + yymsp[-2].minor.yy341 = synq_parse_analyze_or_reindex_stmt(pCtx, name_span, schema_span, SYNTAQLITE_ANALYZE_OR_REINDEX_OP_ANALYZE); } break; case 342: /* cmd ::= REINDEX */ { - yymsp[0].minor.yy215 = synq_parse_analyze_or_reindex_stmt(pCtx, + yymsp[0].minor.yy341 = synq_parse_analyze_or_reindex_stmt(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, SYNTAQLITE_ANALYZE_OR_REINDEX_OP_REINDEX); @@ -19303,51 +19320,51 @@ static YYACTIONTYPE yy_reduce( { SyntaqliteTextSpan name_span = yymsp[0].minor.yy0.z ? synq_span(pCtx, yymsp[0].minor.yy0) : synq_span(pCtx, yymsp[-1].minor.yy0); SyntaqliteTextSpan schema_span = yymsp[0].minor.yy0.z ? synq_span(pCtx, yymsp[-1].minor.yy0) : SYNQ_NO_SPAN; - yymsp[-2].minor.yy215 = synq_parse_analyze_or_reindex_stmt(pCtx, name_span, schema_span, 1); + yymsp[-2].minor.yy341 = synq_parse_analyze_or_reindex_stmt(pCtx, name_span, schema_span, 1); } break; case 344: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ { - yymsp[-5].minor.yy215 = synq_parse_attach_stmt(pCtx, - yymsp[-4].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[-3].minor.yy215, yymsp[-1].minor.yy215, yymsp[0].minor.yy215); + yymsp[-5].minor.yy341 = synq_parse_attach_stmt(pCtx, + yymsp[-4].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[-3].minor.yy341, yymsp[-1].minor.yy341, yymsp[0].minor.yy341); } break; case 345: /* cmd ::= DETACH database_kw_opt expr */ { - yymsp[-2].minor.yy215 = synq_parse_detach_stmt(pCtx, - yymsp[-1].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[0].minor.yy215); + yymsp[-2].minor.yy341 = synq_parse_detach_stmt(pCtx, + yymsp[-1].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, yymsp[0].minor.yy341); } break; case 350: /* cmd ::= VACUUM vinto */ { - yymsp[-1].minor.yy215 = synq_parse_vacuum_stmt(pCtx, + yymsp[-1].minor.yy341 = synq_parse_vacuum_stmt(pCtx, SYNQ_NO_SPAN, - yymsp[0].minor.yy215); + yymsp[0].minor.yy341); } break; case 351: /* cmd ::= VACUUM nm vinto */ { - yymsp[-2].minor.yy215 = synq_parse_vacuum_stmt(pCtx, + yymsp[-2].minor.yy341 = synq_parse_vacuum_stmt(pCtx, synq_span(pCtx, yymsp[-1].minor.yy0), - yymsp[0].minor.yy215); + yymsp[0].minor.yy341); } break; case 354: /* ecmd ::= explain cmdx SEMI */ { - (void)yymsp[-2].minor.yy724; - yylhsminor.yy215 = synq_pass(pCtx, yymsp[-1].minor.yy215); + (void)yymsp[-2].minor.yy692; + yylhsminor.yy341 = synq_pass(pCtx, yymsp[-1].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 355: /* explain ::= EXPLAIN */ { - yymsp[0].minor.yy724 = 1; + yymsp[0].minor.yy692 = 1; pCtx->pending_explain_mode = 1; } break; case 356: /* explain ::= EXPLAIN QUERY PLAN */ { - yymsp[-2].minor.yy724 = 2; + yymsp[-2].minor.yy692 = 2; pCtx->pending_explain_mode = 2; } break; @@ -19355,59 +19372,59 @@ static YYACTIONTYPE yy_reduce( { SyntaqliteTextSpan idx_name = yymsp[-6].minor.yy0.z ? synq_span(pCtx, yymsp[-6].minor.yy0) : synq_span(pCtx, yymsp[-7].minor.yy0); SyntaqliteTextSpan idx_schema = yymsp[-6].minor.yy0.z ? synq_span(pCtx, yymsp[-7].minor.yy0) : SYNQ_NO_SPAN; - yymsp[-11].minor.yy215 = synq_parse_create_index_stmt(pCtx, + yymsp[-11].minor.yy341 = synq_parse_create_index_stmt(pCtx, idx_name, idx_schema, synq_span(pCtx, yymsp[-4].minor.yy0), - (SyntaqliteBool)yymsp[-10].minor.yy724, - (SyntaqliteBool)yymsp[-8].minor.yy724, - yymsp[-2].minor.yy215, - yymsp[0].minor.yy215); + (SyntaqliteBool)yymsp[-10].minor.yy692, + (SyntaqliteBool)yymsp[-8].minor.yy692, + yymsp[-2].minor.yy341, + yymsp[0].minor.yy341); } break; case 362: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ { SyntaqliteTextSpan view_name = yymsp[-3].minor.yy0.z ? synq_span(pCtx, yymsp[-3].minor.yy0) : synq_span(pCtx, yymsp[-4].minor.yy0); SyntaqliteTextSpan view_schema = yymsp[-3].minor.yy0.z ? synq_span(pCtx, yymsp[-4].minor.yy0) : SYNQ_NO_SPAN; - yymsp[-8].minor.yy215 = synq_parse_create_view_stmt(pCtx, + yymsp[-8].minor.yy341 = synq_parse_create_view_stmt(pCtx, view_name, view_schema, - yymsp[-7].minor.yy648, - (SyntaqliteBool)yymsp[-5].minor.yy724, - yymsp[-2].minor.yy215, - yymsp[0].minor.yy215); + yymsp[-7].minor.yy540, + (SyntaqliteBool)yymsp[-5].minor.yy692, + yymsp[-2].minor.yy341, + yymsp[0].minor.yy341); } break; case 364: /* temp ::= TEMP */ { // SQLite maps both spellings to TEMP; retain the authored choice here. - yylhsminor.yy648 = yymsp[0].minor.yy0.n == 4 ? SYNTAQLITE_TEMPORARY_QUALIFIER_TEMP + yylhsminor.yy540 = yymsp[0].minor.yy0.n == 4 ? SYNTAQLITE_TEMPORARY_QUALIFIER_TEMP : SYNTAQLITE_TEMPORARY_QUALIFIER_TEMPORARY; } - yymsp[0].minor.yy648 = yylhsminor.yy648; + yymsp[0].minor.yy540 = yylhsminor.yy540; break; case 365: /* temp ::= */ { - yymsp[1].minor.yy648 = SYNTAQLITE_TEMPORARY_QUALIFIER_NONE; + yymsp[1].minor.yy540 = SYNTAQLITE_TEMPORARY_QUALIFIER_NONE; } break; case 366: /* values ::= VALUES LP nexprlist RP */ { - yymsp[-3].minor.yy215 = synq_parse_values_row_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[-1].minor.yy215); + yymsp[-3].minor.yy341 = synq_parse_values_row_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[-1].minor.yy341); } break; case 367: /* mvalues ::= values COMMA LP nexprlist RP */ case 368: /* mvalues ::= mvalues COMMA LP nexprlist RP */ yytestcase(yyruleno==368); { - yymsp[-4].minor.yy215 = synq_parse_values_row_list(pCtx, yymsp[-4].minor.yy215, yymsp[-1].minor.yy215); + yymsp[-4].minor.yy341 = synq_parse_values_row_list(pCtx, yymsp[-4].minor.yy341, yymsp[-1].minor.yy341); } break; case 369: /* oneselect ::= values */ case 370: /* oneselect ::= mvalues */ yytestcase(yyruleno==370); { - yylhsminor.yy215 = synq_parse_values_clause(pCtx, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_values_clause(pCtx, yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 372: /* cmd ::= create_vtab LP vtabarglist RP */ { @@ -19415,7 +19432,7 @@ static YYACTIONTYPE yy_reduce( // Use token offsets/layer_id so this works correctly when the statement // is produced by a macro expansion; LP and RP share a layer within the // same reduction. - SyntaqliteNode *vtab = AST_NODE(&pCtx->ast, yymsp[-3].minor.yy215); + SyntaqliteNode *vtab = AST_NODE(&pCtx->ast, yymsp[-3].minor.yy341); uint32_t args_start = yymsp[-2].minor.yy0.offset + yymsp[-2].minor.yy0.n; uint32_t args_end = yymsp[0].minor.yy0.offset; vtab->create_virtual_table_stmt.has_module_args = SYNTAQLITE_BOOL_TRUE; @@ -19425,19 +19442,19 @@ static YYACTIONTYPE yy_reduce( .flags = 0, ._layer_id = yymsp[-2].minor.yy0.layer_id, }; - yylhsminor.yy215 = synq_pass(pCtx, yymsp[-3].minor.yy215); + yylhsminor.yy341 = synq_pass(pCtx, yymsp[-3].minor.yy341); } - yymsp[-3].minor.yy215 = yylhsminor.yy215; + yymsp[-3].minor.yy341 = yylhsminor.yy341; break; case 373: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ { SyntaqliteTextSpan tbl_name = yymsp[-2].minor.yy0.z ? synq_span(pCtx, yymsp[-2].minor.yy0) : synq_span(pCtx, yymsp[-3].minor.yy0); SyntaqliteTextSpan tbl_schema = yymsp[-2].minor.yy0.z ? synq_span(pCtx, yymsp[-3].minor.yy0) : SYNQ_NO_SPAN; - yymsp[-7].minor.yy215 = synq_parse_create_virtual_table_stmt(pCtx, + yymsp[-7].minor.yy341 = synq_parse_create_virtual_table_stmt(pCtx, tbl_name, tbl_schema, synq_span(pCtx, yymsp[0].minor.yy0), - (SyntaqliteBool)yymsp[-4].minor.yy724, + (SyntaqliteBool)yymsp[-4].minor.yy692, SYNTAQLITE_BOOL_FALSE, SYNQ_NO_SPAN); // module_args = none by default } @@ -19456,130 +19473,130 @@ static YYACTIONTYPE yy_reduce( break; case 384: /* windowdefn_list ::= windowdefn */ { - yylhsminor.yy215 = synq_parse_named_window_def_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_named_window_def_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 385: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */ { - yylhsminor.yy215 = synq_parse_named_window_def_list(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_named_window_def_list(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 386: /* windowdefn ::= nm AS LP window RP */ { - yylhsminor.yy215 = synq_parse_named_window_def(pCtx, + yylhsminor.yy341 = synq_parse_named_window_def(pCtx, synq_span(pCtx, yymsp[-4].minor.yy0), - yymsp[-1].minor.yy215); + yymsp[-1].minor.yy341); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 387: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */ { - yymsp[-4].minor.yy215 = synq_parse_window_def(pCtx, + yymsp[-4].minor.yy341 = synq_parse_window_def(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, - yymsp[-2].minor.yy215, - yymsp[-1].minor.yy215, - yymsp[0].minor.yy215); + yymsp[-2].minor.yy341, + yymsp[-1].minor.yy341, + yymsp[0].minor.yy341); } break; case 388: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ { - yylhsminor.yy215 = synq_parse_window_def(pCtx, + yylhsminor.yy341 = synq_parse_window_def(pCtx, SYNQ_NO_SPAN, synq_span(pCtx, yymsp[-5].minor.yy0), - yymsp[-2].minor.yy215, - yymsp[-1].minor.yy215, - yymsp[0].minor.yy215); + yymsp[-2].minor.yy341, + yymsp[-1].minor.yy341, + yymsp[0].minor.yy341); } - yymsp[-5].minor.yy215 = yylhsminor.yy215; + yymsp[-5].minor.yy341 = yylhsminor.yy341; break; case 389: /* window ::= ORDER BY sortlist frame_opt */ { - yymsp[-3].minor.yy215 = synq_parse_window_def(pCtx, + yymsp[-3].minor.yy341 = synq_parse_window_def(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, SYNTAQLITE_NULL_NODE, - yymsp[-1].minor.yy215, - yymsp[0].minor.yy215); + yymsp[-1].minor.yy341, + yymsp[0].minor.yy341); } break; case 390: /* window ::= nm ORDER BY sortlist frame_opt */ { - yylhsminor.yy215 = synq_parse_window_def(pCtx, + yylhsminor.yy341 = synq_parse_window_def(pCtx, SYNQ_NO_SPAN, synq_span(pCtx, yymsp[-4].minor.yy0), SYNTAQLITE_NULL_NODE, - yymsp[-1].minor.yy215, - yymsp[0].minor.yy215); + yymsp[-1].minor.yy341, + yymsp[0].minor.yy341); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 391: /* window ::= frame_opt */ { - yylhsminor.yy215 = synq_parse_window_def(pCtx, + yylhsminor.yy341 = synq_parse_window_def(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, - yymsp[0].minor.yy215); + yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 392: /* window ::= nm frame_opt */ { - yylhsminor.yy215 = synq_parse_window_def(pCtx, + yylhsminor.yy341 = synq_parse_window_def(pCtx, SYNQ_NO_SPAN, synq_span(pCtx, yymsp[-1].minor.yy0), SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, - yymsp[0].minor.yy215); + yymsp[0].minor.yy341); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 394: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ { // Preserve shorthand: the semantic end is CURRENT ROW, but no end-bound // syntax was authored, so do not manufacture a node for it. - yylhsminor.yy215 = synq_parse_frame_spec(pCtx, - (SyntaqliteFrameType)yymsp[-2].minor.yy724, - (SyntaqliteFrameExclude)yymsp[0].minor.yy724, - yymsp[-1].minor.yy215, + yylhsminor.yy341 = synq_parse_frame_spec(pCtx, + (SyntaqliteFrameType)yymsp[-2].minor.yy692, + (SyntaqliteFrameExclude)yymsp[0].minor.yy692, + yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 395: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ { - yylhsminor.yy215 = synq_parse_frame_spec(pCtx, - (SyntaqliteFrameType)yymsp[-5].minor.yy724, - (SyntaqliteFrameExclude)yymsp[0].minor.yy724, - yymsp[-3].minor.yy215, - yymsp[-1].minor.yy215); + yylhsminor.yy341 = synq_parse_frame_spec(pCtx, + (SyntaqliteFrameType)yymsp[-5].minor.yy692, + (SyntaqliteFrameExclude)yymsp[0].minor.yy692, + yymsp[-3].minor.yy341, + yymsp[-1].minor.yy341); } - yymsp[-5].minor.yy215 = yylhsminor.yy215; + yymsp[-5].minor.yy341 = yylhsminor.yy341; break; case 396: /* range_or_rows ::= RANGE|ROWS|GROUPS */ { switch (yymsp[0].minor.yy0.type) { - case SYNTAQLITE_TK_RANGE: yylhsminor.yy724 = SYNTAQLITE_FRAME_TYPE_RANGE; break; - case SYNTAQLITE_TK_ROWS: yylhsminor.yy724 = SYNTAQLITE_FRAME_TYPE_ROWS; break; - default: yylhsminor.yy724 = SYNTAQLITE_FRAME_TYPE_GROUPS; break; + case SYNTAQLITE_TK_RANGE: yylhsminor.yy692 = SYNTAQLITE_FRAME_TYPE_RANGE; break; + case SYNTAQLITE_TK_ROWS: yylhsminor.yy692 = SYNTAQLITE_FRAME_TYPE_ROWS; break; + default: yylhsminor.yy692 = SYNTAQLITE_FRAME_TYPE_GROUPS; break; } } - yymsp[0].minor.yy724 = yylhsminor.yy724; + yymsp[0].minor.yy692 = yylhsminor.yy692; break; case 398: /* frame_bound_s ::= UNBOUNDED PRECEDING */ { - yymsp[-1].minor.yy215 = synq_parse_frame_bound(pCtx, + yymsp[-1].minor.yy341 = synq_parse_frame_bound(pCtx, SYNTAQLITE_FRAME_BOUND_TYPE_UNBOUNDED_PRECEDING, SYNTAQLITE_NULL_NODE); } break; case 400: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ { - yymsp[-1].minor.yy215 = synq_parse_frame_bound(pCtx, + yymsp[-1].minor.yy341 = synq_parse_frame_bound(pCtx, SYNTAQLITE_FRAME_BOUND_TYPE_UNBOUNDED_FOLLOWING, SYNTAQLITE_NULL_NODE); } @@ -19589,65 +19606,65 @@ static YYACTIONTYPE yy_reduce( SyntaqliteFrameBoundType bt = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_PRECEDING) ? SYNTAQLITE_FRAME_BOUND_TYPE_EXPR_PRECEDING : SYNTAQLITE_FRAME_BOUND_TYPE_EXPR_FOLLOWING; - yylhsminor.yy215 = synq_parse_frame_bound(pCtx, bt, yymsp[-1].minor.yy215); + yylhsminor.yy341 = synq_parse_frame_bound(pCtx, bt, yymsp[-1].minor.yy341); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 402: /* frame_bound ::= CURRENT ROW */ { - yymsp[-1].minor.yy215 = synq_parse_frame_bound(pCtx, + yymsp[-1].minor.yy341 = synq_parse_frame_bound(pCtx, SYNTAQLITE_FRAME_BOUND_TYPE_CURRENT_ROW, SYNTAQLITE_NULL_NODE); } break; case 403: /* frame_exclude_opt ::= */ { - yymsp[1].minor.yy724 = SYNTAQLITE_FRAME_EXCLUDE_NONE; + yymsp[1].minor.yy692 = SYNTAQLITE_FRAME_EXCLUDE_NONE; } break; case 405: /* frame_exclude ::= NO OTHERS */ { - yymsp[-1].minor.yy724 = SYNTAQLITE_FRAME_EXCLUDE_NO_OTHERS; + yymsp[-1].minor.yy692 = SYNTAQLITE_FRAME_EXCLUDE_NO_OTHERS; } break; case 406: /* frame_exclude ::= CURRENT ROW */ { - yymsp[-1].minor.yy724 = SYNTAQLITE_FRAME_EXCLUDE_CURRENT_ROW; + yymsp[-1].minor.yy692 = SYNTAQLITE_FRAME_EXCLUDE_CURRENT_ROW; } break; case 407: /* frame_exclude ::= GROUP|TIES */ { - yylhsminor.yy724 = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_GROUP) + yylhsminor.yy692 = (yymsp[0].minor.yy0.type == SYNTAQLITE_TK_GROUP) ? SYNTAQLITE_FRAME_EXCLUDE_GROUP : SYNTAQLITE_FRAME_EXCLUDE_TIES; } - yymsp[0].minor.yy724 = yylhsminor.yy724; + yymsp[0].minor.yy692 = yylhsminor.yy692; break; case 409: /* filter_over ::= filter_clause over_clause */ { // Unpack the over_clause FilterOver to combine with filter expr - SyntaqliteFilterOver *fo_over = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy215); - yylhsminor.yy215 = synq_parse_filter_over(pCtx, - yymsp[-1].minor.yy215, + SyntaqliteFilterOver *fo_over = AST_NODE_AS(SyntaqliteFilterOver, &pCtx->ast, yymsp[0].minor.yy341); + yylhsminor.yy341 = synq_parse_filter_over(pCtx, + yymsp[-1].minor.yy341, fo_over->over_def, SYNQ_NO_SPAN); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 411: /* filter_over ::= filter_clause */ { - yylhsminor.yy215 = synq_parse_filter_over(pCtx, - yymsp[0].minor.yy215, + yylhsminor.yy341 = synq_parse_filter_over(pCtx, + yymsp[0].minor.yy341, SYNTAQLITE_NULL_NODE, SYNQ_NO_SPAN); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 412: /* over_clause ::= OVER LP window RP */ { - yymsp[-3].minor.yy215 = synq_parse_filter_over(pCtx, + yymsp[-3].minor.yy341 = synq_parse_filter_over(pCtx, SYNTAQLITE_NULL_NODE, - yymsp[-1].minor.yy215, + yymsp[-1].minor.yy341, SYNQ_NO_SPAN); } break; @@ -19659,7 +19676,7 @@ static YYACTIONTYPE yy_reduce( SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE, SYNTAQLITE_NULL_NODE); - yymsp[-1].minor.yy215 = synq_parse_filter_over(pCtx, + yymsp[-1].minor.yy341 = synq_parse_filter_over(pCtx, SYNTAQLITE_NULL_NODE, wdef, SYNQ_NO_SPAN); @@ -19667,7 +19684,7 @@ static YYACTIONTYPE yy_reduce( break; case 414: /* filter_clause ::= FILTER LP WHERE expr RP */ { - yymsp[-4].minor.yy215 = synq_pass(pCtx, yymsp[-1].minor.yy215); + yymsp[-4].minor.yy341 = synq_pass(pCtx, yymsp[-1].minor.yy341); } break; case 418: /* perfetto_arg_type ::= ID LP ID DOT ID RP */ @@ -19688,116 +19705,116 @@ static YYACTIONTYPE yy_reduce( case 425: /* perfetto_table_schema ::= */ yytestcase(yyruleno==425); case 427: /* perfetto_table_impl ::= */ yytestcase(yyruleno==427); case 433: /* perfetto_macro_arg_list ::= */ yytestcase(yyruleno==433); - case 461: /* perfetto_pipe_except ::= */ yytestcase(yyruleno==461); - case 463: /* perfetto_pipe_replace ::= */ yytestcase(yyruleno==463); - case 485: /* perfetto_pipe_stage_list ::= */ yytestcase(yyruleno==485); - case 491: /* perfetto_per ::= */ yytestcase(yyruleno==491); -{ yymsp[1].minor.yy215 = SYNTAQLITE_NULL_NODE; } + case 462: /* perfetto_pipe_except ::= */ yytestcase(yyruleno==462); + case 464: /* perfetto_pipe_replace ::= */ yytestcase(yyruleno==464); + case 486: /* perfetto_pipe_stage_list ::= */ yytestcase(yyruleno==486); + case 492: /* perfetto_per ::= */ yytestcase(yyruleno==492); +{ yymsp[1].minor.yy341 = SYNTAQLITE_NULL_NODE; } break; case 420: /* perfetto_arg_def_list ::= perfetto_arg_def_list_ne */ case 434: /* perfetto_macro_arg_list ::= perfetto_macro_arg_list_ne */ yytestcase(yyruleno==434); - case 465: /* perfetto_pipe_select_item ::= perfetto_pipe_column */ yytestcase(yyruleno==465); - case 466: /* perfetto_pipe_select_item ::= perfetto_pipe_named_column */ yytestcase(yyruleno==466); - case 495: /* cmd ::= perfetto_pipeline */ yytestcase(yyruleno==495); -{ yylhsminor.yy215 = yymsp[0].minor.yy215; } - yymsp[0].minor.yy215 = yylhsminor.yy215; + case 466: /* perfetto_pipe_select_item ::= perfetto_pipe_column */ yytestcase(yyruleno==466); + case 467: /* perfetto_pipe_select_item ::= perfetto_pipe_named_column */ yytestcase(yyruleno==467); + case 496: /* cmd ::= perfetto_pipeline */ yytestcase(yyruleno==496); +{ yylhsminor.yy341 = yymsp[0].minor.yy341; } + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 421: /* perfetto_arg_def_list_ne ::= ID perfetto_arg_type */ { uint32_t arg = synq_parse_perfetto_arg_def(pCtx, synq_parse_ident_name(pCtx, synq_span(pCtx, yymsp[-1].minor.yy0)), synq_span(pCtx, yymsp[0].minor.yy0), SYNTAQLITE_BOOL_FALSE); - yylhsminor.yy215 = synq_parse_perfetto_arg_def_list(pCtx, SYNTAQLITE_NULL_NODE, arg); + yylhsminor.yy341 = synq_parse_perfetto_arg_def_list(pCtx, SYNTAQLITE_NULL_NODE, arg); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 422: /* perfetto_arg_def_list_ne ::= perfetto_arg_def_list_ne COMMA ID perfetto_arg_type */ { uint32_t arg = synq_parse_perfetto_arg_def(pCtx, synq_parse_ident_name(pCtx, synq_span(pCtx, yymsp[-1].minor.yy0)), synq_span(pCtx, yymsp[0].minor.yy0), SYNTAQLITE_BOOL_FALSE); - yylhsminor.yy215 = synq_parse_perfetto_arg_def_list(pCtx, yymsp[-3].minor.yy215, arg); + yylhsminor.yy341 = synq_parse_perfetto_arg_def_list(pCtx, yymsp[-3].minor.yy341, arg); } - yymsp[-3].minor.yy215 = yylhsminor.yy215; + yymsp[-3].minor.yy341 = yylhsminor.yy341; break; case 423: /* perfetto_arg_def_list_ne ::= ID perfetto_arg_type DOT DOT DOT */ { uint32_t arg = synq_parse_perfetto_arg_def(pCtx, synq_parse_ident_name(pCtx, synq_span(pCtx, yymsp[-4].minor.yy0)), synq_span(pCtx, yymsp[-3].minor.yy0), SYNTAQLITE_BOOL_TRUE); - yylhsminor.yy215 = synq_parse_perfetto_arg_def_list(pCtx, SYNTAQLITE_NULL_NODE, arg); + yylhsminor.yy341 = synq_parse_perfetto_arg_def_list(pCtx, SYNTAQLITE_NULL_NODE, arg); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; case 424: /* perfetto_arg_def_list_ne ::= perfetto_arg_def_list_ne COMMA ID perfetto_arg_type DOT DOT DOT */ { uint32_t arg = synq_parse_perfetto_arg_def(pCtx, synq_parse_ident_name(pCtx, synq_span(pCtx, yymsp[-4].minor.yy0)), synq_span(pCtx, yymsp[-3].minor.yy0), SYNTAQLITE_BOOL_TRUE); - yylhsminor.yy215 = synq_parse_perfetto_arg_def_list(pCtx, yymsp[-6].minor.yy215, arg); + yylhsminor.yy341 = synq_parse_perfetto_arg_def_list(pCtx, yymsp[-6].minor.yy341, arg); } - yymsp[-6].minor.yy215 = yylhsminor.yy215; + yymsp[-6].minor.yy341 = yylhsminor.yy341; break; case 426: /* perfetto_table_schema ::= LP perfetto_arg_def_list_ne RP */ -{ yymsp[-2].minor.yy215 = yymsp[-1].minor.yy215; } +{ yymsp[-2].minor.yy341 = yymsp[-1].minor.yy341; } break; case 428: /* perfetto_table_impl ::= USING ID */ { - yymsp[-1].minor.yy215 = synq_parse_perfetto_table_impl(pCtx, synq_span(pCtx, yymsp[0].minor.yy0)); + yymsp[-1].minor.yy341 = synq_parse_perfetto_table_impl(pCtx, synq_span(pCtx, yymsp[0].minor.yy0)); } break; case 429: /* perfetto_return_type ::= ID */ { synq_mark_as_type(pCtx, yymsp[0].minor.yy0); - yylhsminor.yy215 = synq_parse_perfetto_return_type(pCtx, + yylhsminor.yy341 = synq_parse_perfetto_return_type(pCtx, SYNTAQLITE_PERFETTO_RETURN_KIND_SCALAR, synq_span(pCtx, yymsp[0].minor.yy0), SYNTAQLITE_NULL_NODE); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 430: /* perfetto_return_type ::= TABLE LP perfetto_arg_def_list_ne RP */ { - yymsp[-3].minor.yy215 = synq_parse_perfetto_return_type(pCtx, + yymsp[-3].minor.yy341 = synq_parse_perfetto_return_type(pCtx, SYNTAQLITE_PERFETTO_RETURN_KIND_TABLE, SYNQ_NO_SPAN, - yymsp[-1].minor.yy215); + yymsp[-1].minor.yy341); } break; case 431: /* perfetto_indexed_col_list ::= ID */ { uint32_t col = synq_parse_perfetto_indexed_column(pCtx, synq_span(pCtx, yymsp[0].minor.yy0)); - yylhsminor.yy215 = synq_parse_perfetto_indexed_column_list(pCtx, SYNTAQLITE_NULL_NODE, col); + yylhsminor.yy341 = synq_parse_perfetto_indexed_column_list(pCtx, SYNTAQLITE_NULL_NODE, col); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; case 432: /* perfetto_indexed_col_list ::= perfetto_indexed_col_list COMMA ID */ { uint32_t col = synq_parse_perfetto_indexed_column(pCtx, synq_span(pCtx, yymsp[0].minor.yy0)); - yylhsminor.yy215 = synq_parse_perfetto_indexed_column_list(pCtx, yymsp[-2].minor.yy215, col); + yylhsminor.yy341 = synq_parse_perfetto_indexed_column_list(pCtx, yymsp[-2].minor.yy341, col); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 435: /* perfetto_macro_arg_list_ne ::= ID ID */ { synq_mark_as_type(pCtx, yymsp[0].minor.yy0); uint32_t arg = synq_parse_perfetto_macro_arg(pCtx, synq_span(pCtx, yymsp[-1].minor.yy0), synq_span(pCtx, yymsp[0].minor.yy0)); - yylhsminor.yy215 = synq_parse_perfetto_macro_arg_list(pCtx, SYNTAQLITE_NULL_NODE, arg); + yylhsminor.yy341 = synq_parse_perfetto_macro_arg_list(pCtx, SYNTAQLITE_NULL_NODE, arg); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; case 436: /* perfetto_macro_arg_list_ne ::= perfetto_macro_arg_list_ne COMMA ID ID */ { synq_mark_as_type(pCtx, yymsp[0].minor.yy0); uint32_t arg = synq_parse_perfetto_macro_arg(pCtx, synq_span(pCtx, yymsp[-1].minor.yy0), synq_span(pCtx, yymsp[0].minor.yy0)); - yylhsminor.yy215 = synq_parse_perfetto_macro_arg_list(pCtx, yymsp[-3].minor.yy215, arg); + yylhsminor.yy341 = synq_parse_perfetto_macro_arg_list(pCtx, yymsp[-3].minor.yy341, arg); } - yymsp[-3].minor.yy215 = yylhsminor.yy215; + yymsp[-3].minor.yy341 = yylhsminor.yy341; break; case 437: /* perfetto_module_name ::= ID|STAR|INTERSECT */ - case 504: /* perfetto_macro_body ::= ANY */ yytestcase(yyruleno==504); + case 508: /* perfetto_macro_body ::= ANY */ yytestcase(yyruleno==508); { yylhsminor.yy0 = yymsp[0].minor.yy0; } yymsp[0].minor.yy0 = yylhsminor.yy0; break; @@ -19815,19 +19832,19 @@ static YYACTIONTYPE yy_reduce( yymsp[-2].minor.yy0 = yylhsminor.yy0; break; case 439: /* select_body_start ::= */ -{ yymsp[1].minor.yy215 = pCtx->cur_shift_start; } +{ yymsp[1].minor.yy341 = pCtx->cur_shift_start; } break; case 440: /* select_body_end ::= */ -{ yymsp[1].minor.yy215 = pCtx->last_shifted_end; } +{ yymsp[1].minor.yy341 = pCtx->last_shifted_end; } break; case 441: /* perfetto_pipe ::= BITOR GT */ { if (yymsp[-1].minor.yy0.layer_id != yymsp[0].minor.yy0.layer_id || yymsp[-1].minor.yy0.offset + yymsp[-1].minor.yy0.n != yymsp[0].minor.yy0.offset) { pCtx->error = 1; } - yylhsminor.yy724 = 0; + yylhsminor.yy692 = 0; } - yymsp[-1].minor.yy724 = yylhsminor.yy724; + yymsp[-1].minor.yy692 = yylhsminor.yy692; break; case 442: /* perfetto_pipe_source ::= nm dbnm as */ { @@ -19840,322 +19857,356 @@ static YYACTIONTYPE yy_reduce( table_name = synq_span_dequote(pCtx, yymsp[-2].minor.yy0); schema = SYNQ_NO_SPAN; } - yylhsminor.yy215 = synq_parse_perfetto_pipe_source(pCtx, table_name, schema, - SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy531.name, - yymsp[0].minor.yy531.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); + yylhsminor.yy341 = synq_parse_perfetto_pipe_source(pCtx, table_name, schema, + SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy3.name, + yymsp[0].minor.yy3.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; case 443: /* perfetto_pipe_source ::= LP select RP as */ + case 444: /* perfetto_pipe_source ::= LP perfetto_pipeline RP as */ yytestcase(yyruleno==444); { - yymsp[-3].minor.yy215 = synq_parse_perfetto_pipe_source(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, - yymsp[-2].minor.yy215, yymsp[0].minor.yy531.name, yymsp[0].minor.yy531.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); + yymsp[-3].minor.yy341 = synq_parse_perfetto_pipe_source(pCtx, SYNQ_NO_SPAN, SYNQ_NO_SPAN, + yymsp[-2].minor.yy341, yymsp[0].minor.yy3.name, yymsp[0].minor.yy3.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); } break; - case 444: /* perfetto_tree_direction ::= UP */ -{ yymsp[0].minor.yy724 = SYNTAQLITE_PERFETTO_TREE_DIRECTION_UP; } + case 445: /* perfetto_tree_direction ::= UP */ +{ yymsp[0].minor.yy692 = SYNTAQLITE_PERFETTO_TREE_DIRECTION_UP; } break; - case 445: /* perfetto_tree_direction ::= DOWN */ -{ yymsp[0].minor.yy724 = SYNTAQLITE_PERFETTO_TREE_DIRECTION_DOWN; } + case 446: /* perfetto_tree_direction ::= DOWN */ +{ yymsp[0].minor.yy692 = SYNTAQLITE_PERFETTO_TREE_DIRECTION_DOWN; } break; - case 446: /* perfetto_tree_aggregate ::= expr AS nm */ + case 447: /* perfetto_tree_aggregate ::= expr AS nm */ { - yylhsminor.yy215 = synq_parse_perfetto_tree_aggregate(pCtx, yymsp[-2].minor.yy215, + yylhsminor.yy341 = synq_parse_perfetto_tree_aggregate(pCtx, yymsp[-2].minor.yy341, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 447: /* perfetto_tree_aggregate_list ::= perfetto_tree_aggregate */ + case 448: /* perfetto_tree_aggregate_list ::= perfetto_tree_aggregate */ { - yylhsminor.yy215 = synq_parse_perfetto_tree_aggregate_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_tree_aggregate_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; - case 448: /* perfetto_tree_aggregate_list ::= perfetto_tree_aggregate_list COMMA perfetto_tree_aggregate */ + case 449: /* perfetto_tree_aggregate_list ::= perfetto_tree_aggregate_list COMMA perfetto_tree_aggregate */ { - yylhsminor.yy215 = synq_parse_perfetto_tree_aggregate_list(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_tree_aggregate_list(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 449: /* perfetto_pipe_column ::= nm */ + case 450: /* perfetto_pipe_column ::= nm */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_column(pCtx, SYNQ_NO_SPAN, + yylhsminor.yy341 = synq_parse_perfetto_pipe_column(pCtx, SYNQ_NO_SPAN, synq_span_dequote(pCtx, yymsp[0].minor.yy0), SYNQ_NO_SPAN); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; - case 450: /* perfetto_pipe_column ::= nm DOT nm */ + case 451: /* perfetto_pipe_column ::= nm DOT nm */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_column(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), + yylhsminor.yy341 = synq_parse_perfetto_pipe_column(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), synq_span_dequote(pCtx, yymsp[0].minor.yy0), SYNQ_NO_SPAN); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 451: /* perfetto_pipe_named_column ::= nm AS nm */ - case 457: /* perfetto_pipe_replace_item ::= nm AS nm */ yytestcase(yyruleno==457); - case 471: /* perfetto_pipe_rename_item ::= nm AS nm */ yytestcase(yyruleno==471); + case 452: /* perfetto_pipe_named_column ::= nm AS nm */ + case 458: /* perfetto_pipe_replace_item ::= nm AS nm */ yytestcase(yyruleno==458); + case 472: /* perfetto_pipe_rename_item ::= nm AS nm */ yytestcase(yyruleno==472); { - yylhsminor.yy215 = synq_parse_perfetto_pipe_column(pCtx, SYNQ_NO_SPAN, + yylhsminor.yy341 = synq_parse_perfetto_pipe_column(pCtx, SYNQ_NO_SPAN, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), synq_span_dequote(pCtx, yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 452: /* perfetto_pipe_named_column ::= nm nm */ - case 472: /* perfetto_pipe_rename_item ::= nm nm */ yytestcase(yyruleno==472); + case 453: /* perfetto_pipe_named_column ::= nm nm */ + case 473: /* perfetto_pipe_rename_item ::= nm nm */ yytestcase(yyruleno==473); { - yylhsminor.yy215 = synq_parse_perfetto_pipe_column(pCtx, SYNQ_NO_SPAN, + yylhsminor.yy341 = synq_parse_perfetto_pipe_column(pCtx, SYNQ_NO_SPAN, synq_span_dequote(pCtx, yymsp[-1].minor.yy0), synq_span_dequote(pCtx, yymsp[0].minor.yy0)); } - yymsp[-1].minor.yy215 = yylhsminor.yy215; + yymsp[-1].minor.yy341 = yylhsminor.yy341; break; - case 453: /* perfetto_pipe_named_column ::= nm DOT nm AS nm */ - case 458: /* perfetto_pipe_replace_item ::= nm DOT nm AS nm */ yytestcase(yyruleno==458); + case 454: /* perfetto_pipe_named_column ::= nm DOT nm AS nm */ + case 459: /* perfetto_pipe_replace_item ::= nm DOT nm AS nm */ yytestcase(yyruleno==459); { - yylhsminor.yy215 = synq_parse_perfetto_pipe_column(pCtx, synq_span_dequote(pCtx, yymsp[-4].minor.yy0), + yylhsminor.yy341 = synq_parse_perfetto_pipe_column(pCtx, synq_span_dequote(pCtx, yymsp[-4].minor.yy0), synq_span_dequote(pCtx, yymsp[-2].minor.yy0), synq_span_dequote(pCtx, yymsp[0].minor.yy0)); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; - case 454: /* perfetto_pipe_named_column ::= nm DOT nm nm */ + case 455: /* perfetto_pipe_named_column ::= nm DOT nm nm */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_column(pCtx, synq_span_dequote(pCtx, yymsp[-3].minor.yy0), + yylhsminor.yy341 = synq_parse_perfetto_pipe_column(pCtx, synq_span_dequote(pCtx, yymsp[-3].minor.yy0), synq_span_dequote(pCtx, yymsp[-1].minor.yy0), synq_span_dequote(pCtx, yymsp[0].minor.yy0)); } - yymsp[-3].minor.yy215 = yylhsminor.yy215; + yymsp[-3].minor.yy341 = yylhsminor.yy341; break; - case 455: /* perfetto_pipe_name_list ::= nm */ + case 456: /* perfetto_pipe_name_list ::= nm */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_name_list(pCtx, SYNTAQLITE_NULL_NODE, + yylhsminor.yy341 = synq_parse_perfetto_pipe_name_list(pCtx, SYNTAQLITE_NULL_NODE, synq_parse_perfetto_pipe_name(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0))); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; - case 456: /* perfetto_pipe_name_list ::= perfetto_pipe_name_list COMMA nm */ + case 457: /* perfetto_pipe_name_list ::= perfetto_pipe_name_list COMMA nm */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_name_list(pCtx, yymsp[-2].minor.yy215, + yylhsminor.yy341 = synq_parse_perfetto_pipe_name_list(pCtx, yymsp[-2].minor.yy341, synq_parse_perfetto_pipe_name(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0))); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 459: /* perfetto_pipe_replace_list ::= perfetto_pipe_replace_item */ - case 473: /* perfetto_pipe_rename_list ::= perfetto_pipe_rename_item */ yytestcase(yyruleno==473); + case 460: /* perfetto_pipe_replace_list ::= perfetto_pipe_replace_item */ + case 474: /* perfetto_pipe_rename_list ::= perfetto_pipe_rename_item */ yytestcase(yyruleno==474); { - yylhsminor.yy215 = synq_parse_perfetto_pipe_column_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_column_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; - case 460: /* perfetto_pipe_replace_list ::= perfetto_pipe_replace_list COMMA perfetto_pipe_replace_item */ - case 474: /* perfetto_pipe_rename_list ::= perfetto_pipe_rename_list COMMA perfetto_pipe_rename_item */ yytestcase(yyruleno==474); + case 461: /* perfetto_pipe_replace_list ::= perfetto_pipe_replace_list COMMA perfetto_pipe_replace_item */ + case 475: /* perfetto_pipe_rename_list ::= perfetto_pipe_rename_list COMMA perfetto_pipe_rename_item */ yytestcase(yyruleno==475); { - yylhsminor.yy215 = synq_parse_perfetto_pipe_column_list(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_column_list(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 462: /* perfetto_pipe_except ::= EXCEPT LP perfetto_pipe_name_list RP */ - case 464: /* perfetto_pipe_replace ::= REPLACE LP perfetto_pipe_replace_list RP */ yytestcase(yyruleno==464); + case 463: /* perfetto_pipe_except ::= EXCEPT LP perfetto_pipe_name_list RP */ + case 465: /* perfetto_pipe_replace ::= REPLACE LP perfetto_pipe_replace_list RP */ yytestcase(yyruleno==465); { - yymsp[-3].minor.yy215 = yymsp[-1].minor.yy215; + yymsp[-3].minor.yy341 = yymsp[-1].minor.yy341; } break; - case 467: /* perfetto_pipe_select_item ::= STAR perfetto_pipe_except perfetto_pipe_replace */ + case 468: /* perfetto_pipe_select_item ::= STAR perfetto_pipe_except perfetto_pipe_replace */ { - yymsp[-2].minor.yy215 = synq_parse_perfetto_pipe_star(pCtx, SYNQ_NO_SPAN, yymsp[-1].minor.yy215, yymsp[0].minor.yy215); + yymsp[-2].minor.yy341 = synq_parse_perfetto_pipe_star(pCtx, SYNQ_NO_SPAN, yymsp[-1].minor.yy341, yymsp[0].minor.yy341); } break; - case 468: /* perfetto_pipe_select_item ::= nm DOT STAR perfetto_pipe_except perfetto_pipe_replace */ + case 469: /* perfetto_pipe_select_item ::= nm DOT STAR perfetto_pipe_except perfetto_pipe_replace */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_star(pCtx, synq_span_dequote(pCtx, yymsp[-4].minor.yy0), yymsp[-1].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_star(pCtx, synq_span_dequote(pCtx, yymsp[-4].minor.yy0), yymsp[-1].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-4].minor.yy215 = yylhsminor.yy215; + yymsp[-4].minor.yy341 = yylhsminor.yy341; break; - case 469: /* perfetto_pipe_select_list ::= perfetto_pipe_select_item */ + case 470: /* perfetto_pipe_select_list ::= perfetto_pipe_select_item */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_select_item_list(pCtx, SYNTAQLITE_NULL_NODE, - yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_select_item_list(pCtx, SYNTAQLITE_NULL_NODE, + yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; - case 470: /* perfetto_pipe_select_list ::= perfetto_pipe_select_list COMMA perfetto_pipe_select_item */ + case 471: /* perfetto_pipe_select_list ::= perfetto_pipe_select_list COMMA perfetto_pipe_select_item */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_select_item_list(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_select_item_list(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 475: /* perfetto_pipe_set_item ::= nm EQ perfetto_pipe_column */ + case 476: /* perfetto_pipe_set_item ::= nm EQ perfetto_pipe_column */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_set_item(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_set_item(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 476: /* perfetto_pipe_set_list ::= perfetto_pipe_set_item */ + case 477: /* perfetto_pipe_set_list ::= perfetto_pipe_set_item */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_set_item_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_set_item_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; - case 477: /* perfetto_pipe_set_list ::= perfetto_pipe_set_list COMMA perfetto_pipe_set_item */ + case 478: /* perfetto_pipe_set_list ::= perfetto_pipe_set_list COMMA perfetto_pipe_set_item */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_set_item_list(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_set_item_list(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 478: /* perfetto_pipe_stage ::= SELECT perfetto_pipe_select_list */ + case 479: /* perfetto_pipe_stage ::= SELECT perfetto_pipe_select_list */ { - yymsp[-1].minor.yy215 = synq_parse_perfetto_pipe_select(pCtx, yymsp[0].minor.yy215); + yymsp[-1].minor.yy341 = synq_parse_perfetto_pipe_select(pCtx, yymsp[0].minor.yy341); } break; - case 479: /* perfetto_pipe_stage ::= EXTEND perfetto_pipe_select_list */ + case 480: /* perfetto_pipe_stage ::= EXTEND perfetto_pipe_select_list */ { - yymsp[-1].minor.yy215 = synq_parse_perfetto_pipe_extend(pCtx, yymsp[0].minor.yy215); + yymsp[-1].minor.yy341 = synq_parse_perfetto_pipe_extend(pCtx, yymsp[0].minor.yy341); } break; - case 480: /* perfetto_pipe_stage ::= DROP perfetto_pipe_name_list */ + case 481: /* perfetto_pipe_stage ::= DROP perfetto_pipe_name_list */ { - yymsp[-1].minor.yy215 = synq_parse_perfetto_pipe_drop(pCtx, yymsp[0].minor.yy215); + yymsp[-1].minor.yy341 = synq_parse_perfetto_pipe_drop(pCtx, yymsp[0].minor.yy341); } break; - case 481: /* perfetto_pipe_stage ::= RENAME perfetto_pipe_rename_list */ + case 482: /* perfetto_pipe_stage ::= RENAME perfetto_pipe_rename_list */ { - yymsp[-1].minor.yy215 = synq_parse_perfetto_pipe_rename(pCtx, yymsp[0].minor.yy215); + yymsp[-1].minor.yy341 = synq_parse_perfetto_pipe_rename(pCtx, yymsp[0].minor.yy341); } break; - case 482: /* perfetto_pipe_stage ::= SET perfetto_pipe_set_list */ + case 483: /* perfetto_pipe_stage ::= SET perfetto_pipe_set_list */ { - yymsp[-1].minor.yy215 = synq_parse_perfetto_pipe_set(pCtx, yymsp[0].minor.yy215); + yymsp[-1].minor.yy341 = synq_parse_perfetto_pipe_set(pCtx, yymsp[0].minor.yy341); } break; - case 483: /* perfetto_pipe_stage ::= AS nm */ + case 484: /* perfetto_pipe_stage ::= AS nm */ { - yymsp[-1].minor.yy215 = synq_parse_perfetto_pipe_as(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); + yymsp[-1].minor.yy341 = synq_parse_perfetto_pipe_as(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); } break; - case 484: /* perfetto_pipe_stage ::= TREE ACCUMULATE perfetto_tree_direction perfetto_tree_aggregate_list */ + case 485: /* perfetto_pipe_stage ::= TREE ACCUMULATE perfetto_tree_direction perfetto_tree_aggregate_list */ { - yymsp[-3].minor.yy215 = synq_parse_perfetto_tree_accumulate(pCtx, - (SyntaqlitePerfettoTreeDirection)yymsp[-1].minor.yy724, yymsp[0].minor.yy215); + yymsp[-3].minor.yy341 = synq_parse_perfetto_tree_accumulate(pCtx, + (SyntaqlitePerfettoTreeDirection)yymsp[-1].minor.yy692, yymsp[0].minor.yy341); } break; - case 486: /* perfetto_pipe_stage_list ::= perfetto_pipe_stage_list perfetto_pipe perfetto_pipe_stage */ + case 487: /* perfetto_pipe_stage_list ::= perfetto_pipe_stage_list perfetto_pipe perfetto_pipe_stage */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_stage_list(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_stage_list(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 487: /* perfetto_pipe_source_list ::= perfetto_pipe_source */ + case 488: /* perfetto_pipe_source_list ::= perfetto_pipe_source */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_source_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_source_list(pCtx, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; - case 488: /* perfetto_pipe_source_list ::= perfetto_pipe_source_list COMMA perfetto_pipe_source */ + case 489: /* perfetto_pipe_source_list ::= perfetto_pipe_source_list COMMA perfetto_pipe_source */ { - yylhsminor.yy215 = synq_parse_perfetto_pipe_source_list(pCtx, yymsp[-2].minor.yy215, yymsp[0].minor.yy215); + yylhsminor.yy341 = synq_parse_perfetto_pipe_source_list(pCtx, yymsp[-2].minor.yy341, yymsp[0].minor.yy341); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 489: /* perfetto_per_col_list ::= nm */ + case 490: /* perfetto_per_col_list ::= nm */ { uint32_t col = synq_parse_perfetto_per_column(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); - yylhsminor.yy215 = synq_parse_perfetto_per_column_list(pCtx, SYNTAQLITE_NULL_NODE, col); + yylhsminor.yy341 = synq_parse_perfetto_per_column_list(pCtx, SYNTAQLITE_NULL_NODE, col); } - yymsp[0].minor.yy215 = yylhsminor.yy215; + yymsp[0].minor.yy341 = yylhsminor.yy341; break; - case 490: /* perfetto_per_col_list ::= perfetto_per_col_list COMMA nm */ + case 491: /* perfetto_per_col_list ::= perfetto_per_col_list COMMA nm */ { uint32_t col = synq_parse_perfetto_per_column(pCtx, synq_span_dequote(pCtx, yymsp[0].minor.yy0)); - yylhsminor.yy215 = synq_parse_perfetto_per_column_list(pCtx, yymsp[-2].minor.yy215, col); + yylhsminor.yy341 = synq_parse_perfetto_per_column_list(pCtx, yymsp[-2].minor.yy341, col); } - yymsp[-2].minor.yy215 = yylhsminor.yy215; + yymsp[-2].minor.yy341 = yylhsminor.yy341; break; - case 492: /* perfetto_per ::= PER perfetto_per_col_list */ -{ yymsp[-1].minor.yy215 = yymsp[0].minor.yy215; } + case 493: /* perfetto_per ::= PER perfetto_per_col_list */ +{ yymsp[-1].minor.yy341 = yymsp[0].minor.yy341; } break; - case 493: /* perfetto_pipeline ::= FROM perfetto_pipe_source perfetto_pipe_stage_list */ + case 494: /* perfetto_pipeline ::= FROM perfetto_pipe_source perfetto_pipe_stage_list */ { - yymsp[-2].minor.yy215 = synq_parse_perfetto_pipeline(pCtx, yymsp[-1].minor.yy215, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy215); + yymsp[-2].minor.yy341 = synq_parse_perfetto_pipeline(pCtx, yymsp[-1].minor.yy341, SYNTAQLITE_NULL_NODE, yymsp[0].minor.yy341); } break; - case 494: /* perfetto_pipeline ::= INTERVAL INTERSECTION OF LP perfetto_pipe_source_list RP perfetto_per perfetto_pipe_stage_list */ + case 495: /* perfetto_pipeline ::= INTERVAL INTERSECTION OF LP perfetto_pipe_source_list RP perfetto_per perfetto_pipe_stage_list */ { - uint32_t src = synq_parse_perfetto_interval_intersection(pCtx, yymsp[-3].minor.yy215, yymsp[-1].minor.yy215); - yymsp[-7].minor.yy215 = synq_parse_perfetto_pipeline(pCtx, SYNTAQLITE_NULL_NODE, src, yymsp[0].minor.yy215); + uint32_t src = synq_parse_perfetto_interval_intersection(pCtx, yymsp[-3].minor.yy341, yymsp[-1].minor.yy341); + yymsp[-7].minor.yy341 = synq_parse_perfetto_pipeline(pCtx, SYNTAQLITE_NULL_NODE, src, yymsp[0].minor.yy341); } break; - case 496: /* cmd ::= PERFETTO PRAGMA nm EQ expr */ + case 497: /* perfetto_subquery_pipeline ::= perfetto_pipeline */ { - yymsp[-4].minor.yy215 = synq_parse_perfetto_pragma_stmt(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), yymsp[0].minor.yy215); + yylhsminor.yy341 = yymsp[0].minor.yy341; + synq_parser_expand_node(pCtx, yymsp[0].minor.yy341, "pipeline", 8); } + yymsp[0].minor.yy341 = yylhsminor.yy341; break; - case 497: /* cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS select_body_start select select_body_end */ + case 498: /* seltablist ::= stl_prefix LP perfetto_subquery_pipeline RP as on_using */ +{ + pCtx->saw_subquery = 1; + uint32_t sub = synq_parse_subquery_table_source( + pCtx, yymsp[-3].minor.yy341, yymsp[-1].minor.yy3.name, + yymsp[-1].minor.yy3.has_as ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE); + if (yymsp[-5].minor.yy341 == SYNTAQLITE_NULL_NODE) { + synq_reject_dangling_on_using(pCtx, yymsp[0].minor.yy696); + yymsp[-5].minor.yy341 = sub; + } else { + SyntaqliteNode *pfx = AST_NODE(&pCtx->ast, yymsp[-5].minor.yy341); + yymsp[-5].minor.yy341 = synq_parse_join_clause(pCtx, + pfx->join_prefix.join_type, + pfx->join_prefix.modifiers, + pfx->join_prefix.source, + sub, yymsp[0].minor.yy696.on_expr, yymsp[0].minor.yy696.using_cols); + } +} + break; + case 499: /* wqitem ::= withnm eidlist_opt wqas LP perfetto_subquery_pipeline RP */ +{ + yylhsminor.yy341 = synq_parse_cte_definition(pCtx, synq_span_dequote(pCtx, yymsp[-5].minor.yy0), + (SyntaqliteMaterialized)yymsp[-3].minor.yy692, yymsp[-4].minor.yy341, yymsp[-1].minor.yy341); +} + yymsp[-5].minor.yy341 = yylhsminor.yy341; + break; + case 500: /* cmd ::= PERFETTO PRAGMA nm EQ expr */ +{ + yymsp[-4].minor.yy341 = synq_parse_perfetto_pragma_stmt(pCtx, synq_span_dequote(pCtx, yymsp[-2].minor.yy0), yymsp[0].minor.yy341); +} + break; + case 501: /* cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS select_body_start select select_body_end */ { SyntaqliteTextSpan select_span = { - .offset = yymsp[-2].minor.yy215, - .length = yymsp[0].minor.yy215 - yymsp[-2].minor.yy215, + .offset = yymsp[-2].minor.yy341, + .length = yymsp[0].minor.yy341 - yymsp[-2].minor.yy341, }; - yymsp[-10].minor.yy215 = synq_parse_create_perfetto_table_stmt(pCtx, + yymsp[-10].minor.yy341 = synq_parse_create_perfetto_table_stmt(pCtx, synq_span(pCtx, yymsp[-6].minor.yy0), - yymsp[-9].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-5].minor.yy215, yymsp[-4].minor.yy215, yymsp[-1].minor.yy215, select_span, SYNTAQLITE_NULL_NODE); + yymsp[-9].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-5].minor.yy341, yymsp[-4].minor.yy341, yymsp[-1].minor.yy341, select_span, SYNTAQLITE_NULL_NODE); } break; - case 498: /* cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS perfetto_pipeline */ + case 502: /* cmd ::= CREATE perfetto_or_replace PERFETTO TABLE nm perfetto_table_impl perfetto_table_schema AS perfetto_pipeline */ { - yymsp[-8].minor.yy215 = synq_parse_create_perfetto_table_stmt(pCtx, + yymsp[-8].minor.yy341 = synq_parse_create_perfetto_table_stmt(pCtx, synq_span(pCtx, yymsp[-4].minor.yy0), - yymsp[-7].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-3].minor.yy215, yymsp[-2].minor.yy215, SYNTAQLITE_NULL_NODE, SYNQ_NO_SPAN, yymsp[0].minor.yy215); + yymsp[-7].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-3].minor.yy341, yymsp[-2].minor.yy341, SYNTAQLITE_NULL_NODE, SYNQ_NO_SPAN, yymsp[0].minor.yy341); } break; - case 499: /* cmd ::= CREATE perfetto_or_replace PERFETTO VIEW nm perfetto_table_schema AS select_body_start select select_body_end */ + case 503: /* cmd ::= CREATE perfetto_or_replace PERFETTO VIEW nm perfetto_table_schema AS select_body_start select select_body_end */ { SyntaqliteTextSpan select_span = { - .offset = yymsp[-2].minor.yy215, - .length = yymsp[0].minor.yy215 - yymsp[-2].minor.yy215, + .offset = yymsp[-2].minor.yy341, + .length = yymsp[0].minor.yy341 - yymsp[-2].minor.yy341, }; - yymsp[-9].minor.yy215 = synq_parse_create_perfetto_view_stmt(pCtx, + yymsp[-9].minor.yy341 = synq_parse_create_perfetto_view_stmt(pCtx, synq_span(pCtx, yymsp[-5].minor.yy0), - yymsp[-8].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-4].minor.yy215, yymsp[-1].minor.yy215, select_span); + yymsp[-8].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-4].minor.yy341, yymsp[-1].minor.yy341, select_span); } break; - case 500: /* cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type AS select_body_start select select_body_end */ + case 504: /* cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type AS select_body_start select select_body_end */ { SyntaqliteTextSpan select_span = { - .offset = yymsp[-2].minor.yy215, - .length = yymsp[0].minor.yy215 - yymsp[-2].minor.yy215, + .offset = yymsp[-2].minor.yy341, + .length = yymsp[0].minor.yy341 - yymsp[-2].minor.yy341, }; - yymsp[-13].minor.yy215 = synq_parse_create_perfetto_function_stmt(pCtx, + yymsp[-13].minor.yy341 = synq_parse_create_perfetto_function_stmt(pCtx, synq_span(pCtx, yymsp[-9].minor.yy0), - yymsp[-12].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-7].minor.yy215, yymsp[-4].minor.yy215, yymsp[-1].minor.yy215, select_span); + yymsp[-12].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-7].minor.yy341, yymsp[-4].minor.yy341, yymsp[-1].minor.yy341, select_span); } break; - case 501: /* cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type DELEGATES TO ID */ + case 505: /* cmd ::= CREATE perfetto_or_replace PERFETTO FUNCTION nm LP perfetto_arg_def_list RP RETURNS perfetto_return_type DELEGATES TO ID */ { - yymsp[-12].minor.yy215 = synq_parse_create_perfetto_delegating_function_stmt(pCtx, + yymsp[-12].minor.yy341 = synq_parse_create_perfetto_delegating_function_stmt(pCtx, synq_span(pCtx, yymsp[-8].minor.yy0), - yymsp[-11].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, - yymsp[-6].minor.yy215, yymsp[-3].minor.yy215, synq_span(pCtx, yymsp[0].minor.yy0)); + yymsp[-11].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-6].minor.yy341, yymsp[-3].minor.yy341, synq_span(pCtx, yymsp[0].minor.yy0)); } break; - case 502: /* cmd ::= CREATE perfetto_or_replace PERFETTO INDEX nm ON nm LP perfetto_indexed_col_list RP */ + case 506: /* cmd ::= CREATE perfetto_or_replace PERFETTO INDEX nm ON nm LP perfetto_indexed_col_list RP */ { - yymsp[-9].minor.yy215 = synq_parse_create_perfetto_index_stmt(pCtx, + yymsp[-9].minor.yy341 = synq_parse_create_perfetto_index_stmt(pCtx, synq_span(pCtx, yymsp[-5].minor.yy0), - yymsp[-8].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-8].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, synq_span(pCtx, yymsp[-3].minor.yy0), - yymsp[-1].minor.yy215); + yymsp[-1].minor.yy341); } break; - case 503: /* before_macro_body ::= */ + case 507: /* before_macro_body ::= */ { pCtx->in_macro_def_body++; - yymsp[1].minor.yy724 = 0; + yymsp[1].minor.yy692 = 0; } break; - case 505: /* perfetto_macro_body ::= perfetto_macro_body ANY */ + case 509: /* perfetto_macro_body ::= perfetto_macro_body ANY */ { yylhsminor.yy0 = (SynqParseToken){ .z = yymsp[-1].minor.yy0.z, @@ -20168,27 +20219,27 @@ static YYACTIONTYPE yy_reduce( } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 506: /* cmd ::= CREATE perfetto_or_replace PERFETTO MACRO nm LP perfetto_macro_arg_list RP RETURNS ID before_macro_body AS perfetto_macro_body */ + case 510: /* cmd ::= CREATE perfetto_or_replace PERFETTO MACRO nm LP perfetto_macro_arg_list RP RETURNS ID before_macro_body AS perfetto_macro_body */ { synq_mark_as_type(pCtx, yymsp[-3].minor.yy0); if (pCtx->in_macro_def_body > 0) pCtx->in_macro_def_body--; - yymsp[-12].minor.yy215 = synq_parse_create_perfetto_macro_stmt(pCtx, + yymsp[-12].minor.yy341 = synq_parse_create_perfetto_macro_stmt(pCtx, synq_span(pCtx, yymsp[-8].minor.yy0), - yymsp[-11].minor.yy724 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, + yymsp[-11].minor.yy692 ? SYNTAQLITE_BOOL_TRUE : SYNTAQLITE_BOOL_FALSE, synq_span(pCtx, yymsp[-3].minor.yy0), synq_span(pCtx, yymsp[0].minor.yy0), - yymsp[-6].minor.yy215); + yymsp[-6].minor.yy341); } break; - case 507: /* cmd ::= INCLUDE PERFETTO MODULE perfetto_module_name */ + case 511: /* cmd ::= INCLUDE PERFETTO MODULE perfetto_module_name */ { - yymsp[-3].minor.yy215 = synq_parse_include_perfetto_module_stmt(pCtx, + yymsp[-3].minor.yy341 = synq_parse_include_perfetto_module_stmt(pCtx, synq_span(pCtx, yymsp[0].minor.yy0)); } break; - case 508: /* cmd ::= DROP PERFETTO INDEX nm ON nm */ + case 512: /* cmd ::= DROP PERFETTO INDEX nm ON nm */ { - yymsp[-5].minor.yy215 = synq_parse_drop_perfetto_index_stmt(pCtx, + yymsp[-5].minor.yy341 = synq_parse_drop_perfetto_index_stmt(pCtx, synq_span(pCtx, yymsp[-2].minor.yy0), synq_span(pCtx, yymsp[0].minor.yy0)); } @@ -20783,30 +20834,31 @@ return n; #define SYNQ_NT_SELECT_BODY_END 352 #define SYNQ_NT_PERFETTO_PIPE 353 #define SYNQ_NT_PERFETTO_PIPE_SOURCE 354 -#define SYNQ_NT_PERFETTO_TREE_DIRECTION 355 -#define SYNQ_NT_PERFETTO_TREE_AGGREGATE 356 -#define SYNQ_NT_PERFETTO_TREE_AGGREGATE_LIST 357 -#define SYNQ_NT_PERFETTO_PIPE_COLUMN 358 -#define SYNQ_NT_PERFETTO_PIPE_NAMED_COLUMN 359 -#define SYNQ_NT_PERFETTO_PIPE_NAME_LIST 360 -#define SYNQ_NT_PERFETTO_PIPE_REPLACE_ITEM 361 -#define SYNQ_NT_PERFETTO_PIPE_REPLACE_LIST 362 -#define SYNQ_NT_PERFETTO_PIPE_EXCEPT 363 -#define SYNQ_NT_PERFETTO_PIPE_REPLACE 364 -#define SYNQ_NT_PERFETTO_PIPE_SELECT_ITEM 365 -#define SYNQ_NT_PERFETTO_PIPE_SELECT_LIST 366 -#define SYNQ_NT_PERFETTO_PIPE_RENAME_ITEM 367 -#define SYNQ_NT_PERFETTO_PIPE_RENAME_LIST 368 -#define SYNQ_NT_PERFETTO_PIPE_SET_ITEM 369 -#define SYNQ_NT_PERFETTO_PIPE_SET_LIST 370 -#define SYNQ_NT_PERFETTO_PIPE_STAGE 371 -#define SYNQ_NT_PERFETTO_PIPE_STAGE_LIST 372 -#define SYNQ_NT_PERFETTO_PIPE_SOURCE_LIST 373 -#define SYNQ_NT_PERFETTO_PER_COL_LIST 374 -#define SYNQ_NT_PERFETTO_PER 375 -#define SYNQ_NT_PERFETTO_PIPELINE 376 -#define SYNQ_NT_BEFORE_MACRO_BODY 377 -#define SYNQ_NT_PERFETTO_MACRO_BODY 378 +#define SYNQ_NT_PERFETTO_PIPELINE 355 +#define SYNQ_NT_PERFETTO_TREE_DIRECTION 356 +#define SYNQ_NT_PERFETTO_TREE_AGGREGATE 357 +#define SYNQ_NT_PERFETTO_TREE_AGGREGATE_LIST 358 +#define SYNQ_NT_PERFETTO_PIPE_COLUMN 359 +#define SYNQ_NT_PERFETTO_PIPE_NAMED_COLUMN 360 +#define SYNQ_NT_PERFETTO_PIPE_NAME_LIST 361 +#define SYNQ_NT_PERFETTO_PIPE_REPLACE_ITEM 362 +#define SYNQ_NT_PERFETTO_PIPE_REPLACE_LIST 363 +#define SYNQ_NT_PERFETTO_PIPE_EXCEPT 364 +#define SYNQ_NT_PERFETTO_PIPE_REPLACE 365 +#define SYNQ_NT_PERFETTO_PIPE_SELECT_ITEM 366 +#define SYNQ_NT_PERFETTO_PIPE_SELECT_LIST 367 +#define SYNQ_NT_PERFETTO_PIPE_RENAME_ITEM 368 +#define SYNQ_NT_PERFETTO_PIPE_RENAME_LIST 369 +#define SYNQ_NT_PERFETTO_PIPE_SET_ITEM 370 +#define SYNQ_NT_PERFETTO_PIPE_SET_LIST 371 +#define SYNQ_NT_PERFETTO_PIPE_STAGE 372 +#define SYNQ_NT_PERFETTO_PIPE_STAGE_LIST 373 +#define SYNQ_NT_PERFETTO_PIPE_SOURCE_LIST 374 +#define SYNQ_NT_PERFETTO_PER_COL_LIST 375 +#define SYNQ_NT_PERFETTO_PER 376 +#define SYNQ_NT_PERFETTO_SUBQUERY_PIPELINE 377 +#define SYNQ_NT_BEFORE_MACRO_BODY 378 +#define SYNQ_NT_PERFETTO_MACRO_BODY 379 /* syntaqlite extension: probe the goto table to check if a state has ** an explicit goto entry for non-terminal `nt`. */ diff --git a/src/trace_processor/perfetto_sql/engine/perfetto_sql_connection_unittest.cc b/src/trace_processor/perfetto_sql/engine/perfetto_sql_connection_unittest.cc index 6ddfbbb291..cf3a595a07 100644 --- a/src/trace_processor/perfetto_sql/engine/perfetto_sql_connection_unittest.cc +++ b/src/trace_processor/perfetto_sql/engine/perfetto_sql_connection_unittest.cc @@ -16,7 +16,10 @@ #include "src/trace_processor/perfetto_sql/engine/perfetto_sql_connection.h" +#include + #include +#include #include #include #include @@ -1181,6 +1184,284 @@ TEST_F(PerfettoSqlConnectionPipelineTest, } } +// A pipeline in parentheses reads like any other subquery: in a join, as a CTE, +// in a view or in a function, whose arguments the SQL it reads can use. +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesAsSubqueries) { + auto rows = Rows(R"( + SELECT t.id, p.total * 2 + FROM tree t + JOIN (FROM tree |> TREE ACCUMULATE UP SUM(self) AS total) p USING (id) + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,200", "1,120", "2,60", "3,80")); + + rows = Rows(R"( + WITH totals AS (FROM tree |> TREE ACCUMULATE UP SUM(self) AS total) + SELECT id, total FROM totals + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,100", "1,60", "2,30", "3,40")); + + ASSERT_TRUE(Rows(R"( + CREATE PERFETTO VIEW totals AS + SELECT id, total + FROM (FROM tree |> TREE ACCUMULATE UP SUM(self) AS total); + CREATE PERFETTO FUNCTION scaled(k LONG) + RETURNS TABLE(id LONG, total LONG) AS + SELECT id, total + FROM ( + FROM (SELECT id, parent_id, self * $k AS self FROM tree) + |> TREE ACCUMULATE UP SUM(self) AS total + ) + )") + .ok()); + // The view reads the table as it is when it runs. + ASSERT_TRUE(Rows("DELETE FROM tree WHERE id = 3").ok()); + rows = Rows("SELECT id, total FROM totals"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,60", "1,20", "2,30")); + // The function is read again for each row of a join, with its argument. + rows = Rows(R"( + SELECT k.v, s.total + FROM (SELECT 1 AS v UNION ALL SELECT 2) k + JOIN scaled(k.v) s + WHERE s.id = 0 + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::UnorderedElementsAre("1,60", "2,120")); +} + +// A pipeline reads the CTEs of the statement it is written in, like any other +// SQL there: by name, through the SQL it reads, and in an intersection. +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesReadOuterCtes) { + auto rows = Rows(R"( + WITH t AS (SELECT id, parent_id, self FROM tree WHERE id != 3) + SELECT * FROM ( + FROM t + |> TREE ACCUMULATE UP SUM(self) AS total + |> SELECT id, total + ) + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,60", "1,20", "2,30")); + + rows = Rows(R"( + WITH t AS (SELECT id, parent_id, self FROM tree) + SELECT * FROM ( + FROM (SELECT * FROM t WHERE id != 3) + |> TREE ACCUMULATE UP SUM(self) AS total + |> SELECT id, total + ) + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,60", "1,20", "2,30")); + + rows = Rows(R"( + WITH + a AS (SELECT 10 AS ts, 5 AS dur), + b AS (SELECT 12 AS ts, 10 AS dur) + SELECT * FROM ( + INTERVAL INTERSECTION OF (a AS x, b AS y) + |> SELECT ts, dur + ) + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("12,3")); +} + +// A pipeline read by a pipeline, as its source or an intersection's operand. +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesReadPipelines) { + auto rows = Rows(R"( + FROM (FROM tree |> TREE ACCUMULATE UP SUM(self) AS total) AS t + |> TREE ACCUMULATE UP SUM(total) AS again + |> SELECT t.id, again + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,230", "1,100", "2,30", "3,40")); + + ASSERT_TRUE(Rows(R"( + CREATE PERFETTO TABLE a AS SELECT 10 AS ts, 5 AS dur UNION ALL SELECT 20, 5; + CREATE PERFETTO TABLE b AS SELECT 12 AS ts, 10 AS dur; + )") + .ok()); + rows = Rows(R"( + INTERVAL INTERSECTION OF ((FROM a |> SELECT ts, dur) AS x, b AS y) + |> SELECT ts, dur + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("12,3", "20,2")); +} + +// Macros and pipelines nest inside each other in every way: pipelines in +// macros, macros in those pipelines' sources and stages, and macro arguments +// which are themselves pipelines. Errors trace back through the calls. +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesAndMacros) { + ASSERT_TRUE(Rows(R"( + CREATE PERFETTO MACRO own() RETURNS ColumnName AS self; + CREATE PERFETTO MACRO src() RETURNS TableOrSubquery + AS (SELECT id, parent_id, self FROM tree); + CREATE PERFETTO MACRO piped_src() RETURNS TableOrSubquery + AS (FROM src!() |> SELECT id, parent_id, own!()); + CREATE PERFETTO MACRO fold(t TableOrSubquery) RETURNS TableOrSubquery + AS (FROM (SELECT * FROM $t) |> TREE ACCUMULATE UP SUM(own!()) AS total); + CREATE PERFETTO MACRO bad() RETURNS TableOrSubquery + AS (FROM tree |> SELECT nope); + )") + .ok()); + + auto rows = Rows("SELECT id, total FROM fold!(piped_src!())"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,100", "1,60", "2,30", "3,40")); + + rows = Rows(R"( + SELECT id, total + FROM ( + FROM ( + SELECT id, parent_id, total AS self + FROM fold!((FROM piped_src!() |> SELECT id, parent_id, self)) + ) + |> TREE ACCUMULATE UP SUM(self) AS total + ) + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,230", "1,100", "2,30", "3,40")); + + std::string error = Rows("SELECT * FROM bad!()").status().message(); + EXPECT_THAT(error, testing::HasSubstr("bad!()")); + EXPECT_THAT(error, testing::HasSubstr("no such column: 'nope'")); + + // A pipeline is recorded as a rewrite named "pipeline", which a macro may be + // named too. + ASSERT_TRUE( + Rows("CREATE PERFETTO MACRO pipeline() RETURNS TableOrSubquery AS tree") + .ok()); + rows = Rows(R"( + SELECT id, total + FROM (FROM tree |> TREE ACCUMULATE UP SUM(self) AS total) + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,100", "1,60", "2,30", "3,40")); +} + +// SQLite reads the inner side of a join once per outer row. The relation a +// pipeline reads is built once, so every read sees the same rows even when its +// SQL, like `random()`, would give different ones each time. +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesReadAgainAreNotRunAgain) { + ASSERT_TRUE(Rows(R"( + CREATE TABLE picks(k); + INSERT INTO picks VALUES (1), (2), (3), (4), (5) + )") + .ok()); + auto rows = Rows(R"( + SELECT count(DISTINCT p.r) + FROM picks + CROSS JOIN (FROM (SELECT 1 AS one, random() AS r)) p + )"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("1")); +} + +TEST_F(PerfettoSqlConnectionPipelineTest, PipelineSubqueriesNeedPipelines) { + ASSERT_TRUE(Rows("PERFETTO PRAGMA pipelines = 0").ok()); + EXPECT_THAT(Rows("SELECT * FROM (FROM tree)").status().message(), + testing::HasSubstr("Pipelines are not enabled")); +} + +// SQL -> pipeline -> SQL -> pipeline -> SQL -> pipeline, SQLite and the +// executor taking turns at every level. +class PipelineNestingTest : public PerfettoSqlConnectionPipelineTest { + protected: + // A binary tree: node i's parent is (i - 1) / 2. + static constexpr uint32_t kNodes = 5000; + + // Each node's subtree size, tripled, summed over its subtree, plus one. + static constexpr char kThreeLevels[] = R"( + SELECT id, total + 1 AS z FROM ( + FROM ( + SELECT id, parent_id, total * 3 AS y FROM ( + FROM big |> TREE ACCUMULATE UP SUM(x) AS total + ) + ) + |> TREE ACCUMULATE UP SUM(y) AS total + ) + )"; + + void SetUp() override { + PerfettoSqlConnectionPipelineTest::SetUp(); + ASSERT_TRUE(Rows(base::StackString<512>(R"( + CREATE TABLE big AS + WITH RECURSIVE n(i) AS ( + SELECT 0 UNION ALL SELECT i + 1 FROM n WHERE i < %u + ) + SELECT + i AS id, + CASE WHEN i = 0 THEN NULL ELSE (i - 1) / 2 END AS parent_id, + 1 AS x + FROM n + )", + kNodes - 1) + .ToStdString()) + .ok()); + } + + // Checks each row of `stmt` against the expected totals, returning how many + // there were. + static uint32_t CheckRows(SqliteConnection::PreparedStatement& stmt) { + std::vector size(kNodes, 0); + std::vector total(kNodes, 0); + for (uint32_t i = kNodes; i-- > 0;) { + size[i] += 1; + total[i] += 3 * size[i]; + if (i != 0) { + size[(i - 1) / 2] += size[i]; + total[(i - 1) / 2] += total[i]; + } + } + uint32_t rows = 0; + for (bool more = !stmt.IsDone(); more; more = stmt.Step()) { + auto id = + static_cast(sqlite3_column_int64(stmt.sqlite_stmt(), 0)); + EXPECT_EQ(sqlite3_column_int64(stmt.sqlite_stmt(), 1), total[id] + 1); + ++rows; + } + EXPECT_TRUE(stmt.status().ok()) << stmt.status().message(); + return rows; + } +}; + +// Every level streams, runs again when read inside a join, and can be stopped +// part way through. +TEST_F(PipelineNestingTest, EveryLevelRuns) { + auto res = connection_->ExecuteUntilLastStatement( + SqlSource::FromExecuteQuery(kThreeLevels)); + ASSERT_TRUE(res.ok()) << res.status().message(); + EXPECT_EQ(CheckRows(res->stmt), kNodes); + + ASSERT_TRUE(Rows(R"( + CREATE TABLE picks(k); + INSERT INTO picks VALUES (0), (1), (4999) + )") + .ok()); + res = connection_->ExecuteUntilLastStatement(SqlSource::FromExecuteQuery( + std::string("SELECT p.id, p.z FROM picks CROSS JOIN (") + kThreeLevels + + ") p WHERE p.id = picks.k")); + ASSERT_TRUE(res.ok()) << res.status().message(); + EXPECT_EQ(CheckRows(res->stmt), 3u); + + res = connection_->ExecuteUntilLastStatement( + SqlSource::FromExecuteQuery(kThreeLevels)); + ASSERT_TRUE(res.ok()) << res.status().message(); + for (uint32_t i = 0; i < 10; ++i) { + ASSERT_TRUE(res->stmt.Step()) << res->stmt.status().message(); + } +} + +TEST_F(PipelineNestingTest, ErrorsSurfaceThroughEveryLevel) { + ASSERT_TRUE(Rows("UPDATE big SET x = 'bad'").ok()); + EXPECT_THAT(Rows(kThreeLevels).status().message(), + testing::HasSubstr("column 'x' is a string")); +} + TEST_F(PerfettoSqlConnectionPipelineTest, ColumnReadersRefreshAcrossBatches) { ASSERT_TRUE(connection_ ->Execute(SqlSource::FromExecuteQuery(R"( diff --git a/src/trace_processor/perfetto_sql/parser/BUILD.gn b/src/trace_processor/perfetto_sql/parser/BUILD.gn index 2a855572a3..7932e863db 100644 --- a/src/trace_processor/perfetto_sql/parser/BUILD.gn +++ b/src/trace_processor/perfetto_sql/parser/BUILD.gn @@ -29,10 +29,12 @@ source_set("parser") { "../../../../gn:sqlite", "../../../base", "../../../perfetto_sql:intrinsic_macro_expansion", + "../../../perfetto_sql/analysis", "../../../perfetto_sql/syntaqlite", "../../sqlite", "../../util:sql_argument", "../pipeline:logical", + "../schema", ] cflags = [ "-Wno-old-style-cast", diff --git a/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser.cc b/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser.cc index 94a1367c62..928ff42d39 100644 --- a/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser.cc +++ b/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser.cc @@ -33,12 +33,15 @@ #include "perfetto/ext/base/status_or.h" #include "perfetto/ext/base/string_utils.h" #include "perfetto/ext/base/string_view.h" +#include "src/perfetto_sql/analysis/relation.h" #include "src/perfetto_sql/intrinsic_macro_expansion.h" #include "src/perfetto_sql/syntaqlite/syntaqlite_perfetto.h" #include "src/trace_processor/perfetto_sql/parser/function_util.h" #include "src/trace_processor/perfetto_sql/pipeline/catalog.h" #include "src/trace_processor/perfetto_sql/pipeline/compiler.h" #include "src/trace_processor/perfetto_sql/pipeline/logical_plan.h" +#include "src/trace_processor/perfetto_sql/pipeline/pipeline_sql.h" +#include "src/trace_processor/perfetto_sql/schema/type_mapping.h" #include "src/trace_processor/sqlite/sql_source.h" #include "src/trace_processor/util/sql_argument.h" @@ -113,14 +116,17 @@ base::StatusOr BuildReturnType( return result; } +namespace analysis = ::perfetto::perfetto_sql::analysis; + // --------------------------------------------------------------------------- // Rewrite tree -> SqlSource // --------------------------------------------------------------------------- -// The macro rewrites syntaqlite recorded for a statement, as a tree, taken -// when it is constructed. Gives the SqlSource of any AST node with them -// applied; the SqlSources nest like the rewrites, so SQLite errors trace back -// through every expansion to where the user wrote the text. +// The rewrites syntaqlite recorded for a statement, as a tree, taken when it +// is constructed: macro calls replaced with their expansions, and pipelines +// with SQL reading them. Gives the SqlSource of any AST node with them applied; +// the SqlSources nest like the rewrites, so SQLite errors trace back through +// every rewrite to where the user wrote the text. class RewriteTree { public: // `stmt_doc_offset` is where the statement starts in `stmt`; syntaqlite @@ -130,10 +136,9 @@ class RewriteTree { uint32_t stmt_doc_offset, const base::FlatHashMap& macros) : p_(p), stmt_(stmt), stmt_doc_offset_(stmt_doc_offset), macros_(macros) { - uint32_t total = syntaqlite_result_rewrite_count(p_); - no_macros_ = (total == 0); - children_.resize(total); - for (uint32_t i = 0; i < total; i++) { + uint32_t count = syntaqlite_result_rewrite_count(p_); + children_.resize(count); + for (uint32_t i = 0; i < count; i++) { auto r = syntaqlite_result_rewrite_at(p_, i); if (r.parent_idx == SYNTAQLITE_REWRITE_PARENT_SOURCE) { source_rooted_.push_back(i); @@ -141,23 +146,38 @@ class RewriteTree { children_[r.parent_idx].push_back(i); } } + // A pipeline's rewrite is recorded after the macro calls written inside + // it, so siblings are not always in the order they were written in. + auto written_first = [this](uint32_t a, uint32_t b) { + auto ra = syntaqlite_result_rewrite_at(p_, a); + auto rb = syntaqlite_result_rewrite_at(p_, b); + if (ra.call_offset == rb.call_offset && + ra.call_length == rb.call_length) { + return a > b; + } + return StartsFirst(ra.call_offset, ra.call_offset + ra.call_length, + rb.call_offset, rb.call_offset + rb.call_length); + }; + std::sort(source_rooted_.begin(), source_rooted_.end(), written_first); + for (auto& children : children_) { + std::sort(children.begin(), children.end(), written_first); + } } // Returns a SqlSource for the AST subtree rooted at `node_id`, with any - // macro rewrites that fall within its range applied. Returns std::nullopt - // if the node has no recorded extent. + // rewrites that fall within its range applied. Returns std::nullopt if the + // node has no recorded extent. std::optional NodeSource(uint32_t node_id) const { uint32_t len = 0; uint32_t stmt_off = 0; if (syntaqlite_parser_node_text(p_, node_id, &len, &stmt_off) == nullptr) return std::nullopt; - SqlSource base = stmt_.Substr(stmt_off + stmt_doc_offset_, len); - // No-macros parses can skip the per-node macro-free check. - if (no_macros_) - return base; - if (syntaqlite_node_is_macro_free(p_, node_id)) - return base; - return ApplyChildrenInRange(std::move(base), source_rooted_, stmt_off, len); + if (children_.empty()) { + return stmt_.Substr(stmt_off + stmt_doc_offset_, len); + } + SyntaqliteNodeSite site; + PERFETTO_CHECK(syntaqlite_parser_node_site(p_, node_id, &site)); + return SiteSource(site); } private: @@ -167,19 +187,66 @@ class RewriteTree { SqlSource replacement; }; - // Returns `base` with every rewrite in `children` whose call site lies - // inside [range_offset, range_offset + range_length) applied to it - // (translated into base-local coordinates). Shared by every caller that - // works in `call_offset`-based coordinates: the authored source range, - // an intrinsic's expansion buffer, and a $param arg's expansion range. - // - // Relies on syntaqlite's guarantee that siblings in the rewrite tree are - // reported in source order, so the filtered items end up pre-sorted by - // `call_offset` and can be fed straight to the Rewriter. - SqlSource ApplyChildrenInRange(SqlSource base, - const std::vector& children, - uint32_t range_offset, - uint32_t range_length) const { + // The order rewrites are applied in: by where they start and, of two + // starting together, the one containing the other first. + static bool StartsFirst(uint32_t a_start, + uint32_t a_end, + uint32_t b_start, + uint32_t b_end) { + return a_start < b_start || (a_start == b_start && a_end > b_end); + } + + // Drops every item inside an earlier one: a pipeline's replacement stands + // in for the macro calls written inside it. Items must be in StartsFirst + // order. + static std::vector KeepOutermost( + std::vector items) { + std::vector out; + for (RewriteItem& item : items) { + if (out.empty() || item.start >= out.back().end) { + out.push_back(std::move(item)); + } + } + return out; + } + + // The text at `site`, as reached from the statement. Inside a rewrite it is + // a slice of the rewrite's expansion, which traces back through the call. + SqlSource SiteSource(const SyntaqliteNodeSite& site) const { + if (site.parent_idx == SYNTAQLITE_REWRITE_PARENT_SOURCE) { + return ApplyChildrenInRange( + stmt_.Substr(site.offset + stmt_doc_offset_, site.length), + source_rooted_, site.offset, site.length); + } + auto r = syntaqlite_result_rewrite_at(p_, site.parent_idx); + SqlSource expansion = + SiteSource({r.parent_idx, r.call_offset, r.call_length}); + std::vector inside = + ChildItems(children_[site.parent_idx], 0, r.expansion_len); + uint32_t start = ExpandedOffset(inside, site.offset); + uint32_t end = ExpandedOffset(inside, site.offset + site.length); + return expansion.Substr(start, end - start); + } + + // Where `offset` in a text lands once `items` are applied to it. + static uint32_t ExpandedOffset(const std::vector& items, + uint32_t offset) { + int64_t shift = 0; + for (const RewriteItem& item : items) { + if (item.end > offset) { + break; + } + shift += static_cast(item.replacement.sql().size()) - + (item.end - item.start); + } + return static_cast(offset + shift); + } + + // The rewrites in `children` whose call sites lie inside + // [range_offset, range_offset + range_length), in range-local coordinates. + std::vector ChildItems(const std::vector& children, + uint32_t range_offset, + uint32_t range_length) const { std::vector items; for (uint32_t idx : children) { auto c = syntaqlite_result_rewrite_at(p_, idx); @@ -188,20 +255,40 @@ class RewriteTree { if (c.call_offset + c.call_length > range_offset + range_length) continue; uint32_t local = c.call_offset - range_offset; + // A rewrite inside an earlier one is replaced along with it. + if (!items.empty() && local < items.back().end) { + continue; + } items.push_back({local, local + c.call_length, BuildForRewrite(idx)}); } - return ApplyRewrites(std::move(base), std::move(items)); + return items; } - // Recursive case: the expansion of a single macro rewrite. + // Returns `base` with the rewrites in `children` whose call site lies + // inside [range_offset, range_offset + range_length) applied to it. Shared + // by every caller that works in `call_offset`-based coordinates: the + // authored source range, an intrinsic's expansion buffer, and a $param + // arg's expansion range. + SqlSource ApplyChildrenInRange(SqlSource base, + const std::vector& children, + uint32_t range_offset, + uint32_t range_length) const { + return ApplyRewrites(std::move(base), + ChildItems(children, range_offset, range_length)); + } + + // The expansion of a single rewrite. SqlSource BuildForRewrite(uint32_t idx) const { auto r = syntaqlite_result_rewrite_at(p_, idx); std::string_view name(r.name, r.name_len); - if (const Macro* m = macros_.Find(name); m) - return BuildForUserMacro(idx, *m); - // Intrinsic macro: no authored body, so work directly in expansion - // coordinates. The base is the expansion text and children already - // carry call_offsets into that buffer. + // A pipeline is named "pipeline", which a user macro may be too. + if (r.kind == SYNTAQLITE_REWRITE_MACRO_CALL) { + if (const Macro* m = macros_.Find(name); m) { + return BuildForUserMacro(idx, *m); + } + } + // An intrinsic macro or a pipeline: no authored body, so work directly in + // expansion coordinates. Children carry call_offsets into that buffer. return ApplyChildrenInRange( SqlSource::FromMacroExpansion(std::string(r.expansion, r.expansion_len), std::string(name)), @@ -244,14 +331,13 @@ class RewriteTree { items.push_back({seg.body_offset, seg.body_offset + seg.body_length, BuildForArg(idx, seg)}); } - // This is the only ApplyRewrites caller whose items aren't already in - // `start` order: we concatenated literal body calls and $param segments, - // each internally sorted but interleaved relative to each other. + // Literal body calls and $param segments are each in order, but not + // relative to each other. std::sort(items.begin(), items.end(), [](const RewriteItem& a, const RewriteItem& b) { - return a.start < b.start; + return StartsFirst(a.start, a.end, b.start, b.end); }); - return ApplyRewrites(m.sql, std::move(items)); + return ApplyRewrites(m.sql, KeepOutermost(std::move(items))); } // The SqlSource for one `$param` substitution: the arg's authored text, @@ -297,18 +383,17 @@ class RewriteTree { std::string(r.name, r.name_len)); } - // Applies `items` on top of `base`. Items must already be sorted by - // `start` and non-overlapping; the sort lives at the (single) call site - // that can produce unsorted input. + // Applies `items` on top of `base`. Items must be in order and must not + // overlap. static SqlSource ApplyRewrites(SqlSource base, std::vector items) { if (items.empty()) return base; PERFETTO_DCHECK( - std::is_sorted(items.begin(), items.end(), - [](const RewriteItem& a, const RewriteItem& b) { - return a.start < b.start; - })); + std::adjacent_find(items.begin(), items.end(), + [](const RewriteItem& a, const RewriteItem& b) { + return b.start < a.end; + }) == items.end()); SqlSource::Rewriter rw(std::move(base)); for (auto& it : items) { rw.Rewrite(it.start, it.end, std::move(it.replacement)); @@ -320,14 +405,58 @@ class RewriteTree { const SqlSource& stmt_; uint32_t stmt_doc_offset_; const base::FlatHashMap& macros_; - // Zero macros in the whole parse — lets NodeSource fast-path. - bool no_macros_ = true; - // children_[parent_idx] = rewrite indices whose `parent_idx` equals that. + // children_[parent_idx] = rewrite indices whose `parent_idx` equals that, + // in the order they were written in. std::vector> children_; - // Rewrites whose parent is SYNTAQLITE_REWRITE_PARENT_SOURCE. + // Rewrites whose parent is SYNTAQLITE_REWRITE_PARENT_SOURCE, likewise. std::vector source_rooted_; }; +// The catalog, plus the output of the pipelines compiled so far in the current +// statement, so SQL reading one is described by its plan. +class StatementCatalog final : public pipeline::Catalog { + public: + explicit StatementCatalog(const pipeline::Catalog& catalog) + : catalog_(catalog) {} + + // Forgets the pipelines of the previous statement. + void Reset() { pipelines_.Clear(); } + + void AddPipeline(uint32_t node, const pipeline::LogicalPlan& plan) { + analysis::LeafRelation relation; + relation.name = "pipeline"; + for (const pipeline::NamedColumn& column : plan.output) { + std::optional type = plan.columns[column.id].type; + relation.columns.push_back( + {column.name, + type ? std::make_optional(sql_schema::ToAnalysisType(*type)) + : std::nullopt}); + } + pipelines_.Insert(node, std::move(relation)); + } + + std::optional FindLeafRelation( + std::string_view name) const override { + return catalog_.FindLeafRelation(name); + } + std::optional FindViewSql(std::string_view name) const override { + return catalog_.FindViewSql(name); + } + std::optional FindNodeRelation( + analysis::SqlNode node) const override { + const analysis::LeafRelation* relation = pipelines_.Find(node.id); + return relation ? std::make_optional(*relation) : std::nullopt; + } + const dataframe::Dataframe* FindDataframe( + std::string_view name) const override { + return catalog_.FindDataframe(name); + } + + private: + const pipeline::Catalog& catalog_; + base::FlatHashMap pipelines_; +}; + SqlSource NodeSource(const RewriteTree& rb, uint32_t node_id) { auto s = rb.NodeSource(node_id); PERFETTO_CHECK(s.has_value()); @@ -364,6 +493,24 @@ base::StatusOr CompilePipeline( *catalog); } +// SQL reading the pipeline at `pipeline_id`, to replace it with. Records the +// pipeline's output in `catalog`, so later SQL in the statement can read it. +base::StatusOr PipelineSql(SyntaqliteParser* p, + const RewriteTree& rb, + StatementCatalog* catalog, + uint32_t pipeline_id) { + ASSIGN_OR_RETURN(pipeline::LogicalPlan plan, + CompilePipeline(p, rb, catalog, pipeline_id)); + catalog->AddPipeline(pipeline_id, plan); + base::StatusOr sql = pipeline::SelectPipelineSql(plan); + if (!sql.ok()) { + return base::ErrStatus("%s%s", + NodeSource(rb, pipeline_id).AsTraceback(0).c_str(), + sql.status().c_message()); + } + return sql; +} + base::StatusOr ParseCreateTableBody( SyntaqliteParser* p, const RewriteTree& rb, @@ -601,12 +748,13 @@ struct PerfettoSqlParser::Impl { bool allowed) : source(SqlSource::FromTraceProcessorImplementation("")), macros(m), - catalog(&c), + statement_catalog(c), pipelines_allowed(allowed) { synq = syntaqlite_parser_create_perfetto(nullptr); PERFETTO_CHECK(synq != nullptr); PERFETTO_CHECK(syntaqlite_parser_set_collect_node_extents(synq, 1) == 0); syntaqlite_parser_set_macro_lookup(synq, &Impl::LookupMacro, this); + syntaqlite_parser_set_node_expander(synq, &Impl::ExpandNode, this); } void Bind(SqlSource src) { @@ -676,14 +824,37 @@ struct PerfettoSqlParser::Impl { return rc == 0 ? 0 : -2; } + // Replaces a pipeline in parentheses, which the grammar hands over once the + // statement is parsed, with SQL reading it. + static int ExpandNode(void* user_data, + SyntaqliteParser* parser, + uint32_t node) { + auto* self = static_cast(user_data); + RewriteTree rb(parser, self->source, CurrentStatementDocOffset(parser), + self->macros); + base::StatusOr sql = PipelineSql( + parser, rb, + self->pipelines_allowed ? &self->statement_catalog : nullptr, node); + if (!sql.ok()) { + self->expansion_error = sql.status(); + return SYNTAQLITE_NODE_EXPAND_ERROR; + } + syntaqlite_node_expansion_set_result(parser, sql->data(), + static_cast(sql->size())); + return SYNTAQLITE_NODE_EXPAND_OK; + } + SyntaqliteParser* synq; SqlSource source; const base::FlatHashMap& macros; - const pipeline::Catalog* catalog; + StatementCatalog statement_catalog; // Whether the SQL being read may use a pipeline. Set per source, so one // parser serves both the standard library and user SQL. bool pipelines_allowed; base::Status status; + // Why expanding a pipeline failed the statement, if it did. It says more + // than syntaqlite's parse error, so is reported instead. + base::Status expansion_error; std::optional current_statement; ::perfetto::perfetto_sql::IntrinsicMacroExpander intrinsic_expander; // Scratch buffers for LookupMacro, reused across user-macro lookups. @@ -697,6 +868,7 @@ bool PerfettoSqlParser::Impl::Next( current_statement = std::nullopt; out_statement_sql = std::nullopt; + statement_catalog.Reset(); const SqlSource& stmt = source; uint32_t root = 0; @@ -705,6 +877,11 @@ bool PerfettoSqlParser::Impl::Next( if (rc == SYNTAQLITE_PARSE_DONE) return false; if (rc == SYNTAQLITE_PARSE_ERROR) { + // Why expanding a pipeline failed says more than the parse error. + if (!expansion_error.ok()) { + status = std::exchange(expansion_error, base::OkStatus()); + return false; + } // error_offset is statement-relative; shift by the statement's // position within the source to get a document offset. uint64_t off = uint64_t{syntaqlite_result_error_offset(synq)} + @@ -733,9 +910,9 @@ bool PerfettoSqlParser::Impl::Next( const auto* node = static_cast(syntaqlite_parser_node(synq, root)); - auto result = - ParseStatement(synq, rb, stmt, stmt_doc_offset, - pipelines_allowed ? catalog : nullptr, root, node); + auto result = ParseStatement(synq, rb, stmt, stmt_doc_offset, + pipelines_allowed ? &statement_catalog : nullptr, + root, node); if (!result.ok()) { status = result.status(); return false; diff --git a/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser_unittest.cc b/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser_unittest.cc index 100c07b361..dcc61fa5b9 100644 --- a/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser_unittest.cc +++ b/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser_unittest.cc @@ -822,6 +822,21 @@ TEST_F(PerfettoSqlParserTest, PipelineReadsOnlyTheColumnsItNeeds) { kSliceColumns + "]")); } +// A pipeline read by a pipeline is compiled into the same plan: nothing goes +// through SQLite between them. +TEST_F(PerfettoSqlParserTest, PipelineSourcesAreCompiledInline) { + auto plan = ParsePipeline("FROM (FROM slice |> SELECT id, dur) |> SELECT id"); + ASSERT_TRUE(plan.ok()) << plan.status().message(); + EXPECT_THAT(*plan, HasSubstr("Scan(table slice)")); + EXPECT_THAT(*plan, testing::Not(HasSubstr("sql"))); + + EXPECT_THAT( + ParsePipeline("FROM (FROM slice |> SELECT id, dur AS id) |> SELECT id") + .status() + .message(), + HasSubstr("two named 'id'")); +} + TEST_F(PerfettoSqlParserTest, PipelineSkipsUnusedTreeAggregates) { // Aggregates nobody uses are not computed, nor are their inputs read. auto plan = ParsePipeline( diff --git a/src/trace_processor/perfetto_sql/pipeline/compiler.cc b/src/trace_processor/perfetto_sql/pipeline/compiler.cc index 8c6e3eff86..5fae5d74d7 100644 --- a/src/trace_processor/perfetto_sql/pipeline/compiler.cc +++ b/src/trace_processor/perfetto_sql/pipeline/compiler.cc @@ -103,7 +103,8 @@ class Compiler { std::string name; std::vector columns; }; - // What names mean while a pipeline is compiled. + // What names mean while one pipeline is compiled. A pipeline read by + // another is compiled in a scope of its own, as a subquery would be. struct Scope { // The operator being compiled, which prefixes every error. const char* op = "FROM"; @@ -152,10 +153,12 @@ class Compiler { // The name a source's columns can be qualified with, if it has one. std::optional SourceQualifier( const SyntaqlitePerfettoPipeSource&) const; - // Compiles what a source reads: a dataframe or SQL. + // Compiles what a source reads: a dataframe, SQL, or a pipeline. base::StatusOr CompileRelation(uint32_t source); - // Fails unless every column of a source has a name a pipeline can use. - // Crossing from SQL into a pipeline needs proper names, as creating a + // Compiles a pipeline read by this one into the same plan. + base::StatusOr CompileNestedPipeline(uint32_t pipeline); + // Fails unless every column of a source has a distinct name a pipeline can + // use. Crossing from SQL into a pipeline needs proper names, as creating a // PERFETTO TABLE does. base::Status CheckSourceNames(const std::vector&, uint32_t at) const; @@ -304,16 +307,36 @@ base::Status Compiler::CompileSource(uint32_t from) { base::StatusOr Compiler::CompileRelation(uint32_t source) { const auto* n = Node(p_, source); - op::Scan scan; - if (const dataframe::Dataframe* dataframe = FindDirectDataframe(*n)) { - scan = CompileDataframeSource(*dataframe, SpanText(p_, n->table_name)); + Relation relation; + if (syntaqlite_node_is_present(n->select) && + Node(p_, n->select)->tag == + SYNTAQLITE_NODE_PERFETTO_PIPELINE) { + ASSIGN_OR_RETURN(relation, CompileNestedPipeline(n->select)); } else { - ASSIGN_OR_RETURN(scan, CompileSqlSource(source)); + op::Scan scan; + if (const dataframe::Dataframe* dataframe = FindDirectDataframe(*n)) { + scan = CompileDataframeSource(*dataframe, SpanText(p_, n->table_name)); + } else { + ASSIGN_OR_RETURN(scan, CompileSqlSource(source)); + } + relation.columns = scan.columns; + relation.node = plan_.AddNode(std::move(scan)); } - RETURN_IF_ERROR(CheckSourceNames(scan.columns, source)); + RETURN_IF_ERROR(CheckSourceNames(relation.columns, source)); + return relation; +} + +base::StatusOr Compiler::CompileNestedPipeline( + uint32_t pipeline) { + Scope outer = std::exchange(scope_, Scope()); + base::Status status = CompilePipeline(pipeline); + Scope inner = std::exchange(scope_, std::move(outer)); + RETURN_IF_ERROR(status); Relation relation; - relation.columns = scan.columns; - relation.node = plan_.AddNode(std::move(scan)); + relation.node = plan_.root; + for (RowColumn& column : inner.row) { + relation.columns.push_back(std::move(column.column)); + } return relation; }