• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

codenotary / immudb / 24841571249

23 Apr 2026 02:44PM UTC coverage: 85.275% (-4.0%) from 89.306%
24841571249

push

gh-ci

web-flow
feat: v1.11.0 PostgreSQL compatibility and SQL feature expansion (#2090)

* Add structured audit logging with immutable audit trail

Introduces a new --audit-log flag that records all gRPC operations as
structured JSON events in immudb's tamper-proof KV store. Events are
stored under the audit: key prefix in systemdb, queryable via Scan and
verifiable via VerifiableGet. An async buffered writer ensures minimal
latency impact. Configurable event filtering (all/write/admin) via
--audit-log-events flag.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Add PostgreSQL ORM compatibility layer and verification functions

Extend the pgsql wire protocol with immudb verification functions
(immudb_state, immudb_verify_row, immudb_verify_tx, immudb_history,
immudb_tx) accessible via standard SQL SELECT statements.

Add pg_catalog resolvers (pg_attribute, pg_index, pg_constraint,
pg_type, pg_settings, pg_description) and information_schema
resolvers (tables, columns, schemata, key_column_usage) to support
ORM introspection from Django, SQLAlchemy, GORM, and ActiveRecord.

Add PostgreSQL compatibility functions: current_database,
current_schema, current_user, format_type, pg_encoding_to_char,
pg_get_expr, pg_get_constraintdef, obj_description, col_description,
has_table_privilege, has_schema_privilege, and others.

Add SHOW statement emulation for common ORM config queries and
schema-qualified name stripping for information_schema and public
schema references.

* Implement EXISTS and IN subquery support in SQL engine

Replace the previously stubbed ExistsBoolExp and InSubQueryExp
implementations with working non-correlated subquery execution.

EXISTS subqueries resolve the inner SELECT and check if any rows
are returned. IN subqueries resolve the inner SELECT, iterate the
result set, and compare each value against the outer expression.
Both support NOT variants (NOT EXISTS, NOT IN).

Correlated subqueries (referencing outer query columns) ar... (continued)

7254 of 10471 new or added lines in 124 files covered. (69.28%)

119 existing lines in 18 files now uncovered.

44597 of 52298 relevant lines covered (85.27%)

127591.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

89.87
/embedded/sql/sql_parser.go
1
// Code generated by goyacc -l -o sql_parser.go sql_grammar.y. DO NOT EDIT.
2
package sql
3

4
import __yyfmt__ "fmt"
5

6
import (
7
        "fmt"
8
        "strings"
9
)
10

11
func setResult(l yyLexer, stmts []SQLStmt) {
7,937✔
12
        l.(*lexer).result = stmts
7,937✔
13
}
7,937✔
14

15
func buildUsingCond(cols []string) ValueExp {
2✔
16
        if len(cols) == 0 {
2✔
NEW
17
                return &Bool{val: true}
×
NEW
18
        }
×
19
        var cond ValueExp
2✔
20
        for _, col := range cols {
4✔
21
                eq := &CmpBoolExp{
2✔
22
                        op:    EQ,
2✔
23
                        left:  &ColSelector{col: col},
2✔
24
                        right: &ColSelector{col: col},
2✔
25
                }
2✔
26
                if cond == nil {
4✔
27
                        cond = eq
2✔
28
                } else {
2✔
NEW
29
                        cond = &BinBoolExp{op: AND, left: cond, right: eq}
×
NEW
30
                }
×
31
        }
32
        return cond
2✔
33
}
34

35
func aggFnName(fn AggregateFn) string {
11✔
36
        switch fn {
11✔
37
        case COUNT:
7✔
38
                return "COUNT"
7✔
39
        case SUM:
4✔
40
                return "SUM"
4✔
NEW
41
        case MAX:
×
NEW
42
                return "MAX"
×
NEW
43
        case MIN:
×
NEW
44
                return "MIN"
×
NEW
45
        case AVG:
×
NEW
46
                return "AVG"
×
NEW
47
        default:
×
NEW
48
                return "UNKNOWN"
×
49
        }
50
}
51

52
type yySymType struct {
53
        yys             int
54
        stmts           []SQLStmt
55
        stmt            SQLStmt
56
        datasource      DataSource
57
        colSpec         *ColSpec
58
        cols            []*ColSelector
59
        rows            []*RowSpec
60
        row             *RowSpec
61
        values          []ValueExp
62
        value           ValueExp
63
        id              string
64
        integer         uint64
65
        float           float64
66
        str             string
67
        boolean         bool
68
        blob            []byte
69
        keyword         string
70
        sqlType         SQLValueType
71
        aggFn           AggregateFn
72
        colNames        []string
73
        col             *ColSelector
74
        sel             Selector
75
        targets         []TargetEntry
76
        jsonFields      []string
77
        distinct        bool
78
        ds              DataSource
79
        tableRef        *tableRef
80
        period          period
81
        openPeriod      *openPeriod
82
        periodInstant   periodInstant
83
        joins           []*JoinSpec
84
        join            *JoinSpec
85
        joinType        JoinType
86
        check           CheckConstraint
87
        exp             ValueExp
88
        binExp          ValueExp
89
        err             error
90
        ordexps         []*OrdExp
91
        opt_ord         bool
92
        logicOp         LogicOperator
93
        cmpOp           CmpOperator
94
        pparam          int
95
        update          *colUpdate
96
        updates         []*colUpdate
97
        onConflict      *OnConflictDo
98
        nullsOrder      NullsOrder
99
        cteDef          *CTEDef
100
        cteDefs         []*CTEDef
101
        permission      Permission
102
        sqlPrivilege    SQLPrivilege
103
        sqlPrivileges   []SQLPrivilege
104
        whenThenClauses []whenThenClause
105
        tableElem       TableElem
106
        tableElems      []TableElem
107
        timestampField  TimestampFieldType
108
}
109

110
const CREATE = 57346
111
const DROP = 57347
112
const TRUNCATE = 57348
113
const USE = 57349
114
const DATABASE = 57350
115
const USER = 57351
116
const WITH = 57352
117
const PASSWORD = 57353
118
const READ = 57354
119
const READWRITE = 57355
120
const ADMIN = 57356
121
const SNAPSHOT = 57357
122
const HISTORY = 57358
123
const DIFF = 57359
124
const SINCE = 57360
125
const AFTER = 57361
126
const BEFORE = 57362
127
const UNTIL = 57363
128
const TX = 57364
129
const OF = 57365
130
const INTEGER_TYPE = 57366
131
const BOOLEAN_TYPE = 57367
132
const VARCHAR_TYPE = 57368
133
const UUID_TYPE = 57369
134
const BLOB_TYPE = 57370
135
const TIMESTAMP_TYPE = 57371
136
const FLOAT_TYPE = 57372
137
const JSON_TYPE = 57373
138
const TABLE = 57374
139
const UNIQUE = 57375
140
const INDEX = 57376
141
const ON = 57377
142
const ALTER = 57378
143
const ADD = 57379
144
const RENAME = 57380
145
const TO = 57381
146
const COLUMN = 57382
147
const CONSTRAINT = 57383
148
const PRIMARY = 57384
149
const KEY = 57385
150
const CHECK = 57386
151
const GRANT = 57387
152
const REVOKE = 57388
153
const GRANTS = 57389
154
const FOR = 57390
155
const PRIVILEGES = 57391
156
const BEGIN = 57392
157
const TRANSACTION = 57393
158
const COMMIT = 57394
159
const ROLLBACK = 57395
160
const SAVEPOINT = 57396
161
const RELEASE = 57397
162
const INSERT = 57398
163
const UPSERT = 57399
164
const INTO = 57400
165
const VALUES = 57401
166
const DELETE = 57402
167
const UPDATE = 57403
168
const SET = 57404
169
const CONFLICT = 57405
170
const DO = 57406
171
const NOTHING = 57407
172
const RETURNING = 57408
173
const SELECT = 57409
174
const DISTINCT = 57410
175
const FROM = 57411
176
const JOIN = 57412
177
const HAVING = 57413
178
const WHERE = 57414
179
const GROUP = 57415
180
const BY = 57416
181
const LIMIT = 57417
182
const OFFSET = 57418
183
const ORDER = 57419
184
const ASC = 57420
185
const DESC = 57421
186
const AS = 57422
187
const UNION = 57423
188
const ALL = 57424
189
const CASE = 57425
190
const WHEN = 57426
191
const THEN = 57427
192
const ELSE = 57428
193
const END = 57429
194
const EXCEPT = 57430
195
const INTERSECT = 57431
196
const NULLS = 57432
197
const FIRST = 57433
198
const LAST = 57434
199
const NOT = 57435
200
const LIKE = 57436
201
const ILIKE = 57437
202
const IF = 57438
203
const EXISTS = 57439
204
const IN = 57440
205
const IS = 57441
206
const OVER = 57442
207
const PARTITION = 57443
208
const EXPLAIN = 57444
209
const RECURSIVE = 57445
210
const NATURAL = 57446
211
const USING = 57447
212
const FETCH = 57448
213
const ROWS = 57449
214
const ONLY = 57450
215
const LATERAL = 57451
216
const AUTO_INCREMENT = 57452
217
const NULL = 57453
218
const CAST = 57454
219
const SCAST = 57455
220
const DEFAULT = 57456
221
const SHOW = 57457
222
const DATABASES = 57458
223
const TABLES = 57459
224
const USERS = 57460
225
const VIEW = 57461
226
const FOREIGN = 57462
227
const REFERENCES = 57463
228
const SEQUENCE = 57464
229
const CASCADE = 57465
230
const BETWEEN = 57466
231
const EXTRACT = 57467
232
const YEAR = 57468
233
const MONTH = 57469
234
const DAY = 57470
235
const HOUR = 57471
236
const MINUTE = 57472
237
const SECOND = 57473
238
const NPARAM = 57474
239
const PPARAM = 57475
240
const JOINTYPE = 57476
241
const AND = 57477
242
const OR = 57478
243
const CMPOP = 57479
244
const NOT_MATCHES_OP = 57480
245
const IDENTIFIER = 57481
246
const INTEGER_LIT = 57482
247
const FLOAT_LIT = 57483
248
const VARCHAR_LIT = 57484
249
const BOOLEAN_LIT = 57485
250
const BLOB_LIT = 57486
251
const AGGREGATE_FUNC = 57487
252
const ERROR = 57488
253
const DOT = 57489
254
const ARROW = 57490
255
const STMT_SEPARATOR = 57491
256

257
var yyToknames = [...]string{
258
        "$end",
259
        "error",
260
        "$unk",
261
        "CREATE",
262
        "DROP",
263
        "TRUNCATE",
264
        "USE",
265
        "DATABASE",
266
        "USER",
267
        "WITH",
268
        "PASSWORD",
269
        "READ",
270
        "READWRITE",
271
        "ADMIN",
272
        "SNAPSHOT",
273
        "HISTORY",
274
        "DIFF",
275
        "SINCE",
276
        "AFTER",
277
        "BEFORE",
278
        "UNTIL",
279
        "TX",
280
        "OF",
281
        "INTEGER_TYPE",
282
        "BOOLEAN_TYPE",
283
        "VARCHAR_TYPE",
284
        "UUID_TYPE",
285
        "BLOB_TYPE",
286
        "TIMESTAMP_TYPE",
287
        "FLOAT_TYPE",
288
        "JSON_TYPE",
289
        "TABLE",
290
        "UNIQUE",
291
        "INDEX",
292
        "ON",
293
        "ALTER",
294
        "ADD",
295
        "RENAME",
296
        "TO",
297
        "COLUMN",
298
        "CONSTRAINT",
299
        "PRIMARY",
300
        "KEY",
301
        "CHECK",
302
        "GRANT",
303
        "REVOKE",
304
        "GRANTS",
305
        "FOR",
306
        "PRIVILEGES",
307
        "BEGIN",
308
        "TRANSACTION",
309
        "COMMIT",
310
        "ROLLBACK",
311
        "SAVEPOINT",
312
        "RELEASE",
313
        "INSERT",
314
        "UPSERT",
315
        "INTO",
316
        "VALUES",
317
        "DELETE",
318
        "UPDATE",
319
        "SET",
320
        "CONFLICT",
321
        "DO",
322
        "NOTHING",
323
        "RETURNING",
324
        "SELECT",
325
        "DISTINCT",
326
        "FROM",
327
        "JOIN",
328
        "HAVING",
329
        "WHERE",
330
        "GROUP",
331
        "BY",
332
        "LIMIT",
333
        "OFFSET",
334
        "ORDER",
335
        "ASC",
336
        "DESC",
337
        "AS",
338
        "UNION",
339
        "ALL",
340
        "CASE",
341
        "WHEN",
342
        "THEN",
343
        "ELSE",
344
        "END",
345
        "EXCEPT",
346
        "INTERSECT",
347
        "NULLS",
348
        "FIRST",
349
        "LAST",
350
        "NOT",
351
        "LIKE",
352
        "ILIKE",
353
        "IF",
354
        "EXISTS",
355
        "IN",
356
        "IS",
357
        "OVER",
358
        "PARTITION",
359
        "EXPLAIN",
360
        "RECURSIVE",
361
        "NATURAL",
362
        "USING",
363
        "FETCH",
364
        "ROWS",
365
        "ONLY",
366
        "LATERAL",
367
        "AUTO_INCREMENT",
368
        "NULL",
369
        "CAST",
370
        "SCAST",
371
        "DEFAULT",
372
        "SHOW",
373
        "DATABASES",
374
        "TABLES",
375
        "USERS",
376
        "VIEW",
377
        "FOREIGN",
378
        "REFERENCES",
379
        "SEQUENCE",
380
        "CASCADE",
381
        "BETWEEN",
382
        "EXTRACT",
383
        "YEAR",
384
        "MONTH",
385
        "DAY",
386
        "HOUR",
387
        "MINUTE",
388
        "SECOND",
389
        "NPARAM",
390
        "PPARAM",
391
        "JOINTYPE",
392
        "AND",
393
        "OR",
394
        "CMPOP",
395
        "NOT_MATCHES_OP",
396
        "IDENTIFIER",
397
        "INTEGER_LIT",
398
        "FLOAT_LIT",
399
        "VARCHAR_LIT",
400
        "BOOLEAN_LIT",
401
        "BLOB_LIT",
402
        "AGGREGATE_FUNC",
403
        "ERROR",
404
        "DOT",
405
        "ARROW",
406
        "','",
407
        "'+'",
408
        "'-'",
409
        "'*'",
410
        "'/'",
411
        "'%'",
412
        "'.'",
413
        "STMT_SEPARATOR",
414
        "'('",
415
        "')'",
416
        "'['",
417
        "']'",
418
}
419

420
var yyStatenames = [...]string{}
421

422
const yyEofCode = 1
423
const yyErrCode = 2
424
const yyInitialStackSize = 16
425

426
var yyExca = [...]int16{
427
        -1, 1,
428
        1, -1,
429
        -2, 0,
430
        -1, 177,
431
        94, 343,
432
        98, 343,
433
        -2, 326,
434
        -1, 450,
435
        70, 258,
436
        -2, 248,
437
        -1, 524,
438
        70, 258,
439
        -2, 250,
440
}
441

442
const yyPrivate = 57344
443

444
const yyLast = 3361
445

446
var yyAct = [...]int16{
447
        231, 696, 204, 691, 514, 667, 440, 191, 405, 263,
448
        339, 336, 252, 653, 134, 631, 438, 523, 484, 434,
449
        124, 525, 381, 170, 206, 299, 250, 495, 433, 404,
450
        300, 158, 177, 253, 182, 301, 173, 174, 229, 200,
451
        179, 333, 612, 207, 490, 23, 489, 67, 107, 436,
452
        676, 675, 436, 436, 436, 436, 410, 481, 694, 348,
453
        125, 689, 615, 608, 607, 606, 596, 509, 145, 138,
454
        436, 148, 125, 672, 147, 125, 587, 436, 476, 565,
455
        634, 629, 72, 628, 436, 73, 499, 475, 67, 67,
456
        67, 70, 74, 437, 613, 410, 604, 603, 602, 599,
457
        71, 212, 210, 215, 409, 209, 309, 211, 213, 595,
458
        593, 75, 575, 76, 77, 78, 171, 550, 79, 537,
459
        80, 535, 81, 82, 534, 531, 83, 84, 85, 86,
460
        87, 480, 474, 88, 467, 449, 214, 89, 90, 380,
461
        91, 379, 677, 669, 605, 601, 600, 435, 494, 487,
462
        482, 162, 465, 459, 458, 457, 456, 417, 322, 296,
463
        293, 292, 289, 281, 259, 237, 248, 219, 29, 125,
464
        278, 279, 280, 92, 285, 247, 232, 276, 277, 251,
465
        274, 690, 273, 463, 283, 526, 270, 286, 27, 481,
466
        52, 680, 93, 343, 94, 101, 264, 397, 276, 277,
467
        262, 208, 308, 95, 96, 97, 98, 99, 100, 62,
468
        258, 271, 257, 268, 509, 528, 68, 152, 291, 284,
469
        295, 238, 305, 502, 269, 275, 549, 473, 428, 562,
470
        527, 318, 287, 419, 486, 398, 294, 276, 277, 42,
471
        561, 323, 143, 312, 140, 106, 43, 125, 118, 126,
472
        121, 337, 341, 254, 590, 589, 343, 572, 571, 319,
473
        266, 536, 426, 356, 416, 415, 316, 317, 407, 331,
474
        163, 332, 321, 320, 260, 108, 216, 166, 149, 342,
475
        501, 108, 146, 133, 132, 142, 67, 141, 345, 128,
476
        357, 338, 127, 122, 402, 120, 32, 406, 403, 344,
477
        400, 355, 362, 360, 365, 361, 368, 414, 370, 358,
478
        267, 528, 129, 373, 374, 375, 420, 371, 372, 408,
479
        233, 111, 636, 125, 48, 337, 24, 305, 413, 424,
480
        425, 249, 427, 119, 421, 418, 113, 610, 288, 125,
481
        24, 617, 638, 245, 616, 446, 423, 44, 611, 47,
482
        125, 560, 462, 444, 643, 620, 340, 503, 632, 450,
483
        422, 34, 40, 441, 451, 460, 461, 553, 548, 559,
484
        41, 391, 392, 393, 394, 395, 396, 445, 448, 471,
485
        264, 264, 547, 27, 105, 35, 39, 38, 366, 334,
486
        364, 130, 367, 313, 442, 310, 298, 27, 297, 464,
487
        236, 235, 466, 234, 369, 109, 110, 112, 363, 477,
488
        699, 700, 518, 305, 485, 569, 568, 223, 26, 220,
489
        337, 218, 217, 697, 542, 469, 378, 470, 597, 493,
490
        545, 25, 26, 159, 45, 346, 406, 46, 256, 511,
491
        171, 483, 516, 492, 224, 25, 692, 693, 507, 515,
492
        102, 520, 479, 6, 648, 221, 504, 103, 104, 165,
493
        654, 529, 673, 513, 655, 510, 406, 646, 623, 641,
494
        543, 544, 36, 546, 540, 37, 264, 614, 251, 645,
495
        114, 530, 554, 626, 583, 305, 551, 472, 261, 337,
496
        337, 164, 563, 65, 24, 116, 538, 337, 556, 557,
497
        454, 455, 552, 567, 439, 573, 566, 619, 555, 349,
498
        508, 618, 642, 157, 64, 63, 577, 33, 30, 578,
499
        151, 167, 485, 491, 678, 580, 570, 500, 412, 574,
500
        411, 576, 66, 660, 327, 328, 325, 326, 579, 329,
501
        324, 588, 582, 452, 591, 592, 598, 594, 584, 581,
502
        241, 27, 67, 430, 429, 31, 264, 160, 161, 264,
503
        264, 668, 264, 519, 432, 314, 222, 355, 153, 150,
504
        56, 60, 443, 154, 155, 156, 131, 51, 49, 2,
505
        533, 242, 239, 240, 532, 330, 26, 586, 382, 383,
506
        384, 385, 386, 387, 388, 389, 315, 621, 630, 25,
507
        50, 243, 61, 228, 227, 136, 137, 225, 67, 117,
508
        67, 639, 255, 506, 505, 640, 246, 633, 496, 497,
509
        498, 635, 57, 355, 244, 355, 59, 58, 340, 28,
510
        69, 390, 377, 55, 54, 647, 431, 659, 651, 272,
511
        558, 637, 661, 624, 652, 627, 664, 656, 53, 657,
512
        67, 67, 609, 264, 666, 662, 406, 658, 663, 684,
513
        670, 125, 671, 488, 674, 355, 355, 168, 181, 681,
514
        679, 622, 337, 185, 685, 311, 683, 264, 178, 176,
515
        337, 682, 172, 468, 687, 649, 650, 187, 688, 686,
516
        644, 695, 282, 302, 524, 522, 226, 135, 115, 698,
517
        701, 335, 290, 335, 188, 72, 189, 665, 73, 5,
518
        24, 4, 3, 347, 70, 74, 1, 0, 0, 0,
519
        0, 0, 0, 71, 212, 210, 215, 0, 209, 199,
520
        211, 213, 0, 0, 75, 376, 76, 77, 78, 0,
521
        0, 79, 0, 80, 0, 81, 82, 0, 0, 83,
522
        84, 85, 86, 87, 0, 0, 88, 0, 0, 214,
523
        89, 90, 0, 91, 0, 0, 0, 27, 0, 0,
524
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
525
        0, 0, 0, 183, 0, 0, 0, 0, 0, 0,
526
        0, 0, 0, 175, 0, 0, 92, 180, 0, 447,
527
        0, 0, 26, 0, 453, 0, 0, 0, 0, 0,
528
        0, 203, 198, 0, 0, 541, 0, 94, 101, 0,
529
        0, 0, 0, 0, 208, 190, 95, 96, 97, 98,
530
        99, 100, 201, 202, 0, 0, 0, 0, 0, 205,
531
        193, 194, 195, 196, 197, 192, 0, 0, 0, 72,
532
        0, 184, 73, 0, 0, 0, 0, 186, 70, 74,
533
        0, 0, 0, 0, 0, 0, 0, 71, 212, 210,
534
        215, 0, 209, 199, 211, 213, 0, 0, 75, 0,
535
        76, 77, 78, 0, 0, 79, 0, 80, 0, 81,
536
        82, 0, 0, 83, 84, 85, 86, 87, 0, 0,
537
        88, 0, 521, 214, 89, 90, 0, 91, 0, 0,
538
        0, 0, 0, 0, 0, 0, 0, 0, 0, 539,
539
        0, 0, 0, 0, 0, 0, 517, 183, 0, 0,
540
        0, 0, 0, 0, 0, 0, 0, 175, 0, 0,
541
        92, 180, 0, 0, 0, 0, 564, 0, 0, 0,
542
        0, 0, 0, 0, 0, 203, 198, 0, 0, 93,
543
        0, 94, 101, 0, 0, 0, 0, 0, 208, 190,
544
        95, 96, 97, 98, 99, 100, 201, 202, 0, 0,
545
        0, 0, 0, 205, 193, 194, 195, 196, 197, 192,
546
        72, 0, 0, 73, 0, 184, 0, 0, 0, 70,
547
        74, 186, 0, 0, 0, 0, 0, 0, 71, 212,
548
        210, 215, 0, 209, 199, 211, 213, 0, 0, 75,
549
        0, 76, 77, 78, 0, 0, 79, 0, 80, 0,
550
        81, 82, 0, 0, 83, 84, 85, 86, 87, 0,
551
        0, 88, 0, 0, 214, 89, 90, 0, 91, 0,
552
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
553
        0, 0, 0, 0, 0, 0, 0, 0, 183, 0,
554
        0, 0, 0, 0, 0, 0, 0, 0, 175, 0,
555
        0, 92, 180, 0, 0, 0, 0, 0, 0, 0,
556
        0, 0, 0, 0, 0, 0, 203, 198, 0, 0,
557
        93, 0, 94, 101, 0, 0, 0, 0, 0, 208,
558
        190, 95, 96, 97, 98, 99, 100, 201, 202, 0,
559
        0, 0, 0, 0, 205, 193, 194, 195, 196, 197,
560
        192, 72, 0, 0, 73, 0, 184, 512, 0, 0,
561
        70, 74, 186, 0, 0, 0, 0, 0, 230, 71,
562
        212, 210, 215, 0, 209, 199, 211, 213, 0, 0,
563
        75, 0, 76, 77, 78, 0, 0, 79, 0, 80,
564
        0, 81, 82, 0, 0, 83, 84, 85, 86, 87,
565
        0, 0, 88, 0, 0, 214, 89, 90, 0, 91,
566
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
567
        0, 0, 0, 0, 0, 0, 0, 0, 0, 183,
568
        0, 0, 0, 0, 0, 0, 0, 0, 0, 175,
569
        0, 0, 92, 180, 0, 0, 0, 0, 0, 0,
570
        0, 0, 0, 0, 0, 0, 0, 203, 198, 0,
571
        0, 93, 0, 94, 101, 0, 0, 0, 0, 0,
572
        208, 190, 95, 96, 97, 98, 99, 100, 201, 202,
573
        0, 0, 0, 0, 0, 205, 193, 194, 195, 196,
574
        197, 192, 72, 0, 0, 73, 0, 184, 0, 0,
575
        0, 70, 74, 186, 0, 0, 0, 0, 0, 0,
576
        71, 212, 210, 215, 0, 209, 199, 211, 213, 0,
577
        0, 75, 0, 76, 77, 78, 0, 0, 79, 0,
578
        80, 0, 81, 82, 0, 0, 83, 84, 85, 86,
579
        87, 0, 0, 88, 0, 0, 214, 89, 90, 0,
580
        91, 0, 0, 0, 27, 0, 0, 0, 0, 0,
581
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
582
        183, 0, 0, 0, 0, 0, 0, 0, 0, 0,
583
        175, 0, 0, 92, 180, 0, 0, 0, 0, 0,
584
        0, 0, 0, 0, 0, 0, 0, 0, 203, 198,
585
        0, 0, 93, 0, 94, 101, 0, 0, 0, 0,
586
        0, 208, 190, 95, 96, 97, 98, 99, 100, 201,
587
        202, 0, 0, 0, 0, 0, 205, 193, 194, 195,
588
        196, 197, 192, 72, 0, 0, 73, 0, 184, 0,
589
        0, 0, 70, 74, 186, 0, 0, 0, 0, 0,
590
        0, 71, 212, 210, 215, 0, 209, 199, 211, 213,
591
        0, 0, 75, 0, 76, 77, 78, 0, 0, 79,
592
        0, 80, 0, 81, 82, 0, 0, 83, 84, 85,
593
        86, 87, 0, 0, 88, 0, 0, 214, 89, 90,
594
        0, 91, 0, 0, 0, 0, 0, 0, 0, 0,
595
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
596
        0, 183, 0, 0, 0, 0, 0, 0, 0, 0,
597
        0, 175, 0, 0, 92, 180, 0, 0, 0, 0,
598
        0, 0, 0, 0, 0, 0, 0, 0, 0, 203,
599
        198, 0, 0, 93, 0, 94, 101, 0, 0, 0,
600
        0, 0, 208, 190, 95, 96, 97, 98, 99, 100,
601
        201, 202, 0, 0, 0, 0, 0, 205, 193, 194,
602
        195, 196, 197, 192, 72, 0, 0, 73, 0, 184,
603
        169, 0, 0, 70, 74, 186, 0, 0, 0, 0,
604
        0, 0, 71, 212, 210, 215, 0, 209, 199, 211,
605
        213, 0, 0, 75, 0, 76, 77, 78, 0, 0,
606
        79, 0, 80, 0, 81, 82, 0, 0, 83, 84,
607
        85, 86, 87, 0, 0, 88, 0, 0, 214, 89,
608
        90, 0, 91, 0, 0, 0, 0, 0, 0, 0,
609
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
610
        0, 0, 183, 0, 0, 0, 0, 0, 0, 0,
611
        0, 0, 175, 0, 0, 92, 180, 0, 0, 0,
612
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
613
        203, 198, 0, 0, 93, 0, 94, 101, 0, 0,
614
        0, 0, 0, 208, 190, 95, 96, 97, 98, 99,
615
        100, 201, 202, 0, 0, 0, 0, 0, 205, 193,
616
        194, 195, 196, 197, 192, 72, 0, 0, 73, 0,
617
        184, 0, 0, 0, 70, 74, 186, 0, 0, 0,
618
        0, 0, 0, 71, 212, 210, 215, 0, 209, 199,
619
        211, 213, 0, 0, 75, 0, 76, 77, 78, 0,
620
        0, 79, 0, 80, 0, 81, 82, 0, 0, 83,
621
        84, 85, 86, 87, 0, 0, 88, 0, 0, 214,
622
        89, 90, 0, 91, 0, 0, 0, 0, 0, 0,
623
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
624
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
625
        0, 0, 0, 0, 0, 0, 92, 285, 0, 0,
626
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
627
        0, 203, 198, 0, 0, 93, 0, 94, 101, 0,
628
        0, 0, 0, 0, 208, 190, 95, 96, 97, 98,
629
        99, 100, 201, 202, 0, 0, 0, 0, 0, 205,
630
        193, 194, 195, 196, 197, 192, 72, 0, 0, 73,
631
        0, 184, 0, 0, 0, 70, 74, 186, 0, 0,
632
        0, 0, 0, 0, 71, 212, 210, 215, 0, 209,
633
        309, 211, 213, 0, 0, 75, 0, 76, 77, 78,
634
        0, 0, 79, 0, 80, 0, 81, 82, 0, 0,
635
        83, 84, 85, 86, 87, 0, 0, 88, 0, 0,
636
        214, 89, 90, 0, 91, 0, 0, 0, 0, 0,
637
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
638
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
639
        0, 0, 0, 0, 0, 0, 0, 92, 285, 0,
640
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
641
        0, 0, 0, 0, 0, 0, 93, 0, 94, 101,
642
        0, 0, 0, 0, 0, 208, 308, 95, 96, 97,
643
        98, 99, 100, 0, 0, 0, 72, 0, 0, 73,
644
        68, 0, 0, 0, 0, 70, 74, 0, 0, 0,
645
        0, 0, 0, 0, 71, 212, 210, 215, 478, 209,
646
        309, 211, 213, 0, 0, 75, 0, 76, 77, 78,
647
        0, 0, 79, 0, 80, 0, 81, 82, 0, 0,
648
        83, 84, 85, 86, 87, 0, 0, 88, 0, 0,
649
        214, 89, 90, 0, 91, 0, 0, 0, 0, 401,
650
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
651
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
652
        0, 0, 0, 0, 0, 0, 0, 92, 285, 0,
653
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
654
        0, 0, 0, 0, 0, 0, 93, 0, 94, 101,
655
        0, 0, 0, 0, 0, 208, 308, 95, 96, 97,
656
        98, 99, 100, 72, 0, 0, 73, 0, 0, 0,
657
        68, 0, 70, 74, 0, 0, 0, 0, 0, 0,
658
        0, 71, 0, 399, 0, 12, 14, 15, 13, 0,
659
        353, 24, 75, 0, 76, 77, 78, 0, 0, 79,
660
        0, 80, 0, 81, 82, 0, 0, 83, 84, 85,
661
        86, 87, 0, 0, 88, 0, 0, 16, 89, 90,
662
        0, 91, 0, 0, 0, 0, 17, 18, 0, 0,
663
        0, 7, 0, 8, 9, 10, 11, 19, 20, 0,
664
        0, 21, 22, 0, 0, 0, 0, 0, 27, 0,
665
        0, 0, 0, 0, 92, 0, 0, 0, 0, 0,
666
        0, 0, 0, 0, 0, 0, 0, 625, 0, 0,
667
        0, 0, 0, 93, 351, 352, 354, 0, 0, 0,
668
        0, 0, 0, 26, 95, 96, 97, 98, 99, 100,
669
        72, 0, 0, 73, 0, 0, 25, 205, 0, 70,
670
        74, 0, 0, 0, 0, 0, 0, 0, 71, 0,
671
        0, 0, 0, 0, 0, 350, 0, 353, 0, 75,
672
        0, 76, 77, 78, 0, 0, 79, 0, 80, 0,
673
        81, 82, 0, 0, 83, 84, 85, 86, 87, 0,
674
        0, 88, 0, 0, 0, 89, 90, 0, 91, 0,
675
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
676
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
677
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
678
        0, 92, 0, 0, 0, 0, 0, 0, 0, 0,
679
        0, 0, 0, 0, 585, 0, 0, 0, 0, 0,
680
        93, 351, 352, 354, 0, 0, 0, 0, 0, 0,
681
        0, 95, 96, 97, 98, 99, 100, 72, 0, 0,
682
        73, 0, 0, 0, 205, 0, 70, 74, 0, 0,
683
        0, 0, 0, 0, 0, 71, 0, 0, 0, 0,
684
        0, 0, 350, 0, 353, 0, 75, 0, 76, 77,
685
        78, 0, 0, 79, 0, 80, 0, 81, 82, 0,
686
        0, 83, 84, 85, 86, 87, 0, 0, 88, 0,
687
        0, 0, 89, 90, 0, 91, 0, 0, 0, 0,
688
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
689
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
690
        0, 0, 0, 0, 0, 0, 0, 0, 92, 0,
691
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
692
        0, 0, 0, 0, 0, 0, 0, 93, 351, 352,
693
        354, 0, 0, 0, 0, 0, 0, 0, 95, 96,
694
        97, 98, 99, 100, 0, 0, 0, 72, 0, 0,
695
        73, 205, 0, 0, 0, 0, 70, 74, 0, 0,
696
        0, 0, 0, 0, 0, 71, 212, 210, 215, 350,
697
        209, 309, 211, 213, 0, 0, 75, 0, 76, 77,
698
        78, 0, 0, 79, 0, 80, 0, 81, 82, 0,
699
        0, 83, 84, 85, 86, 87, 0, 0, 88, 0,
700
        0, 214, 89, 90, 0, 91, 0, 0, 0, 0,
701
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
702
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
703
        0, 0, 0, 0, 0, 0, 0, 0, 92, 285,
704
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
705
        0, 0, 0, 0, 0, 0, 0, 93, 0, 94,
706
        101, 0, 0, 0, 0, 0, 208, 308, 95, 96,
707
        97, 98, 99, 100, 72, 0, 0, 73, 0, 0,
708
        0, 68, 0, 70, 74, 0, 0, 359, 0, 0,
709
        0, 0, 71, 212, 210, 215, 0, 209, 309, 211,
710
        213, 0, 0, 75, 0, 76, 77, 78, 0, 0,
711
        307, 303, 80, 306, 81, 82, 0, 0, 83, 84,
712
        85, 86, 87, 0, 0, 88, 0, 0, 214, 89,
713
        90, 0, 91, 0, 0, 0, 0, 0, 0, 0,
714
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
715
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
716
        0, 0, 0, 0, 0, 92, 285, 0, 0, 0,
717
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
718
        0, 0, 0, 0, 93, 0, 94, 101, 0, 304,
719
        0, 0, 0, 208, 308, 95, 96, 97, 98, 99,
720
        100, 72, 0, 0, 73, 0, 0, 0, 68, 0,
721
        70, 74, 0, 0, 0, 0, 0, 0, 0, 71,
722
        212, 210, 215, 0, 209, 309, 211, 213, 0, 0,
723
        75, 0, 76, 77, 78, 0, 0, 79, 0, 80,
724
        0, 81, 82, 0, 0, 83, 84, 85, 86, 87,
725
        0, 0, 88, 0, 0, 214, 89, 90, 0, 91,
726
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
727
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
728
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
729
        0, 0, 92, 285, 0, 0, 0, 0, 0, 0,
730
        72, 0, 0, 73, 0, 0, 0, 0, 0, 70,
731
        74, 93, 0, 94, 101, 0, 0, 0, 71, 0,
732
        208, 308, 95, 96, 97, 98, 99, 100, 0, 75,
733
        0, 76, 77, 78, 0, 68, 79, 0, 80, 0,
734
        81, 82, 0, 0, 83, 84, 85, 86, 87, 0,
735
        0, 88, 0, 0, 0, 89, 90, 0, 91, 0,
736
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
737
        0, 0, 0, 0, 0, 265, 0, 0, 0, 0,
738
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
739
        0, 92, 0, 0, 0, 0, 0, 0, 0, 72,
740
        0, 0, 73, 0, 0, 0, 0, 0, 70, 74,
741
        93, 0, 94, 101, 0, 0, 0, 71, 0, 0,
742
        0, 95, 96, 97, 98, 99, 100, 0, 75, 144,
743
        76, 77, 78, 0, 68, 79, 0, 80, 0, 81,
744
        82, 0, 0, 83, 84, 85, 86, 87, 0, 0,
745
        88, 0, 0, 0, 89, 90, 0, 91, 0, 0,
746
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
747
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
748
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
749
        92, 0, 0, 0, 0, 0, 0, 0, 72, 0,
750
        0, 73, 0, 0, 0, 0, 0, 70, 74, 93,
751
        0, 94, 101, 0, 0, 0, 71, 0, 0, 0,
752
        95, 96, 97, 98, 99, 100, 0, 75, 0, 76,
753
        77, 78, 0, 68, 79, 0, 80, 0, 81, 82,
754
        0, 0, 83, 84, 85, 86, 87, 0, 0, 88,
755
        0, 0, 0, 89, 90, 0, 91, 0, 0, 0,
756
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
757
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
758
        0, 0, 0, 0, 0, 0, 0, 0, 0, 92,
759
        0, 0, 0, 0, 0, 0, 0, 72, 0, 0,
760
        73, 0, 0, 0, 0, 0, 70, 74, 93, 0,
761
        94, 101, 0, 0, 0, 71, 0, 0, 0, 95,
762
        96, 97, 98, 99, 100, 0, 75, 0, 76, 77,
763
        78, 0, 68, 79, 0, 80, 0, 81, 82, 0,
764
        0, 83, 84, 85, 86, 87, 0, 0, 88, 0,
765
        0, 0, 89, 90, 0, 91, 0, 0, 0, 0,
766
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
767
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
768
        0, 0, 0, 0, 0, 0, 0, 0, 139, 0,
769
        0, 0, 0, 0, 0, 0, 72, 0, 0, 73,
770
        0, 0, 0, 0, 0, 70, 74, 93, 0, 94,
771
        101, 0, 0, 0, 71, 0, 0, 0, 95, 96,
772
        97, 98, 99, 100, 0, 75, 0, 76, 77, 78,
773
        0, 68, 79, 0, 80, 0, 81, 82, 0, 0,
774
        83, 84, 85, 86, 87, 0, 0, 88, 0, 0,
775
        0, 89, 90, 0, 91, 0, 0, 0, 0, 0,
776
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
777
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
778
        0, 0, 0, 0, 0, 0, 0, 123, 0, 0,
779
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
780
        0, 0, 0, 0, 0, 0, 93, 0, 94, 101,
781
        0, 0, 0, 0, 0, 0, 0, 95, 96, 97,
782
        98, 99, 100, 0, 0, 0, 0, 0, 0, 0,
783
        68,
784
}
785

786
var yyPact = [...]int16{
787
        2111, -1000, -1000, 12, -1000, -1000, -1000, 467, -1000, 516,
788
        157, 463, 353, 231, 315, 546, 568, 566, 566, 457,
789
        456, 424, 3023, 369, 142, 289, 316, 427, -1000, 2111,
790
        -1000, 194, -1000, 156, 154, 3221, 153, 150, 295, 542,
791
        145, -1000, 144, 587, 3122, 148, 146, 2924, 143, 3023,
792
        3023, 139, 534, 471, 68, -1000, -1000, -1000, -1000, -1000,
793
        -1000, -1000, 533, 3023, 3023, 3023, 451, -1000, -1000, -1000,
794
        -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
795
        -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
796
        -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
797
        -1000, -1000, 351, 316, 316, 121, 136, -1000, 379, -1000,
798
        -1000, 138, -1000, 473, -1000, 1408, -1000, -1000, 137, -1000,
799
        -1000, 329, -1000, 328, 10, -1000, 326, 375, -1000, 531,
800
        324, 295, 597, -1000, -1000, 583, 1126, 1126, 197, 306,
801
        304, -1000, -1000, 303, 3023, 74, -1000, -1000, 545, 591,
802
        616, -1000, 566, 608, 9, 9, 406, 114, 316, -1000,
803
        -1000, -1000, 357, 136, 121, 7, -1000, 135, 419, -1000,
804
        51, 2825, 124, 175, -1000, 1549, -1000, 87, -1000, 18,
805
        6, -1000, -1000, 1549, 1690, -1000, 1267, 225, -1000, -1000,
806
        5, 70, 4, -1000, -1000, -1000, -1000, -1000, 3, 94,
807
        -1000, -1000, -1000, -1000, 73, 2, -1000, -1000, -1000, -1000,
808
        -1000, -1000, -1000, -1000, -1000, -1000, -1000, 301, 299, 2599,
809
        298, 316, 3023, 296, 530, 585, -1000, 1126, 1126, -1000,
810
        1549, -1000, -1000, -1000, 3023, 134, 133, 1, 2726, 500,
811
        497, 494, 499, 574, 3023, -1000, 3023, 330, 2726, 330,
812
        621, 1549, 107, -1000, 162, -1000, 351, -1000, 354, 316,
813
        -1000, 2342, 1549, -1000, -1000, 2472, 1549, 1549, -1000, 1690,
814
        297, 1690, 294, 1690, 309, 1690, 1690, 1690, 1690, 1690,
815
        1690, 316, 342, -1000, -1000, -1000, -17, -19, 564, 245,
816
        49, 93, 1961, 1549, -1000, 2726, 1549, 129, 3023, -54,
817
        -1000, -1000, -1000, 487, 485, 564, 1549, 126, -1000, -1000,
818
        125, -1000, 0, -1000, 3023, 91, -1000, -1000, -1000, 193,
819
        -1000, -1000, 2726, -1000, 2726, 3023, 2726, 2726, 123, 2726,
820
        86, 515, 514, 529, -10, -1000, -65, -1000, 438, 288,
821
        538, -1000, 621, 114, 1549, 316, 351, -23, 621, 587,
822
        484, -1, -2, -3, -4, 2825, 2825, -1000, -1000, -1000,
823
        175, -1000, 27, -1000, 241, 48, 1690, -5, 27, 1690,
824
        27, 18, 18, -1000, -1000, -1000, -24, 341, 1549, -1000,
825
        -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
826
        418, -1000, -1000, -1000, -1000, -1000, -1000, 85, -1000, -26,
827
        -71, 1831, 372, -1000, -27, 40, -1000, -1000, -7, -1000,
828
        2599, 77, -8, -113, -1000, 479, 363, 2726, -9, 606,
829
        -1000, -72, -1000, -1000, 488, -1000, -1000, 218, 606, 605,
830
        604, 438, 447, 65, -1000, 1549, 2726, -1000, -1000, 985,
831
        373, 844, 321, 528, 288, -1000, -1000, -1000, 316, -1000,
832
        81, 2825, -10, -33, 561, 557, -34, -37, 122, -39,
833
        -1000, -1000, -1000, 1690, 27, 700, 27, -1000, 337, 1549,
834
        1549, 345, 1549, -1000, 282, 268, 84, -41, 2726, 564,
835
        267, 1549, 2599, -1000, -1000, -1000, 2726, 2726, 258, 100,
836
        89, 1549, 316, -79, 2726, -1000, -1000, -1000, -1000, -1000,
837
        2726, 323, 322, 564, -1000, 119, 118, -1000, 441, -10,
838
        -46, -1000, -1000, 51, 438, 1549, -1000, -1000, 1549, 77,
839
        373, -1000, 406, -1000, 81, 414, 177, 2215, -1000, -1000,
840
        -82, 2825, 116, 115, 2825, 2825, -48, 2825, 27, -49,
841
        -92, 289, -1000, 343, -1000, 1549, -59, -11, -12, -60,
842
        -1000, -61, -62, -13, -1000, -93, -94, -95, 223, -1000,
843
        237, -118, -64, -1000, -1000, 405, -96, -1000, 233, 230,
844
        -1000, -1000, -1000, 446, -1000, -1000, -1000, -1000, 248, -1000,
845
        438, 395, -1000, 2088, 413, 2342, -1000, -1000, -1000, -75,
846
        -77, -1000, -1000, -1000, -1000, -1000, -1000, 1549, -1000, -1000,
847
        257, 257, -1000, -78, -1000, 257, -1000, -1000, 201, 232,
848
        1549, -1000, -1000, -1000, 1549, 397, -1000, -1000, -1000, 450,
849
        246, -1000, 408, 393, 349, 2342, 2342, -1000, 2825, 587,
850
        -1000, 383, 390, 383, -1000, 383, 3023, 491, -1000, -1000,
851
        -1000, 1549, 114, -1000, 383, 1549, 2726, 526, -14, 621,
852
        -1000, -1000, 2825, -85, 388, 1549, -107, -108, -15, -1000,
853
        481, -1000, 44, 288, -1000, 42, -1000, -1000, 1549, 2726,
854
        526, -1000, -1000, 1549, 40, -1000, -1000, 2726, -1000, 373,
855
        2726, -1000, -97, -1000, 32, 368, -100, -1000, -1000, -1000,
856
        1549, 333, -1000, -1000, -1000, 368, -1000, 319, 333, -1000,
857
        -1000, -1000,
858
}
859

860
var yyPgo = [...]int16{
861
        0, 716, 579, 712, 711, 709, 453, 45, 35, 11,
862
        175, 18, 707, 28, 19, 8, 29, 706, 39, 704,
863
        702, 7, 698, 31, 59, 41, 509, 14, 697, 696,
864
        38, 695, 17, 694, 21, 693, 30, 25, 0, 692,
865
        26, 690, 687, 683, 682, 36, 679, 678, 32, 37,
866
        5, 40, 34, 673, 671, 6, 4, 668, 667, 23,
867
        16, 663, 9, 659, 13, 3, 1, 48, 384, 15,
868
        652, 10, 312, 641, 640, 639, 637, 33, 12, 636,
869
        27, 634, 190, 632, 631, 22, 630, 43, 24, 20,
870
        2, 629,
871
}
872

873
var yyR1 = [...]int8{
874
        0, 1, 1, 2, 2, 91, 91, 3, 3, 3,
875
        4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
876
        4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
877
        4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
878
        4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
879
        4, 4, 4, 4, 4, 4, 82, 82, 82, 81,
880
        81, 81, 81, 81, 81, 81, 80, 80, 80, 80,
881
        72, 72, 5, 5, 5, 5, 25, 25, 79, 79,
882
        79, 60, 60, 60, 78, 78, 77, 13, 13, 14,
883
        12, 12, 16, 16, 15, 15, 17, 17, 17, 17,
884
        17, 17, 17, 17, 17, 17, 17, 17, 17, 85,
885
        85, 85, 85, 85, 85, 85, 85, 18, 18, 37,
886
        37, 36, 36, 36, 36, 8, 76, 76, 61, 61,
887
        61, 70, 70, 73, 73, 74, 74, 74, 6, 6,
888
        6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
889
        6, 6, 6, 7, 7, 23, 23, 22, 22, 58,
890
        58, 59, 59, 19, 19, 19, 19, 19, 19, 19,
891
        20, 20, 21, 21, 89, 90, 90, 9, 9, 11,
892
        11, 10, 10, 87, 87, 87, 87, 87, 87, 87,
893
        87, 87, 87, 87, 88, 88, 86, 86, 86, 86,
894
        86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
895
        86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
896
        86, 86, 86, 86, 86, 86, 86, 86, 24, 24,
897
        24, 24, 24, 24, 24, 24, 24, 24, 26, 27,
898
        28, 28, 28, 29, 29, 29, 30, 30, 31, 31,
899
        32, 32, 33, 33, 33, 33, 33, 33, 34, 34,
900
        50, 50, 40, 40, 54, 54, 41, 41, 55, 55,
901
        55, 55, 55, 56, 56, 64, 64, 71, 71, 63,
902
        63, 65, 65, 65, 66, 66, 66, 69, 69, 68,
903
        68, 67, 62, 62, 62, 62, 62, 35, 35, 39,
904
        39, 57, 83, 83, 43, 43, 38, 44, 44, 45,
905
        45, 49, 49, 46, 46, 46, 46, 46, 46, 46,
906
        46, 46, 47, 47, 47, 47, 47, 48, 48, 48,
907
        51, 51, 51, 51, 52, 52, 53, 53, 53, 42,
908
        42, 42, 42, 75, 75, 84, 84, 84, 84, 84,
909
        84,
910
}
911

912
var yyR2 = [...]int8{
913
        0, 1, 0, 2, 3, 0, 1, 1, 1, 1,
914
        2, 1, 1, 1, 2, 3, 4, 3, 6, 3,
915
        2, 3, 3, 9, 6, 3, 5, 4, 6, 3,
916
        8, 5, 5, 3, 3, 3, 5, 8, 10, 9,
917
        11, 7, 5, 6, 6, 8, 6, 6, 9, 9,
918
        8, 7, 7, 3, 8, 8, 2, 1, 3, 1,
919
        1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
920
        0, 3, 7, 6, 8, 9, 2, 1, 0, 4,
921
        6, 0, 2, 2, 1, 3, 3, 1, 3, 3,
922
        1, 3, 0, 1, 1, 3, 1, 1, 1, 1,
923
        1, 6, 2, 1, 9, 9, 1, 1, 1, 1,
924
        1, 1, 1, 1, 1, 1, 1, 4, 9, 1,
925
        3, 1, 1, 3, 10, 7, 0, 2, 0, 3,
926
        3, 0, 2, 0, 1, 0, 1, 2, 1, 3,
927
        6, 4, 7, 4, 3, 3, 2, 2, 3, 2,
928
        2, 4, 2, 13, 3, 0, 1, 0, 1, 1,
929
        1, 2, 4, 1, 2, 4, 4, 5, 7, 6,
930
        2, 3, 1, 3, 1, 1, 1, 1, 3, 1,
931
        3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
932
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
933
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
934
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
935
        1, 1, 1, 1, 1, 1, 1, 1, 3, 4,
936
        4, 4, 4, 4, 4, 2, 6, 7, 1, 2,
937
        0, 2, 2, 0, 2, 2, 2, 1, 0, 1,
938
        1, 2, 5, 7, 4, 3, 2, 6, 0, 1,
939
        0, 2, 0, 2, 0, 3, 0, 2, 0, 2,
940
        2, 5, 4, 0, 2, 0, 3, 0, 4, 3,
941
        5, 0, 1, 1, 0, 2, 2, 0, 3, 1,
942
        3, 5, 0, 1, 2, 2, 2, 2, 4, 0,
943
        1, 5, 4, 5, 0, 2, 1, 3, 1, 3,
944
        1, 2, 1, 3, 3, 4, 5, 4, 3, 4,
945
        3, 1, 4, 6, 6, 1, 1, 3, 3, 1,
946
        3, 3, 3, 1, 2, 1, 3, 3, 1, 1,
947
        1, 3, 6, 0, 1, 1, 1, 1, 1, 1,
948
        1,
949
}
950

951
var yyChk = [...]int16{
952
        -1000, -1, -2, -3, -4, -5, -6, 50, 52, 53,
953
        54, 55, 4, 7, 5, 6, 36, 45, 46, 56,
954
        57, 60, 61, -7, 10, 115, 102, 67, -91, 156,
955
        51, 39, 139, 54, 8, 32, 119, 122, 34, 33,
956
        9, 139, 8, 15, 32, 119, 122, 34, 9, 32,
957
        32, 9, -82, 82, -81, 67, 4, 56, 61, 60,
958
        5, 36, -82, 58, 58, 69, -26, -88, 139, -86,
959
        14, 23, 5, 8, 15, 34, 36, 37, 38, 41,
960
        43, 45, 46, 49, 50, 51, 52, 53, 56, 60,
961
        61, 63, 96, 115, 117, 126, 127, 128, 129, 130,
962
        131, 118, 81, 88, 89, -68, 103, -67, 139, 116,
963
        117, 32, 118, 47, -6, -22, 68, -2, 54, 139,
964
        139, 96, 139, 96, -89, -88, 96, 139, 139, -72,
965
        96, 34, 139, 139, -27, -28, 18, 19, -88, 96,
966
        96, 139, 139, 96, 35, -89, 139, -88, -89, 139,
967
        35, 49, 149, 35, -26, -26, -26, 62, -23, 82,
968
        -6, -6, -7, 149, -68, 80, 139, 48, -58, 152,
969
        -59, -38, -44, -45, -49, 93, -46, -48, -47, -51,
970
        97, -57, -52, 83, 151, -53, 157, -42, -19, -17,
971
        125, -21, 145, 140, 141, 142, 143, 144, 112, 29,
972
        -18, 132, 133, 111, -90, 139, -88, -87, 124, 28,
973
        25, 30, 24, 31, 59, 26, 139, 93, 93, 157,
974
        93, 80, 35, 93, -72, 10, -29, 21, 20, -30,
975
        22, -38, -30, 123, 97, 97, 97, -89, 147, 37,
976
        38, 5, 36, 10, 8, -82, 8, -10, 157, -10,
977
        -40, 72, -78, -77, 139, -6, 81, -67, -7, 157,
978
        139, 69, 149, -62, -88, 80, 136, 135, -49, 137,
979
        99, 124, -75, 95, 93, 138, 150, 151, 152, 153,
980
        154, 157, -39, -38, -52, 97, -38, -7, 113, 157,
981
        -20, 148, 157, 157, 142, 147, 157, 97, 97, -37,
982
        -36, -8, -35, 42, 120, -90, 44, 41, 125, 29,
983
        97, -6, -89, 97, 35, 11, -30, -30, -38, -88,
984
        139, 139, 157, -90, 40, 39, 40, 40, 41, 40,
985
        11, -88, -88, -25, 59, -6, -9, -90, -25, -71,
986
        7, -38, -40, 149, 137, -23, 81, -6, -24, -26,
987
        157, 116, 117, 32, 118, -18, -38, -88, -87, 145,
988
        -45, -49, -48, 111, 93, -48, 94, 98, -48, 95,
989
        -48, -51, -51, -52, -52, -52, -6, -83, 84, 158,
990
        158, -85, 24, 25, 26, 27, 28, 29, 30, 31,
991
        -84, 126, 127, 128, 129, 130, 131, 148, 142, 152,
992
        -21, 68, -38, -90, -16, -15, -38, 139, -89, 158,
993
        149, 43, 43, -85, -38, 139, 139, 157, -89, 142,
994
        123, -9, -8, -89, -90, -90, 139, -90, 142, 39,
995
        39, -79, 35, -13, -14, 157, 149, 158, -60, 66,
996
        -55, 75, 106, 34, -71, -77, -38, -6, -23, 158,
997
        -71, -27, 59, -6, 16, 17, 157, 157, 157, 157,
998
        -62, -62, 111, 135, -48, 157, -48, 158, -43, 84,
999
        86, -38, 69, 142, 158, 158, 149, -21, 157, 80,
1000
        158, 149, 157, -36, -11, -90, 157, 157, -61, 159,
1001
        157, 44, 80, -9, 157, -80, 12, 13, 14, 158,
1002
        39, 62, 5, 139, -80, 9, 9, -60, 63, 149,
1003
        -16, -90, 152, -59, -56, 76, -38, 82, 91, 35,
1004
        -55, -6, -31, -32, -33, -34, 104, 149, 134, -62,
1005
        -13, 158, 23, 23, 158, 158, 139, 158, -48, -6,
1006
        -15, 115, 87, -38, -38, 85, -38, 100, 100, 142,
1007
        158, -21, -85, 100, -38, -37, -9, -9, -74, 111,
1008
        93, 140, 140, -38, -6, 158, -9, -90, 93, 93,
1009
        -85, 139, 139, 64, -14, 158, -60, -38, -38, -11,
1010
        -56, -40, -32, 70, -34, 109, -24, 158, -62, 139,
1011
        139, -62, -62, 158, -62, 158, 158, 85, -38, 158,
1012
        157, 157, 158, 158, 158, 157, 158, 158, 158, -70,
1013
        114, 111, 160, 158, 72, 158, 111, 111, 65, 61,
1014
        107, -60, -54, 73, -24, 109, 70, -24, 158, 158,
1015
        -38, -69, 101, -69, 158, -69, 121, -73, 110, -38,
1016
        -38, 72, 62, 108, -41, 71, 74, -71, 105, -24,
1017
        -24, -62, -27, -64, 77, 74, -64, -64, -89, -76,
1018
        42, -38, -78, -64, -38, -12, -21, -50, 35, 157,
1019
        -71, -62, 158, 74, -15, 158, 158, 157, 43, -55,
1020
        149, -38, -9, -50, -63, -38, -9, -56, -21, 158,
1021
        149, -65, 78, 79, 158, -38, -66, 90, -65, 91,
1022
        92, -66,
1023
}
1024

1025
var yyDef = [...]int16{
1026
        2, -2, 1, 5, 7, 8, 9, 11, 12, 13,
1027
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1028
        0, 0, 0, 138, 0, 0, 0, 157, 3, 6,
1029
        10, 0, 14, 0, 0, 0, 0, 0, 70, 0,
1030
        0, 20, 0, 240, 0, 0, 0, 0, 0, 0,
1031
        0, 0, 0, 0, 57, 59, 60, 61, 62, 63,
1032
        64, 65, 0, 0, 0, 0, 0, 238, 194, 195,
1033
        196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
1034
        206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
1035
        216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
1036
        226, 227, 155, 0, 0, 0, 0, 289, 0, 146,
1037
        147, 0, 149, 150, 152, 0, 158, 4, 0, 17,
1038
        15, 0, 19, 218, 0, 174, 0, 0, 34, 0,
1039
        0, 70, 0, 21, 22, 243, 0, 0, 25, 218,
1040
        0, 33, 35, 0, 0, 0, 53, 29, 0, 0,
1041
        0, 56, 0, 0, 181, 181, 262, 0, 0, 156,
1042
        144, 145, 139, 0, 0, 0, 148, 0, 154, 159,
1043
        160, 292, 306, 308, 310, 0, 312, -2, 321, 329,
1044
        186, 325, 333, 299, 0, 335, 0, 338, 339, 340,
1045
        187, 163, 0, 96, 97, 98, 99, 100, 0, 191,
1046
        103, 106, 107, 108, 172, 194, 175, 176, 183, 184,
1047
        185, 188, 189, 190, 192, 193, 16, 0, 0, 0,
1048
        0, 0, 0, 0, 0, 0, 239, 0, 0, 241,
1049
        0, 247, 242, 27, 0, 0, 0, 0, 0, 0,
1050
        0, 0, 0, 0, 0, 58, 0, 0, 0, 0,
1051
        277, 0, 262, 84, 0, 143, 155, 290, 141, 0,
1052
        151, 0, 0, 161, 293, 0, 0, 0, 311, 0,
1053
        0, 0, 0, 0, 344, 0, 0, 0, 0, 0,
1054
        0, 0, 0, 300, 334, 186, 0, 0, 0, 0,
1055
        164, 0, 0, 0, 102, 0, 92, 0, 0, 0,
1056
        119, 121, 122, 0, 0, 0, 0, 205, 187, 191,
1057
        0, 31, 0, 71, 0, 0, 244, 245, 246, 26,
1058
        32, 36, 0, 42, 0, 0, 0, 0, 0, 0,
1059
        0, 0, 0, 78, 0, 77, 0, 177, 81, 268,
1060
        0, 263, 277, 0, 0, 0, 155, 0, 277, 240,
1061
        0, 0, 220, 0, 227, 292, 292, 294, 295, 296,
1062
        307, 309, 313, 314, 0, 0, 0, 0, 318, 0,
1063
        320, 327, 328, 330, 331, 332, 0, 304, 0, 336,
1064
        337, 341, 109, 110, 111, 112, 113, 114, 115, 116,
1065
        0, 345, 346, 347, 348, 349, 350, 0, 170, 0,
1066
        0, 0, 0, 173, 0, 93, 94, 18, 0, 24,
1067
        0, 0, 0, 128, 297, 0, 0, 0, 0, 66,
1068
        28, 0, 43, 44, 0, 46, 47, 0, 66, 0,
1069
        0, 81, 0, 76, 87, 92, 0, 182, 73, 0,
1070
        273, 0, 0, 0, 268, 85, 86, 140, 0, 291,
1071
        -2, 292, 0, 0, 0, 0, 0, 0, 0, 0,
1072
        235, 162, 315, 0, 317, 0, 319, 322, 0, 0,
1073
        0, 0, 0, 171, 165, 166, 0, 0, 0, 0,
1074
        117, 0, 0, 120, 123, 179, 0, 0, 135, 0,
1075
        0, 0, 0, 0, 0, 51, 67, 68, 69, 41,
1076
        0, 0, 0, 0, 52, 0, 0, 72, 0, 0,
1077
        0, 178, 82, 83, 81, 0, 269, 270, 0, 0,
1078
        273, 142, 262, 249, -2, 0, 258, 0, 259, 228,
1079
        0, 292, 0, 0, 292, 292, 0, 292, 316, 0,
1080
        0, 219, 301, 0, 305, 0, 0, 0, 0, 0,
1081
        167, 0, 0, 0, 95, 0, 0, 0, 131, 136,
1082
        0, 0, 0, 298, 30, 37, 0, 45, 0, 0,
1083
        50, 54, 55, 0, 88, 89, 74, 274, 0, 278,
1084
        81, 264, 251, 0, 0, 0, 256, 229, 230, 0,
1085
        0, 231, 232, 233, 234, 323, 324, 0, 302, 342,
1086
        287, 287, 169, 0, 101, 287, 23, 180, 0, 133,
1087
        0, 137, 129, 130, 0, 39, 48, 49, 79, 0,
1088
        272, 75, 266, 0, 277, 0, 0, 255, 292, 240,
1089
        303, 275, 0, 275, 168, 275, 0, 126, 134, 132,
1090
        38, 0, 0, 271, 275, 0, 0, 260, 0, 277,
1091
        254, 236, 292, 0, 0, 0, 0, 0, 0, 125,
1092
        0, 40, 80, 268, 267, 265, 90, 252, 0, 0,
1093
        260, 237, 104, 0, 288, 105, 118, 0, 127, 273,
1094
        0, 261, 0, 257, 276, 281, 0, 153, 91, 253,
1095
        0, 284, 282, 283, 124, 281, 279, 0, 284, 285,
1096
        286, 280,
1097
}
1098

1099
var yyTok1 = [...]uint8{
1100
        1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1101
        3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1102
        3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1103
        3, 3, 3, 3, 3, 3, 3, 154, 3, 3,
1104
        157, 158, 152, 150, 149, 151, 155, 153, 3, 3,
1105
        3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1106
        3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1107
        3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1108
        3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1109
        3, 159, 3, 160,
1110
}
1111

1112
var yyTok2 = [...]uint8{
1113
        2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
1114
        12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
1115
        22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1116
        32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
1117
        42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
1118
        52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
1119
        62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
1120
        72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1121
        82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
1122
        92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1123
        102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
1124
        112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
1125
        122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
1126
        132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
1127
        142, 143, 144, 145, 146, 147, 148, 156,
1128
}
1129

1130
var yyTok3 = [...]int8{
1131
        0,
1132
}
1133

1134
var yyErrorMessages = [...]struct {
1135
        state int
1136
        token int
1137
        msg   string
1138
}{}
1139

1140
/*        parser for yacc output        */
1141

1142
var (
1143
        yyDebug        = 0
1144
        yyErrorVerbose = false
1145
)
1146

1147
type yyLexer interface {
1148
        Lex(lval *yySymType) int
1149
        Error(s string)
1150
}
1151

1152
type yyParser interface {
1153
        Parse(yyLexer) int
1154
        Lookahead() int
1155
}
1156

1157
type yyParserImpl struct {
1158
        lval  yySymType
1159
        stack [yyInitialStackSize]yySymType
1160
        char  int
1161
}
1162

1163
func (p *yyParserImpl) Lookahead() int {
×
1164
        return p.char
×
1165
}
×
1166

1167
func yyNewParser() yyParser {
8,074✔
1168
        return &yyParserImpl{}
8,074✔
1169
}
8,074✔
1170

1171
const yyFlag = -1000
1172

1173
func yyTokname(c int) string {
169✔
1174
        if c >= 1 && c-1 < len(yyToknames) {
338✔
1175
                if yyToknames[c-1] != "" {
338✔
1176
                        return yyToknames[c-1]
169✔
1177
                }
169✔
1178
        }
1179
        return __yyfmt__.Sprintf("tok-%v", c)
×
1180
}
1181

1182
func yyStatname(s int) string {
×
1183
        if s >= 0 && s < len(yyStatenames) {
×
1184
                if yyStatenames[s] != "" {
×
1185
                        return yyStatenames[s]
×
1186
                }
×
1187
        }
1188
        return __yyfmt__.Sprintf("state-%v", s)
×
1189
}
1190

1191
func yyErrorMessage(state, lookAhead int) string {
151✔
1192
        const TOKSTART = 4
151✔
1193

151✔
1194
        if !yyErrorVerbose {
151✔
UNCOV
1195
                return "syntax error"
×
UNCOV
1196
        }
×
1197

1198
        for _, e := range yyErrorMessages {
151✔
1199
                if e.state == state && e.token == lookAhead {
×
1200
                        return "syntax error: " + e.msg
×
1201
                }
×
1202
        }
1203

1204
        res := "syntax error: unexpected " + yyTokname(lookAhead)
151✔
1205

151✔
1206
        // To match Bison, suggest at most four expected tokens.
151✔
1207
        expected := make([]int, 0, 4)
151✔
1208

151✔
1209
        // Look for shiftable tokens.
151✔
1210
        base := int(yyPact[state])
151✔
1211
        for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
6,755✔
1212
                if n := base + tok; n >= 0 && n < yyLast && int(yyChk[int(yyAct[n])]) == tok {
7,247✔
1213
                        if len(expected) == cap(expected) {
768✔
1214
                                return res
125✔
1215
                        }
125✔
1216
                        expected = append(expected, tok)
518✔
1217
                }
1218
        }
1219

1220
        if yyDef[state] == -2 {
40✔
1221
                i := 0
14✔
1222
                for yyExca[i] != -1 || int(yyExca[i+1]) != state {
14✔
1223
                        i += 2
×
1224
                }
×
1225

1226
                // Look for tokens that we accept or reduce.
1227
                for i += 2; yyExca[i] >= 0; i += 2 {
28✔
1228
                        tok := int(yyExca[i])
14✔
1229
                        if tok < TOKSTART || yyExca[i+1] == 0 {
28✔
1230
                                continue
14✔
1231
                        }
1232
                        if len(expected) == cap(expected) {
×
1233
                                return res
×
1234
                        }
×
1235
                        expected = append(expected, tok)
×
1236
                }
1237

1238
                // If the default action is to accept or reduce, give up.
1239
                if yyExca[i+1] != 0 {
14✔
1240
                        return res
×
1241
                }
×
1242
        }
1243

1244
        for i, tok := range expected {
44✔
1245
                if i == 0 {
30✔
1246
                        res += ", expecting "
12✔
1247
                } else {
18✔
1248
                        res += " or "
6✔
1249
                }
6✔
1250
                res += yyTokname(tok)
18✔
1251
        }
1252
        return res
26✔
1253
}
1254

