From 6933c43e3b94063b33297f683097750539f93fc9 Mon Sep 17 00:00:00 2001 From: Lalit Maganti Date: Sun, 27 Sep 2026 20:56:28 +0100 Subject: [PATCH] tp: allow pipelines as subqueries Pipelines can only be whole statements or the body of a CREATE PERFETTO TABLE, so nothing written in SQL can use one: not a join, a CTE, a view or a function. That is what stops users like wattson moving off the interval intersection macros. A pipeline in parentheses now reads like any other subquery, in a FROM clause or as a CTE: SELECT t.id, p.total FROM tree t JOIN (FROM tree |> TREE ACCUMULATE UP SUM(self) AS total) p USING (id) Once a statement is parsed, the parser compiles each such pipeline and replaces it with SQL running its plan, recorded as a rewrite where it was written, as a macro call is. So SQL and pipelines nest either way round, pipelines work in macros and macros in pipelines, and views, functions and triggers need nothing more than they already do. As the SQL a pipeline reads is evaluated there too, it can read a function's arguments. The rewrite tree now covers pipelines as well as macro calls. A pipeline's rewrite stands in for the macro calls written inside it, and a node written inside a macro's expansion is taken from there, so errors trace back through the call. SQL reading a pipeline of the same statement is described by the plan that pipeline compiled to. A pipeline read by a pipeline is not expanded: the compiler reads it as one more kind of relation, next to dataframes and SQL, and compiles it into the same plan in a scope of its own. That also lets it be an interval intersection's operand. A pipeline can read the CTEs of the statement it is written in, as the SQL it reads is described where it is written. --- src/perfetto_sql/analysis/relation.cc | 11 +- src/perfetto_sql/analysis/relation.h | 5 + src/perfetto_sql/syntaqlite/perfetto.y | 39 + .../syntaqlite/syntaqlite_perfetto.c | 3788 +++++++++-------- .../perfetto_sql_connection_unittest.cc | 281 ++ .../perfetto_sql/parser/BUILD.gn | 2 + .../parser/perfetto_sql_parser.cc | 293 +- .../parser/perfetto_sql_parser_unittest.cc | 15 + .../perfetto_sql/pipeline/compiler.cc | 45 +- 9 files changed, 2540 insertions(+), 1939 deletions(-) diff --git a/src/perfetto_sql/analysis/relation.cc b/src/perfetto_sql/analysis/relation.cc index 50a9a407653..b970bf7edc2 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 6ec2b34c032..a65fd5072c9 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 beebdc440df..fc720888c1a 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 1d6196d407d..06fcd0c6353 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 6ddfbbb291d..cf3a595a07d 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 2a855572a37..7932e863dbe 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 94a1367c624..928ff42d39d 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 100c07b361e..dcc61fa5b9a 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 8c6e3eff866..5fae5d74d7b 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; }