From 53cf2d75cf0ab23727d9f852bde4cfe0266fb090 Mon Sep 17 00:00:00 2001 From: Lalit Maganti Date: Sun, 27 Sep 2026 17:08:50 +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) The grammar hands each such pipeline to the parser's node expander once it is parsed. It is compiled there and replaced with SQL reading its serialized 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. The parser's 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. 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's SQL source reading a function's arguments is refused when the pipeline is compiled: nothing binds them there, so they would otherwise silently read as NULL. --- Android.bp | 1 + BUILD | 2 + src/perfetto_sql/syntaqlite/perfetto.y | 39 + .../syntaqlite/syntaqlite_perfetto.c | 3788 +++++++++-------- .../engine/perfetto_sql_connection.cc | 5 +- .../perfetto_sql_connection_unittest.cc | 262 ++ .../perfetto_sql/engine/pipeline_module.cc | 20 +- .../perfetto_sql/engine/pipeline_module.h | 6 - .../parser/perfetto_sql_parser.cc | 251 +- .../parser/perfetto_sql_parser_unittest.cc | 15 + .../perfetto_sql/pipeline/BUILD.gn | 2 + .../perfetto_sql/pipeline/catalog.h | 3 +- .../perfetto_sql/pipeline/compiler.cc | 267 +- .../perfetto_sql/pipeline/pipeline_sql.cc | 46 + .../perfetto_sql/pipeline/pipeline_sql.h | 40 + .../perfetto_sql/schema/query_schema.cc | 8 + .../perfetto_sql/schema/query_schema.h | 5 +- .../diff_tests/syntax/pipeline_tests.py | 57 + 18 files changed, 2744 insertions(+), 2073 deletions(-) create mode 100644 src/trace_processor/perfetto_sql/pipeline/pipeline_sql.cc create mode 100644 src/trace_processor/perfetto_sql/pipeline/pipeline_sql.h diff --git a/Android.bp b/Android.bp index 2ca3683be44..0a20cc7eb35 100644 --- a/Android.bp +++ b/Android.bp @@ -19080,6 +19080,7 @@ filegroup { "src/trace_processor/perfetto_sql/pipeline/catalog.cc", "src/trace_processor/perfetto_sql/pipeline/column_pruning.cc", "src/trace_processor/perfetto_sql/pipeline/compiler.cc", + "src/trace_processor/perfetto_sql/pipeline/pipeline_sql.cc", "src/trace_processor/perfetto_sql/pipeline/plan_serialization.cc", ], } diff --git a/BUILD b/BUILD index 567a7d7dd28..04a386e927b 100644 --- a/BUILD +++ b/BUILD @@ -3879,6 +3879,8 @@ perfetto_filegroup( "src/trace_processor/perfetto_sql/pipeline/compiler.cc", "src/trace_processor/perfetto_sql/pipeline/compiler.h", "src/trace_processor/perfetto_sql/pipeline/logical_plan.h", + "src/trace_processor/perfetto_sql/pipeline/pipeline_sql.cc", + "src/trace_processor/perfetto_sql/pipeline/pipeline_sql.h", "src/trace_processor/perfetto_sql/pipeline/plan_serialization.cc", "src/trace_processor/perfetto_sql/pipeline/plan_serialization.h", ], 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 43b24a3e7b7..3445ac7dbed 100644 --- a/src/perfetto_sql/syntaqlite/syntaqlite_perfetto.c +++ b/src/perfetto_sql/syntaqlite/syntaqlite_perfetto.c @@ -13397,29 +13397,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 @@ -13438,20 +13438,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 *******************************************/ @@ -13536,779 +13536,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 *****************************/ @@ -14972,30 +14976,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) */ @@ -15447,71 +15452,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 */ @@ -16381,71 +16390,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 @@ -16895,71 +16908,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 */ @@ -17004,12 +17021,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 */ @@ -17025,26 +17042,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; } @@ -17052,8 +17069,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(), @@ -17069,73 +17086,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 ::= */ @@ -17177,37 +17194,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 */ { @@ -17216,50 +17233,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 */ @@ -17267,8 +17284,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 */ @@ -17283,12 +17300,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 ::= */ @@ -17299,71 +17316,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 */ { @@ -17385,9 +17402,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 */ { @@ -17397,26 +17414,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 */ @@ -17429,7 +17446,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 ::= */ @@ -17454,46 +17471,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 ::= */ @@ -17507,7 +17524,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 */ @@ -17518,17 +17535,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; } } @@ -17537,68 +17554,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, @@ -17611,8 +17628,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, @@ -17628,7 +17645,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, @@ -17640,9 +17657,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, @@ -17652,9 +17669,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, @@ -17664,9 +17681,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, @@ -17676,9 +17693,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, @@ -17688,22 +17705,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, @@ -17715,21 +17732,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), @@ -17741,32 +17758,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 */ @@ -17778,14 +17795,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 */ @@ -17794,178 +17811,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 ::= */ @@ -17977,29 +17994,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 */ @@ -18009,78 +18026,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; @@ -18089,16 +18106,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; @@ -18107,108 +18124,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); @@ -18227,116 +18244,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 */ { @@ -18346,9 +18363,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 */ { @@ -18359,9 +18376,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 */ { @@ -18374,21 +18391,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 */ { @@ -18399,106 +18416,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); @@ -18510,21 +18527,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 */ { @@ -18535,24 +18552,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 */ { @@ -18561,147 +18578,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); @@ -18709,187 +18726,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) { @@ -18903,23 +18920,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) { @@ -18936,23 +18953,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) { @@ -18964,101 +18981,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 */ @@ -19075,62 +19092,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 */ @@ -19138,39 +19155,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 */ { @@ -19198,11 +19215,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 */ @@ -19212,13 +19229,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 */ @@ -19228,18 +19245,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 */ @@ -19247,7 +19264,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 */ @@ -19255,7 +19272,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 */ @@ -19275,7 +19292,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); @@ -19285,12 +19302,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); @@ -19300,51 +19317,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; @@ -19352,59 +19369,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 */ { @@ -19412,7 +19429,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; @@ -19422,19 +19439,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 } @@ -19453,130 +19470,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); } @@ -19586,65 +19603,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; @@ -19656,7 +19673,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); @@ -19664,7 +19681,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 */ @@ -19685,116 +19702,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; @@ -19812,19 +19829,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 */ { @@ -19837,322 +19854,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, @@ -20165,27 +20216,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)); } @@ -20780,30 +20831,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.cc b/src/trace_processor/perfetto_sql/engine/perfetto_sql_connection.cc index 8070ed21805..cfa7433413a 100644 --- a/src/trace_processor/perfetto_sql/engine/perfetto_sql_connection.cc +++ b/src/trace_processor/perfetto_sql/engine/perfetto_sql_connection.cc @@ -57,6 +57,7 @@ #include "src/trace_processor/perfetto_sql/parser/perfetto_sql_parser.h" #include "src/trace_processor/perfetto_sql/pipeline/logical_plan.h" #include "src/trace_processor/perfetto_sql/pipeline/physical_plan.h" +#include "src/trace_processor/perfetto_sql/pipeline/pipeline_sql.h" #include "src/trace_processor/perfetto_sql/pipeline/plan_serialization.h" #include "src/trace_processor/sqlite/bindings/sqlite_column.h" #include "src/trace_processor/sqlite/bindings/sqlite_type.h" @@ -361,7 +362,7 @@ PerfettoSqlConnection::PerfettoSqlConnection( auto ctx = std::make_unique(); ctx->pool = pool_; ctx->connection = this; - RegisterVirtualTableModule(PipelineModule::kName, + RegisterVirtualTableModule(pipeline::kPipelineFunction, std::move(ctx)); } database_->InitializeSharedSchema(connection_.get()); @@ -1051,7 +1052,7 @@ base::Status PerfettoSqlConnection::ExecuteCreateTable( base::StatusOr PerfettoSqlConnection::PreparePipeline(const pipeline::LogicalPlan& plan, const SqlSource& source) { - auto sql = PipelineModule::SelectFrom(plan); + auto sql = pipeline::SelectPipelineSql(plan); if (!sql.ok()) { return base::ErrStatus("%s%s", source.AsTraceback(0).c_str(), sql.status().c_message()); 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 78a92555312..fb8cb7b39cc 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 @@ -1133,6 +1136,265 @@ TEST_F(PerfettoSqlConnectionPipelineTest, EXPECT_TRUE(first->stmt.status().ok()); } +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesAsSubqueries) { + auto rows = Rows( + "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( + "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")); +} + +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesInViewsAndFunctions) { + ASSERT_TRUE(Rows("CREATE PERFETTO VIEW totals AS SELECT id, total FROM " + "(FROM tree |> TREE ACCUMULATE UP SUM(self) AS total)") + .ok()); + ASSERT_TRUE(Rows("CREATE PERFETTO FUNCTION subtree(root LONG) " + "RETURNS TABLE(total LONG) AS SELECT total FROM " + "(FROM tree |> TREE ACCUMULATE UP SUM(self) AS total) " + "WHERE id = $root") + .ok()); + auto rows = Rows("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")); + rows = Rows("SELECT total FROM subtree(1)"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("60")); + + // Both read the table as it is when they run. + 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")); + rows = Rows("SELECT total FROM subtree(1)"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("20")); +} + +// A pipeline runs its SQL sources itself, so nothing binds a function's +// arguments there: reading one is refused when the pipeline is compiled, not +// silently NULL. +TEST_F(PerfettoSqlConnectionPipelineTest, PipelineSourcesCannotReadArguments) { + EXPECT_THAT( + Rows("CREATE PERFETTO FUNCTION scaled(k LONG) RETURNS TABLE(total LONG) " + "AS SELECT total FROM (FROM (SELECT id, parent_id, self * $k AS " + "self FROM tree) |> TREE ACCUMULATE UP SUM(self) AS total)") + .status() + .message(), + testing::HasSubstr("Cannot read `$k`")); +} + +// 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 macros expanding to pipelines. +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesAndMacrosNest) { + 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); + )") + .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")); + + // Again, read by a pipeline through SQL, and passed to a macro as a + // pipeline written out in the call. + rows = Rows( + "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")); +} + +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesAsPipelineSources) { + auto rows = Rows( + "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")); +} + +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesAsIntersectionOperands) { + ASSERT_TRUE(Rows("CREATE PERFETTO TABLE a AS SELECT 10 AS ts, 5 AS dur " + "UNION ALL SELECT 20, 5") + .ok()); + ASSERT_TRUE( + Rows("CREATE PERFETTO TABLE b AS SELECT 12 AS ts, 10 AS dur").ok()); + auto rows = Rows( + "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")); +} + +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")); +} + +// A pipeline is replaced where it was written, so one in a macro works as +// one written out. +TEST_F(PerfettoSqlConnectionPipelineTest, PipelinesInMacros) { + ASSERT_TRUE(Rows("CREATE PERFETTO MACRO totals(t TableOrSubquery) " + "RETURNS TableOrSubquery " + "AS (FROM $t |> TREE ACCUMULATE UP SUM(self) AS total)") + .ok()); + auto rows = Rows("SELECT id, total FROM totals!(tree)"); + ASSERT_TRUE(rows.ok()) << rows.status().message(); + EXPECT_THAT(*rows, testing::ElementsAre("0,100", "1,60", "2,30", "3,40")); + + // In a macro which a pipeline's SQL source calls, with another macro + // called inside it. + ASSERT_TRUE(Rows("CREATE PERFETTO MACRO just_tree() RETURNS TableOrSubquery " + "AS tree") + .ok()); + rows = Rows( + "SELECT id, total FROM (FROM (SELECT id, parent_id, total AS self " + "FROM totals!(just_tree!())) " + "|> 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")); + + // An error in one traces back through the call. + ASSERT_TRUE(Rows("CREATE PERFETTO MACRO bad() RETURNS TableOrSubquery " + "AS (FROM tree |> SELECT nope)") + .ok()); + std::string error = Rows("SELECT * FROM bad!()").status().message(); + EXPECT_THAT(error, testing::HasSubstr("bad!()")); + EXPECT_THAT(error, testing::HasSubstr("no such column: 'nope'")); +} + +// 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[] = + "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("CREATE TABLE big AS WITH RECURSIVE n(i) AS " + "(SELECT 0 UNION ALL SELECT i + 1 FROM n WHERE i < " + + std::to_string(kNodes - 1) + + ") SELECT i AS id, CASE WHEN i = 0 THEN NULL " + "ELSE (i - 1) / 2 END AS parent_id, 1 AS x FROM n") + .ok()); + } + + static std::vector Expected() { + 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]; + } + } + for (int64_t& t : total) { + t += 1; + } + return total; + } + + // Checks each row of `stmt` against Expected(), returning how many there + // were. + static uint32_t CheckRows(SqliteConnection::PreparedStatement& stmt) { + std::vector expected = Expected(); + 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), expected[id]); + ++rows; + } + EXPECT_TRUE(stmt.status().ok()) << stmt.status().message(); + return rows; + } +}; + +TEST_F(PipelineNestingTest, EveryLevelStreams) { + auto res = connection_->ExecuteUntilLastStatement( + SqlSource::FromExecuteQuery(kThreeLevels)); + ASSERT_TRUE(res.ok()) << res.status().message(); + EXPECT_EQ(CheckRows(res->stmt), kNodes); +} + +TEST_F(PipelineNestingTest, ReadingAgainRunsEveryLevelAgain) { + ASSERT_TRUE(Rows("CREATE TABLE picks(k); " + "INSERT INTO picks VALUES (0), (1), (4999)") + .ok()); + auto 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); +} + +TEST_F(PipelineNestingTest, ErrorsSurfaceThroughEveryLevel) { + ASSERT_TRUE(Rows("UPDATE big SET x = 'bad' WHERE id = 4000").ok()); + EXPECT_THAT(Rows(kThreeLevels).status().message(), + testing::HasSubstr("column 'x' holds a string")); +} + +TEST_F(PipelineNestingTest, StoppingEarlyReleasesEveryLevel) { + auto 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, InterleavedRuns) { + auto a = connection_->ExecuteUntilLastStatement( + SqlSource::FromExecuteQuery(kThreeLevels)); + auto b = connection_->ExecuteUntilLastStatement( + SqlSource::FromExecuteQuery(kThreeLevels)); + ASSERT_TRUE(a.ok()) << a.status().message(); + ASSERT_TRUE(b.ok()) << b.status().message(); + std::vector expected = Expected(); + uint32_t rows = 1; + for (;;) { + for (auto* res : {&*a, &*b}) { + sqlite3_stmt* stmt = res->stmt.sqlite_stmt(); + auto id = static_cast(sqlite3_column_int64(stmt, 0)); + EXPECT_EQ(sqlite3_column_int64(stmt, 1), expected[id]); + } + bool more_a = a->stmt.Step(); + bool more_b = b->stmt.Step(); + ASSERT_EQ(more_a, more_b); + if (!more_a) { + break; + } + ++rows; + } + EXPECT_TRUE(a->stmt.status().ok()) << a->stmt.status().message(); + EXPECT_TRUE(b->stmt.status().ok()) << b->stmt.status().message(); + EXPECT_EQ(rows, kNodes); +} + TEST_F(PerfettoSqlConnectionPipelineTest, ColumnReadersRefreshAcrossBatches) { ASSERT_TRUE(connection_ ->Execute(SqlSource::FromExecuteQuery(R"( diff --git a/src/trace_processor/perfetto_sql/engine/pipeline_module.cc b/src/trace_processor/perfetto_sql/engine/pipeline_module.cc index 8d54323c630..08d11999d0a 100644 --- a/src/trace_processor/perfetto_sql/engine/pipeline_module.cc +++ b/src/trace_processor/perfetto_sql/engine/pipeline_module.cc @@ -40,7 +40,7 @@ #include "src/trace_processor/perfetto_sql/engine/perfetto_sql_connection.h" #include "src/trace_processor/perfetto_sql/pipeline/logical_plan.h" #include "src/trace_processor/perfetto_sql/pipeline/physical_plan.h" -#include "src/trace_processor/perfetto_sql/pipeline/plan_serialization.h" +#include "src/trace_processor/perfetto_sql/pipeline/pipeline_sql.h" #include "src/trace_processor/sqlite/bindings/sqlite_result.h" #include "src/trace_processor/sqlite/sqlite_utils.h" @@ -58,7 +58,7 @@ constexpr int kFirstOutputColumn = 1; std::string Schema() { // Public names (which may repeat) are applied by the outer SELECT. std::vector columns{"pipeline HIDDEN"}; - for (uint32_t i = 0; i < PipelineModule::kMaxColumns; ++i) { + for (uint32_t i = 0; i < pipeline::kMaxPipelineColumns; ++i) { columns.push_back("c" + std::to_string(i)); } return "CREATE TABLE x(" + base::Join(columns, ", ") + ")"; @@ -169,22 +169,6 @@ int CheckStatus(PipelineModule::Cursor* cursor) { } // namespace -base::StatusOr PipelineModule::SelectFrom( - const pipeline::LogicalPlan& plan) { - const std::vector& output = plan.output; - if (output.size() > kMaxColumns) { - return base::ErrStatus("A pipeline can output at most %u columns, not %zu", - kMaxColumns, output.size()); - } - std::vector columns; - for (uint32_t i = 0; i < output.size(); ++i) { - columns.push_back("c" + std::to_string(i) + " AS \"" + - base::ReplaceAll(output[i].name, "\"", "\"\"") + "\""); - } - return "SELECT " + base::Join(columns, ", ") + " FROM " + kName + "(X'" + - base::ToHex(pipeline::SerializePlan(plan)) + "')"; -} - int PipelineModule::Connect(sqlite3* db, void* raw_ctx, int, diff --git a/src/trace_processor/perfetto_sql/engine/pipeline_module.h b/src/trace_processor/perfetto_sql/engine/pipeline_module.h index bfc46eb5837..7a451b09afd 100644 --- a/src/trace_processor/perfetto_sql/engine/pipeline_module.h +++ b/src/trace_processor/perfetto_sql/engine/pipeline_module.h @@ -50,9 +50,6 @@ struct PipelineModule : sqlite::Module { static constexpr auto kType = kEponymousOnly; static constexpr bool kSupportsWrites = false; static constexpr bool kDoesOverloadFunctions = false; - static constexpr char kName[] = "__intrinsic_pipeline"; - // The most columns a pipeline can output. - static constexpr uint32_t kMaxColumns = 256; struct Context { StringPool* pool; @@ -83,9 +80,6 @@ struct PipelineModule : sqlite::Module { std::optional target_rowid; }; - // SQL reading `plan`'s output under its own column names. - static base::StatusOr SelectFrom(const pipeline::LogicalPlan&); - static int Connect(sqlite3*, void*, int, 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 dac2c12d178..02ed414507b 100644 --- a/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser.cc +++ b/src/trace_processor/perfetto_sql/parser/perfetto_sql_parser.cc @@ -39,6 +39,7 @@ #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/sqlite/sql_source.h" #include "src/trace_processor/util/sql_argument.h" @@ -114,33 +115,28 @@ base::StatusOr BuildReturnType( } // --------------------------------------------------------------------------- -// Macro rewrite tree -> SqlSource +// Rewrite tree -> SqlSource // --------------------------------------------------------------------------- -// Walks the flat list of macro rewrites produced by syntaqlite and, for a -// given AST node, builds a SqlSource whose `Rewriter` structure mirrors the -// nesting of macro calls. This lets SQLite-side error tracebacks resolve -// through macro expansions back to the authored call site. +// The rewrites syntaqlite recorded for a statement, as a tree, and the +// SqlSource of any AST node with them applied. Each rewrite replaces a range +// of its parent's text: a macro call with its expansion, or a pipeline with +// SQL reading it. The SqlSources nest the same way, so SQLite errors trace +// back through every rewrite to where the user wrote the text. // -// The flat list has O(N) entries reported in insertion order (outer macros -// before their nested calls). Rather than re-scanning the list for each -// rewrite we materialize a parent -> children adjacency once in the -// constructor, so every subsequent lookup descends the tree in O(subtree). -class MacroRewriteBuilder { +// A snapshot of the rewrites recorded when it is constructed. +class RewriteTree { public: - // `stmt_doc_offset` is the byte offset of the current statement within - // `stmt`. Syntaqlite v0.5 reports every layer-0 offset (node extents, - // spans, macro call offsets) statement-relative, so call sites that - // slice `stmt` add this offset to translate into document coordinates. - MacroRewriteBuilder(SyntaqliteParser* p, - const SqlSource& stmt, - uint32_t stmt_doc_offset, - const base::FlatHashMap& macros) + // `stmt_doc_offset` is where the current statement starts in `stmt`: + // syntaqlite reports offsets in the statement's own text relative to it. + RewriteTree(SyntaqliteParser* p, + const SqlSource& stmt, + 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); @@ -148,23 +144,37 @@ class MacroRewriteBuilder { 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: @@ -174,19 +184,66 @@ class MacroRewriteBuilder { 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); @@ -197,7 +254,20 @@ class MacroRewriteBuilder { uint32_t local = c.call_offset - range_offset; items.push_back({local, local + c.call_length, BuildForRewrite(idx)}); } - return ApplyRewrites(std::move(base), std::move(items)); + return KeepOutermost(std::move(items)); + } + + // 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)); } // Recursive case: the expansion of a single macro rewrite. @@ -251,14 +321,13 @@ class MacroRewriteBuilder { 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, @@ -304,18 +373,17 @@ class MacroRewriteBuilder { 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)); @@ -327,15 +395,14 @@ class MacroRewriteBuilder { 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_; }; -SqlSource NodeSource(const MacroRewriteBuilder& rb, uint32_t node_id) { +SqlSource NodeSource(const RewriteTree& rb, uint32_t node_id) { auto s = rb.NodeSource(node_id); PERFETTO_CHECK(s.has_value()); return std::move(*s); @@ -358,7 +425,7 @@ uint32_t CurrentStatementDocOffset(SyntaqliteParser* p) { base::StatusOr CompilePipeline( SyntaqliteParser* p, - const MacroRewriteBuilder& rb, + const RewriteTree& rb, const pipeline::Catalog* catalog, uint32_t pipeline_id) { if (!catalog) { @@ -371,9 +438,26 @@ base::StatusOr CompilePipeline( *catalog); } +// SQL reading the pipeline at `pipeline_id`, which a pipeline written where +// SQL is expected is replaced with. +base::StatusOr PipelineSql(SyntaqliteParser* p, + const RewriteTree& rb, + const pipeline::Catalog* catalog, + uint32_t pipeline_id) { + ASSIGN_OR_RETURN(pipeline::LogicalPlan plan, + CompilePipeline(p, rb, catalog, pipeline_id)); + 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 MacroRewriteBuilder& rb, + const RewriteTree& rb, const pipeline::Catalog* catalog, const SyntaqliteCreatePerfettoTableStmt& n) { using Body = PerfettoSqlParser::CreateTable::Body; @@ -386,7 +470,7 @@ base::StatusOr ParseCreateTableBody( base::StatusOr ParseCreateTable( SyntaqliteParser* p, - const MacroRewriteBuilder& rb, + const RewriteTree& rb, const pipeline::Catalog* catalog, const SyntaqliteCreatePerfettoTableStmt& n) { if (syntaqlite_node_is_present(n.table_impl)) { @@ -409,7 +493,7 @@ base::StatusOr ParseCreateTable( base::StatusOr ParseCreateView( SyntaqliteParser* p, - const MacroRewriteBuilder& rb, + const RewriteTree& rb, const SyntaqliteCreatePerfettoViewStmt& n) { ASSIGN_OR_RETURN(auto schema, BuildArgDefs(p, n.schema)); std::string name = SpanText(p, n.view_name); @@ -427,7 +511,7 @@ base::StatusOr ParseCreateView( base::StatusOr ParseCreateFunction( SyntaqliteParser* p, - const MacroRewriteBuilder& rb, + const RewriteTree& rb, const SyntaqliteCreatePerfettoFunctionStmt& n) { ASSIGN_OR_RETURN(auto args, BuildArgDefs(p, n.args)); for (const auto& arg : args) { @@ -547,7 +631,7 @@ Statement ParseCreateMacro(SyntaqliteParser* p, } base::StatusOr ParseStatement(SyntaqliteParser* p, - const MacroRewriteBuilder& rb, + const RewriteTree& rb, const SqlSource& stmt, uint32_t stmt_doc_offset, const pipeline::Catalog* catalog, @@ -614,6 +698,7 @@ struct PerfettoSqlParser::Impl { 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) { @@ -683,6 +768,27 @@ struct PerfettoSqlParser::Impl { return rc == 0 ? 0 : -2; } + // The grammar hands over a pipeline in parentheses once it is parsed. + static int ExpandNode(void* user_data, + SyntaqliteParser* parser, + uint32_t node) { + return static_cast(user_data)->ExpandPipeline(parser, node); + } + + // Replaces the pipeline at `node` with SQL reading it. + int ExpandPipeline(SyntaqliteParser* parser, uint32_t node) { + RewriteTree rb(parser, source, CurrentStatementDocOffset(parser), macros); + base::StatusOr sql = + PipelineSql(parser, rb, pipelines_allowed ? catalog : nullptr, node); + if (!sql.ok()) { + 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; @@ -691,6 +797,9 @@ struct PerfettoSqlParser::Impl { // 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. @@ -711,6 +820,10 @@ bool PerfettoSqlParser::Impl::Next( int32_t rc = syntaqlite_parser_next(synq); if (rc == SYNTAQLITE_PARSE_DONE) return false; + if (rc == SYNTAQLITE_PARSE_ERROR && !expansion_error.ok()) { + status = std::exchange(expansion_error, base::OkStatus()); + return false; + } if (rc == SYNTAQLITE_PARSE_ERROR) { // error_offset is statement-relative; shift by the statement's // position within the source to get a document offset. @@ -734,7 +847,7 @@ bool PerfettoSqlParser::Impl::Next( // source; callers that slice `stmt` add it back on. uint32_t stmt_doc_offset = CurrentStatementDocOffset(synq); - MacroRewriteBuilder rb(synq, stmt, stmt_doc_offset, macros); + RewriteTree rb(synq, stmt, stmt_doc_offset, macros); auto root_src = rb.NodeSource(root); out_statement_sql = root_src.has_value() ? *std::move(root_src) : stmt; 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 715a1971124..2c4c874f5bc 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 @@ -821,6 +821,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/BUILD.gn b/src/trace_processor/perfetto_sql/pipeline/BUILD.gn index afa4fdc9eb0..7b169d55c32 100644 --- a/src/trace_processor/perfetto_sql/pipeline/BUILD.gn +++ b/src/trace_processor/perfetto_sql/pipeline/BUILD.gn @@ -26,6 +26,8 @@ source_set("logical") { "compiler.cc", "compiler.h", "logical_plan.h", + "pipeline_sql.cc", + "pipeline_sql.h", "plan_serialization.cc", "plan_serialization.h", ] diff --git a/src/trace_processor/perfetto_sql/pipeline/catalog.h b/src/trace_processor/perfetto_sql/pipeline/catalog.h index 7ab1fe9c912..8c381417518 100644 --- a/src/trace_processor/perfetto_sql/pipeline/catalog.h +++ b/src/trace_processor/perfetto_sql/pipeline/catalog.h @@ -36,7 +36,8 @@ class Catalog { std::string_view name) const = 0; // Columns of the query `sql`, typed where they trace back to a dataframe - // column. Fails if SQLite cannot prepare the query. + // column. Fails if SQLite cannot prepare the query, or if it reads a + // parameter, which nothing binds when a pipeline runs it. virtual base::StatusOr DescribeQuery(const SqlSource& sql) const = 0; }; diff --git a/src/trace_processor/perfetto_sql/pipeline/compiler.cc b/src/trace_processor/perfetto_sql/pipeline/compiler.cc index f953589a1ce..afff6750907 100644 --- a/src/trace_processor/perfetto_sql/pipeline/compiler.cc +++ b/src/trace_processor/perfetto_sql/pipeline/compiler.cc @@ -80,6 +80,8 @@ class Compiler { base::Status CompileSource(uint32_t from); base::Status CompileIntersection(uint32_t node); base::Status CompileStage(uint32_t stage); + // Compiles the pipeline at `pipeline`: its source and each of its stages. + base::Status CompilePipeline(uint32_t pipeline); LogicalPlan Finish(); private: @@ -100,6 +102,21 @@ class Compiler { std::vector columns; }; + // 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"; + // The row as of the stage being compiled, and the table aliases in scope. + std::vector row; + std::vector aliases; + }; + // A relation a source reads: the plan node producing it and its columns. + struct Relation { + PlanNodeId node = 0; + std::vector columns; + }; + base::Status CompileSelect(uint32_t stage); base::Status CompileExtend(uint32_t stage); base::Status CompileDrop(uint32_t stage); @@ -113,7 +130,7 @@ class Compiler { // Appends a column to the row. void Append(NamedColumn column, uint32_t node, bool qualified_only = false) { - row_.push_back({std::move(column), op_, node, qualified_only}); + scope_.row.push_back({std::move(column), scope_.op, node, qualified_only}); } const Alias* FindAlias(const std::string& name) const; // Forgets the table alias `name`, if there is one. @@ -132,10 +149,15 @@ class Compiler { // The name a source's columns can be qualified with, if it has one. std::optional SourceQualifier( const SyntaqlitePerfettoPipeSource&) const; - // 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 what a source reads: a dataframe, SQL, or a pipeline. + base::StatusOr CompileRelation(uint32_t source); + // 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 op::Scan&, uint32_t at) const; + base::Status CheckSourceNames(const std::vector&, + uint32_t at) const; op::Scan CompileDataframeSource(const dataframe::Dataframe&, std::string name); base::StatusOr CompileSqlSource(uint32_t from); @@ -180,17 +202,13 @@ class Compiler { const NodeSourceFn& source_; const Catalog& catalog_; LogicalPlan plan_; - // The operator being compiled, which prefixes every error. - const char* op_ = "FROM"; - // The row as of the stage being compiled, and the table aliases in scope. - std::vector row_; - std::vector aliases_; + Scope scope_; }; -// The column of `scan` named `name`, or nothing when it has none. -std::optional FindScanColumn(const op::Scan& scan, - const std::string& name) { - for (const NamedColumn& column : scan.columns) { +// The column of a relation named `name`, or nothing when it has none. +std::optional FindColumn(const std::vector& columns, + const std::string& name) { + for (const NamedColumn& column : columns) { if (base::CaseInsensitiveEqual(column.name, name)) { return column.id; } @@ -199,7 +217,7 @@ std::optional FindScanColumn(const op::Scan& scan, } base::Status Compiler::CompileIntersection(uint32_t node) { - op_ = "INTERVAL INTERSECTION"; + scope_.op = "INTERVAL INTERSECTION"; const auto* n = Node(p_, node); const auto* list = Node(p_, n->operands); uint32_t count = syntaqlite_list_count(list); @@ -232,16 +250,9 @@ base::Status Compiler::CompileIntersection(uint32_t node) { if (FindAlias(*alias)) { return Expected(source_id, "a different alias for each relation"); } - op::Scan scan; - if (const dataframe::Dataframe* dataframe = FindDirectDataframe(*source)) { - scan = - CompileDataframeSource(*dataframe, SpanText(p_, source->table_name)); - } else { - ASSIGN_OR_RETURN(scan, CompileSqlSource(source_id)); - } - RETURN_IF_ERROR(CheckSourceNames(scan, source_id)); - std::optional ts = FindScanColumn(scan, "ts"); - std::optional dur = FindScanColumn(scan, "dur"); + ASSIGN_OR_RETURN(Relation relation, CompileRelation(source_id)); + std::optional ts = FindColumn(relation.columns, "ts"); + std::optional dur = FindColumn(relation.columns, "dur"); if (!ts || !dur) { return Expected(source_id, *alias + " to have a " + (ts ? "dur" : "ts") + " column"); @@ -253,7 +264,7 @@ base::Status Compiler::CompileIntersection(uint32_t node) { uint32_t col_id = syntaqlite_list_child_id(per, k); const auto* col = Node(p_, col_id); std::string name = SpanText(p_, col->name); - std::optional key = FindScanColumn(scan, name); + std::optional key = FindColumn(relation.columns, name); if (!key) { return Expected(col_id, *alias + " to have a " + name + " column"); } @@ -263,15 +274,15 @@ base::Status Compiler::CompileIntersection(uint32_t node) { // A PER column holds the same value in every operand, so the first // operand's is also the one a bare name finds. Alias operand_alias{*alias, {}}; - for (const NamedColumn& column : scan.columns) { + for (const NamedColumn& column : relation.columns) { bool is_key = std::find(operand.keys.begin(), operand.keys.end(), column.id) != operand.keys.end(); Append(column, source_id, /*qualified_only=*/!(is_key && i == 0)); - operand_alias.columns.push_back(row_.back()); + operand_alias.columns.push_back(scope_.row.back()); operand.carried.push_back(column.id); } - aliases_.push_back(std::move(operand_alias)); - children.push_back(plan_.AddNode(std::move(scan))); + scope_.aliases.push_back(std::move(operand_alias)); + children.push_back(relation.node); isect.operands.push_back(std::move(operand)); } plan_.AddNode(std::move(isect), std::move(children)); @@ -280,23 +291,51 @@ base::Status Compiler::CompileIntersection(uint32_t node) { base::Status Compiler::CompileSource(uint32_t from) { const auto* n = Node(p_, from); - op::Scan scan; - if (const dataframe::Dataframe* dataframe = FindDirectDataframe(*n)) { - scan = CompileDataframeSource(*dataframe, SpanText(p_, n->table_name)); - } else { - ASSIGN_OR_RETURN(scan, CompileSqlSource(from)); - } - RETURN_IF_ERROR(CheckSourceNames(scan, from)); - for (const NamedColumn& column : scan.columns) { - Append(column, from); + ASSIGN_OR_RETURN(Relation relation, CompileRelation(from)); + for (NamedColumn& column : relation.columns) { + Append(std::move(column), from); } if (std::optional qualifier = SourceQualifier(*n)) { - aliases_.push_back({std::move(*qualifier), row_}); + scope_.aliases.push_back({std::move(*qualifier), scope_.row}); } - plan_.AddNode(std::move(scan)); return base::OkStatus(); } +base::StatusOr Compiler::CompileRelation(uint32_t source) { + const auto* n = Node(p_, source); + 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 { + 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(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.node = plan_.root; + for (RowColumn& column : inner.row) { + relation.columns.push_back(std::move(column.column)); + } + return relation; +} + const dataframe::Dataframe* Compiler::FindDirectDataframe( const SyntaqlitePerfettoPipeSource& n) const { // Only an unqualified table name is read directly; anything else goes to @@ -325,19 +364,27 @@ std::optional Compiler::SourceQualifier( return std::nullopt; } -base::Status Compiler::CheckSourceNames(const op::Scan& scan, +base::Status Compiler::CheckSourceNames(const std::vector& columns, uint32_t at) const { + for (size_t i = 0; i < columns.size(); ++i) { + for (size_t j = 0; j < i; ++j) { + if (base::CaseInsensitiveEqual(columns[j].name, columns[i].name)) { + return Expected(at, "distinct column names, but there are two named '" + + columns[j].name + "'"); + } + } + } // SQLite renames the second of two columns sharing a name `x` to `x:1`. // Say so, rather than only that `x:1` is not a valid name. - for (size_t i = 0; i < scan.columns.size(); ++i) { - const std::string& name = scan.columns[i].name; + for (size_t i = 0; i < columns.size(); ++i) { + const std::string& name = columns[i].name; size_t colon = name.rfind(':'); if (colon == std::string::npos || colon + 1 == name.size() || name.find_first_not_of("0123456789", colon + 1) != std::string::npos) { continue; } for (size_t j = 0; j < i; ++j) { - const std::string& first = scan.columns[j].name; + const std::string& first = columns[j].name; if (base::CaseInsensitiveEqual(first, name.substr(0, colon))) { return Expected(at, "distinct column names, but there are two named '" + first + "', which SQLite renamed to '" + first + @@ -345,7 +392,7 @@ base::Status Compiler::CheckSourceNames(const op::Scan& scan, } } } - for (const NamedColumn& column : scan.columns) { + for (const NamedColumn& column : columns) { if (!sql_argument::IsValidColumnName(base::StringView(column.name))) { return Expected(at, "every column to have a valid name, but '" + column.name + @@ -435,7 +482,7 @@ base::Status Compiler::Err(uint32_t at, {"no such table alias: '", "'"}, }; const Shape& shape = kShapes[static_cast(error)]; - return base::ErrStatus("%s%s: %s%.*s%s%s", Traceback(at).c_str(), op_, + return base::ErrStatus("%s%s: %s%.*s%s%s", Traceback(at).c_str(), scope_.op, shape.prefix, static_cast(what.size()), what.data(), shape.suffix, detail.c_str()); } @@ -443,7 +490,7 @@ base::Status Compiler::Err(uint32_t at, std::string Compiler::Origin(const RowColumn& column) const { // A qualified name is something the user can write to pick this candidate. const std::string& name = column.column.name; - for (const Alias& alias : aliases_) { + for (const Alias& alias : scope_.aliases) { for (const RowColumn& aliased : alias.columns) { if (aliased.column.id == column.column.id && base::CaseInsensitiveEqual(aliased.column.name, name)) { @@ -471,7 +518,7 @@ std::string Compiler::AmbiguousCandidates( } const Compiler::Alias* Compiler::FindAlias(const std::string& name) const { - for (const Alias& alias : aliases_) { + for (const Alias& alias : scope_.aliases) { if (base::CaseInsensitiveEqual(alias.name, name)) { return &alias; } @@ -480,12 +527,12 @@ const Compiler::Alias* Compiler::FindAlias(const std::string& name) const { } void Compiler::RemoveAlias(const std::string& name) { - aliases_.erase(std::remove_if(aliases_.begin(), aliases_.end(), - [&](const Alias& alias) { - return base::CaseInsensitiveEqual(alias.name, - name); - }), - aliases_.end()); + scope_.aliases.erase( + std::remove_if(scope_.aliases.begin(), scope_.aliases.end(), + [&](const Alias& alias) { + return base::CaseInsensitiveEqual(alias.name, name); + }), + scope_.aliases.end()); } base::Status Compiler::NoSuchColumn(const std::string& name, @@ -500,10 +547,10 @@ base::StatusOr Compiler::FindInRow(const std::string& name, uint32_t at) const { std::vector matches; size_t found = 0; - for (size_t i = 0; i < row_.size(); ++i) { - if (!row_[i].qualified_only && - base::CaseInsensitiveEqual(row_[i].column.name, name)) { - matches.push_back(&row_[i]); + for (size_t i = 0; i < scope_.row.size(); ++i) { + if (!scope_.row[i].qualified_only && + base::CaseInsensitiveEqual(scope_.row[i].column.name, name)) { + matches.push_back(&scope_.row[i]); found = i; } } @@ -533,7 +580,7 @@ base::StatusOr Compiler::Resolve(const std::string& qualifier, uint32_t at) const { if (qualifier.empty()) { ASSIGN_OR_RETURN(size_t i, FindInRow(name, at)); - return row_[i].column.id; + return scope_.row[i].column.id; } std::string full_name = qualifier + "." + name; const Alias* alias = FindAlias(qualifier); @@ -606,7 +653,7 @@ base::StatusOr Compiler::CompileSum(uint32_t agg_id, uint32_t expr) { } base::Status Compiler::CompileTreeAccumulate(uint32_t stage) { - op_ = "TREE ACCUMULATE"; + scope_.op = "TREE ACCUMULATE"; const auto* n = Node(p_, stage); op::TreeAccumulate acc; @@ -655,10 +702,10 @@ base::StatusOr> Compiler::ExpandStar( columns = alias->columns; } else { // EXTEND only takes `alias.*`: a bare star would repeat the whole row. - if (std::string_view(op_) == "EXTEND") { + if (std::string_view(scope_.op) == "EXTEND") { return Expected(star_id, "a table alias before the star, as in `t.*`"); } - columns = row_; + columns = scope_.row; } if (syntaqlite_node_is_present(star->except)) { @@ -710,7 +757,7 @@ base::StatusOr> Compiler::ExpandStar( IsPresent(item->qualifier) ? SpanText(p_, item->qualifier) : ""; ASSIGN_OR_RETURN(ColumnId value, Resolve(qualifier, SpanText(p_, item->name), item_id)); - *matches.front() = {{std::move(target), value}, op_, item_id}; + *matches.front() = {{std::move(target), value}, scope_.op, item_id}; } } @@ -741,34 +788,34 @@ base::StatusOr> Compiler::CompileItems( if (IsPresent(item->alias)) { name = SpanText(p_, item->alias); } - columns.push_back({{std::move(name), id}, op_, item_id}); + columns.push_back({{std::move(name), id}, scope_.op, item_id}); } return columns; } // Replaces the row. What it leaves is a new table: no alias reaches into it. base::Status Compiler::CompileSelect(uint32_t stage) { - op_ = "SELECT"; + scope_.op = "SELECT"; const auto* n = Node(p_, stage); - ASSIGN_OR_RETURN(row_, CompileItems(n->columns)); - aliases_.clear(); + ASSIGN_OR_RETURN(scope_.row, CompileItems(n->columns)); + scope_.aliases.clear(); return base::OkStatus(); } // Adds columns to the row. Items see only the row before the stage, not each // other. base::Status Compiler::CompileExtend(uint32_t stage) { - op_ = "EXTEND"; + scope_.op = "EXTEND"; const auto* n = Node(p_, stage); ASSIGN_OR_RETURN(std::vector columns, CompileItems(n->columns)); - row_.insert(row_.end(), columns.begin(), columns.end()); + scope_.row.insert(scope_.row.end(), columns.begin(), columns.end()); return base::OkStatus(); } // Removes every column of each name. Aliases still reach the dropped columns, // except an alias of the same name, which the name now hides. base::Status Compiler::CompileDrop(uint32_t stage) { - op_ = "DROP"; + scope_.op = "DROP"; const auto* n = Node(p_, stage); const auto* list = Node(p_, n->columns); std::vector names; @@ -777,25 +824,26 @@ base::Status Compiler::CompileDrop(uint32_t stage) { std::string name = SpanText(p_, Node(p_, item_id)->name); RETURN_IF_ERROR(CheckListedOnce(names, name, item_id)); - bool found = std::any_of(row_.begin(), row_.end(), [&](const auto& c) { - return !c.qualified_only && - base::CaseInsensitiveEqual(c.column.name, name); - }); + bool found = + std::any_of(scope_.row.begin(), scope_.row.end(), [&](const auto& c) { + return !c.qualified_only && + base::CaseInsensitiveEqual(c.column.name, name); + }); if (!found) { return NoSuchColumn(name, item_id); } } for (const std::string& name : names) { - row_.erase(std::remove_if(row_.begin(), row_.end(), - [&](const RowColumn& c) { - return !c.qualified_only && - base::CaseInsensitiveEqual(c.column.name, - name); - }), - row_.end()); + scope_.row.erase(std::remove_if(scope_.row.begin(), scope_.row.end(), + [&](const RowColumn& c) { + return !c.qualified_only && + base::CaseInsensitiveEqual( + c.column.name, name); + }), + scope_.row.end()); RemoveAlias(name); } - if (row_.empty()) { + if (scope_.row.empty()) { return Expected(stage, "a column to be left after DROP"); } return base::OkStatus(); @@ -805,7 +853,7 @@ base::Status Compiler::CompileDrop(uint32_t stage) { // renames happen at once, so two columns can swap names. Aliases still reach // the columns under their old names. base::Status Compiler::CompileRename(uint32_t stage) { - op_ = "RENAME"; + scope_.op = "RENAME"; const auto* n = Node(p_, stage); const auto* list = Node(p_, n->columns); std::vector seen; @@ -820,9 +868,9 @@ base::Status Compiler::CompileRename(uint32_t stage) { } for (const auto& [at, item_id] : renames) { const auto* item = Node(p_, item_id); - row_[at].column.name = SpanText(p_, item->alias); - row_[at].op = op_; - row_[at].node = item_id; + scope_.row[at].column.name = SpanText(p_, item->alias); + scope_.row[at].op = scope_.op; + scope_.row[at].node = item_id; } return base::OkStatus(); } @@ -832,7 +880,7 @@ base::Status Compiler::CompileRename(uint32_t stage) { // still reach the old values, except an alias of the same name, which the // name now hides. base::Status Compiler::CompileSet(uint32_t stage) { - op_ = "SET"; + scope_.op = "SET"; const auto* n = Node(p_, stage); const auto* list = Node(p_, n->items); std::vector seen; @@ -856,9 +904,9 @@ base::Status Compiler::CompileSet(uint32_t stage) { assignments.push_back({at, id, item_id}); } for (const Assignment& assignment : assignments) { - RowColumn& column = row_[assignment.at]; + RowColumn& column = scope_.row[assignment.at]; column.column.id = assignment.value; - column.op = op_; + column.op = scope_.op; column.node = assignment.node; RemoveAlias(column.column.name); } @@ -867,16 +915,34 @@ base::Status Compiler::CompileSet(uint32_t stage) { // Replaces every alias with one covering the whole row as it is now. base::Status Compiler::CompileAs(uint32_t stage) { - op_ = "AS"; + scope_.op = "AS"; const auto* n = Node(p_, stage); - aliases_.clear(); - aliases_.push_back({SpanText(p_, n->alias), row_}); + scope_.aliases.clear(); + scope_.aliases.push_back({SpanText(p_, n->alias), scope_.row}); + return base::OkStatus(); +} + +base::Status Compiler::CompilePipeline(uint32_t pipeline) { + const auto& n = Node(p_, pipeline)->perfetto_pipeline; + if (syntaqlite_node_is_present(n.intersection)) { + RETURN_IF_ERROR(CompileIntersection(n.intersection)); + } else { + RETURN_IF_ERROR(CompileSource(n.from)); + } + if (!syntaqlite_node_is_present(n.stages)) { + return base::OkStatus(); + } + const auto* stages = Node(p_, n.stages); + uint32_t count = syntaqlite_list_count(stages); + for (uint32_t i = 0; i < count; i++) { + RETURN_IF_ERROR(CompileStage(syntaqlite_list_child_id(stages, i))); + } return base::OkStatus(); } LogicalPlan Compiler::Finish() { plan_.output.clear(); - for (const RowColumn& column : row_) { + for (const RowColumn& column : scope_.row) { plan_.output.push_back(column.column); } return std::move(plan_); @@ -888,21 +954,8 @@ base::StatusOr Compile(SyntaqliteParser* p, uint32_t pipeline, const NodeSourceFn& source, const Catalog& catalog) { - const auto& n = Node(p, pipeline)->perfetto_pipeline; Compiler compiler(p, source, catalog); - if (syntaqlite_node_is_present(n.intersection)) { - RETURN_IF_ERROR(compiler.CompileIntersection(n.intersection)); - } else { - RETURN_IF_ERROR(compiler.CompileSource(n.from)); - } - if (syntaqlite_node_is_present(n.stages)) { - const auto* stages = Node(p, n.stages); - uint32_t count = syntaqlite_list_count(stages); - for (uint32_t i = 0; i < count; i++) { - RETURN_IF_ERROR( - compiler.CompileStage(syntaqlite_list_child_id(stages, i))); - } - } + RETURN_IF_ERROR(compiler.CompilePipeline(pipeline)); LogicalPlan plan = compiler.Finish(); PruneColumns(plan); return plan; diff --git a/src/trace_processor/perfetto_sql/pipeline/pipeline_sql.cc b/src/trace_processor/perfetto_sql/pipeline/pipeline_sql.cc new file mode 100644 index 00000000000..74aebb5e1c4 --- /dev/null +++ b/src/trace_processor/perfetto_sql/pipeline/pipeline_sql.cc @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2026 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "src/trace_processor/perfetto_sql/pipeline/pipeline_sql.h" + +#include +#include +#include + +#include "perfetto/base/status.h" +#include "perfetto/ext/base/status_or.h" +#include "perfetto/ext/base/string_utils.h" +#include "src/trace_processor/perfetto_sql/pipeline/logical_plan.h" +#include "src/trace_processor/perfetto_sql/pipeline/plan_serialization.h" + +namespace perfetto::trace_processor::pipeline { + +base::StatusOr SelectPipelineSql(const LogicalPlan& plan) { + if (plan.output.size() > kMaxPipelineColumns) { + return base::ErrStatus("A pipeline can output at most %u columns, not %zu", + kMaxPipelineColumns, plan.output.size()); + } + std::vector columns; + for (uint32_t i = 0; i < plan.output.size(); ++i) { + columns.push_back("c" + std::to_string(i) + " AS \"" + + base::ReplaceAll(plan.output[i].name, "\"", "\"\"") + + "\""); + } + return "SELECT " + base::Join(columns, ", ") + " FROM " + kPipelineFunction + + "(X'" + base::ToHex(SerializePlan(plan)) + "')"; +} + +} // namespace perfetto::trace_processor::pipeline diff --git a/src/trace_processor/perfetto_sql/pipeline/pipeline_sql.h b/src/trace_processor/perfetto_sql/pipeline/pipeline_sql.h new file mode 100644 index 00000000000..4fcc3843131 --- /dev/null +++ b/src/trace_processor/perfetto_sql/pipeline/pipeline_sql.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2026 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SRC_TRACE_PROCESSOR_PERFETTO_SQL_PIPELINE_PIPELINE_SQL_H_ +#define SRC_TRACE_PROCESSOR_PERFETTO_SQL_PIPELINE_PIPELINE_SQL_H_ + +#include +#include + +#include "perfetto/ext/base/status_or.h" +#include "src/trace_processor/perfetto_sql/pipeline/logical_plan.h" + +namespace perfetto::trace_processor::pipeline { + +// The table function which runs a serialized plan. +inline constexpr char kPipelineFunction[] = "__intrinsic_pipeline"; + +// The most columns the table function can output. +inline constexpr uint32_t kMaxPipelineColumns = 256; + +// SQL reading `plan`'s output under its own column names. The plan is carried +// in the SQL, serialized, so the SQL runs it wherever it ends up. +base::StatusOr SelectPipelineSql(const LogicalPlan& plan); + +} // namespace perfetto::trace_processor::pipeline + +#endif // SRC_TRACE_PROCESSOR_PERFETTO_SQL_PIPELINE_PIPELINE_SQL_H_ diff --git a/src/trace_processor/perfetto_sql/schema/query_schema.cc b/src/trace_processor/perfetto_sql/schema/query_schema.cc index 2f56e53163b..70767614184 100644 --- a/src/trace_processor/perfetto_sql/schema/query_schema.cc +++ b/src/trace_processor/perfetto_sql/schema/query_schema.cc @@ -23,6 +23,7 @@ #include #include +#include "perfetto/base/status.h" #include "perfetto/ext/base/status_macros.h" #include "src/perfetto_sql/syntaqlite/syntaqlite_perfetto.h" #include "src/trace_processor/perfetto_sql/schema/type_mapping.h" @@ -89,6 +90,13 @@ base::StatusOr DescribeQuery(SqliteConnection* connection, RETURN_IF_ERROR(statement.status()); sqlite3_stmt* stmt = statement.sqlite_stmt(); + // Such as a function's argument, when the query is in a function's body. + if (sqlite3_bind_parameter_count(stmt) > 0) { + const char* name = sqlite3_bind_parameter_name(stmt, 1); + return base::ErrStatus( + "Cannot read `%s`: a pipeline cannot read function arguments yet", + name ? name : "?"); + } uint32_t count = sqlite::column::Count(stmt); std::vector> types = ResolveTypes(sql, count, catalog); diff --git a/src/trace_processor/perfetto_sql/schema/query_schema.h b/src/trace_processor/perfetto_sql/schema/query_schema.h index d4063a83f47..5fbf25542b1 100644 --- a/src/trace_processor/perfetto_sql/schema/query_schema.h +++ b/src/trace_processor/perfetto_sql/schema/query_schema.h @@ -26,8 +26,9 @@ namespace perfetto::trace_processor::sql_schema { // SQLite supplies result names; semantic analysis supplies types where known. -// Fails if SQLite cannot prepare the query. Unknown types remain per-row -// variants. +// Fails if SQLite cannot prepare the query, or if it reads a parameter: the +// query is run on its own, where nothing binds one. Unknown types remain +// per-row variants. base::StatusOr DescribeQuery( SqliteConnection*, const SqlSource&, diff --git a/test/trace_processor/diff_tests/syntax/pipeline_tests.py b/test/trace_processor/diff_tests/syntax/pipeline_tests.py index d09c4987538..1a0270efd03 100644 --- a/test/trace_processor/diff_tests/syntax/pipeline_tests.py +++ b/test/trace_processor/diff_tests/syntax/pipeline_tests.py @@ -492,3 +492,60 @@ def test_select_like_stages_after_intersection(self): "start","dur","x_start","state" 10,20,0,1 """)) + + # A pipeline in parentheses reads like any other subquery. + def test_pipeline_subqueries(self): + return DiffTestBlueprint( + trace=TextProto(r''), + query=""" + PERFETTO PRAGMA pipelines = 1; + CREATE PERFETTO TABLE tree AS + SELECT 0 AS id, NULL AS parent_id, 10 AS self + UNION ALL SELECT 1, 0, 20 + UNION ALL SELECT 2, 0, 30; + + WITH totals AS (FROM tree |> TREE ACCUMULATE UP SUM(self) AS total) + SELECT t.id, t.self, totals.total, p.total AS again + FROM tree t + JOIN totals USING (id) + JOIN (FROM tree |> TREE ACCUMULATE UP SUM(self) AS total) p USING (id) + ORDER BY t.id; + """, + out=Csv(""" + "id","self","total","again" + 0,10,60,60 + 1,20,20,20 + 2,30,30,30 + """)) + + # SQL reads a pipeline which reads SQL which reads a pipeline, and a view + # holding that runs against the tables as they are when it is read. + def test_pipelines_and_sql_nest(self): + return DiffTestBlueprint( + trace=TextProto(r''), + query=""" + PERFETTO PRAGMA pipelines = 1; + CREATE PERFETTO TABLE a AS + SELECT 0 AS ts, 100 AS dur, 1 AS cpu + UNION ALL SELECT 200, 50, 1; + CREATE PERFETTO TABLE b AS SELECT 20 AS ts, 300 AS dur, 1 AS cpu; + + CREATE PERFETTO VIEW overlap AS + SELECT cpu, sum(dur) AS total FROM ( + INTERVAL INTERSECTION OF ( + (SELECT ts, dur, cpu FROM ( + INTERVAL INTERSECTION OF (a AS x, b AS y) PER cpu + |> SELECT ts, dur, x.cpu + )) AS inner_overlap, + b AS z + ) PER cpu + |> SELECT ts, dur, z.cpu + ) + GROUP BY cpu; + + SELECT * FROM overlap; + """, + out=Csv(""" + "cpu","total" + 1,130 + """))