1255
func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
139,051✔
1256
        token = 0
139,051✔
1257
        char = lex.Lex(lval)
139,051✔
1258
        if char <= 0 {
146,975✔
1259
                token = int(yyTok1[0])
7,924✔
1260
                goto out
7,924✔
1261
        }
1262
        if char < len(yyTok1) {
181,169✔
1263
                token = int(yyTok1[char])
50,042✔
1264
                goto out
50,042✔
1265
        }
1266
        if char >= yyPrivate {
162,170✔
1267
                if char < yyPrivate+len(yyTok2) {
162,170✔
1268
                        token = int(yyTok2[char-yyPrivate])
81,085✔
1269
                        goto out
81,085✔
1270
                }
1271
        }
1272
        for i := 0; i < len(yyTok3); i += 2 {
×
1273
                token = int(yyTok3[i+0])
×
1274
                if token == char {
×
1275
                        token = int(yyTok3[i+1])
×
1276
                        goto out
×
1277
                }
1278
        }
1279

1280
out:
1281
        if token == 0 {
139,051✔
1282
                token = int(yyTok2[1]) /* unknown char */
×
1283
        }
×
1284
        if yyDebug >= 3 {
139,051✔
1285
                __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
×
1286
        }
×
1287
        return char, token
139,051✔
1288
}
1289

