diff --git a/.github/workflows/markdown-link-check-config.json b/.github/workflows/markdown-link-check-config.json deleted file mode 100644 index beede2705c..0000000000 --- a/.github/workflows/markdown-link-check-config.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "ignorePatterns": [ - { - "pattern": "^http://localhost:9867" - }, - { - "pattern": "^https://suricata.io" - } - ], - "retryOn429": true, - "httpHeaders": [ - { - "urls": ["https://docs.github.com/"], - "headers": { - "Accept-Encoding": "zstd, br, gzip, deflate" - } - } - ] -} diff --git a/.github/workflows/markdown-lint.yaml b/.github/workflows/markdown-lint.yaml index 9cb61b46b8..17316195da 100644 --- a/.github/workflows/markdown-lint.yaml +++ b/.github/workflows/markdown-lint.yaml @@ -15,10 +15,10 @@ jobs: - uses: actions/checkout@v4 - name: Lint run: make markdown-lint - - uses: gaurav-nelson/github-action-markdown-link-check@v1 + - uses: umbrelladocs/action-linkspector@v1 with: - config-file: .github/workflows/markdown-link-check-config.json - use-quiet-mode: yes + fail_on_error: true + filter_mode: nofilter - name: Inform Slack users of link check failures uses: tiloio/slack-webhook-action@v1.1.2 if: failure() && github.ref_name == 'main' diff --git a/.linkspector.yml b/.linkspector.yml new file mode 100644 index 0000000000..96f0ae2f26 --- /dev/null +++ b/.linkspector.yml @@ -0,0 +1,5 @@ +dirs: + - . +useGitIgnore: true +excludedDirs: + - node_modules diff --git a/.markdownlint.yaml b/.markdownlint.yaml index 3c9b4c92a3..1bdcd8fce8 100644 --- a/.markdownlint.yaml +++ b/.markdownlint.yaml @@ -11,4 +11,4 @@ whitespace: true MD010: code_blocks: false # Disallow hard tabs except in code blocks. MD033: - allowed_elements: ["p"] + allowed_elements: ["p","br"] diff --git a/CHANGELOG.md b/CHANGELOG.md index a95b819aed..018e68b37c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -146,7 +146,7 @@ * Fix an issue where certain ZNG files could not be read and caused a `control` error (#4579) * Fix an issue where `zed serve` would exit if it tried to write to a closed socket (#4587) * Improve JSON output for Zed [maps](docs/formats/zed.md#24-map) (#4589) -* Add the [`zed vacuum`](docs/commands/super-db.md#215-vacuum) command (#4577, #4598, #4600) +* Add the [`zed vacuum`](docs/commands/super-db.md#vacuum) command (#4577, #4598, #4600) ## v1.7.0 * Add [`regexp_replace()`](docs/language/functions/regexp_replace.md) function for replacing regular expression matches in a string (#4435, #4449) @@ -203,7 +203,7 @@ * Improve handling of errors during [shaping](docs/language/shaping.md) (#4067, #4069) * Allow use of a pool name regexp/glob pattern with the [`from` operator](docs/language/operators/from.md) (#4072, #4075) * Add [`levenshtein()` function](docs/language/functions/levenshtein.md) for fuzzy string matching (#4104) -* Allow use of any filter with [`zed delete -where`](docs/commands/super-db.md#24-delete) (#4100, #4124, #4126, #4125, #4127) +* Allow use of any filter with [`zed delete -where`](docs/commands/super-db.md#delete) (#4100, #4124, #4126, #4125, #4127) * Add [`regexp()`](docs/language/functions/regexp.md) function for regular expression searches and capture groups (#4145, #4158) * Add [`coalesce()`](docs/language/functions/coalesce.md) function for locating non-null/non-error values (#4172) * Add `line` format for sourcing newline-delimited input as strings (#4175) @@ -235,7 +235,7 @@ * Allow conversion of time values to other numeric types (#3816) * Remove scaling from duration and time conversions (#3809) * Add [`over` expressions](docs/language/lateral-subqueries.md#lateral-expressions) (#3797) -* Add `-where` flag to [`zed delete`](docs/commands/super-db.md#24-delete) (#3791) +* Add `-where` flag to [`zed delete`](docs/commands/super-db.md#delete) (#3791) * Allow base62 object IDs in lake API request bodies (#3783) * Remove `let` operator and [`over` operator](docs/language/operators/over.md)'s `as` clause (#3785) @@ -677,7 +677,7 @@ questions. * zqd: Add a Python `zqd` API client for use with tools like [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/) (#1564) ## v0.22.0 -* zq: Change the implementation of the `union` type to conform with the [ZNG spec](docs/formats/bsup.md#3114-union-typedef) (#1245) +* zq: Change the implementation of the `union` type to conform with the [ZNG spec](docs/formats/bsup.md#215-union-typedef) (#1245) * zq: Make options/flags and version reporting consistent across CLI tools (#1249, #1254, #1256, #1296, #1323, #1334, #1328) * zqd: Fix an issue that was preventing flows in nanosecond pcaps from opening in Brim (#1243, #1241) * zq: Fix an issue where the TZNG reader did not recognize a bad record type as a syntax error (#1260) @@ -695,7 +695,7 @@ questions. * zql: Fix broken links in documentation (#1321, #1339) * zst: Introduce the [ZST format](docs/formats/csup.md) for columnar data based on ZNG (#1268, #1338) * pcap: Fix an issue where certain pcapng files could fail import with a `bad option length` error (#1341) -* zql: [Document the `**` operator](docs/language/search-expressions.md) for type-specific searches that look within nested records (#1337) +* zql: Document the `**` operator for type-specific searches that look within nested records (#1337) * zar: Change the archive data file layout to prepare for handing chunk files with overlapping ranges and improved S3 support (#1330) * zar: Support archive data files with overlapping time spans (#1348) * zqd: Add a page containing guidance for users that directly access the root `zqd` endpoint in a browser (#1350) @@ -745,7 +745,7 @@ questions. * zqd: Fix an issue with excess characters in Space names after upgrade (#1112) ## v0.19.0 -* zq: ZNG output is now LZ4-compressed by default (#1050, #1064, #1063, [ZNG spec](docs/formats/bsup.md#313-compressed-value-message-block)) +* zq: ZNG output is now LZ4-compressed by default (#1050, #1064, #1063, [ZNG spec](docs/formats/bsup.md#2-the-super-binary-format)) * zar: Adjust import size threshold to account for compression (#1082) * zqd: Support starting `zqd` with datapath set to an S3 path (#1072) * zq: Fix an issue with panics during pcap import (#1090) diff --git a/compiler/ast/ast.go b/compiler/ast/ast.go index daf935c95c..88b9a7fd69 100644 --- a/compiler/ast/ast.go +++ b/compiler/ast/ast.go @@ -133,6 +133,13 @@ type IndexExpr struct { Loc `json:"loc"` } +type IsNullExpr struct { + Kind string `json:"kind" unpack:""` + Expr Expr `json:"expr"` + Not bool `json:"not"` + Loc `json:"loc"` +} + type SliceExpr struct { Kind string `json:"kind" unpack:""` Expr Expr `json:"expr"` @@ -315,6 +322,7 @@ func (*CaseExpr) ExprAST() {} func (*Cast) ExprAST() {} func (*ID) ExprAST() {} func (*IndexExpr) ExprAST() {} +func (*IsNullExpr) ExprAST() {} func (*SliceExpr) ExprAST() {} func (*Assignment) ExprAST() {} diff --git a/compiler/ast/unpack.go b/compiler/ast/unpack.go index a1c36c796d..da064963bc 100644 --- a/compiler/ast/unpack.go +++ b/compiler/ast/unpack.go @@ -45,6 +45,7 @@ var unpacker = unpack.New( ID{}, ImpliedValue{}, IndexExpr{}, + IsNullExpr{}, Join{}, Load{}, Merge{}, diff --git a/compiler/dag/expr.go b/compiler/dag/expr.go index a824a970fc..390bdf9689 100644 --- a/compiler/dag/expr.go +++ b/compiler/dag/expr.go @@ -27,11 +27,6 @@ type ( Kind string `json:"kind" unpack:""` Elems []VectorElem `json:"elems"` } - Assignment struct { - Kind string `json:"kind" unpack:""` - LHS Expr `json:"lhs"` - RHS Expr `json:"rhs"` - } // A BadExpr node is a placeholder for an expression containing semantic // errors. BadExpr struct { @@ -70,6 +65,10 @@ type ( Expr Expr `json:"expr"` Index Expr `json:"index"` } + IsNullExpr struct { + Kind string `json:"kind" unpack:""` + Expr Expr `json:"expr"` + } Literal struct { Kind string `json:"kind" unpack:""` Value string `json:"value"` @@ -148,6 +147,7 @@ func (*Conditional) ExprDAG() {} func (*Dot) ExprDAG() {} func (*Func) ExprDAG() {} func (*IndexExpr) ExprDAG() {} +func (*IsNullExpr) ExprDAG() {} func (*Literal) ExprDAG() {} func (*MapCall) ExprDAG() {} func (*MapExpr) ExprDAG() {} diff --git a/compiler/dag/op.go b/compiler/dag/op.go index dee0cb686d..c8149b0e6e 100644 --- a/compiler/dag/op.go +++ b/compiler/dag/op.go @@ -294,6 +294,11 @@ func (*Deleter) OpNode() {} // Various Op fields type ( + Assignment struct { + Kind string `json:"kind" unpack:""` + LHS Expr `json:"lhs"` + RHS Expr `json:"rhs"` + } Case struct { Expr Expr `json:"expr"` Path Seq `json:"seq"` diff --git a/compiler/dag/unpack.go b/compiler/dag/unpack.go index 572e49fcb1..102116c9ce 100644 --- a/compiler/dag/unpack.go +++ b/compiler/dag/unpack.go @@ -33,6 +33,7 @@ var unpacker = unpack.New( Head{}, HTTPScan{}, IndexExpr{}, + IsNullExpr{}, Join{}, LakeMetaScan{}, Lister{}, diff --git a/compiler/kernel/expr.go b/compiler/kernel/expr.go index 3ebf4a2f8a..65bca3e62f 100644 --- a/compiler/kernel/expr.go +++ b/compiler/kernel/expr.go @@ -75,6 +75,8 @@ func (b *Builder) compileExpr(e dag.Expr) (expr.Evaluator, error) { return b.compileCall(*e) case *dag.IndexExpr: return b.compileIndexExpr(e) + case *dag.IsNullExpr: + return b.compileIsNullExpr(e) case *dag.SliceExpr: return b.compileSliceExpr(e) case *dag.RegexpMatch: @@ -405,6 +407,14 @@ func (b *Builder) compileIndexExpr(e *dag.IndexExpr) (expr.Evaluator, error) { return expr.NewIndexExpr(b.zctx(), container, index), nil } +func (b *Builder) compileIsNullExpr(e *dag.IsNullExpr) (expr.Evaluator, error) { + eval, err := b.compileExpr(e.Expr) + if err != nil { + return nil, err + } + return expr.NewIsNullExpr(eval), nil +} + func (b *Builder) compileRegexpMatch(match *dag.RegexpMatch) (expr.Evaluator, error) { e, err := b.compileExpr(match.Expr) if err != nil { diff --git a/compiler/kernel/filter.go b/compiler/kernel/filter.go index 211b65fb4a..eb22e521fa 100644 --- a/compiler/kernel/filter.go +++ b/compiler/kernel/filter.go @@ -36,9 +36,8 @@ func (f *DeleteFilter) AsEvaluator() (expr.Evaluator, error) { return nil, nil } // For a DeleteFilter Evaluator the pushdown gets wrapped in a unary ! - // expression so we get all values that don't match. We also add a missing - // call so if the expression results in an error("missing") the value is - // kept. + // expression so we get all values that don't match. We also add an error + // and null check because we want to keep these values around. return f.builder.compileExpr(&dag.BinaryExpr{ Kind: "BinaryExpr", Op: "or", @@ -47,10 +46,11 @@ func (f *DeleteFilter) AsEvaluator() (expr.Evaluator, error) { Op: "!", Operand: f.pushdown, }, - RHS: &dag.Call{ - Kind: "Call", - Name: "missing", - Args: []dag.Expr{f.pushdown}, + RHS: &dag.BinaryExpr{ + Kind: "BinaryExpr", + Op: "or", + LHS: &dag.IsNullExpr{Kind: "IsNullExpr", Expr: f.pushdown}, + RHS: &dag.Call{Kind: "Call", Name: "is_error", Args: []dag.Expr{f.pushdown}}, }, }) } diff --git a/compiler/kernel/vexpr.go b/compiler/kernel/vexpr.go index 3adf354fdd..833caf9ef4 100644 --- a/compiler/kernel/vexpr.go +++ b/compiler/kernel/vexpr.go @@ -35,12 +35,14 @@ func (b *Builder) compileVamExpr(e dag.Expr) (vamexpr.Evaluator, error) { return b.compileVamDotExpr(e) case *dag.IndexExpr: return b.compileVamIndexExpr(e) + case *dag.IsNullExpr: + return b.compileVamIsNullExpr(e) case *dag.UnaryExpr: return b.compileVamUnary(*e) case *dag.BinaryExpr: return b.compileVamBinary(e) - //case *dag.Conditional: - // return b.compileVamConditional(*e) + case *dag.Conditional: + return b.compileVamConditional(*e) case *dag.Call: return b.compileVamCall(e) //case *dag.RegexpMatch: @@ -109,15 +111,30 @@ func (b *Builder) compileVamBinary(e *dag.BinaryExpr) (vamexpr.Evaluator, error) } } +func (b *Builder) compileVamConditional(node dag.Conditional) (vamexpr.Evaluator, error) { + predicate, err := b.compileVamExpr(node.Cond) + if err != nil { + return nil, err + } + thenExpr, err := b.compileVamExpr(node.Then) + if err != nil { + return nil, err + } + elseExpr, err := b.compileVamExpr(node.Else) + if err != nil { + return nil, err + } + return vamexpr.NewConditional(b.zctx(), predicate, thenExpr, elseExpr), nil +} + func (b *Builder) compileVamUnary(unary dag.UnaryExpr) (vamexpr.Evaluator, error) { e, err := b.compileVamExpr(unary.Operand) if err != nil { return nil, err } switch unary.Op { - //XXX TBD - //case "-": - // return vamexpr.NewUnaryMinus(b.zctx(), e), nil + case "-": + return vamexpr.NewUnaryMinus(b.zctx(), e), nil case "!": return vamexpr.NewLogicalNot(b.zctx(), e), nil default: @@ -145,6 +162,14 @@ func (b *Builder) compileVamIndexExpr(idx *dag.IndexExpr) (vamexpr.Evaluator, er return vamexpr.NewIndexExpr(b.zctx(), e, index), nil } +func (b *Builder) compileVamIsNullExpr(idx *dag.IsNullExpr) (vamexpr.Evaluator, error) { + e, err := b.compileVamExpr(idx.Expr) + if err != nil { + return nil, err + } + return vamexpr.NewIsNull(e), nil +} + func (b *Builder) compileVamExprs(in []dag.Expr) ([]vamexpr.Evaluator, error) { var exprs []vamexpr.Evaluator for _, e := range in { diff --git a/compiler/parser/parser.go b/compiler/parser/parser.go index 58290a835d..661e1b5328 100644 --- a/compiler/parser/parser.go +++ b/compiler/parser/parser.go @@ -6427,93 +6427,117 @@ var g = &grammar{ exprs: []any{ &labeledExpr{ pos: position{line: 951, col: 5, offset: 22632}, - label: "lhs", + label: "expr", expr: &ruleRefExpr{ - pos: position{line: 951, col: 9, offset: 22636}, + pos: position{line: 951, col: 10, offset: 22637}, name: "AdditiveExpr", }, }, &ruleRefExpr{ - pos: position{line: 951, col: 22, offset: 22649}, + pos: position{line: 951, col: 23, offset: 22650}, name: "_", }, + &ruleRefExpr{ + pos: position{line: 951, col: 25, offset: 22652}, + name: "IS", + }, &labeledExpr{ - pos: position{line: 951, col: 24, offset: 22651}, - label: "op", - expr: &ruleRefExpr{ - pos: position{line: 951, col: 27, offset: 22654}, - name: "IsNull", + pos: position{line: 951, col: 28, offset: 22655}, + label: "not", + expr: &zeroOrOneExpr{ + pos: position{line: 951, col: 32, offset: 22659}, + expr: &seqExpr{ + pos: position{line: 951, col: 33, offset: 22660}, + exprs: []any{ + &ruleRefExpr{ + pos: position{line: 951, col: 33, offset: 22660}, + name: "_", + }, + &ruleRefExpr{ + pos: position{line: 951, col: 35, offset: 22662}, + name: "NOT", + }, + }, + }, }, }, + &ruleRefExpr{ + pos: position{line: 951, col: 41, offset: 22668}, + name: "_", + }, + &ruleRefExpr{ + pos: position{line: 951, col: 43, offset: 22670}, + name: "NULL", + }, }, }, }, &actionExpr{ - pos: position{line: 960, col: 5, offset: 22864}, - run: (*parser).callonComparisonExpr9, + pos: position{line: 959, col: 5, offset: 22838}, + run: (*parser).callonComparisonExpr15, expr: &seqExpr{ - pos: position{line: 960, col: 5, offset: 22864}, + pos: position{line: 959, col: 5, offset: 22838}, exprs: []any{ &labeledExpr{ - pos: position{line: 960, col: 5, offset: 22864}, + pos: position{line: 959, col: 5, offset: 22838}, label: "lhs", expr: &ruleRefExpr{ - pos: position{line: 960, col: 9, offset: 22868}, + pos: position{line: 959, col: 9, offset: 22842}, name: "AdditiveExpr", }, }, &labeledExpr{ - pos: position{line: 960, col: 22, offset: 22881}, + pos: position{line: 959, col: 22, offset: 22855}, label: "opAndRHS", expr: &zeroOrOneExpr{ - pos: position{line: 960, col: 31, offset: 22890}, + pos: position{line: 959, col: 31, offset: 22864}, expr: &choiceExpr{ - pos: position{line: 960, col: 32, offset: 22891}, + pos: position{line: 959, col: 32, offset: 22865}, alternatives: []any{ &seqExpr{ - pos: position{line: 960, col: 32, offset: 22891}, + pos: position{line: 959, col: 32, offset: 22865}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 960, col: 32, offset: 22891}, + pos: position{line: 959, col: 32, offset: 22865}, name: "__", }, &ruleRefExpr{ - pos: position{line: 960, col: 35, offset: 22894}, + pos: position{line: 959, col: 35, offset: 22868}, name: "Comparator", }, &ruleRefExpr{ - pos: position{line: 960, col: 46, offset: 22905}, + pos: position{line: 959, col: 46, offset: 22879}, name: "__", }, &ruleRefExpr{ - pos: position{line: 960, col: 49, offset: 22908}, + pos: position{line: 959, col: 49, offset: 22882}, name: "AdditiveExpr", }, }, }, &seqExpr{ - pos: position{line: 960, col: 64, offset: 22923}, + pos: position{line: 959, col: 64, offset: 22897}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 960, col: 64, offset: 22923}, + pos: position{line: 959, col: 64, offset: 22897}, name: "__", }, &actionExpr{ - pos: position{line: 960, col: 68, offset: 22927}, - run: (*parser).callonComparisonExpr23, + pos: position{line: 959, col: 68, offset: 22901}, + run: (*parser).callonComparisonExpr29, expr: &litMatcher{ - pos: position{line: 960, col: 68, offset: 22927}, + pos: position{line: 959, col: 68, offset: 22901}, val: "~", ignoreCase: false, want: "\"~\"", }, }, &ruleRefExpr{ - pos: position{line: 960, col: 104, offset: 22963}, + pos: position{line: 959, col: 104, offset: 22937}, name: "__", }, &ruleRefExpr{ - pos: position{line: 960, col: 107, offset: 22966}, + pos: position{line: 959, col: 107, offset: 22940}, name: "Regexp", }, }, @@ -6530,116 +6554,55 @@ var g = &grammar{ leader: false, leftRecursive: false, }, - { - name: "IsNull", - pos: position{line: 973, col: 2, offset: 23253}, - expr: &choiceExpr{ - pos: position{line: 974, col: 5, offset: 23264}, - alternatives: []any{ - &actionExpr{ - pos: position{line: 974, col: 5, offset: 23264}, - run: (*parser).callonIsNull2, - expr: &seqExpr{ - pos: position{line: 974, col: 5, offset: 23264}, - exprs: []any{ - &ruleRefExpr{ - pos: position{line: 974, col: 5, offset: 23264}, - name: "IS", - }, - &ruleRefExpr{ - pos: position{line: 974, col: 8, offset: 23267}, - name: "_", - }, - &ruleRefExpr{ - pos: position{line: 974, col: 10, offset: 23269}, - name: "NULL", - }, - }, - }, - }, - &actionExpr{ - pos: position{line: 975, col: 5, offset: 23299}, - run: (*parser).callonIsNull7, - expr: &seqExpr{ - pos: position{line: 975, col: 5, offset: 23299}, - exprs: []any{ - &ruleRefExpr{ - pos: position{line: 975, col: 5, offset: 23299}, - name: "IS", - }, - &ruleRefExpr{ - pos: position{line: 975, col: 8, offset: 23302}, - name: "_", - }, - &ruleRefExpr{ - pos: position{line: 975, col: 10, offset: 23304}, - name: "NOT", - }, - &ruleRefExpr{ - pos: position{line: 975, col: 14, offset: 23308}, - name: "_", - }, - &ruleRefExpr{ - pos: position{line: 975, col: 16, offset: 23310}, - name: "NULL", - }, - }, - }, - }, - }, - }, - leader: false, - leftRecursive: false, - }, { name: "AdditiveExpr", - pos: position{line: 977, col: 1, offset: 23337}, + pos: position{line: 972, col: 1, offset: 23226}, expr: &actionExpr{ - pos: position{line: 978, col: 5, offset: 23354}, + pos: position{line: 973, col: 5, offset: 23243}, run: (*parser).callonAdditiveExpr1, expr: &seqExpr{ - pos: position{line: 978, col: 5, offset: 23354}, + pos: position{line: 973, col: 5, offset: 23243}, exprs: []any{ &labeledExpr{ - pos: position{line: 978, col: 5, offset: 23354}, + pos: position{line: 973, col: 5, offset: 23243}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 978, col: 11, offset: 23360}, + pos: position{line: 973, col: 11, offset: 23249}, name: "MultiplicativeExpr", }, }, &labeledExpr{ - pos: position{line: 979, col: 5, offset: 23383}, + pos: position{line: 974, col: 5, offset: 23272}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 979, col: 10, offset: 23388}, + pos: position{line: 974, col: 10, offset: 23277}, expr: &actionExpr{ - pos: position{line: 979, col: 11, offset: 23389}, + pos: position{line: 974, col: 11, offset: 23278}, run: (*parser).callonAdditiveExpr7, expr: &seqExpr{ - pos: position{line: 979, col: 11, offset: 23389}, + pos: position{line: 974, col: 11, offset: 23278}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 979, col: 11, offset: 23389}, + pos: position{line: 974, col: 11, offset: 23278}, name: "__", }, &labeledExpr{ - pos: position{line: 979, col: 14, offset: 23392}, + pos: position{line: 974, col: 14, offset: 23281}, label: "op", expr: &ruleRefExpr{ - pos: position{line: 979, col: 17, offset: 23395}, + pos: position{line: 974, col: 17, offset: 23284}, name: "AdditiveOperator", }, }, &ruleRefExpr{ - pos: position{line: 979, col: 34, offset: 23412}, + pos: position{line: 974, col: 34, offset: 23301}, name: "__", }, &labeledExpr{ - pos: position{line: 979, col: 37, offset: 23415}, + pos: position{line: 974, col: 37, offset: 23304}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 979, col: 42, offset: 23420}, + pos: position{line: 974, col: 42, offset: 23309}, name: "MultiplicativeExpr", }, }, @@ -6656,21 +6619,21 @@ var g = &grammar{ }, { name: "AdditiveOperator", - pos: position{line: 983, col: 1, offset: 23538}, + pos: position{line: 978, col: 1, offset: 23427}, expr: &actionExpr{ - pos: position{line: 983, col: 20, offset: 23557}, + pos: position{line: 978, col: 20, offset: 23446}, run: (*parser).callonAdditiveOperator1, expr: &choiceExpr{ - pos: position{line: 983, col: 21, offset: 23558}, + pos: position{line: 978, col: 21, offset: 23447}, alternatives: []any{ &litMatcher{ - pos: position{line: 983, col: 21, offset: 23558}, + pos: position{line: 978, col: 21, offset: 23447}, val: "+", ignoreCase: false, want: "\"+\"", }, &litMatcher{ - pos: position{line: 983, col: 27, offset: 23564}, + pos: position{line: 978, col: 27, offset: 23453}, val: "-", ignoreCase: false, want: "\"-\"", @@ -6683,53 +6646,53 @@ var g = &grammar{ }, { name: "MultiplicativeExpr", - pos: position{line: 985, col: 1, offset: 23601}, + pos: position{line: 980, col: 1, offset: 23490}, expr: &actionExpr{ - pos: position{line: 986, col: 5, offset: 23624}, + pos: position{line: 981, col: 5, offset: 23513}, run: (*parser).callonMultiplicativeExpr1, expr: &seqExpr{ - pos: position{line: 986, col: 5, offset: 23624}, + pos: position{line: 981, col: 5, offset: 23513}, exprs: []any{ &labeledExpr{ - pos: position{line: 986, col: 5, offset: 23624}, + pos: position{line: 981, col: 5, offset: 23513}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 986, col: 11, offset: 23630}, + pos: position{line: 981, col: 11, offset: 23519}, name: "ConcatExpr", }, }, &labeledExpr{ - pos: position{line: 987, col: 5, offset: 23645}, + pos: position{line: 982, col: 5, offset: 23534}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 987, col: 10, offset: 23650}, + pos: position{line: 982, col: 10, offset: 23539}, expr: &actionExpr{ - pos: position{line: 987, col: 11, offset: 23651}, + pos: position{line: 982, col: 11, offset: 23540}, run: (*parser).callonMultiplicativeExpr7, expr: &seqExpr{ - pos: position{line: 987, col: 11, offset: 23651}, + pos: position{line: 982, col: 11, offset: 23540}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 987, col: 11, offset: 23651}, + pos: position{line: 982, col: 11, offset: 23540}, name: "__", }, &labeledExpr{ - pos: position{line: 987, col: 14, offset: 23654}, + pos: position{line: 982, col: 14, offset: 23543}, label: "op", expr: &ruleRefExpr{ - pos: position{line: 987, col: 17, offset: 23657}, + pos: position{line: 982, col: 17, offset: 23546}, name: "MultiplicativeOperator", }, }, &ruleRefExpr{ - pos: position{line: 987, col: 40, offset: 23680}, + pos: position{line: 982, col: 40, offset: 23569}, name: "__", }, &labeledExpr{ - pos: position{line: 987, col: 43, offset: 23683}, + pos: position{line: 982, col: 43, offset: 23572}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 987, col: 48, offset: 23688}, + pos: position{line: 982, col: 48, offset: 23577}, name: "ConcatExpr", }, }, @@ -6746,27 +6709,27 @@ var g = &grammar{ }, { name: "MultiplicativeOperator", - pos: position{line: 991, col: 1, offset: 23798}, + pos: position{line: 986, col: 1, offset: 23687}, expr: &actionExpr{ - pos: position{line: 991, col: 26, offset: 23823}, + pos: position{line: 986, col: 26, offset: 23712}, run: (*parser).callonMultiplicativeOperator1, expr: &choiceExpr{ - pos: position{line: 991, col: 27, offset: 23824}, + pos: position{line: 986, col: 27, offset: 23713}, alternatives: []any{ &litMatcher{ - pos: position{line: 991, col: 27, offset: 23824}, + pos: position{line: 986, col: 27, offset: 23713}, val: "*", ignoreCase: false, want: "\"*\"", }, &litMatcher{ - pos: position{line: 991, col: 33, offset: 23830}, + pos: position{line: 986, col: 33, offset: 23719}, val: "/", ignoreCase: false, want: "\"/\"", }, &litMatcher{ - pos: position{line: 991, col: 39, offset: 23836}, + pos: position{line: 986, col: 39, offset: 23725}, val: "%", ignoreCase: false, want: "\"%\"", @@ -6779,51 +6742,51 @@ var g = &grammar{ }, { name: "ConcatExpr", - pos: position{line: 993, col: 1, offset: 23873}, + pos: position{line: 988, col: 1, offset: 23762}, expr: &actionExpr{ - pos: position{line: 994, col: 5, offset: 23889}, + pos: position{line: 989, col: 5, offset: 23778}, run: (*parser).callonConcatExpr1, expr: &seqExpr{ - pos: position{line: 994, col: 5, offset: 23889}, + pos: position{line: 989, col: 5, offset: 23778}, exprs: []any{ &labeledExpr{ - pos: position{line: 994, col: 5, offset: 23889}, + pos: position{line: 989, col: 5, offset: 23778}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 994, col: 11, offset: 23895}, + pos: position{line: 989, col: 11, offset: 23784}, name: "UnaryPlusOrMinus", }, }, &labeledExpr{ - pos: position{line: 995, col: 5, offset: 23916}, + pos: position{line: 990, col: 5, offset: 23805}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 995, col: 10, offset: 23921}, + pos: position{line: 990, col: 10, offset: 23810}, expr: &actionExpr{ - pos: position{line: 995, col: 11, offset: 23922}, + pos: position{line: 990, col: 11, offset: 23811}, run: (*parser).callonConcatExpr7, expr: &seqExpr{ - pos: position{line: 995, col: 11, offset: 23922}, + pos: position{line: 990, col: 11, offset: 23811}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 995, col: 11, offset: 23922}, + pos: position{line: 990, col: 11, offset: 23811}, name: "__", }, &litMatcher{ - pos: position{line: 995, col: 14, offset: 23925}, + pos: position{line: 990, col: 14, offset: 23814}, val: "||", ignoreCase: false, want: "\"||\"", }, &ruleRefExpr{ - pos: position{line: 995, col: 19, offset: 23930}, + pos: position{line: 990, col: 19, offset: 23819}, name: "__", }, &labeledExpr{ - pos: position{line: 995, col: 22, offset: 23933}, + pos: position{line: 990, col: 22, offset: 23822}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 995, col: 27, offset: 23938}, + pos: position{line: 990, col: 27, offset: 23827}, name: "UnaryPlusOrMinus", }, }, @@ -6840,40 +6803,40 @@ var g = &grammar{ }, { name: "UnaryPlusOrMinus", - pos: position{line: 999, col: 1, offset: 24056}, + pos: position{line: 994, col: 1, offset: 23945}, expr: &choiceExpr{ - pos: position{line: 1000, col: 5, offset: 24077}, + pos: position{line: 995, col: 5, offset: 23966}, alternatives: []any{ &actionExpr{ - pos: position{line: 1000, col: 5, offset: 24077}, + pos: position{line: 995, col: 5, offset: 23966}, run: (*parser).callonUnaryPlusOrMinus2, expr: &seqExpr{ - pos: position{line: 1000, col: 5, offset: 24077}, + pos: position{line: 995, col: 5, offset: 23966}, exprs: []any{ ¬Expr{ - pos: position{line: 1000, col: 5, offset: 24077}, + pos: position{line: 995, col: 5, offset: 23966}, expr: &ruleRefExpr{ - pos: position{line: 1000, col: 6, offset: 24078}, + pos: position{line: 995, col: 6, offset: 23967}, name: "Literal", }, }, &labeledExpr{ - pos: position{line: 1000, col: 14, offset: 24086}, + pos: position{line: 995, col: 14, offset: 23975}, label: "op", expr: &ruleRefExpr{ - pos: position{line: 1000, col: 17, offset: 24089}, + pos: position{line: 995, col: 17, offset: 23978}, name: "PlusOrMinusOp", }, }, &ruleRefExpr{ - pos: position{line: 1000, col: 31, offset: 24103}, + pos: position{line: 995, col: 31, offset: 23992}, name: "__", }, &labeledExpr{ - pos: position{line: 1000, col: 34, offset: 24106}, + pos: position{line: 995, col: 34, offset: 23995}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 1000, col: 36, offset: 24108}, + pos: position{line: 995, col: 36, offset: 23997}, name: "UnaryPlusOrMinus", }, }, @@ -6881,7 +6844,7 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1009, col: 5, offset: 24292}, + pos: position{line: 1004, col: 5, offset: 24181}, name: "DerefExpr", }, }, @@ -6891,21 +6854,21 @@ var g = &grammar{ }, { name: "PlusOrMinusOp", - pos: position{line: 1011, col: 1, offset: 24303}, + pos: position{line: 1006, col: 1, offset: 24192}, expr: &actionExpr{ - pos: position{line: 1011, col: 17, offset: 24319}, + pos: position{line: 1006, col: 17, offset: 24208}, run: (*parser).callonPlusOrMinusOp1, expr: &choiceExpr{ - pos: position{line: 1011, col: 18, offset: 24320}, + pos: position{line: 1006, col: 18, offset: 24209}, alternatives: []any{ &litMatcher{ - pos: position{line: 1011, col: 18, offset: 24320}, + pos: position{line: 1006, col: 18, offset: 24209}, val: "+", ignoreCase: false, want: "\"+\"", }, &litMatcher{ - pos: position{line: 1011, col: 24, offset: 24326}, + pos: position{line: 1006, col: 24, offset: 24215}, val: "-", ignoreCase: false, want: "\"-\"", @@ -6918,73 +6881,73 @@ var g = &grammar{ }, { name: "DerefExpr", - pos: position{line: 1013, col: 1, offset: 24363}, + pos: position{line: 1008, col: 1, offset: 24252}, expr: &choiceExpr{ - pos: position{line: 1014, col: 5, offset: 24377}, + pos: position{line: 1009, col: 5, offset: 24266}, alternatives: []any{ &actionExpr{ - pos: position{line: 1014, col: 5, offset: 24377}, + pos: position{line: 1009, col: 5, offset: 24266}, run: (*parser).callonDerefExpr2, expr: &seqExpr{ - pos: position{line: 1014, col: 5, offset: 24377}, + pos: position{line: 1009, col: 5, offset: 24266}, exprs: []any{ &labeledExpr{ - pos: position{line: 1014, col: 5, offset: 24377}, + pos: position{line: 1009, col: 5, offset: 24266}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 1014, col: 10, offset: 24382}, + pos: position{line: 1009, col: 10, offset: 24271}, name: "DerefExpr", }, }, &litMatcher{ - pos: position{line: 1014, col: 20, offset: 24392}, + pos: position{line: 1009, col: 20, offset: 24281}, val: "[", ignoreCase: false, want: "\"[\"", }, &ruleRefExpr{ - pos: position{line: 1014, col: 24, offset: 24396}, + pos: position{line: 1009, col: 24, offset: 24285}, name: "__", }, &labeledExpr{ - pos: position{line: 1014, col: 27, offset: 24399}, + pos: position{line: 1009, col: 27, offset: 24288}, label: "from", expr: &ruleRefExpr{ - pos: position{line: 1014, col: 32, offset: 24404}, + pos: position{line: 1009, col: 32, offset: 24293}, name: "AdditiveExpr", }, }, &ruleRefExpr{ - pos: position{line: 1014, col: 45, offset: 24417}, + pos: position{line: 1009, col: 45, offset: 24306}, name: "__", }, &litMatcher{ - pos: position{line: 1014, col: 48, offset: 24420}, + pos: position{line: 1009, col: 48, offset: 24309}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1014, col: 52, offset: 24424}, + pos: position{line: 1009, col: 52, offset: 24313}, name: "__", }, &labeledExpr{ - pos: position{line: 1014, col: 55, offset: 24427}, + pos: position{line: 1009, col: 55, offset: 24316}, label: "to", expr: &zeroOrOneExpr{ - pos: position{line: 1014, col: 58, offset: 24430}, + pos: position{line: 1009, col: 58, offset: 24319}, expr: &ruleRefExpr{ - pos: position{line: 1014, col: 58, offset: 24430}, + pos: position{line: 1009, col: 58, offset: 24319}, name: "AdditiveExpr", }, }, }, &ruleRefExpr{ - pos: position{line: 1014, col: 72, offset: 24444}, + pos: position{line: 1009, col: 72, offset: 24333}, name: "__", }, &litMatcher{ - pos: position{line: 1014, col: 75, offset: 24447}, + pos: position{line: 1009, col: 75, offset: 24336}, val: "]", ignoreCase: false, want: "\"]\"", @@ -6993,49 +6956,49 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1026, col: 5, offset: 24686}, + pos: position{line: 1021, col: 5, offset: 24575}, run: (*parser).callonDerefExpr18, expr: &seqExpr{ - pos: position{line: 1026, col: 5, offset: 24686}, + pos: position{line: 1021, col: 5, offset: 24575}, exprs: []any{ &labeledExpr{ - pos: position{line: 1026, col: 5, offset: 24686}, + pos: position{line: 1021, col: 5, offset: 24575}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 1026, col: 10, offset: 24691}, + pos: position{line: 1021, col: 10, offset: 24580}, name: "DerefExpr", }, }, &litMatcher{ - pos: position{line: 1026, col: 20, offset: 24701}, + pos: position{line: 1021, col: 20, offset: 24590}, val: "[", ignoreCase: false, want: "\"[\"", }, &ruleRefExpr{ - pos: position{line: 1026, col: 24, offset: 24705}, + pos: position{line: 1021, col: 24, offset: 24594}, name: "__", }, &litMatcher{ - pos: position{line: 1026, col: 27, offset: 24708}, + pos: position{line: 1021, col: 27, offset: 24597}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1026, col: 31, offset: 24712}, + pos: position{line: 1021, col: 31, offset: 24601}, name: "__", }, &labeledExpr{ - pos: position{line: 1026, col: 34, offset: 24715}, + pos: position{line: 1021, col: 34, offset: 24604}, label: "to", expr: &ruleRefExpr{ - pos: position{line: 1026, col: 37, offset: 24718}, + pos: position{line: 1021, col: 37, offset: 24607}, name: "AdditiveExpr", }, }, &litMatcher{ - pos: position{line: 1026, col: 50, offset: 24731}, + pos: position{line: 1021, col: 50, offset: 24620}, val: "]", ignoreCase: false, want: "\"]\"", @@ -7044,35 +7007,35 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1034, col: 5, offset: 24895}, + pos: position{line: 1029, col: 5, offset: 24784}, run: (*parser).callonDerefExpr29, expr: &seqExpr{ - pos: position{line: 1034, col: 5, offset: 24895}, + pos: position{line: 1029, col: 5, offset: 24784}, exprs: []any{ &labeledExpr{ - pos: position{line: 1034, col: 5, offset: 24895}, + pos: position{line: 1029, col: 5, offset: 24784}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 1034, col: 10, offset: 24900}, + pos: position{line: 1029, col: 10, offset: 24789}, name: "DerefExpr", }, }, &litMatcher{ - pos: position{line: 1034, col: 20, offset: 24910}, + pos: position{line: 1029, col: 20, offset: 24799}, val: "[", ignoreCase: false, want: "\"[\"", }, &labeledExpr{ - pos: position{line: 1034, col: 24, offset: 24914}, + pos: position{line: 1029, col: 24, offset: 24803}, label: "index", expr: &ruleRefExpr{ - pos: position{line: 1034, col: 30, offset: 24920}, + pos: position{line: 1029, col: 30, offset: 24809}, name: "Expr", }, }, &litMatcher{ - pos: position{line: 1034, col: 35, offset: 24925}, + pos: position{line: 1029, col: 35, offset: 24814}, val: "]", ignoreCase: false, want: "\"]\"", @@ -7081,30 +7044,30 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1042, col: 5, offset: 25095}, + pos: position{line: 1037, col: 5, offset: 24984}, run: (*parser).callonDerefExpr37, expr: &seqExpr{ - pos: position{line: 1042, col: 5, offset: 25095}, + pos: position{line: 1037, col: 5, offset: 24984}, exprs: []any{ &labeledExpr{ - pos: position{line: 1042, col: 5, offset: 25095}, + pos: position{line: 1037, col: 5, offset: 24984}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 1042, col: 10, offset: 25100}, + pos: position{line: 1037, col: 10, offset: 24989}, name: "DerefExpr", }, }, &litMatcher{ - pos: position{line: 1042, col: 20, offset: 25110}, + pos: position{line: 1037, col: 20, offset: 24999}, val: ".", ignoreCase: false, want: "\".\"", }, &labeledExpr{ - pos: position{line: 1042, col: 24, offset: 25114}, + pos: position{line: 1037, col: 24, offset: 25003}, label: "id", expr: &ruleRefExpr{ - pos: position{line: 1042, col: 27, offset: 25117}, + pos: position{line: 1037, col: 27, offset: 25006}, name: "Identifier", }, }, @@ -7112,11 +7075,11 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1051, col: 5, offset: 25307}, + pos: position{line: 1046, col: 5, offset: 25196}, name: "FuncExpr", }, &ruleRefExpr{ - pos: position{line: 1052, col: 5, offset: 25320}, + pos: position{line: 1047, col: 5, offset: 25209}, name: "Primary", }, }, @@ -7126,16 +7089,16 @@ var g = &grammar{ }, { name: "FuncExpr", - pos: position{line: 1054, col: 1, offset: 25329}, + pos: position{line: 1049, col: 1, offset: 25218}, expr: &choiceExpr{ - pos: position{line: 1055, col: 5, offset: 25342}, + pos: position{line: 1050, col: 5, offset: 25231}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1055, col: 5, offset: 25342}, + pos: position{line: 1050, col: 5, offset: 25231}, name: "Cast", }, &ruleRefExpr{ - pos: position{line: 1056, col: 5, offset: 25351}, + pos: position{line: 1051, col: 5, offset: 25240}, name: "Function", }, }, @@ -7145,20 +7108,20 @@ var g = &grammar{ }, { name: "FuncGuard", - pos: position{line: 1058, col: 1, offset: 25361}, + pos: position{line: 1053, col: 1, offset: 25250}, expr: &seqExpr{ - pos: position{line: 1058, col: 13, offset: 25373}, + pos: position{line: 1053, col: 13, offset: 25262}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1058, col: 13, offset: 25373}, + pos: position{line: 1053, col: 13, offset: 25262}, name: "NotFuncs", }, &ruleRefExpr{ - pos: position{line: 1058, col: 22, offset: 25382}, + pos: position{line: 1053, col: 22, offset: 25271}, name: "__", }, &litMatcher{ - pos: position{line: 1058, col: 25, offset: 25385}, + pos: position{line: 1053, col: 25, offset: 25274}, val: "(", ignoreCase: false, want: "\"(\"", @@ -7170,16 +7133,16 @@ var g = &grammar{ }, { name: "NotFuncs", - pos: position{line: 1060, col: 1, offset: 25390}, + pos: position{line: 1055, col: 1, offset: 25279}, expr: &choiceExpr{ - pos: position{line: 1061, col: 5, offset: 25403}, + pos: position{line: 1056, col: 5, offset: 25292}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1061, col: 5, offset: 25403}, + pos: position{line: 1056, col: 5, offset: 25292}, name: "NOT", }, &ruleRefExpr{ - pos: position{line: 1062, col: 5, offset: 25411}, + pos: position{line: 1057, col: 5, offset: 25300}, name: "SELECT", }, }, @@ -7189,58 +7152,58 @@ var g = &grammar{ }, { name: "Cast", - pos: position{line: 1064, col: 1, offset: 25419}, + pos: position{line: 1059, col: 1, offset: 25308}, expr: &actionExpr{ - pos: position{line: 1065, col: 5, offset: 25428}, + pos: position{line: 1060, col: 5, offset: 25317}, run: (*parser).callonCast1, expr: &seqExpr{ - pos: position{line: 1065, col: 5, offset: 25428}, + pos: position{line: 1060, col: 5, offset: 25317}, exprs: []any{ &labeledExpr{ - pos: position{line: 1065, col: 5, offset: 25428}, + pos: position{line: 1060, col: 5, offset: 25317}, label: "typ", expr: &ruleRefExpr{ - pos: position{line: 1065, col: 9, offset: 25432}, + pos: position{line: 1060, col: 9, offset: 25321}, name: "TypeLiteral", }, }, &ruleRefExpr{ - pos: position{line: 1065, col: 21, offset: 25444}, + pos: position{line: 1060, col: 21, offset: 25333}, name: "__", }, &litMatcher{ - pos: position{line: 1065, col: 24, offset: 25447}, + pos: position{line: 1060, col: 24, offset: 25336}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1065, col: 28, offset: 25451}, + pos: position{line: 1060, col: 28, offset: 25340}, name: "__", }, &labeledExpr{ - pos: position{line: 1065, col: 31, offset: 25454}, + pos: position{line: 1060, col: 31, offset: 25343}, label: "expr", expr: &choiceExpr{ - pos: position{line: 1065, col: 37, offset: 25460}, + pos: position{line: 1060, col: 37, offset: 25349}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1065, col: 37, offset: 25460}, + pos: position{line: 1060, col: 37, offset: 25349}, name: "OverExpr", }, &ruleRefExpr{ - pos: position{line: 1065, col: 48, offset: 25471}, + pos: position{line: 1060, col: 48, offset: 25360}, name: "Expr", }, }, }, }, &ruleRefExpr{ - pos: position{line: 1065, col: 54, offset: 25477}, + pos: position{line: 1060, col: 54, offset: 25366}, name: "__", }, &litMatcher{ - pos: position{line: 1065, col: 57, offset: 25480}, + pos: position{line: 1060, col: 57, offset: 25369}, val: ")", ignoreCase: false, want: "\")\"", @@ -7253,85 +7216,85 @@ var g = &grammar{ }, { name: "Function", - pos: position{line: 1069, col: 1, offset: 25593}, + pos: position{line: 1064, col: 1, offset: 25482}, expr: &choiceExpr{ - pos: position{line: 1070, col: 5, offset: 25606}, + pos: position{line: 1065, col: 5, offset: 25495}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1070, col: 5, offset: 25606}, + pos: position{line: 1065, col: 5, offset: 25495}, name: "Grep", }, &actionExpr{ - pos: position{line: 1072, col: 5, offset: 25693}, + pos: position{line: 1067, col: 5, offset: 25582}, run: (*parser).callonFunction3, expr: &seqExpr{ - pos: position{line: 1072, col: 5, offset: 25693}, + pos: position{line: 1067, col: 5, offset: 25582}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1072, col: 5, offset: 25693}, + pos: position{line: 1067, col: 5, offset: 25582}, name: "REGEXP", }, &ruleRefExpr{ - pos: position{line: 1072, col: 12, offset: 25700}, + pos: position{line: 1067, col: 12, offset: 25589}, name: "__", }, &litMatcher{ - pos: position{line: 1072, col: 15, offset: 25703}, + pos: position{line: 1067, col: 15, offset: 25592}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1072, col: 19, offset: 25707}, + pos: position{line: 1067, col: 19, offset: 25596}, name: "__", }, &labeledExpr{ - pos: position{line: 1072, col: 22, offset: 25710}, + pos: position{line: 1067, col: 22, offset: 25599}, label: "arg0", expr: &ruleRefExpr{ - pos: position{line: 1072, col: 27, offset: 25715}, + pos: position{line: 1067, col: 27, offset: 25604}, name: "RegexpPrimitive", }, }, &ruleRefExpr{ - pos: position{line: 1072, col: 43, offset: 25731}, + pos: position{line: 1067, col: 43, offset: 25620}, name: "__", }, &litMatcher{ - pos: position{line: 1072, col: 46, offset: 25734}, + pos: position{line: 1067, col: 46, offset: 25623}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1072, col: 50, offset: 25738}, + pos: position{line: 1067, col: 50, offset: 25627}, name: "__", }, &labeledExpr{ - pos: position{line: 1072, col: 53, offset: 25741}, + pos: position{line: 1067, col: 53, offset: 25630}, label: "arg1", expr: &ruleRefExpr{ - pos: position{line: 1072, col: 58, offset: 25746}, + pos: position{line: 1067, col: 58, offset: 25635}, name: "Expr", }, }, &ruleRefExpr{ - pos: position{line: 1072, col: 63, offset: 25751}, + pos: position{line: 1067, col: 63, offset: 25640}, name: "__", }, &litMatcher{ - pos: position{line: 1072, col: 66, offset: 25754}, + pos: position{line: 1067, col: 66, offset: 25643}, val: ")", ignoreCase: false, want: "\")\"", }, &labeledExpr{ - pos: position{line: 1072, col: 70, offset: 25758}, + pos: position{line: 1067, col: 70, offset: 25647}, label: "where", expr: &zeroOrOneExpr{ - pos: position{line: 1072, col: 76, offset: 25764}, + pos: position{line: 1067, col: 76, offset: 25653}, expr: &ruleRefExpr{ - pos: position{line: 1072, col: 76, offset: 25764}, + pos: position{line: 1067, col: 76, offset: 25653}, name: "WhereClause", }, }, @@ -7340,98 +7303,98 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1076, col: 5, offset: 25943}, + pos: position{line: 1071, col: 5, offset: 25832}, run: (*parser).callonFunction21, expr: &seqExpr{ - pos: position{line: 1076, col: 5, offset: 25943}, + pos: position{line: 1071, col: 5, offset: 25832}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1076, col: 5, offset: 25943}, + pos: position{line: 1071, col: 5, offset: 25832}, name: "REGEXP_REPLACE", }, &ruleRefExpr{ - pos: position{line: 1076, col: 20, offset: 25958}, + pos: position{line: 1071, col: 20, offset: 25847}, name: "__", }, &litMatcher{ - pos: position{line: 1076, col: 23, offset: 25961}, + pos: position{line: 1071, col: 23, offset: 25850}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1076, col: 27, offset: 25965}, + pos: position{line: 1071, col: 27, offset: 25854}, name: "__", }, &labeledExpr{ - pos: position{line: 1076, col: 30, offset: 25968}, + pos: position{line: 1071, col: 30, offset: 25857}, label: "arg0", expr: &ruleRefExpr{ - pos: position{line: 1076, col: 35, offset: 25973}, + pos: position{line: 1071, col: 35, offset: 25862}, name: "Expr", }, }, &ruleRefExpr{ - pos: position{line: 1076, col: 40, offset: 25978}, + pos: position{line: 1071, col: 40, offset: 25867}, name: "__", }, &litMatcher{ - pos: position{line: 1076, col: 43, offset: 25981}, + pos: position{line: 1071, col: 43, offset: 25870}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1076, col: 47, offset: 25985}, + pos: position{line: 1071, col: 47, offset: 25874}, name: "__", }, &labeledExpr{ - pos: position{line: 1076, col: 50, offset: 25988}, + pos: position{line: 1071, col: 50, offset: 25877}, label: "arg1", expr: &ruleRefExpr{ - pos: position{line: 1076, col: 55, offset: 25993}, + pos: position{line: 1071, col: 55, offset: 25882}, name: "RegexpPrimitive", }, }, &ruleRefExpr{ - pos: position{line: 1076, col: 71, offset: 26009}, + pos: position{line: 1071, col: 71, offset: 25898}, name: "__", }, &litMatcher{ - pos: position{line: 1076, col: 74, offset: 26012}, + pos: position{line: 1071, col: 74, offset: 25901}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1076, col: 78, offset: 26016}, + pos: position{line: 1071, col: 78, offset: 25905}, name: "__", }, &labeledExpr{ - pos: position{line: 1076, col: 81, offset: 26019}, + pos: position{line: 1071, col: 81, offset: 25908}, label: "arg2", expr: &ruleRefExpr{ - pos: position{line: 1076, col: 86, offset: 26024}, + pos: position{line: 1071, col: 86, offset: 25913}, name: "Expr", }, }, &ruleRefExpr{ - pos: position{line: 1076, col: 91, offset: 26029}, + pos: position{line: 1071, col: 91, offset: 25918}, name: "__", }, &litMatcher{ - pos: position{line: 1076, col: 94, offset: 26032}, + pos: position{line: 1071, col: 94, offset: 25921}, val: ")", ignoreCase: false, want: "\")\"", }, &labeledExpr{ - pos: position{line: 1076, col: 98, offset: 26036}, + pos: position{line: 1071, col: 98, offset: 25925}, label: "where", expr: &zeroOrOneExpr{ - pos: position{line: 1076, col: 104, offset: 26042}, + pos: position{line: 1071, col: 104, offset: 25931}, expr: &ruleRefExpr{ - pos: position{line: 1076, col: 104, offset: 26042}, + pos: position{line: 1071, col: 104, offset: 25931}, name: "WhereClause", }, }, @@ -7440,65 +7403,65 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1080, col: 5, offset: 26236}, + pos: position{line: 1075, col: 5, offset: 26125}, run: (*parser).callonFunction44, expr: &seqExpr{ - pos: position{line: 1080, col: 5, offset: 26236}, + pos: position{line: 1075, col: 5, offset: 26125}, exprs: []any{ ¬Expr{ - pos: position{line: 1080, col: 5, offset: 26236}, + pos: position{line: 1075, col: 5, offset: 26125}, expr: &ruleRefExpr{ - pos: position{line: 1080, col: 6, offset: 26237}, + pos: position{line: 1075, col: 6, offset: 26126}, name: "FuncGuard", }, }, &labeledExpr{ - pos: position{line: 1080, col: 16, offset: 26247}, + pos: position{line: 1075, col: 16, offset: 26136}, label: "fn", expr: &ruleRefExpr{ - pos: position{line: 1080, col: 19, offset: 26250}, + pos: position{line: 1075, col: 19, offset: 26139}, name: "Identifier", }, }, &ruleRefExpr{ - pos: position{line: 1080, col: 30, offset: 26261}, + pos: position{line: 1075, col: 30, offset: 26150}, name: "__", }, &litMatcher{ - pos: position{line: 1080, col: 33, offset: 26264}, + pos: position{line: 1075, col: 33, offset: 26153}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1080, col: 37, offset: 26268}, + pos: position{line: 1075, col: 37, offset: 26157}, name: "__", }, &labeledExpr{ - pos: position{line: 1080, col: 40, offset: 26271}, + pos: position{line: 1075, col: 40, offset: 26160}, label: "args", expr: &ruleRefExpr{ - pos: position{line: 1080, col: 45, offset: 26276}, + pos: position{line: 1075, col: 45, offset: 26165}, name: "FunctionArgs", }, }, &ruleRefExpr{ - pos: position{line: 1080, col: 58, offset: 26289}, + pos: position{line: 1075, col: 58, offset: 26178}, name: "__", }, &litMatcher{ - pos: position{line: 1080, col: 61, offset: 26292}, + pos: position{line: 1075, col: 61, offset: 26181}, val: ")", ignoreCase: false, want: "\")\"", }, &labeledExpr{ - pos: position{line: 1080, col: 65, offset: 26296}, + pos: position{line: 1075, col: 65, offset: 26185}, label: "where", expr: &zeroOrOneExpr{ - pos: position{line: 1080, col: 71, offset: 26302}, + pos: position{line: 1075, col: 71, offset: 26191}, expr: &ruleRefExpr{ - pos: position{line: 1080, col: 71, offset: 26302}, + pos: position{line: 1075, col: 71, offset: 26191}, name: "WhereClause", }, }, @@ -7507,7 +7470,7 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1083, col: 5, offset: 26373}, + pos: position{line: 1078, col: 5, offset: 26262}, name: "CountStar", }, }, @@ -7517,15 +7480,15 @@ var g = &grammar{ }, { name: "RegexpPrimitive", - pos: position{line: 1085, col: 1, offset: 26384}, + pos: position{line: 1080, col: 1, offset: 26273}, expr: &actionExpr{ - pos: position{line: 1086, col: 5, offset: 26404}, + pos: position{line: 1081, col: 5, offset: 26293}, run: (*parser).callonRegexpPrimitive1, expr: &labeledExpr{ - pos: position{line: 1086, col: 5, offset: 26404}, + pos: position{line: 1081, col: 5, offset: 26293}, label: "pat", expr: &ruleRefExpr{ - pos: position{line: 1086, col: 9, offset: 26408}, + pos: position{line: 1081, col: 9, offset: 26297}, name: "RegexpPattern", }, }, @@ -7535,24 +7498,24 @@ var g = &grammar{ }, { name: "FunctionArgs", - pos: position{line: 1088, col: 1, offset: 26479}, + pos: position{line: 1083, col: 1, offset: 26368}, expr: &choiceExpr{ - pos: position{line: 1089, col: 5, offset: 26496}, + pos: position{line: 1084, col: 5, offset: 26385}, alternatives: []any{ &actionExpr{ - pos: position{line: 1089, col: 5, offset: 26496}, + pos: position{line: 1084, col: 5, offset: 26385}, run: (*parser).callonFunctionArgs2, expr: &labeledExpr{ - pos: position{line: 1089, col: 5, offset: 26496}, + pos: position{line: 1084, col: 5, offset: 26385}, label: "o", expr: &ruleRefExpr{ - pos: position{line: 1089, col: 7, offset: 26498}, + pos: position{line: 1084, col: 7, offset: 26387}, name: "OverExpr", }, }, }, &ruleRefExpr{ - pos: position{line: 1090, col: 5, offset: 26536}, + pos: position{line: 1085, col: 5, offset: 26425}, name: "OptionalExprs", }, }, @@ -7562,96 +7525,96 @@ var g = &grammar{ }, { name: "Grep", - pos: position{line: 1092, col: 1, offset: 26551}, + pos: position{line: 1087, col: 1, offset: 26440}, expr: &actionExpr{ - pos: position{line: 1093, col: 5, offset: 26560}, + pos: position{line: 1088, col: 5, offset: 26449}, run: (*parser).callonGrep1, expr: &seqExpr{ - pos: position{line: 1093, col: 5, offset: 26560}, + pos: position{line: 1088, col: 5, offset: 26449}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1093, col: 5, offset: 26560}, + pos: position{line: 1088, col: 5, offset: 26449}, name: "GREP", }, &ruleRefExpr{ - pos: position{line: 1093, col: 10, offset: 26565}, + pos: position{line: 1088, col: 10, offset: 26454}, name: "__", }, &litMatcher{ - pos: position{line: 1093, col: 13, offset: 26568}, + pos: position{line: 1088, col: 13, offset: 26457}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1093, col: 17, offset: 26572}, + pos: position{line: 1088, col: 17, offset: 26461}, name: "__", }, &labeledExpr{ - pos: position{line: 1093, col: 20, offset: 26575}, + pos: position{line: 1088, col: 20, offset: 26464}, label: "pattern", expr: &choiceExpr{ - pos: position{line: 1093, col: 29, offset: 26584}, + pos: position{line: 1088, col: 29, offset: 26473}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1093, col: 29, offset: 26584}, + pos: position{line: 1088, col: 29, offset: 26473}, name: "Regexp", }, &ruleRefExpr{ - pos: position{line: 1093, col: 38, offset: 26593}, + pos: position{line: 1088, col: 38, offset: 26482}, name: "Glob", }, &ruleRefExpr{ - pos: position{line: 1093, col: 45, offset: 26600}, + pos: position{line: 1088, col: 45, offset: 26489}, name: "Expr", }, }, }, }, &ruleRefExpr{ - pos: position{line: 1093, col: 51, offset: 26606}, + pos: position{line: 1088, col: 51, offset: 26495}, name: "__", }, &labeledExpr{ - pos: position{line: 1093, col: 54, offset: 26609}, + pos: position{line: 1088, col: 54, offset: 26498}, label: "opt", expr: &zeroOrOneExpr{ - pos: position{line: 1093, col: 58, offset: 26613}, + pos: position{line: 1088, col: 58, offset: 26502}, expr: &actionExpr{ - pos: position{line: 1093, col: 59, offset: 26614}, + pos: position{line: 1088, col: 59, offset: 26503}, run: (*parser).callonGrep15, expr: &seqExpr{ - pos: position{line: 1093, col: 59, offset: 26614}, + pos: position{line: 1088, col: 59, offset: 26503}, exprs: []any{ &litMatcher{ - pos: position{line: 1093, col: 59, offset: 26614}, + pos: position{line: 1088, col: 59, offset: 26503}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1093, col: 63, offset: 26618}, + pos: position{line: 1088, col: 63, offset: 26507}, name: "__", }, &labeledExpr{ - pos: position{line: 1093, col: 66, offset: 26621}, + pos: position{line: 1088, col: 66, offset: 26510}, label: "e", expr: &choiceExpr{ - pos: position{line: 1093, col: 69, offset: 26624}, + pos: position{line: 1088, col: 69, offset: 26513}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1093, col: 69, offset: 26624}, + pos: position{line: 1088, col: 69, offset: 26513}, name: "OverExpr", }, &ruleRefExpr{ - pos: position{line: 1093, col: 80, offset: 26635}, + pos: position{line: 1088, col: 80, offset: 26524}, name: "Expr", }, }, }, }, &ruleRefExpr{ - pos: position{line: 1093, col: 86, offset: 26641}, + pos: position{line: 1088, col: 86, offset: 26530}, name: "__", }, }, @@ -7660,7 +7623,7 @@ var g = &grammar{ }, }, &litMatcher{ - pos: position{line: 1093, col: 109, offset: 26664}, + pos: position{line: 1088, col: 109, offset: 26553}, val: ")", ignoreCase: false, want: "\")\"", @@ -7673,19 +7636,19 @@ var g = &grammar{ }, { name: "OptionalExprs", - pos: position{line: 1105, col: 1, offset: 26877}, + pos: position{line: 1100, col: 1, offset: 26766}, expr: &choiceExpr{ - pos: position{line: 1106, col: 5, offset: 26895}, + pos: position{line: 1101, col: 5, offset: 26784}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1106, col: 5, offset: 26895}, + pos: position{line: 1101, col: 5, offset: 26784}, name: "Exprs", }, &actionExpr{ - pos: position{line: 1107, col: 5, offset: 26905}, + pos: position{line: 1102, col: 5, offset: 26794}, run: (*parser).callonOptionalExprs3, expr: &ruleRefExpr{ - pos: position{line: 1107, col: 5, offset: 26905}, + pos: position{line: 1102, col: 5, offset: 26794}, name: "__", }, }, @@ -7696,51 +7659,51 @@ var g = &grammar{ }, { name: "Exprs", - pos: position{line: 1109, col: 1, offset: 26933}, + pos: position{line: 1104, col: 1, offset: 26822}, expr: &actionExpr{ - pos: position{line: 1110, col: 5, offset: 26943}, + pos: position{line: 1105, col: 5, offset: 26832}, run: (*parser).callonExprs1, expr: &seqExpr{ - pos: position{line: 1110, col: 5, offset: 26943}, + pos: position{line: 1105, col: 5, offset: 26832}, exprs: []any{ &labeledExpr{ - pos: position{line: 1110, col: 5, offset: 26943}, + pos: position{line: 1105, col: 5, offset: 26832}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1110, col: 11, offset: 26949}, + pos: position{line: 1105, col: 11, offset: 26838}, name: "Expr", }, }, &labeledExpr{ - pos: position{line: 1110, col: 16, offset: 26954}, + pos: position{line: 1105, col: 16, offset: 26843}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 1110, col: 21, offset: 26959}, + pos: position{line: 1105, col: 21, offset: 26848}, expr: &actionExpr{ - pos: position{line: 1110, col: 22, offset: 26960}, + pos: position{line: 1105, col: 22, offset: 26849}, run: (*parser).callonExprs7, expr: &seqExpr{ - pos: position{line: 1110, col: 22, offset: 26960}, + pos: position{line: 1105, col: 22, offset: 26849}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1110, col: 22, offset: 26960}, + pos: position{line: 1105, col: 22, offset: 26849}, name: "__", }, &litMatcher{ - pos: position{line: 1110, col: 25, offset: 26963}, + pos: position{line: 1105, col: 25, offset: 26852}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1110, col: 29, offset: 26967}, + pos: position{line: 1105, col: 29, offset: 26856}, name: "__", }, &labeledExpr{ - pos: position{line: 1110, col: 32, offset: 26970}, + pos: position{line: 1105, col: 32, offset: 26859}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 1110, col: 34, offset: 26972}, + pos: position{line: 1105, col: 34, offset: 26861}, name: "Expr", }, }, @@ -7757,52 +7720,52 @@ var g = &grammar{ }, { name: "Primary", - pos: position{line: 1114, col: 1, offset: 27045}, + pos: position{line: 1109, col: 1, offset: 26934}, expr: &choiceExpr{ - pos: position{line: 1115, col: 5, offset: 27057}, + pos: position{line: 1110, col: 5, offset: 26946}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1115, col: 5, offset: 27057}, + pos: position{line: 1110, col: 5, offset: 26946}, name: "CaseExpr", }, &ruleRefExpr{ - pos: position{line: 1116, col: 5, offset: 27070}, + pos: position{line: 1111, col: 5, offset: 26959}, name: "Record", }, &ruleRefExpr{ - pos: position{line: 1117, col: 5, offset: 27081}, + pos: position{line: 1112, col: 5, offset: 26970}, name: "Array", }, &ruleRefExpr{ - pos: position{line: 1118, col: 5, offset: 27091}, + pos: position{line: 1113, col: 5, offset: 26980}, name: "Set", }, &ruleRefExpr{ - pos: position{line: 1119, col: 5, offset: 27099}, + pos: position{line: 1114, col: 5, offset: 26988}, name: "Map", }, &ruleRefExpr{ - pos: position{line: 1120, col: 5, offset: 27107}, + pos: position{line: 1115, col: 5, offset: 26996}, name: "Literal", }, &actionExpr{ - pos: position{line: 1121, col: 5, offset: 27119}, + pos: position{line: 1116, col: 5, offset: 27008}, run: (*parser).callonPrimary8, expr: &seqExpr{ - pos: position{line: 1121, col: 5, offset: 27119}, + pos: position{line: 1116, col: 5, offset: 27008}, exprs: []any{ ¬Expr{ - pos: position{line: 1121, col: 5, offset: 27119}, + pos: position{line: 1116, col: 5, offset: 27008}, expr: &ruleRefExpr{ - pos: position{line: 1121, col: 6, offset: 27120}, + pos: position{line: 1116, col: 6, offset: 27009}, name: "PipeKeyword", }, }, &labeledExpr{ - pos: position{line: 1121, col: 18, offset: 27132}, + pos: position{line: 1116, col: 18, offset: 27021}, label: "id", expr: &ruleRefExpr{ - pos: position{line: 1121, col: 21, offset: 27135}, + pos: position{line: 1116, col: 21, offset: 27024}, name: "Identifier", }, }, @@ -7810,39 +7773,39 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1122, col: 5, offset: 27169}, + pos: position{line: 1117, col: 5, offset: 27058}, name: "Tuple", }, &actionExpr{ - pos: position{line: 1123, col: 5, offset: 27179}, + pos: position{line: 1118, col: 5, offset: 27068}, run: (*parser).callonPrimary15, expr: &seqExpr{ - pos: position{line: 1123, col: 5, offset: 27179}, + pos: position{line: 1118, col: 5, offset: 27068}, exprs: []any{ &litMatcher{ - pos: position{line: 1123, col: 5, offset: 27179}, + pos: position{line: 1118, col: 5, offset: 27068}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1123, col: 9, offset: 27183}, + pos: position{line: 1118, col: 9, offset: 27072}, name: "__", }, &labeledExpr{ - pos: position{line: 1123, col: 12, offset: 27186}, + pos: position{line: 1118, col: 12, offset: 27075}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 1123, col: 17, offset: 27191}, + pos: position{line: 1118, col: 17, offset: 27080}, name: "OverExpr", }, }, &ruleRefExpr{ - pos: position{line: 1123, col: 26, offset: 27200}, + pos: position{line: 1118, col: 26, offset: 27089}, name: "__", }, &litMatcher{ - pos: position{line: 1123, col: 29, offset: 27203}, + pos: position{line: 1118, col: 29, offset: 27092}, val: ")", ignoreCase: false, want: "\")\"", @@ -7851,35 +7814,35 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1124, col: 5, offset: 27232}, + pos: position{line: 1119, col: 5, offset: 27121}, run: (*parser).callonPrimary23, expr: &seqExpr{ - pos: position{line: 1124, col: 5, offset: 27232}, + pos: position{line: 1119, col: 5, offset: 27121}, exprs: []any{ &litMatcher{ - pos: position{line: 1124, col: 5, offset: 27232}, + pos: position{line: 1119, col: 5, offset: 27121}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1124, col: 9, offset: 27236}, + pos: position{line: 1119, col: 9, offset: 27125}, name: "__", }, &labeledExpr{ - pos: position{line: 1124, col: 12, offset: 27239}, + pos: position{line: 1119, col: 12, offset: 27128}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 1124, col: 17, offset: 27244}, + pos: position{line: 1119, col: 17, offset: 27133}, name: "Expr", }, }, &ruleRefExpr{ - pos: position{line: 1124, col: 22, offset: 27249}, + pos: position{line: 1119, col: 22, offset: 27138}, name: "__", }, &litMatcher{ - pos: position{line: 1124, col: 25, offset: 27252}, + pos: position{line: 1119, col: 25, offset: 27141}, val: ")", ignoreCase: false, want: "\")\"", @@ -7894,53 +7857,53 @@ var g = &grammar{ }, { name: "CaseExpr", - pos: position{line: 1126, col: 1, offset: 27278}, + pos: position{line: 1121, col: 1, offset: 27167}, expr: &choiceExpr{ - pos: position{line: 1127, col: 5, offset: 27291}, + pos: position{line: 1122, col: 5, offset: 27180}, alternatives: []any{ &actionExpr{ - pos: position{line: 1127, col: 5, offset: 27291}, + pos: position{line: 1122, col: 5, offset: 27180}, run: (*parser).callonCaseExpr2, expr: &seqExpr{ - pos: position{line: 1127, col: 5, offset: 27291}, + pos: position{line: 1122, col: 5, offset: 27180}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1127, col: 5, offset: 27291}, + pos: position{line: 1122, col: 5, offset: 27180}, name: "CASE", }, &labeledExpr{ - pos: position{line: 1127, col: 10, offset: 27296}, + pos: position{line: 1122, col: 10, offset: 27185}, label: "cases", expr: &oneOrMoreExpr{ - pos: position{line: 1127, col: 16, offset: 27302}, + pos: position{line: 1122, col: 16, offset: 27191}, expr: &ruleRefExpr{ - pos: position{line: 1127, col: 16, offset: 27302}, + pos: position{line: 1122, col: 16, offset: 27191}, name: "When", }, }, }, &labeledExpr{ - pos: position{line: 1127, col: 22, offset: 27308}, + pos: position{line: 1122, col: 22, offset: 27197}, label: "else_", expr: &zeroOrOneExpr{ - pos: position{line: 1127, col: 28, offset: 27314}, + pos: position{line: 1122, col: 28, offset: 27203}, expr: &seqExpr{ - pos: position{line: 1127, col: 29, offset: 27315}, + pos: position{line: 1122, col: 29, offset: 27204}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1127, col: 29, offset: 27315}, + pos: position{line: 1122, col: 29, offset: 27204}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1127, col: 31, offset: 27317}, + pos: position{line: 1122, col: 31, offset: 27206}, name: "ELSE", }, &ruleRefExpr{ - pos: position{line: 1127, col: 36, offset: 27322}, + pos: position{line: 1122, col: 36, offset: 27211}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1127, col: 38, offset: 27324}, + pos: position{line: 1122, col: 38, offset: 27213}, name: "Expr", }, }, @@ -7948,24 +7911,24 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1127, col: 45, offset: 27331}, + pos: position{line: 1122, col: 45, offset: 27220}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1127, col: 47, offset: 27333}, + pos: position{line: 1122, col: 47, offset: 27222}, name: "END", }, &zeroOrOneExpr{ - pos: position{line: 1127, col: 51, offset: 27337}, + pos: position{line: 1122, col: 51, offset: 27226}, expr: &seqExpr{ - pos: position{line: 1127, col: 52, offset: 27338}, + pos: position{line: 1122, col: 52, offset: 27227}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1127, col: 52, offset: 27338}, + pos: position{line: 1122, col: 52, offset: 27227}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1127, col: 54, offset: 27340}, + pos: position{line: 1122, col: 54, offset: 27229}, name: "CASE", }, }, @@ -7975,60 +7938,60 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1151, col: 5, offset: 27989}, + pos: position{line: 1146, col: 5, offset: 27878}, run: (*parser).callonCaseExpr21, expr: &seqExpr{ - pos: position{line: 1151, col: 5, offset: 27989}, + pos: position{line: 1146, col: 5, offset: 27878}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1151, col: 5, offset: 27989}, + pos: position{line: 1146, col: 5, offset: 27878}, name: "CASE", }, &ruleRefExpr{ - pos: position{line: 1151, col: 10, offset: 27994}, + pos: position{line: 1146, col: 10, offset: 27883}, name: "_", }, &labeledExpr{ - pos: position{line: 1151, col: 12, offset: 27996}, + pos: position{line: 1146, col: 12, offset: 27885}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 1151, col: 17, offset: 28001}, + pos: position{line: 1146, col: 17, offset: 27890}, name: "Expr", }, }, &labeledExpr{ - pos: position{line: 1151, col: 22, offset: 28006}, + pos: position{line: 1146, col: 22, offset: 27895}, label: "whens", expr: &oneOrMoreExpr{ - pos: position{line: 1151, col: 28, offset: 28012}, + pos: position{line: 1146, col: 28, offset: 27901}, expr: &ruleRefExpr{ - pos: position{line: 1151, col: 28, offset: 28012}, + pos: position{line: 1146, col: 28, offset: 27901}, name: "When", }, }, }, &labeledExpr{ - pos: position{line: 1151, col: 34, offset: 28018}, + pos: position{line: 1146, col: 34, offset: 27907}, label: "else_", expr: &zeroOrOneExpr{ - pos: position{line: 1151, col: 40, offset: 28024}, + pos: position{line: 1146, col: 40, offset: 27913}, expr: &seqExpr{ - pos: position{line: 1151, col: 41, offset: 28025}, + pos: position{line: 1146, col: 41, offset: 27914}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1151, col: 41, offset: 28025}, + pos: position{line: 1146, col: 41, offset: 27914}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1151, col: 43, offset: 28027}, + pos: position{line: 1146, col: 43, offset: 27916}, name: "ELSE", }, &ruleRefExpr{ - pos: position{line: 1151, col: 48, offset: 28032}, + pos: position{line: 1146, col: 48, offset: 27921}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1151, col: 50, offset: 28034}, + pos: position{line: 1146, col: 50, offset: 27923}, name: "Expr", }, }, @@ -8036,24 +7999,24 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1151, col: 57, offset: 28041}, + pos: position{line: 1146, col: 57, offset: 27930}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1151, col: 59, offset: 28043}, + pos: position{line: 1146, col: 59, offset: 27932}, name: "END", }, &zeroOrOneExpr{ - pos: position{line: 1151, col: 63, offset: 28047}, + pos: position{line: 1146, col: 63, offset: 27936}, expr: &seqExpr{ - pos: position{line: 1151, col: 64, offset: 28048}, + pos: position{line: 1146, col: 64, offset: 27937}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1151, col: 64, offset: 28048}, + pos: position{line: 1146, col: 64, offset: 27937}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1151, col: 66, offset: 28050}, + pos: position{line: 1146, col: 66, offset: 27939}, name: "CASE", }, }, @@ -8069,50 +8032,50 @@ var g = &grammar{ }, { name: "When", - pos: position{line: 1164, col: 1, offset: 28356}, + pos: position{line: 1159, col: 1, offset: 28245}, expr: &actionExpr{ - pos: position{line: 1165, col: 5, offset: 28365}, + pos: position{line: 1160, col: 5, offset: 28254}, run: (*parser).callonWhen1, expr: &seqExpr{ - pos: position{line: 1165, col: 5, offset: 28365}, + pos: position{line: 1160, col: 5, offset: 28254}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1165, col: 5, offset: 28365}, + pos: position{line: 1160, col: 5, offset: 28254}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1165, col: 7, offset: 28367}, + pos: position{line: 1160, col: 7, offset: 28256}, name: "WHEN", }, &ruleRefExpr{ - pos: position{line: 1165, col: 12, offset: 28372}, + pos: position{line: 1160, col: 12, offset: 28261}, name: "_", }, &labeledExpr{ - pos: position{line: 1165, col: 14, offset: 28374}, + pos: position{line: 1160, col: 14, offset: 28263}, label: "cond", expr: &ruleRefExpr{ - pos: position{line: 1165, col: 19, offset: 28379}, + pos: position{line: 1160, col: 19, offset: 28268}, name: "Expr", }, }, &ruleRefExpr{ - pos: position{line: 1165, col: 24, offset: 28384}, + pos: position{line: 1160, col: 24, offset: 28273}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1165, col: 26, offset: 28386}, + pos: position{line: 1160, col: 26, offset: 28275}, name: "THEN", }, &ruleRefExpr{ - pos: position{line: 1165, col: 31, offset: 28391}, + pos: position{line: 1160, col: 31, offset: 28280}, name: "_", }, &labeledExpr{ - pos: position{line: 1165, col: 33, offset: 28393}, + pos: position{line: 1160, col: 33, offset: 28282}, label: "then", expr: &ruleRefExpr{ - pos: position{line: 1165, col: 38, offset: 28398}, + pos: position{line: 1160, col: 38, offset: 28287}, name: "Expr", }, }, @@ -8124,57 +8087,57 @@ var g = &grammar{ }, { name: "OverExpr", - pos: position{line: 1174, col: 1, offset: 28557}, + pos: position{line: 1169, col: 1, offset: 28446}, expr: &actionExpr{ - pos: position{line: 1175, col: 5, offset: 28570}, + pos: position{line: 1170, col: 5, offset: 28459}, run: (*parser).callonOverExpr1, expr: &seqExpr{ - pos: position{line: 1175, col: 5, offset: 28570}, + pos: position{line: 1170, col: 5, offset: 28459}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1175, col: 5, offset: 28570}, + pos: position{line: 1170, col: 5, offset: 28459}, name: "OVER", }, &ruleRefExpr{ - pos: position{line: 1175, col: 10, offset: 28575}, + pos: position{line: 1170, col: 10, offset: 28464}, name: "_", }, &labeledExpr{ - pos: position{line: 1175, col: 12, offset: 28577}, + pos: position{line: 1170, col: 12, offset: 28466}, label: "exprs", expr: &ruleRefExpr{ - pos: position{line: 1175, col: 18, offset: 28583}, + pos: position{line: 1170, col: 18, offset: 28472}, name: "Exprs", }, }, &labeledExpr{ - pos: position{line: 1175, col: 24, offset: 28589}, + pos: position{line: 1170, col: 24, offset: 28478}, label: "locals", expr: &zeroOrOneExpr{ - pos: position{line: 1175, col: 31, offset: 28596}, + pos: position{line: 1170, col: 31, offset: 28485}, expr: &ruleRefExpr{ - pos: position{line: 1175, col: 31, offset: 28596}, + pos: position{line: 1170, col: 31, offset: 28485}, name: "Locals", }, }, }, &ruleRefExpr{ - pos: position{line: 1175, col: 39, offset: 28604}, + pos: position{line: 1170, col: 39, offset: 28493}, name: "__", }, &ruleRefExpr{ - pos: position{line: 1175, col: 42, offset: 28607}, + pos: position{line: 1170, col: 42, offset: 28496}, name: "Pipe", }, &ruleRefExpr{ - pos: position{line: 1175, col: 47, offset: 28612}, + pos: position{line: 1170, col: 47, offset: 28501}, name: "__", }, &labeledExpr{ - pos: position{line: 1175, col: 50, offset: 28615}, + pos: position{line: 1170, col: 50, offset: 28504}, label: "body", expr: &ruleRefExpr{ - pos: position{line: 1175, col: 55, offset: 28620}, + pos: position{line: 1170, col: 55, offset: 28509}, name: "Seq", }, }, @@ -8186,37 +8149,37 @@ var g = &grammar{ }, { name: "Record", - pos: position{line: 1185, col: 1, offset: 28851}, + pos: position{line: 1180, col: 1, offset: 28740}, expr: &actionExpr{ - pos: position{line: 1186, col: 5, offset: 28862}, + pos: position{line: 1181, col: 5, offset: 28751}, run: (*parser).callonRecord1, expr: &seqExpr{ - pos: position{line: 1186, col: 5, offset: 28862}, + pos: position{line: 1181, col: 5, offset: 28751}, exprs: []any{ &litMatcher{ - pos: position{line: 1186, col: 5, offset: 28862}, + pos: position{line: 1181, col: 5, offset: 28751}, val: "{", ignoreCase: false, want: "\"{\"", }, &ruleRefExpr{ - pos: position{line: 1186, col: 9, offset: 28866}, + pos: position{line: 1181, col: 9, offset: 28755}, name: "__", }, &labeledExpr{ - pos: position{line: 1186, col: 12, offset: 28869}, + pos: position{line: 1181, col: 12, offset: 28758}, label: "elems", expr: &ruleRefExpr{ - pos: position{line: 1186, col: 18, offset: 28875}, + pos: position{line: 1181, col: 18, offset: 28764}, name: "RecordElems", }, }, &ruleRefExpr{ - pos: position{line: 1186, col: 30, offset: 28887}, + pos: position{line: 1181, col: 30, offset: 28776}, name: "__", }, &litMatcher{ - pos: position{line: 1186, col: 33, offset: 28890}, + pos: position{line: 1181, col: 33, offset: 28779}, val: "}", ignoreCase: false, want: "\"}\"", @@ -8229,31 +8192,31 @@ var g = &grammar{ }, { name: "RecordElems", - pos: position{line: 1194, col: 1, offset: 29048}, + pos: position{line: 1189, col: 1, offset: 28937}, expr: &choiceExpr{ - pos: position{line: 1195, col: 5, offset: 29064}, + pos: position{line: 1190, col: 5, offset: 28953}, alternatives: []any{ &actionExpr{ - pos: position{line: 1195, col: 5, offset: 29064}, + pos: position{line: 1190, col: 5, offset: 28953}, run: (*parser).callonRecordElems2, expr: &seqExpr{ - pos: position{line: 1195, col: 5, offset: 29064}, + pos: position{line: 1190, col: 5, offset: 28953}, exprs: []any{ &labeledExpr{ - pos: position{line: 1195, col: 5, offset: 29064}, + pos: position{line: 1190, col: 5, offset: 28953}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1195, col: 11, offset: 29070}, + pos: position{line: 1190, col: 11, offset: 28959}, name: "RecordElem", }, }, &labeledExpr{ - pos: position{line: 1195, col: 22, offset: 29081}, + pos: position{line: 1190, col: 22, offset: 28970}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 1195, col: 27, offset: 29086}, + pos: position{line: 1190, col: 27, offset: 28975}, expr: &ruleRefExpr{ - pos: position{line: 1195, col: 27, offset: 29086}, + pos: position{line: 1190, col: 27, offset: 28975}, name: "RecordElemTail", }, }, @@ -8262,10 +8225,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1198, col: 5, offset: 29149}, + pos: position{line: 1193, col: 5, offset: 29038}, run: (*parser).callonRecordElems9, expr: &ruleRefExpr{ - pos: position{line: 1198, col: 5, offset: 29149}, + pos: position{line: 1193, col: 5, offset: 29038}, name: "__", }, }, @@ -8276,32 +8239,32 @@ var g = &grammar{ }, { name: "RecordElemTail", - pos: position{line: 1200, col: 1, offset: 29173}, + pos: position{line: 1195, col: 1, offset: 29062}, expr: &actionExpr{ - pos: position{line: 1200, col: 18, offset: 29190}, + pos: position{line: 1195, col: 18, offset: 29079}, run: (*parser).callonRecordElemTail1, expr: &seqExpr{ - pos: position{line: 1200, col: 18, offset: 29190}, + pos: position{line: 1195, col: 18, offset: 29079}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1200, col: 18, offset: 29190}, + pos: position{line: 1195, col: 18, offset: 29079}, name: "__", }, &litMatcher{ - pos: position{line: 1200, col: 21, offset: 29193}, + pos: position{line: 1195, col: 21, offset: 29082}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1200, col: 25, offset: 29197}, + pos: position{line: 1195, col: 25, offset: 29086}, name: "__", }, &labeledExpr{ - pos: position{line: 1200, col: 28, offset: 29200}, + pos: position{line: 1195, col: 28, offset: 29089}, label: "elem", expr: &ruleRefExpr{ - pos: position{line: 1200, col: 33, offset: 29205}, + pos: position{line: 1195, col: 33, offset: 29094}, name: "RecordElem", }, }, @@ -8313,20 +8276,20 @@ var g = &grammar{ }, { name: "RecordElem", - pos: position{line: 1202, col: 1, offset: 29238}, + pos: position{line: 1197, col: 1, offset: 29127}, expr: &choiceExpr{ - pos: position{line: 1203, col: 5, offset: 29253}, + pos: position{line: 1198, col: 5, offset: 29142}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1203, col: 5, offset: 29253}, + pos: position{line: 1198, col: 5, offset: 29142}, name: "Spread", }, &ruleRefExpr{ - pos: position{line: 1204, col: 5, offset: 29264}, + pos: position{line: 1199, col: 5, offset: 29153}, name: "FieldExpr", }, &ruleRefExpr{ - pos: position{line: 1205, col: 5, offset: 29278}, + pos: position{line: 1200, col: 5, offset: 29167}, name: "Identifier", }, }, @@ -8336,28 +8299,28 @@ var g = &grammar{ }, { name: "Spread", - pos: position{line: 1207, col: 1, offset: 29290}, + pos: position{line: 1202, col: 1, offset: 29179}, expr: &actionExpr{ - pos: position{line: 1208, col: 5, offset: 29301}, + pos: position{line: 1203, col: 5, offset: 29190}, run: (*parser).callonSpread1, expr: &seqExpr{ - pos: position{line: 1208, col: 5, offset: 29301}, + pos: position{line: 1203, col: 5, offset: 29190}, exprs: []any{ &litMatcher{ - pos: position{line: 1208, col: 5, offset: 29301}, + pos: position{line: 1203, col: 5, offset: 29190}, val: "...", ignoreCase: false, want: "\"...\"", }, &ruleRefExpr{ - pos: position{line: 1208, col: 11, offset: 29307}, + pos: position{line: 1203, col: 11, offset: 29196}, name: "__", }, &labeledExpr{ - pos: position{line: 1208, col: 14, offset: 29310}, + pos: position{line: 1203, col: 14, offset: 29199}, label: "expr", expr: &ruleRefExpr{ - pos: position{line: 1208, col: 19, offset: 29315}, + pos: position{line: 1203, col: 19, offset: 29204}, name: "Expr", }, }, @@ -8369,40 +8332,40 @@ var g = &grammar{ }, { name: "FieldExpr", - pos: position{line: 1212, col: 1, offset: 29411}, + pos: position{line: 1207, col: 1, offset: 29300}, expr: &actionExpr{ - pos: position{line: 1213, col: 5, offset: 29425}, + pos: position{line: 1208, col: 5, offset: 29314}, run: (*parser).callonFieldExpr1, expr: &seqExpr{ - pos: position{line: 1213, col: 5, offset: 29425}, + pos: position{line: 1208, col: 5, offset: 29314}, exprs: []any{ &labeledExpr{ - pos: position{line: 1213, col: 5, offset: 29425}, + pos: position{line: 1208, col: 5, offset: 29314}, label: "name", expr: &ruleRefExpr{ - pos: position{line: 1213, col: 10, offset: 29430}, + pos: position{line: 1208, col: 10, offset: 29319}, name: "Name", }, }, &ruleRefExpr{ - pos: position{line: 1213, col: 15, offset: 29435}, + pos: position{line: 1208, col: 15, offset: 29324}, name: "__", }, &litMatcher{ - pos: position{line: 1213, col: 18, offset: 29438}, + pos: position{line: 1208, col: 18, offset: 29327}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1213, col: 22, offset: 29442}, + pos: position{line: 1208, col: 22, offset: 29331}, name: "__", }, &labeledExpr{ - pos: position{line: 1213, col: 25, offset: 29445}, + pos: position{line: 1208, col: 25, offset: 29334}, label: "value", expr: &ruleRefExpr{ - pos: position{line: 1213, col: 31, offset: 29451}, + pos: position{line: 1208, col: 31, offset: 29340}, name: "Expr", }, }, @@ -8414,37 +8377,37 @@ var g = &grammar{ }, { name: "Array", - pos: position{line: 1222, col: 1, offset: 29620}, + pos: position{line: 1217, col: 1, offset: 29509}, expr: &actionExpr{ - pos: position{line: 1223, col: 5, offset: 29630}, + pos: position{line: 1218, col: 5, offset: 29519}, run: (*parser).callonArray1, expr: &seqExpr{ - pos: position{line: 1223, col: 5, offset: 29630}, + pos: position{line: 1218, col: 5, offset: 29519}, exprs: []any{ &litMatcher{ - pos: position{line: 1223, col: 5, offset: 29630}, + pos: position{line: 1218, col: 5, offset: 29519}, val: "[", ignoreCase: false, want: "\"[\"", }, &ruleRefExpr{ - pos: position{line: 1223, col: 9, offset: 29634}, + pos: position{line: 1218, col: 9, offset: 29523}, name: "__", }, &labeledExpr{ - pos: position{line: 1223, col: 12, offset: 29637}, + pos: position{line: 1218, col: 12, offset: 29526}, label: "elems", expr: &ruleRefExpr{ - pos: position{line: 1223, col: 18, offset: 29643}, + pos: position{line: 1218, col: 18, offset: 29532}, name: "VectorElems", }, }, &ruleRefExpr{ - pos: position{line: 1223, col: 30, offset: 29655}, + pos: position{line: 1218, col: 30, offset: 29544}, name: "__", }, &litMatcher{ - pos: position{line: 1223, col: 33, offset: 29658}, + pos: position{line: 1218, col: 33, offset: 29547}, val: "]", ignoreCase: false, want: "\"]\"", @@ -8457,37 +8420,37 @@ var g = &grammar{ }, { name: "Set", - pos: position{line: 1231, col: 1, offset: 29814}, + pos: position{line: 1226, col: 1, offset: 29703}, expr: &actionExpr{ - pos: position{line: 1232, col: 5, offset: 29822}, + pos: position{line: 1227, col: 5, offset: 29711}, run: (*parser).callonSet1, expr: &seqExpr{ - pos: position{line: 1232, col: 5, offset: 29822}, + pos: position{line: 1227, col: 5, offset: 29711}, exprs: []any{ &litMatcher{ - pos: position{line: 1232, col: 5, offset: 29822}, + pos: position{line: 1227, col: 5, offset: 29711}, val: "|[", ignoreCase: false, want: "\"|[\"", }, &ruleRefExpr{ - pos: position{line: 1232, col: 10, offset: 29827}, + pos: position{line: 1227, col: 10, offset: 29716}, name: "__", }, &labeledExpr{ - pos: position{line: 1232, col: 13, offset: 29830}, + pos: position{line: 1227, col: 13, offset: 29719}, label: "elems", expr: &ruleRefExpr{ - pos: position{line: 1232, col: 19, offset: 29836}, + pos: position{line: 1227, col: 19, offset: 29725}, name: "VectorElems", }, }, &ruleRefExpr{ - pos: position{line: 1232, col: 31, offset: 29848}, + pos: position{line: 1227, col: 31, offset: 29737}, name: "__", }, &litMatcher{ - pos: position{line: 1232, col: 34, offset: 29851}, + pos: position{line: 1227, col: 34, offset: 29740}, val: "]|", ignoreCase: false, want: "\"]|\"", @@ -8500,54 +8463,54 @@ var g = &grammar{ }, { name: "VectorElems", - pos: position{line: 1240, col: 1, offset: 30004}, + pos: position{line: 1235, col: 1, offset: 29893}, expr: &choiceExpr{ - pos: position{line: 1241, col: 5, offset: 30020}, + pos: position{line: 1236, col: 5, offset: 29909}, alternatives: []any{ &actionExpr{ - pos: position{line: 1241, col: 5, offset: 30020}, + pos: position{line: 1236, col: 5, offset: 29909}, run: (*parser).callonVectorElems2, expr: &seqExpr{ - pos: position{line: 1241, col: 5, offset: 30020}, + pos: position{line: 1236, col: 5, offset: 29909}, exprs: []any{ &labeledExpr{ - pos: position{line: 1241, col: 5, offset: 30020}, + pos: position{line: 1236, col: 5, offset: 29909}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1241, col: 11, offset: 30026}, + pos: position{line: 1236, col: 11, offset: 29915}, name: "VectorElem", }, }, &labeledExpr{ - pos: position{line: 1241, col: 22, offset: 30037}, + pos: position{line: 1236, col: 22, offset: 29926}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 1241, col: 27, offset: 30042}, + pos: position{line: 1236, col: 27, offset: 29931}, expr: &actionExpr{ - pos: position{line: 1241, col: 28, offset: 30043}, + pos: position{line: 1236, col: 28, offset: 29932}, run: (*parser).callonVectorElems8, expr: &seqExpr{ - pos: position{line: 1241, col: 28, offset: 30043}, + pos: position{line: 1236, col: 28, offset: 29932}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1241, col: 28, offset: 30043}, + pos: position{line: 1236, col: 28, offset: 29932}, name: "__", }, &litMatcher{ - pos: position{line: 1241, col: 31, offset: 30046}, + pos: position{line: 1236, col: 31, offset: 29935}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1241, col: 35, offset: 30050}, + pos: position{line: 1236, col: 35, offset: 29939}, name: "__", }, &labeledExpr{ - pos: position{line: 1241, col: 38, offset: 30053}, + pos: position{line: 1236, col: 38, offset: 29942}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 1241, col: 40, offset: 30055}, + pos: position{line: 1236, col: 40, offset: 29944}, name: "VectorElem", }, }, @@ -8560,10 +8523,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1244, col: 5, offset: 30137}, + pos: position{line: 1239, col: 5, offset: 30026}, run: (*parser).callonVectorElems15, expr: &ruleRefExpr{ - pos: position{line: 1244, col: 5, offset: 30137}, + pos: position{line: 1239, col: 5, offset: 30026}, name: "__", }, }, @@ -8574,22 +8537,22 @@ var g = &grammar{ }, { name: "VectorElem", - pos: position{line: 1246, col: 1, offset: 30161}, + pos: position{line: 1241, col: 1, offset: 30050}, expr: &choiceExpr{ - pos: position{line: 1247, col: 5, offset: 30176}, + pos: position{line: 1242, col: 5, offset: 30065}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1247, col: 5, offset: 30176}, + pos: position{line: 1242, col: 5, offset: 30065}, name: "Spread", }, &actionExpr{ - pos: position{line: 1248, col: 5, offset: 30187}, + pos: position{line: 1243, col: 5, offset: 30076}, run: (*parser).callonVectorElem3, expr: &labeledExpr{ - pos: position{line: 1248, col: 5, offset: 30187}, + pos: position{line: 1243, col: 5, offset: 30076}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 1248, col: 7, offset: 30189}, + pos: position{line: 1243, col: 7, offset: 30078}, name: "Expr", }, }, @@ -8601,37 +8564,37 @@ var g = &grammar{ }, { name: "Map", - pos: position{line: 1250, col: 1, offset: 30280}, + pos: position{line: 1245, col: 1, offset: 30169}, expr: &actionExpr{ - pos: position{line: 1251, col: 5, offset: 30288}, + pos: position{line: 1246, col: 5, offset: 30177}, run: (*parser).callonMap1, expr: &seqExpr{ - pos: position{line: 1251, col: 5, offset: 30288}, + pos: position{line: 1246, col: 5, offset: 30177}, exprs: []any{ &litMatcher{ - pos: position{line: 1251, col: 5, offset: 30288}, + pos: position{line: 1246, col: 5, offset: 30177}, val: "|{", ignoreCase: false, want: "\"|{\"", }, &ruleRefExpr{ - pos: position{line: 1251, col: 10, offset: 30293}, + pos: position{line: 1246, col: 10, offset: 30182}, name: "__", }, &labeledExpr{ - pos: position{line: 1251, col: 13, offset: 30296}, + pos: position{line: 1246, col: 13, offset: 30185}, label: "exprs", expr: &ruleRefExpr{ - pos: position{line: 1251, col: 19, offset: 30302}, + pos: position{line: 1246, col: 19, offset: 30191}, name: "Entries", }, }, &ruleRefExpr{ - pos: position{line: 1251, col: 27, offset: 30310}, + pos: position{line: 1246, col: 27, offset: 30199}, name: "__", }, &litMatcher{ - pos: position{line: 1251, col: 30, offset: 30313}, + pos: position{line: 1246, col: 30, offset: 30202}, val: "}|", ignoreCase: false, want: "\"}|\"", @@ -8644,31 +8607,31 @@ var g = &grammar{ }, { name: "Entries", - pos: position{line: 1259, col: 1, offset: 30467}, + pos: position{line: 1254, col: 1, offset: 30356}, expr: &choiceExpr{ - pos: position{line: 1260, col: 5, offset: 30479}, + pos: position{line: 1255, col: 5, offset: 30368}, alternatives: []any{ &actionExpr{ - pos: position{line: 1260, col: 5, offset: 30479}, + pos: position{line: 1255, col: 5, offset: 30368}, run: (*parser).callonEntries2, expr: &seqExpr{ - pos: position{line: 1260, col: 5, offset: 30479}, + pos: position{line: 1255, col: 5, offset: 30368}, exprs: []any{ &labeledExpr{ - pos: position{line: 1260, col: 5, offset: 30479}, + pos: position{line: 1255, col: 5, offset: 30368}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1260, col: 11, offset: 30485}, + pos: position{line: 1255, col: 11, offset: 30374}, name: "Entry", }, }, &labeledExpr{ - pos: position{line: 1260, col: 17, offset: 30491}, + pos: position{line: 1255, col: 17, offset: 30380}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 1260, col: 22, offset: 30496}, + pos: position{line: 1255, col: 22, offset: 30385}, expr: &ruleRefExpr{ - pos: position{line: 1260, col: 22, offset: 30496}, + pos: position{line: 1255, col: 22, offset: 30385}, name: "EntryTail", }, }, @@ -8677,10 +8640,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1263, col: 5, offset: 30554}, + pos: position{line: 1258, col: 5, offset: 30443}, run: (*parser).callonEntries9, expr: &ruleRefExpr{ - pos: position{line: 1263, col: 5, offset: 30554}, + pos: position{line: 1258, col: 5, offset: 30443}, name: "__", }, }, @@ -8691,32 +8654,32 @@ var g = &grammar{ }, { name: "EntryTail", - pos: position{line: 1266, col: 1, offset: 30579}, + pos: position{line: 1261, col: 1, offset: 30468}, expr: &actionExpr{ - pos: position{line: 1266, col: 13, offset: 30591}, + pos: position{line: 1261, col: 13, offset: 30480}, run: (*parser).callonEntryTail1, expr: &seqExpr{ - pos: position{line: 1266, col: 13, offset: 30591}, + pos: position{line: 1261, col: 13, offset: 30480}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1266, col: 13, offset: 30591}, + pos: position{line: 1261, col: 13, offset: 30480}, name: "__", }, &litMatcher{ - pos: position{line: 1266, col: 16, offset: 30594}, + pos: position{line: 1261, col: 16, offset: 30483}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1266, col: 20, offset: 30598}, + pos: position{line: 1261, col: 20, offset: 30487}, name: "__", }, &labeledExpr{ - pos: position{line: 1266, col: 23, offset: 30601}, + pos: position{line: 1261, col: 23, offset: 30490}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 1266, col: 25, offset: 30603}, + pos: position{line: 1261, col: 25, offset: 30492}, name: "Entry", }, }, @@ -8728,40 +8691,40 @@ var g = &grammar{ }, { name: "Entry", - pos: position{line: 1268, col: 1, offset: 30628}, + pos: position{line: 1263, col: 1, offset: 30517}, expr: &actionExpr{ - pos: position{line: 1269, col: 5, offset: 30638}, + pos: position{line: 1264, col: 5, offset: 30527}, run: (*parser).callonEntry1, expr: &seqExpr{ - pos: position{line: 1269, col: 5, offset: 30638}, + pos: position{line: 1264, col: 5, offset: 30527}, exprs: []any{ &labeledExpr{ - pos: position{line: 1269, col: 5, offset: 30638}, + pos: position{line: 1264, col: 5, offset: 30527}, label: "key", expr: &ruleRefExpr{ - pos: position{line: 1269, col: 9, offset: 30642}, + pos: position{line: 1264, col: 9, offset: 30531}, name: "Expr", }, }, &ruleRefExpr{ - pos: position{line: 1269, col: 14, offset: 30647}, + pos: position{line: 1264, col: 14, offset: 30536}, name: "__", }, &litMatcher{ - pos: position{line: 1269, col: 17, offset: 30650}, + pos: position{line: 1264, col: 17, offset: 30539}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1269, col: 21, offset: 30654}, + pos: position{line: 1264, col: 21, offset: 30543}, name: "__", }, &labeledExpr{ - pos: position{line: 1269, col: 24, offset: 30657}, + pos: position{line: 1264, col: 24, offset: 30546}, label: "value", expr: &ruleRefExpr{ - pos: position{line: 1269, col: 30, offset: 30663}, + pos: position{line: 1264, col: 30, offset: 30552}, name: "Expr", }, }, @@ -8773,61 +8736,61 @@ var g = &grammar{ }, { name: "Tuple", - pos: position{line: 1273, col: 1, offset: 30766}, + pos: position{line: 1268, col: 1, offset: 30655}, expr: &actionExpr{ - pos: position{line: 1274, col: 5, offset: 30776}, + pos: position{line: 1269, col: 5, offset: 30665}, run: (*parser).callonTuple1, expr: &seqExpr{ - pos: position{line: 1274, col: 5, offset: 30776}, + pos: position{line: 1269, col: 5, offset: 30665}, exprs: []any{ &litMatcher{ - pos: position{line: 1274, col: 5, offset: 30776}, + pos: position{line: 1269, col: 5, offset: 30665}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1274, col: 9, offset: 30780}, + pos: position{line: 1269, col: 9, offset: 30669}, name: "__", }, &labeledExpr{ - pos: position{line: 1274, col: 12, offset: 30783}, + pos: position{line: 1269, col: 12, offset: 30672}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1274, col: 18, offset: 30789}, + pos: position{line: 1269, col: 18, offset: 30678}, name: "Expr", }, }, &labeledExpr{ - pos: position{line: 1274, col: 23, offset: 30794}, + pos: position{line: 1269, col: 23, offset: 30683}, label: "rest", expr: &oneOrMoreExpr{ - pos: position{line: 1274, col: 28, offset: 30799}, + pos: position{line: 1269, col: 28, offset: 30688}, expr: &actionExpr{ - pos: position{line: 1274, col: 29, offset: 30800}, + pos: position{line: 1269, col: 29, offset: 30689}, run: (*parser).callonTuple9, expr: &seqExpr{ - pos: position{line: 1274, col: 29, offset: 30800}, + pos: position{line: 1269, col: 29, offset: 30689}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1274, col: 29, offset: 30800}, + pos: position{line: 1269, col: 29, offset: 30689}, name: "__", }, &litMatcher{ - pos: position{line: 1274, col: 32, offset: 30803}, + pos: position{line: 1269, col: 32, offset: 30692}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1274, col: 36, offset: 30807}, + pos: position{line: 1269, col: 36, offset: 30696}, name: "__", }, &labeledExpr{ - pos: position{line: 1274, col: 39, offset: 30810}, + pos: position{line: 1269, col: 39, offset: 30699}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 1274, col: 41, offset: 30812}, + pos: position{line: 1269, col: 41, offset: 30701}, name: "Expr", }, }, @@ -8837,11 +8800,11 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1274, col: 66, offset: 30837}, + pos: position{line: 1269, col: 66, offset: 30726}, name: "__", }, &litMatcher{ - pos: position{line: 1274, col: 69, offset: 30840}, + pos: position{line: 1269, col: 69, offset: 30729}, val: ")", ignoreCase: false, want: "\")\"", @@ -8854,56 +8817,56 @@ var g = &grammar{ }, { name: "Literal", - pos: position{line: 1284, col: 1, offset: 31021}, + pos: position{line: 1279, col: 1, offset: 30910}, expr: &choiceExpr{ - pos: position{line: 1285, col: 5, offset: 31033}, + pos: position{line: 1280, col: 5, offset: 30922}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1285, col: 5, offset: 31033}, + pos: position{line: 1280, col: 5, offset: 30922}, name: "TypeLiteral", }, &ruleRefExpr{ - pos: position{line: 1286, col: 5, offset: 31049}, + pos: position{line: 1281, col: 5, offset: 30938}, name: "StringLiteral", }, &ruleRefExpr{ - pos: position{line: 1287, col: 5, offset: 31067}, + pos: position{line: 1282, col: 5, offset: 30956}, name: "FString", }, &ruleRefExpr{ - pos: position{line: 1288, col: 5, offset: 31079}, + pos: position{line: 1283, col: 5, offset: 30968}, name: "SubnetLiteral", }, &ruleRefExpr{ - pos: position{line: 1289, col: 5, offset: 31097}, + pos: position{line: 1284, col: 5, offset: 30986}, name: "AddressLiteral", }, &ruleRefExpr{ - pos: position{line: 1290, col: 5, offset: 31116}, + pos: position{line: 1285, col: 5, offset: 31005}, name: "BytesLiteral", }, &ruleRefExpr{ - pos: position{line: 1291, col: 5, offset: 31133}, + pos: position{line: 1286, col: 5, offset: 31022}, name: "Duration", }, &ruleRefExpr{ - pos: position{line: 1292, col: 5, offset: 31146}, + pos: position{line: 1287, col: 5, offset: 31035}, name: "Time", }, &ruleRefExpr{ - pos: position{line: 1293, col: 5, offset: 31155}, + pos: position{line: 1288, col: 5, offset: 31044}, name: "FloatLiteral", }, &ruleRefExpr{ - pos: position{line: 1294, col: 5, offset: 31172}, + pos: position{line: 1289, col: 5, offset: 31061}, name: "IntegerLiteral", }, &ruleRefExpr{ - pos: position{line: 1295, col: 5, offset: 31191}, + pos: position{line: 1290, col: 5, offset: 31080}, name: "BooleanLiteral", }, &ruleRefExpr{ - pos: position{line: 1296, col: 5, offset: 31210}, + pos: position{line: 1291, col: 5, offset: 31099}, name: "NullLiteral", }, }, @@ -8913,28 +8876,28 @@ var g = &grammar{ }, { name: "SubnetLiteral", - pos: position{line: 1298, col: 1, offset: 31223}, + pos: position{line: 1293, col: 1, offset: 31112}, expr: &choiceExpr{ - pos: position{line: 1299, col: 5, offset: 31241}, + pos: position{line: 1294, col: 5, offset: 31130}, alternatives: []any{ &actionExpr{ - pos: position{line: 1299, col: 5, offset: 31241}, + pos: position{line: 1294, col: 5, offset: 31130}, run: (*parser).callonSubnetLiteral2, expr: &seqExpr{ - pos: position{line: 1299, col: 5, offset: 31241}, + pos: position{line: 1294, col: 5, offset: 31130}, exprs: []any{ &labeledExpr{ - pos: position{line: 1299, col: 5, offset: 31241}, + pos: position{line: 1294, col: 5, offset: 31130}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1299, col: 7, offset: 31243}, + pos: position{line: 1294, col: 7, offset: 31132}, name: "IP6Net", }, }, ¬Expr{ - pos: position{line: 1299, col: 14, offset: 31250}, + pos: position{line: 1294, col: 14, offset: 31139}, expr: &ruleRefExpr{ - pos: position{line: 1299, col: 15, offset: 31251}, + pos: position{line: 1294, col: 15, offset: 31140}, name: "IdentifierRest", }, }, @@ -8942,13 +8905,13 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1302, col: 5, offset: 31331}, + pos: position{line: 1297, col: 5, offset: 31220}, run: (*parser).callonSubnetLiteral8, expr: &labeledExpr{ - pos: position{line: 1302, col: 5, offset: 31331}, + pos: position{line: 1297, col: 5, offset: 31220}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1302, col: 7, offset: 31333}, + pos: position{line: 1297, col: 7, offset: 31222}, name: "IP4Net", }, }, @@ -8960,28 +8923,28 @@ var g = &grammar{ }, { name: "AddressLiteral", - pos: position{line: 1306, col: 1, offset: 31402}, + pos: position{line: 1301, col: 1, offset: 31291}, expr: &choiceExpr{ - pos: position{line: 1307, col: 5, offset: 31421}, + pos: position{line: 1302, col: 5, offset: 31310}, alternatives: []any{ &actionExpr{ - pos: position{line: 1307, col: 5, offset: 31421}, + pos: position{line: 1302, col: 5, offset: 31310}, run: (*parser).callonAddressLiteral2, expr: &seqExpr{ - pos: position{line: 1307, col: 5, offset: 31421}, + pos: position{line: 1302, col: 5, offset: 31310}, exprs: []any{ &labeledExpr{ - pos: position{line: 1307, col: 5, offset: 31421}, + pos: position{line: 1302, col: 5, offset: 31310}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1307, col: 7, offset: 31423}, + pos: position{line: 1302, col: 7, offset: 31312}, name: "IP6", }, }, ¬Expr{ - pos: position{line: 1307, col: 11, offset: 31427}, + pos: position{line: 1302, col: 11, offset: 31316}, expr: &ruleRefExpr{ - pos: position{line: 1307, col: 12, offset: 31428}, + pos: position{line: 1302, col: 12, offset: 31317}, name: "IdentifierRest", }, }, @@ -8989,13 +8952,13 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1310, col: 5, offset: 31507}, + pos: position{line: 1305, col: 5, offset: 31396}, run: (*parser).callonAddressLiteral8, expr: &labeledExpr{ - pos: position{line: 1310, col: 5, offset: 31507}, + pos: position{line: 1305, col: 5, offset: 31396}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1310, col: 7, offset: 31509}, + pos: position{line: 1305, col: 7, offset: 31398}, name: "IP", }, }, @@ -9007,15 +8970,15 @@ var g = &grammar{ }, { name: "FloatLiteral", - pos: position{line: 1314, col: 1, offset: 31573}, + pos: position{line: 1309, col: 1, offset: 31462}, expr: &actionExpr{ - pos: position{line: 1315, col: 5, offset: 31590}, + pos: position{line: 1310, col: 5, offset: 31479}, run: (*parser).callonFloatLiteral1, expr: &labeledExpr{ - pos: position{line: 1315, col: 5, offset: 31590}, + pos: position{line: 1310, col: 5, offset: 31479}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1315, col: 7, offset: 31592}, + pos: position{line: 1310, col: 7, offset: 31481}, name: "FloatString", }, }, @@ -9025,15 +8988,15 @@ var g = &grammar{ }, { name: "IntegerLiteral", - pos: position{line: 1319, col: 1, offset: 31670}, + pos: position{line: 1314, col: 1, offset: 31559}, expr: &actionExpr{ - pos: position{line: 1320, col: 5, offset: 31689}, + pos: position{line: 1315, col: 5, offset: 31578}, run: (*parser).callonIntegerLiteral1, expr: &labeledExpr{ - pos: position{line: 1320, col: 5, offset: 31689}, + pos: position{line: 1315, col: 5, offset: 31578}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1320, col: 7, offset: 31691}, + pos: position{line: 1315, col: 7, offset: 31580}, name: "IntString", }, }, @@ -9043,23 +9006,23 @@ var g = &grammar{ }, { name: "BooleanLiteral", - pos: position{line: 1324, col: 1, offset: 31765}, + pos: position{line: 1319, col: 1, offset: 31654}, expr: &choiceExpr{ - pos: position{line: 1325, col: 5, offset: 31784}, + pos: position{line: 1320, col: 5, offset: 31673}, alternatives: []any{ &actionExpr{ - pos: position{line: 1325, col: 5, offset: 31784}, + pos: position{line: 1320, col: 5, offset: 31673}, run: (*parser).callonBooleanLiteral2, expr: &ruleRefExpr{ - pos: position{line: 1325, col: 5, offset: 31784}, + pos: position{line: 1320, col: 5, offset: 31673}, name: "TRUE", }, }, &actionExpr{ - pos: position{line: 1326, col: 5, offset: 31842}, + pos: position{line: 1321, col: 5, offset: 31731}, run: (*parser).callonBooleanLiteral4, expr: &ruleRefExpr{ - pos: position{line: 1326, col: 5, offset: 31842}, + pos: position{line: 1321, col: 5, offset: 31731}, name: "FALSE", }, }, @@ -9070,12 +9033,12 @@ var g = &grammar{ }, { name: "NullLiteral", - pos: position{line: 1328, col: 1, offset: 31898}, + pos: position{line: 1323, col: 1, offset: 31787}, expr: &actionExpr{ - pos: position{line: 1329, col: 5, offset: 31914}, + pos: position{line: 1324, col: 5, offset: 31803}, run: (*parser).callonNullLiteral1, expr: &ruleRefExpr{ - pos: position{line: 1329, col: 5, offset: 31914}, + pos: position{line: 1324, col: 5, offset: 31803}, name: "NULL", }, }, @@ -9084,23 +9047,23 @@ var g = &grammar{ }, { name: "BytesLiteral", - pos: position{line: 1331, col: 1, offset: 31964}, + pos: position{line: 1326, col: 1, offset: 31853}, expr: &actionExpr{ - pos: position{line: 1332, col: 5, offset: 31981}, + pos: position{line: 1327, col: 5, offset: 31870}, run: (*parser).callonBytesLiteral1, expr: &seqExpr{ - pos: position{line: 1332, col: 5, offset: 31981}, + pos: position{line: 1327, col: 5, offset: 31870}, exprs: []any{ &litMatcher{ - pos: position{line: 1332, col: 5, offset: 31981}, + pos: position{line: 1327, col: 5, offset: 31870}, val: "0x", ignoreCase: false, want: "\"0x\"", }, &zeroOrMoreExpr{ - pos: position{line: 1332, col: 10, offset: 31986}, + pos: position{line: 1327, col: 10, offset: 31875}, expr: &ruleRefExpr{ - pos: position{line: 1332, col: 10, offset: 31986}, + pos: position{line: 1327, col: 10, offset: 31875}, name: "HexDigit", }, }, @@ -9112,29 +9075,29 @@ var g = &grammar{ }, { name: "TypeLiteral", - pos: position{line: 1336, col: 1, offset: 32060}, + pos: position{line: 1331, col: 1, offset: 31949}, expr: &actionExpr{ - pos: position{line: 1337, col: 5, offset: 32076}, + pos: position{line: 1332, col: 5, offset: 31965}, run: (*parser).callonTypeLiteral1, expr: &seqExpr{ - pos: position{line: 1337, col: 5, offset: 32076}, + pos: position{line: 1332, col: 5, offset: 31965}, exprs: []any{ &litMatcher{ - pos: position{line: 1337, col: 5, offset: 32076}, + pos: position{line: 1332, col: 5, offset: 31965}, val: "<", ignoreCase: false, want: "\"<\"", }, &labeledExpr{ - pos: position{line: 1337, col: 9, offset: 32080}, + pos: position{line: 1332, col: 9, offset: 31969}, label: "typ", expr: &ruleRefExpr{ - pos: position{line: 1337, col: 13, offset: 32084}, + pos: position{line: 1332, col: 13, offset: 31973}, name: "Type", }, }, &litMatcher{ - pos: position{line: 1337, col: 18, offset: 32089}, + pos: position{line: 1332, col: 18, offset: 31978}, val: ">", ignoreCase: false, want: "\">\"", @@ -9147,16 +9110,16 @@ var g = &grammar{ }, { name: "Type", - pos: position{line: 1345, col: 1, offset: 32222}, + pos: position{line: 1340, col: 1, offset: 32111}, expr: &choiceExpr{ - pos: position{line: 1346, col: 5, offset: 32231}, + pos: position{line: 1341, col: 5, offset: 32120}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1346, col: 5, offset: 32231}, + pos: position{line: 1341, col: 5, offset: 32120}, name: "AmbiguousType", }, &ruleRefExpr{ - pos: position{line: 1347, col: 5, offset: 32249}, + pos: position{line: 1342, col: 5, offset: 32138}, name: "ComplexType", }, }, @@ -9166,28 +9129,28 @@ var g = &grammar{ }, { name: "AmbiguousType", - pos: position{line: 1349, col: 1, offset: 32262}, + pos: position{line: 1344, col: 1, offset: 32151}, expr: &choiceExpr{ - pos: position{line: 1350, col: 5, offset: 32280}, + pos: position{line: 1345, col: 5, offset: 32169}, alternatives: []any{ &actionExpr{ - pos: position{line: 1350, col: 5, offset: 32280}, + pos: position{line: 1345, col: 5, offset: 32169}, run: (*parser).callonAmbiguousType2, expr: &seqExpr{ - pos: position{line: 1350, col: 5, offset: 32280}, + pos: position{line: 1345, col: 5, offset: 32169}, exprs: []any{ &labeledExpr{ - pos: position{line: 1350, col: 5, offset: 32280}, + pos: position{line: 1345, col: 5, offset: 32169}, label: "name", expr: &ruleRefExpr{ - pos: position{line: 1350, col: 10, offset: 32285}, + pos: position{line: 1345, col: 10, offset: 32174}, name: "PrimitiveType", }, }, ¬Expr{ - pos: position{line: 1350, col: 24, offset: 32299}, + pos: position{line: 1345, col: 24, offset: 32188}, expr: &ruleRefExpr{ - pos: position{line: 1350, col: 25, offset: 32300}, + pos: position{line: 1345, col: 25, offset: 32189}, name: "IdentifierRest", }, }, @@ -9195,43 +9158,43 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1351, col: 5, offset: 32340}, + pos: position{line: 1346, col: 5, offset: 32229}, run: (*parser).callonAmbiguousType8, expr: &seqExpr{ - pos: position{line: 1351, col: 5, offset: 32340}, + pos: position{line: 1346, col: 5, offset: 32229}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1351, col: 5, offset: 32340}, + pos: position{line: 1346, col: 5, offset: 32229}, name: "ERROR", }, &ruleRefExpr{ - pos: position{line: 1351, col: 11, offset: 32346}, + pos: position{line: 1346, col: 11, offset: 32235}, name: "__", }, &litMatcher{ - pos: position{line: 1351, col: 14, offset: 32349}, + pos: position{line: 1346, col: 14, offset: 32238}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1351, col: 18, offset: 32353}, + pos: position{line: 1346, col: 18, offset: 32242}, name: "__", }, &labeledExpr{ - pos: position{line: 1351, col: 21, offset: 32356}, + pos: position{line: 1346, col: 21, offset: 32245}, label: "t", expr: &ruleRefExpr{ - pos: position{line: 1351, col: 23, offset: 32358}, + pos: position{line: 1346, col: 23, offset: 32247}, name: "Type", }, }, &ruleRefExpr{ - pos: position{line: 1351, col: 28, offset: 32363}, + pos: position{line: 1346, col: 28, offset: 32252}, name: "__", }, &litMatcher{ - pos: position{line: 1351, col: 31, offset: 32366}, + pos: position{line: 1346, col: 31, offset: 32255}, val: ")", ignoreCase: false, want: "\")\"", @@ -9240,43 +9203,43 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1358, col: 5, offset: 32506}, + pos: position{line: 1353, col: 5, offset: 32395}, run: (*parser).callonAmbiguousType18, expr: &seqExpr{ - pos: position{line: 1358, col: 5, offset: 32506}, + pos: position{line: 1353, col: 5, offset: 32395}, exprs: []any{ &labeledExpr{ - pos: position{line: 1358, col: 5, offset: 32506}, + pos: position{line: 1353, col: 5, offset: 32395}, label: "name", expr: &ruleRefExpr{ - pos: position{line: 1358, col: 10, offset: 32511}, + pos: position{line: 1353, col: 10, offset: 32400}, name: "Name", }, }, &labeledExpr{ - pos: position{line: 1358, col: 15, offset: 32516}, + pos: position{line: 1353, col: 15, offset: 32405}, label: "opt", expr: &zeroOrOneExpr{ - pos: position{line: 1358, col: 19, offset: 32520}, + pos: position{line: 1353, col: 19, offset: 32409}, expr: &seqExpr{ - pos: position{line: 1358, col: 20, offset: 32521}, + pos: position{line: 1353, col: 20, offset: 32410}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1358, col: 20, offset: 32521}, + pos: position{line: 1353, col: 20, offset: 32410}, name: "__", }, &litMatcher{ - pos: position{line: 1358, col: 23, offset: 32524}, + pos: position{line: 1353, col: 23, offset: 32413}, val: "=", ignoreCase: false, want: "\"=\"", }, &ruleRefExpr{ - pos: position{line: 1358, col: 27, offset: 32528}, + pos: position{line: 1353, col: 27, offset: 32417}, name: "__", }, &ruleRefExpr{ - pos: position{line: 1358, col: 30, offset: 32531}, + pos: position{line: 1353, col: 30, offset: 32420}, name: "Type", }, }, @@ -9287,31 +9250,31 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1369, col: 5, offset: 32856}, + pos: position{line: 1364, col: 5, offset: 32745}, run: (*parser).callonAmbiguousType29, expr: &seqExpr{ - pos: position{line: 1369, col: 5, offset: 32856}, + pos: position{line: 1364, col: 5, offset: 32745}, exprs: []any{ &litMatcher{ - pos: position{line: 1369, col: 5, offset: 32856}, + pos: position{line: 1364, col: 5, offset: 32745}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1369, col: 9, offset: 32860}, + pos: position{line: 1364, col: 9, offset: 32749}, name: "__", }, &labeledExpr{ - pos: position{line: 1369, col: 12, offset: 32863}, + pos: position{line: 1364, col: 12, offset: 32752}, label: "types", expr: &ruleRefExpr{ - pos: position{line: 1369, col: 18, offset: 32869}, + pos: position{line: 1364, col: 18, offset: 32758}, name: "TypeList", }, }, &litMatcher{ - pos: position{line: 1369, col: 27, offset: 32878}, + pos: position{line: 1364, col: 27, offset: 32767}, val: ")", ignoreCase: false, want: "\")\"", @@ -9326,28 +9289,28 @@ var g = &grammar{ }, { name: "TypeList", - pos: position{line: 1377, col: 1, offset: 33022}, + pos: position{line: 1372, col: 1, offset: 32911}, expr: &actionExpr{ - pos: position{line: 1378, col: 5, offset: 33035}, + pos: position{line: 1373, col: 5, offset: 32924}, run: (*parser).callonTypeList1, expr: &seqExpr{ - pos: position{line: 1378, col: 5, offset: 33035}, + pos: position{line: 1373, col: 5, offset: 32924}, exprs: []any{ &labeledExpr{ - pos: position{line: 1378, col: 5, offset: 33035}, + pos: position{line: 1373, col: 5, offset: 32924}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1378, col: 11, offset: 33041}, + pos: position{line: 1373, col: 11, offset: 32930}, name: "Type", }, }, &labeledExpr{ - pos: position{line: 1378, col: 16, offset: 33046}, + pos: position{line: 1373, col: 16, offset: 32935}, label: "rest", expr: &oneOrMoreExpr{ - pos: position{line: 1378, col: 21, offset: 33051}, + pos: position{line: 1373, col: 21, offset: 32940}, expr: &ruleRefExpr{ - pos: position{line: 1378, col: 21, offset: 33051}, + pos: position{line: 1373, col: 21, offset: 32940}, name: "TypeListTail", }, }, @@ -9360,32 +9323,32 @@ var g = &grammar{ }, { name: "TypeListTail", - pos: position{line: 1382, col: 1, offset: 33109}, + pos: position{line: 1377, col: 1, offset: 32998}, expr: &actionExpr{ - pos: position{line: 1382, col: 16, offset: 33124}, + pos: position{line: 1377, col: 16, offset: 33013}, run: (*parser).callonTypeListTail1, expr: &seqExpr{ - pos: position{line: 1382, col: 16, offset: 33124}, + pos: position{line: 1377, col: 16, offset: 33013}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1382, col: 16, offset: 33124}, + pos: position{line: 1377, col: 16, offset: 33013}, name: "__", }, &litMatcher{ - pos: position{line: 1382, col: 19, offset: 33127}, + pos: position{line: 1377, col: 19, offset: 33016}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1382, col: 23, offset: 33131}, + pos: position{line: 1377, col: 23, offset: 33020}, name: "__", }, &labeledExpr{ - pos: position{line: 1382, col: 26, offset: 33134}, + pos: position{line: 1377, col: 26, offset: 33023}, label: "typ", expr: &ruleRefExpr{ - pos: position{line: 1382, col: 30, offset: 33138}, + pos: position{line: 1377, col: 30, offset: 33027}, name: "Type", }, }, @@ -9397,40 +9360,40 @@ var g = &grammar{ }, { name: "ComplexType", - pos: position{line: 1384, col: 1, offset: 33164}, + pos: position{line: 1379, col: 1, offset: 33053}, expr: &choiceExpr{ - pos: position{line: 1385, col: 5, offset: 33180}, + pos: position{line: 1380, col: 5, offset: 33069}, alternatives: []any{ &actionExpr{ - pos: position{line: 1385, col: 5, offset: 33180}, + pos: position{line: 1380, col: 5, offset: 33069}, run: (*parser).callonComplexType2, expr: &seqExpr{ - pos: position{line: 1385, col: 5, offset: 33180}, + pos: position{line: 1380, col: 5, offset: 33069}, exprs: []any{ &litMatcher{ - pos: position{line: 1385, col: 5, offset: 33180}, + pos: position{line: 1380, col: 5, offset: 33069}, val: "{", ignoreCase: false, want: "\"{\"", }, &ruleRefExpr{ - pos: position{line: 1385, col: 9, offset: 33184}, + pos: position{line: 1380, col: 9, offset: 33073}, name: "__", }, &labeledExpr{ - pos: position{line: 1385, col: 12, offset: 33187}, + pos: position{line: 1380, col: 12, offset: 33076}, label: "fields", expr: &ruleRefExpr{ - pos: position{line: 1385, col: 19, offset: 33194}, + pos: position{line: 1380, col: 19, offset: 33083}, name: "TypeFieldList", }, }, &ruleRefExpr{ - pos: position{line: 1385, col: 33, offset: 33208}, + pos: position{line: 1380, col: 33, offset: 33097}, name: "__", }, &litMatcher{ - pos: position{line: 1385, col: 36, offset: 33211}, + pos: position{line: 1380, col: 36, offset: 33100}, val: "}", ignoreCase: false, want: "\"}\"", @@ -9439,35 +9402,35 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1392, col: 5, offset: 33373}, + pos: position{line: 1387, col: 5, offset: 33262}, run: (*parser).callonComplexType10, expr: &seqExpr{ - pos: position{line: 1392, col: 5, offset: 33373}, + pos: position{line: 1387, col: 5, offset: 33262}, exprs: []any{ &litMatcher{ - pos: position{line: 1392, col: 5, offset: 33373}, + pos: position{line: 1387, col: 5, offset: 33262}, val: "[", ignoreCase: false, want: "\"[\"", }, &ruleRefExpr{ - pos: position{line: 1392, col: 9, offset: 33377}, + pos: position{line: 1387, col: 9, offset: 33266}, name: "__", }, &labeledExpr{ - pos: position{line: 1392, col: 12, offset: 33380}, + pos: position{line: 1387, col: 12, offset: 33269}, label: "typ", expr: &ruleRefExpr{ - pos: position{line: 1392, col: 16, offset: 33384}, + pos: position{line: 1387, col: 16, offset: 33273}, name: "Type", }, }, &ruleRefExpr{ - pos: position{line: 1392, col: 21, offset: 33389}, + pos: position{line: 1387, col: 21, offset: 33278}, name: "__", }, &litMatcher{ - pos: position{line: 1392, col: 24, offset: 33392}, + pos: position{line: 1387, col: 24, offset: 33281}, val: "]", ignoreCase: false, want: "\"]\"", @@ -9476,35 +9439,35 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1399, col: 5, offset: 33534}, + pos: position{line: 1394, col: 5, offset: 33423}, run: (*parser).callonComplexType18, expr: &seqExpr{ - pos: position{line: 1399, col: 5, offset: 33534}, + pos: position{line: 1394, col: 5, offset: 33423}, exprs: []any{ &litMatcher{ - pos: position{line: 1399, col: 5, offset: 33534}, + pos: position{line: 1394, col: 5, offset: 33423}, val: "|[", ignoreCase: false, want: "\"|[\"", }, &ruleRefExpr{ - pos: position{line: 1399, col: 10, offset: 33539}, + pos: position{line: 1394, col: 10, offset: 33428}, name: "__", }, &labeledExpr{ - pos: position{line: 1399, col: 13, offset: 33542}, + pos: position{line: 1394, col: 13, offset: 33431}, label: "typ", expr: &ruleRefExpr{ - pos: position{line: 1399, col: 17, offset: 33546}, + pos: position{line: 1394, col: 17, offset: 33435}, name: "Type", }, }, &ruleRefExpr{ - pos: position{line: 1399, col: 22, offset: 33551}, + pos: position{line: 1394, col: 22, offset: 33440}, name: "__", }, &litMatcher{ - pos: position{line: 1399, col: 25, offset: 33554}, + pos: position{line: 1394, col: 25, offset: 33443}, val: "]|", ignoreCase: false, want: "\"]|\"", @@ -9513,57 +9476,57 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1406, col: 5, offset: 33693}, + pos: position{line: 1401, col: 5, offset: 33582}, run: (*parser).callonComplexType26, expr: &seqExpr{ - pos: position{line: 1406, col: 5, offset: 33693}, + pos: position{line: 1401, col: 5, offset: 33582}, exprs: []any{ &litMatcher{ - pos: position{line: 1406, col: 5, offset: 33693}, + pos: position{line: 1401, col: 5, offset: 33582}, val: "|{", ignoreCase: false, want: "\"|{\"", }, &ruleRefExpr{ - pos: position{line: 1406, col: 10, offset: 33698}, + pos: position{line: 1401, col: 10, offset: 33587}, name: "__", }, &labeledExpr{ - pos: position{line: 1406, col: 13, offset: 33701}, + pos: position{line: 1401, col: 13, offset: 33590}, label: "keyType", expr: &ruleRefExpr{ - pos: position{line: 1406, col: 21, offset: 33709}, + pos: position{line: 1401, col: 21, offset: 33598}, name: "Type", }, }, &ruleRefExpr{ - pos: position{line: 1406, col: 26, offset: 33714}, + pos: position{line: 1401, col: 26, offset: 33603}, name: "__", }, &litMatcher{ - pos: position{line: 1406, col: 29, offset: 33717}, + pos: position{line: 1401, col: 29, offset: 33606}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1406, col: 33, offset: 33721}, + pos: position{line: 1401, col: 33, offset: 33610}, name: "__", }, &labeledExpr{ - pos: position{line: 1406, col: 36, offset: 33724}, + pos: position{line: 1401, col: 36, offset: 33613}, label: "valType", expr: &ruleRefExpr{ - pos: position{line: 1406, col: 44, offset: 33732}, + pos: position{line: 1401, col: 44, offset: 33621}, name: "Type", }, }, &ruleRefExpr{ - pos: position{line: 1406, col: 49, offset: 33737}, + pos: position{line: 1401, col: 49, offset: 33626}, name: "__", }, &litMatcher{ - pos: position{line: 1406, col: 52, offset: 33740}, + pos: position{line: 1401, col: 52, offset: 33629}, val: "}|", ignoreCase: false, want: "\"}|\"", @@ -9578,35 +9541,35 @@ var g = &grammar{ }, { name: "StringLiteral", - pos: position{line: 1415, col: 1, offset: 33914}, + pos: position{line: 1410, col: 1, offset: 33803}, expr: &choiceExpr{ - pos: position{line: 1416, col: 5, offset: 33932}, + pos: position{line: 1411, col: 5, offset: 33821}, alternatives: []any{ &actionExpr{ - pos: position{line: 1416, col: 5, offset: 33932}, + pos: position{line: 1411, col: 5, offset: 33821}, run: (*parser).callonStringLiteral2, expr: &seqExpr{ - pos: position{line: 1416, col: 5, offset: 33932}, + pos: position{line: 1411, col: 5, offset: 33821}, exprs: []any{ &litMatcher{ - pos: position{line: 1416, col: 5, offset: 33932}, + pos: position{line: 1411, col: 5, offset: 33821}, val: "\"", ignoreCase: false, want: "\"\\\"\"", }, &labeledExpr{ - pos: position{line: 1416, col: 9, offset: 33936}, + pos: position{line: 1411, col: 9, offset: 33825}, label: "v", expr: &zeroOrMoreExpr{ - pos: position{line: 1416, col: 11, offset: 33938}, + pos: position{line: 1411, col: 11, offset: 33827}, expr: &ruleRefExpr{ - pos: position{line: 1416, col: 11, offset: 33938}, + pos: position{line: 1411, col: 11, offset: 33827}, name: "DoubleQuotedChar", }, }, }, &litMatcher{ - pos: position{line: 1416, col: 29, offset: 33956}, + pos: position{line: 1411, col: 29, offset: 33845}, val: "\"", ignoreCase: false, want: "\"\\\"\"", @@ -9615,30 +9578,30 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1417, col: 5, offset: 34020}, + pos: position{line: 1412, col: 5, offset: 33909}, run: (*parser).callonStringLiteral9, expr: &seqExpr{ - pos: position{line: 1417, col: 5, offset: 34020}, + pos: position{line: 1412, col: 5, offset: 33909}, exprs: []any{ &litMatcher{ - pos: position{line: 1417, col: 5, offset: 34020}, + pos: position{line: 1412, col: 5, offset: 33909}, val: "'", ignoreCase: false, want: "\"'\"", }, &labeledExpr{ - pos: position{line: 1417, col: 9, offset: 34024}, + pos: position{line: 1412, col: 9, offset: 33913}, label: "v", expr: &zeroOrMoreExpr{ - pos: position{line: 1417, col: 11, offset: 34026}, + pos: position{line: 1412, col: 11, offset: 33915}, expr: &ruleRefExpr{ - pos: position{line: 1417, col: 11, offset: 34026}, + pos: position{line: 1412, col: 11, offset: 33915}, name: "SingleQuotedChar", }, }, }, &litMatcher{ - pos: position{line: 1417, col: 29, offset: 34044}, + pos: position{line: 1412, col: 29, offset: 33933}, val: "'", ignoreCase: false, want: "\"'\"", @@ -9653,35 +9616,35 @@ var g = &grammar{ }, { name: "FString", - pos: position{line: 1419, col: 1, offset: 34105}, + pos: position{line: 1414, col: 1, offset: 33994}, expr: &choiceExpr{ - pos: position{line: 1420, col: 5, offset: 34117}, + pos: position{line: 1415, col: 5, offset: 34006}, alternatives: []any{ &actionExpr{ - pos: position{line: 1420, col: 5, offset: 34117}, + pos: position{line: 1415, col: 5, offset: 34006}, run: (*parser).callonFString2, expr: &seqExpr{ - pos: position{line: 1420, col: 5, offset: 34117}, + pos: position{line: 1415, col: 5, offset: 34006}, exprs: []any{ &litMatcher{ - pos: position{line: 1420, col: 5, offset: 34117}, + pos: position{line: 1415, col: 5, offset: 34006}, val: "f\"", ignoreCase: false, want: "\"f\\\"\"", }, &labeledExpr{ - pos: position{line: 1420, col: 11, offset: 34123}, + pos: position{line: 1415, col: 11, offset: 34012}, label: "v", expr: &zeroOrMoreExpr{ - pos: position{line: 1420, col: 13, offset: 34125}, + pos: position{line: 1415, col: 13, offset: 34014}, expr: &ruleRefExpr{ - pos: position{line: 1420, col: 13, offset: 34125}, + pos: position{line: 1415, col: 13, offset: 34014}, name: "FStringDoubleQuotedElem", }, }, }, &litMatcher{ - pos: position{line: 1420, col: 38, offset: 34150}, + pos: position{line: 1415, col: 38, offset: 34039}, val: "\"", ignoreCase: false, want: "\"\\\"\"", @@ -9690,30 +9653,30 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1427, col: 5, offset: 34296}, + pos: position{line: 1422, col: 5, offset: 34185}, run: (*parser).callonFString9, expr: &seqExpr{ - pos: position{line: 1427, col: 5, offset: 34296}, + pos: position{line: 1422, col: 5, offset: 34185}, exprs: []any{ &litMatcher{ - pos: position{line: 1427, col: 5, offset: 34296}, + pos: position{line: 1422, col: 5, offset: 34185}, val: "f'", ignoreCase: false, want: "\"f'\"", }, &labeledExpr{ - pos: position{line: 1427, col: 10, offset: 34301}, + pos: position{line: 1422, col: 10, offset: 34190}, label: "v", expr: &zeroOrMoreExpr{ - pos: position{line: 1427, col: 12, offset: 34303}, + pos: position{line: 1422, col: 12, offset: 34192}, expr: &ruleRefExpr{ - pos: position{line: 1427, col: 12, offset: 34303}, + pos: position{line: 1422, col: 12, offset: 34192}, name: "FStringSingleQuotedElem", }, }, }, &litMatcher{ - pos: position{line: 1427, col: 37, offset: 34328}, + pos: position{line: 1422, col: 37, offset: 34217}, val: "'", ignoreCase: false, want: "\"'\"", @@ -9728,24 +9691,24 @@ var g = &grammar{ }, { name: "FStringDoubleQuotedElem", - pos: position{line: 1435, col: 1, offset: 34471}, + pos: position{line: 1430, col: 1, offset: 34360}, expr: &choiceExpr{ - pos: position{line: 1436, col: 5, offset: 34499}, + pos: position{line: 1431, col: 5, offset: 34388}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1436, col: 5, offset: 34499}, + pos: position{line: 1431, col: 5, offset: 34388}, name: "FStringExpr", }, &actionExpr{ - pos: position{line: 1437, col: 5, offset: 34515}, + pos: position{line: 1432, col: 5, offset: 34404}, run: (*parser).callonFStringDoubleQuotedElem3, expr: &labeledExpr{ - pos: position{line: 1437, col: 5, offset: 34515}, + pos: position{line: 1432, col: 5, offset: 34404}, label: "v", expr: &oneOrMoreExpr{ - pos: position{line: 1437, col: 7, offset: 34517}, + pos: position{line: 1432, col: 7, offset: 34406}, expr: &ruleRefExpr{ - pos: position{line: 1437, col: 7, offset: 34517}, + pos: position{line: 1432, col: 7, offset: 34406}, name: "FStringDoubleQuotedChar", }, }, @@ -9758,27 +9721,27 @@ var g = &grammar{ }, { name: "FStringDoubleQuotedChar", - pos: position{line: 1441, col: 1, offset: 34640}, + pos: position{line: 1436, col: 1, offset: 34529}, expr: &choiceExpr{ - pos: position{line: 1442, col: 5, offset: 34668}, + pos: position{line: 1437, col: 5, offset: 34557}, alternatives: []any{ &actionExpr{ - pos: position{line: 1442, col: 5, offset: 34668}, + pos: position{line: 1437, col: 5, offset: 34557}, run: (*parser).callonFStringDoubleQuotedChar2, expr: &seqExpr{ - pos: position{line: 1442, col: 5, offset: 34668}, + pos: position{line: 1437, col: 5, offset: 34557}, exprs: []any{ &litMatcher{ - pos: position{line: 1442, col: 5, offset: 34668}, + pos: position{line: 1437, col: 5, offset: 34557}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &labeledExpr{ - pos: position{line: 1442, col: 10, offset: 34673}, + pos: position{line: 1437, col: 10, offset: 34562}, label: "v", expr: &litMatcher{ - pos: position{line: 1442, col: 12, offset: 34675}, + pos: position{line: 1437, col: 12, offset: 34564}, val: "{", ignoreCase: false, want: "\"{\"", @@ -9788,25 +9751,25 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1443, col: 5, offset: 34701}, + pos: position{line: 1438, col: 5, offset: 34590}, run: (*parser).callonFStringDoubleQuotedChar7, expr: &seqExpr{ - pos: position{line: 1443, col: 5, offset: 34701}, + pos: position{line: 1438, col: 5, offset: 34590}, exprs: []any{ ¬Expr{ - pos: position{line: 1443, col: 5, offset: 34701}, + pos: position{line: 1438, col: 5, offset: 34590}, expr: &litMatcher{ - pos: position{line: 1443, col: 7, offset: 34703}, + pos: position{line: 1438, col: 7, offset: 34592}, val: "{", ignoreCase: false, want: "\"{\"", }, }, &labeledExpr{ - pos: position{line: 1443, col: 12, offset: 34708}, + pos: position{line: 1438, col: 12, offset: 34597}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1443, col: 14, offset: 34710}, + pos: position{line: 1438, col: 14, offset: 34599}, name: "DoubleQuotedChar", }, }, @@ -9820,24 +9783,24 @@ var g = &grammar{ }, { name: "FStringSingleQuotedElem", - pos: position{line: 1445, col: 1, offset: 34746}, + pos: position{line: 1440, col: 1, offset: 34635}, expr: &choiceExpr{ - pos: position{line: 1446, col: 5, offset: 34774}, + pos: position{line: 1441, col: 5, offset: 34663}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1446, col: 5, offset: 34774}, + pos: position{line: 1441, col: 5, offset: 34663}, name: "FStringExpr", }, &actionExpr{ - pos: position{line: 1447, col: 5, offset: 34790}, + pos: position{line: 1442, col: 5, offset: 34679}, run: (*parser).callonFStringSingleQuotedElem3, expr: &labeledExpr{ - pos: position{line: 1447, col: 5, offset: 34790}, + pos: position{line: 1442, col: 5, offset: 34679}, label: "v", expr: &oneOrMoreExpr{ - pos: position{line: 1447, col: 7, offset: 34792}, + pos: position{line: 1442, col: 7, offset: 34681}, expr: &ruleRefExpr{ - pos: position{line: 1447, col: 7, offset: 34792}, + pos: position{line: 1442, col: 7, offset: 34681}, name: "FStringSingleQuotedChar", }, }, @@ -9850,27 +9813,27 @@ var g = &grammar{ }, { name: "FStringSingleQuotedChar", - pos: position{line: 1451, col: 1, offset: 34915}, + pos: position{line: 1446, col: 1, offset: 34804}, expr: &choiceExpr{ - pos: position{line: 1452, col: 5, offset: 34943}, + pos: position{line: 1447, col: 5, offset: 34832}, alternatives: []any{ &actionExpr{ - pos: position{line: 1452, col: 5, offset: 34943}, + pos: position{line: 1447, col: 5, offset: 34832}, run: (*parser).callonFStringSingleQuotedChar2, expr: &seqExpr{ - pos: position{line: 1452, col: 5, offset: 34943}, + pos: position{line: 1447, col: 5, offset: 34832}, exprs: []any{ &litMatcher{ - pos: position{line: 1452, col: 5, offset: 34943}, + pos: position{line: 1447, col: 5, offset: 34832}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &labeledExpr{ - pos: position{line: 1452, col: 10, offset: 34948}, + pos: position{line: 1447, col: 10, offset: 34837}, label: "v", expr: &litMatcher{ - pos: position{line: 1452, col: 12, offset: 34950}, + pos: position{line: 1447, col: 12, offset: 34839}, val: "{", ignoreCase: false, want: "\"{\"", @@ -9880,25 +9843,25 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1453, col: 5, offset: 34976}, + pos: position{line: 1448, col: 5, offset: 34865}, run: (*parser).callonFStringSingleQuotedChar7, expr: &seqExpr{ - pos: position{line: 1453, col: 5, offset: 34976}, + pos: position{line: 1448, col: 5, offset: 34865}, exprs: []any{ ¬Expr{ - pos: position{line: 1453, col: 5, offset: 34976}, + pos: position{line: 1448, col: 5, offset: 34865}, expr: &litMatcher{ - pos: position{line: 1453, col: 7, offset: 34978}, + pos: position{line: 1448, col: 7, offset: 34867}, val: "{", ignoreCase: false, want: "\"{\"", }, }, &labeledExpr{ - pos: position{line: 1453, col: 12, offset: 34983}, + pos: position{line: 1448, col: 12, offset: 34872}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1453, col: 14, offset: 34985}, + pos: position{line: 1448, col: 14, offset: 34874}, name: "SingleQuotedChar", }, }, @@ -9912,37 +9875,37 @@ var g = &grammar{ }, { name: "FStringExpr", - pos: position{line: 1455, col: 1, offset: 35021}, + pos: position{line: 1450, col: 1, offset: 34910}, expr: &actionExpr{ - pos: position{line: 1456, col: 5, offset: 35037}, + pos: position{line: 1451, col: 5, offset: 34926}, run: (*parser).callonFStringExpr1, expr: &seqExpr{ - pos: position{line: 1456, col: 5, offset: 35037}, + pos: position{line: 1451, col: 5, offset: 34926}, exprs: []any{ &litMatcher{ - pos: position{line: 1456, col: 5, offset: 35037}, + pos: position{line: 1451, col: 5, offset: 34926}, val: "{", ignoreCase: false, want: "\"{\"", }, &ruleRefExpr{ - pos: position{line: 1456, col: 9, offset: 35041}, + pos: position{line: 1451, col: 9, offset: 34930}, name: "__", }, &labeledExpr{ - pos: position{line: 1456, col: 12, offset: 35044}, + pos: position{line: 1451, col: 12, offset: 34933}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 1456, col: 14, offset: 35046}, + pos: position{line: 1451, col: 14, offset: 34935}, name: "Expr", }, }, &ruleRefExpr{ - pos: position{line: 1456, col: 19, offset: 35051}, + pos: position{line: 1451, col: 19, offset: 34940}, name: "__", }, &litMatcher{ - pos: position{line: 1456, col: 22, offset: 35054}, + pos: position{line: 1451, col: 22, offset: 34943}, val: "}", ignoreCase: false, want: "\"}\"", @@ -9955,129 +9918,129 @@ var g = &grammar{ }, { name: "PrimitiveType", - pos: position{line: 1464, col: 1, offset: 35189}, + pos: position{line: 1459, col: 1, offset: 35078}, expr: &actionExpr{ - pos: position{line: 1465, col: 5, offset: 35207}, + pos: position{line: 1460, col: 5, offset: 35096}, run: (*parser).callonPrimitiveType1, expr: &choiceExpr{ - pos: position{line: 1465, col: 9, offset: 35211}, + pos: position{line: 1460, col: 9, offset: 35100}, alternatives: []any{ &litMatcher{ - pos: position{line: 1465, col: 9, offset: 35211}, + pos: position{line: 1460, col: 9, offset: 35100}, val: "uint8", ignoreCase: false, want: "\"uint8\"", }, &litMatcher{ - pos: position{line: 1465, col: 19, offset: 35221}, + pos: position{line: 1460, col: 19, offset: 35110}, val: "uint16", ignoreCase: false, want: "\"uint16\"", }, &litMatcher{ - pos: position{line: 1465, col: 30, offset: 35232}, + pos: position{line: 1460, col: 30, offset: 35121}, val: "uint32", ignoreCase: false, want: "\"uint32\"", }, &litMatcher{ - pos: position{line: 1465, col: 41, offset: 35243}, + pos: position{line: 1460, col: 41, offset: 35132}, val: "uint64", ignoreCase: false, want: "\"uint64\"", }, &litMatcher{ - pos: position{line: 1466, col: 9, offset: 35260}, + pos: position{line: 1461, col: 9, offset: 35149}, val: "int8", ignoreCase: false, want: "\"int8\"", }, &litMatcher{ - pos: position{line: 1466, col: 18, offset: 35269}, + pos: position{line: 1461, col: 18, offset: 35158}, val: "int16", ignoreCase: false, want: "\"int16\"", }, &litMatcher{ - pos: position{line: 1466, col: 28, offset: 35279}, + pos: position{line: 1461, col: 28, offset: 35168}, val: "int32", ignoreCase: false, want: "\"int32\"", }, &litMatcher{ - pos: position{line: 1466, col: 38, offset: 35289}, + pos: position{line: 1461, col: 38, offset: 35178}, val: "int64", ignoreCase: false, want: "\"int64\"", }, &litMatcher{ - pos: position{line: 1467, col: 9, offset: 35305}, + pos: position{line: 1462, col: 9, offset: 35194}, val: "float16", ignoreCase: false, want: "\"float16\"", }, &litMatcher{ - pos: position{line: 1467, col: 21, offset: 35317}, + pos: position{line: 1462, col: 21, offset: 35206}, val: "float32", ignoreCase: false, want: "\"float32\"", }, &litMatcher{ - pos: position{line: 1467, col: 33, offset: 35329}, + pos: position{line: 1462, col: 33, offset: 35218}, val: "float64", ignoreCase: false, want: "\"float64\"", }, &litMatcher{ - pos: position{line: 1468, col: 9, offset: 35347}, + pos: position{line: 1463, col: 9, offset: 35236}, val: "bool", ignoreCase: false, want: "\"bool\"", }, &litMatcher{ - pos: position{line: 1468, col: 18, offset: 35356}, + pos: position{line: 1463, col: 18, offset: 35245}, val: "string", ignoreCase: false, want: "\"string\"", }, &litMatcher{ - pos: position{line: 1469, col: 9, offset: 35373}, + pos: position{line: 1464, col: 9, offset: 35262}, val: "duration", ignoreCase: false, want: "\"duration\"", }, &litMatcher{ - pos: position{line: 1469, col: 22, offset: 35386}, + pos: position{line: 1464, col: 22, offset: 35275}, val: "time", ignoreCase: false, want: "\"time\"", }, &litMatcher{ - pos: position{line: 1470, col: 9, offset: 35401}, + pos: position{line: 1465, col: 9, offset: 35290}, val: "bytes", ignoreCase: false, want: "\"bytes\"", }, &litMatcher{ - pos: position{line: 1471, col: 9, offset: 35417}, + pos: position{line: 1466, col: 9, offset: 35306}, val: "ip", ignoreCase: false, want: "\"ip\"", }, &litMatcher{ - pos: position{line: 1471, col: 16, offset: 35424}, + pos: position{line: 1466, col: 16, offset: 35313}, val: "net", ignoreCase: false, want: "\"net\"", }, &litMatcher{ - pos: position{line: 1472, col: 9, offset: 35438}, + pos: position{line: 1467, col: 9, offset: 35327}, val: "type", ignoreCase: false, want: "\"type\"", }, &litMatcher{ - pos: position{line: 1472, col: 18, offset: 35447}, + pos: position{line: 1467, col: 18, offset: 35336}, val: "null", ignoreCase: false, want: "\"null\"", @@ -10090,31 +10053,31 @@ var g = &grammar{ }, { name: "TypeFieldList", - pos: position{line: 1480, col: 1, offset: 35632}, + pos: position{line: 1475, col: 1, offset: 35521}, expr: &choiceExpr{ - pos: position{line: 1481, col: 5, offset: 35650}, + pos: position{line: 1476, col: 5, offset: 35539}, alternatives: []any{ &actionExpr{ - pos: position{line: 1481, col: 5, offset: 35650}, + pos: position{line: 1476, col: 5, offset: 35539}, run: (*parser).callonTypeFieldList2, expr: &seqExpr{ - pos: position{line: 1481, col: 5, offset: 35650}, + pos: position{line: 1476, col: 5, offset: 35539}, exprs: []any{ &labeledExpr{ - pos: position{line: 1481, col: 5, offset: 35650}, + pos: position{line: 1476, col: 5, offset: 35539}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1481, col: 11, offset: 35656}, + pos: position{line: 1476, col: 11, offset: 35545}, name: "TypeField", }, }, &labeledExpr{ - pos: position{line: 1481, col: 21, offset: 35666}, + pos: position{line: 1476, col: 21, offset: 35555}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 1481, col: 26, offset: 35671}, + pos: position{line: 1476, col: 26, offset: 35560}, expr: &ruleRefExpr{ - pos: position{line: 1481, col: 26, offset: 35671}, + pos: position{line: 1476, col: 26, offset: 35560}, name: "TypeFieldListTail", }, }, @@ -10123,10 +10086,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1484, col: 5, offset: 35737}, + pos: position{line: 1479, col: 5, offset: 35626}, run: (*parser).callonTypeFieldList9, expr: &litMatcher{ - pos: position{line: 1484, col: 5, offset: 35737}, + pos: position{line: 1479, col: 5, offset: 35626}, val: "", ignoreCase: false, want: "\"\"", @@ -10139,32 +10102,32 @@ var g = &grammar{ }, { name: "TypeFieldListTail", - pos: position{line: 1486, col: 1, offset: 35761}, + pos: position{line: 1481, col: 1, offset: 35650}, expr: &actionExpr{ - pos: position{line: 1486, col: 21, offset: 35781}, + pos: position{line: 1481, col: 21, offset: 35670}, run: (*parser).callonTypeFieldListTail1, expr: &seqExpr{ - pos: position{line: 1486, col: 21, offset: 35781}, + pos: position{line: 1481, col: 21, offset: 35670}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1486, col: 21, offset: 35781}, + pos: position{line: 1481, col: 21, offset: 35670}, name: "__", }, &litMatcher{ - pos: position{line: 1486, col: 24, offset: 35784}, + pos: position{line: 1481, col: 24, offset: 35673}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1486, col: 28, offset: 35788}, + pos: position{line: 1481, col: 28, offset: 35677}, name: "__", }, &labeledExpr{ - pos: position{line: 1486, col: 31, offset: 35791}, + pos: position{line: 1481, col: 31, offset: 35680}, label: "typ", expr: &ruleRefExpr{ - pos: position{line: 1486, col: 35, offset: 35795}, + pos: position{line: 1481, col: 35, offset: 35684}, name: "TypeField", }, }, @@ -10176,40 +10139,40 @@ var g = &grammar{ }, { name: "TypeField", - pos: position{line: 1488, col: 1, offset: 35826}, + pos: position{line: 1483, col: 1, offset: 35715}, expr: &actionExpr{ - pos: position{line: 1489, col: 5, offset: 35840}, + pos: position{line: 1484, col: 5, offset: 35729}, run: (*parser).callonTypeField1, expr: &seqExpr{ - pos: position{line: 1489, col: 5, offset: 35840}, + pos: position{line: 1484, col: 5, offset: 35729}, exprs: []any{ &labeledExpr{ - pos: position{line: 1489, col: 5, offset: 35840}, + pos: position{line: 1484, col: 5, offset: 35729}, label: "name", expr: &ruleRefExpr{ - pos: position{line: 1489, col: 10, offset: 35845}, + pos: position{line: 1484, col: 10, offset: 35734}, name: "Name", }, }, &ruleRefExpr{ - pos: position{line: 1489, col: 15, offset: 35850}, + pos: position{line: 1484, col: 15, offset: 35739}, name: "__", }, &litMatcher{ - pos: position{line: 1489, col: 18, offset: 35853}, + pos: position{line: 1484, col: 18, offset: 35742}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1489, col: 22, offset: 35857}, + pos: position{line: 1484, col: 22, offset: 35746}, name: "__", }, &labeledExpr{ - pos: position{line: 1489, col: 25, offset: 35860}, + pos: position{line: 1484, col: 25, offset: 35749}, label: "typ", expr: &ruleRefExpr{ - pos: position{line: 1489, col: 29, offset: 35864}, + pos: position{line: 1484, col: 29, offset: 35753}, name: "Type", }, }, @@ -10221,54 +10184,54 @@ var g = &grammar{ }, { name: "Name", - pos: position{line: 1497, col: 1, offset: 36013}, + pos: position{line: 1492, col: 1, offset: 35902}, expr: &choiceExpr{ - pos: position{line: 1498, col: 5, offset: 36022}, + pos: position{line: 1493, col: 5, offset: 35911}, alternatives: []any{ &actionExpr{ - pos: position{line: 1498, col: 5, offset: 36022}, + pos: position{line: 1493, col: 5, offset: 35911}, run: (*parser).callonName2, expr: &labeledExpr{ - pos: position{line: 1498, col: 5, offset: 36022}, + pos: position{line: 1493, col: 5, offset: 35911}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1498, col: 7, offset: 36024}, + pos: position{line: 1493, col: 7, offset: 35913}, name: "DottedIDs", }, }, }, &actionExpr{ - pos: position{line: 1499, col: 5, offset: 36113}, + pos: position{line: 1494, col: 5, offset: 36002}, run: (*parser).callonName5, expr: &labeledExpr{ - pos: position{line: 1499, col: 5, offset: 36113}, + pos: position{line: 1494, col: 5, offset: 36002}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1499, col: 7, offset: 36115}, + pos: position{line: 1494, col: 7, offset: 36004}, name: "IdentifierName", }, }, }, &actionExpr{ - pos: position{line: 1500, col: 5, offset: 36204}, + pos: position{line: 1495, col: 5, offset: 36093}, run: (*parser).callonName8, expr: &labeledExpr{ - pos: position{line: 1500, col: 5, offset: 36204}, + pos: position{line: 1495, col: 5, offset: 36093}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1500, col: 7, offset: 36206}, + pos: position{line: 1495, col: 7, offset: 36095}, name: "QuotedString", }, }, }, &actionExpr{ - pos: position{line: 1501, col: 5, offset: 36295}, + pos: position{line: 1496, col: 5, offset: 36184}, run: (*parser).callonName11, expr: &labeledExpr{ - pos: position{line: 1501, col: 5, offset: 36295}, + pos: position{line: 1496, col: 5, offset: 36184}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1501, col: 7, offset: 36297}, + pos: position{line: 1496, col: 7, offset: 36186}, name: "KSUID", }, }, @@ -10280,22 +10243,22 @@ var g = &grammar{ }, { name: "DottedIDs", - pos: position{line: 1503, col: 1, offset: 36383}, + pos: position{line: 1498, col: 1, offset: 36272}, expr: &actionExpr{ - pos: position{line: 1504, col: 5, offset: 36397}, + pos: position{line: 1499, col: 5, offset: 36286}, run: (*parser).callonDottedIDs1, expr: &seqExpr{ - pos: position{line: 1504, col: 5, offset: 36397}, + pos: position{line: 1499, col: 5, offset: 36286}, exprs: []any{ &choiceExpr{ - pos: position{line: 1504, col: 6, offset: 36398}, + pos: position{line: 1499, col: 6, offset: 36287}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1504, col: 6, offset: 36398}, + pos: position{line: 1499, col: 6, offset: 36287}, name: "IdentifierStart", }, &litMatcher{ - pos: position{line: 1504, col: 24, offset: 36416}, + pos: position{line: 1499, col: 24, offset: 36305}, val: ".", ignoreCase: false, want: "\".\"", @@ -10303,16 +10266,16 @@ var g = &grammar{ }, }, &zeroOrMoreExpr{ - pos: position{line: 1504, col: 29, offset: 36421}, + pos: position{line: 1499, col: 29, offset: 36310}, expr: &choiceExpr{ - pos: position{line: 1504, col: 30, offset: 36422}, + pos: position{line: 1499, col: 30, offset: 36311}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1504, col: 30, offset: 36422}, + pos: position{line: 1499, col: 30, offset: 36311}, name: "IdentifierRest", }, &litMatcher{ - pos: position{line: 1504, col: 47, offset: 36439}, + pos: position{line: 1499, col: 47, offset: 36328}, val: ".", ignoreCase: false, want: "\".\"", @@ -10328,15 +10291,15 @@ var g = &grammar{ }, { name: "Identifier", - pos: position{line: 1506, col: 1, offset: 36477}, + pos: position{line: 1501, col: 1, offset: 36366}, expr: &actionExpr{ - pos: position{line: 1507, col: 5, offset: 36492}, + pos: position{line: 1502, col: 5, offset: 36381}, run: (*parser).callonIdentifier1, expr: &labeledExpr{ - pos: position{line: 1507, col: 5, offset: 36492}, + pos: position{line: 1502, col: 5, offset: 36381}, label: "id", expr: &ruleRefExpr{ - pos: position{line: 1507, col: 8, offset: 36495}, + pos: position{line: 1502, col: 8, offset: 36384}, name: "IdentifierName", }, }, @@ -10346,51 +10309,51 @@ var g = &grammar{ }, { name: "Identifiers", - pos: position{line: 1515, col: 1, offset: 36628}, + pos: position{line: 1510, col: 1, offset: 36517}, expr: &actionExpr{ - pos: position{line: 1516, col: 5, offset: 36644}, + pos: position{line: 1511, col: 5, offset: 36533}, run: (*parser).callonIdentifiers1, expr: &seqExpr{ - pos: position{line: 1516, col: 5, offset: 36644}, + pos: position{line: 1511, col: 5, offset: 36533}, exprs: []any{ &labeledExpr{ - pos: position{line: 1516, col: 5, offset: 36644}, + pos: position{line: 1511, col: 5, offset: 36533}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1516, col: 11, offset: 36650}, + pos: position{line: 1511, col: 11, offset: 36539}, name: "Identifier", }, }, &labeledExpr{ - pos: position{line: 1516, col: 22, offset: 36661}, + pos: position{line: 1511, col: 22, offset: 36550}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 1516, col: 27, offset: 36666}, + pos: position{line: 1511, col: 27, offset: 36555}, expr: &actionExpr{ - pos: position{line: 1516, col: 28, offset: 36667}, + pos: position{line: 1511, col: 28, offset: 36556}, run: (*parser).callonIdentifiers7, expr: &seqExpr{ - pos: position{line: 1516, col: 28, offset: 36667}, + pos: position{line: 1511, col: 28, offset: 36556}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1516, col: 28, offset: 36667}, + pos: position{line: 1511, col: 28, offset: 36556}, name: "__", }, &litMatcher{ - pos: position{line: 1516, col: 31, offset: 36670}, + pos: position{line: 1511, col: 31, offset: 36559}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1516, col: 35, offset: 36674}, + pos: position{line: 1511, col: 35, offset: 36563}, name: "__", }, &labeledExpr{ - pos: position{line: 1516, col: 38, offset: 36677}, + pos: position{line: 1511, col: 38, offset: 36566}, label: "name", expr: &ruleRefExpr{ - pos: position{line: 1516, col: 43, offset: 36682}, + pos: position{line: 1511, col: 43, offset: 36571}, name: "Identifier", }, }, @@ -10407,29 +10370,29 @@ var g = &grammar{ }, { name: "IdentifierName", - pos: position{line: 1520, col: 1, offset: 36760}, + pos: position{line: 1515, col: 1, offset: 36649}, expr: &choiceExpr{ - pos: position{line: 1521, col: 5, offset: 36779}, + pos: position{line: 1516, col: 5, offset: 36668}, alternatives: []any{ &actionExpr{ - pos: position{line: 1521, col: 5, offset: 36779}, + pos: position{line: 1516, col: 5, offset: 36668}, run: (*parser).callonIdentifierName2, expr: &seqExpr{ - pos: position{line: 1521, col: 5, offset: 36779}, + pos: position{line: 1516, col: 5, offset: 36668}, exprs: []any{ ¬Expr{ - pos: position{line: 1521, col: 5, offset: 36779}, + pos: position{line: 1516, col: 5, offset: 36668}, expr: &seqExpr{ - pos: position{line: 1521, col: 7, offset: 36781}, + pos: position{line: 1516, col: 7, offset: 36670}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1521, col: 7, offset: 36781}, + pos: position{line: 1516, col: 7, offset: 36670}, name: "IDGuard", }, ¬Expr{ - pos: position{line: 1521, col: 15, offset: 36789}, + pos: position{line: 1516, col: 15, offset: 36678}, expr: &ruleRefExpr{ - pos: position{line: 1521, col: 16, offset: 36790}, + pos: position{line: 1516, col: 16, offset: 36679}, name: "IdentifierRest", }, }, @@ -10437,13 +10400,13 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1521, col: 32, offset: 36806}, + pos: position{line: 1516, col: 32, offset: 36695}, name: "IdentifierStart", }, &zeroOrMoreExpr{ - pos: position{line: 1521, col: 48, offset: 36822}, + pos: position{line: 1516, col: 48, offset: 36711}, expr: &ruleRefExpr{ - pos: position{line: 1521, col: 48, offset: 36822}, + pos: position{line: 1516, col: 48, offset: 36711}, name: "IdentifierRest", }, }, @@ -10451,32 +10414,32 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1522, col: 5, offset: 36873}, + pos: position{line: 1517, col: 5, offset: 36762}, run: (*parser).callonIdentifierName12, expr: &litMatcher{ - pos: position{line: 1522, col: 5, offset: 36873}, + pos: position{line: 1517, col: 5, offset: 36762}, val: "$", ignoreCase: false, want: "\"$\"", }, }, &actionExpr{ - pos: position{line: 1523, col: 5, offset: 36912}, + pos: position{line: 1518, col: 5, offset: 36801}, run: (*parser).callonIdentifierName14, expr: &seqExpr{ - pos: position{line: 1523, col: 5, offset: 36912}, + pos: position{line: 1518, col: 5, offset: 36801}, exprs: []any{ &litMatcher{ - pos: position{line: 1523, col: 5, offset: 36912}, + pos: position{line: 1518, col: 5, offset: 36801}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &labeledExpr{ - pos: position{line: 1523, col: 10, offset: 36917}, + pos: position{line: 1518, col: 10, offset: 36806}, label: "id", expr: &ruleRefExpr{ - pos: position{line: 1523, col: 13, offset: 36920}, + pos: position{line: 1518, col: 13, offset: 36809}, name: "IDGuard", }, }, @@ -10484,17 +10447,17 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1525, col: 5, offset: 37011}, + pos: position{line: 1520, col: 5, offset: 36900}, run: (*parser).callonIdentifierName19, expr: &litMatcher{ - pos: position{line: 1525, col: 5, offset: 37011}, + pos: position{line: 1520, col: 5, offset: 36900}, val: "type", ignoreCase: false, want: "\"type\"", }, }, &ruleRefExpr{ - pos: position{line: 1526, col: 5, offset: 37053}, + pos: position{line: 1521, col: 5, offset: 36942}, name: "BacktickString", }, }, @@ -10504,22 +10467,22 @@ var g = &grammar{ }, { name: "IdentifierStart", - pos: position{line: 1528, col: 1, offset: 37070}, + pos: position{line: 1523, col: 1, offset: 36959}, expr: &choiceExpr{ - pos: position{line: 1529, col: 5, offset: 37090}, + pos: position{line: 1524, col: 5, offset: 36979}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1529, col: 5, offset: 37090}, + pos: position{line: 1524, col: 5, offset: 36979}, name: "UnicodeLetter", }, &litMatcher{ - pos: position{line: 1530, col: 5, offset: 37108}, + pos: position{line: 1525, col: 5, offset: 36997}, val: "$", ignoreCase: false, want: "\"$\"", }, &litMatcher{ - pos: position{line: 1531, col: 5, offset: 37116}, + pos: position{line: 1526, col: 5, offset: 37005}, val: "_", ignoreCase: false, want: "\"_\"", @@ -10531,24 +10494,24 @@ var g = &grammar{ }, { name: "IdentifierRest", - pos: position{line: 1533, col: 1, offset: 37121}, + pos: position{line: 1528, col: 1, offset: 37010}, expr: &choiceExpr{ - pos: position{line: 1534, col: 5, offset: 37140}, + pos: position{line: 1529, col: 5, offset: 37029}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1534, col: 5, offset: 37140}, + pos: position{line: 1529, col: 5, offset: 37029}, name: "IdentifierStart", }, &ruleRefExpr{ - pos: position{line: 1535, col: 5, offset: 37160}, + pos: position{line: 1530, col: 5, offset: 37049}, name: "UnicodeCombiningMark", }, &ruleRefExpr{ - pos: position{line: 1536, col: 5, offset: 37185}, + pos: position{line: 1531, col: 5, offset: 37074}, name: "UnicodeDigit", }, &ruleRefExpr{ - pos: position{line: 1537, col: 5, offset: 37202}, + pos: position{line: 1532, col: 5, offset: 37091}, name: "UnicodeConnectorPunctuation", }, }, @@ -10558,24 +10521,24 @@ var g = &grammar{ }, { name: "IDGuard", - pos: position{line: 1539, col: 1, offset: 37231}, + pos: position{line: 1534, col: 1, offset: 37120}, expr: &choiceExpr{ - pos: position{line: 1540, col: 5, offset: 37243}, + pos: position{line: 1535, col: 5, offset: 37132}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1540, col: 5, offset: 37243}, + pos: position{line: 1535, col: 5, offset: 37132}, name: "BooleanLiteral", }, &ruleRefExpr{ - pos: position{line: 1541, col: 5, offset: 37262}, + pos: position{line: 1536, col: 5, offset: 37151}, name: "NullLiteral", }, &ruleRefExpr{ - pos: position{line: 1542, col: 5, offset: 37278}, + pos: position{line: 1537, col: 5, offset: 37167}, name: "NaN", }, &ruleRefExpr{ - pos: position{line: 1543, col: 5, offset: 37286}, + pos: position{line: 1538, col: 5, offset: 37175}, name: "Infinity", }, }, @@ -10585,25 +10548,25 @@ var g = &grammar{ }, { name: "Time", - pos: position{line: 1545, col: 1, offset: 37296}, + pos: position{line: 1540, col: 1, offset: 37185}, expr: &actionExpr{ - pos: position{line: 1546, col: 5, offset: 37305}, + pos: position{line: 1541, col: 5, offset: 37194}, run: (*parser).callonTime1, expr: &seqExpr{ - pos: position{line: 1546, col: 5, offset: 37305}, + pos: position{line: 1541, col: 5, offset: 37194}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1546, col: 5, offset: 37305}, + pos: position{line: 1541, col: 5, offset: 37194}, name: "FullDate", }, &litMatcher{ - pos: position{line: 1546, col: 14, offset: 37314}, + pos: position{line: 1541, col: 14, offset: 37203}, val: "T", ignoreCase: false, want: "\"T\"", }, &ruleRefExpr{ - pos: position{line: 1546, col: 18, offset: 37318}, + pos: position{line: 1541, col: 18, offset: 37207}, name: "FullTime", }, }, @@ -10614,32 +10577,32 @@ var g = &grammar{ }, { name: "FullDate", - pos: position{line: 1550, col: 1, offset: 37394}, + pos: position{line: 1545, col: 1, offset: 37283}, expr: &seqExpr{ - pos: position{line: 1550, col: 12, offset: 37405}, + pos: position{line: 1545, col: 12, offset: 37294}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1550, col: 12, offset: 37405}, + pos: position{line: 1545, col: 12, offset: 37294}, name: "D4", }, &litMatcher{ - pos: position{line: 1550, col: 15, offset: 37408}, + pos: position{line: 1545, col: 15, offset: 37297}, val: "-", ignoreCase: false, want: "\"-\"", }, &ruleRefExpr{ - pos: position{line: 1550, col: 19, offset: 37412}, + pos: position{line: 1545, col: 19, offset: 37301}, name: "D2", }, &litMatcher{ - pos: position{line: 1550, col: 22, offset: 37415}, + pos: position{line: 1545, col: 22, offset: 37304}, val: "-", ignoreCase: false, want: "\"-\"", }, &ruleRefExpr{ - pos: position{line: 1550, col: 26, offset: 37419}, + pos: position{line: 1545, col: 26, offset: 37308}, name: "D2", }, }, @@ -10649,33 +10612,33 @@ var g = &grammar{ }, { name: "D4", - pos: position{line: 1552, col: 1, offset: 37423}, + pos: position{line: 1547, col: 1, offset: 37312}, expr: &seqExpr{ - pos: position{line: 1552, col: 6, offset: 37428}, + pos: position{line: 1547, col: 6, offset: 37317}, exprs: []any{ &charClassMatcher{ - pos: position{line: 1552, col: 6, offset: 37428}, + pos: position{line: 1547, col: 6, offset: 37317}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, inverted: false, }, &charClassMatcher{ - pos: position{line: 1552, col: 11, offset: 37433}, + pos: position{line: 1547, col: 11, offset: 37322}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, inverted: false, }, &charClassMatcher{ - pos: position{line: 1552, col: 16, offset: 37438}, + pos: position{line: 1547, col: 16, offset: 37327}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, inverted: false, }, &charClassMatcher{ - pos: position{line: 1552, col: 21, offset: 37443}, + pos: position{line: 1547, col: 21, offset: 37332}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -10688,19 +10651,19 @@ var g = &grammar{ }, { name: "D2", - pos: position{line: 1553, col: 1, offset: 37449}, + pos: position{line: 1548, col: 1, offset: 37338}, expr: &seqExpr{ - pos: position{line: 1553, col: 6, offset: 37454}, + pos: position{line: 1548, col: 6, offset: 37343}, exprs: []any{ &charClassMatcher{ - pos: position{line: 1553, col: 6, offset: 37454}, + pos: position{line: 1548, col: 6, offset: 37343}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, inverted: false, }, &charClassMatcher{ - pos: position{line: 1553, col: 11, offset: 37459}, + pos: position{line: 1548, col: 11, offset: 37348}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -10713,16 +10676,16 @@ var g = &grammar{ }, { name: "FullTime", - pos: position{line: 1555, col: 1, offset: 37466}, + pos: position{line: 1550, col: 1, offset: 37355}, expr: &seqExpr{ - pos: position{line: 1555, col: 12, offset: 37477}, + pos: position{line: 1550, col: 12, offset: 37366}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1555, col: 12, offset: 37477}, + pos: position{line: 1550, col: 12, offset: 37366}, name: "PartialTime", }, &ruleRefExpr{ - pos: position{line: 1555, col: 24, offset: 37489}, + pos: position{line: 1550, col: 24, offset: 37378}, name: "TimeOffset", }, }, @@ -10732,49 +10695,49 @@ var g = &grammar{ }, { name: "PartialTime", - pos: position{line: 1557, col: 1, offset: 37501}, + pos: position{line: 1552, col: 1, offset: 37390}, expr: &seqExpr{ - pos: position{line: 1557, col: 15, offset: 37515}, + pos: position{line: 1552, col: 15, offset: 37404}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1557, col: 15, offset: 37515}, + pos: position{line: 1552, col: 15, offset: 37404}, name: "D2", }, &litMatcher{ - pos: position{line: 1557, col: 18, offset: 37518}, + pos: position{line: 1552, col: 18, offset: 37407}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1557, col: 22, offset: 37522}, + pos: position{line: 1552, col: 22, offset: 37411}, name: "D2", }, &litMatcher{ - pos: position{line: 1557, col: 25, offset: 37525}, + pos: position{line: 1552, col: 25, offset: 37414}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1557, col: 29, offset: 37529}, + pos: position{line: 1552, col: 29, offset: 37418}, name: "D2", }, &zeroOrOneExpr{ - pos: position{line: 1557, col: 32, offset: 37532}, + pos: position{line: 1552, col: 32, offset: 37421}, expr: &seqExpr{ - pos: position{line: 1557, col: 33, offset: 37533}, + pos: position{line: 1552, col: 33, offset: 37422}, exprs: []any{ &litMatcher{ - pos: position{line: 1557, col: 33, offset: 37533}, + pos: position{line: 1552, col: 33, offset: 37422}, val: ".", ignoreCase: false, want: "\".\"", }, &oneOrMoreExpr{ - pos: position{line: 1557, col: 37, offset: 37537}, + pos: position{line: 1552, col: 37, offset: 37426}, expr: &charClassMatcher{ - pos: position{line: 1557, col: 37, offset: 37537}, + pos: position{line: 1552, col: 37, offset: 37426}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -10791,30 +10754,30 @@ var g = &grammar{ }, { name: "TimeOffset", - pos: position{line: 1559, col: 1, offset: 37547}, + pos: position{line: 1554, col: 1, offset: 37436}, expr: &choiceExpr{ - pos: position{line: 1560, col: 5, offset: 37562}, + pos: position{line: 1555, col: 5, offset: 37451}, alternatives: []any{ &litMatcher{ - pos: position{line: 1560, col: 5, offset: 37562}, + pos: position{line: 1555, col: 5, offset: 37451}, val: "Z", ignoreCase: false, want: "\"Z\"", }, &seqExpr{ - pos: position{line: 1561, col: 5, offset: 37570}, + pos: position{line: 1556, col: 5, offset: 37459}, exprs: []any{ &choiceExpr{ - pos: position{line: 1561, col: 6, offset: 37571}, + pos: position{line: 1556, col: 6, offset: 37460}, alternatives: []any{ &litMatcher{ - pos: position{line: 1561, col: 6, offset: 37571}, + pos: position{line: 1556, col: 6, offset: 37460}, val: "+", ignoreCase: false, want: "\"+\"", }, &litMatcher{ - pos: position{line: 1561, col: 12, offset: 37577}, + pos: position{line: 1556, col: 12, offset: 37466}, val: "-", ignoreCase: false, want: "\"-\"", @@ -10822,34 +10785,34 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1561, col: 17, offset: 37582}, + pos: position{line: 1556, col: 17, offset: 37471}, name: "D2", }, &litMatcher{ - pos: position{line: 1561, col: 20, offset: 37585}, + pos: position{line: 1556, col: 20, offset: 37474}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1561, col: 24, offset: 37589}, + pos: position{line: 1556, col: 24, offset: 37478}, name: "D2", }, &zeroOrOneExpr{ - pos: position{line: 1561, col: 27, offset: 37592}, + pos: position{line: 1556, col: 27, offset: 37481}, expr: &seqExpr{ - pos: position{line: 1561, col: 28, offset: 37593}, + pos: position{line: 1556, col: 28, offset: 37482}, exprs: []any{ &litMatcher{ - pos: position{line: 1561, col: 28, offset: 37593}, + pos: position{line: 1556, col: 28, offset: 37482}, val: ".", ignoreCase: false, want: "\".\"", }, &oneOrMoreExpr{ - pos: position{line: 1561, col: 32, offset: 37597}, + pos: position{line: 1556, col: 32, offset: 37486}, expr: &charClassMatcher{ - pos: position{line: 1561, col: 32, offset: 37597}, + pos: position{line: 1556, col: 32, offset: 37486}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -10868,33 +10831,33 @@ var g = &grammar{ }, { name: "Duration", - pos: position{line: 1563, col: 1, offset: 37607}, + pos: position{line: 1558, col: 1, offset: 37496}, expr: &actionExpr{ - pos: position{line: 1564, col: 5, offset: 37620}, + pos: position{line: 1559, col: 5, offset: 37509}, run: (*parser).callonDuration1, expr: &seqExpr{ - pos: position{line: 1564, col: 5, offset: 37620}, + pos: position{line: 1559, col: 5, offset: 37509}, exprs: []any{ &zeroOrOneExpr{ - pos: position{line: 1564, col: 5, offset: 37620}, + pos: position{line: 1559, col: 5, offset: 37509}, expr: &litMatcher{ - pos: position{line: 1564, col: 5, offset: 37620}, + pos: position{line: 1559, col: 5, offset: 37509}, val: "-", ignoreCase: false, want: "\"-\"", }, }, &oneOrMoreExpr{ - pos: position{line: 1564, col: 10, offset: 37625}, + pos: position{line: 1559, col: 10, offset: 37514}, expr: &seqExpr{ - pos: position{line: 1564, col: 11, offset: 37626}, + pos: position{line: 1559, col: 11, offset: 37515}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1564, col: 11, offset: 37626}, + pos: position{line: 1559, col: 11, offset: 37515}, name: "Decimal", }, &ruleRefExpr{ - pos: position{line: 1564, col: 19, offset: 37634}, + pos: position{line: 1559, col: 19, offset: 37523}, name: "TimeUnit", }, }, @@ -10908,27 +10871,27 @@ var g = &grammar{ }, { name: "Decimal", - pos: position{line: 1568, col: 1, offset: 37716}, + pos: position{line: 1563, col: 1, offset: 37605}, expr: &seqExpr{ - pos: position{line: 1568, col: 11, offset: 37726}, + pos: position{line: 1563, col: 11, offset: 37615}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1568, col: 11, offset: 37726}, + pos: position{line: 1563, col: 11, offset: 37615}, name: "UInt", }, &zeroOrOneExpr{ - pos: position{line: 1568, col: 16, offset: 37731}, + pos: position{line: 1563, col: 16, offset: 37620}, expr: &seqExpr{ - pos: position{line: 1568, col: 17, offset: 37732}, + pos: position{line: 1563, col: 17, offset: 37621}, exprs: []any{ &litMatcher{ - pos: position{line: 1568, col: 17, offset: 37732}, + pos: position{line: 1563, col: 17, offset: 37621}, val: ".", ignoreCase: false, want: "\".\"", }, &ruleRefExpr{ - pos: position{line: 1568, col: 21, offset: 37736}, + pos: position{line: 1563, col: 21, offset: 37625}, name: "UInt", }, }, @@ -10941,60 +10904,60 @@ var g = &grammar{ }, { name: "TimeUnit", - pos: position{line: 1570, col: 1, offset: 37744}, + pos: position{line: 1565, col: 1, offset: 37633}, expr: &choiceExpr{ - pos: position{line: 1571, col: 5, offset: 37757}, + pos: position{line: 1566, col: 5, offset: 37646}, alternatives: []any{ &litMatcher{ - pos: position{line: 1571, col: 5, offset: 37757}, + pos: position{line: 1566, col: 5, offset: 37646}, val: "ns", ignoreCase: false, want: "\"ns\"", }, &litMatcher{ - pos: position{line: 1572, col: 5, offset: 37766}, + pos: position{line: 1567, col: 5, offset: 37655}, val: "us", ignoreCase: false, want: "\"us\"", }, &litMatcher{ - pos: position{line: 1573, col: 5, offset: 37775}, + pos: position{line: 1568, col: 5, offset: 37664}, val: "ms", ignoreCase: false, want: "\"ms\"", }, &litMatcher{ - pos: position{line: 1574, col: 5, offset: 37784}, + pos: position{line: 1569, col: 5, offset: 37673}, val: "s", ignoreCase: false, want: "\"s\"", }, &litMatcher{ - pos: position{line: 1575, col: 5, offset: 37792}, + pos: position{line: 1570, col: 5, offset: 37681}, val: "m", ignoreCase: false, want: "\"m\"", }, &litMatcher{ - pos: position{line: 1576, col: 5, offset: 37800}, + pos: position{line: 1571, col: 5, offset: 37689}, val: "h", ignoreCase: false, want: "\"h\"", }, &litMatcher{ - pos: position{line: 1577, col: 5, offset: 37808}, + pos: position{line: 1572, col: 5, offset: 37697}, val: "d", ignoreCase: false, want: "\"d\"", }, &litMatcher{ - pos: position{line: 1578, col: 5, offset: 37816}, + pos: position{line: 1573, col: 5, offset: 37705}, val: "w", ignoreCase: false, want: "\"w\"", }, &litMatcher{ - pos: position{line: 1579, col: 5, offset: 37824}, + pos: position{line: 1574, col: 5, offset: 37713}, val: "y", ignoreCase: false, want: "\"y\"", @@ -11006,45 +10969,45 @@ var g = &grammar{ }, { name: "IP", - pos: position{line: 1581, col: 1, offset: 37829}, + pos: position{line: 1576, col: 1, offset: 37718}, expr: &actionExpr{ - pos: position{line: 1582, col: 5, offset: 37836}, + pos: position{line: 1577, col: 5, offset: 37725}, run: (*parser).callonIP1, expr: &seqExpr{ - pos: position{line: 1582, col: 5, offset: 37836}, + pos: position{line: 1577, col: 5, offset: 37725}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1582, col: 5, offset: 37836}, + pos: position{line: 1577, col: 5, offset: 37725}, name: "UInt", }, &litMatcher{ - pos: position{line: 1582, col: 10, offset: 37841}, + pos: position{line: 1577, col: 10, offset: 37730}, val: ".", ignoreCase: false, want: "\".\"", }, &ruleRefExpr{ - pos: position{line: 1582, col: 14, offset: 37845}, + pos: position{line: 1577, col: 14, offset: 37734}, name: "UInt", }, &litMatcher{ - pos: position{line: 1582, col: 19, offset: 37850}, + pos: position{line: 1577, col: 19, offset: 37739}, val: ".", ignoreCase: false, want: "\".\"", }, &ruleRefExpr{ - pos: position{line: 1582, col: 23, offset: 37854}, + pos: position{line: 1577, col: 23, offset: 37743}, name: "UInt", }, &litMatcher{ - pos: position{line: 1582, col: 28, offset: 37859}, + pos: position{line: 1577, col: 28, offset: 37748}, val: ".", ignoreCase: false, want: "\".\"", }, &ruleRefExpr{ - pos: position{line: 1582, col: 32, offset: 37863}, + pos: position{line: 1577, col: 32, offset: 37752}, name: "UInt", }, }, @@ -11055,43 +11018,43 @@ var g = &grammar{ }, { name: "IP6", - pos: position{line: 1584, col: 1, offset: 37900}, + pos: position{line: 1579, col: 1, offset: 37789}, expr: &actionExpr{ - pos: position{line: 1585, col: 5, offset: 37908}, + pos: position{line: 1580, col: 5, offset: 37797}, run: (*parser).callonIP61, expr: &seqExpr{ - pos: position{line: 1585, col: 5, offset: 37908}, + pos: position{line: 1580, col: 5, offset: 37797}, exprs: []any{ ¬Expr{ - pos: position{line: 1585, col: 5, offset: 37908}, + pos: position{line: 1580, col: 5, offset: 37797}, expr: &seqExpr{ - pos: position{line: 1585, col: 7, offset: 37910}, + pos: position{line: 1580, col: 7, offset: 37799}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1585, col: 7, offset: 37910}, + pos: position{line: 1580, col: 7, offset: 37799}, name: "Hex", }, &litMatcher{ - pos: position{line: 1585, col: 11, offset: 37914}, + pos: position{line: 1580, col: 11, offset: 37803}, val: ":", ignoreCase: false, want: "\":\"", }, &ruleRefExpr{ - pos: position{line: 1585, col: 15, offset: 37918}, + pos: position{line: 1580, col: 15, offset: 37807}, name: "Hex", }, ¬Expr{ - pos: position{line: 1585, col: 19, offset: 37922}, + pos: position{line: 1580, col: 19, offset: 37811}, expr: &choiceExpr{ - pos: position{line: 1585, col: 21, offset: 37924}, + pos: position{line: 1580, col: 21, offset: 37813}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1585, col: 21, offset: 37924}, + pos: position{line: 1580, col: 21, offset: 37813}, name: "HexDigit", }, &litMatcher{ - pos: position{line: 1585, col: 32, offset: 37935}, + pos: position{line: 1580, col: 32, offset: 37824}, val: ":", ignoreCase: false, want: "\":\"", @@ -11103,10 +11066,10 @@ var g = &grammar{ }, }, &labeledExpr{ - pos: position{line: 1585, col: 38, offset: 37941}, + pos: position{line: 1580, col: 38, offset: 37830}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1585, col: 40, offset: 37943}, + pos: position{line: 1580, col: 40, offset: 37832}, name: "IP6Variations", }, }, @@ -11118,32 +11081,32 @@ var g = &grammar{ }, { name: "IP6Variations", - pos: position{line: 1589, col: 1, offset: 38107}, + pos: position{line: 1584, col: 1, offset: 37996}, expr: &choiceExpr{ - pos: position{line: 1590, col: 5, offset: 38125}, + pos: position{line: 1585, col: 5, offset: 38014}, alternatives: []any{ &actionExpr{ - pos: position{line: 1590, col: 5, offset: 38125}, + pos: position{line: 1585, col: 5, offset: 38014}, run: (*parser).callonIP6Variations2, expr: &seqExpr{ - pos: position{line: 1590, col: 5, offset: 38125}, + pos: position{line: 1585, col: 5, offset: 38014}, exprs: []any{ &labeledExpr{ - pos: position{line: 1590, col: 5, offset: 38125}, + pos: position{line: 1585, col: 5, offset: 38014}, label: "a", expr: &oneOrMoreExpr{ - pos: position{line: 1590, col: 7, offset: 38127}, + pos: position{line: 1585, col: 7, offset: 38016}, expr: &ruleRefExpr{ - pos: position{line: 1590, col: 7, offset: 38127}, + pos: position{line: 1585, col: 7, offset: 38016}, name: "HexColon", }, }, }, &labeledExpr{ - pos: position{line: 1590, col: 17, offset: 38137}, + pos: position{line: 1585, col: 17, offset: 38026}, label: "b", expr: &ruleRefExpr{ - pos: position{line: 1590, col: 19, offset: 38139}, + pos: position{line: 1585, col: 19, offset: 38028}, name: "IP6Tail", }, }, @@ -11151,52 +11114,52 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1593, col: 5, offset: 38203}, + pos: position{line: 1588, col: 5, offset: 38092}, run: (*parser).callonIP6Variations9, expr: &seqExpr{ - pos: position{line: 1593, col: 5, offset: 38203}, + pos: position{line: 1588, col: 5, offset: 38092}, exprs: []any{ &labeledExpr{ - pos: position{line: 1593, col: 5, offset: 38203}, + pos: position{line: 1588, col: 5, offset: 38092}, label: "a", expr: &ruleRefExpr{ - pos: position{line: 1593, col: 7, offset: 38205}, + pos: position{line: 1588, col: 7, offset: 38094}, name: "Hex", }, }, &labeledExpr{ - pos: position{line: 1593, col: 11, offset: 38209}, + pos: position{line: 1588, col: 11, offset: 38098}, label: "b", expr: &zeroOrMoreExpr{ - pos: position{line: 1593, col: 13, offset: 38211}, + pos: position{line: 1588, col: 13, offset: 38100}, expr: &ruleRefExpr{ - pos: position{line: 1593, col: 13, offset: 38211}, + pos: position{line: 1588, col: 13, offset: 38100}, name: "ColonHex", }, }, }, &litMatcher{ - pos: position{line: 1593, col: 23, offset: 38221}, + pos: position{line: 1588, col: 23, offset: 38110}, val: "::", ignoreCase: false, want: "\"::\"", }, &labeledExpr{ - pos: position{line: 1593, col: 28, offset: 38226}, + pos: position{line: 1588, col: 28, offset: 38115}, label: "d", expr: &zeroOrMoreExpr{ - pos: position{line: 1593, col: 30, offset: 38228}, + pos: position{line: 1588, col: 30, offset: 38117}, expr: &ruleRefExpr{ - pos: position{line: 1593, col: 30, offset: 38228}, + pos: position{line: 1588, col: 30, offset: 38117}, name: "HexColon", }, }, }, &labeledExpr{ - pos: position{line: 1593, col: 40, offset: 38238}, + pos: position{line: 1588, col: 40, offset: 38127}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 1593, col: 42, offset: 38240}, + pos: position{line: 1588, col: 42, offset: 38129}, name: "IP6Tail", }, }, @@ -11204,33 +11167,33 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1596, col: 5, offset: 38339}, + pos: position{line: 1591, col: 5, offset: 38228}, run: (*parser).callonIP6Variations22, expr: &seqExpr{ - pos: position{line: 1596, col: 5, offset: 38339}, + pos: position{line: 1591, col: 5, offset: 38228}, exprs: []any{ &litMatcher{ - pos: position{line: 1596, col: 5, offset: 38339}, + pos: position{line: 1591, col: 5, offset: 38228}, val: "::", ignoreCase: false, want: "\"::\"", }, &labeledExpr{ - pos: position{line: 1596, col: 10, offset: 38344}, + pos: position{line: 1591, col: 10, offset: 38233}, label: "a", expr: &zeroOrMoreExpr{ - pos: position{line: 1596, col: 12, offset: 38346}, + pos: position{line: 1591, col: 12, offset: 38235}, expr: &ruleRefExpr{ - pos: position{line: 1596, col: 12, offset: 38346}, + pos: position{line: 1591, col: 12, offset: 38235}, name: "HexColon", }, }, }, &labeledExpr{ - pos: position{line: 1596, col: 22, offset: 38356}, + pos: position{line: 1591, col: 22, offset: 38245}, label: "b", expr: &ruleRefExpr{ - pos: position{line: 1596, col: 24, offset: 38358}, + pos: position{line: 1591, col: 24, offset: 38247}, name: "IP6Tail", }, }, @@ -11238,32 +11201,32 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1599, col: 5, offset: 38429}, + pos: position{line: 1594, col: 5, offset: 38318}, run: (*parser).callonIP6Variations30, expr: &seqExpr{ - pos: position{line: 1599, col: 5, offset: 38429}, + pos: position{line: 1594, col: 5, offset: 38318}, exprs: []any{ &labeledExpr{ - pos: position{line: 1599, col: 5, offset: 38429}, + pos: position{line: 1594, col: 5, offset: 38318}, label: "a", expr: &ruleRefExpr{ - pos: position{line: 1599, col: 7, offset: 38431}, + pos: position{line: 1594, col: 7, offset: 38320}, name: "Hex", }, }, &labeledExpr{ - pos: position{line: 1599, col: 11, offset: 38435}, + pos: position{line: 1594, col: 11, offset: 38324}, label: "b", expr: &zeroOrMoreExpr{ - pos: position{line: 1599, col: 13, offset: 38437}, + pos: position{line: 1594, col: 13, offset: 38326}, expr: &ruleRefExpr{ - pos: position{line: 1599, col: 13, offset: 38437}, + pos: position{line: 1594, col: 13, offset: 38326}, name: "ColonHex", }, }, }, &litMatcher{ - pos: position{line: 1599, col: 23, offset: 38447}, + pos: position{line: 1594, col: 23, offset: 38336}, val: "::", ignoreCase: false, want: "\"::\"", @@ -11272,10 +11235,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1602, col: 5, offset: 38515}, + pos: position{line: 1597, col: 5, offset: 38404}, run: (*parser).callonIP6Variations38, expr: &litMatcher{ - pos: position{line: 1602, col: 5, offset: 38515}, + pos: position{line: 1597, col: 5, offset: 38404}, val: "::", ignoreCase: false, want: "\"::\"", @@ -11288,16 +11251,16 @@ var g = &grammar{ }, { name: "IP6Tail", - pos: position{line: 1606, col: 1, offset: 38552}, + pos: position{line: 1601, col: 1, offset: 38441}, expr: &choiceExpr{ - pos: position{line: 1607, col: 5, offset: 38564}, + pos: position{line: 1602, col: 5, offset: 38453}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1607, col: 5, offset: 38564}, + pos: position{line: 1602, col: 5, offset: 38453}, name: "IP", }, &ruleRefExpr{ - pos: position{line: 1608, col: 5, offset: 38571}, + pos: position{line: 1603, col: 5, offset: 38460}, name: "Hex", }, }, @@ -11307,24 +11270,24 @@ var g = &grammar{ }, { name: "ColonHex", - pos: position{line: 1610, col: 1, offset: 38576}, + pos: position{line: 1605, col: 1, offset: 38465}, expr: &actionExpr{ - pos: position{line: 1610, col: 12, offset: 38587}, + pos: position{line: 1605, col: 12, offset: 38476}, run: (*parser).callonColonHex1, expr: &seqExpr{ - pos: position{line: 1610, col: 12, offset: 38587}, + pos: position{line: 1605, col: 12, offset: 38476}, exprs: []any{ &litMatcher{ - pos: position{line: 1610, col: 12, offset: 38587}, + pos: position{line: 1605, col: 12, offset: 38476}, val: ":", ignoreCase: false, want: "\":\"", }, &labeledExpr{ - pos: position{line: 1610, col: 16, offset: 38591}, + pos: position{line: 1605, col: 16, offset: 38480}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1610, col: 18, offset: 38593}, + pos: position{line: 1605, col: 18, offset: 38482}, name: "Hex", }, }, @@ -11336,23 +11299,23 @@ var g = &grammar{ }, { name: "HexColon", - pos: position{line: 1612, col: 1, offset: 38631}, + pos: position{line: 1607, col: 1, offset: 38520}, expr: &actionExpr{ - pos: position{line: 1612, col: 12, offset: 38642}, + pos: position{line: 1607, col: 12, offset: 38531}, run: (*parser).callonHexColon1, expr: &seqExpr{ - pos: position{line: 1612, col: 12, offset: 38642}, + pos: position{line: 1607, col: 12, offset: 38531}, exprs: []any{ &labeledExpr{ - pos: position{line: 1612, col: 12, offset: 38642}, + pos: position{line: 1607, col: 12, offset: 38531}, label: "v", expr: &ruleRefExpr{ - pos: position{line: 1612, col: 14, offset: 38644}, + pos: position{line: 1607, col: 14, offset: 38533}, name: "Hex", }, }, &litMatcher{ - pos: position{line: 1612, col: 18, offset: 38648}, + pos: position{line: 1607, col: 18, offset: 38537}, val: ":", ignoreCase: false, want: "\":\"", @@ -11365,32 +11328,32 @@ var g = &grammar{ }, { name: "IP4Net", - pos: position{line: 1614, col: 1, offset: 38686}, + pos: position{line: 1609, col: 1, offset: 38575}, expr: &actionExpr{ - pos: position{line: 1615, col: 5, offset: 38697}, + pos: position{line: 1610, col: 5, offset: 38586}, run: (*parser).callonIP4Net1, expr: &seqExpr{ - pos: position{line: 1615, col: 5, offset: 38697}, + pos: position{line: 1610, col: 5, offset: 38586}, exprs: []any{ &labeledExpr{ - pos: position{line: 1615, col: 5, offset: 38697}, + pos: position{line: 1610, col: 5, offset: 38586}, label: "a", expr: &ruleRefExpr{ - pos: position{line: 1615, col: 7, offset: 38699}, + pos: position{line: 1610, col: 7, offset: 38588}, name: "IP", }, }, &litMatcher{ - pos: position{line: 1615, col: 10, offset: 38702}, + pos: position{line: 1610, col: 10, offset: 38591}, val: "/", ignoreCase: false, want: "\"/\"", }, &labeledExpr{ - pos: position{line: 1615, col: 14, offset: 38706}, + pos: position{line: 1610, col: 14, offset: 38595}, label: "m", expr: &ruleRefExpr{ - pos: position{line: 1615, col: 16, offset: 38708}, + pos: position{line: 1610, col: 16, offset: 38597}, name: "UIntString", }, }, @@ -11402,32 +11365,32 @@ var g = &grammar{ }, { name: "IP6Net", - pos: position{line: 1619, col: 1, offset: 38776}, + pos: position{line: 1614, col: 1, offset: 38665}, expr: &actionExpr{ - pos: position{line: 1620, col: 5, offset: 38787}, + pos: position{line: 1615, col: 5, offset: 38676}, run: (*parser).callonIP6Net1, expr: &seqExpr{ - pos: position{line: 1620, col: 5, offset: 38787}, + pos: position{line: 1615, col: 5, offset: 38676}, exprs: []any{ &labeledExpr{ - pos: position{line: 1620, col: 5, offset: 38787}, + pos: position{line: 1615, col: 5, offset: 38676}, label: "a", expr: &ruleRefExpr{ - pos: position{line: 1620, col: 7, offset: 38789}, + pos: position{line: 1615, col: 7, offset: 38678}, name: "IP6", }, }, &litMatcher{ - pos: position{line: 1620, col: 11, offset: 38793}, + pos: position{line: 1615, col: 11, offset: 38682}, val: "/", ignoreCase: false, want: "\"/\"", }, &labeledExpr{ - pos: position{line: 1620, col: 15, offset: 38797}, + pos: position{line: 1615, col: 15, offset: 38686}, label: "m", expr: &ruleRefExpr{ - pos: position{line: 1620, col: 17, offset: 38799}, + pos: position{line: 1615, col: 17, offset: 38688}, name: "UIntString", }, }, @@ -11439,15 +11402,15 @@ var g = &grammar{ }, { name: "UInt", - pos: position{line: 1624, col: 1, offset: 38867}, + pos: position{line: 1619, col: 1, offset: 38756}, expr: &actionExpr{ - pos: position{line: 1625, col: 4, offset: 38875}, + pos: position{line: 1620, col: 4, offset: 38764}, run: (*parser).callonUInt1, expr: &labeledExpr{ - pos: position{line: 1625, col: 4, offset: 38875}, + pos: position{line: 1620, col: 4, offset: 38764}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1625, col: 6, offset: 38877}, + pos: position{line: 1620, col: 6, offset: 38766}, name: "UIntString", }, }, @@ -11457,16 +11420,16 @@ var g = &grammar{ }, { name: "IntString", - pos: position{line: 1627, col: 1, offset: 38917}, + pos: position{line: 1622, col: 1, offset: 38806}, expr: &choiceExpr{ - pos: position{line: 1628, col: 5, offset: 38931}, + pos: position{line: 1623, col: 5, offset: 38820}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1628, col: 5, offset: 38931}, + pos: position{line: 1623, col: 5, offset: 38820}, name: "UIntString", }, &ruleRefExpr{ - pos: position{line: 1629, col: 5, offset: 38946}, + pos: position{line: 1624, col: 5, offset: 38835}, name: "MinusIntString", }, }, @@ -11476,14 +11439,14 @@ var g = &grammar{ }, { name: "UIntString", - pos: position{line: 1631, col: 1, offset: 38962}, + pos: position{line: 1626, col: 1, offset: 38851}, expr: &actionExpr{ - pos: position{line: 1631, col: 14, offset: 38975}, + pos: position{line: 1626, col: 14, offset: 38864}, run: (*parser).callonUIntString1, expr: &oneOrMoreExpr{ - pos: position{line: 1631, col: 14, offset: 38975}, + pos: position{line: 1626, col: 14, offset: 38864}, expr: &charClassMatcher{ - pos: position{line: 1631, col: 14, offset: 38975}, + pos: position{line: 1626, col: 14, offset: 38864}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -11496,21 +11459,21 @@ var g = &grammar{ }, { name: "MinusIntString", - pos: position{line: 1633, col: 1, offset: 39014}, + pos: position{line: 1628, col: 1, offset: 38903}, expr: &actionExpr{ - pos: position{line: 1634, col: 5, offset: 39033}, + pos: position{line: 1629, col: 5, offset: 38922}, run: (*parser).callonMinusIntString1, expr: &seqExpr{ - pos: position{line: 1634, col: 5, offset: 39033}, + pos: position{line: 1629, col: 5, offset: 38922}, exprs: []any{ &litMatcher{ - pos: position{line: 1634, col: 5, offset: 39033}, + pos: position{line: 1629, col: 5, offset: 38922}, val: "-", ignoreCase: false, want: "\"-\"", }, &ruleRefExpr{ - pos: position{line: 1634, col: 9, offset: 39037}, + pos: position{line: 1629, col: 9, offset: 38926}, name: "UIntString", }, }, @@ -11521,29 +11484,29 @@ var g = &grammar{ }, { name: "FloatString", - pos: position{line: 1636, col: 1, offset: 39080}, + pos: position{line: 1631, col: 1, offset: 38969}, expr: &choiceExpr{ - pos: position{line: 1637, col: 5, offset: 39096}, + pos: position{line: 1632, col: 5, offset: 38985}, alternatives: []any{ &actionExpr{ - pos: position{line: 1637, col: 5, offset: 39096}, + pos: position{line: 1632, col: 5, offset: 38985}, run: (*parser).callonFloatString2, expr: &seqExpr{ - pos: position{line: 1637, col: 5, offset: 39096}, + pos: position{line: 1632, col: 5, offset: 38985}, exprs: []any{ &zeroOrOneExpr{ - pos: position{line: 1637, col: 5, offset: 39096}, + pos: position{line: 1632, col: 5, offset: 38985}, expr: &litMatcher{ - pos: position{line: 1637, col: 5, offset: 39096}, + pos: position{line: 1632, col: 5, offset: 38985}, val: "-", ignoreCase: false, want: "\"-\"", }, }, &oneOrMoreExpr{ - pos: position{line: 1637, col: 10, offset: 39101}, + pos: position{line: 1632, col: 10, offset: 38990}, expr: &charClassMatcher{ - pos: position{line: 1637, col: 10, offset: 39101}, + pos: position{line: 1632, col: 10, offset: 38990}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -11551,15 +11514,15 @@ var g = &grammar{ }, }, &litMatcher{ - pos: position{line: 1637, col: 17, offset: 39108}, + pos: position{line: 1632, col: 17, offset: 38997}, val: ".", ignoreCase: false, want: "\".\"", }, &zeroOrMoreExpr{ - pos: position{line: 1637, col: 21, offset: 39112}, + pos: position{line: 1632, col: 21, offset: 39001}, expr: &charClassMatcher{ - pos: position{line: 1637, col: 21, offset: 39112}, + pos: position{line: 1632, col: 21, offset: 39001}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -11567,9 +11530,9 @@ var g = &grammar{ }, }, &zeroOrOneExpr{ - pos: position{line: 1637, col: 28, offset: 39119}, + pos: position{line: 1632, col: 28, offset: 39008}, expr: &ruleRefExpr{ - pos: position{line: 1637, col: 28, offset: 39119}, + pos: position{line: 1632, col: 28, offset: 39008}, name: "ExponentPart", }, }, @@ -11577,30 +11540,30 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1638, col: 5, offset: 39168}, + pos: position{line: 1633, col: 5, offset: 39057}, run: (*parser).callonFloatString13, expr: &seqExpr{ - pos: position{line: 1638, col: 5, offset: 39168}, + pos: position{line: 1633, col: 5, offset: 39057}, exprs: []any{ &zeroOrOneExpr{ - pos: position{line: 1638, col: 5, offset: 39168}, + pos: position{line: 1633, col: 5, offset: 39057}, expr: &litMatcher{ - pos: position{line: 1638, col: 5, offset: 39168}, + pos: position{line: 1633, col: 5, offset: 39057}, val: "-", ignoreCase: false, want: "\"-\"", }, }, &litMatcher{ - pos: position{line: 1638, col: 10, offset: 39173}, + pos: position{line: 1633, col: 10, offset: 39062}, val: ".", ignoreCase: false, want: "\".\"", }, &oneOrMoreExpr{ - pos: position{line: 1638, col: 14, offset: 39177}, + pos: position{line: 1633, col: 14, offset: 39066}, expr: &charClassMatcher{ - pos: position{line: 1638, col: 14, offset: 39177}, + pos: position{line: 1633, col: 14, offset: 39066}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -11608,9 +11571,9 @@ var g = &grammar{ }, }, &zeroOrOneExpr{ - pos: position{line: 1638, col: 21, offset: 39184}, + pos: position{line: 1633, col: 21, offset: 39073}, expr: &ruleRefExpr{ - pos: position{line: 1638, col: 21, offset: 39184}, + pos: position{line: 1633, col: 21, offset: 39073}, name: "ExponentPart", }, }, @@ -11618,17 +11581,17 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1639, col: 5, offset: 39233}, + pos: position{line: 1634, col: 5, offset: 39122}, run: (*parser).callonFloatString22, expr: &choiceExpr{ - pos: position{line: 1639, col: 6, offset: 39234}, + pos: position{line: 1634, col: 6, offset: 39123}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1639, col: 6, offset: 39234}, + pos: position{line: 1634, col: 6, offset: 39123}, name: "NaN", }, &ruleRefExpr{ - pos: position{line: 1639, col: 12, offset: 39240}, + pos: position{line: 1634, col: 12, offset: 39129}, name: "Infinity", }, }, @@ -11641,20 +11604,20 @@ var g = &grammar{ }, { name: "ExponentPart", - pos: position{line: 1642, col: 1, offset: 39283}, + pos: position{line: 1637, col: 1, offset: 39172}, expr: &seqExpr{ - pos: position{line: 1642, col: 16, offset: 39298}, + pos: position{line: 1637, col: 16, offset: 39187}, exprs: []any{ &litMatcher{ - pos: position{line: 1642, col: 16, offset: 39298}, + pos: position{line: 1637, col: 16, offset: 39187}, val: "e", ignoreCase: true, want: "\"e\"i", }, &zeroOrOneExpr{ - pos: position{line: 1642, col: 21, offset: 39303}, + pos: position{line: 1637, col: 21, offset: 39192}, expr: &charClassMatcher{ - pos: position{line: 1642, col: 21, offset: 39303}, + pos: position{line: 1637, col: 21, offset: 39192}, val: "[+-]", chars: []rune{'+', '-'}, ignoreCase: false, @@ -11662,7 +11625,7 @@ var g = &grammar{ }, }, &ruleRefExpr{ - pos: position{line: 1642, col: 27, offset: 39309}, + pos: position{line: 1637, col: 27, offset: 39198}, name: "UIntString", }, }, @@ -11672,9 +11635,9 @@ var g = &grammar{ }, { name: "NaN", - pos: position{line: 1644, col: 1, offset: 39321}, + pos: position{line: 1639, col: 1, offset: 39210}, expr: &litMatcher{ - pos: position{line: 1644, col: 7, offset: 39327}, + pos: position{line: 1639, col: 7, offset: 39216}, val: "NaN", ignoreCase: false, want: "\"NaN\"", @@ -11684,23 +11647,23 @@ var g = &grammar{ }, { name: "Infinity", - pos: position{line: 1646, col: 1, offset: 39334}, + pos: position{line: 1641, col: 1, offset: 39223}, expr: &seqExpr{ - pos: position{line: 1646, col: 12, offset: 39345}, + pos: position{line: 1641, col: 12, offset: 39234}, exprs: []any{ &zeroOrOneExpr{ - pos: position{line: 1646, col: 12, offset: 39345}, + pos: position{line: 1641, col: 12, offset: 39234}, expr: &choiceExpr{ - pos: position{line: 1646, col: 13, offset: 39346}, + pos: position{line: 1641, col: 13, offset: 39235}, alternatives: []any{ &litMatcher{ - pos: position{line: 1646, col: 13, offset: 39346}, + pos: position{line: 1641, col: 13, offset: 39235}, val: "-", ignoreCase: false, want: "\"-\"", }, &litMatcher{ - pos: position{line: 1646, col: 19, offset: 39352}, + pos: position{line: 1641, col: 19, offset: 39241}, val: "+", ignoreCase: false, want: "\"+\"", @@ -11709,7 +11672,7 @@ var g = &grammar{ }, }, &litMatcher{ - pos: position{line: 1646, col: 25, offset: 39358}, + pos: position{line: 1641, col: 25, offset: 39247}, val: "Inf", ignoreCase: false, want: "\"Inf\"", @@ -11721,14 +11684,14 @@ var g = &grammar{ }, { name: "Hex", - pos: position{line: 1648, col: 1, offset: 39365}, + pos: position{line: 1643, col: 1, offset: 39254}, expr: &actionExpr{ - pos: position{line: 1648, col: 7, offset: 39371}, + pos: position{line: 1643, col: 7, offset: 39260}, run: (*parser).callonHex1, expr: &oneOrMoreExpr{ - pos: position{line: 1648, col: 7, offset: 39371}, + pos: position{line: 1643, col: 7, offset: 39260}, expr: &ruleRefExpr{ - pos: position{line: 1648, col: 7, offset: 39371}, + pos: position{line: 1643, col: 7, offset: 39260}, name: "HexDigit", }, }, @@ -11738,9 +11701,9 @@ var g = &grammar{ }, { name: "HexDigit", - pos: position{line: 1650, col: 1, offset: 39413}, + pos: position{line: 1645, col: 1, offset: 39302}, expr: &charClassMatcher{ - pos: position{line: 1650, col: 12, offset: 39424}, + pos: position{line: 1645, col: 12, offset: 39313}, val: "[0-9a-fA-F]", ranges: []rune{'0', '9', 'a', 'f', 'A', 'F'}, ignoreCase: false, @@ -11751,35 +11714,35 @@ var g = &grammar{ }, { name: "QuotedString", - pos: position{line: 1652, col: 1, offset: 39437}, + pos: position{line: 1647, col: 1, offset: 39326}, expr: &choiceExpr{ - pos: position{line: 1653, col: 5, offset: 39454}, + pos: position{line: 1648, col: 5, offset: 39343}, alternatives: []any{ &actionExpr{ - pos: position{line: 1653, col: 5, offset: 39454}, + pos: position{line: 1648, col: 5, offset: 39343}, run: (*parser).callonQuotedString2, expr: &seqExpr{ - pos: position{line: 1653, col: 5, offset: 39454}, + pos: position{line: 1648, col: 5, offset: 39343}, exprs: []any{ &litMatcher{ - pos: position{line: 1653, col: 5, offset: 39454}, + pos: position{line: 1648, col: 5, offset: 39343}, val: "\"", ignoreCase: false, want: "\"\\\"\"", }, &labeledExpr{ - pos: position{line: 1653, col: 9, offset: 39458}, + pos: position{line: 1648, col: 9, offset: 39347}, label: "v", expr: &zeroOrMoreExpr{ - pos: position{line: 1653, col: 11, offset: 39460}, + pos: position{line: 1648, col: 11, offset: 39349}, expr: &ruleRefExpr{ - pos: position{line: 1653, col: 11, offset: 39460}, + pos: position{line: 1648, col: 11, offset: 39349}, name: "DoubleQuotedChar", }, }, }, &litMatcher{ - pos: position{line: 1653, col: 29, offset: 39478}, + pos: position{line: 1648, col: 29, offset: 39367}, val: "\"", ignoreCase: false, want: "\"\\\"\"", @@ -11788,30 +11751,30 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1654, col: 5, offset: 39515}, + pos: position{line: 1649, col: 5, offset: 39404}, run: (*parser).callonQuotedString9, expr: &seqExpr{ - pos: position{line: 1654, col: 5, offset: 39515}, + pos: position{line: 1649, col: 5, offset: 39404}, exprs: []any{ &litMatcher{ - pos: position{line: 1654, col: 5, offset: 39515}, + pos: position{line: 1649, col: 5, offset: 39404}, val: "'", ignoreCase: false, want: "\"'\"", }, &labeledExpr{ - pos: position{line: 1654, col: 9, offset: 39519}, + pos: position{line: 1649, col: 9, offset: 39408}, label: "v", expr: &zeroOrMoreExpr{ - pos: position{line: 1654, col: 11, offset: 39521}, + pos: position{line: 1649, col: 11, offset: 39410}, expr: &ruleRefExpr{ - pos: position{line: 1654, col: 11, offset: 39521}, + pos: position{line: 1649, col: 11, offset: 39410}, name: "SingleQuotedChar", }, }, }, &litMatcher{ - pos: position{line: 1654, col: 29, offset: 39539}, + pos: position{line: 1649, col: 29, offset: 39428}, val: "'", ignoreCase: false, want: "\"'\"", @@ -11826,57 +11789,57 @@ var g = &grammar{ }, { name: "DoubleQuotedChar", - pos: position{line: 1656, col: 1, offset: 39573}, + pos: position{line: 1651, col: 1, offset: 39462}, expr: &choiceExpr{ - pos: position{line: 1657, col: 5, offset: 39594}, + pos: position{line: 1652, col: 5, offset: 39483}, alternatives: []any{ &actionExpr{ - pos: position{line: 1657, col: 5, offset: 39594}, + pos: position{line: 1652, col: 5, offset: 39483}, run: (*parser).callonDoubleQuotedChar2, expr: &seqExpr{ - pos: position{line: 1657, col: 5, offset: 39594}, + pos: position{line: 1652, col: 5, offset: 39483}, exprs: []any{ ¬Expr{ - pos: position{line: 1657, col: 5, offset: 39594}, + pos: position{line: 1652, col: 5, offset: 39483}, expr: &choiceExpr{ - pos: position{line: 1657, col: 7, offset: 39596}, + pos: position{line: 1652, col: 7, offset: 39485}, alternatives: []any{ &litMatcher{ - pos: position{line: 1657, col: 7, offset: 39596}, + pos: position{line: 1652, col: 7, offset: 39485}, val: "\"", ignoreCase: false, want: "\"\\\"\"", }, &ruleRefExpr{ - pos: position{line: 1657, col: 13, offset: 39602}, + pos: position{line: 1652, col: 13, offset: 39491}, name: "EscapedChar", }, }, }, }, &anyMatcher{ - line: 1657, col: 26, offset: 39615, + line: 1652, col: 26, offset: 39504, }, }, }, }, &actionExpr{ - pos: position{line: 1658, col: 5, offset: 39652}, + pos: position{line: 1653, col: 5, offset: 39541}, run: (*parser).callonDoubleQuotedChar9, expr: &seqExpr{ - pos: position{line: 1658, col: 5, offset: 39652}, + pos: position{line: 1653, col: 5, offset: 39541}, exprs: []any{ &litMatcher{ - pos: position{line: 1658, col: 5, offset: 39652}, + pos: position{line: 1653, col: 5, offset: 39541}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &labeledExpr{ - pos: position{line: 1658, col: 10, offset: 39657}, + pos: position{line: 1653, col: 10, offset: 39546}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1658, col: 12, offset: 39659}, + pos: position{line: 1653, col: 12, offset: 39548}, name: "EscapeSequence", }, }, @@ -11890,32 +11853,32 @@ var g = &grammar{ }, { name: "BacktickString", - pos: position{line: 1660, col: 1, offset: 39693}, + pos: position{line: 1655, col: 1, offset: 39582}, expr: &actionExpr{ - pos: position{line: 1661, col: 5, offset: 39712}, + pos: position{line: 1656, col: 5, offset: 39601}, run: (*parser).callonBacktickString1, expr: &seqExpr{ - pos: position{line: 1661, col: 5, offset: 39712}, + pos: position{line: 1656, col: 5, offset: 39601}, exprs: []any{ &litMatcher{ - pos: position{line: 1661, col: 5, offset: 39712}, + pos: position{line: 1656, col: 5, offset: 39601}, val: "`", ignoreCase: false, want: "\"`\"", }, &labeledExpr{ - pos: position{line: 1661, col: 9, offset: 39716}, + pos: position{line: 1656, col: 9, offset: 39605}, label: "v", expr: &zeroOrMoreExpr{ - pos: position{line: 1661, col: 11, offset: 39718}, + pos: position{line: 1656, col: 11, offset: 39607}, expr: &ruleRefExpr{ - pos: position{line: 1661, col: 11, offset: 39718}, + pos: position{line: 1656, col: 11, offset: 39607}, name: "BacktickChar", }, }, }, &litMatcher{ - pos: position{line: 1661, col: 25, offset: 39732}, + pos: position{line: 1656, col: 25, offset: 39621}, val: "`", ignoreCase: false, want: "\"`\"", @@ -11928,57 +11891,57 @@ var g = &grammar{ }, { name: "BacktickChar", - pos: position{line: 1663, col: 1, offset: 39766}, + pos: position{line: 1658, col: 1, offset: 39655}, expr: &choiceExpr{ - pos: position{line: 1664, col: 5, offset: 39783}, + pos: position{line: 1659, col: 5, offset: 39672}, alternatives: []any{ &actionExpr{ - pos: position{line: 1664, col: 5, offset: 39783}, + pos: position{line: 1659, col: 5, offset: 39672}, run: (*parser).callonBacktickChar2, expr: &seqExpr{ - pos: position{line: 1664, col: 5, offset: 39783}, + pos: position{line: 1659, col: 5, offset: 39672}, exprs: []any{ ¬Expr{ - pos: position{line: 1664, col: 5, offset: 39783}, + pos: position{line: 1659, col: 5, offset: 39672}, expr: &choiceExpr{ - pos: position{line: 1664, col: 7, offset: 39785}, + pos: position{line: 1659, col: 7, offset: 39674}, alternatives: []any{ &litMatcher{ - pos: position{line: 1664, col: 7, offset: 39785}, + pos: position{line: 1659, col: 7, offset: 39674}, val: "`", ignoreCase: false, want: "\"`\"", }, &ruleRefExpr{ - pos: position{line: 1664, col: 13, offset: 39791}, + pos: position{line: 1659, col: 13, offset: 39680}, name: "EscapedChar", }, }, }, }, &anyMatcher{ - line: 1664, col: 26, offset: 39804, + line: 1659, col: 26, offset: 39693, }, }, }, }, &actionExpr{ - pos: position{line: 1665, col: 5, offset: 39841}, + pos: position{line: 1660, col: 5, offset: 39730}, run: (*parser).callonBacktickChar9, expr: &seqExpr{ - pos: position{line: 1665, col: 5, offset: 39841}, + pos: position{line: 1660, col: 5, offset: 39730}, exprs: []any{ &litMatcher{ - pos: position{line: 1665, col: 5, offset: 39841}, + pos: position{line: 1660, col: 5, offset: 39730}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &labeledExpr{ - pos: position{line: 1665, col: 10, offset: 39846}, + pos: position{line: 1660, col: 10, offset: 39735}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1665, col: 12, offset: 39848}, + pos: position{line: 1660, col: 12, offset: 39737}, name: "EscapeSequence", }, }, @@ -11992,28 +11955,28 @@ var g = &grammar{ }, { name: "KeyWord", - pos: position{line: 1667, col: 1, offset: 39882}, + pos: position{line: 1662, col: 1, offset: 39771}, expr: &actionExpr{ - pos: position{line: 1668, col: 5, offset: 39894}, + pos: position{line: 1663, col: 5, offset: 39783}, run: (*parser).callonKeyWord1, expr: &seqExpr{ - pos: position{line: 1668, col: 5, offset: 39894}, + pos: position{line: 1663, col: 5, offset: 39783}, exprs: []any{ &labeledExpr{ - pos: position{line: 1668, col: 5, offset: 39894}, + pos: position{line: 1663, col: 5, offset: 39783}, label: "head", expr: &ruleRefExpr{ - pos: position{line: 1668, col: 10, offset: 39899}, + pos: position{line: 1663, col: 10, offset: 39788}, name: "KeyWordStart", }, }, &labeledExpr{ - pos: position{line: 1668, col: 23, offset: 39912}, + pos: position{line: 1663, col: 23, offset: 39801}, label: "tail", expr: &zeroOrMoreExpr{ - pos: position{line: 1668, col: 28, offset: 39917}, + pos: position{line: 1663, col: 28, offset: 39806}, expr: &ruleRefExpr{ - pos: position{line: 1668, col: 28, offset: 39917}, + pos: position{line: 1663, col: 28, offset: 39806}, name: "KeyWordRest", }, }, @@ -12026,16 +11989,16 @@ var g = &grammar{ }, { name: "KeyWordStart", - pos: position{line: 1670, col: 1, offset: 39979}, + pos: position{line: 1665, col: 1, offset: 39868}, expr: &choiceExpr{ - pos: position{line: 1671, col: 5, offset: 39996}, + pos: position{line: 1666, col: 5, offset: 39885}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1671, col: 5, offset: 39996}, + pos: position{line: 1666, col: 5, offset: 39885}, name: "KeyWordChars", }, &ruleRefExpr{ - pos: position{line: 1672, col: 5, offset: 40013}, + pos: position{line: 1667, col: 5, offset: 39902}, name: "KeyWordEsc", }, }, @@ -12045,16 +12008,16 @@ var g = &grammar{ }, { name: "KeyWordRest", - pos: position{line: 1674, col: 1, offset: 40025}, + pos: position{line: 1669, col: 1, offset: 39914}, expr: &choiceExpr{ - pos: position{line: 1675, col: 5, offset: 40041}, + pos: position{line: 1670, col: 5, offset: 39930}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1675, col: 5, offset: 40041}, + pos: position{line: 1670, col: 5, offset: 39930}, name: "KeyWordStart", }, &charClassMatcher{ - pos: position{line: 1676, col: 5, offset: 40058}, + pos: position{line: 1671, col: 5, offset: 39947}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -12067,19 +12030,19 @@ var g = &grammar{ }, { name: "KeyWordChars", - pos: position{line: 1678, col: 1, offset: 40065}, + pos: position{line: 1673, col: 1, offset: 39954}, expr: &actionExpr{ - pos: position{line: 1678, col: 16, offset: 40080}, + pos: position{line: 1673, col: 16, offset: 39969}, run: (*parser).callonKeyWordChars1, expr: &choiceExpr{ - pos: position{line: 1678, col: 17, offset: 40081}, + pos: position{line: 1673, col: 17, offset: 39970}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1678, col: 17, offset: 40081}, + pos: position{line: 1673, col: 17, offset: 39970}, name: "UnicodeLetter", }, &charClassMatcher{ - pos: position{line: 1678, col: 33, offset: 40097}, + pos: position{line: 1673, col: 33, offset: 39986}, val: "[_.:/%#@~]", chars: []rune{'_', '.', ':', '/', '%', '#', '@', '~'}, ignoreCase: false, @@ -12093,31 +12056,31 @@ var g = &grammar{ }, { name: "KeyWordEsc", - pos: position{line: 1680, col: 1, offset: 40141}, + pos: position{line: 1675, col: 1, offset: 40030}, expr: &actionExpr{ - pos: position{line: 1680, col: 14, offset: 40154}, + pos: position{line: 1675, col: 14, offset: 40043}, run: (*parser).callonKeyWordEsc1, expr: &seqExpr{ - pos: position{line: 1680, col: 14, offset: 40154}, + pos: position{line: 1675, col: 14, offset: 40043}, exprs: []any{ &litMatcher{ - pos: position{line: 1680, col: 14, offset: 40154}, + pos: position{line: 1675, col: 14, offset: 40043}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &labeledExpr{ - pos: position{line: 1680, col: 19, offset: 40159}, + pos: position{line: 1675, col: 19, offset: 40048}, label: "s", expr: &choiceExpr{ - pos: position{line: 1680, col: 22, offset: 40162}, + pos: position{line: 1675, col: 22, offset: 40051}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1680, col: 22, offset: 40162}, + pos: position{line: 1675, col: 22, offset: 40051}, name: "KeywordEscape", }, &ruleRefExpr{ - pos: position{line: 1680, col: 38, offset: 40178}, + pos: position{line: 1675, col: 38, offset: 40067}, name: "EscapeSequence", }, }, @@ -12131,42 +12094,42 @@ var g = &grammar{ }, { name: "GlobPattern", - pos: position{line: 1682, col: 1, offset: 40213}, + pos: position{line: 1677, col: 1, offset: 40102}, expr: &actionExpr{ - pos: position{line: 1683, col: 5, offset: 40229}, + pos: position{line: 1678, col: 5, offset: 40118}, run: (*parser).callonGlobPattern1, expr: &seqExpr{ - pos: position{line: 1683, col: 5, offset: 40229}, + pos: position{line: 1678, col: 5, offset: 40118}, exprs: []any{ &andExpr{ - pos: position{line: 1683, col: 5, offset: 40229}, + pos: position{line: 1678, col: 5, offset: 40118}, expr: &ruleRefExpr{ - pos: position{line: 1683, col: 6, offset: 40230}, + pos: position{line: 1678, col: 6, offset: 40119}, name: "GlobProperStart", }, }, &andExpr{ - pos: position{line: 1683, col: 22, offset: 40246}, + pos: position{line: 1678, col: 22, offset: 40135}, expr: &ruleRefExpr{ - pos: position{line: 1683, col: 23, offset: 40247}, + pos: position{line: 1678, col: 23, offset: 40136}, name: "GlobHasStar", }, }, &labeledExpr{ - pos: position{line: 1683, col: 35, offset: 40259}, + pos: position{line: 1678, col: 35, offset: 40148}, label: "head", expr: &ruleRefExpr{ - pos: position{line: 1683, col: 40, offset: 40264}, + pos: position{line: 1678, col: 40, offset: 40153}, name: "GlobStart", }, }, &labeledExpr{ - pos: position{line: 1683, col: 50, offset: 40274}, + pos: position{line: 1678, col: 50, offset: 40163}, label: "tail", expr: &zeroOrMoreExpr{ - pos: position{line: 1683, col: 55, offset: 40279}, + pos: position{line: 1678, col: 55, offset: 40168}, expr: &ruleRefExpr{ - pos: position{line: 1683, col: 55, offset: 40279}, + pos: position{line: 1678, col: 55, offset: 40168}, name: "GlobRest", }, }, @@ -12179,28 +12142,28 @@ var g = &grammar{ }, { name: "GlobProperStart", - pos: position{line: 1687, col: 1, offset: 40348}, + pos: position{line: 1682, col: 1, offset: 40237}, expr: &choiceExpr{ - pos: position{line: 1687, col: 19, offset: 40366}, + pos: position{line: 1682, col: 19, offset: 40255}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1687, col: 19, offset: 40366}, + pos: position{line: 1682, col: 19, offset: 40255}, name: "KeyWordStart", }, &seqExpr{ - pos: position{line: 1687, col: 34, offset: 40381}, + pos: position{line: 1682, col: 34, offset: 40270}, exprs: []any{ &oneOrMoreExpr{ - pos: position{line: 1687, col: 34, offset: 40381}, + pos: position{line: 1682, col: 34, offset: 40270}, expr: &litMatcher{ - pos: position{line: 1687, col: 34, offset: 40381}, + pos: position{line: 1682, col: 34, offset: 40270}, val: "*", ignoreCase: false, want: "\"*\"", }, }, &ruleRefExpr{ - pos: position{line: 1687, col: 39, offset: 40386}, + pos: position{line: 1682, col: 39, offset: 40275}, name: "KeyWordRest", }, }, @@ -12212,19 +12175,19 @@ var g = &grammar{ }, { name: "GlobHasStar", - pos: position{line: 1688, col: 1, offset: 40398}, + pos: position{line: 1683, col: 1, offset: 40287}, expr: &seqExpr{ - pos: position{line: 1688, col: 15, offset: 40412}, + pos: position{line: 1683, col: 15, offset: 40301}, exprs: []any{ &zeroOrMoreExpr{ - pos: position{line: 1688, col: 15, offset: 40412}, + pos: position{line: 1683, col: 15, offset: 40301}, expr: &ruleRefExpr{ - pos: position{line: 1688, col: 15, offset: 40412}, + pos: position{line: 1683, col: 15, offset: 40301}, name: "KeyWordRest", }, }, &litMatcher{ - pos: position{line: 1688, col: 28, offset: 40425}, + pos: position{line: 1683, col: 28, offset: 40314}, val: "*", ignoreCase: false, want: "\"*\"", @@ -12236,23 +12199,23 @@ var g = &grammar{ }, { name: "GlobStart", - pos: position{line: 1690, col: 1, offset: 40430}, + pos: position{line: 1685, col: 1, offset: 40319}, expr: &choiceExpr{ - pos: position{line: 1691, col: 5, offset: 40444}, + pos: position{line: 1686, col: 5, offset: 40333}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1691, col: 5, offset: 40444}, + pos: position{line: 1686, col: 5, offset: 40333}, name: "KeyWordChars", }, &ruleRefExpr{ - pos: position{line: 1692, col: 5, offset: 40461}, + pos: position{line: 1687, col: 5, offset: 40350}, name: "GlobEsc", }, &actionExpr{ - pos: position{line: 1693, col: 5, offset: 40473}, + pos: position{line: 1688, col: 5, offset: 40362}, run: (*parser).callonGlobStart4, expr: &litMatcher{ - pos: position{line: 1693, col: 5, offset: 40473}, + pos: position{line: 1688, col: 5, offset: 40362}, val: "*", ignoreCase: false, want: "\"*\"", @@ -12265,16 +12228,16 @@ var g = &grammar{ }, { name: "GlobRest", - pos: position{line: 1695, col: 1, offset: 40498}, + pos: position{line: 1690, col: 1, offset: 40387}, expr: &choiceExpr{ - pos: position{line: 1696, col: 5, offset: 40511}, + pos: position{line: 1691, col: 5, offset: 40400}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1696, col: 5, offset: 40511}, + pos: position{line: 1691, col: 5, offset: 40400}, name: "GlobStart", }, &charClassMatcher{ - pos: position{line: 1697, col: 5, offset: 40525}, + pos: position{line: 1692, col: 5, offset: 40414}, val: "[0-9]", ranges: []rune{'0', '9'}, ignoreCase: false, @@ -12287,31 +12250,31 @@ var g = &grammar{ }, { name: "GlobEsc", - pos: position{line: 1699, col: 1, offset: 40532}, + pos: position{line: 1694, col: 1, offset: 40421}, expr: &actionExpr{ - pos: position{line: 1699, col: 11, offset: 40542}, + pos: position{line: 1694, col: 11, offset: 40431}, run: (*parser).callonGlobEsc1, expr: &seqExpr{ - pos: position{line: 1699, col: 11, offset: 40542}, + pos: position{line: 1694, col: 11, offset: 40431}, exprs: []any{ &litMatcher{ - pos: position{line: 1699, col: 11, offset: 40542}, + pos: position{line: 1694, col: 11, offset: 40431}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &labeledExpr{ - pos: position{line: 1699, col: 16, offset: 40547}, + pos: position{line: 1694, col: 16, offset: 40436}, label: "s", expr: &choiceExpr{ - pos: position{line: 1699, col: 19, offset: 40550}, + pos: position{line: 1694, col: 19, offset: 40439}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1699, col: 19, offset: 40550}, + pos: position{line: 1694, col: 19, offset: 40439}, name: "GlobEscape", }, &ruleRefExpr{ - pos: position{line: 1699, col: 32, offset: 40563}, + pos: position{line: 1694, col: 32, offset: 40452}, name: "EscapeSequence", }, }, @@ -12325,32 +12288,32 @@ var g = &grammar{ }, { name: "GlobEscape", - pos: position{line: 1701, col: 1, offset: 40598}, + pos: position{line: 1696, col: 1, offset: 40487}, expr: &choiceExpr{ - pos: position{line: 1702, col: 5, offset: 40613}, + pos: position{line: 1697, col: 5, offset: 40502}, alternatives: []any{ &actionExpr{ - pos: position{line: 1702, col: 5, offset: 40613}, + pos: position{line: 1697, col: 5, offset: 40502}, run: (*parser).callonGlobEscape2, expr: &litMatcher{ - pos: position{line: 1702, col: 5, offset: 40613}, + pos: position{line: 1697, col: 5, offset: 40502}, val: "=", ignoreCase: false, want: "\"=\"", }, }, &actionExpr{ - pos: position{line: 1703, col: 5, offset: 40641}, + pos: position{line: 1698, col: 5, offset: 40530}, run: (*parser).callonGlobEscape4, expr: &litMatcher{ - pos: position{line: 1703, col: 5, offset: 40641}, + pos: position{line: 1698, col: 5, offset: 40530}, val: "*", ignoreCase: false, want: "\"*\"", }, }, &charClassMatcher{ - pos: position{line: 1704, col: 5, offset: 40671}, + pos: position{line: 1699, col: 5, offset: 40560}, val: "[+-]", chars: []rune{'+', '-'}, ignoreCase: false, @@ -12363,57 +12326,57 @@ var g = &grammar{ }, { name: "SingleQuotedChar", - pos: position{line: 1706, col: 1, offset: 40677}, + pos: position{line: 1701, col: 1, offset: 40566}, expr: &choiceExpr{ - pos: position{line: 1707, col: 5, offset: 40698}, + pos: position{line: 1702, col: 5, offset: 40587}, alternatives: []any{ &actionExpr{ - pos: position{line: 1707, col: 5, offset: 40698}, + pos: position{line: 1702, col: 5, offset: 40587}, run: (*parser).callonSingleQuotedChar2, expr: &seqExpr{ - pos: position{line: 1707, col: 5, offset: 40698}, + pos: position{line: 1702, col: 5, offset: 40587}, exprs: []any{ ¬Expr{ - pos: position{line: 1707, col: 5, offset: 40698}, + pos: position{line: 1702, col: 5, offset: 40587}, expr: &choiceExpr{ - pos: position{line: 1707, col: 7, offset: 40700}, + pos: position{line: 1702, col: 7, offset: 40589}, alternatives: []any{ &litMatcher{ - pos: position{line: 1707, col: 7, offset: 40700}, + pos: position{line: 1702, col: 7, offset: 40589}, val: "'", ignoreCase: false, want: "\"'\"", }, &ruleRefExpr{ - pos: position{line: 1707, col: 13, offset: 40706}, + pos: position{line: 1702, col: 13, offset: 40595}, name: "EscapedChar", }, }, }, }, &anyMatcher{ - line: 1707, col: 26, offset: 40719, + line: 1702, col: 26, offset: 40608, }, }, }, }, &actionExpr{ - pos: position{line: 1708, col: 5, offset: 40756}, + pos: position{line: 1703, col: 5, offset: 40645}, run: (*parser).callonSingleQuotedChar9, expr: &seqExpr{ - pos: position{line: 1708, col: 5, offset: 40756}, + pos: position{line: 1703, col: 5, offset: 40645}, exprs: []any{ &litMatcher{ - pos: position{line: 1708, col: 5, offset: 40756}, + pos: position{line: 1703, col: 5, offset: 40645}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &labeledExpr{ - pos: position{line: 1708, col: 10, offset: 40761}, + pos: position{line: 1703, col: 10, offset: 40650}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1708, col: 12, offset: 40763}, + pos: position{line: 1703, col: 12, offset: 40652}, name: "EscapeSequence", }, }, @@ -12427,16 +12390,16 @@ var g = &grammar{ }, { name: "EscapeSequence", - pos: position{line: 1710, col: 1, offset: 40797}, + pos: position{line: 1705, col: 1, offset: 40686}, expr: &choiceExpr{ - pos: position{line: 1711, col: 5, offset: 40816}, + pos: position{line: 1706, col: 5, offset: 40705}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1711, col: 5, offset: 40816}, + pos: position{line: 1706, col: 5, offset: 40705}, name: "SingleCharEscape", }, &ruleRefExpr{ - pos: position{line: 1712, col: 5, offset: 40837}, + pos: position{line: 1707, col: 5, offset: 40726}, name: "UnicodeEscape", }, }, @@ -12446,87 +12409,87 @@ var g = &grammar{ }, { name: "SingleCharEscape", - pos: position{line: 1714, col: 1, offset: 40852}, + pos: position{line: 1709, col: 1, offset: 40741}, expr: &choiceExpr{ - pos: position{line: 1715, col: 5, offset: 40873}, + pos: position{line: 1710, col: 5, offset: 40762}, alternatives: []any{ &litMatcher{ - pos: position{line: 1715, col: 5, offset: 40873}, + pos: position{line: 1710, col: 5, offset: 40762}, val: "'", ignoreCase: false, want: "\"'\"", }, &actionExpr{ - pos: position{line: 1716, col: 5, offset: 40881}, + pos: position{line: 1711, col: 5, offset: 40770}, run: (*parser).callonSingleCharEscape3, expr: &litMatcher{ - pos: position{line: 1716, col: 5, offset: 40881}, + pos: position{line: 1711, col: 5, offset: 40770}, val: "\"", ignoreCase: false, want: "\"\\\"\"", }, }, &litMatcher{ - pos: position{line: 1717, col: 5, offset: 40921}, + pos: position{line: 1712, col: 5, offset: 40810}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &actionExpr{ - pos: position{line: 1718, col: 5, offset: 40930}, + pos: position{line: 1713, col: 5, offset: 40819}, run: (*parser).callonSingleCharEscape6, expr: &litMatcher{ - pos: position{line: 1718, col: 5, offset: 40930}, + pos: position{line: 1713, col: 5, offset: 40819}, val: "b", ignoreCase: false, want: "\"b\"", }, }, &actionExpr{ - pos: position{line: 1719, col: 5, offset: 40959}, + pos: position{line: 1714, col: 5, offset: 40848}, run: (*parser).callonSingleCharEscape8, expr: &litMatcher{ - pos: position{line: 1719, col: 5, offset: 40959}, + pos: position{line: 1714, col: 5, offset: 40848}, val: "f", ignoreCase: false, want: "\"f\"", }, }, &actionExpr{ - pos: position{line: 1720, col: 5, offset: 40988}, + pos: position{line: 1715, col: 5, offset: 40877}, run: (*parser).callonSingleCharEscape10, expr: &litMatcher{ - pos: position{line: 1720, col: 5, offset: 40988}, + pos: position{line: 1715, col: 5, offset: 40877}, val: "n", ignoreCase: false, want: "\"n\"", }, }, &actionExpr{ - pos: position{line: 1721, col: 5, offset: 41017}, + pos: position{line: 1716, col: 5, offset: 40906}, run: (*parser).callonSingleCharEscape12, expr: &litMatcher{ - pos: position{line: 1721, col: 5, offset: 41017}, + pos: position{line: 1716, col: 5, offset: 40906}, val: "r", ignoreCase: false, want: "\"r\"", }, }, &actionExpr{ - pos: position{line: 1722, col: 5, offset: 41046}, + pos: position{line: 1717, col: 5, offset: 40935}, run: (*parser).callonSingleCharEscape14, expr: &litMatcher{ - pos: position{line: 1722, col: 5, offset: 41046}, + pos: position{line: 1717, col: 5, offset: 40935}, val: "t", ignoreCase: false, want: "\"t\"", }, }, &actionExpr{ - pos: position{line: 1723, col: 5, offset: 41075}, + pos: position{line: 1718, col: 5, offset: 40964}, run: (*parser).callonSingleCharEscape16, expr: &litMatcher{ - pos: position{line: 1723, col: 5, offset: 41075}, + pos: position{line: 1718, col: 5, offset: 40964}, val: "v", ignoreCase: false, want: "\"v\"", @@ -12539,32 +12502,32 @@ var g = &grammar{ }, { name: "KeywordEscape", - pos: position{line: 1725, col: 1, offset: 41101}, + pos: position{line: 1720, col: 1, offset: 40990}, expr: &choiceExpr{ - pos: position{line: 1726, col: 5, offset: 41119}, + pos: position{line: 1721, col: 5, offset: 41008}, alternatives: []any{ &actionExpr{ - pos: position{line: 1726, col: 5, offset: 41119}, + pos: position{line: 1721, col: 5, offset: 41008}, run: (*parser).callonKeywordEscape2, expr: &litMatcher{ - pos: position{line: 1726, col: 5, offset: 41119}, + pos: position{line: 1721, col: 5, offset: 41008}, val: "=", ignoreCase: false, want: "\"=\"", }, }, &actionExpr{ - pos: position{line: 1727, col: 5, offset: 41147}, + pos: position{line: 1722, col: 5, offset: 41036}, run: (*parser).callonKeywordEscape4, expr: &litMatcher{ - pos: position{line: 1727, col: 5, offset: 41147}, + pos: position{line: 1722, col: 5, offset: 41036}, val: "*", ignoreCase: false, want: "\"*\"", }, }, &charClassMatcher{ - pos: position{line: 1728, col: 5, offset: 41175}, + pos: position{line: 1723, col: 5, offset: 41064}, val: "[+-]", chars: []rune{'+', '-'}, ignoreCase: false, @@ -12577,42 +12540,42 @@ var g = &grammar{ }, { name: "UnicodeEscape", - pos: position{line: 1730, col: 1, offset: 41181}, + pos: position{line: 1725, col: 1, offset: 41070}, expr: &choiceExpr{ - pos: position{line: 1731, col: 5, offset: 41199}, + pos: position{line: 1726, col: 5, offset: 41088}, alternatives: []any{ &actionExpr{ - pos: position{line: 1731, col: 5, offset: 41199}, + pos: position{line: 1726, col: 5, offset: 41088}, run: (*parser).callonUnicodeEscape2, expr: &seqExpr{ - pos: position{line: 1731, col: 5, offset: 41199}, + pos: position{line: 1726, col: 5, offset: 41088}, exprs: []any{ &litMatcher{ - pos: position{line: 1731, col: 5, offset: 41199}, + pos: position{line: 1726, col: 5, offset: 41088}, val: "u", ignoreCase: false, want: "\"u\"", }, &labeledExpr{ - pos: position{line: 1731, col: 9, offset: 41203}, + pos: position{line: 1726, col: 9, offset: 41092}, label: "chars", expr: &seqExpr{ - pos: position{line: 1731, col: 16, offset: 41210}, + pos: position{line: 1726, col: 16, offset: 41099}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1731, col: 16, offset: 41210}, + pos: position{line: 1726, col: 16, offset: 41099}, name: "HexDigit", }, &ruleRefExpr{ - pos: position{line: 1731, col: 25, offset: 41219}, + pos: position{line: 1726, col: 25, offset: 41108}, name: "HexDigit", }, &ruleRefExpr{ - pos: position{line: 1731, col: 34, offset: 41228}, + pos: position{line: 1726, col: 34, offset: 41117}, name: "HexDigit", }, &ruleRefExpr{ - pos: position{line: 1731, col: 43, offset: 41237}, + pos: position{line: 1726, col: 43, offset: 41126}, name: "HexDigit", }, }, @@ -12622,65 +12585,65 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1734, col: 5, offset: 41300}, + pos: position{line: 1729, col: 5, offset: 41189}, run: (*parser).callonUnicodeEscape11, expr: &seqExpr{ - pos: position{line: 1734, col: 5, offset: 41300}, + pos: position{line: 1729, col: 5, offset: 41189}, exprs: []any{ &litMatcher{ - pos: position{line: 1734, col: 5, offset: 41300}, + pos: position{line: 1729, col: 5, offset: 41189}, val: "u", ignoreCase: false, want: "\"u\"", }, &litMatcher{ - pos: position{line: 1734, col: 9, offset: 41304}, + pos: position{line: 1729, col: 9, offset: 41193}, val: "{", ignoreCase: false, want: "\"{\"", }, &labeledExpr{ - pos: position{line: 1734, col: 13, offset: 41308}, + pos: position{line: 1729, col: 13, offset: 41197}, label: "chars", expr: &seqExpr{ - pos: position{line: 1734, col: 20, offset: 41315}, + pos: position{line: 1729, col: 20, offset: 41204}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1734, col: 20, offset: 41315}, + pos: position{line: 1729, col: 20, offset: 41204}, name: "HexDigit", }, &zeroOrOneExpr{ - pos: position{line: 1734, col: 29, offset: 41324}, + pos: position{line: 1729, col: 29, offset: 41213}, expr: &ruleRefExpr{ - pos: position{line: 1734, col: 29, offset: 41324}, + pos: position{line: 1729, col: 29, offset: 41213}, name: "HexDigit", }, }, &zeroOrOneExpr{ - pos: position{line: 1734, col: 39, offset: 41334}, + pos: position{line: 1729, col: 39, offset: 41223}, expr: &ruleRefExpr{ - pos: position{line: 1734, col: 39, offset: 41334}, + pos: position{line: 1729, col: 39, offset: 41223}, name: "HexDigit", }, }, &zeroOrOneExpr{ - pos: position{line: 1734, col: 49, offset: 41344}, + pos: position{line: 1729, col: 49, offset: 41233}, expr: &ruleRefExpr{ - pos: position{line: 1734, col: 49, offset: 41344}, + pos: position{line: 1729, col: 49, offset: 41233}, name: "HexDigit", }, }, &zeroOrOneExpr{ - pos: position{line: 1734, col: 59, offset: 41354}, + pos: position{line: 1729, col: 59, offset: 41243}, expr: &ruleRefExpr{ - pos: position{line: 1734, col: 59, offset: 41354}, + pos: position{line: 1729, col: 59, offset: 41243}, name: "HexDigit", }, }, &zeroOrOneExpr{ - pos: position{line: 1734, col: 69, offset: 41364}, + pos: position{line: 1729, col: 69, offset: 41253}, expr: &ruleRefExpr{ - pos: position{line: 1734, col: 69, offset: 41364}, + pos: position{line: 1729, col: 69, offset: 41253}, name: "HexDigit", }, }, @@ -12688,7 +12651,7 @@ var g = &grammar{ }, }, &litMatcher{ - pos: position{line: 1734, col: 80, offset: 41375}, + pos: position{line: 1729, col: 80, offset: 41264}, val: "}", ignoreCase: false, want: "\"}\"", @@ -12703,37 +12666,37 @@ var g = &grammar{ }, { name: "RegexpPattern", - pos: position{line: 1738, col: 1, offset: 41429}, + pos: position{line: 1733, col: 1, offset: 41318}, expr: &actionExpr{ - pos: position{line: 1739, col: 5, offset: 41447}, + pos: position{line: 1734, col: 5, offset: 41336}, run: (*parser).callonRegexpPattern1, expr: &seqExpr{ - pos: position{line: 1739, col: 5, offset: 41447}, + pos: position{line: 1734, col: 5, offset: 41336}, exprs: []any{ &litMatcher{ - pos: position{line: 1739, col: 5, offset: 41447}, + pos: position{line: 1734, col: 5, offset: 41336}, val: "/", ignoreCase: false, want: "\"/\"", }, &labeledExpr{ - pos: position{line: 1739, col: 9, offset: 41451}, + pos: position{line: 1734, col: 9, offset: 41340}, label: "body", expr: &ruleRefExpr{ - pos: position{line: 1739, col: 14, offset: 41456}, + pos: position{line: 1734, col: 14, offset: 41345}, name: "RegexpBody", }, }, &litMatcher{ - pos: position{line: 1739, col: 25, offset: 41467}, + pos: position{line: 1734, col: 25, offset: 41356}, val: "/", ignoreCase: false, want: "\"/\"", }, ¬Expr{ - pos: position{line: 1739, col: 29, offset: 41471}, + pos: position{line: 1734, col: 29, offset: 41360}, expr: &ruleRefExpr{ - pos: position{line: 1739, col: 30, offset: 41472}, + pos: position{line: 1734, col: 30, offset: 41361}, name: "KeyWordStart", }, }, @@ -12745,33 +12708,33 @@ var g = &grammar{ }, { name: "RegexpBody", - pos: position{line: 1741, col: 1, offset: 41507}, + pos: position{line: 1736, col: 1, offset: 41396}, expr: &actionExpr{ - pos: position{line: 1742, col: 5, offset: 41522}, + pos: position{line: 1737, col: 5, offset: 41411}, run: (*parser).callonRegexpBody1, expr: &oneOrMoreExpr{ - pos: position{line: 1742, col: 5, offset: 41522}, + pos: position{line: 1737, col: 5, offset: 41411}, expr: &choiceExpr{ - pos: position{line: 1742, col: 6, offset: 41523}, + pos: position{line: 1737, col: 6, offset: 41412}, alternatives: []any{ &charClassMatcher{ - pos: position{line: 1742, col: 6, offset: 41523}, + pos: position{line: 1737, col: 6, offset: 41412}, val: "[^/\\\\]", chars: []rune{'/', '\\'}, ignoreCase: false, inverted: true, }, &seqExpr{ - pos: position{line: 1742, col: 15, offset: 41532}, + pos: position{line: 1737, col: 15, offset: 41421}, exprs: []any{ &litMatcher{ - pos: position{line: 1742, col: 15, offset: 41532}, + pos: position{line: 1737, col: 15, offset: 41421}, val: "\\", ignoreCase: false, want: "\"\\\\\"", }, &anyMatcher{ - line: 1742, col: 20, offset: 41537, + line: 1737, col: 20, offset: 41426, }, }, }, @@ -12784,9 +12747,9 @@ var g = &grammar{ }, { name: "EscapedChar", - pos: position{line: 1744, col: 1, offset: 41573}, + pos: position{line: 1739, col: 1, offset: 41462}, expr: &charClassMatcher{ - pos: position{line: 1745, col: 5, offset: 41589}, + pos: position{line: 1740, col: 5, offset: 41478}, val: "[\\x00-\\x1f\\\\]", chars: []rune{'\\'}, ranges: []rune{'\x00', '\x1f'}, @@ -12798,11 +12761,11 @@ var g = &grammar{ }, { name: "_", - pos: position{line: 1747, col: 1, offset: 41604}, + pos: position{line: 1742, col: 1, offset: 41493}, expr: &oneOrMoreExpr{ - pos: position{line: 1747, col: 5, offset: 41608}, + pos: position{line: 1742, col: 5, offset: 41497}, expr: &ruleRefExpr{ - pos: position{line: 1747, col: 5, offset: 41608}, + pos: position{line: 1742, col: 5, offset: 41497}, name: "AnySpace", }, }, @@ -12811,11 +12774,11 @@ var g = &grammar{ }, { name: "__", - pos: position{line: 1749, col: 1, offset: 41619}, + pos: position{line: 1744, col: 1, offset: 41508}, expr: &zeroOrMoreExpr{ - pos: position{line: 1749, col: 6, offset: 41624}, + pos: position{line: 1744, col: 6, offset: 41513}, expr: &ruleRefExpr{ - pos: position{line: 1749, col: 6, offset: 41624}, + pos: position{line: 1744, col: 6, offset: 41513}, name: "AnySpace", }, }, @@ -12824,20 +12787,20 @@ var g = &grammar{ }, { name: "AnySpace", - pos: position{line: 1751, col: 1, offset: 41635}, + pos: position{line: 1746, col: 1, offset: 41524}, expr: &choiceExpr{ - pos: position{line: 1752, col: 5, offset: 41648}, + pos: position{line: 1747, col: 5, offset: 41537}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1752, col: 5, offset: 41648}, + pos: position{line: 1747, col: 5, offset: 41537}, name: "WhiteSpace", }, &ruleRefExpr{ - pos: position{line: 1753, col: 5, offset: 41663}, + pos: position{line: 1748, col: 5, offset: 41552}, name: "LineTerminator", }, &ruleRefExpr{ - pos: position{line: 1754, col: 5, offset: 41682}, + pos: position{line: 1749, col: 5, offset: 41571}, name: "Comment", }, }, @@ -12847,32 +12810,32 @@ var g = &grammar{ }, { name: "UnicodeLetter", - pos: position{line: 1756, col: 1, offset: 41691}, + pos: position{line: 1751, col: 1, offset: 41580}, expr: &choiceExpr{ - pos: position{line: 1757, col: 5, offset: 41709}, + pos: position{line: 1752, col: 5, offset: 41598}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1757, col: 5, offset: 41709}, + pos: position{line: 1752, col: 5, offset: 41598}, name: "Lu", }, &ruleRefExpr{ - pos: position{line: 1758, col: 5, offset: 41716}, + pos: position{line: 1753, col: 5, offset: 41605}, name: "Ll", }, &ruleRefExpr{ - pos: position{line: 1759, col: 5, offset: 41723}, + pos: position{line: 1754, col: 5, offset: 41612}, name: "Lt", }, &ruleRefExpr{ - pos: position{line: 1760, col: 5, offset: 41730}, + pos: position{line: 1755, col: 5, offset: 41619}, name: "Lm", }, &ruleRefExpr{ - pos: position{line: 1761, col: 5, offset: 41737}, + pos: position{line: 1756, col: 5, offset: 41626}, name: "Lo", }, &ruleRefExpr{ - pos: position{line: 1762, col: 5, offset: 41744}, + pos: position{line: 1757, col: 5, offset: 41633}, name: "Nl", }, }, @@ -12882,16 +12845,16 @@ var g = &grammar{ }, { name: "UnicodeCombiningMark", - pos: position{line: 1764, col: 1, offset: 41748}, + pos: position{line: 1759, col: 1, offset: 41637}, expr: &choiceExpr{ - pos: position{line: 1765, col: 5, offset: 41773}, + pos: position{line: 1760, col: 5, offset: 41662}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1765, col: 5, offset: 41773}, + pos: position{line: 1760, col: 5, offset: 41662}, name: "Mn", }, &ruleRefExpr{ - pos: position{line: 1766, col: 5, offset: 41780}, + pos: position{line: 1761, col: 5, offset: 41669}, name: "Mc", }, }, @@ -12901,9 +12864,9 @@ var g = &grammar{ }, { name: "UnicodeDigit", - pos: position{line: 1768, col: 1, offset: 41784}, + pos: position{line: 1763, col: 1, offset: 41673}, expr: &ruleRefExpr{ - pos: position{line: 1769, col: 5, offset: 41801}, + pos: position{line: 1764, col: 5, offset: 41690}, name: "Nd", }, leader: false, @@ -12911,9 +12874,9 @@ var g = &grammar{ }, { name: "UnicodeConnectorPunctuation", - pos: position{line: 1771, col: 1, offset: 41805}, + pos: position{line: 1766, col: 1, offset: 41694}, expr: &ruleRefExpr{ - pos: position{line: 1772, col: 5, offset: 41837}, + pos: position{line: 1767, col: 5, offset: 41726}, name: "Pc", }, leader: false, @@ -12921,9 +12884,9 @@ var g = &grammar{ }, { name: "Ll", - pos: position{line: 1778, col: 1, offset: 42018}, + pos: position{line: 1773, col: 1, offset: 41907}, expr: &charClassMatcher{ - pos: position{line: 1778, col: 6, offset: 42023}, + pos: position{line: 1773, col: 6, offset: 41912}, val: "[\\u0061-\\u007A\\u00B5\\u00DF-\\u00F6\\u00F8-\\u00FF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137-\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148-\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C-\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA-\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9-\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC-\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF-\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F-\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0-\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB-\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE-\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0560-\\u0588\\u10D0-\\u10FA\\u10FD-\\u10FF\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6-\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FC7\\u1FD0-\\u1FD3\\u1FD6-\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6-\\u1FF7\\u210A\\u210E-\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C-\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65-\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73-\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3-\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7AF\\uA7B5\\uA7B7\\uA7B9\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB65\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A]", chars: []rune{'µ', 'ā', 'ă', 'ą', 'ć', 'ĉ', 'ċ', 'č', 'ď', 'đ', 'ē', 'ĕ', 'ė', 'ę', 'ě', 'ĝ', 'ğ', 'ġ', 'ģ', 'ĥ', 'ħ', 'ĩ', 'ī', 'ĭ', 'į', 'ı', 'ij', 'ĵ', 'ĺ', 'ļ', 'ľ', 'ŀ', 'ł', 'ń', 'ņ', 'ŋ', 'ō', 'ŏ', 'ő', 'œ', 'ŕ', 'ŗ', 'ř', 'ś', 'ŝ', 'ş', 'š', 'ţ', 'ť', 'ŧ', 'ũ', 'ū', 'ŭ', 'ů', 'ű', 'ų', 'ŵ', 'ŷ', 'ź', 'ż', 'ƃ', 'ƅ', 'ƈ', 'ƒ', 'ƕ', 'ƞ', 'ơ', 'ƣ', 'ƥ', 'ƨ', 'ƭ', 'ư', 'ƴ', 'ƶ', 'dž', 'lj', 'nj', 'ǎ', 'ǐ', 'ǒ', 'ǔ', 'ǖ', 'ǘ', 'ǚ', 'ǟ', 'ǡ', 'ǣ', 'ǥ', 'ǧ', 'ǩ', 'ǫ', 'ǭ', 'dz', 'ǵ', 'ǹ', 'ǻ', 'ǽ', 'ǿ', 'ȁ', 'ȃ', 'ȅ', 'ȇ', 'ȉ', 'ȋ', 'ȍ', 'ȏ', 'ȑ', 'ȓ', 'ȕ', 'ȗ', 'ș', 'ț', 'ȝ', 'ȟ', 'ȡ', 'ȣ', 'ȥ', 'ȧ', 'ȩ', 'ȫ', 'ȭ', 'ȯ', 'ȱ', 'ȼ', 'ɂ', 'ɇ', 'ɉ', 'ɋ', 'ɍ', 'ͱ', 'ͳ', 'ͷ', 'ΐ', 'ϙ', 'ϛ', 'ϝ', 'ϟ', 'ϡ', 'ϣ', 'ϥ', 'ϧ', 'ϩ', 'ϫ', 'ϭ', 'ϵ', 'ϸ', 'ѡ', 'ѣ', 'ѥ', 'ѧ', 'ѩ', 'ѫ', 'ѭ', 'ѯ', 'ѱ', 'ѳ', 'ѵ', 'ѷ', 'ѹ', 'ѻ', 'ѽ', 'ѿ', 'ҁ', 'ҋ', 'ҍ', 'ҏ', 'ґ', 'ғ', 'ҕ', 'җ', 'ҙ', 'қ', 'ҝ', 'ҟ', 'ҡ', 'ң', 'ҥ', 'ҧ', 'ҩ', 'ҫ', 'ҭ', 'ү', 'ұ', 'ҳ', 'ҵ', 'ҷ', 'ҹ', 'һ', 'ҽ', 'ҿ', 'ӂ', 'ӄ', 'ӆ', 'ӈ', 'ӊ', 'ӌ', 'ӑ', 'ӓ', 'ӕ', 'ӗ', 'ә', 'ӛ', 'ӝ', 'ӟ', 'ӡ', 'ӣ', 'ӥ', 'ӧ', 'ө', 'ӫ', 'ӭ', 'ӯ', 'ӱ', 'ӳ', 'ӵ', 'ӷ', 'ӹ', 'ӻ', 'ӽ', 'ӿ', 'ԁ', 'ԃ', 'ԅ', 'ԇ', 'ԉ', 'ԋ', 'ԍ', 'ԏ', 'ԑ', 'ԓ', 'ԕ', 'ԗ', 'ԙ', 'ԛ', 'ԝ', 'ԟ', 'ԡ', 'ԣ', 'ԥ', 'ԧ', 'ԩ', 'ԫ', 'ԭ', 'ԯ', 'ḁ', 'ḃ', 'ḅ', 'ḇ', 'ḉ', 'ḋ', 'ḍ', 'ḏ', 'ḑ', 'ḓ', 'ḕ', 'ḗ', 'ḙ', 'ḛ', 'ḝ', 'ḟ', 'ḡ', 'ḣ', 'ḥ', 'ḧ', 'ḩ', 'ḫ', 'ḭ', 'ḯ', 'ḱ', 'ḳ', 'ḵ', 'ḷ', 'ḹ', 'ḻ', 'ḽ', 'ḿ', 'ṁ', 'ṃ', 'ṅ', 'ṇ', 'ṉ', 'ṋ', 'ṍ', 'ṏ', 'ṑ', 'ṓ', 'ṕ', 'ṗ', 'ṙ', 'ṛ', 'ṝ', 'ṟ', 'ṡ', 'ṣ', 'ṥ', 'ṧ', 'ṩ', 'ṫ', 'ṭ', 'ṯ', 'ṱ', 'ṳ', 'ṵ', 'ṷ', 'ṹ', 'ṻ', 'ṽ', 'ṿ', 'ẁ', 'ẃ', 'ẅ', 'ẇ', 'ẉ', 'ẋ', 'ẍ', 'ẏ', 'ẑ', 'ẓ', 'ẟ', 'ạ', 'ả', 'ấ', 'ầ', 'ẩ', 'ẫ', 'ậ', 'ắ', 'ằ', 'ẳ', 'ẵ', 'ặ', 'ẹ', 'ẻ', 'ẽ', 'ế', 'ề', 'ể', 'ễ', 'ệ', 'ỉ', 'ị', 'ọ', 'ỏ', 'ố', 'ồ', 'ổ', 'ỗ', 'ộ', 'ớ', 'ờ', 'ở', 'ỡ', 'ợ', 'ụ', 'ủ', 'ứ', 'ừ', 'ử', 'ữ', 'ự', 'ỳ', 'ỵ', 'ỷ', 'ỹ', 'ỻ', 'ỽ', 'ι', 'ℊ', 'ℓ', 'ℯ', 'ℴ', 'ℹ', 'ⅎ', 'ↄ', 'ⱡ', 'ⱨ', 'ⱪ', 'ⱬ', 'ⱱ', 'ⲁ', 'ⲃ', 'ⲅ', 'ⲇ', 'ⲉ', 'ⲋ', 'ⲍ', 'ⲏ', 'ⲑ', 'ⲓ', 'ⲕ', 'ⲗ', 'ⲙ', 'ⲛ', 'ⲝ', 'ⲟ', 'ⲡ', 'ⲣ', 'ⲥ', 'ⲧ', 'ⲩ', 'ⲫ', 'ⲭ', 'ⲯ', 'ⲱ', 'ⲳ', 'ⲵ', 'ⲷ', 'ⲹ', 'ⲻ', 'ⲽ', 'ⲿ', 'ⳁ', 'ⳃ', 'ⳅ', 'ⳇ', 'ⳉ', 'ⳋ', 'ⳍ', 'ⳏ', 'ⳑ', 'ⳓ', 'ⳕ', 'ⳗ', 'ⳙ', 'ⳛ', 'ⳝ', 'ⳟ', 'ⳡ', 'ⳬ', 'ⳮ', 'ⳳ', 'ⴧ', 'ⴭ', 'ꙁ', 'ꙃ', 'ꙅ', 'ꙇ', 'ꙉ', 'ꙋ', 'ꙍ', 'ꙏ', 'ꙑ', 'ꙓ', 'ꙕ', 'ꙗ', 'ꙙ', 'ꙛ', 'ꙝ', 'ꙟ', 'ꙡ', 'ꙣ', 'ꙥ', 'ꙧ', 'ꙩ', 'ꙫ', 'ꙭ', 'ꚁ', 'ꚃ', 'ꚅ', 'ꚇ', 'ꚉ', 'ꚋ', 'ꚍ', 'ꚏ', 'ꚑ', 'ꚓ', 'ꚕ', 'ꚗ', 'ꚙ', 'ꚛ', 'ꜣ', 'ꜥ', 'ꜧ', 'ꜩ', 'ꜫ', 'ꜭ', 'ꜳ', 'ꜵ', 'ꜷ', 'ꜹ', 'ꜻ', 'ꜽ', 'ꜿ', 'ꝁ', 'ꝃ', 'ꝅ', 'ꝇ', 'ꝉ', 'ꝋ', 'ꝍ', 'ꝏ', 'ꝑ', 'ꝓ', 'ꝕ', 'ꝗ', 'ꝙ', 'ꝛ', 'ꝝ', 'ꝟ', 'ꝡ', 'ꝣ', 'ꝥ', 'ꝧ', 'ꝩ', 'ꝫ', 'ꝭ', 'ꝯ', 'ꝺ', 'ꝼ', 'ꝿ', 'ꞁ', 'ꞃ', 'ꞅ', 'ꞇ', 'ꞌ', 'ꞎ', 'ꞑ', 'ꞗ', 'ꞙ', 'ꞛ', 'ꞝ', 'ꞟ', 'ꞡ', 'ꞣ', 'ꞥ', 'ꞧ', 'ꞩ', 'ꞯ', 'ꞵ', 'ꞷ', 'ꞹ', 'ꟺ'}, ranges: []rune{'a', 'z', 'ß', 'ö', 'ø', 'ÿ', 'ķ', 'ĸ', 'ň', 'ʼn', 'ž', 'ƀ', 'ƌ', 'ƍ', 'ƙ', 'ƛ', 'ƪ', 'ƫ', 'ƹ', 'ƺ', 'ƽ', 'ƿ', 'ǜ', 'ǝ', 'ǯ', 'ǰ', 'ȳ', 'ȹ', 'ȿ', 'ɀ', 'ɏ', 'ʓ', 'ʕ', 'ʯ', 'ͻ', 'ͽ', 'ά', 'ώ', 'ϐ', 'ϑ', 'ϕ', 'ϗ', 'ϯ', 'ϳ', 'ϻ', 'ϼ', 'а', 'џ', 'ӎ', 'ӏ', 'ՠ', 'ֈ', 'ა', 'ჺ', 'ჽ', 'ჿ', 'ᏸ', 'ᏽ', 'ᲀ', 'ᲈ', 'ᴀ', 'ᴫ', 'ᵫ', 'ᵷ', 'ᵹ', 'ᶚ', 'ẕ', 'ẝ', 'ỿ', 'ἇ', 'ἐ', 'ἕ', 'ἠ', 'ἧ', 'ἰ', 'ἷ', 'ὀ', 'ὅ', 'ὐ', 'ὗ', 'ὠ', 'ὧ', 'ὰ', 'ώ', 'ᾀ', 'ᾇ', 'ᾐ', 'ᾗ', 'ᾠ', 'ᾧ', 'ᾰ', 'ᾴ', 'ᾶ', 'ᾷ', 'ῂ', 'ῄ', 'ῆ', 'ῇ', 'ῐ', 'ΐ', 'ῖ', 'ῗ', 'ῠ', 'ῧ', 'ῲ', 'ῴ', 'ῶ', 'ῷ', 'ℎ', 'ℏ', 'ℼ', 'ℽ', 'ⅆ', 'ⅉ', 'ⰰ', 'ⱞ', 'ⱥ', 'ⱦ', 'ⱳ', 'ⱴ', 'ⱶ', 'ⱻ', 'ⳣ', 'ⳤ', 'ⴀ', 'ⴥ', 'ꜯ', 'ꜱ', 'ꝱ', 'ꝸ', 'ꞓ', 'ꞕ', 'ꬰ', 'ꭚ', 'ꭠ', 'ꭥ', 'ꭰ', 'ꮿ', 'ff', 'st', 'ﬓ', 'ﬗ', 'a', 'z'}, @@ -12935,9 +12898,9 @@ var g = &grammar{ }, { name: "Lm", - pos: position{line: 1781, col: 1, offset: 46175}, + pos: position{line: 1776, col: 1, offset: 46064}, expr: &charClassMatcher{ - pos: position{line: 1781, col: 6, offset: 46180}, + pos: position{line: 1776, col: 6, offset: 46069}, val: "[\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0374\\u037A\\u0559\\u0640\\u06E5-\\u06E6\\u07F4-\\u07F5\\u07FA\\u081A\\u0824\\u0828\\u0971\\u0E46\\u0EC6\\u10FC\\u17D7\\u1843\\u1AA7\\u1C78-\\u1C7D\\u1D2C-\\u1D6A\\u1D78\\u1D9B-\\u1DBF\\u2071\\u207F\\u2090-\\u209C\\u2C7C-\\u2C7D\\u2D6F\\u2E2F\\u3005\\u3031-\\u3035\\u303B\\u309D-\\u309E\\u30FC-\\u30FE\\uA015\\uA4F8-\\uA4FD\\uA60C\\uA67F\\uA69C-\\uA69D\\uA717-\\uA71F\\uA770\\uA788\\uA7F8-\\uA7F9\\uA9CF\\uA9E6\\uAA70\\uAADD\\uAAF3-\\uAAF4\\uAB5C-\\uAB5F\\uFF70\\uFF9E-\\uFF9F]", chars: []rune{'ˬ', 'ˮ', 'ʹ', 'ͺ', 'ՙ', 'ـ', 'ߺ', 'ࠚ', 'ࠤ', 'ࠨ', 'ॱ', 'ๆ', 'ໆ', 'ჼ', 'ៗ', 'ᡃ', 'ᪧ', 'ᵸ', 'ⁱ', 'ⁿ', 'ⵯ', 'ⸯ', '々', '〻', 'ꀕ', 'ꘌ', 'ꙿ', 'ꝰ', 'ꞈ', 'ꧏ', 'ꧦ', 'ꩰ', 'ꫝ', 'ー'}, ranges: []rune{'ʰ', 'ˁ', 'ˆ', 'ˑ', 'ˠ', 'ˤ', 'ۥ', 'ۦ', 'ߴ', 'ߵ', 'ᱸ', 'ᱽ', 'ᴬ', 'ᵪ', 'ᶛ', 'ᶿ', 'ₐ', 'ₜ', 'ⱼ', 'ⱽ', '〱', '〵', 'ゝ', 'ゞ', 'ー', 'ヾ', 'ꓸ', 'ꓽ', 'ꚜ', 'ꚝ', 'ꜗ', 'ꜟ', 'ꟸ', 'ꟹ', 'ꫳ', 'ꫴ', 'ꭜ', 'ꭟ', '゙', '゚'}, @@ -12949,9 +12912,9 @@ var g = &grammar{ }, { name: "Lo", - pos: position{line: 1784, col: 1, offset: 46665}, + pos: position{line: 1779, col: 1, offset: 46554}, expr: &charClassMatcher{ - pos: position{line: 1784, col: 6, offset: 46670}, + pos: position{line: 1779, col: 6, offset: 46559}, val: "[\\u00AA\\u00BA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60-\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E45\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1100-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5-\\u1CF6\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEF\\uA000-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A-\\uA62B\\uA66E\\uA6A0-\\uA6E5\\uA78F\\uA7F7\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF66-\\uFF6F\\uFF71-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]", chars: []rune{'ª', 'º', 'ƻ', 'ʔ', 'ە', 'ۿ', 'ܐ', 'ޱ', 'ऽ', 'ॐ', 'ল', 'ঽ', 'ৎ', 'ৼ', 'ਫ਼', 'ઽ', 'ૐ', 'ૹ', 'ଽ', 'ୱ', 'ஃ', 'ஜ', 'ௐ', 'ఽ', 'ಀ', 'ಽ', 'ೞ', 'ഽ', 'ൎ', 'ල', 'ຄ', 'ຊ', 'ຍ', 'ລ', 'ວ', 'ຽ', 'ༀ', 'ဿ', 'ၡ', 'ႎ', 'ቘ', 'ዀ', 'ៜ', 'ᢪ', '〆', '〼', 'ゟ', 'ヿ', 'ꙮ', 'ꞏ', 'ꟷ', 'ꣻ', 'ꩺ', 'ꪱ', 'ꫀ', 'ꫂ', 'ꫲ', 'יִ', 'מּ'}, ranges: []rune{'ǀ', 'ǃ', 'א', 'ת', 'ׯ', 'ײ', 'ؠ', 'ؿ', 'ف', 'ي', 'ٮ', 'ٯ', 'ٱ', 'ۓ', 'ۮ', 'ۯ', 'ۺ', 'ۼ', 'ܒ', 'ܯ', 'ݍ', 'ޥ', 'ߊ', 'ߪ', 'ࠀ', 'ࠕ', 'ࡀ', 'ࡘ', 'ࡠ', 'ࡪ', 'ࢠ', 'ࢴ', 'ࢶ', 'ࢽ', 'ऄ', 'ह', 'क़', 'ॡ', 'ॲ', 'ঀ', 'অ', 'ঌ', 'এ', 'ঐ', 'ও', 'ন', 'প', 'র', 'শ', 'হ', 'ড়', 'ঢ়', 'য়', 'ৡ', 'ৰ', 'ৱ', 'ਅ', 'ਊ', 'ਏ', 'ਐ', 'ਓ', 'ਨ', 'ਪ', 'ਰ', 'ਲ', 'ਲ਼', 'ਵ', 'ਸ਼', 'ਸ', 'ਹ', 'ਖ਼', 'ੜ', 'ੲ', 'ੴ', 'અ', 'ઍ', 'એ', 'ઑ', 'ઓ', 'ન', 'પ', 'ર', 'લ', 'ળ', 'વ', 'હ', 'ૠ', 'ૡ', 'ଅ', 'ଌ', 'ଏ', 'ଐ', 'ଓ', 'ନ', 'ପ', 'ର', 'ଲ', 'ଳ', 'ଵ', 'ହ', 'ଡ଼', 'ଢ଼', 'ୟ', 'ୡ', 'அ', 'ஊ', 'எ', 'ஐ', 'ஒ', 'க', 'ங', 'ச', 'ஞ', 'ட', 'ண', 'த', 'ந', 'ப', 'ம', 'ஹ', 'అ', 'ఌ', 'ఎ', 'ఐ', 'ఒ', 'న', 'ప', 'హ', 'ౘ', 'ౚ', 'ౠ', 'ౡ', 'ಅ', 'ಌ', 'ಎ', 'ಐ', 'ಒ', 'ನ', 'ಪ', 'ಳ', 'ವ', 'ಹ', 'ೠ', 'ೡ', 'ೱ', 'ೲ', 'അ', 'ഌ', 'എ', 'ഐ', 'ഒ', 'ഺ', 'ൔ', 'ൖ', 'ൟ', 'ൡ', 'ൺ', 'ൿ', 'අ', 'ඖ', 'ක', 'න', 'ඳ', 'ර', 'ව', 'ෆ', 'ก', 'ะ', 'า', 'ำ', 'เ', 'ๅ', 'ກ', 'ຂ', 'ງ', 'ຈ', 'ດ', 'ທ', 'ນ', 'ຟ', 'ມ', 'ຣ', 'ສ', 'ຫ', 'ອ', 'ະ', 'າ', 'ຳ', 'ເ', 'ໄ', 'ໜ', 'ໟ', 'ཀ', 'ཇ', 'ཉ', 'ཬ', 'ྈ', 'ྌ', 'က', 'ဪ', 'ၐ', 'ၕ', 'ၚ', 'ၝ', 'ၥ', 'ၦ', 'ၮ', 'ၰ', 'ၵ', 'ႁ', 'ᄀ', 'ቈ', 'ቊ', 'ቍ', 'ቐ', 'ቖ', 'ቚ', 'ቝ', 'በ', 'ኈ', 'ኊ', 'ኍ', 'ነ', 'ኰ', 'ኲ', 'ኵ', 'ኸ', 'ኾ', 'ዂ', 'ዅ', 'ወ', 'ዖ', 'ዘ', 'ጐ', 'ጒ', 'ጕ', 'ጘ', 'ፚ', 'ᎀ', 'ᎏ', 'ᐁ', 'ᙬ', 'ᙯ', 'ᙿ', 'ᚁ', 'ᚚ', 'ᚠ', 'ᛪ', 'ᛱ', 'ᛸ', 'ᜀ', 'ᜌ', 'ᜎ', 'ᜑ', 'ᜠ', 'ᜱ', 'ᝀ', 'ᝑ', 'ᝠ', 'ᝬ', 'ᝮ', 'ᝰ', 'ក', 'ឳ', 'ᠠ', 'ᡂ', 'ᡄ', 'ᡸ', 'ᢀ', 'ᢄ', 'ᢇ', 'ᢨ', 'ᢰ', 'ᣵ', 'ᤀ', 'ᤞ', 'ᥐ', 'ᥭ', 'ᥰ', 'ᥴ', 'ᦀ', 'ᦫ', 'ᦰ', 'ᧉ', 'ᨀ', 'ᨖ', 'ᨠ', 'ᩔ', 'ᬅ', 'ᬳ', 'ᭅ', 'ᭋ', 'ᮃ', 'ᮠ', 'ᮮ', 'ᮯ', 'ᮺ', 'ᯥ', 'ᰀ', 'ᰣ', 'ᱍ', 'ᱏ', 'ᱚ', 'ᱷ', 'ᳩ', 'ᳬ', 'ᳮ', 'ᳱ', 'ᳵ', 'ᳶ', 'ℵ', 'ℸ', 'ⴰ', 'ⵧ', 'ⶀ', 'ⶖ', 'ⶠ', 'ⶦ', 'ⶨ', 'ⶮ', 'ⶰ', 'ⶶ', 'ⶸ', 'ⶾ', 'ⷀ', 'ⷆ', 'ⷈ', 'ⷎ', 'ⷐ', 'ⷖ', 'ⷘ', 'ⷞ', 'ぁ', 'ゖ', 'ァ', 'ヺ', 'ㄅ', 'ㄯ', 'ㄱ', 'ㆎ', 'ㆠ', 'ㆺ', 'ㇰ', 'ㇿ', '㐀', '䶵', '一', '鿯', 'ꀀ', 'ꀔ', 'ꀖ', 'ꒌ', 'ꓐ', 'ꓷ', 'ꔀ', 'ꘋ', 'ꘐ', 'ꘟ', 'ꘪ', 'ꘫ', 'ꚠ', 'ꛥ', 'ꟻ', 'ꠁ', 'ꠃ', 'ꠅ', 'ꠇ', 'ꠊ', 'ꠌ', 'ꠢ', 'ꡀ', 'ꡳ', 'ꢂ', 'ꢳ', 'ꣲ', 'ꣷ', 'ꣽ', 'ꣾ', 'ꤊ', 'ꤥ', 'ꤰ', 'ꥆ', 'ꥠ', 'ꥼ', 'ꦄ', 'ꦲ', 'ꧠ', 'ꧤ', 'ꧧ', 'ꧯ', 'ꧺ', 'ꧾ', 'ꨀ', 'ꨨ', 'ꩀ', 'ꩂ', 'ꩄ', 'ꩋ', 'ꩠ', 'ꩯ', 'ꩱ', 'ꩶ', 'ꩾ', 'ꪯ', 'ꪵ', 'ꪶ', 'ꪹ', 'ꪽ', 'ꫛ', 'ꫜ', 'ꫠ', 'ꫪ', 'ꬁ', 'ꬆ', 'ꬉ', 'ꬎ', 'ꬑ', 'ꬖ', 'ꬠ', 'ꬦ', 'ꬨ', 'ꬮ', 'ꯀ', 'ꯢ', '가', '힣', 'ힰ', 'ퟆ', 'ퟋ', 'ퟻ', '豈', '舘', '並', '龎', 'ײַ', 'ﬨ', 'שׁ', 'זּ', 'טּ', 'לּ', 'נּ', 'סּ', 'ףּ', 'פּ', 'צּ', 'ﮱ', 'ﯓ', 'ﴽ', 'ﵐ', 'ﶏ', 'ﶒ', 'ﷇ', 'ﷰ', 'ﷻ', 'ﹰ', 'ﹴ', 'ﹶ', 'ﻼ', 'ヲ', 'ッ', 'ア', 'ン', 'ᅠ', 'ᄒ', 'ᅡ', 'ᅦ', 'ᅧ', 'ᅬ', 'ᅭ', 'ᅲ', 'ᅳ', 'ᅵ'}, @@ -12963,9 +12926,9 @@ var g = &grammar{ }, { name: "Lt", - pos: position{line: 1787, col: 1, offset: 50117}, + pos: position{line: 1782, col: 1, offset: 50006}, expr: &charClassMatcher{ - pos: position{line: 1787, col: 6, offset: 50122}, + pos: position{line: 1782, col: 6, offset: 50011}, val: "[\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC]", chars: []rune{'Dž', 'Lj', 'Nj', 'Dz', 'ᾼ', 'ῌ', 'ῼ'}, ranges: []rune{'ᾈ', 'ᾏ', 'ᾘ', 'ᾟ', 'ᾨ', 'ᾯ'}, @@ -12977,9 +12940,9 @@ var g = &grammar{ }, { name: "Lu", - pos: position{line: 1790, col: 1, offset: 50228}, + pos: position{line: 1785, col: 1, offset: 50117}, expr: &charClassMatcher{ - pos: position{line: 1790, col: 6, offset: 50233}, + pos: position{line: 1785, col: 6, offset: 50122}, val: "[\\u0041-\\u005A\\u00C0-\\u00D6\\u00D8-\\u00DE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178-\\u0179\\u017B\\u017D\\u0181-\\u0182\\u0184\\u0186-\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193-\\u0194\\u0196-\\u0198\\u019C-\\u019D\\u019F-\\u01A0\\u01A2\\u01A4\\u01A6-\\u01A7\\u01A9\\u01AC\\u01AE-\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7-\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A-\\u023B\\u023D-\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9-\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0-\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E-\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D-\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AE\\uA7B0-\\uA7B4\\uA7B6\\uA7B8\\uFF21-\\uFF3A]", chars: []rune{'Ā', 'Ă', 'Ą', 'Ć', 'Ĉ', 'Ċ', 'Č', 'Ď', 'Đ', 'Ē', 'Ĕ', 'Ė', 'Ę', 'Ě', 'Ĝ', 'Ğ', 'Ġ', 'Ģ', 'Ĥ', 'Ħ', 'Ĩ', 'Ī', 'Ĭ', 'Į', 'İ', 'IJ', 'Ĵ', 'Ķ', 'Ĺ', 'Ļ', 'Ľ', 'Ŀ', 'Ł', 'Ń', 'Ņ', 'Ň', 'Ŋ', 'Ō', 'Ŏ', 'Ő', 'Œ', 'Ŕ', 'Ŗ', 'Ř', 'Ś', 'Ŝ', 'Ş', 'Š', 'Ţ', 'Ť', 'Ŧ', 'Ũ', 'Ū', 'Ŭ', 'Ů', 'Ű', 'Ų', 'Ŵ', 'Ŷ', 'Ż', 'Ž', 'Ƅ', 'Ƣ', 'Ƥ', 'Ʃ', 'Ƭ', 'Ƶ', 'Ƽ', 'DŽ', 'LJ', 'NJ', 'Ǎ', 'Ǐ', 'Ǒ', 'Ǔ', 'Ǖ', 'Ǘ', 'Ǚ', 'Ǜ', 'Ǟ', 'Ǡ', 'Ǣ', 'Ǥ', 'Ǧ', 'Ǩ', 'Ǫ', 'Ǭ', 'Ǯ', 'DZ', 'Ǵ', 'Ǻ', 'Ǽ', 'Ǿ', 'Ȁ', 'Ȃ', 'Ȅ', 'Ȇ', 'Ȉ', 'Ȋ', 'Ȍ', 'Ȏ', 'Ȑ', 'Ȓ', 'Ȕ', 'Ȗ', 'Ș', 'Ț', 'Ȝ', 'Ȟ', 'Ƞ', 'Ȣ', 'Ȥ', 'Ȧ', 'Ȩ', 'Ȫ', 'Ȭ', 'Ȯ', 'Ȱ', 'Ȳ', 'Ɂ', 'Ɉ', 'Ɋ', 'Ɍ', 'Ɏ', 'Ͱ', 'Ͳ', 'Ͷ', 'Ϳ', 'Ά', 'Ό', 'Ϗ', 'Ϙ', 'Ϛ', 'Ϝ', 'Ϟ', 'Ϡ', 'Ϣ', 'Ϥ', 'Ϧ', 'Ϩ', 'Ϫ', 'Ϭ', 'Ϯ', 'ϴ', 'Ϸ', 'Ѡ', 'Ѣ', 'Ѥ', 'Ѧ', 'Ѩ', 'Ѫ', 'Ѭ', 'Ѯ', 'Ѱ', 'Ѳ', 'Ѵ', 'Ѷ', 'Ѹ', 'Ѻ', 'Ѽ', 'Ѿ', 'Ҁ', 'Ҋ', 'Ҍ', 'Ҏ', 'Ґ', 'Ғ', 'Ҕ', 'Җ', 'Ҙ', 'Қ', 'Ҝ', 'Ҟ', 'Ҡ', 'Ң', 'Ҥ', 'Ҧ', 'Ҩ', 'Ҫ', 'Ҭ', 'Ү', 'Ұ', 'Ҳ', 'Ҵ', 'Ҷ', 'Ҹ', 'Һ', 'Ҽ', 'Ҿ', 'Ӄ', 'Ӆ', 'Ӈ', 'Ӊ', 'Ӌ', 'Ӎ', 'Ӑ', 'Ӓ', 'Ӕ', 'Ӗ', 'Ә', 'Ӛ', 'Ӝ', 'Ӟ', 'Ӡ', 'Ӣ', 'Ӥ', 'Ӧ', 'Ө', 'Ӫ', 'Ӭ', 'Ӯ', 'Ӱ', 'Ӳ', 'Ӵ', 'Ӷ', 'Ӹ', 'Ӻ', 'Ӽ', 'Ӿ', 'Ԁ', 'Ԃ', 'Ԅ', 'Ԇ', 'Ԉ', 'Ԋ', 'Ԍ', 'Ԏ', 'Ԑ', 'Ԓ', 'Ԕ', 'Ԗ', 'Ԙ', 'Ԛ', 'Ԝ', 'Ԟ', 'Ԡ', 'Ԣ', 'Ԥ', 'Ԧ', 'Ԩ', 'Ԫ', 'Ԭ', 'Ԯ', 'Ⴧ', 'Ⴭ', 'Ḁ', 'Ḃ', 'Ḅ', 'Ḇ', 'Ḉ', 'Ḋ', 'Ḍ', 'Ḏ', 'Ḑ', 'Ḓ', 'Ḕ', 'Ḗ', 'Ḙ', 'Ḛ', 'Ḝ', 'Ḟ', 'Ḡ', 'Ḣ', 'Ḥ', 'Ḧ', 'Ḩ', 'Ḫ', 'Ḭ', 'Ḯ', 'Ḱ', 'Ḳ', 'Ḵ', 'Ḷ', 'Ḹ', 'Ḻ', 'Ḽ', 'Ḿ', 'Ṁ', 'Ṃ', 'Ṅ', 'Ṇ', 'Ṉ', 'Ṋ', 'Ṍ', 'Ṏ', 'Ṑ', 'Ṓ', 'Ṕ', 'Ṗ', 'Ṙ', 'Ṛ', 'Ṝ', 'Ṟ', 'Ṡ', 'Ṣ', 'Ṥ', 'Ṧ', 'Ṩ', 'Ṫ', 'Ṭ', 'Ṯ', 'Ṱ', 'Ṳ', 'Ṵ', 'Ṷ', 'Ṹ', 'Ṻ', 'Ṽ', 'Ṿ', 'Ẁ', 'Ẃ', 'Ẅ', 'Ẇ', 'Ẉ', 'Ẋ', 'Ẍ', 'Ẏ', 'Ẑ', 'Ẓ', 'Ẕ', 'ẞ', 'Ạ', 'Ả', 'Ấ', 'Ầ', 'Ẩ', 'Ẫ', 'Ậ', 'Ắ', 'Ằ', 'Ẳ', 'Ẵ', 'Ặ', 'Ẹ', 'Ẻ', 'Ẽ', 'Ế', 'Ề', 'Ể', 'Ễ', 'Ệ', 'Ỉ', 'Ị', 'Ọ', 'Ỏ', 'Ố', 'Ồ', 'Ổ', 'Ỗ', 'Ộ', 'Ớ', 'Ờ', 'Ở', 'Ỡ', 'Ợ', 'Ụ', 'Ủ', 'Ứ', 'Ừ', 'Ử', 'Ữ', 'Ự', 'Ỳ', 'Ỵ', 'Ỷ', 'Ỹ', 'Ỻ', 'Ỽ', 'Ỿ', 'Ὑ', 'Ὓ', 'Ὕ', 'Ὗ', 'ℂ', 'ℇ', 'ℕ', 'ℤ', 'Ω', 'ℨ', 'ⅅ', 'Ↄ', 'Ⱡ', 'Ⱨ', 'Ⱪ', 'Ⱬ', 'Ⱳ', 'Ⱶ', 'Ⲃ', 'Ⲅ', 'Ⲇ', 'Ⲉ', 'Ⲋ', 'Ⲍ', 'Ⲏ', 'Ⲑ', 'Ⲓ', 'Ⲕ', 'Ⲗ', 'Ⲙ', 'Ⲛ', 'Ⲝ', 'Ⲟ', 'Ⲡ', 'Ⲣ', 'Ⲥ', 'Ⲧ', 'Ⲩ', 'Ⲫ', 'Ⲭ', 'Ⲯ', 'Ⲱ', 'Ⲳ', 'Ⲵ', 'Ⲷ', 'Ⲹ', 'Ⲻ', 'Ⲽ', 'Ⲿ', 'Ⳁ', 'Ⳃ', 'Ⳅ', 'Ⳇ', 'Ⳉ', 'Ⳋ', 'Ⳍ', 'Ⳏ', 'Ⳑ', 'Ⳓ', 'Ⳕ', 'Ⳗ', 'Ⳙ', 'Ⳛ', 'Ⳝ', 'Ⳟ', 'Ⳡ', 'Ⳣ', 'Ⳬ', 'Ⳮ', 'Ⳳ', 'Ꙁ', 'Ꙃ', 'Ꙅ', 'Ꙇ', 'Ꙉ', 'Ꙋ', 'Ꙍ', 'Ꙏ', 'Ꙑ', 'Ꙓ', 'Ꙕ', 'Ꙗ', 'Ꙙ', 'Ꙛ', 'Ꙝ', 'Ꙟ', 'Ꙡ', 'Ꙣ', 'Ꙥ', 'Ꙧ', 'Ꙩ', 'Ꙫ', 'Ꙭ', 'Ꚁ', 'Ꚃ', 'Ꚅ', 'Ꚇ', 'Ꚉ', 'Ꚋ', 'Ꚍ', 'Ꚏ', 'Ꚑ', 'Ꚓ', 'Ꚕ', 'Ꚗ', 'Ꚙ', 'Ꚛ', 'Ꜣ', 'Ꜥ', 'Ꜧ', 'Ꜩ', 'Ꜫ', 'Ꜭ', 'Ꜯ', 'Ꜳ', 'Ꜵ', 'Ꜷ', 'Ꜹ', 'Ꜻ', 'Ꜽ', 'Ꜿ', 'Ꝁ', 'Ꝃ', 'Ꝅ', 'Ꝇ', 'Ꝉ', 'Ꝋ', 'Ꝍ', 'Ꝏ', 'Ꝑ', 'Ꝓ', 'Ꝕ', 'Ꝗ', 'Ꝙ', 'Ꝛ', 'Ꝝ', 'Ꝟ', 'Ꝡ', 'Ꝣ', 'Ꝥ', 'Ꝧ', 'Ꝩ', 'Ꝫ', 'Ꝭ', 'Ꝯ', 'Ꝺ', 'Ꝼ', 'Ꞁ', 'Ꞃ', 'Ꞅ', 'Ꞇ', 'Ꞌ', 'Ɥ', 'Ꞑ', 'Ꞓ', 'Ꞗ', 'Ꞙ', 'Ꞛ', 'Ꞝ', 'Ꞟ', 'Ꞡ', 'Ꞣ', 'Ꞥ', 'Ꞧ', 'Ꞩ', 'Ꞷ', 'Ꞹ'}, ranges: []rune{'A', 'Z', 'À', 'Ö', 'Ø', 'Þ', 'Ÿ', 'Ź', 'Ɓ', 'Ƃ', 'Ɔ', 'Ƈ', 'Ɖ', 'Ƌ', 'Ǝ', 'Ƒ', 'Ɠ', 'Ɣ', 'Ɩ', 'Ƙ', 'Ɯ', 'Ɲ', 'Ɵ', 'Ơ', 'Ʀ', 'Ƨ', 'Ʈ', 'Ư', 'Ʊ', 'Ƴ', 'Ʒ', 'Ƹ', 'Ƕ', 'Ǹ', 'Ⱥ', 'Ȼ', 'Ƚ', 'Ⱦ', 'Ƀ', 'Ɇ', 'Έ', 'Ί', 'Ύ', 'Ώ', 'Α', 'Ρ', 'Σ', 'Ϋ', 'ϒ', 'ϔ', 'Ϲ', 'Ϻ', 'Ͻ', 'Я', 'Ӏ', 'Ӂ', 'Ա', 'Ֆ', 'Ⴀ', 'Ⴥ', 'Ꭰ', 'Ᏽ', 'Ა', 'Ჺ', 'Ჽ', 'Ჿ', 'Ἀ', 'Ἇ', 'Ἐ', 'Ἕ', 'Ἠ', 'Ἧ', 'Ἰ', 'Ἷ', 'Ὀ', 'Ὅ', 'Ὠ', 'Ὧ', 'Ᾰ', 'Ά', 'Ὲ', 'Ή', 'Ῐ', 'Ί', 'Ῠ', 'Ῥ', 'Ὸ', 'Ώ', 'ℋ', 'ℍ', 'ℐ', 'ℒ', 'ℙ', 'ℝ', 'K', 'ℭ', 'ℰ', 'ℳ', 'ℾ', 'ℿ', 'Ⰰ', 'Ⱞ', 'Ɫ', 'Ɽ', 'Ɑ', 'Ɒ', 'Ȿ', 'Ⲁ', 'Ᵹ', 'Ꝿ', 'Ɦ', 'Ɪ', 'Ʞ', 'Ꞵ', 'A', 'Z'}, @@ -12991,9 +12954,9 @@ var g = &grammar{ }, { name: "Mc", - pos: position{line: 1793, col: 1, offset: 54234}, + pos: position{line: 1788, col: 1, offset: 54123}, expr: &charClassMatcher{ - pos: position{line: 1793, col: 6, offset: 54239}, + pos: position{line: 1788, col: 6, offset: 54128}, val: "[\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E-\\u094F\\u0982-\\u0983\\u09BE-\\u09C0\\u09C7-\\u09C8\\u09CB-\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB-\\u0ACC\\u0B02-\\u0B03\\u0B3E\\u0B40\\u0B47-\\u0B48\\u0B4B-\\u0B4C\\u0B57\\u0BBE-\\u0BBF\\u0BC1-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82-\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7-\\u0CC8\\u0CCA-\\u0CCB\\u0CD5-\\u0CD6\\u0D02-\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82-\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2-\\u0DF3\\u0F3E-\\u0F3F\\u0F7F\\u102B-\\u102C\\u1031\\u1038\\u103B-\\u103C\\u1056-\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083-\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7-\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930-\\u1931\\u1933-\\u1938\\u1A19-\\u1A1A\\u1A55\\u1A57\\u1A61\\u1A63-\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43-\\u1B44\\u1B82\\u1BA1\\u1BA6-\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2-\\u1BF3\\u1C24-\\u1C2B\\u1C34-\\u1C35\\u1CE1\\u1CF2-\\u1CF3\\u1CF7\\u302E-\\u302F\\uA823-\\uA824\\uA827\\uA880-\\uA881\\uA8B4-\\uA8C3\\uA952-\\uA953\\uA983\\uA9B4-\\uA9B5\\uA9BA-\\uA9BB\\uA9BD-\\uA9C0\\uAA2F-\\uAA30\\uAA33-\\uAA34\\uAA4D\\uAA7B\\uAA7D\\uAAEB\\uAAEE-\\uAAEF\\uAAF5\\uABE3-\\uABE4\\uABE6-\\uABE7\\uABE9-\\uABEA\\uABEC]", chars: []rune{'ः', 'ऻ', 'ৗ', 'ਃ', 'ઃ', 'ૉ', 'ା', 'ୀ', 'ୗ', 'ௗ', 'ಾ', 'ൗ', 'ཿ', 'ေ', 'း', 'ႏ', 'ា', 'ᩕ', 'ᩗ', 'ᩡ', 'ᬄ', 'ᬵ', 'ᬻ', 'ᮂ', 'ᮡ', '᮪', 'ᯧ', 'ᯮ', '᳡', '᳷', 'ꠧ', 'ꦃ', 'ꩍ', 'ꩻ', 'ꩽ', 'ꫫ', 'ꫵ', '꯬'}, ranges: []rune{'ा', 'ी', 'ॉ', 'ौ', 'ॎ', 'ॏ', 'ং', 'ঃ', 'া', 'ী', 'ে', 'ৈ', 'ো', 'ৌ', 'ਾ', 'ੀ', 'ા', 'ી', 'ો', 'ૌ', 'ଂ', 'ଃ', 'େ', 'ୈ', 'ୋ', 'ୌ', 'ா', 'ி', 'ு', 'ூ', 'ெ', 'ை', 'ொ', 'ௌ', 'ఁ', 'ః', 'ు', 'ౄ', 'ಂ', 'ಃ', 'ೀ', 'ೄ', 'ೇ', 'ೈ', 'ೊ', 'ೋ', 'ೕ', 'ೖ', 'ം', 'ഃ', 'ാ', 'ീ', 'െ', 'ൈ', 'ൊ', 'ൌ', 'ං', 'ඃ', 'ා', 'ෑ', 'ෘ', 'ෟ', 'ෲ', 'ෳ', '༾', '༿', 'ါ', 'ာ', 'ျ', 'ြ', 'ၖ', 'ၗ', 'ၢ', 'ၤ', 'ၧ', 'ၭ', 'ႃ', 'ႄ', 'ႇ', 'ႌ', 'ႚ', 'ႜ', 'ើ', 'ៅ', 'ះ', 'ៈ', 'ᤣ', 'ᤦ', 'ᤩ', 'ᤫ', 'ᤰ', 'ᤱ', 'ᤳ', 'ᤸ', 'ᨙ', 'ᨚ', 'ᩣ', 'ᩤ', 'ᩭ', 'ᩲ', 'ᬽ', 'ᭁ', 'ᭃ', '᭄', 'ᮦ', 'ᮧ', 'ᯪ', 'ᯬ', '᯲', '᯳', 'ᰤ', 'ᰫ', 'ᰴ', 'ᰵ', 'ᳲ', 'ᳳ', '〮', '〯', 'ꠣ', 'ꠤ', 'ꢀ', 'ꢁ', 'ꢴ', 'ꣃ', 'ꥒ', '꥓', 'ꦴ', 'ꦵ', 'ꦺ', 'ꦻ', 'ꦽ', '꧀', 'ꨯ', 'ꨰ', 'ꨳ', 'ꨴ', 'ꫮ', 'ꫯ', 'ꯣ', 'ꯤ', 'ꯦ', 'ꯧ', 'ꯩ', 'ꯪ'}, @@ -13005,9 +12968,9 @@ var g = &grammar{ }, { name: "Mn", - pos: position{line: 1796, col: 1, offset: 55427}, + pos: position{line: 1791, col: 1, offset: 55316}, expr: &charClassMatcher{ - pos: position{line: 1796, col: 6, offset: 55432}, + pos: position{line: 1791, col: 6, offset: 55321}, val: "[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D3-\\u08E1\\u08E3-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2-\\u09E3\\u09FE\\u0A01-\\u0A02\\u0A3C\\u0A41-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70-\\u0A71\\u0A75\\u0A81-\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7-\\u0AC8\\u0ACD\\u0AE2-\\u0AE3\\u0AFA-\\u0AFF\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62-\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C00\\u0C04\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56\\u0C62-\\u0C63\\u0C81\\u0CBC\\u0CBF\\u0CC6\\u0CCC-\\u0CCD\\u0CE2-\\u0CE3\\u0D00-\\u0D01\\u0D3B-\\u0D3C\\u0D41-\\u0D44\\u0D4D\\u0D62-\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB-\\u0EBC\\u0EC8-\\u0ECD\\u0F18-\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86-\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039-\\u103A\\u103D-\\u103E\\u1058-\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085-\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17B4-\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u1885-\\u1886\\u18A9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193B\\u1A17-\\u1A18\\u1A1B\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1AB0-\\u1ABD\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80-\\u1B81\\u1BA2-\\u1BA5\\u1BA8-\\u1BA9\\u1BAB-\\u1BAD\\u1BE6\\u1BE8-\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8-\\u1CF9\\u1DC0-\\u1DF9\\u1DFB-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302D\\u3099-\\u309A\\uA66F\\uA674-\\uA67D\\uA69E-\\uA69F\\uA6F0-\\uA6F1\\uA802\\uA806\\uA80B\\uA825-\\uA826\\uA8C4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uA9E5\\uAA29-\\uAA2E\\uAA31-\\uAA32\\uAA35-\\uAA36\\uAA43\\uAA4C\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7-\\uAAB8\\uAABE-\\uAABF\\uAAC1\\uAAEC-\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F]", chars: []rune{'ֿ', 'ׇ', 'ٰ', 'ܑ', '߽', 'ऺ', '़', '्', 'ঁ', '়', '্', '৾', '਼', 'ੑ', 'ੵ', '઼', '્', 'ଁ', '଼', 'ି', '୍', 'ୖ', 'ஂ', 'ீ', '்', 'ఀ', 'ఄ', 'ಁ', '಼', 'ಿ', 'ೆ', '്', '්', 'ූ', 'ั', 'ັ', '༵', '༷', '༹', '࿆', 'ႂ', 'ႍ', 'ႝ', 'ំ', '៝', 'ᢩ', 'ᤲ', 'ᨛ', 'ᩖ', '᩠', 'ᩢ', '᩿', '᬴', 'ᬼ', 'ᭂ', '᯦', 'ᯭ', '᳭', '᳴', '⃡', '⵿', '꙯', 'ꠂ', '꠆', 'ꠋ', 'ꣿ', '꦳', 'ꦼ', 'ꧥ', 'ꩃ', 'ꩌ', 'ꩼ', 'ꪰ', '꫁', '꫶', 'ꯥ', 'ꯨ', '꯭', 'ﬞ'}, ranges: []rune{'̀', 'ͯ', '҃', '҇', '֑', 'ֽ', 'ׁ', 'ׂ', 'ׄ', 'ׅ', 'ؐ', 'ؚ', 'ً', 'ٟ', 'ۖ', 'ۜ', '۟', 'ۤ', 'ۧ', 'ۨ', '۪', 'ۭ', 'ܰ', '݊', 'ަ', 'ް', '߫', '߳', 'ࠖ', '࠙', 'ࠛ', 'ࠣ', 'ࠥ', 'ࠧ', 'ࠩ', '࠭', '࡙', '࡛', '࣓', '࣡', 'ࣣ', 'ं', 'ु', 'ै', '॑', 'ॗ', 'ॢ', 'ॣ', 'ু', 'ৄ', 'ৢ', 'ৣ', 'ਁ', 'ਂ', 'ੁ', 'ੂ', 'ੇ', 'ੈ', 'ੋ', '੍', 'ੰ', 'ੱ', 'ઁ', 'ં', 'ુ', 'ૅ', 'ે', 'ૈ', 'ૢ', 'ૣ', 'ૺ', '૿', 'ୁ', 'ୄ', 'ୢ', 'ୣ', 'ా', 'ీ', 'ె', 'ై', 'ొ', '్', 'ౕ', 'ౖ', 'ౢ', 'ౣ', 'ೌ', '್', 'ೢ', 'ೣ', 'ഀ', 'ഁ', '഻', '഼', 'ു', 'ൄ', 'ൢ', 'ൣ', 'ි', 'ු', 'ิ', 'ฺ', '็', '๎', 'ິ', 'ູ', 'ົ', 'ຼ', '່', 'ໍ', '༘', '༙', 'ཱ', 'ཾ', 'ྀ', '྄', '྆', '྇', 'ྍ', 'ྗ', 'ྙ', 'ྼ', 'ိ', 'ူ', 'ဲ', '့', '္', '်', 'ွ', 'ှ', 'ၘ', 'ၙ', 'ၞ', 'ၠ', 'ၱ', 'ၴ', 'ႅ', 'ႆ', '፝', '፟', 'ᜒ', '᜔', 'ᜲ', '᜴', 'ᝒ', 'ᝓ', 'ᝲ', 'ᝳ', '឴', '឵', 'ិ', 'ួ', '៉', '៓', '᠋', '᠍', 'ᢅ', 'ᢆ', 'ᤠ', 'ᤢ', 'ᤧ', 'ᤨ', '᤹', '᤻', 'ᨗ', 'ᨘ', 'ᩘ', 'ᩞ', 'ᩥ', 'ᩬ', 'ᩳ', '᩼', '᪰', '᪽', 'ᬀ', 'ᬃ', 'ᬶ', 'ᬺ', '᭫', '᭳', 'ᮀ', 'ᮁ', 'ᮢ', 'ᮥ', 'ᮨ', 'ᮩ', '᮫', 'ᮭ', 'ᯨ', 'ᯩ', 'ᯯ', 'ᯱ', 'ᰬ', 'ᰳ', 'ᰶ', '᰷', '᳐', '᳒', '᳔', '᳠', '᳢', '᳨', '᳸', '᳹', '᷀', '᷹', '᷻', '᷿', '⃐', '⃜', '⃥', '⃰', '⳯', '⳱', 'ⷠ', 'ⷿ', '〪', '〭', '゙', '゚', 'ꙴ', '꙽', 'ꚞ', 'ꚟ', '꛰', '꛱', 'ꠥ', 'ꠦ', '꣄', 'ꣅ', '꣠', '꣱', 'ꤦ', '꤭', 'ꥇ', 'ꥑ', 'ꦀ', 'ꦂ', 'ꦶ', 'ꦹ', 'ꨩ', 'ꨮ', 'ꨱ', 'ꨲ', 'ꨵ', 'ꨶ', 'ꪲ', 'ꪴ', 'ꪷ', 'ꪸ', 'ꪾ', '꪿', 'ꫬ', 'ꫭ', '︀', '️', '︠', '︯'}, @@ -13019,9 +12982,9 @@ var g = &grammar{ }, { name: "Nd", - pos: position{line: 1799, col: 1, offset: 57612}, + pos: position{line: 1794, col: 1, offset: 57501}, expr: &charClassMatcher{ - pos: position{line: 1799, col: 6, offset: 57617}, + pos: position{line: 1794, col: 6, offset: 57506}, val: "[\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]", ranges: []rune{'0', '9', '٠', '٩', '۰', '۹', '߀', '߉', '०', '९', '০', '৯', '੦', '੯', '૦', '૯', '୦', '୯', '௦', '௯', '౦', '౯', '೦', '೯', '൦', '൯', '෦', '෯', '๐', '๙', '໐', '໙', '༠', '༩', '၀', '၉', '႐', '႙', '០', '៩', '᠐', '᠙', '᥆', '᥏', '᧐', '᧙', '᪀', '᪉', '᪐', '᪙', '᭐', '᭙', '᮰', '᮹', '᱀', '᱉', '᱐', '᱙', '꘠', '꘩', '꣐', '꣙', '꤀', '꤉', '꧐', '꧙', '꧰', '꧹', '꩐', '꩙', '꯰', '꯹', '0', '9'}, ignoreCase: false, @@ -13032,9 +12995,9 @@ var g = &grammar{ }, { name: "Nl", - pos: position{line: 1802, col: 1, offset: 58120}, + pos: position{line: 1797, col: 1, offset: 58009}, expr: &charClassMatcher{ - pos: position{line: 1802, col: 6, offset: 58125}, + pos: position{line: 1797, col: 6, offset: 58014}, val: "[\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A\\uA6E6-\\uA6EF]", chars: []rune{'〇'}, ranges: []rune{'ᛮ', 'ᛰ', 'Ⅰ', 'ↂ', 'ↅ', 'ↈ', '〡', '〩', '〸', '〺', 'ꛦ', 'ꛯ'}, @@ -13046,9 +13009,9 @@ var g = &grammar{ }, { name: "Pc", - pos: position{line: 1805, col: 1, offset: 58239}, + pos: position{line: 1800, col: 1, offset: 58128}, expr: &charClassMatcher{ - pos: position{line: 1805, col: 6, offset: 58244}, + pos: position{line: 1800, col: 6, offset: 58133}, val: "[\\u005F\\u203F-\\u2040\\u2054\\uFE33-\\uFE34\\uFE4D-\\uFE4F\\uFF3F]", chars: []rune{'_', '⁔', '_'}, ranges: []rune{'‿', '⁀', '︳', '︴', '﹍', '﹏'}, @@ -13060,9 +13023,9 @@ var g = &grammar{ }, { name: "Zs", - pos: position{line: 1808, col: 1, offset: 58325}, + pos: position{line: 1803, col: 1, offset: 58214}, expr: &charClassMatcher{ - pos: position{line: 1808, col: 6, offset: 58330}, + pos: position{line: 1803, col: 6, offset: 58219}, val: "[\\u0020\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]", chars: []rune{' ', '\u00a0', '\u1680', '\u202f', '\u205f', '\u3000'}, ranges: []rune{'\u2000', '\u200a'}, @@ -13074,9 +13037,9 @@ var g = &grammar{ }, { name: "SourceCharacter", - pos: position{line: 1810, col: 1, offset: 58383}, + pos: position{line: 1805, col: 1, offset: 58272}, expr: &anyMatcher{ - line: 1811, col: 5, offset: 58403, + line: 1806, col: 5, offset: 58292, }, leader: false, leftRecursive: false, @@ -13084,48 +13047,48 @@ var g = &grammar{ { name: "WhiteSpace", displayName: "\"whitespace\"", - pos: position{line: 1813, col: 1, offset: 58406}, + pos: position{line: 1808, col: 1, offset: 58295}, expr: &choiceExpr{ - pos: position{line: 1814, col: 5, offset: 58434}, + pos: position{line: 1809, col: 5, offset: 58323}, alternatives: []any{ &litMatcher{ - pos: position{line: 1814, col: 5, offset: 58434}, + pos: position{line: 1809, col: 5, offset: 58323}, val: "\t", ignoreCase: false, want: "\"\\t\"", }, &litMatcher{ - pos: position{line: 1815, col: 5, offset: 58443}, + pos: position{line: 1810, col: 5, offset: 58332}, val: "\v", ignoreCase: false, want: "\"\\v\"", }, &litMatcher{ - pos: position{line: 1816, col: 5, offset: 58452}, + pos: position{line: 1811, col: 5, offset: 58341}, val: "\f", ignoreCase: false, want: "\"\\f\"", }, &litMatcher{ - pos: position{line: 1817, col: 5, offset: 58461}, + pos: position{line: 1812, col: 5, offset: 58350}, val: " ", ignoreCase: false, want: "\" \"", }, &litMatcher{ - pos: position{line: 1818, col: 5, offset: 58469}, + pos: position{line: 1813, col: 5, offset: 58358}, val: "\u00a0", ignoreCase: false, want: "\"\\u00a0\"", }, &litMatcher{ - pos: position{line: 1819, col: 5, offset: 58482}, + pos: position{line: 1814, col: 5, offset: 58371}, val: "\ufeff", ignoreCase: false, want: "\"\\ufeff\"", }, &ruleRefExpr{ - pos: position{line: 1820, col: 5, offset: 58495}, + pos: position{line: 1815, col: 5, offset: 58384}, name: "Zs", }, }, @@ -13135,9 +13098,9 @@ var g = &grammar{ }, { name: "LineTerminator", - pos: position{line: 1822, col: 1, offset: 58499}, + pos: position{line: 1817, col: 1, offset: 58388}, expr: &charClassMatcher{ - pos: position{line: 1823, col: 5, offset: 58518}, + pos: position{line: 1818, col: 5, offset: 58407}, val: "[\\n\\r\\u2028\\u2029]", chars: []rune{'\n', '\r', '\u2028', '\u2029'}, ignoreCase: false, @@ -13149,9 +13112,9 @@ var g = &grammar{ { name: "Comment", displayName: "\"comment\"", - pos: position{line: 1829, col: 1, offset: 58848}, + pos: position{line: 1824, col: 1, offset: 58737}, expr: &ruleRefExpr{ - pos: position{line: 1832, col: 5, offset: 58919}, + pos: position{line: 1827, col: 5, offset: 58808}, name: "SingleLineComment", }, leader: false, @@ -13159,39 +13122,39 @@ var g = &grammar{ }, { name: "MultiLineComment", - pos: position{line: 1834, col: 1, offset: 58938}, + pos: position{line: 1829, col: 1, offset: 58827}, expr: &seqExpr{ - pos: position{line: 1835, col: 5, offset: 58959}, + pos: position{line: 1830, col: 5, offset: 58848}, exprs: []any{ &litMatcher{ - pos: position{line: 1835, col: 5, offset: 58959}, + pos: position{line: 1830, col: 5, offset: 58848}, val: "/*", ignoreCase: false, want: "\"/*\"", }, &zeroOrMoreExpr{ - pos: position{line: 1835, col: 10, offset: 58964}, + pos: position{line: 1830, col: 10, offset: 58853}, expr: &seqExpr{ - pos: position{line: 1835, col: 11, offset: 58965}, + pos: position{line: 1830, col: 11, offset: 58854}, exprs: []any{ ¬Expr{ - pos: position{line: 1835, col: 11, offset: 58965}, + pos: position{line: 1830, col: 11, offset: 58854}, expr: &litMatcher{ - pos: position{line: 1835, col: 12, offset: 58966}, + pos: position{line: 1830, col: 12, offset: 58855}, val: "*/", ignoreCase: false, want: "\"*/\"", }, }, &ruleRefExpr{ - pos: position{line: 1835, col: 17, offset: 58971}, + pos: position{line: 1830, col: 17, offset: 58860}, name: "SourceCharacter", }, }, }, }, &litMatcher{ - pos: position{line: 1835, col: 35, offset: 58989}, + pos: position{line: 1830, col: 35, offset: 58878}, val: "*/", ignoreCase: false, want: "\"*/\"", @@ -13203,33 +13166,33 @@ var g = &grammar{ }, { name: "SingleLineComment", - pos: position{line: 1837, col: 1, offset: 58995}, + pos: position{line: 1832, col: 1, offset: 58884}, expr: &choiceExpr{ - pos: position{line: 1838, col: 5, offset: 59017}, + pos: position{line: 1833, col: 5, offset: 58906}, alternatives: []any{ &seqExpr{ - pos: position{line: 1838, col: 5, offset: 59017}, + pos: position{line: 1833, col: 5, offset: 58906}, exprs: []any{ &litMatcher{ - pos: position{line: 1838, col: 5, offset: 59017}, + pos: position{line: 1833, col: 5, offset: 58906}, val: "//", ignoreCase: false, want: "\"//\"", }, &zeroOrMoreExpr{ - pos: position{line: 1838, col: 10, offset: 59022}, + pos: position{line: 1833, col: 10, offset: 58911}, expr: &seqExpr{ - pos: position{line: 1838, col: 11, offset: 59023}, + pos: position{line: 1833, col: 11, offset: 58912}, exprs: []any{ ¬Expr{ - pos: position{line: 1838, col: 11, offset: 59023}, + pos: position{line: 1833, col: 11, offset: 58912}, expr: &ruleRefExpr{ - pos: position{line: 1838, col: 12, offset: 59024}, + pos: position{line: 1833, col: 12, offset: 58913}, name: "LineTerminator", }, }, &ruleRefExpr{ - pos: position{line: 1838, col: 27, offset: 59039}, + pos: position{line: 1833, col: 27, offset: 58928}, name: "SourceCharacter", }, }, @@ -13238,28 +13201,28 @@ var g = &grammar{ }, }, &seqExpr{ - pos: position{line: 1839, col: 5, offset: 59061}, + pos: position{line: 1834, col: 5, offset: 58950}, exprs: []any{ &litMatcher{ - pos: position{line: 1839, col: 5, offset: 59061}, + pos: position{line: 1834, col: 5, offset: 58950}, val: "--", ignoreCase: false, want: "\"--\"", }, &zeroOrMoreExpr{ - pos: position{line: 1839, col: 10, offset: 59066}, + pos: position{line: 1834, col: 10, offset: 58955}, expr: &seqExpr{ - pos: position{line: 1839, col: 11, offset: 59067}, + pos: position{line: 1834, col: 11, offset: 58956}, exprs: []any{ ¬Expr{ - pos: position{line: 1839, col: 11, offset: 59067}, + pos: position{line: 1834, col: 11, offset: 58956}, expr: &ruleRefExpr{ - pos: position{line: 1839, col: 12, offset: 59068}, + pos: position{line: 1834, col: 12, offset: 58957}, name: "LineTerminator", }, }, &ruleRefExpr{ - pos: position{line: 1839, col: 27, offset: 59083}, + pos: position{line: 1834, col: 27, offset: 58972}, name: "SourceCharacter", }, }, @@ -13274,19 +13237,19 @@ var g = &grammar{ }, { name: "EOL", - pos: position{line: 1841, col: 1, offset: 59102}, + pos: position{line: 1836, col: 1, offset: 58991}, expr: &seqExpr{ - pos: position{line: 1841, col: 7, offset: 59108}, + pos: position{line: 1836, col: 7, offset: 58997}, exprs: []any{ &zeroOrMoreExpr{ - pos: position{line: 1841, col: 7, offset: 59108}, + pos: position{line: 1836, col: 7, offset: 58997}, expr: &ruleRefExpr{ - pos: position{line: 1841, col: 7, offset: 59108}, + pos: position{line: 1836, col: 7, offset: 58997}, name: "WhiteSpace", }, }, &ruleRefExpr{ - pos: position{line: 1841, col: 19, offset: 59120}, + pos: position{line: 1836, col: 19, offset: 59009}, name: "LineTerminator", }, }, @@ -13296,16 +13259,16 @@ var g = &grammar{ }, { name: "EOT", - pos: position{line: 1843, col: 1, offset: 59136}, + pos: position{line: 1838, col: 1, offset: 59025}, expr: &choiceExpr{ - pos: position{line: 1843, col: 7, offset: 59142}, + pos: position{line: 1838, col: 7, offset: 59031}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1843, col: 7, offset: 59142}, + pos: position{line: 1838, col: 7, offset: 59031}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1843, col: 11, offset: 59146}, + pos: position{line: 1838, col: 11, offset: 59035}, name: "EOF", }, }, @@ -13315,11 +13278,11 @@ var g = &grammar{ }, { name: "EOF", - pos: position{line: 1845, col: 1, offset: 59151}, + pos: position{line: 1840, col: 1, offset: 59040}, expr: ¬Expr{ - pos: position{line: 1845, col: 7, offset: 59157}, + pos: position{line: 1840, col: 7, offset: 59046}, expr: &anyMatcher{ - line: 1845, col: 8, offset: 59158, + line: 1840, col: 8, offset: 59047, }, }, leader: false, @@ -13327,11 +13290,11 @@ var g = &grammar{ }, { name: "EOKW", - pos: position{line: 1847, col: 1, offset: 59161}, + pos: position{line: 1842, col: 1, offset: 59050}, expr: ¬Expr{ - pos: position{line: 1847, col: 8, offset: 59168}, + pos: position{line: 1842, col: 8, offset: 59057}, expr: &ruleRefExpr{ - pos: position{line: 1847, col: 9, offset: 59169}, + pos: position{line: 1842, col: 9, offset: 59058}, name: "KeyWordChars", }, }, @@ -13340,15 +13303,15 @@ var g = &grammar{ }, { name: "SQLPipe", - pos: position{line: 1851, col: 1, offset: 59205}, + pos: position{line: 1846, col: 1, offset: 59094}, expr: &actionExpr{ - pos: position{line: 1852, col: 5, offset: 59218}, + pos: position{line: 1847, col: 5, offset: 59107}, run: (*parser).callonSQLPipe1, expr: &labeledExpr{ - pos: position{line: 1852, col: 5, offset: 59218}, + pos: position{line: 1847, col: 5, offset: 59107}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1852, col: 7, offset: 59220}, + pos: position{line: 1847, col: 7, offset: 59109}, name: "Seq", }, }, @@ -13358,27 +13321,27 @@ var g = &grammar{ }, { name: "SelectOp", - pos: position{line: 1860, col: 1, offset: 59366}, + pos: position{line: 1855, col: 1, offset: 59255}, expr: &actionExpr{ - pos: position{line: 1860, col: 12, offset: 59377}, + pos: position{line: 1855, col: 12, offset: 59266}, run: (*parser).callonSelectOp1, expr: &seqExpr{ - pos: position{line: 1860, col: 12, offset: 59377}, + pos: position{line: 1855, col: 12, offset: 59266}, exprs: []any{ ¬Expr{ - pos: position{line: 1860, col: 12, offset: 59377}, + pos: position{line: 1855, col: 12, offset: 59266}, expr: &litMatcher{ - pos: position{line: 1860, col: 13, offset: 59378}, + pos: position{line: 1855, col: 13, offset: 59267}, val: "(", ignoreCase: false, want: "\"(\"", }, }, &labeledExpr{ - pos: position{line: 1860, col: 17, offset: 59382}, + pos: position{line: 1855, col: 17, offset: 59271}, label: "op", expr: &ruleRefExpr{ - pos: position{line: 1860, col: 20, offset: 59385}, + pos: position{line: 1855, col: 20, offset: 59274}, name: "SelectExpr", }, }, @@ -13390,65 +13353,65 @@ var g = &grammar{ }, { name: "SelectExpr", - pos: position{line: 1862, col: 1, offset: 59415}, + pos: position{line: 1857, col: 1, offset: 59304}, expr: &actionExpr{ - pos: position{line: 1863, col: 5, offset: 59431}, + pos: position{line: 1858, col: 5, offset: 59320}, run: (*parser).callonSelectExpr1, expr: &seqExpr{ - pos: position{line: 1863, col: 5, offset: 59431}, + pos: position{line: 1858, col: 5, offset: 59320}, exprs: []any{ &labeledExpr{ - pos: position{line: 1863, col: 5, offset: 59431}, + pos: position{line: 1858, col: 5, offset: 59320}, label: "with", expr: &ruleRefExpr{ - pos: position{line: 1863, col: 10, offset: 59436}, + pos: position{line: 1858, col: 10, offset: 59325}, name: "OptWithClause", }, }, &labeledExpr{ - pos: position{line: 1864, col: 5, offset: 59454}, + pos: position{line: 1859, col: 5, offset: 59343}, label: "body", expr: &choiceExpr{ - pos: position{line: 1865, col: 9, offset: 59469}, + pos: position{line: 1860, col: 9, offset: 59358}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1865, col: 9, offset: 59469}, + pos: position{line: 1860, col: 9, offset: 59358}, name: "SetOperation", }, &ruleRefExpr{ - pos: position{line: 1866, col: 9, offset: 59490}, + pos: position{line: 1861, col: 9, offset: 59379}, name: "Select", }, &actionExpr{ - pos: position{line: 1867, col: 9, offset: 59505}, + pos: position{line: 1862, col: 9, offset: 59394}, run: (*parser).callonSelectExpr9, expr: &seqExpr{ - pos: position{line: 1867, col: 9, offset: 59505}, + pos: position{line: 1862, col: 9, offset: 59394}, exprs: []any{ &litMatcher{ - pos: position{line: 1867, col: 9, offset: 59505}, + pos: position{line: 1862, col: 9, offset: 59394}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1867, col: 13, offset: 59509}, + pos: position{line: 1862, col: 13, offset: 59398}, name: "__", }, &labeledExpr{ - pos: position{line: 1867, col: 16, offset: 59512}, + pos: position{line: 1862, col: 16, offset: 59401}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1867, col: 18, offset: 59514}, + pos: position{line: 1862, col: 18, offset: 59403}, name: "SQLPipe", }, }, &ruleRefExpr{ - pos: position{line: 1867, col: 26, offset: 59522}, + pos: position{line: 1862, col: 26, offset: 59411}, name: "__", }, &litMatcher{ - pos: position{line: 1867, col: 28, offset: 59524}, + pos: position{line: 1862, col: 28, offset: 59413}, val: ")", ignoreCase: false, want: "\")\"", @@ -13460,97 +13423,97 @@ var g = &grammar{ }, }, &labeledExpr{ - pos: position{line: 1869, col: 5, offset: 59561}, + pos: position{line: 1864, col: 5, offset: 59450}, label: "orderby", expr: &ruleRefExpr{ - pos: position{line: 1869, col: 13, offset: 59569}, + pos: position{line: 1864, col: 13, offset: 59458}, name: "OptOrderByClause", }, }, &labeledExpr{ - pos: position{line: 1870, col: 5, offset: 59590}, + pos: position{line: 1865, col: 5, offset: 59479}, label: "limit", expr: &ruleRefExpr{ - pos: position{line: 1870, col: 11, offset: 59596}, + pos: position{line: 1865, col: 11, offset: 59485}, name: "OptLimitClause", }, }, }, }, }, - leader: false, + leader: true, leftRecursive: true, }, { name: "Select", - pos: position{line: 1890, col: 1, offset: 59982}, + pos: position{line: 1885, col: 1, offset: 59871}, expr: &actionExpr{ - pos: position{line: 1891, col: 5, offset: 59994}, + pos: position{line: 1886, col: 5, offset: 59883}, run: (*parser).callonSelect1, expr: &seqExpr{ - pos: position{line: 1891, col: 5, offset: 59994}, + pos: position{line: 1886, col: 5, offset: 59883}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1891, col: 5, offset: 59994}, + pos: position{line: 1886, col: 5, offset: 59883}, name: "SELECT", }, &labeledExpr{ - pos: position{line: 1892, col: 5, offset: 60006}, + pos: position{line: 1887, col: 5, offset: 59895}, label: "distinct", expr: &ruleRefExpr{ - pos: position{line: 1892, col: 14, offset: 60015}, + pos: position{line: 1887, col: 14, offset: 59904}, name: "OptDistinct", }, }, &labeledExpr{ - pos: position{line: 1893, col: 5, offset: 60031}, + pos: position{line: 1888, col: 5, offset: 59920}, label: "value", expr: &ruleRefExpr{ - pos: position{line: 1893, col: 11, offset: 60037}, + pos: position{line: 1888, col: 11, offset: 59926}, name: "OptSelectValue", }, }, &ruleRefExpr{ - pos: position{line: 1896, col: 5, offset: 60177}, + pos: position{line: 1891, col: 5, offset: 60066}, name: "_", }, &labeledExpr{ - pos: position{line: 1896, col: 7, offset: 60179}, + pos: position{line: 1891, col: 7, offset: 60068}, label: "selection", expr: &ruleRefExpr{ - pos: position{line: 1896, col: 17, offset: 60189}, + pos: position{line: 1891, col: 17, offset: 60078}, name: "Selection", }, }, &labeledExpr{ - pos: position{line: 1897, col: 5, offset: 60203}, + pos: position{line: 1892, col: 5, offset: 60092}, label: "from", expr: &ruleRefExpr{ - pos: position{line: 1897, col: 10, offset: 60208}, + pos: position{line: 1892, col: 10, offset: 60097}, name: "OptFromClause", }, }, &labeledExpr{ - pos: position{line: 1898, col: 5, offset: 60226}, + pos: position{line: 1893, col: 5, offset: 60115}, label: "where", expr: &ruleRefExpr{ - pos: position{line: 1898, col: 11, offset: 60232}, + pos: position{line: 1893, col: 11, offset: 60121}, name: "OptWhereClause", }, }, &labeledExpr{ - pos: position{line: 1899, col: 5, offset: 60251}, + pos: position{line: 1894, col: 5, offset: 60140}, label: "group", expr: &ruleRefExpr{ - pos: position{line: 1899, col: 11, offset: 60257}, + pos: position{line: 1894, col: 11, offset: 60146}, name: "OptGroupClause", }, }, &labeledExpr{ - pos: position{line: 1900, col: 5, offset: 60276}, + pos: position{line: 1895, col: 5, offset: 60165}, label: "having", expr: &ruleRefExpr{ - pos: position{line: 1900, col: 12, offset: 60283}, + pos: position{line: 1895, col: 12, offset: 60172}, name: "OptHavingClause", }, }, @@ -13562,49 +13525,49 @@ var g = &grammar{ }, { name: "OptDistinct", - pos: position{line: 1926, col: 1, offset: 60889}, + pos: position{line: 1921, col: 1, offset: 60778}, expr: &choiceExpr{ - pos: position{line: 1927, col: 5, offset: 60905}, + pos: position{line: 1922, col: 5, offset: 60794}, alternatives: []any{ &actionExpr{ - pos: position{line: 1927, col: 5, offset: 60905}, + pos: position{line: 1922, col: 5, offset: 60794}, run: (*parser).callonOptDistinct2, expr: &seqExpr{ - pos: position{line: 1927, col: 5, offset: 60905}, + pos: position{line: 1922, col: 5, offset: 60794}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1927, col: 5, offset: 60905}, + pos: position{line: 1922, col: 5, offset: 60794}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1927, col: 7, offset: 60907}, + pos: position{line: 1922, col: 7, offset: 60796}, name: "ALL", }, }, }, }, &actionExpr{ - pos: position{line: 1928, col: 5, offset: 60944}, + pos: position{line: 1923, col: 5, offset: 60833}, run: (*parser).callonOptDistinct6, expr: &seqExpr{ - pos: position{line: 1928, col: 5, offset: 60944}, + pos: position{line: 1923, col: 5, offset: 60833}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1928, col: 5, offset: 60944}, + pos: position{line: 1923, col: 5, offset: 60833}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1928, col: 7, offset: 60946}, + pos: position{line: 1923, col: 7, offset: 60835}, name: "DISTINCT", }, }, }, }, &actionExpr{ - pos: position{line: 1929, col: 5, offset: 60982}, + pos: position{line: 1924, col: 5, offset: 60871}, run: (*parser).callonOptDistinct10, expr: &litMatcher{ - pos: position{line: 1929, col: 5, offset: 60982}, + pos: position{line: 1924, col: 5, offset: 60871}, val: "", ignoreCase: false, want: "\"\"", @@ -13617,57 +13580,57 @@ var g = &grammar{ }, { name: "OptSelectValue", - pos: position{line: 1931, col: 1, offset: 61021}, + pos: position{line: 1926, col: 1, offset: 60910}, expr: &choiceExpr{ - pos: position{line: 1932, col: 5, offset: 61040}, + pos: position{line: 1927, col: 5, offset: 60929}, alternatives: []any{ &actionExpr{ - pos: position{line: 1932, col: 5, offset: 61040}, + pos: position{line: 1927, col: 5, offset: 60929}, run: (*parser).callonOptSelectValue2, expr: &seqExpr{ - pos: position{line: 1932, col: 5, offset: 61040}, + pos: position{line: 1927, col: 5, offset: 60929}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1932, col: 5, offset: 61040}, + pos: position{line: 1927, col: 5, offset: 60929}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1932, col: 7, offset: 61042}, + pos: position{line: 1927, col: 7, offset: 60931}, name: "AS", }, &ruleRefExpr{ - pos: position{line: 1932, col: 10, offset: 61045}, + pos: position{line: 1927, col: 10, offset: 60934}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1932, col: 12, offset: 61047}, + pos: position{line: 1927, col: 12, offset: 60936}, name: "VALUE", }, }, }, }, &actionExpr{ - pos: position{line: 1933, col: 5, offset: 61079}, + pos: position{line: 1928, col: 5, offset: 60968}, run: (*parser).callonOptSelectValue8, expr: &seqExpr{ - pos: position{line: 1933, col: 5, offset: 61079}, + pos: position{line: 1928, col: 5, offset: 60968}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1933, col: 5, offset: 61079}, + pos: position{line: 1928, col: 5, offset: 60968}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1933, col: 7, offset: 61081}, + pos: position{line: 1928, col: 7, offset: 60970}, name: "VALUE", }, }, }, }, &actionExpr{ - pos: position{line: 1934, col: 5, offset: 61152}, + pos: position{line: 1929, col: 5, offset: 61041}, run: (*parser).callonOptSelectValue12, expr: &litMatcher{ - pos: position{line: 1934, col: 5, offset: 61152}, + pos: position{line: 1929, col: 5, offset: 61041}, val: "", ignoreCase: false, want: "\"\"", @@ -13680,19 +13643,19 @@ var g = &grammar{ }, { name: "OptWithClause", - pos: position{line: 1936, col: 1, offset: 61195}, + pos: position{line: 1931, col: 1, offset: 61084}, expr: &choiceExpr{ - pos: position{line: 1937, col: 5, offset: 61214}, + pos: position{line: 1932, col: 5, offset: 61103}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 1937, col: 5, offset: 61214}, + pos: position{line: 1932, col: 5, offset: 61103}, name: "WithClause", }, &actionExpr{ - pos: position{line: 1938, col: 5, offset: 61230}, + pos: position{line: 1933, col: 5, offset: 61119}, run: (*parser).callonOptWithClause3, expr: &litMatcher{ - pos: position{line: 1938, col: 5, offset: 61230}, + pos: position{line: 1933, col: 5, offset: 61119}, val: "", ignoreCase: false, want: "\"\"", @@ -13705,38 +13668,38 @@ var g = &grammar{ }, { name: "WithClause", - pos: position{line: 1940, col: 1, offset: 61263}, + pos: position{line: 1935, col: 1, offset: 61152}, expr: &actionExpr{ - pos: position{line: 1941, col: 5, offset: 61279}, + pos: position{line: 1936, col: 5, offset: 61168}, run: (*parser).callonWithClause1, expr: &seqExpr{ - pos: position{line: 1941, col: 5, offset: 61279}, + pos: position{line: 1936, col: 5, offset: 61168}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1941, col: 5, offset: 61279}, + pos: position{line: 1936, col: 5, offset: 61168}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1941, col: 7, offset: 61281}, + pos: position{line: 1936, col: 7, offset: 61170}, name: "WITH", }, &labeledExpr{ - pos: position{line: 1941, col: 12, offset: 61286}, + pos: position{line: 1936, col: 12, offset: 61175}, label: "r", expr: &ruleRefExpr{ - pos: position{line: 1941, col: 14, offset: 61288}, + pos: position{line: 1936, col: 14, offset: 61177}, name: "OptRecursive", }, }, &ruleRefExpr{ - pos: position{line: 1941, col: 27, offset: 61301}, + pos: position{line: 1936, col: 27, offset: 61190}, name: "_", }, &labeledExpr{ - pos: position{line: 1941, col: 29, offset: 61303}, + pos: position{line: 1936, col: 29, offset: 61192}, label: "ctes", expr: &ruleRefExpr{ - pos: position{line: 1941, col: 34, offset: 61308}, + pos: position{line: 1936, col: 34, offset: 61197}, name: "CteList", }, }, @@ -13748,32 +13711,32 @@ var g = &grammar{ }, { name: "OptRecursive", - pos: position{line: 1950, col: 1, offset: 61493}, + pos: position{line: 1945, col: 1, offset: 61382}, expr: &choiceExpr{ - pos: position{line: 1951, col: 5, offset: 61511}, + pos: position{line: 1946, col: 5, offset: 61400}, alternatives: []any{ &actionExpr{ - pos: position{line: 1951, col: 5, offset: 61511}, + pos: position{line: 1946, col: 5, offset: 61400}, run: (*parser).callonOptRecursive2, expr: &seqExpr{ - pos: position{line: 1951, col: 5, offset: 61511}, + pos: position{line: 1946, col: 5, offset: 61400}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1951, col: 5, offset: 61511}, + pos: position{line: 1946, col: 5, offset: 61400}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1951, col: 7, offset: 61513}, + pos: position{line: 1946, col: 7, offset: 61402}, name: "RECURSIVE", }, }, }, }, &actionExpr{ - pos: position{line: 1952, col: 5, offset: 61549}, + pos: position{line: 1947, col: 5, offset: 61438}, run: (*parser).callonOptRecursive6, expr: &litMatcher{ - pos: position{line: 1952, col: 5, offset: 61549}, + pos: position{line: 1947, col: 5, offset: 61438}, val: "", ignoreCase: false, want: "\"\"", @@ -13786,51 +13749,51 @@ var g = &grammar{ }, { name: "CteList", - pos: position{line: 1954, col: 1, offset: 61588}, + pos: position{line: 1949, col: 1, offset: 61477}, expr: &actionExpr{ - pos: position{line: 1954, col: 11, offset: 61598}, + pos: position{line: 1949, col: 11, offset: 61487}, run: (*parser).callonCteList1, expr: &seqExpr{ - pos: position{line: 1954, col: 11, offset: 61598}, + pos: position{line: 1949, col: 11, offset: 61487}, exprs: []any{ &labeledExpr{ - pos: position{line: 1954, col: 11, offset: 61598}, + pos: position{line: 1949, col: 11, offset: 61487}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1954, col: 17, offset: 61604}, + pos: position{line: 1949, col: 17, offset: 61493}, name: "Cte", }, }, &labeledExpr{ - pos: position{line: 1954, col: 21, offset: 61608}, + pos: position{line: 1949, col: 21, offset: 61497}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 1954, col: 26, offset: 61613}, + pos: position{line: 1949, col: 26, offset: 61502}, expr: &actionExpr{ - pos: position{line: 1954, col: 28, offset: 61615}, + pos: position{line: 1949, col: 28, offset: 61504}, run: (*parser).callonCteList7, expr: &seqExpr{ - pos: position{line: 1954, col: 28, offset: 61615}, + pos: position{line: 1949, col: 28, offset: 61504}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1954, col: 28, offset: 61615}, + pos: position{line: 1949, col: 28, offset: 61504}, name: "__", }, &litMatcher{ - pos: position{line: 1954, col: 31, offset: 61618}, + pos: position{line: 1949, col: 31, offset: 61507}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1954, col: 35, offset: 61622}, + pos: position{line: 1949, col: 35, offset: 61511}, name: "__", }, &labeledExpr{ - pos: position{line: 1954, col: 38, offset: 61625}, + pos: position{line: 1949, col: 38, offset: 61514}, label: "cte", expr: &ruleRefExpr{ - pos: position{line: 1954, col: 42, offset: 61629}, + pos: position{line: 1949, col: 42, offset: 61518}, name: "Cte", }, }, @@ -13847,65 +13810,65 @@ var g = &grammar{ }, { name: "Cte", - pos: position{line: 1958, col: 1, offset: 61698}, + pos: position{line: 1953, col: 1, offset: 61587}, expr: &actionExpr{ - pos: position{line: 1959, col: 5, offset: 61706}, + pos: position{line: 1954, col: 5, offset: 61595}, run: (*parser).callonCte1, expr: &seqExpr{ - pos: position{line: 1959, col: 5, offset: 61706}, + pos: position{line: 1954, col: 5, offset: 61595}, exprs: []any{ &labeledExpr{ - pos: position{line: 1959, col: 5, offset: 61706}, + pos: position{line: 1954, col: 5, offset: 61595}, label: "name", expr: &ruleRefExpr{ - pos: position{line: 1959, col: 10, offset: 61711}, + pos: position{line: 1954, col: 10, offset: 61600}, name: "AliasName", }, }, &ruleRefExpr{ - pos: position{line: 1959, col: 20, offset: 61721}, + pos: position{line: 1954, col: 20, offset: 61610}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1959, col: 22, offset: 61723}, + pos: position{line: 1954, col: 22, offset: 61612}, name: "AS", }, &labeledExpr{ - pos: position{line: 1959, col: 25, offset: 61726}, + pos: position{line: 1954, col: 25, offset: 61615}, label: "m", expr: &ruleRefExpr{ - pos: position{line: 1959, col: 27, offset: 61728}, + pos: position{line: 1954, col: 27, offset: 61617}, name: "OptMaterialized", }, }, &ruleRefExpr{ - pos: position{line: 1959, col: 43, offset: 61744}, + pos: position{line: 1954, col: 43, offset: 61633}, name: "__", }, &litMatcher{ - pos: position{line: 1959, col: 46, offset: 61747}, + pos: position{line: 1954, col: 46, offset: 61636}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 1959, col: 50, offset: 61751}, + pos: position{line: 1954, col: 50, offset: 61640}, name: "__", }, &labeledExpr{ - pos: position{line: 1959, col: 53, offset: 61754}, + pos: position{line: 1954, col: 53, offset: 61643}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 1959, col: 55, offset: 61756}, + pos: position{line: 1954, col: 55, offset: 61645}, name: "SQLPipe", }, }, &ruleRefExpr{ - pos: position{line: 1959, col: 63, offset: 61764}, + pos: position{line: 1954, col: 63, offset: 61653}, name: "__", }, &litMatcher{ - pos: position{line: 1959, col: 66, offset: 61767}, + pos: position{line: 1954, col: 66, offset: 61656}, val: ")", ignoreCase: false, want: "\")\"", @@ -13918,9 +13881,9 @@ var g = &grammar{ }, { name: "AliasName", - pos: position{line: 1968, col: 1, offset: 61942}, + pos: position{line: 1963, col: 1, offset: 61831}, expr: &ruleRefExpr{ - pos: position{line: 1968, col: 13, offset: 61954}, + pos: position{line: 1963, col: 13, offset: 61843}, name: "Identifier", }, leader: false, @@ -13928,65 +13891,65 @@ var g = &grammar{ }, { name: "OptMaterialized", - pos: position{line: 1970, col: 1, offset: 61966}, + pos: position{line: 1965, col: 1, offset: 61855}, expr: &choiceExpr{ - pos: position{line: 1971, col: 5, offset: 61987}, + pos: position{line: 1966, col: 5, offset: 61876}, alternatives: []any{ &actionExpr{ - pos: position{line: 1971, col: 5, offset: 61987}, + pos: position{line: 1966, col: 5, offset: 61876}, run: (*parser).callonOptMaterialized2, expr: &seqExpr{ - pos: position{line: 1971, col: 5, offset: 61987}, + pos: position{line: 1966, col: 5, offset: 61876}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1971, col: 5, offset: 61987}, + pos: position{line: 1966, col: 5, offset: 61876}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1971, col: 7, offset: 61989}, + pos: position{line: 1966, col: 7, offset: 61878}, name: "MATERIALIZED", }, &ruleRefExpr{ - pos: position{line: 1971, col: 20, offset: 62002}, + pos: position{line: 1966, col: 20, offset: 61891}, name: "_", }, }, }, }, &actionExpr{ - pos: position{line: 1972, col: 5, offset: 62041}, + pos: position{line: 1967, col: 5, offset: 61930}, run: (*parser).callonOptMaterialized7, expr: &seqExpr{ - pos: position{line: 1972, col: 5, offset: 62041}, + pos: position{line: 1967, col: 5, offset: 61930}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1972, col: 5, offset: 62041}, + pos: position{line: 1967, col: 5, offset: 61930}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1972, col: 7, offset: 62043}, + pos: position{line: 1967, col: 7, offset: 61932}, name: "NOT", }, &ruleRefExpr{ - pos: position{line: 1972, col: 11, offset: 62047}, + pos: position{line: 1967, col: 11, offset: 61936}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1972, col: 13, offset: 62049}, + pos: position{line: 1967, col: 13, offset: 61938}, name: "MATERIALIZED", }, &ruleRefExpr{ - pos: position{line: 1972, col: 26, offset: 62062}, + pos: position{line: 1967, col: 26, offset: 61951}, name: "_", }, }, }, }, &actionExpr{ - pos: position{line: 1973, col: 5, offset: 62093}, + pos: position{line: 1968, col: 5, offset: 61982}, run: (*parser).callonOptMaterialized14, expr: &litMatcher{ - pos: position{line: 1973, col: 5, offset: 62093}, + pos: position{line: 1968, col: 5, offset: 61982}, val: "", ignoreCase: false, want: "\"\"", @@ -13999,25 +13962,25 @@ var g = &grammar{ }, { name: "OptAllClause", - pos: position{line: 1975, col: 1, offset: 62148}, + pos: position{line: 1970, col: 1, offset: 62037}, expr: &choiceExpr{ - pos: position{line: 1976, col: 5, offset: 62165}, + pos: position{line: 1971, col: 5, offset: 62054}, alternatives: []any{ &seqExpr{ - pos: position{line: 1976, col: 5, offset: 62165}, + pos: position{line: 1971, col: 5, offset: 62054}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1976, col: 5, offset: 62165}, + pos: position{line: 1971, col: 5, offset: 62054}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1976, col: 7, offset: 62167}, + pos: position{line: 1971, col: 7, offset: 62056}, name: "ALL", }, }, }, &litMatcher{ - pos: position{line: 1977, col: 5, offset: 62176}, + pos: position{line: 1972, col: 5, offset: 62065}, val: "", ignoreCase: false, want: "\"\"", @@ -14029,25 +13992,25 @@ var g = &grammar{ }, { name: "OptFromClause", - pos: position{line: 1979, col: 1, offset: 62180}, + pos: position{line: 1974, col: 1, offset: 62069}, expr: &choiceExpr{ - pos: position{line: 1980, col: 5, offset: 62198}, + pos: position{line: 1975, col: 5, offset: 62087}, alternatives: []any{ &actionExpr{ - pos: position{line: 1980, col: 5, offset: 62198}, + pos: position{line: 1975, col: 5, offset: 62087}, run: (*parser).callonOptFromClause2, expr: &seqExpr{ - pos: position{line: 1980, col: 5, offset: 62198}, + pos: position{line: 1975, col: 5, offset: 62087}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1980, col: 5, offset: 62198}, + pos: position{line: 1975, col: 5, offset: 62087}, name: "_", }, &labeledExpr{ - pos: position{line: 1980, col: 7, offset: 62200}, + pos: position{line: 1975, col: 7, offset: 62089}, label: "from", expr: &ruleRefExpr{ - pos: position{line: 1980, col: 12, offset: 62205}, + pos: position{line: 1975, col: 12, offset: 62094}, name: "FromOp", }, }, @@ -14055,10 +14018,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1983, col: 5, offset: 62247}, + pos: position{line: 1978, col: 5, offset: 62136}, run: (*parser).callonOptFromClause7, expr: &litMatcher{ - pos: position{line: 1983, col: 5, offset: 62247}, + pos: position{line: 1978, col: 5, offset: 62136}, val: "", ignoreCase: false, want: "\"\"", @@ -14071,27 +14034,27 @@ var g = &grammar{ }, { name: "OptWhereClause", - pos: position{line: 1985, col: 1, offset: 62288}, + pos: position{line: 1980, col: 1, offset: 62177}, expr: &choiceExpr{ - pos: position{line: 1986, col: 5, offset: 62307}, + pos: position{line: 1981, col: 5, offset: 62196}, alternatives: []any{ &actionExpr{ - pos: position{line: 1986, col: 5, offset: 62307}, + pos: position{line: 1981, col: 5, offset: 62196}, run: (*parser).callonOptWhereClause2, expr: &labeledExpr{ - pos: position{line: 1986, col: 5, offset: 62307}, + pos: position{line: 1981, col: 5, offset: 62196}, label: "where", expr: &ruleRefExpr{ - pos: position{line: 1986, col: 11, offset: 62313}, + pos: position{line: 1981, col: 11, offset: 62202}, name: "WhereClause", }, }, }, &actionExpr{ - pos: position{line: 1987, col: 5, offset: 62355}, + pos: position{line: 1982, col: 5, offset: 62244}, run: (*parser).callonOptWhereClause5, expr: &litMatcher{ - pos: position{line: 1987, col: 5, offset: 62355}, + pos: position{line: 1982, col: 5, offset: 62244}, val: "", ignoreCase: false, want: "\"\"", @@ -14104,25 +14067,25 @@ var g = &grammar{ }, { name: "OptGroupClause", - pos: position{line: 1989, col: 1, offset: 62400}, + pos: position{line: 1984, col: 1, offset: 62289}, expr: &choiceExpr{ - pos: position{line: 1990, col: 5, offset: 62419}, + pos: position{line: 1985, col: 5, offset: 62308}, alternatives: []any{ &actionExpr{ - pos: position{line: 1990, col: 5, offset: 62419}, + pos: position{line: 1985, col: 5, offset: 62308}, run: (*parser).callonOptGroupClause2, expr: &seqExpr{ - pos: position{line: 1990, col: 5, offset: 62419}, + pos: position{line: 1985, col: 5, offset: 62308}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1990, col: 5, offset: 62419}, + pos: position{line: 1985, col: 5, offset: 62308}, name: "_", }, &labeledExpr{ - pos: position{line: 1990, col: 7, offset: 62421}, + pos: position{line: 1985, col: 7, offset: 62310}, label: "group", expr: &ruleRefExpr{ - pos: position{line: 1990, col: 13, offset: 62427}, + pos: position{line: 1985, col: 13, offset: 62316}, name: "GroupClause", }, }, @@ -14130,10 +14093,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 1991, col: 5, offset: 62465}, + pos: position{line: 1986, col: 5, offset: 62354}, run: (*parser).callonOptGroupClause7, expr: &litMatcher{ - pos: position{line: 1991, col: 5, offset: 62465}, + pos: position{line: 1986, col: 5, offset: 62354}, val: "", ignoreCase: false, want: "\"\"", @@ -14146,34 +14109,34 @@ var g = &grammar{ }, { name: "GroupClause", - pos: position{line: 1993, col: 1, offset: 62506}, + pos: position{line: 1988, col: 1, offset: 62395}, expr: &actionExpr{ - pos: position{line: 1994, col: 5, offset: 62522}, + pos: position{line: 1989, col: 5, offset: 62411}, run: (*parser).callonGroupClause1, expr: &seqExpr{ - pos: position{line: 1994, col: 5, offset: 62522}, + pos: position{line: 1989, col: 5, offset: 62411}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1994, col: 5, offset: 62522}, + pos: position{line: 1989, col: 5, offset: 62411}, name: "GROUP", }, &ruleRefExpr{ - pos: position{line: 1994, col: 11, offset: 62528}, + pos: position{line: 1989, col: 11, offset: 62417}, name: "_", }, &ruleRefExpr{ - pos: position{line: 1994, col: 13, offset: 62530}, + pos: position{line: 1989, col: 13, offset: 62419}, name: "BY", }, &ruleRefExpr{ - pos: position{line: 1994, col: 16, offset: 62533}, + pos: position{line: 1989, col: 16, offset: 62422}, name: "_", }, &labeledExpr{ - pos: position{line: 1994, col: 18, offset: 62535}, + pos: position{line: 1989, col: 18, offset: 62424}, label: "list", expr: &ruleRefExpr{ - pos: position{line: 1994, col: 23, offset: 62540}, + pos: position{line: 1989, col: 23, offset: 62429}, name: "GroupByList", }, }, @@ -14185,51 +14148,51 @@ var g = &grammar{ }, { name: "GroupByList", - pos: position{line: 1996, col: 1, offset: 62574}, + pos: position{line: 1991, col: 1, offset: 62463}, expr: &actionExpr{ - pos: position{line: 1997, col: 5, offset: 62591}, + pos: position{line: 1992, col: 5, offset: 62480}, run: (*parser).callonGroupByList1, expr: &seqExpr{ - pos: position{line: 1997, col: 5, offset: 62591}, + pos: position{line: 1992, col: 5, offset: 62480}, exprs: []any{ &labeledExpr{ - pos: position{line: 1997, col: 5, offset: 62591}, + pos: position{line: 1992, col: 5, offset: 62480}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 1997, col: 11, offset: 62597}, + pos: position{line: 1992, col: 11, offset: 62486}, name: "GroupByItem", }, }, &labeledExpr{ - pos: position{line: 1997, col: 23, offset: 62609}, + pos: position{line: 1992, col: 23, offset: 62498}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 1997, col: 28, offset: 62614}, + pos: position{line: 1992, col: 28, offset: 62503}, expr: &actionExpr{ - pos: position{line: 1997, col: 30, offset: 62616}, + pos: position{line: 1992, col: 30, offset: 62505}, run: (*parser).callonGroupByList7, expr: &seqExpr{ - pos: position{line: 1997, col: 30, offset: 62616}, + pos: position{line: 1992, col: 30, offset: 62505}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 1997, col: 30, offset: 62616}, + pos: position{line: 1992, col: 30, offset: 62505}, name: "__", }, &litMatcher{ - pos: position{line: 1997, col: 33, offset: 62619}, + pos: position{line: 1992, col: 33, offset: 62508}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 1997, col: 37, offset: 62623}, + pos: position{line: 1992, col: 37, offset: 62512}, name: "__", }, &labeledExpr{ - pos: position{line: 1997, col: 40, offset: 62626}, + pos: position{line: 1992, col: 40, offset: 62515}, label: "g", expr: &ruleRefExpr{ - pos: position{line: 1997, col: 42, offset: 62628}, + pos: position{line: 1992, col: 42, offset: 62517}, name: "GroupByItem", }, }, @@ -14246,9 +14209,9 @@ var g = &grammar{ }, { name: "GroupByItem", - pos: position{line: 2001, col: 1, offset: 62709}, + pos: position{line: 1996, col: 1, offset: 62598}, expr: &ruleRefExpr{ - pos: position{line: 2001, col: 15, offset: 62723}, + pos: position{line: 1996, col: 15, offset: 62612}, name: "Expr", }, leader: false, @@ -14256,25 +14219,25 @@ var g = &grammar{ }, { name: "OptHavingClause", - pos: position{line: 2003, col: 1, offset: 62729}, + pos: position{line: 1998, col: 1, offset: 62618}, expr: &choiceExpr{ - pos: position{line: 2004, col: 5, offset: 62749}, + pos: position{line: 1999, col: 5, offset: 62638}, alternatives: []any{ &actionExpr{ - pos: position{line: 2004, col: 5, offset: 62749}, + pos: position{line: 1999, col: 5, offset: 62638}, run: (*parser).callonOptHavingClause2, expr: &seqExpr{ - pos: position{line: 2004, col: 5, offset: 62749}, + pos: position{line: 1999, col: 5, offset: 62638}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2004, col: 5, offset: 62749}, + pos: position{line: 1999, col: 5, offset: 62638}, name: "_", }, &labeledExpr{ - pos: position{line: 2004, col: 7, offset: 62751}, + pos: position{line: 1999, col: 7, offset: 62640}, label: "h", expr: &ruleRefExpr{ - pos: position{line: 2004, col: 9, offset: 62753}, + pos: position{line: 1999, col: 9, offset: 62642}, name: "HavingClause", }, }, @@ -14282,10 +14245,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 2005, col: 5, offset: 62788}, + pos: position{line: 2000, col: 5, offset: 62677}, run: (*parser).callonOptHavingClause7, expr: &litMatcher{ - pos: position{line: 2005, col: 5, offset: 62788}, + pos: position{line: 2000, col: 5, offset: 62677}, val: "", ignoreCase: false, want: "\"\"", @@ -14298,26 +14261,26 @@ var g = &grammar{ }, { name: "HavingClause", - pos: position{line: 2007, col: 1, offset: 62812}, + pos: position{line: 2002, col: 1, offset: 62701}, expr: &actionExpr{ - pos: position{line: 2008, col: 5, offset: 62829}, + pos: position{line: 2003, col: 5, offset: 62718}, run: (*parser).callonHavingClause1, expr: &seqExpr{ - pos: position{line: 2008, col: 5, offset: 62829}, + pos: position{line: 2003, col: 5, offset: 62718}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2008, col: 5, offset: 62829}, + pos: position{line: 2003, col: 5, offset: 62718}, name: "HAVING", }, &ruleRefExpr{ - pos: position{line: 2008, col: 12, offset: 62836}, + pos: position{line: 2003, col: 12, offset: 62725}, name: "_", }, &labeledExpr{ - pos: position{line: 2008, col: 14, offset: 62838}, + pos: position{line: 2003, col: 14, offset: 62727}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 2008, col: 16, offset: 62840}, + pos: position{line: 2003, col: 16, offset: 62729}, name: "Expr", }, }, @@ -14329,16 +14292,16 @@ var g = &grammar{ }, { name: "JoinOperation", - pos: position{line: 2010, col: 1, offset: 62864}, + pos: position{line: 2005, col: 1, offset: 62753}, expr: &choiceExpr{ - pos: position{line: 2011, col: 5, offset: 62882}, + pos: position{line: 2006, col: 5, offset: 62771}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 2011, col: 5, offset: 62882}, + pos: position{line: 2006, col: 5, offset: 62771}, name: "CrossJoin", }, &ruleRefExpr{ - pos: position{line: 2012, col: 5, offset: 62896}, + pos: position{line: 2007, col: 5, offset: 62785}, name: "ConditionJoin", }, }, @@ -14348,30 +14311,30 @@ var g = &grammar{ }, { name: "CrossJoin", - pos: position{line: 2014, col: 1, offset: 62911}, + pos: position{line: 2009, col: 1, offset: 62800}, expr: &actionExpr{ - pos: position{line: 2015, col: 5, offset: 62925}, + pos: position{line: 2010, col: 5, offset: 62814}, run: (*parser).callonCrossJoin1, expr: &seqExpr{ - pos: position{line: 2015, col: 5, offset: 62925}, + pos: position{line: 2010, col: 5, offset: 62814}, exprs: []any{ &labeledExpr{ - pos: position{line: 2015, col: 5, offset: 62925}, + pos: position{line: 2010, col: 5, offset: 62814}, label: "left", expr: &ruleRefExpr{ - pos: position{line: 2015, col: 10, offset: 62930}, + pos: position{line: 2010, col: 10, offset: 62819}, name: "FromElem", }, }, &ruleRefExpr{ - pos: position{line: 2015, col: 19, offset: 62939}, + pos: position{line: 2010, col: 19, offset: 62828}, name: "CrossJoinOp", }, &labeledExpr{ - pos: position{line: 2015, col: 31, offset: 62951}, + pos: position{line: 2010, col: 31, offset: 62840}, label: "right", expr: &ruleRefExpr{ - pos: position{line: 2015, col: 37, offset: 62957}, + pos: position{line: 2010, col: 37, offset: 62846}, name: "FromElem", }, }, @@ -14383,50 +14346,50 @@ var g = &grammar{ }, { name: "CrossJoinOp", - pos: position{line: 2024, col: 1, offset: 63159}, + pos: position{line: 2019, col: 1, offset: 63048}, expr: &choiceExpr{ - pos: position{line: 2025, col: 5, offset: 63176}, + pos: position{line: 2020, col: 5, offset: 63065}, alternatives: []any{ &seqExpr{ - pos: position{line: 2025, col: 5, offset: 63176}, + pos: position{line: 2020, col: 5, offset: 63065}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2025, col: 5, offset: 63176}, + pos: position{line: 2020, col: 5, offset: 63065}, name: "__", }, &litMatcher{ - pos: position{line: 2025, col: 8, offset: 63179}, + pos: position{line: 2020, col: 8, offset: 63068}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 2025, col: 12, offset: 63183}, + pos: position{line: 2020, col: 12, offset: 63072}, name: "__", }, }, }, &seqExpr{ - pos: position{line: 2026, col: 5, offset: 63191}, + pos: position{line: 2021, col: 5, offset: 63080}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2026, col: 5, offset: 63191}, + pos: position{line: 2021, col: 5, offset: 63080}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2026, col: 7, offset: 63193}, + pos: position{line: 2021, col: 7, offset: 63082}, name: "CROSS", }, &ruleRefExpr{ - pos: position{line: 2026, col: 13, offset: 63199}, + pos: position{line: 2021, col: 13, offset: 63088}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2026, col: 15, offset: 63201}, + pos: position{line: 2021, col: 15, offset: 63090}, name: "JOIN", }, &ruleRefExpr{ - pos: position{line: 2026, col: 20, offset: 63206}, + pos: position{line: 2021, col: 20, offset: 63095}, name: "_", }, }, @@ -14438,46 +14401,46 @@ var g = &grammar{ }, { name: "ConditionJoin", - pos: position{line: 2028, col: 1, offset: 63210}, + pos: position{line: 2023, col: 1, offset: 63099}, expr: &actionExpr{ - pos: position{line: 2029, col: 5, offset: 63228}, + pos: position{line: 2024, col: 5, offset: 63117}, run: (*parser).callonConditionJoin1, expr: &seqExpr{ - pos: position{line: 2029, col: 5, offset: 63228}, + pos: position{line: 2024, col: 5, offset: 63117}, exprs: []any{ &labeledExpr{ - pos: position{line: 2029, col: 5, offset: 63228}, + pos: position{line: 2024, col: 5, offset: 63117}, label: "left", expr: &ruleRefExpr{ - pos: position{line: 2029, col: 10, offset: 63233}, + pos: position{line: 2024, col: 10, offset: 63122}, name: "FromElem", }, }, &labeledExpr{ - pos: position{line: 2029, col: 19, offset: 63242}, + pos: position{line: 2024, col: 19, offset: 63131}, label: "style", expr: &ruleRefExpr{ - pos: position{line: 2029, col: 25, offset: 63248}, + pos: position{line: 2024, col: 25, offset: 63137}, name: "SQLJoinStyle", }, }, &ruleRefExpr{ - pos: position{line: 2029, col: 38, offset: 63261}, + pos: position{line: 2024, col: 38, offset: 63150}, name: "_", }, &labeledExpr{ - pos: position{line: 2029, col: 40, offset: 63263}, + pos: position{line: 2024, col: 40, offset: 63152}, label: "right", expr: &ruleRefExpr{ - pos: position{line: 2029, col: 46, offset: 63269}, + pos: position{line: 2024, col: 46, offset: 63158}, name: "FromElem", }, }, &labeledExpr{ - pos: position{line: 2029, col: 55, offset: 63278}, + pos: position{line: 2024, col: 55, offset: 63167}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 2029, col: 57, offset: 63280}, + pos: position{line: 2024, col: 57, offset: 63169}, name: "JoinExpr", }, }, @@ -14489,161 +14452,161 @@ var g = &grammar{ }, { name: "SQLJoinStyle", - pos: position{line: 2040, col: 1, offset: 63549}, + pos: position{line: 2035, col: 1, offset: 63438}, expr: &choiceExpr{ - pos: position{line: 2041, col: 5, offset: 63567}, + pos: position{line: 2036, col: 5, offset: 63456}, alternatives: []any{ &actionExpr{ - pos: position{line: 2041, col: 5, offset: 63567}, + pos: position{line: 2036, col: 5, offset: 63456}, run: (*parser).callonSQLJoinStyle2, expr: &seqExpr{ - pos: position{line: 2041, col: 5, offset: 63567}, + pos: position{line: 2036, col: 5, offset: 63456}, exprs: []any{ &zeroOrOneExpr{ - pos: position{line: 2041, col: 5, offset: 63567}, + pos: position{line: 2036, col: 5, offset: 63456}, expr: &seqExpr{ - pos: position{line: 2041, col: 6, offset: 63568}, + pos: position{line: 2036, col: 6, offset: 63457}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2041, col: 6, offset: 63568}, + pos: position{line: 2036, col: 6, offset: 63457}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2041, col: 8, offset: 63570}, + pos: position{line: 2036, col: 8, offset: 63459}, name: "INNER", }, }, }, }, &ruleRefExpr{ - pos: position{line: 2041, col: 16, offset: 63578}, + pos: position{line: 2036, col: 16, offset: 63467}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2041, col: 18, offset: 63580}, + pos: position{line: 2036, col: 18, offset: 63469}, name: "JOIN", }, }, }, }, &actionExpr{ - pos: position{line: 2042, col: 5, offset: 63625}, + pos: position{line: 2037, col: 5, offset: 63514}, run: (*parser).callonSQLJoinStyle10, expr: &seqExpr{ - pos: position{line: 2042, col: 5, offset: 63625}, + pos: position{line: 2037, col: 5, offset: 63514}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2042, col: 5, offset: 63625}, + pos: position{line: 2037, col: 5, offset: 63514}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2042, col: 7, offset: 63627}, + pos: position{line: 2037, col: 7, offset: 63516}, name: "FULL", }, &zeroOrOneExpr{ - pos: position{line: 2042, col: 12, offset: 63632}, + pos: position{line: 2037, col: 12, offset: 63521}, expr: &seqExpr{ - pos: position{line: 2042, col: 13, offset: 63633}, + pos: position{line: 2037, col: 13, offset: 63522}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2042, col: 13, offset: 63633}, + pos: position{line: 2037, col: 13, offset: 63522}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2042, col: 15, offset: 63635}, + pos: position{line: 2037, col: 15, offset: 63524}, name: "OUTER", }, }, }, }, &ruleRefExpr{ - pos: position{line: 2042, col: 23, offset: 63643}, + pos: position{line: 2037, col: 23, offset: 63532}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2042, col: 25, offset: 63645}, + pos: position{line: 2037, col: 25, offset: 63534}, name: "JOIN", }, }, }, }, &actionExpr{ - pos: position{line: 2043, col: 5, offset: 63679}, + pos: position{line: 2038, col: 5, offset: 63568}, run: (*parser).callonSQLJoinStyle20, expr: &seqExpr{ - pos: position{line: 2043, col: 5, offset: 63679}, + pos: position{line: 2038, col: 5, offset: 63568}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2043, col: 5, offset: 63679}, + pos: position{line: 2038, col: 5, offset: 63568}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2043, col: 7, offset: 63681}, + pos: position{line: 2038, col: 7, offset: 63570}, name: "LEFT", }, &zeroOrOneExpr{ - pos: position{line: 2043, col: 12, offset: 63686}, + pos: position{line: 2038, col: 12, offset: 63575}, expr: &seqExpr{ - pos: position{line: 2043, col: 13, offset: 63687}, + pos: position{line: 2038, col: 13, offset: 63576}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2043, col: 13, offset: 63687}, + pos: position{line: 2038, col: 13, offset: 63576}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2043, col: 15, offset: 63689}, + pos: position{line: 2038, col: 15, offset: 63578}, name: "OUTER", }, }, }, }, &ruleRefExpr{ - pos: position{line: 2043, col: 23, offset: 63697}, + pos: position{line: 2038, col: 23, offset: 63586}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2043, col: 25, offset: 63699}, + pos: position{line: 2038, col: 25, offset: 63588}, name: "JOIN", }, }, }, }, &actionExpr{ - pos: position{line: 2044, col: 5, offset: 63733}, + pos: position{line: 2039, col: 5, offset: 63622}, run: (*parser).callonSQLJoinStyle30, expr: &seqExpr{ - pos: position{line: 2044, col: 5, offset: 63733}, + pos: position{line: 2039, col: 5, offset: 63622}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2044, col: 5, offset: 63733}, + pos: position{line: 2039, col: 5, offset: 63622}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2044, col: 7, offset: 63735}, + pos: position{line: 2039, col: 7, offset: 63624}, name: "RIGHT", }, &zeroOrOneExpr{ - pos: position{line: 2044, col: 13, offset: 63741}, + pos: position{line: 2039, col: 13, offset: 63630}, expr: &seqExpr{ - pos: position{line: 2044, col: 14, offset: 63742}, + pos: position{line: 2039, col: 14, offset: 63631}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2044, col: 14, offset: 63742}, + pos: position{line: 2039, col: 14, offset: 63631}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2044, col: 16, offset: 63744}, + pos: position{line: 2039, col: 16, offset: 63633}, name: "OUTER", }, }, }, }, &ruleRefExpr{ - pos: position{line: 2044, col: 24, offset: 63752}, + pos: position{line: 2039, col: 24, offset: 63641}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2044, col: 26, offset: 63754}, + pos: position{line: 2039, col: 26, offset: 63643}, name: "JOIN", }, }, @@ -14656,33 +14619,33 @@ var g = &grammar{ }, { name: "JoinExpr", - pos: position{line: 2046, col: 1, offset: 63786}, + pos: position{line: 2041, col: 1, offset: 63675}, expr: &choiceExpr{ - pos: position{line: 2047, col: 5, offset: 63800}, + pos: position{line: 2042, col: 5, offset: 63689}, alternatives: []any{ &actionExpr{ - pos: position{line: 2047, col: 5, offset: 63800}, + pos: position{line: 2042, col: 5, offset: 63689}, run: (*parser).callonJoinExpr2, expr: &seqExpr{ - pos: position{line: 2047, col: 5, offset: 63800}, + pos: position{line: 2042, col: 5, offset: 63689}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2047, col: 5, offset: 63800}, + pos: position{line: 2042, col: 5, offset: 63689}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2047, col: 7, offset: 63802}, + pos: position{line: 2042, col: 7, offset: 63691}, name: "ON", }, &ruleRefExpr{ - pos: position{line: 2047, col: 10, offset: 63805}, + pos: position{line: 2042, col: 10, offset: 63694}, name: "_", }, &labeledExpr{ - pos: position{line: 2047, col: 12, offset: 63807}, + pos: position{line: 2042, col: 12, offset: 63696}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 2047, col: 14, offset: 63809}, + pos: position{line: 2042, col: 14, offset: 63698}, name: "Expr", }, }, @@ -14690,47 +14653,47 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 2053, col: 5, offset: 63939}, + pos: position{line: 2048, col: 5, offset: 63828}, run: (*parser).callonJoinExpr9, expr: &seqExpr{ - pos: position{line: 2053, col: 5, offset: 63939}, + pos: position{line: 2048, col: 5, offset: 63828}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2053, col: 5, offset: 63939}, + pos: position{line: 2048, col: 5, offset: 63828}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2053, col: 7, offset: 63941}, + pos: position{line: 2048, col: 7, offset: 63830}, name: "USING", }, &ruleRefExpr{ - pos: position{line: 2053, col: 13, offset: 63947}, + pos: position{line: 2048, col: 13, offset: 63836}, name: "__", }, &litMatcher{ - pos: position{line: 2053, col: 16, offset: 63950}, + pos: position{line: 2048, col: 16, offset: 63839}, val: "(", ignoreCase: false, want: "\"(\"", }, &ruleRefExpr{ - pos: position{line: 2053, col: 20, offset: 63954}, + pos: position{line: 2048, col: 20, offset: 63843}, name: "__", }, &labeledExpr{ - pos: position{line: 2053, col: 23, offset: 63957}, + pos: position{line: 2048, col: 23, offset: 63846}, label: "fields", expr: &ruleRefExpr{ - pos: position{line: 2053, col: 30, offset: 63964}, + pos: position{line: 2048, col: 30, offset: 63853}, name: "Lvals", }, }, &ruleRefExpr{ - pos: position{line: 2053, col: 36, offset: 63970}, + pos: position{line: 2048, col: 36, offset: 63859}, name: "__", }, &litMatcher{ - pos: position{line: 2053, col: 39, offset: 63973}, + pos: position{line: 2048, col: 39, offset: 63862}, val: ")", ignoreCase: false, want: "\")\"", @@ -14745,40 +14708,40 @@ var g = &grammar{ }, { name: "OptOrdinality", - pos: position{line: 2060, col: 1, offset: 64118}, + pos: position{line: 2055, col: 1, offset: 64007}, expr: &choiceExpr{ - pos: position{line: 2061, col: 5, offset: 64137}, + pos: position{line: 2056, col: 5, offset: 64026}, alternatives: []any{ &actionExpr{ - pos: position{line: 2061, col: 5, offset: 64137}, + pos: position{line: 2056, col: 5, offset: 64026}, run: (*parser).callonOptOrdinality2, expr: &seqExpr{ - pos: position{line: 2061, col: 5, offset: 64137}, + pos: position{line: 2056, col: 5, offset: 64026}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2061, col: 5, offset: 64137}, + pos: position{line: 2056, col: 5, offset: 64026}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2061, col: 7, offset: 64139}, + pos: position{line: 2056, col: 7, offset: 64028}, name: "WITH", }, &ruleRefExpr{ - pos: position{line: 2061, col: 12, offset: 64144}, + pos: position{line: 2056, col: 12, offset: 64033}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2061, col: 14, offset: 64146}, + pos: position{line: 2056, col: 14, offset: 64035}, name: "ORDINALITY", }, }, }, }, &actionExpr{ - pos: position{line: 2067, col: 5, offset: 64275}, + pos: position{line: 2062, col: 5, offset: 64164}, run: (*parser).callonOptOrdinality8, expr: &litMatcher{ - pos: position{line: 2067, col: 5, offset: 64275}, + pos: position{line: 2062, col: 5, offset: 64164}, val: "", ignoreCase: false, want: "\"\"", @@ -14791,25 +14754,25 @@ var g = &grammar{ }, { name: "OptAlias", - pos: position{line: 2069, col: 1, offset: 64324}, + pos: position{line: 2064, col: 1, offset: 64213}, expr: &choiceExpr{ - pos: position{line: 2070, col: 5, offset: 64337}, + pos: position{line: 2065, col: 5, offset: 64226}, alternatives: []any{ &actionExpr{ - pos: position{line: 2070, col: 5, offset: 64337}, + pos: position{line: 2065, col: 5, offset: 64226}, run: (*parser).callonOptAlias2, expr: &seqExpr{ - pos: position{line: 2070, col: 5, offset: 64337}, + pos: position{line: 2065, col: 5, offset: 64226}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2070, col: 5, offset: 64337}, + pos: position{line: 2065, col: 5, offset: 64226}, name: "_", }, &labeledExpr{ - pos: position{line: 2070, col: 7, offset: 64339}, + pos: position{line: 2065, col: 7, offset: 64228}, label: "a", expr: &ruleRefExpr{ - pos: position{line: 2070, col: 9, offset: 64341}, + pos: position{line: 2065, col: 9, offset: 64230}, name: "AliasClause", }, }, @@ -14817,10 +14780,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 2071, col: 5, offset: 64375}, + pos: position{line: 2066, col: 5, offset: 64264}, run: (*parser).callonOptAlias7, expr: &litMatcher{ - pos: position{line: 2071, col: 5, offset: 64375}, + pos: position{line: 2066, col: 5, offset: 64264}, val: "", ignoreCase: false, want: "\"\"", @@ -14833,50 +14796,50 @@ var g = &grammar{ }, { name: "AliasClause", - pos: position{line: 2073, col: 1, offset: 64412}, + pos: position{line: 2068, col: 1, offset: 64301}, expr: &actionExpr{ - pos: position{line: 2074, col: 5, offset: 64429}, + pos: position{line: 2069, col: 5, offset: 64318}, run: (*parser).callonAliasClause1, expr: &seqExpr{ - pos: position{line: 2074, col: 5, offset: 64429}, + pos: position{line: 2069, col: 5, offset: 64318}, exprs: []any{ &zeroOrOneExpr{ - pos: position{line: 2074, col: 5, offset: 64429}, + pos: position{line: 2069, col: 5, offset: 64318}, expr: &seqExpr{ - pos: position{line: 2074, col: 6, offset: 64430}, + pos: position{line: 2069, col: 6, offset: 64319}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2074, col: 6, offset: 64430}, + pos: position{line: 2069, col: 6, offset: 64319}, name: "AS", }, &ruleRefExpr{ - pos: position{line: 2074, col: 9, offset: 64433}, + pos: position{line: 2069, col: 9, offset: 64322}, name: "_", }, }, }, }, ¬Expr{ - pos: position{line: 2074, col: 13, offset: 64437}, + pos: position{line: 2069, col: 13, offset: 64326}, expr: &choiceExpr{ - pos: position{line: 2074, col: 15, offset: 64439}, + pos: position{line: 2069, col: 15, offset: 64328}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 2074, col: 15, offset: 64439}, + pos: position{line: 2069, col: 15, offset: 64328}, name: "SQLGuard", }, &ruleRefExpr{ - pos: position{line: 2074, col: 26, offset: 64450}, + pos: position{line: 2069, col: 26, offset: 64339}, name: "DeprecatedFroms", }, }, }, }, &labeledExpr{ - pos: position{line: 2074, col: 43, offset: 64467}, + pos: position{line: 2069, col: 43, offset: 64356}, label: "name", expr: &ruleRefExpr{ - pos: position{line: 2074, col: 48, offset: 64472}, + pos: position{line: 2069, col: 48, offset: 64361}, name: "IdentifierName", }, }, @@ -14888,51 +14851,51 @@ var g = &grammar{ }, { name: "Selection", - pos: position{line: 2078, col: 1, offset: 64605}, + pos: position{line: 2073, col: 1, offset: 64494}, expr: &actionExpr{ - pos: position{line: 2079, col: 5, offset: 64619}, + pos: position{line: 2074, col: 5, offset: 64508}, run: (*parser).callonSelection1, expr: &seqExpr{ - pos: position{line: 2079, col: 5, offset: 64619}, + pos: position{line: 2074, col: 5, offset: 64508}, exprs: []any{ &labeledExpr{ - pos: position{line: 2079, col: 5, offset: 64619}, + pos: position{line: 2074, col: 5, offset: 64508}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 2079, col: 11, offset: 64625}, + pos: position{line: 2074, col: 11, offset: 64514}, name: "SelectElem", }, }, &labeledExpr{ - pos: position{line: 2079, col: 22, offset: 64636}, + pos: position{line: 2074, col: 22, offset: 64525}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 2079, col: 27, offset: 64641}, + pos: position{line: 2074, col: 27, offset: 64530}, expr: &actionExpr{ - pos: position{line: 2079, col: 29, offset: 64643}, + pos: position{line: 2074, col: 29, offset: 64532}, run: (*parser).callonSelection7, expr: &seqExpr{ - pos: position{line: 2079, col: 29, offset: 64643}, + pos: position{line: 2074, col: 29, offset: 64532}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2079, col: 29, offset: 64643}, + pos: position{line: 2074, col: 29, offset: 64532}, name: "__", }, &litMatcher{ - pos: position{line: 2079, col: 32, offset: 64646}, + pos: position{line: 2074, col: 32, offset: 64535}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 2079, col: 36, offset: 64650}, + pos: position{line: 2074, col: 36, offset: 64539}, name: "__", }, &labeledExpr{ - pos: position{line: 2079, col: 39, offset: 64653}, + pos: position{line: 2074, col: 39, offset: 64542}, label: "s", expr: &ruleRefExpr{ - pos: position{line: 2079, col: 41, offset: 64655}, + pos: position{line: 2074, col: 41, offset: 64544}, name: "SelectElem", }, }, @@ -14949,29 +14912,29 @@ var g = &grammar{ }, { name: "SelectElem", - pos: position{line: 2088, col: 1, offset: 64881}, + pos: position{line: 2083, col: 1, offset: 64770}, expr: &choiceExpr{ - pos: position{line: 2089, col: 5, offset: 64897}, + pos: position{line: 2084, col: 5, offset: 64786}, alternatives: []any{ &actionExpr{ - pos: position{line: 2089, col: 5, offset: 64897}, + pos: position{line: 2084, col: 5, offset: 64786}, run: (*parser).callonSelectElem2, expr: &seqExpr{ - pos: position{line: 2089, col: 5, offset: 64897}, + pos: position{line: 2084, col: 5, offset: 64786}, exprs: []any{ &labeledExpr{ - pos: position{line: 2089, col: 5, offset: 64897}, + pos: position{line: 2084, col: 5, offset: 64786}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 2089, col: 7, offset: 64899}, + pos: position{line: 2084, col: 7, offset: 64788}, name: "Expr", }, }, &labeledExpr{ - pos: position{line: 2089, col: 12, offset: 64904}, + pos: position{line: 2084, col: 12, offset: 64793}, label: "as", expr: &ruleRefExpr{ - pos: position{line: 2089, col: 15, offset: 64907}, + pos: position{line: 2084, col: 15, offset: 64796}, name: "OptAsClause", }, }, @@ -14979,10 +14942,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 2100, col: 5, offset: 65123}, + pos: position{line: 2095, col: 5, offset: 65012}, run: (*parser).callonSelectElem8, expr: &litMatcher{ - pos: position{line: 2100, col: 5, offset: 65123}, + pos: position{line: 2095, col: 5, offset: 65012}, val: "*", ignoreCase: false, want: "\"*\"", @@ -14995,33 +14958,33 @@ var g = &grammar{ }, { name: "OptAsClause", - pos: position{line: 2105, col: 1, offset: 65225}, + pos: position{line: 2100, col: 1, offset: 65114}, expr: &choiceExpr{ - pos: position{line: 2106, col: 5, offset: 65242}, + pos: position{line: 2101, col: 5, offset: 65131}, alternatives: []any{ &actionExpr{ - pos: position{line: 2106, col: 5, offset: 65242}, + pos: position{line: 2101, col: 5, offset: 65131}, run: (*parser).callonOptAsClause2, expr: &seqExpr{ - pos: position{line: 2106, col: 5, offset: 65242}, + pos: position{line: 2101, col: 5, offset: 65131}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2106, col: 5, offset: 65242}, + pos: position{line: 2101, col: 5, offset: 65131}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2106, col: 7, offset: 65244}, + pos: position{line: 2101, col: 7, offset: 65133}, name: "AS", }, &ruleRefExpr{ - pos: position{line: 2106, col: 10, offset: 65247}, + pos: position{line: 2101, col: 10, offset: 65136}, name: "_", }, &labeledExpr{ - pos: position{line: 2106, col: 12, offset: 65249}, + pos: position{line: 2101, col: 12, offset: 65138}, label: "id", expr: &ruleRefExpr{ - pos: position{line: 2106, col: 15, offset: 65252}, + pos: position{line: 2101, col: 15, offset: 65141}, name: "Identifier", }, }, @@ -15029,10 +14992,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 2107, col: 5, offset: 65286}, + pos: position{line: 2102, col: 5, offset: 65175}, run: (*parser).callonOptAsClause9, expr: &litMatcher{ - pos: position{line: 2107, col: 5, offset: 65286}, + pos: position{line: 2102, col: 5, offset: 65175}, val: "", ignoreCase: false, want: "\"\"", @@ -15045,41 +15008,41 @@ var g = &grammar{ }, { name: "OptOrderByClause", - pos: position{line: 2109, col: 1, offset: 65311}, + pos: position{line: 2104, col: 1, offset: 65200}, expr: &choiceExpr{ - pos: position{line: 2110, col: 5, offset: 65333}, + pos: position{line: 2105, col: 5, offset: 65222}, alternatives: []any{ &actionExpr{ - pos: position{line: 2110, col: 5, offset: 65333}, + pos: position{line: 2105, col: 5, offset: 65222}, run: (*parser).callonOptOrderByClause2, expr: &seqExpr{ - pos: position{line: 2110, col: 5, offset: 65333}, + pos: position{line: 2105, col: 5, offset: 65222}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2110, col: 5, offset: 65333}, + pos: position{line: 2105, col: 5, offset: 65222}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2110, col: 7, offset: 65335}, + pos: position{line: 2105, col: 7, offset: 65224}, name: "ORDER", }, &ruleRefExpr{ - pos: position{line: 2110, col: 13, offset: 65341}, + pos: position{line: 2105, col: 13, offset: 65230}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2110, col: 15, offset: 65343}, + pos: position{line: 2105, col: 15, offset: 65232}, name: "BY", }, &ruleRefExpr{ - pos: position{line: 2110, col: 18, offset: 65346}, + pos: position{line: 2105, col: 18, offset: 65235}, name: "_", }, &labeledExpr{ - pos: position{line: 2110, col: 20, offset: 65348}, + pos: position{line: 2105, col: 20, offset: 65237}, label: "list", expr: &ruleRefExpr{ - pos: position{line: 2110, col: 25, offset: 65353}, + pos: position{line: 2105, col: 25, offset: 65242}, name: "OrderByList", }, }, @@ -15087,10 +15050,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 2117, col: 5, offset: 65512}, + pos: position{line: 2112, col: 5, offset: 65401}, run: (*parser).callonOptOrderByClause11, expr: &litMatcher{ - pos: position{line: 2117, col: 5, offset: 65512}, + pos: position{line: 2112, col: 5, offset: 65401}, val: "", ignoreCase: false, want: "\"\"", @@ -15103,51 +15066,51 @@ var g = &grammar{ }, { name: "OrderByList", - pos: position{line: 2119, col: 1, offset: 65545}, + pos: position{line: 2114, col: 1, offset: 65434}, expr: &actionExpr{ - pos: position{line: 2120, col: 5, offset: 65562}, + pos: position{line: 2115, col: 5, offset: 65451}, run: (*parser).callonOrderByList1, expr: &seqExpr{ - pos: position{line: 2120, col: 5, offset: 65562}, + pos: position{line: 2115, col: 5, offset: 65451}, exprs: []any{ &labeledExpr{ - pos: position{line: 2120, col: 5, offset: 65562}, + pos: position{line: 2115, col: 5, offset: 65451}, label: "first", expr: &ruleRefExpr{ - pos: position{line: 2120, col: 11, offset: 65568}, + pos: position{line: 2115, col: 11, offset: 65457}, name: "OrderByItem", }, }, &labeledExpr{ - pos: position{line: 2120, col: 23, offset: 65580}, + pos: position{line: 2115, col: 23, offset: 65469}, label: "rest", expr: &zeroOrMoreExpr{ - pos: position{line: 2120, col: 28, offset: 65585}, + pos: position{line: 2115, col: 28, offset: 65474}, expr: &actionExpr{ - pos: position{line: 2120, col: 30, offset: 65587}, + pos: position{line: 2115, col: 30, offset: 65476}, run: (*parser).callonOrderByList7, expr: &seqExpr{ - pos: position{line: 2120, col: 30, offset: 65587}, + pos: position{line: 2115, col: 30, offset: 65476}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2120, col: 30, offset: 65587}, + pos: position{line: 2115, col: 30, offset: 65476}, name: "__", }, &litMatcher{ - pos: position{line: 2120, col: 33, offset: 65590}, + pos: position{line: 2115, col: 33, offset: 65479}, val: ",", ignoreCase: false, want: "\",\"", }, &ruleRefExpr{ - pos: position{line: 2120, col: 37, offset: 65594}, + pos: position{line: 2115, col: 37, offset: 65483}, name: "__", }, &labeledExpr{ - pos: position{line: 2120, col: 40, offset: 65597}, + pos: position{line: 2115, col: 40, offset: 65486}, label: "o", expr: &ruleRefExpr{ - pos: position{line: 2120, col: 42, offset: 65599}, + pos: position{line: 2115, col: 42, offset: 65488}, name: "OrderByItem", }, }, @@ -15164,34 +15127,34 @@ var g = &grammar{ }, { name: "OrderByItem", - pos: position{line: 2124, col: 1, offset: 65700}, + pos: position{line: 2119, col: 1, offset: 65589}, expr: &actionExpr{ - pos: position{line: 2125, col: 5, offset: 65716}, + pos: position{line: 2120, col: 5, offset: 65605}, run: (*parser).callonOrderByItem1, expr: &seqExpr{ - pos: position{line: 2125, col: 5, offset: 65716}, + pos: position{line: 2120, col: 5, offset: 65605}, exprs: []any{ &labeledExpr{ - pos: position{line: 2125, col: 5, offset: 65716}, + pos: position{line: 2120, col: 5, offset: 65605}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 2125, col: 7, offset: 65718}, + pos: position{line: 2120, col: 7, offset: 65607}, name: "Expr", }, }, &labeledExpr{ - pos: position{line: 2125, col: 12, offset: 65723}, + pos: position{line: 2120, col: 12, offset: 65612}, label: "order", expr: &ruleRefExpr{ - pos: position{line: 2125, col: 18, offset: 65729}, + pos: position{line: 2120, col: 18, offset: 65618}, name: "OptAscDesc", }, }, &labeledExpr{ - pos: position{line: 2125, col: 29, offset: 65740}, + pos: position{line: 2120, col: 29, offset: 65629}, label: "nulls", expr: &ruleRefExpr{ - pos: position{line: 2125, col: 35, offset: 65746}, + pos: position{line: 2120, col: 35, offset: 65635}, name: "OptNullsOrder", }, }, @@ -15203,49 +15166,49 @@ var g = &grammar{ }, { name: "OptAscDesc", - pos: position{line: 2136, col: 1, offset: 65996}, + pos: position{line: 2131, col: 1, offset: 65885}, expr: &choiceExpr{ - pos: position{line: 2137, col: 5, offset: 66011}, + pos: position{line: 2132, col: 5, offset: 65900}, alternatives: []any{ &actionExpr{ - pos: position{line: 2137, col: 5, offset: 66011}, + pos: position{line: 2132, col: 5, offset: 65900}, run: (*parser).callonOptAscDesc2, expr: &seqExpr{ - pos: position{line: 2137, col: 5, offset: 66011}, + pos: position{line: 2132, col: 5, offset: 65900}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2137, col: 5, offset: 66011}, + pos: position{line: 2132, col: 5, offset: 65900}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2137, col: 7, offset: 66013}, + pos: position{line: 2132, col: 7, offset: 65902}, name: "ASC", }, }, }, }, &actionExpr{ - pos: position{line: 2138, col: 5, offset: 66085}, + pos: position{line: 2133, col: 5, offset: 65974}, run: (*parser).callonOptAscDesc6, expr: &seqExpr{ - pos: position{line: 2138, col: 5, offset: 66085}, + pos: position{line: 2133, col: 5, offset: 65974}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2138, col: 5, offset: 66085}, + pos: position{line: 2133, col: 5, offset: 65974}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2138, col: 7, offset: 66087}, + pos: position{line: 2133, col: 7, offset: 65976}, name: "DESC", }, }, }, }, &actionExpr{ - pos: position{line: 2139, col: 5, offset: 66159}, + pos: position{line: 2134, col: 5, offset: 66048}, run: (*parser).callonOptAscDesc10, expr: &litMatcher{ - pos: position{line: 2139, col: 5, offset: 66159}, + pos: position{line: 2134, col: 5, offset: 66048}, val: "", ignoreCase: false, want: "\"\"", @@ -15258,65 +15221,65 @@ var g = &grammar{ }, { name: "OptNullsOrder", - pos: position{line: 2141, col: 1, offset: 66191}, + pos: position{line: 2136, col: 1, offset: 66080}, expr: &choiceExpr{ - pos: position{line: 2142, col: 5, offset: 66209}, + pos: position{line: 2137, col: 5, offset: 66098}, alternatives: []any{ &actionExpr{ - pos: position{line: 2142, col: 5, offset: 66209}, + pos: position{line: 2137, col: 5, offset: 66098}, run: (*parser).callonOptNullsOrder2, expr: &seqExpr{ - pos: position{line: 2142, col: 5, offset: 66209}, + pos: position{line: 2137, col: 5, offset: 66098}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2142, col: 5, offset: 66209}, + pos: position{line: 2137, col: 5, offset: 66098}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2142, col: 7, offset: 66211}, + pos: position{line: 2137, col: 7, offset: 66100}, name: "NULLS", }, &ruleRefExpr{ - pos: position{line: 2142, col: 13, offset: 66217}, + pos: position{line: 2137, col: 13, offset: 66106}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2142, col: 15, offset: 66219}, + pos: position{line: 2137, col: 15, offset: 66108}, name: "FIRST", }, }, }, }, &actionExpr{ - pos: position{line: 2143, col: 5, offset: 66295}, + pos: position{line: 2138, col: 5, offset: 66184}, run: (*parser).callonOptNullsOrder8, expr: &seqExpr{ - pos: position{line: 2143, col: 5, offset: 66295}, + pos: position{line: 2138, col: 5, offset: 66184}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2143, col: 5, offset: 66295}, + pos: position{line: 2138, col: 5, offset: 66184}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2143, col: 7, offset: 66297}, + pos: position{line: 2138, col: 7, offset: 66186}, name: "NULLS", }, &ruleRefExpr{ - pos: position{line: 2143, col: 13, offset: 66303}, + pos: position{line: 2138, col: 13, offset: 66192}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2143, col: 15, offset: 66305}, + pos: position{line: 2138, col: 15, offset: 66194}, name: "LAST", }, }, }, }, &actionExpr{ - pos: position{line: 2144, col: 5, offset: 66380}, + pos: position{line: 2139, col: 5, offset: 66269}, run: (*parser).callonOptNullsOrder14, expr: &litMatcher{ - pos: position{line: 2144, col: 5, offset: 66380}, + pos: position{line: 2139, col: 5, offset: 66269}, val: "", ignoreCase: false, want: "\"\"", @@ -15329,29 +15292,29 @@ var g = &grammar{ }, { name: "SelectLimit", - pos: position{line: 2146, col: 1, offset: 66425}, + pos: position{line: 2141, col: 1, offset: 66314}, expr: &choiceExpr{ - pos: position{line: 2147, col: 5, offset: 66441}, + pos: position{line: 2142, col: 5, offset: 66330}, alternatives: []any{ &actionExpr{ - pos: position{line: 2147, col: 5, offset: 66441}, + pos: position{line: 2142, col: 5, offset: 66330}, run: (*parser).callonSelectLimit2, expr: &seqExpr{ - pos: position{line: 2147, col: 5, offset: 66441}, + pos: position{line: 2142, col: 5, offset: 66330}, exprs: []any{ &labeledExpr{ - pos: position{line: 2147, col: 5, offset: 66441}, + pos: position{line: 2142, col: 5, offset: 66330}, label: "l", expr: &ruleRefExpr{ - pos: position{line: 2147, col: 7, offset: 66443}, + pos: position{line: 2142, col: 7, offset: 66332}, name: "LimitClause", }, }, &labeledExpr{ - pos: position{line: 2147, col: 19, offset: 66455}, + pos: position{line: 2142, col: 19, offset: 66344}, label: "o", expr: &ruleRefExpr{ - pos: position{line: 2147, col: 21, offset: 66457}, + pos: position{line: 2142, col: 21, offset: 66346}, name: "OptOffsetClause", }, }, @@ -15359,24 +15322,24 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 2154, col: 5, offset: 66603}, + pos: position{line: 2149, col: 5, offset: 66492}, run: (*parser).callonSelectLimit8, expr: &seqExpr{ - pos: position{line: 2154, col: 5, offset: 66603}, + pos: position{line: 2149, col: 5, offset: 66492}, exprs: []any{ &labeledExpr{ - pos: position{line: 2154, col: 5, offset: 66603}, + pos: position{line: 2149, col: 5, offset: 66492}, label: "o", expr: &ruleRefExpr{ - pos: position{line: 2154, col: 7, offset: 66605}, + pos: position{line: 2149, col: 7, offset: 66494}, name: "OffsetClause", }, }, &labeledExpr{ - pos: position{line: 2154, col: 20, offset: 66618}, + pos: position{line: 2149, col: 20, offset: 66507}, label: "l", expr: &ruleRefExpr{ - pos: position{line: 2154, col: 22, offset: 66620}, + pos: position{line: 2149, col: 22, offset: 66509}, name: "OptLimitClause", }, }, @@ -15390,25 +15353,25 @@ var g = &grammar{ }, { name: "OptLimitClause", - pos: position{line: 2167, col: 1, offset: 66892}, + pos: position{line: 2162, col: 1, offset: 66781}, expr: &choiceExpr{ - pos: position{line: 2168, col: 5, offset: 66912}, + pos: position{line: 2163, col: 5, offset: 66801}, alternatives: []any{ &actionExpr{ - pos: position{line: 2168, col: 5, offset: 66912}, + pos: position{line: 2163, col: 5, offset: 66801}, run: (*parser).callonOptLimitClause2, expr: &seqExpr{ - pos: position{line: 2168, col: 5, offset: 66912}, + pos: position{line: 2163, col: 5, offset: 66801}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2168, col: 5, offset: 66912}, + pos: position{line: 2163, col: 5, offset: 66801}, name: "_", }, &labeledExpr{ - pos: position{line: 2168, col: 7, offset: 66914}, + pos: position{line: 2163, col: 7, offset: 66803}, label: "l", expr: &ruleRefExpr{ - pos: position{line: 2168, col: 9, offset: 66916}, + pos: position{line: 2163, col: 9, offset: 66805}, name: "LimitClause", }, }, @@ -15416,10 +15379,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 2169, col: 5, offset: 66950}, + pos: position{line: 2164, col: 5, offset: 66839}, run: (*parser).callonOptLimitClause7, expr: &litMatcher{ - pos: position{line: 2169, col: 5, offset: 66950}, + pos: position{line: 2164, col: 5, offset: 66839}, val: "", ignoreCase: false, want: "\"\"", @@ -15432,50 +15395,50 @@ var g = &grammar{ }, { name: "LimitClause", - pos: position{line: 2171, col: 1, offset: 66987}, + pos: position{line: 2166, col: 1, offset: 66876}, expr: &choiceExpr{ - pos: position{line: 2172, col: 5, offset: 67004}, + pos: position{line: 2167, col: 5, offset: 66893}, alternatives: []any{ &actionExpr{ - pos: position{line: 2172, col: 5, offset: 67004}, + pos: position{line: 2167, col: 5, offset: 66893}, run: (*parser).callonLimitClause2, expr: &seqExpr{ - pos: position{line: 2172, col: 5, offset: 67004}, + pos: position{line: 2167, col: 5, offset: 66893}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2172, col: 5, offset: 67004}, + pos: position{line: 2167, col: 5, offset: 66893}, name: "LIMIT", }, &ruleRefExpr{ - pos: position{line: 2172, col: 11, offset: 67010}, + pos: position{line: 2167, col: 11, offset: 66899}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2172, col: 13, offset: 67012}, + pos: position{line: 2167, col: 13, offset: 66901}, name: "ALL", }, }, }, }, &actionExpr{ - pos: position{line: 2173, col: 5, offset: 67074}, + pos: position{line: 2168, col: 5, offset: 66963}, run: (*parser).callonLimitClause7, expr: &seqExpr{ - pos: position{line: 2173, col: 5, offset: 67074}, + pos: position{line: 2168, col: 5, offset: 66963}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2173, col: 5, offset: 67074}, + pos: position{line: 2168, col: 5, offset: 66963}, name: "LIMIT", }, &ruleRefExpr{ - pos: position{line: 2173, col: 11, offset: 67080}, + pos: position{line: 2168, col: 11, offset: 66969}, name: "_", }, &labeledExpr{ - pos: position{line: 2173, col: 13, offset: 67082}, + pos: position{line: 2168, col: 13, offset: 66971}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 2173, col: 15, offset: 67084}, + pos: position{line: 2168, col: 15, offset: 66973}, name: "Expr", }, }, @@ -15489,25 +15452,25 @@ var g = &grammar{ }, { name: "OptOffsetClause", - pos: position{line: 2181, col: 1, offset: 67209}, + pos: position{line: 2176, col: 1, offset: 67098}, expr: &choiceExpr{ - pos: position{line: 2182, col: 5, offset: 67230}, + pos: position{line: 2177, col: 5, offset: 67119}, alternatives: []any{ &actionExpr{ - pos: position{line: 2182, col: 5, offset: 67230}, + pos: position{line: 2177, col: 5, offset: 67119}, run: (*parser).callonOptOffsetClause2, expr: &seqExpr{ - pos: position{line: 2182, col: 5, offset: 67230}, + pos: position{line: 2177, col: 5, offset: 67119}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2182, col: 5, offset: 67230}, + pos: position{line: 2177, col: 5, offset: 67119}, name: "_", }, &labeledExpr{ - pos: position{line: 2182, col: 7, offset: 67232}, + pos: position{line: 2177, col: 7, offset: 67121}, label: "o", expr: &ruleRefExpr{ - pos: position{line: 2182, col: 9, offset: 67234}, + pos: position{line: 2177, col: 9, offset: 67123}, name: "OffsetClause", }, }, @@ -15515,10 +15478,10 @@ var g = &grammar{ }, }, &actionExpr{ - pos: position{line: 2183, col: 5, offset: 67270}, + pos: position{line: 2178, col: 5, offset: 67159}, run: (*parser).callonOptOffsetClause7, expr: &litMatcher{ - pos: position{line: 2183, col: 5, offset: 67270}, + pos: position{line: 2178, col: 5, offset: 67159}, val: "", ignoreCase: false, want: "\"\"", @@ -15531,26 +15494,26 @@ var g = &grammar{ }, { name: "OffsetClause", - pos: position{line: 2185, col: 1, offset: 67295}, + pos: position{line: 2180, col: 1, offset: 67184}, expr: &actionExpr{ - pos: position{line: 2186, col: 5, offset: 67313}, + pos: position{line: 2181, col: 5, offset: 67202}, run: (*parser).callonOffsetClause1, expr: &seqExpr{ - pos: position{line: 2186, col: 5, offset: 67313}, + pos: position{line: 2181, col: 5, offset: 67202}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2186, col: 5, offset: 67313}, + pos: position{line: 2181, col: 5, offset: 67202}, name: "OFFSET", }, &ruleRefExpr{ - pos: position{line: 2186, col: 12, offset: 67320}, + pos: position{line: 2181, col: 12, offset: 67209}, name: "_", }, &labeledExpr{ - pos: position{line: 2186, col: 14, offset: 67322}, + pos: position{line: 2181, col: 14, offset: 67211}, label: "e", expr: &ruleRefExpr{ - pos: position{line: 2186, col: 16, offset: 67324}, + pos: position{line: 2181, col: 16, offset: 67213}, name: "Expr", }, }, @@ -15562,108 +15525,108 @@ var g = &grammar{ }, { name: "SetOperation", - pos: position{line: 2188, col: 1, offset: 67349}, + pos: position{line: 2183, col: 1, offset: 67238}, expr: &actionExpr{ - pos: position{line: 2189, col: 5, offset: 67366}, + pos: position{line: 2184, col: 5, offset: 67255}, run: (*parser).callonSetOperation1, expr: &seqExpr{ - pos: position{line: 2189, col: 5, offset: 67366}, + pos: position{line: 2184, col: 5, offset: 67255}, exprs: []any{ &labeledExpr{ - pos: position{line: 2189, col: 5, offset: 67366}, + pos: position{line: 2184, col: 5, offset: 67255}, label: "left", expr: &ruleRefExpr{ - pos: position{line: 2189, col: 10, offset: 67371}, + pos: position{line: 2184, col: 10, offset: 67260}, name: "SelectExpr", }, }, &labeledExpr{ - pos: position{line: 2189, col: 21, offset: 67382}, + pos: position{line: 2184, col: 21, offset: 67271}, label: "distinct", expr: &ruleRefExpr{ - pos: position{line: 2189, col: 30, offset: 67391}, + pos: position{line: 2184, col: 30, offset: 67280}, name: "SetOp", }, }, &ruleRefExpr{ - pos: position{line: 2189, col: 36, offset: 67397}, + pos: position{line: 2184, col: 36, offset: 67286}, name: "_", }, &labeledExpr{ - pos: position{line: 2189, col: 38, offset: 67399}, + pos: position{line: 2184, col: 38, offset: 67288}, label: "right", expr: &ruleRefExpr{ - pos: position{line: 2189, col: 44, offset: 67405}, + pos: position{line: 2184, col: 44, offset: 67294}, name: "SelectExpr", }, }, }, }, }, - leader: true, + leader: false, leftRecursive: true, }, { name: "SetOp", - pos: position{line: 2199, col: 1, offset: 67626}, + pos: position{line: 2194, col: 1, offset: 67515}, expr: &choiceExpr{ - pos: position{line: 2200, col: 5, offset: 67637}, + pos: position{line: 2195, col: 5, offset: 67526}, alternatives: []any{ &actionExpr{ - pos: position{line: 2200, col: 5, offset: 67637}, + pos: position{line: 2195, col: 5, offset: 67526}, run: (*parser).callonSetOp2, expr: &seqExpr{ - pos: position{line: 2200, col: 5, offset: 67637}, + pos: position{line: 2195, col: 5, offset: 67526}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2200, col: 5, offset: 67637}, + pos: position{line: 2195, col: 5, offset: 67526}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2200, col: 7, offset: 67639}, + pos: position{line: 2195, col: 7, offset: 67528}, name: "UNION", }, &ruleRefExpr{ - pos: position{line: 2200, col: 13, offset: 67645}, + pos: position{line: 2195, col: 13, offset: 67534}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2200, col: 15, offset: 67647}, + pos: position{line: 2195, col: 15, offset: 67536}, name: "ALL", }, }, }, }, &actionExpr{ - pos: position{line: 2201, col: 5, offset: 67683}, + pos: position{line: 2196, col: 5, offset: 67572}, run: (*parser).callonSetOp8, expr: &seqExpr{ - pos: position{line: 2201, col: 5, offset: 67683}, + pos: position{line: 2196, col: 5, offset: 67572}, exprs: []any{ &ruleRefExpr{ - pos: position{line: 2201, col: 5, offset: 67683}, + pos: position{line: 2196, col: 5, offset: 67572}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2201, col: 7, offset: 67685}, + pos: position{line: 2196, col: 7, offset: 67574}, name: "UNION", }, &ruleRefExpr{ - pos: position{line: 2201, col: 13, offset: 67691}, + pos: position{line: 2196, col: 13, offset: 67580}, name: "_", }, &ruleRefExpr{ - pos: position{line: 2201, col: 15, offset: 67693}, + pos: position{line: 2196, col: 15, offset: 67582}, name: "DISTINCT", }, }, }, }, &actionExpr{ - pos: position{line: 2202, col: 5, offset: 67728}, + pos: position{line: 2197, col: 5, offset: 67617}, run: (*parser).callonSetOp14, expr: &litMatcher{ - pos: position{line: 2202, col: 5, offset: 67728}, + pos: position{line: 2197, col: 5, offset: 67617}, val: "", ignoreCase: false, want: "\"\"", @@ -15676,80 +15639,80 @@ var g = &grammar{ }, { name: "SQLGuard", - pos: position{line: 2205, col: 1, offset: 67791}, + pos: position{line: 2200, col: 1, offset: 67680}, expr: &choiceExpr{ - pos: position{line: 2206, col: 5, offset: 67806}, + pos: position{line: 2201, col: 5, offset: 67695}, alternatives: []any{ &ruleRefExpr{ - pos: position{line: 2206, col: 5, offset: 67806}, + pos: position{line: 2201, col: 5, offset: 67695}, name: "FROM", }, &ruleRefExpr{ - pos: position{line: 2206, col: 12, offset: 67813}, + pos: position{line: 2201, col: 12, offset: 67702}, name: "GROUP", }, &ruleRefExpr{ - pos: position{line: 2206, col: 20, offset: 67821}, + pos: position{line: 2201, col: 20, offset: 67710}, name: "HAVING", }, &ruleRefExpr{ - pos: position{line: 2206, col: 29, offset: 67830}, + pos: position{line: 2201, col: 29, offset: 67719}, name: "SELECT", }, &ruleRefExpr{ - pos: position{line: 2206, col: 38, offset: 67839}, + pos: position{line: 2201, col: 38, offset: 67728}, name: "RECURSIVE", }, &ruleRefExpr{ - pos: position{line: 2207, col: 5, offset: 67853}, + pos: position{line: 2202, col: 5, offset: 67742}, name: "INNER", }, &ruleRefExpr{ - pos: position{line: 2207, col: 13, offset: 67861}, + pos: position{line: 2202, col: 13, offset: 67750}, name: "LEFT", }, &ruleRefExpr{ - pos: position{line: 2207, col: 20, offset: 67868}, + pos: position{line: 2202, col: 20, offset: 67757}, name: "RIGHT", }, &ruleRefExpr{ - pos: position{line: 2207, col: 28, offset: 67876}, + pos: position{line: 2202, col: 28, offset: 67765}, name: "OUTER", }, &ruleRefExpr{ - pos: position{line: 2207, col: 36, offset: 67884}, + pos: position{line: 2202, col: 36, offset: 67773}, name: "CROSS", }, &ruleRefExpr{ - pos: position{line: 2207, col: 44, offset: 67892}, + pos: position{line: 2202, col: 44, offset: 67781}, name: "JOIN", }, &ruleRefExpr{ - pos: position{line: 2208, col: 5, offset: 67901}, + pos: position{line: 2203, col: 5, offset: 67790}, name: "UNION", }, &ruleRefExpr{ - pos: position{line: 2209, col: 5, offset: 67911}, + pos: position{line: 2204, col: 5, offset: 67800}, name: "ORDER", }, &ruleRefExpr{ - pos: position{line: 2210, col: 5, offset: 67921}, + pos: position{line: 2205, col: 5, offset: 67810}, name: "LIMIT", }, &ruleRefExpr{ - pos: position{line: 2211, col: 5, offset: 67931}, + pos: position{line: 2206, col: 5, offset: 67820}, name: "WHERE", }, &ruleRefExpr{ - pos: position{line: 2212, col: 5, offset: 67942}, + pos: position{line: 2207, col: 5, offset: 67831}, name: "WITH", }, &ruleRefExpr{ - pos: position{line: 2213, col: 5, offset: 67951}, + pos: position{line: 2208, col: 5, offset: 67840}, name: "USING", }, &ruleRefExpr{ - pos: position{line: 2214, col: 5, offset: 67961}, + pos: position{line: 2209, col: 5, offset: 67850}, name: "ON", }, }, @@ -15759,20 +15722,20 @@ var g = &grammar{ }, { name: "AGGREGATE", - pos: position{line: 2216, col: 1, offset: 67965}, + pos: position{line: 2211, col: 1, offset: 67854}, expr: &seqExpr{ - pos: position{line: 2216, col: 14, offset: 67978}, + pos: position{line: 2211, col: 14, offset: 67867}, exprs: []any{ &litMatcher{ - pos: position{line: 2216, col: 14, offset: 67978}, + pos: position{line: 2211, col: 14, offset: 67867}, val: "aggregate", ignoreCase: true, want: "\"AGGREGATE\"i", }, ¬Expr{ - pos: position{line: 2216, col: 33, offset: 67997}, + pos: position{line: 2211, col: 33, offset: 67886}, expr: &ruleRefExpr{ - pos: position{line: 2216, col: 34, offset: 67998}, + pos: position{line: 2211, col: 34, offset: 67887}, name: "IdentifierRest", }, }, @@ -15783,20 +15746,20 @@ var g = &grammar{ }, { name: "ALL", - pos: position{line: 2217, col: 1, offset: 68013}, + pos: position{line: 2212, col: 1, offset: 67902}, expr: &seqExpr{ - pos: position{line: 2217, col: 14, offset: 68026}, + pos: position{line: 2212, col: 14, offset: 67915}, exprs: []any{ &litMatcher{ - pos: position{line: 2217, col: 14, offset: 68026}, + pos: position{line: 2212, col: 14, offset: 67915}, val: "all", ignoreCase: true, want: "\"ALL\"i", }, ¬Expr{ - pos: position{line: 2217, col: 33, offset: 68045}, + pos: position{line: 2212, col: 33, offset: 67934}, expr: &ruleRefExpr{ - pos: position{line: 2217, col: 34, offset: 68046}, + pos: position{line: 2212, col: 34, offset: 67935}, name: "IdentifierRest", }, }, @@ -15807,23 +15770,23 @@ var g = &grammar{ }, { name: "AND", - pos: position{line: 2218, col: 1, offset: 68061}, + pos: position{line: 2213, col: 1, offset: 67950}, expr: &actionExpr{ - pos: position{line: 2218, col: 14, offset: 68074}, + pos: position{line: 2213, col: 14, offset: 67963}, run: (*parser).callonAND1, expr: &seqExpr{ - pos: position{line: 2218, col: 14, offset: 68074}, + pos: position{line: 2213, col: 14, offset: 67963}, exprs: []any{ &litMatcher{ - pos: position{line: 2218, col: 14, offset: 68074}, + pos: position{line: 2213, col: 14, offset: 67963}, val: "and", ignoreCase: true, want: "\"AND\"i", }, ¬Expr{ - pos: position{line: 2218, col: 33, offset: 68093}, + pos: position{line: 2213, col: 33, offset: 67982}, expr: &ruleRefExpr{ - pos: position{line: 2218, col: 34, offset: 68094}, + pos: position{line: 2213, col: 34, offset: 67983}, name: "IdentifierRest", }, }, @@ -15835,20 +15798,20 @@ var g = &grammar{ }, { name: "ANTI", - pos: position{line: 2219, col: 1, offset: 68131}, + pos: position{line: 2214, col: 1, offset: 68020}, expr: &seqExpr{ - pos: position{line: 2219, col: 14, offset: 68144}, + pos: position{line: 2214, col: 14, offset: 68033}, exprs: []any{ &litMatcher{ - pos: position{line: 2219, col: 14, offset: 68144}, + pos: position{line: 2214, col: 14, offset: 68033}, val: "anti", ignoreCase: true, want: "\"ANTI\"i", }, ¬Expr{ - pos: position{line: 2219, col: 33, offset: 68163}, + pos: position{line: 2214, col: 33, offset: 68052}, expr: &ruleRefExpr{ - pos: position{line: 2219, col: 34, offset: 68164}, + pos: position{line: 2214, col: 34, offset: 68053}, name: "IdentifierRest", }, }, @@ -15859,20 +15822,20 @@ var g = &grammar{ }, { name: "AS", - pos: position{line: 2220, col: 1, offset: 68179}, + pos: position{line: 2215, col: 1, offset: 68068}, expr: &seqExpr{ - pos: position{line: 2220, col: 14, offset: 68192}, + pos: position{line: 2215, col: 14, offset: 68081}, exprs: []any{ &litMatcher{ - pos: position{line: 2220, col: 14, offset: 68192}, + pos: position{line: 2215, col: 14, offset: 68081}, val: "as", ignoreCase: true, want: "\"AS\"i", }, ¬Expr{ - pos: position{line: 2220, col: 33, offset: 68211}, + pos: position{line: 2215, col: 33, offset: 68100}, expr: &ruleRefExpr{ - pos: position{line: 2220, col: 34, offset: 68212}, + pos: position{line: 2215, col: 34, offset: 68101}, name: "IdentifierRest", }, }, @@ -15883,23 +15846,23 @@ var g = &grammar{ }, { name: "ASC", - pos: position{line: 2221, col: 1, offset: 68227}, + pos: position{line: 2216, col: 1, offset: 68116}, expr: &actionExpr{ - pos: position{line: 2221, col: 14, offset: 68240}, + pos: position{line: 2216, col: 14, offset: 68129}, run: (*parser).callonASC1, expr: &seqExpr{ - pos: position{line: 2221, col: 14, offset: 68240}, + pos: position{line: 2216, col: 14, offset: 68129}, exprs: []any{ &litMatcher{ - pos: position{line: 2221, col: 14, offset: 68240}, + pos: position{line: 2216, col: 14, offset: 68129}, val: "asc", ignoreCase: true, want: "\"ASC\"i", }, ¬Expr{ - pos: position{line: 2221, col: 33, offset: 68259}, + pos: position{line: 2216, col: 33, offset: 68148}, expr: &ruleRefExpr{ - pos: position{line: 2221, col: 34, offset: 68260}, + pos: position{line: 2216, col: 34, offset: 68149}, name: "IdentifierRest", }, }, @@ -15911,20 +15874,20 @@ var g = &grammar{ }, { name: "ASSERT", - pos: position{line: 2222, col: 1, offset: 68297}, + pos: position{line: 2217, col: 1, offset: 68186}, expr: &seqExpr{ - pos: position{line: 2222, col: 14, offset: 68310}, + pos: position{line: 2217, col: 14, offset: 68199}, exprs: []any{ &litMatcher{ - pos: position{line: 2222, col: 14, offset: 68310}, + pos: position{line: 2217, col: 14, offset: 68199}, val: "assert", ignoreCase: true, want: "\"ASSERT\"i", }, ¬Expr{ - pos: position{line: 2222, col: 33, offset: 68329}, + pos: position{line: 2217, col: 33, offset: 68218}, expr: &ruleRefExpr{ - pos: position{line: 2222, col: 34, offset: 68330}, + pos: position{line: 2217, col: 34, offset: 68219}, name: "IdentifierRest", }, }, @@ -15935,20 +15898,20 @@ var g = &grammar{ }, { name: "AT", - pos: position{line: 2223, col: 1, offset: 68345}, + pos: position{line: 2218, col: 1, offset: 68234}, expr: &seqExpr{ - pos: position{line: 2223, col: 14, offset: 68358}, + pos: position{line: 2218, col: 14, offset: 68247}, exprs: []any{ &litMatcher{ - pos: position{line: 2223, col: 14, offset: 68358}, + pos: position{line: 2218, col: 14, offset: 68247}, val: "at", ignoreCase: true, want: "\"AT\"i", }, ¬Expr{ - pos: position{line: 2223, col: 33, offset: 68377}, + pos: position{line: 2218, col: 33, offset: 68266}, expr: &ruleRefExpr{ - pos: position{line: 2223, col: 34, offset: 68378}, + pos: position{line: 2218, col: 34, offset: 68267}, name: "IdentifierRest", }, }, @@ -15959,20 +15922,20 @@ var g = &grammar{ }, { name: "AUTHOR", - pos: position{line: 2224, col: 1, offset: 68393}, + pos: position{line: 2219, col: 1, offset: 68282}, expr: &seqExpr{ - pos: position{line: 2224, col: 14, offset: 68406}, + pos: position{line: 2219, col: 14, offset: 68295}, exprs: []any{ &litMatcher{ - pos: position{line: 2224, col: 14, offset: 68406}, + pos: position{line: 2219, col: 14, offset: 68295}, val: "author", ignoreCase: true, want: "\"AUTHOR\"i", }, ¬Expr{ - pos: position{line: 2224, col: 33, offset: 68425}, + pos: position{line: 2219, col: 33, offset: 68314}, expr: &ruleRefExpr{ - pos: position{line: 2224, col: 34, offset: 68426}, + pos: position{line: 2219, col: 34, offset: 68315}, name: "IdentifierRest", }, }, @@ -15983,20 +15946,20 @@ var g = &grammar{ }, { name: "BETWEEN", - pos: position{line: 2225, col: 1, offset: 68441}, + pos: position{line: 2220, col: 1, offset: 68330}, expr: &seqExpr{ - pos: position{line: 2225, col: 14, offset: 68454}, + pos: position{line: 2220, col: 14, offset: 68343}, exprs: []any{ &litMatcher{ - pos: position{line: 2225, col: 14, offset: 68454}, + pos: position{line: 2220, col: 14, offset: 68343}, val: "between", ignoreCase: true, want: "\"BETWEEN\"i", }, ¬Expr{ - pos: position{line: 2225, col: 33, offset: 68473}, + pos: position{line: 2220, col: 33, offset: 68362}, expr: &ruleRefExpr{ - pos: position{line: 2225, col: 34, offset: 68474}, + pos: position{line: 2220, col: 34, offset: 68363}, name: "IdentifierRest", }, }, @@ -16007,20 +15970,20 @@ var g = &grammar{ }, { name: "BODY", - pos: position{line: 2226, col: 1, offset: 68489}, + pos: position{line: 2221, col: 1, offset: 68378}, expr: &seqExpr{ - pos: position{line: 2226, col: 14, offset: 68502}, + pos: position{line: 2221, col: 14, offset: 68391}, exprs: []any{ &litMatcher{ - pos: position{line: 2226, col: 14, offset: 68502}, + pos: position{line: 2221, col: 14, offset: 68391}, val: "body", ignoreCase: true, want: "\"BODY\"i", }, ¬Expr{ - pos: position{line: 2226, col: 33, offset: 68521}, + pos: position{line: 2221, col: 33, offset: 68410}, expr: &ruleRefExpr{ - pos: position{line: 2226, col: 34, offset: 68522}, + pos: position{line: 2221, col: 34, offset: 68411}, name: "IdentifierRest", }, }, @@ -16031,20 +15994,20 @@ var g = &grammar{ }, { name: "BY", - pos: position{line: 2227, col: 1, offset: 68537}, + pos: position{line: 2222, col: 1, offset: 68426}, expr: &seqExpr{ - pos: position{line: 2227, col: 14, offset: 68550}, + pos: position{line: 2222, col: 14, offset: 68439}, exprs: []any{ &litMatcher{ - pos: position{line: 2227, col: 14, offset: 68550}, + pos: position{line: 2222, col: 14, offset: 68439}, val: "by", ignoreCase: true, want: "\"BY\"i", }, ¬Expr{ - pos: position{line: 2227, col: 33, offset: 68569}, + pos: position{line: 2222, col: 33, offset: 68458}, expr: &ruleRefExpr{ - pos: position{line: 2227, col: 34, offset: 68570}, + pos: position{line: 2222, col: 34, offset: 68459}, name: "IdentifierRest", }, }, @@ -16055,20 +16018,20 @@ var g = &grammar{ }, { name: "CASE", - pos: position{line: 2228, col: 1, offset: 68585}, + pos: position{line: 2223, col: 1, offset: 68474}, expr: &seqExpr{ - pos: position{line: 2228, col: 14, offset: 68598}, + pos: position{line: 2223, col: 14, offset: 68487}, exprs: []any{ &litMatcher{ - pos: position{line: 2228, col: 14, offset: 68598}, + pos: position{line: 2223, col: 14, offset: 68487}, val: "case", ignoreCase: true, want: "\"CASE\"i", }, ¬Expr{ - pos: position{line: 2228, col: 33, offset: 68617}, + pos: position{line: 2223, col: 33, offset: 68506}, expr: &ruleRefExpr{ - pos: position{line: 2228, col: 34, offset: 68618}, + pos: position{line: 2223, col: 34, offset: 68507}, name: "IdentifierRest", }, }, @@ -16079,20 +16042,20 @@ var g = &grammar{ }, { name: "CONST", - pos: position{line: 2229, col: 1, offset: 68633}, + pos: position{line: 2224, col: 1, offset: 68522}, expr: &seqExpr{ - pos: position{line: 2229, col: 14, offset: 68646}, + pos: position{line: 2224, col: 14, offset: 68535}, exprs: []any{ &litMatcher{ - pos: position{line: 2229, col: 14, offset: 68646}, + pos: position{line: 2224, col: 14, offset: 68535}, val: "const", ignoreCase: true, want: "\"CONST\"i", }, ¬Expr{ - pos: position{line: 2229, col: 33, offset: 68665}, + pos: position{line: 2224, col: 33, offset: 68554}, expr: &ruleRefExpr{ - pos: position{line: 2229, col: 34, offset: 68666}, + pos: position{line: 2224, col: 34, offset: 68555}, name: "IdentifierRest", }, }, @@ -16103,20 +16066,20 @@ var g = &grammar{ }, { name: "COUNT", - pos: position{line: 2230, col: 1, offset: 68681}, + pos: position{line: 2225, col: 1, offset: 68570}, expr: &seqExpr{ - pos: position{line: 2230, col: 14, offset: 68694}, + pos: position{line: 2225, col: 14, offset: 68583}, exprs: []any{ &litMatcher{ - pos: position{line: 2230, col: 14, offset: 68694}, + pos: position{line: 2225, col: 14, offset: 68583}, val: "count", ignoreCase: true, want: "\"COUNT\"i", }, ¬Expr{ - pos: position{line: 2230, col: 33, offset: 68713}, + pos: position{line: 2225, col: 33, offset: 68602}, expr: &ruleRefExpr{ - pos: position{line: 2230, col: 34, offset: 68714}, + pos: position{line: 2225, col: 34, offset: 68603}, name: "IdentifierRest", }, }, @@ -16127,20 +16090,20 @@ var g = &grammar{ }, { name: "CROSS", - pos: position{line: 2231, col: 1, offset: 68729}, + pos: position{line: 2226, col: 1, offset: 68618}, expr: &seqExpr{ - pos: position{line: 2231, col: 14, offset: 68742}, + pos: position{line: 2226, col: 14, offset: 68631}, exprs: []any{ &litMatcher{ - pos: position{line: 2231, col: 14, offset: 68742}, + pos: position{line: 2226, col: 14, offset: 68631}, val: "cross", ignoreCase: true, want: "\"CROSS\"i", }, ¬Expr{ - pos: position{line: 2231, col: 33, offset: 68761}, + pos: position{line: 2226, col: 33, offset: 68650}, expr: &ruleRefExpr{ - pos: position{line: 2231, col: 34, offset: 68762}, + pos: position{line: 2226, col: 34, offset: 68651}, name: "IdentifierRest", }, }, @@ -16151,20 +16114,20 @@ var g = &grammar{ }, { name: "CUT", - pos: position{line: 2232, col: 1, offset: 68777}, + pos: position{line: 2227, col: 1, offset: 68666}, expr: &seqExpr{ - pos: position{line: 2232, col: 14, offset: 68790}, + pos: position{line: 2227, col: 14, offset: 68679}, exprs: []any{ &litMatcher{ - pos: position{line: 2232, col: 14, offset: 68790}, + pos: position{line: 2227, col: 14, offset: 68679}, val: "cut", ignoreCase: true, want: "\"CUT\"i", }, ¬Expr{ - pos: position{line: 2232, col: 33, offset: 68809}, + pos: position{line: 2227, col: 33, offset: 68698}, expr: &ruleRefExpr{ - pos: position{line: 2232, col: 34, offset: 68810}, + pos: position{line: 2227, col: 34, offset: 68699}, name: "IdentifierRest", }, }, @@ -16175,20 +16138,20 @@ var g = &grammar{ }, { name: "DEBUG", - pos: position{line: 2233, col: 1, offset: 68825}, + pos: position{line: 2228, col: 1, offset: 68714}, expr: &seqExpr{ - pos: position{line: 2233, col: 14, offset: 68838}, + pos: position{line: 2228, col: 14, offset: 68727}, exprs: []any{ &litMatcher{ - pos: position{line: 2233, col: 14, offset: 68838}, + pos: position{line: 2228, col: 14, offset: 68727}, val: "debug", ignoreCase: true, want: "\"DEBUG\"i", }, ¬Expr{ - pos: position{line: 2233, col: 33, offset: 68857}, + pos: position{line: 2228, col: 33, offset: 68746}, expr: &ruleRefExpr{ - pos: position{line: 2233, col: 34, offset: 68858}, + pos: position{line: 2228, col: 34, offset: 68747}, name: "IdentifierRest", }, }, @@ -16199,20 +16162,20 @@ var g = &grammar{ }, { name: "DEFAULT", - pos: position{line: 2234, col: 1, offset: 68873}, + pos: position{line: 2229, col: 1, offset: 68762}, expr: &seqExpr{ - pos: position{line: 2234, col: 14, offset: 68886}, + pos: position{line: 2229, col: 14, offset: 68775}, exprs: []any{ &litMatcher{ - pos: position{line: 2234, col: 14, offset: 68886}, + pos: position{line: 2229, col: 14, offset: 68775}, val: "default", ignoreCase: true, want: "\"DEFAULT\"i", }, ¬Expr{ - pos: position{line: 2234, col: 33, offset: 68905}, + pos: position{line: 2229, col: 33, offset: 68794}, expr: &ruleRefExpr{ - pos: position{line: 2234, col: 34, offset: 68906}, + pos: position{line: 2229, col: 34, offset: 68795}, name: "IdentifierRest", }, }, @@ -16223,23 +16186,23 @@ var g = &grammar{ }, { name: "DESC", - pos: position{line: 2235, col: 1, offset: 68921}, + pos: position{line: 2230, col: 1, offset: 68810}, expr: &actionExpr{ - pos: position{line: 2235, col: 14, offset: 68934}, + pos: position{line: 2230, col: 14, offset: 68823}, run: (*parser).callonDESC1, expr: &seqExpr{ - pos: position{line: 2235, col: 14, offset: 68934}, + pos: position{line: 2230, col: 14, offset: 68823}, exprs: []any{ &litMatcher{ - pos: position{line: 2235, col: 14, offset: 68934}, + pos: position{line: 2230, col: 14, offset: 68823}, val: "desc", ignoreCase: true, want: "\"DESC\"i", }, ¬Expr{ - pos: position{line: 2235, col: 33, offset: 68953}, + pos: position{line: 2230, col: 33, offset: 68842}, expr: &ruleRefExpr{ - pos: position{line: 2235, col: 34, offset: 68954}, + pos: position{line: 2230, col: 34, offset: 68843}, name: "IdentifierRest", }, }, @@ -16251,20 +16214,20 @@ var g = &grammar{ }, { name: "DISTINCT", - pos: position{line: 2236, col: 1, offset: 68992}, + pos: position{line: 2231, col: 1, offset: 68881}, expr: &seqExpr{ - pos: position{line: 2236, col: 14, offset: 69005}, + pos: position{line: 2231, col: 14, offset: 68894}, exprs: []any{ &litMatcher{ - pos: position{line: 2236, col: 14, offset: 69005}, + pos: position{line: 2231, col: 14, offset: 68894}, val: "distinct", ignoreCase: true, want: "\"DISTINCT\"i", }, ¬Expr{ - pos: position{line: 2236, col: 33, offset: 69024}, + pos: position{line: 2231, col: 33, offset: 68913}, expr: &ruleRefExpr{ - pos: position{line: 2236, col: 34, offset: 69025}, + pos: position{line: 2231, col: 34, offset: 68914}, name: "IdentifierRest", }, }, @@ -16275,20 +16238,20 @@ var g = &grammar{ }, { name: "DROP", - pos: position{line: 2237, col: 1, offset: 69040}, + pos: position{line: 2232, col: 1, offset: 68929}, expr: &seqExpr{ - pos: position{line: 2237, col: 14, offset: 69053}, + pos: position{line: 2232, col: 14, offset: 68942}, exprs: []any{ &litMatcher{ - pos: position{line: 2237, col: 14, offset: 69053}, + pos: position{line: 2232, col: 14, offset: 68942}, val: "drop", ignoreCase: true, want: "\"DROP\"i", }, ¬Expr{ - pos: position{line: 2237, col: 33, offset: 69072}, + pos: position{line: 2232, col: 33, offset: 68961}, expr: &ruleRefExpr{ - pos: position{line: 2237, col: 34, offset: 69073}, + pos: position{line: 2232, col: 34, offset: 68962}, name: "IdentifierRest", }, }, @@ -16299,20 +16262,20 @@ var g = &grammar{ }, { name: "ELSE", - pos: position{line: 2238, col: 1, offset: 69089}, + pos: position{line: 2233, col: 1, offset: 68978}, expr: &seqExpr{ - pos: position{line: 2238, col: 14, offset: 69102}, + pos: position{line: 2233, col: 14, offset: 68991}, exprs: []any{ &litMatcher{ - pos: position{line: 2238, col: 14, offset: 69102}, + pos: position{line: 2233, col: 14, offset: 68991}, val: "else", ignoreCase: true, want: "\"ELSE\"i", }, ¬Expr{ - pos: position{line: 2238, col: 33, offset: 69121}, + pos: position{line: 2233, col: 33, offset: 69010}, expr: &ruleRefExpr{ - pos: position{line: 2238, col: 34, offset: 69122}, + pos: position{line: 2233, col: 34, offset: 69011}, name: "IdentifierRest", }, }, @@ -16323,20 +16286,20 @@ var g = &grammar{ }, { name: "END", - pos: position{line: 2239, col: 1, offset: 69137}, + pos: position{line: 2234, col: 1, offset: 69026}, expr: &seqExpr{ - pos: position{line: 2239, col: 14, offset: 69150}, + pos: position{line: 2234, col: 14, offset: 69039}, exprs: []any{ &litMatcher{ - pos: position{line: 2239, col: 14, offset: 69150}, + pos: position{line: 2234, col: 14, offset: 69039}, val: "end", ignoreCase: true, want: "\"END\"i", }, ¬Expr{ - pos: position{line: 2239, col: 33, offset: 69169}, + pos: position{line: 2234, col: 33, offset: 69058}, expr: &ruleRefExpr{ - pos: position{line: 2239, col: 34, offset: 69170}, + pos: position{line: 2234, col: 34, offset: 69059}, name: "IdentifierRest", }, }, @@ -16347,20 +16310,20 @@ var g = &grammar{ }, { name: "ERROR", - pos: position{line: 2240, col: 1, offset: 69185}, + pos: position{line: 2235, col: 1, offset: 69074}, expr: &seqExpr{ - pos: position{line: 2240, col: 14, offset: 69198}, + pos: position{line: 2235, col: 14, offset: 69087}, exprs: []any{ &litMatcher{ - pos: position{line: 2240, col: 14, offset: 69198}, + pos: position{line: 2235, col: 14, offset: 69087}, val: "error", ignoreCase: true, want: "\"ERROR\"i", }, ¬Expr{ - pos: position{line: 2240, col: 33, offset: 69217}, + pos: position{line: 2235, col: 33, offset: 69106}, expr: &ruleRefExpr{ - pos: position{line: 2240, col: 34, offset: 69218}, + pos: position{line: 2235, col: 34, offset: 69107}, name: "IdentifierRest", }, }, @@ -16371,20 +16334,20 @@ var g = &grammar{ }, { name: "EVAL", - pos: position{line: 2241, col: 1, offset: 69233}, + pos: position{line: 2236, col: 1, offset: 69122}, expr: &seqExpr{ - pos: position{line: 2241, col: 14, offset: 69246}, + pos: position{line: 2236, col: 14, offset: 69135}, exprs: []any{ &litMatcher{ - pos: position{line: 2241, col: 14, offset: 69246}, + pos: position{line: 2236, col: 14, offset: 69135}, val: "eval", ignoreCase: true, want: "\"EVAL\"i", }, ¬Expr{ - pos: position{line: 2241, col: 33, offset: 69265}, + pos: position{line: 2236, col: 33, offset: 69154}, expr: &ruleRefExpr{ - pos: position{line: 2241, col: 34, offset: 69266}, + pos: position{line: 2236, col: 34, offset: 69155}, name: "IdentifierRest", }, }, @@ -16395,20 +16358,20 @@ var g = &grammar{ }, { name: "EXPLODE", - pos: position{line: 2242, col: 1, offset: 69281}, + pos: position{line: 2237, col: 1, offset: 69170}, expr: &seqExpr{ - pos: position{line: 2242, col: 14, offset: 69294}, + pos: position{line: 2237, col: 14, offset: 69183}, exprs: []any{ &litMatcher{ - pos: position{line: 2242, col: 14, offset: 69294}, + pos: position{line: 2237, col: 14, offset: 69183}, val: "explode", ignoreCase: true, want: "\"EXPLODE\"i", }, ¬Expr{ - pos: position{line: 2242, col: 33, offset: 69313}, + pos: position{line: 2237, col: 33, offset: 69202}, expr: &ruleRefExpr{ - pos: position{line: 2242, col: 34, offset: 69314}, + pos: position{line: 2237, col: 34, offset: 69203}, name: "IdentifierRest", }, }, @@ -16419,20 +16382,20 @@ var g = &grammar{ }, { name: "FALSE", - pos: position{line: 2243, col: 1, offset: 69329}, + pos: position{line: 2238, col: 1, offset: 69218}, expr: &seqExpr{ - pos: position{line: 2243, col: 14, offset: 69342}, + pos: position{line: 2238, col: 14, offset: 69231}, exprs: []any{ &litMatcher{ - pos: position{line: 2243, col: 14, offset: 69342}, + pos: position{line: 2238, col: 14, offset: 69231}, val: "false", ignoreCase: true, want: "\"FALSE\"i", }, ¬Expr{ - pos: position{line: 2243, col: 33, offset: 69361}, + pos: position{line: 2238, col: 33, offset: 69250}, expr: &ruleRefExpr{ - pos: position{line: 2243, col: 34, offset: 69362}, + pos: position{line: 2238, col: 34, offset: 69251}, name: "IdentifierRest", }, }, @@ -16443,20 +16406,20 @@ var g = &grammar{ }, { name: "FIRST", - pos: position{line: 2244, col: 1, offset: 69377}, + pos: position{line: 2239, col: 1, offset: 69266}, expr: &seqExpr{ - pos: position{line: 2244, col: 14, offset: 69390}, + pos: position{line: 2239, col: 14, offset: 69279}, exprs: []any{ &litMatcher{ - pos: position{line: 2244, col: 14, offset: 69390}, + pos: position{line: 2239, col: 14, offset: 69279}, val: "first", ignoreCase: true, want: "\"FIRST\"i", }, ¬Expr{ - pos: position{line: 2244, col: 33, offset: 69409}, + pos: position{line: 2239, col: 33, offset: 69298}, expr: &ruleRefExpr{ - pos: position{line: 2244, col: 34, offset: 69410}, + pos: position{line: 2239, col: 34, offset: 69299}, name: "IdentifierRest", }, }, @@ -16467,20 +16430,20 @@ var g = &grammar{ }, { name: "FORK", - pos: position{line: 2245, col: 1, offset: 69425}, + pos: position{line: 2240, col: 1, offset: 69314}, expr: &seqExpr{ - pos: position{line: 2245, col: 14, offset: 69438}, + pos: position{line: 2240, col: 14, offset: 69327}, exprs: []any{ &litMatcher{ - pos: position{line: 2245, col: 14, offset: 69438}, + pos: position{line: 2240, col: 14, offset: 69327}, val: "fork", ignoreCase: true, want: "\"FORK\"i", }, ¬Expr{ - pos: position{line: 2245, col: 33, offset: 69457}, + pos: position{line: 2240, col: 33, offset: 69346}, expr: &ruleRefExpr{ - pos: position{line: 2245, col: 34, offset: 69458}, + pos: position{line: 2240, col: 34, offset: 69347}, name: "IdentifierRest", }, }, @@ -16491,20 +16454,20 @@ var g = &grammar{ }, { name: "FORMAT", - pos: position{line: 2246, col: 1, offset: 69473}, + pos: position{line: 2241, col: 1, offset: 69362}, expr: &seqExpr{ - pos: position{line: 2246, col: 14, offset: 69486}, + pos: position{line: 2241, col: 14, offset: 69375}, exprs: []any{ &litMatcher{ - pos: position{line: 2246, col: 14, offset: 69486}, + pos: position{line: 2241, col: 14, offset: 69375}, val: "format", ignoreCase: true, want: "\"FORMAT\"i", }, ¬Expr{ - pos: position{line: 2246, col: 33, offset: 69505}, + pos: position{line: 2241, col: 33, offset: 69394}, expr: &ruleRefExpr{ - pos: position{line: 2246, col: 34, offset: 69506}, + pos: position{line: 2241, col: 34, offset: 69395}, name: "IdentifierRest", }, }, @@ -16515,20 +16478,20 @@ var g = &grammar{ }, { name: "FROM", - pos: position{line: 2247, col: 1, offset: 69521}, + pos: position{line: 2242, col: 1, offset: 69410}, expr: &seqExpr{ - pos: position{line: 2247, col: 14, offset: 69534}, + pos: position{line: 2242, col: 14, offset: 69423}, exprs: []any{ &litMatcher{ - pos: position{line: 2247, col: 14, offset: 69534}, + pos: position{line: 2242, col: 14, offset: 69423}, val: "from", ignoreCase: true, want: "\"FROM\"i", }, ¬Expr{ - pos: position{line: 2247, col: 33, offset: 69553}, + pos: position{line: 2242, col: 33, offset: 69442}, expr: &ruleRefExpr{ - pos: position{line: 2247, col: 34, offset: 69554}, + pos: position{line: 2242, col: 34, offset: 69443}, name: "IdentifierRest", }, }, @@ -16539,20 +16502,20 @@ var g = &grammar{ }, { name: "FULL", - pos: position{line: 2248, col: 1, offset: 69569}, + pos: position{line: 2243, col: 1, offset: 69458}, expr: &seqExpr{ - pos: position{line: 2248, col: 14, offset: 69582}, + pos: position{line: 2243, col: 14, offset: 69471}, exprs: []any{ &litMatcher{ - pos: position{line: 2248, col: 14, offset: 69582}, + pos: position{line: 2243, col: 14, offset: 69471}, val: "full", ignoreCase: true, want: "\"FULL\"i", }, ¬Expr{ - pos: position{line: 2248, col: 33, offset: 69601}, + pos: position{line: 2243, col: 33, offset: 69490}, expr: &ruleRefExpr{ - pos: position{line: 2248, col: 34, offset: 69602}, + pos: position{line: 2243, col: 34, offset: 69491}, name: "IdentifierRest", }, }, @@ -16563,20 +16526,20 @@ var g = &grammar{ }, { name: "FUNC", - pos: position{line: 2249, col: 1, offset: 69617}, + pos: position{line: 2244, col: 1, offset: 69506}, expr: &seqExpr{ - pos: position{line: 2249, col: 14, offset: 69630}, + pos: position{line: 2244, col: 14, offset: 69519}, exprs: []any{ &litMatcher{ - pos: position{line: 2249, col: 14, offset: 69630}, + pos: position{line: 2244, col: 14, offset: 69519}, val: "func", ignoreCase: true, want: "\"FUNC\"i", }, ¬Expr{ - pos: position{line: 2249, col: 33, offset: 69649}, + pos: position{line: 2244, col: 33, offset: 69538}, expr: &ruleRefExpr{ - pos: position{line: 2249, col: 34, offset: 69650}, + pos: position{line: 2244, col: 34, offset: 69539}, name: "IdentifierRest", }, }, @@ -16587,20 +16550,20 @@ var g = &grammar{ }, { name: "FUSE", - pos: position{line: 2250, col: 1, offset: 69665}, + pos: position{line: 2245, col: 1, offset: 69554}, expr: &seqExpr{ - pos: position{line: 2250, col: 14, offset: 69678}, + pos: position{line: 2245, col: 14, offset: 69567}, exprs: []any{ &litMatcher{ - pos: position{line: 2250, col: 14, offset: 69678}, + pos: position{line: 2245, col: 14, offset: 69567}, val: "fuse", ignoreCase: true, want: "\"FUSE\"i", }, ¬Expr{ - pos: position{line: 2250, col: 33, offset: 69697}, + pos: position{line: 2245, col: 33, offset: 69586}, expr: &ruleRefExpr{ - pos: position{line: 2250, col: 34, offset: 69698}, + pos: position{line: 2245, col: 34, offset: 69587}, name: "IdentifierRest", }, }, @@ -16611,20 +16574,20 @@ var g = &grammar{ }, { name: "GREP", - pos: position{line: 2251, col: 1, offset: 69713}, + pos: position{line: 2246, col: 1, offset: 69602}, expr: &seqExpr{ - pos: position{line: 2251, col: 14, offset: 69726}, + pos: position{line: 2246, col: 14, offset: 69615}, exprs: []any{ &litMatcher{ - pos: position{line: 2251, col: 14, offset: 69726}, + pos: position{line: 2246, col: 14, offset: 69615}, val: "grep", ignoreCase: true, want: "\"GREP\"i", }, ¬Expr{ - pos: position{line: 2251, col: 33, offset: 69745}, + pos: position{line: 2246, col: 33, offset: 69634}, expr: &ruleRefExpr{ - pos: position{line: 2251, col: 34, offset: 69746}, + pos: position{line: 2246, col: 34, offset: 69635}, name: "IdentifierRest", }, }, @@ -16635,20 +16598,20 @@ var g = &grammar{ }, { name: "GROUP", - pos: position{line: 2252, col: 1, offset: 69761}, + pos: position{line: 2247, col: 1, offset: 69650}, expr: &seqExpr{ - pos: position{line: 2252, col: 14, offset: 69774}, + pos: position{line: 2247, col: 14, offset: 69663}, exprs: []any{ &litMatcher{ - pos: position{line: 2252, col: 14, offset: 69774}, + pos: position{line: 2247, col: 14, offset: 69663}, val: "group", ignoreCase: true, want: "\"GROUP\"i", }, ¬Expr{ - pos: position{line: 2252, col: 33, offset: 69793}, + pos: position{line: 2247, col: 33, offset: 69682}, expr: &ruleRefExpr{ - pos: position{line: 2252, col: 34, offset: 69794}, + pos: position{line: 2247, col: 34, offset: 69683}, name: "IdentifierRest", }, }, @@ -16659,20 +16622,20 @@ var g = &grammar{ }, { name: "HAVING", - pos: position{line: 2253, col: 1, offset: 69809}, + pos: position{line: 2248, col: 1, offset: 69698}, expr: &seqExpr{ - pos: position{line: 2253, col: 14, offset: 69822}, + pos: position{line: 2248, col: 14, offset: 69711}, exprs: []any{ &litMatcher{ - pos: position{line: 2253, col: 14, offset: 69822}, + pos: position{line: 2248, col: 14, offset: 69711}, val: "having", ignoreCase: true, want: "\"HAVING\"i", }, ¬Expr{ - pos: position{line: 2253, col: 33, offset: 69841}, + pos: position{line: 2248, col: 33, offset: 69730}, expr: &ruleRefExpr{ - pos: position{line: 2253, col: 34, offset: 69842}, + pos: position{line: 2248, col: 34, offset: 69731}, name: "IdentifierRest", }, }, @@ -16683,20 +16646,20 @@ var g = &grammar{ }, { name: "HEAD", - pos: position{line: 2254, col: 1, offset: 69857}, + pos: position{line: 2249, col: 1, offset: 69746}, expr: &seqExpr{ - pos: position{line: 2254, col: 14, offset: 69870}, + pos: position{line: 2249, col: 14, offset: 69759}, exprs: []any{ &litMatcher{ - pos: position{line: 2254, col: 14, offset: 69870}, + pos: position{line: 2249, col: 14, offset: 69759}, val: "head", ignoreCase: true, want: "\"HEAD\"i", }, ¬Expr{ - pos: position{line: 2254, col: 33, offset: 69889}, + pos: position{line: 2249, col: 33, offset: 69778}, expr: &ruleRefExpr{ - pos: position{line: 2254, col: 34, offset: 69890}, + pos: position{line: 2249, col: 34, offset: 69779}, name: "IdentifierRest", }, }, @@ -16707,20 +16670,20 @@ var g = &grammar{ }, { name: "HEADERS", - pos: position{line: 2255, col: 1, offset: 69906}, + pos: position{line: 2250, col: 1, offset: 69795}, expr: &seqExpr{ - pos: position{line: 2255, col: 14, offset: 69919}, + pos: position{line: 2250, col: 14, offset: 69808}, exprs: []any{ &litMatcher{ - pos: position{line: 2255, col: 14, offset: 69919}, + pos: position{line: 2250, col: 14, offset: 69808}, val: "headers", ignoreCase: true, want: "\"HEADERS\"i", }, ¬Expr{ - pos: position{line: 2255, col: 33, offset: 69938}, + pos: position{line: 2250, col: 33, offset: 69827}, expr: &ruleRefExpr{ - pos: position{line: 2255, col: 34, offset: 69939}, + pos: position{line: 2250, col: 34, offset: 69828}, name: "IdentifierRest", }, }, @@ -16731,20 +16694,20 @@ var g = &grammar{ }, { name: "IN", - pos: position{line: 2256, col: 1, offset: 69954}, + pos: position{line: 2251, col: 1, offset: 69843}, expr: &seqExpr{ - pos: position{line: 2256, col: 14, offset: 69967}, + pos: position{line: 2251, col: 14, offset: 69856}, exprs: []any{ &litMatcher{ - pos: position{line: 2256, col: 14, offset: 69967}, + pos: position{line: 2251, col: 14, offset: 69856}, val: "in", ignoreCase: true, want: "\"IN\"i", }, ¬Expr{ - pos: position{line: 2256, col: 33, offset: 69986}, + pos: position{line: 2251, col: 33, offset: 69875}, expr: &ruleRefExpr{ - pos: position{line: 2256, col: 34, offset: 69987}, + pos: position{line: 2251, col: 34, offset: 69876}, name: "IdentifierRest", }, }, @@ -16755,20 +16718,20 @@ var g = &grammar{ }, { name: "INNER", - pos: position{line: 2257, col: 1, offset: 70002}, + pos: position{line: 2252, col: 1, offset: 69891}, expr: &seqExpr{ - pos: position{line: 2257, col: 14, offset: 70015}, + pos: position{line: 2252, col: 14, offset: 69904}, exprs: []any{ &litMatcher{ - pos: position{line: 2257, col: 14, offset: 70015}, + pos: position{line: 2252, col: 14, offset: 69904}, val: "inner", ignoreCase: true, want: "\"INNER\"i", }, ¬Expr{ - pos: position{line: 2257, col: 33, offset: 70034}, + pos: position{line: 2252, col: 33, offset: 69923}, expr: &ruleRefExpr{ - pos: position{line: 2257, col: 34, offset: 70035}, + pos: position{line: 2252, col: 34, offset: 69924}, name: "IdentifierRest", }, }, @@ -16779,20 +16742,20 @@ var g = &grammar{ }, { name: "IS", - pos: position{line: 2258, col: 1, offset: 70050}, + pos: position{line: 2253, col: 1, offset: 69939}, expr: &seqExpr{ - pos: position{line: 2258, col: 14, offset: 70063}, + pos: position{line: 2253, col: 14, offset: 69952}, exprs: []any{ &litMatcher{ - pos: position{line: 2258, col: 14, offset: 70063}, + pos: position{line: 2253, col: 14, offset: 69952}, val: "is", ignoreCase: true, want: "\"IS\"i", }, ¬Expr{ - pos: position{line: 2258, col: 33, offset: 70082}, + pos: position{line: 2253, col: 33, offset: 69971}, expr: &ruleRefExpr{ - pos: position{line: 2258, col: 34, offset: 70083}, + pos: position{line: 2253, col: 34, offset: 69972}, name: "IdentifierRest", }, }, @@ -16803,20 +16766,20 @@ var g = &grammar{ }, { name: "JOIN", - pos: position{line: 2259, col: 1, offset: 70098}, + pos: position{line: 2254, col: 1, offset: 69987}, expr: &seqExpr{ - pos: position{line: 2259, col: 14, offset: 70111}, + pos: position{line: 2254, col: 14, offset: 70000}, exprs: []any{ &litMatcher{ - pos: position{line: 2259, col: 14, offset: 70111}, + pos: position{line: 2254, col: 14, offset: 70000}, val: "join", ignoreCase: true, want: "\"JOIN\"i", }, ¬Expr{ - pos: position{line: 2259, col: 33, offset: 70130}, + pos: position{line: 2254, col: 33, offset: 70019}, expr: &ruleRefExpr{ - pos: position{line: 2259, col: 34, offset: 70131}, + pos: position{line: 2254, col: 34, offset: 70020}, name: "IdentifierRest", }, }, @@ -16827,20 +16790,20 @@ var g = &grammar{ }, { name: "LAST", - pos: position{line: 2260, col: 1, offset: 70146}, + pos: position{line: 2255, col: 1, offset: 70035}, expr: &seqExpr{ - pos: position{line: 2260, col: 14, offset: 70159}, + pos: position{line: 2255, col: 14, offset: 70048}, exprs: []any{ &litMatcher{ - pos: position{line: 2260, col: 14, offset: 70159}, + pos: position{line: 2255, col: 14, offset: 70048}, val: "last", ignoreCase: true, want: "\"LAST\"i", }, ¬Expr{ - pos: position{line: 2260, col: 33, offset: 70178}, + pos: position{line: 2255, col: 33, offset: 70067}, expr: &ruleRefExpr{ - pos: position{line: 2260, col: 34, offset: 70179}, + pos: position{line: 2255, col: 34, offset: 70068}, name: "IdentifierRest", }, }, @@ -16851,20 +16814,20 @@ var g = &grammar{ }, { name: "LEFT", - pos: position{line: 2261, col: 1, offset: 70194}, + pos: position{line: 2256, col: 1, offset: 70083}, expr: &seqExpr{ - pos: position{line: 2261, col: 14, offset: 70207}, + pos: position{line: 2256, col: 14, offset: 70096}, exprs: []any{ &litMatcher{ - pos: position{line: 2261, col: 14, offset: 70207}, + pos: position{line: 2256, col: 14, offset: 70096}, val: "left", ignoreCase: true, want: "\"LEFT\"i", }, ¬Expr{ - pos: position{line: 2261, col: 33, offset: 70226}, + pos: position{line: 2256, col: 33, offset: 70115}, expr: &ruleRefExpr{ - pos: position{line: 2261, col: 34, offset: 70227}, + pos: position{line: 2256, col: 34, offset: 70116}, name: "IdentifierRest", }, }, @@ -16875,20 +16838,20 @@ var g = &grammar{ }, { name: "LIKE", - pos: position{line: 2262, col: 1, offset: 70242}, + pos: position{line: 2257, col: 1, offset: 70131}, expr: &seqExpr{ - pos: position{line: 2262, col: 14, offset: 70255}, + pos: position{line: 2257, col: 14, offset: 70144}, exprs: []any{ &litMatcher{ - pos: position{line: 2262, col: 14, offset: 70255}, + pos: position{line: 2257, col: 14, offset: 70144}, val: "like", ignoreCase: true, want: "\"LIKE\"i", }, ¬Expr{ - pos: position{line: 2262, col: 32, offset: 70273}, + pos: position{line: 2257, col: 32, offset: 70162}, expr: &ruleRefExpr{ - pos: position{line: 2262, col: 33, offset: 70274}, + pos: position{line: 2257, col: 33, offset: 70163}, name: "IdentifierRest", }, }, @@ -16899,20 +16862,20 @@ var g = &grammar{ }, { name: "LIMIT", - pos: position{line: 2263, col: 1, offset: 70289}, + pos: position{line: 2258, col: 1, offset: 70178}, expr: &seqExpr{ - pos: position{line: 2263, col: 14, offset: 70302}, + pos: position{line: 2258, col: 14, offset: 70191}, exprs: []any{ &litMatcher{ - pos: position{line: 2263, col: 14, offset: 70302}, + pos: position{line: 2258, col: 14, offset: 70191}, val: "limit", ignoreCase: true, want: "\"LIMIT\"i", }, ¬Expr{ - pos: position{line: 2263, col: 33, offset: 70321}, + pos: position{line: 2258, col: 33, offset: 70210}, expr: &ruleRefExpr{ - pos: position{line: 2263, col: 34, offset: 70322}, + pos: position{line: 2258, col: 34, offset: 70211}, name: "IdentifierRest", }, }, @@ -16923,20 +16886,20 @@ var g = &grammar{ }, { name: "LOAD", - pos: position{line: 2264, col: 1, offset: 70337}, + pos: position{line: 2259, col: 1, offset: 70226}, expr: &seqExpr{ - pos: position{line: 2264, col: 14, offset: 70350}, + pos: position{line: 2259, col: 14, offset: 70239}, exprs: []any{ &litMatcher{ - pos: position{line: 2264, col: 14, offset: 70350}, + pos: position{line: 2259, col: 14, offset: 70239}, val: "load", ignoreCase: true, want: "\"LOAD\"i", }, ¬Expr{ - pos: position{line: 2264, col: 33, offset: 70369}, + pos: position{line: 2259, col: 33, offset: 70258}, expr: &ruleRefExpr{ - pos: position{line: 2264, col: 34, offset: 70370}, + pos: position{line: 2259, col: 34, offset: 70259}, name: "IdentifierRest", }, }, @@ -16947,20 +16910,20 @@ var g = &grammar{ }, { name: "MATERIALIZED", - pos: position{line: 2265, col: 1, offset: 70385}, + pos: position{line: 2260, col: 1, offset: 70274}, expr: &seqExpr{ - pos: position{line: 2265, col: 16, offset: 70400}, + pos: position{line: 2260, col: 16, offset: 70289}, exprs: []any{ &litMatcher{ - pos: position{line: 2265, col: 16, offset: 70400}, + pos: position{line: 2260, col: 16, offset: 70289}, val: "materialized", ignoreCase: true, want: "\"MATERIALIZED\"i", }, ¬Expr{ - pos: position{line: 2265, col: 33, offset: 70417}, + pos: position{line: 2260, col: 33, offset: 70306}, expr: &ruleRefExpr{ - pos: position{line: 2265, col: 34, offset: 70418}, + pos: position{line: 2260, col: 34, offset: 70307}, name: "IdentifierRest", }, }, @@ -16971,20 +16934,20 @@ var g = &grammar{ }, { name: "MERGE", - pos: position{line: 2266, col: 1, offset: 70433}, + pos: position{line: 2261, col: 1, offset: 70322}, expr: &seqExpr{ - pos: position{line: 2266, col: 14, offset: 70446}, + pos: position{line: 2261, col: 14, offset: 70335}, exprs: []any{ &litMatcher{ - pos: position{line: 2266, col: 14, offset: 70446}, + pos: position{line: 2261, col: 14, offset: 70335}, val: "merge", ignoreCase: true, want: "\"MERGE\"i", }, ¬Expr{ - pos: position{line: 2266, col: 33, offset: 70465}, + pos: position{line: 2261, col: 33, offset: 70354}, expr: &ruleRefExpr{ - pos: position{line: 2266, col: 34, offset: 70466}, + pos: position{line: 2261, col: 34, offset: 70355}, name: "IdentifierRest", }, }, @@ -16995,20 +16958,20 @@ var g = &grammar{ }, { name: "MESSAGE", - pos: position{line: 2267, col: 1, offset: 70481}, + pos: position{line: 2262, col: 1, offset: 70370}, expr: &seqExpr{ - pos: position{line: 2267, col: 14, offset: 70494}, + pos: position{line: 2262, col: 14, offset: 70383}, exprs: []any{ &litMatcher{ - pos: position{line: 2267, col: 14, offset: 70494}, + pos: position{line: 2262, col: 14, offset: 70383}, val: "message", ignoreCase: true, want: "\"MESSAGE\"i", }, ¬Expr{ - pos: position{line: 2267, col: 33, offset: 70513}, + pos: position{line: 2262, col: 33, offset: 70402}, expr: &ruleRefExpr{ - pos: position{line: 2267, col: 34, offset: 70514}, + pos: position{line: 2262, col: 34, offset: 70403}, name: "IdentifierRest", }, }, @@ -17019,20 +16982,20 @@ var g = &grammar{ }, { name: "META", - pos: position{line: 2268, col: 1, offset: 70529}, + pos: position{line: 2263, col: 1, offset: 70418}, expr: &seqExpr{ - pos: position{line: 2268, col: 14, offset: 70542}, + pos: position{line: 2263, col: 14, offset: 70431}, exprs: []any{ &litMatcher{ - pos: position{line: 2268, col: 14, offset: 70542}, + pos: position{line: 2263, col: 14, offset: 70431}, val: "meta", ignoreCase: true, want: "\"META\"i", }, ¬Expr{ - pos: position{line: 2268, col: 33, offset: 70561}, + pos: position{line: 2263, col: 33, offset: 70450}, expr: &ruleRefExpr{ - pos: position{line: 2268, col: 34, offset: 70562}, + pos: position{line: 2263, col: 34, offset: 70451}, name: "IdentifierRest", }, }, @@ -17043,20 +17006,20 @@ var g = &grammar{ }, { name: "METHOD", - pos: position{line: 2269, col: 1, offset: 70577}, + pos: position{line: 2264, col: 1, offset: 70466}, expr: &seqExpr{ - pos: position{line: 2269, col: 14, offset: 70590}, + pos: position{line: 2264, col: 14, offset: 70479}, exprs: []any{ &litMatcher{ - pos: position{line: 2269, col: 14, offset: 70590}, + pos: position{line: 2264, col: 14, offset: 70479}, val: "method", ignoreCase: true, want: "\"METHOD\"i", }, ¬Expr{ - pos: position{line: 2269, col: 33, offset: 70609}, + pos: position{line: 2264, col: 33, offset: 70498}, expr: &ruleRefExpr{ - pos: position{line: 2269, col: 34, offset: 70610}, + pos: position{line: 2264, col: 34, offset: 70499}, name: "IdentifierRest", }, }, @@ -17067,20 +17030,20 @@ var g = &grammar{ }, { name: "NOT", - pos: position{line: 2270, col: 1, offset: 70625}, + pos: position{line: 2265, col: 1, offset: 70514}, expr: &seqExpr{ - pos: position{line: 2270, col: 14, offset: 70638}, + pos: position{line: 2265, col: 14, offset: 70527}, exprs: []any{ &litMatcher{ - pos: position{line: 2270, col: 14, offset: 70638}, + pos: position{line: 2265, col: 14, offset: 70527}, val: "not", ignoreCase: true, want: "\"NOT\"i", }, ¬Expr{ - pos: position{line: 2270, col: 33, offset: 70657}, + pos: position{line: 2265, col: 33, offset: 70546}, expr: &ruleRefExpr{ - pos: position{line: 2270, col: 34, offset: 70658}, + pos: position{line: 2265, col: 34, offset: 70547}, name: "IdentifierRest", }, }, @@ -17091,20 +17054,20 @@ var g = &grammar{ }, { name: "NULL", - pos: position{line: 2271, col: 1, offset: 70673}, + pos: position{line: 2266, col: 1, offset: 70562}, expr: &seqExpr{ - pos: position{line: 2271, col: 14, offset: 70686}, + pos: position{line: 2266, col: 14, offset: 70575}, exprs: []any{ &litMatcher{ - pos: position{line: 2271, col: 14, offset: 70686}, + pos: position{line: 2266, col: 14, offset: 70575}, val: "null", ignoreCase: true, want: "\"NULL\"i", }, ¬Expr{ - pos: position{line: 2271, col: 33, offset: 70705}, + pos: position{line: 2266, col: 33, offset: 70594}, expr: &ruleRefExpr{ - pos: position{line: 2271, col: 34, offset: 70706}, + pos: position{line: 2266, col: 34, offset: 70595}, name: "IdentifierRest", }, }, @@ -17115,20 +17078,20 @@ var g = &grammar{ }, { name: "NULLS", - pos: position{line: 2272, col: 1, offset: 70721}, + pos: position{line: 2267, col: 1, offset: 70610}, expr: &seqExpr{ - pos: position{line: 2272, col: 14, offset: 70734}, + pos: position{line: 2267, col: 14, offset: 70623}, exprs: []any{ &litMatcher{ - pos: position{line: 2272, col: 14, offset: 70734}, + pos: position{line: 2267, col: 14, offset: 70623}, val: "nulls", ignoreCase: true, want: "\"NULLS\"i", }, ¬Expr{ - pos: position{line: 2272, col: 33, offset: 70753}, + pos: position{line: 2267, col: 33, offset: 70642}, expr: &ruleRefExpr{ - pos: position{line: 2272, col: 34, offset: 70754}, + pos: position{line: 2267, col: 34, offset: 70643}, name: "IdentifierRest", }, }, @@ -17139,20 +17102,20 @@ var g = &grammar{ }, { name: "OFFSET", - pos: position{line: 2273, col: 1, offset: 70769}, + pos: position{line: 2268, col: 1, offset: 70658}, expr: &seqExpr{ - pos: position{line: 2273, col: 14, offset: 70782}, + pos: position{line: 2268, col: 14, offset: 70671}, exprs: []any{ &litMatcher{ - pos: position{line: 2273, col: 14, offset: 70782}, + pos: position{line: 2268, col: 14, offset: 70671}, val: "offset", ignoreCase: true, want: "\"OFFSET\"i", }, ¬Expr{ - pos: position{line: 2273, col: 33, offset: 70801}, + pos: position{line: 2268, col: 33, offset: 70690}, expr: &ruleRefExpr{ - pos: position{line: 2273, col: 34, offset: 70802}, + pos: position{line: 2268, col: 34, offset: 70691}, name: "IdentifierRest", }, }, @@ -17163,20 +17126,20 @@ var g = &grammar{ }, { name: "ON", - pos: position{line: 2274, col: 1, offset: 70817}, + pos: position{line: 2269, col: 1, offset: 70706}, expr: &seqExpr{ - pos: position{line: 2274, col: 14, offset: 70830}, + pos: position{line: 2269, col: 14, offset: 70719}, exprs: []any{ &litMatcher{ - pos: position{line: 2274, col: 14, offset: 70830}, + pos: position{line: 2269, col: 14, offset: 70719}, val: "on", ignoreCase: true, want: "\"ON\"i", }, ¬Expr{ - pos: position{line: 2274, col: 33, offset: 70849}, + pos: position{line: 2269, col: 33, offset: 70738}, expr: &ruleRefExpr{ - pos: position{line: 2274, col: 34, offset: 70850}, + pos: position{line: 2269, col: 34, offset: 70739}, name: "IdentifierRest", }, }, @@ -17187,20 +17150,20 @@ var g = &grammar{ }, { name: "OP", - pos: position{line: 2275, col: 1, offset: 70865}, + pos: position{line: 2270, col: 1, offset: 70754}, expr: &seqExpr{ - pos: position{line: 2275, col: 14, offset: 70878}, + pos: position{line: 2270, col: 14, offset: 70767}, exprs: []any{ &litMatcher{ - pos: position{line: 2275, col: 14, offset: 70878}, + pos: position{line: 2270, col: 14, offset: 70767}, val: "op", ignoreCase: true, want: "\"OP\"i", }, ¬Expr{ - pos: position{line: 2275, col: 33, offset: 70897}, + pos: position{line: 2270, col: 33, offset: 70786}, expr: &ruleRefExpr{ - pos: position{line: 2275, col: 34, offset: 70898}, + pos: position{line: 2270, col: 34, offset: 70787}, name: "IdentifierRest", }, }, @@ -17211,23 +17174,23 @@ var g = &grammar{ }, { name: "OR", - pos: position{line: 2276, col: 1, offset: 70913}, + pos: position{line: 2271, col: 1, offset: 70802}, expr: &actionExpr{ - pos: position{line: 2276, col: 14, offset: 70926}, + pos: position{line: 2271, col: 14, offset: 70815}, run: (*parser).callonOR1, expr: &seqExpr{ - pos: position{line: 2276, col: 14, offset: 70926}, + pos: position{line: 2271, col: 14, offset: 70815}, exprs: []any{ &litMatcher{ - pos: position{line: 2276, col: 14, offset: 70926}, + pos: position{line: 2271, col: 14, offset: 70815}, val: "or", ignoreCase: true, want: "\"OR\"i", }, ¬Expr{ - pos: position{line: 2276, col: 33, offset: 70945}, + pos: position{line: 2271, col: 33, offset: 70834}, expr: &ruleRefExpr{ - pos: position{line: 2276, col: 34, offset: 70946}, + pos: position{line: 2271, col: 34, offset: 70835}, name: "IdentifierRest", }, }, @@ -17239,20 +17202,20 @@ var g = &grammar{ }, { name: "ORDER", - pos: position{line: 2277, col: 1, offset: 70982}, + pos: position{line: 2272, col: 1, offset: 70871}, expr: &seqExpr{ - pos: position{line: 2277, col: 14, offset: 70995}, + pos: position{line: 2272, col: 14, offset: 70884}, exprs: []any{ &litMatcher{ - pos: position{line: 2277, col: 14, offset: 70995}, + pos: position{line: 2272, col: 14, offset: 70884}, val: "order", ignoreCase: true, want: "\"ORDER\"i", }, ¬Expr{ - pos: position{line: 2277, col: 33, offset: 71014}, + pos: position{line: 2272, col: 33, offset: 70903}, expr: &ruleRefExpr{ - pos: position{line: 2277, col: 34, offset: 71015}, + pos: position{line: 2272, col: 34, offset: 70904}, name: "IdentifierRest", }, }, @@ -17263,20 +17226,20 @@ var g = &grammar{ }, { name: "ORDINALITY", - pos: position{line: 2278, col: 1, offset: 71030}, + pos: position{line: 2273, col: 1, offset: 70919}, expr: &seqExpr{ - pos: position{line: 2278, col: 14, offset: 71043}, + pos: position{line: 2273, col: 14, offset: 70932}, exprs: []any{ &litMatcher{ - pos: position{line: 2278, col: 14, offset: 71043}, + pos: position{line: 2273, col: 14, offset: 70932}, val: "ordinality", ignoreCase: true, want: "\"ORDINALITY\"i", }, ¬Expr{ - pos: position{line: 2278, col: 33, offset: 71062}, + pos: position{line: 2273, col: 33, offset: 70951}, expr: &ruleRefExpr{ - pos: position{line: 2278, col: 34, offset: 71063}, + pos: position{line: 2273, col: 34, offset: 70952}, name: "IdentifierRest", }, }, @@ -17287,20 +17250,20 @@ var g = &grammar{ }, { name: "OUTER", - pos: position{line: 2279, col: 1, offset: 71078}, + pos: position{line: 2274, col: 1, offset: 70967}, expr: &seqExpr{ - pos: position{line: 2279, col: 14, offset: 71091}, + pos: position{line: 2274, col: 14, offset: 70980}, exprs: []any{ &litMatcher{ - pos: position{line: 2279, col: 14, offset: 71091}, + pos: position{line: 2274, col: 14, offset: 70980}, val: "outer", ignoreCase: true, want: "\"OUTER\"i", }, ¬Expr{ - pos: position{line: 2279, col: 33, offset: 71110}, + pos: position{line: 2274, col: 33, offset: 70999}, expr: &ruleRefExpr{ - pos: position{line: 2279, col: 34, offset: 71111}, + pos: position{line: 2274, col: 34, offset: 71000}, name: "IdentifierRest", }, }, @@ -17311,20 +17274,20 @@ var g = &grammar{ }, { name: "OUTPUT", - pos: position{line: 2280, col: 1, offset: 71126}, + pos: position{line: 2275, col: 1, offset: 71015}, expr: &seqExpr{ - pos: position{line: 2280, col: 14, offset: 71139}, + pos: position{line: 2275, col: 14, offset: 71028}, exprs: []any{ &litMatcher{ - pos: position{line: 2280, col: 14, offset: 71139}, + pos: position{line: 2275, col: 14, offset: 71028}, val: "output", ignoreCase: true, want: "\"OUTPUT\"i", }, ¬Expr{ - pos: position{line: 2280, col: 33, offset: 71158}, + pos: position{line: 2275, col: 33, offset: 71047}, expr: &ruleRefExpr{ - pos: position{line: 2280, col: 34, offset: 71159}, + pos: position{line: 2275, col: 34, offset: 71048}, name: "IdentifierRest", }, }, @@ -17335,20 +17298,20 @@ var g = &grammar{ }, { name: "OVER", - pos: position{line: 2281, col: 1, offset: 71174}, + pos: position{line: 2276, col: 1, offset: 71063}, expr: &seqExpr{ - pos: position{line: 2281, col: 14, offset: 71187}, + pos: position{line: 2276, col: 14, offset: 71076}, exprs: []any{ &litMatcher{ - pos: position{line: 2281, col: 14, offset: 71187}, + pos: position{line: 2276, col: 14, offset: 71076}, val: "over", ignoreCase: true, want: "\"OVER\"i", }, ¬Expr{ - pos: position{line: 2281, col: 33, offset: 71206}, + pos: position{line: 2276, col: 33, offset: 71095}, expr: &ruleRefExpr{ - pos: position{line: 2281, col: 34, offset: 71207}, + pos: position{line: 2276, col: 34, offset: 71096}, name: "IdentifierRest", }, }, @@ -17359,20 +17322,20 @@ var g = &grammar{ }, { name: "PASS", - pos: position{line: 2282, col: 1, offset: 71222}, + pos: position{line: 2277, col: 1, offset: 71111}, expr: &seqExpr{ - pos: position{line: 2282, col: 14, offset: 71235}, + pos: position{line: 2277, col: 14, offset: 71124}, exprs: []any{ &litMatcher{ - pos: position{line: 2282, col: 14, offset: 71235}, + pos: position{line: 2277, col: 14, offset: 71124}, val: "pass", ignoreCase: true, want: "\"PASS\"i", }, ¬Expr{ - pos: position{line: 2282, col: 33, offset: 71254}, + pos: position{line: 2277, col: 33, offset: 71143}, expr: &ruleRefExpr{ - pos: position{line: 2282, col: 34, offset: 71255}, + pos: position{line: 2277, col: 34, offset: 71144}, name: "IdentifierRest", }, }, @@ -17383,20 +17346,20 @@ var g = &grammar{ }, { name: "PUT", - pos: position{line: 2283, col: 1, offset: 71270}, + pos: position{line: 2278, col: 1, offset: 71159}, expr: &seqExpr{ - pos: position{line: 2283, col: 14, offset: 71283}, + pos: position{line: 2278, col: 14, offset: 71172}, exprs: []any{ &litMatcher{ - pos: position{line: 2283, col: 14, offset: 71283}, + pos: position{line: 2278, col: 14, offset: 71172}, val: "put", ignoreCase: true, want: "\"PUT\"i", }, ¬Expr{ - pos: position{line: 2283, col: 33, offset: 71302}, + pos: position{line: 2278, col: 33, offset: 71191}, expr: &ruleRefExpr{ - pos: position{line: 2283, col: 34, offset: 71303}, + pos: position{line: 2278, col: 34, offset: 71192}, name: "IdentifierRest", }, }, @@ -17407,20 +17370,20 @@ var g = &grammar{ }, { name: "RECURSIVE", - pos: position{line: 2284, col: 1, offset: 71318}, + pos: position{line: 2279, col: 1, offset: 71207}, expr: &seqExpr{ - pos: position{line: 2284, col: 14, offset: 71331}, + pos: position{line: 2279, col: 14, offset: 71220}, exprs: []any{ &litMatcher{ - pos: position{line: 2284, col: 14, offset: 71331}, + pos: position{line: 2279, col: 14, offset: 71220}, val: "RECURSIVE", ignoreCase: false, want: "\"RECURSIVE\"", }, ¬Expr{ - pos: position{line: 2284, col: 33, offset: 71350}, + pos: position{line: 2279, col: 33, offset: 71239}, expr: &ruleRefExpr{ - pos: position{line: 2284, col: 34, offset: 71351}, + pos: position{line: 2279, col: 34, offset: 71240}, name: "IdentifierRest", }, }, @@ -17431,20 +17394,20 @@ var g = &grammar{ }, { name: "REGEXP", - pos: position{line: 2285, col: 1, offset: 71366}, + pos: position{line: 2280, col: 1, offset: 71255}, expr: &seqExpr{ - pos: position{line: 2285, col: 14, offset: 71379}, + pos: position{line: 2280, col: 14, offset: 71268}, exprs: []any{ &litMatcher{ - pos: position{line: 2285, col: 14, offset: 71379}, + pos: position{line: 2280, col: 14, offset: 71268}, val: "regexp", ignoreCase: true, want: "\"REGEXP\"i", }, ¬Expr{ - pos: position{line: 2285, col: 33, offset: 71398}, + pos: position{line: 2280, col: 33, offset: 71287}, expr: &ruleRefExpr{ - pos: position{line: 2285, col: 34, offset: 71399}, + pos: position{line: 2280, col: 34, offset: 71288}, name: "IdentifierRest", }, }, @@ -17455,20 +17418,20 @@ var g = &grammar{ }, { name: "REGEXP_REPLACE", - pos: position{line: 2286, col: 1, offset: 71414}, + pos: position{line: 2281, col: 1, offset: 71303}, expr: &seqExpr{ - pos: position{line: 2286, col: 18, offset: 71431}, + pos: position{line: 2281, col: 18, offset: 71320}, exprs: []any{ &litMatcher{ - pos: position{line: 2286, col: 18, offset: 71431}, + pos: position{line: 2281, col: 18, offset: 71320}, val: "regexp_replace", ignoreCase: true, want: "\"REGEXP_REPLACE\"i", }, ¬Expr{ - pos: position{line: 2286, col: 36, offset: 71449}, + pos: position{line: 2281, col: 36, offset: 71338}, expr: &ruleRefExpr{ - pos: position{line: 2286, col: 37, offset: 71450}, + pos: position{line: 2281, col: 37, offset: 71339}, name: "IdentifierRest", }, }, @@ -17479,20 +17442,20 @@ var g = &grammar{ }, { name: "RENAME", - pos: position{line: 2287, col: 1, offset: 71465}, + pos: position{line: 2282, col: 1, offset: 71354}, expr: &seqExpr{ - pos: position{line: 2287, col: 14, offset: 71478}, + pos: position{line: 2282, col: 14, offset: 71367}, exprs: []any{ &litMatcher{ - pos: position{line: 2287, col: 14, offset: 71478}, + pos: position{line: 2282, col: 14, offset: 71367}, val: "rename", ignoreCase: true, want: "\"RENAME\"i", }, ¬Expr{ - pos: position{line: 2287, col: 33, offset: 71497}, + pos: position{line: 2282, col: 33, offset: 71386}, expr: &ruleRefExpr{ - pos: position{line: 2287, col: 34, offset: 71498}, + pos: position{line: 2282, col: 34, offset: 71387}, name: "IdentifierRest", }, }, @@ -17503,20 +17466,20 @@ var g = &grammar{ }, { name: "RIGHT", - pos: position{line: 2288, col: 1, offset: 71513}, + pos: position{line: 2283, col: 1, offset: 71402}, expr: &seqExpr{ - pos: position{line: 2288, col: 14, offset: 71526}, + pos: position{line: 2283, col: 14, offset: 71415}, exprs: []any{ &litMatcher{ - pos: position{line: 2288, col: 14, offset: 71526}, + pos: position{line: 2283, col: 14, offset: 71415}, val: "right", ignoreCase: true, want: "\"RIGHT\"i", }, ¬Expr{ - pos: position{line: 2288, col: 33, offset: 71545}, + pos: position{line: 2283, col: 33, offset: 71434}, expr: &ruleRefExpr{ - pos: position{line: 2288, col: 34, offset: 71546}, + pos: position{line: 2283, col: 34, offset: 71435}, name: "IdentifierRest", }, }, @@ -17527,20 +17490,20 @@ var g = &grammar{ }, { name: "SAMPLE", - pos: position{line: 2289, col: 1, offset: 71561}, + pos: position{line: 2284, col: 1, offset: 71450}, expr: &seqExpr{ - pos: position{line: 2289, col: 14, offset: 71574}, + pos: position{line: 2284, col: 14, offset: 71463}, exprs: []any{ &litMatcher{ - pos: position{line: 2289, col: 14, offset: 71574}, + pos: position{line: 2284, col: 14, offset: 71463}, val: "sample", ignoreCase: true, want: "\"SAMPLE\"i", }, ¬Expr{ - pos: position{line: 2289, col: 33, offset: 71593}, + pos: position{line: 2284, col: 33, offset: 71482}, expr: &ruleRefExpr{ - pos: position{line: 2289, col: 34, offset: 71594}, + pos: position{line: 2284, col: 34, offset: 71483}, name: "IdentifierRest", }, }, @@ -17551,20 +17514,20 @@ var g = &grammar{ }, { name: "SEARCH", - pos: position{line: 2290, col: 1, offset: 71609}, + pos: position{line: 2285, col: 1, offset: 71498}, expr: &seqExpr{ - pos: position{line: 2290, col: 14, offset: 71622}, + pos: position{line: 2285, col: 14, offset: 71511}, exprs: []any{ &litMatcher{ - pos: position{line: 2290, col: 14, offset: 71622}, + pos: position{line: 2285, col: 14, offset: 71511}, val: "search", ignoreCase: true, want: "\"SEARCH\"i", }, ¬Expr{ - pos: position{line: 2290, col: 33, offset: 71641}, + pos: position{line: 2285, col: 33, offset: 71530}, expr: &ruleRefExpr{ - pos: position{line: 2290, col: 34, offset: 71642}, + pos: position{line: 2285, col: 34, offset: 71531}, name: "IdentifierRest", }, }, @@ -17575,20 +17538,20 @@ var g = &grammar{ }, { name: "SELECT", - pos: position{line: 2291, col: 1, offset: 71657}, + pos: position{line: 2286, col: 1, offset: 71546}, expr: &seqExpr{ - pos: position{line: 2291, col: 14, offset: 71670}, + pos: position{line: 2286, col: 14, offset: 71559}, exprs: []any{ &litMatcher{ - pos: position{line: 2291, col: 14, offset: 71670}, + pos: position{line: 2286, col: 14, offset: 71559}, val: "select", ignoreCase: true, want: "\"SELECT\"i", }, ¬Expr{ - pos: position{line: 2291, col: 33, offset: 71689}, + pos: position{line: 2286, col: 33, offset: 71578}, expr: &ruleRefExpr{ - pos: position{line: 2291, col: 34, offset: 71690}, + pos: position{line: 2286, col: 34, offset: 71579}, name: "IdentifierRest", }, }, @@ -17599,20 +17562,20 @@ var g = &grammar{ }, { name: "SHAPE", - pos: position{line: 2292, col: 1, offset: 71705}, + pos: position{line: 2287, col: 1, offset: 71594}, expr: &seqExpr{ - pos: position{line: 2292, col: 14, offset: 71718}, + pos: position{line: 2287, col: 14, offset: 71607}, exprs: []any{ &litMatcher{ - pos: position{line: 2292, col: 14, offset: 71718}, + pos: position{line: 2287, col: 14, offset: 71607}, val: "shape", ignoreCase: true, want: "\"SHAPE\"i", }, ¬Expr{ - pos: position{line: 2292, col: 33, offset: 71737}, + pos: position{line: 2287, col: 33, offset: 71626}, expr: &ruleRefExpr{ - pos: position{line: 2292, col: 34, offset: 71738}, + pos: position{line: 2287, col: 34, offset: 71627}, name: "IdentifierRest", }, }, @@ -17623,20 +17586,20 @@ var g = &grammar{ }, { name: "SORT", - pos: position{line: 2293, col: 1, offset: 71753}, + pos: position{line: 2288, col: 1, offset: 71642}, expr: &seqExpr{ - pos: position{line: 2293, col: 14, offset: 71766}, + pos: position{line: 2288, col: 14, offset: 71655}, exprs: []any{ &litMatcher{ - pos: position{line: 2293, col: 14, offset: 71766}, + pos: position{line: 2288, col: 14, offset: 71655}, val: "sort", ignoreCase: true, want: "\"SORT\"i", }, ¬Expr{ - pos: position{line: 2293, col: 33, offset: 71785}, + pos: position{line: 2288, col: 33, offset: 71674}, expr: &ruleRefExpr{ - pos: position{line: 2293, col: 34, offset: 71786}, + pos: position{line: 2288, col: 34, offset: 71675}, name: "IdentifierRest", }, }, @@ -17647,20 +17610,20 @@ var g = &grammar{ }, { name: "SUMMARIZE", - pos: position{line: 2294, col: 1, offset: 71801}, + pos: position{line: 2289, col: 1, offset: 71690}, expr: &seqExpr{ - pos: position{line: 2294, col: 14, offset: 71814}, + pos: position{line: 2289, col: 14, offset: 71703}, exprs: []any{ &litMatcher{ - pos: position{line: 2294, col: 14, offset: 71814}, + pos: position{line: 2289, col: 14, offset: 71703}, val: "summarize", ignoreCase: true, want: "\"SUMMARIZE\"i", }, ¬Expr{ - pos: position{line: 2294, col: 33, offset: 71833}, + pos: position{line: 2289, col: 33, offset: 71722}, expr: &ruleRefExpr{ - pos: position{line: 2294, col: 34, offset: 71834}, + pos: position{line: 2289, col: 34, offset: 71723}, name: "IdentifierRest", }, }, @@ -17671,20 +17634,20 @@ var g = &grammar{ }, { name: "SWITCH", - pos: position{line: 2295, col: 1, offset: 71849}, + pos: position{line: 2290, col: 1, offset: 71738}, expr: &seqExpr{ - pos: position{line: 2295, col: 14, offset: 71862}, + pos: position{line: 2290, col: 14, offset: 71751}, exprs: []any{ &litMatcher{ - pos: position{line: 2295, col: 14, offset: 71862}, + pos: position{line: 2290, col: 14, offset: 71751}, val: "switch", ignoreCase: true, want: "\"SWITCH\"i", }, ¬Expr{ - pos: position{line: 2295, col: 33, offset: 71881}, + pos: position{line: 2290, col: 33, offset: 71770}, expr: &ruleRefExpr{ - pos: position{line: 2295, col: 34, offset: 71882}, + pos: position{line: 2290, col: 34, offset: 71771}, name: "IdentifierRest", }, }, @@ -17695,20 +17658,20 @@ var g = &grammar{ }, { name: "TAIL", - pos: position{line: 2296, col: 1, offset: 71897}, + pos: position{line: 2291, col: 1, offset: 71786}, expr: &seqExpr{ - pos: position{line: 2296, col: 14, offset: 71910}, + pos: position{line: 2291, col: 14, offset: 71799}, exprs: []any{ &litMatcher{ - pos: position{line: 2296, col: 14, offset: 71910}, + pos: position{line: 2291, col: 14, offset: 71799}, val: "tail", ignoreCase: true, want: "\"TAIL\"i", }, ¬Expr{ - pos: position{line: 2296, col: 33, offset: 71929}, + pos: position{line: 2291, col: 33, offset: 71818}, expr: &ruleRefExpr{ - pos: position{line: 2296, col: 34, offset: 71930}, + pos: position{line: 2291, col: 34, offset: 71819}, name: "IdentifierRest", }, }, @@ -17719,20 +17682,20 @@ var g = &grammar{ }, { name: "TAP", - pos: position{line: 2297, col: 1, offset: 71946}, + pos: position{line: 2292, col: 1, offset: 71835}, expr: &seqExpr{ - pos: position{line: 2297, col: 14, offset: 71959}, + pos: position{line: 2292, col: 14, offset: 71848}, exprs: []any{ &litMatcher{ - pos: position{line: 2297, col: 14, offset: 71959}, + pos: position{line: 2292, col: 14, offset: 71848}, val: "tap", ignoreCase: true, want: "\"TAP\"i", }, ¬Expr{ - pos: position{line: 2297, col: 33, offset: 71978}, + pos: position{line: 2292, col: 33, offset: 71867}, expr: &ruleRefExpr{ - pos: position{line: 2297, col: 34, offset: 71979}, + pos: position{line: 2292, col: 34, offset: 71868}, name: "IdentifierRest", }, }, @@ -17743,20 +17706,20 @@ var g = &grammar{ }, { name: "THEN", - pos: position{line: 2298, col: 1, offset: 71994}, + pos: position{line: 2293, col: 1, offset: 71883}, expr: &seqExpr{ - pos: position{line: 2298, col: 14, offset: 72007}, + pos: position{line: 2293, col: 14, offset: 71896}, exprs: []any{ &litMatcher{ - pos: position{line: 2298, col: 14, offset: 72007}, + pos: position{line: 2293, col: 14, offset: 71896}, val: "then", ignoreCase: true, want: "\"THEN\"i", }, ¬Expr{ - pos: position{line: 2298, col: 33, offset: 72026}, + pos: position{line: 2293, col: 33, offset: 71915}, expr: &ruleRefExpr{ - pos: position{line: 2298, col: 34, offset: 72027}, + pos: position{line: 2293, col: 34, offset: 71916}, name: "IdentifierRest", }, }, @@ -17767,20 +17730,20 @@ var g = &grammar{ }, { name: "TOP", - pos: position{line: 2299, col: 1, offset: 72042}, + pos: position{line: 2294, col: 1, offset: 71931}, expr: &seqExpr{ - pos: position{line: 2299, col: 14, offset: 72055}, + pos: position{line: 2294, col: 14, offset: 71944}, exprs: []any{ &litMatcher{ - pos: position{line: 2299, col: 14, offset: 72055}, + pos: position{line: 2294, col: 14, offset: 71944}, val: "top", ignoreCase: true, want: "\"TOP\"i", }, ¬Expr{ - pos: position{line: 2299, col: 33, offset: 72074}, + pos: position{line: 2294, col: 33, offset: 71963}, expr: &ruleRefExpr{ - pos: position{line: 2299, col: 34, offset: 72075}, + pos: position{line: 2294, col: 34, offset: 71964}, name: "IdentifierRest", }, }, @@ -17791,20 +17754,20 @@ var g = &grammar{ }, { name: "TRUE", - pos: position{line: 2300, col: 1, offset: 72090}, + pos: position{line: 2295, col: 1, offset: 71979}, expr: &seqExpr{ - pos: position{line: 2300, col: 14, offset: 72103}, + pos: position{line: 2295, col: 14, offset: 71992}, exprs: []any{ &litMatcher{ - pos: position{line: 2300, col: 14, offset: 72103}, + pos: position{line: 2295, col: 14, offset: 71992}, val: "true", ignoreCase: true, want: "\"TRUE\"i", }, ¬Expr{ - pos: position{line: 2300, col: 33, offset: 72122}, + pos: position{line: 2295, col: 33, offset: 72011}, expr: &ruleRefExpr{ - pos: position{line: 2300, col: 34, offset: 72123}, + pos: position{line: 2295, col: 34, offset: 72012}, name: "IdentifierRest", }, }, @@ -17815,20 +17778,20 @@ var g = &grammar{ }, { name: "TYPE", - pos: position{line: 2301, col: 1, offset: 72138}, + pos: position{line: 2296, col: 1, offset: 72027}, expr: &seqExpr{ - pos: position{line: 2301, col: 14, offset: 72151}, + pos: position{line: 2296, col: 14, offset: 72040}, exprs: []any{ &litMatcher{ - pos: position{line: 2301, col: 14, offset: 72151}, + pos: position{line: 2296, col: 14, offset: 72040}, val: "type", ignoreCase: true, want: "\"TYPE\"i", }, ¬Expr{ - pos: position{line: 2301, col: 33, offset: 72170}, + pos: position{line: 2296, col: 33, offset: 72059}, expr: &ruleRefExpr{ - pos: position{line: 2301, col: 34, offset: 72171}, + pos: position{line: 2296, col: 34, offset: 72060}, name: "IdentifierRest", }, }, @@ -17839,20 +17802,20 @@ var g = &grammar{ }, { name: "UNION", - pos: position{line: 2302, col: 1, offset: 72186}, + pos: position{line: 2297, col: 1, offset: 72075}, expr: &seqExpr{ - pos: position{line: 2302, col: 14, offset: 72199}, + pos: position{line: 2297, col: 14, offset: 72088}, exprs: []any{ &litMatcher{ - pos: position{line: 2302, col: 14, offset: 72199}, + pos: position{line: 2297, col: 14, offset: 72088}, val: "union", ignoreCase: true, want: "\"UNION\"i", }, ¬Expr{ - pos: position{line: 2302, col: 33, offset: 72218}, + pos: position{line: 2297, col: 33, offset: 72107}, expr: &ruleRefExpr{ - pos: position{line: 2302, col: 34, offset: 72219}, + pos: position{line: 2297, col: 34, offset: 72108}, name: "IdentifierRest", }, }, @@ -17863,20 +17826,20 @@ var g = &grammar{ }, { name: "UNIQ", - pos: position{line: 2303, col: 1, offset: 72234}, + pos: position{line: 2298, col: 1, offset: 72123}, expr: &seqExpr{ - pos: position{line: 2303, col: 14, offset: 72247}, + pos: position{line: 2298, col: 14, offset: 72136}, exprs: []any{ &litMatcher{ - pos: position{line: 2303, col: 14, offset: 72247}, + pos: position{line: 2298, col: 14, offset: 72136}, val: "uniq", ignoreCase: true, want: "\"UNIQ\"i", }, ¬Expr{ - pos: position{line: 2303, col: 33, offset: 72266}, + pos: position{line: 2298, col: 33, offset: 72155}, expr: &ruleRefExpr{ - pos: position{line: 2303, col: 34, offset: 72267}, + pos: position{line: 2298, col: 34, offset: 72156}, name: "IdentifierRest", }, }, @@ -17887,20 +17850,20 @@ var g = &grammar{ }, { name: "UNNEST", - pos: position{line: 2304, col: 1, offset: 72283}, + pos: position{line: 2299, col: 1, offset: 72172}, expr: &seqExpr{ - pos: position{line: 2304, col: 14, offset: 72296}, + pos: position{line: 2299, col: 14, offset: 72185}, exprs: []any{ &litMatcher{ - pos: position{line: 2304, col: 14, offset: 72296}, + pos: position{line: 2299, col: 14, offset: 72185}, val: "unnest", ignoreCase: true, want: "\"UNNEST\"i", }, ¬Expr{ - pos: position{line: 2304, col: 33, offset: 72315}, + pos: position{line: 2299, col: 33, offset: 72204}, expr: &ruleRefExpr{ - pos: position{line: 2304, col: 34, offset: 72316}, + pos: position{line: 2299, col: 34, offset: 72205}, name: "IdentifierRest", }, }, @@ -17911,20 +17874,20 @@ var g = &grammar{ }, { name: "USING", - pos: position{line: 2305, col: 1, offset: 72331}, + pos: position{line: 2300, col: 1, offset: 72220}, expr: &seqExpr{ - pos: position{line: 2305, col: 14, offset: 72344}, + pos: position{line: 2300, col: 14, offset: 72233}, exprs: []any{ &litMatcher{ - pos: position{line: 2305, col: 14, offset: 72344}, + pos: position{line: 2300, col: 14, offset: 72233}, val: "using", ignoreCase: true, want: "\"USING\"i", }, ¬Expr{ - pos: position{line: 2305, col: 33, offset: 72363}, + pos: position{line: 2300, col: 33, offset: 72252}, expr: &ruleRefExpr{ - pos: position{line: 2305, col: 34, offset: 72364}, + pos: position{line: 2300, col: 34, offset: 72253}, name: "IdentifierRest", }, }, @@ -17935,20 +17898,20 @@ var g = &grammar{ }, { name: "VALUE", - pos: position{line: 2306, col: 1, offset: 72379}, + pos: position{line: 2301, col: 1, offset: 72268}, expr: &seqExpr{ - pos: position{line: 2306, col: 14, offset: 72392}, + pos: position{line: 2301, col: 14, offset: 72281}, exprs: []any{ &litMatcher{ - pos: position{line: 2306, col: 14, offset: 72392}, + pos: position{line: 2301, col: 14, offset: 72281}, val: "value", ignoreCase: true, want: "\"VALUE\"i", }, ¬Expr{ - pos: position{line: 2306, col: 33, offset: 72411}, + pos: position{line: 2301, col: 33, offset: 72300}, expr: &ruleRefExpr{ - pos: position{line: 2306, col: 34, offset: 72412}, + pos: position{line: 2301, col: 34, offset: 72301}, name: "IdentifierRest", }, }, @@ -17959,20 +17922,20 @@ var g = &grammar{ }, { name: "WHEN", - pos: position{line: 2307, col: 1, offset: 72427}, + pos: position{line: 2302, col: 1, offset: 72316}, expr: &seqExpr{ - pos: position{line: 2307, col: 14, offset: 72440}, + pos: position{line: 2302, col: 14, offset: 72329}, exprs: []any{ &litMatcher{ - pos: position{line: 2307, col: 14, offset: 72440}, + pos: position{line: 2302, col: 14, offset: 72329}, val: "when", ignoreCase: true, want: "\"WHEN\"i", }, ¬Expr{ - pos: position{line: 2307, col: 33, offset: 72459}, + pos: position{line: 2302, col: 33, offset: 72348}, expr: &ruleRefExpr{ - pos: position{line: 2307, col: 34, offset: 72460}, + pos: position{line: 2302, col: 34, offset: 72349}, name: "IdentifierRest", }, }, @@ -17983,20 +17946,20 @@ var g = &grammar{ }, { name: "WHERE", - pos: position{line: 2308, col: 1, offset: 72475}, + pos: position{line: 2303, col: 1, offset: 72364}, expr: &seqExpr{ - pos: position{line: 2308, col: 14, offset: 72488}, + pos: position{line: 2303, col: 14, offset: 72377}, exprs: []any{ &litMatcher{ - pos: position{line: 2308, col: 14, offset: 72488}, + pos: position{line: 2303, col: 14, offset: 72377}, val: "where", ignoreCase: true, want: "\"WHERE\"i", }, ¬Expr{ - pos: position{line: 2308, col: 33, offset: 72507}, + pos: position{line: 2303, col: 33, offset: 72396}, expr: &ruleRefExpr{ - pos: position{line: 2308, col: 34, offset: 72508}, + pos: position{line: 2303, col: 34, offset: 72397}, name: "IdentifierRest", }, }, @@ -18007,20 +17970,20 @@ var g = &grammar{ }, { name: "WITH", - pos: position{line: 2309, col: 1, offset: 72523}, + pos: position{line: 2304, col: 1, offset: 72412}, expr: &seqExpr{ - pos: position{line: 2309, col: 14, offset: 72536}, + pos: position{line: 2304, col: 14, offset: 72425}, exprs: []any{ &litMatcher{ - pos: position{line: 2309, col: 14, offset: 72536}, + pos: position{line: 2304, col: 14, offset: 72425}, val: "with", ignoreCase: true, want: "\"WITH\"i", }, ¬Expr{ - pos: position{line: 2309, col: 33, offset: 72555}, + pos: position{line: 2304, col: 33, offset: 72444}, expr: &ruleRefExpr{ - pos: position{line: 2309, col: 34, offset: 72556}, + pos: position{line: 2304, col: 34, offset: 72445}, name: "IdentifierRest", }, }, @@ -18031,20 +17994,20 @@ var g = &grammar{ }, { name: "YIELD", - pos: position{line: 2310, col: 1, offset: 72571}, + pos: position{line: 2305, col: 1, offset: 72460}, expr: &seqExpr{ - pos: position{line: 2310, col: 14, offset: 72584}, + pos: position{line: 2305, col: 14, offset: 72473}, exprs: []any{ &litMatcher{ - pos: position{line: 2310, col: 14, offset: 72584}, + pos: position{line: 2305, col: 14, offset: 72473}, val: "yield", ignoreCase: true, want: "\"YIELD\"i", }, ¬Expr{ - pos: position{line: 2310, col: 33, offset: 72603}, + pos: position{line: 2305, col: 33, offset: 72492}, expr: &ruleRefExpr{ - pos: position{line: 2310, col: 34, offset: 72604}, + pos: position{line: 2305, col: 34, offset: 72493}, name: "IdentifierRest", }, }, @@ -20026,12 +19989,11 @@ func (p *parser) callonBetweenExpr2() (any, error) { return p.cur.onBetweenExpr2(stack["expr"], stack["lower"], stack["upper"]) } -func (c *current) onComparisonExpr2(lhs, op any) (any, error) { - return &ast.BinaryExpr{ - Kind: "BinaryExpr", - Op: op.(string), - LHS: lhs.(ast.Expr), - RHS: newPrimitive(c, "null", ""), +func (c *current) onComparisonExpr2(expr, not any) (any, error) { + return &ast.IsNullExpr{ + Kind: "IsNullExpr", + Expr: expr.(ast.Expr), + Not: not != nil, Loc: loc(c), }, nil @@ -20040,20 +20002,20 @@ func (c *current) onComparisonExpr2(lhs, op any) (any, error) { func (p *parser) callonComparisonExpr2() (any, error) { stack := p.vstack[len(p.vstack)-1] _ = stack - return p.cur.onComparisonExpr2(stack["lhs"], stack["op"]) + return p.cur.onComparisonExpr2(stack["expr"], stack["not"]) } -func (c *current) onComparisonExpr23() (any, error) { +func (c *current) onComparisonExpr29() (any, error) { return string(c.text), nil } -func (p *parser) callonComparisonExpr23() (any, error) { +func (p *parser) callonComparisonExpr29() (any, error) { stack := p.vstack[len(p.vstack)-1] _ = stack - return p.cur.onComparisonExpr23() + return p.cur.onComparisonExpr29() } -func (c *current) onComparisonExpr9(lhs, opAndRHS any) (any, error) { +func (c *current) onComparisonExpr15(lhs, opAndRHS any) (any, error) { if opAndRHS == nil { return lhs, nil } @@ -20067,30 +20029,10 @@ func (c *current) onComparisonExpr9(lhs, opAndRHS any) (any, error) { } -func (p *parser) callonComparisonExpr9() (any, error) { - stack := p.vstack[len(p.vstack)-1] - _ = stack - return p.cur.onComparisonExpr9(stack["lhs"], stack["opAndRHS"]) -} - -func (c *current) onIsNull2() (any, error) { - return "==", nil -} - -func (p *parser) callonIsNull2() (any, error) { - stack := p.vstack[len(p.vstack)-1] - _ = stack - return p.cur.onIsNull2() -} - -func (c *current) onIsNull7() (any, error) { - return "!=", nil -} - -func (p *parser) callonIsNull7() (any, error) { +func (p *parser) callonComparisonExpr15() (any, error) { stack := p.vstack[len(p.vstack)-1] _ = stack - return p.cur.onIsNull7() + return p.cur.onComparisonExpr15(stack["lhs"], stack["opAndRHS"]) } func (c *current) onAdditiveExpr7(op, expr any) (any, error) { diff --git a/compiler/parser/parser.peg b/compiler/parser/parser.peg index 48f668337f..ddf1f216dd 100644 --- a/compiler/parser/parser.peg +++ b/compiler/parser/parser.peg @@ -948,12 +948,11 @@ BetweenExpr / ComparisonExpr ComparisonExpr - = lhs:AdditiveExpr _ op:IsNull { - return &ast.BinaryExpr{ - Kind: "BinaryExpr", - Op: op.(string), - LHS: lhs.(ast.Expr), - RHS: newPrimitive(c, "null", ""), + = expr:AdditiveExpr _ IS not:(_ NOT)? _ NULL { + return &ast.IsNullExpr{ + Kind: "IsNullExpr", + Expr: expr.(ast.Expr), + Not: not != nil, Loc: loc(c), }, nil } @@ -970,10 +969,6 @@ ComparisonExpr }, nil } - IsNull - = IS _ NULL { return "==", nil } - / IS _ NOT _ NULL { return "!=", nil } - AdditiveExpr = first:MultiplicativeExpr rest:(__ op:AdditiveOperator __ expr:MultiplicativeExpr { return []any{op, expr}, nil })* { diff --git a/compiler/semantic/expr.go b/compiler/semantic/expr.go index 017a05fc61..e0bf6fb351 100644 --- a/compiler/semantic/expr.go +++ b/compiler/semantic/expr.go @@ -145,6 +145,17 @@ func (a *analyzer) semExpr(e ast.Expr) dag.Expr { Expr: expr, Index: index, } + case *ast.IsNullExpr: + expr := a.semExpr(e.Expr) + var out dag.Expr = &dag.IsNullExpr{Kind: "IsNullExpr", Expr: expr} + if e.Not { + out = &dag.UnaryExpr{ + Kind: "UnaryExpr", + Op: "!", + Operand: out, + } + } + return out case *ast.SliceExpr: expr := a.semExpr(e.Expr) // XXX Literal indices should be type checked as int. diff --git a/compiler/semantic/op.go b/compiler/semantic/op.go index 83b8e7df16..c89cd132a5 100644 --- a/compiler/semantic/op.go +++ b/compiler/semantic/op.go @@ -237,8 +237,13 @@ func (a *analyzer) formatArg(args ast.FromArgs) string { func (a *analyzer) semFile(name string, args ast.FromArgs) dag.Op { format := a.formatArg(args) - if format == "" && strings.HasSuffix(name, ".parquet") { - format = "parquet" + if format == "" { + switch filepath.Ext(name) { + case ".parquet": + format = "parquet" + case ".csup": + format = "csup" + } } return &dag.FileScan{ Kind: "FileScan", @@ -1184,6 +1189,8 @@ func (a *analyzer) isBool(e dag.Expr) bool { return false } return function.HasBoolResult(e.Name) + case *dag.IsNullExpr: + return true case *dag.Search, *dag.RegexpMatch, *dag.RegexpSearch: return true default: diff --git a/compiler/semantic/scope.go b/compiler/semantic/scope.go index 1f6e873d94..4646429e69 100644 --- a/compiler/semantic/scope.go +++ b/compiler/semantic/scope.go @@ -11,18 +11,13 @@ import ( ) type Scope struct { - parent *Scope - children []*Scope - nvar int - symbols map[string]*entry + parent *Scope + nvar int + symbols map[string]*entry } func NewScope(parent *Scope) *Scope { - s := &Scope{parent: parent, symbols: make(map[string]*entry)} - if parent != nil { - parent.children = append(parent.children, s) - } - return s + return &Scope{parent: parent, symbols: make(map[string]*entry)} } type entry struct { diff --git a/docs/_index.md b/docs/_index.md index 081d762cb9..b3bf7f12e3 100644 --- a/docs/_index.md +++ b/docs/_index.md @@ -29,7 +29,7 @@ packaged up in the easy-to-understand [SuperPipe language](language/_index.md). While `super` and its accompanying data formats are production quality, the project's -[SuperDB data lake](commands/super-db.md) is a bit [earlier in development](commands/super-db.md#status). +[SuperDB data lake](commands/super-db.md) is a bit earlier in development. ## Terminology diff --git a/docs/commands/search.sql b/docs/commands/search.sql deleted file mode 100644 index f7465cfa80..0000000000 --- a/docs/commands/search.sql +++ /dev/null @@ -1,487 +0,0 @@ -SELECT count() FROM gha WHERE - id LIKE '%in case you have any feedback 😊%' -OR type LIKE '%in case you have any feedback 😊%' -OR actor.login LIKE '%in case you have any feedback 😊%' -OR actor.display_login LIKE '%in case you have any feedback 😊%' -OR actor.gravatar_id LIKE '%in case you have any feedback 😊%' -OR actor.url LIKE '%in case you have any feedback 😊%' -OR actor.avatar_url LIKE '%in case you have any feedback 😊%' -OR repo.name LIKE '%in case you have any feedback 😊%' -OR repo.url LIKE '%in case you have any feedback 😊%' -OR payload.ref LIKE '%in case you have any feedback 😊%' -OR payload.ref_type LIKE '%in case you have any feedback 😊%' -OR payload.pusher_type LIKE '%in case you have any feedback 😊%' -OR payload.head LIKE '%in case you have any feedback 😊%' -OR payload.before LIKE '%in case you have any feedback 😊%' -OR payload.master_branch LIKE '%in case you have any feedback 😊%' -OR payload.description LIKE '%in case you have any feedback 😊%' -OR payload.action LIKE '%in case you have any feedback 😊%' -OR org.login LIKE '%in case you have any feedback 😊%' -OR org.gravatar_id LIKE '%in case you have any feedback 😊%' -OR org.url LIKE '%in case you have any feedback 😊%' -OR org.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.review.node_id LIKE '%in case you have any feedback 😊%' -OR payload.review.user.login LIKE '%in case you have any feedback 😊%' -OR payload.review.user.node_id LIKE '%in case you have any feedback 😊%' -OR payload.review.user.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.review.user.url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.html_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.following_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.events_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.review.user.type LIKE '%in case you have any feedback 😊%' -OR payload.review.body LIKE '%in case you have any feedback 😊%' -OR payload.review.commit_id LIKE '%in case you have any feedback 😊%' -OR payload.review.state LIKE '%in case you have any feedback 😊%' -OR payload.review.html_url LIKE '%in case you have any feedback 😊%' -OR payload.review.pull_request_url LIKE '%in case you have any feedback 😊%' -OR payload.review.author_association LIKE '%in case you have any feedback 😊%' -OR payload.review._links.html.href LIKE '%in case you have any feedback 😊%' -OR payload.review._links.pull_request.href LIKE '%in case you have any feedback 😊%' -OR payload.comment.url LIKE '%in case you have any feedback 😊%' -OR payload.comment.html_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.node_id LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.login LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.node_id LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.html_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.following_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.events_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.user.type LIKE '%in case you have any feedback 😊%' -OR payload.comment.path LIKE '%in case you have any feedback 😊%' -OR payload.comment.commit_id LIKE '%in case you have any feedback 😊%' -OR payload.comment.author_association LIKE '%in case you have any feedback 😊%' -OR payload.comment.body LIKE '%in case you have any feedback 😊%' -OR payload.comment.reactions.url LIKE '%in case you have any feedback 😊%' -OR payload.comment.issue_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.diff_hunk LIKE '%in case you have any feedback 😊%' -OR payload.comment.original_commit_id LIKE '%in case you have any feedback 😊%' -OR payload.comment.pull_request_url LIKE '%in case you have any feedback 😊%' -OR payload.comment.start_side LIKE '%in case you have any feedback 😊%' -OR payload.comment.side LIKE '%in case you have any feedback 😊%' -OR payload.issue.url LIKE '%in case you have any feedback 😊%' -OR payload.issue.repository_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.labels_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.comments_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.events_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.html_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.node_id LIKE '%in case you have any feedback 😊%' -OR payload.issue.title LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.login LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.node_id LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.html_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.following_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.events_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.user.type LIKE '%in case you have any feedback 😊%' -OR payload.issue.state LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.login LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.node_id LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.html_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.following_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.events_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.assignee.type LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.html_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.labels_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.node_id LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.title LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.description LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.login LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.node_id LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.html_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.following_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.events_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.creator.type LIKE '%in case you have any feedback 😊%' -OR payload.issue.milestone.state LIKE '%in case you have any feedback 😊%' -OR payload.issue.author_association LIKE '%in case you have any feedback 😊%' -OR payload.issue.active_lock_reason LIKE '%in case you have any feedback 😊%' -OR payload.issue.body LIKE '%in case you have any feedback 😊%' -OR payload.issue.reactions.url LIKE '%in case you have any feedback 😊%' -OR payload.issue.timeline_url LIKE '%in case you have any feedback 😊%' -OR payload.issue.state_reason LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.node_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.html_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.diff_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.patch_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.issue_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.state LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.title LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.login LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.node_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.html_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.following_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.user.type LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.body LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merge_commit_sha LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.commits_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.review_comments_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.review_comment_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.comments_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.statuses_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.label LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.ref LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.sha LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.login LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.node_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.html_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.following_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.user.type LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.node_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.name LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.full_name LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.login LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.node_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.html_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.following_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.owner.type LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.html_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.description LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.forks_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.keys_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.collaborators_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.teams_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.hooks_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.issue_events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.assignees_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.branches_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.tags_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.blobs_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.git_tags_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.git_refs_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.trees_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.statuses_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.languages_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.stargazers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.contributors_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.subscribers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.subscription_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.commits_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.git_commits_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.comments_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.issue_comment_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.contents_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.compare_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.merges_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.archive_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.downloads_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.issues_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.pulls_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.milestones_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.notifications_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.labels_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.releases_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.deployments_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.git_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.ssh_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.clone_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.svn_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.homepage LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.language LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.mirror_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.visibility LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.head.repo.default_branch LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.label LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.ref LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.sha LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.login LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.node_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.html_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.following_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.user.type LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.node_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.name LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.full_name LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.login LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.node_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.html_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.following_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.owner.type LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.html_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.description LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.forks_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.keys_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.collaborators_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.teams_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.hooks_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.issue_events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.assignees_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.branches_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.tags_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.blobs_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.git_tags_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.git_refs_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.trees_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.statuses_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.languages_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.stargazers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.contributors_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.subscribers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.subscription_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.commits_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.git_commits_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.comments_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.issue_comment_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.contents_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.compare_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.merges_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.archive_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.downloads_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.issues_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.pulls_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.milestones_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.notifications_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.labels_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.releases_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.deployments_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.git_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.ssh_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.clone_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.svn_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.homepage LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.language LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.mirror_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.visibility LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.base.repo.default_branch LIKE '%in case you have any feedback 😊%' -OR payload.pull_request._links.self.href LIKE '%in case you have any feedback 😊%' -OR payload.pull_request._links.html.href LIKE '%in case you have any feedback 😊%' -OR payload.pull_request._links.issue.href LIKE '%in case you have any feedback 😊%' -OR payload.pull_request._links.comments.href LIKE '%in case you have any feedback 😊%' -OR payload.pull_request._links.review_comments.href LIKE '%in case you have any feedback 😊%' -OR payload.pull_request._links.review_comment.href LIKE '%in case you have any feedback 😊%' -OR payload.pull_request._links.commits.href LIKE '%in case you have any feedback 😊%' -OR payload.pull_request._links.statuses.href LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.author_association LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.active_lock_reason LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.mergeable_state LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.login LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.node_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.html_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.following_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.pull_request.merged_by.type LIKE '%in case you have any feedback 😊%' -OR payload.forkee.node_id LIKE '%in case you have any feedback 😊%' -OR payload.forkee.name LIKE '%in case you have any feedback 😊%' -OR payload.forkee.full_name LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.login LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.node_id LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.html_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.following_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.events_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.owner.type LIKE '%in case you have any feedback 😊%' -OR payload.forkee.html_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.description LIKE '%in case you have any feedback 😊%' -OR payload.forkee.url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.forks_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.keys_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.collaborators_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.teams_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.hooks_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.issue_events_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.events_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.assignees_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.branches_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.tags_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.blobs_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.git_tags_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.git_refs_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.trees_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.statuses_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.languages_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.stargazers_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.contributors_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.subscribers_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.subscription_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.commits_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.git_commits_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.comments_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.issue_comment_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.contents_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.compare_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.merges_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.archive_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.downloads_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.issues_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.pulls_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.milestones_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.notifications_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.labels_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.releases_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.deployments_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.git_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.ssh_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.clone_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.svn_url LIKE '%in case you have any feedback 😊%' -OR payload.forkee.homepage LIKE '%in case you have any feedback 😊%' -OR payload.forkee.visibility LIKE '%in case you have any feedback 😊%' -OR payload.forkee.default_branch LIKE '%in case you have any feedback 😊%' -OR payload.release.url LIKE '%in case you have any feedback 😊%' -OR payload.release.assets_url LIKE '%in case you have any feedback 😊%' -OR payload.release.upload_url LIKE '%in case you have any feedback 😊%' -OR payload.release.html_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.login LIKE '%in case you have any feedback 😊%' -OR payload.release.author.node_id LIKE '%in case you have any feedback 😊%' -OR payload.release.author.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.release.author.url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.html_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.following_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.events_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.release.author.type LIKE '%in case you have any feedback 😊%' -OR payload.release.node_id LIKE '%in case you have any feedback 😊%' -OR payload.release.tag_name LIKE '%in case you have any feedback 😊%' -OR payload.release.target_commitish LIKE '%in case you have any feedback 😊%' -OR payload.release.name LIKE '%in case you have any feedback 😊%' -OR payload.release.tarball_url LIKE '%in case you have any feedback 😊%' -OR payload.release.zipball_url LIKE '%in case you have any feedback 😊%' -OR payload.release.body LIKE '%in case you have any feedback 😊%' -OR payload.release.short_description_html LIKE '%in case you have any feedback 😊%' -OR payload.release.discussion_url LIKE '%in case you have any feedback 😊%' -OR payload.member.login LIKE '%in case you have any feedback 😊%' -OR payload.member.node_id LIKE '%in case you have any feedback 😊%' -OR payload.member.avatar_url LIKE '%in case you have any feedback 😊%' -OR payload.member.gravatar_id LIKE '%in case you have any feedback 😊%' -OR payload.member.url LIKE '%in case you have any feedback 😊%' -OR payload.member.html_url LIKE '%in case you have any feedback 😊%' -OR payload.member.followers_url LIKE '%in case you have any feedback 😊%' -OR payload.member.following_url LIKE '%in case you have any feedback 😊%' -OR payload.member.gists_url LIKE '%in case you have any feedback 😊%' -OR payload.member.starred_url LIKE '%in case you have any feedback 😊%' -OR payload.member.subscriptions_url LIKE '%in case you have any feedback 😊%' -OR payload.member.organizations_url LIKE '%in case you have any feedback 😊%' -OR payload.member.repos_url LIKE '%in case you have any feedback 😊%' -OR payload.member.events_url LIKE '%in case you have any feedback 😊%' -OR payload.member.received_events_url LIKE '%in case you have any feedback 😊%' -OR payload.member.type LIKE '%in case you have any feedback 😊%' diff --git a/docs/commands/super.md b/docs/commands/super.md index ed3992ff4f..2feb835b8c 100644 --- a/docs/commands/super.md +++ b/docs/commands/super.md @@ -661,20 +661,30 @@ the `super` command, but it turns out that `super` can hold its own when compared to other analytics systems. To illustrate comparative performance, we'll present some informal performance -measurements among `super`, -[`DuckDB`](https://duckdb.org/), -[`ClickHouse`](https://clickhouse.com/), and -[`DataFusion`](https://datafusion.apache.org/). +measurements among SuperDB, +[DuckDB](https://duckdb.org/), +[ClickHouse](https://clickhouse.com/), and +[DataFusion](https://datafusion.apache.org/). We'll use the Parquet format to compare apples to apples -and also report results for the custom columnar database format of DuckDB -and the Super Binary format used by `super`. -We tried loading our test data into a ClickHouse table using its -[new experimental JSON type](https://clickhouse.com/blog/a-new-powerful-json-data-type-for-clickhouse) -but those attempts failed with "too many open files". +and also report results for the custom columnar database format of DuckDB, +the [new beta JSON type](https://clickhouse.com/blog/a-new-powerful-json-data-type-for-clickhouse) of ClickHouse, +and the [Super Binary](../formats/bsup.md) format used by `super`. -As of this writing in November 2024, we're using the latest version 1.1.3 of `duckdb`. -version 24.11.1.1393 of `clickhouse`, and v43.0.0 of `datafusion-cli`. +The detailed steps shown [below](#appendix-2-running-the-tests) can be reproduced via +[automated scripts](https://github.com/brimdata/super/blob/main/scripts/super-cmd-perf). +As of this writing in December 2024, [results](#the-test-results) were gathered on an AWS +[`m6idn.2xlarge`](https://aws.amazon.com/ec2/instance-types/m6i/) instance +with the following software versions: + +|**Software**|**Version**| +|-|-| +|`super`|Commit `cc6949f`| +|`duckdb`|`v1.1.3` 19864453f7| +|`datafusion-cli`|datafusion-cli `43.0.0`| +|`clickhouse`|ClickHouse local version `24.11.1.2557` (official build)| + +The complete run logs are [archived here](https://super-cmd-perf.s3.us-east-2.amazonaws.com/2024-12-03_00-43-29.tgz). ### The Test Data @@ -692,7 +702,7 @@ wget https://data.gharchive.org/2023-02-08-1.json.gz wget https://data.gharchive.org/2023-02-08-23.json.gz ``` We downloaded these files into a directory called `gharchive_gz` -and created a duckdb database file called `gha.db` and a table called `gha` +and created a DuckDB database file called `gha.db` and a table called `gha` using this command: ``` duckdb gha.db -c "CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', union_by_name=true)" @@ -705,24 +715,35 @@ We then created a Parquet file called `gha.parquet` with this command: ``` duckdb gha.db -c "COPY (from gha) TO 'gha.parquet'" ``` +To create a ClickHouse table using their beta JSON type, after starting +a ClickHouse server we defined the single-column schema before loading the +data using this command: +``` +clickhouse-client --query " + SET enable_json_type = 1; + CREATE TABLE gha (v JSON) ENGINE MergeTree() ORDER BY tuple(); + INSERT INTO gha SELECT * FROM file('gharchive_gz/*.json.gz', JSONAsObject);" +``` To create a super-structed file for the `super` command, there is no need to -fuse the data into a single schema (though `super` can still work with the fused +[`fuse`](../language/operators/fuse.md) the data into a single schema (though `super` can still work with the fused schema in the Parquet file), and we simply ran this command to create a Super Binary file: ``` super gharchive_gz/*.json.gz > gha.bsup ``` This code path in `super` is not multi-threaded so not particularly performant but, -on our test machine, it takes about the same time as the `duckdb` method of creating -a schema-fused table. +on our test machine, this runs more than 2x faster than the `duckdb` method of +creating a schema-fused table and just a bit faster than `clickhouse` could +load the data to its beta JSON type. Here are the resulting file sizes: ``` -% du -h gha.db gha.parquet gha.bsup gharchive_gz -9.3G gha.db -4.6G gha.parquet -2.8G gha.bsup -2.2G gharchive_gz +% du -h gha.db gha.parquet gha.bsup gharchive_gz clickhouse/store +9.3G gha.db +4.6G gha.parquet +2.8G gha.bsup +2.2G gharchive_gz + 15G clickhouse/store ``` ### The Test Queries @@ -733,17 +754,17 @@ The test queries involve these patterns: * count by field aggregation * rank over union of disparate field types -We will call these tests `search`, `search+`, `count`, `agg`, and `union`, respectively +We will call these tests [search](#search), [search+](#search-1), [count](#count), [agg](#agg), and [union](#union), respectively #### Search -For the search test, we'll search for the string pattern +For the _search_ test, we'll search for the string pattern ``` "in case you have any feedback 😊" ``` in the field `payload.pull_request.body` and we'll just count the number of matches found. -The number of matches is small (3) so the query performance is dominated +The number of matches is small (2) so the query performance is dominated by the search. The SQL for this query is @@ -752,9 +773,17 @@ SELECT count() FROM 'gha.parquet' -- or gha WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' ``` -SuperSQL has a function called `grep` that is similar to the SQL `LIKE` clause but -can operate over specified fields or default to all the string fields in any value. -The SuperSQL query is +To query the data stored with the ClickHouse JSON type, field +references needed to be rewritten relative to the named column `v`. +```sql +SELECT count() +FROM 'gha' +WHERE v.payload.pull_request.body LIKE '%in case you have any feedback 😊%' +``` +SuperSQL supports `LIKE` and could run the plain SQL query, but it also has a +similar function called [`grep`](../language/functions/grep.md) that can operate over specified fields or +default to all the string fields in any value. The SuperSQL query that uses +`grep` is ```sql SELECT count() FROM 'gha.bsup' @@ -776,34 +805,82 @@ WHERE id LIKE '%in case you have any feedback 😊%' OR payload.member.type LIKE '%in case you have any feedback 😊%' ``` There are 486 such fields. You can review the entire query in -[docs/commands/search.sql](search.sql). +[`search+.sql`](https://github.com/brimdata/super/blob/main/scripts/super-cmd-perf/queries/search%2B.sql). + +To query the data stored with the ClickHouse JSON type, field +references needed to be rewritten relative to the named column `v`. +```sql +SELECT count() +FROM 'gha' +WHERE + v.id LIKE '%in case you have any feedback 😊%' + OR v.type LIKE '%in case you have any feedback 😊%' +... +``` + +In SuperSQL, `grep` allows for a much shorter query. +```sql +SELLECT count() +FROM 'gha.bsup' +WHERE grep('in case you have any feedback 😊') +``` #### Count -In the `count` test, we filter the input with a WHERE clause and count the results. +In the _count_ test, we filter the input with a `WHERE` clause and count the results. We chose a random GitHub user name for the filter. This query has the form: -``` +```sql SELECT count() FROM 'gha.parquet' -- or gha or 'gha.bsup' WHERE actor.login='johnbieren'" ``` +To query the data stored with the ClickHouse JSON type, field +references needed to be rewritten relative to the named column `v`. +```sql +SELECT count() +FROM 'gha' +WHERE v.actor.login='johnbieren' +``` + #### Agg -In the `agg` test, we filter the input and count the results grouped by the field `type` +In the _agg_ test, we filter the input and count the results grouped by the field `type` as in the DuckDB blog. This query has the form: -``` +```sql SELECT count(),type FROM 'gha.parquet' -- or 'gha' or 'gha.bsup' WHERE repo.name='duckdb/duckdb' GROUP BY type ``` +To query the data stored with the ClickHouse JSON type, field +references needed to be rewritten relative to the named column `v`. +```sql +SET allow_suspicious_types_in_group_by = 1; +SELECT count(),v.type +FROM 'gha' +WHERE v.repo.name='duckdb/duckdb' +GROUP BY v.type +``` + +Also, we had to enable the `allow_suspicious_types_in_group_by` setting as +shown above because an initial attempt to query with default settings +triggered the error: +``` +Code: 44. DB::Exception: Received from localhost:9000. DB::Exception: Data +types Variant/Dynamic are not allowed in GROUP BY keys, because it can lead +to unexpected results. Consider using a subcolumn with a specific data type +instead (for example 'column.Int64' or 'json.some.path.:Int64' if its a JSON +path subcolumn) or casting this column to a specific data type. Set setting +allow_suspicious_types_in_group_by = 1 in order to allow it. (ILLEGAL_COLUMN) +``` + #### Union -The `union` test is straight out of the DuckDB blog at the end of +The _union_ test is straight out of the DuckDB blog at the end of [this section](https://duckdb.org/2023/03/03/json.html#handling-inconsistent-json-schemas). This query computes the GitHub users that were assigned as a PR reviewer the most often and returns the top 5 such users. @@ -816,10 +893,10 @@ This query is: ```sql WITH assignees AS ( SELECT payload.pull_request.assignee.login assignee - FROM 'gha.parquet' + FROM 'gha.parquet' -- or 'gha' UNION ALL SELECT unnest(payload.pull_request.assignees).login assignee - FROM 'gha.parquet' + FROM 'gha.parquet' -- or 'gha' ) SELECT assignee, count(*) count FROM assignees @@ -835,19 +912,47 @@ FROM 'gha.parquet' ``` as ```sql -SELECT rec.login as assignee FROM ( - SELECT unnest(payload.pull_request.assignees) rec +SELECT object.login as assignee FROM ( + SELECT unnest(payload.pull_request.assignees) object FROM 'gha.parquet' ) ``` and for ClickHouse, we had to use `arrayJoin` instead of `unnest`. -SuperSQL's data model does not require these sorts of gymnastics as +Even with this change ClickHouse could only run the query successfully against +the Parquet data, as after rewriting the field references to attempt to +query the data stored with the ClickHouse JSON type it would not run. We +suspect this is likely due to some remaining work in ClickHouse for `arrayJoin` +to work with the new JSON type. +``` +$ clickhouse-client --query " + WITH assignees AS ( + SELECT v.payload.pull_request.assignee.login assignee + FROM 'gha' + UNION ALL + SELECT arrayJoin(v.payload.pull_request.assignees).login assignee + FROM 'gha' + ) + SELECT assignee, count(*) count + FROM assignees + WHERE assignee IS NOT NULL + GROUP BY assignee + ORDER BY count DESC + LIMIT 5" + +Received exception from server (version 24.11.1): +Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: First +argument for function tupleElement must be tuple or array of tuple. Actual +Dynamic: In scope SELECT tupleElement(arrayJoin(v.payload.pull_request.assignees), +'login') AS assignee FROM gha. (ILLEGAL_TYPE_OF_ARGUMENT) +``` + +SuperSQL's data model does not require these kinds of gymnastics as everything does not have to be jammed into a table. Instead, we can use the -`UNNEST` pipe operator combined with the spread operator applied to the array of +`UNNEST` pipe operator combined with the [spread operator](../language/expressions.md#array-expressions) applied to the array of string fields to easily produce a stream of string values representing the assignees. Then we simply aggregate the assignee stream: -``` +```sql FROM 'gha.bsup' | UNNEST [...payload.pull_request.assignees, payload.pull_request.assignee] | WHERE this IS NOT NULL @@ -858,30 +963,36 @@ FROM 'gha.bsup' ### The Test Results -The following table summarizes the results of each test as a column and -each tool as a row with the speed-up factor shown in parentheses: - -| tool | format | search | search+ | count | agg | union | -|--------------|---------------|---------------|---------------|----|------|-------| -| `super` | `bsup` | 3.2 (2.6X) | 6.7 (3.6X) | 3.2 (0.04X) | 3.1 (0.04X) | 3.8 (117X) | -| `super` | `parquet` | note 1 | note 1 | 0.18 (0.7X) | 0.27 (0.4X) | note 2 | -| `duckdb` | `db` | 8.2 | 24 | 0.13 | 0.12 | 446 | -| `duckdb` | `parquet` | 8.4 (1) | 23 (1X) | 0.26 (0.5X) | 0.21 (0.6X) | 419 (1.1X) | -| `datafusion` | `parquet` | 9.1 (0.9X) | 18 (1.3X) | 0.24 (0.5X) | 0.24 (0.5X) | 40 (11x) | -| `clickhouse` | `parquet` | 56 (0.1X) | 463 (0.1X) | 1 (0.1X) | 0.91 (0.1X) | 66 (7X) | +The following table summarizes the query performance for each tool as recorded in the +[most recent archived run](https://super-cmd-perf.s3.us-east-2.amazonaws.com/2024-12-03_00-43-29.tgz). +The run time for each query in seconds is shown along with the speed-up factor +in parentheses: + +|**Tool**|**Format**|**search**|**search+**|**count**|**agg**|**union**| +|-|-|-|-|-|-|-| +|`super`|`bsup`|6.4
(2.0x)|14.3
(1.4x)|5.8
(0.03x)|5.7
(0.03x)|8.2
(64x)| +|`super`|`parquet`|note 1|note 1|0.3
(0.6x)|0.5
(0.3x)|note 2| +|`duckdb`|`db`|13.0
(1x)|20.0
(1x)|0.2
(1x)|0.1
(1x)|521
(1x)| +|`duckdb`|`parquet`|13.4
(1.0x)|21.4
(0.9x)|0.4
(0.4x)|0.3
(0.4x)|504
(1.0x)| +|`datafusion`|`parquet`|11.0
(1.2x)|21.7
(0.9x)|0.4
(0.5x)|0.4
(0.4x)|24.6
(21x)| +|`clickhouse`|`parquet`|71
(0.2x)|870
(0.02x)|1.0
(0.2x)|0.9
(0.2x)|72
(7x)| +|`clickhouse`|`db`|0.9
(14x)|13.2
(1.5x)|0.1
(2.2x)|0.1
(1.1x)|note 3| _Note 1: the `super` vectorized runtime does not yet support `grep`_ _Note 2: the `super` vectorized runtime does not yet support array expressions_ -Since DuckDB with its native format is overall the best performing, -we used it as the baseline for all of the speedup factors. +_Note 3: we were not able to successfully run the [union query](#union) with +ClickHouse's beta JSON type_ + +Since DuckDB with its native format could successfully run all queries with +decent performance, we used it as the baseline for all of the speed-up factors. To summarize, -`super` with Super Binary is substantially faster than the relational systems for +`super` with Super Binary is substantially faster than multiple relational systems for the search use cases and performs on par with the others for traditional OLAP queries, -except for the union query, where the super-structured data model trounces the relational -model (by over 100X!) for stitching together disparate data types for analysis in an aggregation. +except for the _union_ query, where the super-structured data model trounces the relational +model (by over 60x!) for stitching together disparate data types for analysis in an aggregation. ## Appendix 1: Preparing the Test Data @@ -925,16 +1036,16 @@ FROM ( Hmm, now `duckdb` runs out of memory. We then thought we'd see if the sampling algorithm of `read_json` is more efficient, -so we ran tried this command with successively larger sample sizes: +so we tried this command with successively larger sample sizes: ``` duckdb scratch -c "CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', sample_size=1000000)" ``` -even with a million rows as the sample, `duckdb` fails with +Even with a million rows as the sample, `duckdb` fails with ``` Invalid Input Error: JSON transform error in file "gharchive_gz/2023-02-08-14.json.gz", in line 49745: Object {"issues":"write","metadata":"read","pull_requests... has unknown key "repository_hooks" Try increasing 'sample_size', reducing 'maximum_depth', specifying 'columns', 'format' or 'records' manually, setting 'ignore_errors' to true, or setting 'union_by_name' to true when reading multiple files with a different structure. ``` -Ok, there 4434953 JSON objects in the input so let's try this: +Ok, there 4,434,953 JSON objects in the input so let's try this: ``` duckdb gha.db -c "CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', sample_size=4434953)" ``` @@ -949,344 +1060,669 @@ Sure enough, this works: ``` duckdb gha.db -c "CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', union_by_name=true)" ``` -We now have the `duckdb` database file for our GitHub Archive data called `gha.db` +We now have the DuckDB database file for our GitHub Archive data called `gha.db` containing a single table called `gha` embedded in that database. What about the super-structured format for the `super` command? There is no need to futz with sample sizes, -schema inference, or union by name, just run this to create a Super Binary file: +schema inference, or union by name. Just run this to create a Super Binary file: ``` super gharchive_gz/*.json.gz > gha.bsup ``` ## Appendix 2: Running the Tests -This appendix provides the raw tests and output that we run on a MacBook Pro to generate -the table of results above. +This appendix provides the raw tests and output from the [most recent archived run](https://super-cmd-perf.s3.us-east-2.amazonaws.com/2024-12-03_00-43-29.tgz) +of the tests via [automated scripts](https://github.com/brimdata/super/blob/main/scripts/super-cmd-perf) +on an AWS [`m6idn.2xlarge`](https://aws.amazon.com/ec2/instance-types/m6i/) instance. ### Search Test ``` -; time super -c " - SELECT count() - FROM 'gha.bsup' - WHERE grep('in case you have any feedback 😊', payload.pull_request.body) -" -{count:2(uint64)} -super -c 12.70s user 0.69s system 415% cpu 3.223 total +About to execute +================ +clickhouse-client --queries-file /mnt/tmpdir/tmp.oymd2K7311 + +With query +========== +SELECT count() +FROM 'gha' +WHERE v.payload.pull_request.body LIKE '%in case you have any feedback 😊%' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse-client --queries-file /mnt/tmpdir/tmp.oymd2K7311' +Benchmark 1: clickhouse-client --queries-file /mnt/tmpdir/tmp.oymd2K7311 +2 + Time (abs ≡): 0.904 s [User: 0.038 s, System: 0.030 s] + +About to execute +================ +clickhouse --queries-file /mnt/tmpdir/tmp.K3EjBntwdo + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.K3EjBntwdo' +Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.K3EjBntwdo +2 + Time (abs ≡): 70.647 s [User: 70.320 s, System: 3.447 s] + +About to execute +================ +datafusion-cli --file /mnt/tmpdir/tmp.zSkYYYeSG6 + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.zSkYYYeSG6' +Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.zSkYYYeSG6 +DataFusion CLI v43.0.0 ++---------+ +| count() | ++---------+ +| 2 | ++---------+ +1 row(s) fetched. +Elapsed 10.764 seconds. + + Time (abs ≡): 10.990 s [User: 66.344 s, System: 10.974 s] + +About to execute +================ +duckdb /mnt/gha.db < /mnt/tmpdir/tmp.31z1ThfK6B + +With query +========== +SELECT count() +FROM 'gha' +WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' -time duckdb gha.db -c " - SELECT count() - FROM gha - WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' -" ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.31z1ThfK6B' +Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.31z1ThfK6B ┌──────────────┐ │ count_star() │ │ int64 │ ├──────────────┤ │ 2 │ └──────────────┘ -duckdb gha.db -c 26.66s user 6.90s system 406% cpu 8.266 total + Time (abs ≡): 12.985 s [User: 78.328 s, System: 9.270 s] + +About to execute +================ +duckdb < /mnt/tmpdir/tmp.x2HfLY0RBU + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' -; time duckdb -c " - SELECT count() - FROM gha.parquet - WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' -" ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.x2HfLY0RBU' +Benchmark 1: duckdb < /mnt/tmpdir/tmp.x2HfLY0RBU ┌──────────────┐ │ count_star() │ │ int64 │ ├──────────────┤ │ 2 │ └──────────────┘ -duckdb -c 42.71s user 6.06s system 582% cpu 8.380 total + Time (abs ≡): 13.356 s [User: 89.551 s, System: 6.785 s] + +About to execute +================ +super -z -I /mnt/tmpdir/tmp.KmM8c3l1gb + +With query +========== +SELECT count() +FROM '/mnt/gha.bsup' +WHERE grep('in case you have any feedback 😊', payload.pull_request.body) -; time datafusion-cli -c " - SELECT count() - FROM 'gha.parquet' - WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' -" ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.KmM8c3l1gb' +Benchmark 1: super -z -I /mnt/tmpdir/tmp.KmM8c3l1gb +{count:2(uint64)} + Time (abs ≡): 6.442 s [User: 23.375 s, System: 1.777 s] + +``` +### Search+ Test + +``` +About to execute +================ +clickhouse-client --queries-file /mnt/tmpdir/tmp.tgIZkIc6XA + +With query +========== +SELECT count() +FROM 'gha' +WHERE + v.id LIKE '%in case you have any feedback 😊%' + OR v.type LIKE '%in case you have any feedback 😊%' + ... + OR v.payload.member.type LIKE '%in case you have any feedback 😊%' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse-client --queries-file /mnt/tmpdir/tmp.tgIZkIc6XA' +Benchmark 1: clickhouse-client --queries-file /mnt/tmpdir/tmp.tgIZkIc6XA +3 + Time (abs ≡): 13.244 s [User: 0.058 s, System: 0.022 s] + +About to execute +================ +clickhouse --queries-file /mnt/tmpdir/tmp.0ENj1f6lI8 + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE + id LIKE '%in case you have any feedback 😊%' + OR type LIKE '%in case you have any feedback 😊%' + ... + OR payload.member.type LIKE '%in case you have any feedback 😊%' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.0ENj1f6lI8' +Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.0ENj1f6lI8 +3 + Time (abs ≡): 870.218 s [User: 950.089 s, System: 18.760 s] + +About to execute +================ +datafusion-cli --file /mnt/tmpdir/tmp.veTUjcdQto + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE + id LIKE '%in case you have any feedback 😊%' + OR type LIKE '%in case you have any feedback 😊%' + ... + OR payload.member.type LIKE '%in case you have any feedback 😊%' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.veTUjcdQto' +Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.veTUjcdQto DataFusion CLI v43.0.0 +---------+ | count() | +---------+ -| 2 | +| 3 | +---------+ -1 row(s) fetched. -Elapsed 8.819 seconds. - -datafusion-cli -c 40.75s user 6.72s system 521% cpu 9.106 total - -; time clickhouse -q " - SELECT count() - FROM 'gha.parquet' - WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' -" -2 -clickhouse -q 50.81s user 1.83s system 94% cpu 55.994 total -``` +1 row(s) fetched. +Elapsed 21.422 seconds. -### Search+ Test - -``` -; time super -c " - SELECT count() - FROM 'gha.bsup' - WHERE grep('in case you have any feedback 😊') -" -{count:3(uint64)} -super -c 43.80s user 0.71s system 669% cpu 6.653 total + Time (abs ≡): 21.661 s [User: 129.457 s, System: 19.646 s] + +About to execute +================ +duckdb /mnt/gha.db < /mnt/tmpdir/tmp.CcmsLBMCmv -; time duckdb gha.db < search.sql +With query +========== +SELECT count() +FROM 'gha' +WHERE + id LIKE '%in case you have any feedback 😊%' + OR type LIKE '%in case you have any feedback 😊%' + ... + OR payload.member.type LIKE '%in case you have any feedback 😊%' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.CcmsLBMCmv' +Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.CcmsLBMCmv ┌──────────────┐ │ count_star() │ │ int64 │ ├──────────────┤ │ 3 │ └──────────────┘ -duckdb gha.db < search.sql 73.60s user 33.29s system 435% cpu 24.563 total - -; time duckdb < search-parquet.sql + Time (abs ≡): 20.043 s [User: 137.850 s, System: 10.587 s] + +About to execute +================ +duckdb < /mnt/tmpdir/tmp.BI1AC3TnV2 + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE + id LIKE '%in case you have any feedback 😊%' + OR type LIKE '%in case you have any feedback 😊%' + ... + OR payload.member.type LIKE '%in case you have any feedback 😊%' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.BI1AC3TnV2' +Benchmark 1: duckdb < /mnt/tmpdir/tmp.BI1AC3TnV2 ┌──────────────┐ │ count_star() │ │ int64 │ ├──────────────┤ │ 3 │ └──────────────┘ -duckdb < search-parquet.sql 89.57s user 29.21s system 513% cpu 23.113 total + Time (abs ≡): 21.352 s [User: 144.078 s, System: 9.044 s] + +About to execute +================ +super -z -I /mnt/tmpdir/tmp.v0WfEuBi8J + +With query +========== +SELECT count() +FROM '/mnt/gha.bsup' +WHERE grep('in case you have any feedback 😊') + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.v0WfEuBi8J' +Benchmark 1: super -z -I /mnt/tmpdir/tmp.v0WfEuBi8J +{count:3(uint64)} + Time (abs ≡): 14.311 s [User: 104.946 s, System: 1.880 s] +``` + +### Count Test + +``` +About to execute +================ +clickhouse-client --queries-file /mnt/tmpdir/tmp.CFT0wwiAbD + +With query +========== +SELECT count() +FROM 'gha' +WHERE v.actor.login='johnbieren' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse-client --queries-file /mnt/tmpdir/tmp.CFT0wwiAbD' +Benchmark 1: clickhouse-client --queries-file /mnt/tmpdir/tmp.CFT0wwiAbD +879 + Time (abs ≡): 0.080 s [User: 0.025 s, System: 0.018 s] + +About to execute +================ +clickhouse --queries-file /mnt/tmpdir/tmp.XFTW0X911r + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE actor.login='johnbieren' + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.XFTW0X911r' +Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.XFTW0X911r +879 + Time (abs ≡): 0.954 s [User: 0.809 s, System: 0.164 s] + +About to execute +================ +datafusion-cli --file /mnt/tmpdir/tmp.QLU5fBDx7L + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE actor.login='johnbieren' -; time datafusion-cli -f search-parquet.sql ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.QLU5fBDx7L' +Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.QLU5fBDx7L DataFusion CLI v43.0.0 +---------+ | count() | +---------+ -| 3 | +| 879 | +---------+ -1 row(s) fetched. -Elapsed 18.184 seconds. -datafusion-cli -f search-parquet.sql 83.84s user 11.13s system 513% cpu 18.494 total - -; time clickhouse --queries-file search-parquet.sql -3 -clickhouse --queries-file search-parquet.sql 515.68s user 5.50s system 112% cpu 7:43.37 total -``` -### Count Test +1 row(s) fetched. +Elapsed 0.340 seconds. -``` -; time super -c " - SELECT count() - FROM 'gha.bsup' - WHERE actor.login='johnbieren' -" -{count:879(uint64)} -super -c 13.81s user 0.71s system 449% cpu 3.233 total + Time (abs ≡): 0.388 s [User: 1.601 s, System: 0.417 s] + +About to execute +================ +duckdb /mnt/gha.db < /mnt/tmpdir/tmp.WVteXNRqfp -; time SUPER_VAM=1 super -c " - SELECT count() - FROM 'gha.parquet' - WHERE actor.login='johnbieren' -" -{count:879(uint64)} -SUPER_VAM=1 super -c 0.43s user 0.08s system 277% cpu 0.182 total +With query +========== +SELECT count() +FROM 'gha' +WHERE actor.login='johnbieren' -; time duckdb gha.db -c " - SELECT count() - FROM gha - WHERE actor.login='johnbieren' -" ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.WVteXNRqfp' +Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.WVteXNRqfp ┌──────────────┐ │ count_star() │ │ int64 │ ├──────────────┤ │ 879 │ └──────────────┘ -duckdb gha.db -c 0.64s user 0.06s system 517% cpu 0.134 total + Time (abs ≡): 0.177 s [User: 1.011 s, System: 0.137 s] + +About to execute +================ +duckdb < /mnt/tmpdir/tmp.b5T64pDmwq + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE actor.login='johnbieren' -; time duckdb -c " - SELECT count() - FROM 'gha.parquet' - WHERE actor.login='johnbieren' -" ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.b5T64pDmwq' +Benchmark 1: duckdb < /mnt/tmpdir/tmp.b5T64pDmwq ┌──────────────┐ │ count_star() │ │ int64 │ ├──────────────┤ │ 879 │ └──────────────┘ -duckdb gha.db -c 1.14s user 0.14s system 490% cpu 0.261 total - -DataFusion CLI v43.0.0 -+---------+ -| count() | -+---------+ -| 879 | -+---------+ -1 row(s) fetched. -Elapsed 0.203 seconds. + Time (abs ≡): 0.416 s [User: 2.235 s, System: 0.187 s] + +About to execute +================ +super -z -I /mnt/tmpdir/tmp.s5e3Ueg2zU + +With query +========== +SELECT count() +FROM '/mnt/gha.bsup' +WHERE actor.login='johnbieren' -datafusion-cli -c 0.93s user 0.15s system 453% cpu 0.238 total ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.s5e3Ueg2zU' +Benchmark 1: super -z -I /mnt/tmpdir/tmp.s5e3Ueg2zU +{count:879(uint64)} + Time (abs ≡): 5.830 s [User: 17.284 s, System: 1.737 s] + +About to execute +================ +SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.2f1t2J9pWR + +With query +========== +SELECT count() +FROM '/mnt/gha.parquet' +WHERE actor.login='johnbieren' -; time clickhouse -q " - SELECT count() - FROM 'gha.parquet' - WHERE actor.login='johnbieren' -" -879 -clickhouse -q 0.86s user 0.07s system 93% cpu 1.001 total ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.2f1t2J9pWR' +Benchmark 1: SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.2f1t2J9pWR +{count:879(uint64)} + Time (abs ≡): 0.301 s [User: 0.740 s, System: 0.257 s] ``` ### Agg Test ``` -; time super -c " - SELECT count(),type - FROM 'gha.bsup' - WHERE repo.name='duckdb/duckdb' - GROUP BY type -" -{type:"PullRequestReviewEvent",count:14(uint64)} -{type:"IssueCommentEvent",count:30(uint64)} -{type:"WatchEvent",count:29(uint64)} -{type:"PullRequestEvent",count:35(uint64)} -{type:"PushEvent",count:15(uint64)} -{type:"IssuesEvent",count:9(uint64)} -{type:"ForkEvent",count:3(uint64)} -{type:"PullRequestReviewCommentEvent",count:7(uint64)} -super -c 12.24s user 0.68s system 413% cpu 3.129 total - -; time SUPER_VAM=1 super -c " - SELECT count(),type - FROM 'gha.parquet' - WHERE repo.name='duckdb/duckdb' - GROUP BY type -" -{type:"IssueCommentEvent",count:30(uint64)} -{type:"PullRequestEvent",count:35(uint64)} -{type:"PushEvent",count:15(uint64)} -{type:"WatchEvent",count:29(uint64)} -{type:"PullRequestReviewEvent",count:14(uint64)} -{type:"ForkEvent",count:3(uint64)} -{type:"PullRequestReviewCommentEvent",count:7(uint64)} -{type:"IssuesEvent",count:9(uint64)} -SUPER_VAM=1 super -c 1.01s user 0.13s system 421% cpu 0.271 total - -; time duckdb gha.db -c " - SELECT count(),type - FROM gha - WHERE repo.name='duckdb/duckdb' - GROUP BY type -" +About to execute +================ +clickhouse-client --queries-file /mnt/tmpdir/tmp.hFAMHegng8 + +With query +========== +SET allow_suspicious_types_in_group_by = 1; +SELECT count(),v.type +FROM 'gha' +WHERE v.repo.name='duckdb/duckdb' +GROUP BY v.type + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse-client --queries-file /mnt/tmpdir/tmp.hFAMHegng8' +Benchmark 1: clickhouse-client --queries-file /mnt/tmpdir/tmp.hFAMHegng8 +14 PullRequestReviewEvent +15 PushEvent +9 IssuesEvent +3 ForkEvent +7 PullRequestReviewCommentEvent +29 WatchEvent +30 IssueCommentEvent +35 PullRequestEvent + Time (abs ≡): 0.132 s [User: 0.034 s, System: 0.018 s] + +About to execute +================ +clickhouse --queries-file /mnt/tmpdir/tmp.MiXEgFCu5o + +With query +========== +SELECT count(),type +FROM '/mnt/gha.parquet' +WHERE repo.name='duckdb/duckdb' +GROUP BY type + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.MiXEgFCu5o' +Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.MiXEgFCu5o +30 IssueCommentEvent +14 PullRequestReviewEvent +15 PushEvent +29 WatchEvent +7 PullRequestReviewCommentEvent +9 IssuesEvent +3 ForkEvent +35 PullRequestEvent + Time (abs ≡): 0.864 s [User: 0.747 s, System: 0.180 s] + +About to execute +================ +datafusion-cli --file /mnt/tmpdir/tmp.uI0r2dLw8f + +With query +========== +SELECT count(),type +FROM '/mnt/gha.parquet' +WHERE repo.name='duckdb/duckdb' +GROUP BY type + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.uI0r2dLw8f' +Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.uI0r2dLw8f +DataFusion CLI v43.0.0 ++---------+-------------------------------+ +| count() | type | ++---------+-------------------------------+ +| 3 | ForkEvent | +| 15 | PushEvent | +| 35 | PullRequestEvent | +| 14 | PullRequestReviewEvent | +| 7 | PullRequestReviewCommentEvent | +| 30 | IssueCommentEvent | +| 9 | IssuesEvent | +| 29 | WatchEvent | ++---------+-------------------------------+ +8 row(s) fetched. +Elapsed 0.315 seconds. + + Time (abs ≡): 0.358 s [User: 1.385 s, System: 0.404 s] + +About to execute +================ +duckdb /mnt/gha.db < /mnt/tmpdir/tmp.Nqj23A926J + +With query +========== +SELECT count(),type +FROM 'gha' +WHERE repo.name='duckdb/duckdb' +GROUP BY type + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.Nqj23A926J' +Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.Nqj23A926J ┌──────────────┬───────────────────────────────┐ │ count_star() │ type │ │ int64 │ varchar │ ├──────────────┼───────────────────────────────┤ │ 3 │ ForkEvent │ -│ 35 │ PullRequestEvent │ +│ 14 │ PullRequestReviewEvent │ │ 29 │ WatchEvent │ -│ 7 │ PullRequestReviewCommentEvent │ +│ 30 │ IssueCommentEvent │ │ 15 │ PushEvent │ │ 9 │ IssuesEvent │ -│ 14 │ PullRequestReviewEvent │ -│ 30 │ IssueCommentEvent │ +│ 7 │ PullRequestReviewCommentEvent │ +│ 35 │ PullRequestEvent │ └──────────────┴───────────────────────────────┘ -duckdb gha.db -c 0.49s user 0.06s system 466% cpu 0.119 total - -; time duckdb -c " - SELECT count(),type - FROM 'gha.parquet' - WHERE repo.name='duckdb/duckdb' - GROUP BY type -" + Time (abs ≡): 0.143 s [User: 0.722 s, System: 0.162 s] + +About to execute +================ +duckdb < /mnt/tmpdir/tmp.LepFhAA9Y3 + +With query +========== +SELECT count(),type +FROM '/mnt/gha.parquet' +WHERE repo.name='duckdb/duckdb' +GROUP BY type + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.LepFhAA9Y3' +Benchmark 1: duckdb < /mnt/tmpdir/tmp.LepFhAA9Y3 ┌──────────────┬───────────────────────────────┐ │ count_star() │ type │ │ int64 │ varchar │ ├──────────────┼───────────────────────────────┤ +│ 3 │ ForkEvent │ +│ 15 │ PushEvent │ │ 9 │ IssuesEvent │ │ 7 │ PullRequestReviewCommentEvent │ -│ 15 │ PushEvent │ │ 14 │ PullRequestReviewEvent │ -│ 3 │ ForkEvent │ -│ 29 │ WatchEvent │ │ 35 │ PullRequestEvent │ │ 30 │ IssueCommentEvent │ +│ 29 │ WatchEvent │ └──────────────┴───────────────────────────────┘ -duckdb -c 0.73s user 0.14s system 413% cpu 0.211 total - -; time datafusion-cli -c " - SELECT count(),type - FROM 'gha.parquet' - WHERE repo.name='duckdb/duckdb' - GROUP BY type -" -DataFusion CLI v43.0.0 -+---------+-------------------------------+ -| count() | type | -+---------+-------------------------------+ -| 15 | PushEvent | -| 35 | PullRequestEvent | -| 7 | PullRequestReviewCommentEvent | -| 14 | PullRequestReviewEvent | -| 30 | IssueCommentEvent | -| 9 | IssuesEvent | -| 29 | WatchEvent | -| 3 | ForkEvent | -+---------+-------------------------------+ -8 row(s) fetched. -Elapsed 0.200 seconds. + Time (abs ≡): 0.318 s [User: 1.547 s, System: 0.159 s] + +About to execute +================ +super -z -I /mnt/tmpdir/tmp.oWK2c4UwIp + +With query +========== +SELECT count(),type +FROM '/mnt/gha.bsup' +WHERE repo.name='duckdb/duckdb' +GROUP BY type -datafusion-cli -c 0.80s user 0.15s system 398% cpu 0.238 total ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.oWK2c4UwIp' +Benchmark 1: super -z -I /mnt/tmpdir/tmp.oWK2c4UwIp +{type:"IssuesEvent",count:9(uint64)} +{type:"ForkEvent",count:3(uint64)} +{type:"PullRequestReviewCommentEvent",count:7(uint64)} +{type:"PullRequestReviewEvent",count:14(uint64)} +{type:"IssueCommentEvent",count:30(uint64)} +{type:"WatchEvent",count:29(uint64)} +{type:"PullRequestEvent",count:35(uint64)} +{type:"PushEvent",count:15(uint64)} + Time (abs ≡): 5.692 s [User: 15.531 s, System: 1.644 s] + +About to execute +================ +SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.S1AYE55Oyi + +With query +========== +SELECT count(),type +FROM '/mnt/gha.parquet' +WHERE repo.name='duckdb/duckdb' +GROUP BY type -; time clickhouse -q " - SELECT count(),type - FROM 'gha.parquet' - WHERE repo.name='duckdb/duckdb' - GROUP BY type -" -30 IssueCommentEvent -14 PullRequestReviewEvent -15 PushEvent -29 WatchEvent -9 IssuesEvent -7 PullRequestReviewCommentEvent -3 ForkEvent -35 PullRequestEvent -clickhouse -q 0.77s user 0.11s system 97% cpu 0.908 total ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.S1AYE55Oyi' +Benchmark 1: SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.S1AYE55Oyi +{type:"WatchEvent",count:29(uint64)} +{type:"PullRequestEvent",count:35(uint64)} +{type:"PushEvent",count:15(uint64)} +{type:"IssuesEvent",count:9(uint64)} +{type:"IssueCommentEvent",count:30(uint64)} +{type:"ForkEvent",count:3(uint64)} +{type:"PullRequestReviewCommentEvent",count:7(uint64)} +{type:"PullRequestReviewEvent",count:14(uint64)} + Time (abs ≡): 0.492 s [User: 2.079 s, System: 0.354 s] ``` ### Union Test ``` -time super -c " - FROM 'gha.bsup' - | SELECT VALUE payload.pull_request - | WHERE this IS NOT NULL - | UNNEST [...assignees, assignee] - | WHERE this IS NOT NULL - | AGGREGATE count() BY assignee:=login - | ORDER BY count DESC - | LIMIT 5 -" -{assignee:"poad",count:1966(uint64)} -{assignee:"vinayakkulkarni",count:508(uint64)} -{assignee:"tmtmtmtm",count:356(uint64)} -{assignee:"AMatutat",count:260(uint64)} -{assignee:"danwinship",count:208(uint64)} -super -c 12.39s user 0.95s system 351% cpu 3.797 total +About to execute +================ +clickhouse --queries-file /mnt/tmpdir/tmp.KgVFqIsPVq -; time duckdb gha.db -c " - WITH assignees AS ( - SELECT payload.pull_request.assignee.login assignee - FROM gha - UNION ALL - SELECT unnest(payload.pull_request.assignees).login assignee - FROM gha +With query +========== +WITH assignees AS ( + SELECT payload.pull_request.assignee.login assignee + FROM '/mnt/gha.parquet' + UNION ALL + SELECT arrayJoin(payload.pull_request.assignees).login assignee + FROM '/mnt/gha.parquet' +) +SELECT assignee, count(*) count +FROM assignees +WHERE assignee IS NOT NULL +GROUP BY assignee +ORDER BY count DESC +LIMIT 5 + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.KgVFqIsPVq' +Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.KgVFqIsPVq +poad 1966 +vinayakkulkarni 508 +tmtmtmtm 356 +AMatutat 260 +danwinship 208 + Time (abs ≡): 72.059 s [User: 142.588 s, System: 6.638 s] + +About to execute +================ +datafusion-cli --file /mnt/tmpdir/tmp.bWB9scRPum + +With query +========== +WITH assignees AS ( + SELECT payload.pull_request.assignee.login assignee + FROM '/mnt/gha.parquet' + UNION ALL + SELECT object.login as assignee FROM ( + SELECT unnest(payload.pull_request.assignees) object + FROM '/mnt/gha.parquet' ) - SELECT assignee, count(*) count - FROM assignees - WHERE assignee NOT NULL - GROUP BY assignee - ORDER BY count DESC - LIMIT 5 -" +) +SELECT assignee, count() count +FROM assignees +WHERE assignee IS NOT NULL +GROUP BY assignee +ORDER BY count DESC +LIMIT 5 + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.bWB9scRPum' +Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.bWB9scRPum +DataFusion CLI v43.0.0 ++-----------------+-------+ +| assignee | count | ++-----------------+-------+ +| poad | 1966 | +| vinayakkulkarni | 508 | +| tmtmtmtm | 356 | +| AMatutat | 260 | +| danwinship | 208 | ++-----------------+-------+ +5 row(s) fetched. +Elapsed 24.234 seconds. + + Time (abs ≡): 24.575 s [User: 163.931 s, System: 24.758 s] + +About to execute +================ +duckdb /mnt/gha.db < /mnt/tmpdir/tmp.3724dO4AgT + +With query +========== +WITH assignees AS ( + SELECT payload.pull_request.assignee.login assignee + FROM 'gha' + UNION ALL + SELECT unnest(payload.pull_request.assignees).login assignee + FROM 'gha' +) +SELECT assignee, count(*) count +FROM assignees +WHERE assignee IS NOT NULL +GROUP BY assignee +ORDER BY count DESC +LIMIT 5 + ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.3724dO4AgT' +Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.3724dO4AgT ┌─────────────────┬───────┐ │ assignee │ count │ │ varchar │ int64 │ @@ -1297,23 +1733,30 @@ super -c 12.39s user 0.95s system 351% cpu 3.797 total │ AMatutat │ 260 │ │ danwinship │ 208 │ └─────────────────┴───────┘ -duckdb gha.db -c 3119.93s user 90.86s system 719% cpu 7:26.22 total + Time (abs ≡): 520.980 s [User: 4062.107 s, System: 15.406 s] + +About to execute +================ +duckdb < /mnt/tmpdir/tmp.WcA1AOl9UB + +With query +========== +WITH assignees AS ( + SELECT payload.pull_request.assignee.login assignee + FROM '/mnt/gha.parquet' + UNION ALL + SELECT unnest(payload.pull_request.assignees).login assignee + FROM '/mnt/gha.parquet' +) +SELECT assignee, count(*) count +FROM assignees +WHERE assignee IS NOT NULL +GROUP BY assignee +ORDER BY count DESC +LIMIT 5 -time duckdb -c " - WITH assignees AS ( - SELECT payload.pull_request.assignee.login assignee - FROM 'gha.parquet' - UNION ALL - SELECT unnest(payload.pull_request.assignees).login assignee - FROM 'gha.parquet' - ) - SELECT assignee, count(*) count - FROM assignees - WHERE assignee NOT NULL - GROUP BY assignee - ORDER BY count DESC - LIMIT 5 -" ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.WcA1AOl9UB' +Benchmark 1: duckdb < /mnt/tmpdir/tmp.WcA1AOl9UB ┌─────────────────┬───────┐ │ assignee │ count │ │ varchar │ int64 │ @@ -1324,59 +1767,27 @@ time duckdb -c " │ AMatutat │ 260 │ │ danwinship │ 208 │ └─────────────────┴───────┘ -duckdb -c 2914.72s user 107.15s system 721% cpu 6:58.68 total - -time datafusion-cli -c " - WITH assignees AS ( - SELECT payload.pull_request.assignee.login assignee - FROM 'gha.parquet' - UNION ALL - SELECT object.login as assignee FROM ( - SELECT unnest(payload.pull_request.assignees) object - FROM 'gha.parquet' - ) - ) - SELECT assignee, count() count - FROM assignees - WHERE assignee IS NOT NULL - GROUP BY assignee - ORDER BY count DESC - LIMIT 5 -" -DataFusion CLI v43.0.0 -+-----------------+-------+ -| assignee | count | -+-----------------+-------+ -| poad | 1966 | -| vinayakkulkarni | 508 | -| tmtmtmtm | 356 | -| AMatutat | 260 | -| danwinship | 208 | -+-----------------+-------+ -5 row(s) fetched. -Elapsed 39.012 seconds. - -datafusion-cli -c 116.97s user 44.50s system 408% cpu 39.533 total + Time (abs ≡): 503.567 s [User: 3747.792 s, System: 10.013 s] + +About to execute +================ +super -z -I /mnt/tmpdir/tmp.iTtaFeoj74 + +With query +========== +FROM '/mnt/gha.bsup' +| UNNEST [...payload.pull_request.assignees, payload.pull_request.assignee] +| WHERE this IS NOT NULL +| AGGREGATE count() BY assignee:=login +| ORDER BY count DESC +| LIMIT 5 -; time clickhouse -q " - WITH assignees AS ( - SELECT payload.pull_request.assignee.login assignee - FROM 'gha.parquet' - UNION ALL - SELECT arrayJoin(payload.pull_request.assignees).login assignee - FROM 'gha.parquet' - ) - SELECT assignee, count(*) count - FROM assignees - WHERE assignee IS NOT NULL - GROUP BY assignee - ORDER BY count DESC - LIMIT 5 -" -poad 1966 -vinayakkulkarni 508 -tmtmtmtm 356 -AMatutat 260 -danwinship 208 -clickhouse -q 105.49s user 6.54s system 169% cpu 1:06.27 total ++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.iTtaFeoj74' +Benchmark 1: super -z -I /mnt/tmpdir/tmp.iTtaFeoj74 +{assignee:"poad",count:1966(uint64)} +{assignee:"vinayakkulkarni",count:508(uint64)} +{assignee:"tmtmtmtm",count:356(uint64)} +{assignee:"AMatutat",count:260(uint64)} +{assignee:"danwinship",count:208(uint64)} + Time (abs ≡): 8.184 s [User: 17.319 s, System: 1.908 s] ``` diff --git a/docs/tutorials/zed.md b/docs/tutorials/zed.md index 2fa2015b8b..a38ab961a2 100644 --- a/docs/tutorials/zed.md +++ b/docs/tutorials/zed.md @@ -9,7 +9,7 @@ analytics? This is where the `zed` command comes in. `zed` builds on the type system and language found in `zq` and adds a high performance data lake on top. > Note: `zed` is currently in alpha form. Check out its current status in the -> [`super db` command](../commands/super-db.md#status) documentation.. +> [`super db` command](../commands/super-db.md) documentation.. ## Creating a Lake diff --git a/lake/pool.go b/lake/pool.go index 70aa31de08..0d707db851 100644 --- a/lake/pool.go +++ b/lake/pool.go @@ -179,8 +179,7 @@ func filter(zctx *super.Context, ectx expr.Context, this super.Value, e expr.Eva if e == nil { return true } - val, ok := expr.EvalBool(zctx, ectx, this, e) - return ok && val.Bool() + return expr.EvalBool(zctx, ectx, this, e).Ptr().AsBool() } type BranchTip struct { diff --git a/runtime/exec/environment.go b/runtime/exec/environment.go index 3c906f6434..c30222ff90 100644 --- a/runtime/exec/environment.go +++ b/runtime/exec/environment.go @@ -18,6 +18,7 @@ import ( "github.com/brimdata/super/zbuf" "github.com/brimdata/super/zio/anyio" "github.com/brimdata/super/zio/parquetio" + "github.com/brimdata/super/zio/vngio" "github.com/segmentio/ksuid" ) @@ -124,8 +125,8 @@ func (c *closePuller) Pull(done bool) (zbuf.Batch, error) { } func (e *Environment) VectorOpen(ctx context.Context, zctx *super.Context, path, format string, fields []field.Path) (vector.Puller, error) { - if format != "parquet" { - return nil, fmt.Errorf("vector runtime supports only Parquet files") + if format != "parquet" && format != "csup" { + return nil, fmt.Errorf("vector runtime supports only Parquet and CSUP files") } if path == "-" { path = "stdio:stdin" @@ -138,7 +139,12 @@ func (e *Environment) VectorOpen(ctx context.Context, zctx *super.Context, path, if err != nil { return nil, err } - puller, err := parquetio.NewVectorReader(ctx, zctx, r, fields) + var puller vector.Puller + if format == "parquet" { + puller, err = parquetio.NewVectorReader(ctx, zctx, r, fields) + } else { + puller, err = vngio.NewVectorReader(ctx, zctx, r, fields) + } if err != nil { r.Close() return nil, err diff --git a/runtime/sam/expr/agg.go b/runtime/sam/expr/agg.go index 29bedb3e7c..30b943c7ff 100644 --- a/runtime/sam/expr/agg.go +++ b/runtime/sam/expr/agg.go @@ -34,7 +34,7 @@ func (a *Aggregator) NewFunction() agg.Function { func (a *Aggregator) Apply(zctx *super.Context, ectx Context, f agg.Function, this super.Value) { if a.where != nil { - if val, ok := EvalBool(zctx, ectx, this, a.where); !ok || !val.Bool() { + if val := EvalBool(zctx, ectx, this, a.where); !val.AsBool() { // XXX Issue #3401: do something with "where" errors. return } diff --git a/runtime/sam/expr/boolean.go b/runtime/sam/expr/boolean.go index be2d2aafc2..bd52a5e312 100644 --- a/runtime/sam/expr/boolean.go +++ b/runtime/sam/expr/boolean.go @@ -15,7 +15,7 @@ import ( // Boolean is a function that takes a Value and returns a boolean result // based on the typed value. -type Boolean func(super.Value) bool +type Boolean func(super.Value) super.Value var compareBool = map[string]func(bool, bool) bool{ "==": func(a, b bool) bool { return a == b }, @@ -34,12 +34,18 @@ func CompareBool(op string, pattern bool) (Boolean, error) { if !ok { return nil, fmt.Errorf("unknown bool comparator: %s", op) } - return func(val super.Value) bool { + return func(val super.Value) super.Value { + if val.IsNull() { + return super.NullBool + } + if val.IsError() { + return val + } if val.Type().ID() != super.IDBool { - return false + return super.False } b := val.Bool() - return compare(b, pattern) + return super.NewBool(compare(b, pattern)) }, nil } @@ -69,18 +75,24 @@ func CompareInt64(op string, pattern int64) (Boolean, error) { return nil, fmt.Errorf("unknown int comparator: %s", op) } // many different Zed data types can be compared with integers - return func(val super.Value) bool { + return func(val super.Value) super.Value { + if val.IsNull() { + return super.NullBool + } + if val.IsError() { + return val + } switch val.Type().ID() { case super.IDUint8, super.IDUint16, super.IDUint32, super.IDUint64: if v := val.Uint(); v <= math.MaxInt64 { - return CompareInt(int64(v), pattern) + return super.NewBool(CompareInt(int64(v), pattern)) } case super.IDInt8, super.IDInt16, super.IDInt32, super.IDInt64, super.IDTime, super.IDDuration: - return CompareInt(val.Int(), pattern) + return super.NewBool(CompareInt(val.Int(), pattern)) case super.IDFloat16, super.IDFloat32, super.IDFloat64: - return CompareFloat(val.Float(), float64(pattern)) + return super.NewBool(CompareFloat(val.Float(), float64(pattern))) } - return false + return super.False }, nil } @@ -103,11 +115,17 @@ func CompareIP(op string, pattern netip.Addr) (Boolean, error) { if !ok { return nil, fmt.Errorf("unknown addr comparator: %s", op) } - return func(val super.Value) bool { + return func(val super.Value) super.Value { + if val.IsNull() { + return super.NullBool + } + if val.IsError() { + return val + } if val.Type().ID() != super.IDIP { - return false + return super.False } - return compare(super.DecodeIP(val.Bytes()), pattern) + return super.NewBool(compare(super.DecodeIP(val.Bytes()), pattern)) }, nil } @@ -120,7 +138,13 @@ func CompareFloat64(op string, pattern float64) (Boolean, error) { if !ok { return nil, fmt.Errorf("unknown double comparator: %s", op) } - return func(val super.Value) bool { + return func(val super.Value) super.Value { + if val.IsNull() { + return super.NullBool + } + if val.IsError() { + return val + } switch val.Type().ID() { // We allow comparison of float constant with integer-y // fields and just use typeDouble to parse since it will do @@ -129,13 +153,13 @@ func CompareFloat64(op string, pattern float64) (Boolean, error) { // use an integer constant instead of a float constant to // compare with the integer-y field. case super.IDUint8, super.IDUint16, super.IDUint32, super.IDUint64: - return compare(float64(val.Uint()), pattern) + return super.NewBool(compare(float64(val.Uint()), pattern)) case super.IDInt8, super.IDInt16, super.IDInt32, super.IDInt64, super.IDTime, super.IDDuration: - return compare(float64(val.Int()), pattern) + return super.NewBool(compare(float64(val.Int()), pattern)) case super.IDFloat16, super.IDFloat32, super.IDFloat64: - return compare(val.Float(), pattern) + return super.NewBool(compare(val.Float(), pattern)) } - return false + return super.False }, nil } @@ -154,11 +178,17 @@ func CompareString(op string, pattern []byte) (Boolean, error) { return nil, fmt.Errorf("unknown string comparator: %s", op) } s := string(pattern) - return func(val super.Value) bool { + return func(val super.Value) super.Value { + if val.IsNull() { + return super.NullBool + } + if val.IsError() { + return val + } if val.Type().ID() == super.IDString { - return compare(byteconv.UnsafeString(val.Bytes()), s) + return super.NewBool(compare(byteconv.UnsafeString(val.Bytes()), s)) } - return false + return super.False }, nil } @@ -176,12 +206,19 @@ func CompareBytes(op string, pattern []byte) (Boolean, error) { if !ok { return nil, fmt.Errorf("unknown bytes comparator: %s", op) } - return func(val super.Value) bool { + return func(val super.Value) super.Value { + if val.IsNull() { + return super.NullBool + } + if val.IsError() { + return val + } + v := false switch val.Type().ID() { case super.IDBytes, super.IDType: - return compare(val.Bytes(), pattern) + v = compare(val.Bytes(), pattern) } - return false + return super.NewBool(v) }, nil } @@ -199,39 +236,38 @@ func CompileRegexp(pattern string) (*regexp.Regexp, error) { // NewRegexpBoolean returns a Boolean that compares values that must // be a stringy the given regexp. func NewRegexpBoolean(re *regexp.Regexp) Boolean { - return func(val super.Value) bool { + return func(val super.Value) super.Value { + if val.IsNull() { + return super.NullBool + } + v := false if val.IsString() { - return re.Match(val.Bytes()) + v = re.Match(val.Bytes()) } - return false + return super.NewBool(v) } } func CompareNull(op string) (Boolean, error) { - switch op { - case "==": - return func(val super.Value) bool { - return val.IsNull() - }, nil - case "!=": - return func(val super.Value) bool { - return !val.IsNull() - }, nil - default: - return nil, fmt.Errorf("unknown null comparator: %s", op) - } + return func(val super.Value) super.Value { + if val.IsError() { + return val + } + return super.NullBool + }, nil } // Given a predicate for comparing individual elements, produce a new // predicate that implements the "in" comparison. func Contains(compare Boolean) Boolean { - return func(val super.Value) bool { - return errMatch == val.Walk(func(typ super.Type, body zcode.Bytes) error { - if compare(super.NewValue(typ, body)) { + return func(val super.Value) super.Value { + err := val.Walk(func(typ super.Type, body zcode.Bytes) error { + if compare(super.NewValue(typ, body)) == super.True { return errMatch } return nil }) + return super.NewBool(err == errMatch) } } @@ -241,6 +277,9 @@ func Contains(compare Boolean) Boolean { // of this method as some types limit the operand to equality and // the various types handle coercion in different ways. func Comparison(op string, val super.Value) (Boolean, error) { + if val.IsNull() { + return CompareNull(op) + } switch super.TypeUnder(val.Type()).(type) { case *super.TypeOfNull: return CompareNull(op) diff --git a/runtime/sam/expr/eval.go b/runtime/sam/expr/eval.go index 1aadb68576..244332f687 100644 --- a/runtime/sam/expr/eval.go +++ b/runtime/sam/expr/eval.go @@ -34,14 +34,11 @@ func NewLogicalNot(zctx *super.Context, e Evaluator) *Not { } func (n *Not) Eval(ectx Context, this super.Value) super.Value { - val, ok := EvalBool(n.zctx, ectx, this, n.expr) - if !ok { + val := EvalBool(n.zctx, ectx, this, n.expr) + if val.IsError() || val.IsNull() { return val } - if val.Bool() { - return super.False - } - return super.True + return super.NewBool(!val.Bool()) } type And struct { @@ -64,54 +61,62 @@ func NewLogicalOr(zctx *super.Context, lhs, rhs Evaluator) *Or { return &Or{zctx, lhs, rhs} } -// EvalBool evaluates e with this and if the result is a Zed bool, returns the -// result and true. Otherwise, a Zed error (inclusive of missing) and false -// are returned. -func EvalBool(zctx *super.Context, ectx Context, this super.Value, e Evaluator) (super.Value, bool) { +// EvalBool evaluates e with this and returns the result if it is a bool or error. +// Otherwise, EvalBool returns an error. +func EvalBool(zctx *super.Context, ectx Context, this super.Value, e Evaluator) super.Value { val := e.Eval(ectx, this) - if super.TypeUnder(val.Type()) == super.TypeBool { - return val, true - } - if val.IsError() { - return val, false + if super.TypeUnder(val.Type()) == super.TypeBool || val.IsError() { + return val } - return zctx.WrapError("not type bool", val), false + return zctx.WrapError("not type bool", val) } func (a *And) Eval(ectx Context, this super.Value) super.Value { - lhs, ok := EvalBool(a.zctx, ectx, this, a.lhs) - if !ok { - return lhs - } - if !lhs.Bool() { + lhs := EvalBool(a.zctx, ectx, this, a.lhs) + rhs := EvalBool(a.zctx, ectx, this, a.rhs) + if isfalse(lhs) || isfalse(rhs) { + // anything AND FALSE = FALSE return super.False } - rhs, ok := EvalBool(a.zctx, ectx, this, a.rhs) - if !ok { + // ERROR AND NULL = ERROR + // ERROR AND TRUE = ERROR + if lhs.IsError() { + return lhs + } + if rhs.IsError() { return rhs } - if !rhs.Bool() { - return super.False + if lhs.IsNull() || rhs.IsNull() { + // NULL AND TRUE = NULL + return super.NullBool } return super.True } +func isfalse(val super.Value) bool { + return val.Type().ID() == super.IDBool && !val.IsNull() && !val.Bool() +} + func (o *Or) Eval(ectx Context, this super.Value) super.Value { - lhs, ok := EvalBool(o.zctx, ectx, this, o.lhs) - if ok && lhs.Bool() { + lhs := EvalBool(o.zctx, ectx, this, o.lhs) + rhs := EvalBool(o.zctx, ectx, this, o.rhs) + if lhs.AsBool() || rhs.AsBool() { + // anything OR TRUE = TRUE return super.True } - if lhs.IsError() && !lhs.IsMissing() { + if lhs.IsNull() || rhs.IsNull() { + // NULL OR FALSE = NULL + // NULL OR ERROR = NULL + return super.NullBool + } + // ERROR OR FALSE = ERROR + if lhs.IsError() { return lhs } - rhs, ok := EvalBool(o.zctx, ectx, this, o.rhs) - if ok { - if rhs.Bool() { - return super.True - } - return super.False + if rhs.IsError() { + return rhs } - return rhs + return super.False } type In struct { @@ -175,6 +180,9 @@ func (e *Equal) Eval(ectx Context, this super.Value) super.Value { if errVal != nil { return *errVal } + if lhsVal.IsNull() || rhsVal.IsNull() { + return super.NullBool + } result := coerce.Equal(lhsVal, rhsVal) if !e.equality { result = !result @@ -292,17 +300,9 @@ func (c *Compare) Eval(ectx Context, this super.Value) super.Value { return rhs } lhs, rhs = lhs.Under(), rhs.Under() - - if lhs.IsNull() { - if rhs.IsNull() { - return c.result(0) - } - return super.False - } else if rhs.IsNull() { - // We know lhs isn't null. - return super.False + if lhs.IsNull() || rhs.IsNull() { + return super.NullBool } - switch lid, rid := lhs.Type().ID(), rhs.Type().ID(); { case super.IsNumber(lid) && super.IsNumber(rid): return c.result(compareNumbers(lhs, rhs, lid, rid)) @@ -355,6 +355,23 @@ func compareNumbers(a, b super.Value, aid, bid int) int { return cmp.Compare(a.Uint(), b.Uint()) } +type isNullExpr struct { + eval Evaluator +} + +func NewIsNullExpr(e Evaluator) Evaluator { + return &isNullExpr{e} +} + +func (i *isNullExpr) Eval(ectx Context, this super.Value) super.Value { + val := i.eval.Eval(ectx, this) + if val.IsError() { + return val + } + return super.NewBool(val.IsNull()) + +} + func toFloat(val super.Value) float64 { return coerce.ToNumeric[float64](val) } func toInt(val super.Value) int64 { return coerce.ToNumeric[int64](val) } func toUint(val super.Value) uint64 { return coerce.ToNumeric[uint64](val) } @@ -528,6 +545,26 @@ func NewUnaryMinus(zctx *super.Context, e Evaluator) *UnaryMinus { func (u *UnaryMinus) Eval(ectx Context, this super.Value) super.Value { val := u.expr.Eval(ectx, this) typ := val.Type() + if super.IsUnsigned(typ.ID()) { + switch typ.ID() { + case super.IDUint8: + typ = super.TypeInt8 + case super.IDUint16: + typ = super.TypeInt16 + case super.IDUint32: + typ = super.TypeInt32 + default: + typ = super.TypeInt64 + } + v, ok := coerce.ToInt(val, typ) + if !ok { + return u.zctx.WrapError("cannot cast to "+zson.FormatType(typ), val) + } + if val.IsNull() { + return super.NewValue(typ, nil) + } + val = super.NewInt(typ, v) + } if val.IsNull() && super.IsNumber(typ.ID()) { return val } @@ -558,30 +595,6 @@ func (u *UnaryMinus) Eval(ectx Context, this super.Value) super.Value { return u.zctx.WrapError("unary '-' underflow", val) } return super.NewInt64(-v) - case super.IDUint8: - v := val.Uint() - if v > math.MaxInt8 { - return u.zctx.WrapError("unary '-' overflow", val) - } - return super.NewInt8(int8(-v)) - case super.IDUint16: - v := val.Uint() - if v > math.MaxInt16 { - return u.zctx.WrapError("unary '-' overflow", val) - } - return super.NewInt16(int16(-v)) - case super.IDUint32: - v := val.Uint() - if v > math.MaxInt32 { - return u.zctx.WrapError("unary '-' overflow", val) - } - return super.NewInt32(int32(-v)) - case super.IDUint64: - v := val.Uint() - if v > math.MaxInt64 { - return u.zctx.WrapError("unary '-' overflow", val) - } - return super.NewInt64(int64(-v)) } return u.zctx.WrapError("type incompatible with unary '-' operator", val) } diff --git a/runtime/sam/expr/filter.go b/runtime/sam/expr/filter.go index eeab60025e..a9a9ede499 100644 --- a/runtime/sam/expr/filter.go +++ b/runtime/sam/expr/filter.go @@ -36,7 +36,7 @@ func (s *searchByPred) Eval(ectx Context, val super.Value) super.Value { if s.searchType(typ) { return errMatch } - if s.pred(super.NewValue(typ, body)) { + if s.pred(super.NewValue(typ, body)).Ptr().AsBool() { return errMatch } return nil @@ -56,7 +56,7 @@ func (s *searchByPred) searchType(typ super.Type) bool { var nameIter FieldNameIter nameIter.Init(recType) for !nameIter.Done() { - if s.pred(super.NewString(string(nameIter.Next()))) { + if s.pred(super.NewString(string(nameIter.Next()))).Ptr().AsBool() { match = true break } @@ -129,7 +129,7 @@ func (s *search) Eval(ectx Context, val super.Value) super.Value { } return nil } - if s.compare(super.NewValue(typ, body)) { + if s.compare(super.NewValue(typ, body)).Ptr().AsBool() { return errMatch } return nil @@ -241,10 +241,7 @@ func (f *filter) Eval(ectx Context, this super.Value) super.Value { if val.IsError() { return val } - if f.pred(val) { - return super.True - } - return super.False + return f.pred(val) } type filterApplier struct { @@ -257,8 +254,8 @@ func NewFilterApplier(zctx *super.Context, e Evaluator) Evaluator { } func (f *filterApplier) Eval(ectx Context, this super.Value) super.Value { - val, ok := EvalBool(f.zctx, ectx, this, f.expr) - if ok { + val := EvalBool(f.zctx, ectx, this, f.expr) + if val.Type().ID() == super.IDBool { if val.Bool() { return this } diff --git a/runtime/sam/expr/ztests/compare-null-int64.yaml b/runtime/sam/expr/ztests/compare-null-int64.yaml deleted file mode 100644 index e718f26b96..0000000000 --- a/runtime/sam/expr/ztests/compare-null-int64.yaml +++ /dev/null @@ -1,9 +0,0 @@ -zed: put eq := (a == b), ne := (a != b), lt := (a < b), lte := (a <= b), gt := (a > b), gte := (a >= b) - -input: | - {a:1,b:null(int64)} - {a:1,b:null} - -output: | - {a:1,b:null(int64),eq:false,ne:true,lt:false,lte:false,gt:false,gte:false} - {a:1,b:null,eq:false,ne:true,lt:false,lte:false,gt:false,gte:false} diff --git a/runtime/sam/expr/ztests/compare-null-string.yaml b/runtime/sam/expr/ztests/compare-null-string.yaml deleted file mode 100644 index de7e46a279..0000000000 --- a/runtime/sam/expr/ztests/compare-null-string.yaml +++ /dev/null @@ -1,9 +0,0 @@ -zed: put eq := (a == b), ne := (a != b) - -input: | - {a:"s",b:null(string)} - {a:"s",b:null} - -output: | - {a:"s",b:null(string),eq:false,ne:true} - {a:"s",b:null,eq:false,ne:true} diff --git a/runtime/sam/expr/ztests/logical.yaml b/runtime/sam/expr/ztests/logical.yaml deleted file mode 100644 index bddc73d6be..0000000000 --- a/runtime/sam/expr/ztests/logical.yaml +++ /dev/null @@ -1,102 +0,0 @@ -script: | - echo === TRUE AND === - super -z -c "yield t AND t" in.jsup - super -z -c "yield t AND f" in.jsup - super -z -c "yield t AND n" in.jsup - super -z -c "yield missing(t AND m)" in.jsup - echo === FALSE AND === - super -z -c "yield f AND t" in.jsup - super -z -c "yield f AND f" in.jsup - super -z -c "yield f AND n" in.jsup - super -z -c "yield f AND m" in.jsup - echo === NULL AND === - super -z -c "yield n AND t" in.jsup - super -z -c "yield n AND f" in.jsup - super -z -c "yield n AND n" in.jsup - super -z -c "yield n AND m" in.jsup - echo === MISSING AND === - super -z -c "yield missing(m AND t)" in.jsup - super -z -c "yield missing(m AND f)" in.jsup - super -z -c "yield missing(m AND n)" in.jsup - super -z -c "yield missing(m AND m)" in.jsup - echo === TRUE OR === - super -z -c "yield t OR t" in.jsup - super -z -c "yield t OR f" in.jsup - super -z -c "yield t OR n" in.jsup - super -z -c "yield t OR m" in.jsup - echo === FALSE OR === - super -z -c "yield f OR t" in.jsup - super -z -c "yield f OR f" in.jsup - super -z -c "yield f OR n" in.jsup - super -z -c "yield missing(f OR m)" in.jsup - echo === NULL OR === - super -z -c "yield n OR t" in.jsup - super -z -c "yield n OR f" in.jsup - super -z -c "yield n OR n" in.jsup - super -z -c "yield missing(n OR m)" in.jsup - echo === MISSING OR === - super -z -c "yield m OR t" in.jsup - super -z -c "yield m OR f" in.jsup - super -z -c "yield m OR n" in.jsup - super -z -c "yield missing(m OR m)" in.jsup - echo === NOT - super -z -c "yield !t" in.jsup - super -z -c "yield !f" in.jsup - super -z -c "yield missing(!m)" in.jsup - super -z -c "yield !n" in.jsup - super -z -c "yield !!f" in.jsup - -inputs: - - name: in.jsup - data: | - {t:true,f:false,m:error("missing"),n:null(bool)} - -outputs: - - name: stdout - data: | - === TRUE AND === - true - false - false - true - === FALSE AND === - false - false - false - false - === NULL AND === - false - false - false - false - === MISSING AND === - true - true - true - true - === TRUE OR === - true - true - true - true - === FALSE OR === - true - false - false - true - === NULL OR === - true - false - false - true - === MISSING OR === - true - false - false - true - === NOT - false - true - true - true - false diff --git a/runtime/sam/expr/ztests/slice.yaml b/runtime/sam/expr/ztests/slice.yaml index 5ad689e99e..a67e6725b3 100644 --- a/runtime/sam/expr/ztests/slice.yaml +++ b/runtime/sam/expr/ztests/slice.yaml @@ -1,4 +1,4 @@ -zed: "cut a1:=a[1:-1],a2:=a[1:],a3:=a[:1],a4:=a[:-1],a5:=a[:-100],a6:=a[-1:],a7:=a[-2:-1],a8:=(a!=null and len(a)>0) ? a[:a[0]-8] : null" +zed: "cut a1:=a[1:-1],a2:=a[1:],a3:=a[:1],a4:=a[:-1],a5:=a[:-100],a6:=a[-1:],a7:=a[-2:-1],a8:=(a IS NOT NULL and len(a)>0) ? a[:a[0]-8] : null" input: | {a:null} diff --git a/runtime/vam/expr/agg/avg.go b/runtime/vam/expr/agg/avg.go index 214215f776..173c53d293 100644 --- a/runtime/vam/expr/agg/avg.go +++ b/runtime/vam/expr/agg/avg.go @@ -34,8 +34,16 @@ const ( ) func (a *avg) ConsumeAsPartial(partial vector.Any) { + if partial.Len() != 1 { + panic("avg: invalid partial") + } + idx := uint32(0) + if view, ok := partial.(*vector.View); ok { + idx = view.Index[0] + partial = view.Any + } rec, ok := partial.(*vector.Record) - if !ok || rec.Len() != 1 { + if !ok { panic("avg: invalid partial") } si, ok1 := rec.Typ.IndexOfField(sumName) @@ -43,13 +51,15 @@ func (a *avg) ConsumeAsPartial(partial vector.Any) { if !ok1 || !ok2 { panic("avg: invalid partial") } - sumVal, ok1 := rec.Fields[si].(*vector.Const) - countVal, ok2 := rec.Fields[ci].(*vector.Const) - if !ok1 || !ok2 || sumVal.Type() != super.TypeFloat64 || countVal.Type() != super.TypeUint64 { + sumVal := rec.Fields[si] + countVal := rec.Fields[ci] + if sumVal.Type() != super.TypeFloat64 || countVal.Type() != super.TypeUint64 { panic("avg: invalid partial") } - a.sum += sumVal.Value().Float() - a.count += countVal.Value().Uint() + sum, _ := vector.FloatValue(sumVal, idx) + count, _ := vector.UintValue(countVal, idx) + a.sum += sum + a.count += count } func (a *avg) ResultAsPartial(zctx *super.Context) super.Value { diff --git a/runtime/vam/expr/agg/count.go b/runtime/vam/expr/agg/count.go index 9272efabc7..8652fc9cd9 100644 --- a/runtime/vam/expr/agg/count.go +++ b/runtime/vam/expr/agg/count.go @@ -10,25 +10,20 @@ type count struct { } func (a *count) Consume(vec vector.Any) { - if c, ok := vec.(*vector.Const); ok { - val := c.Value() - if !val.IsNull() && !val.IsError() { - a.count += uint64(vec.Len()) - } + if c, ok := vec.(*vector.Const); ok && c.Value().IsNull() { return } if _, ok := vector.Under(vec).Type().(*super.TypeError); ok { return } - nulls := vector.NullsOf(vec) - if nulls == nil { - a.count += uint64(vec.Len()) - return - } - for i := range vec.Len() { - if !nulls.Value(i) { - a.count++ + if nulls := vector.NullsOf(vec); nulls != nil { + for i := range vec.Len() { + if !nulls.Value(i) { + a.count++ + } } + } else { + a.count += uint64(vec.Len()) } } @@ -37,11 +32,11 @@ func (a *count) Result(*super.Context) super.Value { } func (a *count) ConsumeAsPartial(partial vector.Any) { - c, ok := partial.(*vector.Const) - if !ok || c.Len() != 1 || partial.Type() != super.TypeUint64 { + if partial.Len() != 1 || partial.Type() != super.TypeUint64 { panic("count: bad partial") } - a.count += c.Value().Uint() + count, _ := vector.UintValue(partial, 0) + a.count += count } func (a *count) ResultAsPartial(*super.Context) super.Value { diff --git a/runtime/vam/expr/aggregator.go b/runtime/vam/expr/aggregator.go index 4392c3fce4..40f1d46eb9 100644 --- a/runtime/vam/expr/aggregator.go +++ b/runtime/vam/expr/aggregator.go @@ -41,15 +41,19 @@ func (a *Aggregator) Eval(this vector.Any) vector.Any { func (a *Aggregator) apply(args ...vector.Any) vector.Any { vec, where := args[0], args[1] - var tags []uint32 - // If type is not bool then we want to filter everything. - if where.Type().ID() == super.IDBool { - for slot := uint32(0); slot < where.Len(); slot++ { - // XXX Feels like we should have a optimzed version of this. - if vector.BoolValue(where, slot) { - tags = append(tags, slot) - } + bools, _ := BoolMask(where) + if bools.IsEmpty() { + // everything is filtered. + return vector.NewConst(super.NewValue(vec.Type(), nil), vec.Len(), nil) + } + bools.Flip(0, uint64(vec.Len())) + if !bools.IsEmpty() { + nulls := vector.NewBoolEmpty(vec.Len(), nil) + bools.WriteDenseTo(nulls.Bits) + if origNulls := vector.NullsOf(vec); origNulls != nil { + nulls = vector.Or(nulls, origNulls) } + vec = vector.CopyAndSetNulls(vec, nulls) } - return vector.NewView(vec, tags) + return vec } diff --git a/runtime/vam/expr/arith.go b/runtime/vam/expr/arith.go index 59c65db48d..df65859ccd 100644 --- a/runtime/vam/expr/arith.go +++ b/runtime/vam/expr/arith.go @@ -63,7 +63,8 @@ func (a *Arith) eval(vecs ...vector.Any) (out vector.Any) { } }() } - return f(lhs, rhs) + out = f(lhs, rhs) + return vector.CopyAndSetNulls(out, vector.Or(vector.NullsOf(lhs), vector.NullsOf(rhs))) } func (a *Arith) evalDivideByZero(kind vector.Kind, lhs, rhs vector.Any) vector.Any { diff --git a/runtime/vam/expr/arithfuncs.go b/runtime/vam/expr/arithfuncs.go index c3fef5965c..0ef8a2ba4c 100644 --- a/runtime/vam/expr/arithfuncs.go +++ b/runtime/vam/expr/arithfuncs.go @@ -10,9 +10,8 @@ import ( func arithAddIntFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(k)) } @@ -24,9 +23,8 @@ func arithAddIntFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(uint32(rx[k]))) } @@ -38,9 +36,8 @@ func arithAddIntFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(uint32(rx[k]))) } @@ -51,9 +48,8 @@ func arithAddIntFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + rconst) } @@ -65,9 +61,8 @@ func arithAddIntDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(k)) } @@ -81,9 +76,8 @@ func arithAddIntDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -97,9 +91,8 @@ func arithAddIntDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -112,9 +105,8 @@ func arithAddIntDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + rconst) } @@ -126,9 +118,8 @@ func arithAddIntViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(k)) } @@ -142,9 +133,8 @@ func arithAddIntViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -158,9 +148,8 @@ func arithAddIntViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -173,9 +162,8 @@ func arithAddIntViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + rconst) } @@ -186,9 +174,8 @@ func arithAddIntConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsInt() r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(k)) } @@ -201,9 +188,8 @@ func arithAddIntConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(uint32(rx[k]))) } @@ -216,9 +202,8 @@ func arithAddIntConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(uint32(rx[k]))) } @@ -230,17 +215,15 @@ func arithAddIntConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsInt() r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewInt64(lconst + rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithAddUintFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(k)) } @@ -252,9 +235,8 @@ func arithAddUintFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(uint32(rx[k]))) } @@ -266,9 +248,8 @@ func arithAddUintFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(uint32(rx[k]))) } @@ -279,9 +260,8 @@ func arithAddUintFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + rconst) } @@ -293,9 +273,8 @@ func arithAddUintDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(k)) } @@ -309,9 +288,8 @@ func arithAddUintDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -325,9 +303,8 @@ func arithAddUintDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -340,9 +317,8 @@ func arithAddUintDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + rconst) } @@ -354,9 +330,8 @@ func arithAddUintViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(k)) } @@ -370,9 +345,8 @@ func arithAddUintViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -386,9 +360,8 @@ func arithAddUintViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -401,9 +374,8 @@ func arithAddUintViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + rconst) } @@ -414,9 +386,8 @@ func arithAddUintConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsUint() r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(k)) } @@ -429,9 +400,8 @@ func arithAddUintConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(uint32(rx[k]))) } @@ -444,9 +414,8 @@ func arithAddUintConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(uint32(rx[k]))) } @@ -458,17 +427,15 @@ func arithAddUintConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsUint() r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewUint64(lconst + rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithAddFloatFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Float) r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(k)) } @@ -480,9 +447,8 @@ func arithAddFloatFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(uint32(rx[k]))) } @@ -494,9 +460,8 @@ func arithAddFloatFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(uint32(rx[k]))) } @@ -507,9 +472,8 @@ func arithAddFloatFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Float) r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + rconst) } @@ -521,9 +485,8 @@ func arithAddFloatDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Float) lx := ld.Index r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(k)) } @@ -537,9 +500,8 @@ func arithAddFloatDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -553,9 +515,8 @@ func arithAddFloatDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -568,9 +529,8 @@ func arithAddFloatDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + rconst) } @@ -582,9 +542,8 @@ func arithAddFloatViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Float) lx := ld.Index r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(k)) } @@ -598,9 +557,8 @@ func arithAddFloatViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -614,9 +572,8 @@ func arithAddFloatViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -629,9 +586,8 @@ func arithAddFloatViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + rconst) } @@ -642,9 +598,8 @@ func arithAddFloatConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsFloat() r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(k)) } @@ -657,9 +612,8 @@ func arithAddFloatConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(uint32(rx[k]))) } @@ -672,9 +626,8 @@ func arithAddFloatConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(uint32(rx[k]))) } @@ -686,17 +639,15 @@ func arithAddFloatConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsFloat() r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewFloat64(lconst + rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithAddStringFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.String) r := rhs.(*vector.String) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(k)) } @@ -708,9 +659,8 @@ func arithAddStringFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.String) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(uint32(rx[k]))) } @@ -722,9 +672,8 @@ func arithAddStringFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.String) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + r.Value(uint32(rx[k]))) } @@ -735,9 +684,8 @@ func arithAddStringFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.String) r := rhs.(*vector.Const) rconst, _ := r.AsString() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) + rconst) } @@ -749,9 +697,8 @@ func arithAddStringDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.String) lx := ld.Index r := rhs.(*vector.String) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(k)) } @@ -765,9 +712,8 @@ func arithAddStringDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.String) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -781,9 +727,8 @@ func arithAddStringDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.String) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -796,9 +741,8 @@ func arithAddStringDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsString() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + rconst) } @@ -810,9 +754,8 @@ func arithAddStringViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.String) lx := ld.Index r := rhs.(*vector.String) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(k)) } @@ -826,9 +769,8 @@ func arithAddStringViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.String) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -842,9 +784,8 @@ func arithAddStringViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.String) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + r.Value(uint32(rx[k]))) } @@ -857,9 +798,8 @@ func arithAddStringViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsString() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) + rconst) } @@ -870,9 +810,8 @@ func arithAddStringConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsString() r := rhs.(*vector.String) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(k)) } @@ -885,9 +824,8 @@ func arithAddStringConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.String) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(uint32(rx[k]))) } @@ -900,9 +838,8 @@ func arithAddStringConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.String) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewStringEmpty(n, nulls) + out := vector.NewStringEmpty(n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst + r.Value(uint32(rx[k]))) } @@ -914,17 +851,15 @@ func arithAddStringConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsString() r := rhs.(*vector.Const) rconst, _ := r.AsString() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewString(lconst + rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithSubIntFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - r.Value(k)) } @@ -936,9 +871,8 @@ func arithSubIntFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - r.Value(uint32(rx[k]))) } @@ -950,9 +884,8 @@ func arithSubIntFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - r.Value(uint32(rx[k]))) } @@ -963,9 +896,8 @@ func arithSubIntFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - rconst) } @@ -977,9 +909,8 @@ func arithSubIntDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(k)) } @@ -993,9 +924,8 @@ func arithSubIntDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1009,9 +939,8 @@ func arithSubIntDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1024,9 +953,8 @@ func arithSubIntDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - rconst) } @@ -1038,9 +966,8 @@ func arithSubIntViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(k)) } @@ -1054,9 +981,8 @@ func arithSubIntViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1070,9 +996,8 @@ func arithSubIntViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1085,9 +1010,8 @@ func arithSubIntViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - rconst) } @@ -1098,9 +1022,8 @@ func arithSubIntConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsInt() r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst - r.Value(k)) } @@ -1113,9 +1036,8 @@ func arithSubIntConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst - r.Value(uint32(rx[k]))) } @@ -1128,9 +1050,8 @@ func arithSubIntConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst - r.Value(uint32(rx[k]))) } @@ -1142,17 +1063,15 @@ func arithSubIntConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsInt() r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewInt64(lconst - rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithSubUintFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - r.Value(k)) } @@ -1164,9 +1083,8 @@ func arithSubUintFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - r.Value(uint32(rx[k]))) } @@ -1178,9 +1096,8 @@ func arithSubUintFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - r.Value(uint32(rx[k]))) } @@ -1191,9 +1108,8 @@ func arithSubUintFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - rconst) } @@ -1205,9 +1121,8 @@ func arithSubUintDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(k)) } @@ -1221,9 +1136,8 @@ func arithSubUintDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1237,9 +1151,8 @@ func arithSubUintDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1252,9 +1165,8 @@ func arithSubUintDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - rconst) } @@ -1266,9 +1178,8 @@ func arithSubUintViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(k)) } @@ -1282,9 +1193,8 @@ func arithSubUintViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1298,9 +1208,8 @@ func arithSubUintViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1313,9 +1222,8 @@ func arithSubUintViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - rconst) } @@ -1326,9 +1234,8 @@ func arithSubUintConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsUint() r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst - r.Value(k)) } @@ -1341,9 +1248,8 @@ func arithSubUintConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst - r.Value(uint32(rx[k]))) } @@ -1356,9 +1262,8 @@ func arithSubUintConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst - r.Value(uint32(rx[k]))) } @@ -1370,17 +1275,15 @@ func arithSubUintConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsUint() r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewUint64(lconst - rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithSubFloatFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Float) r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - r.Value(k)) } @@ -1392,9 +1295,8 @@ func arithSubFloatFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - r.Value(uint32(rx[k]))) } @@ -1406,9 +1308,8 @@ func arithSubFloatFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - r.Value(uint32(rx[k]))) } @@ -1419,9 +1320,8 @@ func arithSubFloatFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Float) r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) - rconst) } @@ -1433,9 +1333,8 @@ func arithSubFloatDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Float) lx := ld.Index r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(k)) } @@ -1449,9 +1348,8 @@ func arithSubFloatDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1465,9 +1363,8 @@ func arithSubFloatDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1480,9 +1377,8 @@ func arithSubFloatDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - rconst) } @@ -1494,9 +1390,8 @@ func arithSubFloatViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Float) lx := ld.Index r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(k)) } @@ -1510,9 +1405,8 @@ func arithSubFloatViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1526,9 +1420,8 @@ func arithSubFloatViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - r.Value(uint32(rx[k]))) } @@ -1541,9 +1434,8 @@ func arithSubFloatViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) - rconst) } @@ -1554,9 +1446,8 @@ func arithSubFloatConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsFloat() r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst - r.Value(k)) } @@ -1569,9 +1460,8 @@ func arithSubFloatConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst - r.Value(uint32(rx[k]))) } @@ -1584,9 +1474,8 @@ func arithSubFloatConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst - r.Value(uint32(rx[k]))) } @@ -1598,17 +1487,15 @@ func arithSubFloatConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsFloat() r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewFloat64(lconst - rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithMulIntFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * r.Value(k)) } @@ -1620,9 +1507,8 @@ func arithMulIntFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * r.Value(uint32(rx[k]))) } @@ -1634,9 +1520,8 @@ func arithMulIntFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * r.Value(uint32(rx[k]))) } @@ -1647,9 +1532,8 @@ func arithMulIntFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * rconst) } @@ -1661,9 +1545,8 @@ func arithMulIntDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(k)) } @@ -1677,9 +1560,8 @@ func arithMulIntDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -1693,9 +1575,8 @@ func arithMulIntDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -1708,9 +1589,8 @@ func arithMulIntDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * rconst) } @@ -1722,9 +1602,8 @@ func arithMulIntViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(k)) } @@ -1738,9 +1617,8 @@ func arithMulIntViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -1754,9 +1632,8 @@ func arithMulIntViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -1769,9 +1646,8 @@ func arithMulIntViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * rconst) } @@ -1782,9 +1658,8 @@ func arithMulIntConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsInt() r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst * r.Value(k)) } @@ -1797,9 +1672,8 @@ func arithMulIntConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst * r.Value(uint32(rx[k]))) } @@ -1812,9 +1686,8 @@ func arithMulIntConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst * r.Value(uint32(rx[k]))) } @@ -1826,17 +1699,15 @@ func arithMulIntConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsInt() r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewInt64(lconst * rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithMulUintFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * r.Value(k)) } @@ -1848,9 +1719,8 @@ func arithMulUintFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * r.Value(uint32(rx[k]))) } @@ -1862,9 +1732,8 @@ func arithMulUintFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * r.Value(uint32(rx[k]))) } @@ -1875,9 +1744,8 @@ func arithMulUintFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * rconst) } @@ -1889,9 +1757,8 @@ func arithMulUintDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(k)) } @@ -1905,9 +1772,8 @@ func arithMulUintDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -1921,9 +1787,8 @@ func arithMulUintDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -1936,9 +1801,8 @@ func arithMulUintDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * rconst) } @@ -1950,9 +1814,8 @@ func arithMulUintViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(k)) } @@ -1966,9 +1829,8 @@ func arithMulUintViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -1982,9 +1844,8 @@ func arithMulUintViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -1997,9 +1858,8 @@ func arithMulUintViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * rconst) } @@ -2010,9 +1870,8 @@ func arithMulUintConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsUint() r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst * r.Value(k)) } @@ -2025,9 +1884,8 @@ func arithMulUintConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst * r.Value(uint32(rx[k]))) } @@ -2040,9 +1898,8 @@ func arithMulUintConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst * r.Value(uint32(rx[k]))) } @@ -2054,17 +1911,15 @@ func arithMulUintConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsUint() r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewUint64(lconst * rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithMulFloatFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Float) r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * r.Value(k)) } @@ -2076,9 +1931,8 @@ func arithMulFloatFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * r.Value(uint32(rx[k]))) } @@ -2090,9 +1944,8 @@ func arithMulFloatFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * r.Value(uint32(rx[k]))) } @@ -2103,9 +1956,8 @@ func arithMulFloatFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Float) r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) * rconst) } @@ -2117,9 +1969,8 @@ func arithMulFloatDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Float) lx := ld.Index r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(k)) } @@ -2133,9 +1984,8 @@ func arithMulFloatDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -2149,9 +1999,8 @@ func arithMulFloatDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -2164,9 +2013,8 @@ func arithMulFloatDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * rconst) } @@ -2178,9 +2026,8 @@ func arithMulFloatViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Float) lx := ld.Index r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(k)) } @@ -2194,9 +2041,8 @@ func arithMulFloatViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -2210,9 +2056,8 @@ func arithMulFloatViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * r.Value(uint32(rx[k]))) } @@ -2225,9 +2070,8 @@ func arithMulFloatViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) * rconst) } @@ -2238,9 +2082,8 @@ func arithMulFloatConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsFloat() r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst * r.Value(k)) } @@ -2253,9 +2096,8 @@ func arithMulFloatConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst * r.Value(uint32(rx[k]))) } @@ -2268,9 +2110,8 @@ func arithMulFloatConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst * r.Value(uint32(rx[k]))) } @@ -2282,17 +2123,15 @@ func arithMulFloatConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsFloat() r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewFloat64(lconst * rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithDivIntFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / r.Value(k)) } @@ -2304,9 +2143,8 @@ func arithDivIntFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / r.Value(uint32(rx[k]))) } @@ -2318,9 +2156,8 @@ func arithDivIntFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / r.Value(uint32(rx[k]))) } @@ -2331,9 +2168,8 @@ func arithDivIntFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / rconst) } @@ -2345,9 +2181,8 @@ func arithDivIntDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(k)) } @@ -2361,9 +2196,8 @@ func arithDivIntDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2377,9 +2211,8 @@ func arithDivIntDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2392,9 +2225,8 @@ func arithDivIntDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / rconst) } @@ -2406,9 +2238,8 @@ func arithDivIntViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(k)) } @@ -2422,9 +2253,8 @@ func arithDivIntViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2438,9 +2268,8 @@ func arithDivIntViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2453,9 +2282,8 @@ func arithDivIntViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / rconst) } @@ -2466,9 +2294,8 @@ func arithDivIntConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsInt() r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst / r.Value(k)) } @@ -2481,9 +2308,8 @@ func arithDivIntConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst / r.Value(uint32(rx[k]))) } @@ -2496,9 +2322,8 @@ func arithDivIntConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst / r.Value(uint32(rx[k]))) } @@ -2510,17 +2335,15 @@ func arithDivIntConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsInt() r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewInt64(lconst / rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithDivUintFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / r.Value(k)) } @@ -2532,9 +2355,8 @@ func arithDivUintFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / r.Value(uint32(rx[k]))) } @@ -2546,9 +2368,8 @@ func arithDivUintFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / r.Value(uint32(rx[k]))) } @@ -2559,9 +2380,8 @@ func arithDivUintFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / rconst) } @@ -2573,9 +2393,8 @@ func arithDivUintDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(k)) } @@ -2589,9 +2408,8 @@ func arithDivUintDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2605,9 +2423,8 @@ func arithDivUintDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2620,9 +2437,8 @@ func arithDivUintDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / rconst) } @@ -2634,9 +2450,8 @@ func arithDivUintViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(k)) } @@ -2650,9 +2465,8 @@ func arithDivUintViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2666,9 +2480,8 @@ func arithDivUintViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2681,9 +2494,8 @@ func arithDivUintViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / rconst) } @@ -2694,9 +2506,8 @@ func arithDivUintConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsUint() r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst / r.Value(k)) } @@ -2709,9 +2520,8 @@ func arithDivUintConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst / r.Value(uint32(rx[k]))) } @@ -2724,9 +2534,8 @@ func arithDivUintConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst / r.Value(uint32(rx[k]))) } @@ -2738,17 +2547,15 @@ func arithDivUintConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsUint() r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewUint64(lconst / rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithDivFloatFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Float) r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / r.Value(k)) } @@ -2760,9 +2567,8 @@ func arithDivFloatFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / r.Value(uint32(rx[k]))) } @@ -2774,9 +2580,8 @@ func arithDivFloatFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / r.Value(uint32(rx[k]))) } @@ -2787,9 +2592,8 @@ func arithDivFloatFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Float) r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) / rconst) } @@ -2801,9 +2605,8 @@ func arithDivFloatDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Float) lx := ld.Index r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(k)) } @@ -2817,9 +2620,8 @@ func arithDivFloatDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2833,9 +2635,8 @@ func arithDivFloatDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2848,9 +2649,8 @@ func arithDivFloatDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / rconst) } @@ -2862,9 +2662,8 @@ func arithDivFloatViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Float) lx := ld.Index r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(k)) } @@ -2878,9 +2677,8 @@ func arithDivFloatViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2894,9 +2692,8 @@ func arithDivFloatViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / r.Value(uint32(rx[k]))) } @@ -2909,9 +2706,8 @@ func arithDivFloatViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) / rconst) } @@ -2922,9 +2718,8 @@ func arithDivFloatConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsFloat() r := rhs.(*vector.Float) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst / r.Value(k)) } @@ -2937,9 +2732,8 @@ func arithDivFloatConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst / r.Value(uint32(rx[k]))) } @@ -2952,9 +2746,8 @@ func arithDivFloatConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Float) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewFloatEmpty(super.TypeFloat64, n, nulls) + out := vector.NewFloatEmpty(super.TypeFloat64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst / r.Value(uint32(rx[k]))) } @@ -2966,17 +2759,15 @@ func arithDivFloatConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsFloat() r := rhs.(*vector.Const) rconst, _ := r.AsFloat() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewFloat64(lconst / rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithModIntFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) % r.Value(k)) } @@ -2988,9 +2779,8 @@ func arithModIntFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) % r.Value(uint32(rx[k]))) } @@ -3002,9 +2792,8 @@ func arithModIntFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) % r.Value(uint32(rx[k]))) } @@ -3015,9 +2804,8 @@ func arithModIntFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Int) r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) % rconst) } @@ -3029,9 +2817,8 @@ func arithModIntDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(k)) } @@ -3045,9 +2832,8 @@ func arithModIntDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(uint32(rx[k]))) } @@ -3061,9 +2847,8 @@ func arithModIntDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(uint32(rx[k]))) } @@ -3076,9 +2861,8 @@ func arithModIntDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % rconst) } @@ -3090,9 +2874,8 @@ func arithModIntViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Int) lx := ld.Index r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(k)) } @@ -3106,9 +2889,8 @@ func arithModIntViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(uint32(rx[k]))) } @@ -3122,9 +2904,8 @@ func arithModIntViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(uint32(rx[k]))) } @@ -3137,9 +2918,8 @@ func arithModIntViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % rconst) } @@ -3150,9 +2930,8 @@ func arithModIntConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsInt() r := rhs.(*vector.Int) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst % r.Value(k)) } @@ -3165,9 +2944,8 @@ func arithModIntConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst % r.Value(uint32(rx[k]))) } @@ -3180,9 +2958,8 @@ func arithModIntConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Int) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewIntEmpty(super.TypeInt64, n, nulls) + out := vector.NewIntEmpty(super.TypeInt64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst % r.Value(uint32(rx[k]))) } @@ -3194,17 +2971,15 @@ func arithModIntConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsInt() r := rhs.(*vector.Const) rconst, _ := r.AsInt() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewInt64(lconst % rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } func arithModUintFlatFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) % r.Value(k)) } @@ -3216,9 +2991,8 @@ func arithModUintFlatDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) % r.Value(uint32(rx[k]))) } @@ -3230,9 +3004,8 @@ func arithModUintFlatView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) % r.Value(uint32(rx[k]))) } @@ -3243,9 +3016,8 @@ func arithModUintFlatConst(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Uint) r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(k) % rconst) } @@ -3257,9 +3029,8 @@ func arithModUintDictFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(k)) } @@ -3273,9 +3044,8 @@ func arithModUintDictDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(uint32(rx[k]))) } @@ -3289,9 +3059,8 @@ func arithModUintDictView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(uint32(rx[k]))) } @@ -3304,9 +3073,8 @@ func arithModUintDictConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % rconst) } @@ -3318,9 +3086,8 @@ func arithModUintViewFlat(lhs, rhs vector.Any) vector.Any { l := ld.Any.(*vector.Uint) lx := ld.Index r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(k)) } @@ -3334,9 +3101,8 @@ func arithModUintViewDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(uint32(rx[k]))) } @@ -3350,9 +3116,8 @@ func arithModUintViewView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % r.Value(uint32(rx[k]))) } @@ -3365,9 +3130,8 @@ func arithModUintViewConst(lhs, rhs vector.Any) vector.Any { lx := ld.Index r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(l.Value(uint32(lx[k])) % rconst) } @@ -3378,9 +3142,8 @@ func arithModUintConstFlat(lhs, rhs vector.Any) vector.Any { l := lhs.(*vector.Const) lconst, _ := l.AsUint() r := rhs.(*vector.Uint) - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst % r.Value(k)) } @@ -3393,9 +3156,8 @@ func arithModUintConstDict(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.Dict) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst % r.Value(uint32(rx[k]))) } @@ -3408,9 +3170,8 @@ func arithModUintConstView(lhs, rhs vector.Any) vector.Any { rd := rhs.(*vector.View) r := rd.Any.(*vector.Uint) rx := rd.Index - nulls := vector.Or(l.Nulls, r.Nulls) n := lhs.Len() - out := vector.NewUintEmpty(super.TypeUint64, n, nulls) + out := vector.NewUintEmpty(super.TypeUint64, n, nil) for k := uint32(0); k < n; k++ { out.Append(lconst % r.Value(uint32(rx[k]))) } @@ -3422,9 +3183,8 @@ func arithModUintConstConst(lhs, rhs vector.Any) vector.Any { lconst, _ := l.AsUint() r := rhs.(*vector.Const) rconst, _ := r.AsUint() - nulls := vector.Or(l.Nulls, r.Nulls) val := super.NewUint64(lconst % rconst) - return vector.NewConst(val, lhs.Len(), nulls) + return vector.NewConst(val, lhs.Len(), nil) } var arithFuncs = map[int]func(vector.Any, vector.Any) vector.Any{ diff --git a/runtime/vam/expr/cast/bool.go b/runtime/vam/expr/cast/bool.go index 34b6efac99..245619c66c 100644 --- a/runtime/vam/expr/cast/bool.go +++ b/runtime/vam/expr/cast/bool.go @@ -22,7 +22,7 @@ func castToBool(vec vector.Any, index []uint32) (vector.Any, []uint32, bool) { } out.Nulls = vector.NullsOf(vec) if index != nil { - out.Nulls = vector.NullsView(out.Nulls, index) + out.Nulls = vector.NewBoolView(out.Nulls, index) } return out, nil, true } diff --git a/runtime/vam/expr/cast/bytes.go b/runtime/vam/expr/cast/bytes.go index 483b4d4018..9c8834d34e 100644 --- a/runtime/vam/expr/cast/bytes.go +++ b/runtime/vam/expr/cast/bytes.go @@ -9,7 +9,7 @@ func castToBytes(vec vector.Any, index []uint32) (vector.Any, []uint32, bool) { n := lengthOf(vec, index) nulls := vector.NullsOf(vec) if index != nil { - nulls = vector.NullsView(nulls, index) + nulls = vector.NewBoolView(nulls, index) } out := vector.NewBytesEmpty(n, nulls) var b zcode.Builder diff --git a/runtime/vam/expr/cast/number.go b/runtime/vam/expr/cast/number.go index 10a6f9a604..ed401b72c6 100644 --- a/runtime/vam/expr/cast/number.go +++ b/runtime/vam/expr/cast/number.go @@ -26,19 +26,19 @@ func castToNumber(vec vector.Any, typ super.Type, index []uint32) (vector.Any, [ case super.IsSigned(id): vals, errs := toNumeric[int64](vec, typ, index) if len(errs) > 0 { - nulls = vector.NullsView(nulls, inverseIndex(errs, nulls)) + nulls = vector.NewBoolView(nulls, inverseIndex(errs, nulls)) } return vector.NewInt(typ, vals, nulls), errs, true case super.IsUnsigned(id): vals, errs := toNumeric[uint64](vec, typ, index) if len(errs) > 0 { - nulls = vector.NullsView(nulls, inverseIndex(errs, nulls)) + nulls = vector.NewBoolView(nulls, inverseIndex(errs, nulls)) } return vector.NewUint(typ, vals, nulls), errs, true case super.IsFloat(id): vals, errs := toNumeric[float64](vec, typ, index) if errs != nil { - nulls = vector.NullsView(nulls, inverseIndex(errs, nulls)) + nulls = vector.NewBoolView(nulls, inverseIndex(errs, nulls)) } return vector.NewFloat(typ, vals, nulls), errs, true default: diff --git a/runtime/vam/expr/cast/string.go b/runtime/vam/expr/cast/string.go index bad969fff4..b516f2c74b 100644 --- a/runtime/vam/expr/cast/string.go +++ b/runtime/vam/expr/cast/string.go @@ -14,7 +14,7 @@ import ( func castToString(vec vector.Any, index []uint32) (vector.Any, []uint32, bool) { nulls := vector.NullsOf(vec) if index != nil { - nulls = vector.NullsView(nulls, index) + nulls = vector.NewBoolView(nulls, index) } n := lengthOf(vec, index) var bytes []byte diff --git a/runtime/vam/expr/coerce.go b/runtime/vam/expr/coerce.go index a6aa1b6cb2..8c10c9829a 100644 --- a/runtime/vam/expr/coerce.go +++ b/runtime/vam/expr/coerce.go @@ -25,9 +25,11 @@ func coerceVals(zctx *super.Context, a, b vector.Any) (vector.Any, vector.Any, v return a, b, nil } if aid == super.IDNull { + a = vector.NewConst(super.NewValue(b.Type(), nil), b.Len(), nil) return a, b, nil //XXX } if bid == super.IDNull { + b = vector.NewConst(super.NewValue(a.Type(), nil), a.Len(), nil) return a, b, nil //XXX } if !super.IsNumber(aid) || !super.IsNumber(bid) { diff --git a/runtime/vam/expr/compare.go b/runtime/vam/expr/compare.go index 67fe916981..2cbede1235 100644 --- a/runtime/vam/expr/compare.go +++ b/runtime/vam/expr/compare.go @@ -3,6 +3,8 @@ package expr //go:generate go run gencomparefuncs.go import ( + "bytes" + "github.com/brimdata/super" "github.com/brimdata/super/runtime/sam/expr/coerce" "github.com/brimdata/super/vector" @@ -26,17 +28,26 @@ func (c *Compare) Eval(val vector.Any) vector.Any { func (c *Compare) eval(vecs ...vector.Any) vector.Any { lhs := vector.Under(vecs[0]) rhs := vector.Under(vecs[1]) + if _, ok := lhs.(*vector.Error); ok { + return vecs[0] + } + if _, ok := rhs.(*vector.Error); ok { + return vecs[1] + } + nulls := vector.Or(vector.NullsOf(lhs), vector.NullsOf(rhs)) lhs, rhs, errVal := coerceVals(c.zctx, lhs, rhs) if errVal != nil { - return errVal + // if incompatible types return false + return vector.NewConst(super.False, vecs[0].Len(), nulls) } //XXX need to handle overflow (see sam) - //XXX nulls... for primitives we just do the compare but we need - // to or the nulls together kind := vector.KindOf(lhs) if kind != vector.KindOf(rhs) { panic("vector kind mismatch after coerce") } + if kind == vector.KindType { + return c.compareTypeVals(lhs, rhs) + } lform, ok := vector.FormOf(lhs) if !ok { return vector.NewStringError(c.zctx, coerce.ErrIncompatibleTypes.Error(), lhs.Len()) @@ -47,7 +58,53 @@ func (c *Compare) eval(vecs ...vector.Any) vector.Any { } f, ok := compareFuncs[vector.FuncCode(c.opCode, kind, lform, rform)] if !ok { - return vector.NewStringError(c.zctx, coerce.ErrIncompatibleTypes.Error(), lhs.Len()) + return vector.NewConst(super.False, lhs.Len(), nulls) + } + out := f(lhs, rhs) + return vector.CopyAndSetNulls(out, nulls) +} + +func (c *Compare) compareTypeVals(lhs, rhs vector.Any) vector.Any { + if c.opCode == vector.CompLT || c.opCode == vector.CompGT { + return vector.NewConst(super.False, lhs.Len(), nil) + } + out := vector.NewBoolEmpty(lhs.Len(), nil) + for i := range lhs.Len() { + l, _ := vector.TypeValueValue(lhs, i) + r, _ := vector.TypeValueValue(rhs, i) + v := bytes.Equal(l, r) + if c.opCode == vector.CompNE { + v = !v + } + if v { + out.Set(i) + } + } + return out +} + +type isNull struct { + expr Evaluator +} + +func NewIsNull(e Evaluator) Evaluator { + return &isNull{e} +} + +func (i *isNull) Eval(this vector.Any) vector.Any { + return vector.Apply(false, i.eval, i.expr.Eval(this)) +} + +func (i *isNull) eval(vecs ...vector.Any) vector.Any { + vec := vector.Under(vecs[0]) + if _, ok := vec.(*vector.Error); ok { + return vec + } + if c, ok := vec.(*vector.Const); ok && c.Value().IsNull() { + return vector.NewConst(super.True, vec.Len(), nil) + } + if nulls := vector.NullsOf(vec); nulls != nil { + return nulls } - return f(lhs, rhs) + return vector.NewConst(super.False, vec.Len(), nil) } diff --git a/runtime/vam/expr/conditional.go b/runtime/vam/expr/conditional.go new file mode 100644 index 0000000000..346614dd95 --- /dev/null +++ b/runtime/vam/expr/conditional.go @@ -0,0 +1,125 @@ +package expr + +import ( + "github.com/RoaringBitmap/roaring" + "github.com/brimdata/super" + "github.com/brimdata/super/vector" +) + +type conditional struct { + zctx *super.Context + predicate Evaluator + thenExpr Evaluator + elseExpr Evaluator +} + +func NewConditional(zctx *super.Context, predicate, thenExpr, elseExpr Evaluator) Evaluator { + return &conditional{ + zctx: zctx, + predicate: predicate, + thenExpr: thenExpr, + elseExpr: elseExpr, + } +} + +func (c *conditional) Eval(this vector.Any) vector.Any { + predVec := c.predicate.Eval(this) + boolsMap, errsMap := BoolMask(predVec) + if errsMap.GetCardinality() == uint64(this.Len()) { + return c.predicateError(predVec) + } + if boolsMap.GetCardinality() == uint64(this.Len()) { + return c.thenExpr.Eval(this) + } + if boolsMap.IsEmpty() && errsMap.IsEmpty() { + return c.elseExpr.Eval(this) + } + thenVec := c.thenExpr.Eval(vector.NewView(this, boolsMap.ToArray())) + // elseMap is the difference between boolsMap or errsMap + elseMap := roaring.Or(boolsMap, errsMap) + elseMap.Flip(0, uint64(this.Len())) + elseIndex := elseMap.ToArray() + elseVec := c.elseExpr.Eval(vector.NewView(this, elseIndex)) + tags := make([]uint32, this.Len()) + for _, idx := range elseIndex { + tags[idx] = 1 + } + vecs := []vector.Any{thenVec, elseVec} + if !errsMap.IsEmpty() { + errsIndex := errsMap.ToArray() + for _, idx := range errsIndex { + tags[idx] = 2 + } + vecs = append(vecs, c.predicateError(vector.NewView(predVec, errsIndex))) + } + return vector.NewDynamic(tags, vecs) +} + +func (c *conditional) predicateError(vec vector.Any) vector.Any { + return vector.Apply(false, func(vecs ...vector.Any) vector.Any { + return vector.NewWrappedError(c.zctx, "?-operator: bool predicate required", vecs[0]) + }, vec) +} + +func BoolMask(mask vector.Any) (*roaring.Bitmap, *roaring.Bitmap) { + bools := roaring.New() + errs := roaring.New() + if dynamic, ok := mask.(*vector.Dynamic); ok { + for i, val := range dynamic.Values { + boolMaskRidx(dynamic.TagMap.Reverse[i], bools, errs, val) + } + } else { + boolMaskRidx(nil, bools, errs, mask) + } + return bools, errs +} + +func boolMaskRidx(ridx []uint32, bools, errs *roaring.Bitmap, vec vector.Any) { + switch vec := vec.(type) { + case *vector.Const: + if !vec.Value().Ptr().AsBool() { + return + } + if vec.Nulls != nil { + if ridx != nil { + for i, idx := range ridx { + if !vec.Nulls.Value(uint32(i)) { + bools.Add(idx) + } + } + } else { + for i := range vec.Len() { + if !vec.Nulls.Value(i) { + bools.Add(i) + } + } + } + } else { + if ridx != nil { + bools.AddMany(ridx) + } else { + bools.AddRange(0, uint64(vec.Len())) + } + } + case *vector.Bool: + if ridx != nil { + for i, idx := range ridx { + if vec.Value(uint32(i)) { + bools.Add(idx) + } + } + } else { + for i := range vec.Len() { + if vec.Value(i) { + bools.Add(i) + } + } + } + case *vector.Error: + if ridx != nil { + errs.AddMany(ridx) + } else { + errs.AddRange(0, uint64(vec.Len())) + } + } +} diff --git a/runtime/vam/expr/function/time.go b/runtime/vam/expr/function/time.go index 9fa969daed..3ef5ff6b32 100644 --- a/runtime/vam/expr/function/time.go +++ b/runtime/vam/expr/function/time.go @@ -136,13 +136,17 @@ func (s *Strftime) fastPath(fvec *vector.Const, tvec vector.Any) vector.Any { } func (s *Strftime) fastPathLoop(f *strftime.Strftime, vec *vector.Int, index []uint32) *vector.String { + if index != nil { + out := vector.NewStringEmpty(uint32(len(index)), vector.NewBoolView(vec.Nulls, index)) + for _, i := range index { + s := f.FormatString(nano.Ts(vec.Values[i]).Time()) + out.Append(s) + } + return out + } out := vector.NewStringEmpty(vec.Len(), vec.Nulls) for i := range vec.Len() { - idx := i - if index != nil { - idx = index[i] - } - s := f.FormatString(nano.Ts(vec.Values[idx]).Time()) + s := f.FormatString(nano.Ts(vec.Values[i]).Time()) out.Append(s) } return out diff --git a/runtime/vam/expr/genarithfuncs.go b/runtime/vam/expr/genarithfuncs.go index afe6bee2fc..9e430b6d01 100644 --- a/runtime/vam/expr/genarithfuncs.go +++ b/runtime/vam/expr/genarithfuncs.go @@ -71,20 +71,19 @@ func genFunc(name, op, typ string, lhs, rhs vector.Form) string { s := fmt.Sprintf("func %s(lhs, rhs vector.Any) vector.Any {\n", name) s += genVarInit("l", typ, lhs) s += genVarInit("r", typ, rhs) - s += "nulls := vector.Or(l.Nulls, r.Nulls)\n" if lhs == vector.FormConst && rhs == vector.FormConst { if typ == "String" { s += fmt.Sprintf("val := super.NewString(lconst %s rconst)\n", op) } else { s += fmt.Sprintf("val := super.New%s64(lconst %s rconst)\n", typ, op) } - s += "return vector.NewConst(val, lhs.Len(), nulls)\n" + s += "return vector.NewConst(val, lhs.Len(), nil)\n" } else { s += "n := lhs.Len()\n" if typ == "String" { - s += "out := vector.NewStringEmpty(n, nulls)\n" + s += "out := vector.NewStringEmpty(n, nil)\n" } else { - s += fmt.Sprintf("out := vector.New%sEmpty(super.Type%s64, n, nulls)\n", typ, typ) + s += fmt.Sprintf("out := vector.New%sEmpty(super.Type%s64, n, nil)\n", typ, typ) } s += genLoop(op, typ, lhs, rhs) s += "return out\n" diff --git a/runtime/vam/expr/logic.go b/runtime/vam/expr/logic.go index ad1d2e6fd5..cf4da97b29 100644 --- a/runtime/vam/expr/logic.go +++ b/runtime/vam/expr/logic.go @@ -17,16 +17,24 @@ func NewLogicalNot(zctx *super.Context, e Evaluator) *Not { } func (n *Not) Eval(val vector.Any) vector.Any { - val, ok := EvalBool(n.zctx, val, n.expr) - if !ok { - return val - } - b := val.(*vector.Bool) - bits := make([]uint64, len(b.Bits)) - for k := range bits { - bits[k] = ^b.Bits[k] + return evalBool(n.zctx, n.eval, n.expr.Eval(val)) +} + +func (n *Not) eval(vecs ...vector.Any) vector.Any { + switch vec := vecs[0].(type) { + case *vector.Bool: + bits := make([]uint64, len(vec.Bits)) + for k := range bits { + bits[k] = ^vec.Bits[k] + } + return vec.CopyWithBits(bits) + case *vector.Const: + return vector.NewConst(super.NewBool(!vec.Value().Bool()), vec.Len(), vec.Nulls) + case *vector.Error: + return vec + default: + panic(vec) } - return b.CopyWithBits(bits) } type And struct { @@ -50,72 +58,136 @@ func NewLogicalOr(zctx *super.Context, lhs, rhs Evaluator) *Or { } func (a *And) Eval(val vector.Any) vector.Any { - //XXX change this logic to handle dynamic instead of simple ok decision, - // if there are any valid bools then we need to and them together - lhs, ok := EvalBool(a.zctx, val, a.lhs) - if !ok { - //XXX mix errors - return lhs + return evalBool(a.zctx, a.eval, a.lhs.Eval(val), a.rhs.Eval(val)) +} + +func (a *And) eval(vecs ...vector.Any) vector.Any { + if vecs[0].Len() == 0 { + return vecs[0] + } + lhs, rhs := vector.Under(vecs[0]), vector.Under(vecs[1]) + if _, ok := lhs.(*vector.Error); ok { + return a.andError(lhs, rhs) } - rhs, ok := EvalBool(a.zctx, val, a.rhs) - if !ok { - //XXX mix errors - return rhs + if _, ok := rhs.(*vector.Error); ok { + return a.andError(rhs, lhs) } - blhs := lhs.(*vector.Bool) - brhs := rhs.(*vector.Bool) - if len(blhs.Bits) != len(brhs.Bits) { - panic("length mistmatch") + blhs, brhs := toBool(lhs), toBool(rhs) + out := vector.And(blhs, brhs) + if blhs.Nulls == nil && brhs.Nulls == nil { + return out } - bits := make([]uint64, len(blhs.Bits)) - for k := range bits { - bits[k] = blhs.Bits[k] & brhs.Bits[k] + // any and false = false + // null and true = null + notfalse := vector.And(vector.Or(blhs, blhs.Nulls), vector.Or(brhs, brhs.Nulls)) + out.Nulls = vector.And(notfalse, vector.Or(blhs.Nulls, brhs.Nulls)) + return out +} + +func (a *And) andError(err vector.Any, vec vector.Any) vector.Any { + if _, ok := vec.(*vector.Error); ok { + return err + } + b := toBool(vec) + // anything and FALSE = FALSE + isError := vector.Or(b, b.Nulls) + var index []uint32 + for i := range err.Len() { + if isError.Value(i) { + index = append(index, i) + } } - //XXX intersect nulls - return blhs.CopyWithBits(bits) + if len(index) > 0 { + base := vector.NewInverseView(vec, index) + return vector.Combine(base, index, vector.NewView(err, index)) + } + return vec } func (o *Or) Eval(val vector.Any) vector.Any { - lhs, ok := EvalBool(o.zctx, val, o.lhs) - if !ok { - return lhs + return evalBool(o.zctx, o.eval, o.lhs.Eval(val), o.rhs.Eval(val)) +} + +func (o *Or) eval(vecs ...vector.Any) vector.Any { + if vecs[0].Len() == 0 { + return vecs[0] } - rhs, ok := EvalBool(o.zctx, val, o.rhs) - if !ok { - return rhs + lhs, rhs := vector.Under(vecs[0]), vector.Under(vecs[1]) + if _, ok := lhs.(*vector.Error); ok { + return o.orError(lhs, rhs) } - blhs := lhs.(*vector.Bool) - brhs := rhs.(*vector.Bool) - bits := make([]uint64, len(blhs.Bits)) - if len(blhs.Bits) != len(brhs.Bits) { - panic("length mistmatch") + if _, ok := rhs.(*vector.Error); ok { + return o.orError(rhs, lhs) } - for k := range bits { - bits[k] = blhs.Bits[k] | brhs.Bits[k] + blhs, brhs := toBool(lhs), toBool(rhs) + out := vector.Or(blhs, brhs) + if blhs.Nulls == nil && brhs.Nulls == nil { + return out } - //XXX intersect nulls - return blhs.CopyWithBits(bits) + nulls := vector.Or(blhs.Nulls, brhs.Nulls) + out.Nulls = vector.And(vector.Not(out), nulls) + return out } -// EvalBool evaluates e using val to computs a boolean result. For elements +func (o *Or) orError(err, vec vector.Any) vector.Any { + if _, ok := vec.(*vector.Error); ok { + return err + } + b := toBool(vec) + // not error if true or null + notError := vector.Or(b, b.Nulls) + var index []uint32 + for i := range b.Len() { + if !notError.Value(i) { + index = append(index, i) + } + } + if len(index) > 0 { + base := vector.NewInverseView(vec, index) + return vector.Combine(base, index, vector.NewView(err, index)) + } + return vec +} + +// evalBool evaluates e using val to computs a boolean result. For elements // of the result that are not boolean, an error is calculated for each non-bool // slot and they are returned as an error. If all of the value slots are errors, // then the return value is nil. -func EvalBool(zctx *super.Context, val vector.Any, e Evaluator) (vector.Any, bool) { - //XXX Eval could return a dynamic vector of errors and bools and we should - // handle this correctly so the logic above is really the fast path - // and a slower path will handle picking apart the dynamic vector. - // maybe we could have a generic way to traverse dynamics for - // appliers doing their thing along the slow path - if val, ok := vector.Under(e.Eval(val)).(*vector.Bool); ok { - return val, true - } - //XXX need to implement a sparse dynamic (vector.Collection?) - // and check for that here. - // for now, if the vector is not uniformly boolean, we return error. - // XXX example is a field ref a union of structs where the type of - // the referenced field changes... there can be an arbitrary number - // of underlying types though any given slot has only one type - // obviously at any given time. - return vector.NewStringError(zctx, "not type bool", val.Len()), false +func evalBool(zctx *super.Context, fn func(...vector.Any) vector.Any, vecs ...vector.Any) vector.Any { + return vector.Apply(false, func(vecs ...vector.Any) vector.Any { + for i, vec := range vecs { + if vec := vector.Under(vec); vec.Type() == super.TypeBool || vector.KindOf(vec) == vector.KindError { + vecs[i] = vec + } else { + vecs[i] = vector.NewWrappedError(zctx, "not type bool", vec) + } + } + return fn(vecs...) + }, vecs...) +} + +func toBool(vec vector.Any) *vector.Bool { + switch vec := vec.(type) { + case *vector.Const: + val := vec.Value() + if val.Bool() { + out := trueBool(vec.Len()) + out.Nulls = vec.Nulls + return out + } else { + return vector.NewBoolEmpty(vec.Len(), vec.Nulls) + } + case *vector.Bool: + return vec + default: + panic(vec) + } +} + +func trueBool(n uint32) *vector.Bool { + vec := vector.NewBoolEmpty(n, nil) + for i := range vec.Bits { + vec.Bits[i] = ^uint64(0) + } + return vec } diff --git a/runtime/vam/expr/unaryminus.go b/runtime/vam/expr/unaryminus.go new file mode 100644 index 0000000000..79071d32a3 --- /dev/null +++ b/runtime/vam/expr/unaryminus.go @@ -0,0 +1,150 @@ +package expr + +import ( + "math" + + "github.com/brimdata/super" + "github.com/brimdata/super/runtime/vam/expr/cast" + "github.com/brimdata/super/vector" +) + +type unaryMinus struct { + zctx *super.Context + expr Evaluator +} + +func NewUnaryMinus(zctx *super.Context, eval Evaluator) Evaluator { + return &unaryMinus{zctx, eval} +} + +func (u *unaryMinus) Eval(this vector.Any) vector.Any { + return vector.Apply(true, u.eval, u.expr.Eval(this)) +} + +func (u *unaryMinus) eval(vecs ...vector.Any) vector.Any { + vec := vector.Under(vecs[0]) + if vec.Len() == 0 { + return vec + } + if _, ok := vec.(*vector.Error); ok { + return vec + } + id := vec.Type().ID() + if !super.IsNumber(vec.Type().ID()) { + return vector.NewWrappedError(u.zctx, "type incompatible with unary '-' operator", vecs[0]) + } + if super.IsUnsigned(id) { + var typ super.Type + switch id { + case super.IDUint8: + typ = super.TypeInt8 + case super.IDUint16: + typ = super.TypeInt16 + case super.IDUint32: + typ = super.TypeInt32 + default: + typ = super.TypeInt64 + } + return u.eval(cast.To(u.zctx, vec, typ)) + } + out, ok := u.convert(vec) + if !ok { + // Overflow for int detected, go slow path. + return u.slowPath(vec) + } + return out +} + +func (u *unaryMinus) convert(vec vector.Any) (vector.Any, bool) { + switch vec := vec.(type) { + case *vector.Const: + var val super.Value + if super.IsFloat(vec.Type().ID()) { + val = super.NewFloat(vec.Type(), -vec.Value().Float()) + } else { + v := vec.Value().Int() + if v == minInt(vec.Type()) { + return nil, false + } + val = super.NewInt(vec.Type(), -vec.Value().Int()) + } + return vector.NewConst(val, vec.Len(), vec.Nulls), true + case *vector.Dict: + out, ok := u.convert(vec.Any) + if !ok { + return nil, false + } + return &vector.Dict{ + Any: out, + Index: vec.Index, + Counts: vec.Counts, + Nulls: vec.Nulls, + }, true + case *vector.View: + out, ok := u.convert(vec.Any) + if !ok { + return nil, false + } + return &vector.View{Any: out, Index: vec.Index}, true + case *vector.Int: + min := minInt(vec.Type()) + out := make([]int64, vec.Len()) + for i := range vec.Len() { + if vec.Values[i] == min { + return nil, false + } + out[i] = -vec.Values[i] + } + return vector.NewInt(vec.Typ, out, vec.Nulls), true + case *vector.Float: + out := make([]float64, vec.Len()) + for i := range vec.Len() { + out[i] = -vec.Values[i] + } + return vector.NewFloat(vec.Typ, out, vec.Nulls), true + default: + panic(vec) + } +} + +func (u *unaryMinus) slowPath(vec vector.Any) vector.Any { + var nulls *vector.Bool + var ints []int64 + var errs []uint32 + minval := minInt(vec.Type()) + for i := range vec.Len() { + v, isnull := vector.IntValue(vec, i) + if isnull { + if nulls == nil { + nulls = vector.NewBoolEmpty(vec.Len(), nil) + } + nulls.Set(uint32(len(ints))) + ints = append(ints, 0) + continue + } + if v == minval { + errs = append(errs, i) + } else { + ints = append(ints, -v) + } + } + if nulls != nil { + nulls.SetLen(uint32(len(ints))) + } + out := vector.NewInt(vec.Type(), ints, nulls) + err := vector.NewWrappedError(u.zctx, "unary '-' underflow", vector.NewView(vec, errs)) + return vector.Combine(out, errs, err) +} + +func minInt(typ super.Type) int64 { + switch typ.ID() { + case super.IDInt8: + return math.MinInt8 + case super.IDInt16: + return math.MinInt16 + case super.IDInt32: + return math.MinInt32 + default: + return math.MinInt64 + } +} diff --git a/runtime/vam/op/filter.go b/runtime/vam/op/filter.go index bc9a8a3d30..c4b23460e7 100644 --- a/runtime/vam/op/filter.go +++ b/runtime/vam/op/filter.go @@ -31,18 +31,13 @@ func (f *Filter) Pull(done bool) (vector.Any, error) { // applyMask applies the mask vector mask to vec. Elements of mask that are not // Boolean are considered false. func applyMask(vec, mask vector.Any) (vector.Any, bool) { - n := mask.Len() - var index []uint32 - for k := uint32(0); k < n; k++ { - if vector.BoolValue(mask, k) { - index = append(index, k) - } - } - if len(index) == 0 { + // errors are ignored for filters + b, _ := expr.BoolMask(mask) + if b.IsEmpty() { return nil, false } - if len(index) == int(n) { + if b.GetCardinality() == uint64(mask.Len()) { return vec, true } - return vector.NewView(vec, index), true + return vector.NewView(vec, b.ToArray()), true } diff --git a/runtime/vam/op/summarize/agg.go b/runtime/vam/op/summarize/agg.go index a3fa2a2b20..f592e72dae 100644 --- a/runtime/vam/op/summarize/agg.go +++ b/runtime/vam/op/summarize/agg.go @@ -24,7 +24,8 @@ type superTable struct { builder *vector.RecordBuilder partialsIn bool partialsOut bool - table map[string]aggRow + table map[string]int + rows []aggRow zctx *super.Context } @@ -52,11 +53,13 @@ func (s *superTable) update(keys []vector.Any, args []vector.Any) { m[string(keyBytes)] = append(m[string(keyBytes)], slot) } for rowKey, index := range m { - row, ok := s.table[rowKey] + id, ok := s.table[rowKey] if !ok { - row = s.newRow(keys, index) - s.table[rowKey] = row + id = len(s.rows) + s.table[rowKey] = id + s.rows = append(s.rows, s.newRow(keys, index)) } + row := s.rows[id] for i, arg := range args { if len(m) > 1 { arg = vector.NewView(arg, index) @@ -85,32 +88,40 @@ func (s *superTable) newRow(keys []vector.Any, index []uint32) aggRow { } func (s *superTable) materialize() vector.Any { + if len(s.rows) == 0 { + return vector.NewConst(super.Null, 0, nil) + } var vecs []vector.Any - var tags []uint32 - // XXX This should reasonably concat all materialize rows together instead - // of this crazy Dynamic hack. - for _, row := range s.table { - tags = append(tags, uint32(len(tags))) - vecs = append(vecs, s.materializeRow(row)) + for i := range s.rows[0].keys { + vecs = append(vecs, s.materializeKey(i)) + } + for i := range s.rows[0].funcs { + vecs = append(vecs, s.materializeAgg(i)) } - return vector.NewDynamic(tags, vecs) + // Since aggs can return dynamic values need to do apply to create record. + return vector.Apply(false, func(vecs ...vector.Any) vector.Any { + return s.builder.New(vecs) + }, vecs...) } -func (s *superTable) materializeRow(row aggRow) vector.Any { - var vecs []vector.Any - for _, key := range row.keys { - vecs = append(vecs, vector.NewConst(key, 1, nil)) +func (s *superTable) materializeKey(i int) vector.Any { + b := vector.NewBuilder(s.rows[0].keys[i].Type()) + for _, row := range s.rows { + b.Write(row.keys[i].Bytes()) } - for _, fn := range row.funcs { - var val super.Value + return b.Build() +} + +func (s *superTable) materializeAgg(i int) vector.Any { + b := vector.NewDynamicBuilder() + for _, row := range s.rows { if s.partialsOut { - val = fn.ResultAsPartial(s.zctx) + b.Write(row.funcs[i].ResultAsPartial(s.zctx)) } else { - val = fn.Result(s.zctx) + b.Write(row.funcs[i].Result(s.zctx)) } - vecs = append(vecs, vector.NewConst(val, 1, nil)) } - return s.builder.New(vecs) + return b.Build() } type countByString struct { diff --git a/runtime/vam/op/summarize/summarize.go b/runtime/vam/op/summarize/summarize.go index 62d3d42204..2bb2b9d28b 100644 --- a/runtime/vam/op/summarize/summarize.go +++ b/runtime/vam/op/summarize/summarize.go @@ -32,6 +32,7 @@ func New(parent vector.Puller, zctx *super.Context, aggNames []field.Path, aggEx } return &Summarize{ parent: parent, + zctx: zctx, aggs: aggs, aggExprs: aggExprs, keyExprs: keyExprs, @@ -111,7 +112,7 @@ func (s *Summarize) newAggTable(keyTypes []super.Type) aggTable { builder: s.builder, partialsIn: s.partialsIn, partialsOut: s.partialsOut, - table: make(map[string]aggRow), + table: make(map[string]int), zctx: s.zctx, } } diff --git a/compiler/parser/ztests/case.yaml b/runtime/ztests/expr/case.yaml similarity index 94% rename from compiler/parser/ztests/case.yaml rename to runtime/ztests/expr/case.yaml index 9b9e1068bb..7f57084d6b 100644 --- a/compiler/parser/ztests/case.yaml +++ b/runtime/ztests/expr/case.yaml @@ -1,5 +1,7 @@ zed: 'yield case when x==1 then "foo" when x==2 then "bar" else {y:12} end' +vector: true + input: | {x:1} {x:2,y:3} diff --git a/runtime/ztests/expr/compare-incompatible.yaml b/runtime/ztests/expr/compare-incompatible.yaml new file mode 100644 index 0000000000..fc7448e819 --- /dev/null +++ b/runtime/ztests/expr/compare-incompatible.yaml @@ -0,0 +1,12 @@ +zed: yield a == b + +vector: true + +input: | + {a:"1",b:1(uint8)} + {a:127.0.0.1,b:} + +output: | + false + false + diff --git a/runtime/ztests/expr/compare-null-int64.yaml b/runtime/ztests/expr/compare-null-int64.yaml new file mode 100644 index 0000000000..4f349a7d08 --- /dev/null +++ b/runtime/ztests/expr/compare-null-int64.yaml @@ -0,0 +1,11 @@ +zed: put eq := (a == b), ne := (a != b), lt := (a < b), lte := (a <= b), gt := (a > b), gte := (a >= b) + +vector: true + +input: | + {a:1,b:null(int64)} + {a:1,b:null} + +output: | + {a:1,b:null(int64),eq:null(bool),ne:null(bool),lt:null(bool),lte:null(bool),gt:null(bool),gte:null(bool)} + {a:1,b:null,eq:null(bool),ne:null(bool),lt:null(bool),lte:null(bool),gt:null(bool),gte:null(bool)} diff --git a/runtime/ztests/expr/compare-null-string.yaml b/runtime/ztests/expr/compare-null-string.yaml new file mode 100644 index 0000000000..c02241832d --- /dev/null +++ b/runtime/ztests/expr/compare-null-string.yaml @@ -0,0 +1,15 @@ +zed: put eq := (a == b), ne := (a != b) + +vector: true + +input: | + {a:"s",b:null(string)} + {a:"s",b:null} + {a:"s"} + {b:null} + +output: | + {a:"s",b:null(string),eq:null(bool),ne:null(bool)} + {a:"s",b:null,eq:null(bool),ne:null(bool)} + {a:"s",eq:error("missing"),ne:error("missing")} + {b:null,eq:error("missing"),ne:error("missing")} diff --git a/runtime/ztests/expr/compare-typevals.yaml b/runtime/ztests/expr/compare-typevals.yaml new file mode 100644 index 0000000000..dff80b0d20 --- /dev/null +++ b/runtime/ztests/expr/compare-typevals.yaml @@ -0,0 +1,16 @@ +zed: yield a == b, a != b + +vector: true + +input: | + {a:,b:} + {a:<{x:ip}>,b:<{x:ip}>} + {a:<{x:net}>,b:<{y:net}>} + +output: | + true + false + true + false + false + true diff --git a/runtime/sam/expr/ztests/filter-null-with-unset-field.yaml b/runtime/ztests/expr/filter-null-with-unset-field.yaml similarity index 76% rename from runtime/sam/expr/ztests/filter-null-with-unset-field.yaml rename to runtime/ztests/expr/filter-null-with-unset-field.yaml index a55eaee531..153bbdf981 100644 --- a/runtime/sam/expr/ztests/filter-null-with-unset-field.yaml +++ b/runtime/ztests/expr/filter-null-with-unset-field.yaml @@ -1,4 +1,6 @@ -zed: s==null +zed: s IS NULL + +vector: true input: | {s:"A=B"} diff --git a/runtime/ztests/expr/is-null.yaml b/runtime/ztests/expr/is-null.yaml new file mode 100644 index 0000000000..bcd9e6b54b --- /dev/null +++ b/runtime/ztests/expr/is-null.yaml @@ -0,0 +1,17 @@ +# not for vam needs does not properly handle Const bools and errors. Re-enable +# the IS NOT NULL test once this works. +zed: yield this IS NULL #, this IS NOT NULL + +vector: true + +input: | + "foo" + null(string) + error("missing") + error("foo") + +output: | + false + true + error("missing") + error("foo") diff --git a/runtime/ztests/expr/logical-and.yaml b/runtime/ztests/expr/logical-and.yaml new file mode 100644 index 0000000000..e13bde0b75 --- /dev/null +++ b/runtime/ztests/expr/logical-and.yaml @@ -0,0 +1,71 @@ +zed: | + yield case when typeof(this) == + then this + else a AND b + end + +vector: true + +input: | + "=== TRUE ===" + {a:true,b:true} + {a:true,b:false} + {a:true,b:null(bool)} + {a:true} + {a:true,b:"foo"} + "=== FALSE ===" + {a:false,b:true} + {a:false,b:false} + {a:false,b:null(bool)} + {a:false} + {a:false,b:"foo"} + "=== NULL ===" + {a:null(bool),b:true} + {a:null(bool),b:false} + {a:null(bool),b:null(bool)} + {a:null(bool)} + {a:null(bool),b:"foo"} + "=== MISSING ===" + {b:true} + {b:false} + {b:null(bool)} + {} + {b:"foo"} + "=== ERROR ===" + {a:"foo",b:true} + {a:"foo",b:false} + {a:"foo",b:null(bool)} + {a:"foo"} + {a:"foo",b:"foo"} + +output: | + "=== TRUE ===" + true + false + null(bool) + error("missing") + error({message:"not type bool",on:"foo"}) + "=== FALSE ===" + false + false + false + false + false + "=== NULL ===" + null(bool) + false + null(bool) + error("missing") + error({message:"not type bool",on:"foo"}) + "=== MISSING ===" + error("missing") + false + error("missing") + error("missing") + error("missing") + "=== ERROR ===" + error({message:"not type bool",on:"foo"}) + false + error({message:"not type bool",on:"foo"}) + error({message:"not type bool",on:"foo"}) + error({message:"not type bool",on:"foo"}) diff --git a/runtime/ztests/expr/logical-not.yaml b/runtime/ztests/expr/logical-not.yaml new file mode 100644 index 0000000000..d32ccfa269 --- /dev/null +++ b/runtime/ztests/expr/logical-not.yaml @@ -0,0 +1,17 @@ +zed: yield not this + +vector: true + +input: | + true + false + null(bool) + error("missing") + error("foo") + +output: | + false + true + null(bool) + error("missing") + error("foo") diff --git a/runtime/ztests/expr/logical-or.yaml b/runtime/ztests/expr/logical-or.yaml new file mode 100644 index 0000000000..6c4ff328b4 --- /dev/null +++ b/runtime/ztests/expr/logical-or.yaml @@ -0,0 +1,71 @@ +zed: | + yield case when typeof(this) == + then this + else a OR b + end + +vector: true + +input: | + "=== TRUE ===" + {a:true,b:true} + {a:true,b:false} + {a:true,b:null(bool)} + {a:true} + {a:true,b:"foo"} + "=== FALSE ===" + {a:false,b:true} + {a:false,b:false} + {a:false,b:null(bool)} + {a:false} + {a:false,b:"foo"} + "=== NULL ===" + {a:null(bool),b:true} + {a:null(bool),b:false} + {a:null(bool),b:null(bool)} + {a:null(bool)} + {a:null(bool),b:"foo"} + "=== MISSING ===" + {b:true} + {b:false} + {b:null(bool)} + {} + {b:"foo"} + "=== ERROR ===" + {a:"foo",b:true} + {a:"foo",b:false} + {a:"foo",b:null(bool)} + {a:"foo"} + {a:"foo",b:"foo"} + +output: | + "=== TRUE ===" + true + true + true + true + true + "=== FALSE ===" + true + false + null(bool) + error("missing") + error({message:"not type bool",on:"foo"}) + "=== NULL ===" + true + null(bool) + null(bool) + null(bool) + null(bool) + "=== MISSING ===" + true + error("missing") + null(bool) + error("missing") + error("missing") + "=== ERROR ===" + true + error({message:"not type bool",on:"foo"}) + null(bool) + error({message:"not type bool",on:"foo"}) + error({message:"not type bool",on:"foo"}) diff --git a/runtime/sam/expr/ztests/unary-minus.yaml b/runtime/ztests/expr/unary-minus.yaml similarity index 95% rename from runtime/sam/expr/ztests/unary-minus.yaml rename to runtime/ztests/expr/unary-minus.yaml index d8fee7e48e..9245786350 100644 --- a/runtime/sam/expr/ztests/unary-minus.yaml +++ b/runtime/ztests/expr/unary-minus.yaml @@ -1,5 +1,7 @@ zed: yield -this +vector: true + input: | 1(int8) -1(int8) @@ -66,10 +68,10 @@ output: | null(int16) null(int32) null(int64) - null(uint8) - null(uint16) - null(uint32) - null(uint64) + null(int8) + null(int16) + null(int32) + null(int64) null(float16) null(float32) null(float64) diff --git a/runtime/ztests/op/summarize/count-where.yaml b/runtime/ztests/op/summarize/count-where.yaml new file mode 100644 index 0000000000..41b0246993 --- /dev/null +++ b/runtime/ztests/op/summarize/count-where.yaml @@ -0,0 +1,17 @@ +zed: | + summarize + num_requests := count() + where log_time >= 2012-10-01T00:00:00Z + by client_ip + | sort client_ip + +vector: true + +input: | + {log_time:2012-01-01T00:00:44Z,client_ip:249.92.17.134} + {log_time:2012-10-01T00:24:30Z,client_ip:249.92.17.134} + {log_time:2012-05-12T10:23:22Z,client_ip:251.58.48.137} + +output: | + {client_ip:249.92.17.134,num_requests:1(uint64)} + {client_ip:251.58.48.137,num_requests:0(uint64)} diff --git a/scripts/super-cmd-perf/README.md b/scripts/super-cmd-perf/README.md new file mode 100644 index 0000000000..bb262ad824 --- /dev/null +++ b/scripts/super-cmd-perf/README.md @@ -0,0 +1,111 @@ +# Query Performance From `super` Command Doc + +These scripts were used to generate the results in the +[Performance](https://zed.brimdata.io/docs/next/commands/super#performance) +section of the [`super` command doc](https://zed.brimdata.io/docs/next/commands/super). +The scripts have been made available to allow for easy reproduction of the +results under different conditions and/or as tested systems evolve. + +# Environments + +The scripts were written to be easily run in two different environments. + +## AWS + +As an environment that's available to everyone, the scripts were developed +primarily for use on a "scratch" EC2 instance in [AWS](https://aws.amazon.com/). +Specifically, we chose the [`m6idn.2xlarge`](https://aws.amazon.com/ec2/instance-types/m6i/) +instance that has the following specifications: + +* 8x vCPU +* 32 GB of RAM +* 474 GB NVMe instance SSD + +The instance SSD in particular was seen as important to ensure consistent I/O +performance. + +Assuming a freshly-created `m6idn.2xlarge` instance running Ubuntu 24.04, to +start the run: + +``` +curl -s https://raw.githubusercontent.com/brimdata/super/refs/heads/main/scripts/super-cmd-perf/benchmark.sh | bash -xv 2>&1 | tee runlog.txt +``` + +The run proceeds in three phases: + +1. **(AWS only)** Instance SSD is formatted and required tools & data platforms tools are downloaded/installed +2. Test data is downloaded and loaded into needed storage formats +3. Queries are executed on all data platforms + +The scripts only run with ClickHouse's [beta JSON type](https://clickhouse.com/blog/a-new-powerful-json-data-type-for-clickhouse) +on AWS because when we attempted to load data to this type on our Macbooks +that have 16 GB of RAM it consistently failed with a "too many open files" +error. + +As the benchmarks may take a long time to run, the use of [`screen`](https://www.gnu.org/software/screen/) +or a similar "detachable" terminal tool is recommended in case your remote +network connection drops during a run. + +## macOS/other + +Whereas on [AWS](#aws) the scripts assume they're in a "scratch" environment +where it may format the instance SSD for optimal storage and install required +software, on other systems such as macOS it's assumed the required data +platforms are already installed, and it will skip ahead right to +downloading/loading test data and then running queries. + +For instance on macOS, the software needed can be first installed via: + +``` +brew install hyperfine datafusion duckdb clickhouse go +go install github.com/brimdata/super/cmd/super@main +``` + +Then clone the [super repo](https://github.com/brimdata/super.git) and run the +benchmarks. + +``` +git clone https://github.com/brimdata/super.git +cd scripts/super-cmd-perf +./benchmark.sh +``` + +All test data will remain in this directory. + +# Results + +Results from the run will accumulate in a subdirectory named for the date/time +when the run started, e.g., `2024-11-19_01:10:30/`. In this directory, summary +reports will be created in files ending in `.md` and `.csv` extensions, and +details from each individual step in generating the results will be in files +ending in `.out`. If run on AWS using the [`curl` command line shown above](#aws), +the `runlog.txt` will also be present that holds the full console output of the +entire run. + +An archive of results from our most recent run of the benchmarks on November +26, 2024 can be downloaded [here](https://super-cmd-perf.s3.us-east-2.amazonaws.com/2024-11-26_03-17-25.tgz). + +# Debugging + +The scripts are configured to exit immediately if failures occur during the +run. If you encounter a failure, look in the results directory for the `.out` +file mentioned last in the console output as this will contain any detailed +error message from the operation that experienced the failure. + +A problem that was encountered when developing the scripts that you may also +encounter is DuckDB running out of memory. Specifically, this happened when +we tried to run the scripts on an Intel-based Macbook with only 16 GB of +RAM, and this is part of why we used an AWS instance with 32 GB of RAM as the +reference platform. On the Macbooks, we found we could work around the memory +problem by telling DuckDB it had the use of more memory than its default +[80% heuristic for `memory_limit`](https://duckdb.org/docs/configuration/overview.html). +The scripts support an environment variable to make it easy to increase this +value, e.g., we found the scripts ran successfully at 16 GB: + +``` +$ DUCKDB_MEMORY_LIMIT="16GB" ./benchmark.sh +``` + +Of course, this ultimately caused swapping on our Macbook and a significant +hit to performance, but it at least allowed the scripts to run without +failure. diff --git a/scripts/super-cmd-perf/benchmark.sh b/scripts/super-cmd-perf/benchmark.sh new file mode 100755 index 0000000000..ec46a74533 --- /dev/null +++ b/scripts/super-cmd-perf/benchmark.sh @@ -0,0 +1,100 @@ +#!/bin/bash -xv +set -euo pipefail +export RUNNING_ON_AWS_EC2="" + +# If we can detect we're running on an AWS EC2 m6idn.2xlarge instance, we'll +# treat it as a scratch host, installing all needed software and using the +# local SSD for best I/O performance. +if command -v dmidecode && [ "$(sudo dmidecode --string system-uuid | cut -c1-3)" == "ec2" ] && [ "$(TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-type)" == "m6idn.2xlarge" ]; then + + export RUNNING_ON_AWS_EC2=true + + sudo apt-get -y update + sudo apt-get -y upgrade + sudo apt-get -y install make gcc unzip hyperfine + + # Prepare local SSD for best I/O performance + sudo fdisk -l /dev/nvme1n1 + sudo mkfs.ext4 -E discard -F /dev/nvme1n1 + sudo mount /dev/nvme1n1 /mnt + sudo chown ubuntu:ubuntu /mnt + sudo chmod 777 /mnt + echo 'export TMPDIR="/mnt/tmpdir"' >> "$HOME"/.profile + mkdir /mnt/tmpdir + + # Install DuckDB + if ! command -v duckdb > /dev/null 2>&1; then + curl -L -O https://github.com/duckdb/duckdb/releases/download/v1.1.3/duckdb_cli-linux-amd64.zip + unzip duckdb_cli-linux-amd64.zip + sudo mv duckdb /usr/local/bin + fi + + # Install Rust + curl -L -O https://static.rust-lang.org/dist/rust-1.82.0-x86_64-unknown-linux-gnu.tar.xz + tar xf rust-1.82.0-x86_64-unknown-linux-gnu.tar.xz + sudo rust-1.82.0-x86_64-unknown-linux-gnu/install.sh + # shellcheck disable=SC2016 + echo 'export PATH="$PATH:$HOME/.cargo/bin"' >> "$HOME"/.profile + + # Install DataFusion CLI + if ! command -v datafusion-cli > /dev/null 2>&1; then + cargo install datafusion-cli + fi + + # Install Go + if ! command -v go > /dev/null 2>&1; then + curl -L -O https://go.dev/dl/go1.23.3.linux-amd64.tar.gz + rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.3.linux-amd64.tar.gz + # shellcheck disable=SC2016 + echo 'export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"' >> "$HOME"/.profile + source "$HOME"/.profile + fi + + # Install SuperDB + if ! command -v super > /dev/null 2>&1; then + git clone https://github.com/brimdata/super.git + cd super + make install + fi + + cd scripts/super-cmd-perf + + # Install ClickHouse + if ! command -v clickhouse-client > /dev/null 2>&1; then + sudo apt-get install -y apt-transport-https ca-certificates curl gnupg + curl -fsSL 'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key' | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg + echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee \ + /etc/apt/sources.list.d/clickhouse.list + sudo apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y clickhouse-server clickhouse-client + sudo cp clickhouse-storage.xml /etc/clickhouse-server/config.d + sudo systemctl stop clickhouse-server + sudo systemctl disable clickhouse-server.service + fi + +fi + +rundir="$(date +%F_%T)" +mkdir "$rundir" +report="$rundir/report_$rundir.md" + +echo -e "|**Software**|**Version**|\n|-|-|" | tee -a "$report" +for software in super duckdb datafusion-cli clickhouse +do + if ! command -v $software > /dev/null; then + echo "error: \"$software\" not found in PATH" + exit 1 + fi + echo "|$software|$($software --version)|" | tee -a "$report" +done +echo >> "$report" + +# Prepare the test data +./prep-data.sh "$rundir" + +# Run the queries and generate the summary report +./run-queries.sh "$rundir" + +if [ -n "$RUNNING_ON_AWS_EC2" ]; then + mv "$HOME/runlog.txt" "$rundir" +fi diff --git a/scripts/super-cmd-perf/clickhouse-storage.xml b/scripts/super-cmd-perf/clickhouse-storage.xml new file mode 100644 index 0000000000..4099ad3163 --- /dev/null +++ b/scripts/super-cmd-perf/clickhouse-storage.xml @@ -0,0 +1,5 @@ + + /mnt/clickhouse/caches/ + /mnt/clickhouse/ + /mnt/clickhouse/tmp/ + diff --git a/scripts/super-cmd-perf/clickhouse-table-create.sql b/scripts/super-cmd-perf/clickhouse-table-create.sql new file mode 100644 index 0000000000..2103f0f130 --- /dev/null +++ b/scripts/super-cmd-perf/clickhouse-table-create.sql @@ -0,0 +1,3 @@ +SET enable_json_type = 1; +CREATE TABLE gha (v JSON) ENGINE MergeTree() ORDER BY tuple(); +INSERT INTO gha SELECT * FROM file('gharchive_gz/*.json.gz', JSONAsObject); diff --git a/scripts/super-cmd-perf/prep-data.sh b/scripts/super-cmd-perf/prep-data.sh new file mode 100755 index 0000000000..0c0a70a3ba --- /dev/null +++ b/scripts/super-cmd-perf/prep-data.sh @@ -0,0 +1,72 @@ +#!/bin/bash -xv +set -euo pipefail +pushd "$(cd "$(dirname "$0")" && pwd)" + +if [ "$#" -ne 1 ]; then + echo "Specify results directory string" + exit 1 +fi +rundir="$(pwd)/$1" +mkdir -p "$rundir" + +RUNNING_ON_AWS_EC2="${RUNNING_ON_AWS_EC2:-}" +if [ -n "$RUNNING_ON_AWS_EC2" ]; then + cp clickhouse-table-create.sql /mnt + cd /mnt +fi + +function run_cmd { + outputfile="$1" + shift + { hyperfine \ + --show-output \ + --warmup 0 \ + --runs 1 \ + --time-unit second \ + "$@" ; + } \ + > "$outputfile" \ + 2>&1 +} + +mkdir gharchive_gz +cd gharchive_gz +for num in $(seq 0 23) +do + curl -L -O "https://data.gharchive.org/2023-02-08-${num}.json.gz" +done +cd .. + +DUCKDB_MEMORY_LIMIT="${DUCKDB_MEMORY_LIMIT:-}" +if [ -n "$DUCKDB_MEMORY_LIMIT" ]; then + increase_duckdb_memory_limit='SET memory_limit = '\'"${DUCKDB_MEMORY_LIMIT}"\''; ' +else + increase_duckdb_memory_limit="" +fi + +run_cmd \ + "$rundir/duckdb-table-create.out" \ + "duckdb gha.db -c \"${increase_duckdb_memory_limit}CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', union_by_name=true)\"" + +run_cmd \ + "$rundir/duckdb-parquet-create.out" \ + "duckdb gha.db -c \"${increase_duckdb_memory_limit}COPY (from gha) TO 'gha.parquet'\"" + +run_cmd \ + "$rundir/super-bsup-create.out" \ + "super -o gha.bsup gharchive_gz/*.json.gz" + +if [ -n "$RUNNING_ON_AWS_EC2" ]; then + sudo mkdir -p /var/lib/clickhouse/user_files + sudo chown clickhouse:clickhouse /var/lib/clickhouse/user_files + sudo ln -s /mnt/gharchive_gz /var/lib/clickhouse/user_files/gharchive_gz + sudo systemctl start clickhouse-server + sleep 5 + run_cmd \ + "$rundir/clickhouse-table-create.out" \ + "clickhouse-client < clickhouse-table-create.sql" + sudo systemctl stop clickhouse-server + du -h clickhouse/store +fi + +du -h gha.db gha.parquet gha.bsup gharchive_gz diff --git a/scripts/super-cmd-perf/queries/agg-clickhouse-db.sql b/scripts/super-cmd-perf/queries/agg-clickhouse-db.sql new file mode 100644 index 0000000000..c0afa66371 --- /dev/null +++ b/scripts/super-cmd-perf/queries/agg-clickhouse-db.sql @@ -0,0 +1,5 @@ +SET allow_suspicious_types_in_group_by = 1; +SELECT count(),v.type +FROM '__SOURCE__' +WHERE v.repo.name='duckdb/duckdb' +GROUP BY v.type diff --git a/scripts/super-cmd-perf/queries/agg.sql b/scripts/super-cmd-perf/queries/agg.sql new file mode 100644 index 0000000000..074916587c --- /dev/null +++ b/scripts/super-cmd-perf/queries/agg.sql @@ -0,0 +1,4 @@ +SELECT count(),type +FROM '__SOURCE__' +WHERE repo.name='duckdb/duckdb' +GROUP BY type diff --git a/scripts/super-cmd-perf/queries/count-clickhouse-db.sql b/scripts/super-cmd-perf/queries/count-clickhouse-db.sql new file mode 100644 index 0000000000..87ae5e1a27 --- /dev/null +++ b/scripts/super-cmd-perf/queries/count-clickhouse-db.sql @@ -0,0 +1,3 @@ +SELECT count() +FROM '__SOURCE__' +WHERE v.actor.login='johnbieren' diff --git a/scripts/super-cmd-perf/queries/count.sql b/scripts/super-cmd-perf/queries/count.sql new file mode 100644 index 0000000000..289bbbd13c --- /dev/null +++ b/scripts/super-cmd-perf/queries/count.sql @@ -0,0 +1,3 @@ +SELECT count() +FROM '__SOURCE__' +WHERE actor.login='johnbieren' diff --git a/scripts/super-cmd-perf/queries/search+-clickhouse-db.sql b/scripts/super-cmd-perf/queries/search+-clickhouse-db.sql new file mode 100644 index 0000000000..0aaf3f7a4f --- /dev/null +++ b/scripts/super-cmd-perf/queries/search+-clickhouse-db.sql @@ -0,0 +1,489 @@ +SELECT count() +FROM '__SOURCE__' +WHERE + v.id LIKE '%in case you have any feedback 😊%' + OR v.type LIKE '%in case you have any feedback 😊%' + OR v.actor.login LIKE '%in case you have any feedback 😊%' + OR v.actor.display_login LIKE '%in case you have any feedback 😊%' + OR v.actor.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.actor.url LIKE '%in case you have any feedback 😊%' + OR v.actor.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.repo.name LIKE '%in case you have any feedback 😊%' + OR v.repo.url LIKE '%in case you have any feedback 😊%' + OR v.payload.ref LIKE '%in case you have any feedback 😊%' + OR v.payload.ref_type LIKE '%in case you have any feedback 😊%' + OR v.payload.pusher_type LIKE '%in case you have any feedback 😊%' + OR v.payload.head LIKE '%in case you have any feedback 😊%' + OR v.payload.before LIKE '%in case you have any feedback 😊%' + OR v.payload.master_branch LIKE '%in case you have any feedback 😊%' + OR v.payload.description LIKE '%in case you have any feedback 😊%' + OR v.payload.action LIKE '%in case you have any feedback 😊%' + OR v.org.login LIKE '%in case you have any feedback 😊%' + OR v.org.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.org.url LIKE '%in case you have any feedback 😊%' + OR v.org.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.login LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.user.type LIKE '%in case you have any feedback 😊%' + OR v.payload.review.body LIKE '%in case you have any feedback 😊%' + OR v.payload.review.commit_id LIKE '%in case you have any feedback 😊%' + OR v.payload.review.state LIKE '%in case you have any feedback 😊%' + OR v.payload.review.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.pull_request_url LIKE '%in case you have any feedback 😊%' + OR v.payload.review.author_association LIKE '%in case you have any feedback 😊%' + OR v.payload.review._links.html.href LIKE '%in case you have any feedback 😊%' + OR v.payload.review._links.pull_request.href LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.login LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.user.type LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.path LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.commit_id LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.author_association LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.body LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.reactions.url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.issue_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.diff_hunk LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.original_commit_id LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.pull_request_url LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.start_side LIKE '%in case you have any feedback 😊%' + OR v.payload.comment.side LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.repository_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.labels_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.comments_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.title LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.login LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.user.type LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.state LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.login LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.assignee.type LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.labels_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.title LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.description LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.login LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.creator.type LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.milestone.state LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.author_association LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.active_lock_reason LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.body LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.reactions.url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.timeline_url LIKE '%in case you have any feedback 😊%' + OR v.payload.issue.state_reason LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.diff_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.patch_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.issue_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.state LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.title LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.login LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.user.type LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.body LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merge_commit_sha LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.commits_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.review_comments_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.review_comment_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.comments_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.statuses_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.label LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.ref LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.sha LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.login LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.user.type LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.name LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.full_name LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.login LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.owner.type LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.description LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.forks_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.keys_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.collaborators_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.teams_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.hooks_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.issue_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.assignees_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.branches_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.tags_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.blobs_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.git_tags_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.git_refs_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.trees_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.statuses_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.languages_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.stargazers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.contributors_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.subscribers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.subscription_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.commits_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.git_commits_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.comments_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.issue_comment_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.contents_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.compare_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.merges_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.archive_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.downloads_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.issues_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.pulls_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.milestones_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.notifications_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.labels_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.releases_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.deployments_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.git_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.ssh_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.clone_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.svn_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.homepage LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.language LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.mirror_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.visibility LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.head.repo.default_branch LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.label LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.ref LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.sha LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.login LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.user.type LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.name LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.full_name LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.login LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.owner.type LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.description LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.forks_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.keys_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.collaborators_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.teams_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.hooks_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.issue_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.assignees_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.branches_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.tags_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.blobs_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.git_tags_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.git_refs_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.trees_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.statuses_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.languages_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.stargazers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.contributors_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.subscribers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.subscription_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.commits_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.git_commits_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.comments_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.issue_comment_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.contents_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.compare_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.merges_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.archive_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.downloads_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.issues_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.pulls_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.milestones_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.notifications_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.labels_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.releases_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.deployments_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.git_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.ssh_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.clone_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.svn_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.homepage LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.language LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.mirror_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.visibility LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.base.repo.default_branch LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request._links.self.href LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request._links.html.href LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request._links.issue.href LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request._links.comments.href LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request._links.review_comments.href LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request._links.review_comment.href LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request._links.commits.href LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request._links.statuses.href LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.author_association LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.active_lock_reason LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.mergeable_state LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.login LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.pull_request.merged_by.type LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.name LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.full_name LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.login LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.owner.type LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.description LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.forks_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.keys_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.collaborators_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.teams_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.hooks_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.issue_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.assignees_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.branches_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.tags_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.blobs_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.git_tags_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.git_refs_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.trees_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.statuses_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.languages_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.stargazers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.contributors_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.subscribers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.subscription_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.commits_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.git_commits_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.comments_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.issue_comment_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.contents_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.compare_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.merges_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.archive_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.downloads_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.issues_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.pulls_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.milestones_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.notifications_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.labels_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.releases_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.deployments_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.git_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.ssh_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.clone_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.svn_url LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.homepage LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.visibility LIKE '%in case you have any feedback 😊%' + OR v.payload.forkee.default_branch LIKE '%in case you have any feedback 😊%' + OR v.payload.release.url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.assets_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.upload_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.login LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.author.type LIKE '%in case you have any feedback 😊%' + OR v.payload.release.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.release.tag_name LIKE '%in case you have any feedback 😊%' + OR v.payload.release.target_commitish LIKE '%in case you have any feedback 😊%' + OR v.payload.release.name LIKE '%in case you have any feedback 😊%' + OR v.payload.release.tarball_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.zipball_url LIKE '%in case you have any feedback 😊%' + OR v.payload.release.body LIKE '%in case you have any feedback 😊%' + OR v.payload.release.short_description_html LIKE '%in case you have any feedback 😊%' + OR v.payload.release.discussion_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.login LIKE '%in case you have any feedback 😊%' + OR v.payload.member.node_id LIKE '%in case you have any feedback 😊%' + OR v.payload.member.avatar_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.gravatar_id LIKE '%in case you have any feedback 😊%' + OR v.payload.member.url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.html_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.followers_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.following_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.gists_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.starred_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.organizations_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.repos_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.received_events_url LIKE '%in case you have any feedback 😊%' + OR v.payload.member.type LIKE '%in case you have any feedback 😊%' diff --git a/scripts/super-cmd-perf/queries/search+.spq b/scripts/super-cmd-perf/queries/search+.spq new file mode 100644 index 0000000000..5d081071f0 --- /dev/null +++ b/scripts/super-cmd-perf/queries/search+.spq @@ -0,0 +1,3 @@ +SELECT count() +FROM '__SOURCE__' +WHERE grep('in case you have any feedback 😊') diff --git a/scripts/super-cmd-perf/queries/search+.sql b/scripts/super-cmd-perf/queries/search+.sql new file mode 100644 index 0000000000..7ca7ee7efd --- /dev/null +++ b/scripts/super-cmd-perf/queries/search+.sql @@ -0,0 +1,489 @@ +SELECT count() +FROM '__SOURCE__' +WHERE + id LIKE '%in case you have any feedback 😊%' + OR type LIKE '%in case you have any feedback 😊%' + OR actor.login LIKE '%in case you have any feedback 😊%' + OR actor.display_login LIKE '%in case you have any feedback 😊%' + OR actor.gravatar_id LIKE '%in case you have any feedback 😊%' + OR actor.url LIKE '%in case you have any feedback 😊%' + OR actor.avatar_url LIKE '%in case you have any feedback 😊%' + OR repo.name LIKE '%in case you have any feedback 😊%' + OR repo.url LIKE '%in case you have any feedback 😊%' + OR payload.ref LIKE '%in case you have any feedback 😊%' + OR payload.ref_type LIKE '%in case you have any feedback 😊%' + OR payload.pusher_type LIKE '%in case you have any feedback 😊%' + OR payload.head LIKE '%in case you have any feedback 😊%' + OR payload.before LIKE '%in case you have any feedback 😊%' + OR payload.master_branch LIKE '%in case you have any feedback 😊%' + OR payload.description LIKE '%in case you have any feedback 😊%' + OR payload.action LIKE '%in case you have any feedback 😊%' + OR org.login LIKE '%in case you have any feedback 😊%' + OR org.gravatar_id LIKE '%in case you have any feedback 😊%' + OR org.url LIKE '%in case you have any feedback 😊%' + OR org.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.review.node_id LIKE '%in case you have any feedback 😊%' + OR payload.review.user.login LIKE '%in case you have any feedback 😊%' + OR payload.review.user.node_id LIKE '%in case you have any feedback 😊%' + OR payload.review.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.review.user.url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.html_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.following_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.events_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.review.user.type LIKE '%in case you have any feedback 😊%' + OR payload.review.body LIKE '%in case you have any feedback 😊%' + OR payload.review.commit_id LIKE '%in case you have any feedback 😊%' + OR payload.review.state LIKE '%in case you have any feedback 😊%' + OR payload.review.html_url LIKE '%in case you have any feedback 😊%' + OR payload.review.pull_request_url LIKE '%in case you have any feedback 😊%' + OR payload.review.author_association LIKE '%in case you have any feedback 😊%' + OR payload.review._links.html.href LIKE '%in case you have any feedback 😊%' + OR payload.review._links.pull_request.href LIKE '%in case you have any feedback 😊%' + OR payload.comment.url LIKE '%in case you have any feedback 😊%' + OR payload.comment.html_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.node_id LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.login LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.node_id LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.html_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.following_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.events_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.user.type LIKE '%in case you have any feedback 😊%' + OR payload.comment.path LIKE '%in case you have any feedback 😊%' + OR payload.comment.commit_id LIKE '%in case you have any feedback 😊%' + OR payload.comment.author_association LIKE '%in case you have any feedback 😊%' + OR payload.comment.body LIKE '%in case you have any feedback 😊%' + OR payload.comment.reactions.url LIKE '%in case you have any feedback 😊%' + OR payload.comment.issue_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.diff_hunk LIKE '%in case you have any feedback 😊%' + OR payload.comment.original_commit_id LIKE '%in case you have any feedback 😊%' + OR payload.comment.pull_request_url LIKE '%in case you have any feedback 😊%' + OR payload.comment.start_side LIKE '%in case you have any feedback 😊%' + OR payload.comment.side LIKE '%in case you have any feedback 😊%' + OR payload.issue.url LIKE '%in case you have any feedback 😊%' + OR payload.issue.repository_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.labels_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.comments_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.events_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.html_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.node_id LIKE '%in case you have any feedback 😊%' + OR payload.issue.title LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.login LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.node_id LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.html_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.following_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.events_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.user.type LIKE '%in case you have any feedback 😊%' + OR payload.issue.state LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.login LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.node_id LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.html_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.following_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.events_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.assignee.type LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.html_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.labels_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.node_id LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.title LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.description LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.login LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.node_id LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.html_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.following_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.events_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.creator.type LIKE '%in case you have any feedback 😊%' + OR payload.issue.milestone.state LIKE '%in case you have any feedback 😊%' + OR payload.issue.author_association LIKE '%in case you have any feedback 😊%' + OR payload.issue.active_lock_reason LIKE '%in case you have any feedback 😊%' + OR payload.issue.body LIKE '%in case you have any feedback 😊%' + OR payload.issue.reactions.url LIKE '%in case you have any feedback 😊%' + OR payload.issue.timeline_url LIKE '%in case you have any feedback 😊%' + OR payload.issue.state_reason LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.node_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.html_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.diff_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.patch_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.issue_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.state LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.title LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.login LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.node_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.html_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.following_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.user.type LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.body LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merge_commit_sha LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.commits_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.review_comments_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.review_comment_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.comments_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.statuses_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.label LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.ref LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.sha LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.login LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.node_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.html_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.following_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.user.type LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.node_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.name LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.full_name LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.login LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.node_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.html_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.following_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.owner.type LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.html_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.description LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.forks_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.keys_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.collaborators_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.teams_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.hooks_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.issue_events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.assignees_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.branches_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.tags_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.blobs_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.git_tags_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.git_refs_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.trees_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.statuses_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.languages_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.stargazers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.contributors_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.subscribers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.subscription_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.commits_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.git_commits_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.comments_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.issue_comment_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.contents_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.compare_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.merges_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.archive_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.downloads_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.issues_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.pulls_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.milestones_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.notifications_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.labels_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.releases_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.deployments_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.git_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.ssh_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.clone_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.svn_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.homepage LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.language LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.mirror_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.visibility LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.head.repo.default_branch LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.label LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.ref LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.sha LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.login LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.node_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.html_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.following_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.user.type LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.node_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.name LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.full_name LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.login LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.node_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.html_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.following_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.owner.type LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.html_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.description LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.forks_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.keys_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.collaborators_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.teams_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.hooks_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.issue_events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.assignees_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.branches_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.tags_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.blobs_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.git_tags_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.git_refs_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.trees_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.statuses_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.languages_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.stargazers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.contributors_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.subscribers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.subscription_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.commits_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.git_commits_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.comments_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.issue_comment_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.contents_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.compare_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.merges_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.archive_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.downloads_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.issues_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.pulls_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.milestones_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.notifications_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.labels_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.releases_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.deployments_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.git_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.ssh_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.clone_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.svn_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.homepage LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.language LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.mirror_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.visibility LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.base.repo.default_branch LIKE '%in case you have any feedback 😊%' + OR payload.pull_request._links.self.href LIKE '%in case you have any feedback 😊%' + OR payload.pull_request._links.html.href LIKE '%in case you have any feedback 😊%' + OR payload.pull_request._links.issue.href LIKE '%in case you have any feedback 😊%' + OR payload.pull_request._links.comments.href LIKE '%in case you have any feedback 😊%' + OR payload.pull_request._links.review_comments.href LIKE '%in case you have any feedback 😊%' + OR payload.pull_request._links.review_comment.href LIKE '%in case you have any feedback 😊%' + OR payload.pull_request._links.commits.href LIKE '%in case you have any feedback 😊%' + OR payload.pull_request._links.statuses.href LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.author_association LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.active_lock_reason LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.mergeable_state LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.login LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.node_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.html_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.following_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.pull_request.merged_by.type LIKE '%in case you have any feedback 😊%' + OR payload.forkee.node_id LIKE '%in case you have any feedback 😊%' + OR payload.forkee.name LIKE '%in case you have any feedback 😊%' + OR payload.forkee.full_name LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.login LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.node_id LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.html_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.following_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.events_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.owner.type LIKE '%in case you have any feedback 😊%' + OR payload.forkee.html_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.description LIKE '%in case you have any feedback 😊%' + OR payload.forkee.url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.forks_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.keys_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.collaborators_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.teams_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.hooks_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.issue_events_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.events_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.assignees_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.branches_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.tags_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.blobs_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.git_tags_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.git_refs_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.trees_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.statuses_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.languages_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.stargazers_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.contributors_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.subscribers_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.subscription_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.commits_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.git_commits_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.comments_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.issue_comment_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.contents_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.compare_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.merges_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.archive_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.downloads_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.issues_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.pulls_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.milestones_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.notifications_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.labels_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.releases_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.deployments_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.git_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.ssh_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.clone_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.svn_url LIKE '%in case you have any feedback 😊%' + OR payload.forkee.homepage LIKE '%in case you have any feedback 😊%' + OR payload.forkee.visibility LIKE '%in case you have any feedback 😊%' + OR payload.forkee.default_branch LIKE '%in case you have any feedback 😊%' + OR payload.release.url LIKE '%in case you have any feedback 😊%' + OR payload.release.assets_url LIKE '%in case you have any feedback 😊%' + OR payload.release.upload_url LIKE '%in case you have any feedback 😊%' + OR payload.release.html_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.login LIKE '%in case you have any feedback 😊%' + OR payload.release.author.node_id LIKE '%in case you have any feedback 😊%' + OR payload.release.author.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.release.author.url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.html_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.following_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.events_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.release.author.type LIKE '%in case you have any feedback 😊%' + OR payload.release.node_id LIKE '%in case you have any feedback 😊%' + OR payload.release.tag_name LIKE '%in case you have any feedback 😊%' + OR payload.release.target_commitish LIKE '%in case you have any feedback 😊%' + OR payload.release.name LIKE '%in case you have any feedback 😊%' + OR payload.release.tarball_url LIKE '%in case you have any feedback 😊%' + OR payload.release.zipball_url LIKE '%in case you have any feedback 😊%' + OR payload.release.body LIKE '%in case you have any feedback 😊%' + OR payload.release.short_description_html LIKE '%in case you have any feedback 😊%' + OR payload.release.discussion_url LIKE '%in case you have any feedback 😊%' + OR payload.member.login LIKE '%in case you have any feedback 😊%' + OR payload.member.node_id LIKE '%in case you have any feedback 😊%' + OR payload.member.avatar_url LIKE '%in case you have any feedback 😊%' + OR payload.member.gravatar_id LIKE '%in case you have any feedback 😊%' + OR payload.member.url LIKE '%in case you have any feedback 😊%' + OR payload.member.html_url LIKE '%in case you have any feedback 😊%' + OR payload.member.followers_url LIKE '%in case you have any feedback 😊%' + OR payload.member.following_url LIKE '%in case you have any feedback 😊%' + OR payload.member.gists_url LIKE '%in case you have any feedback 😊%' + OR payload.member.starred_url LIKE '%in case you have any feedback 😊%' + OR payload.member.subscriptions_url LIKE '%in case you have any feedback 😊%' + OR payload.member.organizations_url LIKE '%in case you have any feedback 😊%' + OR payload.member.repos_url LIKE '%in case you have any feedback 😊%' + OR payload.member.events_url LIKE '%in case you have any feedback 😊%' + OR payload.member.received_events_url LIKE '%in case you have any feedback 😊%' + OR payload.member.type LIKE '%in case you have any feedback 😊%' diff --git a/scripts/super-cmd-perf/queries/search-clickhouse-db.sql b/scripts/super-cmd-perf/queries/search-clickhouse-db.sql new file mode 100644 index 0000000000..ad4b94281c --- /dev/null +++ b/scripts/super-cmd-perf/queries/search-clickhouse-db.sql @@ -0,0 +1,3 @@ +SELECT count() +FROM '__SOURCE__' +WHERE v.payload.pull_request.body LIKE '%in case you have any feedback 😊%' diff --git a/scripts/super-cmd-perf/queries/search.spq b/scripts/super-cmd-perf/queries/search.spq new file mode 100644 index 0000000000..b289be1760 --- /dev/null +++ b/scripts/super-cmd-perf/queries/search.spq @@ -0,0 +1,3 @@ +SELECT count() +FROM '__SOURCE__' +WHERE grep('in case you have any feedback 😊', payload.pull_request.body) diff --git a/scripts/super-cmd-perf/queries/search.sql b/scripts/super-cmd-perf/queries/search.sql new file mode 100644 index 0000000000..b4feba2741 --- /dev/null +++ b/scripts/super-cmd-perf/queries/search.sql @@ -0,0 +1,3 @@ +SELECT count() +FROM '__SOURCE__' +WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%' diff --git a/scripts/super-cmd-perf/queries/union-clickhouse-db.sql b/scripts/super-cmd-perf/queries/union-clickhouse-db.sql new file mode 100644 index 0000000000..6f24f0815d --- /dev/null +++ b/scripts/super-cmd-perf/queries/union-clickhouse-db.sql @@ -0,0 +1,13 @@ +WITH assignees AS ( + SELECT v.payload.pull_request.assignee.login assignee + FROM '__SOURCE__' + UNION ALL + SELECT arrayJoin(v.payload.pull_request.assignees).login assignee + FROM '__SOURCE__' +) +SELECT assignee, count(*) count +FROM assignees +WHERE assignee IS NOT NULL +GROUP BY assignee +ORDER BY count DESC +LIMIT 5 diff --git a/scripts/super-cmd-perf/queries/union-clickhouse.sql b/scripts/super-cmd-perf/queries/union-clickhouse.sql new file mode 100644 index 0000000000..ecea189b37 --- /dev/null +++ b/scripts/super-cmd-perf/queries/union-clickhouse.sql @@ -0,0 +1,13 @@ +WITH assignees AS ( + SELECT payload.pull_request.assignee.login assignee + FROM '__SOURCE__' + UNION ALL + SELECT arrayJoin(payload.pull_request.assignees).login assignee + FROM '__SOURCE__' +) +SELECT assignee, count(*) count +FROM assignees +WHERE assignee IS NOT NULL +GROUP BY assignee +ORDER BY count DESC +LIMIT 5 diff --git a/scripts/super-cmd-perf/queries/union-datafusion.sql b/scripts/super-cmd-perf/queries/union-datafusion.sql new file mode 100644 index 0000000000..5346c3d211 --- /dev/null +++ b/scripts/super-cmd-perf/queries/union-datafusion.sql @@ -0,0 +1,15 @@ +WITH assignees AS ( + SELECT payload.pull_request.assignee.login assignee + FROM '__SOURCE__' + UNION ALL + SELECT object.login as assignee FROM ( + SELECT unnest(payload.pull_request.assignees) object + FROM '__SOURCE__' + ) +) +SELECT assignee, count() count +FROM assignees +WHERE assignee IS NOT NULL +GROUP BY assignee +ORDER BY count DESC +LIMIT 5 diff --git a/scripts/super-cmd-perf/queries/union.spq b/scripts/super-cmd-perf/queries/union.spq new file mode 100644 index 0000000000..bb53c5fe9f --- /dev/null +++ b/scripts/super-cmd-perf/queries/union.spq @@ -0,0 +1,6 @@ +FROM '__SOURCE__' +| UNNEST [...payload.pull_request.assignees, payload.pull_request.assignee] +| WHERE this IS NOT NULL +| AGGREGATE count() BY assignee:=login +| ORDER BY count DESC +| LIMIT 5 diff --git a/scripts/super-cmd-perf/queries/union.sql b/scripts/super-cmd-perf/queries/union.sql new file mode 100644 index 0000000000..163e9db4e1 --- /dev/null +++ b/scripts/super-cmd-perf/queries/union.sql @@ -0,0 +1,13 @@ +WITH assignees AS ( + SELECT payload.pull_request.assignee.login assignee + FROM '__SOURCE__' + UNION ALL + SELECT unnest(payload.pull_request.assignees).login assignee + FROM '__SOURCE__' +) +SELECT assignee, count(*) count +FROM assignees +WHERE assignee IS NOT NULL +GROUP BY assignee +ORDER BY count DESC +LIMIT 5 diff --git a/scripts/super-cmd-perf/run-queries.sh b/scripts/super-cmd-perf/run-queries.sh new file mode 100755 index 0000000000..aa0c4371ed --- /dev/null +++ b/scripts/super-cmd-perf/run-queries.sh @@ -0,0 +1,168 @@ +#!/bin/bash -xv +set -euo pipefail +pushd "$(cd "$(dirname "$0")" && pwd)" + +if [ "$#" -ne 1 ]; then + echo "Specify results directory string" + exit 1 +fi +rundir="$(pwd)/$1" +mkdir -p "$rundir" + +RUNNING_ON_AWS_EC2="${RUNNING_ON_AWS_EC2:-}" +if [ -n "$RUNNING_ON_AWS_EC2" ]; then + storage="/mnt/" +else + storage="" +fi + +warmups=1 +runs=1 +report="$rundir/report_$(basename "$rundir").md" +csv_report="$rundir/report_$(basename "$rundir").csv" + +function run_query { + cmd="$1" + shift + queryfile="$1" + shift + source="$1" + shift + outputfile="$rundir/$cmd-$queryfile-$source.out" + + final_query=$(mktemp) + + DUCKDB_MEMORY_LIMIT="${DUCKDB_MEMORY_LIMIT:-}" + if [ "$cmd" == "duckdb" ] && [ -n "$DUCKDB_MEMORY_LIMIT" ]; then + echo 'SET memory_limit = '\'"${DUCKDB_MEMORY_LIMIT}"\''; ' >> "$final_query" + fi + + if [ "$source" == "gha" ]; then + sed -e "s/__SOURCE__/$source/" "queries/$queryfile" >> "$final_query" + else + sed -e "s/__SOURCE__/${storage//\//\\/}${source}/" "queries/$queryfile" >> "$final_query" + fi + + if [ "$cmd" == "super" ]; then + if [ "$source" == "gha.parquet" ]; then + cmd="SUPER_VAM=1 super" + fi + cmd="$cmd -z -I $final_query" + elif [ "$cmd" == "duckdb" ]; then + if [ "$source" == "gha" ]; then + cmd="duckdb ${storage}gha.db" + fi + cmd="$cmd < $final_query" + elif [ "$cmd" == "datafusion" ]; then + cmd="datafusion-cli --file $final_query" + elif [[ "$cmd" == "clickhouse"* ]]; then + cmd="$cmd --queries-file $final_query" + fi + + echo -e "About to execute\n================\n$cmd\n\nWith query\n==========" > "$outputfile" + cat "$final_query" >> "$outputfile" + echo >> "$outputfile" + + { hyperfine \ + --show-output \ + --warmup $warmups \ + --runs $runs \ + --time-unit second \ + "$cmd" ; + } \ + >> "$outputfile" \ + 2>&1 + + rm -f "$final_query" +} + +echo "|**Tool**|**Format**|**search**|**search+**|**count**|**agg**|**union**|" >> "$report" +echo "|-|-|-|-|-|-|-|" >> "$report" +echo "Tool,Format,search,search+,count,agg,union" > "$csv_report" + +for source in gha.bsup gha.parquet +do + echo -n "|\`super\`|\`${source/gha./}\`|" >> "$report" + echo -n "super,${source/gha./}" >> "$csv_report" + for queryfile in search.spq search+.spq count.sql agg.sql union.spq + do + if [ "$source" == "gha.parquet" ] && { [ "$queryfile" == "search.spq" ] || [ "$queryfile" == "search+.spq" ] || [ "$queryfile" == "union.spq" ]; }; then + echo -n "N/A|" >> "$report" + echo -n ",N/A" >> "$csv_report" + continue + fi + run_query super $queryfile "$source" + result=$(grep Time < "$rundir/super-$queryfile-$source.out" | awk '{ print $4 }') + echo -n "$result" >> "$report" + echo -n "|" >> "$report" + echo -n ",$result" >> "$csv_report" + done + echo >> "$report" + echo >> "$csv_report" +done + +for source in gha gha.parquet +do + duckdb_source=${source/gha\./} + duckdb_source=${duckdb_source/gha/db} + echo -n "|\`duckdb\`|\`$duckdb_source\`|" >> "$report" + echo -n "duckdb,$duckdb_source" >> "$csv_report" + for queryfile in search.sql search+.sql count.sql agg.sql union.sql + do + run_query duckdb $queryfile "$source" + result=$(grep Time < "$rundir/duckdb-$queryfile-$source.out" | awk '{ print $4 }') + echo -n "$result" >> "$report" + echo -n "|" >> "$report" + echo -n ",$result" >> "$csv_report" + done + echo >> "$report" + echo >> "$csv_report" +done + +echo -n "|\`datafusion\`|\`parquet\`|" >> "$report" +echo -n "datafusion,parquet" >> "$csv_report" +for queryfile in search.sql search+.sql count.sql agg.sql union-datafusion.sql +do + run_query datafusion $queryfile gha.parquet + result=$(grep Time < "$rundir/datafusion-$queryfile-$source.out" | awk '{ print $4 }') + echo -n "$result" >> "$report" + echo -n "|" >> "$report" + echo -n ",$result" >> "$csv_report" +done +echo >> "$report" +echo >> "$csv_report" + +echo -n "|\`clickhouse\`|\`parquet\`|" >> "$report" +echo -n "clickhouse,parquet" >> "$csv_report" +for queryfile in search.sql search+.sql count.sql agg.sql union-clickhouse.sql +do + run_query clickhouse $queryfile gha.parquet + result=$(grep Time < "$rundir/clickhouse-$queryfile-$source.out" | awk '{ print $4 }') + echo -n "$result" >> "$report" + echo -n "|" >> "$report" + echo -n ",$result" >> "$csv_report" +done +echo >> "$report" +echo >> "$csv_report" + +if [ -n "$RUNNING_ON_AWS_EC2" ]; then + sudo systemctl start clickhouse-server + echo -n "|\`clickhouse\`|\`db\`|" >> "$report" + echo -n "clickhouse,db" >> "$csv_report" + for queryfile in search-clickhouse-db.sql search+-clickhouse-db.sql count-clickhouse-db.sql agg-clickhouse-db.sql union-clickhouse-db.sql + do + if [ "$queryfile" == "union-clickhouse-db.sql" ]; then + echo -n "N/A|" >> "$report" + echo -n ",N/A" >> "$csv_report" + continue + fi + run_query clickhouse-client $queryfile gha + result=$(grep Time < "$rundir/clickhouse-client-$queryfile-$source.out" | awk '{ print $4 }') + echo -n "$result" >> "$report" + echo -n "|" >> "$report" + echo -n ",$result" >> "$csv_report" + done + sudo systemctl stop clickhouse-server + echo >> "$report" + echo >> "$csv_report" +fi diff --git a/vector/bool.go b/vector/bool.go index 4c4440743a..289d24720c 100644 --- a/vector/bool.go +++ b/vector/bool.go @@ -2,6 +2,7 @@ package vector import ( "math/bits" + "slices" "strings" "github.com/brimdata/super" @@ -38,6 +39,10 @@ func (b *Bool) Set(slot uint32) { b.Bits[slot>>6] |= (1 << (slot & 0x3f)) } +func (b *Bool) SetLen(len uint32) { + b.len = len +} + func (b *Bool) Len() uint32 { if b == nil { return 0 @@ -52,7 +57,7 @@ func (b *Bool) CopyWithBits(bits []uint64) *Bool { } func (b *Bool) Serialize(builder *zcode.Builder, slot uint32) { - if b.Nulls.Value(slot) { + if b != nil && b.Nulls.Value(slot) { builder.Append(nil) } else { builder.Append(super.EncodeBool(b.Value(slot))) @@ -94,6 +99,17 @@ func (b *Bool) String() string { return s.String() } +func Not(a *Bool) *Bool { + if a == nil { + panic("not: nil bool") + } + bits := slices.Clone(a.Bits) + for i := range bits { + bits[i] = ^a.Bits[i] + } + return a.CopyWithBits(bits) +} + func Or(a, b *Bool) *Bool { if b == nil { return a @@ -111,6 +127,23 @@ func Or(a, b *Bool) *Bool { return out } +func And(a, b *Bool) *Bool { + if b == nil { + return nil + } + if a == nil { + return nil + } + if a.Len() != b.Len() { + panic("and'ing two different length bool vectors") + } + out := NewBoolEmpty(a.Len(), nil) + for i := range len(a.Bits) { + out.Bits[i] = a.Bits[i] & b.Bits[i] + } + return out +} + // BoolValue returns the value of slot in vec if the value is a Boolean. It // returns false otherwise. func BoolValue(vec Any, slot uint32) bool { @@ -136,7 +169,19 @@ func NullsOf(v Any) *Bool { return v.Nulls case *Bytes: return v.Nulls + case *Bool: + if v != nil { + return v.Nulls + } + return nil case *Const: + if v.Value().IsNull() { + out := NewBoolEmpty(v.Len(), nil) + for i := range out.Bits { + out.Bits[i] = ^uint64(0) + } + return out + } return v.Nulls case *Dict: return v.Nulls @@ -167,49 +212,124 @@ func NullsOf(v Any) *Bool { case *Union: return v.Nulls case *View: - return NullsView(NullsOf(v.Any), v.Index) + return NewBoolView(NullsOf(v.Any), v.Index) } panic(v) } -func setNulls(v Any, nulls *Bool) { +func CopyAndSetNulls(v Any, nulls *Bool) Any { switch v := v.(type) { case *Array: - v.Nulls = nulls + return &Array{ + Typ: v.Typ, + Offsets: v.Offsets, + Values: v.Values, + Nulls: nulls, + } case *Bytes: - v.Nulls = nulls + return &Bytes{ + Offs: v.Offs, + Bytes: v.Bytes, + Nulls: nulls, + } case *Bool: - v.Nulls = nulls + return &Bool{ + len: v.len, + Bits: v.Bits, + Nulls: nulls, + } case *Const: - v.Nulls = nulls + return &Const{ + val: v.val, + len: v.len, + Nulls: nulls, + } case *Dict: - v.Nulls = nulls + return &Dict{ + Any: v.Any, + Index: v.Index, + Counts: v.Counts, + Nulls: nulls, + } case *Error: - v.Nulls = nulls + return &Error{ + Typ: v.Typ, + Vals: v.Vals, + Nulls: nulls, + } case *Float: - v.Nulls = nulls + return &Float{ + Typ: v.Typ, + Values: v.Values, + Nulls: nulls, + } case *Int: - v.Nulls = nulls + return &Int{ + Typ: v.Typ, + Values: v.Values, + Nulls: nulls, + } case *IP: - v.Nulls = nulls + return &IP{ + Values: v.Values, + Nulls: nulls, + } case *Map: - v.Nulls = nulls + return &Map{ + Typ: v.Typ, + Offsets: v.Offsets, + Keys: v.Keys, + Values: v.Values, + Nulls: nulls, + } case *Named: - setNulls(v.Any, nulls) + return &Named{ + Typ: v.Typ, + Any: CopyAndSetNulls(v.Any, nulls), + } case *Net: - v.Nulls = nulls + return &Net{ + Values: v.Values, + Nulls: nulls, + } case *Record: - v.Nulls = nulls + return &Record{ + Typ: v.Typ, + Fields: v.Fields, + len: v.len, + Nulls: nulls, + } case *Set: - v.Nulls = nulls + return &Set{ + Typ: v.Typ, + Offsets: v.Offsets, + Values: v.Values, + Nulls: nulls, + } case *String: - v.Nulls = nulls + return &String{ + Offsets: v.Offsets, + Bytes: v.Bytes, + Nulls: nulls, + } case *TypeValue: - v.Nulls = nulls + return &TypeValue{ + Offsets: v.Offsets, + Bytes: v.Bytes, + Nulls: nulls, + } case *Uint: - v.Nulls = nulls + return &Uint{ + Typ: v.Typ, + Values: v.Values, + Nulls: nulls, + } case *Union: - v.Nulls = nulls + return &Union{ + Dynamic: v.Dynamic, + Typ: v.Typ, + Nulls: nulls, + } default: panic(v) } diff --git a/vector/builder.go b/vector/builder.go index a65c2f9d50..7aecc9c4e5 100644 --- a/vector/builder.go +++ b/vector/builder.go @@ -14,6 +14,41 @@ type Builder interface { Build() Any } +type DynamicBuilder struct { + tags []uint32 + values []Builder + which map[super.Type]int +} + +func NewDynamicBuilder() *DynamicBuilder { + return &DynamicBuilder{ + which: make(map[super.Type]int), + } +} + +func (d *DynamicBuilder) Write(val super.Value) { + typ := val.Type() + tag, ok := d.which[typ] + if !ok { + tag = len(d.values) + d.values = append(d.values, NewBuilder(typ)) + d.which[typ] = tag + } + d.tags = append(d.tags, uint32(tag)) + d.values[tag].Write(val.Bytes()) +} + +func (d *DynamicBuilder) Build() Any { + var vecs []Any + for _, b := range d.values { + vecs = append(vecs, b.Build()) + } + if len(vecs) == 1 { + return vecs[0] + } + return NewDynamic(d.tags, vecs) +} + func NewBuilder(typ super.Type) Builder { var b Builder switch typ := typ.(type) { @@ -40,7 +75,7 @@ func NewBuilder(typ super.Type) Builder { case super.IsSigned(id): b = &intBuilder{typ: typ} case super.IsFloat(id): - b = &intBuilder{typ: typ} + b = &floatBuilder{typ: typ} } } else { switch id { @@ -97,7 +132,7 @@ func (n *nullsBuilder) Build() Any { if !n.nulls.IsEmpty() { bits := make([]uint64, (n.n+63)/64) n.nulls.WriteDenseTo(bits) - setNulls(vec, NewBool(bits, n.n, nil)) + vec = CopyAndSetNulls(vec, NewBool(bits, n.n, nil)) } return vec } diff --git a/vector/kind.go b/vector/kind.go index d906e98d9a..4c8ddb4ce7 100644 --- a/vector/kind.go +++ b/vector/kind.go @@ -17,6 +17,7 @@ const ( KindString = 4 KindBytes = 5 KindType = 6 + KindError = 7 ) const ( @@ -40,6 +41,10 @@ func KindOf(v Any) Kind { return KindBytes case *String: return KindString + case *Error: + return KindError + case *TypeValue: + return KindType case *Dict: return KindOf(v.Any) case *View: @@ -63,6 +68,8 @@ func KindFromString(v string) Kind { return KindBytes case "String": return KindString + case "TypeValue": + return KindType default: return KindInvalid } diff --git a/vector/view.go b/vector/view.go index 6b450d3e8a..ef9b2838a0 100644 --- a/vector/view.go +++ b/vector/view.go @@ -13,8 +13,10 @@ var _ Any = (*View)(nil) func NewView(val Any, index []uint32) Any { switch val := val.(type) { + case *Bool: + return NewBoolView(val, index) case *Const: - return NewConst(val.val, uint32(len(index)), NullsView(val.Nulls, index)) + return NewConst(val.val, uint32(len(index)), NewBoolView(val.Nulls, index)) case *Dict: index2 := make([]byte, len(index)) var nulls *Bool @@ -33,10 +35,10 @@ func NewView(val Any, index []uint32) Any { } return NewDict(val.Any, index2, nil, nulls) case *Error: - return NewError(val.Typ, NewView(val.Vals, index), NullsView(val.Nulls, index)) + return NewError(val.Typ, NewView(val.Vals, index), NewBoolView(val.Nulls, index)) case *Union: tags, values := viewForUnionOrDynamic(index, val.Tags, val.TagMap.Forward, val.Values) - return NewUnion(val.Typ, tags, values, NullsView(val.Nulls, index)) + return NewUnion(val.Typ, tags, values, NewBoolView(val.Nulls, index)) case *Dynamic: return NewDynamic(viewForUnionOrDynamic(index, val.Tags, val.TagMap.Forward, val.Values)) case *View: @@ -52,19 +54,31 @@ func NewView(val Any, index []uint32) Any { return &View{val, index} } -func NullsView(nulls *Bool, index []uint32) *Bool { - if nulls == nil { +func NewInverseView(vec Any, index []uint32) Any { + var inverse []uint32 + for i := range vec.Len() { + if len(index) > 0 && index[0] == i { + index = index[1:] + continue + } + inverse = append(inverse, i) + } + return NewView(vec, inverse) +} + +func NewBoolView(vec *Bool, index []uint32) *Bool { + if vec == nil { return nil } - var out *Bool + out := NewBoolEmpty(uint32(len(index)), nil) for k, slot := range index { - if nulls.Value(slot) { - if out == nil { - out = NewBoolEmpty(uint32(len(index)), nil) - } + if vec.Value(slot) { out.Set(uint32(k)) } } + if vec.Nulls != nil { + out.Nulls = NewBoolView(vec.Nulls, index) + } return out } diff --git a/vng/object.go b/vng/object.go index 735ee52a17..27ed7cc869 100644 --- a/vng/object.go +++ b/vng/object.go @@ -75,6 +75,10 @@ func (o *Object) NewReader(zctx *super.Context) (zio.Reader, error) { return NewZedReader(zctx, o.meta, o.readerAt) } +func (o *Object) Size() uint64 { + return HeaderSize + o.header.MetaSize + o.header.DataSize +} + func readMetadata(r io.Reader) (Metadata, error) { zctx := super.NewContext() zr := zngio.NewReader(zctx, r) diff --git a/vng/writer.go b/vng/writer.go index ff8c6d55cf..91184dd066 100644 --- a/vng/writer.go +++ b/vng/writer.go @@ -11,6 +11,8 @@ import ( "github.com/brimdata/super/zson" ) +var maxObjectSize uint32 = 120_000 + // Writer implements the zio.Writer interface. A Writer creates a vector // VNG object from a stream of super.Records. type Writer struct { @@ -30,7 +32,7 @@ func NewWriter(w io.WriteCloser) *Writer { } func (w *Writer) Close() error { - firstErr := w.finalize() + firstErr := w.finalizeObject() if err := w.writer.Close(); err != nil && firstErr == nil { firstErr = err } @@ -38,10 +40,16 @@ func (w *Writer) Close() error { } func (w *Writer) Write(val super.Value) error { - return w.dynamic.Write(val) + if err := w.dynamic.Write(val); err != nil { + return err + } + if w.dynamic.len >= maxObjectSize { + return w.finalizeObject() + } + return nil } -func (w *Writer) finalize() error { +func (w *Writer) finalizeObject() error { meta, dataSize, err := w.dynamic.Encode() if err != nil { return fmt.Errorf("system error: could not encode VNG metadata: %w", err) @@ -74,5 +82,8 @@ func (w *Writer) finalize() error { if err := w.dynamic.Emit(w.writer); err != nil { return fmt.Errorf("system error: could not write VNG data section: %w", err) } + // Set new dynamic so we can write the next section. + w.dynamic = NewDynamicEncoder() + w.zctx.Reset() return nil } diff --git a/zfmt/ast.go b/zfmt/ast.go index bed28ed979..3f2587324c 100644 --- a/zfmt/ast.go +++ b/zfmt/ast.go @@ -137,6 +137,13 @@ func (c *canon) expr(e ast.Expr, parent string) { c.write("[") c.expr(e.Index, "") c.write("]") + case *ast.IsNullExpr: + c.expr(e.Expr, "") + c.write("IS ") + if e.Not { + c.write("NOT ") + } + c.write("NULL") case *ast.SliceExpr: c.expr(e.Expr, "") c.write("[") diff --git a/zfmt/dag.go b/zfmt/dag.go index 0047142d69..6d3b81864f 100644 --- a/zfmt/dag.go +++ b/zfmt/dag.go @@ -85,8 +85,13 @@ func (c *canonDAG) expr(e dag.Expr, parent string) { case *ast.Primitive: c.literal(*e) case *dag.UnaryExpr: - c.write(e.Op) - c.expr(e.Operand, "not") + if isnull, ok := e.Operand.(*dag.IsNullExpr); ok && e.Op == "!" { + c.expr(isnull.Expr, "") + c.write(" IS NOT NULL") + } else { + c.write(e.Op) + c.expr(e.Operand, "not") + } case *dag.BinaryExpr: c.binary(e, parent) case *dag.Conditional: @@ -105,6 +110,9 @@ func (c *canonDAG) expr(e dag.Expr, parent string) { c.write("[") c.expr(e.Index, "") c.write("]") + case *dag.IsNullExpr: + c.expr(e.Expr, "") + c.write("IS NULL") case *dag.SliceExpr: c.expr(e.Expr, "") c.write("[") diff --git a/zio/vngio/reader.go b/zio/vngio/reader.go index 3136aee0a3..1fec62ce72 100644 --- a/zio/vngio/reader.go +++ b/zio/vngio/reader.go @@ -3,6 +3,7 @@ package vngio import ( "errors" "io" + "math" "github.com/brimdata/super" "github.com/brimdata/super/pkg/field" @@ -10,14 +11,72 @@ import ( "github.com/brimdata/super/zio" ) +type reader struct { + zctx *super.Context + objects []*vng.Object + n int + readerAt io.ReaderAt + reader zio.Reader +} + func NewReader(zctx *super.Context, r io.Reader, fields []field.Path) (zio.Reader, error) { ra, ok := r.(io.ReaderAt) if !ok { return nil, errors.New("Super Columnar requires a seekable input") } - o, err := vng.NewObject(ra) + objects, err := readObjects(ra) if err != nil { return nil, err } - return o.NewReader(zctx) + return &reader{ + zctx: zctx, + objects: objects, + readerAt: ra, + }, nil +} + +func (r *reader) Read() (*super.Value, error) { +again: + if r.reader == nil { + if r.n >= len(r.objects) { + return nil, nil + } + o := r.objects[r.n] + r.n++ + var err error + if r.reader, err = o.NewReader(r.zctx); err != nil { + return nil, err + } + } + v, err := r.reader.Read() + if v == nil && err == nil { + r.reader = nil + goto again + } + return v, err +} + +func (r *reader) Close() error { + if closer, ok := r.readerAt.(io.Closer); ok { + return closer.Close() + } + return nil +} + +func readObjects(r io.ReaderAt) ([]*vng.Object, error) { + var objects []*vng.Object + var start int64 + for { + // NewObject puts the right end to the passed in SectionReader and since + // the end is unkown just pass MaxInt64. + o, err := vng.NewObject(io.NewSectionReader(r, start, math.MaxInt64)) + if err != nil { + if err == io.EOF && len(objects) > 0 { + return objects, nil + } + return nil, err + } + objects = append(objects, o) + start += int64(o.Size()) + } } diff --git a/zio/vngio/vectorreader.go b/zio/vngio/vectorreader.go new file mode 100644 index 0000000000..8210f383fa --- /dev/null +++ b/zio/vngio/vectorreader.go @@ -0,0 +1,75 @@ +package vngio + +import ( + "context" + "errors" + "io" + "sync/atomic" + + "github.com/brimdata/super" + "github.com/brimdata/super/pkg/field" + "github.com/brimdata/super/runtime/vcache" + "github.com/brimdata/super/vector" + "github.com/brimdata/super/vng" +) + +type VectorReader struct { + ctx context.Context + zctx *super.Context + + activeReaders *atomic.Int64 + nextObject *atomic.Int64 + objects []*vng.Object + projection vcache.Path + readerAt io.ReaderAt +} + +func NewVectorReader(ctx context.Context, zctx *super.Context, r io.Reader, fields []field.Path) (*VectorReader, error) { + ra, ok := r.(io.ReaderAt) + if !ok { + return nil, errors.New("Super Columnar requires a seekable input") + } + objects, err := readObjects(ra) + if err != nil { + return nil, err + } + return &VectorReader{ + ctx: ctx, + zctx: zctx, + activeReaders: &atomic.Int64{}, + nextObject: &atomic.Int64{}, + objects: objects, + projection: vcache.NewProjection(fields), + readerAt: ra, + }, nil +} + +func (v *VectorReader) NewConcurrentPuller() vector.Puller { + v.activeReaders.Add(1) + return v +} + +func (v *VectorReader) Pull(done bool) (vector.Any, error) { + if done { + return nil, v.close() + } + if err := v.ctx.Err(); err != nil { + v.close() + return nil, err + } + n := int(v.nextObject.Add(1) - 1) + if n >= len(v.objects) { + return nil, v.close() + } + o := v.objects[n] + return vcache.NewObjectFromVNG(o).Fetch(v.zctx, v.projection) +} + +func (v *VectorReader) close() error { + if v.activeReaders.Add(-1) <= 0 { + if closer, ok := v.readerAt.(io.Closer); ok { + return closer.Close() // coffee is for closers + } + } + return nil +}