1290
func yyParse(yylex yyLexer) int {
8,074✔
1291
        return yyNewParser().Parse(yylex)
8,074✔
1292
}
8,074✔
1293

1294
func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
8,074✔
1295
        var yyn int
8,074✔
1296
        var yyVAL yySymType
8,074✔
1297
        var yyDollar []yySymType
8,074✔
1298
        _ = yyDollar // silence set and not used
8,074✔
1299
        yyS := yyrcvr.stack[:]
8,074✔
1300

8,074✔
1301
        Nerrs := 0   /* number of errors */
8,074✔
1302
        Errflag := 0 /* error recovery flag */
8,074✔
1303
        yystate := 0
8,074✔
1304
        yyrcvr.char = -1
8,074✔
1305
        yytoken := -1 // yyrcvr.char translated into internal numbering
8,074✔
1306
        defer func() {
16,148✔
1307
                // Make sure we report no lookahead when not parsing.
8,074✔
1308
                yystate = -1
8,074✔
1309
                yyrcvr.char = -1
8,074✔
1310
                yytoken = -1
8,074✔
1311
        }()
8,074✔
1312
        yyp := -1
8,074✔
1313
        goto yystack
8,074✔
1314

1315
ret0:
1316
        return 0
7,923✔
1317

7,923✔
1318
ret1:
7,923✔
1319
        return 1
151✔
1320

151✔
1321
yystack:
151✔
1322
        /* put a state and value onto the stack */
1323
        if yyDebug >= 4 {
600,053✔
1324
                __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
×
1325
        }
×
1326

1327
        yyp++
600,053✔
1328
        if yyp >= len(yyS) {
600,247✔
1329
                nyys := make([]yySymType, len(yyS)*2)
194✔
1330
                copy(nyys, yyS)
194✔
1331
                yyS = nyys
194✔
1332
        }
194✔
1333
        yyS[yyp] = yyVAL
600,053✔
1334
        yyS[yyp].yys = yystate
600,053✔
1335

600,053✔
1336
yynewstate:
600,053✔
1337
        yyn = int(yyPact[yystate])
600,053✔
1338
        if yyn <= yyFlag {
902,642✔
1339
                goto yydefault /* simple state */
302,589✔
1340
        }
1341
        if yyrcvr.char < 0 {
436,515✔
1342
                yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
139,051✔
1343
        }
139,051✔
1344
        yyn += yytoken
297,464✔
1345
        if yyn < 0 || yyn >= yyLast {
297,708✔
1346
                goto yydefault
244✔
1347
        }
1348
        yyn = int(yyAct[yyn])
297,220✔
1349
        if int(yyChk[yyn]) == yytoken { /* valid shift */
428,197✔
1350
                yyrcvr.char = -1
130,977✔
1351
                yytoken = -1
130,977✔
1352
                yyVAL = yyrcvr.lval
130,977✔
1353
                yystate = yyn
130,977✔
1354
                if Errflag > 0 {
130,977✔
1355
                        Errflag--
×
1356
                }
×
1357
                goto yystack
130,977✔
1358
        }
1359

1360
yydefault:
1361
        /* default state action */
1362
        yyn = int(yyDef[yystate])
469,076✔
1363
        if yyn == -2 {
497,933✔
1364
                if yyrcvr.char < 0 {
28,857✔
1365
                        yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
×
1366
                }
×
1367

1368
                /* look through exception table */
1369
                xi := 0
28,857✔
1370
                for {
125,702✔
1371
                        if yyExca[xi+0] == -1 && int(yyExca[xi+1]) == yystate {
125,702✔
1372
                                break
28,857✔
1373
                        }
1374
                        xi += 2
67,988✔
1375
                }
1376
                for xi += 2; ; xi += 2 {
98,223✔
1377
                        yyn = int(yyExca[xi+0])
69,366✔
1378
                        if yyn < 0 || yyn == yytoken {
98,223✔
1379
                                break
28,857✔
1380
                        }
1381
                }
1382
                yyn = int(yyExca[xi+1])
28,857✔
1383
                if yyn < 0 {
36,780✔
1384
                        goto ret0
7,923✔
1385
                }
1386
        }
1387
        if yyn == 0 {
461,304✔
1388
                /* error ... attempt to resume parsing */
151✔
1389
                switch Errflag {
151✔
1390
                case 0: /* brand new error */
151✔
1391
                        yylex.Error(yyErrorMessage(yystate, yytoken))
151✔
1392
                        Nerrs++
151✔
1393
                        if yyDebug >= 1 {
151✔
1394
                                __yyfmt__.Printf("%s", yyStatname(yystate))
×
1395
                                __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
×
1396
                        }
×
1397
                        fallthrough
151✔
1398

1399
                case 1, 2: /* incompletely recovered error ... try again */
151✔
1400
                        Errflag = 3
151✔
1401

151✔
1402
                        /* find a state where "error" is a legal shift action */
151✔
1403
                        for yyp >= 0 {
739✔
1404
                                yyn = int(yyPact[yyS[yyp].yys]) + yyErrCode
588✔
1405
                                if yyn >= 0 && yyn < yyLast {
1,140✔
1406
                                        yystate = int(yyAct[yyn]) /* simulate a shift of "error" */
552✔
1407
                                        if int(yyChk[yystate]) == yyErrCode {
552✔
1408
                                                goto yystack
×
1409
                                        }
1410
                                }
1411

1412
                                /* the current p has no shift on "error", pop stack */
1413
                                if yyDebug >= 2 {
588✔
1414
                                        __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
×
1415
                                }
×
1416
                                yyp--
588✔
1417
                        }
1418
                        /* there is no state on the stack with an error shift ... abort */
1419
                        goto ret1
151✔
1420

1421
                case 3: /* no shift yet; clobber input char */
×
1422
                        if yyDebug >= 2 {
×
1423
                                __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
×
1424
                        }
×
1425
                        if yytoken == yyEofCode {
×
1426
                                goto ret1
×
1427
                        }
1428
                        yyrcvr.char = -1
×
1429
                        yytoken = -1
×
1430
                        goto yynewstate /* try again in the same state */
×
1431
                }
1432
        }
1433

1434
        /* reduction by production yyn */
1435
        if yyDebug >= 2 {
461,002✔
1436
                __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
×
1437
        }
×
1438

1439
        yynt := yyn
461,002✔
1440
        yypt := yyp
461,002✔
1441
        _ = yypt // guard against "declared and not used"
461,002✔
1442

461,002✔
1443
        yyp -= int(yyR2[yyn])
461,002✔
1444
        // yyp is now the index of $0. Perform the default action. Iff the
461,002✔
1445
        // reduced production is ε, $1 is possibly out of range.
461,002✔
1446
        if yyp+1 >= len(yyS) {
461,194✔
1447
                nyys := make([]yySymType, len(yyS)*2)
192✔
1448
                copy(nyys, yyS)
192✔
1449
                yyS = nyys
192✔
1450
        }
192✔
1451
        yyVAL = yyS[yyp+1]
461,002✔
1452

461,002✔
1453
        /* consult goto table to find next state */
461,002✔
1454
        yyn = int(yyR1[yyn])
461,002✔
1455
        yyg := int(yyPgo[yyn])
461,002✔
1456
        yyj := yyg + yyS[yyp].yys + 1
461,002✔
1457

461,002✔
1458
        if yyj >= yyLast {
461,002✔
1459
                yystate = int(yyAct[yyg])
×
1460
        } else {
461,002✔
1461
                yystate = int(yyAct[yyj])
461,002✔
1462
                if int(yyChk[yystate]) != -yyn {
841,001✔
1463
                        yystate = int(yyAct[yyg])
379,999✔
1464
                }
379,999✔
1465
        }
1466
        // dummy call; replaced with literal code
1467
        switch yynt {
461,002✔
1468

1469
        case 1:
7,914✔
1470
                yyDollar = yyS[yypt-1 : yypt+1]
7,914✔
1471
                {
15,828✔
1472
                        yyVAL.stmts = yyDollar[1].stmts
7,914✔
1473
                        setResult(yylex, yyDollar[1].stmts)
7,914✔
1474
                }
7,914✔
1475
        case 2:
23✔
1476
                yyDollar = yyS[yypt-0 : yypt+1]
23✔
1477
                {
46✔
1478
                        setResult(yylex, nil)
23✔
1479
                }
23✔
1480
        case 3:
7,914✔
1481
                yyDollar = yyS[yypt-2 : yypt+1]
7,914✔
1482
                {
15,828✔
1483
                        yyVAL.stmts = []SQLStmt{yyDollar[1].stmt}
7,914✔
1484
                }
7,914✔
1485
        case 4:
345✔
1486
                yyDollar = yyS[yypt-3 : yypt+1]
345✔
1487
                {
690✔
1488
                        yyVAL.stmts = append([]SQLStmt{yyDollar[1].stmt}, yyDollar[3].stmts...)
345✔
1489
                }
345✔
1490
        case 5:
6,213✔
1491
                yyDollar = yyS[yypt-0 : yypt+1]
6,213✔
1492
                {
12,426✔
1493
                }
6,213✔
1494
        case 10:
75✔
1495
                yyDollar = yyS[yypt-2 : yypt+1]
75✔
1496
                {
150✔
1497
                        yyVAL.stmt = &BeginTransactionStmt{}
75✔
1498
                }
75✔
1499
        case 11:
2✔
1500
                yyDollar = yyS[yypt-1 : yypt+1]
2✔
1501
                {
4✔
1502
                        yyVAL.stmt = &BeginTransactionStmt{}
2✔
1503
                }
2✔
1504
        case 12:
181✔
1505
                yyDollar = yyS[yypt-1 : yypt+1]
181✔
1506
                {
362✔
1507
                        yyVAL.stmt = &CommitStmt{}
181✔
1508
                }
181✔
1509
        case 13:
7✔
1510
                yyDollar = yyS[yypt-1 : yypt+1]
7✔
1511
                {
14✔
1512
                        yyVAL.stmt = &RollbackStmt{}
7✔
1513
                }
7✔
UNCOV
1514
        case 14:
×
NEW
1515
                yyDollar = yyS[yypt-2 : yypt+1]
×
UNCOV
1516
                {
×
NEW
1517
                        yyVAL.stmt = &SavepointStmt{name: yyDollar[2].id}
×
UNCOV
1518
                }
×
UNCOV
1519
        case 15:
×
NEW
1520
                yyDollar = yyS[yypt-3 : yypt+1]
×
UNCOV
1521
                {
×
NEW
1522
                        yyVAL.stmt = &ReleaseSavepointStmt{name: yyDollar[3].id}
×
UNCOV
1523
                }
×
UNCOV
1524
        case 16:
×
NEW
1525
                yyDollar = yyS[yypt-4 : yypt+1]
×
UNCOV
1526
                {
×
NEW
1527
                        yyVAL.stmt = &RollbackToSavepointStmt{name: yyDollar[4].id}
×
UNCOV
1528
                }
×
UNCOV
1529
        case 17:
×
UNCOV
1530
                yyDollar = yyS[yypt-3 : yypt+1]
×
UNCOV
1531
                {
×
NEW
1532
                        yyVAL.stmt = &RollbackToSavepointStmt{name: yyDollar[3].id}
×
UNCOV
1533
                }
×
1534
        case 18:
3✔
1535
                yyDollar = yyS[yypt-6 : yypt+1]
3✔
1536
                {
6✔
1537
                        yyVAL.stmt = &CreateDatabaseStmt{ifNotExists: true, DB: yyDollar[6].id}
3✔
1538
                }
3✔
1539
        case 19:
20✔
1540
                yyDollar = yyS[yypt-3 : yypt+1]
20✔
1541
                {
40✔
1542
                        yyVAL.stmt = &CreateDatabaseStmt{ifNotExists: false, DB: yyDollar[3].id}
20✔
1543
                }
20✔
1544
        case 20:
3✔
1545
                yyDollar = yyS[yypt-2 : yypt+1]
3✔
1546
                {
6✔
1547
                        yyVAL.stmt = &UseDatabaseStmt{DB: yyDollar[2].id}
3✔
1548
                }
3✔
1549
        case 21:
16✔
1550
                yyDollar = yyS[yypt-3 : yypt+1]
16✔
1551
                {
32✔
1552
                        yyVAL.stmt = &UseDatabaseStmt{DB: yyDollar[3].id}
16✔
1553
                }
16✔
1554
        case 22:
9✔
1555
                yyDollar = yyS[yypt-3 : yypt+1]
9✔
1556
                {
18✔
1557
                        yyVAL.stmt = &UseSnapshotStmt{period: yyDollar[3].period}
9✔
1558
                }
9✔
1559
        case 23:
105✔
1560
                yyDollar = yyS[yypt-9 : yypt+1]
105✔
1561
                {
210✔
1562
                        yyVAL.stmt = newCreateTableStmt(yyDollar[6].str, yyDollar[8].tableElems, true)
105✔
1563
                }
105✔
1564
        case 24:
408✔
1565
                yyDollar = yyS[yypt-6 : yypt+1]
408✔
1566
                {
816✔
1567
                        yyVAL.stmt = newCreateTableStmt(yyDollar[3].str, yyDollar[5].tableElems, false)
408✔
1568
                }
408✔
1569
        case 25:
34✔
1570
                yyDollar = yyS[yypt-3 : yypt+1]
34✔
1571
                {
68✔
1572
                        yyVAL.stmt = &DropTableStmt{table: yyDollar[3].str}
34✔
1573
                }
34✔
UNCOV
1574
        case 26:
×
NEW
1575
                yyDollar = yyS[yypt-5 : yypt+1]
×
UNCOV
1576
                {
×
NEW
1577
                        yyVAL.stmt = &DropTableStmt{table: yyDollar[5].str, ifExists: true}
×
UNCOV
1578
                }
×
UNCOV
1579
        case 27:
×
NEW
1580
                yyDollar = yyS[yypt-4 : yypt+1]
×
UNCOV
1581
                {
×
NEW
1582
                        yyVAL.stmt = &DropTableStmt{table: yyDollar[3].str, cascade: true}
×
UNCOV
1583
                }
×
UNCOV
1584
        case 28:
×
UNCOV
1585
                yyDollar = yyS[yypt-6 : yypt+1]
×
UNCOV
1586
                {
×
NEW
1587
                        yyVAL.stmt = &DropTableStmt{table: yyDollar[5].str, ifExists: true, cascade: true}
×
UNCOV
1588
                }
×
1589
        case 29:
3✔
1590
                yyDollar = yyS[yypt-3 : yypt+1]
3✔
1591
                {
6✔
1592
                        yyVAL.stmt = &TruncateTableStmt{table: yyDollar[3].str}
3✔
1593
                }
3✔
1594
        case 30:
2✔
1595
                yyDollar = yyS[yypt-8 : yypt+1]
2✔
1596
                {
4✔
1597
                        yyVAL.stmt = &CreateViewStmt{viewName: yyDollar[6].id, ifNotExists: true, query: yyDollar[8].stmt.(DataSource)}
2✔
1598
                }
2✔
1599
        case 31:
10✔
1600
                yyDollar = yyS[yypt-5 : yypt+1]
10✔
1601
                {
20✔
1602
                        yyVAL.stmt = &CreateViewStmt{viewName: yyDollar[3].id, query: yyDollar[5].stmt.(DataSource)}
10✔
1603
                }
10✔
1604
        case 32:
2✔
1605
                yyDollar = yyS[yypt-5 : yypt+1]
2✔
1606
                {
4✔
1607
                        yyVAL.stmt = &DropViewStmt{viewName: yyDollar[5].id, ifExists: true}
2✔
1608
                }
2✔
1609
        case 33:
7✔
1610
                yyDollar = yyS[yypt-3 : yypt+1]
7✔
1611
                {
14✔
1612
                        yyVAL.stmt = &DropViewStmt{viewName: yyDollar[3].id}
7✔
1613
                }
7✔
1614
        case 34:
6✔
1615
                yyDollar = yyS[yypt-3 : yypt+1]
6✔
1616
                {
12✔
1617
                        yyVAL.stmt = &CreateSequenceStmt{name: yyDollar[3].id, startValue: 1, increment: 1}
6✔
1618
                }
6✔
1619
        case 35:
3✔
1620
                yyDollar = yyS[yypt-3 : yypt+1]
3✔
1621
                {
6✔
1622
                        yyVAL.stmt = &DropSequenceStmt{name: yyDollar[3].id}
3✔
1623
                }
3✔
1624
        case 36:
2✔
1625
                yyDollar = yyS[yypt-5 : yypt+1]
2✔
1626
                {
4✔
1627
                        yyVAL.stmt = &DropSequenceStmt{name: yyDollar[5].id, ifExists: true}
2✔
1628
                }
2✔
1629
        case 37:
142✔
1630
                yyDollar = yyS[yypt-8 : yypt+1]
142✔
1631
                {
284✔
1632
                        yyVAL.stmt = &CreateIndexStmt{ifNotExists: yyDollar[3].boolean, table: yyDollar[5].str, cols: yyDollar[7].colNames}
142✔
1633
                }
142✔
UNCOV
1634
        case 38:
×
NEW
1635
                yyDollar = yyS[yypt-10 : yypt+1]
×
UNCOV
1636
                {
×
NEW
1637
                        yyVAL.stmt = &CreateIndexStmt{ifNotExists: yyDollar[3].boolean, table: yyDollar[5].str, cols: yyDollar[7].colNames, predicate: yyDollar[10].exp}
×
UNCOV
1638
                }
×
1639
        case 39:
102✔
1640
                yyDollar = yyS[yypt-9 : yypt+1]
102✔
1641
                {
204✔
1642
                        yyVAL.stmt = &CreateIndexStmt{unique: true, ifNotExists: yyDollar[4].boolean, table: yyDollar[6].str, cols: yyDollar[8].colNames}
102✔
1643
                }
102✔
UNCOV
1644
        case 40:
×
NEW
1645
                yyDollar = yyS[yypt-11 : yypt+1]
×
UNCOV
1646
                {
×
NEW
1647
                        yyVAL.stmt = &CreateIndexStmt{unique: true, ifNotExists: yyDollar[4].boolean, table: yyDollar[6].str, cols: yyDollar[8].colNames, predicate: yyDollar[11].exp}
×
UNCOV
1648
                }
×
1649
        case 41:
46✔
1650
                yyDollar = yyS[yypt-7 : yypt+1]
46✔
1651
                {
92✔
1652
                        yyVAL.stmt = &DropIndexStmt{table: yyDollar[4].str, cols: yyDollar[6].colNames}
46✔
1653
                }
46✔
1654
        case 42:
75✔
1655
                yyDollar = yyS[yypt-5 : yypt+1]
75✔
1656
                {
150✔
1657
                        yyVAL.stmt = &DropIndexStmt{table: yyDollar[3].str, cols: []string{yyDollar[5].str}}
75✔
1658
                }
75✔
1659
        case 43:
48✔
1660
                yyDollar = yyS[yypt-6 : yypt+1]
48✔
1661
                {
96✔
1662
                        yyVAL.stmt = &AddColumnStmt{table: yyDollar[3].str, colSpec: yyDollar[6].colSpec}
48✔
1663
                }
48✔
1664
        case 44:
38✔
1665
                yyDollar = yyS[yypt-6 : yypt+1]
38✔
1666
                {
76✔
1667
                        yyVAL.stmt = &RenameTableStmt{oldName: yyDollar[3].str, newName: yyDollar[6].str}
38✔
1668
                }
38✔
1669
        case 45:
84✔
1670
                yyDollar = yyS[yypt-8 : yypt+1]
84✔
1671
                {
168✔
1672
                        yyVAL.stmt = &RenameColumnStmt{table: yyDollar[3].str, oldName: yyDollar[6].str, newName: yyDollar[8].str}
84✔
1673
                }
84✔
1674
        case 46:
86✔
1675
                yyDollar = yyS[yypt-6 : yypt+1]
86✔
1676
                {
172✔
1677
                        yyVAL.stmt = &DropColumnStmt{table: yyDollar[3].str, colName: yyDollar[6].str}
86✔
1678
                }
86✔
1679
        case 47:
36✔
1680
                yyDollar = yyS[yypt-6 : yypt+1]
36✔
1681
                {
72✔
1682
                        yyVAL.stmt = &DropConstraintStmt{table: yyDollar[3].str, constraintName: yyDollar[6].id}
36✔
1683
                }
36✔
1684
        case 48:
1✔
1685
                yyDollar = yyS[yypt-9 : yypt+1]
1✔
1686
                {
2✔
1687
                        yyVAL.stmt = &AlterColumnStmt{table: yyDollar[3].str, colName: yyDollar[6].str, action: AlterColumnSetNotNull}
1✔
1688
                }
1✔
1689
        case 49:
1✔
1690
                yyDollar = yyS[yypt-9 : yypt+1]
1✔
1691
                {
2✔
1692
                        yyVAL.stmt = &AlterColumnStmt{table: yyDollar[3].str, colName: yyDollar[6].str, action: AlterColumnDropNotNull}
1✔
1693
                }
1✔
UNCOV
1694
        case 50:
×
NEW
1695
                yyDollar = yyS[yypt-8 : yypt+1]
×
UNCOV
1696
                {
×
NEW
1697
                        if strings.ToUpper(yyDollar[7].id) != "TYPE" {
×
NEW
1698
                                yylex.Error("expected TYPE keyword")
×
NEW
1699
                                goto ret1
×
1700
                        }
NEW
1701
                        yyVAL.stmt = &AlterColumnStmt{table: yyDollar[3].str, colName: yyDollar[6].str, action: AlterColumnSetType, newType: yyDollar[8].sqlType}
×
1702
                }
1703
        case 51:
6✔
1704
                yyDollar = yyS[yypt-7 : yypt+1]
6✔
1705
                {
12✔
1706
                        yyVAL.stmt = &CreateUserStmt{username: yyDollar[3].id, password: yyDollar[6].str, permission: yyDollar[7].permission}
6✔
1707
                }
6✔
1708
        case 52:
5✔
1709
                yyDollar = yyS[yypt-7 : yypt+1]
5✔
1710
                {
10✔
1711
                        yyVAL.stmt = &AlterUserStmt{username: yyDollar[3].id, password: yyDollar[6].str, permission: yyDollar[7].permission}
5✔
1712
                }
5✔
1713
        case 53:
3✔
1714
                yyDollar = yyS[yypt-3 : yypt+1]
3✔
1715
                {
6✔
1716
                        yyVAL.stmt = &DropUserStmt{username: yyDollar[3].id}
3✔
1717
                }
3✔
1718
        case 54:
3✔
1719
                yyDollar = yyS[yypt-8 : yypt+1]
3✔
1720
                {
6✔
1721
                        yyVAL.stmt = &AlterPrivilegesStmt{database: yyDollar[5].str, user: yyDollar[8].id, privileges: yyDollar[2].sqlPrivileges, isGrant: true}
3✔
1722
                }
3✔
1723
        case 55:
3✔
1724
                yyDollar = yyS[yypt-8 : yypt+1]
3✔
1725
                {
6✔
1726
                        yyVAL.stmt = &AlterPrivilegesStmt{database: yyDollar[5].str, user: yyDollar[8].id, privileges: yyDollar[2].sqlPrivileges}
3✔
1727
                }
3✔
1728
        case 56:
4✔
1729
                yyDollar = yyS[yypt-2 : yypt+1]
4✔
1730
                {
8✔
1731
                        yyVAL.sqlPrivileges = allPrivileges
4✔
1732
                }
4✔
1733
        case 57:
2✔
1734
                yyDollar = yyS[yypt-1 : yypt+1]
2✔
1735
                {
4✔
1736
                        yyVAL.sqlPrivileges = []SQLPrivilege{yyDollar[1].sqlPrivilege}
2✔
1737
                }
2✔
1738
        case 58:
6✔
1739
                yyDollar = yyS[yypt-3 : yypt+1]
6✔
1740
                {
12✔
1741
                        yyVAL.sqlPrivileges = append(yyDollar[3].sqlPrivileges, yyDollar[1].sqlPrivilege)
6✔
1742
                }
6✔
1743
        case 59:
2✔
1744
                yyDollar = yyS[yypt-1 : yypt+1]
2✔
1745
                {
4✔
1746
                        yyVAL.sqlPrivilege = SQLPrivilegeSelect
2✔
1747
                }
2✔
UNCOV
1748
        case 60:
×
NEW
1749
                yyDollar = yyS[yypt-1 : yypt+1]
×
UNCOV
1750
                {
×
NEW
1751
                        yyVAL.sqlPrivilege = SQLPrivilegeCreate
×
UNCOV
1752
                }
×
1753
        case 61:
2✔
1754
                yyDollar = yyS[yypt-1 : yypt+1]
2✔
1755
                {
4✔
1756
                        yyVAL.sqlPrivilege = SQLPrivilegeInsert
2✔
1757
                }
2✔
1758
        case 62:
2✔
1759
                yyDollar = yyS[yypt-1 : yypt+1]
2✔
1760
                {
4✔
1761
                        yyVAL.sqlPrivilege = SQLPrivilegeUpdate
2✔
1762
                }
2✔
1763
        case 63:
2✔
1764
                yyDollar = yyS[yypt-1 : yypt+1]
2✔
1765
                {
4✔
1766
                        yyVAL.sqlPrivilege = SQLPrivilegeDelete
2✔
1767
                }
2✔
UNCOV
1768
        case 64:
×
NEW
1769
                yyDollar = yyS[yypt-1 : yypt+1]
×
UNCOV
1770
                {
×
NEW
1771
                        yyVAL.sqlPrivilege = SQLPrivilegeDrop
×
UNCOV
1772
                }
×
UNCOV
1773
        case 65:
×
UNCOV
1774
                yyDollar = yyS[yypt-1 : yypt+1]
×
UNCOV
1775
                {
×
NEW
1776
                        yyVAL.sqlPrivilege = SQLPrivilegeAlter
×
UNCOV
1777
                }
×
UNCOV
1778
        case 66:
×
NEW
1779
                yyDollar = yyS[yypt-0 : yypt+1]
×
UNCOV
1780
                {
×
NEW
1781
                        yyVAL.permission = PermissionReadWrite
×
UNCOV
1782
                }
×
1783
        case 67:
5✔
1784
                yyDollar = yyS[yypt-1 : yypt+1]
5✔
1785
                {
10✔
1786
                        yyVAL.permission = PermissionReadOnly
5✔
1787
                }
5✔
1788
        case 68:
4✔
1789
                yyDollar = yyS[yypt-1 : yypt+1]
4✔
1790
                {
8✔
1791
                        yyVAL.permission = PermissionReadWrite
4✔
1792
                }
4✔
1793
        case 69:
2✔
1794
                yyDollar = yyS[yypt-1 : yypt+1]
2✔
1795
                {
4✔
1796
                        yyVAL.permission = PermissionAdmin
2✔
1797
                }
2✔
1798
        case 70:
264✔
1799
                yyDollar = yyS[yypt-0 : yypt+1]
264✔
1800
                {
528✔
1801
                        yyVAL.boolean = false
264✔
1802
                }
264✔
1803
        case 71:
4✔
1804
                yyDollar = yyS[yypt-3 : yypt+1]
4✔
1805
                {
8✔
1806
                        yyVAL.boolean = true
4✔
1807
                }
4✔
1808
        case 72:
3,961✔
1809
                yyDollar = yyS[yypt-7 : yypt+1]
3,961✔
1810
                {
7,922✔
1811
                        stmt := &UpsertIntoStmt{isInsert: true, tableRef: yyDollar[3].tableRef, cols: yyDollar[4].colNames, ds: yyDollar[5].ds, onConflict: yyDollar[6].onConflict}
3,961✔
1812
                        if yyDollar[7].targets != nil {
3,976✔
1813
                                yyVAL.stmt = &ReturningStmt{dml: stmt, returning: yyDollar[7].targets, tableName: yyDollar[3].tableRef.table}
15✔
1814
                        } else {
3,961✔
1815
                                yyVAL.stmt = stmt
3,946✔
1816
                        }
3,946✔
1817
                }
1818
        case 73:
1,350✔
1819
                yyDollar = yyS[yypt-6 : yypt+1]
1,350✔
1820
                {
2,700✔
1821
                        stmt := &UpsertIntoStmt{tableRef: yyDollar[3].tableRef, cols: yyDollar[4].colNames, ds: yyDollar[5].ds}
1,350✔
1822
                        if yyDollar[6].targets != nil {
1,350✔
NEW
1823
                                yyVAL.stmt = &ReturningStmt{dml: stmt, returning: yyDollar[6].targets, tableName: yyDollar[3].tableRef.table}
×
1824
                        } else {
1,350✔
1825
                                yyVAL.stmt = stmt
1,350✔
1826
                        }
1,350✔
1827
                }
1828
        case 74:
16✔
1829
                yyDollar = yyS[yypt-8 : yypt+1]
16✔
1830
                {
32✔
1831
                        stmt := &DeleteFromStmt{tableRef: yyDollar[3].tableRef, where: yyDollar[4].exp, indexOn: yyDollar[5].colNames, limit: yyDollar[6].exp, offset: yyDollar[7].exp}
16✔
1832
                        if yyDollar[8].targets != nil {
18✔
1833
                                yyVAL.stmt = &ReturningStmt{dml: stmt, returning: yyDollar[8].targets, tableName: yyDollar[3].tableRef.table}
2✔
1834
                        } else {
16✔
1835
                                yyVAL.stmt = stmt
14✔
1836
                        }
14✔
1837
                }
1838
        case 75:
31✔
1839
                yyDollar = yyS[yypt-9 : yypt+1]
31✔
1840
                {
62✔
1841
                        stmt := &UpdateStmt{tableRef: yyDollar[2].tableRef, updates: yyDollar[4].updates, where: yyDollar[5].exp, indexOn: yyDollar[6].colNames, limit: yyDollar[7].exp, offset: yyDollar[8].exp}
31✔
1842
                        if yyDollar[9].targets != nil {
33✔
1843
                                yyVAL.stmt = &ReturningStmt{dml: stmt, returning: yyDollar[9].targets, tableName: yyDollar[2].tableRef.table}
2✔
1844
                        } else {
31✔
1845
                                yyVAL.stmt = stmt
29✔
1846
                        }
29✔
1847
                }
1848
        case 76:
5,308✔
1849
                yyDollar = yyS[yypt-2 : yypt+1]
5,308✔
1850
                {
10,616✔
1851
                        yyVAL.ds = &valuesDataSource{rows: yyDollar[2].rows}
5,308✔
1852
                }
5,308✔
1853
        case 77:
3✔
1854
                yyDollar = yyS[yypt-1 : yypt+1]
3✔
1855
                {
6✔
1856
                        yyVAL.ds = yyDollar[1].stmt.(DataSource)
3✔
1857
                }
3✔
1858
        case 78:
3,946✔
1859
                yyDollar = yyS[yypt-0 : yypt+1]
3,946✔
1860
                {
7,892✔
1861
                        yyVAL.onConflict = nil
3,946✔
1862
                }
3,946✔
1863
        case 79:
8✔
1864
                yyDollar = yyS[yypt-4 : yypt+1]
8✔
1865
                {
16✔
1866
                        yyVAL.onConflict = &OnConflictDo{}
8✔
1867
                }
8✔
1868
        case 80:
7✔
1869
                yyDollar = yyS[yypt-6 : yypt+1]
7✔
1870
                {
14✔
1871
                        yyVAL.onConflict = &OnConflictDo{updates: yyDollar[6].updates}
7✔
1872
                }
7✔
1873
        case 81:
5,339✔
1874
                yyDollar = yyS[yypt-0 : yypt+1]
5,339✔
1875
                {
10,678✔
1876
                        yyVAL.targets = nil
5,339✔
1877
                }
5,339✔
1878
        case 82:
6✔
1879
                yyDollar = yyS[yypt-2 : yypt+1]
6✔
1880
                {
12✔
1881
                        yyVAL.targets = []TargetEntry{{Exp: &ColSelector{col: "*"}}}
6✔
1882
                }
6✔
1883
        case 83:
13✔
1884
                yyDollar = yyS[yypt-2 : yypt+1]
13✔
1885
                {
26✔
1886
                        yyVAL.targets = yyDollar[2].targets
13✔
1887
                }
13✔
1888
        case 84:
38✔
1889
                yyDollar = yyS[yypt-1 : yypt+1]
38✔
1890
                {
76✔
1891
                        yyVAL.updates = []*colUpdate{yyDollar[1].update}
38✔
1892
                }
38✔
1893
        case 85:
4✔
1894
                yyDollar = yyS[yypt-3 : yypt+1]
4✔
1895
                {
8✔
1896
                        yyVAL.updates = append(yyDollar[1].updates, yyDollar[3].update)
4✔
1897
                }
4✔
1898
        case 86:
42✔
1899
                yyDollar = yyS[yypt-3 : yypt+1]
42✔
1900
                {
84✔
1901
                        yyVAL.update = &colUpdate{col: yyDollar[1].id, op: yyDollar[2].cmpOp, val: yyDollar[3].exp}
42✔
1902
                }
42✔
1903
        case 87:
5,321✔
1904
                yyDollar = yyS[yypt-1 : yypt+1]
5,321✔
1905
                {
10,642✔
1906
                        yyVAL.rows = []*RowSpec{yyDollar[1].row}
5,321✔
1907
                }
5,321✔
1908
        case 88:
121✔
1909
                yyDollar = yyS[yypt-3 : yypt+1]
121✔
1910
                {
242✔
1911
                        yyVAL.rows = append(yyDollar[1].rows, yyDollar[3].row)
121✔
1912
                }
121✔
1913
        case 89:
5,442✔
1914
                yyDollar = yyS[yypt-3 : yypt+1]
5,442✔
1915
                {
10,884✔
1916
                        yyVAL.row = &RowSpec{Values: yyDollar[2].values}
5,442✔
1917
                }
5,442✔
1918
        case 90:
42✔
1919
                yyDollar = yyS[yypt-1 : yypt+1]
42✔
1920
                {
84✔
1921
                        yyVAL.cols = []*ColSelector{yyDollar[1].col}
42✔
1922
                }
42✔
1923
        case 91:
19✔
1924
                yyDollar = yyS[yypt-3 : yypt+1]
19✔
1925
                {
38✔
1926
                        yyVAL.cols = append(yyDollar[1].cols, yyDollar[3].col)
19✔
1927
                }
19✔
1928
        case 92:
173✔
1929
                yyDollar = yyS[yypt-0 : yypt+1]
173✔
1930
                {
346✔
1931
                        yyVAL.values = nil
173✔
1932
                }
173✔
1933
        case 93:
5,675✔
1934
                yyDollar = yyS[yypt-1 : yypt+1]
5,675✔
1935
                {
11,350✔
1936
                        yyVAL.values = yyDollar[1].values
5,675✔
1937
                }
5,675✔
1938
        case 94:
5,716✔
1939
                yyDollar = yyS[yypt-1 : yypt+1]
5,716✔
1940
                {
11,432✔
1941
                        yyVAL.values = []ValueExp{yyDollar[1].exp}
5,716✔
1942
                }
5,716✔
1943
        case 95:
10,978✔
1944
                yyDollar = yyS[yypt-3 : yypt+1]
10,978✔
1945
                {
21,956✔
1946
                        yyVAL.values = append(yyDollar[1].values, yyDollar[3].exp)
10,978✔
1947
                }
10,978✔
1948
        case 96:
5,517✔
1949
                yyDollar = yyS[yypt-1 : yypt+1]
5,517✔
1950
                {
11,034✔
1951
                        yyVAL.value = &Integer{val: int64(yyDollar[1].integer)}
5,517✔
1952
                }
5,517✔
1953
        case 97:
78✔
1954
                yyDollar = yyS[yypt-1 : yypt+1]
78✔
1955
                {
156✔
1956
                        yyVAL.value = &Float64{val: float64(yyDollar[1].float)}
78✔
1957
                }
78✔
1958
        case 98:
3,910✔
1959
                yyDollar = yyS[yypt-1 : yypt+1]
3,910✔
1960
                {
7,820✔
1961
                        yyVAL.value = &Varchar{val: yyDollar[1].str}
3,910✔
1962
                }
3,910✔
1963
        case 99:
262✔
1964
                yyDollar = yyS[yypt-1 : yypt+1]
262✔
1965
                {
524✔
1966
                        yyVAL.value = &Bool{val: yyDollar[1].boolean}
262✔
1967
                }
262✔
1968
        case 100:
95✔
1969
                yyDollar = yyS[yypt-1 : yypt+1]
95✔
1970
                {
190✔
1971
                        yyVAL.value = &Blob{val: yyDollar[1].blob}
95✔
1972
                }
95✔
1973
        case 101:
74✔
1974
                yyDollar = yyS[yypt-6 : yypt+1]
74✔
1975
                {
148✔
1976
                        yyVAL.value = &Cast{val: yyDollar[3].exp, t: yyDollar[5].sqlType}
74✔
1977
                }
74✔
1978
        case 102:
6✔
1979
                yyDollar = yyS[yypt-2 : yypt+1]
6✔
1980
                {
12✔
1981
                        yyVAL.value = &Cast{val: &Varchar{val: yyDollar[2].str}, t: TimestampType}
6✔
1982
                }
6✔
1983
        case 103:
393✔
1984
                yyDollar = yyS[yypt-1 : yypt+1]
393✔
1985
                {
786✔
1986
                        yyVAL.value = yyDollar[1].value
393✔
1987
                }
393✔
1988
        case 104:
7✔
1989
                yyDollar = yyS[yypt-9 : yypt+1]
7✔
1990
                {
14✔
1991
                        yyVAL.value = &WindowFnExp{fnName: aggFnName(yyDollar[1].aggFn), partitionBy: yyDollar[7].values, orderBy: yyDollar[8].ordexps}
7✔
1992
                }
7✔
1993
        case 105:
4✔
1994
                yyDollar = yyS[yypt-9 : yypt+1]
4✔
1995
                {
8✔
1996
                        yyVAL.value = &WindowFnExp{fnName: aggFnName(yyDollar[1].aggFn), params: []ValueExp{&ColSelector{table: yyDollar[3].col.table, col: yyDollar[3].col.col}}, partitionBy: yyDollar[7].values, orderBy: yyDollar[8].ordexps}
4✔
1997
                }
4✔
1998
        case 106:
7,435✔
1999
                yyDollar = yyS[yypt-1 : yypt+1]
7,435✔
2000
                {
14,870✔
2001
                        yyVAL.value = &Param{id: yyDollar[1].id}
7,435✔
2002
                }
7,435✔
2003
        case 107:
223✔
2004
                yyDollar = yyS[yypt-1 : yypt+1]
223✔
2005
                {
446✔
2006
                        yyVAL.value = &Param{id: fmt.Sprintf("param%d", yyDollar[1].pparam), pos: yyDollar[1].pparam}
223✔
2007
                }
223✔
2008
        case 108:
103✔
2009
                yyDollar = yyS[yypt-1 : yypt+1]
103✔
2010
                {
206✔
2011
                        yyVAL.value = &NullValue{t: AnyType}
103✔
2012
                }
103✔
2013
        case 109:
744✔
2014
                yyDollar = yyS[yypt-1 : yypt+1]
744✔
2015
                {
1,488✔
2016
                        yyVAL.sqlType = IntegerType
744✔
2017
                }
744✔
2018
        case 110:
80✔
2019
                yyDollar = yyS[yypt-1 : yypt+1]
80✔
2020
                {
160✔
2021
                        yyVAL.sqlType = BooleanType
80✔
2022
                }
80✔
2023
        case 111:
294✔
2024
                yyDollar = yyS[yypt-1 : yypt+1]
294✔
2025
                {
588✔
2026
                        yyVAL.sqlType = VarcharType
294✔
2027
                }
294✔
2028
        case 112:
4✔
2029
                yyDollar = yyS[yypt-1 : yypt+1]
4✔
2030
                {
8✔
2031
                        yyVAL.sqlType = UUIDType
4✔
2032
                }
4✔
2033
        case 113:
44✔
2034
                yyDollar = yyS[yypt-1 : yypt+1]
44✔
2035
                {
88✔
2036
                        yyVAL.sqlType = BLOBType
44✔
2037
                }
44✔
2038
        case 114:
85✔
2039
                yyDollar = yyS[yypt-1 : yypt+1]
85✔
2040
                {
170✔
2041
                        yyVAL.sqlType = TimestampType
85✔
2042
                }
85✔
2043
        case 115:
35✔
2044
                yyDollar = yyS[yypt-1 : yypt+1]
35✔
2045
                {
70✔
2046
                        yyVAL.sqlType = Float64Type
35✔
2047
                }
35✔
2048
        case 116:
12✔
2049
                yyDollar = yyS[yypt-1 : yypt+1]
12✔
2050
                {
24✔
2051
                        yyVAL.sqlType = JSONType
12✔
2052
                }
12✔
2053
        case 117:
359✔
2054
                yyDollar = yyS[yypt-4 : yypt+1]
359✔
2055
                {
718✔
2056
                        yyVAL.value = &FnCall{fn: yyDollar[1].id, params: yyDollar[3].values}
359✔
2057
                }
359✔
2058
        case 118:
40✔
2059
                yyDollar = yyS[yypt-9 : yypt+1]
40✔
2060
                {
80✔
2061
                        yyVAL.value = &WindowFnExp{fnName: strings.ToUpper(yyDollar[1].id), params: yyDollar[3].values, partitionBy: yyDollar[7].values, orderBy: yyDollar[8].ordexps}
40✔
2062
                }
40✔
2063
        case 119:
513✔
2064
                yyDollar = yyS[yypt-1 : yypt+1]
513✔
2065
                {
1,026✔
2066
                        yyVAL.tableElems = []TableElem{yyDollar[1].tableElem}
513✔
2067
                }
513✔
2068
        case 120:
1,063✔
2069
                yyDollar = yyS[yypt-3 : yypt+1]
1,063✔
2070
                {
2,126✔
2071
                        yyVAL.tableElems = append(yyDollar[1].tableElems, yyDollar[3].tableElem)
1,063✔
2072
                }
1,063✔
2073
        case 121:
1,147✔
2074
                yyDollar = yyS[yypt-1 : yypt+1]
1,147✔
2075
                {
2,294✔
2076
                        yyVAL.tableElem = yyDollar[1].colSpec
1,147✔
2077
                }
1,147✔
2078
        case 122:
10✔
2079
                yyDollar = yyS[yypt-1 : yypt+1]
10✔
2080
                {
20✔
2081
                        yyVAL.tableElem = yyDollar[1].check
10✔
2082
                }
10✔
2083
        case 123:
418✔
2084
                yyDollar = yyS[yypt-3 : yypt+1]
418✔
2085
                {
836✔
2086
                        yyVAL.tableElem = PrimaryKeyConstraint(yyDollar[3].colNames)
418✔
2087
                }
418✔
2088
        case 124:
1✔
2089
                yyDollar = yyS[yypt-10 : yypt+1]
1✔
2090
                {
2✔
2091
                        yyVAL.tableElem = &ForeignKeyConstraint{cols: yyDollar[4].colNames, refTable: yyDollar[7].str, refCols: yyDollar[9].colNames}
1✔
2092
                }
1✔
2093
        case 125:
1,195✔
2094
                yyDollar = yyS[yypt-7 : yypt+1]
1,195✔
2095
                {
2,390✔
2096
                        yyVAL.colSpec = &ColSpec{
1,195✔
2097
                                colName:       yyDollar[1].str,
1,195✔
2098
                                colType:       yyDollar[2].sqlType,
1,195✔
2099
                                maxLen:        int(yyDollar[3].integer),
1,195✔
2100
                                notNull:       yyDollar[4].boolean || yyDollar[7].boolean,
1,195✔
2101
                                defaultValue:  yyDollar[5].exp,
1,195✔
2102
                                autoIncrement: yyDollar[6].boolean,
1,195✔
2103
                                primaryKey:    yyDollar[7].boolean,
1,195✔
2104
                        }
1,195✔
2105
                }
1,195✔
2106
        case 126:
1,142✔
2107
                yyDollar = yyS[yypt-0 : yypt+1]
1,142✔
2108
                {
2,284✔
2109
                        yyVAL.boolean = false
1,142✔
2110
                }
1,142✔
2111
        case 127:
53✔
2112
                yyDollar = yyS[yypt-2 : yypt+1]
53✔
2113
                {
106✔
2114
                        yyVAL.boolean = true
53✔
2115
                }
53✔
2116
        case 128:
1,086✔
2117
                yyDollar = yyS[yypt-0 : yypt+1]
1,086✔
2118
                {
2,172✔
2119
                        yyVAL.integer = 0
1,086✔
2120
                }
1,086✔
2121
        case 129:
104✔
2122
                yyDollar = yyS[yypt-3 : yypt+1]
104✔
2123
                {
208✔
2124
                        yyVAL.integer = yyDollar[2].integer
104✔
2125
                }
104✔
2126
        case 130:
5✔
2127
                yyDollar = yyS[yypt-3 : yypt+1]
5✔
2128
                {
10✔
2129
                        yyVAL.integer = yyDollar[2].integer
5✔
2130
                }
5✔
2131
        case 131:
1,191✔
2132
                yyDollar = yyS[yypt-0 : yypt+1]
1,191✔
2133
                {
2,382✔
2134
                        yyVAL.exp = nil
1,191✔
2135
                }
1,191✔
2136
        case 132:
4✔
2137
                yyDollar = yyS[yypt-2 : yypt+1]
4✔
2138
                {
8✔
2139
                        yyVAL.exp = yyDollar[2].exp
4✔
2140
                }
4✔
2141
        case 133:
1,089✔
2142
                yyDollar = yyS[yypt-0 : yypt+1]
1,089✔
2143
                {
2,178✔
2144
                        yyVAL.boolean = false
1,089✔
2145
                }
1,089✔
2146
        case 134:
106✔
2147
                yyDollar = yyS[yypt-1 : yypt+1]
106✔
2148
                {
212✔
2149
                        yyVAL.boolean = true
106✔
2150
                }
106✔
2151
        case 135:
1,109✔
2152
                yyDollar = yyS[yypt-0 : yypt+1]
1,109✔
2153
                {
2,218✔
2154
                        yyVAL.boolean = false
1,109✔
2155
                }
1,109✔
2156
        case 136:
33✔
2157
                yyDollar = yyS[yypt-1 : yypt+1]
33✔
2158
                {
66✔
2159
                        yyVAL.boolean = false
33✔
2160
                }
33✔
2161
        case 137:
53✔
2162
                yyDollar = yyS[yypt-2 : yypt+1]
53✔
2163
                {
106✔
2164
                        yyVAL.boolean = true
53✔
2165
                }
53✔
2166
        case 138:
1,385✔
2167
                yyDollar = yyS[yypt-1 : yypt+1]
1,385✔
2168
                {
2,770✔
2169
                        yyVAL.stmt = yyDollar[1].stmt
1,385✔
2170
                }
1,385✔
2171
        case 139:
8✔
2172
                yyDollar = yyS[yypt-3 : yypt+1]
8✔
2173
                {
16✔
2174
                        yyVAL.stmt = &CTEStmt{ctes: yyDollar[2].cteDefs, query: yyDollar[3].stmt.(DataSource)}
8✔
2175
                }
8✔
2176
        case 140:
1✔
2177
                yyDollar = yyS[yypt-6 : yypt+1]
1✔
2178
                {
2✔
2179
                        yyVAL.stmt = &CTEStmt{ctes: yyDollar[2].cteDefs, query: &UnionStmt{distinct: yyDollar[5].distinct, left: yyDollar[3].stmt.(DataSource), right: yyDollar[6].stmt.(DataSource)}}
1✔
2180
                }
1✔
2181
        case 141:
10✔
2182
                yyDollar = yyS[yypt-4 : yypt+1]
10✔
2183
                {
20✔
2184
                        for _, c := range yyDollar[3].cteDefs {
20✔
2185
                                c.recursive = true
10✔
2186
                        }
10✔
2187
                        yyVAL.stmt = &CTEStmt{ctes: yyDollar[3].cteDefs, query: yyDollar[4].stmt.(DataSource)}
10✔
2188
                }
NEW
2189
        case 142:
×
NEW
2190
                yyDollar = yyS[yypt-7 : yypt+1]
×
NEW
2191
                {
×
NEW
2192
                        for _, c := range yyDollar[3].cteDefs {
×
NEW
2193
                                c.recursive = true
×
NEW
2194
                        }
×
NEW
2195
                        yyVAL.stmt = &CTEStmt{ctes: yyDollar[3].cteDefs, query: &UnionStmt{distinct: yyDollar[6].distinct, left: yyDollar[4].stmt.(DataSource), right: yyDollar[7].stmt.(DataSource)}}
×
2196
                }
2197
        case 143:
28✔
2198
                yyDollar = yyS[yypt-4 : yypt+1]
28✔
2199
                {
56✔
2200
                        yyVAL.stmt = &UnionStmt{
28✔
2201
                                distinct: yyDollar[3].distinct,
28✔
2202
                                left:     yyDollar[1].stmt.(DataSource),
28✔
2203
                                right:    yyDollar[4].stmt.(DataSource),
28✔
2204
                        }
28✔
2205
                }
28✔
2206
        case 144:
7✔
2207
                yyDollar = yyS[yypt-3 : yypt+1]
7✔
2208
                {
14✔
2209
                        yyVAL.stmt = &ExceptStmt{
7✔
2210
                                left:  yyDollar[1].stmt.(DataSource),
7✔
2211
                                right: yyDollar[3].stmt.(DataSource),
7✔
2212
                        }
7✔
2213
                }
7✔
2214
        case 145:
7✔
2215
                yyDollar = yyS[yypt-3 : yypt+1]
7✔
2216
                {
14✔
2217
                        yyVAL.stmt = &IntersectStmt{
7✔
2218
                                left:  yyDollar[1].stmt.(DataSource),
7✔
2219
                                right: yyDollar[3].stmt.(DataSource),
7✔
2220
                        }
7✔
2221
                }
7✔
2222
        case 146:
1✔
2223
                yyDollar = yyS[yypt-2 : yypt+1]
1✔
2224
                {
2✔
2225
                        yyVAL.stmt = &SelectStmt{
1✔
2226
                                ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "databases"}},
1✔
2227
                        }
1✔
2228
                }
1✔
2229
        case 147:
1✔
2230
                yyDollar = yyS[yypt-2 : yypt+1]
1✔
2231
                {
2✔
2232
                        yyVAL.stmt = &SelectStmt{
1✔
2233
                                ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "tables"}},
1✔
2234
                        }
1✔
2235
                }
1✔
NEW
2236
        case 148:
×
2237
                yyDollar = yyS[yypt-3 : yypt+1]
×
2238
                {
×
2239
                        yyVAL.stmt = &SelectStmt{
×
2240
                                ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "table", params: []ValueExp{&Varchar{val: yyDollar[3].id}}}},
×
2241
                        }
×
2242
                }
×
2243
        case 149:
6✔
2244
                yyDollar = yyS[yypt-2 : yypt+1]
6✔
2245
                {
12✔
2246
                        yyVAL.stmt = &SelectStmt{
6✔
2247
                                ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "users"}},
6✔
2248
                        }
6✔
2249
                }
6✔
2250
        case 150:
1✔
2251
                yyDollar = yyS[yypt-2 : yypt+1]
1✔
2252
                {
2✔
2253
                        yyVAL.stmt = &SelectStmt{
1✔
2254
                                ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "grants"}},
1✔
2255
                        }
1✔
2256
                }
1✔
2257
        case 151:
1✔
2258
                yyDollar = yyS[yypt-4 : yypt+1]
1✔
2259
                {
2✔
2260
                        yyVAL.stmt = &SelectStmt{
1✔
2261
                                ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "grants", params: []ValueExp{&Varchar{val: yyDollar[4].id}}}},
1✔
2262
                        }
1✔
2263
                }
1✔
2264
        case 152:
8✔
2265
                yyDollar = yyS[yypt-2 : yypt+1]
8✔
2266
                {
16✔
2267
                        yyVAL.stmt = &ExplainStmt{query: yyDollar[2].stmt.(DataSource)}
8✔
2268
                }
8✔
2269
        case 153:
1,244✔
2270
                yyDollar = yyS[yypt-13 : yypt+1]
1,244✔
2271
                {
2,488✔
2272
                        yyVAL.stmt = &SelectStmt{
1,244✔
2273
                                distinct: yyDollar[2].distinct,
1,244✔
2274
                                targets:  yyDollar[3].targets,
1,244✔
2275
                                ds:       yyDollar[5].ds,
1,244✔
2276
                                indexOn:  yyDollar[6].colNames,
1,244✔
2277
                                joins:    yyDollar[7].joins,
1,244✔
2278
                                where:    yyDollar[8].exp,
1,244✔
2279
                                groupBy:  yyDollar[9].cols,
1,244✔
2280
                                having:   yyDollar[10].exp,
1,244✔
2281
                                orderBy:  yyDollar[11].ordexps,
1,244✔
2282
                                limit:    yyDollar[12].exp,
1,244✔
2283
                                offset:   yyDollar[13].exp,
1,244✔
2284
                        }
1,244✔
2285
                }
1,244✔
2286
        case 154:
213✔
2287
                yyDollar = yyS[yypt-3 : yypt+1]
213✔
2288
                {
426✔
2289
                        yyVAL.stmt = &SelectStmt{
213✔
2290
                                distinct: yyDollar[2].distinct,
213✔
2291
                                targets:  yyDollar[3].targets,
213✔
2292
                                ds:       &valuesDataSource{rows: []*RowSpec{{}}},
213✔
2293
                        }
213✔
2294
                }
213✔
2295
        case 155:
11✔
2296
                yyDollar = yyS[yypt-0 : yypt+1]
11✔
2297
                {
22✔
2298
                        yyVAL.distinct = true
11✔
2299
                }
11✔
2300
        case 156:
19✔
2301
                yyDollar = yyS[yypt-1 : yypt+1]
19✔
2302
                {
38✔
2303
                        yyVAL.distinct = false
19✔
2304
                }
19✔
2305
        case 157:
1,448✔
2306
                yyDollar = yyS[yypt-0 : yypt+1]
1,448✔
2307
                {
2,896✔
2308
                        yyVAL.distinct = false
1,448✔
2309
                }
1,448✔
2310
        case 158:
10✔
2311
                yyDollar = yyS[yypt-1 : yypt+1]
10✔
2312
                {
20✔
2313
                        yyVAL.distinct = true
10✔
2314
                }
10✔
2315
        case 159:
333✔
2316
                yyDollar = yyS[yypt-1 : yypt+1]
333✔
2317
                {
666✔
2318
                        yyVAL.targets = nil
333✔
2319
                }
333✔
2320
        case 160:
1,125✔
2321
                yyDollar = yyS[yypt-1 : yypt+1]
1,125✔
2322
                {
2,250✔
2323
                        yyVAL.targets = yyDollar[1].targets
1,125✔
2324
                }
1,125✔
2325
        case 161:
1,138✔
2326
                yyDollar = yyS[yypt-2 : yypt+1]
1,138✔
2327
                {
2,276✔
2328
                        yyVAL.targets = []TargetEntry{{Exp: yyDollar[1].exp, As: yyDollar[2].id}}
1,138✔
2329
                }
1,138✔
2330
        case 162:
785✔
2331
                yyDollar = yyS[yypt-4 : yypt+1]
785✔
2332
                {
1,570✔
2333
                        yyVAL.targets = append(yyDollar[1].targets, TargetEntry{Exp: yyDollar[3].exp, As: yyDollar[4].id})
785✔
2334
                }
785✔
2335
        case 163:
2,599✔
2336
                yyDollar = yyS[yypt-1 : yypt+1]
2,599✔
2337
                {
5,198✔
2338
                        yyVAL.sel = yyDollar[1].col
2,599✔
2339
                }
2,599✔
2340
        case 164:
30✔
2341
                yyDollar = yyS[yypt-2 : yypt+1]
30✔
2342
                {
60✔
2343
                        yyVAL.sel = &JSONSelector{ColSelector: yyDollar[1].col, fields: yyDollar[2].jsonFields}
30✔
2344
                }
30✔
2345
        case 165:
121✔
2346
                yyDollar = yyS[yypt-4 : yypt+1]
121✔
2347
                {
242✔
2348
                        yyVAL.sel = &AggColSelector{aggFn: yyDollar[1].aggFn, col: "*"}
121✔
2349
                }
121✔
2350
        case 166:
80✔
2351
                yyDollar = yyS[yypt-4 : yypt+1]
80✔
2352
                {
160✔
2353
                        yyVAL.sel = &AggColSelector{aggFn: yyDollar[1].aggFn, table: yyDollar[3].col.table, col: yyDollar[3].col.col}
80✔
2354
                }
80✔
2355
        case 167:
1✔
2356
                yyDollar = yyS[yypt-5 : yypt+1]
1✔
2357
                {
2✔
2358
                        yyVAL.sel = &AggColSelector{aggFn: yyDollar[1].aggFn, table: yyDollar[4].col.table, col: yyDollar[4].col.col, distinct: true}
1✔
2359
                }
1✔
2360
        case 168:
1✔
2361
                yyDollar = yyS[yypt-7 : yypt+1]
1✔
2362
                {
2✔
2363
                        // Accept `COUNT(DISTINCT(col))` — XORM's builder wraps the
1✔
2364
                        // distinct argument in extra parens when it emits aggregated
1✔
2365
                        // SELECTs (Gitea GetUserOrgsList per-org repo count uses this).
1✔
2366
                        // Semantically identical to COUNT(DISTINCT col).
1✔
2367
                        yyVAL.sel = &AggColSelector{aggFn: yyDollar[1].aggFn, table: yyDollar[5].col.table, col: yyDollar[5].col.col, distinct: true}
1✔
2368
                }
1✔
NEW
2369
        case 169:
×
NEW
2370
                yyDollar = yyS[yypt-6 : yypt+1]
×
NEW
2371
                {
×
NEW
2372
                        yyVAL.sel = &AggColSelector{aggFn: yyDollar[1].aggFn, table: yyDollar[3].col.table, col: yyDollar[3].col.col, separator: yyDollar[5].str}
×
NEW
2373
                }
×
2374
        case 170:
30✔
2375
                yyDollar = yyS[yypt-2 : yypt+1]
30✔
2376
                {
60✔
2377
                        yyVAL.jsonFields = []string{yyDollar[2].str}
30✔
2378
                }
30✔
2379
        case 171:
19✔
2380
                yyDollar = yyS[yypt-3 : yypt+1]
19✔
2381
                {
38✔
2382
                        yyVAL.jsonFields = append(yyVAL.jsonFields, yyDollar[3].str)
19✔
2383
                }
19✔
2384
        case 172:
2,306✔
2385
                yyDollar = yyS[yypt-1 : yypt+1]
2,306✔
2386
                {
4,612✔
2387
                        yyVAL.col = &ColSelector{col: yyDollar[1].str}
2,306✔
2388
                }
2,306✔
2389
        case 173:
470✔
2390
                yyDollar = yyS[yypt-3 : yypt+1]
470✔
2391
                {
940✔
2392
                        yyVAL.col = &ColSelector{table: yyDollar[1].str, col: yyDollar[3].str}
470✔
2393
                }
470✔
2394
        case 176:
204✔
2395
                yyDollar = yyS[yypt-1 : yypt+1]
204✔
2396
                {
408✔
2397
                        yyVAL.str = yyDollar[1].keyword
204✔
2398
                }
204✔
2399
        case 177:
5,718✔
2400
                yyDollar = yyS[yypt-1 : yypt+1]
5,718✔
2401
                {
11,436✔
2402
                        yyVAL.colNames = []string{yyDollar[1].str}
5,718✔
2403
                }
5,718✔
2404
        case 178:
10,745✔
2405
                yyDollar = yyS[yypt-3 : yypt+1]
10,745✔
2406
                {
21,490✔
2407
                        yyVAL.colNames = append(yyDollar[1].colNames, yyDollar[3].str)
10,745✔
2408
                }
10,745✔
2409
        case 179:
349✔
2410
                yyDollar = yyS[yypt-1 : yypt+1]
349✔
2411
                {
698✔
2412
                        yyVAL.colNames = []string{yyDollar[1].str}
349✔
2413
                }
349✔
2414
        case 180:
100✔
2415
                yyDollar = yyS[yypt-3 : yypt+1]
100✔
2416
                {
200✔
2417
                        yyVAL.colNames = yyDollar[2].colNames
100✔
2418
                }
100✔
2419
        case 181:
1✔
2420
                yyDollar = yyS[yypt-0 : yypt+1]
1✔
2421
                {
2✔
2422
                        yyVAL.colNames = nil
1✔
2423
                }
1✔
2424
        case 182:
5,324✔
2425
                yyDollar = yyS[yypt-3 : yypt+1]
5,324✔
2426
                {
10,648✔
2427
                        yyVAL.colNames = yyDollar[2].colNames
5,324✔
2428
                }
5,324✔
2429
        case 194:
28,430✔
2430
                yyDollar = yyS[yypt-1 : yypt+1]
28,430✔
2431
                {
56,860✔
2432
                        yyVAL.str = yyDollar[1].id
28,430✔
2433
                }
28,430✔
2434
        case 195:
1,160✔
2435
                yyDollar = yyS[yypt-1 : yypt+1]
1,160✔
2436
                {
2,320✔
2437
                        yyVAL.str = string(yyDollar[1].keyword)
1,160✔
2438
                }
1,160✔
2439
        case 228:
1,258✔
2440
                yyDollar = yyS[yypt-3 : yypt+1]
1,258✔
2441
                {
2,516✔
2442
                        yyDollar[1].tableRef.period = yyDollar[2].period
1,258✔
2443
                        yyDollar[1].tableRef.as = yyDollar[3].id
1,258✔
2444
                        yyVAL.ds = yyDollar[1].tableRef
1,258✔
2445
                }
1,258✔
2446
        case 229:
13✔
2447
                yyDollar = yyS[yypt-4 : yypt+1]
13✔
2448
                {
26✔
2449
                        yyVAL.ds = &valuesDataSource{inferTypes: true, rows: yyDollar[3].rows}
13✔
2450
                }
13✔
2451
        case 230:
19✔
2452
                yyDollar = yyS[yypt-4 : yypt+1]
19✔
2453
                {
38✔
2454
                        switch s := yyDollar[2].stmt.(type) {
19✔
2455
                        case *SelectStmt:
13✔
2456
                                s.as = yyDollar[4].id
13✔
2457
                        case *UnionStmt:
6✔
2458
                                s.as = yyDollar[4].id
6✔
NEW
2459
                        case *ExceptStmt:
×
NEW
2460
                                s.as = yyDollar[4].id
×
NEW
2461
                        case *IntersectStmt:
×
NEW
2462
                                s.as = yyDollar[4].id
×
2463
                        }
2464
                        yyVAL.ds = yyDollar[2].stmt.(DataSource)
19✔
2465
                }
2466
        case 231:
4✔
2467
                yyDollar = yyS[yypt-4 : yypt+1]
4✔
2468
                {
8✔
2469
                        yyVAL.ds = &FnDataSourceStmt{fnCall: &FnCall{fn: "databases"}, as: yyDollar[4].id}
4✔
2470
                }
4✔
2471
        case 232:
4✔
2472
                yyDollar = yyS[yypt-4 : yypt+1]
4✔
2473
                {
8✔
2474
                        yyVAL.ds = &FnDataSourceStmt{fnCall: &FnCall{fn: "tables"}, as: yyDollar[4].id}
4✔
2475
                }
4✔
2476
        case 233:
1✔
2477
                yyDollar = yyS[yypt-4 : yypt+1]
1✔
2478
                {
2✔
2479
                        yyVAL.ds = &FnDataSourceStmt{fnCall: &FnCall{fn: "table", params: []ValueExp{&Varchar{val: yyDollar[3].id}}}}
1✔
2480
                }
1✔
2481
        case 234:
1✔
2482
                yyDollar = yyS[yypt-4 : yypt+1]
1✔
2483
                {
2✔
2484
                        yyVAL.ds = &FnDataSourceStmt{fnCall: &FnCall{fn: "users"}, as: yyDollar[4].id}
1✔
2485
                }
1✔
2486
        case 235:
6✔
2487
                yyDollar = yyS[yypt-2 : yypt+1]
6✔
2488
                {
12✔
2489
                        yyVAL.ds = &FnDataSourceStmt{fnCall: yyDollar[1].value.(*FnCall), as: yyDollar[2].id}
6✔
2490
                }
6✔
2491
        case 236:
2✔
2492
                yyDollar = yyS[yypt-6 : yypt+1]
2✔
2493
                {
4✔
2494
                        yyVAL.ds = &tableRef{table: yyDollar[4].id, history: true, as: yyDollar[6].id}
2✔
2495
                }
2✔
2496
        case 237:
8✔
2497
                yyDollar = yyS[yypt-7 : yypt+1]
8✔
2498
                {
16✔
2499
                        yyVAL.ds = &tableRef{table: yyDollar[4].id, diff: true, period: yyDollar[6].period, as: yyDollar[7].id}
8✔
2500
                }
8✔
2501
        case 238:
6,632✔
2502
                yyDollar = yyS[yypt-1 : yypt+1]
6,632✔
2503
                {
13,264✔
2504
                        yyVAL.tableRef = &tableRef{table: yyDollar[1].str}
6,632✔
2505
                }
6,632✔
2506
        case 239:
1,275✔
2507
                yyDollar = yyS[yypt-2 : yypt+1]
1,275✔
2508
                {
2,550✔
2509
                        yyVAL.period = period{start: yyDollar[1].openPeriod, end: yyDollar[2].openPeriod}
1,275✔
2510
                }
1,275✔
2511
        case 240:
1,200✔
2512
                yyDollar = yyS[yypt-0 : yypt+1]
1,200✔
2513
                {
2,400✔
2514
                        yyVAL.openPeriod = nil
1,200✔
2515
                }
1,200✔
2516
        case 241:
49✔
2517
                yyDollar = yyS[yypt-2 : yypt+1]
49✔
2518
                {
98✔
2519
                        yyVAL.openPeriod = &openPeriod{inclusive: true, instant: yyDollar[2].periodInstant}
49✔
2520
                }
49✔
2521
        case 242:
26✔
2522
                yyDollar = yyS[yypt-2 : yypt+1]
26✔
2523
                {
52✔
2524
                        yyVAL.openPeriod = &openPeriod{instant: yyDollar[2].periodInstant}
26✔
2525
                }
26✔
2526
        case 243:
1,225✔
2527
                yyDollar = yyS[yypt-0 : yypt+1]
1,225✔
2528
                {
2,450✔
2529
                        yyVAL.openPeriod = nil
1,225✔
2530
                }
1,225✔
2531
        case 244:
39✔
2532
                yyDollar = yyS[yypt-2 : yypt+1]
39✔
2533
                {
78✔
2534
                        yyVAL.openPeriod = &openPeriod{inclusive: true, instant: yyDollar[2].periodInstant}
39✔
2535
                }
39✔
2536
        case 245:
11✔
2537
                yyDollar = yyS[yypt-2 : yypt+1]
11✔
2538
                {
22✔
2539
                        yyVAL.openPeriod = &openPeriod{instant: yyDollar[2].periodInstant}
11✔
2540
                }
11✔
2541
        case 246:
68✔
2542
                yyDollar = yyS[yypt-2 : yypt+1]
68✔
2543
                {
136✔
2544
                        yyVAL.periodInstant = periodInstant{instantType: txInstant, exp: yyDollar[2].exp}
68✔
2545
                }
68✔
2546
        case 247:
57✔
2547
                yyDollar = yyS[yypt-1 : yypt+1]
57✔
2548
                {
114✔
2549
                        yyVAL.periodInstant = periodInstant{instantType: timeInstant, exp: yyDollar[1].exp}
57✔
2550
                }
57✔
2551
        case 248:
1,180✔
2552
                yyDollar = yyS[yypt-0 : yypt+1]
1,180✔
2553
                {
2,360✔
2554
                        yyVAL.joins = nil
1,180✔
2555
                }
1,180✔
2556
        case 249:
64✔
2557
                yyDollar = yyS[yypt-1 : yypt+1]
64✔
2558
                {
128✔
2559
                        yyVAL.joins = yyDollar[1].joins
64✔
2560
                }
64✔
2561
        case 250:
64✔
2562
                yyDollar = yyS[yypt-1 : yypt+1]
64✔
2563
                {
128✔
2564
                        yyVAL.joins = []*JoinSpec{yyDollar[1].join}
64✔
2565
                }
64✔
2566
        case 251:
8✔
2567
                yyDollar = yyS[yypt-2 : yypt+1]
8✔
2568
                {
16✔
2569
                        yyVAL.joins = append([]*JoinSpec{yyDollar[1].join}, yyDollar[2].joins...)
8✔
2570
                }
8✔
2571
        case 252:
67✔
2572
                yyDollar = yyS[yypt-5 : yypt+1]
67✔
2573
                {
134✔
2574
                        if yyDollar[5].exp == nil && yyDollar[1].joinType != CrossJoin {
67✔
NEW
2575
                                yylex.Error("ON clause is required for non-CROSS joins")
×
NEW
2576
                                goto ret1
×
2577
                        }
2578
                        cond := yyDollar[5].exp
67✔
2579
                        if cond == nil {
73✔
2580
                                cond = &Bool{val: true}
6✔
2581
                        }
6✔
2582
                        yyVAL.join = &JoinSpec{joinType: yyDollar[1].joinType, ds: yyDollar[3].ds, indexOn: yyDollar[4].colNames, cond: cond.(ValueExp)}
67✔
2583
                }
2584
        case 253:
2✔
2585
                yyDollar = yyS[yypt-7 : yypt+1]
2✔
2586
                {
4✔
2587
                        yyVAL.join = &JoinSpec{joinType: yyDollar[1].joinType, ds: yyDollar[3].ds, cond: buildUsingCond(yyDollar[6].colNames)}
2✔
2588
                }
2✔
2589
        case 254:
2✔
2590
                yyDollar = yyS[yypt-4 : yypt+1]
2✔
2591
                {
4✔
2592
                        yyVAL.join = &JoinSpec{joinType: yyDollar[2].joinType, ds: yyDollar[4].ds, natural: true, cond: &Bool{val: true}}
2✔
2593
                }
2✔
NEW
2594
        case 255:
×
NEW
2595
                yyDollar = yyS[yypt-3 : yypt+1]
×
NEW
2596
                {
×
NEW
2597
                        yyVAL.join = &JoinSpec{joinType: InnerJoin, ds: yyDollar[3].ds, lateral: true, cond: &Bool{val: true}}
×
NEW
2598
                }
×
2599
        case 256:
1✔
2600
                yyDollar = yyS[yypt-2 : yypt+1]
1✔
2601
                {
2✔
2602
                        // SQL-89 implicit cross-join: `FROM a, b` is equivalent to
1✔
2603
                        // `FROM a CROSS JOIN b`. Postgres and every other ORM-facing
1✔
2604
                        // dialect accepts this; immudb's grammar used to require an
1✔
2605
                        // explicit LATERAL keyword after the comma, which broke ORM
1✔
2606
                        // queries like Gitea's labelStatsQueryNumIssues:
1✔
2607
                        //     SELECT COUNT(*) FROM issue_label, issue WHERE ...
1✔
2608
                        yyVAL.join = &JoinSpec{joinType: CrossJoin, ds: yyDollar[2].ds, cond: &Bool{val: true}}
1✔
2609
                }
1✔
NEW
2610
        case 257:
×
UNCOV
2611
                yyDollar = yyS[yypt-6 : yypt+1]
×
UNCOV
2612
                {
×
NEW
2613
                        cond := yyDollar[6].exp
×
NEW
2614
                        if cond == nil {
×
NEW
2615
                                cond = &Bool{val: true}
×
NEW
2616
                        }
×
NEW
2617
                        yyVAL.join = &JoinSpec{joinType: yyDollar[1].joinType, ds: yyDollar[4].ds, indexOn: yyDollar[5].colNames, cond: cond.(ValueExp), lateral: true}
×
2618
                }
2619
        case 258:
17✔
2620
                yyDollar = yyS[yypt-0 : yypt+1]
17✔
2621
                {
34✔
2622
                        yyVAL.joinType = InnerJoin
17✔
2623
                }
17✔
2624
        case 259:
54✔
2625
                yyDollar = yyS[yypt-1 : yypt+1]
54✔
2626
                {
108✔
2627
                        yyVAL.joinType = yyDollar[1].joinType
54✔
2628
                }
54✔
2629
        case 260:
6✔
2630
                yyDollar = yyS[yypt-0 : yypt+1]
6✔
2631
                {
12✔
2632
                        yyVAL.exp = nil
6✔
2633
                }
6✔
2634
        case 261:
61✔
2635
                yyDollar = yyS[yypt-2 : yypt+1]
61✔
2636
                {
122✔
2637
                        yyVAL.exp = yyDollar[2].exp
61✔
2638
                }
61✔
2639
        case 262:
673✔
2640
                yyDollar = yyS[yypt-0 : yypt+1]
673✔
2641
                {
1,346✔
2642
                        yyVAL.exp = nil
673✔
2643
                }
673✔
2644
        case 263:
618✔
2645
                yyDollar = yyS[yypt-2 : yypt+1]
618✔
2646
                {
1,236✔
2647
                        yyVAL.exp = yyDollar[2].exp
618✔
2648
                }
618✔
2649
        case 264:
1,202✔
2650
                yyDollar = yyS[yypt-0 : yypt+1]
1,202✔
2651
                {
2,404✔
2652
                        yyVAL.cols = nil
1,202✔
2653
                }
1,202✔
2654
        case 265:
42✔
2655
                yyDollar = yyS[yypt-3 : yypt+1]
42✔
2656
                {
84✔
2657
                        yyVAL.cols = yyDollar[3].cols
42✔
2658
                }
42✔
2659
        case 266:
1,237✔
2660
                yyDollar = yyS[yypt-0 : yypt+1]
1,237✔
2661
                {
2,474✔
2662
                        yyVAL.exp = nil
1,237✔
2663
                }
1,237✔
2664
        case 267:
7✔
2665
                yyDollar = yyS[yypt-2 : yypt+1]
7✔
2666
                {
14✔
2667
                        yyVAL.exp = yyDollar[2].exp
7✔
2668
                }
7✔
2669
        case 268:
1,236✔
2670
                yyDollar = yyS[yypt-0 : yypt+1]
1,236✔
2671
                {
2,472✔
2672
                        yyVAL.exp = nil
1,236✔
2673
                }
1,236✔
2674
        case 269:
49✔
2675
                yyDollar = yyS[yypt-2 : yypt+1]
49✔
2676
                {
98✔
2677
                        yyVAL.exp = yyDollar[2].exp
49✔
2678
                }
49✔
2679
        case 270:
1✔
2680
                yyDollar = yyS[yypt-2 : yypt+1]
1✔
2681
                {
2✔
2682
                        yyVAL.exp = nil
1✔
2683
                }
1✔
2684
        case 271:
5✔
2685
                yyDollar = yyS[yypt-5 : yypt+1]
5✔
2686
                {
10✔
2687
                        yyVAL.exp = yyDollar[3].exp
5✔
2688
                }
5✔
NEW
2689
        case 272:
×
NEW
2690
                yyDollar = yyS[yypt-4 : yypt+1]
×
NEW
2691
                {
×
NEW
2692
                        yyVAL.exp = yyDollar[3].exp
×
NEW
2693
                }
×
2694
        case 273:
1,285✔
2695
                yyDollar = yyS[yypt-0 : yypt+1]
1,285✔
2696
                {
2,570✔
2697
                        yyVAL.exp = nil
1,285✔
2698
                }
1,285✔
2699
        case 274:
6✔
2700
                yyDollar = yyS[yypt-2 : yypt+1]
6✔
2701
                {
12✔
2702
                        yyVAL.exp = yyDollar[2].exp
6✔
2703
                }
6✔
2704
        case 275:
1,050✔
2705
                yyDollar = yyS[yypt-0 : yypt+1]
1,050✔
2706
                {
2,100✔
2707
                        yyVAL.ordexps = nil
1,050✔
2708
                }
1,050✔
2709
        case 276:
245✔
2710
                yyDollar = yyS[yypt-3 : yypt+1]
245✔
2711
                {
490✔
2712
                        yyVAL.ordexps = yyDollar[3].ordexps
245✔
2713
                }
245✔
2714
        case 277:
1,327✔
2715
                yyDollar = yyS[yypt-0 : yypt+1]
1,327✔
2716
                {
2,654✔
2717
                        yyVAL.colNames = nil
1,327✔
2718
                }
1,327✔
2719
        case 278:
31✔
2720
                yyDollar = yyS[yypt-4 : yypt+1]
31✔
2721
                {
62✔
2722
                        yyVAL.colNames = yyDollar[4].colNames
31✔
2723
                }
31✔
2724
        case 279:
245✔
2725
                yyDollar = yyS[yypt-3 : yypt+1]
245✔
2726
                {
490✔
2727
                        yyVAL.ordexps = []*OrdExp{{exp: yyDollar[1].exp, descOrder: yyDollar[2].opt_ord, nullsOrder: yyDollar[3].nullsOrder}}
245✔
2728
                }
245✔
2729
        case 280:
44✔
2730
                yyDollar = yyS[yypt-5 : yypt+1]
44✔
2731
                {
88✔
2732
                        yyVAL.ordexps = append(yyDollar[1].ordexps, &OrdExp{exp: yyDollar[3].exp, descOrder: yyDollar[4].opt_ord, nullsOrder: yyDollar[5].nullsOrder})
44✔
2733
                }
44✔
2734
        case 281:
133✔
2735
                yyDollar = yyS[yypt-0 : yypt+1]
133✔
2736
                {
266✔
2737
                        yyVAL.opt_ord = false
133✔
2738
                }
133✔
2739
        case 282:
53✔
2740
                yyDollar = yyS[yypt-1 : yypt+1]
53✔
2741
                {
106✔
2742
                        yyVAL.opt_ord = false
53✔
2743
                }
53✔
2744
        case 283:
103✔
2745
                yyDollar = yyS[yypt-1 : yypt+1]
103✔
2746
                {
206✔
2747
                        yyVAL.opt_ord = true
103✔
2748
                }
103✔
2749
        case 284:
281✔
2750
                yyDollar = yyS[yypt-0 : yypt+1]
281✔
2751
                {
562✔
2752
                        yyVAL.nullsOrder = NullsDefault
281✔
2753
                }
281✔
2754
        case 285:
2✔
2755
                yyDollar = yyS[yypt-2 : yypt+1]
2✔
2756
                {
4✔
2757
                        yyVAL.nullsOrder = NullsFirst
2✔
2758
                }
2✔
2759
        case 286:
6✔
2760
                yyDollar = yyS[yypt-2 : yypt+1]
6✔
2761
                {
12✔
2762
                        yyVAL.nullsOrder = NullsLast
6✔
2763
                }
6✔
2764
        case 287:
35✔
2765
                yyDollar = yyS[yypt-0 : yypt+1]
35✔
2766
                {
70✔
2767
                        yyVAL.values = nil
35✔
2768
                }
35✔
2769
        case 288:
16✔
2770
                yyDollar = yyS[yypt-3 : yypt+1]
16✔
2771
                {
32✔
2772
                        yyVAL.values = yyDollar[3].values
16✔
2773
                }
16✔
2774
        case 289:
19✔
2775
                yyDollar = yyS[yypt-1 : yypt+1]
19✔
2776
                {
38✔
2777
                        yyVAL.cteDefs = []*CTEDef{yyDollar[1].cteDef}
19✔
2778
                }
19✔
2779
        case 290:
1✔
2780
                yyDollar = yyS[yypt-3 : yypt+1]
1✔
2781
                {
2✔
2782
                        yyVAL.cteDefs = append(yyDollar[1].cteDefs, yyDollar[3].cteDef)
1✔
2783
                }
1✔
2784
        case 291:
20✔
2785
                yyDollar = yyS[yypt-5 : yypt+1]
20✔
2786
                {
40✔
2787
                        yyVAL.cteDef = &CTEDef{name: yyDollar[1].id, query: yyDollar[4].stmt.(DataSource)}
20✔
2788
                }
20✔
2789
        case 292:
2,900✔
2790
                yyDollar = yyS[yypt-0 : yypt+1]
2,900✔
2791
                {
5,800✔
2792
                        yyVAL.id = ""
2,900✔
2793
                }
2,900✔
2794
        case 293:
223✔
2795
                yyDollar = yyS[yypt-1 : yypt+1]
223✔
2796
                {
446✔
2797
                        yyVAL.id = yyDollar[1].str
223✔
2798
                }
223✔
2799
        case 294:
97✔
2800
                yyDollar = yyS[yypt-2 : yypt+1]
97✔
2801
                {
194✔
2802
                        yyVAL.id = yyDollar[2].str
97✔
2803
                }
97✔
2804
        case 295:
4✔
2805
                yyDollar = yyS[yypt-2 : yypt+1]
4✔
2806
                {
8✔
2807
                        // Allow reserved type names (TIMESTAMP, INTEGER, VARCHAR, …) to
4✔
2808
                        // appear as column aliases, e.g. Gitea's heatmap query:
4✔
2809
                        //   SELECT created_unix / 900 * 900 AS timestamp, count(..) AS ...
4✔
2810
                        // Postgres accepts this; immudb's grammar previously rejected it
4✔
2811
                        // because qualifiedName only covered IDENTIFIER / unreserved_keyword.
4✔
2812
                        yyVAL.id = string(yyDollar[2].keyword)
4✔
2813
                }
4✔
2814
        case 296:
1✔
2815
                yyDollar = yyS[yypt-2 : yypt+1]
1✔
2816
                {
2✔
2817
                        // Accept aggregate-function names (count, sum, max, min, avg,
1✔
2818
                        // string_agg) as column aliases. Postgres treats these as
1✔
2819
                        // non-reserved — they can appear in any identifier position.
1✔
2820
                        // Gitea's getUserIssueStats emits
1✔
2821
                        //   SELECT COUNT(issue.id) AS count FROM issue …
1✔
2822
                        // which failed at Parse with "unexpected AGGREGATE_FUNC".
1✔
2823
                        yyVAL.id = string(yyDollar[2].aggFn)
1✔
2824
                }
1✔
2825
        case 297:
7✔
2826
                yyDollar = yyS[yypt-2 : yypt+1]
7✔
2827
                {
14✔
2828
                        yyVAL.check = CheckConstraint{exp: yyDollar[2].exp}
7✔
2829
                }
7✔
2830
        case 298:
3✔
2831
                yyDollar = yyS[yypt-4 : yypt+1]
3✔
2832
                {
6✔
2833
                        yyVAL.check = CheckConstraint{name: yyDollar[2].id, exp: yyDollar[4].exp}
3✔
2834
                }
3✔
2835
        case 299:
31✔
2836
                yyDollar = yyS[yypt-0 : yypt+1]
31✔
2837
                {
62✔
2838
                        yyVAL.exp = nil
31✔
2839
                }
31✔
2840
        case 300:
5✔
2841
                yyDollar = yyS[yypt-1 : yypt+1]
5✔
2842
                {
10✔
2843
                        yyVAL.exp = yyDollar[1].exp
5✔
2844
                }
5✔
2845
        case 301:
36✔
2846
                yyDollar = yyS[yypt-5 : yypt+1]
36✔
2847
                {
72✔
2848
                        yyVAL.exp = &CaseWhenExp{
36✔
2849
                                exp:      yyDollar[2].exp,
36✔
2850
                                whenThen: yyDollar[3].whenThenClauses,
36✔
2851
                                elseExp:  yyDollar[4].exp,
36✔
2852
                        }
36✔
2853
                }
36✔
2854
        case 302:
36✔
2855
                yyDollar = yyS[yypt-4 : yypt+1]
36✔
2856
                {
72✔
2857
                        yyVAL.whenThenClauses = []whenThenClause{{when: yyDollar[2].exp, then: yyDollar[4].exp}}
36✔
2858
                }
36✔
2859
        case 303:
6✔
2860
                yyDollar = yyS[yypt-5 : yypt+1]
6✔
2861
                {
12✔
2862
                        yyVAL.whenThenClauses = append(yyDollar[1].whenThenClauses, whenThenClause{when: yyDollar[3].exp, then: yyDollar[5].exp})
6✔
2863
                }
6✔
2864
        case 304:
6✔
2865
                yyDollar = yyS[yypt-0 : yypt+1]
6✔
2866
                {
12✔
2867
                        yyVAL.exp = nil
6✔
2868
                }
6✔
2869
        case 305:
30✔
2870
                yyDollar = yyS[yypt-2 : yypt+1]
30✔
2871
                {
60✔
2872
                        yyVAL.exp = yyDollar[2].exp
30✔
2873
                }
30✔
2874
        case 306:
20,195✔
2875
                yyDollar = yyS[yypt-1 : yypt+1]
20,195✔
2876
                {
40,390✔
2877
                        yyVAL.exp = yyDollar[1].exp
20,195✔
2878
                }
20,195✔
2879
        case 307:
39✔
2880
                yyDollar = yyS[yypt-3 : yypt+1]
39✔
2881
                {
78✔
2882
                        yyVAL.exp = &BinBoolExp{left: yyDollar[1].exp, op: Or, right: yyDollar[3].exp}
39✔
2883
                }
39✔
2884
        case 309:
152✔
2885
                yyDollar = yyS[yypt-3 : yypt+1]
152✔
2886
                {
304✔
2887
                        yyVAL.exp = &BinBoolExp{left: yyDollar[1].exp, op: And, right: yyDollar[3].exp}
152✔
2888
                }
152✔
2889
        case 311:
33✔
2890
                yyDollar = yyS[yypt-2 : yypt+1]
33✔
2891
                {
66✔
2892
                        yyVAL.exp = &NotBoolExp{exp: yyDollar[2].exp}
33✔
2893
                }
33✔
2894
        case 313:
644✔
2895
                yyDollar = yyS[yypt-3 : yypt+1]
644✔
2896
                {
1,288✔
2897
                        yyVAL.exp = &CmpBoolExp{left: yyDollar[1].exp, op: yyDollar[2].cmpOp, right: yyDollar[3].exp}
644✔
2898
                }
644✔
2899
        case 314:
3✔
2900
                yyDollar = yyS[yypt-3 : yypt+1]
3✔
2901
                {
6✔
2902
                        yyVAL.exp = &CmpBoolExp{left: yyDollar[1].exp, op: EQ, right: &NullValue{t: AnyType}}
3✔
2903
                }
3✔
2904
        case 315:
2✔
2905
                yyDollar = yyS[yypt-4 : yypt+1]
2✔
2906
                {
4✔
2907
                        yyVAL.exp = &CmpBoolExp{left: yyDollar[1].exp, op: NE, right: &NullValue{t: AnyType}}
2✔
2908
                }
2✔
2909
        case 316:
4✔
2910
                yyDollar = yyS[yypt-5 : yypt+1]
4✔
2911
                {
8✔
2912
                        yyVAL.exp = &BinBoolExp{
4✔
2913
                                left: &CmpBoolExp{
4✔
2914
                                        left:  yyDollar[1].exp,
4✔
2915
                                        op:    GE,
4✔
2916
                                        right: yyDollar[3].exp,
4✔
2917
                                },
4✔
2918
                                op: And,
4✔
2919
                                right: &CmpBoolExp{
4✔
2920
                                        left:  yyDollar[1].exp,
4✔
2921
                                        op:    LE,
4✔
2922
                                        right: yyDollar[5].exp,
4✔
2923
                                },
4✔
2924
                        }
4✔
2925
                }
4✔
2926
        case 317:
22✔
2927
                yyDollar = yyS[yypt-4 : yypt+1]
22✔
2928
                {
44✔
2929
                        yyVAL.exp = &LikeBoolExp{val: yyDollar[1].exp, notLike: yyDollar[2].boolean, pattern: yyDollar[4].exp}
22✔
2930
                }
22✔
2931
        case 318:
9✔
2932
                yyDollar = yyS[yypt-3 : yypt+1]
9✔
2933
                {
18✔
2934
                        yyVAL.exp = &LikeBoolExp{val: yyDollar[1].exp, caseInsensitive: true, pattern: yyDollar[3].exp}
9✔
2935
                }
9✔
2936
        case 319:
2✔
2937
                yyDollar = yyS[yypt-4 : yypt+1]
2✔
2938
                {
4✔
2939
                        yyVAL.exp = &LikeBoolExp{val: yyDollar[1].exp, notLike: true, caseInsensitive: true, pattern: yyDollar[4].exp}
2✔
2940
                }
2✔
2941
        case 320:
1✔
2942
                yyDollar = yyS[yypt-3 : yypt+1]
1✔
2943
                {
2✔
2944
                        yyVAL.exp = &LikeBoolExp{val: yyDollar[1].exp, notLike: true, pattern: yyDollar[3].exp}
1✔
2945
                }
1✔
2946
        case 322:
19✔
2947
                yyDollar = yyS[yypt-4 : yypt+1]
19✔
2948
                {
38✔
2949
                        yyVAL.exp = &ExistsBoolExp{q: (yyDollar[3].stmt).(DataSource)}
19✔
2950
                }
19✔
2951
        case 323:
16✔
2952
                yyDollar = yyS[yypt-6 : yypt+1]
16✔
2953
                {
32✔
2954
                        ds, ok := yyDollar[5].stmt.(DataSource)
16✔
2955
                        if !ok {
16✔
NEW
2956
                                yylex.Error("IN subquery must be a SELECT statement")
×
NEW
2957
                                goto ret1
×
2958
                        }
2959
                        sel, isSel := ds.(*SelectStmt)
16✔
2960
                        if !isSel {
16✔
NEW
2961
                                // Wrap non-SelectStmt DataSource in a SelectStmt for compatibility
×
NEW
2962
                                sel = &SelectStmt{ds: ds}
×
NEW
2963
                        }
×
2964
                        yyVAL.exp = &InSubQueryExp{val: yyDollar[1].exp, notIn: yyDollar[2].boolean, q: sel}
16✔
2965
                }
2966
        case 324:
18✔
2967
                yyDollar = yyS[yypt-6 : yypt+1]
18✔
2968
                {
36✔
2969
                        yyVAL.exp = &InListExp{val: yyDollar[1].exp, notIn: yyDollar[2].boolean, values: yyDollar[5].values}
18✔
2970
                }
18✔
2971
        case 325:
36✔
2972
                yyDollar = yyS[yypt-1 : yypt+1]
36✔
2973
                {
72✔
2974
                        yyVAL.exp = yyDollar[1].exp
36✔
2975
                }
36✔
2976
        case 327:
31✔
2977
                yyDollar = yyS[yypt-3 : yypt+1]
31✔
2978
                {
62✔
2979
                        yyVAL.exp = &NumExp{left: yyDollar[1].exp, op: ADDOP, right: yyDollar[3].exp}
31✔
2980
                }
31✔
2981
        case 328:
19✔
2982
                yyDollar = yyS[yypt-3 : yypt+1]
19✔
2983
                {
38✔
2984
                        yyVAL.exp = &NumExp{left: yyDollar[1].exp, op: SUBSOP, right: yyDollar[3].exp}
19✔
2985
                }
19✔
2986
        case 330:
23✔
2987
                yyDollar = yyS[yypt-3 : yypt+1]
23✔
2988
                {
46✔
2989
                        yyVAL.exp = &NumExp{left: yyDollar[1].exp, op: MULTOP, right: yyDollar[3].exp}
23✔
2990
                }
23✔
2991
        case 331:
22✔
2992
                yyDollar = yyS[yypt-3 : yypt+1]
22✔
2993
                {
44✔
2994
                        yyVAL.exp = &NumExp{left: yyDollar[1].exp, op: DIVOP, right: yyDollar[3].exp}
22✔
2995
                }
22✔
2996
        case 332:
6✔
2997
                yyDollar = yyS[yypt-3 : yypt+1]
6✔
2998
                {
12✔
2999
                        yyVAL.exp = &NumExp{left: yyDollar[1].exp, op: MODOP, right: yyDollar[3].exp}
6✔
3000
                }
6✔
3001
        case 334:
28✔
3002
                yyDollar = yyS[yypt-2 : yypt+1]
28✔
3003
                {
56✔
3004
                        i, isInt := yyDollar[2].exp.(*Integer)
28✔
3005
                        if isInt {
50✔
3006
                                i.val = -i.val
22✔
3007
                                yyVAL.exp = i
22✔
3008
                        } else {
28✔
3009
                                yyVAL.exp = &NumExp{left: &Integer{val: 0}, op: SUBSOP, right: yyDollar[2].exp}
6✔
3010
                        }
6✔
3011
                }
3012
        case 336:
140✔
3013
                yyDollar = yyS[yypt-3 : yypt+1]
140✔
3014
                {
280✔
3015
                        yyVAL.exp = yyDollar[2].exp
140✔
3016
                }
140✔
3017
        case 337:
10✔
3018
                yyDollar = yyS[yypt-3 : yypt+1]
10✔
3019
                {
20✔
3020
                        yyVAL.exp = &ScalarSubQueryExp{stmt: yyDollar[2].stmt.(*SelectStmt)}
10✔
3021
                }
10✔
3022
        case 339:
2,832✔
3023
                yyDollar = yyS[yypt-1 : yypt+1]
2,832✔
3024
                {
5,664✔
3025
                        yyVAL.exp = yyDollar[1].sel
2,832✔
3026
                }
2,832✔
3027
        case 340:
18,107✔
3028
                yyDollar = yyS[yypt-1 : yypt+1]
18,107✔
3029
                {
36,214✔
3030
                        yyVAL.exp = yyDollar[1].value
18,107✔
3031
                }
18,107✔
3032
        case 341:
29✔
3033
                yyDollar = yyS[yypt-3 : yypt+1]
29✔
3034
                {
58✔
3035
                        yyVAL.exp = &Cast{val: yyDollar[1].exp, t: yyDollar[3].sqlType}
29✔
3036
                }
29✔
3037
        case 342:
29✔
3038
                yyDollar = yyS[yypt-6 : yypt+1]
29✔
3039
                {
58✔
3040
                        yyVAL.exp = &ExtractFromTimestampExp{Field: yyDollar[3].timestampField, Exp: yyDollar[5].exp}
29✔
3041
                }
29✔
3042
        case 343:
51✔
3043
                yyDollar = yyS[yypt-0 : yypt+1]
51✔
3044
                {
102✔
3045
                        yyVAL.boolean = false
51✔
3046
                }
51✔
3047
        case 344:
5✔
3048
                yyDollar = yyS[yypt-1 : yypt+1]
5✔
3049
                {
10✔
3050
                        yyVAL.boolean = true
5✔
3051
                }
5✔
3052
        case 345:
9✔
3053
                yyDollar = yyS[yypt-1 : yypt+1]
9✔
3054
                {
18✔
3055
                        yyVAL.timestampField = TimestampFieldTypeYear
9✔
3056
                }
9✔
3057
        case 346:
4✔
3058
                yyDollar = yyS[yypt-1 : yypt+1]
4✔
3059
                {
8✔
3060
                        yyVAL.timestampField = TimestampFieldTypeMonth
4✔
3061
                }
4✔
3062
        case 347:
4✔
3063
                yyDollar = yyS[yypt-1 : yypt+1]
4✔
3064
                {
8✔
3065
                        yyVAL.timestampField = TimestampFieldTypeDay
4✔
3066
                }
4✔
3067
        case 348:
4✔
3068
                yyDollar = yyS[yypt-1 : yypt+1]
4✔
3069
                {
8✔
3070
                        yyVAL.timestampField = TimestampFieldTypeHour
4✔
3071
                }
4✔
3072
        case 349:
4✔
3073
                yyDollar = yyS[yypt-1 : yypt+1]
4✔
3074
                {
8✔
3075
                        yyVAL.timestampField = TimestampFieldTypeMinute
4✔
3076
                }
4✔
3077
        case 350:
4✔
3078
                yyDollar = yyS[yypt-1 : yypt+1]
4✔
3079
                {
8✔
3080
                        yyVAL.timestampField = TimestampFieldTypeSecond
4✔
3081
                }
4✔
3082
        }
3083
        goto yystack /* stack new state and value */
461,002✔
3084
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc