From 6af55df689bf1f08711a6ea0b5e4540406f99d30 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 19:19:47 +0000 Subject: [PATCH 01/23] Implement the lexer, AST and parser for the SQLite dialect Fills in milestones 1 and 3-6 of PLAN.md: the corpus harness goes from 0/4685 to 4681/4685 cases passing. - token: the full keyword table and %fallback set transcribed from tool/mkkeywordhash.c and parse.y, resolved for the pinned build's feature set (no SQLITE_ENABLE_ORDERED_SET_AGGREGATES, so WITHIN is not a keyword), plus the id/ids/idj/nm token classes. - lexer: a port of sqlite3GetToken() including the four quoting styles, blob literals, the four bind-parameter spellings, digit separators and the "1abc is one bad token" rule, together with the WINDOW/OVER/FILTER keyword resolution sqlite3RunParser does around it. Illegal tokens stay in the stream so the parser reports them in SQLite's order. - ast: nodes for every statement and expression form, each carrying the parse.y rule it comes from, all embedding Span. - parser: recursive descent over the whole grammar. Expression precedence is a climbing loop over the eleven levels of the %left/%right block; the LALR ambiguity resolutions (ON binding to a join, LIMIT x,y operand swap, the keyword-versus-identifier decisions that %fallback makes implicitly) are spelled out with comments. The pinned build defines neither SQLITE_ENABLE_UPDATE_DELETE_LIMIT nor SQLITE_UDL_CAPABLE_PARSER, so UPDATE and DELETE take no ORDER BY or LIMIT; the oracle confirms both are plain syntax errors. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- .gitignore | 1 + ast/ast.go | 43 +- ast/ddl.go | 408 ++++++ ast/dml.go | 162 +++ ast/expr.go | 448 +++++++ ast/misc.go | 159 +++ ast/select.go | 353 ++++++ lexer/lexer.go | 460 +++++++ parser/parse_ddl.go | 702 +++++++++++ parser/parse_dml.go | 222 ++++ parser/parse_expr.go | 724 +++++++++++ parser/parse_misc.go | 203 +++ parser/parse_select.go | 629 ++++++++++ parser/parse_trigger.go | 142 +++ parser/parser.go | 364 +++++- parser/testdata/alter.metadata.json | 70 +- parser/testdata/alter2.metadata.json | 29 +- parser/testdata/alter3.metadata.json | 47 +- parser/testdata/alter4.metadata.json | 50 +- parser/testdata/alterdropcol.metadata.json | 57 +- parser/testdata/alterdropcol2.metadata.json | 14 +- parser/testdata/altertab.metadata.json | 140 +-- parser/testdata/altertab2.metadata.json | 40 +- parser/testdata/altertab3.metadata.json | 105 +- parser/testdata/between.metadata.json | 9 +- parser/testdata/e_createtable.metadata.json | 77 +- parser/testdata/e_delete.metadata.json | 13 +- parser/testdata/e_expr.metadata.json | 245 +--- parser/testdata/e_insert.metadata.json | 8 +- parser/testdata/e_select.metadata.json | 51 +- parser/testdata/e_update.metadata.json | 22 +- parser/testdata/expr.metadata.json | 47 +- parser/testdata/expr2.metadata.json | 12 +- parser/testdata/in.metadata.json | 113 +- parser/testdata/in2.metadata.json | 6 +- parser/testdata/in3.metadata.json | 11 +- parser/testdata/in4.metadata.json | 83 +- parser/testdata/in5.metadata.json | 42 +- parser/testdata/parser1.metadata.json | 14 +- parser/testdata/returning1.metadata.json | 90 +- parser/testdata/select1.metadata.json | 92 +- parser/testdata/select2.metadata.json | 18 +- parser/testdata/select3.metadata.json | 58 +- parser/testdata/select4.metadata.json | 95 +- parser/testdata/select5.metadata.json | 35 +- parser/testdata/select6.metadata.json | 81 +- parser/testdata/select7.metadata.json | 29 +- parser/testdata/select8.metadata.json | 8 +- parser/testdata/select9.metadata.json | 13 +- parser/testdata/selectA.metadata.json | 219 +--- parser/testdata/selectB.metadata.json | 34 +- parser/testdata/selectC.metadata.json | 34 +- parser/testdata/selectD.metadata.json | 7 +- parser/testdata/selectE.metadata.json | 6 +- parser/testdata/selectF.metadata.json | 7 +- parser/testdata/selectH.metadata.json | 17 +- parser/testdata/tokenize.metadata.json | 19 +- parser/testdata/trigger1.metadata.json | 72 +- parser/testdata/upsert1.metadata.json | 40 +- parser/testdata/upsert2.metadata.json | 19 +- parser/testdata/upsert3.metadata.json | 12 +- parser/testdata/upsert4.metadata.json | 36 +- parser/testdata/upsert5.metadata.json | 59 +- parser/testdata/window1.metadata.json | 293 +---- parser/testdata/window2.metadata.json | 70 +- parser/testdata/window3.metadata.json | 1227 +------------------ parser/testdata/window4.metadata.json | 225 +--- parser/testdata/window5.metadata.json | 11 +- parser/testdata/window6.metadata.json | 40 +- parser/testdata/window7.metadata.json | 15 +- parser/testdata/window8.metadata.json | 366 +----- parser/testdata/window9.metadata.json | 45 +- parser/testdata/windowA.metadata.json | 23 +- parser/testdata/windowB.metadata.json | 54 +- parser/testdata/windowC.metadata.json | 8 +- parser/testdata/windowD.metadata.json | 18 +- parser/testdata/windowE.metadata.json | 20 +- parser/testdata/windowerr.metadata.json | 6 +- parser/testdata/with1.metadata.json | 102 +- parser/testdata/with2.metadata.json | 59 +- parser/testdata/with3.metadata.json | 17 +- parser/testdata/withM.metadata.json | 6 +- token/keywords.go | 241 ++++ token/token.go | 225 ++++ 84 files changed, 5543 insertions(+), 4953 deletions(-) create mode 100644 ast/ddl.go create mode 100644 ast/dml.go create mode 100644 ast/expr.go create mode 100644 ast/misc.go create mode 100644 ast/select.go create mode 100644 lexer/lexer.go create mode 100644 parser/parse_ddl.go create mode 100644 parser/parse_dml.go create mode 100644 parser/parse_expr.go create mode 100644 parser/parse_misc.go create mode 100644 parser/parse_select.go create mode 100644 parser/parse_trigger.go create mode 100644 token/keywords.go create mode 100644 token/token.go diff --git a/.gitignore b/.gitignore index 2baa719..f7c1925 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # Local cache used by cmd/regenerate-parse: downloaded SQLite release # artifacts and the compiled oracle binary. .sqlite/ +/oq diff --git a/ast/ast.go b/ast/ast.go index 599c43a..8f26839 100644 --- a/ast/ast.go +++ b/ast/ast.go @@ -1,10 +1,17 @@ // Package ast declares the syntax tree for the SQLite SQL dialect. // -// This is the milestone-1 skeleton: the interfaces exist so the parser API -// and test harness are stable, and node types are added as the parser is -// implemented (see PLAN.md for the full intended node set). +// Node names follow SQLite rather than PostgreSQL or sqlc: the tree is a +// direct rendering of src/parse.y, and every node carries a comment naming +// the grammar rule it comes from. Mapping onto another representation is a +// consumer's job. +// +// Every node embeds Span and so reports byte offsets into the original +// input; sqlc slices the source with those offsets, so they are load-bearing +// rather than diagnostic (see PLAN.md). package ast +import "reflect" + // Node is implemented by every syntax tree node. Positions are byte offsets // into the original input. type Node interface { @@ -33,3 +40,33 @@ type Span struct { func (s Span) Pos() int { return s.Start } func (s Span) End() int { return s.Stop } + +// SetSpan replaces the node's extent. The parser uses it to widen a +// statement's span once its terminating semicolon has been consumed. +func (s *Span) SetSpan(sp Span) { *s = sp } + +// Walk calls fn for n and, unless fn returns false, for its descendants in +// source order. +func Walk(n Node, fn func(Node) bool) { + if isNil(n) || !fn(n) { + return + } + for _, c := range n.Children() { + Walk(c, fn) + } +} + +// isNil reports whether n is either a nil interface or a typed nil pointer. +// Children() slices are assembled from optional fields, so typed nils are +// common and must not leak into a traversal. +func isNil(n Node) bool { + if n == nil { + return true + } + v := reflect.ValueOf(n) + switch v.Kind() { + case reflect.Pointer, reflect.Interface, reflect.Slice, reflect.Map: + return v.IsNil() + } + return false +} diff --git a/ast/ddl.go b/ast/ddl.go new file mode 100644 index 0000000..e33b429 --- /dev/null +++ b/ast/ddl.go @@ -0,0 +1,408 @@ +package ast + +// CreateTableStmt is CREATE TABLE, in both the column-list and the AS SELECT +// forms. +// +// cmd ::= create_table create_table_args. +// create_table ::= createkw temp TABLE ifnotexists nm dbnm. +// create_table_args ::= LP columnlist conslist_opt RP table_option_set. +// create_table_args ::= AS select. +type CreateTableStmt struct { + Span + Temp bool `json:"temp,omitempty"` + IfNotExists bool `json:"ifNotExists,omitempty"` + Name *QualifiedName `json:"name"` + Columns []*ColumnDef `json:"columns,omitempty"` + Constraints []*TableConstraint `json:"constraints,omitempty"` + Options []*Ident `json:"options,omitempty"` // WITHOUT ROWID, STRICT + WithoutOpt []bool `json:"withoutOpt,omitempty"` + Select *SelectStmt `json:"select,omitempty"` +} + +func (*CreateTableStmt) stmtNode() {} +func (n *CreateTableStmt) Children() []Node { + out := nodes(n.Name) + for _, c := range n.Columns { + out = append(out, c) + } + for _, c := range n.Constraints { + out = append(out, c) + } + for _, o := range n.Options { + out = append(out, o) + } + return append(out, nodes(n.Select)...) +} + +// ColumnDef is one column of a CREATE TABLE (or of ALTER TABLE ADD COLUMN). +// +// columnname ::= nm typetoken. / carglist ::= carglist ccons. +type ColumnDef struct { + Span + Name *ColumnName `json:"name"` + Type *TypeName `json:"type,omitempty"` + Constraints []*ColumnConstraint `json:"constraints,omitempty"` +} + +func (n *ColumnDef) Children() []Node { + out := nodes(n.Name, n.Type) + for _, c := range n.Constraints { + out = append(out, c) + } + return out +} + +// ColumnName wraps the identifier naming a column, so that a ColumnDef's +// name keeps its own span distinct from the whole definition's. +type ColumnName = Ident + +// ColumnConstraintKind enumerates the "ccons" alternatives. +type ColumnConstraintKind int + +const ( + ColumnNull ColumnConstraintKind = iota + ColumnNotNull + ColumnPrimaryKey + ColumnUnique + ColumnCheck + ColumnDefault + ColumnCollate + ColumnReferences + ColumnGenerated + ColumnDeferrable // a bare [NOT] DEFERRABLE clause +) + +// ColumnConstraint is one column constraint. Name is the preceding +// CONSTRAINT clause, if any; SQLite attaches it to the constraint that +// follows. +// +// ccons ::= CONSTRAINT nm. / NULL onconf. / NOT NULL onconf. +// ccons ::= PRIMARY KEY sortorder onconf autoinc. / UNIQUE onconf. +// ccons ::= CHECK LP expr RP. / DEFAULT .... / COLLATE ids. +// ccons ::= REFERENCES nm eidlist_opt refargs. / defer_subclause. +// ccons ::= [GENERATED ALWAYS] AS generated. +type ColumnConstraint struct { + Span + Name *Ident `json:"name,omitempty"` + Kind ColumnConstraintKind `json:"kind"` + OnConflict ConflictAction `json:"onConflict,omitempty"` + Order SortOrder `json:"order,omitempty"` // PRIMARY KEY ASC/DESC + AutoIncrement bool `json:"autoIncrement,omitempty"` + Expr Expr `json:"expr,omitempty"` // CHECK, DEFAULT, GENERATED + Collation *Ident `json:"collation,omitempty"` + References *ForeignKeyClause `json:"references,omitempty"` + GeneratedKind *Ident `json:"generatedKind,omitempty"` // STORED / VIRTUAL + AlwaysWord bool `json:"alwaysWord,omitempty"` // GENERATED ALWAYS spelling + Deferrable *DeferClause `json:"deferrable,omitempty"` +} + +func (n *ColumnConstraint) Children() []Node { + return nodes(n.Name, n.Expr, n.Collation, n.References, n.GeneratedKind, n.Deferrable) +} + +// TableConstraintKind enumerates the "tcons" alternatives. +type TableConstraintKind int + +const ( + TablePrimaryKey TableConstraintKind = iota + TableUnique + TableCheck + TableForeignKey +) + +// TableConstraint is one table-level constraint. +// +// tcons ::= CONSTRAINT nm. +// tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf. / UNIQUE LP sortlist RP onconf. +// tcons ::= CHECK LP expr RP onconf. +// tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs +// defer_subclause_opt. +type TableConstraint struct { + Span + Name *Ident `json:"name,omitempty"` + Kind TableConstraintKind `json:"kind"` + Columns []*OrderingTerm `json:"columns,omitempty"` // PRIMARY KEY / UNIQUE + AutoIncrement bool `json:"autoIncrement,omitempty"` + OnConflict ConflictAction `json:"onConflict,omitempty"` + Expr Expr `json:"expr,omitempty"` // CHECK + FKColumns []*IndexedColumn `json:"fkColumns,omitempty"` + References *ForeignKeyClause `json:"references,omitempty"` + Deferrable *DeferClause `json:"deferrable,omitempty"` +} + +func (n *TableConstraint) Children() []Node { + out := nodes(n.Name) + for _, c := range n.Columns { + out = append(out, c) + } + out = append(out, nodes(n.Expr)...) + for _, c := range n.FKColumns { + out = append(out, c) + } + return append(out, nodes(n.References, n.Deferrable)...) +} + +// IndexedColumn is one entry of an "eidlist": a column name with the COLLATE +// and ASC/DESC decorations SQLite still parses for historical schemas. +// +// eidlist ::= eidlist COMMA nm collate sortorder. +type IndexedColumn struct { + Span + Name *Ident `json:"name"` + Collate bool `json:"collate,omitempty"` + Order SortOrder `json:"order,omitempty"` +} + +func (n *IndexedColumn) Children() []Node { return nodes(n.Name) } + +// ForeignKeyAction is the action of an ON DELETE / ON UPDATE clause. +type ForeignKeyAction int + +const ( + FKNoAction ForeignKeyAction = iota + FKSetNull + FKSetDefault + FKCascade + FKRestrict +) + +// ForeignKeyClause is a REFERENCES clause and its arguments. +// +// ccons ::= REFERENCES nm eidlist_opt refargs. +// refarg ::= MATCH nm. / ON INSERT refact. / ON DELETE refact. / ON UPDATE refact. +type ForeignKeyClause struct { + Span + Table *Ident `json:"table"` + Columns []*IndexedColumn `json:"columns,omitempty"` + Args []*ForeignKeyArg `json:"args,omitempty"` +} + +func (n *ForeignKeyClause) Children() []Node { + out := nodes(n.Table) + for _, c := range n.Columns { + out = append(out, c) + } + for _, a := range n.Args { + out = append(out, a) + } + return out +} + +// ForeignKeyArg is one refarg: a MATCH clause or an ON action. +type ForeignKeyArg struct { + Span + Match *Ident `json:"match,omitempty"` + Event string `json:"event,omitempty"` // INSERT, DELETE, UPDATE + Action ForeignKeyAction `json:"action,omitempty"` +} + +func (n *ForeignKeyArg) Children() []Node { return nodes(n.Match) } + +// DeferClause is "[NOT] DEFERRABLE [INITIALLY DEFERRED|IMMEDIATE]". +// +// defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt. +// defer_subclause ::= DEFERRABLE init_deferred_pred_opt. +type DeferClause struct { + Span + Not bool `json:"not,omitempty"` + InitiallyDeferred bool `json:"initiallyDeferred,omitempty"` + HasInitially bool `json:"hasInitially,omitempty"` +} + +func (n *DeferClause) Children() []Node { return nil } + +// CreateIndexStmt is CREATE [UNIQUE] INDEX. +// +// cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP +// where_opt. +type CreateIndexStmt struct { + Span + Unique bool `json:"unique,omitempty"` + IfNotExists bool `json:"ifNotExists,omitempty"` + Name *QualifiedName `json:"name"` + Table *Ident `json:"table"` + Columns []*OrderingTerm `json:"columns"` + Where Expr `json:"where,omitempty"` +} + +func (*CreateIndexStmt) stmtNode() {} +func (n *CreateIndexStmt) Children() []Node { + out := nodes(n.Name, n.Table) + for _, c := range n.Columns { + out = append(out, c) + } + return append(out, nodes(n.Where)...) +} + +// CreateViewStmt is CREATE [TEMP] VIEW. +// +// cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select. +type CreateViewStmt struct { + Span + Temp bool `json:"temp,omitempty"` + IfNotExists bool `json:"ifNotExists,omitempty"` + Name *QualifiedName `json:"name"` + Columns []*IndexedColumn `json:"columns,omitempty"` + Select *SelectStmt `json:"select"` +} + +func (*CreateViewStmt) stmtNode() {} +func (n *CreateViewStmt) Children() []Node { + out := nodes(n.Name) + for _, c := range n.Columns { + out = append(out, c) + } + return append(out, nodes(n.Select)...) +} + +// TriggerTime is BEFORE, AFTER or INSTEAD OF. +type TriggerTime int + +const ( + TriggerBefore TriggerTime = iota + TriggerAfter + TriggerInsteadOf +) + +// CreateTriggerStmt is CREATE [TEMP] TRIGGER. +// +// cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END. +// trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time +// trigger_event ON fullname foreach_clause when_clause. +type CreateTriggerStmt struct { + Span + Temp bool `json:"temp,omitempty"` + IfNotExists bool `json:"ifNotExists,omitempty"` + Name *QualifiedName `json:"name"` + Time TriggerTime `json:"time,omitempty"` + HasTime bool `json:"hasTime,omitempty"` + Event string `json:"event"` // DELETE, INSERT, UPDATE + UpdateOf []*Ident `json:"updateOf,omitempty"` + Table *QualifiedName `json:"table"` + ForEachRow bool `json:"forEachRow,omitempty"` + When Expr `json:"when,omitempty"` + Body []Stmt `json:"body"` +} + +func (*CreateTriggerStmt) stmtNode() {} +func (n *CreateTriggerStmt) Children() []Node { + out := nodes(n.Name) + for _, u := range n.UpdateOf { + out = append(out, u) + } + out = append(out, nodes(n.Table, n.When)...) + for _, s := range n.Body { + out = append(out, s) + } + return out +} + +// CreateVirtualTableStmt is CREATE VIRTUAL TABLE ... USING module(args). +// Module arguments are kept as their raw source text, exactly as SQLite does +// (the "anylist" production accepts any balanced token sequence). +// +// create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm. +// cmd ::= create_vtab LP vtabarglist RP. +type CreateVirtualTableStmt struct { + Span + IfNotExists bool `json:"ifNotExists,omitempty"` + Name *QualifiedName `json:"name"` + Module *Ident `json:"module"` + HasArgs bool `json:"hasArgs,omitempty"` + Args []string `json:"args,omitempty"` +} + +func (*CreateVirtualTableStmt) stmtNode() {} +func (n *CreateVirtualTableStmt) Children() []Node { + return nodes(n.Name, n.Module) +} + +// AlterAction enumerates the ALTER TABLE forms of the pinned build. +type AlterAction int + +const ( + AlterRenameTable AlterAction = iota + AlterRenameColumn + AlterAddColumn + AlterDropColumn + AlterDropConstraint + AlterDropNotNull + AlterSetNotNull + AlterAddConstraintCheck +) + +// AlterTableStmt is ALTER TABLE in all the forms the pinned build accepts. +// +// cmd ::= ALTER TABLE fullname RENAME TO nm. +// cmd ::= alter_add carglist. (ALTER TABLE ... ADD [COLUMN] nm typetoken) +// cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm. +// cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm. +// cmd ::= ALTER TABLE fullname DROP CONSTRAINT nm. +// cmd ::= ALTER TABLE fullname ALTER kwcolumn_opt nm DROP NOT NULL. +// cmd ::= ALTER TABLE fullname ALTER kwcolumn_opt nm SET NOT NULL onconf. +// cmd ::= ALTER TABLE fullname ADD [CONSTRAINT nm] CHECK LP expr RP onconf. +type AlterTableStmt struct { + Span + Table *QualifiedName `json:"table"` + Action AlterAction `json:"action"` + ColumnKeyword bool `json:"columnKeyword,omitempty"` + Column *Ident `json:"column,omitempty"` + NewName *Ident `json:"newName,omitempty"` + ConstraintName *Ident `json:"constraintName,omitempty"` + ColumnDef *ColumnDef `json:"columnDef,omitempty"` + Expr Expr `json:"expr,omitempty"` + OnConflict ConflictAction `json:"onConflict,omitempty"` +} + +func (*AlterTableStmt) stmtNode() {} +func (n *AlterTableStmt) Children() []Node { + return nodes(n.Table, n.Column, n.NewName, n.ConstraintName, n.ColumnDef, n.Expr) +} + +// DropTableStmt is DROP TABLE. +// +// cmd ::= DROP TABLE ifexists fullname. +type DropTableStmt struct { + Span + IfExists bool `json:"ifExists,omitempty"` + Name *QualifiedName `json:"name"` +} + +func (*DropTableStmt) stmtNode() {} +func (n *DropTableStmt) Children() []Node { return nodes(n.Name) } + +// DropViewStmt is DROP VIEW. +// +// cmd ::= DROP VIEW ifexists fullname. +type DropViewStmt struct { + Span + IfExists bool `json:"ifExists,omitempty"` + Name *QualifiedName `json:"name"` +} + +func (*DropViewStmt) stmtNode() {} +func (n *DropViewStmt) Children() []Node { return nodes(n.Name) } + +// DropIndexStmt is DROP INDEX. +// +// cmd ::= DROP INDEX ifexists fullname. +type DropIndexStmt struct { + Span + IfExists bool `json:"ifExists,omitempty"` + Name *QualifiedName `json:"name"` +} + +func (*DropIndexStmt) stmtNode() {} +func (n *DropIndexStmt) Children() []Node { return nodes(n.Name) } + +// DropTriggerStmt is DROP TRIGGER. +// +// cmd ::= DROP TRIGGER ifexists fullname. +type DropTriggerStmt struct { + Span + IfExists bool `json:"ifExists,omitempty"` + Name *QualifiedName `json:"name"` +} + +func (*DropTriggerStmt) stmtNode() {} +func (n *DropTriggerStmt) Children() []Node { return nodes(n.Name) } diff --git a/ast/dml.go b/ast/dml.go new file mode 100644 index 0000000..9a481ad --- /dev/null +++ b/ast/dml.go @@ -0,0 +1,162 @@ +package ast + +// ConflictAction is the conflict-resolution algorithm of an ON CONFLICT or +// OR clause. +type ConflictAction int + +const ( + ConflictDefault ConflictAction = iota + ConflictRollback + ConflictAbort + ConflictFail + ConflictIgnore + ConflictReplace +) + +var conflictText = map[ConflictAction]string{ + ConflictRollback: "ROLLBACK", ConflictAbort: "ABORT", ConflictFail: "FAIL", + ConflictIgnore: "IGNORE", ConflictReplace: "REPLACE", +} + +func (a ConflictAction) String() string { return conflictText[a] } + +// InsertStmt is INSERT, INSERT OR , or REPLACE. +// +// cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert. +// cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning. +type InsertStmt struct { + Span + With *With `json:"with,omitempty"` + Replace bool `json:"replace,omitempty"` // spelled REPLACE + OrConflict ConflictAction `json:"orConflict,omitempty"` + Table *QualifiedName `json:"table"` + Alias *Ident `json:"alias,omitempty"` + Columns []*Ident `json:"columns,omitempty"` + Select *SelectStmt `json:"select,omitempty"` + DefaultValues bool `json:"defaultValues,omitempty"` + Upserts []*Upsert `json:"upserts,omitempty"` + Returning []*ResultColumn `json:"returning,omitempty"` +} + +func (*InsertStmt) stmtNode() {} +func (n *InsertStmt) Children() []Node { + out := nodes(n.With, n.Table, n.Alias) + for _, c := range n.Columns { + out = append(out, c) + } + out = append(out, nodes(n.Select)...) + for _, u := range n.Upserts { + out = append(out, u) + } + for _, r := range n.Returning { + out = append(out, r) + } + return out +} + +// Upsert is one ON CONFLICT clause of an INSERT. +// +// upsert ::= ON CONFLICT [LP sortlist RP where_opt] DO UPDATE SET setlist where_opt. +// upsert ::= ON CONFLICT [LP sortlist RP where_opt] DO NOTHING. +type Upsert struct { + Span + Target []*OrderingTerm `json:"target,omitempty"` + TargetWhere Expr `json:"targetWhere,omitempty"` + DoNothing bool `json:"doNothing,omitempty"` + Set []*SetPair `json:"set,omitempty"` + Where Expr `json:"where,omitempty"` +} + +func (n *Upsert) Children() []Node { + var out []Node + for _, t := range n.Target { + out = append(out, t) + } + out = append(out, nodes(n.TargetWhere)...) + for _, s := range n.Set { + out = append(out, s) + } + return append(out, nodes(n.Where)...) +} + +// SetPair is one assignment of an UPDATE ... SET or upsert DO UPDATE SET +// list. Columns holds more than one name for the "(a,b) = expr" form. +// +// setlist ::= nm EQ expr. / setlist ::= LP idlist RP EQ expr. +type SetPair struct { + Span + Columns []*Ident `json:"columns"` + Paren bool `json:"paren,omitempty"` + Value Expr `json:"value"` +} + +func (n *SetPair) Children() []Node { + out := make([]Node, 0, len(n.Columns)+1) + for _, c := range n.Columns { + out = append(out, c) + } + return append(out, nodes(n.Value)...) +} + +// UpdateStmt is an UPDATE statement. +// +// cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from +// where_opt_ret. +// +// The pinned build defines neither SQLITE_ENABLE_UPDATE_DELETE_LIMIT nor +// SQLITE_UDL_CAPABLE_PARSER, so UPDATE has no ORDER BY or LIMIT at all: they +// are a plain syntax error rather than a grammar-action message. +type UpdateStmt struct { + Span + With *With `json:"with,omitempty"` + OrConflict ConflictAction `json:"orConflict,omitempty"` + Table *QualifiedName `json:"table"` + Alias *Ident `json:"alias,omitempty"` + IndexedBy *Ident `json:"indexedBy,omitempty"` + NotIndexed bool `json:"notIndexed,omitempty"` + Set []*SetPair `json:"set"` + From []*TableRef `json:"from,omitempty"` + Where Expr `json:"where,omitempty"` + Returning []*ResultColumn `json:"returning,omitempty"` +} + +func (*UpdateStmt) stmtNode() {} +func (n *UpdateStmt) Children() []Node { + out := nodes(n.With, n.Table, n.Alias, n.IndexedBy) + for _, s := range n.Set { + out = append(out, s) + } + for _, f := range n.From { + out = append(out, f) + } + out = append(out, nodes(n.Where)...) + for _, r := range n.Returning { + out = append(out, r) + } + return out +} + +// DeleteStmt is a DELETE statement. +// +// cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret. +// +// As for UPDATE, the pinned build's DELETE takes no ORDER BY or LIMIT. +type DeleteStmt struct { + Span + With *With `json:"with,omitempty"` + Table *QualifiedName `json:"table"` + Alias *Ident `json:"alias,omitempty"` + IndexedBy *Ident `json:"indexedBy,omitempty"` + NotIndexed bool `json:"notIndexed,omitempty"` + Where Expr `json:"where,omitempty"` + Returning []*ResultColumn `json:"returning,omitempty"` +} + +func (*DeleteStmt) stmtNode() {} +func (n *DeleteStmt) Children() []Node { + out := nodes(n.With, n.Table, n.Alias, n.IndexedBy, n.Where) + for _, r := range n.Returning { + out = append(out, r) + } + return out +} diff --git a/ast/expr.go b/ast/expr.go new file mode 100644 index 0000000..5f67e73 --- /dev/null +++ b/ast/expr.go @@ -0,0 +1,448 @@ +package ast + +// This file declares the expression nodes. Each carries a comment naming the +// parse.y rule(s) it comes from. + +// QuoteStyle records how an identifier was spelled in the source. SQLite +// accepts four quoting styles for identifiers plus the unquoted form, and +// consumers (sqlc among them) need to tell them apart. +type QuoteStyle byte + +const ( + QuoteNone QuoteStyle = 0 + QuoteDouble QuoteStyle = '"' + QuoteBack QuoteStyle = '`' + QuoteSquare QuoteStyle = '[' + QuoteSingle QuoteStyle = '\'' // a string literal used in a name position +) + +// Ident is a name: a table, column, function, alias, collation, ... +// +// nm ::= idj. / nm ::= STRING. +type Ident struct { + Span + Name string `json:"name"` // dequoted + Raw string `json:"raw"` // exactly as it appeared + Quote QuoteStyle `json:"quote"` // QuoteNone when unquoted +} + +func (*Ident) exprNode() {} +func (n *Ident) Children() []Node { return nil } + +// QualifiedName is a "nm dbnm" pair: an optionally schema-qualified object +// name. Schema is nil when the name was unqualified. +// +// fullname ::= nm. / fullname ::= nm DOT nm. +type QualifiedName struct { + Span + Schema *Ident `json:"schema,omitempty"` + Name *Ident `json:"name"` +} + +func (n *QualifiedName) Children() []Node { return nodes(n.Schema, n.Name) } + +// QualifiedRef is a dotted column reference with two or three parts. +// +// expr ::= nm DOT nm. / expr ::= nm DOT nm DOT nm. +type QualifiedRef struct { + Span + Parts []*Ident `json:"parts"` +} + +func (*QualifiedRef) exprNode() {} +func (n *QualifiedRef) Children() []Node { + out := make([]Node, len(n.Parts)) + for i, p := range n.Parts { + out[i] = p + } + return out +} + +// Star is "*" or "tbl.*" in a result column list. +// +// selcollist ::= sclp scanpt STAR. / selcollist ::= sclp scanpt nm DOT STAR. +type Star struct { + Span + Table *Ident `json:"table,omitempty"` +} + +func (*Star) exprNode() {} +func (n *Star) Children() []Node { return nodes(n.Table) } + +// LiteralKind distinguishes the literal forms of the "term" production. +type LiteralKind int + +const ( + LitNull LiteralKind = iota + LitInteger + LitFloat + LitString + LitBlob + LitCurrentDate + LitCurrentTime + LitCurrentTimestamp +) + +// Literal is a constant. +// +// term ::= NULL|FLOAT|BLOB. / term ::= STRING. / term ::= INTEGER. +// term ::= QNUMBER. / term ::= CTIME_KW. +type Literal struct { + Span + Kind LiteralKind `json:"kind"` + Value string `json:"value"` // dequoted for strings, raw otherwise + Raw string `json:"raw"` +} + +func (*Literal) exprNode() {} +func (n *Literal) Children() []Node { return nil } + +// ParamKind distinguishes SQLite's four bind-parameter spellings. +type ParamKind int + +const ( + ParamAnon ParamKind = iota // ? + ParamNumber // ?NNN + ParamColon // :name + ParamAt // @name + ParamDollar // $name +) + +// BindParam is a parameter marker. Number is assigned the way +// sqlite3ExprAssignVarNumber does: explicit for ?NNN, otherwise one past the +// highest number used so far. +// +// expr ::= VARIABLE. +type BindParam struct { + Span + Kind ParamKind `json:"kind"` + Number int `json:"number"` + Name string `json:"name,omitempty"` // without the sigil + Raw string `json:"raw"` +} + +func (*BindParam) exprNode() {} +func (n *BindParam) Children() []Node { return nil } + +// Operator identifies a unary or binary operator. +type Operator int + +const ( + OpNone Operator = iota + // Binary + OpOr + OpAnd + OpEq + OpNe + OpLt + OpLe + OpGt + OpGe + OpBitAnd + OpBitOr + OpLShift + OpRShift + OpAdd + OpSub + OpMul + OpDiv + OpMod + OpConcat + OpPtr // -> + OpPtr2 // ->> + // Unary + OpNot + OpBitNot + OpPlus + OpMinus +) + +var opText = map[Operator]string{ + OpOr: "OR", OpAnd: "AND", OpEq: "=", OpNe: "<>", OpLt: "<", OpLe: "<=", + OpGt: ">", OpGe: ">=", OpBitAnd: "&", OpBitOr: "|", OpLShift: "<<", + OpRShift: ">>", OpAdd: "+", OpSub: "-", OpMul: "*", OpDiv: "/", + OpMod: "%", OpConcat: "||", OpPtr: "->", OpPtr2: "->>", OpNot: "NOT", + OpBitNot: "~", OpPlus: "+", OpMinus: "-", +} + +func (o Operator) String() string { return opText[o] } + +// BinaryExpr is an infix operator application. +// +// expr ::= expr AND expr. and the other %left/%right operator rules. +type BinaryExpr struct { + Span + Op Operator `json:"op"` + X Expr `json:"x"` + Y Expr `json:"y"` +} + +func (*BinaryExpr) exprNode() {} +func (n *BinaryExpr) Children() []Node { return nodes(n.X, n.Y) } + +// UnaryExpr is a prefix operator application. +// +// expr ::= NOT expr. / expr ::= BITNOT expr. / expr ::= PLUS|MINUS expr. +type UnaryExpr struct { + Span + Op Operator `json:"op"` + X Expr `json:"x"` +} + +func (*UnaryExpr) exprNode() {} +func (n *UnaryExpr) Children() []Node { return nodes(n.X) } + +// ParenExpr preserves an explicit parenthesisation. SQLite discards these +// (expr ::= LP expr RP just yields the inner expression), but keeping them +// makes the round-trip renderer exact. +type ParenExpr struct { + Span + X Expr `json:"x"` +} + +func (*ParenExpr) exprNode() {} +func (n *ParenExpr) Children() []Node { return nodes(n.X) } + +// LikeExpr is a LIKE/GLOB/REGEXP/MATCH application, optionally negated and +// optionally with an ESCAPE operand. +// +// expr ::= expr likeop expr. / expr ::= expr likeop expr ESCAPE expr. +type LikeExpr struct { + Span + Op *Ident `json:"op"` // the LIKE/GLOB/REGEXP/MATCH token, as written + Not bool `json:"not"` + X Expr `json:"x"` + Y Expr `json:"y"` + Escape Expr `json:"escape,omitempty"` +} + +func (*LikeExpr) exprNode() {} +func (n *LikeExpr) Children() []Node { return nodes(n.Op, n.X, n.Y, n.Escape) } + +// IsExpr is "IS", "IS NOT", "IS DISTINCT FROM" or "IS NOT DISTINCT FROM". +// +// expr ::= expr IS expr. and its three siblings. +type IsExpr struct { + Span + Not bool `json:"not"` + Distinct bool `json:"distinct"` // the DISTINCT FROM spelling was used + X Expr `json:"x"` + Y Expr `json:"y"` +} + +func (*IsExpr) exprNode() {} +func (n *IsExpr) Children() []Node { return nodes(n.X, n.Y) } + +// NullCheckExpr is a postfix null test. +// +// expr ::= expr ISNULL|NOTNULL. / expr ::= expr NOT NULL. +type NullCheckExpr struct { + Span + Not bool `json:"not"` // NOTNULL / NOT NULL + X Expr `json:"x"` +} + +func (*NullCheckExpr) exprNode() {} +func (n *NullCheckExpr) Children() []Node { return nodes(n.X) } + +// BetweenExpr is "x BETWEEN lo AND hi", optionally negated. +// +// expr ::= expr between_op expr AND expr. +type BetweenExpr struct { + Span + Not bool `json:"not"` + X Expr `json:"x"` + Lo Expr `json:"lo"` + Hi Expr `json:"hi"` +} + +func (*BetweenExpr) exprNode() {} +func (n *BetweenExpr) Children() []Node { return nodes(n.X, n.Lo, n.Hi) } + +// InExpr is "x IN ...". Exactly one of List, Select and Table is set; an +// empty parenthesised list leaves all three unset with Parens true. +// +// expr ::= expr in_op LP exprlist RP. +// expr ::= expr in_op LP select RP. +// expr ::= expr in_op nm dbnm paren_exprlist. +type InExpr struct { + Span + Not bool `json:"not"` + X Expr `json:"x"` + Parens bool `json:"parens"` + List []Expr `json:"list,omitempty"` + Select *SelectStmt `json:"select,omitempty"` + Table *QualifiedName `json:"table,omitempty"` + Args []Expr `json:"args,omitempty"` // table-valued function args + HasArgs bool `json:"hasArgs,omitempty"` +} + +func (*InExpr) exprNode() {} +func (n *InExpr) Children() []Node { + out := nodes(n.X, n.Select, n.Table) + for _, e := range n.List { + out = append(out, e) + } + for _, e := range n.Args { + out = append(out, e) + } + return out +} + +// CaseExpr is a CASE expression. Operand is nil for the searched form. +// +// expr ::= CASE case_operand case_exprlist case_else END. +type CaseExpr struct { + Span + Operand Expr `json:"operand,omitempty"` + Whens []*CaseWhen `json:"whens"` + Else Expr `json:"else,omitempty"` +} + +func (*CaseExpr) exprNode() {} +func (n *CaseExpr) Children() []Node { + out := nodes(n.Operand) + for _, w := range n.Whens { + out = append(out, w) + } + return append(out, nodes(n.Else)...) +} + +// CaseWhen is one WHEN/THEN pair. +// +// case_exprlist ::= case_exprlist WHEN expr THEN expr. +type CaseWhen struct { + Span + When Expr `json:"when"` + Then Expr `json:"then"` +} + +func (n *CaseWhen) Children() []Node { return nodes(n.When, n.Then) } + +// CastExpr is "CAST(expr AS type)". +// +// expr ::= CAST LP expr AS typetoken RP. +type CastExpr struct { + Span + X Expr `json:"x"` + Type *TypeName `json:"type"` +} + +func (*CastExpr) exprNode() {} +func (n *CastExpr) Children() []Node { return nodes(n.X, n.Type) } + +// CollateExpr is "expr COLLATE name". +// +// expr ::= expr COLLATE ids. +type CollateExpr struct { + Span + X Expr `json:"x"` + Name *Ident `json:"name"` +} + +func (*CollateExpr) exprNode() {} +func (n *CollateExpr) Children() []Node { return nodes(n.X, n.Name) } + +// FuncCall is a function invocation, including aggregate and window forms. +// +// expr ::= idj LP distinct exprlist RP [filter_over]. +// expr ::= idj LP distinct exprlist ORDER BY sortlist RP [filter_over]. +// expr ::= idj LP STAR RP [filter_over]. +type FuncCall struct { + Span + Name *Ident `json:"name"` + Distinct bool `json:"distinct"` + All bool `json:"all"` // the redundant ALL qualifier + Star bool `json:"star"` + Args []Expr `json:"args,omitempty"` + OrderBy []*OrderingTerm `json:"orderBy,omitempty"` // aggregate inner ORDER BY + Filter Expr `json:"filter,omitempty"` // FILTER (WHERE ...) + Over *WindowDef `json:"over,omitempty"` +} + +func (*FuncCall) exprNode() {} +func (n *FuncCall) Children() []Node { + out := nodes(n.Name) + for _, a := range n.Args { + out = append(out, a) + } + for _, o := range n.OrderBy { + out = append(out, o) + } + return append(out, nodes(n.Filter, n.Over)...) +} + +// ExistsExpr is "EXISTS (select)". +// +// expr ::= EXISTS LP select RP. +type ExistsExpr struct { + Span + Select *SelectStmt `json:"select"` +} + +func (*ExistsExpr) exprNode() {} +func (n *ExistsExpr) Children() []Node { return nodes(n.Select) } + +// SubqueryExpr is a parenthesised SELECT used as a scalar. +// +// expr ::= LP select RP. +type SubqueryExpr struct { + Span + Select *SelectStmt `json:"select"` +} + +func (*SubqueryExpr) exprNode() {} +func (n *SubqueryExpr) Children() []Node { return nodes(n.Select) } + +// VectorExpr is a parenthesised row value with two or more elements. +// +// expr ::= LP nexprlist COMMA expr RP. +type VectorExpr struct { + Span + List []Expr `json:"list"` +} + +func (*VectorExpr) exprNode() {} +func (n *VectorExpr) Children() []Node { + out := make([]Node, len(n.List)) + for i, e := range n.List { + out[i] = e + } + return out +} + +// RaiseExpr is the trigger-only RAISE() form. +// +// expr ::= RAISE LP IGNORE RP. / expr ::= RAISE LP raisetype COMMA expr RP. +type RaiseExpr struct { + Span + Action string `json:"action"` // IGNORE, ROLLBACK, ABORT or FAIL + Message Expr `json:"message,omitempty"` +} + +func (*RaiseExpr) exprNode() {} +func (n *RaiseExpr) Children() []Node { return nodes(n.Message) } + +// TypeName is a column or cast type: one or more identifier tokens followed +// by an optional size specification. +// +// typetoken ::= typename [LP signed [COMMA signed] RP]. +type TypeName struct { + Span + Name string `json:"name"` // the identifier tokens, space-joined + Args []string `json:"args,omitempty"` // the signed numbers, as written + Raw string `json:"raw"` // the whole source span +} + +func (n *TypeName) Children() []Node { return nil } + +// nodes builds a Children() slice, dropping nil interfaces and nil pointers. +func nodes(list ...Node) []Node { + out := make([]Node, 0, len(list)) + for _, n := range list { + if !isNil(n) { + out = append(out, n) + } + } + return out +} diff --git a/ast/misc.go b/ast/misc.go new file mode 100644 index 0000000..1c49cb2 --- /dev/null +++ b/ast/misc.go @@ -0,0 +1,159 @@ +package ast + +// TransactionType is the DEFERRED/IMMEDIATE/EXCLUSIVE qualifier of BEGIN. +type TransactionType int + +const ( + TxnDeferred TransactionType = iota + TxnImmediate + TxnExclusive +) + +// BeginStmt is BEGIN [DEFERRED|IMMEDIATE|EXCLUSIVE] [TRANSACTION [name]]. +// +// cmd ::= BEGIN transtype trans_opt. +type BeginStmt struct { + Span + Type TransactionType `json:"type,omitempty"` + HasType bool `json:"hasType,omitempty"` + Name *Ident `json:"name,omitempty"` +} + +func (*BeginStmt) stmtNode() {} +func (n *BeginStmt) Children() []Node { return nodes(n.Name) } + +// CommitStmt is COMMIT or END, optionally followed by TRANSACTION [name]. +// +// cmd ::= COMMIT|END trans_opt. +type CommitStmt struct { + Span + Keyword string `json:"keyword"` // "COMMIT" or "END" + Name *Ident `json:"name,omitempty"` +} + +func (*CommitStmt) stmtNode() {} +func (n *CommitStmt) Children() []Node { return nodes(n.Name) } + +// RollbackStmt is ROLLBACK, with or without a savepoint. +// +// cmd ::= ROLLBACK trans_opt. +// cmd ::= ROLLBACK trans_opt TO savepoint_opt nm. +type RollbackStmt struct { + Span + Name *Ident `json:"name,omitempty"` // TRANSACTION + Savepoint *Ident `json:"savepoint,omitempty"` // TO [SAVEPOINT] +} + +func (*RollbackStmt) stmtNode() {} +func (n *RollbackStmt) Children() []Node { return nodes(n.Name, n.Savepoint) } + +// SavepointStmt is SAVEPOINT . +// +// cmd ::= SAVEPOINT nm. +type SavepointStmt struct { + Span + Name *Ident `json:"name"` +} + +func (*SavepointStmt) stmtNode() {} +func (n *SavepointStmt) Children() []Node { return nodes(n.Name) } + +// ReleaseStmt is RELEASE [SAVEPOINT] . +// +// cmd ::= RELEASE savepoint_opt nm. +type ReleaseStmt struct { + Span + Name *Ident `json:"name"` +} + +func (*ReleaseStmt) stmtNode() {} +func (n *ReleaseStmt) Children() []Node { return nodes(n.Name) } + +// AttachStmt is ATTACH [DATABASE] expr AS expr [KEY expr]. +// +// cmd ::= ATTACH database_kw_opt expr AS expr key_opt. +type AttachStmt struct { + Span + HasDatabase bool `json:"hasDatabase,omitempty"` + File Expr `json:"file"` + Name Expr `json:"name"` + Key Expr `json:"key,omitempty"` +} + +func (*AttachStmt) stmtNode() {} +func (n *AttachStmt) Children() []Node { return nodes(n.File, n.Name, n.Key) } + +// DetachStmt is DETACH [DATABASE] expr. +// +// cmd ::= DETACH database_kw_opt expr. +type DetachStmt struct { + Span + HasDatabase bool `json:"hasDatabase,omitempty"` + Name Expr `json:"name"` +} + +func (*DetachStmt) stmtNode() {} +func (n *DetachStmt) Children() []Node { return nodes(n.Name) } + +// PragmaStmt is a PRAGMA in any of its three value spellings. +// +// cmd ::= PRAGMA nm dbnm. +// cmd ::= PRAGMA nm dbnm EQ nmnum. / PRAGMA nm dbnm EQ minus_num. +// cmd ::= PRAGMA nm dbnm LP nmnum RP. / PRAGMA nm dbnm LP minus_num RP. +type PragmaStmt struct { + Span + Name *QualifiedName `json:"name"` + Value string `json:"value,omitempty"` // as written, "-" included + Paren bool `json:"paren,omitempty"` // the LP ... RP spelling + HasValue bool `json:"hasValue,omitempty"` +} + +func (*PragmaStmt) stmtNode() {} +func (n *PragmaStmt) Children() []Node { return nodes(n.Name) } + +// VacuumStmt is VACUUM [schema] [INTO expr]. +// +// cmd ::= VACUUM vinto. / cmd ::= VACUUM nm vinto. +type VacuumStmt struct { + Span + Schema *Ident `json:"schema,omitempty"` + Into Expr `json:"into,omitempty"` +} + +func (*VacuumStmt) stmtNode() {} +func (n *VacuumStmt) Children() []Node { return nodes(n.Schema, n.Into) } + +// AnalyzeStmt is ANALYZE [name [. name]]. +// +// cmd ::= ANALYZE. / cmd ::= ANALYZE nm dbnm. +type AnalyzeStmt struct { + Span + Name *QualifiedName `json:"name,omitempty"` +} + +func (*AnalyzeStmt) stmtNode() {} +func (n *AnalyzeStmt) Children() []Node { return nodes(n.Name) } + +// ReindexStmt is REINDEX [name [. name]]. +// +// cmd ::= REINDEX. / cmd ::= REINDEX nm dbnm. +type ReindexStmt struct { + Span + Name *QualifiedName `json:"name,omitempty"` +} + +func (*ReindexStmt) stmtNode() {} +func (n *ReindexStmt) Children() []Node { return nodes(n.Name) } + +// ExplainStmt wraps another statement in EXPLAIN or EXPLAIN QUERY PLAN. +// +// ecmd ::= explain cmdx SEMI. +// explain ::= EXPLAIN. / explain ::= EXPLAIN QUERY PLAN. +type ExplainStmt struct { + Span + QueryPlan bool `json:"queryPlan,omitempty"` + Stmt Stmt `json:"stmt"` +} + +func (*ExplainStmt) stmtNode() {} +func (n *ExplainStmt) Children() []Node { return nodes(n.Stmt) } diff --git a/ast/select.go b/ast/select.go new file mode 100644 index 0000000..85dc1cd --- /dev/null +++ b/ast/select.go @@ -0,0 +1,353 @@ +package ast + +// SelectStmt is a complete SELECT: an optional WITH clause followed by one +// or more query cores joined by compound operators. +// +// select ::= WITH [RECURSIVE] wqlist selectnowith. / select ::= selectnowith. +// selectnowith ::= selectnowith multiselect_op oneselect. +// +// Cores is never empty and Ops has exactly len(Cores)-1 entries. ORDER BY +// and LIMIT belong to the core they were written on: SQLite's grammar hangs +// them off oneselect, and rejects a leading one only in a grammar action +// ("ORDER BY clause should come after UNION not before"), which is not a +// parse error. +type SelectStmt struct { + Span + With *With `json:"with,omitempty"` + Cores []SelectCore `json:"cores"` + Ops []CompoundOp `json:"ops,omitempty"` +} + +func (*SelectStmt) stmtNode() {} +func (n *SelectStmt) Children() []Node { + out := nodes(n.With) + for _, c := range n.Cores { + out = append(out, c) + } + return out +} + +// SelectCore is one term of a compound select: a SELECT or a VALUES clause. +type SelectCore interface { + Node + selectCoreNode() +} + +// CompoundOp is UNION, UNION ALL, EXCEPT or INTERSECT. +// +// multiselect_op ::= UNION. / UNION ALL. / EXCEPT|INTERSECT. +type CompoundOp struct { + Span + Op string `json:"op"` // "UNION", "EXCEPT", "INTERSECT" + All bool `json:"all"` +} + +func (n *CompoundOp) Children() []Node { return nil } + +// Distinct records the DISTINCT/ALL qualifier of a SELECT. +type Distinct int + +const ( + DistinctNone Distinct = iota + DistinctDistinct + DistinctAll +) + +// SelectQuery is the SELECT form of a query core. +// +// oneselect ::= SELECT distinct selcollist from where_opt groupby_opt +// having_opt [window_clause] orderby_opt limit_opt. +type SelectQuery struct { + Span + Distinct Distinct `json:"distinct,omitempty"` + Columns []*ResultColumn `json:"columns"` + From []*TableRef `json:"from,omitempty"` + Where Expr `json:"where,omitempty"` + GroupBy []Expr `json:"groupBy,omitempty"` + Having Expr `json:"having,omitempty"` + Windows []*WindowDef `json:"windows,omitempty"` + OrderBy []*OrderingTerm `json:"orderBy,omitempty"` + Limit *Limit `json:"limit,omitempty"` +} + +func (*SelectQuery) selectCoreNode() {} +func (n *SelectQuery) Children() []Node { + var out []Node + for _, c := range n.Columns { + out = append(out, c) + } + for _, t := range n.From { + out = append(out, t) + } + out = append(out, nodes(n.Where)...) + for _, g := range n.GroupBy { + out = append(out, g) + } + out = append(out, nodes(n.Having)...) + for _, w := range n.Windows { + out = append(out, w) + } + for _, o := range n.OrderBy { + out = append(out, o) + } + return append(out, nodes(n.Limit)...) +} + +// ValuesClause is the VALUES form of a query core. SQLite models multi-row +// VALUES as a compound of single-row selects; meyer keeps it as one node. +// +// values ::= VALUES LP nexprlist RP. +// mvalues ::= values COMMA LP nexprlist RP. / mvalues COMMA LP nexprlist RP. +type ValuesClause struct { + Span + Rows [][]Expr `json:"rows"` +} + +func (*ValuesClause) selectCoreNode() {} +func (n *ValuesClause) Children() []Node { + var out []Node + for _, row := range n.Rows { + for _, e := range row { + out = append(out, e) + } + } + return out +} + +// ResultColumn is one entry of a select list. +// +// selcollist ::= sclp scanpt expr scanpt as. +type ResultColumn struct { + Span + Expr Expr `json:"expr"` + Alias *Ident `json:"alias,omitempty"` + HasAs bool `json:"hasAs,omitempty"` // the alias was introduced by AS +} + +func (n *ResultColumn) Children() []Node { return nodes(n.Expr, n.Alias) } + +// JoinType is the bitmask of join keywords, matching sqlite3JoinType. +type JoinType int + +const ( + JoinInner JoinType = 1 << iota + JoinCross + JoinNatural + JoinLeft + JoinRight + JoinOuter + JoinComma // the item was separated by "," rather than a JOIN keyword +) + +// JoinOperator is the operator attaching a FROM item to the one before it. +// +// joinop ::= COMMA|JOIN. / JOIN_KW JOIN. / JOIN_KW nm JOIN. +// joinop ::= JOIN_KW nm nm JOIN. +type JoinOperator struct { + Span + Type JoinType `json:"type"` + Words []string `json:"words,omitempty"` // the keywords as written +} + +func (n *JoinOperator) Children() []Node { return nil } + +// TableRef is one item of a FROM clause. Following SQLite's SrcList, the +// list is flat and each item records how it attaches to the previous one. +// Exactly one of Name, Select and List describes the source. +// +// seltablist ::= stl_prefix nm dbnm as [indexed_by] on_using. +// seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using. +// seltablist ::= stl_prefix LP select RP as on_using. +// seltablist ::= stl_prefix LP seltablist RP as on_using. +type TableRef struct { + Span + Join *JoinOperator `json:"join,omitempty"` // nil for the first item + Name *QualifiedName `json:"name,omitempty"` + Args []Expr `json:"args,omitempty"` // table-valued function + HasArgs bool `json:"hasArgs,omitempty"` + Select *SelectStmt `json:"select,omitempty"` + List []*TableRef `json:"list,omitempty"` + Alias *Ident `json:"alias,omitempty"` + HasAs bool `json:"hasAs,omitempty"` + IndexedBy *Ident `json:"indexedBy,omitempty"` + NotIndexed bool `json:"notIndexed,omitempty"` + On Expr `json:"on,omitempty"` + Using []*Ident `json:"using,omitempty"` +} + +func (n *TableRef) Children() []Node { + out := nodes(n.Join, n.Name) + for _, a := range n.Args { + out = append(out, a) + } + out = append(out, nodes(n.Select)...) + for _, t := range n.List { + out = append(out, t) + } + out = append(out, nodes(n.Alias, n.IndexedBy, n.On)...) + for _, u := range n.Using { + out = append(out, u) + } + return out +} + +// SortOrder is ASC, DESC, or unstated. +type SortOrder int + +const ( + SortDefault SortOrder = iota + SortAsc + SortDesc +) + +// NullsOrder is NULLS FIRST, NULLS LAST, or unstated. +type NullsOrder int + +const ( + NullsDefault NullsOrder = iota + NullsFirst + NullsLast +) + +// OrderingTerm is one entry of an ORDER BY (or index/aggregate) sort list. +// +// sortlist ::= sortlist COMMA expr sortorder nulls. +type OrderingTerm struct { + Span + Expr Expr `json:"expr"` + Order SortOrder `json:"order,omitempty"` + Nulls NullsOrder `json:"nulls,omitempty"` +} + +func (n *OrderingTerm) Children() []Node { return nodes(n.Expr) } + +// Limit is a LIMIT clause. In the "LIMIT x, y" spelling SQLite swaps the +// operands, so Count is y and Offset is x; Comma records the spelling. +// +// limit_opt ::= LIMIT expr. / LIMIT expr OFFSET expr. / LIMIT expr COMMA expr. +type Limit struct { + Span + Count Expr `json:"count"` + Offset Expr `json:"offset,omitempty"` + Comma bool `json:"comma,omitempty"` +} + +func (n *Limit) Children() []Node { return nodes(n.Count, n.Offset) } + +// With is a WITH clause. +// +// with ::= WITH [RECURSIVE] wqlist. +type With struct { + Span + Recursive bool `json:"recursive,omitempty"` + CTEs []*CTE `json:"ctes"` +} + +func (n *With) Children() []Node { + out := make([]Node, len(n.CTEs)) + for i, c := range n.CTEs { + out[i] = c + } + return out +} + +// Materialized records the optional MATERIALIZED hint on a CTE. +type Materialized int + +const ( + MaterializedAny Materialized = iota + MaterializedYes + MaterializedNo +) + +// CTE is one common table expression. +// +// wqitem ::= withnm eidlist_opt wqas LP select RP. +type CTE struct { + Span + Name *Ident `json:"name"` + Columns []*Ident `json:"columns,omitempty"` + Materialized Materialized `json:"materialized,omitempty"` + Select *SelectStmt `json:"select"` +} + +func (n *CTE) Children() []Node { + out := nodes(n.Name) + for _, c := range n.Columns { + out = append(out, c) + } + return append(out, nodes(n.Select)...) +} + +// FrameType is RANGE, ROWS or GROUPS. +type FrameType int + +const ( + FrameNone FrameType = iota + FrameRange + FrameRows + FrameGroups +) + +// FrameBoundType enumerates the window frame endpoints. +type FrameBoundType int + +const ( + BoundUnboundedPreceding FrameBoundType = iota + BoundPreceding + BoundCurrentRow + BoundFollowing + BoundUnboundedFollowing +) + +// FrameExclude is the EXCLUDE clause of a frame specification. +type FrameExclude int + +const ( + ExcludeNone FrameExclude = iota + ExcludeNoOthers + ExcludeCurrentRow + ExcludeGroup + ExcludeTies +) + +// FrameBound is one endpoint of a window frame. +// +// frame_bound ::= expr PRECEDING|FOLLOWING. / CURRENT ROW. +// frame_bound_s ::= UNBOUNDED PRECEDING. / frame_bound_e ::= UNBOUNDED FOLLOWING. +type FrameBound struct { + Span + Type FrameBoundType `json:"type"` + Expr Expr `json:"expr,omitempty"` +} + +func (n *FrameBound) Children() []Node { return nodes(n.Expr) } + +// WindowDef is a window definition: the body of an OVER(...) or of one entry +// in a WINDOW clause. A bare "OVER name" sets Base and nothing else. +// +// window ::= [nm] [PARTITION BY nexprlist] [ORDER BY sortlist] frame_opt. +// windowdefn ::= nm AS LP window RP. +type WindowDef struct { + Span + Name *Ident `json:"name,omitempty"` // WINDOW AS (...) + Base *Ident `json:"base,omitempty"` // inherited window name + NameOnly bool `json:"nameOnly,omitempty"` + Partition []Expr `json:"partition,omitempty"` + OrderBy []*OrderingTerm `json:"orderBy,omitempty"` + Frame FrameType `json:"frame,omitempty"` + StartBound *FrameBound `json:"startBound,omitempty"` + EndBound *FrameBound `json:"endBound,omitempty"` + Exclude FrameExclude `json:"exclude,omitempty"` +} + +func (n *WindowDef) Children() []Node { + out := nodes(n.Name, n.Base) + for _, p := range n.Partition { + out = append(out, p) + } + for _, o := range n.OrderBy { + out = append(out, o) + } + return append(out, nodes(n.StartBound, n.EndBound)...) +} diff --git a/lexer/lexer.go b/lexer/lexer.go new file mode 100644 index 0000000..77c1a0a --- /dev/null +++ b/lexer/lexer.go @@ -0,0 +1,460 @@ +// Package lexer implements SQLite's tokenizer. +// +// It is a direct port of sqlite3GetToken() in src/tokenize.c together with +// the token post-processing sqlite3RunParser() performs around it: runs of +// whitespace and comments are dropped, and the WINDOW/OVER/FILTER keywords +// are resolved against their neighbours (analyzeWindowKeyword and friends). +// +// Illegal input is not reported here. sqlite3RunParser aborts at the first +// TK_ILLEGAL token it reaches, which is exactly as far as the parser had +// got, so meyer keeps ILLEGAL tokens in the stream and lets the parser +// report "unrecognized token" when it reaches one. That preserves SQLite's +// ordering between tokenizer errors and syntax errors. +package lexer + +import ( + "github.com/sqlc-dev/meyer/token" +) + +// Lex splits src into tokens. Whitespace and comments are dropped; the +// returned slice always ends with a single EOF token whose Pos is the end of +// the consumed input. +// +// A NUL byte terminates the input, matching SQLite, whose tokenizer walks a +// NUL-terminated buffer. +func Lex(src string) []token.Token { + var toks []token.Token + i := 0 + for i < len(src) { + kind, n := scan(src, i) + if kind == token.EOF { // NUL byte: end of input + break + } + if n == 0 { + n = 1 + } + if kind != token.SPACE && kind != token.COMMENT { + toks = append(toks, token.Token{Kind: kind, Text: src[i : i+n], Pos: i, End: i + n}) + } + i += n + } + resolveWindowKeywords(toks) + toks = append(toks, token.Token{Kind: token.EOF, Pos: i, End: i}) + return toks +} + +// resolveWindowKeywords implements analyzeWindowKeyword, analyzeOverKeyword +// and analyzeFilterKeyword from tokenize.c. Those three keywords cannot use +// Lemon's %fallback mechanism, because whether they are keywords depends on +// the tokens around them rather than on the parser state. +func resolveWindowKeywords(toks []token.Token) { + at := func(i int) token.Kind { + if i < 0 || i >= len(toks) { + return token.EOF + } + return toks[i].Kind + } + // getToken() in tokenize.c folds these kinds into TK_ID before the + // analysis compares them. Note that INDEXED is deliberately absent. + asID := func(k token.Kind) token.Kind { + if k == token.ID || k == token.STRING || k == token.JOIN_KW || + k == token.WINDOW || k == token.OVER || token.CanFallback(k) { + return token.ID + } + return k + } + prev := token.Kind(-1) // lastTokenParsed; -1 before the first token + for i := range toks { + switch toks[i].Kind { + case token.WINDOW: + // WINDOW is a keyword only in "WINDOW AS". + if !(asID(at(i+1)) == token.ID && at(i+2) == token.AS) { + toks[i].Kind = token.ID + } + case token.OVER: + // OVER is a keyword only after ")" and before "(" or a name. + if !(prev == token.RP && (at(i+1) == token.LP || asID(at(i+1)) == token.ID)) { + toks[i].Kind = token.ID + } + case token.FILTER: + // FILTER is a keyword only between ")" and "(". + if !(prev == token.RP && at(i+1) == token.LP) { + toks[i].Kind = token.ID + } + } + prev = toks[i].Kind + } +} + +// scan returns the kind and byte length of the token beginning at src[i]. +// It mirrors the switch on aiClass[] in sqlite3GetToken(); the character +// classes are spelled out as predicates instead of a lookup table. +func scan(src string, i int) (token.Kind, int) { + c := src[i] + at := func(off int) byte { // z[off], with the C string's implicit NUL + if i+off < len(src) { + return src[i+off] + } + return 0 + } + switch { + case c == 0: + return token.EOF, 0 + + case isSpaceStart(c): // CC_SPACE + n := 1 + for i+n < len(src) && isSpace(src[i+n]) { + n++ + } + return token.SPACE, n + + case c == '-': // CC_MINUS + if at(1) == '-' { + n := 2 + for i+n < len(src) && src[i+n] != '\n' { + n++ + } + return token.COMMENT, n + } + if at(1) == '>' { + if at(2) == '>' { + return token.PTR, 3 + } + return token.PTR, 2 + } + return token.MINUS, 1 + + case c == '(': + return token.LP, 1 + case c == ')': + return token.RP, 1 + case c == ';': + return token.SEMI, 1 + case c == '+': + return token.PLUS, 1 + case c == '*': + return token.STAR, 1 + + case c == '/': // CC_SLASH + if at(1) != '*' || at(2) == 0 { + return token.SLASH, 1 + } + // An unterminated /* comment runs to the end of the input and is + // not an error; tokenize.test relies on this. + n := 3 + prev := at(2) + for ; i+n < len(src); n++ { + if prev == '*' && src[i+n] == '/' { + n++ + break + } + prev = src[i+n] + } + return token.COMMENT, n + + case c == '%': + return token.REM, 1 + + case c == '=': // CC_EQ + if at(1) == '=' { + return token.EQ, 2 + } + return token.EQ, 1 + + case c == '<': // CC_LT + switch at(1) { + case '=': + return token.LE, 2 + case '>': + return token.NE, 2 + case '<': + return token.LSHIFT, 2 + } + return token.LT, 1 + + case c == '>': // CC_GT + switch at(1) { + case '=': + return token.GE, 2 + case '>': + return token.RSHIFT, 2 + } + return token.GT, 1 + + case c == '!': // CC_BANG + if at(1) != '=' { + return token.ILLEGAL, 1 + } + return token.NE, 2 + + case c == '|': // CC_PIPE + if at(1) != '|' { + return token.BITOR, 1 + } + return token.CONCAT, 2 + + case c == ',': + return token.COMMA, 1 + case c == '&': + return token.BITAND, 1 + case c == '~': + return token.BITNOT, 1 + + case c == '\'' || c == '"' || c == '`': // CC_QUOTE + delim := c + n := 1 + var last byte + for ; i+n < len(src); n++ { + last = src[i+n] + if last == delim { + if at(n+1) == delim { + n++ + continue + } + break + } + } + if i+n >= len(src) { + last = 0 + } + switch { + case last == '\'': + return token.STRING, n + 1 + case last != 0: + return token.ID, n + 1 + default: + return token.ILLEGAL, n + } + + case c == '.': // CC_DOT + if !isDigit(at(1)) { + return token.DOT, 1 + } + return scanNumber(src, i, at) + + case isDigit(c): // CC_DIGIT + return scanNumber(src, i, at) + + case c == '[': // CC_QUOTE2 + n := 1 + for ; i+n < len(src); n++ { + if src[i+n] == ']' { + return token.ID, n + 1 + } + } + return token.ILLEGAL, n + + case c == '?': // CC_VARNUM + n := 1 + for i+n < len(src) && isDigit(src[i+n]) { + n++ + } + return token.VARIABLE, n + + case c == '$' || c == '@' || c == '#' || c == ':': // CC_DOLLAR, CC_VARALPHA + return scanVariable(src, i, at) + + case c == 'x' || c == 'X': // CC_X: blob literal, otherwise an identifier + if at(1) == '\'' { + n := 2 + for isHex(at(n)) { + n++ + } + kind := token.BLOB + if at(n) != '\'' || n%2 != 0 { + kind = token.ILLEGAL + for at(n) != 0 && at(n) != '\'' { + n++ + } + } + if at(n) != 0 { + n++ + } + return kind, n + } + return scanIdent(src, i, 1) + + case c == 0xef: // CC_BOM + if at(1) == 0xbb && at(2) == 0xbf { + return token.SPACE, 3 + } + return scanIdent(src, i, 1) + + case isKeywordStart(c): // CC_KYWD0 + if !isKeywordChar(at(1)) { + return scanIdent(src, i, 1) + } + n := 2 + for isKeywordChar(at(n)) { + n++ + } + if isIDChar(at(n)) { + return scanIdent(src, i, n+1) + } + return token.Lookup(src[i : i+n]), n + + case isIDChar(c): // CC_KYWD ('_' and the digits are handled above), CC_ID + return scanIdent(src, i, 1) + } + return token.ILLEGAL, 1 +} + +// scanIdent consumes identifier characters starting from an already-accepted +// prefix of n bytes: the "while( IdChar(z[i]) ){ i++; }" tail of +// sqlite3GetToken. +func scanIdent(src string, i, n int) (token.Kind, int) { + for i+n < len(src) && isIDChar(src[i+n]) { + n++ + } + return token.ID, n +} + +// scanNumber implements the CC_DIGIT case: hex integers, decimal integers, +// floats, exponents, and '_' digit separators (which turn the token into a +// QNUMBER for the grammar to validate). A number immediately followed by an +// identifier character is TK_ILLEGAL, so "1abc" is one bad token rather than +// two good ones. +func scanNumber(src string, i int, at func(int) byte) (token.Kind, int) { + kind := token.INTEGER + n := 0 + if at(0) == '0' && (at(1) == 'x' || at(1) == 'X') && isHex(at(2)) { + for n = 3; ; n++ { + if !isHex(at(n)) { + if at(n) == '_' { + kind = token.QNUMBER + } else { + break + } + } + } + } else { + for n = 0; ; n++ { + if !isDigit(at(n)) { + if at(n) == '_' { + kind = token.QNUMBER + } else { + break + } + } + } + if at(n) == '.' { + if kind == token.INTEGER { + kind = token.FLOAT + } + for n++; ; n++ { + if !isDigit(at(n)) { + if at(n) == '_' { + kind = token.QNUMBER + } else { + break + } + } + } + } + if (at(n) == 'e' || at(n) == 'E') && + (isDigit(at(n+1)) || ((at(n+1) == '+' || at(n+1) == '-') && isDigit(at(n+2)))) { + if kind == token.INTEGER { + kind = token.FLOAT + } + for n += 2; ; n++ { + if !isDigit(at(n)) { + if at(n) == '_' { + kind = token.QNUMBER + } else { + break + } + } + } + } + } + for isIDChar(at(n)) { + kind = token.ILLEGAL + n++ + } + return kind, n +} + +// scanVariable implements the CC_DOLLAR/CC_VARALPHA case: the ?, :name, +// @name and $name bind-parameter spellings, including the TCL-style +// "$foo(bar)" and "$foo::bar" suffixes SQLite accepts. +func scanVariable(src string, i int, at func(int) byte) (token.Kind, int) { + kind := token.VARIABLE + nid := 0 + n := 1 + for ; at(n) != 0; n++ { + c := at(n) + switch { + case isIDChar(c): + nid++ + case c == '(' && nid > 0: + for { + n++ + c = at(n) + if c == 0 || isSpace(c) || c == ')' { + break + } + } + if c == ')' { + n++ + } else { + kind = token.ILLEGAL + } + if nid == 0 { + kind = token.ILLEGAL + } + return kind, n + case c == ':' && at(n+1) == ':': + n++ + default: + if nid == 0 { + kind = token.ILLEGAL + } + return kind, n + } + } + if nid == 0 { + kind = token.ILLEGAL + } + return kind, n +} + +// The character classes of tokenize.c's aiClass[] and sqlite3CtypeMap[]. + +// isSpace is sqlite3Isspace(), which governs how far a run of whitespace +// extends once one has started. +func isSpace(c byte) bool { + return c == ' ' || (c >= '\t' && c <= '\r') +} + +// isSpaceStart is CC_SPACE, the narrower set that may *begin* a whitespace +// token. Vertical tab is missing from it, so a leading \v is an illegal +// token even though \v is absorbed by a run that started with a space. +func isSpaceStart(c byte) bool { + return c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r' +} + +func isDigit(c byte) bool { return c >= '0' && c <= '9' } + +func isHex(c byte) bool { + return isDigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') +} + +func isAlpha(c byte) bool { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') +} + +// isIDChar is IdChar() from tokenize.c: alphanumerics, '_', '$', and every +// byte with the high bit set. +func isIDChar(c byte) bool { + return isAlpha(c) || isDigit(c) || c == '_' || c == '$' || c >= 0x80 +} + +// isKeywordStart is CC_KYWD0: a letter other than 'x'/'X', which begin blob +// literals and are handled separately. +func isKeywordStart(c byte) bool { + return isAlpha(c) && c != 'x' && c != 'X' +} + +// isKeywordChar is CC_KYWD0 or CC_KYWD: characters that may appear inside a +// keyword. 'x' and 'X' qualify here even though they cannot start one. +func isKeywordChar(c byte) bool { return isAlpha(c) || c == '_' } diff --git a/parser/parse_ddl.go b/parser/parse_ddl.go new file mode 100644 index 0000000..f987ee2 --- /dev/null +++ b/parser/parse_ddl.go @@ -0,0 +1,702 @@ +package parser + +import ( + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/token" +) + +// parseCreate dispatches the CREATE commands. The optional TEMP, UNIQUE and +// VIRTUAL qualifiers each belong to a different object kind, so one or two +// tokens after CREATE decide which rule applies. +// +// createkw ::= CREATE. +func (p *parser) parseCreate() ast.Stmt { + start := p.expect(token.CREATE).Pos + temp := p.accept(token.TEMP) // temp ::= TEMP. / temp ::= . + switch p.cur().Kind { + case token.TABLE: + return p.parseCreateTable(start, temp) + case token.VIEW: + return p.parseCreateView(start, temp) + case token.TRIGGER: + return p.parseCreateTrigger(start, temp) + } + if temp { + p.syntaxError() + } + switch p.cur().Kind { + case token.UNIQUE: + p.advance() + return p.parseCreateIndex(start, true) + case token.INDEX: + return p.parseCreateIndex(start, false) + case token.VIRTUAL: + return p.parseCreateVirtualTable(start) + } + p.syntaxError() + return nil +} + +// parseIfNotExists implements "ifnotexists". +// +// ifnotexists ::= . / ifnotexists ::= IF NOT EXISTS. +func (p *parser) parseIfNotExists() bool { + if !p.at(token.IF) { + return false + } + p.advance() + p.expect(token.NOT) + p.expect(token.EXISTS) + return true +} + +// parseIfExists implements "ifexists". +// +// ifexists ::= IF EXISTS. / ifexists ::= . +func (p *parser) parseIfExists() bool { + if !p.at(token.IF) { + return false + } + p.advance() + p.expect(token.EXISTS) + return true +} + +// parseCreateTable implements CREATE TABLE. +// +// create_table ::= createkw temp TABLE ifnotexists nm dbnm. +// create_table_args ::= LP columnlist conslist_opt RP table_option_set. +// create_table_args ::= AS select. +func (p *parser) parseCreateTable(start int, temp bool) ast.Stmt { + p.expect(token.TABLE) + n := &ast.CreateTableStmt{Temp: temp} + n.IfNotExists = p.parseIfNotExists() + n.Name = p.qualifiedName() + if p.accept(token.AS) { + n.Select = p.parseSelect() + n.Span = p.span(start) + return n + } + p.expect(token.LP) + p.parseColumnAndConstraintList(n) + p.expect(token.RP) + p.parseTableOptions(n) + n.Span = p.span(start) + return n +} + +// parseColumnAndConstraintList implements "columnlist conslist_opt". +// +// The two lists are told apart by their first token: a column definition +// starts with a name, and none of CONSTRAINT, PRIMARY, UNIQUE, CHECK and +// FOREIGN is in the %fallback set, so none of them can be a column name. +// Note that "tconscomma ::= ." makes the comma between table constraints +// optional. +func (p *parser) parseColumnAndConstraintList(n *ast.CreateTableStmt) { + // "columnlist" is not optional: CREATE TABLE t(PRIMARY KEY(a)) is a + // syntax error at PRIMARY, so the first item is always a column. + for { + n.Columns = append(n.Columns, p.parseColumnDef()) + if !p.accept(token.COMMA) { + return + } + if p.atTableConstraint() { + break + } + } + var pending *ast.Ident + for { + start := p.cur().Pos + if p.at(token.CONSTRAINT) { + // tcons ::= CONSTRAINT nm names whatever constraint follows, + // and is itself a complete tcons: a list may end with one. + p.advance() + pending = p.expectName() + } else { + c := p.parseTableConstraint(start) + c.Name, pending = pending, nil + n.Constraints = append(n.Constraints, c) + } + p.accept(token.COMMA) // tconscomma ::= COMMA. / tconscomma ::= . + if !p.atTableConstraint() { + return + } + } +} + +func (p *parser) atTableConstraint() bool { + switch p.cur().Kind { + case token.CONSTRAINT, token.PRIMARY, token.UNIQUE, token.CHECK, token.FOREIGN: + return true + } + return false +} + +// parseColumnDef implements "columnname carglist". +// +// columnname ::= nm typetoken. +func (p *parser) parseColumnDef() *ast.ColumnDef { + start := p.cur().Pos + n := &ast.ColumnDef{Name: p.expectName()} + n.Type = p.parseTypeToken() + var pending *ast.Ident + for { + cStart := p.cur().Pos + if p.at(token.CONSTRAINT) { // ccons ::= CONSTRAINT nm. + p.advance() + pending = p.expectName() + continue + } + c := p.parseColumnConstraint(cStart) + if c == nil { + break + } + c.Name, pending = pending, nil + n.Constraints = append(n.Constraints, c) + } + n.Span = p.span(start) + return n +} + +// parseColumnConstraint implements one "ccons", returning nil when the +// column's constraint list is over. +// +// ccons ::= NULL onconf. / NOT NULL onconf. +// ccons ::= PRIMARY KEY sortorder onconf autoinc. / UNIQUE onconf. +// ccons ::= CHECK LP expr RP. / COLLATE ids. +// ccons ::= DEFAULT term. / DEFAULT LP expr RP. / DEFAULT PLUS|MINUS term. +// ccons ::= DEFAULT id. +// ccons ::= REFERENCES nm eidlist_opt refargs. / defer_subclause. +// ccons ::= GENERATED ALWAYS AS generated. / ccons ::= AS generated. +func (p *parser) parseColumnConstraint(start int) *ast.ColumnConstraint { + c := &ast.ColumnConstraint{} + switch p.cur().Kind { + case token.NULL: + p.advance() + c.Kind = ast.ColumnNull + c.OnConflict = p.parseOnConflict() + case token.NOT: + // NOT introduces either "NOT NULL" or "NOT DEFERRABLE". + switch p.peek(1).Kind { + case token.NULL: + p.advance() + p.advance() + c.Kind = ast.ColumnNotNull + c.OnConflict = p.parseOnConflict() + case token.DEFERRABLE: + c.Kind = ast.ColumnDeferrable + c.Deferrable = p.parseDeferClause() + default: + p.advance() // SQLite shifts NOT and fails on what follows + p.syntaxError() + } + case token.DEFERRABLE: + c.Kind = ast.ColumnDeferrable + c.Deferrable = p.parseDeferClause() + case token.PRIMARY: + p.advance() + p.expect(token.KEY) + c.Kind = ast.ColumnPrimaryKey + switch { + case p.accept(token.ASC): + c.Order = ast.SortAsc + case p.accept(token.DESC): + c.Order = ast.SortDesc + } + c.OnConflict = p.parseOnConflict() + if p.accept(token.AUTOINCR) { // autoinc ::= AUTOINCR. / autoinc ::= . + c.AutoIncrement = true + } + case token.UNIQUE: + p.advance() + c.Kind = ast.ColumnUnique + c.OnConflict = p.parseOnConflict() + case token.CHECK: + p.advance() + p.expect(token.LP) + c.Kind = ast.ColumnCheck + c.Expr = p.parseExpr(precLowest) + p.expect(token.RP) + case token.COLLATE: + p.advance() + c.Kind = ast.ColumnCollate + c.Collation = p.expectIDS() + case token.DEFAULT: + p.advance() + c.Kind = ast.ColumnDefault + c.Expr = p.parseDefaultValue() + case token.REFERENCES: + c.Kind = ast.ColumnReferences + c.References = p.parseReferences() + case token.GENERATED: + p.advance() + p.expect(token.ALWAYS) + p.expect(token.AS) + c.Kind = ast.ColumnGenerated + c.AlwaysWord = true + c.Expr, c.GeneratedKind = p.parseGenerated() + case token.AS: + p.advance() + c.Kind = ast.ColumnGenerated + c.Expr, c.GeneratedKind = p.parseGenerated() + default: + return nil + } + c.Span = p.span(start) + return c +} + +// parseDefaultValue implements the DEFAULT alternatives, which accept a +// literal, a signed literal, a parenthesised expression or a bare +// identifier, but not a general expression. +func (p *parser) parseDefaultValue() ast.Expr { + start := p.cur().Pos + switch p.cur().Kind { + case token.LP: + p.advance() + x := p.parseExpr(precLowest) + p.expect(token.RP) + return &ast.ParenExpr{Span: p.span(start), X: x} + case token.PLUS, token.MINUS: + t := p.advance() + op := ast.OpPlus + if t.Kind == token.MINUS { + op = ast.OpMinus + } + return &ast.UnaryExpr{Span: p.span(start), Op: op, X: p.parseTerm()} + } + if p.atTerm() { + return p.parseTerm() + } + // ccons ::= DEFAULT scantok id: the id class is ID|INDEXED. + if !token.IsID(p.cur().Kind) { + p.syntaxError() + } + return identOf(p.advance()) +} + +// atTerm reports whether the lookahead begins a "term": a literal constant. +func (p *parser) atTerm() bool { + switch p.cur().Kind { + case token.NULL, token.FLOAT, token.BLOB, token.STRING, token.INTEGER, + token.QNUMBER, token.CTIME_KW: + return true + } + return false +} + +// parseTerm parses a literal constant. It reuses parsePrimary, which handles +// every "term" alternative. +func (p *parser) parseTerm() ast.Expr { + if !p.atTerm() { + p.syntaxError() + } + return p.parsePrimary() +} + +// parseGenerated implements the "generated" nonterminal. +// +// generated ::= LP expr RP. / generated ::= LP expr RP ID. +// +// The trailing token is the storage class (STORED or VIRTUAL) and is a plain +// TK_ID, so keywords reach it only through %fallback. +func (p *parser) parseGenerated() (ast.Expr, *ast.Ident) { + p.expect(token.LP) + x := p.parseExpr(precLowest) + p.expect(token.RP) + if k := p.cur().Kind; k == token.ID || token.CanFallback(k) { + return x, identOf(p.advance()) + } + return x, nil +} + +// parseOnConflict implements "onconf". +// +// onconf ::= . / onconf ::= ON CONFLICT resolvetype. +func (p *parser) parseOnConflict() ast.ConflictAction { + if !p.at(token.ON) { + return ast.ConflictDefault + } + p.advance() + p.expect(token.CONFLICT) + return p.parseResolveType() +} + +// parseDeferClause implements "defer_subclause". +// +// defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt. +// defer_subclause ::= DEFERRABLE init_deferred_pred_opt. +// init_deferred_pred_opt ::= . / INITIALLY DEFERRED. / INITIALLY IMMEDIATE. +func (p *parser) parseDeferClause() *ast.DeferClause { + start := p.cur().Pos + d := &ast.DeferClause{} + if p.accept(token.NOT) { + d.Not = true + } + p.expect(token.DEFERRABLE) + if p.accept(token.INITIALLY) { + d.HasInitially = true + switch { + case p.accept(token.DEFERRED): + d.InitiallyDeferred = true + case p.accept(token.IMMEDIATE): + default: + p.syntaxError() + } + } + d.Span = p.span(start) + return d +} + +// parseReferences implements a REFERENCES clause and its arguments. +// +// ccons ::= REFERENCES nm eidlist_opt refargs. +// refargs ::= . / refargs ::= refargs refarg. +// refarg ::= MATCH nm. / ON INSERT refact. / ON DELETE refact. / ON UPDATE refact. +// refact ::= SET NULL. / SET DEFAULT. / CASCADE. / RESTRICT. / NO ACTION. +func (p *parser) parseReferences() *ast.ForeignKeyClause { + start := p.expect(token.REFERENCES).Pos + fk := &ast.ForeignKeyClause{Table: p.expectName()} + if p.at(token.LP) { + p.advance() + fk.Columns = p.parseIndexedColumnList() + p.expect(token.RP) + } + for { + aStart := p.cur().Pos + switch p.cur().Kind { + case token.MATCH: + p.advance() + fk.Args = append(fk.Args, &ast.ForeignKeyArg{Span: p.span(aStart), Match: p.expectName()}) + continue + case token.ON: + p.advance() + arg := &ast.ForeignKeyArg{} + switch p.cur().Kind { + case token.INSERT, token.DELETE, token.UPDATE: + arg.Event = p.advance().Text + default: + p.syntaxError() + } + arg.Action = p.parseRefAct() + arg.Span = p.span(aStart) + fk.Args = append(fk.Args, arg) + continue + } + break + } + fk.Span = p.span(start) + return fk +} + +func (p *parser) parseRefAct() ast.ForeignKeyAction { + switch p.cur().Kind { + case token.SET: + p.advance() + switch { + case p.accept(token.NULL): + return ast.FKSetNull + case p.accept(token.DEFAULT): + return ast.FKSetDefault + } + p.syntaxError() + case token.CASCADE: + p.advance() + return ast.FKCascade + case token.RESTRICT: + p.advance() + return ast.FKRestrict + case token.NO: + p.advance() + p.expect(token.ACTION) + return ast.FKNoAction + } + p.syntaxError() + return ast.FKNoAction +} + +// parseTableConstraint implements one "tcons". +// +// tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf. +// tcons ::= UNIQUE LP sortlist RP onconf. / CHECK LP expr RP onconf. +// tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs +// defer_subclause_opt. +func (p *parser) parseTableConstraint(start int) *ast.TableConstraint { + c := &ast.TableConstraint{} + switch p.cur().Kind { + case token.PRIMARY: + p.advance() + p.expect(token.KEY) + p.expect(token.LP) + c.Kind = ast.TablePrimaryKey + c.Columns = p.parseSortList() + if p.accept(token.AUTOINCR) { + c.AutoIncrement = true + } + p.expect(token.RP) + c.OnConflict = p.parseOnConflict() + case token.UNIQUE: + p.advance() + p.expect(token.LP) + c.Kind = ast.TableUnique + c.Columns = p.parseSortList() + p.expect(token.RP) + c.OnConflict = p.parseOnConflict() + case token.CHECK: + p.advance() + p.expect(token.LP) + c.Kind = ast.TableCheck + c.Expr = p.parseExpr(precLowest) + p.expect(token.RP) + c.OnConflict = p.parseOnConflict() + case token.FOREIGN: + p.advance() + p.expect(token.KEY) + p.expect(token.LP) + c.Kind = ast.TableForeignKey + c.FKColumns = p.parseIndexedColumnList() + p.expect(token.RP) + c.References = p.parseReferences() + if p.at(token.DEFERRABLE) || (p.at(token.NOT) && p.peek(1).Kind == token.DEFERRABLE) { + c.Deferrable = p.parseDeferClause() + } + default: + p.syntaxError() + } + c.Span = p.span(start) + return c +} + +// parseTableOptions implements "table_option_set". Unknown options are a +// grammar-action error ("unknown table option: %s"), not a parse error, so +// any name is accepted here. +// +// table_option_set ::= . / table_option. / table_option_set COMMA table_option. +// table_option ::= WITHOUT nm. / table_option ::= nm. +func (p *parser) parseTableOptions(n *ast.CreateTableStmt) { + if !p.at(token.WITHOUT) && !token.IsName(p.cur().Kind) { + return + } + for { + without := p.accept(token.WITHOUT) + n.Options = append(n.Options, p.expectName()) + n.WithoutOpt = append(n.WithoutOpt, without) + if !p.accept(token.COMMA) { + return + } + } +} + +// parseCreateIndex implements CREATE INDEX. +// +// cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP +// where_opt. +func (p *parser) parseCreateIndex(start int, unique bool) ast.Stmt { + p.expect(token.INDEX) + n := &ast.CreateIndexStmt{Unique: unique} + n.IfNotExists = p.parseIfNotExists() + n.Name = p.qualifiedName() + p.expect(token.ON) + n.Table = p.expectName() + p.expect(token.LP) + n.Columns = p.parseSortList() + p.expect(token.RP) + if p.accept(token.WHERE) { + n.Where = p.parseExpr(precLowest) + } + n.Span = p.span(start) + return n +} + +// parseCreateView implements CREATE VIEW. +// +// cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select. +func (p *parser) parseCreateView(start int, temp bool) ast.Stmt { + p.expect(token.VIEW) + n := &ast.CreateViewStmt{Temp: temp} + n.IfNotExists = p.parseIfNotExists() + n.Name = p.qualifiedName() + if p.at(token.LP) { + p.advance() + n.Columns = p.parseIndexedColumnList() + p.expect(token.RP) + } + p.expect(token.AS) + n.Select = p.parseSelect() + n.Span = p.span(start) + return n +} + +// parseCreateVirtualTable implements CREATE VIRTUAL TABLE. Module arguments +// are an arbitrary balanced token sequence: the grammar matches them with +// %wildcard ANY and keeps only their source text. +// +// create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm. +// cmd ::= create_vtab. / cmd ::= create_vtab LP vtabarglist RP. +// vtabarglist ::= vtabarg. / vtabarglist COMMA vtabarg. +// vtabarg ::= . / vtabarg vtabargtoken. +// vtabargtoken ::= ANY. / lp anylist RP. +// anylist ::= . / anylist LP anylist RP. / anylist ANY. +func (p *parser) parseCreateVirtualTable(start int) ast.Stmt { + p.expect(token.VIRTUAL) + p.expect(token.TABLE) + n := &ast.CreateVirtualTableStmt{} + n.IfNotExists = p.parseIfNotExists() + n.Name = p.qualifiedName() + p.expect(token.USING) + n.Module = p.expectName() + if p.at(token.LP) { + p.advance() + n.HasArgs = true + n.Args = p.parseVTabArgs() + p.expect(token.RP) + } + n.Span = p.span(start) + return n +} + +func (p *parser) parseVTabArgs() []string { + var args []string + depth := 0 + argStart := p.cur().Pos + argEnd := argStart + for { + t := p.cur() + switch { + case t.Kind == token.EOF: + p.syntaxError() + case t.Kind == token.LP: + depth++ + case t.Kind == token.RP: + if depth == 0 { + return append(args, p.src[argStart:argEnd]) + } + depth-- + case t.Kind == token.COMMA && depth == 0: + args = append(args, p.src[argStart:argEnd]) + p.advance() + argStart, argEnd = p.cur().Pos, p.cur().Pos + continue + } + p.advance() + argEnd = t.End + } +} + +// parseDrop implements the four DROP commands. +// +// cmd ::= DROP TABLE ifexists fullname. / DROP VIEW ifexists fullname. +// cmd ::= DROP INDEX ifexists fullname. / DROP TRIGGER ifexists fullname. +func (p *parser) parseDrop() ast.Stmt { + start := p.expect(token.DROP).Pos + kind := p.cur().Kind + switch kind { + case token.TABLE, token.VIEW, token.INDEX, token.TRIGGER: + p.advance() + default: + p.syntaxError() + } + ifExists := p.parseIfExists() + name := p.qualifiedName() + span := p.span(start) + switch kind { + case token.TABLE: + return &ast.DropTableStmt{Span: span, IfExists: ifExists, Name: name} + case token.VIEW: + return &ast.DropViewStmt{Span: span, IfExists: ifExists, Name: name} + case token.INDEX: + return &ast.DropIndexStmt{Span: span, IfExists: ifExists, Name: name} + default: + return &ast.DropTriggerStmt{Span: span, IfExists: ifExists, Name: name} + } +} + +// parseAlterTable implements every ALTER TABLE form of the pinned build. +// +// cmd ::= ALTER TABLE fullname RENAME TO nm. +// cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm. +// cmd ::= alter_add carglist. +// alter_add ::= ALTER TABLE fullname ADD kwcolumn_opt nm typetoken. +// cmd ::= ALTER TABLE fullname ADD CONSTRAINT nm CHECK LP expr RP onconf. +// cmd ::= ALTER TABLE fullname ADD CHECK LP expr RP onconf. +// cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm. +// cmd ::= ALTER TABLE fullname DROP CONSTRAINT nm. +// cmd ::= ALTER TABLE fullname ALTER kwcolumn_opt nm DROP NOT NULL. +// cmd ::= ALTER TABLE fullname ALTER kwcolumn_opt nm SET NOT NULL onconf. +// kwcolumn_opt ::= . / kwcolumn_opt ::= COLUMNKW. +func (p *parser) parseAlterTable() ast.Stmt { + start := p.expect(token.ALTER).Pos + p.expect(token.TABLE) + n := &ast.AlterTableStmt{Table: p.qualifiedName()} + switch p.cur().Kind { + case token.RENAME: + p.advance() + if p.accept(token.TO) { + n.Action = ast.AlterRenameTable + n.NewName = p.expectName() + break + } + n.Action = ast.AlterRenameColumn + n.ColumnKeyword = p.accept(token.COLUMNKW) + n.Column = p.expectName() + p.expect(token.TO) + n.NewName = p.expectName() + case token.ADD: + p.advance() + switch p.cur().Kind { + case token.CONSTRAINT: + p.advance() + n.Action = ast.AlterAddConstraintCheck + n.ConstraintName = p.expectName() + p.expect(token.CHECK) + p.expect(token.LP) + n.Expr = p.parseExpr(precLowest) + p.expect(token.RP) + n.OnConflict = p.parseOnConflict() + case token.CHECK: + p.advance() + n.Action = ast.AlterAddConstraintCheck + p.expect(token.LP) + n.Expr = p.parseExpr(precLowest) + p.expect(token.RP) + n.OnConflict = p.parseOnConflict() + default: + n.Action = ast.AlterAddColumn + n.ColumnKeyword = p.accept(token.COLUMNKW) + n.ColumnDef = p.parseColumnDef() + n.Column = n.ColumnDef.Name + } + case token.DROP: + p.advance() + if p.at(token.CONSTRAINT) { + p.advance() + n.Action = ast.AlterDropConstraint + n.ConstraintName = p.expectName() + break + } + n.Action = ast.AlterDropColumn + n.ColumnKeyword = p.accept(token.COLUMNKW) + n.Column = p.expectName() + case token.ALTER: + p.advance() + n.ColumnKeyword = p.accept(token.COLUMNKW) + n.Column = p.expectName() + switch { + case p.accept(token.DROP): + n.Action = ast.AlterDropNotNull + p.expect(token.NOT) + p.expect(token.NULL) + case p.accept(token.SET): + n.Action = ast.AlterSetNotNull + p.expect(token.NOT) + p.expect(token.NULL) + n.OnConflict = p.parseOnConflict() + default: + p.syntaxError() + } + default: + p.syntaxError() + } + n.Span = p.span(start) + return n +} diff --git a/parser/parse_dml.go b/parser/parse_dml.go new file mode 100644 index 0000000..628bd6e --- /dev/null +++ b/parser/parse_dml.go @@ -0,0 +1,222 @@ +package parser + +import ( + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/token" +) + +// parseInsert implements the INSERT and REPLACE commands. +// +// cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert. +// cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning. +// insert_cmd ::= INSERT orconf. / insert_cmd ::= REPLACE. +func (p *parser) parseInsert(with *ast.With, start int) ast.Stmt { + n := &ast.InsertStmt{With: with} + if p.accept(token.REPLACE) { + n.Replace = true + } else { + p.expect(token.INSERT) + n.OrConflict = p.parseOrConflict() + } + p.expect(token.INTO) + n.Table, n.Alias = p.xfullname() + // idlist_opt ::= . / idlist_opt ::= LP idlist RP. A "select" never + // starts with "(", so a leading "(" is always the column list. + if p.at(token.LP) { + p.advance() + n.Columns = p.parseIDList() + p.expect(token.RP) + } + if p.at(token.DEFAULT) { + p.advance() + p.expect(token.VALUES) + n.DefaultValues = true + n.Returning = p.parseReturning() + n.Span = p.span(start) + return n + } + n.Select = p.parseSelect() + p.parseUpsert(n) + n.Span = p.span(start) + return n +} + +// parseOrConflict implements "orconf". +// +// orconf ::= . / orconf ::= OR resolvetype. +// resolvetype ::= raisetype. / IGNORE. / REPLACE. +// raisetype ::= ROLLBACK. / ABORT. / FAIL. +func (p *parser) parseOrConflict() ast.ConflictAction { + if !p.accept(token.OR) { + return ast.ConflictDefault + } + return p.parseResolveType() +} + +func (p *parser) parseResolveType() ast.ConflictAction { + switch p.cur().Kind { + case token.ROLLBACK: + p.advance() + return ast.ConflictRollback + case token.ABORT: + p.advance() + return ast.ConflictAbort + case token.FAIL: + p.advance() + return ast.ConflictFail + case token.IGNORE: + p.advance() + return ast.ConflictIgnore + case token.REPLACE: + p.advance() + return ast.ConflictReplace + } + p.syntaxError() + return ast.ConflictDefault +} + +// parseUpsert implements the "upsert" chain and the trailing RETURNING. +// +// upsert ::= . / upsert ::= RETURNING selcollist. +// upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist +// where_opt upsert. +// upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert. +// upsert ::= ON CONFLICT DO NOTHING returning. +// upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning. +// +// Only a targeted clause (one with a conflict target) may be followed by +// another; an untargeted one ends the chain. +func (p *parser) parseUpsert(n *ast.InsertStmt) { + for p.at(token.ON) { + start := p.advance().Pos + p.expect(token.CONFLICT) + u := &ast.Upsert{} + targeted := false + if p.at(token.LP) { + p.advance() + u.Target = p.parseSortList() + p.expect(token.RP) + if p.accept(token.WHERE) { + u.TargetWhere = p.parseExpr(precLowest) + } + targeted = true + } + p.expect(token.DO) + if p.accept(token.NOTHING) { + u.DoNothing = true + } else { + p.expect(token.UPDATE) + p.expect(token.SET) + u.Set = p.parseSetList() + if p.accept(token.WHERE) { + u.Where = p.parseExpr(precLowest) + } + } + u.Span = p.span(start) + n.Upserts = append(n.Upserts, u) + if !targeted { + break + } + } + n.Returning = p.parseReturning() +} + +// parseReturning implements the "returning" nonterminal. +// +// returning ::= RETURNING selcollist. / returning ::= . +func (p *parser) parseReturning() []*ast.ResultColumn { + if !p.accept(token.RETURNING) { + return nil + } + return p.parseResultColumns() +} + +// parseSetList implements "setlist". +// +// setlist ::= nm EQ expr. / setlist ::= LP idlist RP EQ expr. +// setlist ::= setlist COMMA nm EQ expr. / setlist COMMA LP idlist RP EQ expr. +func (p *parser) parseSetList() []*ast.SetPair { + var out []*ast.SetPair + for { + start := p.cur().Pos + pair := &ast.SetPair{} + if p.at(token.LP) { + p.advance() + pair.Columns = p.parseIDList() + pair.Paren = true + p.expect(token.RP) + } else { + pair.Columns = []*ast.Ident{p.expectName()} + } + p.expect(token.EQ) + pair.Value = p.parseExpr(precLowest) + pair.Span = p.span(start) + out = append(out, pair) + if !p.accept(token.COMMA) { + return out + } + } +} + +// parseUpdate implements the UPDATE command. +// +// cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from +// where_opt_ret. +func (p *parser) parseUpdate(with *ast.With, start int) ast.Stmt { + p.expect(token.UPDATE) + n := &ast.UpdateStmt{With: with} + n.OrConflict = p.parseOrConflict() + n.Table, n.Alias = p.xfullname() + n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() + p.expect(token.SET) + n.Set = p.parseSetList() + if p.accept(token.FROM) { + n.From = p.parseFromList() + } + n.Where, n.Returning = p.parseWhereOptRet() + n.Span = p.span(start) + return n +} + +// parseDelete implements the DELETE command. +// +// cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret. +func (p *parser) parseDelete(with *ast.With, start int) ast.Stmt { + p.expect(token.DELETE) + p.expect(token.FROM) + n := &ast.DeleteStmt{With: with} + n.Table, n.Alias = p.xfullname() + n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() + n.Where, n.Returning = p.parseWhereOptRet() + n.Span = p.span(start) + return n +} + +// parseIndexedOpt implements "indexed_opt". +// +// indexed_opt ::= . / indexed_by ::= INDEXED BY nm. / indexed_by ::= NOT INDEXED. +func (p *parser) parseIndexedOpt() (*ast.Ident, bool) { + switch { + case p.at(token.INDEXED): + p.advance() + p.expect(token.BY) + return p.expectName(), false + case p.at(token.NOT) && p.peek(1).Kind == token.INDEXED: + p.advance() + p.advance() + return nil, true + } + return nil, false +} + +// parseWhereOptRet implements "where_opt_ret". +// +// where_opt_ret ::= . / WHERE expr. / RETURNING selcollist. +// where_opt_ret ::= WHERE expr RETURNING selcollist. +func (p *parser) parseWhereOptRet() (ast.Expr, []*ast.ResultColumn) { + var where ast.Expr + if p.accept(token.WHERE) { + where = p.parseExpr(precLowest) + } + return where, p.parseReturning() +} diff --git a/parser/parse_expr.go b/parser/parse_expr.go new file mode 100644 index 0000000..8e90a84 --- /dev/null +++ b/parser/parse_expr.go @@ -0,0 +1,724 @@ +package parser + +import ( + "strconv" + "strings" + + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/token" +) + +// Operator precedence, transcribed from the %left/%right/%nonassoc block of +// parse.y in the order it declares them (lowest binding first): +// +// %left OR. %left AND. %right NOT. +// %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ. +// %left GT LE LT GE. %right ESCAPE. +// %left BITAND BITOR LSHIFT RSHIFT. %left PLUS MINUS. +// %left STAR SLASH REM. %left CONCAT PTR. %left COLLATE. %right BITNOT. +// +// Rather than eleven mutually recursive functions, parseExpr climbs the +// ladder: parseExpr(min) consumes every operator whose precedence is at +// least min. A left-associative operator of precedence n parses its right +// operand at min n+1, which is what "reduce on equal precedence" means. +const ( + precLowest = 0 + precOr = 1 + precAnd = 2 + precNot = 3 + precCompare = 4 // IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ + precRelational = 5 // GT LE LT GE + precEscape = 6 + precBitwise = 7 + precAdd = 8 + precMul = 9 + precConcat = 10 + precCollate = 11 + precUnary = 12 // BITNOT, and the [BITNOT] mark on unary PLUS/MINUS +) + +// parseExpr parses an expression, consuming operators of precedence min and +// above. +func (p *parser) parseExpr(min int) ast.Expr { + return p.parseOperators(p.parsePrefix(), min) +} + +// parsePrefix handles the prefix operators and then a primary expression. +// +// expr ::= NOT expr. / expr ::= BITNOT expr. / expr ::= PLUS|MINUS expr. [BITNOT] +func (p *parser) parsePrefix() ast.Expr { + t := p.cur() + switch t.Kind { + case token.NOT: + p.advance() + return &ast.UnaryExpr{Span: p.span(t.Pos), Op: ast.OpNot, X: p.parseExpr(precNot + 1)} + case token.BITNOT: + p.advance() + x := p.parseExpr(precUnary + 1) + return &ast.UnaryExpr{Span: ast.Span{Start: t.Pos, Stop: x.End()}, Op: ast.OpBitNot, X: x} + case token.PLUS, token.MINUS: + p.advance() + op := ast.OpPlus + if t.Kind == token.MINUS { + op = ast.OpMinus + } + x := p.parseExpr(precUnary + 1) + return &ast.UnaryExpr{Span: ast.Span{Start: t.Pos, Stop: x.End()}, Op: op, X: x} + } + return p.parsePrimary() +} + +// parseOperators is the climbing loop: it extends x with every infix or +// postfix operator whose precedence is at least min. +func (p *parser) parseOperators(x ast.Expr, min int) ast.Expr { + for { + t := p.cur() + switch t.Kind { + case token.OR: + if precOr < min { + return x + } + x = p.binary(x, ast.OpOr, precOr) + case token.AND: + if precAnd < min { + return x + } + x = p.binary(x, ast.OpAnd, precAnd) + case token.EQ: + if precCompare < min { + return x + } + x = p.binary(x, ast.OpEq, precCompare) + case token.NE: + if precCompare < min { + return x + } + x = p.binary(x, ast.OpNe, precCompare) + case token.LT, token.LE, token.GT, token.GE: + if precRelational < min { + return x + } + op := map[token.Kind]ast.Operator{ + token.LT: ast.OpLt, token.LE: ast.OpLe, + token.GT: ast.OpGt, token.GE: ast.OpGe, + }[t.Kind] + x = p.binary(x, op, precRelational) + case token.BITAND, token.BITOR, token.LSHIFT, token.RSHIFT: + if precBitwise < min { + return x + } + op := map[token.Kind]ast.Operator{ + token.BITAND: ast.OpBitAnd, token.BITOR: ast.OpBitOr, + token.LSHIFT: ast.OpLShift, token.RSHIFT: ast.OpRShift, + }[t.Kind] + x = p.binary(x, op, precBitwise) + case token.PLUS, token.MINUS: + if precAdd < min { + return x + } + op := ast.OpAdd + if t.Kind == token.MINUS { + op = ast.OpSub + } + x = p.binary(x, op, precAdd) + case token.STAR, token.SLASH, token.REM: + if precMul < min { + return x + } + op := map[token.Kind]ast.Operator{ + token.STAR: ast.OpMul, token.SLASH: ast.OpDiv, token.REM: ast.OpMod, + }[t.Kind] + x = p.binary(x, op, precMul) + case token.CONCAT: + if precConcat < min { + return x + } + x = p.binary(x, ast.OpConcat, precConcat) + case token.PTR: + // expr ::= expr PTR expr. The "->" and "->>" spellings share a + // token; the text distinguishes them. + if precConcat < min { + return x + } + op := ast.OpPtr + if t.Text == "->>" { + op = ast.OpPtr2 + } + x = p.binary(x, op, precConcat) + case token.COLLATE: + // expr ::= expr COLLATE ids. + if precCollate < min { + return x + } + p.advance() + name := p.expectIDS() + x = &ast.CollateExpr{Span: ast.Span{Start: x.Pos(), Stop: name.End()}, X: x, Name: name} + case token.ISNULL, token.NOTNULL: + // expr ::= expr ISNULL|NOTNULL. + if precCompare < min { + return x + } + p.advance() + x = &ast.NullCheckExpr{ + Span: ast.Span{Start: x.Pos(), Stop: p.prevEnd()}, + Not: t.Kind == token.NOTNULL, + X: x, + } + case token.IS: + if precCompare < min { + return x + } + x = p.parseIs(x) + case token.LIKE_KW, token.MATCH: + if precCompare < min { + return x + } + x = p.parseLike(x, false) + case token.BETWEEN: + if precCompare < min { + return x + } + x = p.parseBetween(x, false) + case token.IN: + if precCompare < min { + return x + } + x = p.parseIn(x, false) + case token.NOT: + // The negated postfix forms all begin with NOT: + // + // expr ::= expr NOT NULL. [NOT] + // likeop ::= NOT LIKE_KW|MATCH. [LIKE_KW] + // between_op ::= NOT BETWEEN. / in_op ::= NOT IN. + // + // "expr NOT NULL" takes its precedence from its leftmost + // terminal, NOT; the others are marked with the operator they + // negate. Deciding needs one more token of lookahead. + next := p.peek(1).Kind + prec := precCompare + if next == token.NULL { + prec = precNot + } + if prec < min { + return x + } + p.advance() // NOT + switch next { + case token.NULL: + p.advance() + x = &ast.NullCheckExpr{Span: ast.Span{Start: x.Pos(), Stop: p.prevEnd()}, Not: true, X: x} + case token.LIKE_KW, token.MATCH: + x = p.parseLike(x, true) + case token.BETWEEN: + x = p.parseBetween(x, true) + case token.IN: + x = p.parseIn(x, true) + default: + // SQLite shifts the NOT and only then finds it has no + // continuation, so the error names the following token. + p.syntaxError() + } + default: + return x + } + } +} + +// binary consumes a left-associative infix operator and its right operand. +func (p *parser) binary(x ast.Expr, op ast.Operator, prec int) ast.Expr { + p.advance() + y := p.parseExpr(prec + 1) + return &ast.BinaryExpr{Span: ast.Span{Start: x.Pos(), Stop: y.End()}, Op: op, X: x, Y: y} +} + +// parseIs implements the four IS forms. +// +// expr ::= expr IS expr. / expr IS NOT expr. +// expr ::= expr IS NOT DISTINCT FROM expr. / expr IS DISTINCT FROM expr. +func (p *parser) parseIs(x ast.Expr) ast.Expr { + p.advance() // IS + n := &ast.IsExpr{X: x} + if p.accept(token.NOT) { + n.Not = true + } + // DISTINCT is not in the %fallback set, so it can only be the keyword. + if p.at(token.DISTINCT) { + p.advance() + p.expect(token.FROM) + n.Distinct = true + } + n.Y = p.parseExpr(precCompare + 1) + n.Span = ast.Span{Start: x.Pos(), Stop: n.Y.End()} + return n +} + +// parseLike implements the LIKE/GLOB/REGEXP/MATCH operators. +// +// likeop ::= LIKE_KW|MATCH. / likeop ::= NOT LIKE_KW|MATCH. +// expr ::= expr likeop expr. [LIKE_KW] +// expr ::= expr likeop expr ESCAPE expr. [LIKE_KW] +func (p *parser) parseLike(x ast.Expr, not bool) ast.Expr { + op := identOf(p.advance()) + n := &ast.LikeExpr{Op: op, Not: not, X: x} + n.Y = p.parseExpr(precCompare + 1) + if p.at(token.ESCAPE) { + // %right ESCAPE binds tighter than the LIKE rule, so the escape + // operand absorbs everything above LIKE_KW's own precedence. + p.advance() + n.Escape = p.parseExpr(precCompare + 1) + } + n.Span = ast.Span{Start: x.Pos(), Stop: p.prevEnd()} + return n +} + +// parseBetween implements the BETWEEN operator. The lower bound stops short +// of AND, which belongs to the BETWEEN rule itself. +// +// expr ::= expr between_op expr AND expr. [BETWEEN] +func (p *parser) parseBetween(x ast.Expr, not bool) ast.Expr { + p.advance() // BETWEEN + n := &ast.BetweenExpr{Not: not, X: x} + n.Lo = p.parseExpr(precAnd + 1) + p.expect(token.AND) + n.Hi = p.parseExpr(precCompare + 1) + n.Span = ast.Span{Start: x.Pos(), Stop: n.Hi.End()} + return n +} + +// parseIn implements the three IN right-hand sides. +// +// expr ::= expr in_op LP exprlist RP. [IN] +// expr ::= expr in_op LP select RP. [IN] +// expr ::= expr in_op nm dbnm paren_exprlist. [IN] +func (p *parser) parseIn(x ast.Expr, not bool) ast.Expr { + p.advance() // IN + n := &ast.InExpr{Not: not, X: x} + if p.at(token.LP) { + p.advance() + n.Parens = true + if p.atSelect() { + n.Select = p.parseSelect() + } else if !p.at(token.RP) { + n.List = p.parseExprList() + } + p.expect(token.RP) + } else { + n.Table = p.qualifiedName() + if p.at(token.LP) { // paren_exprlist + p.advance() + n.HasArgs = true + if !p.at(token.RP) { + n.Args = p.parseExprList() + } + p.expect(token.RP) + } + } + n.Span = ast.Span{Start: x.Pos(), Stop: p.prevEnd()} + return n +} + +// atSelect reports whether the lookahead can begin a "select": the only +// three possibilities are SELECT, VALUES and WITH. +func (p *parser) atSelect() bool { + switch p.cur().Kind { + case token.SELECT, token.VALUES, token.WITH: + return true + } + return false +} + +// parseExprList implements "nexprlist": one or more comma-separated +// expressions. +func (p *parser) parseExprList() []ast.Expr { + list := []ast.Expr{p.parseExpr(precLowest)} + for p.accept(token.COMMA) { + list = append(list, p.parseExpr(precLowest)) + } + return list +} + +// parsePrimary implements the non-operator "expr" and "term" alternatives. +func (p *parser) parsePrimary() ast.Expr { + t := p.cur() + switch t.Kind { + case token.LP: + return p.parseParenExpr() + + case token.NULL: + p.advance() + return &ast.Literal{Span: spanOf(t), Kind: ast.LitNull, Value: t.Text, Raw: t.Text} + case token.INTEGER: + p.advance() + return &ast.Literal{Span: spanOf(t), Kind: ast.LitInteger, Value: t.Text, Raw: t.Text} + case token.FLOAT: + p.advance() + return &ast.Literal{Span: spanOf(t), Kind: ast.LitFloat, Value: t.Text, Raw: t.Text} + case token.BLOB: + p.advance() + return &ast.Literal{Span: spanOf(t), Kind: ast.LitBlob, Value: t.Text, Raw: t.Text} + case token.QNUMBER: + // term ::= QNUMBER. The grammar action dequotes the digit + // separators and rejects misplaced ones. + p.advance() + value := p.dequoteNumber(t) + kind := ast.LitInteger + if strings.ContainsAny(value, ".eE") && !strings.HasPrefix(strings.ToLower(value), "0x") { + kind = ast.LitFloat + } + return &ast.Literal{Span: spanOf(t), Kind: kind, Value: value, Raw: t.Text} + + case token.STRING: + // STRING is both a literal and a member of "nm", so "'a'.'b'" is a + // qualified reference rather than a string. + if p.peek(1).Kind == token.DOT { + return p.parseQualifiedRef() + } + p.advance() + return &ast.Literal{ + Span: spanOf(t), Kind: ast.LitString, + Value: dequote(t.Text, '\''), Raw: t.Text, + } + + case token.CTIME_KW: + // term ::= CTIME_KW. CTIME_KW falls back to ID elsewhere, but here + // it has a shift action, so it is always the keyword. + p.advance() + kind := ast.LitCurrentTimestamp + switch strings.ToUpper(t.Text) { + case "CURRENT_DATE": + kind = ast.LitCurrentDate + case "CURRENT_TIME": + kind = ast.LitCurrentTime + } + return &ast.Literal{Span: spanOf(t), Kind: kind, Value: t.Text, Raw: t.Text} + + case token.VARIABLE: + p.advance() + return p.bindParam(t) + + case token.CAST: + // expr ::= CAST LP expr AS typetoken RP. + p.advance() + p.expect(token.LP) + x := p.parseExpr(precLowest) + p.expect(token.AS) + typ := p.parseTypeToken() + p.expect(token.RP) + return &ast.CastExpr{Span: p.span(t.Pos), X: x, Type: typ} + + case token.CASE: + return p.parseCase() + + case token.EXISTS: + // expr ::= EXISTS LP select RP. + p.advance() + p.expect(token.LP) + sel := p.parseSelect() + p.expect(token.RP) + return &ast.ExistsExpr{Span: p.span(t.Pos), Select: sel} + + case token.RAISE: + return p.parseRaise() + } + + if token.IsIDJ(t.Kind) { + switch p.peek(1).Kind { + case token.LP: + return p.parseFuncCall() + case token.DOT: + return p.parseQualifiedRef() + } + p.advance() + return identOf(t) + } + p.syntaxError() + return nil +} + +func spanOf(t token.Token) ast.Span { return ast.Span{Start: t.Pos, Stop: t.End} } + +// parseParenExpr distinguishes the three parenthesised forms. +// +// expr ::= LP expr RP. / expr ::= LP nexprlist COMMA expr RP. +// expr ::= LP select RP. +func (p *parser) parseParenExpr() ast.Expr { + start := p.expect(token.LP).Pos + if p.atSelect() { + sel := p.parseSelect() + p.expect(token.RP) + return &ast.SubqueryExpr{Span: p.span(start), Select: sel} + } + first := p.parseExpr(precLowest) + if !p.at(token.COMMA) { + p.expect(token.RP) + return &ast.ParenExpr{Span: p.span(start), X: first} + } + list := []ast.Expr{first} + for p.accept(token.COMMA) { + list = append(list, p.parseExpr(precLowest)) + } + p.expect(token.RP) + return &ast.VectorExpr{Span: p.span(start), List: list} +} + +// parseQualifiedRef implements the dotted column references. +// +// expr ::= nm DOT nm. / expr ::= nm DOT nm DOT nm. +func (p *parser) parseQualifiedRef() ast.Expr { + parts := []*ast.Ident{p.expectName()} + p.expect(token.DOT) + parts = append(parts, p.expectName()) + if p.at(token.DOT) { + p.advance() + parts = append(parts, p.expectName()) + } + return &ast.QualifiedRef{ + Span: ast.Span{Start: parts[0].Pos(), Stop: parts[len(parts)-1].End()}, + Parts: parts, + } +} + +// parseCase implements CASE. +// +// expr ::= CASE case_operand case_exprlist case_else END. +func (p *parser) parseCase() ast.Expr { + start := p.expect(token.CASE).Pos + n := &ast.CaseExpr{} + if !p.at(token.WHEN) { // case_operand ::= expr. / case_operand ::= . + n.Operand = p.parseExpr(precLowest) + } + for p.at(token.WHEN) { // case_exprlist is one or more WHEN/THEN pairs + wStart := p.advance().Pos + when := p.parseExpr(precLowest) + p.expect(token.THEN) + then := p.parseExpr(precLowest) + n.Whens = append(n.Whens, &ast.CaseWhen{Span: p.span(wStart), When: when, Then: then}) + } + if len(n.Whens) == 0 { + p.syntaxError() + } + if p.accept(token.ELSE) { + n.Else = p.parseExpr(precLowest) + } + p.expect(token.END) + n.Span = p.span(start) + return n +} + +// parseRaise implements the trigger-only RAISE expression. +// +// expr ::= RAISE LP IGNORE RP. +// expr ::= RAISE LP raisetype COMMA expr RP. +// raisetype ::= ROLLBACK. / ABORT. / FAIL. +func (p *parser) parseRaise() ast.Expr { + start := p.expect(token.RAISE).Pos + p.expect(token.LP) + n := &ast.RaiseExpr{} + switch p.cur().Kind { + case token.IGNORE: + n.Action = "IGNORE" + p.advance() + case token.ROLLBACK, token.ABORT, token.FAIL: + n.Action = strings.ToUpper(p.advance().Text) + p.expect(token.COMMA) + n.Message = p.parseExpr(precLowest) + default: + p.syntaxError() + } + p.expect(token.RP) + n.Span = p.span(start) + return n +} + +// parseFuncCall implements the function-call forms and their window +// decorations. +// +// expr ::= idj LP distinct exprlist RP filter_over. +// expr ::= idj LP distinct exprlist ORDER BY sortlist RP filter_over. +// expr ::= idj LP STAR RP filter_over. +func (p *parser) parseFuncCall() ast.Expr { + name := identOf(p.advance()) + n := &ast.FuncCall{Name: name} + p.expect(token.LP) + if p.at(token.STAR) { + p.advance() + n.Star = true + } else { + switch p.cur().Kind { // distinct ::= DISTINCT. / ALL. / . + case token.DISTINCT: + p.advance() + n.Distinct = true + case token.ALL: + p.advance() + n.All = true + } + if !p.at(token.RP) && !p.at(token.ORDER) { + n.Args = p.parseExprList() + } + if p.at(token.ORDER) { // aggregate inner ORDER BY + p.advance() + p.expect(token.BY) + n.OrderBy = p.parseSortList() + } + } + p.expect(token.RP) + p.parseFilterOver(n) + n.Span = ast.Span{Start: name.Pos(), Stop: p.prevEnd()} + return n +} + +// parseFilterOver implements the optional FILTER and OVER decorations. The +// tokenizer has already decided whether FILTER and OVER are keywords here +// (see lexer.resolveWindowKeywords), so no lookahead is needed. +// +// filter_over ::= filter_clause over_clause. / over_clause. / filter_clause. +// filter_clause ::= FILTER LP WHERE expr RP. +// over_clause ::= OVER LP window RP. / over_clause ::= OVER nm. +func (p *parser) parseFilterOver(n *ast.FuncCall) { + if p.at(token.FILTER) { + p.advance() + p.expect(token.LP) + p.expect(token.WHERE) + n.Filter = p.parseExpr(precLowest) + p.expect(token.RP) + } + if p.at(token.OVER) { + start := p.advance().Pos + if p.at(token.LP) { + p.advance() + n.Over = p.parseWindow() + p.expect(token.RP) + n.Over.Span = p.span(start) + } else { + base := p.expectName() + n.Over = &ast.WindowDef{Span: p.span(start), Base: base, NameOnly: true} + } + } +} + +// parseTypeToken implements "typetoken", the concatenation of one or more +// identifier tokens with an optional size specification. The whole thing may +// be empty, which is how "x" and "CAST(1 AS )" both work. +// +// typetoken ::= . / typename. / typename LP signed RP. +// typetoken ::= typename LP signed COMMA signed RP. +// typename ::= ids. / typename ::= typename ids. +func (p *parser) parseTypeToken() *ast.TypeName { + if !token.IsIDS(p.cur().Kind) { + return nil + } + start := p.cur().Pos + var words []string + for token.IsIDS(p.cur().Kind) { + words = append(words, p.advance().Text) + } + n := &ast.TypeName{Name: strings.Join(words, " ")} + if p.at(token.LP) { + p.advance() + n.Args = append(n.Args, p.parseSignedNumber()) + if p.accept(token.COMMA) { + n.Args = append(n.Args, p.parseSignedNumber()) + } + p.expect(token.RP) + } + n.Span = p.span(start) + n.Raw = p.src[start:n.Stop] + return n +} + +// parseSignedNumber implements "signed": an INTEGER or FLOAT with an +// optional sign. +// +// signed ::= plus_num. / signed ::= minus_num. +// plus_num ::= PLUS number. / plus_num ::= number. +// minus_num ::= MINUS number. +func (p *parser) parseSignedNumber() string { + var sign string + if p.at(token.PLUS) || p.at(token.MINUS) { + sign = p.advance().Text + } + if !p.at(token.INTEGER) && !p.at(token.FLOAT) { + p.syntaxError() + } + return sign + p.advance().Text +} + +// bindParam builds a BindParam and assigns its number the way +// sqlite3ExprAssignVarNumber does. +// +// expr ::= VARIABLE. +func (p *parser) bindParam(t token.Token) ast.Expr { + // "#NNN" is a VDBE register reference, legal only during a nested + // parse. User-facing SQLite reports a plain syntax error for it. + if len(t.Text) >= 2 && t.Text[0] == '#' && t.Text[1] >= '0' && t.Text[1] <= '9' { + p.syntaxErrorAt(t) + } + n := &ast.BindParam{Span: spanOf(t), Raw: t.Text} + switch { + case t.Text == "?": + n.Kind = ast.ParamAnon + p.nVar++ + n.Number = p.nVar + case t.Text[0] == '?': + n.Kind = ast.ParamNumber + v, err := strconv.Atoi(t.Text[1:]) + if err == nil { + n.Number = v + if v > p.nVar { + p.nVar = v + } + } + default: + switch t.Text[0] { + case ':': + n.Kind = ast.ParamColon + case '@': + n.Kind = ast.ParamAt + default: + n.Kind = ast.ParamDollar + } + n.Name = t.Text[1:] + if v, ok := p.varNums[t.Text]; ok { + n.Number = v + } else { + p.nVar++ + n.Number = p.nVar + p.varNums[t.Text] = p.nVar + } + } + return n +} + +// dequoteNumber removes '_' digit separators from a QNUMBER, reporting +// SQLite's "unrecognized token" error for a separator that is not between +// two digits. It reproduces sqlite3DequoteNumber, including its habit of +// reporting the partially rewritten token rather than the original. +func (p *parser) dequoteNumber(t token.Token) string { + in := []byte(t.Text) + buf := append([]byte(nil), in...) + bHex := len(in) > 1 && in[0] == '0' && (in[1] == 'x' || in[1] == 'X') + isok := func(c byte) bool { + if bHex { + return isHexDigit(c) + } + return c >= '0' && c <= '9' + } + out := 0 + for i := 0; i < len(buf); i++ { + if buf[i] != '_' { + buf[out] = buf[i] + out++ + continue + } + prevOK := out > 0 && isok(buf[out-1]) + nextOK := i+1 < len(buf) && isok(buf[i+1]) + if !prevOK || !nextOK { + p.fail(`unrecognized token: "`+string(buf)+`"`, t.Pos) + } + } + return string(buf[:out]) +} + +func isHexDigit(c byte) bool { + return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') +} diff --git a/parser/parse_misc.go b/parser/parse_misc.go new file mode 100644 index 0000000..f4d4ce0 --- /dev/null +++ b/parser/parse_misc.go @@ -0,0 +1,203 @@ +package parser + +import ( + "strings" + + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/token" +) + +// parseBegin implements BEGIN. +// +// cmd ::= BEGIN transtype trans_opt. +// transtype ::= . / DEFERRED. / IMMEDIATE. / EXCLUSIVE. +func (p *parser) parseBegin() ast.Stmt { + start := p.expect(token.BEGIN).Pos + n := &ast.BeginStmt{} + switch p.cur().Kind { + case token.DEFERRED: + p.advance() + n.Type, n.HasType = ast.TxnDeferred, true + case token.IMMEDIATE: + p.advance() + n.Type, n.HasType = ast.TxnImmediate, true + case token.EXCLUSIVE: + p.advance() + n.Type, n.HasType = ast.TxnExclusive, true + } + n.Name = p.parseTransOpt() + n.Span = p.span(start) + return n +} + +// parseTransOpt implements "trans_opt". +// +// trans_opt ::= . / TRANSACTION. / TRANSACTION nm. +func (p *parser) parseTransOpt() *ast.Ident { + if !p.accept(token.TRANSACTION) { + return nil + } + if token.IsName(p.cur().Kind) { + return p.expectName() + } + return nil +} + +// parseCommit implements COMMIT and its END synonym. +// +// cmd ::= COMMIT|END trans_opt. +func (p *parser) parseCommit() ast.Stmt { + t := p.advance() + n := &ast.CommitStmt{Keyword: strings.ToUpper(t.Text)} + n.Name = p.parseTransOpt() + n.Span = p.span(t.Pos) + return n +} + +// parseRollback implements both ROLLBACK forms. +// +// cmd ::= ROLLBACK trans_opt. +// cmd ::= ROLLBACK trans_opt TO savepoint_opt nm. +func (p *parser) parseRollback() ast.Stmt { + start := p.expect(token.ROLLBACK).Pos + n := &ast.RollbackStmt{} + n.Name = p.parseTransOpt() + if p.accept(token.TO) { + p.accept(token.SAVEPOINT) // savepoint_opt ::= SAVEPOINT. / . + n.Savepoint = p.expectName() + } + n.Span = p.span(start) + return n +} + +// parseSavepoint implements SAVEPOINT. +// +// cmd ::= SAVEPOINT nm. +func (p *parser) parseSavepoint() ast.Stmt { + start := p.expect(token.SAVEPOINT).Pos + n := &ast.SavepointStmt{Name: p.expectName()} + n.Span = p.span(start) + return n +} + +// parseRelease implements RELEASE. +// +// cmd ::= RELEASE savepoint_opt nm. +func (p *parser) parseRelease() ast.Stmt { + start := p.expect(token.RELEASE).Pos + p.accept(token.SAVEPOINT) + n := &ast.ReleaseStmt{Name: p.expectName()} + n.Span = p.span(start) + return n +} + +// parseAttach implements ATTACH. +// +// cmd ::= ATTACH database_kw_opt expr AS expr key_opt. +// database_kw_opt ::= DATABASE. / database_kw_opt ::= . +// key_opt ::= . / key_opt ::= KEY expr. +func (p *parser) parseAttach() ast.Stmt { + start := p.expect(token.ATTACH).Pos + n := &ast.AttachStmt{HasDatabase: p.accept(token.DATABASE)} + n.File = p.parseExpr(precLowest) + p.expect(token.AS) + n.Name = p.parseExpr(precLowest) + if p.accept(token.KEY) { + n.Key = p.parseExpr(precLowest) + } + n.Span = p.span(start) + return n +} + +// parseDetach implements DETACH. +// +// cmd ::= DETACH database_kw_opt expr. +func (p *parser) parseDetach() ast.Stmt { + start := p.expect(token.DETACH).Pos + n := &ast.DetachStmt{HasDatabase: p.accept(token.DATABASE)} + n.Name = p.parseExpr(precLowest) + n.Span = p.span(start) + return n +} + +// parsePragma implements PRAGMA in all five spellings. +// +// cmd ::= PRAGMA nm dbnm. +// cmd ::= PRAGMA nm dbnm EQ nmnum. / PRAGMA nm dbnm EQ minus_num. +// cmd ::= PRAGMA nm dbnm LP nmnum RP. / PRAGMA nm dbnm LP minus_num RP. +func (p *parser) parsePragma() ast.Stmt { + start := p.expect(token.PRAGMA).Pos + n := &ast.PragmaStmt{Name: p.qualifiedName()} + switch { + case p.accept(token.EQ): + n.Value, n.HasValue = p.parsePragmaValue(), true + case p.at(token.LP): + p.advance() + n.Value, n.HasValue, n.Paren = p.parsePragmaValue(), true, true + p.expect(token.RP) + } + n.Span = p.span(start) + return n +} + +// parsePragmaValue implements "nmnum" and "minus_num". +// +// nmnum ::= plus_num. / nm. / ON. / DELETE. / DEFAULT. +// plus_num ::= PLUS number. / number. minus_num ::= MINUS number. +// number ::= INTEGER|FLOAT. +func (p *parser) parsePragmaValue() string { + switch p.cur().Kind { + case token.PLUS, token.MINUS: + sign := p.advance().Text + if !p.at(token.INTEGER) && !p.at(token.FLOAT) { + p.syntaxError() + } + return sign + p.advance().Text + case token.INTEGER, token.FLOAT, token.ON, token.DELETE, token.DEFAULT: + return p.advance().Text + } + return p.expectName().Raw +} + +// parseVacuum implements VACUUM. +// +// cmd ::= VACUUM vinto. / cmd ::= VACUUM nm vinto. +// vinto ::= INTO expr. / vinto ::= . +func (p *parser) parseVacuum() ast.Stmt { + start := p.expect(token.VACUUM).Pos + n := &ast.VacuumStmt{} + if token.IsName(p.cur().Kind) { + n.Schema = p.expectName() + } + if p.accept(token.INTO) { + n.Into = p.parseExpr(precLowest) + } + n.Span = p.span(start) + return n +} + +// parseAnalyze implements ANALYZE. +// +// cmd ::= ANALYZE. / cmd ::= ANALYZE nm dbnm. +func (p *parser) parseAnalyze() ast.Stmt { + start := p.expect(token.ANALYZE).Pos + n := &ast.AnalyzeStmt{} + if token.IsName(p.cur().Kind) { + n.Name = p.qualifiedName() + } + n.Span = p.span(start) + return n +} + +// parseReindex implements REINDEX. +// +// cmd ::= REINDEX. / cmd ::= REINDEX nm dbnm. +func (p *parser) parseReindex() ast.Stmt { + start := p.expect(token.REINDEX).Pos + n := &ast.ReindexStmt{} + if token.IsName(p.cur().Kind) { + n.Name = p.qualifiedName() + } + n.Span = p.span(start) + return n +} diff --git a/parser/parse_select.go b/parser/parse_select.go new file mode 100644 index 0000000..2cbae2a --- /dev/null +++ b/parser/parse_select.go @@ -0,0 +1,629 @@ +package parser + +import ( + "strings" + + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/token" +) + +// parseSelectStmtOrDML handles the statement forms that may begin with WITH. +// parse.y spreads the WITH clause over four rules: "select ::= WITH wqlist +// selectnowith" for queries, and a leading "with" nonterminal on the INSERT, +// UPDATE and DELETE commands. +func (p *parser) parseSelectStmtOrDML() ast.Stmt { + if !p.at(token.WITH) { + return p.parseSelect() + } + start := p.cur().Pos + with := p.parseWith() + switch p.cur().Kind { + case token.SELECT, token.VALUES: + sel := p.parseSelectNoWith() + sel.With = with + sel.Span = ast.Span{Start: start, Stop: p.prevEnd()} + return sel + case token.INSERT, token.REPLACE: + return p.parseInsert(with, start) + case token.UPDATE: + return p.parseUpdate(with, start) + case token.DELETE: + return p.parseDelete(with, start) + } + p.syntaxError() + return nil +} + +// parseSelect implements the "select" nonterminal. +// +// select ::= WITH wqlist selectnowith. / WITH RECURSIVE wqlist selectnowith. +// select ::= selectnowith. +func (p *parser) parseSelect() *ast.SelectStmt { + start := p.cur().Pos + var with *ast.With + if p.at(token.WITH) { + with = p.parseWith() + } + sel := p.parseSelectNoWith() + sel.With = with + sel.Span = ast.Span{Start: start, Stop: p.prevEnd()} + return sel +} + +// parseSelectNoWith implements the compound-select chain. +// +// selectnowith ::= oneselect. +// selectnowith ::= selectnowith multiselect_op oneselect. +// multiselect_op ::= UNION. / UNION ALL. / EXCEPT|INTERSECT. +func (p *parser) parseSelectNoWith() *ast.SelectStmt { + start := p.cur().Pos + n := &ast.SelectStmt{Cores: []ast.SelectCore{p.parseOneSelect()}} + for { + t := p.cur() + var op ast.CompoundOp + switch t.Kind { + case token.UNION: + p.advance() + op = ast.CompoundOp{Op: "UNION"} + if p.at(token.ALL) { + p.advance() + op.All = true + } + case token.EXCEPT, token.INTERSECT: + p.advance() + op = ast.CompoundOp{Op: strings.ToUpper(t.Text)} + default: + n.Span = ast.Span{Start: start, Stop: p.prevEnd()} + return n + } + op.Span = p.span(t.Pos) + n.Ops = append(n.Ops, op) + n.Cores = append(n.Cores, p.parseOneSelect()) + } +} + +// parseOneSelect implements the "oneselect" nonterminal: a SELECT core or a +// VALUES clause. +// +// oneselect ::= SELECT distinct selcollist from where_opt groupby_opt +// having_opt [window_clause] orderby_opt limit_opt. +// oneselect ::= values. / oneselect ::= mvalues. +func (p *parser) parseOneSelect() ast.SelectCore { + if p.at(token.VALUES) { + return p.parseValues() + } + start := p.expect(token.SELECT).Pos + n := &ast.SelectQuery{} + switch p.cur().Kind { // distinct ::= DISTINCT. / ALL. / . + case token.DISTINCT: + p.advance() + n.Distinct = ast.DistinctDistinct + case token.ALL: + p.advance() + n.Distinct = ast.DistinctAll + } + n.Columns = p.parseResultColumns() + if p.accept(token.FROM) { // from ::= . / from ::= FROM seltablist. + n.From = p.parseFromList() + } + if p.accept(token.WHERE) { + n.Where = p.parseExpr(precLowest) + } + if p.at(token.GROUP) { + p.advance() + p.expect(token.BY) + n.GroupBy = p.parseExprList() + } + if p.accept(token.HAVING) { + n.Having = p.parseExpr(precLowest) + } + if p.at(token.WINDOW) { // window_clause ::= WINDOW windowdefn_list. + p.advance() + n.Windows = p.parseWindowDefnList() + } + if p.at(token.ORDER) { + p.advance() + p.expect(token.BY) + n.OrderBy = p.parseSortList() + } + n.Limit = p.parseLimit() + n.Span = p.span(start) + return n +} + +// parseValues implements the single- and multi-row VALUES clauses. +// +// values ::= VALUES LP nexprlist RP. +// mvalues ::= values COMMA LP nexprlist RP. / mvalues COMMA LP nexprlist RP. +func (p *parser) parseValues() ast.SelectCore { + start := p.expect(token.VALUES).Pos + n := &ast.ValuesClause{} + for { + p.expect(token.LP) + n.Rows = append(n.Rows, p.parseExprList()) + p.expect(token.RP) + if !p.at(token.COMMA) { + break + } + p.advance() + } + n.Span = p.span(start) + return n +} + +// parseResultColumns implements "selcollist". +// +// selcollist ::= sclp scanpt expr scanpt as. +// selcollist ::= sclp scanpt STAR. / selcollist ::= sclp scanpt nm DOT STAR. +func (p *parser) parseResultColumns() []*ast.ResultColumn { + var out []*ast.ResultColumn + for { + start := p.cur().Pos + c := &ast.ResultColumn{} + switch { + case p.at(token.STAR): + t := p.advance() + c.Expr = &ast.Star{Span: spanOf(t)} + case token.IsName(p.cur().Kind) && p.peek(1).Kind == token.DOT && p.peek(2).Kind == token.STAR: + tbl := p.expectName() + p.advance() // DOT + p.advance() // STAR + c.Expr = &ast.Star{Span: p.span(start), Table: tbl} + default: + c.Expr = p.parseExpr(precLowest) + c.Alias, c.HasAs = p.parseAlias() + } + c.Span = p.span(start) + out = append(out, c) + if !p.accept(token.COMMA) { + return out + } + } +} + +// parseAlias implements the "as" nonterminal. A bare alias must be an ID or +// a STRING: the "ids" class excludes INDEXED and the join keywords, so +// "FROM t LEFT JOIN u" cannot read LEFT as an alias. +// +// as ::= AS nm. / as ::= ids. / as ::= . +func (p *parser) parseAlias() (*ast.Ident, bool) { + if p.accept(token.AS) { + return p.expectName(), true + } + if token.IsIDS(p.cur().Kind) { + return identOf(p.advance()), false + } + return nil, false +} + +// parseFromList implements "seltablist": a flat list of source items, each +// carrying the operator that attaches it to the one before. +func (p *parser) parseFromList() []*ast.TableRef { + list := []*ast.TableRef{p.parseTableRef(nil)} + for { + op := p.tryJoinOperator() + if op == nil { + return list + } + list = append(list, p.parseTableRef(op)) + } +} + +// tryJoinOperator implements "joinop", returning nil when the FROM list +// ends. sqlite3JoinType rejects unknown keyword combinations, but it does so +// after parsing, so any names are accepted here. +// +// joinop ::= COMMA|JOIN. / JOIN_KW JOIN. +// joinop ::= JOIN_KW nm JOIN. / JOIN_KW nm nm JOIN. +func (p *parser) tryJoinOperator() *ast.JoinOperator { + t := p.cur() + switch t.Kind { + case token.COMMA: + p.advance() + return &ast.JoinOperator{Span: spanOf(t), Type: ast.JoinInner | ast.JoinComma} + case token.JOIN: + p.advance() + return &ast.JoinOperator{Span: spanOf(t), Type: ast.JoinInner, Words: []string{t.Text}} + case token.JOIN_KW: + words := []string{p.advance().Text} + for i := 0; i < 2 && !p.at(token.JOIN); i++ { + words = append(words, p.expectName().Raw) + } + p.expect(token.JOIN) + words = append(words, "JOIN") + return &ast.JoinOperator{Span: p.span(t.Pos), Type: joinTypeOf(words), Words: words} + } + return nil +} + +// joinTypeOf mirrors sqlite3JoinType's keyword-to-bitmask mapping. Invalid +// combinations are reported by SQLite after parsing, so they are simply +// recorded here. +func joinTypeOf(words []string) ast.JoinType { + var t ast.JoinType + for _, w := range words { + switch strings.ToUpper(w) { + case "NATURAL": + t |= ast.JoinNatural + case "LEFT": + t |= ast.JoinLeft | ast.JoinOuter + case "RIGHT": + t |= ast.JoinRight | ast.JoinOuter + case "FULL": + t |= ast.JoinLeft | ast.JoinRight | ast.JoinOuter + case "OUTER": + t |= ast.JoinOuter + case "INNER": + t |= ast.JoinInner + case "CROSS": + t |= ast.JoinInner | ast.JoinCross + } + } + return t +} + +// parseTableRef implements one "seltablist" item. +// +// seltablist ::= stl_prefix nm dbnm as on_using. +// seltablist ::= stl_prefix nm dbnm as indexed_by on_using. +// seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using. +// seltablist ::= stl_prefix LP select RP as on_using. +// seltablist ::= stl_prefix LP seltablist RP as on_using. +func (p *parser) parseTableRef(join *ast.JoinOperator) *ast.TableRef { + start := p.cur().Pos + if join != nil { + start = join.Pos() + } + n := &ast.TableRef{Join: join} + if p.at(token.LP) { + p.advance() + // A "select" can only begin with SELECT, VALUES or WITH, so one + // token of lookahead separates a subquery from a nested join list. + if p.atSelect() { + n.Select = p.parseSelect() + } else { + n.List = p.parseFromList() + } + p.expect(token.RP) + n.Alias, n.HasAs = p.parseAlias() + p.parseOnUsing(n) + n.Span = p.span(start) + return n + } + n.Name = p.qualifiedName() + if p.at(token.LP) { // table-valued function + p.advance() + n.HasArgs = true + if !p.at(token.RP) { + n.Args = p.parseExprList() + } + p.expect(token.RP) + n.Alias, n.HasAs = p.parseAlias() + p.parseOnUsing(n) + n.Span = p.span(start) + return n + } + n.Alias, n.HasAs = p.parseAlias() + // indexed_by ::= INDEXED BY nm. / indexed_by ::= NOT INDEXED. + if p.at(token.INDEXED) { + p.advance() + p.expect(token.BY) + n.IndexedBy = p.expectName() + } else if p.at(token.NOT) && p.peek(1).Kind == token.INDEXED { + p.advance() + p.advance() + n.NotIndexed = true + } + p.parseOnUsing(n) + n.Span = p.span(start) + return n +} + +// parseOnUsing implements "on_using". The [OR] precedence mark on the empty +// alternative makes the parser prefer shifting ON into the join over +// reducing an empty constraint, which is why "INSERT ... JOIN b ON CONFLICT" +// reads CONFLICT as the join condition rather than starting an upsert. +// +// on_using ::= ON expr. / USING LP idlist RP. / . [OR] +func (p *parser) parseOnUsing(n *ast.TableRef) { + switch { + case p.accept(token.ON): + n.On = p.parseExpr(precLowest) + case p.accept(token.USING): + p.expect(token.LP) + n.Using = p.parseIDList() + p.expect(token.RP) + } +} + +// parseIDList implements "idlist": one or more comma-separated names. +// +// idlist ::= idlist COMMA nm. / idlist ::= nm. +func (p *parser) parseIDList() []*ast.Ident { + out := []*ast.Ident{p.expectName()} + for p.accept(token.COMMA) { + out = append(out, p.expectName()) + } + return out +} + +// parseSortList implements "sortlist". +// +// sortlist ::= sortlist COMMA expr sortorder nulls. / expr sortorder nulls. +// sortorder ::= ASC. / DESC. / . +// nulls ::= NULLS FIRST. / NULLS LAST. / . +func (p *parser) parseSortList() []*ast.OrderingTerm { + var out []*ast.OrderingTerm + for { + start := p.cur().Pos + t := &ast.OrderingTerm{Expr: p.parseExpr(precLowest)} + switch { + case p.accept(token.ASC): + t.Order = ast.SortAsc + case p.accept(token.DESC): + t.Order = ast.SortDesc + } + if p.at(token.NULLS) { + p.advance() + switch { + case p.accept(token.FIRST): + t.Nulls = ast.NullsFirst + case p.accept(token.LAST): + t.Nulls = ast.NullsLast + default: + p.syntaxError() + } + } + t.Span = p.span(start) + out = append(out, t) + if !p.accept(token.COMMA) { + return out + } + } +} + +// parseLimit implements "limit_opt". The comma spelling swaps the operands: +// "LIMIT x, y" means "LIMIT y OFFSET x". +// +// limit_opt ::= . / LIMIT expr. / LIMIT expr OFFSET expr. / LIMIT expr COMMA expr. +func (p *parser) parseLimit() *ast.Limit { + if !p.at(token.LIMIT) { + return nil + } + start := p.advance().Pos + n := &ast.Limit{Count: p.parseExpr(precLowest)} + switch { + case p.accept(token.OFFSET): + n.Offset = p.parseExpr(precLowest) + case p.accept(token.COMMA): + n.Offset, n.Count = n.Count, p.parseExpr(precLowest) + n.Comma = true + } + n.Span = p.span(start) + return n +} + +// parseWith implements the WITH clause. +// +// with ::= WITH wqlist. / with ::= WITH RECURSIVE wqlist. +// wqlist ::= wqitem. / wqlist ::= wqlist COMMA wqitem. +func (p *parser) parseWith() *ast.With { + start := p.expect(token.WITH).Pos + n := &ast.With{} + if p.accept(token.RECURSIVE) { + n.Recursive = true + } + for { + n.CTEs = append(n.CTEs, p.parseCTE()) + if !p.accept(token.COMMA) { + break + } + } + n.Span = p.span(start) + return n +} + +// parseCTE implements one common table expression. +// +// wqitem ::= withnm eidlist_opt wqas LP select RP. +// wqas ::= AS. / AS MATERIALIZED. / AS NOT MATERIALIZED. +func (p *parser) parseCTE() *ast.CTE { + start := p.cur().Pos + n := &ast.CTE{Name: p.expectName()} + if p.at(token.LP) { + p.advance() + for _, c := range p.parseIndexedColumnList() { + n.Columns = append(n.Columns, c.Name) + } + p.expect(token.RP) + } + p.expect(token.AS) + switch { + case p.accept(token.MATERIALIZED): + n.Materialized = ast.MaterializedYes + case p.at(token.NOT) && p.peek(1).Kind == token.MATERIALIZED: + p.advance() + p.advance() + n.Materialized = ast.MaterializedNo + } + p.expect(token.LP) + n.Select = p.parseSelect() + p.expect(token.RP) + n.Span = p.span(start) + return n +} + +// parseIndexedColumnList implements "eidlist". The COLLATE and ASC/DESC +// decorations are a compatibility wart: parserAddExprIdListTerm accepts them +// and then reports "syntax error after column name", which is a grammar +// action rather than a parse error, so they must be parsed here. +// +// eidlist ::= eidlist COMMA nm collate sortorder. / nm collate sortorder. +// collate ::= . / collate ::= COLLATE ids. +func (p *parser) parseIndexedColumnList() []*ast.IndexedColumn { + var out []*ast.IndexedColumn + for { + start := p.cur().Pos + c := &ast.IndexedColumn{Name: p.expectName()} + if p.accept(token.COLLATE) { + p.expectIDS() + c.Collate = true + } + switch { + case p.accept(token.ASC): + c.Order = ast.SortAsc + case p.accept(token.DESC): + c.Order = ast.SortDesc + } + c.Span = p.span(start) + out = append(out, c) + if !p.accept(token.COMMA) { + return out + } + } +} + +// parseWindowDefnList implements "windowdefn_list". +// +// windowdefn ::= nm AS LP window RP. +func (p *parser) parseWindowDefnList() []*ast.WindowDef { + var out []*ast.WindowDef + for { + start := p.cur().Pos + name := p.expectName() + p.expect(token.AS) + p.expect(token.LP) + w := p.parseWindow() + p.expect(token.RP) + w.Name = name + w.Span = p.span(start) + out = append(out, w) + if !p.accept(token.COMMA) { + return out + } + } +} + +// parseWindow implements the "window" nonterminal, the body of an OVER(...) +// or of a WINDOW clause entry. +// +// window ::= [nm] [PARTITION BY nexprlist] [ORDER BY sortlist] frame_opt. +// +// PARTITION, ORDER, RANGE, ROWS and GROUPS all have shift actions at the +// start of a window, so despite being in the %fallback set they are never +// read as the inherited window name. +func (p *parser) parseWindow() *ast.WindowDef { + start := p.cur().Pos + n := &ast.WindowDef{} + switch p.cur().Kind { + case token.PARTITION, token.ORDER, token.RANGE, token.ROWS, token.GROUPS, token.RP: + default: + n.Base = p.expectName() + } + if p.at(token.PARTITION) { + p.advance() + p.expect(token.BY) + n.Partition = p.parseExprList() + } + if p.at(token.ORDER) { + p.advance() + p.expect(token.BY) + n.OrderBy = p.parseSortList() + } + p.parseFrame(n) + n.Span = p.span(start) + return n +} + +// parseFrame implements "frame_opt" and its bounds. +// +// frame_opt ::= . / range_or_rows frame_bound_s frame_exclude_opt. +// frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e +// frame_exclude_opt. +// range_or_rows ::= RANGE|ROWS|GROUPS. +func (p *parser) parseFrame(n *ast.WindowDef) { + switch p.cur().Kind { + case token.RANGE: + n.Frame = ast.FrameRange + case token.ROWS: + n.Frame = ast.FrameRows + case token.GROUPS: + n.Frame = ast.FrameGroups + default: + return + } + p.advance() + if p.accept(token.BETWEEN) { + n.StartBound = p.parseFrameBound(false) + p.expect(token.AND) + n.EndBound = p.parseFrameBound(true) + } else { + n.StartBound = p.parseFrameBound(false) + } + n.Exclude = p.parseFrameExclude() +} + +// parseFrameBound implements "frame_bound_s" and "frame_bound_e". UNBOUNDED +// and CURRENT have shift actions here, so they are keywords rather than +// fallback identifiers. +// +// frame_bound_s ::= frame_bound. / UNBOUNDED PRECEDING. +// frame_bound_e ::= frame_bound. / UNBOUNDED FOLLOWING. +// frame_bound ::= expr PRECEDING|FOLLOWING. / CURRENT ROW. +func (p *parser) parseFrameBound(isEnd bool) *ast.FrameBound { + start := p.cur().Pos + switch p.cur().Kind { + case token.UNBOUNDED: + p.advance() + if isEnd { + p.expect(token.FOLLOWING) + return &ast.FrameBound{Span: p.span(start), Type: ast.BoundUnboundedFollowing} + } + p.expect(token.PRECEDING) + return &ast.FrameBound{Span: p.span(start), Type: ast.BoundUnboundedPreceding} + case token.CURRENT: + p.advance() + p.expect(token.ROW) + return &ast.FrameBound{Span: p.span(start), Type: ast.BoundCurrentRow} + } + x := p.parseExpr(precLowest) + b := &ast.FrameBound{Expr: x} + switch { + case p.accept(token.PRECEDING): + b.Type = ast.BoundPreceding + case p.accept(token.FOLLOWING): + b.Type = ast.BoundFollowing + default: + p.syntaxError() + } + b.Span = p.span(start) + return b +} + +// parseFrameExclude implements "frame_exclude_opt". +// +// frame_exclude ::= NO OTHERS. / CURRENT ROW. / GROUP|TIES. +func (p *parser) parseFrameExclude() ast.FrameExclude { + if !p.at(token.EXCLUDE) { + return ast.ExcludeNone + } + p.advance() + switch p.cur().Kind { + case token.NO: + p.advance() + p.expect(token.OTHERS) + return ast.ExcludeNoOthers + case token.CURRENT: + p.advance() + p.expect(token.ROW) + return ast.ExcludeCurrentRow + case token.GROUP: + p.advance() + return ast.ExcludeGroup + case token.TIES: + p.advance() + return ast.ExcludeTies + } + p.syntaxError() + return ast.ExcludeNone +} diff --git a/parser/parse_trigger.go b/parser/parse_trigger.go new file mode 100644 index 0000000..6818683 --- /dev/null +++ b/parser/parse_trigger.go @@ -0,0 +1,142 @@ +package parser + +import ( + "strings" + + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/token" +) + +// parseCreateTrigger implements CREATE TRIGGER. +// +// cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END. +// trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time +// trigger_event ON fullname foreach_clause when_clause. +// trigger_time ::= BEFORE|AFTER. / INSTEAD OF. / . +// trigger_event ::= DELETE|INSERT. / UPDATE. / UPDATE OF idlist. +// foreach_clause ::= . / foreach_clause ::= FOR EACH ROW. +// when_clause ::= . / when_clause ::= WHEN expr. +func (p *parser) parseCreateTrigger(start int, temp bool) ast.Stmt { + p.expect(token.TRIGGER) + n := &ast.CreateTriggerStmt{Temp: temp} + n.IfNotExists = p.parseIfNotExists() + n.Name = p.qualifiedName() + switch p.cur().Kind { + case token.BEFORE: + p.advance() + n.Time, n.HasTime = ast.TriggerBefore, true + case token.AFTER: + p.advance() + n.Time, n.HasTime = ast.TriggerAfter, true + case token.INSTEAD: + p.advance() + p.expect(token.OF) + n.Time, n.HasTime = ast.TriggerInsteadOf, true + } + switch p.cur().Kind { + case token.DELETE, token.INSERT: + n.Event = strings.ToUpper(p.advance().Text) + case token.UPDATE: + n.Event = strings.ToUpper(p.advance().Text) + if p.accept(token.OF) { + n.UpdateOf = p.parseIDList() + } + default: + p.syntaxError() + } + p.expect(token.ON) + n.Table = p.qualifiedName() + if p.accept(token.FOR) { + p.expect(token.EACH) + p.expect(token.ROW) + n.ForEachRow = true + } + if p.accept(token.WHEN) { + n.When = p.parseExpr(precLowest) + } + p.expect(token.BEGIN) + // trigger_cmd_list ::= trigger_cmd SEMI. / trigger_cmd_list trigger_cmd SEMI. + // The list is non-empty and every command carries its own semicolon. + for { + n.Body = append(n.Body, p.parseTriggerCmd()) + p.expect(token.SEMI) + if p.at(token.END) { + break + } + } + p.expect(token.END) + n.Span = p.span(start) + return n +} + +// parseTriggerCmd implements the restricted statement forms of a trigger +// body. They differ from the top-level statements: no WITH prefix, no +// RETURNING, and INDEXED BY is diagnosed by a grammar action rather than +// being rejected outright. +// +// trigger_cmd ::= UPDATE orconf xfullname tridxby SET setlist from where_opt. +// trigger_cmd ::= insert_cmd INTO xfullname idlist_opt select upsert. +// trigger_cmd ::= DELETE FROM xfullname tridxby where_opt. +// trigger_cmd ::= select. +func (p *parser) parseTriggerCmd() ast.Stmt { + start := p.cur().Pos + switch p.cur().Kind { + case token.UPDATE: + p.advance() + n := &ast.UpdateStmt{} + n.OrConflict = p.parseOrConflict() + n.Table, n.Alias = p.xfullname() + n.IndexedBy, n.NotIndexed = p.parseTriggerIndexedBy() + p.expect(token.SET) + n.Set = p.parseSetList() + if p.accept(token.FROM) { + n.From = p.parseFromList() + } + if p.accept(token.WHERE) { + n.Where = p.parseExpr(precLowest) + } + n.Span = p.span(start) + return n + case token.INSERT, token.REPLACE: + n := &ast.InsertStmt{} + if p.accept(token.REPLACE) { + n.Replace = true + } else { + p.advance() + n.OrConflict = p.parseOrConflict() + } + p.expect(token.INTO) + n.Table, n.Alias = p.xfullname() + if p.at(token.LP) { + p.advance() + n.Columns = p.parseIDList() + p.expect(token.RP) + } + n.Select = p.parseSelect() + p.parseUpsert(n) + n.Span = p.span(start) + return n + case token.DELETE: + p.advance() + p.expect(token.FROM) + n := &ast.DeleteStmt{} + n.Table, n.Alias = p.xfullname() + n.IndexedBy, n.NotIndexed = p.parseTriggerIndexedBy() + if p.accept(token.WHERE) { + n.Where = p.parseExpr(precLowest) + } + n.Span = p.span(start) + return n + } + return p.parseSelect() +} + +// parseTriggerIndexedBy implements "tridxby". Both non-empty alternatives +// exist only so SQLite can produce a tailored message ("the INDEXED BY +// clause is not allowed on UPDATE or DELETE statements within triggers"), +// which is a grammar action and so not a parse error: meyer accepts them. +// +// tridxby ::= . / INDEXED BY nm. / NOT INDEXED. +func (p *parser) parseTriggerIndexedBy() (*ast.Ident, bool) { + return p.parseIndexedOpt() +} diff --git a/parser/parser.go b/parser/parser.go index a5a0b7d..b82a015 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -1,18 +1,31 @@ // Package parser implements a hand-written recursive descent parser for the // SQLite SQL dialect. // -// This is the milestone-1 skeleton: the public API and error type are final, -// but parsing is not implemented yet — every input currently returns an -// error, and the corpus harness in parser_test.go tracks implementation -// progress via the todo metadata (see CLAUDE.md for the workflow). +// The grammar is SQLite's src/parse.y, a Lemon LALR(1) grammar. Every +// non-trivial function here names the rule or rules it implements. Where +// parse.y resolves an ambiguity with a precedence annotation or with rule +// ordering, the equivalent decision is spelled out and commented. +// +// Errors match SQLite byte for byte. There are exactly three parser-level +// messages: +// +// near "X": syntax error the token X could not be shifted +// unrecognized token: "X" the tokenizer produced TK_ILLEGAL at X +// incomplete input the error fell on the end of the input, +// where SQLite feeds a synthetic empty token +// +// Parsing is fail-fast: the first error aborts, as it does in SQLite, which +// reports exactly one parse error per statement. package parser import ( "context" - "fmt" "io" + "strings" "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/lexer" + "github.com/sqlc-dev/meyer/token" ) // Error is the error type returned for inputs meyer rejects. Message @@ -27,8 +40,345 @@ func (e *Error) Error() string { return e.Message } // Parse reads SQL from r and returns one ast.Stmt per statement. func Parse(ctx context.Context, r io.Reader) ([]ast.Stmt, error) { - if _, err := io.ReadAll(r); err != nil { + src, err := io.ReadAll(r) + if err != nil { return nil, err } - return nil, fmt.Errorf("meyer: parser not implemented") + return ParseString(string(src)) +} + +// ParseString parses a complete SQL script. +func ParseString(src string) (stmts []ast.Stmt, err error) { + p := newParser(src) + defer func() { + if r := recover(); r != nil { + b, ok := r.(bail) + if !ok { + panic(r) + } + stmts, err = nil, b.err + } + }() + return p.parseScript(), nil +} + +// ParseStatement parses exactly one statement and rejects trailing input. +func ParseStatement(src string) (ast.Stmt, error) { + stmts, err := ParseString(src) + if err != nil { + return nil, err + } + if len(stmts) != 1 { + return nil, &Error{Message: "expected exactly one statement", Offset: -1} + } + return stmts[0], nil +} + +// ParseExpr parses a single expression. It exists for tests and tooling. +func ParseExpr(src string) (expr ast.Expr, err error) { + p := newParser(src) + defer func() { + if r := recover(); r != nil { + b, ok := r.(bail) + if !ok { + panic(r) + } + expr, err = nil, b.err + } + }() + e := p.parseExpr(precLowest) + if !p.at(token.EOF) { + p.syntaxError() + } + return e, nil +} + +// bail carries a parse error out through the recursive descent. +type bail struct{ err *Error } + +type parser struct { + src string + toks []token.Token + i int + + nVar int // bind parameters seen so far + varNums map[string]int // named parameters already assigned a number +} + +func newParser(src string) *parser { + p := &parser{src: src, toks: lexer.Lex(src), varNums: map[string]int{}} + p.checkIllegal() + return p +} + +// cur is the lookahead token. +func (p *parser) cur() token.Token { return p.toks[p.i] } + +// peek returns the token n positions after the lookahead, clamped to EOF. +func (p *parser) peek(n int) token.Token { + if p.i+n >= len(p.toks) { + return p.toks[len(p.toks)-1] + } + return p.toks[p.i+n] +} + +func (p *parser) at(k token.Kind) bool { return p.toks[p.i].Kind == k } + +// advance consumes the lookahead and returns it. +func (p *parser) advance() token.Token { + t := p.toks[p.i] + if p.i < len(p.toks)-1 { + p.i++ + } + p.checkIllegal() + return t +} + +// accept consumes the lookahead if it has kind k. +func (p *parser) accept(k token.Kind) bool { + if p.at(k) { + p.advance() + return true + } + return false +} + +// expect consumes the lookahead, which must have kind k. +func (p *parser) expect(k token.Kind) token.Token { + if !p.at(k) { + p.syntaxError() + } + return p.advance() +} + +// checkIllegal reports the tokenizer's TK_ILLEGAL as soon as the token +// becomes the lookahead. sqlite3RunParser abandons its loop when the +// tokenizer produces an illegal token, before handing it to the parser, so +// this error always wins over the syntax error the parser would raise at the +// same position. +func (p *parser) checkIllegal() { + if t := p.toks[p.i]; t.Kind == token.ILLEGAL { + panic(bail{&Error{Message: `unrecognized token: "` + t.Text + `"`, Offset: t.Pos}}) + } +} + +// syntaxError aborts the parse at the lookahead token. +// +// %syntax_error { +// if( TOKEN.z[0] ) parserSyntaxError(pParse, &TOKEN); +// else sqlite3ErrorMsg(pParse, "incomplete input"); +// } +func (p *parser) syntaxError() { p.syntaxErrorAt(p.cur()) } + +func (p *parser) syntaxErrorAt(t token.Token) { + if t.Kind == token.EOF { + // At the end of input SQLite feeds synthetic SEMI and 0 tokens + // whose text is empty, which %syntax_error reports this way. + panic(bail{&Error{Message: "incomplete input", Offset: t.Pos}}) + } + panic(bail{&Error{Message: `near "` + t.Text + `": syntax error`, Offset: t.Pos}}) +} + +// fail raises one of SQLite's non-positional parser messages. +func (p *parser) fail(msg string, offset int) { + panic(bail{&Error{Message: msg, Offset: offset}}) +} + +// parseScript implements the top-level rules. +// +// input ::= cmdlist. / cmdlist ::= cmdlist ecmd. / cmdlist ::= ecmd. +// ecmd ::= SEMI. / ecmd ::= cmdx SEMI. / ecmd ::= explain cmdx SEMI. +func (p *parser) parseScript() []ast.Stmt { + var stmts []ast.Stmt + for !p.at(token.EOF) { + if p.accept(token.SEMI) { // ecmd ::= SEMI: an empty statement + continue + } + start := p.cur().Pos + stmt := p.parseExplainable() + end := p.prevEnd() + // The statement span runs to its terminating semicolon so that + // consumers can slice the source between statements. + if p.at(token.SEMI) { + end = p.cur().End + p.advance() + } else if !p.at(token.EOF) { + p.syntaxError() + } + setStmtSpan(stmt, start, end) + stmts = append(stmts, stmt) + } + return stmts +} + +// parseExplainable implements "explain cmdx" plus the bare "cmdx". +// +// explain ::= EXPLAIN. / explain ::= EXPLAIN QUERY PLAN. +func (p *parser) parseExplainable() ast.Stmt { + if !p.at(token.EXPLAIN) { + return p.parseCmd() + } + start := p.advance().Pos + n := &ast.ExplainStmt{} + if p.at(token.QUERY) { + p.advance() + p.expect(token.PLAN) + n.QueryPlan = true + } + n.Stmt = p.parseCmd() + n.Span = ast.Span{Start: start, Stop: p.prevEnd()} + return n +} + +// parseCmd dispatches on the leading keyword of a statement. Every "cmd" +// alternative in parse.y begins with a keyword, and none of them can be +// reached through %fallback: at the start of a statement each of those +// keywords has a shift action of its own, so it is never re-read as an ID. +func (p *parser) parseCmd() ast.Stmt { + switch p.cur().Kind { + case token.SELECT, token.VALUES, token.WITH: + return p.parseSelectStmtOrDML() + case token.INSERT, token.REPLACE: + return p.parseInsert(nil, p.cur().Pos) + case token.UPDATE: + return p.parseUpdate(nil, p.cur().Pos) + case token.DELETE: + return p.parseDelete(nil, p.cur().Pos) + case token.CREATE: + return p.parseCreate() + case token.DROP: + return p.parseDrop() + case token.ALTER: + return p.parseAlterTable() + case token.BEGIN: + return p.parseBegin() + case token.COMMIT, token.END: + return p.parseCommit() + case token.ROLLBACK: + return p.parseRollback() + case token.SAVEPOINT: + return p.parseSavepoint() + case token.RELEASE: + return p.parseRelease() + case token.ATTACH: + return p.parseAttach() + case token.DETACH: + return p.parseDetach() + case token.PRAGMA: + return p.parsePragma() + case token.VACUUM: + return p.parseVacuum() + case token.ANALYZE: + return p.parseAnalyze() + case token.REINDEX: + return p.parseReindex() + } + p.syntaxError() + return nil +} + +// prevEnd is the end offset of the most recently consumed token. +func (p *parser) prevEnd() int { + if p.i == 0 { + return 0 + } + return p.toks[p.i-1].End +} + +// span builds a Span from a start offset to the last consumed token. +func (p *parser) span(start int) ast.Span { + return ast.Span{Start: start, Stop: p.prevEnd()} +} + +// setStmtSpan widens a statement's span to cover its terminating semicolon. +// Every node embeds ast.Span, which supplies SetSpan. +func setStmtSpan(stmt ast.Stmt, start, end int) { + if s, ok := stmt.(interface{ SetSpan(ast.Span) }); ok { + s.SetSpan(ast.Span{Start: start, Stop: end}) + } +} + +// Name productions. parse.y expresses these as token classes plus the +// %fallback ID set; token.IsName and friends encode the membership, and +// these helpers turn an accepted token into an Ident. + +// expectName implements "nm": idj | STRING. +func (p *parser) expectName() *ast.Ident { + if !token.IsName(p.cur().Kind) { + p.syntaxError() + } + return identOf(p.advance()) +} + +// expectIDS implements the "ids" class: ID | STRING. +func (p *parser) expectIDS() *ast.Ident { + if !token.IsIDS(p.cur().Kind) { + p.syntaxError() + } + return identOf(p.advance()) +} + +// identOf builds an Ident from an accepted name token, undoing SQLite's four +// quoting styles. +func identOf(t token.Token) *ast.Ident { + id := &ast.Ident{ + Span: ast.Span{Start: t.Pos, Stop: t.End}, + Raw: t.Text, + Name: t.Text, + } + if len(t.Text) >= 2 { + switch t.Text[0] { + case '"', '\'', '`': + id.Quote = ast.QuoteStyle(t.Text[0]) + id.Name = dequote(t.Text, t.Text[0]) + case '[': + id.Quote = ast.QuoteSquare + id.Name = t.Text[1 : len(t.Text)-1] + } + } + return id +} + +// dequote strips the delimiters of a quoted token and collapses the doubled +// delimiters SQLite uses for escaping. Mirrors sqlite3Dequote. +func dequote(s string, delim byte) string { + body := s[1:] + if n := len(body); n > 0 && body[n-1] == delim { + body = body[:n-1] + } + d := string([]byte{delim}) + if !strings.Contains(body, d) { + return body + } + return strings.ReplaceAll(body, d+d, d) +} + +// qualifiedName implements "nm dbnm", an optionally schema-qualified object +// name. SQLite writes the qualifier first: in "a.b", a is the schema. +// +// fullname ::= nm. / fullname ::= nm DOT nm. +// dbnm ::= . / dbnm ::= DOT nm. +func (p *parser) qualifiedName() *ast.QualifiedName { + first := p.expectName() + n := &ast.QualifiedName{Span: first.Span, Name: first} + if p.at(token.DOT) { + p.advance() + second := p.expectName() + n.Schema, n.Name = first, second + n.Span = ast.Span{Start: first.Pos(), Stop: second.End()} + } + return n +} + +// xfullname adds the optional alias that INSERT, UPDATE and DELETE targets +// accept. +// +// xfullname ::= nm [DOT nm] [AS nm]. +func (p *parser) xfullname() (*ast.QualifiedName, *ast.Ident) { + name := p.qualifiedName() + var alias *ast.Ident + if p.accept(token.AS) { + alias = p.expectName() + } + return name, alias } diff --git a/parser/testdata/alter.metadata.json b/parser/testdata/alter.metadata.json index ffc22d5..0967ef4 100644 --- a/parser/testdata/alter.metadata.json +++ b/parser/testdata/alter.metadata.json @@ -1,69 +1 @@ -{ - "todo": { - "alter-1.8.2": true, - "alter-1.8.3": true, - "alter-1.8.4": true, - "alter-1.8.5": true, - "alter-1.8.6": true, - "alter-1.8.7": true, - "alter-1.9.1": true, - "alter-1.9.2": true, - "alter-1.9.3": true, - "alter-1.9.4": true, - "alter-10.2": true, - "alter-10.4": true, - "alter-12.1": true, - "alter-12.2": true, - "alter-12.3": true, - "alter-12.5": true, - "alter-13.1": true, - "alter-13.2": true, - "alter-13.3": true, - "alter-14.1": true, - "alter-14.2": true, - "alter-16.1": true, - "alter-16.2": true, - "alter-17.100": true, - "alter-18.1": true, - "alter-19.1": true, - "alter-19.2": true, - "alter-19.3": true, - "alter-2.1": true, - "alter-2.4": true, - "alter-2.5": true, - "alter-2.6": true, - "alter-20.1": true, - "alter-20.2": true, - "alter-20.2.dup1": true, - "alter-20.3": true, - "alter-21.1": true, - "alter-21.2": true, - "alter-21.3": true, - "alter-21.4": true, - "alter-3.1.0": true, - "alter-3.1.3": true, - "alter-3.1.6": true, - "alter-3.2.1": true, - "alter-3.2.10": true, - "alter-3.2.2": true, - "alter-3.2.3": true, - "alter-3.2.4": true, - "alter-3.2.4.dup1": true, - "alter-3.2.5": true, - "alter-3.2.6": true, - "alter-3.2.7": true, - "alter-3.2.8": true, - "alter-3.2.9": true, - "alter-3.3.7": true, - "alter-3.3.8": true, - "alter-4.1": true, - "alter-4.2": true, - "alter-4.3": true, - "alter-4.4": true, - "alter-5.1": true, - "alter-8.1": true, - "alter-8.2": true, - "alter-9.1": true, - "alter-9.3": true - } -} +{} diff --git a/parser/testdata/alter2.metadata.json b/parser/testdata/alter2.metadata.json index ba37d0b..0967ef4 100644 --- a/parser/testdata/alter2.metadata.json +++ b/parser/testdata/alter2.metadata.json @@ -1,28 +1 @@ -{ - "todo": { - "alter2-1.1": true, - "alter2-1.10": true, - "alter2-1.3": true, - "alter2-1.4": true, - "alter2-1.5": true, - "alter2-1.6": true, - "alter2-1.7": true, - "alter2-1.8": true, - "alter2-1.99": true, - "alter2-10.2": true, - "alter2-10.3": true, - "alter2-10.4": true, - "alter2-2.1": true, - "alter2-2.3": true, - "alter2-3.1": true, - "alter2-3.2": true, - "alter2-3.4": true, - "alter2-3.5": true, - "alter2-3.6": true, - "alter2-5.2": true, - "alter2-7.1": true, - "alter2-7.3": true, - "alter2-7.4": true, - "alter2-8.2": true - } -} +{} diff --git a/parser/testdata/alter3.metadata.json b/parser/testdata/alter3.metadata.json index f4e75f6..0967ef4 100644 --- a/parser/testdata/alter3.metadata.json +++ b/parser/testdata/alter3.metadata.json @@ -1,46 +1 @@ -{ - "todo": { - "alter3-1.4": true, - "alter3-1.5": true, - "alter3-1.6": true, - "alter3-1.7": true, - "alter3-2.2": true, - "alter3-2.3": true, - "alter3-2.3.dup1": true, - "alter3-2.4": true, - "alter3-2.6": true, - "alter3-2.99": true, - "alter3-3.1": true, - "alter3-3.1.dup1": true, - "alter3-3.2": true, - "alter3-3.4": true, - "alter3-4.1": true, - "alter3-4.2": true, - "alter3-4.4": true, - "alter3-4.99": true, - "alter3-5.2": true, - "alter3-5.3": true, - "alter3-5.4": true, - "alter3-5.6": true, - "alter3-5.7": true, - "alter3-5.8": true, - "alter3-5.9": true, - "alter3-5.99": true, - "alter3-6.1": true, - "alter3-6.2": true, - "alter3-8.1": true, - "alter3-8.2": true, - "alter3-9.1": true, - "alter3-9.10": true, - "alter3-9.11": true, - "alter3-9.12": true, - "alter3-9.13": true, - "alter3-9.14": true, - "alter3-9.2": true, - "alter3-9.3": true, - "alter3-9.4": true, - "alter3-9.5": true, - "alter3-9.6": true, - "alter3-9.7": true - } -} +{} diff --git a/parser/testdata/alter4.metadata.json b/parser/testdata/alter4.metadata.json index 532e766..0967ef4 100644 --- a/parser/testdata/alter4.metadata.json +++ b/parser/testdata/alter4.metadata.json @@ -1,49 +1 @@ -{ - "todo": { - "alter4-1.1": true, - "alter4-1.1b": true, - "alter4-1.2b": true, - "alter4-1.3b": true, - "alter4-1.4": true, - "alter4-1.4b": true, - "alter4-1.5": true, - "alter4-1.6": true, - "alter4-1.7": true, - "alter4-11.0": true, - "alter4-11.1": true, - "alter4-11.2": true, - "alter4-11.2.dup1": true, - "alter4-11.3": true, - "alter4-11.4": true, - "alter4-2.2": true, - "alter4-2.3": true, - "alter4-2.3.dup1": true, - "alter4-2.4": true, - "alter4-2.6": true, - "alter4-2.7": true, - "alter4-2.99": true, - "alter4-3.1": true, - "alter4-3.1.dup1": true, - "alter4-3.2": true, - "alter4-3.4": true, - "alter4-4.1": true, - "alter4-4.2": true, - "alter4-4.4": true, - "alter4-4.99": true, - "alter4-5.2": true, - "alter4-5.3": true, - "alter4-5.4": true, - "alter4-5.6": true, - "alter4-5.7": true, - "alter4-5.8": true, - "alter4-5.9": true, - "alter4-5.99": true, - "alter4-6.1": true, - "alter4-6.2": true, - "alter4-8.1": true, - "alter4-8.2": true, - "alter4-9.1": true, - "alter4-9.2": true, - "alter4-9.3": true - } -} +{} diff --git a/parser/testdata/alterdropcol.metadata.json b/parser/testdata/alterdropcol.metadata.json index 6a25891..0967ef4 100644 --- a/parser/testdata/alterdropcol.metadata.json +++ b/parser/testdata/alterdropcol.metadata.json @@ -1,56 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.10": true, - "1.11": true, - "1.2": true, - "1.3.1": true, - "1.3.2": true, - "1.4": true, - "1.5": true, - "1.6.1": true, - "1.6.2": true, - "1.7.1": true, - "1.7.2": true, - "1.7.3": true, - "1.8": true, - "1.9": true, - "2.%TN%.0": true, - "2.%TN%.1": true, - "2.%TN%.2": true, - "3.0": true, - "3.1": true, - "3.2": true, - "5.0": true, - "5.1": true, - "5.2.1": true, - "5.2.2": true, - "5.3.1": true, - "5.3.2": true, - "5.4.1": true, - "5.4.2": true, - "5.5.1": true, - "5.5.2": true, - "6.0": true, - "6.1": true, - "7.0": true, - "7.1": true, - "7.2": true, - "7.3": true, - "8.0": true, - "8.1": true, - "8.2": true, - "alterdropcol-generated": true, - "alterdropcol-generated.dup1": true, - "alterdropcol-generated.dup10": true, - "alterdropcol-generated.dup2": true, - "alterdropcol-generated.dup3": true, - "alterdropcol-generated.dup4": true, - "alterdropcol-generated.dup5": true, - "alterdropcol-generated.dup6": true, - "alterdropcol-generated.dup7": true, - "alterdropcol-generated.dup8": true, - "alterdropcol-generated.dup9": true - } -} +{} diff --git a/parser/testdata/alterdropcol2.metadata.json b/parser/testdata/alterdropcol2.metadata.json index 1b24e1a..0967ef4 100644 --- a/parser/testdata/alterdropcol2.metadata.json +++ b/parser/testdata/alterdropcol2.metadata.json @@ -1,13 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2.1": true, - "1.2.2": true, - "3.0": true, - "3.1.1": true, - "3.1.2": true, - "3.2.1": true, - "3.2.2": true - } -} +{} diff --git a/parser/testdata/altertab.metadata.json b/parser/testdata/altertab.metadata.json index fc6dc82..0967ef4 100644 --- a/parser/testdata/altertab.metadata.json +++ b/parser/testdata/altertab.metadata.json @@ -1,139 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "1.3.dup1": true, - "1.4": true, - "1.4.dup1": true, - "10.0": true, - "10.1": true, - "10.2": true, - "11.0": true, - "11.1": true, - "11.3": true, - "11.4": true, - "11.5": true, - "11.6": true, - "12.0": true, - "12.1": true, - "12.2": true, - "13.0": true, - "13.1": true, - "13.2": true, - "14.0": true, - "14.1": true, - "14.2": true, - "14.3": true, - "14.4": true, - "14.5": true, - "14.6": true, - "15.0": true, - "15.1": true, - "15.2": true, - "15.3": true, - "15.4": true, - "15.5": true, - "16.0": true, - "16.10": true, - "16.20": true, - "16.20.dup1": true, - "16.22": true, - "16.23": true, - "16.24": true, - "16.25": true, - "16.30": true, - "16.40": true, - "17.0": true, - "18.1.0": true, - "18.1.1": true, - "18.1.2": true, - "18.2.0": true, - "18.2.1": true, - "18.2.2": true, - "19.100": true, - "19.110": true, - "19.120": true, - "2.0": true, - "2.1": true, - "2.2": true, - "20.0": true, - "20.1": true, - "21.0": true, - "21.1": true, - "21.2": true, - "21.3": true, - "22.0": true, - "22.1": true, - "23.1": true, - "23.2": true, - "23.3": true, - "23.4": true, - "24.1.0": true, - "24.1.1": true, - "24.2.0": true, - "24.2.1": true, - "25.1": true, - "25.2": true, - "26.1": true, - "27.1": true, - "27.2": true, - "28.1": true, - "28.2": true, - "28.3": true, - "28.4": true, - "28.5": true, - "29.1": true, - "29.2": true, - "29.2.dup1": true, - "29.3": true, - "29.4": true, - "29.4.dup1": true, - "29.5": true, - "29.5.dup1": true, - "3.0": true, - "3.1.1": true, - "3.1.2": true, - "3.1.3": true, - "3.2.1": true, - "3.2.2": true, - "3.3.1": true, - "3.3.2": true, - "30.0": true, - "30.1": true, - "30.2": true, - "31.0": true, - "31.1": true, - "31.2": true, - "31.3": true, - "32.0": true, - "33.0": true, - "33.1": true, - "33.2": true, - "4.0": true, - "4.1": true, - "4.2": true, - "5.0": true, - "5.1": true, - "5.2": true, - "5.3": true, - "5.4": true, - "5.5": true, - "5.6": true, - "6.0": true, - "6.1": true, - "7.1": true, - "7.2": true, - "8.1": true, - "8.2": true, - "8.2.dup1": true, - "9.0": true, - "9.1": true, - "9.2": true, - "9.3": true, - "9.4": true, - "9.5": true, - "9.6": true - } -} +{} diff --git a/parser/testdata/altertab2.metadata.json b/parser/testdata/altertab2.metadata.json index 1bf7178..0967ef4 100644 --- a/parser/testdata/altertab2.metadata.json +++ b/parser/testdata/altertab2.metadata.json @@ -1,39 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "2.0": true, - "2.1": true, - "2.2": true, - "2.3": true, - "4.0": true, - "4.1": true, - "4.2": true, - "4.3": true, - "5.0": true, - "5.0.1": true, - "5.1": true, - "5.2": true, - "5.3": true, - "6.0": true, - "6.1": true, - "6.2": true, - "7.0": true, - "7.1": true, - "7.2": true, - "7.3": true, - "7.3.dup1": true, - "8.0": true, - "8.1": true, - "8.2": true, - "8.3": true, - "8.4": true, - "8.5": true, - "8.6": true, - "9.0": true, - "9.1": true, - "altertab2-generated": true, - "altertab2-generated.dup1": true - } -} +{} diff --git a/parser/testdata/altertab3.metadata.json b/parser/testdata/altertab3.metadata.json index e98aac1..0967ef4 100644 --- a/parser/testdata/altertab3.metadata.json +++ b/parser/testdata/altertab3.metadata.json @@ -1,104 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "10.1": true, - "10.2": true, - "11.1": true, - "11.2": true, - "11.3": true, - "11.4": true, - "12.1": true, - "12.2": true, - "13.1": true, - "13.2": true, - "14.1": true, - "14.2": true, - "16.1": true, - "16.2": true, - "17.1": true, - "17.2": true, - "18.1": true, - "18.2": true, - "18.3": true, - "19.0": true, - "2.0": true, - "2.1": true, - "20.10": true, - "21.1": true, - "22.1": true, - "22.2": true, - "22.3": true, - "22.4": true, - "22.5": true, - "22.6": true, - "23.1": true, - "23.1.dup1": true, - "23.2": true, - "23.2.dup1": true, - "23.3": true, - "24.1": true, - "24.2": true, - "24.3": true, - "24.4": true, - "25.1": true, - "26.1": true, - "26.2": true, - "26.3": true, - "26.4": true, - "26.5": true, - "26.6": true, - "27.1": true, - "27.2": true, - "28.1": true, - "28.2": true, - "29.1": true, - "29.2": true, - "29.3": true, - "29.4": true, - "29.5": true, - "29.6": true, - "29.7": true, - "3.0": true, - "3.1": true, - "3.2": true, - "30.0": true, - "30.1": true, - "30.1.dup1": true, - "30.2": true, - "31.0": true, - "31.2": true, - "32.1.0": true, - "32.1.1": true, - "32.1.2": true, - "32.2.0": true, - "32.2.1": true, - "32.2.2": true, - "33.1": true, - "33.2": true, - "4.0": true, - "4.1.2": true, - "4.1.2.dup1": true, - "4.1.3": true, - "4.2.1": true, - "4.2.2": true, - "4.2.3": true, - "5.0": true, - "5.1": true, - "6.0": true, - "6.1": true, - "7.1.0": true, - "7.1.2": true, - "7.2.1": true, - "7.2.2": true, - "8.0": true, - "8.1": true, - "8.2.1": true, - "8.2.2": true, - "9.1": true, - "9.2": true, - "altertab3-generated": true - } -} +{} diff --git a/parser/testdata/between.metadata.json b/parser/testdata/between.metadata.json index f50dadd..0967ef4 100644 --- a/parser/testdata/between.metadata.json +++ b/parser/testdata/between.metadata.json @@ -1,8 +1 @@ -{ - "todo": { - "between-2.0": true, - "between-3.0": true, - "between-3.1": true, - "between-3.2": true - } -} +{} diff --git a/parser/testdata/e_createtable.metadata.json b/parser/testdata/e_createtable.metadata.json index 1f13c60..0967ef4 100644 --- a/parser/testdata/e_createtable.metadata.json +++ b/parser/testdata/e_createtable.metadata.json @@ -1,76 +1 @@ -{ - "todo": { - "4.1.3": true, - "4.1.4": true, - "4.10.0": true, - "4.11": true, - "4.14.0": true, - "4.15.0": true, - "4.18.1": true, - "4.18.2": true, - "4.18.3": true, - "4.18.5": true, - "4.19.0": true, - "4.19.1": true, - "4.19.2": true, - "4.19.3": true, - "4.19.4": true, - "4.3.0": true, - "4.5.2": true, - "4.5.3": true, - "4.5.4": true, - "4.5.5": true, - "4.5.6": true, - "4.5.7": true, - "4.7.0": true, - "5.1.0": true, - "5.10.0": true, - "5.11.0": true, - "5.2.0": true, - "5.4.1": true, - "5.4.3": true, - "5.4.4.1": true, - "5.4.4.2": true, - "5.4.4.3": true, - "5.4.4.4": true, - "5.7.0": true, - "5.9.0": true, - "e_createtable-1.0": true, - "e_createtable-1.10.0": true, - "e_createtable-1.11.0": true, - "e_createtable-1.11.1.1": true, - "e_createtable-1.11.1.2": true, - "e_createtable-1.11.1.3": true, - "e_createtable-1.11.1.4": true, - "e_createtable-1.11.1.5": true, - "e_createtable-1.11.2.1": true, - "e_createtable-1.11.2.2": true, - "e_createtable-1.11.2.3": true, - "e_createtable-1.11.2.4": true, - "e_createtable-1.7.0": true, - "e_createtable-1.8.0": true, - "e_createtable-2.0": true, - "e_createtable-2.3.2.1": true, - "e_createtable-2.3.2.2": true, - "e_createtable-2.3.2.3": true, - "e_createtable-2.3.2.4": true, - "e_createtable-2.3.2.5": true, - "e_createtable-2.4.0": true, - "e_createtable-3-9.1": true, - "e_createtable-3.1.0": true, - "e_createtable-3.1.1": true, - "e_createtable-3.1.2": true, - "e_createtable-3.11.4": true, - "e_createtable-3.11.5": true, - "e_createtable-3.2.0": true, - "e_createtable-3.3.1": true, - "e_createtable-3.6.1": true, - "e_createtable-3.6.2": true, - "e_createtable-3.7.1": true, - "e_createtable-3.7.2": true, - "e_createtable-3.7.3": true, - "e_createtable-3.7.4": true, - "e_createtable-3.8.1": true, - "e_createtable-3.8.2": true - } -} +{} diff --git a/parser/testdata/e_delete.metadata.json b/parser/testdata/e_delete.metadata.json index 4a29023..0967ef4 100644 --- a/parser/testdata/e_delete.metadata.json +++ b/parser/testdata/e_delete.metadata.json @@ -1,12 +1 @@ -{ - "todo": { - "e_delete-0.0": true, - "e_delete-2.0": true, - "e_delete-2.2.X": true, - "e_delete-2.3.0": true, - "e_delete-2.3.1": true, - "e_delete-2.3.2": true, - "e_delete-2.3.3": true, - "e_delete-2.4.0": true - } -} +{} diff --git a/parser/testdata/e_expr.metadata.json b/parser/testdata/e_expr.metadata.json index e12feab..0967ef4 100644 --- a/parser/testdata/e_expr.metadata.json +++ b/parser/testdata/e_expr.metadata.json @@ -1,244 +1 @@ -{ - "todo": { - "e_expr-1.2.1": true, - "e_expr-1.2.2": true, - "e_expr-1.2.3": true, - "e_expr-1.2.4": true, - "e_expr-1.2.5": true, - "e_expr-1.6": true, - "e_expr-10.1.1": true, - "e_expr-10.1.2": true, - "e_expr-10.1.3": true, - "e_expr-10.1.4": true, - "e_expr-10.1.5": true, - "e_expr-10.2.1": true, - "e_expr-10.2.2": true, - "e_expr-10.2.3": true, - "e_expr-10.2.4": true, - "e_expr-10.3.1": true, - "e_expr-10.3.2": true, - "e_expr-10.3.3": true, - "e_expr-10.3.4": true, - "e_expr-10.4.1": true, - "e_expr-10.4.2": true, - "e_expr-10.4.3": true, - "e_expr-10.4.4": true, - "e_expr-10.4.5": true, - "e_expr-10.5.1": true, - "e_expr-10.5.2": true, - "e_expr-12.1.1": true, - "e_expr-12.1.2": true, - "e_expr-12.1.3": true, - "e_expr-12.1.4": true, - "e_expr-12.1.5": true, - "e_expr-12.1.6": true, - "e_expr-12.2.1": true, - "e_expr-12.2.2": true, - "e_expr-12.2.3": true, - "e_expr-12.2.4": true, - "e_expr-12.2.5": true, - "e_expr-12.2.6": true, - "e_expr-12.2.7": true, - "e_expr-12.2.8": true, - "e_expr-13.2.1": true, - "e_expr-13.2.10": true, - "e_expr-13.2.11": true, - "e_expr-13.2.12": true, - "e_expr-13.2.13": true, - "e_expr-13.2.14": true, - "e_expr-13.2.15": true, - "e_expr-13.2.16": true, - "e_expr-13.2.17": true, - "e_expr-13.2.18": true, - "e_expr-13.2.19": true, - "e_expr-13.2.2": true, - "e_expr-13.2.20": true, - "e_expr-13.2.21": true, - "e_expr-13.2.22": true, - "e_expr-13.2.23": true, - "e_expr-13.2.24": true, - "e_expr-13.2.25": true, - "e_expr-13.2.26": true, - "e_expr-13.2.27": true, - "e_expr-13.2.28": true, - "e_expr-13.2.29": true, - "e_expr-13.2.3": true, - "e_expr-13.2.30": true, - "e_expr-13.2.4": true, - "e_expr-13.2.5": true, - "e_expr-13.2.6": true, - "e_expr-13.2.7": true, - "e_expr-13.2.8": true, - "e_expr-13.2.9": true, - "e_expr-14.1.1": true, - "e_expr-14.1.2": true, - "e_expr-14.2.1": true, - "e_expr-14.2.2": true, - "e_expr-14.2.3": true, - "e_expr-14.3.1": true, - "e_expr-14.3.2": true, - "e_expr-14.3.3": true, - "e_expr-14.4.1": true, - "e_expr-14.4.2": true, - "e_expr-14.4.3": true, - "e_expr-14.5.1": true, - "e_expr-14.6.1": true, - "e_expr-14.6.2": true, - "e_expr-14.6.3": true, - "e_expr-14.7.1": true, - "e_expr-14.7.10": true, - "e_expr-14.7.11": true, - "e_expr-14.7.12": true, - "e_expr-14.7.13": true, - "e_expr-14.7.14": true, - "e_expr-14.7.2": true, - "e_expr-14.7.3": true, - "e_expr-14.7.4": true, - "e_expr-14.7.5": true, - "e_expr-14.7.6": true, - "e_expr-14.7.7": true, - "e_expr-14.7.8": true, - "e_expr-14.7.9": true, - "e_expr-15.1.1": true, - "e_expr-15.1.3": true, - "e_expr-16.1.1": true, - "e_expr-16.1.2": true, - "e_expr-16.1.3": true, - "e_expr-16.1.4": true, - "e_expr-16.1.5": true, - "e_expr-16.1.6": true, - "e_expr-16.1.7": true, - "e_expr-17.1.1": true, - "e_expr-17.1.2": true, - "e_expr-17.1.3": true, - "e_expr-17.1.4": true, - "e_expr-17.1.5": true, - "e_expr-17.1.6": true, - "e_expr-17.1.7": true, - "e_expr-17.2.1": true, - "e_expr-17.2.2": true, - "e_expr-17.2.3": true, - "e_expr-17.2.4": true, - "e_expr-17.2.5": true, - "e_expr-17.2.6": true, - "e_expr-17.2.7": true, - "e_expr-17.2.8": true, - "e_expr-17.2.9": true, - "e_expr-17.3.1": true, - "e_expr-17.3.3": true, - "e_expr-18.1.1": true, - "e_expr-18.1.2": true, - "e_expr-18.2.1": true, - "e_expr-18.2.3": true, - "e_expr-19.1.1": true, - "e_expr-19.1.2": true, - "e_expr-19.2.1": true, - "e_expr-19.2.3": true, - "e_expr-2.1": true, - "e_expr-2.2": true, - "e_expr-2.3": true, - "e_expr-2.4": true, - "e_expr-20.1": true, - "e_expr-20.2": true, - "e_expr-21.1.1": true, - "e_expr-21.1.3": true, - "e_expr-21.2.1": true, - "e_expr-21.2.2": true, - "e_expr-21.2.3": true, - "e_expr-21.3.1": true, - "e_expr-21.3.2": true, - "e_expr-21.4.1a": true, - "e_expr-21.4.1b": true, - "e_expr-21.4.2a": true, - "e_expr-21.4.2b": true, - "e_expr-22.1.1": true, - "e_expr-22.2.1": true, - "e_expr-22.2.2": true, - "e_expr-22.3.1": true, - "e_expr-22.4.1": true, - "e_expr-22.4.2": true, - "e_expr-23.1.1": true, - "e_expr-23.1.2": true, - "e_expr-23.1.3": true, - "e_expr-23.1.4": true, - "e_expr-23.1.5": true, - "e_expr-23.1.6": true, - "e_expr-23.1.7": true, - "e_expr-23.1.8": true, - "e_expr-23.1.9": true, - "e_expr-24.1.1": true, - "e_expr-24.1.2": true, - "e_expr-25.1.1": true, - "e_expr-25.1.3": true, - "e_expr-26.1.1": true, - "e_expr-26.1.2": true, - "e_expr-26.1.3": true, - "e_expr-26.1.4": true, - "e_expr-26.1.6": true, - "e_expr-27.1.1": true, - "e_expr-27.1.2": true, - "e_expr-32.2.8": true, - "e_expr-34.1": true, - "e_expr-35.0": true, - "e_expr-36.3.1": true, - "e_expr-37.1": true, - "e_expr-37.10": true, - "e_expr-37.2": true, - "e_expr-37.3": true, - "e_expr-37.4": true, - "e_expr-37.5": true, - "e_expr-37.6a": true, - "e_expr-37.6b": true, - "e_expr-37.7": true, - "e_expr-37.8": true, - "e_expr-37.9": true, - "e_expr-6.1": true, - "e_expr-6.2": true, - "e_expr-6.3": true, - "e_expr-6.4": true, - "e_expr-6.5": true, - "e_expr-8.1.1": true, - "e_expr-8.1.10": true, - "e_expr-8.1.11": true, - "e_expr-8.1.12": true, - "e_expr-8.1.13": true, - "e_expr-8.1.14": true, - "e_expr-8.1.15": true, - "e_expr-8.1.16": true, - "e_expr-8.1.2": true, - "e_expr-8.1.3": true, - "e_expr-8.1.4": true, - "e_expr-8.1.5": true, - "e_expr-8.1.6": true, - "e_expr-8.1.7": true, - "e_expr-8.1.8": true, - "e_expr-8.1.9": true, - "e_expr-9.1": true, - "e_expr-9.10": true, - "e_expr-9.11": true, - "e_expr-9.12": true, - "e_expr-9.13": true, - "e_expr-9.14": true, - "e_expr-9.15": true, - "e_expr-9.16": true, - "e_expr-9.17": true, - "e_expr-9.18": true, - "e_expr-9.19": true, - "e_expr-9.2": true, - "e_expr-9.20": true, - "e_expr-9.21": true, - "e_expr-9.22": true, - "e_expr-9.23": true, - "e_expr-9.24": true, - "e_expr-9.25": true, - "e_expr-9.25.dup1": true, - "e_expr-9.25.dup2": true, - "e_expr-9.25.dup3": true, - "e_expr-9.3": true, - "e_expr-9.4": true, - "e_expr-9.5": true, - "e_expr-9.6": true, - "e_expr-9.7": true, - "e_expr-9.8": true - } -} +{} diff --git a/parser/testdata/e_insert.metadata.json b/parser/testdata/e_insert.metadata.json index a0a04f7..3e93c70 100644 --- a/parser/testdata/e_insert.metadata.json +++ b/parser/testdata/e_insert.metadata.json @@ -1,11 +1,5 @@ { "todo": { - "e_insert-0.0": true, - "e_insert-2.3.0": true, - "e_insert-4.1.0": true, - "e_insert-5.1.1": true, - "e_insert-5.1.2": true, - "e_insert-5.2.1": true, - "e_insert-generated": true + "e_insert-5.2.1": true } } diff --git a/parser/testdata/e_select.metadata.json b/parser/testdata/e_select.metadata.json index 1d27274..0967ef4 100644 --- a/parser/testdata/e_select.metadata.json +++ b/parser/testdata/e_select.metadata.json @@ -1,50 +1 @@ -{ - "todo": { - "e_select-0.1.4": true, - "e_select-0.1.5": true, - "e_select-1.0": true, - "e_select-1.11.0": true, - "e_select-1.2.0": true, - "e_select-1.4.0": true, - "e_select-1.4.4.1": true, - "e_select-1.4.4.2": true, - "e_select-1.6.0": true, - "e_select-1.8.0": true, - "e_select-3.0": true, - "e_select-3.1.1": true, - "e_select-3.1.2": true, - "e_select-3.1.3": true, - "e_select-3.1.4": true, - "e_select-3.1.5": true, - "e_select-3.1.6": true, - "e_select-3.2.1a": true, - "e_select-3.2.1b": true, - "e_select-3.2.2": true, - "e_select-3.2.3": true, - "e_select-3.2.4": true, - "e_select-4.0": true, - "e_select-4.13.0": true, - "e_select-4.6.0": true, - "e_select-4.9.0": true, - "e_select-5.1.0": true, - "e_select-7.1.0": true, - "e_select-7.10.0": true, - "e_select-7.10.0.dup1": true, - "e_select-7.12.0": true, - "e_select-7.4.0": true, - "e_select-8.1.0": true, - "e_select-8.10.1": true, - "e_select-8.10.2": true, - "e_select-8.10.3": true, - "e_select-8.11.1": true, - "e_select-8.11.2": true, - "e_select-8.12.1": true, - "e_select-8.13.0": true, - "e_select-8.8.0": true, - "e_select-8.8.1": true, - "e_select-8.8.2": true, - "e_select-8.9.1": true, - "e_select-8.9.2": true, - "e_select-9.0": true - } -} +{} diff --git a/parser/testdata/e_update.metadata.json b/parser/testdata/e_update.metadata.json index dbb1614..0967ef4 100644 --- a/parser/testdata/e_update.metadata.json +++ b/parser/testdata/e_update.metadata.json @@ -1,21 +1 @@ -{ - "todo": { - "e_update-0.0": true, - "e_update-1.1.0": true, - "e_update-1.2.0": true, - "e_update-1.3.0": true, - "e_update-1.4.0": true, - "e_update-1.5.0": true, - "e_update-1.7.0": true, - "e_update-1.8.0": true, - "e_update-2.1.3": true, - "e_update-2.2.X": true, - "e_update-2.3.0": true, - "e_update-2.3.1": true, - "e_update-2.3.2": true, - "e_update-2.3.3": true, - "e_update-3.1.0": true, - "e_update-3.5.0": true, - "e_update-generated": true - } -} +{} diff --git a/parser/testdata/expr.metadata.json b/parser/testdata/expr.metadata.json index 40d37db..0967ef4 100644 --- a/parser/testdata/expr.metadata.json +++ b/parser/testdata/expr.metadata.json @@ -1,46 +1 @@ -{ - "todo": { - "expr-1.127": true, - "expr-10.1": true, - "expr-10.2": true, - "expr-11.1": true, - "expr-11.11": true, - "expr-11.12": true, - "expr-11.13": true, - "expr-11.14": true, - "expr-11.2": true, - "expr-11.3": true, - "expr-11.4": true, - "expr-11.5": true, - "expr-11.6": true, - "expr-11.7": true, - "expr-11.8": true, - "expr-12.1": true, - "expr-12.2": true, - "expr-13.2": true, - "expr-13.3": true, - "expr-13.8": true, - "expr-13.9": true, - "expr-14.1": true, - "expr-14.2": true, - "expr-14.3": true, - "expr-14.4": true, - "expr-16.1": true, - "expr-16.100": true, - "expr-16.101": true, - "expr-16.102": true, - "expr-7.1": true, - "expr-8.1": true, - "expr-8.2": true, - "expr-8.3": true, - "expr-8.4": true, - "expr-8.5": true, - "expr-8.6": true, - "expr-9.1": true, - "expr-generated": true, - "expr-generated.dup1": true, - "expr-generated.dup2": true, - "expr-generated.dup3": true, - "expr-generated.dup4": true - } -} +{} diff --git a/parser/testdata/expr2.metadata.json b/parser/testdata/expr2.metadata.json index 1b4c12b..0967ef4 100644 --- a/parser/testdata/expr2.metadata.json +++ b/parser/testdata/expr2.metadata.json @@ -1,11 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2.1": true, - "1.2.2": true, - "1.3": true, - "1.4.1": true, - "1.4.2": true - } -} +{} diff --git a/parser/testdata/in.metadata.json b/parser/testdata/in.metadata.json index 99d7321..0967ef4 100644 --- a/parser/testdata/in.metadata.json +++ b/parser/testdata/in.metadata.json @@ -1,112 +1 @@ -{ - "todo": { - "in-1.1": true, - "in-1.2": true, - "in-1.3": true, - "in-1.4": true, - "in-1.6": true, - "in-1.7": true, - "in-10.1": true, - "in-10.2": true, - "in-11.1": true, - "in-11.5": true, - "in-12.1": true, - "in-12.10": true, - "in-12.11": true, - "in-12.12": true, - "in-12.13": true, - "in-12.14": true, - "in-12.15": true, - "in-12.2": true, - "in-12.3": true, - "in-12.4": true, - "in-12.5": true, - "in-12.6": true, - "in-12.7": true, - "in-12.8": true, - "in-12.9": true, - "in-13.10": true, - "in-13.11": true, - "in-13.13": true, - "in-13.14": true, - "in-13.14.dup1": true, - "in-13.15": true, - "in-13.2": true, - "in-13.3": true, - "in-13.4": true, - "in-13.5": true, - "in-13.6": true, - "in-13.7": true, - "in-13.8": true, - "in-13.9": true, - "in-14.0": true, - "in-14.1": true, - "in-15.0": true, - "in-15.1": true, - "in-15.2": true, - "in-15.3": true, - "in-15.4": true, - "in-15.5": true, - "in-15.6": true, - "in-16.0": true, - "in-16.1": true, - "in-16.2": true, - "in-17.1": true, - "in-17.2": true, - "in-17.3": true, - "in-17.4": true, - "in-18.1": true, - "in-19.10": true, - "in-19.20": true, - "in-19.21": true, - "in-19.22": true, - "in-19.30": true, - "in-19.40": true, - "in-2.1": true, - "in-2.10": true, - "in-2.2": true, - "in-2.3": true, - "in-2.4": true, - "in-2.5": true, - "in-2.6": true, - "in-2.7": true, - "in-2.8": true, - "in-2.9": true, - "in-20.1": true, - "in-21.1": true, - "in-22.1": true, - "in-22.2": true, - "in-22.3": true, - "in-22.4": true, - "in-23.0": true, - "in-23.0-b": true, - "in-23.1": true, - "in-3.1": true, - "in-3.2": true, - "in-3.3": true, - "in-5.1": true, - "in-6.1": true, - "in-6.10": true, - "in-6.2": true, - "in-6.3": true, - "in-6.4": true, - "in-6.5": true, - "in-6.6": true, - "in-6.7": true, - "in-6.8": true, - "in-6.9": true, - "in-7.1": true, - "in-7.2": true, - "in-7.3": true, - "in-7.4": true, - "in-7.5": true, - "in-7.6.1": true, - "in-7.7": true, - "in-7.8.1": true, - "in-8.3": true, - "in-9.1": true, - "in-9.2": true, - "in-9.3": true, - "in-9.4": true - } -} +{} diff --git a/parser/testdata/in2.metadata.json b/parser/testdata/in2.metadata.json index b88b1e8..0967ef4 100644 --- a/parser/testdata/in2.metadata.json +++ b/parser/testdata/in2.metadata.json @@ -1,5 +1 @@ -{ - "todo": { - "in2-1": true - } -} +{} diff --git a/parser/testdata/in3.metadata.json b/parser/testdata/in3.metadata.json index 191f266..0967ef4 100644 --- a/parser/testdata/in3.metadata.json +++ b/parser/testdata/in3.metadata.json @@ -1,10 +1 @@ -{ - "todo": { - "in3-1.1": true, - "in3-2.2": true, - "in3-2.3": true, - "in3-2.4": true, - "in3-4.6": true, - "in3-5.1": true - } -} +{} diff --git a/parser/testdata/in4.metadata.json b/parser/testdata/in4.metadata.json index 0325f78..0967ef4 100644 --- a/parser/testdata/in4.metadata.json +++ b/parser/testdata/in4.metadata.json @@ -1,82 +1 @@ -{ - "todo": { - "10.0": true, - "11.0": true, - "11.1": true, - "11.2": true, - "12.0": true, - "12.1": true, - "13.0": true, - "7.0": true, - "7.1": true, - "7.2": true, - "7.3": true, - "8.0": true, - "8.1": true, - "8.2": true, - "8.3": true, - "9.0": true, - "in4-1.1": true, - "in4-1.2": true, - "in4-1.3": true, - "in4-1.4": true, - "in4-1.5": true, - "in4-1.6": true, - "in4-2.1": true, - "in4-2.2": true, - "in4-2.3": true, - "in4-2.4": true, - "in4-2.5": true, - "in4-2.6": true, - "in4-2.7": true, - "in4-2.8": true, - "in4-3.1": true, - "in4-3.10": true, - "in4-3.11": true, - "in4-3.12": true, - "in4-3.2": true, - "in4-3.21": true, - "in4-3.22": true, - "in4-3.23": true, - "in4-3.24": true, - "in4-3.25": true, - "in4-3.26": true, - "in4-3.31": true, - "in4-3.32": true, - "in4-3.33": true, - "in4-3.34": true, - "in4-3.4": true, - "in4-3.41": true, - "in4-3.42": true, - "in4-3.43": true, - "in4-3.45": true, - "in4-3.46": true, - "in4-3.47": true, - "in4-3.48": true, - "in4-3.5": true, - "in4-3.6": true, - "in4-3.7": true, - "in4-3.8": true, - "in4-3.9": true, - "in4-4.1": true, - "in4-4.11": true, - "in4-4.12": true, - "in4-4.13": true, - "in4-4.14": true, - "in4-4.15": true, - "in4-4.16": true, - "in4-4.17": true, - "in4-4.18": true, - "in4-4.19": true, - "in4-4.2": true, - "in4-4.3": true, - "in4-4.4": true, - "in4-4.5": true, - "in4-4.6": true, - "in4-5.1": true, - "in4-6.1": true, - "in4-6.1-eqp": true, - "in4-6.2": true, - "in4-6.2-eqp": true - } -} +{} diff --git a/parser/testdata/in5.metadata.json b/parser/testdata/in5.metadata.json index 1166648..0967ef4 100644 --- a/parser/testdata/in5.metadata.json +++ b/parser/testdata/in5.metadata.json @@ -1,41 +1 @@ -{ - "todo": { - "10.0": true, - "10.1": true, - "10.2": true, - "10.3": true, - "6.1.1": true, - "6.1.2": true, - "6.2.1": true, - "6.2.2": true, - "6.2.3": true, - "6.3.1": true, - "7.1": true, - "7.2.1": true, - "7.2.2": true, - "7.3.1": true, - "7.3.2": true, - "8.0": true, - "8.1": true, - "8.2": true, - "8.3": true, - "8.4": true, - "9.0": true, - "9.0.dup1": true, - "9.1": true, - "9.1.dup1": true, - "9.2": true, - "in5-1.1": true, - "in5-1.2": true, - "in5-1.3": true, - "in5-2.1": true, - "in5-2.2": true, - "in5-2.4": true, - "in5-3.1": true, - "in5-3.2": true, - "in5-4.1": true, - "in5-4.2": true, - "in5-5.1": true, - "in5-5.2": true - } -} +{} diff --git a/parser/testdata/parser1.metadata.json b/parser/testdata/parser1.metadata.json index 8a87553..0967ef4 100644 --- a/parser/testdata/parser1.metadata.json +++ b/parser/testdata/parser1.metadata.json @@ -1,13 +1 @@ -{ - "todo": { - "parser1-1.1": true, - "parser1-1.2": true, - "parser1-1.4": true, - "parser1-2.1": true, - "parser1-2.2": true, - "parser1-3.1": true, - "parser1-4.2": true, - "parser1-4.3": true, - "parser1-4.4": true - } -} +{} diff --git a/parser/testdata/returning1.metadata.json b/parser/testdata/returning1.metadata.json index 07d8c23..0967ef4 100644 --- a/parser/testdata/returning1.metadata.json +++ b/parser/testdata/returning1.metadata.json @@ -1,89 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "1.4": true, - "1.5": true, - "1.6": true, - "1.7": true, - "1.8": true, - "10.1": true, - "10.2": true, - "10.3a": true, - "10.3a.dup1": true, - "10.3b": true, - "10.3b.dup1": true, - "10.4": true, - "10.4.dup1": true, - "11.1": true, - "11.11": true, - "11.12": true, - "11.2": true, - "11.3": true, - "11.4": true, - "11.5": true, - "11.6": true, - "11.6.dup1": true, - "11.7": true, - "13.0": true, - "13.1": true, - "14.0": true, - "14.1": true, - "15.0": true, - "15.1": true, - "15.2": true, - "16.0": true, - "16.1": true, - "17.0": true, - "18.0": true, - "18.1": true, - "19.0": true, - "19.1": true, - "2.1": true, - "2.2": true, - "20.1": true, - "20.2": true, - "20.3": true, - "21.0": true, - "21.1": true, - "22.0": true, - "22.1": true, - "23.0": true, - "23.1": true, - "23.2": true, - "24.0": true, - "24.1": true, - "24.3": true, - "3.1": true, - "3.2": true, - "4.1": true, - "4.2": true, - "4.3": true, - "4.4": true, - "4.5": true, - "5.0": true, - "5.1": true, - "5.2": true, - "5.3": true, - "5.4": true, - "5.5": true, - "6.0": true, - "6.1": true, - "7.1": true, - "7.2": true, - "7.3": true, - "7.4": true, - "7.5": true, - "7.6": true, - "7.7": true, - "7.8": true, - "8.1": true, - "8.2": true, - "8.3": true, - "8.4": true, - "9.1": true, - "returning1-generated": true - } -} +{} diff --git a/parser/testdata/select1.metadata.json b/parser/testdata/select1.metadata.json index 0773d25..0967ef4 100644 --- a/parser/testdata/select1.metadata.json +++ b/parser/testdata/select1.metadata.json @@ -1,91 +1 @@ -{ - "todo": { - "select1-1.10": true, - "select1-1.11": true, - "select1-1.11.1": true, - "select1-1.11.2": true, - "select1-1.12": true, - "select1-1.13": true, - "select1-1.4": true, - "select1-1.5": true, - "select1-1.6": true, - "select1-1.7": true, - "select1-1.8": true, - "select1-1.8.1": true, - "select1-1.8.2": true, - "select1-1.8.3": true, - "select1-1.9": true, - "select1-1.9.1": true, - "select1-1.9.2": true, - "select1-10.1": true, - "select1-10.2": true, - "select1-10.3": true, - "select1-10.4": true, - "select1-10.5": true, - "select1-10.6": true, - "select1-10.7": true, - "select1-11.1": true, - "select1-11.10": true, - "select1-11.11": true, - "select1-11.2.1": true, - "select1-11.4.1": true, - "select1-11.4.2": true, - "select1-11.7": true, - "select1-12.4": true, - "select1-12.5": true, - "select1-12.6": true, - "select1-12.7": true, - "select1-12.8": true, - "select1-14.1": true, - "select1-14.2": true, - "select1-15.1": true, - "select1-15.3": true, - "select1-16.1": true, - "select1-16.2": true, - "select1-17.1": true, - "select1-17.2": true, - "select1-17.3": true, - "select1-18.1": true, - "select1-18.2": true, - "select1-18.3": true, - "select1-18.4": true, - "select1-19.10": true, - "select1-19.20": true, - "select1-19.21": true, - "select1-2.13.1": true, - "select1-2.13.2": true, - "select1-2.17.1": true, - "select1-2.21": true, - "select1-2.22": true, - "select1-2.5.1": true, - "select1-2.5.2": true, - "select1-2.5.3": true, - "select1-2.8.1": true, - "select1-2.8.2": true, - "select1-2.8.3": true, - "select1-20.10": true, - "select1-20.20": true, - "select1-21.1": true, - "select1-4.10.1": true, - "select1-4.10.2": true, - "select1-4.11": true, - "select1-4.12": true, - "select1-4.13": true, - "select1-4.5": true, - "select1-4.5.dup1": true, - "select1-4.6": true, - "select1-4.8": true, - "select1-4.9.1": true, - "select1-4.9.2": true, - "select1-6.20": true, - "select1-6.21": true, - "select1-6.22": true, - "select1-6.23": true, - "select1-7.9": true, - "select1-8.1": true, - "select1-8.2": true, - "select1-8.3": true, - "select1-8.4": true, - "select1-8.5": true - } -} +{} diff --git a/parser/testdata/select2.metadata.json b/parser/testdata/select2.metadata.json index 38893c1..0967ef4 100644 --- a/parser/testdata/select2.metadata.json +++ b/parser/testdata/select2.metadata.json @@ -1,17 +1 @@ -{ - "todo": { - "select2-2.1": true, - "select2-2.2": true, - "select2-3.1": true, - "select2-3.2a": true, - "select2-3.2b": true, - "select2-3.2c": true, - "select2-4.1": true, - "select2-4.2": true, - "select2-4.3": true, - "select2-4.4": true, - "select2-4.5": true, - "select2-4.6": true, - "select2-4.7": true - } -} +{} diff --git a/parser/testdata/select3.metadata.json b/parser/testdata/select3.metadata.json index 7c6f47f..0967ef4 100644 --- a/parser/testdata/select3.metadata.json +++ b/parser/testdata/select3.metadata.json @@ -1,57 +1 @@ -{ - "todo": { - "12.0": true, - "12.1": true, - "12.2": true, - "12.3": true, - "12.4": true, - "12.5": true, - "12.6": true, - "12.7": true, - "12.8": true, - "select3-1.1": true, - "select3-1.2": true, - "select3-1.3": true, - "select3-2.1": true, - "select3-2.10": true, - "select3-2.11": true, - "select3-2.12": true, - "select3-2.13": true, - "select3-2.14": true, - "select3-2.2": true, - "select3-2.3.1": true, - "select3-2.3.2": true, - "select3-2.4": true, - "select3-2.5": true, - "select3-2.6": true, - "select3-2.7": true, - "select3-2.8": true, - "select3-3.1": true, - "select3-3.2": true, - "select3-3.3": true, - "select3-4.1": true, - "select3-4.2": true, - "select3-4.3": true, - "select3-4.4": true, - "select3-4.5": true, - "select3-5.1": true, - "select3-5.2": true, - "select3-6.1": true, - "select3-6.2": true, - "select3-6.3": true, - "select3-6.4": true, - "select3-6.5": true, - "select3-6.6": true, - "select3-6.7": true, - "select3-6.8": true, - "select3-7.1": true, - "select3-7.2": true, - "select3-8.1": true, - "select3-8.2": true, - "select3-9.100": true, - "select3-generated": true, - "select3-generated.dup1": true, - "select3-generated.dup2": true, - "select3.10.100": true - } -} +{} diff --git a/parser/testdata/select4.metadata.json b/parser/testdata/select4.metadata.json index ca2869b..0967ef4 100644 --- a/parser/testdata/select4.metadata.json +++ b/parser/testdata/select4.metadata.json @@ -1,94 +1 @@ -{ - "todo": { - "select4-1.0": true, - "select4-1.1c": true, - "select4-1.1d": true, - "select4-1.1e": true, - "select4-1.1f": true, - "select4-1.1g": true, - "select4-1.2": true, - "select4-1.4": true, - "select4-10.1": true, - "select4-10.2": true, - "select4-10.3": true, - "select4-10.4": true, - "select4-10.5": true, - "select4-10.6": true, - "select4-10.7": true, - "select4-10.8": true, - "select4-10.9": true, - "select4-11.1": true, - "select4-11.11": true, - "select4-11.12": true, - "select4-11.13": true, - "select4-11.14": true, - "select4-11.15": true, - "select4-11.16": true, - "select4-11.2": true, - "select4-11.3": true, - "select4-11.4": true, - "select4-11.5": true, - "select4-11.6": true, - "select4-11.7": true, - "select4-11.8": true, - "select4-14.1": true, - "select4-14.10": true, - "select4-14.11": true, - "select4-14.12": true, - "select4-14.13": true, - "select4-14.14": true, - "select4-14.15": true, - "select4-14.16": true, - "select4-14.17": true, - "select4-14.2": true, - "select4-14.3": true, - "select4-14.4": true, - "select4-14.5": true, - "select4-14.6": true, - "select4-14.7": true, - "select4-14.8": true, - "select4-14.9": true, - "select4-15.1": true, - "select4-16.1": true, - "select4-16.2": true, - "select4-16.3": true, - "select4-17.1": true, - "select4-17.2": true, - "select4-17.3": true, - "select4-18.1": true, - "select4-18.2": true, - "select4-18.3": true, - "select4-19.1": true, - "select4-2.1": true, - "select4-2.2": true, - "select4-2.5": true, - "select4-3.1.1": true, - "select4-3.1.2": true, - "select4-3.1.3": true, - "select4-3.2": true, - "select4-4.1.1": true, - "select4-4.1.2": true, - "select4-4.1.3": true, - "select4-4.1.4": true, - "select4-4.2": true, - "select4-4.4": true, - "select4-5.2f": true, - "select4-5.2g": true, - "select4-5.2h": true, - "select4-5.2i": true, - "select4-5.2j": true, - "select4-5.2k": true, - "select4-5.3-3807-1": true, - "select4-6.1": true, - "select4-6.2": true, - "select4-6.3": true, - "select4-6.3.1": true, - "select4-6.4": true, - "select4-6.5": true, - "select4-6.6": true, - "select4-6.7": true, - "select4-7.1": true, - "select4-8.2": true, - "select4-9.8": true - } -} +{} diff --git a/parser/testdata/select5.metadata.json b/parser/testdata/select5.metadata.json index 78d68ee..0967ef4 100644 --- a/parser/testdata/select5.metadata.json +++ b/parser/testdata/select5.metadata.json @@ -1,34 +1 @@ -{ - "todo": { - "select5-1.0": true, - "select5-1.1": true, - "select5-1.2": true, - "select5-1.3": true, - "select5-2.1.1": true, - "select5-2.1.2": true, - "select5-3.1": true, - "select5-4.1": true, - "select5-4.2": true, - "select5-4.3": true, - "select5-4.4": true, - "select5-4.5": true, - "select5-5.1": true, - "select5-5.11": true, - "select5-5.2": true, - "select5-5.3": true, - "select5-5.4": true, - "select5-5.5": true, - "select5-6.1": true, - "select5-6.2": true, - "select5-7.2": true, - "select5-8.1": true, - "select5-8.2": true, - "select5-8.3": true, - "select5-8.4": true, - "select5-8.5": true, - "select5-8.6": true, - "select5-8.7": true, - "select5-8.8": true, - "select5-9.1": true - } -} +{} diff --git a/parser/testdata/select6.metadata.json b/parser/testdata/select6.metadata.json index 70830a3..0967ef4 100644 --- a/parser/testdata/select6.metadata.json +++ b/parser/testdata/select6.metadata.json @@ -1,80 +1 @@ -{ - "todo": { - "10.1": true, - "10.2": true, - "10.3": true, - "10.4": true, - "10.5": true, - "10.6": true, - "10.7": true, - "10.8": true, - "11.1": true, - "11.100": true, - "11.2": true, - "11.3": true, - "11.4": true, - "11.5": true, - "12.100": true, - "13.100": true, - "13.110": true, - "13.120": true, - "select6-1.0": true, - "select6-1.2": true, - "select6-1.3": true, - "select6-1.4": true, - "select6-1.5": true, - "select6-1.6": true, - "select6-1.8": true, - "select6-2.0": true, - "select6-2.2": true, - "select6-2.3": true, - "select6-2.4": true, - "select6-2.5": true, - "select6-2.6": true, - "select6-2.8": true, - "select6-2.9": true, - "select6-3.10": true, - "select6-3.11": true, - "select6-3.12": true, - "select6-3.13": true, - "select6-3.2": true, - "select6-3.3": true, - "select6-3.4": true, - "select6-3.5": true, - "select6-3.6": true, - "select6-3.7": true, - "select6-3.8": true, - "select6-3.9": true, - "select6-4.1": true, - "select6-4.2": true, - "select6-4.3": true, - "select6-4.4": true, - "select6-4.5": true, - "select6-5.1": true, - "select6-5.2": true, - "select6-6.1": true, - "select6-6.2": true, - "select6-6.3": true, - "select6-6.4": true, - "select6-6.5": true, - "select6-6.6": true, - "select6-7.1": true, - "select6-7.2": true, - "select6-7.3": true, - "select6-8.1": true, - "select6-8.2": true, - "select6-8.4": true, - "select6-8.5": true, - "select6-9.1": true, - "select6-9.10": true, - "select6-9.11": true, - "select6-9.2": true, - "select6-9.3": true, - "select6-9.4": true, - "select6-9.5": true, - "select6-9.6": true, - "select6-9.7": true, - "select6-9.8": true, - "select6-9.9": true - } -} +{} diff --git a/parser/testdata/select7.metadata.json b/parser/testdata/select7.metadata.json index 089d10d..0967ef4 100644 --- a/parser/testdata/select7.metadata.json +++ b/parser/testdata/select7.metadata.json @@ -1,28 +1 @@ -{ - "todo": { - "8.0": true, - "8.1": true, - "8.2": true, - "select7-1.1": true, - "select7-2.1": true, - "select7-3.1": true, - "select7-4.1": true, - "select7-4.2": true, - "select7-5.1": true, - "select7-5.2": true, - "select7-5.3": true, - "select7-5.4": true, - "select7-6.5": true, - "select7-6.6": true, - "select7-6.7": true, - "select7-6.8": true, - "select7-6.9": true, - "select7-7.1": true, - "select7-7.2": true, - "select7-7.3": true, - "select7-7.4": true, - "select7-7.5": true, - "select7-7.6": true, - "select7-7.7": true - } -} +{} diff --git a/parser/testdata/select8.metadata.json b/parser/testdata/select8.metadata.json index 365e1f8..0967ef4 100644 --- a/parser/testdata/select8.metadata.json +++ b/parser/testdata/select8.metadata.json @@ -1,7 +1 @@ -{ - "todo": { - "select8-1.1": true, - "select8-1.2": true, - "select8-1.3": true - } -} +{} diff --git a/parser/testdata/select9.metadata.json b/parser/testdata/select9.metadata.json index 17e911f..0967ef4 100644 --- a/parser/testdata/select9.metadata.json +++ b/parser/testdata/select9.metadata.json @@ -1,12 +1 @@ -{ - "todo": { - "select9-1.0": true, - "select9-2.0": true, - "select9-2.X": true, - "select9-3.X": true, - "select9-4.X": true, - "select9-6.1": true, - "select9-6.2": true, - "select9-6.3": true - } -} +{} diff --git a/parser/testdata/selectA.metadata.json b/parser/testdata/selectA.metadata.json index 4234a50..0967ef4 100644 --- a/parser/testdata/selectA.metadata.json +++ b/parser/testdata/selectA.metadata.json @@ -1,218 +1 @@ -{ - "todo": { - "4.1.1": true, - "4.1.3": true, - "4.2.1": true, - "4.2.2": true, - "5.0": true, - "5.4": true, - "6.1": true, - "7.1": true, - "7.2": true, - "7.3": true, - "7.4": true, - "8.0": true, - "8.1": true, - "9.0": true, - "9.1": true, - "9.2": true, - "selectA-1.0": true, - "selectA-1.1": true, - "selectA-1.2": true, - "selectA-2.1": true, - "selectA-2.10": true, - "selectA-2.11": true, - "selectA-2.12": true, - "selectA-2.13": true, - "selectA-2.14": true, - "selectA-2.15": true, - "selectA-2.16": true, - "selectA-2.17": true, - "selectA-2.18": true, - "selectA-2.19": true, - "selectA-2.2": true, - "selectA-2.20": true, - "selectA-2.21": true, - "selectA-2.22": true, - "selectA-2.23": true, - "selectA-2.24": true, - "selectA-2.25": true, - "selectA-2.26": true, - "selectA-2.27": true, - "selectA-2.28": true, - "selectA-2.29": true, - "selectA-2.3": true, - "selectA-2.30": true, - "selectA-2.31": true, - "selectA-2.32": true, - "selectA-2.33": true, - "selectA-2.34": true, - "selectA-2.35": true, - "selectA-2.36": true, - "selectA-2.37": true, - "selectA-2.38": true, - "selectA-2.39": true, - "selectA-2.4": true, - "selectA-2.40": true, - "selectA-2.41": true, - "selectA-2.42": true, - "selectA-2.43": true, - "selectA-2.44": true, - "selectA-2.45": true, - "selectA-2.46": true, - "selectA-2.47": true, - "selectA-2.48": true, - "selectA-2.49": true, - "selectA-2.5": true, - "selectA-2.50": true, - "selectA-2.51": true, - "selectA-2.52": true, - "selectA-2.53": true, - "selectA-2.54": true, - "selectA-2.55": true, - "selectA-2.56": true, - "selectA-2.57": true, - "selectA-2.58": true, - "selectA-2.59": true, - "selectA-2.6": true, - "selectA-2.60": true, - "selectA-2.61": true, - "selectA-2.62": true, - "selectA-2.63": true, - "selectA-2.64": true, - "selectA-2.65": true, - "selectA-2.66": true, - "selectA-2.67": true, - "selectA-2.68": true, - "selectA-2.69": true, - "selectA-2.7": true, - "selectA-2.70": true, - "selectA-2.71": true, - "selectA-2.72": true, - "selectA-2.73": true, - "selectA-2.74": true, - "selectA-2.75": true, - "selectA-2.76": true, - "selectA-2.77": true, - "selectA-2.78": true, - "selectA-2.79": true, - "selectA-2.8": true, - "selectA-2.80": true, - "selectA-2.81": true, - "selectA-2.82": true, - "selectA-2.83": true, - "selectA-2.84": true, - "selectA-2.85": true, - "selectA-2.86": true, - "selectA-2.87": true, - "selectA-2.88": true, - "selectA-2.89": true, - "selectA-2.9": true, - "selectA-2.90": true, - "selectA-2.91": true, - "selectA-2.92": true, - "selectA-2.93": true, - "selectA-2.94": true, - "selectA-2.95": true, - "selectA-2.96": true, - "selectA-3.0": true, - "selectA-3.1": true, - "selectA-3.10": true, - "selectA-3.11": true, - "selectA-3.12": true, - "selectA-3.13": true, - "selectA-3.14": true, - "selectA-3.15": true, - "selectA-3.16": true, - "selectA-3.17": true, - "selectA-3.18": true, - "selectA-3.19": true, - "selectA-3.2": true, - "selectA-3.20": true, - "selectA-3.21": true, - "selectA-3.22": true, - "selectA-3.23": true, - "selectA-3.24": true, - "selectA-3.25": true, - "selectA-3.26": true, - "selectA-3.27": true, - "selectA-3.28": true, - "selectA-3.29": true, - "selectA-3.3": true, - "selectA-3.30": true, - "selectA-3.31": true, - "selectA-3.32": true, - "selectA-3.33": true, - "selectA-3.34": true, - "selectA-3.35": true, - "selectA-3.36": true, - "selectA-3.37": true, - "selectA-3.38": true, - "selectA-3.39": true, - "selectA-3.4": true, - "selectA-3.40": true, - "selectA-3.41": true, - "selectA-3.42": true, - "selectA-3.43": true, - "selectA-3.44": true, - "selectA-3.45": true, - "selectA-3.46": true, - "selectA-3.47": true, - "selectA-3.48": true, - "selectA-3.49": true, - "selectA-3.5": true, - "selectA-3.50": true, - "selectA-3.51": true, - "selectA-3.52": true, - "selectA-3.53": true, - "selectA-3.54": true, - "selectA-3.55": true, - "selectA-3.56": true, - "selectA-3.57": true, - "selectA-3.58": true, - "selectA-3.59": true, - "selectA-3.6": true, - "selectA-3.60": true, - "selectA-3.61": true, - "selectA-3.62": true, - "selectA-3.63": true, - "selectA-3.64": true, - "selectA-3.65": true, - "selectA-3.66": true, - "selectA-3.67": true, - "selectA-3.68": true, - "selectA-3.69": true, - "selectA-3.7": true, - "selectA-3.70": true, - "selectA-3.71": true, - "selectA-3.72": true, - "selectA-3.73": true, - "selectA-3.74": true, - "selectA-3.75": true, - "selectA-3.76": true, - "selectA-3.77": true, - "selectA-3.78": true, - "selectA-3.79": true, - "selectA-3.8": true, - "selectA-3.80": true, - "selectA-3.81": true, - "selectA-3.82": true, - "selectA-3.83": true, - "selectA-3.84": true, - "selectA-3.85": true, - "selectA-3.86": true, - "selectA-3.87": true, - "selectA-3.88": true, - "selectA-3.89": true, - "selectA-3.9": true, - "selectA-3.90": true, - "selectA-3.91": true, - "selectA-3.92": true, - "selectA-3.93": true, - "selectA-3.94": true, - "selectA-3.95": true, - "selectA-3.96": true, - "selectA-3.97": true, - "selectA-3.98": true - } -} +{} diff --git a/parser/testdata/selectB.metadata.json b/parser/testdata/selectB.metadata.json index e8fa811..0967ef4 100644 --- a/parser/testdata/selectB.metadata.json +++ b/parser/testdata/selectB.metadata.json @@ -1,33 +1 @@ -{ - "todo": { - "selectB-1.1": true, - "selectB-2.1": true, - "selectB-3.0": true, - "selectB-5.0": true, - "selectB-generated": true, - "selectB-generated.dup1": true, - "selectB-generated.dup10": true, - "selectB-generated.dup11": true, - "selectB-generated.dup12": true, - "selectB-generated.dup13": true, - "selectB-generated.dup14": true, - "selectB-generated.dup15": true, - "selectB-generated.dup16": true, - "selectB-generated.dup17": true, - "selectB-generated.dup18": true, - "selectB-generated.dup19": true, - "selectB-generated.dup2": true, - "selectB-generated.dup20": true, - "selectB-generated.dup21": true, - "selectB-generated.dup22": true, - "selectB-generated.dup23": true, - "selectB-generated.dup24": true, - "selectB-generated.dup3": true, - "selectB-generated.dup4": true, - "selectB-generated.dup5": true, - "selectB-generated.dup6": true, - "selectB-generated.dup7": true, - "selectB-generated.dup8": true, - "selectB-generated.dup9": true - } -} +{} diff --git a/parser/testdata/selectC.metadata.json b/parser/testdata/selectC.metadata.json index 25a998d..0967ef4 100644 --- a/parser/testdata/selectC.metadata.json +++ b/parser/testdata/selectC.metadata.json @@ -1,33 +1 @@ -{ - "todo": { - "5.0": true, - "5.1": true, - "5.2": true, - "5.3": true, - "selectC-1.1": true, - "selectC-1.10": true, - "selectC-1.11": true, - "selectC-1.12.1": true, - "selectC-1.12.2": true, - "selectC-1.13.1": true, - "selectC-1.13.2": true, - "selectC-1.14.1": true, - "selectC-1.14.2": true, - "selectC-1.2": true, - "selectC-1.3": true, - "selectC-1.4": true, - "selectC-1.5": true, - "selectC-1.6": true, - "selectC-1.7": true, - "selectC-1.8": true, - "selectC-1.9": true, - "selectC-2.1": true, - "selectC-3.1": true, - "selectC-3.2": true, - "selectC-3.3": true, - "selectC-4.1": true, - "selectC-4.2": true, - "selectC-4.2b": true, - "selectC-4.3": true - } -} +{} diff --git a/parser/testdata/selectD.metadata.json b/parser/testdata/selectD.metadata.json index 1baabba..0967ef4 100644 --- a/parser/testdata/selectD.metadata.json +++ b/parser/testdata/selectD.metadata.json @@ -1,6 +1 @@ -{ - "todo": { - "selectD-4.1": true, - "selectD-generated": true - } -} +{} diff --git a/parser/testdata/selectE.metadata.json b/parser/testdata/selectE.metadata.json index b5cb5f1..0967ef4 100644 --- a/parser/testdata/selectE.metadata.json +++ b/parser/testdata/selectE.metadata.json @@ -1,5 +1 @@ -{ - "todo": { - "selectE-3.1": true - } -} +{} diff --git a/parser/testdata/selectF.metadata.json b/parser/testdata/selectF.metadata.json index dab7b6d..0967ef4 100644 --- a/parser/testdata/selectF.metadata.json +++ b/parser/testdata/selectF.metadata.json @@ -1,6 +1 @@ -{ - "todo": { - "1": true, - "2": true - } -} +{} diff --git a/parser/testdata/selectH.metadata.json b/parser/testdata/selectH.metadata.json index f1e164e..0967ef4 100644 --- a/parser/testdata/selectH.metadata.json +++ b/parser/testdata/selectH.metadata.json @@ -1,16 +1 @@ -{ - "todo": { - "1.1": true, - "1.2": true, - "2.1": true, - "3.1": true, - "3.3": true, - "3.4": true, - "3.6": true, - "4.1": true, - "4.2": true, - "5.0": true, - "5.1": true, - "5.2": true - } -} +{} diff --git a/parser/testdata/tokenize.metadata.json b/parser/testdata/tokenize.metadata.json index 3b79055..0967ef4 100644 --- a/parser/testdata/tokenize.metadata.json +++ b/parser/testdata/tokenize.metadata.json @@ -1,18 +1 @@ -{ - "todo": { - "tokenize-1.1": true, - "tokenize-1.10": true, - "tokenize-1.11": true, - "tokenize-1.12": true, - "tokenize-1.2": true, - "tokenize-1.3": true, - "tokenize-1.4": true, - "tokenize-1.5": true, - "tokenize-1.6": true, - "tokenize-1.7": true, - "tokenize-1.8": true, - "tokenize-1.9": true, - "tokenize-2.1": true, - "tokenize-2.2": true - } -} +{} diff --git a/parser/testdata/trigger1.metadata.json b/parser/testdata/trigger1.metadata.json index 60239c0..a04608a 100644 --- a/parser/testdata/trigger1.metadata.json +++ b/parser/testdata/trigger1.metadata.json @@ -1,77 +1,7 @@ { "todo": { - "trigger1-1.1.1": true, - "trigger1-1.1.2": true, - "trigger1-1.1.3": true, - "trigger1-1.10": true, - "trigger1-1.11": true, - "trigger1-1.12": true, - "trigger1-1.13": true, - "trigger1-1.14": true, - "trigger1-1.2.0": true, - "trigger1-1.2.1": true, - "trigger1-1.2.2": true, - "trigger1-1.3": true, - "trigger1-1.4": true, - "trigger1-1.5": true, - "trigger1-1.6.1": true, - "trigger1-1.6.2": true, - "trigger1-1.7": true, - "trigger1-1.8": true, - "trigger1-1.9": true, - "trigger1-10.1": true, - "trigger1-10.10": true, - "trigger1-10.11": true, - "trigger1-10.2": true, - "trigger1-10.3": true, - "trigger1-10.4": true, - "trigger1-10.5": true, - "trigger1-10.6": true, - "trigger1-10.7": true, - "trigger1-10.8": true, - "trigger1-11.1": true, - "trigger1-15.2": true, - "trigger1-16.2": true, - "trigger1-16.3": true, - "trigger1-16.4": true, - "trigger1-16.5": true, - "trigger1-16.6": true, - "trigger1-16.7": true, - "trigger1-17.0": true, - "trigger1-18.0": true, - "trigger1-18.1": true, - "trigger1-19.0": true, - "trigger1-19.1": true, "trigger1-2.1": true, "trigger1-2.2": true, - "trigger1-20.1": true, - "trigger1-21.1": true, - "trigger1-22.10": true, - "trigger1-23.1": true, - "trigger1-24.1": true, - "trigger1-24.2": true, - "trigger1-3.2": true, - "trigger1-3.4": true, - "trigger1-3.5": true, - "trigger1-3.6.1": true, - "trigger1-3.6.2": true, - "trigger1-3.7": true, - "trigger1-3.8": true, - "trigger1-3.8.dup1": true, - "trigger1-4.1": true, - "trigger1-6.1": true, - "trigger1-6.2": true, - "trigger1-6.3": true, - "trigger1-6.4": true, - "trigger1-6.6": true, - "trigger1-6.7": true, - "trigger1-8.1": true, - "trigger1-8.2": true, - "trigger1-8.3": true, - "trigger1-8.4": true, - "trigger1-9.1": true, - "trigger1-9.1.dup1": true, - "trigger1-9.2": true, - "trigger1-9.2.dup1": true + "trigger1-23.1": true } } diff --git a/parser/testdata/upsert1.metadata.json b/parser/testdata/upsert1.metadata.json index 9754cae..0967ef4 100644 --- a/parser/testdata/upsert1.metadata.json +++ b/parser/testdata/upsert1.metadata.json @@ -1,39 +1 @@ -{ - "todo": { - "upsert1-100": true, - "upsert1-1000": true, - "upsert1-101": true, - "upsert1-102": true, - "upsert1-110": true, - "upsert1-1100": true, - "upsert1-120": true, - "upsert1-1200": true, - "upsert1-1210": true, - "upsert1-130": true, - "upsert1-1300": true, - "upsert1-140": true, - "upsert1-200": true, - "upsert1-201": true, - "upsert1-210": true, - "upsert1-300": true, - "upsert1-310": true, - "upsert1-320": true, - "upsert1-400": true, - "upsert1-410": true, - "upsert1-500": true, - "upsert1-600": true, - "upsert1-610": true, - "upsert1-700": true, - "upsert1-710": true, - "upsert1-720": true, - "upsert1-730": true, - "upsert1-740": true, - "upsert1-750": true, - "upsert1-760": true, - "upsert1-770": true, - "upsert1-780": true, - "upsert1-800": true, - "upsert1-900": true, - "upsert1-910": true - } -} +{} diff --git a/parser/testdata/upsert2.metadata.json b/parser/testdata/upsert2.metadata.json index f4d372b..0967ef4 100644 --- a/parser/testdata/upsert2.metadata.json +++ b/parser/testdata/upsert2.metadata.json @@ -1,18 +1 @@ -{ - "todo": { - "upsert2-100": true, - "upsert2-110": true, - "upsert2-200": true, - "upsert2-201": true, - "upsert2-202": true, - "upsert2-210": true, - "upsert2-300": true, - "upsert2-310": true, - "upsert2-320": true, - "upsert2-321": true, - "upsert2-400": true, - "upsert2-410": true, - "upsert2-420": true, - "upsert2-421": true - } -} +{} diff --git a/parser/testdata/upsert3.metadata.json b/parser/testdata/upsert3.metadata.json index c7cfc8c..0967ef4 100644 --- a/parser/testdata/upsert3.metadata.json +++ b/parser/testdata/upsert3.metadata.json @@ -1,11 +1 @@ -{ - "todo": { - "upsert3-100": true, - "upsert3-110": true, - "upsert3-120": true, - "upsert3-130": true, - "upsert3-140": true, - "upsert3-200": true, - "upsert3-210": true - } -} +{} diff --git a/parser/testdata/upsert4.metadata.json b/parser/testdata/upsert4.metadata.json index 9fe7f1d..0967ef4 100644 --- a/parser/testdata/upsert4.metadata.json +++ b/parser/testdata/upsert4.metadata.json @@ -1,35 +1 @@ -{ - "todo": { - "5.0": true, - "9.0": true, - "9.1": true, - "upsert4-generated": true, - "upsert4-generated.dup1": true, - "upsert4-generated.dup10": true, - "upsert4-generated.dup11": true, - "upsert4-generated.dup12": true, - "upsert4-generated.dup13": true, - "upsert4-generated.dup14": true, - "upsert4-generated.dup15": true, - "upsert4-generated.dup16": true, - "upsert4-generated.dup17": true, - "upsert4-generated.dup18": true, - "upsert4-generated.dup19": true, - "upsert4-generated.dup2": true, - "upsert4-generated.dup20": true, - "upsert4-generated.dup21": true, - "upsert4-generated.dup22": true, - "upsert4-generated.dup23": true, - "upsert4-generated.dup24": true, - "upsert4-generated.dup25": true, - "upsert4-generated.dup26": true, - "upsert4-generated.dup27": true, - "upsert4-generated.dup3": true, - "upsert4-generated.dup4": true, - "upsert4-generated.dup5": true, - "upsert4-generated.dup6": true, - "upsert4-generated.dup7": true, - "upsert4-generated.dup8": true, - "upsert4-generated.dup9": true - } -} +{} diff --git a/parser/testdata/upsert5.metadata.json b/parser/testdata/upsert5.metadata.json index 74596bc..0967ef4 100644 --- a/parser/testdata/upsert5.metadata.json +++ b/parser/testdata/upsert5.metadata.json @@ -1,58 +1 @@ -{ - "todo": { - "2.0": true, - "2.1": true, - "3.0": true, - "3.1": true, - "3.2": true, - "3.3": true, - "3.4": true, - "3.5": true, - "3.6": true, - "4.3.0": true, - "4.3.1": true, - "4.3.2": true, - "4.3.3": true, - "upsert5-generated": true, - "upsert5-generated.dup1": true, - "upsert5-generated.dup10": true, - "upsert5-generated.dup11": true, - "upsert5-generated.dup12": true, - "upsert5-generated.dup13": true, - "upsert5-generated.dup14": true, - "upsert5-generated.dup15": true, - "upsert5-generated.dup16": true, - "upsert5-generated.dup17": true, - "upsert5-generated.dup18": true, - "upsert5-generated.dup19": true, - "upsert5-generated.dup2": true, - "upsert5-generated.dup20": true, - "upsert5-generated.dup21": true, - "upsert5-generated.dup22": true, - "upsert5-generated.dup23": true, - "upsert5-generated.dup24": true, - "upsert5-generated.dup25": true, - "upsert5-generated.dup26": true, - "upsert5-generated.dup27": true, - "upsert5-generated.dup28": true, - "upsert5-generated.dup29": true, - "upsert5-generated.dup3": true, - "upsert5-generated.dup30": true, - "upsert5-generated.dup31": true, - "upsert5-generated.dup32": true, - "upsert5-generated.dup33": true, - "upsert5-generated.dup34": true, - "upsert5-generated.dup35": true, - "upsert5-generated.dup36": true, - "upsert5-generated.dup37": true, - "upsert5-generated.dup38": true, - "upsert5-generated.dup39": true, - "upsert5-generated.dup4": true, - "upsert5-generated.dup40": true, - "upsert5-generated.dup5": true, - "upsert5-generated.dup6": true, - "upsert5-generated.dup7": true, - "upsert5-generated.dup8": true, - "upsert5-generated.dup9": true - } -} +{} diff --git a/parser/testdata/window1.metadata.json b/parser/testdata/window1.metadata.json index b7652a8..0967ef4 100644 --- a/parser/testdata/window1.metadata.json +++ b/parser/testdata/window1.metadata.json @@ -1,292 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "1.4": true, - "1.5": true, - "10.0": true, - "10.1": true, - "10.2": true, - "10.3": true, - "10.4": true, - "10.5": true, - "10.6": true, - "10.7": true, - "10.8": true, - "11.0": true, - "11.1": true, - "11.2": true, - "11.3": true, - "11.4": true, - "12.100": true, - "12.110": true, - "13.1": true, - "13.2.1": true, - "13.2.2": true, - "13.3": true, - "13.4": true, - "13.5": true, - "14.0": true, - "14.1": true, - "15.0": true, - "15.1": true, - "15.2": true, - "16.0": true, - "16.1": true, - "16.2": true, - "17.0": true, - "17.1": true, - "17.2": true, - "17.3": true, - "18.0": true, - "18.3.1": true, - "18.3.2": true, - "18.3.3": true, - "18.3.4": true, - "18.3.5": true, - "19.0": true, - "19.1": true, - "19.2.1": true, - "19.2.2": true, - "19.3.1": true, - "19.3.2": true, - "20.0": true, - "20.1": true, - "20.2.1": true, - "20.2.2": true, - "20.3.1": true, - "20.3.2": true, - "21.0": true, - "21.1": true, - "23.0": true, - "24.1": true, - "24.2": true, - "25.0": true, - "25.1": true, - "25.2": true, - "26.0": true, - "26.1": true, - "26.2": true, - "26.3": true, - "27.0": true, - "27.1": true, - "27.2": true, - "28.1.1": true, - "28.1.2": true, - "28.2.1": true, - "28.2.1.dup1": true, - "28.2.2": true, - "29.1": true, - "29.2": true, - "30.0": true, - "31.1": true, - "31.2": true, - "31.3": true, - "31.3.dup1": true, - "31.3.dup2": true, - "32.10": true, - "33.1": true, - "33.2": true, - "34.1": true, - "34.2": true, - "35.0": true, - "35.1": true, - "35.2": true, - "35.3": true, - "35.4": true, - "36.10": true, - "36.20": true, - "36.30": true, - "36.40": true, - "37.10": true, - "37.20": true, - "38.10": true, - "38.20": true, - "38.30": true, - "39.1": true, - "39.2": true, - "39.3": true, - "39.4": true, - "4.0": true, - "4.1": true, - "4.10.1": true, - "4.10.2": true, - "4.2": true, - "4.3": true, - "4.4": true, - "4.5": true, - "4.6": true, - "4.7": true, - "4.8": true, - "4.9": true, - "40.1": true, - "41.1": true, - "41.2": true, - "41.2.dup1": true, - "41.3": true, - "42.1": true, - "42.2": true, - "42.3": true, - "42.3.dup1": true, - "42.4": true, - "42.5": true, - "42.6": true, - "42.7": true, - "43.1.1": true, - "43.1.2": true, - "43.2.1": true, - "43.2.2": true, - "43.2.3": true, - "43.2.4": true, - "43.2.5": true, - "43.2.6": true, - "44.1": true, - "44.2.1": true, - "44.2.2": true, - "44.3.1": true, - "44.3.2": true, - "44.4.2": true, - "45.1": true, - "45.2": true, - "46.1": true, - "46.2": true, - "46.3": true, - "46.4": true, - "47.0": true, - "47.1": true, - "47.2": true, - "48.0": true, - "48.1": true, - "49.1": true, - "49.2": true, - "5.1": true, - "5.2": true, - "5.3": true, - "5.4": true, - "50.0": true, - "50.1": true, - "50.2": true, - "50.3": true, - "50.4": true, - "50.5": true, - "51.1": true, - "52.1": true, - "52.2": true, - "52.3": true, - "52.4": true, - "53.0": true, - "54.1": true, - "54.2": true, - "54.3": true, - "54.4": true, - "55.1": true, - "56.1": true, - "56.2": true, - "57.1": true, - "57.1.dup1": true, - "57.2": true, - "57.2.dup1": true, - "57.3": true, - "58.1": true, - "59.1": true, - "6.1": true, - "6.2": true, - "6.3": true, - "60.1": true, - "61.1": true, - "61.3.0": true, - "61.3.1": true, - "61.4.2": true, - "61.4.3": true, - "61.4.4": true, - "62.1": true, - "62.2": true, - "62.3": true, - "62.4": true, - "63.1": true, - "63.2": true, - "63.3": true, - "64.1": true, - "64.2": true, - "64.3": true, - "64.4": true, - "65.1": true, - "65.2": true, - "65.3": true, - "65.4": true, - "66.1": true, - "66.3": true, - "67.0": true, - "67.1": true, - "67.2": true, - "68.0": true, - "69.0": true, - "69.1": true, - "69.2": true, - "7.0": true, - "7.1.1": true, - "7.1.2": true, - "7.1.3": true, - "7.1.4": true, - "7.1.5": true, - "7.1.6": true, - "7.1.7": true, - "7.1.8": true, - "7.2": true, - "7.3": true, - "7.4": true, - "70.0": true, - "70.1": true, - "70.2": true, - "71.0": true, - "72.0": true, - "72.1": true, - "72.1.dup1": true, - "73.0": true, - "73.1": true, - "73.2": true, - "73.3": true, - "73.4": true, - "73.5": true, - "73.6": true, - "73.7": true, - "74.0": true, - "74.1": true, - "74.2": true, - "74.3": true, - "74.4": true, - "75.0": true, - "75.1": true, - "76.0": true, - "76.1": true, - "76.2": true, - "76.3": true, - "76.4": true, - "76.5": true, - "77.1": true, - "77.2": true, - "78.1": true, - "78.2": true, - "79.0": true, - "79.1": true, - "79.2": true, - "79.3": true, - "8.0": true, - "8.1.1": true, - "8.1.2": true, - "8.2.1": true, - "8.2.2": true, - "9.0": true, - "9.1.1": true, - "9.1.2": true, - "9.1.3": true, - "9.2": true, - "9.3": true, - "9.4": true, - "9.4.2": true, - "9.4.3": true, - "window1-generated": true - } -} +{} diff --git a/parser/testdata/window2.metadata.json b/parser/testdata/window2.metadata.json index 4137091..0967ef4 100644 --- a/parser/testdata/window2.metadata.json +++ b/parser/testdata/window2.metadata.json @@ -1,69 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "2.1": true, - "2.10": true, - "2.11": true, - "2.13": true, - "2.14": true, - "2.15": true, - "2.16": true, - "2.17": true, - "2.18": true, - "2.19": true, - "2.2": true, - "2.20": true, - "2.21": true, - "2.22": true, - "2.23": true, - "2.24": true, - "2.25": true, - "2.26": true, - "2.27": true, - "2.28": true, - "2.29": true, - "2.3": true, - "2.30": true, - "2.4": true, - "2.5": true, - "2.6": true, - "2.7": true, - "2.8": true, - "2.9": true, - "3.1": true, - "3.2": true, - "3.3": true, - "3.4": true, - "4.0": true, - "4.1": true, - "4.10": true, - "4.11": true, - "4.2": true, - "4.3": true, - "4.4": true, - "4.5": true, - "4.6.1": true, - "4.6.2": true, - "4.6.3": true, - "4.6.4": true, - "4.7.1": true, - "4.7.2": true, - "4.7.3": true, - "4.7.4": true, - "4.8.1": true, - "4.8.2": true, - "4.8.3": true, - "4.8.4": true, - "5.0": true, - "6.0": true, - "6.1": true, - "6.2": true, - "7.0": true, - "7.1": true, - "7.2": true, - "7.3": true - } -} +{} diff --git a/parser/testdata/window3.metadata.json b/parser/testdata/window3.metadata.json index 0cd3ad8..0967ef4 100644 --- a/parser/testdata/window3.metadata.json +++ b/parser/testdata/window3.metadata.json @@ -1,1226 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.1.10.1": true, - "1.1.10.2": true, - "1.1.10.3": true, - "1.1.10.4": true, - "1.1.10.5": true, - "1.1.10.6": true, - "1.1.11.1": true, - "1.1.11.2": true, - "1.1.11.3": true, - "1.1.11.4": true, - "1.1.11.5": true, - "1.1.11.6": true, - "1.1.12.1": true, - "1.1.12.2": true, - "1.1.12.3": true, - "1.1.12.4": true, - "1.1.12.5": true, - "1.1.12.6": true, - "1.1.13.1": true, - "1.1.13.2": true, - "1.1.13.3": true, - "1.1.13.4": true, - "1.1.13.5": true, - "1.1.13.6": true, - "1.1.14.1": true, - "1.1.14.2": true, - "1.1.14.3": true, - "1.1.14.4": true, - "1.1.14.5": true, - "1.1.14.6": true, - "1.1.14.7": true, - "1.1.14.8": true, - "1.1.14.9": true, - "1.1.15.1": true, - "1.1.15.2": true, - "1.1.15.3": true, - "1.1.15.4": true, - "1.1.2.1": true, - "1.1.2.2": true, - "1.1.3.1": true, - "1.1.3.2": true, - "1.1.3.3": true, - "1.1.4.1": true, - "1.1.4.2": true, - "1.1.4.3": true, - "1.1.4.4": true, - "1.1.4.5": true, - "1.1.4.6": true, - "1.1.5.1": true, - "1.1.5.2": true, - "1.1.5.3": true, - "1.1.5.4": true, - "1.1.5.5": true, - "1.1.5.6": true, - "1.1.6.1": true, - "1.1.9.1": true, - "1.1.9.2": true, - "1.1.9.3": true, - "1.1.9.4": true, - "1.1.9.5": true, - "1.1.9.6": true, - "1.10.10.1": true, - "1.10.10.2": true, - "1.10.10.3": true, - "1.10.10.4": true, - "1.10.10.5": true, - "1.10.10.6": true, - "1.10.11.1": true, - "1.10.11.2": true, - "1.10.11.3": true, - "1.10.11.4": true, - "1.10.11.5": true, - "1.10.11.6": true, - "1.10.12.1": true, - "1.10.12.2": true, - "1.10.12.3": true, - "1.10.12.4": true, - "1.10.12.5": true, - "1.10.12.6": true, - "1.10.13.1": true, - "1.10.13.2": true, - "1.10.13.3": true, - "1.10.13.4": true, - "1.10.13.5": true, - "1.10.13.6": true, - "1.10.14.1": true, - "1.10.14.2": true, - "1.10.14.3": true, - "1.10.14.4": true, - "1.10.14.5": true, - "1.10.14.6": true, - "1.10.14.7": true, - "1.10.14.8": true, - "1.10.14.9": true, - "1.10.15.1": true, - "1.10.15.2": true, - "1.10.15.3": true, - "1.10.15.4": true, - "1.10.2.1": true, - "1.10.2.2": true, - "1.10.3.1": true, - "1.10.3.2": true, - "1.10.3.3": true, - "1.10.4.1": true, - "1.10.4.2": true, - "1.10.4.3": true, - "1.10.4.4": true, - "1.10.4.5": true, - "1.10.4.6": true, - "1.10.5.1": true, - "1.10.5.2": true, - "1.10.5.3": true, - "1.10.5.4": true, - "1.10.5.5": true, - "1.10.5.6": true, - "1.10.6.1": true, - "1.10.9.1": true, - "1.10.9.2": true, - "1.10.9.3": true, - "1.10.9.4": true, - "1.10.9.5": true, - "1.10.9.6": true, - "1.11.10.1": true, - "1.11.10.2": true, - "1.11.10.3": true, - "1.11.10.4": true, - "1.11.10.5": true, - "1.11.10.6": true, - "1.11.11.1": true, - "1.11.11.2": true, - "1.11.11.3": true, - "1.11.11.4": true, - "1.11.11.5": true, - "1.11.11.6": true, - "1.11.12.1": true, - "1.11.12.2": true, - "1.11.12.3": true, - "1.11.12.4": true, - "1.11.12.5": true, - "1.11.12.6": true, - "1.11.13.1": true, - "1.11.13.2": true, - "1.11.13.3": true, - "1.11.13.4": true, - "1.11.13.5": true, - "1.11.13.6": true, - "1.11.14.1": true, - "1.11.14.2": true, - "1.11.14.3": true, - "1.11.14.4": true, - "1.11.14.5": true, - "1.11.14.6": true, - "1.11.14.7": true, - "1.11.14.8": true, - "1.11.14.9": true, - "1.11.15.1": true, - "1.11.15.2": true, - "1.11.15.3": true, - "1.11.15.4": true, - "1.11.2.1": true, - "1.11.2.2": true, - "1.11.3.1": true, - "1.11.3.2": true, - "1.11.3.3": true, - "1.11.4.1": true, - "1.11.4.2": true, - "1.11.4.3": true, - "1.11.4.4": true, - "1.11.4.5": true, - "1.11.4.6": true, - "1.11.5.1": true, - "1.11.5.2": true, - "1.11.5.3": true, - "1.11.5.4": true, - "1.11.5.5": true, - "1.11.5.6": true, - "1.11.6.1": true, - "1.11.9.1": true, - "1.11.9.2": true, - "1.11.9.3": true, - "1.11.9.4": true, - "1.11.9.5": true, - "1.11.9.6": true, - "1.12.10.1": true, - "1.12.10.2": true, - "1.12.10.3": true, - "1.12.10.4": true, - "1.12.10.5": true, - "1.12.10.6": true, - "1.12.11.1": true, - "1.12.11.2": true, - "1.12.11.3": true, - "1.12.11.4": true, - "1.12.11.5": true, - "1.12.11.6": true, - "1.12.12.1": true, - "1.12.12.2": true, - "1.12.12.3": true, - "1.12.12.4": true, - "1.12.12.5": true, - "1.12.12.6": true, - "1.12.13.1": true, - "1.12.13.2": true, - "1.12.13.3": true, - "1.12.13.4": true, - "1.12.13.5": true, - "1.12.13.6": true, - "1.12.14.1": true, - "1.12.14.2": true, - "1.12.14.3": true, - "1.12.14.4": true, - "1.12.14.5": true, - "1.12.14.6": true, - "1.12.14.7": true, - "1.12.14.8": true, - "1.12.14.9": true, - "1.12.15.1": true, - "1.12.15.2": true, - "1.12.15.3": true, - "1.12.15.4": true, - "1.12.2.1": true, - "1.12.2.2": true, - "1.12.3.1": true, - "1.12.3.2": true, - "1.12.3.3": true, - "1.12.4.1": true, - "1.12.4.2": true, - "1.12.4.3": true, - "1.12.4.4": true, - "1.12.4.5": true, - "1.12.4.6": true, - "1.12.5.1": true, - "1.12.5.2": true, - "1.12.5.3": true, - "1.12.5.4": true, - "1.12.5.5": true, - "1.12.5.6": true, - "1.12.6.1": true, - "1.12.9.1": true, - "1.12.9.2": true, - "1.12.9.3": true, - "1.12.9.4": true, - "1.12.9.5": true, - "1.12.9.6": true, - "1.13.10.1": true, - "1.13.10.2": true, - "1.13.10.3": true, - "1.13.10.4": true, - "1.13.10.5": true, - "1.13.10.6": true, - "1.13.11.1": true, - "1.13.11.2": true, - "1.13.11.3": true, - "1.13.11.4": true, - "1.13.11.5": true, - "1.13.11.6": true, - "1.13.12.1": true, - "1.13.12.2": true, - "1.13.12.3": true, - "1.13.12.4": true, - "1.13.12.5": true, - "1.13.12.6": true, - "1.13.13.1": true, - "1.13.13.2": true, - "1.13.13.3": true, - "1.13.13.4": true, - "1.13.13.5": true, - "1.13.13.6": true, - "1.13.14.1": true, - "1.13.14.2": true, - "1.13.14.3": true, - "1.13.14.4": true, - "1.13.14.5": true, - "1.13.14.6": true, - "1.13.14.7": true, - "1.13.14.8": true, - "1.13.14.9": true, - "1.13.15.1": true, - "1.13.15.2": true, - "1.13.15.3": true, - "1.13.15.4": true, - "1.13.2.1": true, - "1.13.2.2": true, - "1.13.3.1": true, - "1.13.3.2": true, - "1.13.3.3": true, - "1.13.4.1": true, - "1.13.4.2": true, - "1.13.4.3": true, - "1.13.4.4": true, - "1.13.4.5": true, - "1.13.4.6": true, - "1.13.5.1": true, - "1.13.5.2": true, - "1.13.5.3": true, - "1.13.5.4": true, - "1.13.5.5": true, - "1.13.5.6": true, - "1.13.6.1": true, - "1.13.9.1": true, - "1.13.9.2": true, - "1.13.9.3": true, - "1.13.9.4": true, - "1.13.9.5": true, - "1.13.9.6": true, - "1.14.10.1": true, - "1.14.10.2": true, - "1.14.10.3": true, - "1.14.10.4": true, - "1.14.10.5": true, - "1.14.10.6": true, - "1.14.11.1": true, - "1.14.11.2": true, - "1.14.11.3": true, - "1.14.11.4": true, - "1.14.11.5": true, - "1.14.11.6": true, - "1.14.12.1": true, - "1.14.12.2": true, - "1.14.12.3": true, - "1.14.12.4": true, - "1.14.12.5": true, - "1.14.12.6": true, - "1.14.13.1": true, - "1.14.13.2": true, - "1.14.13.3": true, - "1.14.13.4": true, - "1.14.13.5": true, - "1.14.13.6": true, - "1.14.14.1": true, - "1.14.14.2": true, - "1.14.14.3": true, - "1.14.14.4": true, - "1.14.14.5": true, - "1.14.14.6": true, - "1.14.14.7": true, - "1.14.14.8": true, - "1.14.14.9": true, - "1.14.15.1": true, - "1.14.15.2": true, - "1.14.15.3": true, - "1.14.15.4": true, - "1.14.2.1": true, - "1.14.2.2": true, - "1.14.3.1": true, - "1.14.3.2": true, - "1.14.3.3": true, - "1.14.4.1": true, - "1.14.4.2": true, - "1.14.4.3": true, - "1.14.4.4": true, - "1.14.4.5": true, - "1.14.4.6": true, - "1.14.5.1": true, - "1.14.5.2": true, - "1.14.5.3": true, - "1.14.5.4": true, - "1.14.5.5": true, - "1.14.5.6": true, - "1.14.6.1": true, - "1.14.9.1": true, - "1.14.9.2": true, - "1.14.9.3": true, - "1.14.9.4": true, - "1.14.9.5": true, - "1.14.9.6": true, - "1.15.10.1": true, - "1.15.10.2": true, - "1.15.10.3": true, - "1.15.10.4": true, - "1.15.10.5": true, - "1.15.10.6": true, - "1.15.11.1": true, - "1.15.11.2": true, - "1.15.11.3": true, - "1.15.11.4": true, - "1.15.11.5": true, - "1.15.11.6": true, - "1.15.12.1": true, - "1.15.12.2": true, - "1.15.12.3": true, - "1.15.12.4": true, - "1.15.12.5": true, - "1.15.12.6": true, - "1.15.13.1": true, - "1.15.13.2": true, - "1.15.13.3": true, - "1.15.13.4": true, - "1.15.13.5": true, - "1.15.13.6": true, - "1.15.14.1": true, - "1.15.14.2": true, - "1.15.14.3": true, - "1.15.14.4": true, - "1.15.14.5": true, - "1.15.14.6": true, - "1.15.14.7": true, - "1.15.14.8": true, - "1.15.14.9": true, - "1.15.15.1": true, - "1.15.15.2": true, - "1.15.15.3": true, - "1.15.15.4": true, - "1.15.2.1": true, - "1.15.2.2": true, - "1.15.3.1": true, - "1.15.3.2": true, - "1.15.3.3": true, - "1.15.4.1": true, - "1.15.4.2": true, - "1.15.4.3": true, - "1.15.4.4": true, - "1.15.4.5": true, - "1.15.4.6": true, - "1.15.5.1": true, - "1.15.5.2": true, - "1.15.5.3": true, - "1.15.5.4": true, - "1.15.5.5": true, - "1.15.5.6": true, - "1.15.6.1": true, - "1.15.9.1": true, - "1.15.9.2": true, - "1.15.9.3": true, - "1.15.9.4": true, - "1.15.9.5": true, - "1.15.9.6": true, - "1.16.10.1": true, - "1.16.10.2": true, - "1.16.10.3": true, - "1.16.10.4": true, - "1.16.10.5": true, - "1.16.10.6": true, - "1.16.11.1": true, - "1.16.11.2": true, - "1.16.11.3": true, - "1.16.11.4": true, - "1.16.11.5": true, - "1.16.11.6": true, - "1.16.12.1": true, - "1.16.12.2": true, - "1.16.12.3": true, - "1.16.12.4": true, - "1.16.12.5": true, - "1.16.12.6": true, - "1.16.13.1": true, - "1.16.13.2": true, - "1.16.13.3": true, - "1.16.13.4": true, - "1.16.13.5": true, - "1.16.13.6": true, - "1.16.14.1": true, - "1.16.14.2": true, - "1.16.14.3": true, - "1.16.14.4": true, - "1.16.14.5": true, - "1.16.14.6": true, - "1.16.14.7": true, - "1.16.14.8": true, - "1.16.14.9": true, - "1.16.15.1": true, - "1.16.15.2": true, - "1.16.15.3": true, - "1.16.15.4": true, - "1.16.2.1": true, - "1.16.2.2": true, - "1.16.3.1": true, - "1.16.3.2": true, - "1.16.3.3": true, - "1.16.4.1": true, - "1.16.4.2": true, - "1.16.4.3": true, - "1.16.4.4": true, - "1.16.4.5": true, - "1.16.4.6": true, - "1.16.5.1": true, - "1.16.5.2": true, - "1.16.5.3": true, - "1.16.5.4": true, - "1.16.5.5": true, - "1.16.5.6": true, - "1.16.6.1": true, - "1.16.9.1": true, - "1.16.9.2": true, - "1.16.9.3": true, - "1.16.9.4": true, - "1.16.9.5": true, - "1.16.9.6": true, - "1.17.10.1": true, - "1.17.10.2": true, - "1.17.10.3": true, - "1.17.10.4": true, - "1.17.10.5": true, - "1.17.10.6": true, - "1.17.11.1": true, - "1.17.11.2": true, - "1.17.11.3": true, - "1.17.11.4": true, - "1.17.11.5": true, - "1.17.11.6": true, - "1.17.12.1": true, - "1.17.12.2": true, - "1.17.12.3": true, - "1.17.12.4": true, - "1.17.12.5": true, - "1.17.12.6": true, - "1.17.13.1": true, - "1.17.13.2": true, - "1.17.13.3": true, - "1.17.13.4": true, - "1.17.13.5": true, - "1.17.13.6": true, - "1.17.14.1": true, - "1.17.14.2": true, - "1.17.14.3": true, - "1.17.14.4": true, - "1.17.14.5": true, - "1.17.14.6": true, - "1.17.14.7": true, - "1.17.14.8": true, - "1.17.14.9": true, - "1.17.15.1": true, - "1.17.15.2": true, - "1.17.15.3": true, - "1.17.15.4": true, - "1.17.2.1": true, - "1.17.2.2": true, - "1.17.3.1": true, - "1.17.3.2": true, - "1.17.3.3": true, - "1.17.4.1": true, - "1.17.4.2": true, - "1.17.4.3": true, - "1.17.4.4": true, - "1.17.4.5": true, - "1.17.4.6": true, - "1.17.5.1": true, - "1.17.5.2": true, - "1.17.5.3": true, - "1.17.5.4": true, - "1.17.5.5": true, - "1.17.5.6": true, - "1.17.6.1": true, - "1.17.9.1": true, - "1.17.9.2": true, - "1.17.9.3": true, - "1.17.9.4": true, - "1.17.9.5": true, - "1.17.9.6": true, - "1.18.10.1": true, - "1.18.10.2": true, - "1.18.10.3": true, - "1.18.10.4": true, - "1.18.10.5": true, - "1.18.10.6": true, - "1.18.11.1": true, - "1.18.11.2": true, - "1.18.11.3": true, - "1.18.11.4": true, - "1.18.11.5": true, - "1.18.11.6": true, - "1.18.12.1": true, - "1.18.12.2": true, - "1.18.12.3": true, - "1.18.12.4": true, - "1.18.12.5": true, - "1.18.12.6": true, - "1.18.13.1": true, - "1.18.13.2": true, - "1.18.13.3": true, - "1.18.13.4": true, - "1.18.13.5": true, - "1.18.13.6": true, - "1.18.14.1": true, - "1.18.14.2": true, - "1.18.14.3": true, - "1.18.14.4": true, - "1.18.14.5": true, - "1.18.14.6": true, - "1.18.14.7": true, - "1.18.14.8": true, - "1.18.14.9": true, - "1.18.15.1": true, - "1.18.15.2": true, - "1.18.15.3": true, - "1.18.15.4": true, - "1.18.2.1": true, - "1.18.2.2": true, - "1.18.3.1": true, - "1.18.3.2": true, - "1.18.3.3": true, - "1.18.4.1": true, - "1.18.4.2": true, - "1.18.4.3": true, - "1.18.4.4": true, - "1.18.4.5": true, - "1.18.4.6": true, - "1.18.5.1": true, - "1.18.5.2": true, - "1.18.5.3": true, - "1.18.5.4": true, - "1.18.5.5": true, - "1.18.5.6": true, - "1.18.6.1": true, - "1.18.9.1": true, - "1.18.9.2": true, - "1.18.9.3": true, - "1.18.9.4": true, - "1.18.9.5": true, - "1.18.9.6": true, - "1.19.10.1": true, - "1.19.10.2": true, - "1.19.10.3": true, - "1.19.10.4": true, - "1.19.10.5": true, - "1.19.10.6": true, - "1.19.11.1": true, - "1.19.11.2": true, - "1.19.11.3": true, - "1.19.11.4": true, - "1.19.11.5": true, - "1.19.11.6": true, - "1.19.12.1": true, - "1.19.12.2": true, - "1.19.12.3": true, - "1.19.12.4": true, - "1.19.12.5": true, - "1.19.12.6": true, - "1.19.13.1": true, - "1.19.13.2": true, - "1.19.13.3": true, - "1.19.13.4": true, - "1.19.13.5": true, - "1.19.13.6": true, - "1.19.14.1": true, - "1.19.14.2": true, - "1.19.14.3": true, - "1.19.14.4": true, - "1.19.14.5": true, - "1.19.14.6": true, - "1.19.14.7": true, - "1.19.14.8": true, - "1.19.14.9": true, - "1.19.15.1": true, - "1.19.15.2": true, - "1.19.15.3": true, - "1.19.15.4": true, - "1.19.2.1": true, - "1.19.2.2": true, - "1.19.3.1": true, - "1.19.3.2": true, - "1.19.3.3": true, - "1.19.4.1": true, - "1.19.4.2": true, - "1.19.4.3": true, - "1.19.4.4": true, - "1.19.4.5": true, - "1.19.4.6": true, - "1.19.5.1": true, - "1.19.5.2": true, - "1.19.5.3": true, - "1.19.5.4": true, - "1.19.5.5": true, - "1.19.5.6": true, - "1.19.6.1": true, - "1.19.9.1": true, - "1.19.9.2": true, - "1.19.9.3": true, - "1.19.9.4": true, - "1.19.9.5": true, - "1.19.9.6": true, - "1.2.10.1": true, - "1.2.10.2": true, - "1.2.10.3": true, - "1.2.10.4": true, - "1.2.10.5": true, - "1.2.10.6": true, - "1.2.11.1": true, - "1.2.11.2": true, - "1.2.11.3": true, - "1.2.11.4": true, - "1.2.11.5": true, - "1.2.11.6": true, - "1.2.12.1": true, - "1.2.12.2": true, - "1.2.12.3": true, - "1.2.12.4": true, - "1.2.12.5": true, - "1.2.12.6": true, - "1.2.13.1": true, - "1.2.13.2": true, - "1.2.13.3": true, - "1.2.13.4": true, - "1.2.13.5": true, - "1.2.13.6": true, - "1.2.14.1": true, - "1.2.14.2": true, - "1.2.14.3": true, - "1.2.14.4": true, - "1.2.14.5": true, - "1.2.14.6": true, - "1.2.14.7": true, - "1.2.14.8": true, - "1.2.14.9": true, - "1.2.15.1": true, - "1.2.15.2": true, - "1.2.15.3": true, - "1.2.15.4": true, - "1.2.2.1": true, - "1.2.2.2": true, - "1.2.3.1": true, - "1.2.3.2": true, - "1.2.3.3": true, - "1.2.4.1": true, - "1.2.4.2": true, - "1.2.4.3": true, - "1.2.4.4": true, - "1.2.4.5": true, - "1.2.4.6": true, - "1.2.5.1": true, - "1.2.5.2": true, - "1.2.5.3": true, - "1.2.5.4": true, - "1.2.5.5": true, - "1.2.5.6": true, - "1.2.6.1": true, - "1.2.9.1": true, - "1.2.9.2": true, - "1.2.9.3": true, - "1.2.9.4": true, - "1.2.9.5": true, - "1.2.9.6": true, - "1.20.10.1": true, - "1.20.10.2": true, - "1.20.10.3": true, - "1.20.10.4": true, - "1.20.10.5": true, - "1.20.10.6": true, - "1.20.11.1": true, - "1.20.11.2": true, - "1.20.11.3": true, - "1.20.11.4": true, - "1.20.11.5": true, - "1.20.11.6": true, - "1.20.12.1": true, - "1.20.12.2": true, - "1.20.12.3": true, - "1.20.12.4": true, - "1.20.12.5": true, - "1.20.12.6": true, - "1.20.13.1": true, - "1.20.13.2": true, - "1.20.13.3": true, - "1.20.13.4": true, - "1.20.13.5": true, - "1.20.13.6": true, - "1.20.14.1": true, - "1.20.14.2": true, - "1.20.14.3": true, - "1.20.14.4": true, - "1.20.14.5": true, - "1.20.14.6": true, - "1.20.14.7": true, - "1.20.14.8": true, - "1.20.14.9": true, - "1.20.15.1": true, - "1.20.15.2": true, - "1.20.15.3": true, - "1.20.15.4": true, - "1.20.2.1": true, - "1.20.2.2": true, - "1.20.3.1": true, - "1.20.3.2": true, - "1.20.3.3": true, - "1.20.4.1": true, - "1.20.4.2": true, - "1.20.4.3": true, - "1.20.4.4": true, - "1.20.4.5": true, - "1.20.4.6": true, - "1.20.5.1": true, - "1.20.5.2": true, - "1.20.5.3": true, - "1.20.5.4": true, - "1.20.5.5": true, - "1.20.5.6": true, - "1.20.6.1": true, - "1.20.9.1": true, - "1.20.9.2": true, - "1.20.9.3": true, - "1.20.9.4": true, - "1.20.9.5": true, - "1.20.9.6": true, - "1.3.10.1": true, - "1.3.10.2": true, - "1.3.10.3": true, - "1.3.10.4": true, - "1.3.10.5": true, - "1.3.10.6": true, - "1.3.11.1": true, - "1.3.11.2": true, - "1.3.11.3": true, - "1.3.11.4": true, - "1.3.11.5": true, - "1.3.11.6": true, - "1.3.12.1": true, - "1.3.12.2": true, - "1.3.12.3": true, - "1.3.12.4": true, - "1.3.12.5": true, - "1.3.12.6": true, - "1.3.13.1": true, - "1.3.13.2": true, - "1.3.13.3": true, - "1.3.13.4": true, - "1.3.13.5": true, - "1.3.13.6": true, - "1.3.14.1": true, - "1.3.14.2": true, - "1.3.14.3": true, - "1.3.14.4": true, - "1.3.14.5": true, - "1.3.14.6": true, - "1.3.14.7": true, - "1.3.14.8": true, - "1.3.14.9": true, - "1.3.15.1": true, - "1.3.15.2": true, - "1.3.15.3": true, - "1.3.15.4": true, - "1.3.2.1": true, - "1.3.2.2": true, - "1.3.3.1": true, - "1.3.3.2": true, - "1.3.3.3": true, - "1.3.4.1": true, - "1.3.4.2": true, - "1.3.4.3": true, - "1.3.4.4": true, - "1.3.4.5": true, - "1.3.4.6": true, - "1.3.5.1": true, - "1.3.5.2": true, - "1.3.5.3": true, - "1.3.5.4": true, - "1.3.5.5": true, - "1.3.5.6": true, - "1.3.6.1": true, - "1.3.9.1": true, - "1.3.9.2": true, - "1.3.9.3": true, - "1.3.9.4": true, - "1.3.9.5": true, - "1.3.9.6": true, - "1.4.10.1": true, - "1.4.10.2": true, - "1.4.10.3": true, - "1.4.10.4": true, - "1.4.10.5": true, - "1.4.10.6": true, - "1.4.11.1": true, - "1.4.11.2": true, - "1.4.11.3": true, - "1.4.11.4": true, - "1.4.11.5": true, - "1.4.11.6": true, - "1.4.12.1": true, - "1.4.12.2": true, - "1.4.12.3": true, - "1.4.12.4": true, - "1.4.12.5": true, - "1.4.12.6": true, - "1.4.13.1": true, - "1.4.13.2": true, - "1.4.13.3": true, - "1.4.13.4": true, - "1.4.13.5": true, - "1.4.13.6": true, - "1.4.14.1": true, - "1.4.14.2": true, - "1.4.14.3": true, - "1.4.14.4": true, - "1.4.14.5": true, - "1.4.14.6": true, - "1.4.14.7": true, - "1.4.14.8": true, - "1.4.14.9": true, - "1.4.15.1": true, - "1.4.15.2": true, - "1.4.15.3": true, - "1.4.15.4": true, - "1.4.2.1": true, - "1.4.2.2": true, - "1.4.3.1": true, - "1.4.3.2": true, - "1.4.3.3": true, - "1.4.4.1": true, - "1.4.4.2": true, - "1.4.4.3": true, - "1.4.4.4": true, - "1.4.4.5": true, - "1.4.4.6": true, - "1.4.5.1": true, - "1.4.5.2": true, - "1.4.5.3": true, - "1.4.5.4": true, - "1.4.5.5": true, - "1.4.5.6": true, - "1.4.6.1": true, - "1.4.9.1": true, - "1.4.9.2": true, - "1.4.9.3": true, - "1.4.9.4": true, - "1.4.9.5": true, - "1.4.9.6": true, - "1.5.10.1": true, - "1.5.10.2": true, - "1.5.10.3": true, - "1.5.10.4": true, - "1.5.10.5": true, - "1.5.10.6": true, - "1.5.11.1": true, - "1.5.11.2": true, - "1.5.11.3": true, - "1.5.11.4": true, - "1.5.11.5": true, - "1.5.11.6": true, - "1.5.12.1": true, - "1.5.12.2": true, - "1.5.12.3": true, - "1.5.12.4": true, - "1.5.12.5": true, - "1.5.12.6": true, - "1.5.13.1": true, - "1.5.13.2": true, - "1.5.13.3": true, - "1.5.13.4": true, - "1.5.13.5": true, - "1.5.13.6": true, - "1.5.14.1": true, - "1.5.14.2": true, - "1.5.14.3": true, - "1.5.14.4": true, - "1.5.14.5": true, - "1.5.14.6": true, - "1.5.14.7": true, - "1.5.14.8": true, - "1.5.14.9": true, - "1.5.15.1": true, - "1.5.15.2": true, - "1.5.15.3": true, - "1.5.15.4": true, - "1.5.2.1": true, - "1.5.2.2": true, - "1.5.3.1": true, - "1.5.3.2": true, - "1.5.3.3": true, - "1.5.4.1": true, - "1.5.4.2": true, - "1.5.4.3": true, - "1.5.4.4": true, - "1.5.4.5": true, - "1.5.4.6": true, - "1.5.5.1": true, - "1.5.5.2": true, - "1.5.5.3": true, - "1.5.5.4": true, - "1.5.5.5": true, - "1.5.5.6": true, - "1.5.6.1": true, - "1.5.9.1": true, - "1.5.9.2": true, - "1.5.9.3": true, - "1.5.9.4": true, - "1.5.9.5": true, - "1.5.9.6": true, - "1.6.10.1": true, - "1.6.10.2": true, - "1.6.10.3": true, - "1.6.10.4": true, - "1.6.10.5": true, - "1.6.10.6": true, - "1.6.11.1": true, - "1.6.11.2": true, - "1.6.11.3": true, - "1.6.11.4": true, - "1.6.11.5": true, - "1.6.11.6": true, - "1.6.12.1": true, - "1.6.12.2": true, - "1.6.12.3": true, - "1.6.12.4": true, - "1.6.12.5": true, - "1.6.12.6": true, - "1.6.13.1": true, - "1.6.13.2": true, - "1.6.13.3": true, - "1.6.13.4": true, - "1.6.13.5": true, - "1.6.13.6": true, - "1.6.14.1": true, - "1.6.14.2": true, - "1.6.14.3": true, - "1.6.14.4": true, - "1.6.14.5": true, - "1.6.14.6": true, - "1.6.14.7": true, - "1.6.14.8": true, - "1.6.14.9": true, - "1.6.15.1": true, - "1.6.15.2": true, - "1.6.15.3": true, - "1.6.15.4": true, - "1.6.2.1": true, - "1.6.2.2": true, - "1.6.3.1": true, - "1.6.3.2": true, - "1.6.3.3": true, - "1.6.4.1": true, - "1.6.4.2": true, - "1.6.4.3": true, - "1.6.4.4": true, - "1.6.4.5": true, - "1.6.4.6": true, - "1.6.5.1": true, - "1.6.5.2": true, - "1.6.5.3": true, - "1.6.5.4": true, - "1.6.5.5": true, - "1.6.5.6": true, - "1.6.6.1": true, - "1.6.9.1": true, - "1.6.9.2": true, - "1.6.9.3": true, - "1.6.9.4": true, - "1.6.9.5": true, - "1.6.9.6": true, - "1.7.10.1": true, - "1.7.10.2": true, - "1.7.10.3": true, - "1.7.10.4": true, - "1.7.10.5": true, - "1.7.10.6": true, - "1.7.11.1": true, - "1.7.11.2": true, - "1.7.11.3": true, - "1.7.11.4": true, - "1.7.11.5": true, - "1.7.11.6": true, - "1.7.12.1": true, - "1.7.12.2": true, - "1.7.12.3": true, - "1.7.12.4": true, - "1.7.12.5": true, - "1.7.12.6": true, - "1.7.13.1": true, - "1.7.13.2": true, - "1.7.13.3": true, - "1.7.13.4": true, - "1.7.13.5": true, - "1.7.13.6": true, - "1.7.14.1": true, - "1.7.14.2": true, - "1.7.14.3": true, - "1.7.14.4": true, - "1.7.14.5": true, - "1.7.14.6": true, - "1.7.14.7": true, - "1.7.14.8": true, - "1.7.14.9": true, - "1.7.15.1": true, - "1.7.15.2": true, - "1.7.15.3": true, - "1.7.15.4": true, - "1.7.2.1": true, - "1.7.2.2": true, - "1.7.3.1": true, - "1.7.3.2": true, - "1.7.3.3": true, - "1.7.4.1": true, - "1.7.4.2": true, - "1.7.4.3": true, - "1.7.4.4": true, - "1.7.4.5": true, - "1.7.4.6": true, - "1.7.5.1": true, - "1.7.5.2": true, - "1.7.5.3": true, - "1.7.5.4": true, - "1.7.5.5": true, - "1.7.5.6": true, - "1.7.6.1": true, - "1.7.9.1": true, - "1.7.9.2": true, - "1.7.9.3": true, - "1.7.9.4": true, - "1.7.9.5": true, - "1.7.9.6": true, - "1.8.10.1": true, - "1.8.10.2": true, - "1.8.10.3": true, - "1.8.10.4": true, - "1.8.10.5": true, - "1.8.10.6": true, - "1.8.11.1": true, - "1.8.11.2": true, - "1.8.11.3": true, - "1.8.11.4": true, - "1.8.11.5": true, - "1.8.11.6": true, - "1.8.12.1": true, - "1.8.12.2": true, - "1.8.12.3": true, - "1.8.12.4": true, - "1.8.12.5": true, - "1.8.12.6": true, - "1.8.13.1": true, - "1.8.13.2": true, - "1.8.13.3": true, - "1.8.13.4": true, - "1.8.13.5": true, - "1.8.13.6": true, - "1.8.14.1": true, - "1.8.14.2": true, - "1.8.14.3": true, - "1.8.14.4": true, - "1.8.14.5": true, - "1.8.14.6": true, - "1.8.14.7": true, - "1.8.14.8": true, - "1.8.14.9": true, - "1.8.15.1": true, - "1.8.15.2": true, - "1.8.15.3": true, - "1.8.15.4": true, - "1.8.2.1": true, - "1.8.2.2": true, - "1.8.3.1": true, - "1.8.3.2": true, - "1.8.3.3": true, - "1.8.4.1": true, - "1.8.4.2": true, - "1.8.4.3": true, - "1.8.4.4": true, - "1.8.4.5": true, - "1.8.4.6": true, - "1.8.5.1": true, - "1.8.5.2": true, - "1.8.5.3": true, - "1.8.5.4": true, - "1.8.5.5": true, - "1.8.5.6": true, - "1.8.6.1": true, - "1.8.9.1": true, - "1.8.9.2": true, - "1.8.9.3": true, - "1.8.9.4": true, - "1.8.9.5": true, - "1.8.9.6": true, - "1.9.10.1": true, - "1.9.10.2": true, - "1.9.10.3": true, - "1.9.10.4": true, - "1.9.10.5": true, - "1.9.10.6": true, - "1.9.11.1": true, - "1.9.11.2": true, - "1.9.11.3": true, - "1.9.11.4": true, - "1.9.11.5": true, - "1.9.11.6": true, - "1.9.12.1": true, - "1.9.12.2": true, - "1.9.12.3": true, - "1.9.12.4": true, - "1.9.12.5": true, - "1.9.12.6": true, - "1.9.13.1": true, - "1.9.13.2": true, - "1.9.13.3": true, - "1.9.13.4": true, - "1.9.13.5": true, - "1.9.13.6": true, - "1.9.14.1": true, - "1.9.14.2": true, - "1.9.14.3": true, - "1.9.14.4": true, - "1.9.14.5": true, - "1.9.14.6": true, - "1.9.14.7": true, - "1.9.14.8": true, - "1.9.14.9": true, - "1.9.15.1": true, - "1.9.15.2": true, - "1.9.15.3": true, - "1.9.15.4": true, - "1.9.2.1": true, - "1.9.2.2": true, - "1.9.3.1": true, - "1.9.3.2": true, - "1.9.3.3": true, - "1.9.4.1": true, - "1.9.4.2": true, - "1.9.4.3": true, - "1.9.4.4": true, - "1.9.4.5": true, - "1.9.4.6": true, - "1.9.5.1": true, - "1.9.5.2": true, - "1.9.5.3": true, - "1.9.5.4": true, - "1.9.5.5": true, - "1.9.5.6": true, - "1.9.6.1": true, - "1.9.9.1": true, - "1.9.9.2": true, - "1.9.9.3": true, - "1.9.9.4": true, - "1.9.9.5": true, - "1.9.9.6": true - } -} +{} diff --git a/parser/testdata/window4.metadata.json b/parser/testdata/window4.metadata.json index e47ccba..0967ef4 100644 --- a/parser/testdata/window4.metadata.json +++ b/parser/testdata/window4.metadata.json @@ -1,224 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.10": true, - "1.11": true, - "1.12": true, - "1.13": true, - "1.14": true, - "1.15": true, - "1.16": true, - "1.17": true, - "1.18": true, - "1.19": true, - "1.2": true, - "1.3": true, - "1.4": true, - "1.5": true, - "1.6": true, - "1.7": true, - "1.8": true, - "1.9": true, - "10.0": true, - "10.1": true, - "10.2": true, - "10.3": true, - "11.0": true, - "11.1": true, - "11.2": true, - "11.3": true, - "11.4": true, - "11.5": true, - "11.5.dup1": true, - "11.7": true, - "11.8": true, - "12.0": true, - "12.1": true, - "2.0": true, - "2.1": true, - "2.2.1": true, - "2.2.2": true, - "2.2.3": true, - "2.3.1": true, - "2.3.2": true, - "2.3.3": true, - "2.4.1": true, - "3.0": true, - "3.1": true, - "3.2": true, - "3.3": true, - "3.4": true, - "3.5.1": true, - "3.5.2": true, - "3.5.3": true, - "3.6.1": true, - "3.6.2": true, - "3.6.3": true, - "4.0": true, - "4.1": true, - "4.2": true, - "4.3": true, - "4.4": true, - "4.5.1.1": true, - "4.5.1.2": true, - "4.5.10.1": true, - "4.5.10.2": true, - "4.5.11.1": true, - "4.5.11.2": true, - "4.5.12.1": true, - "4.5.12.2": true, - "4.5.13.1": true, - "4.5.13.2": true, - "4.5.14.1": true, - "4.5.14.2": true, - "4.5.15.1": true, - "4.5.15.2": true, - "4.5.16.1": true, - "4.5.16.2": true, - "4.5.17.1": true, - "4.5.17.2": true, - "4.5.18.1": true, - "4.5.18.2": true, - "4.5.19.1": true, - "4.5.19.2": true, - "4.5.2.1": true, - "4.5.2.2": true, - "4.5.20.1": true, - "4.5.20.2": true, - "4.5.21.1": true, - "4.5.21.2": true, - "4.5.22.1": true, - "4.5.22.2": true, - "4.5.23.1": true, - "4.5.23.2": true, - "4.5.24.1": true, - "4.5.24.2": true, - "4.5.25.1": true, - "4.5.25.2": true, - "4.5.26.1": true, - "4.5.26.2": true, - "4.5.27.1": true, - "4.5.27.2": true, - "4.5.28.1": true, - "4.5.28.2": true, - "4.5.29.1": true, - "4.5.29.2": true, - "4.5.3.1": true, - "4.5.3.2": true, - "4.5.30.1": true, - "4.5.30.2": true, - "4.5.31.1": true, - "4.5.31.2": true, - "4.5.32.1": true, - "4.5.32.2": true, - "4.5.33.1": true, - "4.5.33.2": true, - "4.5.34.1": true, - "4.5.34.2": true, - "4.5.35.1": true, - "4.5.35.2": true, - "4.5.36.1": true, - "4.5.36.2": true, - "4.5.37.1": true, - "4.5.37.2": true, - "4.5.38.1": true, - "4.5.38.2": true, - "4.5.39.1": true, - "4.5.39.2": true, - "4.5.4.1": true, - "4.5.4.2": true, - "4.5.40.1": true, - "4.5.40.2": true, - "4.5.41.1": true, - "4.5.41.2": true, - "4.5.42.1": true, - "4.5.42.2": true, - "4.5.43.1": true, - "4.5.43.2": true, - "4.5.44.1": true, - "4.5.44.2": true, - "4.5.45.1": true, - "4.5.45.2": true, - "4.5.46.1": true, - "4.5.46.2": true, - "4.5.47.1": true, - "4.5.47.2": true, - "4.5.48.1": true, - "4.5.48.2": true, - "4.5.49.1": true, - "4.5.49.2": true, - "4.5.5.1": true, - "4.5.5.2": true, - "4.5.50.1": true, - "4.5.50.2": true, - "4.5.51.1": true, - "4.5.51.2": true, - "4.5.52.1": true, - "4.5.52.2": true, - "4.5.53.1": true, - "4.5.53.2": true, - "4.5.54.1": true, - "4.5.54.2": true, - "4.5.55.1": true, - "4.5.55.2": true, - "4.5.56.1": true, - "4.5.56.2": true, - "4.5.57.1": true, - "4.5.57.2": true, - "4.5.58.1": true, - "4.5.58.2": true, - "4.5.59.1": true, - "4.5.59.2": true, - "4.5.6.1": true, - "4.5.6.2": true, - "4.5.60.1": true, - "4.5.60.2": true, - "4.5.61.1": true, - "4.5.61.2": true, - "4.5.62.1": true, - "4.5.62.2": true, - "4.5.63.1": true, - "4.5.63.2": true, - "4.5.64.1": true, - "4.5.64.2": true, - "4.5.65.1": true, - "4.5.65.2": true, - "4.5.66.1": true, - "4.5.66.2": true, - "4.5.67.1": true, - "4.5.67.2": true, - "4.5.68.1": true, - "4.5.68.2": true, - "4.5.69.1": true, - "4.5.69.2": true, - "4.5.7.1": true, - "4.5.7.2": true, - "4.5.70.1": true, - "4.5.70.2": true, - "4.5.71.1": true, - "4.5.71.2": true, - "4.5.72.1": true, - "4.5.72.2": true, - "4.5.73.1": true, - "4.5.73.2": true, - "4.5.8.1": true, - "4.5.8.2": true, - "4.5.9.1": true, - "4.5.9.2": true, - "7.0": true, - "7.1": true, - "7.2": true, - "7.3": true, - "7.4": true, - "7.5": true, - "8.0": true, - "8.1": true, - "8.2": true, - "9.0": true, - "9.1": true, - "9.2": true, - "9.4": true, - "9.5": true - } -} +{} diff --git a/parser/testdata/window5.metadata.json b/parser/testdata/window5.metadata.json index 8147dc1..0967ef4 100644 --- a/parser/testdata/window5.metadata.json +++ b/parser/testdata/window5.metadata.json @@ -1,10 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "2.0": true, - "2.1": true, - "3.0": true, - "3.1": true - } -} +{} diff --git a/parser/testdata/window6.metadata.json b/parser/testdata/window6.metadata.json index f3c13ec..0967ef4 100644 --- a/parser/testdata/window6.metadata.json +++ b/parser/testdata/window6.metadata.json @@ -1,39 +1 @@ -{ - "todo": { - "10.0": true, - "11.0": true, - "11.1": true, - "11.2": true, - "11.3.1": true, - "11.3.2": true, - "11.3.3": true, - "11.4.1": true, - "2.0": true, - "3.0": true, - "3.1": true, - "4.0": true, - "4.1": true, - "5.0": true, - "5.1": true, - "5.2": true, - "5.3": true, - "5.4": true, - "5.5": true, - "6.0": true, - "6.1": true, - "6.2": true, - "7.0": true, - "7.1": true, - "8.0": true, - "8.1": true, - "8.2": true, - "8.3": true, - "9.0": true, - "9.3": true, - "9.4": true, - "9.5": true, - "9.6": true, - "9.8.1": true, - "9.8.2": true - } -} +{} diff --git a/parser/testdata/window7.metadata.json b/parser/testdata/window7.metadata.json index 4e7ff0c..0967ef4 100644 --- a/parser/testdata/window7.metadata.json +++ b/parser/testdata/window7.metadata.json @@ -1,14 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "1.4": true, - "1.5": true, - "1.6": true, - "1.7": true, - "1.8.1": true, - "1.8.2": true - } -} +{} diff --git a/parser/testdata/window8.metadata.json b/parser/testdata/window8.metadata.json index 16b7d2a..0967ef4 100644 --- a/parser/testdata/window8.metadata.json +++ b/parser/testdata/window8.metadata.json @@ -1,365 +1 @@ -{ - "todo": { - "1.0": true, - "1.1.1": true, - "1.1.2": true, - "1.1.3": true, - "1.1.4": true, - "1.1.5": true, - "1.1.6": true, - "1.1.7": true, - "1.1.8": true, - "1.10.1": true, - "1.10.2": true, - "1.10.3": true, - "1.10.4": true, - "1.10.5": true, - "1.10.6": true, - "1.10.7": true, - "1.10.8": true, - "1.11.1": true, - "1.11.2": true, - "1.11.3": true, - "1.11.4": true, - "1.11.5": true, - "1.11.6": true, - "1.11.7": true, - "1.11.8": true, - "1.12.1": true, - "1.12.2": true, - "1.12.3": true, - "1.12.4": true, - "1.12.5": true, - "1.12.6": true, - "1.12.7": true, - "1.12.8": true, - "1.13.1": true, - "1.13.2": true, - "1.13.3": true, - "1.13.4": true, - "1.13.5": true, - "1.13.6": true, - "1.13.7": true, - "1.13.8": true, - "1.14.1": true, - "1.14.2": true, - "1.14.3": true, - "1.14.4": true, - "1.14.5": true, - "1.14.6": true, - "1.14.7": true, - "1.14.8": true, - "1.15.1": true, - "1.15.2": true, - "1.15.3": true, - "1.15.4": true, - "1.15.5": true, - "1.15.6": true, - "1.15.7": true, - "1.15.8": true, - "1.16.1": true, - "1.16.2": true, - "1.16.3": true, - "1.16.4": true, - "1.16.5": true, - "1.16.6": true, - "1.16.7": true, - "1.16.8": true, - "1.17.1": true, - "1.17.2": true, - "1.17.3": true, - "1.17.4": true, - "1.17.5": true, - "1.17.6": true, - "1.17.7": true, - "1.17.8": true, - "1.18.1": true, - "1.18.2": true, - "1.18.3": true, - "1.18.4": true, - "1.18.5": true, - "1.18.6": true, - "1.18.7": true, - "1.18.8": true, - "1.19.1": true, - "1.19.2": true, - "1.19.3": true, - "1.19.4": true, - "1.19.5": true, - "1.19.6": true, - "1.19.7": true, - "1.19.8": true, - "1.2.1": true, - "1.2.2": true, - "1.2.3": true, - "1.2.4": true, - "1.2.5": true, - "1.2.6": true, - "1.2.7": true, - "1.2.8": true, - "1.3.1": true, - "1.3.2": true, - "1.3.3": true, - "1.3.4": true, - "1.3.5": true, - "1.3.6": true, - "1.3.7": true, - "1.3.8": true, - "1.4.1": true, - "1.4.2": true, - "1.4.3": true, - "1.4.4": true, - "1.4.5": true, - "1.4.6": true, - "1.4.7": true, - "1.4.8": true, - "1.5.1": true, - "1.5.2": true, - "1.5.3": true, - "1.5.4": true, - "1.5.5": true, - "1.5.6": true, - "1.5.7": true, - "1.5.8": true, - "1.6.1": true, - "1.6.2": true, - "1.6.3": true, - "1.6.4": true, - "1.6.5": true, - "1.6.6": true, - "1.6.7": true, - "1.6.8": true, - "1.7.1": true, - "1.7.2": true, - "1.7.3": true, - "1.7.4": true, - "1.7.5": true, - "1.7.6": true, - "1.7.7": true, - "1.7.8": true, - "1.8.1": true, - "1.8.2": true, - "1.8.3": true, - "1.8.4": true, - "1.8.5": true, - "1.8.6": true, - "1.8.7": true, - "1.8.8": true, - "1.9.1": true, - "1.9.2": true, - "1.9.3": true, - "1.9.4": true, - "1.9.5": true, - "1.9.6": true, - "1.9.7": true, - "1.9.8": true, - "10.0": true, - "10.1": true, - "10.2": true, - "10.3": true, - "10.4": true, - "11.0": true, - "11.1": true, - "2.1.1": true, - "2.1.2": true, - "2.1.3": true, - "2.2.1": true, - "2.2.2": true, - "2.2.3": true, - "2.3.1": true, - "2.3.2": true, - "2.3.3": true, - "2.4.1": true, - "2.4.2": true, - "2.4.3": true, - "3.0": true, - "3.1": true, - "3.10": true, - "3.11": true, - "3.12": true, - "3.13": true, - "3.2": true, - "3.3": true, - "3.4": true, - "3.5": true, - "3.6": true, - "3.7": true, - "3.8": true, - "3.9": true, - "4.0": true, - "4.1.1": true, - "4.1.2": true, - "4.2.1": true, - "4.2.2": true, - "4.2.3": true, - "4.2.4": true, - "4.3.1": true, - "4.3.2": true, - "4.4.1": true, - "4.4.2": true, - "4.4.3": true, - "4.4.4": true, - "4.5.1": true, - "4.5.2": true, - "5.0": true, - "5.1.1.1": true, - "5.1.1.2": true, - "5.1.10.1": true, - "5.1.10.2": true, - "5.1.11.1": true, - "5.1.11.2": true, - "5.1.12.1": true, - "5.1.12.2": true, - "5.1.13.1": true, - "5.1.13.2": true, - "5.1.14.1": true, - "5.1.14.2": true, - "5.1.2.1": true, - "5.1.2.2": true, - "5.1.3.1": true, - "5.1.3.2": true, - "5.1.4.1": true, - "5.1.4.2": true, - "5.1.5.1": true, - "5.1.5.2": true, - "5.1.6.1": true, - "5.1.6.2": true, - "5.1.7.1": true, - "5.1.7.2": true, - "5.1.8.1": true, - "5.1.8.2": true, - "5.1.9.1": true, - "5.1.9.2": true, - "5.2.1.1": true, - "5.2.1.2": true, - "5.2.10.1": true, - "5.2.10.2": true, - "5.2.11.1": true, - "5.2.11.2": true, - "5.2.12.1": true, - "5.2.12.2": true, - "5.2.13.1": true, - "5.2.13.2": true, - "5.2.14.1": true, - "5.2.14.2": true, - "5.2.2.1": true, - "5.2.2.2": true, - "5.2.3.1": true, - "5.2.3.2": true, - "5.2.4.1": true, - "5.2.4.2": true, - "5.2.5.1": true, - "5.2.5.2": true, - "5.2.6.1": true, - "5.2.6.2": true, - "5.2.7.1": true, - "5.2.7.2": true, - "5.2.8.1": true, - "5.2.8.2": true, - "5.2.9.1": true, - "5.2.9.2": true, - "5.3.1.1": true, - "5.3.1.2": true, - "5.3.10.1": true, - "5.3.10.2": true, - "5.3.11.1": true, - "5.3.11.2": true, - "5.3.12.1": true, - "5.3.12.2": true, - "5.3.13.1": true, - "5.3.13.2": true, - "5.3.14.1": true, - "5.3.14.2": true, - "5.3.2.1": true, - "5.3.2.2": true, - "5.3.3.1": true, - "5.3.3.2": true, - "5.3.4.1": true, - "5.3.4.2": true, - "5.3.5.1": true, - "5.3.5.2": true, - "5.3.6.1": true, - "5.3.6.2": true, - "5.3.7.1": true, - "5.3.7.2": true, - "5.3.8.1": true, - "5.3.8.2": true, - "5.3.9.1": true, - "5.3.9.2": true, - "5.4.1.1": true, - "5.4.1.2": true, - "5.4.10.1": true, - "5.4.10.2": true, - "5.4.11.1": true, - "5.4.11.2": true, - "5.4.12.1": true, - "5.4.12.2": true, - "5.4.13.1": true, - "5.4.13.2": true, - "5.4.14.1": true, - "5.4.14.2": true, - "5.4.2.1": true, - "5.4.2.2": true, - "5.4.3.1": true, - "5.4.3.2": true, - "5.4.4.1": true, - "5.4.4.2": true, - "5.4.5.1": true, - "5.4.5.2": true, - "5.4.6.1": true, - "5.4.6.2": true, - "5.4.7.1": true, - "5.4.7.2": true, - "5.4.8.1": true, - "5.4.8.2": true, - "5.4.9.1": true, - "5.4.9.2": true, - "6.0": true, - "6.1": true, - "6.2": true, - "7.0": true, - "7.1.1": true, - "7.1.2": true, - "7.1.3": true, - "7.1.4": true, - "7.1.5": true, - "7.1.6": true, - "7.1.7": true, - "7.1.8": true, - "7.1.9": true, - "7.2.1": true, - "7.2.2": true, - "7.2.3": true, - "7.2.4": true, - "7.2.5": true, - "7.2.6": true, - "7.2.7": true, - "7.2.8": true, - "7.2.9": true, - "7.3.1": true, - "7.3.2": true, - "7.3.3": true, - "7.3.4": true, - "7.3.5": true, - "7.3.6": true, - "7.3.7": true, - "7.3.8": true, - "7.3.9": true, - "7.4.1": true, - "7.4.2": true, - "7.4.3": true, - "7.4.4": true, - "7.4.5": true, - "7.4.6": true, - "7.4.7": true, - "7.4.8": true, - "7.4.9": true, - "8.0": true, - "8.1": true, - "8.2": true, - "8.3": true, - "8.4": true, - "9.1": true, - "9.2": true - } -} +{} diff --git a/parser/testdata/window9.metadata.json b/parser/testdata/window9.metadata.json index bc8f269..0967ef4 100644 --- a/parser/testdata/window9.metadata.json +++ b/parser/testdata/window9.metadata.json @@ -1,44 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "1.4": true, - "1.5": true, - "10.0": true, - "10.1": true, - "10.2": true, - "10.3": true, - "10.4": true, - "2.0": true, - "2.1.1": true, - "2.1.2": true, - "2.2.1": true, - "2.2.2": true, - "3.0": true, - "3.1": true, - "3.2": true, - "3.3": true, - "3.4": true, - "4.0": true, - "4.1.1": true, - "4.1.2": true, - "5.0": true, - "6.0": true, - "6.1": true, - "6.2": true, - "7.0": true, - "7.1": true, - "7.2": true, - "7.3": true, - "7.4": true, - "8.1.1": true, - "8.1.2": true, - "8.2": true, - "8.3": true, - "8.4": true, - "9.0": true, - "9.1": true - } -} +{} diff --git a/parser/testdata/windowA.metadata.json b/parser/testdata/windowA.metadata.json index 80ae954..0967ef4 100644 --- a/parser/testdata/windowA.metadata.json +++ b/parser/testdata/windowA.metadata.json @@ -1,22 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "1.4": true, - "1.5": true, - "1.6": true, - "2.1": true, - "2.2": true, - "2.3": true, - "2.4": true, - "2.5": true, - "2.6": true, - "3.1": true, - "3.2": true, - "3.3": true, - "3.4": true, - "4.0": true - } -} +{} diff --git a/parser/testdata/windowB.metadata.json b/parser/testdata/windowB.metadata.json index b8aab70..0967ef4 100644 --- a/parser/testdata/windowB.metadata.json +++ b/parser/testdata/windowB.metadata.json @@ -1,53 +1 @@ -{ - "todo": { - "1.0": true, - "1.2": true, - "10.1": true, - "10.2": true, - "10.3": true, - "2.0": true, - "3.0": true, - "3.1": true, - "3.10": true, - "3.11": true, - "3.12": true, - "3.13": true, - "3.14": true, - "3.15": true, - "3.16": true, - "3.2": true, - "3.3": true, - "3.4": true, - "3.5": true, - "3.5a": true, - "3.5b": true, - "3.5c": true, - "3.5d": true, - "3.7b": true, - "3.7c": true, - "3.7d": true, - "3.8": true, - "3.9": true, - "4.0": true, - "4.1": true, - "4.2": true, - "4.3": true, - "5.0": true, - "5.1": true, - "5.2": true, - "5.3": true, - "5.4": true, - "5.5": true, - "6.0": true, - "6.1": true, - "6.2": true, - "7.0": true, - "7.1": true, - "7.2": true, - "7.3": true, - "7.4": true, - "8.0": true, - "8.1": true, - "9.0": true - } -} +{} diff --git a/parser/testdata/windowC.metadata.json b/parser/testdata/windowC.metadata.json index c3e1334..0967ef4 100644 --- a/parser/testdata/windowC.metadata.json +++ b/parser/testdata/windowC.metadata.json @@ -1,7 +1 @@ -{ - "todo": { - "1.0": true, - "2.0": true, - "2.1": true - } -} +{} diff --git a/parser/testdata/windowD.metadata.json b/parser/testdata/windowD.metadata.json index 4a208de..0967ef4 100644 --- a/parser/testdata/windowD.metadata.json +++ b/parser/testdata/windowD.metadata.json @@ -1,17 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.2.dup1": true, - "1.3": true, - "1.4": true, - "2.0": true, - "2.1": true, - "2.2": true, - "2.3": true, - "2.4": true, - "2.5": true, - "2.6": true - } -} +{} diff --git a/parser/testdata/windowE.metadata.json b/parser/testdata/windowE.metadata.json index da1b1d9..0967ef4 100644 --- a/parser/testdata/windowE.metadata.json +++ b/parser/testdata/windowE.metadata.json @@ -1,19 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "2.0": true, - "2.1": true, - "2.2": true, - "3.0": true, - "3.1": true, - "4.0": true, - "4.1": true, - "4.2": true, - "5.0": true, - "5.1": true, - "5.2": true - } -} +{} diff --git a/parser/testdata/windowerr.metadata.json b/parser/testdata/windowerr.metadata.json index 3494ae4..0967ef4 100644 --- a/parser/testdata/windowerr.metadata.json +++ b/parser/testdata/windowerr.metadata.json @@ -1,5 +1 @@ -{ - "todo": { - "1.0": true - } -} +{} diff --git a/parser/testdata/with1.metadata.json b/parser/testdata/with1.metadata.json index 731ec4e..0967ef4 100644 --- a/parser/testdata/with1.metadata.json +++ b/parser/testdata/with1.metadata.json @@ -1,101 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.2": true, - "1.3": true, - "1.4": true, - "10.1": true, - "10.2": true, - "10.7.1": true, - "10.7.2": true, - "10.7.3": true, - "10.8.1": true, - "10.8.2": true, - "10.8.3": true, - "10.8.4.1": true, - "10.8.4.2": true, - "10.8.4.3": true, - "11.1": true, - "11.2": true, - "11.3": true, - "12.1": true, - "13.1": true, - "13.2": true, - "13.3": true, - "14.1": true, - "15.1": true, - "16.1": true, - "16.2": true, - "16.3": true, - "17.1": true, - "17.2": true, - "17.3": true, - "17.4": true, - "17.5": true, - "17.6": true, - "17.7": true, - "17.8": true, - "17.9": true, - "18.1": true, - "18.2": true, - "19.1a": true, - "2.1": true, - "2.2": true, - "2.3": true, - "2.4": true, - "2.5": true, - "20.1": true, - "20.2": true, - "21.1": true, - "21.1b": true, - "21.2": true, - "22.1": true, - "23.1": true, - "24.1": true, - "24.2": true, - "26.0": true, - "26.1": true, - "26.2": true, - "26.3": true, - "27.1": true, - "28.1": true, - "3.1": true, - "3.2": true, - "3.3": true, - "3.4": true, - "3.5": true, - "3.6": true, - "4.1": true, - "4.2": true, - "4.3": true, - "5.1": true, - "5.2": true, - "5.2.1": true, - "5.2.2": true, - "5.2.3": true, - "5.3": true, - "5.4": true, - "5.5": true, - "5.6.1": true, - "5.6.2": true, - "5.6.3": true, - "5.6.4": true, - "5.6.5": true, - "5.6.6": true, - "5.6.7": true, - "6.1": true, - "6.2": true, - "6.3": true, - "6.4": true, - "7.1": true, - "7.2": true, - "7.3": true, - "7.4": true, - "7.5": true, - "7.6": true, - "8.1-mandelbrot": true, - "8.2-soduko": true, - "with1-generated": true - } -} +{} diff --git a/parser/testdata/with2.metadata.json b/parser/testdata/with2.metadata.json index 2de2d1d..0967ef4 100644 --- a/parser/testdata/with2.metadata.json +++ b/parser/testdata/with2.metadata.json @@ -1,58 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "1.10": true, - "1.11": true, - "1.12": true, - "1.13": true, - "1.14": true, - "1.15": true, - "1.15.2": true, - "1.16": true, - "1.2": true, - "1.3": true, - "1.4": true, - "1.5": true, - "1.6": true, - "1.7": true, - "1.8": true, - "1.9": true, - "10.1": true, - "11.1": true, - "11.2": true, - "11.3": true, - "11.4": true, - "11.5": true, - "12.1": true, - "13.1": true, - "3.1": true, - "3.2": true, - "3.3": true, - "3.4": true, - "3.5": true, - "4.1": true, - "5.1": true, - "6.1": true, - "6.10": true, - "6.2": true, - "6.3": true, - "6.3.dup1": true, - "6.4": true, - "6.5": true, - "6.6": true, - "6.7": true, - "6.8": true, - "6.9": true, - "7.1": true, - "7.2": true, - "7.3": true, - "7.4": true, - "7.5": true, - "8.1": true, - "8.2": true, - "8.3": true, - "9.1": true, - "9.2": true - } -} +{} diff --git a/parser/testdata/with3.metadata.json b/parser/testdata/with3.metadata.json index ea2b038..0967ef4 100644 --- a/parser/testdata/with3.metadata.json +++ b/parser/testdata/with3.metadata.json @@ -1,16 +1 @@ -{ - "todo": { - "1.0": true, - "1.1": true, - "2.0": true, - "2.1": true, - "3.1.1": true, - "3.2.1": true, - "4.0": true, - "4.1": true, - "4.2": true, - "5.2": true, - "6.0": true, - "6.1": true - } -} +{} diff --git a/parser/testdata/withM.metadata.json b/parser/testdata/withM.metadata.json index 3494ae4..0967ef4 100644 --- a/parser/testdata/withM.metadata.json +++ b/parser/testdata/withM.metadata.json @@ -1,5 +1 @@ -{ - "todo": { - "1.0": true - } -} +{} diff --git a/token/keywords.go b/token/keywords.go new file mode 100644 index 0000000..7ea23fe --- /dev/null +++ b/token/keywords.go @@ -0,0 +1,241 @@ +package token + +import "strings" + +// keywords maps the upper-case spelling of every SQLite keyword to its token +// kind. Transcribed from aKeywordTable[] in tool/mkkeywordhash.c, resolved +// for the feature set of the pinned build (see parser/testdata/README.md): +// every keyword whose mask is enabled by default is present. WITHIN is +// omitted because it is gated on SQLITE_ENABLE_ORDERED_SET_AGGREGATES, which +// the pinned oracle build does not define. +var keywords = map[string]Kind{ + "ABORT": ABORT, + "ACTION": ACTION, + "ADD": ADD, + "AFTER": AFTER, + "ALL": ALL, + "ALTER": ALTER, + "ALWAYS": ALWAYS, + "ANALYZE": ANALYZE, + "AND": AND, + "AS": AS, + "ASC": ASC, + "ATTACH": ATTACH, + "AUTOINCREMENT": AUTOINCR, + "BEFORE": BEFORE, + "BEGIN": BEGIN, + "BETWEEN": BETWEEN, + "BY": BY, + "CASCADE": CASCADE, + "CASE": CASE, + "CAST": CAST, + "CHECK": CHECK, + "COLLATE": COLLATE, + "COLUMN": COLUMNKW, + "COMMIT": COMMIT, + "CONFLICT": CONFLICT, + "CONSTRAINT": CONSTRAINT, + "CREATE": CREATE, + "CROSS": JOIN_KW, + "CURRENT": CURRENT, + "CURRENT_DATE": CTIME_KW, + "CURRENT_TIME": CTIME_KW, + "CURRENT_TIMESTAMP": CTIME_KW, + "DATABASE": DATABASE, + "DEFAULT": DEFAULT, + "DEFERRED": DEFERRED, + "DEFERRABLE": DEFERRABLE, + "DELETE": DELETE, + "DESC": DESC, + "DETACH": DETACH, + "DISTINCT": DISTINCT, + "DO": DO, + "DROP": DROP, + "END": END, + "EACH": EACH, + "ELSE": ELSE, + "ESCAPE": ESCAPE, + "EXCEPT": EXCEPT, + "EXCLUSIVE": EXCLUSIVE, + "EXCLUDE": EXCLUDE, + "EXISTS": EXISTS, + "EXPLAIN": EXPLAIN, + "FAIL": FAIL, + "FILTER": FILTER, + "FIRST": FIRST, + "FOLLOWING": FOLLOWING, + "FOR": FOR, + "FOREIGN": FOREIGN, + "FROM": FROM, + "FULL": JOIN_KW, + "GENERATED": GENERATED, + "GLOB": LIKE_KW, + "GROUP": GROUP, + "GROUPS": GROUPS, + "HAVING": HAVING, + "IF": IF, + "IGNORE": IGNORE, + "IMMEDIATE": IMMEDIATE, + "IN": IN, + "INDEX": INDEX, + "INDEXED": INDEXED, + "INITIALLY": INITIALLY, + "INNER": JOIN_KW, + "INSERT": INSERT, + "INSTEAD": INSTEAD, + "INTERSECT": INTERSECT, + "INTO": INTO, + "IS": IS, + "ISNULL": ISNULL, + "JOIN": JOIN, + "KEY": KEY, + "LAST": LAST, + "LEFT": JOIN_KW, + "LIKE": LIKE_KW, + "LIMIT": LIMIT, + "MATCH": MATCH, + "MATERIALIZED": MATERIALIZED, + "NATURAL": JOIN_KW, + "NO": NO, + "NOT": NOT, + "NOTHING": NOTHING, + "NOTNULL": NOTNULL, + "NULL": NULL, + "NULLS": NULLS, + "OF": OF, + "OFFSET": OFFSET, + "ON": ON, + "OR": OR, + "ORDER": ORDER, + "OTHERS": OTHERS, + "OUTER": JOIN_KW, + "OVER": OVER, + "PARTITION": PARTITION, + "PLAN": PLAN, + "PRAGMA": PRAGMA, + "PRECEDING": PRECEDING, + "PRIMARY": PRIMARY, + "QUERY": QUERY, + "RAISE": RAISE, + "RANGE": RANGE, + "RECURSIVE": RECURSIVE, + "REFERENCES": REFERENCES, + "REGEXP": LIKE_KW, + "REINDEX": REINDEX, + "RELEASE": RELEASE, + "RENAME": RENAME, + "REPLACE": REPLACE, + "RESTRICT": RESTRICT, + "RETURNING": RETURNING, + "RIGHT": JOIN_KW, + "ROLLBACK": ROLLBACK, + "ROW": ROW, + "ROWS": ROWS, + "SAVEPOINT": SAVEPOINT, + "SELECT": SELECT, + "SET": SET, + "TABLE": TABLE, + "TEMP": TEMP, + "TEMPORARY": TEMP, + "THEN": THEN, + "TIES": TIES, + "TO": TO, + "TRANSACTION": TRANSACTION, + "TRIGGER": TRIGGER, + "UNBOUNDED": UNBOUNDED, + "UNION": UNION, + "UNIQUE": UNIQUE, + "UPDATE": UPDATE, + "USING": USING, + "VACUUM": VACUUM, + "VALUES": VALUES, + "VIEW": VIEW, + "VIRTUAL": VIRTUAL, + "WHEN": WHEN, + "WHERE": WHERE, + "WINDOW": WINDOW, + "WITH": WITH, + "WITHOUT": WITHOUT, +} + +// keywordName is the reverse of keywords, used by Kind.String. Kinds shared +// by several spellings (JOIN_KW, LIKE_KW, CTIME_KW, TEMP) keep the SQLite +// token name rather than one arbitrary spelling. +var keywordName = func() map[Kind]string { + m := map[Kind]string{ + JOIN_KW: "JOIN_KW", LIKE_KW: "LIKE_KW", CTIME_KW: "CTIME_KW", + TEMP: "TEMP", AUTOINCR: "AUTOINCR", COLUMNKW: "COLUMNKW", + } + for name, k := range keywords { + if _, taken := m[k]; !taken { + m[k] = name + } + } + return m +}() + +// fallback is SQLite's "%fallback ID" set from parse.y: keywords that the +// LALR parser re-reads as plain identifiers whenever no shift action exists +// for the keyword itself. Resolved for the pinned build's feature set: +// SQLITE_OMIT_COMPOUND_SELECT is off (so EXCEPT/INTERSECT/UNION do not fall +// back), SQLITE_OMIT_WINDOWFUNC is off (so the frame keywords do), +// SQLITE_OMIT_GENERATED_COLUMNS is off, and +// SQLITE_ENABLE_ORDERED_SET_AGGREGATES is off (WITHIN is not a keyword). +// +// WINDOW, OVER and FILTER are deliberately absent: their keyword-versus- +// identifier ambiguity is resolved in the tokenizer instead (see lexer). +var fallback = map[Kind]bool{ + ABORT: true, ACTION: true, AFTER: true, ANALYZE: true, ASC: true, + ATTACH: true, BEFORE: true, BEGIN: true, BY: true, CASCADE: true, + CAST: true, COLUMNKW: true, CONFLICT: true, DATABASE: true, + DEFERRED: true, DESC: true, DETACH: true, DO: true, EACH: true, + END: true, EXCLUSIVE: true, EXPLAIN: true, FAIL: true, FOR: true, + IGNORE: true, IMMEDIATE: true, INITIALLY: true, INSTEAD: true, + LIKE_KW: true, MATCH: true, NO: true, PLAN: true, QUERY: true, + KEY: true, OF: true, OFFSET: true, PRAGMA: true, RAISE: true, + RECURSIVE: true, RELEASE: true, REPLACE: true, RESTRICT: true, + ROW: true, ROWS: true, ROLLBACK: true, SAVEPOINT: true, TEMP: true, + TRIGGER: true, VACUUM: true, VIEW: true, VIRTUAL: true, WITH: true, + WITHOUT: true, NULLS: true, FIRST: true, LAST: true, + CURRENT: true, FOLLOWING: true, PARTITION: true, PRECEDING: true, + RANGE: true, UNBOUNDED: true, EXCLUDE: true, GROUPS: true, + OTHERS: true, TIES: true, GENERATED: true, ALWAYS: true, + MATERIALIZED: true, REINDEX: true, RENAME: true, CTIME_KW: true, + IF: true, +} + +// Lookup returns the keyword kind for an identifier spelling, or ID if it is +// not a keyword. Matching is ASCII case-insensitive, as in keywordCode(). +func Lookup(name string) Kind { + if k, ok := keywords[strings.ToUpper(name)]; ok { + return k + } + return ID +} + +// CanFallback reports whether k is in SQLite's %fallback ID set. +func CanFallback(k Kind) bool { return fallback[k] } + +// The token classes declared in parse.y. Each corresponds to a +// %token_class directive, extended with the %fallback set: a keyword that +// falls back to ID satisfies any class containing ID. +// +// %token_class id ID|INDEXED. +// %token_class ids ID|STRING. +// %token_class idj ID|INDEXED|JOIN_KW. +// nm ::= idj. / nm ::= STRING. + +// IsID reports whether k satisfies the "id" class (ID|INDEXED). +func IsID(k Kind) bool { return k == ID || k == INDEXED || fallback[k] } + +// IsIDS reports whether k satisfies the "ids" class (ID|STRING). +func IsIDS(k Kind) bool { return k == ID || k == STRING || fallback[k] } + +// IsIDJ reports whether k satisfies the "idj" class (ID|INDEXED|JOIN_KW). +func IsIDJ(k Kind) bool { + return k == ID || k == INDEXED || k == JOIN_KW || fallback[k] +} + +// IsName reports whether k satisfies the "nm" production (idj|STRING), the +// name production used for tables, columns, indexes and the like. +func IsName(k Kind) bool { return IsIDJ(k) || k == STRING } diff --git a/token/token.go b/token/token.go new file mode 100644 index 0000000..1bee6d1 --- /dev/null +++ b/token/token.go @@ -0,0 +1,225 @@ +// Package token defines the lexical tokens of the SQLite SQL dialect. +// +// Kind mirrors the TK_* token codes SQLite's tokenizer produces +// (src/tokenize.c) and the grammar consumes (src/parse.y). Names match the +// SQLite spelling so grammar attributions in the parser read directly +// against parse.y; where SQLite's name differs from the keyword (TK_COLUMNKW +// for COLUMN, TK_AUTOINCR for AUTOINCREMENT) the SQLite name is kept. +package token + +// Kind identifies the lexical class of a token. +type Kind int + +// The token kinds. The ordering carries no meaning (unlike SQLite's +// generated codes, which are ordered to shrink the LALR tables). +const ( + EOF Kind = iota // end of input; also the synthetic tokens SQLite appends + + // Tokenizer-only kinds. SPACE and COMMENT never reach the parser. + SPACE + COMMENT + ILLEGAL // "unrecognized token" + + // Literals and names. + ID + STRING + INTEGER + FLOAT + BLOB + VARIABLE + QNUMBER // numeric literal containing '_' digit separators + + // Punctuation and operators. + LP // ( + RP // ) + SEMI // ; + COMMA // , + DOT // . + PLUS // + + MINUS // - + STAR // * + SLASH // / + REM // % + EQ // = or == + NE // != or <> + LT // < + LE // <= + GT // > + GE // >= + LSHIFT // << + RSHIFT // >> + BITAND // & + BITOR // | + BITNOT // ~ + CONCAT // || + PTR // -> or ->> + + // Keywords, in the order of SQLite's keyword table. + ABORT + ACTION + ADD + AFTER + ALL + ALTER + ALWAYS + ANALYZE + AND + AS + ASC + ATTACH + AUTOINCR + BEFORE + BEGIN + BETWEEN + BY + CASCADE + CASE + CAST + CHECK + COLLATE + COLUMNKW + COMMIT + CONFLICT + CONSTRAINT + CREATE + CURRENT + CTIME_KW // CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP + DATABASE + DEFAULT + DEFERRED + DEFERRABLE + DELETE + DESC + DETACH + DISTINCT + DO + DROP + END + EACH + ELSE + ESCAPE + EXCEPT + EXCLUSIVE + EXCLUDE + EXISTS + EXPLAIN + FAIL + FILTER + FIRST + FOLLOWING + FOR + FOREIGN + FROM + GENERATED + GROUP + GROUPS + HAVING + IF + IGNORE + IMMEDIATE + IN + INDEX + INDEXED + INITIALLY + INSERT + INSTEAD + INTERSECT + INTO + IS + ISNULL + JOIN + JOIN_KW // CROSS, FULL, INNER, LEFT, NATURAL, OUTER, RIGHT + KEY + LAST + LIKE_KW // GLOB, LIKE, REGEXP + LIMIT + MATCH + MATERIALIZED + NO + NOT + NOTHING + NOTNULL + NULL + NULLS + OF + OFFSET + ON + OR + ORDER + OTHERS + OVER + PARTITION + PLAN + PRAGMA + PRECEDING + PRIMARY + QUERY + RAISE + RANGE + RECURSIVE + REFERENCES + REINDEX + RELEASE + RENAME + REPLACE + RESTRICT + RETURNING + ROLLBACK + ROW + ROWS + SAVEPOINT + SELECT + SET + TABLE + TEMP + THEN + TIES + TO + TRANSACTION + TRIGGER + UNBOUNDED + UNION + UNIQUE + UPDATE + USING + VACUUM + VALUES + VIEW + VIRTUAL + WHEN + WHERE + WINDOW + WITH + WITHOUT +) + +var kindNames = map[Kind]string{ + EOF: "EOF", SPACE: "SPACE", COMMENT: "COMMENT", ILLEGAL: "ILLEGAL", + ID: "ID", STRING: "STRING", INTEGER: "INTEGER", FLOAT: "FLOAT", + BLOB: "BLOB", VARIABLE: "VARIABLE", QNUMBER: "QNUMBER", + LP: "LP", RP: "RP", SEMI: "SEMI", COMMA: "COMMA", DOT: "DOT", + PLUS: "PLUS", MINUS: "MINUS", STAR: "STAR", SLASH: "SLASH", REM: "REM", + EQ: "EQ", NE: "NE", LT: "LT", LE: "LE", GT: "GT", GE: "GE", + LSHIFT: "LSHIFT", RSHIFT: "RSHIFT", BITAND: "BITAND", BITOR: "BITOR", + BITNOT: "BITNOT", CONCAT: "CONCAT", PTR: "PTR", +} + +// String returns the SQLite TK_* name of the kind, without the prefix. +func (k Kind) String() string { + if s, ok := kindNames[k]; ok { + return s + } + if s, ok := keywordName[k]; ok { + return s + } + return "Kind(?)" +} + +// Token is one lexical token. Pos and End are byte offsets into the input +// the token was lexed from; Text is the corresponding source slice. +type Token struct { + Kind Kind `json:"kind"` + Text string `json:"text"` + Pos int `json:"pos"` + End int `json:"end"` +} From d4bf2d8dbae25673f8ea086bc3baaa4bb1bc6f67 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 19:25:40 +0000 Subject: [PATCH 02/23] Record how far SQLite's parser got, so truncated parses do not lie The corpus derived "meyer must accept the whole case" from a statement that failed with a semantic message, on the reasoning that it must have parsed to get that far. That is wrong when the message comes from a grammar action in the middle of a statement: sqlite3BeginTrigger raises "no such table" at the trigger_decl reduce, sqlite3RunParser sees pParse->rc set and abandons the loop, and the trigger body is never parsed at all. Three such cases have a deliberate syntax error in the body that SQLite never saw, and the corpus was demanding meyer accept them. sqlite3_prepare_v2's pzTail says exactly how far the parser got: the end of the statement for an ordinary end-of-parse failure, and just past BEGIN for these. The oracle now records it on every failing statement, (*Case).Expected turns short tails into unverified byte ranges, and the harness lets the parser under test fail inside one. 192 of the 4685 cases have such a range; 4 of them were failing. Regenerated the corpus for the added field: the diff is confined to err lines, which gain one integer each. Corpus: 4685/4685 cases passing. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- CLAUDE.md | 6 + cmd/regenerate-parse/main.go | 11 +- cmd/regenerate-parse/oracle/oracle.c | 19 +- internal/testfile/testfile.go | 73 +- internal/testfile/testfile_test.go | 62 +- parser/parser_test.go | 8 + parser/testdata/README.md | 7 +- parser/testdata/alter.test | 172 +- parser/testdata/alter2.test | 86 +- parser/testdata/alter3.test | 100 +- parser/testdata/alter4.test | 94 +- parser/testdata/alterdropcol.test | 114 +- parser/testdata/alterdropcol2.test | 18 +- parser/testdata/altertab.test | 306 +-- parser/testdata/altertab2.test | 80 +- parser/testdata/altertab3.test | 166 +- parser/testdata/between.test | 10 +- parser/testdata/e_createtable.test | 302 +-- parser/testdata/e_delete.test | 74 +- parser/testdata/e_expr.test | 104 +- parser/testdata/e_insert.metadata.json | 6 +- parser/testdata/e_insert.test | 16 +- parser/testdata/e_select.test | 456 ++--- parser/testdata/e_update.test | 148 +- parser/testdata/expr.test | 36 +- parser/testdata/expr2.test | 14 +- parser/testdata/in.test | 304 +-- parser/testdata/in3.test | 14 +- parser/testdata/in4.test | 268 +-- parser/testdata/in5.test | 140 +- parser/testdata/parser1.test | 16 +- parser/testdata/returning1.test | 220 +-- parser/testdata/select1.test | 214 +-- parser/testdata/select2.test | 36 +- parser/testdata/select3.test | 132 +- parser/testdata/select4.test | 176 +- parser/testdata/select5.test | 106 +- parser/testdata/select6.test | 220 +-- parser/testdata/select7.test | 72 +- parser/testdata/select8.test | 6 +- parser/testdata/select9.test | 76 +- parser/testdata/selectA.test | 502 ++--- parser/testdata/selectB.test | 82 +- parser/testdata/selectC.test | 108 +- parser/testdata/selectD.test | 4 +- parser/testdata/selectE.test | 2 +- parser/testdata/selectF.test | 10 +- parser/testdata/selectH.test | 28 +- parser/testdata/tokenize.test | 24 +- parser/testdata/trigger1.metadata.json | 8 +- parser/testdata/trigger1.test | 300 +-- parser/testdata/upsert1.test | 218 +-- parser/testdata/upsert2.test | 104 +- parser/testdata/upsert3.test | 24 +- parser/testdata/upsert4.test | 116 +- parser/testdata/upsert5.test | 348 ++-- parser/testdata/window1.test | 742 +++---- parser/testdata/window2.test | 154 +- parser/testdata/window3.test | 2444 ++++++++++++------------ parser/testdata/window4.test | 498 ++--- parser/testdata/window5.test | 22 +- parser/testdata/window6.test | 74 +- parser/testdata/window7.test | 20 +- parser/testdata/window8.test | 754 ++++---- parser/testdata/window9.test | 108 +- parser/testdata/windowA.test | 36 +- parser/testdata/windowB.test | 174 +- parser/testdata/windowD.test | 24 +- parser/testdata/windowE.test | 54 +- parser/testdata/windowerr.test | 10 +- parser/testdata/with1.test | 294 +-- parser/testdata/with2.test | 112 +- parser/testdata/with3.test | 16 +- parser/testdata/withM.test | 2 +- 74 files changed, 6006 insertions(+), 5898 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 1b42713..06a6b11 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,6 +32,12 @@ stored; the harness derives the expectation from them: - Otherwise meyer must accept the whole case. This includes statements that failed **semantically** in SQLite (`no such table: …`) — those parsed successfully; meyer does no semantic analysis. +- …except in text SQLite's parser never reached. A grammar action can fail + in the middle of a statement — `sqlite3BeginTrigger` raising `no such + table` at the `trigger_decl` reduce, before the trigger body is looked at + — and `sqlite3RunParser` then abandons the rest of the statement. The + oracle records `pzTail` on every failing statement, so the harness knows + which byte ranges are unverified and lets meyer fail inside them. Known looseness: messages produced by grammar *actions* (e.g. `ORDER BY clause should come after UNION not before`) are currently classified as diff --git a/cmd/regenerate-parse/main.go b/cmd/regenerate-parse/main.go index 74702b7..1b39aad 100644 --- a/cmd/regenerate-parse/main.go +++ b/cmd/regenerate-parse/main.go @@ -238,16 +238,19 @@ func parseOracleLine(line string) (testfile.StmtResult, error) { if fields[2] == "ok" { return testfile.StmtResult{Offset: off, OK: true}, nil } - rest := strings.SplitN(strings.TrimPrefix(fields[2], "err "), " ", 3) - if !strings.HasPrefix(fields[2], "err ") || len(rest) != 3 { + rest := strings.SplitN(strings.TrimPrefix(fields[2], "err "), " ", 4) + if !strings.HasPrefix(fields[2], "err ") || len(rest) != 4 { return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) } rc, err1 := strconv.Atoi(rest[0]) erroff, err2 := strconv.Atoi(rest[1]) - if err1 != nil || err2 != nil { + tail, err3 := strconv.Atoi(rest[2]) + if err1 != nil || err2 != nil || err3 != nil { return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) } - return testfile.StmtResult{Offset: off, RC: rc, ErrOffset: erroff, Message: rest[2]}, nil + return testfile.StmtResult{ + Offset: off, RC: rc, ErrOffset: erroff, Tail: tail, Message: rest[3], + }, nil } // mergeMetadata reconciles the sidecar with the regenerated case list: diff --git a/cmd/regenerate-parse/oracle/oracle.c b/cmd/regenerate-parse/oracle/oracle.c index 50ea107..5494906 100644 --- a/cmd/regenerate-parse/oracle/oracle.c +++ b/cmd/regenerate-parse/oracle/oracle.c @@ -11,11 +11,20 @@ ** Output: one line per non-empty statement: ** ** stmt ok -** stmt err +** stmt err ** ** byte offset of the statement within the input script ** sqlite3_prepare_v2 result code ** sqlite3_error_offset relative to the whole script (-1 if unknown) +** pzTail relative to the whole script: how far the parser got +** +** matters because a grammar action can fail in the middle of a +** statement -- sqlite3BeginTrigger raising "no such table" at the +** trigger_decl reduce, say -- and sqlite3RunParser then abandons the rest +** of the statement unparsed. When that happens stops short of the +** end of the statement, marking the text SQLite never looked at. A +** successful prepare always consumes the whole statement, so "ok" lines +** carry no . ** ** SQLite error messages never contain newlines, so the line format is safe. */ @@ -105,13 +114,17 @@ int main(int argc, char **argv){ stmtText[len] = 0; sqlite3_stmt *pStmt = 0; - int rc = sqlite3_prepare_v2(db, stmtText, (int)len, &pStmt, 0); + const char *zTail = 0; + int rc = sqlite3_prepare_v2(db, stmtText, (int)len, &pStmt, &zTail); if( rc==SQLITE_OK ){ printf("stmt %zu ok\n", pos); }else{ int erroff = sqlite3_error_offset(db); + size_t tail = zTail ? (size_t)(zTail-stmtText) : len; if( erroff>=0 ) erroff += (int)pos; - printf("stmt %zu err %d %d %s\n", pos, rc, erroff, sqlite3_errmsg(db)); + if( tail>len ) tail = len; + printf("stmt %zu err %d %d %zu %s\n", pos, rc, erroff, pos+tail, + sqlite3_errmsg(db)); } sqlite3_finalize(pStmt); free(stmtText); diff --git a/internal/testfile/testfile.go b/internal/testfile/testfile.go index 082aed0..c6900c3 100644 --- a/internal/testfile/testfile.go +++ b/internal/testfile/testfile.go @@ -6,14 +6,16 @@ // // ---- // stmt ok -// stmt err +// stmt err // // The result lines are the raw per-statement output of the SQLite oracle // (see cmd/regenerate-parse): every statement in the case was prepared // independently with sqlite3_prepare_v2 against an empty in-memory database. // Offsets are byte offsets into the case SQL; erroff is -1 when SQLite did -// not report an error position. The corpus stores this raw truth; the -// pass/fail policy for the parser under test is derived from it by +// not report an error position, and tail is how far sqlite3_prepare_v2 +// reported having got (a successful prepare always reaches the end of its +// statement, so ok lines carry no tail). The corpus stores this raw truth; +// the pass/fail policy for the parser under test is derived from it by // (*Case).Expected, so the policy can evolve without regenerating. // // Each corpus file has a sidecar .metadata.json: @@ -37,9 +39,11 @@ import ( // StmtResult is one raw oracle observation for a single statement. type StmtResult struct { Offset int // byte offset of the statement within the case SQL + End int // byte offset one past the statement, within the case SQL OK bool // sqlite3_prepare_v2 returned SQLITE_OK RC int // prepare result code when !OK ErrOffset int // sqlite3_error_offset within the case SQL; -1 if unknown + Tail int // pzTail within the case SQL: how far the parser got Message string // sqlite3_errmsg when !OK } @@ -55,6 +59,30 @@ type Expectation struct { OK bool Message string // expected parse error message when !OK Offset int // expected error offset when !OK; -1 if unknown + + // Unreached lists byte ranges of the case SQL that SQLite's parser + // never looked at, because a grammar action failed part-way through a + // statement and sqlite3RunParser abandoned the rest of it. The corpus + // says nothing about whether that text is valid SQL, so a parser under + // test may fail inside one of these ranges without being wrong. + Unreached []Range +} + +// Range is a half-open byte range of a case's SQL. +type Range struct{ Start, End int } + +// IsUnreached reports whether offset falls in text SQLite's parser never +// reached. An offset of -1 (unknown) is never unreached. +func (e Expectation) IsUnreached(offset int) bool { + if offset < 0 { + return false + } + for _, r := range e.Unreached { + if offset >= r.Start && offset < r.End { + return true + } + } + return false } // syntaxFamily matches error messages produced by SQLite's parser/tokenizer @@ -79,14 +107,24 @@ func IsSyntaxError(msg string) bool { // Expected derives the harness expectation: the first syntax-family error in // statement order wins (meyer is fail-fast); if there is none, every -// statement must parse. +// statement must parse, except within the ranges SQLite's own parser never +// reached. func (c *Case) Expected() Expectation { + var unreached []Range for _, r := range c.Results { - if !r.OK && IsSyntaxError(r.Message) { + if r.OK { + continue + } + if IsSyntaxError(r.Message) { return Expectation{OK: false, Message: r.Message, Offset: r.ErrOffset} } + // A semantic failure means the statement parsed -- but only as far + // as the parser had got when the grammar action raised it. + if r.Tail < r.End { + unreached = append(unreached, Range{Start: r.Tail, End: r.End}) + } } - return Expectation{OK: true, Offset: -1} + return Expectation{OK: true, Offset: -1, Unreached: unreached} } const ( @@ -132,6 +170,15 @@ func Read(path string) ([]Case, error) { c.Results = append(c.Results, r) i++ } + // Statement ends are implied by the next statement's offset, and by + // the end of the case SQL for the last one. + for j := range c.Results { + if j+1 < len(c.Results) { + c.Results[j].End = c.Results[j+1].Offset + } else { + c.Results[j].End = len(c.SQL) + } + } cases = append(cases, c) } return cases, nil @@ -150,16 +197,19 @@ func parseResultLine(line string) (StmtResult, error) { if parts[1] == "ok" { return StmtResult{Offset: off, OK: true}, nil } - fields := strings.SplitN(strings.TrimPrefix(parts[1], "err "), " ", 3) - if !strings.HasPrefix(parts[1], "err ") || len(fields) != 3 { + fields := strings.SplitN(strings.TrimPrefix(parts[1], "err "), " ", 4) + if !strings.HasPrefix(parts[1], "err ") || len(fields) != 4 { return StmtResult{}, fmt.Errorf("malformed result line %q", line) } rc, err1 := strconv.Atoi(fields[0]) erroff, err2 := strconv.Atoi(fields[1]) - if err1 != nil || err2 != nil { + tail, err3 := strconv.Atoi(fields[2]) + if err1 != nil || err2 != nil || err3 != nil { return StmtResult{}, fmt.Errorf("malformed result line %q", line) } - return StmtResult{Offset: off, RC: rc, ErrOffset: erroff, Message: fields[2]}, nil + return StmtResult{ + Offset: off, RC: rc, ErrOffset: erroff, Tail: tail, Message: fields[3], + }, nil } // CheckCase reports whether a case can be represented in the file format @@ -186,7 +236,8 @@ func Write(path string, cases []Case) error { if r.OK { fmt.Fprintf(&b, "stmt %d ok\n", r.Offset) } else { - fmt.Fprintf(&b, "stmt %d err %d %d %s\n", r.Offset, r.RC, r.ErrOffset, r.Message) + fmt.Fprintf(&b, "stmt %d err %d %d %d %s\n", + r.Offset, r.RC, r.ErrOffset, r.Tail, r.Message) } } } diff --git a/internal/testfile/testfile_test.go b/internal/testfile/testfile_test.go index a565f4f..39c7f23 100644 --- a/internal/testfile/testfile_test.go +++ b/internal/testfile/testfile_test.go @@ -7,20 +7,23 @@ import ( ) func TestRoundTrip(t *testing.T) { + // Statement ends are derived on read from the following statement's + // offset (and the length of the SQL for the last one), so they are + // spelled out here even though Write does not emit them. cases := []Case{ { Name: "a-1.1", SQL: "CREATE TABLE t1(a int);\nSELECT * FROM t1;\n", Results: []StmtResult{ - {Offset: 0, OK: true}, - {Offset: 24, RC: 1, ErrOffset: -1, Message: "no such table: t1"}, + {Offset: 0, End: 24, OK: true}, + {Offset: 24, End: 42, RC: 1, ErrOffset: -1, Tail: 42, Message: "no such table: t1"}, }, }, { Name: "a-1.2", SQL: "SELEC 1;\n", Results: []StmtResult{ - {Offset: 0, RC: 1, ErrOffset: 0, Message: `near "SELEC": syntax error`}, + {Offset: 0, End: 9, RC: 1, ErrOffset: 0, Tail: 5, Message: `near "SELEC": syntax error`}, }, }, } @@ -39,23 +42,43 @@ func TestRoundTrip(t *testing.T) { func TestExpected(t *testing.T) { tests := []struct { - name string - results []StmtResult - wantOK bool - wantMsg string + name string + results []StmtResult + wantOK bool + wantMsg string + wantUnreached []Range }{ - {"all ok", []StmtResult{{OK: true}, {OK: true}}, true, ""}, - {"semantic only", []StmtResult{{RC: 1, ErrOffset: -1, Message: "no such table: t1"}}, true, ""}, + {"all ok", []StmtResult{{OK: true}, {OK: true}}, true, "", nil}, + { + "semantic only", + []StmtResult{{End: 30, RC: 1, ErrOffset: -1, Tail: 30, Message: "no such table: t1"}}, + true, "", nil, + }, { "syntax after semantic", []StmtResult{ - {Offset: 0, RC: 1, ErrOffset: -1, Message: "no such table: t1"}, - {Offset: 20, RC: 1, ErrOffset: 21, Message: `near "WHERE": syntax error`}, + {Offset: 0, End: 20, RC: 1, ErrOffset: -1, Tail: 20, Message: "no such table: t1"}, + {Offset: 20, End: 40, RC: 1, ErrOffset: 21, Tail: 21, Message: `near "WHERE": syntax error`}, }, - false, `near "WHERE": syntax error`, + false, `near "WHERE": syntax error`, nil, + }, + { + "unrecognized token", + []StmtResult{{End: 10, RC: 1, ErrOffset: 3, Tail: 3, Message: `unrecognized token: "0x"`}}, + false, `unrecognized token: "0x"`, nil, + }, + { + "incomplete", + []StmtResult{{End: 10, RC: 1, ErrOffset: -1, Tail: 10, Message: "incomplete input"}}, + false, "incomplete input", nil, + }, + { + // sqlite3BeginTrigger fails at the trigger_decl reduce, so + // everything after BEGIN is never parsed. + "semantic failure part-way through a statement", + []StmtResult{{Offset: 0, End: 62, RC: 1, ErrOffset: -1, Tail: 42, Message: "no such table: main.t1"}}, + true, "", []Range{{Start: 42, End: 62}}, }, - {"unrecognized token", []StmtResult{{RC: 1, ErrOffset: 3, Message: `unrecognized token: "0x"`}}, false, `unrecognized token: "0x"`}, - {"incomplete", []StmtResult{{RC: 1, ErrOffset: -1, Message: "incomplete input"}}, false, "incomplete input"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -64,6 +87,17 @@ func TestExpected(t *testing.T) { if exp.OK != tt.wantOK || exp.Message != tt.wantMsg { t.Fatalf("Expected() = %+v, want ok=%v msg=%q", exp, tt.wantOK, tt.wantMsg) } + if !reflect.DeepEqual(exp.Unreached, tt.wantUnreached) { + t.Fatalf("Unreached = %+v, want %+v", exp.Unreached, tt.wantUnreached) + } + for _, r := range tt.wantUnreached { + if !exp.IsUnreached(r.Start) || exp.IsUnreached(r.End) { + t.Fatalf("IsUnreached disagrees with %+v", r) + } + } + if exp.IsUnreached(-1) { + t.Fatal("IsUnreached(-1) should be false") + } }) } } diff --git a/parser/parser_test.go b/parser/parser_test.go index 2acf097..f6f2bce 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -86,6 +86,14 @@ func runCase(c testfile.Case) error { exp := c.Expected() if exp.OK { if err != nil { + // A grammar action can fail part-way through a statement, and + // SQLite then leaves the rest of it unparsed. The corpus records + // how far it got; failing inside text SQLite never reached is + // not a conformance failure, because nothing verified it. + var pe *parser.Error + if errors.As(err, &pe) && exp.IsUnreached(pe.Offset) { + return nil + } return fmt.Errorf("expected successful parse, got error: %v", err) } return nil diff --git a/parser/testdata/README.md b/parser/testdata/README.md index ab4d98d..205d9d2 100644 --- a/parser/testdata/README.md +++ b/parser/testdata/README.md @@ -11,8 +11,11 @@ The `*.test` files in this directory are generated by every case is prepared independently with `sqlite3_prepare_v2` against an empty in-memory database (nothing is executed) using the oracle program in `cmd/regenerate-parse/oracle.c`, compiled against the pinned amalgamation. - The raw per-statement outcomes (OK, or result code + error offset + exact - error message) are stored in the corpus files. + The raw per-statement outcomes (OK, or result code + error offset + + `pzTail` + exact error message) are stored in the corpus files. `pzTail` + records how far SQLite's parser got: a grammar action can fail part-way + through a statement and leave the rest of it unparsed, and the harness + needs to know which text was never verified. ## Pinned SQLite release diff --git a/parser/testdata/alter.test b/parser/testdata/alter.test index 881a91e..f1b5363 100644 --- a/parser/testdata/alter.test +++ b/parser/testdata/alter.test @@ -6,86 +6,86 @@ CREATE INDEX aux.i4 ON t4(b); ---- stmt 0 ok -stmt 44 err 1 64 unknown database aux -stmt 92 err 1 -1 no such table: main.t4 -stmt 124 err 1 144 unknown database aux +stmt 44 err 1 64 71 unknown database aux +stmt 92 err 1 -1 124 no such table: main.t4 +stmt 124 err 1 144 160 unknown database aux ==== alter-1.8.3 INSERT INTO t4 VALUES('main', 'main', 'main'); INSERT INTO aux.t4 VALUES('aux', 'aux', 'aux'); SELECT * FROM t4 WHERE a = 'main'; ---- -stmt 0 err 1 -1 no such table: t4 -stmt 53 err 1 -1 no such table: aux.t4 -stmt 107 err 1 -1 no such table: t4 +stmt 0 err 1 -1 53 no such table: t4 +stmt 53 err 1 -1 107 no such table: aux.t4 +stmt 107 err 1 -1 148 no such table: t4 ==== alter-1.8.4 ALTER TABLE t4 RENAME TO t5; SELECT * FROM t4 WHERE a = 'aux'; ---- -stmt 0 err 1 -1 no such table: t4 -stmt 35 err 1 -1 no such table: t4 +stmt 0 err 1 -1 35 no such table: t4 +stmt 35 err 1 -1 75 no such table: t4 ==== alter-1.8.5 SELECT * FROM t5; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 24 no such table: t5 ==== alter-1.8.6 SELECT * FROM t5 WHERE b = 'main'; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 41 no such table: t5 ==== alter-1.8.7 ALTER TABLE aux.t4 RENAME TO t5; SELECT * FROM aux.t5 WHERE b = 'aux'; ---- -stmt 0 err 1 -1 no such table: aux.t4 -stmt 39 err 1 -1 no such table: aux.t5 +stmt 0 err 1 -1 39 no such table: aux.t4 +stmt 39 err 1 -1 83 no such table: aux.t5 ==== alter-1.9.1 CREATE TABLE tbl1 (a, b, c); INSERT INTO tbl1 VALUES(1, 2, 3); ---- stmt 0 ok -stmt 35 err 1 -1 no such table: tbl1 +stmt 35 err 1 -1 73 no such table: tbl1 ==== alter-1.9.2 SELECT * FROM tbl1; ---- -stmt 0 err 1 -1 no such table: tbl1 +stmt 0 err 1 -1 24 no such table: tbl1 ==== alter-1.9.3 ALTER TABLE tbl1 RENAME TO tbl2; SELECT * FROM tbl2; ---- -stmt 0 err 1 -1 no such table: tbl1 -stmt 37 err 1 -1 no such table: tbl2 +stmt 0 err 1 -1 37 no such table: tbl1 +stmt 37 err 1 -1 61 no such table: tbl2 ==== alter-1.9.4 DROP TABLE tbl2; ---- -stmt 0 err 1 -1 no such table: tbl2 +stmt 0 err 1 -1 21 no such table: tbl2 ==== alter-2.1 ALTER TABLE none RENAME TO hi; ---- -stmt 0 err 1 -1 no such table: none +stmt 0 err 1 -1 35 no such table: none ==== alter-2.4 ALTER TABLE SqLiTe_master RENAME TO master; ---- -stmt 0 err 1 -1 table sqlite_master may not be altered +stmt 0 err 1 -1 48 table sqlite_master may not be altered ==== alter-2.5 ALTER TABLE t3 RENAME TO sqlite_t3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 40 no such table: t3 ==== alter-2.6 ALTER TABLE t3 ADD COLUMN (ALTER TABLE t3 ADD COLUMN); ---- -stmt 0 err 1 31 near "(": syntax error +stmt 0 err 1 31 32 near "(": syntax error ==== alter-3.1.0 CREATE TABLE t6(a, b, c); @@ -95,22 +95,22 @@ stmt 0 err 1 31 near "(": syntax error END; ---- stmt 0 ok -stmt 30 err 1 -1 no such table: main.T6 +stmt 30 err 1 -1 137 no such table: main.T6 ==== alter-3.1.3 DROP TRIGGER trig1; ---- -stmt 0 err 1 -1 no such trigger: trig1 +stmt 0 err 1 -1 24 no such trigger: trig1 ==== alter-3.1.6 DROP TRIGGER trig2; ---- -stmt 0 err 1 -1 no such trigger: trig2 +stmt 0 err 1 -1 24 no such trigger: trig2 ==== alter-3.2.1 ATTACH 'test3.db' AS ON; ---- -stmt 0 err 1 28 near "ON": syntax error +stmt 0 err 1 28 30 near "ON": syntax error ==== alter-3.2.2 ATTACH 'test3.db' AS 'ON'; @@ -120,27 +120,27 @@ stmt 0 ok CREATE TABLE ON.t1(a, b, c); ---- -stmt 0 err 1 20 near "ON": syntax error +stmt 0 err 1 20 22 near "ON": syntax error ==== alter-3.2.4 CREATE TABLE 'ON'.t1(a, b, c); ---- -stmt 0 err 1 20 unknown database 'ON' +stmt 0 err 1 20 28 unknown database 'ON' ==== alter-3.2.4.dup1 CREATE TABLE 'ON'.ON(a, b, c); ---- -stmt 0 err 1 25 near "ON": syntax error +stmt 0 err 1 25 27 near "ON": syntax error ==== alter-3.2.5 CREATE TABLE 'ON'.'ON'(a, b, c); ---- -stmt 0 err 1 20 unknown database 'ON' +stmt 0 err 1 20 30 unknown database 'ON' ==== alter-3.2.6 CREATE TABLE t10(a, ON, c); ---- -stmt 0 err 1 25 near "ON": syntax error +stmt 0 err 1 25 27 near "ON": syntax error ==== alter-3.2.7 CREATE TABLE t10(a, 'ON', c); @@ -150,22 +150,22 @@ stmt 0 ok CREATE TRIGGER trig4 AFTER INSERT ON ON BEGIN SELECT 1; END; ---- -stmt 0 err 1 42 near "ON": syntax error +stmt 0 err 1 42 44 near "ON": syntax error ==== alter-3.2.9 CREATE TRIGGER 'on'.trig4 AFTER INSERT ON 'ON' BEGIN SELECT 1; END; ---- -stmt 0 err 1 22 unknown database 'on' +stmt 0 err 1 22 59 unknown database 'on' ==== alter-3.2.10 DROP TABLE t10; ---- -stmt 0 err 1 -1 no such table: t10 +stmt 0 err 1 -1 20 no such table: t10 ==== alter-3.3.7 DROP TABLE tbl3; ---- -stmt 0 err 1 -1 no such table: tbl3 +stmt 0 err 1 -1 21 no such table: tbl3 ==== alter-3.3.8 SELECT * FROM temp.sqlite_master WHERE type = 'trigger'; @@ -177,14 +177,14 @@ stmt 0 ok INSERT INTO tbl1 VALUES(10); ---- stmt 0 ok -stmt 60 err 1 -1 no such table: tbl1 +stmt 60 err 1 -1 93 no such table: tbl1 ==== alter-4.2 INSERT INTO tbl1 VALUES(NULL); SELECT a FROM tbl1; ---- -stmt 0 err 1 -1 no such table: tbl1 -stmt 35 err 1 -1 no such table: tbl1 +stmt 0 err 1 -1 35 no such table: tbl1 +stmt 35 err 1 -1 59 no such table: tbl1 ==== alter-4.3 ALTER TABLE tbl1 RENAME TO tbl2; @@ -192,22 +192,22 @@ stmt 35 err 1 -1 no such table: tbl1 INSERT INTO tbl2 VALUES(NULL); SELECT a FROM tbl2; ---- -stmt 0 err 1 -1 no such table: tbl1 -stmt 37 err 1 -1 no such table: tbl2 -stmt 59 err 1 -1 no such table: tbl2 -stmt 94 err 1 -1 no such table: tbl2 +stmt 0 err 1 -1 37 no such table: tbl1 +stmt 37 err 1 -1 59 no such table: tbl2 +stmt 59 err 1 -1 94 no such table: tbl2 +stmt 94 err 1 -1 118 no such table: tbl2 ==== alter-4.4 DROP TABLE tbl2; ---- -stmt 0 err 1 -1 no such table: tbl2 +stmt 0 err 1 -1 21 no such table: tbl2 ==== alter-5.1 CREATE TABLE tbl1(a, b, c); INSERT INTO tbl1 VALUES('x', 'y', 'z'); ---- stmt 0 ok -stmt 32 err 1 -1 no such table: tbl1 +stmt 32 err 1 -1 76 no such table: tbl1 ==== alter-8.1 CREATE TABLE t2(a INTEGER); @@ -218,25 +218,25 @@ stmt 32 err 1 -1 no such table: tbl1 SELECT sum(b) FROM t2; ---- stmt 0 ok -stmt 32 err 1 -1 no such table: t2 -stmt 62 err 1 -1 no such table: t2 -stmt 92 err 1 -1 no such table: t2 -stmt 122 err 1 -1 no such table: t2 -stmt 173 err 1 -1 no such table: t2 +stmt 32 err 1 -1 62 no such table: t2 +stmt 62 err 1 -1 92 no such table: t2 +stmt 92 err 1 -1 122 no such table: t2 +stmt 122 err 1 -1 170 no such table: t2 +stmt 173 err 1 -1 200 no such table: t2 ==== alter-8.2 SELECT a, sum(b) FROM t2 GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 41 no such table: t2 ==== alter-9.1 SELECT SQLITE_RENAME_COLUMN(0,0,0,0,0,0,0,0,0) ---- -stmt 0 err 1 7 no such function: SQLITE_RENAME_COLUMN +stmt 0 err 1 7 47 no such function: SQLITE_RENAME_COLUMN ==== alter-9.3 SELECT sqlite_rename_table(0,0,0,0,0,0,0); ---- -stmt 0 err 1 10 no such function: sqlite_rename_table +stmt 0 err 1 10 45 no such function: sqlite_rename_table ==== alter-10.2 SELECT name FROM sqlite_master WHERE name GLOB 'sqlite_autoindex*' ---- @@ -256,16 +256,16 @@ stmt 31 ok ALTER TABLE v1 RENAME TO v2; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 33 no such table: v1 ==== alter-12.3 SELECT * FROM v1; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 18 no such table: v1 ==== alter-12.5 ALTER TABLE v1 ADD COLUMN new_column; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 43 no such table: v1 ==== alter-13.1 CREATE TABLE /* hi */ t3102a(x); @@ -276,21 +276,21 @@ stmt 0 err 1 -1 no such table: v1 ---- stmt 0 ok stmt 37 ok -stmt 81 err 1 -1 no such table: main.t3102a +stmt 81 err 1 -1 119 no such table: main.t3102a stmt 119 ok ==== alter-13.2 ALTER TABLE t3102a RENAME TO t3102a_rename; SELECT name FROM sqlite_master WHERE name GLOB 't3102*' ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3102a +stmt 0 err 1 -1 48 no such table: t3102a stmt 48 ok ==== alter-13.3 ALTER TABLE t3102b RENAME TO t3102b_rename; SELECT name FROM sqlite_master WHERE name GLOB 't3102*' ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3102b +stmt 0 err 1 -1 48 no such table: t3102b stmt 48 ok ==== alter-14.1 @@ -299,13 +299,13 @@ stmt 48 ok ALTER TABLE t3651 ADD COLUMN b UNIQUE; ---- stmt 0 ok -stmt 34 err 1 -1 no such table: t3651 -stmt 67 err 1 -1 no such table: t3651 +stmt 34 err 1 -1 67 no such table: t3651 +stmt 67 err 1 -1 109 no such table: t3651 ==== alter-14.2 ALTER TABLE t3651 ADD COLUMN b PRIMARY KEY; ---- -stmt 0 err 1 -1 no such table: t3651 +stmt 0 err 1 -1 43 no such table: t3651 ==== alter-16.1 CREATE TABLE t16a(a TEXT, b REAL, c INT, PRIMARY KEY(a,b)) WITHOUT rowid; @@ -315,17 +315,17 @@ stmt 0 err 1 -1 no such table: t3651 SELECT * FROM t16a ORDER BY a; ---- stmt 0 ok -stmt 76 err 1 -1 no such table: t16a -stmt 118 err 1 -1 no such table: t16a -stmt 172 err 1 -1 no such table: t16a -stmt 222 err 1 -1 no such table: t16a +stmt 76 err 1 -1 118 no such table: t16a +stmt 118 err 1 -1 163 no such table: t16a +stmt 172 err 1 -1 222 no such table: t16a +stmt 222 err 1 -1 255 no such table: t16a ==== alter-16.2 ALTER TABLE t16a RENAME TO t16a_rn; SELECT * FROM t16a_rn ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t16a -stmt 38 err 1 -1 no such table: t16a_rn +stmt 0 err 1 -1 38 no such table: t16a +stmt 38 err 1 -1 74 no such table: t16a_rn ==== alter-17.100 CREATE TABLE t1(a INTEGER PRIMARY KEY, b); @@ -341,12 +341,12 @@ stmt 38 err 1 -1 no such table: t16a_rn ---- stmt 0 ok stmt 47 ok -stmt 98 err 1 -1 no such table: t1 -stmt 157 err 1 -1 no such table: t2 -stmt 219 err 1 -1 no such table: main.t1 -stmt 314 err 1 -1 no such table: t1 -stmt 347 err 1 -1 no such table: t3 -stmt 386 err 1 -1 no such table: t2 +stmt 98 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 219 no such table: t2 +stmt 219 err 1 -1 266 no such table: main.t1 +stmt 314 err 1 -1 347 no such table: t1 +stmt 347 err 1 -1 386 no such table: t3 +stmt 386 err 1 -1 419 no such table: t2 ==== alter-18.1 CREATE TABLE t1(a,b,c); @@ -359,8 +359,8 @@ stmt 386 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 26 ok -stmt 73 err 1 -1 no such table: main.t1 -stmt 236 err 1 -1 no such table: log +stmt 73 err 1 -1 119 no such table: main.t1 +stmt 236 err 1 -1 276 no such table: log ==== alter-19.1 CREATE TABLE t1(x); @@ -374,8 +374,8 @@ stmt 236 err 1 -1 no such table: log ---- stmt 0 ok stmt 22 ok -stmt 44 err 1 -1 no such table: main.t2 -stmt 283 err 1 -1 no such table: t2 +stmt 44 err 1 -1 89 no such table: main.t2 +stmt 283 err 1 -1 314 no such table: t2 ==== alter-19.2 SELECT name FROM sqlite_schema WHERE sql LIKE '%t2%'; @@ -392,24 +392,24 @@ stmt 0 ok INSERT INTO t1(a) VALUES(45); ---- stmt 0 ok -stmt 33 err 1 -1 no such table: t1 +stmt 33 err 1 -1 65 no such table: t1 ==== alter-20.2 ALTER TABLE t1 ADD COLUMN b TEXT DEFAULT x'313233'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 43 no such table: t1 ==== alter-20.2.dup1 DELETE FROM t1; ALTER TABLE t1 ADD COLUMN b TEXT DEFAULT x'313233'; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 61 no such table: t1 ==== alter-20.3 INSERT INTO t1(a) VALUES(45); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== alter-21.1 CREATE TABLE t1(a,b,c,d); @@ -421,8 +421,8 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 28 ok -stmt 58 err 1 -1 no such table: main.t2 -stmt 212 err 1 -1 no such table: t2 +stmt 58 err 1 -1 103 no such table: main.t2 +stmt 212 err 1 -1 242 no such table: t2 ==== alter-21.2 SELECT name, type FROM sqlite_schema ORDER BY name; @@ -436,9 +436,9 @@ stmt 0 ok END; ALTER TABLE e RENAME TO t99; ---- -stmt 0 err 1 -1 no such trigger: r1 -stmt 19 err 1 -1 no such table: main.e -stmt 179 err 1 -1 no such table: e +stmt 0 err 1 -1 19 no such trigger: r1 +stmt 19 err 1 -1 63 no such table: main.e +stmt 179 err 1 -1 210 no such table: e ==== alter-21.4 SELECT name, type FROM sqlite_schema ORDER BY name; diff --git a/parser/testdata/alter2.test b/parser/testdata/alter2.test index c7cabe0..a860813 100644 --- a/parser/testdata/alter2.test +++ b/parser/testdata/alter2.test @@ -6,51 +6,51 @@ INSERT INTO abc VALUES(5, 6); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: abc -stmt 62 err 1 -1 no such table: abc -stmt 96 err 1 -1 no such table: abc +stmt 28 err 1 -1 62 no such table: abc +stmt 62 err 1 -1 96 no such table: abc +stmt 96 err 1 -1 130 no such table: abc ==== alter2-1.3 SELECT * FROM abc; ---- -stmt 0 err 1 -1 no such table: abc +stmt 0 err 1 -1 23 no such table: abc ==== alter2-1.4 UPDATE abc SET c = 10 WHERE a = 1; SELECT * FROM abc; ---- -stmt 0 err 1 -1 no such table: abc -stmt 39 err 1 -1 no such table: abc +stmt 0 err 1 -1 39 no such table: abc +stmt 39 err 1 -1 62 no such table: abc ==== alter2-1.5 CREATE INDEX abc_i ON abc(c); ---- -stmt 0 err 1 -1 no such table: main.abc +stmt 0 err 1 -1 34 no such table: main.abc ==== alter2-1.6 SELECT c FROM abc ORDER BY c; ---- -stmt 0 err 1 -1 no such table: abc +stmt 0 err 1 -1 34 no such table: abc ==== alter2-1.7 SELECT * FROM abc WHERE c = 10; ---- -stmt 0 err 1 -1 no such table: abc +stmt 0 err 1 -1 36 no such table: abc ==== alter2-1.8 SELECT sum(a), c FROM abc GROUP BY c; ---- -stmt 0 err 1 -1 no such table: abc +stmt 0 err 1 -1 42 no such table: abc ==== alter2-1.10 SELECT typeof(d) FROM abc; ---- -stmt 0 err 1 -1 no such table: abc +stmt 0 err 1 -1 31 no such table: abc ==== alter2-1.99 DROP TABLE abc; ---- -stmt 0 err 1 -1 no such table: abc +stmt 0 err 1 -1 20 no such table: abc ==== alter2-2.1 CREATE TABLE abc2(a, b, c); @@ -61,18 +61,18 @@ stmt 0 err 1 -1 no such table: abc SELECT * FROM abc2_v; ---- stmt 0 ok -stmt 34 err 1 -1 no such table: abc2 -stmt 75 err 1 -1 no such table: abc2 -stmt 118 err 1 -1 no such table: abc2 +stmt 34 err 1 -1 75 no such table: abc2 +stmt 75 err 1 -1 118 no such table: abc2 +stmt 118 err 1 -1 161 no such table: abc2 stmt 161 ok -stmt 209 err 1 -1 no such table: abc2_v +stmt 209 err 1 -1 237 no such table: abc2_v ==== alter2-2.3 DROP TABLE abc2; DROP VIEW abc2_v; ---- -stmt 0 err 1 -1 no such table: abc2 -stmt 23 err 1 -1 no such view: abc2_v +stmt 0 err 1 -1 23 no such table: abc2 +stmt 23 err 1 -1 47 no such view: abc2_v ==== alter2-3.1 CREATE TABLE abc3(a, b); @@ -83,28 +83,28 @@ stmt 23 err 1 -1 no such view: abc2_v ---- stmt 0 ok stmt 31 ok -stmt 62 err 1 -1 no such table: main.abc3 +stmt 62 err 1 -1 122 no such table: main.abc3 ==== alter2-3.2 INSERT INTO abc3 VALUES(1, 4); UPDATE abc3 SET b = 2 WHERE b = 4; SELECT * FROM blog; ---- -stmt 0 err 1 -1 no such table: abc3 -stmt 37 err 1 -1 no such table: abc3 -stmt 78 err 1 -1 no such table: blog +stmt 0 err 1 -1 37 no such table: abc3 +stmt 37 err 1 -1 78 no such table: abc3 +stmt 78 err 1 -1 104 no such table: blog ==== alter2-3.4 UPDATE abc3 SET b = b*2 WHERE a<4; SELECT * FROM abc3; ---- -stmt 0 err 1 -1 no such table: abc3 -stmt 41 err 1 -1 no such table: abc3 +stmt 0 err 1 -1 41 no such table: abc3 +stmt 41 err 1 -1 67 no such table: abc3 ==== alter2-3.5 SELECT * FROM blog; ---- -stmt 0 err 1 -1 no such table: blog +stmt 0 err 1 -1 26 no such table: blog ==== alter2-3.6 CREATE TABLE clog(o, n); @@ -115,9 +115,9 @@ stmt 0 err 1 -1 no such table: blog SELECT * FROM clog; ---- stmt 0 ok -stmt 31 err 1 -1 no such table: main.abc3 -stmt 150 err 1 -1 no such table: abc3 -stmt 181 err 1 -1 no such table: clog +stmt 31 err 1 -1 92 no such table: main.abc3 +stmt 150 err 1 -1 181 no such table: abc3 +stmt 181 err 1 -1 207 no such table: clog ==== alter2-5.2 VACUUM ---- @@ -132,46 +132,46 @@ stmt 0 ok INSERT INTO t1 VALUES(4); SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 19 no such table: t1 stmt 19 ok -stmt 43 err 1 -1 no such table: t1 -stmt 73 err 1 -1 no such table: t1 -stmt 103 err 1 -1 no such table: t1 -stmt 133 err 1 -1 no such table: t1 -stmt 163 err 1 -1 no such table: t1 +stmt 43 err 1 -1 73 no such table: t1 +stmt 73 err 1 -1 103 no such table: t1 +stmt 103 err 1 -1 133 no such table: t1 +stmt 133 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 185 no such table: t1 ==== alter2-7.3 SELECT a, typeof(a), b, typeof(b), c, typeof(c) FROM t1 LIMIT 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 69 no such table: t1 ==== alter2-7.4 SELECT a, typeof(a), b, typeof(b), c, typeof(c) FROM t1 LIMIT 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 69 no such table: t1 ==== alter2-8.2 UPDATE t1 SET c = 10 WHERE a = 1; SELECT a, typeof(a), b, typeof(b), c, typeof(c) FROM t1 LIMIT 1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 38 err 1 -1 no such table: t1 +stmt 0 err 1 -1 38 no such table: t1 +stmt 38 err 1 -1 107 no such table: t1 ==== alter2-10.2 CREATE INDEX i1 ON t2(b); SELECT a FROM t2 WHERE b = X'ABCD'; ---- -stmt 0 err 1 -1 no such table: main.t2 -stmt 32 err 1 -1 no such table: t2 +stmt 0 err 1 -1 32 no such table: main.t2 +stmt 32 err 1 -1 74 no such table: t2 ==== alter2-10.3 DELETE FROM t2 WHERE a = 'c'; SELECT a FROM t2 WHERE b = X'ABCD'; ---- -stmt 0 err 1 -1 no such table: t2 -stmt 36 err 1 -1 no such table: t2 +stmt 0 err 1 -1 36 no such table: t2 +stmt 36 err 1 -1 78 no such table: t2 ==== alter2-10.4 SELECT count(b) FROM t2 WHERE b = X'ABCD'; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 49 no such table: t2 diff --git a/parser/testdata/alter3.test b/parser/testdata/alter3.test index 76688f8..150ce07 100644 --- a/parser/testdata/alter3.test +++ b/parser/testdata/alter3.test @@ -5,14 +5,14 @@ SELECT sql FROM sqlite_master WHERE tbl_name = 't1'; ---- stmt 0 ok -stmt 32 err 1 -1 no such table: t1 +stmt 32 err 1 -1 58 no such table: t1 stmt 58 ok ==== alter3-1.5 ALTER TABLE t1 ADD d CHECK (a>d); SELECT sql FROM sqlite_master WHERE tbl_name = 't1'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 stmt 38 ok ==== alter3-1.6 @@ -21,7 +21,7 @@ stmt 38 ok SELECT sql FROM sqlite_master WHERE tbl_name = 't2' AND type = 'table'; ---- stmt 0 ok -stmt 43 err 1 -1 no such table: t2 +stmt 43 err 1 -1 81 no such table: t2 stmt 90 ok ==== alter3-1.7 @@ -30,38 +30,38 @@ stmt 90 ok SELECT sql FROM sqlite_master WHERE tbl_name = 't3' AND type = 'table'; ---- stmt 0 ok -stmt 41 err 1 -1 no such table: t3 +stmt 41 err 1 -1 90 no such table: t3 stmt 90 ok ==== alter3-2.2 ALTER TABLE t1 ADD c UNIQUE ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== alter3-2.3 ALTER TABLE t1 ADD b VARCHAR(10) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 38 no such table: t1 ==== alter3-2.3.dup1 ALTER TABLE t1 ADD c NOT NULL; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 29 no such table: t1 ==== alter3-2.4 ALTER TABLE t1 ADD c NOT NULL DEFAULT 10; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 29 no such table: t1 ==== alter3-2.6 alter table t1 add column d DEFAULT CURRENT_TIME; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 40 no such table: t1 ==== alter3-2.99 DROP TABLE t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 19 no such table: t1 ==== alter3-3.1 CREATE TABLE t1(a, b); @@ -70,9 +70,9 @@ stmt 0 err 1 -1 no such table: t1 SELECT * FROM t1; ---- stmt 0 ok -stmt 27 err 1 -1 no such table: t1 -stmt 62 err 1 -1 no such table: t1 -stmt 97 err 1 -1 no such table: t1 +stmt 27 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 97 no such table: t1 +stmt 97 err 1 -1 119 no such table: t1 ==== alter3-3.1.dup1 PRAGMA schema_version = 10; @@ -83,8 +83,8 @@ stmt 0 ok ALTER TABLE t1 ADD c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 26 err 1 -1 no such table: t1 +stmt 0 err 1 -1 26 no such table: t1 +stmt 26 err 1 -1 48 no such table: t1 ==== alter3-3.4 PRAGMA schema_version; @@ -100,8 +100,8 @@ stmt 0 ok ALTER TABLE t1 ADD c DEFAULT 'hello world'; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 48 err 1 -1 no such table: t1 +stmt 0 err 1 -1 33 no such table: t1 +stmt 48 err 1 -1 70 no such table: t1 ==== alter3-4.4 PRAGMA schema_version; @@ -111,53 +111,53 @@ stmt 0 ok DROP TABLE t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 19 no such table: t1 ==== alter3-5.2 ALTER TABLE aux.t1 ADD COLUMN c VARCHAR(128); SELECT sql FROM aux.sqlite_master; ---- -stmt 0 err 1 -1 no such table: aux.t1 -stmt 52 err 1 -1 no such table: aux.sqlite_master +stmt 0 err 1 -1 52 no such table: aux.t1 +stmt 52 err 1 -1 93 no such table: aux.sqlite_master ==== alter3-5.3 SELECT * FROM aux.t1; ---- -stmt 0 err 1 -1 no such table: aux.t1 +stmt 0 err 1 -1 28 no such table: aux.t1 ==== alter3-5.4 PRAGMA aux.schema_version; ---- -stmt 0 err 1 16 unknown database aux +stmt 0 err 1 16 35 unknown database aux ==== alter3-5.6 ALTER TABLE aux.t1 ADD COLUMN d DEFAULT 1000; SELECT sql FROM aux.sqlite_master; ---- -stmt 0 err 1 -1 no such table: aux.t1 -stmt 52 err 1 -1 no such table: aux.sqlite_master +stmt 0 err 1 -1 46 no such table: aux.t1 +stmt 52 err 1 -1 93 no such table: aux.sqlite_master ==== alter3-5.7 SELECT * FROM aux.t1; ---- -stmt 0 err 1 -1 no such table: aux.t1 +stmt 0 err 1 -1 28 no such table: aux.t1 ==== alter3-5.8 PRAGMA aux.schema_version; ---- -stmt 0 err 1 16 unknown database aux +stmt 0 err 1 16 35 unknown database aux ==== alter3-5.9 SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 24 no such table: t1 ==== alter3-5.99 DROP TABLE aux.t1; DROP TABLE t1; ---- -stmt 0 err 1 -1 no such table: aux.t1 -stmt 25 err 1 -1 no such table: t1 +stmt 0 err 1 -1 25 no such table: aux.t1 +stmt 25 err 1 -1 46 no such table: t1 ==== alter3-6.1 CREATE TABLE t1(a, b); @@ -175,19 +175,19 @@ stmt 25 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 29 ok -stmt 65 err 1 -1 no such table: main.t1 -stmt 179 err 1 -1 no such table: t1 -stmt 297 err 1 -1 no such table: t1 -stmt 335 err 1 -1 no such table: log +stmt 65 err 1 -1 117 no such table: main.t1 +stmt 179 err 1 -1 235 no such table: t1 +stmt 297 err 1 -1 335 no such table: t1 +stmt 335 err 1 -1 360 no such table: log ==== alter3-6.2 ALTER TABLE t1 ADD COLUMN c DEFAULT 'c'; INSERT INTO t1(a, b) VALUES(3, 4); SELECT * FROM log; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 47 err 1 -1 no such table: t1 -stmt 88 err 1 -1 no such table: log +stmt 0 err 1 -1 42 no such table: t1 +stmt 47 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 113 no such table: log ==== alter3-8.1 CREATE TABLE t4(c1); @@ -204,37 +204,37 @@ stmt 0 ok INSERT INTO t1 VALUES(1, 2), ('null!',NULL), (3,4); ---- stmt 0 ok -stmt 24 err 1 -1 no such table: t1 +stmt 24 err 1 -1 78 no such table: t1 ==== alter3-9.2 ALTER TABLE t1 ADD COLUMN c CHECK(a!=1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 36 no such table: t1 ==== alter3-9.3 ALTER TABLE t1 ADD COLUMN c CHECK(a!=3); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 36 no such table: t1 ==== alter3-9.4 ALTER TABLE t1 ADD COLUMN c CHECK(a!=2); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 36 no such table: t1 ==== alter3-9.5 ALTER TABLE t1 ADD COLUMN d AS (b+1) NOT NULL; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 33 no such table: t1 ==== alter3-9.6 ALTER TABLE t1 ADD COLUMN d AS (b+1) NOT NULL CHECK(a!=1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 33 no such table: t1 ==== alter3-9.7 ALTER TABLE t1 ADD COLUMN d AS (b+1) NOT NULL CHECK(a!=3); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 33 no such table: t1 ==== alter3-9.10 CREATE TEMP TABLE t0(m,n); @@ -244,27 +244,27 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t2 VALUES(1, 2), ('null!',NULL), (3,4); ---- stmt 0 ok -stmt 29 err 1 -1 no such table: t0 +stmt 29 err 1 -1 83 no such table: t0 stmt 83 ok -stmt 112 err 1 128 unknown database aux1 -stmt 141 err 1 -1 no such table: t2 +stmt 112 err 1 128 136 unknown database aux1 +stmt 141 err 1 -1 195 no such table: t2 ==== alter3-9.11 ALTER TABLE t0 ADD COLUMN xtra1 AS (n+1) NOT NULL CHECK(m!=1); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 37 no such table: t0 ==== alter3-9.12 ALTER TABLE t0 ADD COLUMN xtra1 AS (n+1) NOT NULL CHECK(m!=3); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 37 no such table: t0 ==== alter3-9.13 ALTER TABLE t2 ADD COLUMN xtra1 AS (y+1) NOT NULL CHECK(x!=1); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 37 no such table: t2 ==== alter3-9.14 ALTER TABLE t2 ADD COLUMN xtra1 AS (y+1) NOT NULL CHECK(x!=3); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 37 no such table: t2 diff --git a/parser/testdata/alter4.test b/parser/testdata/alter4.test index 41a2c50..0afdd95 100644 --- a/parser/testdata/alter4.test +++ b/parser/testdata/alter4.test @@ -27,7 +27,7 @@ stmt 0 ok SELECT sql FROM sqlite_temp_master WHERE tbl_name = 't1'; ---- stmt 0 ok -stmt 32 err 1 -1 no such table: t1 +stmt 32 err 1 -1 58 no such table: t1 stmt 58 ok ==== alter4-1.4b @@ -39,7 +39,7 @@ stmt 0 ok ALTER TABLE t1 ADD d CHECK (a>d); SELECT sql FROM sqlite_temp_master WHERE tbl_name = 't1'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 stmt 38 ok ==== alter4-1.6 @@ -49,7 +49,7 @@ stmt 38 ok WHERE tbl_name = 't2' AND type = 'table'; ---- stmt 0 ok -stmt 48 err 1 -1 no such table: t2 +stmt 48 err 1 -1 86 no such table: t2 stmt 95 ok ==== alter4-1.7 @@ -59,43 +59,43 @@ stmt 95 ok WHERE tbl_name = 't3' AND type = 'table'; ---- stmt 0 ok -stmt 51 err 1 -1 no such table: t3 +stmt 51 err 1 -1 100 no such table: t3 stmt 100 ok ==== alter4-2.2 ALTER TABLE t1 ADD c UNIQUE ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== alter4-2.3 ALTER TABLE t1 ADD b VARCHAR(10) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 38 no such table: t1 ==== alter4-2.3.dup1 ALTER TABLE t1 ADD c NOT NULL; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 29 no such table: t1 ==== alter4-2.4 ALTER TABLE t1 ADD c NOT NULL DEFAULT 10; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 29 no such table: t1 ==== alter4-2.6 alter table t1 add column d DEFAULT CURRENT_TIME; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 40 no such table: t1 ==== alter4-2.7 alter table t1 add column d default (-5+1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 40 no such table: t1 ==== alter4-2.99 DROP TABLE t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 19 no such table: t1 ==== alter4-3.1 CREATE TEMP TABLE t1(a, b); @@ -104,9 +104,9 @@ stmt 0 err 1 -1 no such table: t1 SELECT * FROM t1; ---- stmt 0 ok -stmt 32 err 1 -1 no such table: t1 -stmt 67 err 1 -1 no such table: t1 -stmt 102 err 1 -1 no such table: t1 +stmt 32 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 102 no such table: t1 +stmt 102 err 1 -1 124 no such table: t1 ==== alter4-3.1.dup1 PRAGMA schema_version = 10; @@ -117,8 +117,8 @@ stmt 0 ok ALTER TABLE t1 ADD c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 26 err 1 -1 no such table: t1 +stmt 0 err 1 -1 26 no such table: t1 +stmt 26 err 1 -1 48 no such table: t1 ==== alter4-3.4 PRAGMA schema_version; @@ -134,8 +134,8 @@ stmt 0 ok ALTER TABLE t1 ADD c DEFAULT 'hello world'; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 48 err 1 -1 no such table: t1 +stmt 0 err 1 -1 33 no such table: t1 +stmt 48 err 1 -1 70 no such table: t1 ==== alter4-4.4 PRAGMA schema_version; @@ -145,53 +145,53 @@ stmt 0 ok DROP TABLE t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 19 no such table: t1 ==== alter4-5.2 ALTER TABLE aux.t1 ADD COLUMN c VARCHAR(128); SELECT sql FROM aux.sqlite_master; ---- -stmt 0 err 1 -1 no such table: aux.t1 -stmt 52 err 1 -1 no such table: aux.sqlite_master +stmt 0 err 1 -1 52 no such table: aux.t1 +stmt 52 err 1 -1 93 no such table: aux.sqlite_master ==== alter4-5.3 SELECT * FROM aux.t1; ---- -stmt 0 err 1 -1 no such table: aux.t1 +stmt 0 err 1 -1 28 no such table: aux.t1 ==== alter4-5.4 PRAGMA aux.schema_version; ---- -stmt 0 err 1 16 unknown database aux +stmt 0 err 1 16 35 unknown database aux ==== alter4-5.6 ALTER TABLE aux.t1 ADD COLUMN d DEFAULT 1000; SELECT sql FROM aux.sqlite_master; ---- -stmt 0 err 1 -1 no such table: aux.t1 -stmt 52 err 1 -1 no such table: aux.sqlite_master +stmt 0 err 1 -1 46 no such table: aux.t1 +stmt 52 err 1 -1 93 no such table: aux.sqlite_master ==== alter4-5.7 SELECT * FROM aux.t1; ---- -stmt 0 err 1 -1 no such table: aux.t1 +stmt 0 err 1 -1 28 no such table: aux.t1 ==== alter4-5.8 PRAGMA aux.schema_version; ---- -stmt 0 err 1 16 unknown database aux +stmt 0 err 1 16 35 unknown database aux ==== alter4-5.9 SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 24 no such table: t1 ==== alter4-5.99 DROP TABLE aux.t1; DROP TABLE t1; ---- -stmt 0 err 1 -1 no such table: aux.t1 -stmt 25 err 1 -1 no such table: t1 +stmt 0 err 1 -1 25 no such table: aux.t1 +stmt 25 err 1 -1 46 no such table: t1 ==== alter4-6.1 CREATE TEMP TABLE t1(a, b); @@ -209,19 +209,19 @@ stmt 25 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 34 ok -stmt 75 err 1 -1 no such table: main.t1 -stmt 189 err 1 -1 no such table: t1 -stmt 307 err 1 -1 no such table: t1 -stmt 345 err 1 -1 no such table: log +stmt 75 err 1 -1 127 no such table: main.t1 +stmt 189 err 1 -1 245 no such table: t1 +stmt 307 err 1 -1 345 no such table: t1 +stmt 345 err 1 -1 390 no such table: log ==== alter4-6.2 ALTER TABLE t1 ADD COLUMN c DEFAULT 'c'; INSERT INTO t1(a, b) VALUES(3, 4); SELECT * FROM log ORDER BY trig, a, b; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 47 err 1 -1 no such table: t1 -stmt 88 err 1 -1 no such table: log +stmt 0 err 1 -1 42 no such table: t1 +stmt 47 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 133 no such table: log ==== alter4-8.1 CREATE TEMP TABLE t4(c1); @@ -241,18 +241,18 @@ stmt 0 ok INSERT INTO t5 DEFAULT VALUES; ---- stmt 0 ok -stmt 116 err 1 -1 no such table: t5 +stmt 116 err 1 -1 149 no such table: t5 ==== alter4-9.2 SELECT typeof(a), a, typeof(b), b FROM t5; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 43 no such table: t5 ==== alter4-9.3 ALTER TABLE t5 ADD COLUMN c INTEGER DEFAULT (-(-9223372036854775808)); SELECT typeof(c), c FROM t5; ---- -stmt 0 err 1 -1 no such table: t5 -stmt 74 err 1 -1 no such table: t5 +stmt 0 err 1 -1 47 no such table: t5 +stmt 74 err 1 -1 105 no such table: t5 ==== alter4-11.0 CREATE TABLE t1(c INTEGER PRIMARY KEY, d); @@ -261,24 +261,24 @@ stmt 74 err 1 -1 no such table: t5 ALTER TABLE t1 ADD COLUMN e; ---- stmt 0 ok -stmt 45 err 1 -1 no such table: t1 +stmt 45 err 1 -1 80 no such table: t1 stmt 80 ok -stmt 108 err 1 -1 no such table: t1 +stmt 108 err 1 -1 139 no such table: t1 ==== alter4-11.1 ALTER TABLE t1 ADD COLUMN f REFERENCES t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 41 no such table: t1 ==== alter4-11.2 ALTER TABLE t1 ADD COLUMN g REFERENCES t1 DEFAULT 4; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 41 no such table: t1 ==== alter4-11.3 ALTER TABLE t2 ADD COLUMN g; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 31 no such table: t2 ==== alter4-11.4 CREATE VIRTUAL TABLE fff USING fts5(f); @@ -288,4 +288,4 @@ stmt 0 ok ALTER TABLE fff ADD COLUMN g; ---- -stmt 0 err 1 -1 no such table: fff +stmt 0 err 1 -1 34 no such table: fff diff --git a/parser/testdata/alterdropcol.test b/parser/testdata/alterdropcol.test index 5018b8b..a0dfd8e 100644 --- a/parser/testdata/alterdropcol.test +++ b/parser/testdata/alterdropcol.test @@ -12,19 +12,19 @@ stmt 0 ok stmt 28 ok stmt 66 ok -stmt 122 err 1 -1 no such table: main.t2 +stmt 122 err 1 -1 151 no such table: main.t2 stmt 151 ok -stmt 180 err 1 -1 no such table: main.t3 +stmt 180 err 1 -1 212 no such table: main.t3 ==== 1.1 ALTER TABLE nosuch DROP COLUMN z; ---- -stmt 0 err 1 -1 no such table: nosuch +stmt 0 err 1 -1 36 no such table: nosuch ==== 1.2 ALTER TABLE v1 DROP COLUMN c; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 32 no such table: v1 ==== 1.3.1 CREATE VIRTUAL TABLE ft1 USING fts5(one, two); @@ -34,22 +34,22 @@ stmt 0 ok ALTER TABLE ft1 DROP COLUMN two; ---- -stmt 0 err 1 -1 no such table: ft1 +stmt 0 err 1 -1 37 no such table: ft1 ==== 1.4 ALTER TABLE sqlite_schema DROP COLUMN sql; ---- -stmt 0 err 1 -1 table sqlite_master may not be altered +stmt 0 err 1 -1 45 table sqlite_master may not be altered ==== 1.5 ALTER TABLE t1 DROP COLUMN d; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 1.6.1 ALTER TABLE t1 DROP COLUMN b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 1.6.2 SELECT sql FROM sqlite_schema WHERE name = 't1' @@ -59,7 +59,7 @@ stmt 0 ok ALTER TABLE t1 DROP COLUMN c; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 1.7.2 SELECT sql FROM sqlite_schema WHERE name = 't1' @@ -69,27 +69,27 @@ stmt 0 ok ALTER TABLE t1 DROP COLUMN a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 1.8 ALTER TABLE t2 DROP COLUMN z ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 32 no such table: t2 ==== 1.9 ALTER TABLE t2 DROP COLUMN x ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 32 no such table: t2 ==== 1.10 ALTER TABLE t2 DROP COLUMN y ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 32 no such table: t2 ==== 1.11 ALTER TABLE t3 DROP COLUMN s ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 32 no such table: t3 ==== 2.%TN%.0 CREATE TABLE t1(x, y INTEGER PRIMARY KEY, z) %WO% ; @@ -97,24 +97,24 @@ stmt 0 err 1 -1 no such table: t3 INSERT INTO t1 VALUES(4, 5, 6); INSERT INTO t1 VALUES(7, 8, 9); ---- -stmt 0 err 1 50 near "%": syntax error -stmt 56 err 1 -1 no such table: t1 -stmt 92 err 1 -1 no such table: t1 -stmt 128 err 1 -1 no such table: t1 +stmt 0 err 1 50 51 near "%": syntax error +stmt 56 err 1 -1 92 no such table: t1 +stmt 92 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 164 no such table: t1 ==== 2.%TN%.1 ALTER TABLE t1 DROP COLUMN x; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 34 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 56 no such table: t1 ==== 2.%TN%.2 ALTER TABLE t1 DROP COLUMN z; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 34 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 56 no such table: t1 ==== 3.0 CREATE TABLE t12(a, b, c, CHECK(c>10)); @@ -126,12 +126,12 @@ stmt 42 ok ALTER TABLE t12 DROP COLUMN c; ---- -stmt 0 err 1 -1 no such table: t12 +stmt 0 err 1 -1 33 no such table: t12 ==== 3.2 ALTER TABLE t13 DROP COLUMN c; ---- -stmt 0 err 1 -1 no such table: t13 +stmt 0 err 1 -1 33 no such table: t13 ==== alterdropcol-generated INSERT INTO "my table"(a, b, d) VALUES(1, 2, 'hello'); @@ -139,19 +139,19 @@ stmt 0 err 1 -1 no such table: t13 SELECT * FROM "my table" ---- -stmt 0 err 1 -1 no such table: my table -stmt 59 err 1 -1 no such table: my table -stmt 118 err 1 -1 no such table: my table +stmt 0 err 1 -1 59 no such table: my table +stmt 59 err 1 -1 118 no such table: my table +stmt 118 err 1 -1 149 no such table: my table ==== alterdropcol-generated.dup1 ALTER TABLE "my table" DROP COLUMN c; ---- -stmt 0 err 1 -1 no such table: my table +stmt 0 err 1 -1 42 no such table: my table ==== alterdropcol-generated.dup2 SELECT * FROM "my table" ---- -stmt 0 err 1 -1 no such table: my table +stmt 0 err 1 -1 30 no such table: my table ==== alterdropcol-generated.dup3 INSERT INTO x1(a, b, c, e) VALUES(1, 2, 3, 4); @@ -159,30 +159,30 @@ stmt 0 err 1 -1 no such table: my table INSERT INTO x1(a, b, c, e) VALUES(9, 10, 11, 12); SELECT * FROM x1; ---- -stmt 0 err 1 -1 no such table: x1 -stmt 51 err 1 -1 no such table: x1 -stmt 102 err 1 -1 no such table: x1 -stmt 156 err 1 -1 no such table: x1 +stmt 0 err 1 -1 51 no such table: x1 +stmt 51 err 1 -1 102 no such table: x1 +stmt 102 err 1 -1 156 no such table: x1 +stmt 156 err 1 -1 178 no such table: x1 ==== alterdropcol-generated.dup4 ALTER TABLE x1 DROP COLUMN a ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 34 no such table: x1 ==== alterdropcol-generated.dup5 SELECT * FROM x1 ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 22 no such table: x1 ==== alterdropcol-generated.dup6 ALTER TABLE x1 DROP COLUMN e ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 34 no such table: x1 ==== alterdropcol-generated.dup7 SELECT * FROM x1 ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 22 no such table: x1 ==== 5.0 CREATE TABLE p1(a PRIMARY KEY, b UNIQUE); @@ -198,8 +198,8 @@ stmt 89 ok ALTER TABLE c2 DROP COLUMN z; SELECT sql FROM sqlite_schema WHERE name IN ('c1', 'c2'); ---- -stmt 0 err 1 -1 no such table: c1 -stmt 32 err 1 -1 no such table: c2 +stmt 0 err 1 -1 32 no such table: c1 +stmt 32 err 1 -1 64 no such table: c2 stmt 64 ok ==== 5.2.1 @@ -210,31 +210,31 @@ stmt 0 ok ALTER TABLE c1 DROP COLUMN x ---- -stmt 0 err 1 -1 no such table: c1 +stmt 0 err 1 -1 32 no such table: c1 ==== 5.3.1 DROP VIEW v1; CREATE VIEW v1 AS SELECT x, y FROM c1; ---- -stmt 0 err 1 -1 no such view: v1 +stmt 0 err 1 -1 16 no such view: v1 stmt 16 ok ==== 5.3.2 ALTER TABLE c1 DROP COLUMN x ---- -stmt 0 err 1 -1 no such table: c1 +stmt 0 err 1 -1 32 no such table: c1 ==== 5.4.1 CREATE TRIGGER tr AFTER INSERT ON c1 BEGIN INSERT INTO p1 VALUES(new.y, new.xyz); END; ---- -stmt 0 err 1 -1 no such table: main.c1 +stmt 0 err 1 -1 45 no such table: main.c1 ==== 5.4.2 ALTER TABLE c1 DROP COLUMN y ---- -stmt 0 err 1 -1 no such table: c1 +stmt 0 err 1 -1 32 no such table: c1 ==== 5.5.1 DROP TRIGGER tr; @@ -242,13 +242,13 @@ stmt 0 err 1 -1 no such table: c1 INSERT INTO p1 VALUES(new.y, new.z); END; ---- -stmt 0 err 1 -1 no such trigger: tr -stmt 19 err 1 -1 no such table: main.c1 +stmt 0 err 1 -1 19 no such trigger: tr +stmt 19 err 1 -1 64 no such table: main.c1 ==== 5.5.2 ALTER TABLE c1 DROP COLUMN y ---- -stmt 0 err 1 -1 no such table: c1 +stmt 0 err 1 -1 32 no such table: c1 ==== 6.0 CREATE TABLE t1(a,b,c); @@ -263,7 +263,7 @@ stmt 26 ok stmt 52 ok stmt 81 ok stmt 157 ok -stmt 187 err 1 -1 no such table: t2 +stmt 187 err 1 -1 219 no such table: t2 ==== 6.1 CREATE TABLE t1(a,b,c); @@ -279,7 +279,7 @@ stmt 26 ok stmt 52 ok stmt 81 ok stmt 180 ok -stmt 210 err 1 -1 no such table: t2 +stmt 210 err 1 -1 242 no such table: t2 ==== 7.0 CREATE TABLE t1(a, b, c, PRIMARY KEY(a COLLATE nocase, a)) WITHOUT ROWID; @@ -287,13 +287,13 @@ stmt 210 err 1 -1 no such table: t2 INSERT INTO t1 VALUES(4, 5, 6); ---- stmt 0 ok -stmt 76 err 1 -1 no such table: t1 -stmt 110 err 1 -1 no such table: t1 +stmt 76 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 144 no such table: t1 ==== 7.1 ALTER TABLE t1 DROP COLUMN c; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 7.2 SELECT sql FROM sqlite_schema; @@ -303,7 +303,7 @@ stmt 0 ok SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 20 no such table: t1 ==== 8.0 CREATE TABLE t1(a INTEGER PRIMARY KEY, b); @@ -318,7 +318,7 @@ stmt 75 ok ALTER TABLE t1 DROP COLUMN b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 8.2 SELECT sql FROM sqlite_schema; @@ -331,14 +331,14 @@ stmt 0 ok ) INSERT INTO t1(a, b, c) SELECT i, 123, 456 FROM s; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 139 no such table: t1 ==== alterdropcol-generated.dup9 ALTER TABLE t1 DROP COLUMN b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 ==== alterdropcol-generated.dup10 SELECT count(*), c FROM t1 GROUP BY c; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 43 no such table: t1 diff --git a/parser/testdata/alterdropcol2.test b/parser/testdata/alterdropcol2.test index 9d206d2..4d083ea 100644 --- a/parser/testdata/alterdropcol2.test +++ b/parser/testdata/alterdropcol2.test @@ -4,17 +4,17 @@ INSERT INTO t1 VALUES(1, 2, 3), (4, 5, 6); ---- stmt 0 ok -stmt 61 err 1 -1 no such table: t1 +stmt 61 err 1 -1 106 no such table: t1 ==== 1.1 ALTER TABLE t1 DROP c; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 25 no such table: t1 ==== 1.2.1 SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 20 no such table: t1 ==== 1.2.2 SELECT sql FROM sqlite_schema; @@ -29,26 +29,26 @@ stmt 0 ok INSERT INTO zzz VALUES(1,1,1,1), (2,2,2,2); ---- stmt 0 ok -stmt 46 err 1 -1 no such table: yyy +stmt 46 err 1 -1 92 no such table: yyy stmt 92 ok -stmt 140 err 1 -1 no such table: zzz +stmt 140 err 1 -1 186 no such table: zzz ==== 3.1.1 INSERT INTO yyy VALUES(0,0,0,0); ---- -stmt 0 err 1 -1 no such table: yyy +stmt 0 err 1 -1 35 no such table: yyy ==== 3.1.2 INSERT INTO yyy VALUES(0,0,0,0); ---- -stmt 0 err 1 -1 no such table: yyy +stmt 0 err 1 -1 35 no such table: yyy ==== 3.2.1 ALTER TABLE yyy DROP e; ---- -stmt 0 err 1 -1 no such table: yyy +stmt 0 err 1 -1 26 no such table: yyy ==== 3.2.2 ALTER TABLE zzz DROP e; ---- -stmt 0 err 1 -1 no such table: zzz +stmt 0 err 1 -1 26 no such table: zzz diff --git a/parser/testdata/altertab.test b/parser/testdata/altertab.test index 8bbc6fb..5ce5fc1 100644 --- a/parser/testdata/altertab.test +++ b/parser/testdata/altertab.test @@ -7,7 +7,7 @@ ---- stmt 0 ok stmt 46 ok -stmt 72 err 1 -1 no such table: main.t2 +stmt 72 err 1 -1 117 no such table: main.t2 ==== 1.1 SELECT sql FROM sqlite_master @@ -17,7 +17,7 @@ stmt 0 ok ALTER TABLE t1 RENAME TO t1new; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 ==== 1.3 CREATE TABLE t3(c, d); @@ -25,8 +25,8 @@ stmt 0 err 1 -1 no such table: t1 DROP TABLE t3new; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t3 -stmt 59 err 1 -1 no such table: t3new +stmt 25 err 1 -1 59 no such table: t3 +stmt 59 err 1 -1 79 no such table: t3new ==== 1.4 SELECT sql FROM sqlite_master @@ -36,7 +36,7 @@ stmt 0 ok ALTER TABLE t2 RENAME TO t2new; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 34 no such table: t2 ==== 1.4.dup1 SELECT sql FROM sqlite_master @@ -50,21 +50,21 @@ stmt 0 ok SELECT * FROM eee; ---- stmt 0 ok -stmt 31 err 1 -1 no such table: abc +stmt 31 err 1 -1 68 no such table: abc stmt 68 ok -stmt 116 err 1 -1 no such table: eee +stmt 116 err 1 -1 139 no such table: eee ==== 2.1 ALTER TABLE eee RENAME TO fff; SELECT * FROM fff; ---- -stmt 0 err 1 -1 no such table: eee -stmt 35 err 1 -1 no such table: fff +stmt 0 err 1 -1 35 no such table: eee +stmt 35 err 1 -1 58 no such table: fff ==== 2.2 ALTER TABLE fff RENAME TO ggg; ---- -stmt 0 err 1 -1 no such table: fff +stmt 0 err 1 -1 35 no such table: fff ==== 3.0 CREATE TABLE txx(a, b, c); @@ -74,7 +74,7 @@ stmt 0 err 1 -1 no such table: fff CREATE VIEW temp.ttt AS SELECT main.txx.a, txx.b, one.b, main.one.a FROM txx AS one, txx; ---- stmt 0 ok -stmt 29 err 1 -1 no such table: txx +stmt 29 err 1 -1 64 no such table: txx stmt 64 ok stmt 123 ok stmt 189 ok @@ -82,14 +82,14 @@ stmt 189 ok SELECT * FROM vvv; ---- -stmt 0 err 1 -1 no such table: vvv +stmt 0 err 1 -1 21 no such table: vvv ==== 3.1.2 ALTER TABLE txx RENAME TO "t xx"; SELECT * FROM vvv; ---- -stmt 0 err 1 -1 no such table: txx -stmt 36 err 1 -1 no such table: vvv +stmt 0 err 1 -1 36 no such table: txx +stmt 36 err 1 -1 57 no such table: vvv ==== 3.1.3 SELECT sql FROM sqlite_master WHERE name='vvv'; @@ -99,7 +99,7 @@ stmt 0 ok SELECT * FROM uuu; ---- -stmt 0 err 1 -1 no such table: uuu +stmt 0 err 1 -1 21 no such table: uuu ==== 3.2.2 SELECT sql FROM sqlite_master WHERE name='uuu';; @@ -110,7 +110,7 @@ stmt 50 ok SELECT * FROM ttt; ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 21 no such table: ttt ==== 3.3.2 SELECT sql FROM sqlite_temp_master WHERE name='ttt'; @@ -128,7 +128,7 @@ stmt 0 ok ---- stmt 0 ok stmt 25 ok -stmt 50 err 1 -1 no such table: main.t1 +stmt 50 err 1 -1 97 no such table: main.t1 ==== 4.1 INSERT INTO t1 VALUES(1, 1); @@ -137,15 +137,15 @@ stmt 50 err 1 -1 no such table: main.t1 ALTER TABLE t2 RENAME TO t22; INSERT INTO t11 VALUES(3, 3); ---- -stmt 0 err 1 -1 no such table: t1 -stmt 31 err 1 -1 no such table: t1 -stmt 63 err 1 -1 no such table: t11 -stmt 95 err 1 -1 no such table: t2 -stmt 127 err 1 -1 no such table: t11 +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 63 no such table: t1 +stmt 63 err 1 -1 95 no such table: t11 +stmt 95 err 1 -1 127 no such table: t2 +stmt 127 err 1 -1 159 no such table: t11 ==== 4.2 SELECT squish(sql) FROM sqlite_master WHERE name = 'tr1' ---- -stmt 0 err 1 8 no such function: squish +stmt 0 err 1 8 58 no such function: squish ==== 5.0 CREATE TABLE t9(a, b, c); @@ -162,14 +162,14 @@ stmt 0 err 1 8 no such function: squish stmt 0 ok stmt 28 ok stmt 57 ok -stmt 90 err 1 -1 no such table: temp.t9 -stmt 203 err 1 -1 no such table: temp.t9 -stmt 243 err 1 -1 no such table: t10 +stmt 90 err 1 -1 147 no such table: temp.t9 +stmt 203 err 1 -1 243 no such table: temp.t9 +stmt 243 err 1 -1 264 no such table: t10 ==== 5.1 ALTER TABLE temp.t9 RENAME TO 't1234567890' ---- -stmt 0 err 1 -1 no such table: temp.t9 +stmt 0 err 1 -1 47 no such table: temp.t9 ==== 5.2 CREATE TABLE t1(a, b); @@ -181,34 +181,34 @@ stmt 0 err 1 -1 no such table: temp.t9 ---- stmt 0 ok stmt 25 ok -stmt 50 err 1 -1 no such table: t1 -stmt 81 err 1 -1 no such table: t2 +stmt 50 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 112 no such table: t2 stmt 112 ok -stmt 183 err 1 -1 no such table: v +stmt 183 err 1 -1 202 no such table: v ==== 5.3 ALTER TABLE t2 RENAME TO one; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 32 no such table: t2 ==== 5.4 SELECT * FROM v ---- -stmt 0 err 1 -1 no such table: v +stmt 0 err 1 -1 21 no such table: v ==== 5.5 DROP VIEW v; CREATE VIEW temp.vv AS SELECT one.a, one.b, t2.a, t2.b FROM t1 AS one, t2; SELECT * FROM vv; ---- -stmt 0 err 1 -1 no such view: v +stmt 0 err 1 -1 15 no such view: v stmt 15 ok -stmt 92 err 1 -1 no such table: vv +stmt 92 err 1 -1 112 no such table: vv ==== 5.6 ALTER TABLE t2 RENAME TO one; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 32 no such table: t2 ==== 6.0 CREATE VIRTUAL TABLE x1 USING tcl(tcl_command); @@ -219,7 +219,7 @@ stmt 0 ok ALTER TABLE x1 RENAME TO x2; SELECT sql FROM sqlite_master WHERE name = 'x2' ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 33 no such table: x1 stmt 33 ok ==== 7.1 @@ -233,14 +233,14 @@ stmt 33 ok ); ---- stmt 0 ok -stmt 50 err 1 -1 no such table: ddd +stmt 50 err 1 -1 279 no such table: ddd ==== 7.2 SELECT sqlite_rename_table(db, 0, 0, sql, zOld, zNew, bTemp) FROM ddd; ---- -stmt 0 err 1 -1 no such table: ddd +stmt 0 err 1 -1 84 no such table: ddd ==== 8.1 ATTACH 'test.db2' AS aux; @@ -254,24 +254,24 @@ stmt 0 err 1 -1 no such table: ddd ---- stmt 0 ok stmt 28 ok -stmt 56 err 1 72 unknown database aux -stmt 105 err 1 121 unknown database aux -stmt 171 err 1 -1 no such table: aux.p1 -stmt 206 err 1 -1 no such table: aux.p1 -stmt 241 err 1 -1 no such table: aux.c1 -stmt 279 err 1 295 unknown database aux +stmt 56 err 1 72 79 unknown database aux +stmt 105 err 1 121 128 unknown database aux +stmt 171 err 1 -1 206 no such table: aux.p1 +stmt 206 err 1 -1 241 no such table: aux.p1 +stmt 241 err 1 -1 279 no such table: aux.c1 +stmt 279 err 1 295 302 unknown database aux ==== 8.2 ALTER TABLE aux.p1 RENAME TO ppp; ---- -stmt 0 err 1 -1 no such table: aux.p1 +stmt 0 err 1 -1 36 no such table: aux.p1 ==== 8.2.dup1 INSERT INTO aux.c1 VALUES(NULL, 1); SELECT sql FROM aux.sqlite_master WHERE name = 'c1'; ---- -stmt 0 err 1 -1 no such table: aux.c1 -stmt 38 err 1 -1 no such table: aux.sqlite_master +stmt 0 err 1 -1 38 no such table: aux.c1 +stmt 38 err 1 -1 93 no such table: aux.sqlite_master ==== 9.0 CREATE TABLE t1(a, b, c); @@ -283,7 +283,7 @@ stmt 28 ok ALTER TABLE t1 RENAME TO t3; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 9.2 DROP VIEW v1; @@ -291,13 +291,13 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t2 VALUES(new.a); END; ---- -stmt 0 err 1 -1 no such view: v1 -stmt 16 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 16 no such view: v1 +stmt 16 err 1 -1 61 no such table: main.t1 ==== 9.3 ALTER TABLE t1 RENAME TO t3; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 9.4 DROP TRIGGER tr; @@ -308,16 +308,16 @@ stmt 0 err 1 -1 no such table: t1 CREATE TABLE aux.t1(x); CREATE TEMP TRIGGER tr AFTER INSERT ON aux.t1 BEGIN SELECT 1, 2, 3; END; ---- -stmt 0 err 1 -1 no such trigger: tr +stmt 0 err 1 -1 19 no such trigger: tr stmt 19 ok -stmt 48 err 1 -1 no such table: main.t1 -stmt 133 err 1 150 unknown database aux -stmt 160 err 1 -1 no such table: aux.t1 +stmt 48 err 1 -1 112 no such table: main.t1 +stmt 133 err 1 150 157 unknown database aux +stmt 160 err 1 -1 214 no such table: aux.t1 ==== 9.5 ALTER TABLE main.t1 RENAME TO t3; ---- -stmt 0 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 36 no such table: main.t1 ==== 9.6 SELECT sql FROM sqlite_temp_master; @@ -338,14 +338,14 @@ stmt 0 ok COMMIT; ---- stmt 0 ok -stmt 11 err 1 -1 no such table: fff -stmt 56 err 1 -1 no such table: fff +stmt 11 err 1 -1 56 no such table: fff +stmt 56 err 1 -1 93 no such table: fff stmt 93 ok ==== 10.2 SELECT * FROM ggg; ---- -stmt 0 err 1 -1 no such table: ggg +stmt 0 err 1 -1 23 no such table: ggg ==== 11.0 ATTACH 'test.db2' AS aux; @@ -356,16 +356,16 @@ stmt 0 err 1 -1 no such table: ggg END; ---- stmt 0 ok -stmt 28 err 1 44 unknown database aux +stmt 28 err 1 44 51 unknown database aux stmt 60 ok -stmt 93 err 1 -1 no such table: aux.t1 +stmt 93 err 1 -1 147 no such table: aux.t1 ==== 11.1 INSERT INTO main.t1 VALUES(1, 2, 3); INSERT INTO aux.t1 VALUES(4, 5, 6); ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 39 err 1 -1 no such table: aux.t1 +stmt 0 err 1 -1 39 no such table: main.t1 +stmt 39 err 1 -1 77 no such table: aux.t1 ==== 11.3 SELECT name, tbl_name FROM sqlite_temp_master; @@ -376,20 +376,20 @@ stmt 0 ok ALTER TABLE main.t1 RENAME TO t2; SELECT name, tbl_name FROM sqlite_temp_master; ---- -stmt 0 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 36 no such table: main.t1 stmt 36 ok ==== 11.5 ALTER TABLE aux.t1 RENAME TO t2; SELECT name, tbl_name FROM sqlite_temp_master; ---- -stmt 0 err 1 -1 no such table: aux.t1 +stmt 0 err 1 -1 35 no such table: aux.t1 stmt 35 ok ==== 11.6 INSERT INTO aux.t2 VALUES(7, 8, 9); ---- -stmt 0 err 1 -1 no such table: aux.t2 +stmt 0 err 1 -1 38 no such table: aux.t2 ==== 12.0 CREATE TABLE t1(a); @@ -401,20 +401,20 @@ stmt 0 err 1 -1 no such table: aux.t2 ---- stmt 0 ok stmt 22 ok -stmt 44 err 1 -1 no such table: main.t2 +stmt 44 err 1 -1 99 no such table: main.t2 stmt 143 ok ==== 12.1 ALTER TABLE main.t2 RENAME TO t3; ---- -stmt 0 err 1 -1 no such table: main.t2 +stmt 0 err 1 -1 36 no such table: main.t2 ==== 12.2 INSERT INTO t3 VALUES('WWW'); SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t3 -stmt 32 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t3 +stmt 32 err 1 -1 52 no such table: t1 ==== 13.0 CREATE TABLE t1(x, y); @@ -427,17 +427,17 @@ stmt 32 err 1 -1 no such table: t1 stmt 0 ok stmt 25 ok stmt 50 ok -stmt 73 err 1 -1 no such table: main.t1 +stmt 73 err 1 -1 119 no such table: main.t1 ==== 13.1 INSERT INTO t1 VALUES(1, 2); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 13.2 ALTER TABLE t2 RENAME b TO y; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 32 no such table: t2 ==== 14.0 CREATE VIRTUAL TABLE rt USING rtree(id, minx, maxx, miny, maxy); @@ -453,30 +453,30 @@ stmt 0 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 69 ok -stmt 140 err 1 -1 no such table: main.mytable -stmt 321 err 1 -1 no such table: mytable +stmt 140 err 1 -1 267 no such table: main.mytable +stmt 321 err 1 -1 366 no such table: mytable ==== 14.1 UPDATE mytable SET geom = X'1234' ---- -stmt 0 err 1 -1 no such table: mytable +stmt 0 err 1 -1 39 no such table: mytable ==== 14.2 ALTER TABLE mytable RENAME TO mytable_renamed; ---- -stmt 0 err 1 -1 no such table: mytable +stmt 0 err 1 -1 51 no such table: mytable ==== 14.3 CREATE TRIGGER tr2 AFTER INSERT ON mytable_renamed BEGIN DELETE FROM rt WHERE id=(SELECT min(id) FROM rt); END; ---- -stmt 0 err 1 -1 no such table: main.mytable_renamed +stmt 0 err 1 -1 61 no such table: main.mytable_renamed ==== 14.4 ALTER TABLE mytable_renamed RENAME TO mytable2; ---- -stmt 0 err 1 -1 no such table: mytable_renamed +stmt 0 err 1 -1 52 no such table: mytable_renamed ==== 14.5 CREATE TABLE t1(a, b, c); @@ -487,12 +487,12 @@ stmt 0 err 1 -1 no such table: mytable_renamed ---- stmt 0 ok stmt 28 ok -stmt 66 err 1 -1 no such table: main.t1 +stmt 66 err 1 -1 112 no such table: main.t1 ==== 14.6 ALTER TABLE t1 RENAME TO tt1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 15.0 CREATE TABLE t1(a integer NOT NULL PRIMARY KEY); @@ -507,16 +507,16 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 51 ok -stmt 89 err 1 -1 no such table: main.v1 -stmt 177 err 1 -1 no such table: main.v1 +stmt 89 err 1 -1 140 no such table: main.v1 +stmt 177 err 1 -1 228 no such table: main.v1 stmt 254 ok ==== 15.1 INSERT INTO v1 VALUES(1); ALTER TABLE t2 RENAME TO t3; ---- -stmt 0 err 1 -1 no such table: v1 -stmt 28 err 1 -1 no such table: t2 +stmt 0 err 1 -1 28 no such table: v1 +stmt 28 err 1 -1 59 no such table: t2 ==== 15.2 CREATE TABLE x(f1 integer NOT NULL); @@ -529,25 +529,25 @@ stmt 28 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 39 ok -stmt 82 err 1 -1 no such table: main.y +stmt 82 err 1 -1 136 no such table: main.y stmt 175 ok -stmt 227 err 1 -1 no such table: z +stmt 227 err 1 -1 257 no such table: z ==== 15.3 INSERT INTO x VALUES(1), (2), (3); ALTER TABLE x RENAME f1 TO f2; SELECT * FROM x; ---- -stmt 0 err 1 -1 no such table: x -stmt 37 err 1 -1 no such table: x -stmt 70 err 1 -1 no such table: x +stmt 0 err 1 -1 37 no such table: x +stmt 37 err 1 -1 70 no such table: x +stmt 70 err 1 -1 89 no such table: x ==== 15.4 UPDATE y SET f1 = 'x' WHERE f1 = 1; SELECT * FROM x; ---- -stmt 0 err 1 -1 no such table: y -stmt 38 err 1 -1 no such table: x +stmt 0 err 1 -1 38 no such table: y +stmt 38 err 1 -1 57 no such table: x ==== 15.5 SELECT sql FROM sqlite_master WHERE name = 'y'; @@ -564,27 +564,27 @@ stmt 40 ok INSERT INTO y1_segments VALUES(1, X'1234567890'); ---- -stmt 0 err 1 -1 no such table: y1_segments +stmt 0 err 1 -1 54 no such table: y1_segments ==== 16.20 DROP TABLE y1_segments; ---- -stmt 0 err 1 -1 no such table: y1_segments +stmt 0 err 1 -1 28 no such table: y1_segments ==== 16.20.dup1 ALTER TABLE y1_segments RENAME TO abc; ---- -stmt 0 err 1 -1 no such table: y1_segments +stmt 0 err 1 -1 43 no such table: y1_segments ==== 16.22 ALTER TABLE y1_segments RENAME TO abc; ---- -stmt 0 err 1 -1 no such table: y1_segments +stmt 0 err 1 -1 43 no such table: y1_segments ==== 16.23 CREATE TABLE y1_segments AS SELECT * FROM abc; ---- -stmt 0 err 1 -1 no such table: abc +stmt 0 err 1 -1 51 no such table: abc ==== 16.24 CREATE VIEW y1_segments AS SELECT * FROM abc; @@ -594,17 +594,17 @@ stmt 0 ok ALTER TABLE abc RENAME TO y1_segments; ---- -stmt 0 err 1 -1 no such table: abc +stmt 0 err 1 -1 43 no such table: abc ==== 16.30 ALTER TABLE y1 RENAME TO z1; ---- -stmt 0 err 1 -1 no such table: y1 +stmt 0 err 1 -1 33 no such table: y1 ==== 16.40 SELECT * FROM z1_segments; ---- -stmt 0 err 1 -1 no such table: z1_segments +stmt 0 err 1 -1 31 no such table: z1_segments ==== 17.0 CREATE TABLE sqlite1234 (id integer); @@ -612,7 +612,7 @@ stmt 0 err 1 -1 no such table: z1_segments SELECT name, sql FROM sqlite_master WHERE sql IS NOT NULL; ---- stmt 0 ok -stmt 40 err 1 -1 no such table: sqlite1234 +stmt 40 err 1 -1 81 no such table: sqlite1234 stmt 81 ok ==== 18.1.0 @@ -623,7 +623,7 @@ stmt 0 ok ALTER TABLE t0 RENAME COLUMN c0 TO c1; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 41 no such table: t0 ==== 18.1.2 SELECT sql FROM sqlite_master; @@ -638,7 +638,7 @@ stmt 0 ok ALTER TABLE t0 RENAME COLUMN c0 TO c1; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 41 no such table: t0 ==== 18.2.2 SELECT sql FROM sqlite_master; @@ -653,22 +653,22 @@ stmt 0 ok ---- stmt 0 ok stmt 22 ok -stmt 76 err 1 -1 no such table: t1 +stmt 76 err 1 -1 107 no such table: t1 stmt 107 ok ==== 19.110 INSERT INTO t3(x) VALUES(123); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t3 -stmt 33 err 1 -1 no such table: t2 +stmt 0 err 1 -1 33 no such table: t3 +stmt 33 err 1 -1 53 no such table: t2 ==== 19.120 INSERT INTO t3(x) VALUES('xyz'); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t3 -stmt 35 err 1 -1 no such table: t2 +stmt 0 err 1 -1 35 no such table: t3 +stmt 35 err 1 -1 55 no such table: t2 ==== 20.0 CREATE TABLE a(a); @@ -680,7 +680,7 @@ stmt 21 ok ALTER TABLE a RENAME a TO e; ---- -stmt 0 err 1 -1 no such table: a +stmt 0 err 1 -1 31 no such table: a ==== 21.0 CREATE TABLE a(b); @@ -695,17 +695,17 @@ stmt 21 ok SELECT likelihood(NULL, (d, (SELECT c))); ---- -stmt 0 err 1 10 second argument to likelihood() must be a constant between 0.0 and 1.0 +stmt 0 err 1 10 44 second argument to likelihood() must be a constant between 0.0 and 1.0 ==== 21.2 SELECT * FROM c; ---- -stmt 0 err 1 -1 no such table: c +stmt 0 err 1 -1 19 no such table: c ==== 21.3 ALTER TABLE a RENAME TO e; ---- -stmt 0 err 1 -1 no such table: a +stmt 0 err 1 -1 29 no such table: a ==== 22.0 CREATE TABLE t1(a INT, b TEXT NOT NULL); @@ -718,7 +718,7 @@ stmt 0 err 1 -1 no such table: a PRAGMA integrity_check; ---- stmt 0 ok -stmt 43 err 1 -1 no such table: t1 +stmt 43 err 1 -1 83 no such table: t1 stmt 83 ok stmt 92 ok stmt 121 ok @@ -730,8 +730,8 @@ stmt 247 ok ALTER TABLE t1 ADD COLUMN c INT DEFAULT 78; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 46 err 1 -1 no such table: t1 +stmt 0 err 1 -1 42 no such table: t1 +stmt 46 err 1 -1 66 no such table: t1 ==== 23.1 CREATE TABLE gigo(a text); @@ -739,15 +739,15 @@ stmt 46 err 1 -1 no such table: t1 CREATE VIEW v1 AS SELECT * FROM idx WHERE x='abc'; ---- stmt 0 ok -stmt 29 err 1 -1 no such collation sequence: compare64 +stmt 29 err 1 -1 74 no such collation sequence: compare64 stmt 75 ok ==== 23.2 alter table gigo rename to ggiiggoo; alter table idx rename to idx2; ---- -stmt 0 err 1 -1 no such table: gigo -stmt 39 err 1 -1 no such table: idx +stmt 0 err 1 -1 39 no such table: gigo +stmt 39 err 1 -1 73 no such table: idx ==== 23.3 SELECT sql FROM sqlite_master; @@ -758,7 +758,7 @@ stmt 0 ok ALTER TABLE idx2 RENAME x TO y; SELECT sql FROM sqlite_master; ---- -stmt 0 err 1 -1 no such table: idx2 +stmt 0 err 1 -1 34 no such table: idx2 stmt 34 ok ==== 24.1.0 @@ -768,12 +768,12 @@ stmt 34 ok END; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 +stmt 25 err 1 -1 67 no such table: main.t1 ==== 24.1.1 ALTER TABLE t1 RENAME TO t2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 24.2.0 CREATE TABLE t1(a, b); @@ -783,13 +783,13 @@ stmt 0 err 1 -1 no such table: t1 CREATE VIEW v1 AS SELECT * FROM nosuchtable; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 +stmt 25 err 1 -1 67 no such table: main.t1 stmt 134 ok ==== 24.2.1 ALTER TABLE t1 RENAME TO t2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 25.1 CREATE TABLE xx(x); @@ -801,7 +801,7 @@ stmt 22 ok ALTER TABLE json_each RENAME TO t4; ---- -stmt 0 err 1 -1 table json_each may not be altered +stmt 0 err 1 -1 40 table json_each may not be altered ==== 26.1 CREATE TABLE t1(k,v); @@ -819,11 +819,11 @@ stmt 0 err 1 -1 table json_each may not be altered stmt 0 ok stmt 24 ok stmt 50 ok -stmt 90 err 1 -1 no such table: main.t1 -stmt 242 err 1 -1 no such table: t1 -stmt 274 err 1 -1 no such table: t2_a -stmt 306 err 1 -1 no such table: t1x -stmt 339 err 1 -1 no such table: t1x +stmt 90 err 1 -1 135 no such table: main.t1 +stmt 242 err 1 -1 274 no such table: t1 +stmt 274 err 1 -1 306 no such table: t2_a +stmt 306 err 1 -1 339 no such table: t1x +stmt 339 err 1 -1 360 no such table: t1x ==== 27.1 @@ -844,12 +844,12 @@ stmt 339 err 1 -1 no such table: t1x ---- stmt 0 ok stmt 66 ok -stmt 93 err 1 -1 no such table: main.t_sa +stmt 93 err 1 -1 145 no such table: main.t_sa ==== 27.2 alter table t_sa rename column c_muyat to c_dg; ---- -stmt 0 err 1 -1 no such table: t_sa +stmt 0 err 1 -1 50 no such table: t_sa ==== 29.1 CREATE TABLE t1(a, b, c); @@ -861,18 +861,18 @@ stmt 0 err 1 -1 no such table: t_sa SELECT 1 FROM g; ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t1 +stmt 28 err 1 -1 68 no such table: t1 stmt 68 ok ==== 29.2 SELECT * FROM v0 ---- -stmt 0 err 1 -1 no such table: v0 +stmt 0 err 1 -1 20 no such table: v0 ==== 29.2.dup1 ALTER TABLE t1 RENAME TO t2 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 29.3 SELECT sql FROM sqlite_schema WHERE name='v0' @@ -894,12 +894,12 @@ stmt 0 ok SELECT * FROM v2; ---- -stmt 0 err 1 -1 no such table: v2 +stmt 0 err 1 -1 22 no such table: v2 ==== 29.5 ALTER TABLE t2 RENAME TO t3; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 31 no such table: t2 ==== 29.5.dup1 SELECT sql FROM sqlite_schema WHERE name='v2' @@ -924,24 +924,24 @@ stmt 0 ok stmt 0 ok stmt 22 ok stmt 46 ok -stmt 70 err 1 -1 no such table: t2 -stmt 112 err 1 -1 no such table: t4 +stmt 70 err 1 -1 112 no such table: t2 +stmt 112 err 1 -1 154 no such table: t4 stmt 154 ok ==== 28.2 SELECT * FROM v3 ---- -stmt 0 err 1 -1 no such table: v3 +stmt 0 err 1 -1 20 no such table: v3 ==== 28.3 ALTER TABLE t1 RENAME a TO a2; -- fails in v3 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 33 no such table: t1 ==== 28.4 ALTER TABLE t2 RENAME TO t5; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 31 no such table: t2 ==== 28.5 SELECT sql FROM sqlite_schema WHERE name='v3' @@ -973,14 +973,14 @@ stmt 0 ok ---- stmt 0 ok stmt 32 ok -stmt 58 err 1 -1 no such table: main.t1 +stmt 58 err 1 -1 97 no such table: main.t1 stmt 97 ok -stmt 220 err 1 -1 no such table: main.t1 +stmt 220 err 1 -1 284 no such table: main.t1 ==== 30.1 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 30.2 SELECT sql FROM sqlite_schema ORDER BY rowid @@ -997,17 +997,17 @@ stmt 22 ok SELECT * FROM vvv; ---- -stmt 0 err 1 -1 no such table: vvv +stmt 0 err 1 -1 21 no such table: vvv ==== 31.2 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 31.3 ALTER TABLE t1x RENAME q TO x; ---- -stmt 0 err 1 -1 no such table: t1x +stmt 0 err 1 -1 33 no such table: t1x ==== 32.0 CREATE TABLE t1(x); @@ -1017,8 +1017,8 @@ stmt 0 err 1 -1 no such table: t1x ALTER TABLE t1 RENAME TO x; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: main.t1 -stmt 114 err 1 -1 no such table: t1 +stmt 22 err 1 -1 68 no such table: main.t1 +stmt 114 err 1 -1 144 no such table: t1 ==== 33.0 CREATE TABLE t1(a TEXT); @@ -1029,16 +1029,16 @@ stmt 114 err 1 -1 no such table: t1 END; ---- stmt 0 ok -stmt 27 err 1 -1 no such table: t1 +stmt 27 err 1 -1 77 no such table: t1 stmt 77 ok -stmt 104 err 1 -1 no such table: main.t1 +stmt 104 err 1 -1 149 no such table: main.t1 ==== 33.1 ALTER TABLE t1 RENAME COLUMN a TO b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 39 no such table: t1 ==== 33.2 SELECT quote(a) FROM t1 ORDER BY +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 39 no such table: t1 diff --git a/parser/testdata/altertab2.test b/parser/testdata/altertab2.test index 8202e52..0c0c868 100644 --- a/parser/testdata/altertab2.test +++ b/parser/testdata/altertab2.test @@ -10,21 +10,21 @@ ---- stmt 0 ok stmt 27 ok -stmt 73 err 1 -1 no such table: main.rr -stmt 173 err 1 -1 no such table: rr -stmt 218 err 1 -1 no such table: ff +stmt 73 err 1 -1 121 no such table: main.rr +stmt 173 err 1 -1 218 no such table: rr +stmt 218 err 1 -1 240 no such table: ff ==== 1.1 ALTER TABLE ff RENAME TO ffff; ---- -stmt 0 err 1 -1 no such table: ff +stmt 0 err 1 -1 35 no such table: ff ==== 1.2 INSERT INTO rr VALUES('in', 'tcl'); SELECT * FROM ffff; ---- -stmt 0 err 1 -1 no such table: rr -stmt 40 err 1 -1 no such table: ffff +stmt 0 err 1 -1 40 no such table: rr +stmt 40 err 1 -1 64 no such table: ffff ==== 2.0 CREATE TABLE p1(a PRIMARY KEY, b); @@ -41,7 +41,7 @@ stmt 126 ok ALTER TABLE p1 RENAME TO p2; SELECT sql FROM sqlite_master WHERE name LIKE 'c%'; ---- -stmt 0 err 1 -1 no such table: p1 +stmt 0 err 1 -1 31 no such table: p1 stmt 31 ok ==== 2.2 @@ -50,7 +50,7 @@ stmt 31 ok SELECT sql FROM sqlite_master WHERE name LIKE 'c%'; ---- stmt 0 ok -stmt 33 err 1 -1 no such table: p2 +stmt 33 err 1 -1 64 no such table: p2 stmt 64 ok ==== 2.3 @@ -59,23 +59,23 @@ stmt 64 ok ALTER TABLE p2 RENAME TO p3; SELECT sql FROM sqlite_master WHERE name LIKE 'c%'; ---- -stmt 0 err 1 -1 no such table: p3 +stmt 0 err 1 -1 31 no such table: p3 stmt 31 ok -stmt 58 err 1 -1 no such table: p2 +stmt 58 err 1 -1 89 no such table: p2 stmt 89 ok ==== altertab2-generated ALTER TABLE log_entry RENAME TO newname; SELECT sql FROM sqlite_master; ---- -stmt 0 err 1 -1 no such table: log_entry +stmt 0 err 1 -1 45 no such table: log_entry stmt 45 ok ==== altertab2-generated.dup1 ALTER TABLE log_entry RENAME col1 TO newname; SELECT sql FROM sqlite_master; ---- -stmt 0 err 1 -1 no such table: log_entry +stmt 0 err 1 -1 50 no such table: log_entry stmt 50 ok ==== 4.0 @@ -85,27 +85,27 @@ stmt 50 ok END; ---- stmt 0 ok -stmt 32 err 1 -1 no such table: main.t1 +stmt 32 err 1 -1 97 no such table: main.t1 ==== 4.1 ALTER TABLE t1 RENAME TO t1x; SELECT sql FROM sqlite_master WHERE type = 'trigger'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 stmt 32 ok ==== 4.2 ALTER TABLE t1x RENAME a TO aaa; SELECT sql FROM sqlite_master WHERE type = 'trigger'; ---- -stmt 0 err 1 -1 no such table: t1x +stmt 0 err 1 -1 35 no such table: t1x stmt 35 ok ==== 4.3 ALTER TABLE t1x RENAME d TO ddd; SELECT sql FROM sqlite_master WHERE type = 'trigger'; ---- -stmt 0 err 1 -1 no such table: t1x +stmt 0 err 1 -1 35 no such table: t1x stmt 35 ok ==== 5.0 @@ -123,31 +123,31 @@ stmt 35 ok END; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: main.t2 +stmt 22 err 1 -1 87 no such table: main.t2 ==== 5.0.1 INSERT INTO t2 VALUES(1); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 28 no such table: t2 ==== 5.1 ALTER TABLE t2 RENAME TO t2x; SELECT sql FROM sqlite_master WHERE name = 'r2'; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 32 no such table: t2 stmt 32 ok ==== 5.2 ALTER TABLE t2x RENAME a TO aaaa; SELECT sql FROM sqlite_master WHERE name = 'r2'; ---- -stmt 0 err 1 -1 no such table: t2x +stmt 0 err 1 -1 36 no such table: t2x stmt 36 ok ==== 5.3 INSERT INTO t2x VALUES(1); ---- -stmt 0 err 1 -1 no such table: t2x +stmt 0 err 1 -1 29 no such table: t2x ==== 6.0 CREATE TABLE t3(a,b,c,d); @@ -157,20 +157,20 @@ stmt 0 err 1 -1 no such table: t2x END; ---- stmt 0 ok -stmt 28 err 1 -1 no such table: main.t3 +stmt 28 err 1 -1 93 no such table: main.t3 ==== 6.1 ALTER TABLE t3 RENAME TO t3x; SELECT sql FROM sqlite_master WHERE name = 'r3'; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 32 no such table: t3 stmt 32 ok ==== 6.2 ALTER TABLE t3x RENAME a TO abcd; SELECT sql FROM sqlite_master WHERE name = 'r3'; ---- -stmt 0 err 1 -1 no such table: t3x +stmt 0 err 1 -1 36 no such table: t3x stmt 36 ok ==== 7.0 @@ -179,13 +179,13 @@ stmt 36 ok CREATE TABLE t2(x,y,z); ---- stmt 0 ok -stmt 32 err 1 -1 no such table: t1 +stmt 32 err 1 -1 70 no such table: t1 stmt 70 ok ==== 7.1 SELECT a,b,c FROM t1 UNION SELECT d,e,f FROM t1 ORDER BY b,c; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 64 no such table: t1 ==== 7.2 CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN @@ -195,22 +195,22 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES(2,3,4,5,6,7); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 137 err 1 -1 no such table: t1 -stmt 175 err 1 -1 no such table: t2 +stmt 0 err 1 -1 45 no such table: main.t1 +stmt 137 err 1 -1 175 no such table: t1 +stmt 175 err 1 -1 195 no such table: t2 ==== 7.3 ALTER TABLE t1 RENAME TO xyzzy; SELECT sql FROM sqlite_master WHERE name='r1' ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 stmt 34 ok ==== 7.3.dup1 ALTER TABLE xyzzy RENAME c TO ccc; SELECT sql FROM sqlite_master WHERE name='r1' ---- -stmt 0 err 1 -1 no such table: xyzzy +stmt 0 err 1 -1 37 no such table: xyzzy stmt 37 ok ==== 8.0 @@ -227,22 +227,22 @@ stmt 0 ok stmt 28 ok stmt 57 ok stmt 86 ok -stmt 124 err 1 -1 no such table: main.t3 +stmt 124 err 1 -1 169 no such table: main.t3 ==== 8.1 INSERT INTO t3 VALUES(1, 2, 3); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 34 no such table: t3 ==== 8.2 ALTER TABLE t1 RENAME a TO aaa; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 ==== 8.3 INSERT INTO t3 VALUES(4, 5, 6); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 34 no such table: t3 ==== 8.4 CREATE TABLE t4(a, b); @@ -255,7 +255,7 @@ stmt 25 ok ALTER TABLE t4 RENAME a TO c; SELECT sql FROM sqlite_master WHERE name = 'v4' ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 32 no such table: t4 stmt 32 ok ==== 8.6 @@ -265,8 +265,8 @@ stmt 32 ok SELECT sql FROM sqlite_master WHERE name='i0'; ---- stmt 0 ok -stmt 23 err 1 -1 no such table: main.t0 -stmt 71 err 1 -1 no such table: t0 +stmt 23 err 1 -1 71 no such table: main.t0 +stmt 71 err 1 -1 102 no such table: t0 stmt 102 ok ==== 9.0 @@ -285,9 +285,9 @@ stmt 102 ok ---- stmt 0 ok stmt 28 ok -stmt 58 err 1 -1 no such table: main.t2 +stmt 58 err 1 -1 101 no such table: main.t2 ==== 9.1 ALTER TABLE t2 RENAME TO newname; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 36 no such table: t2 diff --git a/parser/testdata/altertab3.test b/parser/testdata/altertab3.test index 5f83d49..ea72fd9 100644 --- a/parser/testdata/altertab3.test +++ b/parser/testdata/altertab3.test @@ -6,12 +6,12 @@ END; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 +stmt 25 err 1 -1 71 no such table: main.t1 ==== 1.1 ALTER TABLE t1 RENAME a TO aaa; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 ==== 1.2 SELECT sql FROM sqlite_master WHERE name='tr1' @@ -21,7 +21,7 @@ stmt 0 ok INSERT INTO t1 VALUES(1, 2); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 2.0 CREATE TABLE t1(a,b,c); @@ -35,13 +35,13 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 26 ok -stmt 52 err 1 -1 no such table: main.t1 +stmt 52 err 1 -1 117 no such table: main.t1 ==== 2.1 ALTER TABLE t1 RENAME TO t1x; SELECT sql FROM sqlite_master WHERE name = 'r1'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 stmt 32 ok ==== 3.0 @@ -54,7 +54,7 @@ stmt 31 ok ALTER TABLE t1 RENAME b TO bbb; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 ==== 3.2 SELECT sql FROM sqlite_master WHERE name = 'v1' @@ -70,14 +70,14 @@ stmt 0 ok ---- stmt 0 ok stmt 25 ok -stmt 50 err 1 -1 no such table: main.t1 +stmt 50 err 1 -1 96 no such table: main.t1 ==== 4.1.2 BEGIN; ALTER TABLE t3 RENAME TO t4; ---- stmt 0 ok -stmt 9 err 1 -1 no such table: t3 +stmt 9 err 1 -1 42 no such table: t3 ==== 4.1.2.dup1 COMMIT; @@ -95,7 +95,7 @@ stmt 0 ok ALTER TABLE t3 RENAME e TO eee; ---- stmt 0 ok -stmt 9 err 1 -1 no such table: t3 +stmt 9 err 1 -1 45 no such table: t3 ==== 4.2.2 COMMIT; @@ -119,7 +119,7 @@ stmt 0 ok ALTER TABLE t1 RENAME c1 TO c3; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 ==== 6.0 CREATE TEMPORARY TABLE Table0 ( @@ -133,7 +133,7 @@ stmt 0 ok ALTER TABLE Table0 RENAME Col0 TO Col0; ---- -stmt 0 err 1 -1 no such table: Table0 +stmt 0 err 1 -1 42 no such table: Table0 ==== 7.1.0 CREATE TABLE t1(a,b,c); @@ -143,13 +143,13 @@ stmt 0 err 1 -1 no such table: Table0 END; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: main.t1 +stmt 26 err 1 -1 68 no such table: main.t1 ==== 7.1.2 ALTER TABLE t1 RENAME TO t1x; SELECT sql FROM sqlite_master; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 stmt 32 ok ==== 7.2.1 @@ -159,26 +159,26 @@ stmt 32 ok WINDOW w1 AS (PARTITION BY b, percent_rank() OVER w1 ORDER BY d); END; ---- -stmt 0 err 1 -1 no such trigger: after -stmt 22 err 1 -1 no such table: main.t1x +stmt 0 err 1 -1 22 no such trigger: after +stmt 22 err 1 -1 65 no such table: main.t1x ==== 7.2.2 ALTER TABLE t1x RENAME TO t1; ---- -stmt 0 err 1 -1 no such table: t1x +stmt 0 err 1 -1 32 no such table: t1x ==== 8.0 CREATE TABLE t0(c0); CREATE INDEX i0 ON t0('1' IN ()); ---- stmt 0 ok -stmt 23 err 1 -1 no such table: main.t0 +stmt 23 err 1 -1 59 no such table: main.t0 ==== 8.1 ALTER TABLE t0 RENAME TO t1; SELECT sql FROM sqlite_master; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 31 no such table: t0 stmt 31 ok ==== 8.2.1 @@ -187,8 +187,8 @@ stmt 31 ok ALTER TABLE t2 RENAME COLUMN c0 TO c1; ---- stmt 0 ok -stmt 24 err 1 -1 no such table: main.t2 -stmt 78 err 1 -1 no such table: t2 +stmt 24 err 1 -1 78 no such table: main.t2 +stmt 78 err 1 -1 119 no such table: t2 ==== 8.2.2 SELECT sql FROM sqlite_master WHERE tbl_name = 't2'; @@ -202,12 +202,12 @@ stmt 0 ok END; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: main.t1 +stmt 26 err 1 -1 88 no such table: main.t1 ==== 9.2 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 10.1 CREATE TABLE t1(a, b, c); @@ -224,7 +224,7 @@ stmt 56 ok ALTER TABLE t2 RENAME TO t3; SELECT sql FROM sqlite_master WHERE name='v1'; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 31 no such table: t2 stmt 31 ok ==== 11.1 @@ -239,12 +239,12 @@ stmt 31 ok END; ---- stmt 0 ok -stmt 140 err 1 -1 no such table: main.t1 +stmt 140 err 1 -1 196 no such table: main.t1 ==== 11.2 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 11.3 DROP TRIGGER b; @@ -253,14 +253,14 @@ stmt 0 err 1 -1 no such table: t1 WINDOW b AS (ORDER BY NOT EXISTS(SELECT 1 FROM t1)); END; ---- -stmt 0 err 1 -1 no such trigger: b -stmt 18 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 18 no such trigger: b +stmt 18 err 1 -1 73 no such table: main.t1 ==== 11.4 ALTER TABLE t1 RENAME TO t1x; SELECT sql FROM sqlite_master WHERE name = 'b'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 stmt 32 ok ==== 12.1 @@ -301,12 +301,12 @@ ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) END; ---- stmt 0 ok -stmt 122 err 1 -1 no such table: main.t1 +stmt 122 err 1 -1 182 no such table: main.t1 ==== 12.2 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 13.1 CREATE TABLE t1(a); @@ -315,12 +315,12 @@ stmt 0 err 1 -1 no such table: t1 END; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: main.t1 +stmt 22 err 1 -1 61 no such table: main.t1 ==== 13.2 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 14.1 CREATE TABLE t1(a); @@ -331,12 +331,12 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 22 ok -stmt 44 err 1 -1 no such table: main.t1 +stmt 44 err 1 -1 86 no such table: main.t1 ==== 14.2 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 16.1 CREATE TABLE t1(x); @@ -349,12 +349,12 @@ stmt 0 err 1 -1 no such table: t1 END; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: main.t1 +stmt 22 err 1 -1 64 no such table: main.t1 ==== 16.2 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 17.1 CREATE TABLE t1(a,b,c); @@ -363,15 +363,15 @@ stmt 0 err 1 -1 no such table: t1 END; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: main.t1 +stmt 26 err 1 -1 88 no such table: main.t1 ==== 17.2 ALTER TABLE t1 RENAME TO t1x; ALTER TABLE t1x RENAME a TO aaa; SELECT sql FROM sqlite_master WHERE type='trigger'; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 32 err 1 -1 no such table: t1x +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 67 no such table: t1x stmt 67 ok ==== 18.1 @@ -388,7 +388,7 @@ stmt 67 ok END; ---- stmt 0 ok -stmt 24 err 1 -1 no such table: main.t1 +stmt 24 err 1 -1 69 no such table: main.t1 ==== 18.2 SELECT a, b FROM t1 @@ -400,12 +400,12 @@ stmt 24 err 1 -1 no such table: main.t1 ORDER BY b COLLATE nocase ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 175 no such table: t1 ==== 18.3 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 19.0 CREATE TABLE a(a,h CONSTRAINT a UNIQUE ON CONFLICT FAIL,CONSTRAINT a); @@ -415,7 +415,7 @@ stmt 0 ok ALTER TABLE a RENAME TO g; ---- -stmt 0 err 1 -1 no such table: a +stmt 0 err 1 -1 31 no such table: a ==== 20.10 CREATE TABLE s(a, b, c); @@ -423,8 +423,8 @@ stmt 0 err 1 -1 no such table: a ALTER TABLE s RENAME a TO a2; ---- stmt 0 ok -stmt 27 err 1 -1 no such table: main.s -stmt 94 err 1 -1 no such table: s +stmt 27 err 1 -1 94 no such table: main.s +stmt 94 err 1 -1 126 no such table: s ==== 21.1 CREATE TABLE s(col); @@ -437,7 +437,7 @@ stmt 94 err 1 -1 no such table: s stmt 0 ok stmt 23 ok stmt 112 ok -stmt 134 err 1 -1 no such table: a +stmt 134 err 1 -1 165 no such table: a ==== 22.1 CREATE TABLE t1(a); @@ -449,31 +449,31 @@ stmt 22 ok ALTER TABLE t1 RENAME TO t4; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 22.3 DROP VIEW v2; CREATE VIEW v2(b) AS WITH t3 AS (SELECT b FROM v2) SELECT * FROM t3; ---- -stmt 0 err 1 -1 no such view: v2 +stmt 0 err 1 -1 16 no such view: v2 stmt 16 ok ==== 22.4 ALTER TABLE t1 RENAME TO t4; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 22.5 DROP VIEW v2; CREATE VIEW v2(b) AS WITH t3 AS (SELECT b FROM v2) VALUES(1); ---- -stmt 0 err 1 -1 no such view: v2 +stmt 0 err 1 -1 16 no such view: v2 stmt 16 ok ==== 22.6 ALTER TABLE t1 RENAME TO t4; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 23.1 CREATE TABLE t1(x); @@ -482,12 +482,12 @@ stmt 0 err 1 -1 no such table: t1 END; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: main.t1 +stmt 22 err 1 -1 67 no such table: main.t1 ==== 23.2 ALTER TABLE t1 RENAME TO t1x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 23.1.dup1 CREATE TABLE v0 (a); @@ -501,12 +501,12 @@ stmt 23 ok SELECT * FROM v2 ---- -stmt 0 err 1 -1 no such table: v2 +stmt 0 err 1 -1 20 no such table: v2 ==== 23.3 ALTER TABLE v0 RENAME TO t3 ; ---- -stmt 0 err 1 -1 no such table: v0 +stmt 0 err 1 -1 32 no such table: v0 ==== 24.1 CREATE TABLE v0 (v1); @@ -519,12 +519,12 @@ stmt 0 err 1 -1 no such table: v0 ---- stmt 0 ok stmt 24 ok -stmt 82 err 1 -1 no such table: main.v2 +stmt 82 err 1 -1 215 no such table: main.v2 ==== 24.2 ALTER TABLE v0 RENAME TO x ; ---- -stmt 0 err 1 -1 no such table: v0 +stmt 0 err 1 -1 31 no such table: v0 ==== 24.3 DROP TRIGGER x; @@ -534,14 +534,14 @@ stmt 0 err 1 -1 no such table: v0 DELETE FROM v2; END; ---- -stmt 0 err 1 -1 no such trigger: x -stmt 18 err 1 -1 no such table: main.v2 +stmt 0 err 1 -1 18 no such trigger: x +stmt 18 err 1 -1 106 no such table: main.v2 ==== 24.4 ALTER TABLE v0 RENAME TO xyz; SELECT sql FROM sqlite_master WHERE type='trigger' ---- -stmt 0 err 1 -1 no such table: v0 +stmt 0 err 1 -1 32 no such table: v0 stmt 32 ok ==== 25.1 @@ -553,7 +553,7 @@ stmt 32 ok ---- stmt 0 ok stmt 28 ok -stmt 56 err 1 -1 no such table: main.t1 +stmt 56 err 1 -1 102 no such table: main.t1 ==== 26.1 CREATE TABLE t1(x); @@ -572,18 +572,18 @@ stmt 56 err 1 -1 no such table: main.t1 stmt 0 ok stmt 22 ok stmt 45 ok -stmt 67 err 1 -1 no such table: main.t3 -stmt 162 err 1 -1 no such table: main.t3 +stmt 67 err 1 -1 108 no such table: main.t3 +stmt 162 err 1 -1 203 no such table: main.t3 ==== 26.2 ALTER TABLE t1 RENAME TO t2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 26.3 ALTER TABLE t2 RENAME x TO xx; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 33 no such table: t2 ==== 26.4 SELECT sql FROM sqlite_schema WHERE name='tr2' @@ -597,12 +597,12 @@ stmt 0 ok END; ---- stmt 0 ok -stmt 23 err 1 -1 no such table: main.t1 +stmt 23 err 1 -1 62 no such table: main.t1 ==== 26.6 ALTER TABLE t1 RENAME TO t2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 27.1 CREATE TABLE t1(a, b AS ((WITH w1 (xyz) AS ( SELECT t1.b FROM t1 ) SELECT 123) IN ()), c); @@ -613,7 +613,7 @@ stmt 0 ok ALTER TABLE t1 DROP COLUMN c; SELECT sql FROM sqlite_schema WHERE name = 't1'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 stmt 32 ok ==== 28.1 @@ -624,8 +624,8 @@ stmt 32 ok ALTER TABLE t1 RENAME TO t2; ---- stmt 0 ok -stmt 28 err 1 -1 no such table: main.t1 -stmt 108 err 1 -1 no such table: t1 +stmt 28 err 1 -1 70 no such table: main.t1 +stmt 108 err 1 -1 139 no such table: t1 ==== 28.2 SELECT sql FROM sqlite_schema WHERE type='trigger' @@ -640,17 +640,17 @@ stmt 0 ok END; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 +stmt 25 err 1 -1 73 no such table: main.t1 ==== 29.2 ALTER TABLE t1 RENAME x TO z; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 29.3 ALTER TABLE t1 RENAME TO t2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 29.4 CREATE TRIGGER tr2 AFTER DELETE ON t2 BEGIN @@ -659,17 +659,17 @@ stmt 0 err 1 -1 no such table: t1 ); END; ---- -stmt 0 err 1 -1 no such table: main.t2 +stmt 0 err 1 -1 46 no such table: main.t2 ==== 29.5 DELETE FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 18 no such table: t2 ==== 29.6 ALTER TABLE t2 RENAME TO t3; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 31 no such table: t2 ==== 29.7 SELECT sql FROM sqlite_schema WHERE type='trigger' @@ -690,12 +690,12 @@ stmt 25 ok SELECT * FROM v1 ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 20 no such table: v1 ==== 30.1.dup1 ALTER TABLE t1 RENAME TO t2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== 30.2 SELECT sql FROM sqlite_schema WHERE type='view' @@ -710,12 +710,12 @@ stmt 0 ok INSERT INTO t1 SELECT NULL, i, 5.0 FROM s; ---- stmt 0 ok -stmt 64 err 1 -1 no such table: t1 +stmt 64 err 1 -1 185 no such table: t1 ==== 31.2 SELECT rr FROM t1 LIMIT 1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 29 no such table: t1 ==== 32.1.0 CREATE TABLE t1( @@ -730,7 +730,7 @@ stmt 0 ok ALTER TABLE t1 DROP COLUMN c; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 32.1.2 SELECT sql FROM sqlite_schema @@ -750,7 +750,7 @@ stmt 0 ok ALTER TABLE t1 DROP COLUMN c; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== 32.2.2 SELECT sql FROM sqlite_schema @@ -766,5 +766,5 @@ stmt 0 ok ALTER TABLE x1 DROP COLUMN b; SELECT sql FROM sqlite_schema; ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 32 no such table: x1 stmt 32 ok diff --git a/parser/testdata/between.test b/parser/testdata/between.test index e0ee93a..946ca11 100644 --- a/parser/testdata/between.test +++ b/parser/testdata/between.test @@ -4,7 +4,7 @@ INSERT INTO t1 VALUES('0', 'abc'); ---- stmt 0 ok -stmt 50 err 1 -1 no such table: t1 +stmt 50 err 1 -1 87 no such table: t1 ==== between-3.0 CREATE TABLE t1(x, y); @@ -13,16 +13,16 @@ stmt 50 err 1 -1 no such table: t1 CREATE TABLE t2(a, b); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 -stmt 53 err 1 -1 no such table: t1 +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 84 no such table: t1 stmt 84 ok ==== between-3.1 SELECT * FROM t1 LEFT JOIN t2 ON (x BETWEEN 1 AND 3); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 56 no such table: t1 ==== between-3.2 SELECT * FROM t1 LEFT JOIN t2 ON (x BETWEEN 5 AND 7); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 56 no such table: t1 diff --git a/parser/testdata/e_createtable.test b/parser/testdata/e_createtable.test index 3e172b5..3f31696 100644 --- a/parser/testdata/e_createtable.test +++ b/parser/testdata/e_createtable.test @@ -16,11 +16,11 @@ stmt 29 ok CREATE VIEW auxa.view1 AS SELECT * FROM tbl1; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 +stmt 25 err 1 -1 53 no such table: main.t1 stmt 53 ok -stmt 92 err 1 109 unknown database auxa -stmt 125 err 1 141 unknown database auxa -stmt 162 err 1 177 unknown database auxa +stmt 92 err 1 109 119 unknown database auxa +stmt 125 err 1 141 162 unknown database auxa +stmt 162 err 1 177 210 unknown database auxa ==== e_createtable-1.8.0 CREATE TABLE t1(x, y); @@ -31,11 +31,11 @@ stmt 162 err 1 177 unknown database auxa CREATE VIEW auxa.view1 AS SELECT * FROM tbl1; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 +stmt 25 err 1 -1 53 no such table: main.t1 stmt 53 ok -stmt 92 err 1 108 unknown database auxa -stmt 124 err 1 140 unknown database auxa -stmt 161 err 1 176 unknown database auxa +stmt 92 err 1 108 118 unknown database auxa +stmt 124 err 1 140 161 unknown database auxa +stmt 161 err 1 176 209 unknown database auxa ==== e_createtable-1.10.0 CREATE TABLE t1(x, y); @@ -49,9 +49,9 @@ stmt 161 err 1 176 unknown database auxa END; ---- stmt 0 ok -stmt 25 err 1 41 unknown database auxb -stmt 55 err 1 -1 no such table: main.t1 -stmt 123 err 1 141 unknown database auxb +stmt 25 err 1 41 49 unknown database auxb +stmt 55 err 1 -1 102 no such table: main.t1 +stmt 123 err 1 141 174 unknown database auxb ==== e_createtable-1.11.0 CREATE TABLE t1(a, b); @@ -61,8 +61,8 @@ stmt 123 err 1 141 unknown database auxb ---- stmt 0 ok stmt 25 ok -stmt 50 err 1 66 unknown database auxa -stmt 80 err 1 96 unknown database auxa +stmt 50 err 1 66 74 unknown database auxa +stmt 80 err 1 96 104 unknown database auxa ==== e_createtable-1.11.1.1 SELECT * FROM t1; @@ -70,50 +70,50 @@ stmt 80 err 1 96 unknown database auxa SELECT * FROM t3; SELECT * FROM t4; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 20 err 1 -1 no such table: t2 -stmt 40 err 1 -1 no such table: t3 -stmt 60 err 1 -1 no such table: t4 +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 40 no such table: t2 +stmt 40 err 1 -1 60 no such table: t3 +stmt 60 err 1 -1 80 no such table: t4 ==== e_createtable-1.11.1.2 DROP TABLE t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 15 no such table: t1 ==== e_createtable-1.11.1.3 SELECT * FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 21 no such table: t1 ==== e_createtable-1.11.1.4 DROP TABLE t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 15 no such table: t3 ==== e_createtable-1.11.1.5 SELECT * FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 21 no such table: t3 ==== e_createtable-1.11.2.1 SELECT name FROM sqlite_master; SELECT name FROM auxa.sqlite_master; ---- stmt 0 ok -stmt 34 err 1 -1 no such table: auxa.sqlite_master +stmt 34 err 1 -1 73 no such table: auxa.sqlite_master ==== e_createtable-1.11.2.2 DROP TABLE t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 15 no such table: t2 ==== e_createtable-1.11.2.3 DROP TABLE t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 15 no such table: t4 ==== e_createtable-1.11.2.4 SELECT name FROM sqlite_master; SELECT name FROM auxa.sqlite_master; ---- stmt 0 ok -stmt 34 err 1 -1 no such table: auxa.sqlite_master +stmt 34 err 1 -1 73 no such table: auxa.sqlite_master ==== e_createtable-2.0 CREATE TABLE t1(a, b, c); @@ -142,26 +142,26 @@ stmt 337 ok INSERT INTO x3 DEFAULT VALUES; INSERT INTO x4 DEFAULT VALUES; ---- -stmt 0 err 1 -1 no such table: x1 -stmt 33 err 1 -1 no such table: x2 -stmt 66 err 1 -1 no such table: x3 -stmt 99 err 1 -1 no such table: x4 +stmt 0 err 1 -1 33 no such table: x1 +stmt 33 err 1 -1 66 no such table: x2 +stmt 66 err 1 -1 99 no such table: x3 +stmt 99 err 1 -1 132 no such table: x4 ==== e_createtable-2.3.2.2 SELECT * FROM x1 ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 18 no such table: x1 ==== e_createtable-2.3.2.3 SELECT * FROM x2 ---- -stmt 0 err 1 -1 no such table: x2 +stmt 0 err 1 -1 18 no such table: x2 ==== e_createtable-2.3.2.4 SELECT * FROM x3 ---- -stmt 0 err 1 -1 no such table: x3 +stmt 0 err 1 -1 18 no such table: x3 ==== e_createtable-2.3.2.5 SELECT * FROM x4 ---- -stmt 0 err 1 -1 no such table: x4 +stmt 0 err 1 -1 18 no such table: x4 ==== e_createtable-2.4.0 CREATE TABLE t1(x, y); @@ -170,9 +170,9 @@ stmt 0 err 1 -1 no such table: x4 INSERT INTO t1 VALUES('iii', 'three'); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 64 err 1 -1 no such table: t1 -stmt 103 err 1 -1 no such table: t1 +stmt 25 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 103 no such table: t1 +stmt 103 err 1 -1 144 no such table: t1 ==== e_createtable-3.1.0 CREATE TABLE t1(x VARCHAR(10), y INTEGER, z DOUBLE); @@ -187,20 +187,20 @@ stmt 104 ok INSERT INTO t1 VALUES(14, 'quite a lengthy string', X'555655'); SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 66 err 1 -1 no such table: t1 +stmt 0 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 86 no such table: t1 ==== e_createtable-3.1.2 INSERT INTO t2 VALUES('not a datetime', 13, '12:41:59'); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t2 -stmt 59 err 1 -1 no such table: t2 +stmt 0 err 1 -1 59 no such table: t2 +stmt 59 err 1 -1 79 no such table: t2 ==== e_createtable-3.2.0 DELETE FROM t1; DELETE FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 16 err 1 -1 no such table: t2 +stmt 0 err 1 -1 16 no such table: t1 +stmt 16 err 1 -1 32 no such table: t2 ==== e_createtable-3.3.1 CREATE TABLE t4( @@ -234,8 +234,8 @@ stmt 0 ok INSERT INTO t5 DEFAULT VALUES; SELECT quote(a), quote(b), quote(c), quote(d), quote(e) FROM t5; ---- -stmt 0 err 1 -1 no such table: t5 -stmt 33 err 1 -1 no such table: t5 +stmt 0 err 1 -1 33 no such table: t5 +stmt 33 err 1 -1 100 no such table: t5 ==== e_createtable-3.7.1 CREATE TABLE t6(a DEFAULT ( nextint() ), b DEFAULT ( nextint() )); @@ -246,22 +246,22 @@ stmt 0 ok INSERT INTO t6 DEFAULT VALUES; SELECT quote(a), quote(b) FROM t6; ---- -stmt 0 err 1 -1 no such table: t6 -stmt 33 err 1 -1 no such table: t6 +stmt 0 err 1 -1 33 no such table: t6 +stmt 33 err 1 -1 70 no such table: t6 ==== e_createtable-3.7.3 INSERT INTO t6(a) VALUES('X'); SELECT quote(a), quote(b) FROM t6; ---- -stmt 0 err 1 -1 no such table: t6 -stmt 33 err 1 -1 no such table: t6 +stmt 0 err 1 -1 33 no such table: t6 +stmt 33 err 1 -1 70 no such table: t6 ==== e_createtable-3.7.4 INSERT INTO t6(a) SELECT a FROM t6; SELECT quote(a), quote(b) FROM t6; ---- -stmt 0 err 1 -1 no such table: t6 -stmt 38 err 1 -1 no such table: t6 +stmt 0 err 1 -1 38 no such table: t6 +stmt 38 err 1 -1 75 no such table: t6 ==== e_createtable-3.8.1 CREATE TABLE t7( @@ -276,8 +276,8 @@ stmt 0 ok INSERT INTO t7 DEFAULT VALUES; SELECT quote(a), quote(b), quote(c) FROM t7; ---- -stmt 0 err 1 -1 no such table: t7 -stmt 33 err 1 -1 no such table: t7 +stmt 0 err 1 -1 33 no such table: t7 +stmt 33 err 1 -1 80 no such table: t7 ==== e_createtable-3-9.1 CREATE TABLE t8(a COLLATE nocase, b COLLATE rtrim, c COLLATE binary, d); @@ -287,22 +287,22 @@ stmt 33 err 1 -1 no such table: t7 INSERT INTO t8 VALUES('ABC', 'ABC', 'ABC', 'ABC'); ---- stmt 0 ok -stmt 75 err 1 -1 no such table: t8 -stmt 134 err 1 -1 no such table: t8 -stmt 195 err 1 -1 no such table: t8 -stmt 256 err 1 -1 no such table: t8 +stmt 75 err 1 -1 134 no such table: t8 +stmt 134 err 1 -1 195 no such table: t8 +stmt 195 err 1 -1 256 no such table: t8 +stmt 256 err 1 -1 315 no such table: t8 ==== e_createtable-3.11.4 CREATE TABLE t12(a, b, c); INSERT INTO t12 VALUES(randomblob(30000),randomblob(30000),randomblob(30000)); ---- stmt 0 ok -stmt 29 err 1 -1 no such table: t12 +stmt 29 err 1 -1 110 no such table: t12 ==== e_createtable-3.11.5 INSERT INTO t12 VALUES(randomblob(30001),randomblob(30000),randomblob(30000)); ---- -stmt 0 err 1 -1 no such table: t12 +stmt 0 err 1 -1 81 no such table: t12 ==== 4.1.3 CREATE TABLE t6(a, b); --ok @@ -312,7 +312,7 @@ stmt 0 ok CREATE TABLE t7(a, b) WITHOUT ROWID; --Error, no PRIMARY KEY ---- -stmt 0 err 1 -1 PRIMARY KEY missing on table t7 +stmt 0 err 1 -1 39 PRIMARY KEY missing on table t7 ==== 4.3.0 CREATE TABLE t1(x PRIMARY KEY, y); @@ -328,15 +328,15 @@ stmt 0 err 1 -1 PRIMARY KEY missing on table t7 INSERT INTO t2 VALUES(X'ABCDEF', 'three'); ---- stmt 0 ok -stmt 37 err 1 -1 no such table: t1 -stmt 82 err 1 -1 no such table: t1 -stmt 126 err 1 -1 no such table: t1 -stmt 170 err 1 -1 no such table: t1 +stmt 37 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 170 no such table: t1 +stmt 170 err 1 -1 216 no such table: t1 stmt 216 ok -stmt 261 err 1 -1 no such table: t2 -stmt 306 err 1 -1 no such table: t2 -stmt 350 err 1 -1 no such table: t2 -stmt 394 err 1 -1 no such table: t2 +stmt 261 err 1 -1 306 no such table: t2 +stmt 306 err 1 -1 350 no such table: t2 +stmt 350 err 1 -1 394 no such table: t2 +stmt 394 err 1 -1 440 no such table: t2 ==== 4.5.2 CREATE TABLE t3(s, u INTEGER PRIMARY KEY, v); @@ -345,44 +345,44 @@ stmt 394 err 1 -1 no such table: t2 SELECT u FROM t3; ---- stmt 0 ok -stmt 48 err 1 -1 no such table: t3 -stmt 85 err 1 -1 no such table: t3 -stmt 126 err 1 -1 no such table: t3 +stmt 48 err 1 -1 85 no such table: t3 +stmt 85 err 1 -1 126 no such table: t3 +stmt 126 err 1 -1 146 no such table: t3 ==== 4.5.3 INSERT INTO t3 VALUES(2, 5, 3); UPDATE t3 SET u = NULL WHERE s = 2; ---- -stmt 0 err 1 -1 no such table: t3 -stmt 34 err 1 -1 no such table: t3 +stmt 0 err 1 -1 34 no such table: t3 +stmt 34 err 1 -1 72 no such table: t3 ==== 4.5.4 CREATE TABLE t4(s, u INT PRIMARY KEY, v) WITHOUT ROWID; INSERT INTO t4 VALUES(1, NULL, 2); ---- stmt 0 ok -stmt 58 err 1 -1 no such table: t4 +stmt 58 err 1 -1 95 no such table: t4 ==== 4.5.5 CREATE TABLE t5(s, u INT PRIMARY KEY NOT NULL, v); INSERT INTO t5 VALUES(1, NULL, 2); ---- stmt 0 ok -stmt 53 err 1 -1 no such table: t5 +stmt 53 err 1 -1 90 no such table: t5 ==== 4.5.6 CREATE TABLE t6(s INT, u INT PRIMARY KEY, v INT) STRICT; INSERT INTO t6 VALUES(1, NULL, 2); ---- stmt 0 ok -stmt 59 err 1 -1 no such table: t6 +stmt 59 err 1 -1 96 no such table: t6 ==== 4.5.7 CREATE TABLE t7(s INT, u INT PRIMARY KEY NOT NULL, v INT) STRICT; INSERT INTO t7 VALUES(1, NULL, 2); ---- stmt 0 ok -stmt 68 err 1 -1 no such table: t7 +stmt 68 err 1 -1 105 no such table: t7 ==== 4.7.0 INSERT INTO t1 VALUES(1, 2); @@ -394,13 +394,13 @@ stmt 68 err 1 -1 no such table: t7 INSERT INTO t4 VALUES('xyx', 2, 1); INSERT INTO t4 VALUES('uvw', 1, 1); ---- -stmt 0 err 1 -1 no such table: t1 -stmt 31 err 1 -1 no such table: t1 -stmt 66 err 1 -1 no such table: t1 -stmt 117 err 1 -1 no such table: t1 -stmt 164 err 1 -1 no such table: t4 -stmt 203 err 1 -1 no such table: t4 -stmt 241 err 1 -1 no such table: t4 +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 117 no such table: t1 +stmt 117 err 1 -1 164 no such table: t1 +stmt 164 err 1 -1 203 no such table: t4 +stmt 203 err 1 -1 241 no such table: t4 +stmt 241 err 1 -1 279 no such table: t4 ==== 4.10.0 CREATE TABLE t1(a, b PRIMARY KEY); @@ -424,14 +424,14 @@ stmt 37 ok ---- stmt 0 ok stmt 51 ok -stmt 103 err 1 -1 no such table: x1 -stmt 139 err 1 -1 no such table: x1 -stmt 175 err 1 -1 no such table: t1 +stmt 103 err 1 -1 139 no such table: x1 +stmt 139 err 1 -1 175 no such table: x1 +stmt 175 err 1 -1 210 no such table: t1 stmt 210 ok stmt 250 ok -stmt 290 err 1 -1 no such table: x2 -stmt 324 err 1 -1 no such table: x2 -stmt 358 err 1 -1 no such table: t2 +stmt 290 err 1 -1 324 no such table: x2 +stmt 324 err 1 -1 358 no such table: x2 +stmt 358 err 1 -1 393 no such table: t2 ==== 4.14.0 INSERT INTO t1 VALUES('x', 'y'); @@ -443,12 +443,12 @@ stmt 358 err 1 -1 no such table: t2 INSERT INTO t3 VALUES('x', 'y', 'z'); INSERT INTO t3 VALUES(1, 2, 3); ---- -stmt 0 err 1 -1 no such table: t1 -stmt 35 err 1 -1 no such table: t1 -stmt 71 err 1 -1 no such table: t2 -stmt 107 err 1 -1 no such table: t2 -stmt 143 err 1 -1 no such table: t3 -stmt 184 err 1 -1 no such table: t3 +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 71 no such table: t1 +stmt 71 err 1 -1 107 no such table: t2 +stmt 107 err 1 -1 143 no such table: t2 +stmt 143 err 1 -1 184 no such table: t3 +stmt 184 err 1 -1 218 no such table: t3 ==== 4.15.0 CREATE TABLE t1_ab(a PRIMARY KEY ON CONFLICT ABORT, b); @@ -502,39 +502,39 @@ stmt 119 ok stmt 178 ok stmt 235 ok stmt 295 ok -stmt 335 err 1 -1 no such table: t1_ab -stmt 374 err 1 -1 no such table: t1_ab -stmt 412 err 1 -1 no such table: t1_ro -stmt 453 err 1 -1 no such table: t1_ig -stmt 494 err 1 -1 no such table: t1_fa -stmt 535 err 1 -1 no such table: t1_re -stmt 576 err 1 -1 no such table: t1_xx +stmt 335 err 1 -1 374 no such table: t1_ab +stmt 374 err 1 -1 412 no such table: t1_ab +stmt 412 err 1 -1 453 no such table: t1_ro +stmt 453 err 1 -1 494 no such table: t1_ig +stmt 494 err 1 -1 535 no such table: t1_fa +stmt 535 err 1 -1 576 no such table: t1_re +stmt 576 err 1 -1 617 no such table: t1_xx stmt 617 ok stmt 673 ok stmt 731 ok stmt 787 ok stmt 841 ok stmt 898 ok -stmt 935 err 1 -1 no such table: t2_ab -stmt 974 err 1 -1 no such table: t2_ab -stmt 1012 err 1 -1 no such table: t2_ro -stmt 1053 err 1 -1 no such table: t2_ig -stmt 1094 err 1 -1 no such table: t2_fa -stmt 1135 err 1 -1 no such table: t2_re -stmt 1176 err 1 -1 no such table: t2_xx +stmt 935 err 1 -1 974 no such table: t2_ab +stmt 974 err 1 -1 1012 no such table: t2_ab +stmt 1012 err 1 -1 1053 no such table: t2_ro +stmt 1053 err 1 -1 1094 no such table: t2_ig +stmt 1094 err 1 -1 1135 no such table: t2_fa +stmt 1135 err 1 -1 1176 no such table: t2_re +stmt 1176 err 1 -1 1217 no such table: t2_xx stmt 1217 ok stmt 1278 ok stmt 1341 ok stmt 1402 ok stmt 1461 ok stmt 1523 ok -stmt 1565 err 1 -1 no such table: t3_ab -stmt 1604 err 1 -1 no such table: t3_ab -stmt 1642 err 1 -1 no such table: t3_ro -stmt 1683 err 1 -1 no such table: t3_ig -stmt 1724 err 1 -1 no such table: t3_fa -stmt 1765 err 1 -1 no such table: t3_re -stmt 1806 err 1 -1 no such table: t3_xx +stmt 1565 err 1 -1 1604 no such table: t3_ab +stmt 1604 err 1 -1 1642 no such table: t3_ab +stmt 1642 err 1 -1 1683 no such table: t3_ro +stmt 1683 err 1 -1 1724 no such table: t3_ig +stmt 1724 err 1 -1 1765 no such table: t3_fa +stmt 1765 err 1 -1 1806 no such table: t3_re +stmt 1806 err 1 -1 1847 no such table: t3_xx ==== 4.18.1 CREATE TABLE t4(a, b CHECK (b!=10)); @@ -542,22 +542,22 @@ stmt 1806 err 1 -1 no such table: t3_xx INSERT INTO t4 VALUES(3, 4); ---- stmt 0 ok -stmt 39 err 1 -1 no such table: t4 -stmt 70 err 1 -1 no such table: t4 +stmt 39 err 1 -1 70 no such table: t4 +stmt 70 err 1 -1 101 no such table: t4 ==== 4.18.2 BEGIN; INSERT INTO t4 VALUES(5, 6) ---- stmt 0 ok -stmt 7 err 1 -1 no such table: t4 +stmt 7 err 1 -1 36 no such table: t4 ==== 4.18.3 INSERT INTO t4 SELECT a+4, b+4 FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 43 no such table: t4 ==== 4.18.5 SELECT * FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 18 no such table: t4 ==== 4.19.0 CREATE TABLE t5(a NOT NULL ON CONFLICT IGNORE, b NOT NULL ON CONFLICT ABORT); @@ -566,19 +566,19 @@ stmt 0 ok ==== 4.19.1 INSERT INTO t5 VALUES(NULL, 'not null') ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 41 no such table: t5 ==== 4.19.2 SELECT * FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 18 no such table: t5 ==== 4.19.3 INSERT INTO t5 VALUES('not null', NULL) ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 41 no such table: t5 ==== 4.19.4 SELECT * FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 18 no such table: t5 ==== 5.1.0 CREATE TABLE t1(x, y); @@ -587,9 +587,9 @@ stmt 0 err 1 -1 no such table: t5 INSERT INTO t1 VALUES('three', 'third'); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 66 err 1 -1 no such table: t1 -stmt 108 err 1 -1 no such table: t1 +stmt 25 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 151 no such table: t1 ==== 5.2.0 CREATE TABLE t2(oid, b); @@ -608,12 +608,12 @@ stmt 108 err 1 -1 no such table: t1 stmt 0 ok stmt 27 ok stmt 58 ok -stmt 90 err 1 -1 no such table: t2 -stmt 130 err 1 -1 no such table: t2 -stmt 172 err 1 -1 no such table: t3 -stmt 213 err 1 -1 no such table: t3 -stmt 256 err 1 -1 no such table: t4 -stmt 307 err 1 -1 no such table: t4 +stmt 90 err 1 -1 130 no such table: t2 +stmt 130 err 1 -1 172 no such table: t2 +stmt 172 err 1 -1 213 no such table: t3 +stmt 213 err 1 -1 256 no such table: t3 +stmt 256 err 1 -1 307 no such table: t4 +stmt 307 err 1 -1 366 no such table: t4 ==== 5.4.1 CREATE TABLE t6(pk INT primary key); @@ -636,34 +636,34 @@ stmt 130 ok SELECT typeof(pk), pk FROM t8; SELECT typeof(pk), pk FROM t9; ---- -stmt 0 err 1 -1 no such table: t6 -stmt 32 err 1 -1 no such table: t7 -stmt 64 err 1 -1 no such table: t8 -stmt 96 err 1 -1 no such table: t9 -stmt 128 err 1 -1 no such table: t6 -stmt 161 err 1 -1 no such table: t7 -stmt 194 err 1 -1 no such table: t8 -stmt 227 err 1 -1 no such table: t9 +stmt 0 err 1 -1 32 no such table: t6 +stmt 32 err 1 -1 64 no such table: t7 +stmt 64 err 1 -1 96 no such table: t8 +stmt 96 err 1 -1 128 no such table: t9 +stmt 128 err 1 -1 161 no such table: t6 +stmt 161 err 1 -1 194 no such table: t7 +stmt 194 err 1 -1 227 no such table: t8 +stmt 227 err 1 -1 260 no such table: t9 ==== 5.4.4.1 INSERT INTO t6 VALUES(2) ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 29 no such table: t6 ==== 5.4.4.2 INSERT INTO t7 VALUES(2) ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 29 no such table: t7 ==== 5.4.4.3 INSERT INTO t8 VALUES(2) ---- -stmt 0 err 1 -1 no such table: t8 +stmt 0 err 1 -1 29 no such table: t8 ==== 5.4.4.4 INSERT INTO t9 VALUES(2) ---- -stmt 0 err 1 -1 no such table: t9 +stmt 0 err 1 -1 29 no such table: t9 ==== 5.7.0 CREATE TABLE t10(a, b); @@ -673,21 +673,21 @@ stmt 0 err 1 -1 no such table: t9 INSERT INTO t11 VALUES('ten', 10); ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t10 +stmt 26 err 1 -1 63 no such table: t10 stmt 63 ok -stmt 110 err 1 -1 no such table: t11 +stmt 110 err 1 -1 147 no such table: t11 ==== 5.9.0 CREATE TABLE t12(x INTEGER PRIMARY KEY, y); INSERT INTO t12 VALUES(5, 'five'); ---- stmt 0 ok -stmt 46 err 1 -1 no such table: t12 +stmt 46 err 1 -1 83 no such table: t12 ==== 5.10.0 DELETE FROM t12 ---- -stmt 0 err 1 -1 no such table: t12 +stmt 0 err 1 -1 17 no such table: t12 ==== 5.11.0 DELETE FROM t12 ---- -stmt 0 err 1 -1 no such table: t12 +stmt 0 err 1 -1 17 no such table: t12 diff --git a/parser/testdata/e_delete.test b/parser/testdata/e_delete.test index 78d1eb1..6e9f187 100644 --- a/parser/testdata/e_delete.test +++ b/parser/testdata/e_delete.test @@ -4,7 +4,7 @@ CREATE INDEX i1 ON t1(a); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 +stmt 25 err 1 -1 53 no such table: main.t1 ==== e_delete-2.0 ATTACH 'test.db2' AS aux; @@ -27,32 +27,32 @@ stmt 25 err 1 -1 no such table: main.t1 stmt 0 ok stmt 28 ok stmt 57 ok -stmt 88 err 1 -1 no such table: temp.t7 +stmt 88 err 1 -1 124 no such table: temp.t7 stmt 124 ok -stmt 154 err 1 -1 no such table: main.t7 -stmt 190 err 1 206 unknown database aux -stmt 219 err 1 -1 no such table: aux.t7 -stmt 255 err 1 271 unknown database aux2 -stmt 285 err 1 -1 no such table: aux2.t7 +stmt 154 err 1 -1 190 no such table: main.t7 +stmt 190 err 1 206 213 unknown database aux +stmt 219 err 1 -1 255 no such table: aux.t7 +stmt 255 err 1 271 279 unknown database aux2 +stmt 285 err 1 -1 321 no such table: aux2.t7 stmt 321 ok -stmt 352 err 1 -1 no such table: main.t8 -stmt 388 err 1 404 unknown database aux -stmt 417 err 1 -1 no such table: aux.t8 -stmt 453 err 1 469 unknown database aux2 -stmt 483 err 1 -1 no such table: aux2.t8 -stmt 519 err 1 536 unknown database aux -stmt 549 err 1 -1 no such table: aux.t9 -stmt 585 err 1 601 unknown database aux2 -stmt 615 err 1 -1 no such table: aux2.t9 -stmt 651 err 1 668 unknown database aux2 -stmt 683 err 1 -1 no such table: aux2.t10 +stmt 352 err 1 -1 388 no such table: main.t8 +stmt 388 err 1 404 411 unknown database aux +stmt 417 err 1 -1 453 no such table: aux.t8 +stmt 453 err 1 469 477 unknown database aux2 +stmt 483 err 1 -1 519 no such table: aux2.t8 +stmt 519 err 1 536 543 unknown database aux +stmt 549 err 1 -1 585 no such table: aux.t9 +stmt 585 err 1 601 609 unknown database aux2 +stmt 615 err 1 -1 651 no such table: aux2.t9 +stmt 651 err 1 668 677 unknown database aux2 +stmt 683 err 1 -1 719 no such table: aux2.t10 ==== e_delete-2.2.X DROP TRIGGER main.tr1; DROP TRIGGER aux.tr2; ---- -stmt 0 err 1 -1 no such trigger: main.tr1 -stmt 25 err 1 -1 no such trigger: aux.tr2 +stmt 0 err 1 -1 25 no such trigger: main.tr1 +stmt 25 err 1 -1 49 no such trigger: aux.tr2 ==== e_delete-2.3.0 DROP TRIGGER aux.tr1; @@ -62,12 +62,12 @@ stmt 25 err 1 -1 no such trigger: aux.tr2 INSERT INTO aux.t9 VALUES(1, 2); INSERT INTO main.t7 VALUES(3, 4); ---- -stmt 0 err 1 -1 no such trigger: aux.tr1 -stmt 24 err 1 -1 no such trigger: main.tr1 -stmt 49 err 1 -1 no such table: main.t8 -stmt 84 err 1 -1 no such table: aux.t8 -stmt 118 err 1 -1 no such table: aux.t9 -stmt 153 err 1 -1 no such table: main.t7 +stmt 0 err 1 -1 24 no such trigger: aux.tr1 +stmt 24 err 1 -1 49 no such trigger: main.tr1 +stmt 49 err 1 -1 84 no such table: main.t8 +stmt 84 err 1 -1 118 no such table: aux.t8 +stmt 118 err 1 -1 153 no such table: aux.t9 +stmt 153 err 1 -1 189 no such table: main.t7 ==== e_delete-2.3.1 SELECT count(*) FROM temp.t7 UNION ALL SELECT count(*) FROM main.t7 UNION ALL @@ -80,10 +80,10 @@ stmt 153 err 1 -1 no such table: main.t7 SELECT count(*) FROM aux2.t10; ---- -stmt 0 err 1 -1 no such table: aux2.t7 -stmt 151 err 1 -1 no such table: aux2.t8 -stmt 265 err 1 -1 no such table: aux2.t9 -stmt 337 err 1 -1 no such table: aux2.t10 +stmt 0 err 1 -1 151 no such table: aux2.t7 +stmt 151 err 1 -1 265 no such table: aux2.t8 +stmt 265 err 1 -1 337 no such table: aux2.t9 +stmt 337 err 1 -1 371 no such table: aux2.t10 ==== e_delete-2.3.2 CREATE TRIGGER temp.tr1 AFTER INSERT ON t7 BEGIN @@ -94,8 +94,8 @@ stmt 337 err 1 -1 no such table: aux2.t10 END; INSERT INTO temp.t7 VALUES('hello', 'world'); ---- -stmt 0 err 1 -1 no such table: t7 -stmt 139 err 1 -1 no such table: temp.t7 +stmt 0 err 1 -1 51 no such table: t7 +stmt 139 err 1 -1 187 no such table: temp.t7 ==== e_delete-2.3.3 SELECT count(*) FROM temp.t7 UNION ALL SELECT count(*) FROM main.t7 UNION ALL @@ -108,12 +108,12 @@ stmt 139 err 1 -1 no such table: temp.t7 SELECT count(*) FROM aux2.t10; ---- -stmt 0 err 1 -1 no such table: aux2.t7 -stmt 151 err 1 -1 no such table: aux2.t8 -stmt 265 err 1 -1 no such table: aux2.t9 -stmt 337 err 1 -1 no such table: aux2.t10 +stmt 0 err 1 -1 151 no such table: aux2.t7 +stmt 151 err 1 -1 265 no such table: aux2.t8 +stmt 265 err 1 -1 337 no such table: aux2.t9 +stmt 337 err 1 -1 371 no such table: aux2.t10 ==== e_delete-2.4.0 CREATE INDEX i8 ON t8(a, b); ---- -stmt 0 err 1 -1 no such table: main.t8 +stmt 0 err 1 -1 31 no such table: main.t8 diff --git a/parser/testdata/e_expr.test b/parser/testdata/e_expr.test index 02d31a2..ca84cfc 100644 --- a/parser/testdata/e_expr.test +++ b/parser/testdata/e_expr.test @@ -131,7 +131,7 @@ stmt 0 ok ==== e_expr-9.1 SELECT 'abcd' < 'bbbb' COLLATE reverse ---- -stmt 0 err 1 -1 no such collation sequence: reverse +stmt 0 err 1 -1 44 no such collation sequence: reverse ==== e_expr-9.2 SELECT ('abcd' < 'bbbb') COLLATE reverse ---- @@ -139,7 +139,7 @@ stmt 0 ok ==== e_expr-9.3 SELECT 'abcd' <= 'bbbb' COLLATE reverse ---- -stmt 0 err 1 -1 no such collation sequence: reverse +stmt 0 err 1 -1 44 no such collation sequence: reverse ==== e_expr-9.4 SELECT ('abcd' <= 'bbbb') COLLATE reverse ---- @@ -147,7 +147,7 @@ stmt 0 ok ==== e_expr-9.5 SELECT 'abcd' > 'bbbb' COLLATE reverse ---- -stmt 0 err 1 -1 no such collation sequence: reverse +stmt 0 err 1 -1 44 no such collation sequence: reverse ==== e_expr-9.6 SELECT ('abcd' > 'bbbb') COLLATE reverse ---- @@ -155,7 +155,7 @@ stmt 0 ok ==== e_expr-9.7 SELECT 'abcd' >= 'bbbb' COLLATE reverse ---- -stmt 0 err 1 -1 no such collation sequence: reverse +stmt 0 err 1 -1 44 no such collation sequence: reverse ==== e_expr-9.8 SELECT ('abcd' >= 'bbbb') COLLATE reverse ---- @@ -226,25 +226,25 @@ stmt 0 ok INSERT INTO t24 VALUES('ccc', 3); ---- stmt 0 ok -stmt 42 err 1 -1 no such table: t24 -stmt 78 err 1 -1 no such table: t24 -stmt 114 err 1 -1 no such table: t24 +stmt 42 err 1 -1 78 no such table: t24 +stmt 78 err 1 -1 114 no such table: t24 +stmt 114 err 1 -1 150 no such table: t24 ==== e_expr-9.25 SELECT 'BBB' = a FROM t24 ---- -stmt 0 err 1 -1 no such table: t24 +stmt 0 err 1 -1 27 no such table: t24 ==== e_expr-9.25.dup1 SELECT a = 'BBB' FROM t24 ---- -stmt 0 err 1 -1 no such table: t24 +stmt 0 err 1 -1 27 no such table: t24 ==== e_expr-9.25.dup2 SELECT 'BBB' = a COLLATE binary FROM t24 ---- -stmt 0 err 1 -1 no such table: t24 +stmt 0 err 1 -1 42 no such table: t24 ==== e_expr-9.25.dup3 SELECT a COLLATE binary = 'BBB' FROM t24 ---- -stmt 0 err 1 -1 no such table: t24 +stmt 0 err 1 -1 42 no such table: t24 ==== e_expr-10.1.1 SELECT typeof(5) ---- @@ -734,20 +734,20 @@ stmt 0 ok SELECT regexp('abc', 'def') ---- -stmt 0 err 1 13 no such function: regexp +stmt 0 err 1 13 34 no such function: regexp ==== e_expr-18.1.2 SELECT 'abc' REGEXP 'def' ---- -stmt 0 err 1 19 no such function: REGEXP +stmt 0 err 1 19 32 no such function: REGEXP ==== e_expr-18.2.1 SELECT 'abc' REGEXP 'def' ---- -stmt 0 err 1 14 no such function: REGEXP +stmt 0 err 1 14 27 no such function: REGEXP ==== e_expr-18.2.3 SELECT 'X' NOT REGEXP 'Y' ---- -stmt 0 err 1 16 no such function: REGEXP +stmt 0 err 1 16 27 no such function: REGEXP ==== e_expr-19.1.1 SELECT 'abc' MATCH 'def' @@ -782,7 +782,7 @@ stmt 0 ok WHEN var('b') THEN 'B' WHEN var('c') THEN 'C' END ---- -stmt 0 err 1 20 no such function: var +stmt 0 err 1 20 118 no such function: var ==== e_expr-21.1.3 SELECT CASE WHEN var('c') THEN 'C' @@ -791,7 +791,7 @@ stmt 0 err 1 20 no such function: var ELSE 'no result' END ---- -stmt 0 err 1 20 no such function: var +stmt 0 err 1 20 152 no such function: var ==== e_expr-21.2.1 SELECT CASE WHEN var('a') THEN 'A' @@ -800,7 +800,7 @@ stmt 0 err 1 20 no such function: var ELSE 'no result' END ---- -stmt 0 err 1 20 no such function: var +stmt 0 err 1 20 152 no such function: var ==== e_expr-21.2.2 SELECT CASE WHEN var('a') THEN 'A' @@ -809,7 +809,7 @@ stmt 0 err 1 20 no such function: var ELSE 'no result' END ---- -stmt 0 err 1 20 no such function: var +stmt 0 err 1 20 151 no such function: var ==== e_expr-21.2.3 SELECT CASE WHEN var('a') THEN 'A' @@ -818,7 +818,7 @@ stmt 0 err 1 20 no such function: var ELSE 'no result' END ---- -stmt 0 err 1 20 no such function: var +stmt 0 err 1 20 151 no such function: var ==== e_expr-21.3.1 SELECT CASE WHEN var('a') THEN 'A' @@ -827,7 +827,7 @@ stmt 0 err 1 20 no such function: var ELSE 'no result' END ---- -stmt 0 err 1 20 no such function: var +stmt 0 err 1 20 151 no such function: var ==== e_expr-21.3.2 SELECT CASE WHEN var('a') THEN 'A' @@ -835,7 +835,7 @@ stmt 0 err 1 20 no such function: var WHEN var('c') THEN 'C' END ---- -stmt 0 err 1 20 no such function: var +stmt 0 err 1 20 120 no such function: var ==== e_expr-21.4.1a SELECT CASE WHEN NULL THEN 'A' WHEN 1 THEN 'B' END, iif(NULL,8,99); @@ -860,7 +860,7 @@ stmt 0 ok SELECT CASE var('a') WHEN 1 THEN 'A' WHEN 2 THEN 'B' WHEN 3 THEN 'C' END ---- -stmt 0 err 1 15 no such function: var +stmt 0 err 1 15 76 no such function: var ==== e_expr-22.2.1 SELECT CASE 23 WHEN 1 THEN 'A' WHEN 23 THEN 'B' WHEN 23 THEN 'C' END @@ -896,28 +896,28 @@ stmt 0 ok ); INSERT INTO t1 VALUES('abc', 'cba', 55, 34.5); ---- -stmt 0 err 1 -1 no such collation sequence: REVERSE -stmt 113 err 1 -1 no such table: t1 +stmt 0 err 1 -1 82 no such collation sequence: REVERSE +stmt 113 err 1 -1 162 no such table: t1 ==== e_expr-23.1.2 SELECT CASE a WHEN 'xyz' THEN 'A' WHEN 'AbC' THEN 'B' END FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 69 no such table: t1 ==== e_expr-23.1.3 SELECT CASE 'AbC' WHEN 'abc' THEN 'A' WHEN a THEN 'B' END FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 69 no such table: t1 ==== e_expr-23.1.4 SELECT CASE a WHEN b THEN 'A' ELSE 'B' END FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== e_expr-23.1.5 SELECT CASE b WHEN a THEN 'A' ELSE 'B' END FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== e_expr-23.1.6 SELECT CASE 55 WHEN '55' THEN 'A' ELSE 'B' END @@ -927,12 +927,12 @@ stmt 0 ok SELECT CASE c WHEN '55' THEN 'A' ELSE 'B' END FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 57 no such table: t1 ==== e_expr-23.1.8 SELECT CASE '34.5' WHEN d THEN 'A' ELSE 'B' END FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 59 no such table: t1 ==== e_expr-23.1.9 SELECT CASE NULL WHEN NULL THEN 'A' ELSE 'B' END @@ -955,7 +955,7 @@ stmt 0 ok WHEN var('c') THEN 'C' END ---- -stmt 0 err 1 20 no such function: var +stmt 0 err 1 20 121 no such function: var ==== e_expr-25.1.3 SELECT CASE '0' WHEN var('a') THEN 'A' @@ -963,7 +963,7 @@ stmt 0 err 1 20 no such function: var WHEN var('c') THEN 'C' END ---- -stmt 0 err 1 24 no such function: var +stmt 0 err 1 24 133 no such function: var ==== e_expr-26.1.1 CREATE TABLE t2(x, w1, r1, w2, r2, r3); @@ -972,24 +972,24 @@ stmt 0 err 1 24 no such function: var INSERT INTO t2 VALUES(3, 1, 'R1', 2, 'R2', 'R3'); ---- stmt 0 ok -stmt 42 err 1 -1 no such table: t2 -stmt 94 err 1 -1 no such table: t2 -stmt 146 err 1 -1 no such table: t2 +stmt 42 err 1 -1 94 no such table: t2 +stmt 94 err 1 -1 146 no such table: t2 +stmt 146 err 1 -1 198 no such table: t2 ==== e_expr-26.1.2 SELECT CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 69 no such table: t2 ==== e_expr-26.1.3 SELECT CASE WHEN x=w1 THEN r1 WHEN x=w2 THEN r2 ELSE r3 END FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 71 no such table: t2 ==== e_expr-26.1.4 SELECT CASE ceval(x) WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== e_expr-26.1.6 SELECT CASE @@ -998,7 +998,7 @@ stmt 0 err 1 -1 no such table: t2 ELSE r3 END FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== e_expr-27.1.1 CREATE TABLE t3(a TEXT, b REAL, c INTEGER); @@ -1006,8 +1006,8 @@ stmt 0 err 1 -1 no such table: t2 SELECT typeof(a), a, typeof(b), b, typeof(c), c FROM t3; ---- stmt 0 ok -stmt 46 err 1 -1 no such table: t3 -stmt 98 err 1 -1 no such table: t3 +stmt 46 err 1 -1 98 no such table: t3 +stmt 98 err 1 -1 157 no such table: t3 ==== e_expr-27.1.2 SELECT @@ -1046,10 +1046,10 @@ stmt 0 ok INSERT INTO t1 VALUES(NULL, NULL); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 56 err 1 -1 no such table: t1 -stmt 90 err 1 -1 no such table: t1 -stmt 124 err 1 -1 no such table: t1 +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 161 no such table: t1 ==== e_expr-35.0 CREATE TABLE t2(a, b); @@ -1058,9 +1058,9 @@ stmt 124 err 1 -1 no such table: t1 INSERT INTO t2 VALUES(4, 5.0); ---- stmt 0 ok -stmt 27 err 1 -1 no such table: t2 -stmt 68 err 1 -1 no such table: t2 -stmt 110 err 1 -1 no such table: t2 +stmt 27 err 1 -1 68 no such table: t2 +stmt 68 err 1 -1 110 no such table: t2 +stmt 110 err 1 -1 145 no such table: t2 ==== e_expr-36.3.1 CREATE TABLE t4(x, y); @@ -1069,9 +1069,9 @@ stmt 110 err 1 -1 no such table: t2 INSERT INTO t4 VALUES(3, 'three'); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t4 -stmt 60 err 1 -1 no such table: t4 -stmt 95 err 1 -1 no such table: t4 +stmt 25 err 1 -1 60 no such table: t4 +stmt 60 err 1 -1 95 no such table: t4 +stmt 95 err 1 -1 132 no such table: t4 ==== e_expr-37.1 SELECT CASE WHEN NULL THEN 'true' ELSE 'false' END, iif(NULL,'true','false'); diff --git a/parser/testdata/e_insert.metadata.json b/parser/testdata/e_insert.metadata.json index 3e93c70..0967ef4 100644 --- a/parser/testdata/e_insert.metadata.json +++ b/parser/testdata/e_insert.metadata.json @@ -1,5 +1 @@ -{ - "todo": { - "e_insert-5.2.1": true - } -} +{} diff --git a/parser/testdata/e_insert.test b/parser/testdata/e_insert.test index eb0fe13..5459191 100644 --- a/parser/testdata/e_insert.test +++ b/parser/testdata/e_insert.test @@ -13,27 +13,27 @@ stmt 124 ok INSERT INTO a1 VALUES('x', 'y'); ---- -stmt 0 err 1 -1 no such table: a1 +stmt 0 err 1 -1 35 no such table: a1 ==== e_insert-4.1.0 INSERT INTO a4 VALUES(1, 'a'); INSERT INTO a4 VALUES(2, 'a'); INSERT INTO a4 VALUES(3, 'a'); ---- -stmt 0 err 1 -1 no such table: a4 -stmt 33 err 1 -1 no such table: a4 -stmt 66 err 1 -1 no such table: a4 +stmt 0 err 1 -1 33 no such table: a4 +stmt 33 err 1 -1 66 no such table: a4 +stmt 66 err 1 -1 99 no such table: a4 ==== e_insert-generated SELECT * FROM a4 ---- -stmt 0 err 1 -1 no such table: a4 +stmt 0 err 1 -1 17 no such table: a4 ==== e_insert-5.1.1 CREATE TRIGGER AFTER UPDATE ON a1 BEGIN INSERT INTO main.a4 VALUES(new.a, new.b); END; ---- -stmt 0 err 1 -1 no such table: main.a1 +stmt 0 err 1 -1 42 no such table: main.a1 ==== e_insert-5.1.2 CREATE TEMP TABLE IF NOT EXISTS tmptable(a, b); @@ -42,11 +42,11 @@ stmt 0 err 1 -1 no such table: main.a1 END; ---- stmt 0 ok -stmt 50 err 1 -1 no such table: main.a3 +stmt 50 err 1 -1 92 no such table: main.a3 ==== e_insert-5.2.1 CREATE TRIGGER AFTER UPDATE ON a1 BEGIN INSERT INTO a4 DEFAULT VALUES; END; ---- -stmt 0 err 1 -1 no such table: main.a1 +stmt 0 err 1 -1 42 no such table: main.a1 diff --git a/parser/testdata/e_select.test b/parser/testdata/e_select.test index b11a305..73d8560 100644 --- a/parser/testdata/e_select.test +++ b/parser/testdata/e_select.test @@ -19,29 +19,29 @@ INSERT INTO t4 VALUES('b', 2); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 62 err 1 -1 no such table: t1 -stmt 99 err 1 -1 no such table: t1 +stmt 25 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 138 no such table: t1 stmt 138 ok -stmt 164 err 1 -1 no such table: t2 -stmt 199 err 1 -1 no such table: t2 -stmt 235 err 1 -1 no such table: t2 +stmt 164 err 1 -1 199 no such table: t2 +stmt 199 err 1 -1 235 no such table: t2 +stmt 235 err 1 -1 272 no such table: t2 stmt 272 ok -stmt 298 err 1 -1 no such table: t3 -stmt 331 err 1 -1 no such table: t3 +stmt 298 err 1 -1 331 no such table: t3 +stmt 331 err 1 -1 364 no such table: t3 stmt 364 ok -stmt 390 err 1 -1 no such table: t4 -stmt 426 err 1 -1 no such table: t4 +stmt 390 err 1 -1 426 no such table: t4 +stmt 426 err 1 -1 459 no such table: t4 ==== e_select-0.1.4 SELECT count(*) FROM t1, t2 ON (t1.a=t2.a) USING (a) ---- -stmt 0 err 1 46 near "USING": syntax error +stmt 0 err 1 46 51 near "USING": syntax error ==== e_select-0.1.5 SELECT count(*) FROM t1, t2 USING (a) ON (t1.a=t2.a) ---- -stmt 0 err 1 41 near "ON": syntax error +stmt 0 err 1 41 43 near "ON": syntax error ==== e_select-1.2.0 CREATE TABLE xx(x, y); @@ -50,9 +50,9 @@ stmt 0 err 1 41 near "ON": syntax error INSERT INTO xx VALUES(-17.89, 'linguistically'); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: xx -stmt 101 err 1 -1 no such table: xx -stmt 140 err 1 -1 no such table: xx +stmt 25 err 1 -1 101 no such table: xx +stmt 101 err 1 -1 140 no such table: xx +stmt 140 err 1 -1 191 no such table: xx ==== e_select-1.4.0 CREATE TABLE x1(a, b); @@ -78,24 +78,24 @@ stmt 140 err 1 -1 no such table: xx stmt 0 ok stmt 25 ok stmt 53 ok -stmt 84 err 1 -1 no such table: x1 -stmt 155 err 1 -1 no such table: x1 -stmt 195 err 1 -1 no such table: x1 -stmt 245 err 1 -1 no such table: x2 -stmt 318 err 1 -1 no such table: x2 -stmt 360 err 1 -1 no such table: x3 -stmt 444 err 1 -1 no such table: x3 -stmt 515 err 1 -1 no such table: x3 -stmt 575 err 1 -1 no such table: x3 -stmt 636 err 1 -1 no such table: x3 +stmt 84 err 1 -1 155 no such table: x1 +stmt 155 err 1 -1 195 no such table: x1 +stmt 195 err 1 -1 245 no such table: x1 +stmt 245 err 1 -1 318 no such table: x2 +stmt 318 err 1 -1 360 no such table: x2 +stmt 360 err 1 -1 444 no such table: x3 +stmt 444 err 1 -1 515 no such table: x3 +stmt 515 err 1 -1 575 no such table: x3 +stmt 575 err 1 -1 636 no such table: x3 +stmt 636 err 1 -1 693 no such table: x3 ==== e_select-1.4.4.1 SELECT * FROM t1, t2 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 22 no such table: t1 ==== e_select-1.4.4.2 SELECT * FROM t1 AS x, t1 AS y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== e_select-1.6.0 CREATE TABLE t5(a COLLATE nocase, b COLLATE binary); @@ -108,13 +108,13 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t6 VALUES(NULL, NULL); ---- stmt 0 ok -stmt 55 err 1 -1 no such table: t5 -stmt 92 err 1 -1 no such table: t5 -stmt 129 err 1 -1 no such table: t5 +stmt 55 err 1 -1 92 no such table: t5 +stmt 92 err 1 -1 129 no such table: t5 +stmt 129 err 1 -1 166 no such table: t5 stmt 166 ok -stmt 221 err 1 -1 no such table: t6 -stmt 258 err 1 -1 no such table: t6 -stmt 295 err 1 -1 no such table: t6 +stmt 221 err 1 -1 258 no such table: t6 +stmt 258 err 1 -1 295 no such table: t6 +stmt 295 err 1 -1 332 no such table: t6 ==== e_select-1.8.0 CREATE TABLE t7(a, b, c); @@ -128,10 +128,10 @@ stmt 295 err 1 -1 no such table: t6 ---- stmt 0 ok stmt 28 ok -stmt 56 err 1 -1 no such table: t7 -stmt 98 err 1 -1 no such table: t7 -stmt 139 err 1 -1 no such table: t8 -stmt 181 err 1 -1 no such table: t8 +stmt 56 err 1 -1 98 no such table: t7 +stmt 98 err 1 -1 139 no such table: t7 +stmt 139 err 1 -1 181 no such table: t8 +stmt 181 err 1 -1 222 no such table: t8 ==== e_select-1.11.0 CREATE TABLE t10(x, y); @@ -139,8 +139,8 @@ stmt 181 err 1 -1 no such table: t8 INSERT INTO t10 VALUES(0, 'false'); ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t10 -stmt 63 err 1 -1 no such table: t10 +stmt 26 err 1 -1 63 no such table: t10 +stmt 63 err 1 -1 101 no such table: t10 ==== e_select-3.0 CREATE TABLE x1(k, x, y, z); @@ -158,66 +158,66 @@ stmt 63 err 1 -1 no such table: t10 INSERT INTO x2 VALUES(7, 'mistrusted', 'standardized'); ---- stmt 0 ok -stmt 31 err 1 -1 no such table: x1 -stmt 93 err 1 -1 no such table: x1 -stmt 153 err 1 -1 no such table: x1 -stmt 214 err 1 -1 no such table: x1 -stmt 278 err 1 -1 no such table: x1 -stmt 339 err 1 -1 no such table: x1 +stmt 31 err 1 -1 93 no such table: x1 +stmt 93 err 1 -1 153 no such table: x1 +stmt 153 err 1 -1 214 no such table: x1 +stmt 214 err 1 -1 278 no such table: x1 +stmt 278 err 1 -1 339 no such table: x1 +stmt 339 err 1 -1 397 no such table: x1 stmt 397 ok -stmt 427 err 1 -1 no such table: x2 -stmt 470 err 1 -1 no such table: x2 -stmt 512 err 1 -1 no such table: x2 -stmt 562 err 1 -1 no such table: x2 +stmt 427 err 1 -1 470 no such table: x2 +stmt 470 err 1 -1 512 no such table: x2 +stmt 512 err 1 -1 562 no such table: x2 +stmt 562 err 1 -1 620 no such table: x2 ==== e_select-3.1.1 SELECT k FROM x1 WHERE x ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 26 no such table: x1 ==== e_select-3.1.2 SELECT k FROM x1 WHERE y ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 26 no such table: x1 ==== e_select-3.1.3 SELECT k FROM x1 WHERE z ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 26 no such table: x1 ==== e_select-3.1.4 SELECT k FROM x1 WHERE '1'||z ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 31 no such table: x1 ==== e_select-3.1.5 SELECT k FROM x1 WHERE x IS NULL ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 34 no such table: x1 ==== e_select-3.1.6 SELECT k FROM x1 WHERE z - 78.43 ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 34 no such table: x1 ==== e_select-3.2.1a SELECT k FROM x1 LEFT JOIN x2 USING(k) ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 42 no such table: x1 ==== e_select-3.2.1b SELECT k FROM x1 LEFT JOIN x2 USING(k) WHERE x2.k ORDER BY +k ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 65 no such table: x1 ==== e_select-3.2.2 SELECT k FROM x1 LEFT JOIN x2 USING(k) WHERE x2.k IS NULL ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 61 no such table: x1 ==== e_select-3.2.3 SELECT k FROM x1 NATURAL JOIN x2 WHERE x2.k ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 47 no such table: x1 ==== e_select-3.2.4 SELECT k FROM x1 NATURAL JOIN x2 WHERE x2.k-3 ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 49 no such table: x1 ==== e_select-4.0 CREATE TABLE z1(a, b, c); @@ -240,16 +240,16 @@ stmt 0 err 1 -1 no such table: x1 stmt 0 ok stmt 28 ok stmt 53 ok -stmt 78 err 1 -1 no such table: z1 -stmt 131 err 1 -1 no such table: z1 -stmt 170 err 1 -1 no such table: z1 -stmt 220 err 1 -1 no such table: z1 -stmt 267 err 1 -1 no such table: z1 -stmt 315 err 1 -1 no such table: z1 -stmt 357 err 1 -1 no such table: z2 -stmt 393 err 1 -1 no such table: z2 -stmt 425 err 1 -1 no such table: z3 -stmt 475 err 1 -1 no such table: z3 +stmt 78 err 1 -1 131 no such table: z1 +stmt 131 err 1 -1 170 no such table: z1 +stmt 170 err 1 -1 220 no such table: z1 +stmt 220 err 1 -1 267 no such table: z1 +stmt 267 err 1 -1 315 no such table: z1 +stmt 315 err 1 -1 357 no such table: z1 +stmt 357 err 1 -1 393 no such table: z2 +stmt 393 err 1 -1 425 no such table: z2 +stmt 425 err 1 -1 475 no such table: z3 +stmt 475 err 1 -1 512 no such table: z3 ==== e_select-4.6.0 CREATE TABLE a1(one PRIMARY KEY, two); @@ -265,15 +265,15 @@ stmt 475 err 1 -1 no such table: z3 INSERT INTO a2 VALUES(10, 4); ---- stmt 0 ok -stmt 41 err 1 -1 no such table: a1 -stmt 72 err 1 -1 no such table: a1 -stmt 103 err 1 -1 no such table: a1 -stmt 134 err 1 -1 no such table: a1 +stmt 41 err 1 -1 72 no such table: a1 +stmt 72 err 1 -1 103 no such table: a1 +stmt 103 err 1 -1 134 no such table: a1 +stmt 134 err 1 -1 166 no such table: a1 stmt 166 ok -stmt 210 err 1 -1 no such table: a2 -stmt 241 err 1 -1 no such table: a2 -stmt 272 err 1 -1 no such table: a2 -stmt 303 err 1 -1 no such table: a2 +stmt 210 err 1 -1 241 no such table: a2 +stmt 241 err 1 -1 272 no such table: a2 +stmt 272 err 1 -1 303 no such table: a2 +stmt 303 err 1 -1 335 no such table: a2 ==== e_select-4.9.0 CREATE TABLE b1(one PRIMARY KEY, two); @@ -299,24 +299,24 @@ stmt 303 err 1 -1 no such table: a2 INSERT INTO b3 VALUES('dEF', 'dEF'); ---- stmt 0 ok -stmt 41 err 1 -1 no such table: b1 -stmt 74 err 1 -1 no such table: b1 -stmt 107 err 1 -1 no such table: b1 -stmt 140 err 1 -1 no such table: b1 -stmt 173 err 1 -1 no such table: b1 -stmt 206 err 1 -1 no such table: b1 -stmt 239 err 1 -1 no such table: b1 +stmt 41 err 1 -1 74 no such table: b1 +stmt 74 err 1 -1 107 no such table: b1 +stmt 107 err 1 -1 140 no such table: b1 +stmt 140 err 1 -1 173 no such table: b1 +stmt 173 err 1 -1 206 no such table: b1 +stmt 206 err 1 -1 239 no such table: b1 +stmt 239 err 1 -1 272 no such table: b1 stmt 272 ok -stmt 298 err 1 -1 no such table: b2 -stmt 332 err 1 -1 no such table: b2 -stmt 366 err 1 -1 no such table: b2 -stmt 401 err 1 -1 no such table: b2 -stmt 436 err 1 -1 no such table: b2 +stmt 298 err 1 -1 332 no such table: b2 +stmt 332 err 1 -1 366 no such table: b2 +stmt 366 err 1 -1 401 no such table: b2 +stmt 401 err 1 -1 436 no such table: b2 +stmt 436 err 1 -1 471 no such table: b2 stmt 471 ok -stmt 527 err 1 -1 no such table: b3 -stmt 566 err 1 -1 no such table: b3 -stmt 605 err 1 -1 no such table: b3 -stmt 644 err 1 -1 no such table: b3 +stmt 527 err 1 -1 566 no such table: b3 +stmt 566 err 1 -1 605 no such table: b3 +stmt 605 err 1 -1 644 no such table: b3 +stmt 644 err 1 -1 683 no such table: b3 ==== e_select-4.13.0 CREATE TABLE c1(up, down); @@ -347,29 +347,29 @@ stmt 644 err 1 -1 no such table: b3 INSERT INTO c3 VALUES(94, 'plutonium'); ---- stmt 0 ok -stmt 29 err 1 -1 no such table: c1 -stmt 62 err 1 -1 no such table: c1 -stmt 95 err 1 -1 no such table: c1 -stmt 128 err 1 -1 no such table: c1 -stmt 161 err 1 -1 no such table: c1 -stmt 195 err 1 -1 no such table: c1 +stmt 29 err 1 -1 62 no such table: c1 +stmt 62 err 1 -1 95 no such table: c1 +stmt 95 err 1 -1 128 no such table: c1 +stmt 128 err 1 -1 161 no such table: c1 +stmt 161 err 1 -1 195 no such table: c1 +stmt 195 err 1 -1 229 no such table: c1 stmt 229 ok -stmt 255 err 1 -1 no such table: c2 -stmt 286 err 1 -1 no such table: c2 -stmt 317 err 1 -1 no such table: c2 -stmt 348 err 1 -1 no such table: c2 -stmt 379 err 1 -1 no such table: c2 -stmt 411 err 1 -1 no such table: c2 -stmt 443 err 1 -1 no such table: c2 -stmt 475 err 1 -1 no such table: c2 -stmt 507 err 1 -1 no such table: c2 +stmt 255 err 1 -1 286 no such table: c2 +stmt 286 err 1 -1 317 no such table: c2 +stmt 317 err 1 -1 348 no such table: c2 +stmt 348 err 1 -1 379 no such table: c2 +stmt 379 err 1 -1 411 no such table: c2 +stmt 411 err 1 -1 443 no such table: c2 +stmt 443 err 1 -1 475 no such table: c2 +stmt 475 err 1 -1 507 no such table: c2 +stmt 507 err 1 -1 539 no such table: c2 stmt 539 ok -stmt 582 err 1 -1 no such table: c3 -stmt 623 err 1 -1 no such table: c3 -stmt 662 err 1 -1 no such table: c3 -stmt 702 err 1 -1 no such table: c3 -stmt 744 err 1 -1 no such table: c3 -stmt 782 err 1 -1 no such table: c3 +stmt 582 err 1 -1 623 no such table: c3 +stmt 623 err 1 -1 662 no such table: c3 +stmt 662 err 1 -1 702 no such table: c3 +stmt 702 err 1 -1 744 no such table: c3 +stmt 744 err 1 -1 782 no such table: c3 +stmt 782 err 1 -1 824 no such table: c3 ==== e_select-5.1.0 CREATE TABLE h1(a, b); @@ -402,31 +402,31 @@ stmt 782 err 1 -1 no such table: c3 INSERT INTO h3 VALUES(9, '3'); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: h1 -stmt 60 err 1 -1 no such table: h1 -stmt 93 err 1 -1 no such table: h1 -stmt 126 err 1 -1 no such table: h1 -stmt 162 err 1 -1 no such table: h1 -stmt 196 err 1 -1 no such table: h1 +stmt 25 err 1 -1 60 no such table: h1 +stmt 60 err 1 -1 93 no such table: h1 +stmt 93 err 1 -1 126 no such table: h1 +stmt 126 err 1 -1 162 no such table: h1 +stmt 162 err 1 -1 196 no such table: h1 +stmt 196 err 1 -1 230 no such table: h1 stmt 230 ok -stmt 268 err 1 -1 no such table: h2 -stmt 300 err 1 -1 no such table: h2 -stmt 332 err 1 -1 no such table: h2 -stmt 366 err 1 -1 no such table: h2 -stmt 399 err 1 -1 no such table: h2 -stmt 431 err 1 -1 no such table: h2 -stmt 463 err 1 -1 no such table: h2 -stmt 497 err 1 -1 no such table: h2 +stmt 268 err 1 -1 300 no such table: h2 +stmt 300 err 1 -1 332 no such table: h2 +stmt 332 err 1 -1 366 no such table: h2 +stmt 366 err 1 -1 399 no such table: h2 +stmt 399 err 1 -1 431 no such table: h2 +stmt 431 err 1 -1 463 no such table: h2 +stmt 463 err 1 -1 497 no such table: h2 +stmt 497 err 1 -1 530 no such table: h2 stmt 530 ok -stmt 556 err 1 -1 no such table: h3 -stmt 590 err 1 -1 no such table: h3 -stmt 624 err 1 -1 no such table: h3 -stmt 658 err 1 -1 no such table: h3 -stmt 691 err 1 -1 no such table: h3 -stmt 725 err 1 -1 no such table: h3 -stmt 760 err 1 -1 no such table: h3 -stmt 794 err 1 -1 no such table: h3 -stmt 829 err 1 -1 no such table: h3 +stmt 556 err 1 -1 590 no such table: h3 +stmt 590 err 1 -1 624 no such table: h3 +stmt 624 err 1 -1 658 no such table: h3 +stmt 658 err 1 -1 691 no such table: h3 +stmt 691 err 1 -1 725 no such table: h3 +stmt 725 err 1 -1 760 no such table: h3 +stmt 760 err 1 -1 794 no such table: h3 +stmt 794 err 1 -1 829 no such table: h3 +stmt 829 err 1 -1 862 no such table: h3 ==== e_select-7.1.0 CREATE TABLE j1(a, b, c); @@ -457,22 +457,22 @@ stmt 53 ok stmt 0 ok stmt 41 ok stmt 78 ok -stmt 108 err 1 -1 no such table: q1 -stmt 152 err 1 -1 no such table: q1 -stmt 200 err 1 -1 no such table: q1 -stmt 245 err 1 -1 no such table: q2 -stmt 285 err 1 -1 no such table: q2 -stmt 323 err 1 -1 no such table: q2 -stmt 359 err 1 -1 no such table: q2 -stmt 405 err 1 -1 no such table: q3 -stmt 444 err 1 -1 no such table: q3 +stmt 108 err 1 -1 152 no such table: q1 +stmt 152 err 1 -1 200 no such table: q1 +stmt 200 err 1 -1 245 no such table: q1 +stmt 245 err 1 -1 285 no such table: q2 +stmt 285 err 1 -1 323 no such table: q2 +stmt 323 err 1 -1 359 no such table: q2 +stmt 359 err 1 -1 405 no such table: q2 +stmt 405 err 1 -1 444 no such table: q3 +stmt 444 err 1 -1 482 no such table: q3 ==== e_select-7.10.0 CREATE TABLE y1(a COLLATE nocase, b COLLATE binary, c); INSERT INTO y1 VALUES('Abc', 'abc', 'aBC'); ---- stmt 0 ok -stmt 58 err 1 -1 no such table: y1 +stmt 58 err 1 -1 104 no such table: y1 ==== e_select-7.10.0.dup1 CREATE TABLE w1(a TEXT, b NUMBER); @@ -483,8 +483,8 @@ stmt 58 err 1 -1 no such table: y1 ---- stmt 0 ok stmt 37 ok -stmt 67 err 1 -1 no such table: w1 -stmt 103 err 1 -1 no such table: w2 +stmt 67 err 1 -1 103 no such table: w1 +stmt 103 err 1 -1 136 no such table: w2 ==== e_select-7.12.0 CREATE TABLE t1(x); @@ -493,9 +493,9 @@ stmt 103 err 1 -1 no such table: w2 INSERT INTO t1 VALUES(3); ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t1 -stmt 50 err 1 -1 no such table: t1 -stmt 78 err 1 -1 no such table: t1 +stmt 22 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 106 no such table: t1 ==== e_select-8.1.0 CREATE TABLE d1(x, y, z); @@ -522,25 +522,25 @@ stmt 78 err 1 -1 no such table: t1 INSERT INTO d2 VALUES('lad', 'relenting'); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: d1 -stmt 63 err 1 -1 no such table: d1 -stmt 98 err 1 -1 no such table: d1 -stmt 132 err 1 -1 no such table: d1 -stmt 166 err 1 -1 no such table: d1 -stmt 201 err 1 -1 no such table: d1 -stmt 237 err 1 -1 no such table: d1 -stmt 272 err 1 -1 no such table: d1 +stmt 28 err 1 -1 63 no such table: d1 +stmt 63 err 1 -1 98 no such table: d1 +stmt 98 err 1 -1 132 no such table: d1 +stmt 132 err 1 -1 166 no such table: d1 +stmt 166 err 1 -1 201 no such table: d1 +stmt 201 err 1 -1 237 no such table: d1 +stmt 237 err 1 -1 272 no such table: d1 +stmt 272 err 1 -1 307 no such table: d1 stmt 307 ok -stmt 333 err 1 -1 no such table: d2 -stmt 380 err 1 -1 no such table: d2 -stmt 432 err 1 -1 no such table: d2 -stmt 478 err 1 -1 no such table: d2 -stmt 531 err 1 -1 no such table: d2 -stmt 581 err 1 -1 no such table: d2 -stmt 634 err 1 -1 no such table: d2 -stmt 684 err 1 -1 no such table: d2 -stmt 734 err 1 -1 no such table: d2 -stmt 784 err 1 -1 no such table: d2 +stmt 333 err 1 -1 380 no such table: d2 +stmt 380 err 1 -1 432 no such table: d2 +stmt 432 err 1 -1 478 no such table: d2 +stmt 478 err 1 -1 531 no such table: d2 +stmt 531 err 1 -1 581 no such table: d2 +stmt 581 err 1 -1 634 no such table: d2 +stmt 634 err 1 -1 684 no such table: d2 +stmt 684 err 1 -1 734 no such table: d2 +stmt 734 err 1 -1 784 no such table: d2 +stmt 784 err 1 -1 829 no such table: d2 ==== e_select-8.8.0 CREATE TABLE d3(a); @@ -559,68 +559,68 @@ stmt 784 err 1 -1 no such table: d2 INSERT INTO d4 VALUES('JKL'); ---- stmt 0 ok -stmt 22 err 1 -1 no such table: d3 -stmt 55 err 1 -1 no such table: d3 -stmt 86 err 1 -1 no such table: d3 -stmt 115 err 1 -1 no such table: d3 -stmt 153 err 1 -1 no such table: d3 -stmt 182 err 1 -1 no such table: d3 -stmt 213 err 1 -1 no such table: d3 +stmt 22 err 1 -1 55 no such table: d3 +stmt 55 err 1 -1 86 no such table: d3 +stmt 86 err 1 -1 115 no such table: d3 +stmt 115 err 1 -1 153 no such table: d3 +stmt 153 err 1 -1 182 no such table: d3 +stmt 182 err 1 -1 213 no such table: d3 +stmt 213 err 1 -1 244 no such table: d3 stmt 244 ok -stmt 282 err 1 -1 no such table: d4 -stmt 314 err 1 -1 no such table: d4 -stmt 346 err 1 -1 no such table: d4 -stmt 378 err 1 -1 no such table: d4 +stmt 282 err 1 -1 314 no such table: d4 +stmt 314 err 1 -1 346 no such table: d4 +stmt 346 err 1 -1 378 no such table: d4 +stmt 378 err 1 -1 410 no such table: d4 ==== e_select-8.8.1 SELECT a FROM d3 ORDER BY a ---- -stmt 0 err 1 -1 no such table: d3 +stmt 0 err 1 -1 31 no such table: d3 ==== e_select-8.8.2 SELECT a FROM d3 ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: d3 +stmt 0 err 1 -1 36 no such table: d3 ==== e_select-8.9.1 SELECT x FROM d4 ORDER BY 1 COLLATE binary ---- -stmt 0 err 1 -1 no such table: d4 +stmt 0 err 1 -1 46 no such table: d4 ==== e_select-8.9.2 SELECT x COLLATE binary FROM d4 ORDER BY 1 COLLATE nocase ---- -stmt 0 err 1 -1 no such table: d4 +stmt 0 err 1 -1 61 no such table: d4 ==== e_select-8.10.1 SELECT x COLLATE binary FROM d4 ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: d4 +stmt 0 err 1 -1 46 no such table: d4 ==== e_select-8.10.2 SELECT x COLLATE binary FROM d4 ORDER BY x ---- -stmt 0 err 1 -1 no such table: d4 +stmt 0 err 1 -1 46 no such table: d4 ==== e_select-8.10.3 SELECT x COLLATE binary AS x FROM d4 ORDER BY x ---- -stmt 0 err 1 -1 no such table: d4 +stmt 0 err 1 -1 51 no such table: d4 ==== e_select-8.11.1 SELECT x AS y FROM d4 ORDER BY y ---- -stmt 0 err 1 -1 no such table: d4 +stmt 0 err 1 -1 36 no such table: d4 ==== e_select-8.11.2 SELECT x||'' FROM d4 ORDER BY x ---- -stmt 0 err 1 -1 no such table: d4 +stmt 0 err 1 -1 35 no such table: d4 ==== e_select-8.12.1 SELECT x FROM d4 ORDER BY x||'' ---- -stmt 0 err 1 -1 no such table: d4 +stmt 0 err 1 -1 35 no such table: d4 ==== e_select-8.13.0 CREATE TABLE d5(a, b); @@ -645,18 +645,18 @@ stmt 0 err 1 -1 no such table: d4 stmt 0 ok stmt 25 ok stmt 50 ok -stmt 75 err 1 -1 no such table: d5 -stmt 110 err 1 -1 no such table: d6 -stmt 143 err 1 -1 no such table: d7 -stmt 176 err 1 -1 no such table: d5 -stmt 209 err 1 -1 no such table: d6 -stmt 242 err 1 -1 no such table: d7 +stmt 75 err 1 -1 110 no such table: d5 +stmt 110 err 1 -1 143 no such table: d6 +stmt 143 err 1 -1 176 no such table: d7 +stmt 176 err 1 -1 209 no such table: d5 +stmt 209 err 1 -1 242 no such table: d6 +stmt 242 err 1 -1 275 no such table: d7 stmt 275 ok stmt 313 ok -stmt 350 err 1 -1 no such table: d8 -stmt 381 err 1 -1 no such table: d9 -stmt 411 err 1 -1 no such table: d8 -stmt 441 err 1 -1 no such table: d9 +stmt 350 err 1 -1 381 no such table: d8 +stmt 381 err 1 -1 411 no such table: d9 +stmt 411 err 1 -1 441 no such table: d8 +stmt 441 err 1 -1 471 no such table: d9 ==== e_select-9.0 CREATE TABLE f1(a, b); @@ -688,29 +688,29 @@ stmt 441 err 1 -1 no such table: d9 INSERT INTO f1 VALUES(1, 'a'); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: f1 -stmt 59 err 1 -1 no such table: f1 -stmt 93 err 1 -1 no such table: f1 -stmt 127 err 1 -1 no such table: f1 -stmt 161 err 1 -1 no such table: f1 -stmt 195 err 1 -1 no such table: f1 -stmt 229 err 1 -1 no such table: f1 -stmt 263 err 1 -1 no such table: f1 -stmt 297 err 1 -1 no such table: f1 -stmt 331 err 1 -1 no such table: f1 -stmt 365 err 1 -1 no such table: f1 -stmt 399 err 1 -1 no such table: f1 -stmt 433 err 1 -1 no such table: f1 -stmt 467 err 1 -1 no such table: f1 -stmt 501 err 1 -1 no such table: f1 -stmt 535 err 1 -1 no such table: f1 -stmt 569 err 1 -1 no such table: f1 -stmt 603 err 1 -1 no such table: f1 -stmt 636 err 1 -1 no such table: f1 -stmt 669 err 1 -1 no such table: f1 -stmt 702 err 1 -1 no such table: f1 -stmt 735 err 1 -1 no such table: f1 -stmt 768 err 1 -1 no such table: f1 -stmt 801 err 1 -1 no such table: f1 -stmt 834 err 1 -1 no such table: f1 -stmt 867 err 1 -1 no such table: f1 +stmt 25 err 1 -1 59 no such table: f1 +stmt 59 err 1 -1 93 no such table: f1 +stmt 93 err 1 -1 127 no such table: f1 +stmt 127 err 1 -1 161 no such table: f1 +stmt 161 err 1 -1 195 no such table: f1 +stmt 195 err 1 -1 229 no such table: f1 +stmt 229 err 1 -1 263 no such table: f1 +stmt 263 err 1 -1 297 no such table: f1 +stmt 297 err 1 -1 331 no such table: f1 +stmt 331 err 1 -1 365 no such table: f1 +stmt 365 err 1 -1 399 no such table: f1 +stmt 399 err 1 -1 433 no such table: f1 +stmt 433 err 1 -1 467 no such table: f1 +stmt 467 err 1 -1 501 no such table: f1 +stmt 501 err 1 -1 535 no such table: f1 +stmt 535 err 1 -1 569 no such table: f1 +stmt 569 err 1 -1 603 no such table: f1 +stmt 603 err 1 -1 636 no such table: f1 +stmt 636 err 1 -1 669 no such table: f1 +stmt 669 err 1 -1 702 no such table: f1 +stmt 702 err 1 -1 735 no such table: f1 +stmt 735 err 1 -1 768 no such table: f1 +stmt 768 err 1 -1 801 no such table: f1 +stmt 801 err 1 -1 834 no such table: f1 +stmt 834 err 1 -1 867 no such table: f1 +stmt 867 err 1 -1 900 no such table: f1 diff --git a/parser/testdata/e_update.test b/parser/testdata/e_update.test index d1f367c..888df4f 100644 --- a/parser/testdata/e_update.test +++ b/parser/testdata/e_update.test @@ -18,11 +18,11 @@ stmt 28 ok stmt 53 ok stmt 81 ok stmt 113 ok -stmt 138 err 1 -1 no such table: main.t1 +stmt 138 err 1 -1 166 no such table: main.t1 stmt 166 ok stmt 197 ok -stmt 227 err 1 244 unknown database aux -stmt 257 err 1 273 unknown database aux +stmt 227 err 1 244 251 unknown database aux +stmt 257 err 1 273 280 unknown database aux ==== e_update-1.1.0 INSERT INTO main.t1 VALUES(1, 'i'); @@ -33,12 +33,12 @@ stmt 257 err 1 273 unknown database aux INSERT INTO aux.t1 VALUES(2, 'II'); INSERT INTO aux.t1 VALUES(3, 'III'); ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 38 err 1 -1 no such table: main.t1 -stmt 77 err 1 -1 no such table: main.t1 -stmt 117 err 1 -1 no such table: aux.t1 -stmt 155 err 1 -1 no such table: aux.t1 -stmt 193 err 1 -1 no such table: aux.t1 +stmt 0 err 1 -1 38 no such table: main.t1 +stmt 38 err 1 -1 77 no such table: main.t1 +stmt 77 err 1 -1 117 no such table: main.t1 +stmt 117 err 1 -1 155 no such table: aux.t1 +stmt 155 err 1 -1 193 no such table: aux.t1 +stmt 193 err 1 -1 232 no such table: aux.t1 ==== e_update-1.2.0 DELETE FROM main.t1; @@ -46,10 +46,10 @@ stmt 193 err 1 -1 no such table: aux.t1 INSERT INTO main.t1 VALUES(2, 'ii'); INSERT INTO main.t1 VALUES(3, 'iii'); ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 23 err 1 -1 no such table: main.t1 -stmt 61 err 1 -1 no such table: main.t1 -stmt 100 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 23 no such table: main.t1 +stmt 23 err 1 -1 61 no such table: main.t1 +stmt 61 err 1 -1 100 no such table: main.t1 +stmt 100 err 1 -1 140 no such table: main.t1 ==== e_update-1.3.0 DELETE FROM main.t1; @@ -58,11 +58,11 @@ stmt 100 err 1 -1 no such table: main.t1 INSERT INTO main.t1 VALUES(2, 'ii'); INSERT INTO main.t1 VALUES(3, 'iii'); ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 23 err 1 -1 no such table: main.t1 -stmt 63 err 1 -1 no such table: main.t1 -stmt 101 err 1 -1 no such table: main.t1 -stmt 140 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 23 no such table: main.t1 +stmt 23 err 1 -1 63 no such table: main.t1 +stmt 63 err 1 -1 101 no such table: main.t1 +stmt 101 err 1 -1 140 no such table: main.t1 +stmt 140 err 1 -1 180 no such table: main.t1 ==== e_update-1.4.0 DELETE FROM main.t1; @@ -71,20 +71,20 @@ stmt 140 err 1 -1 no such table: main.t1 INSERT INTO main.t1 VALUES(2, 'ii'); INSERT INTO main.t1 VALUES(3, 'iii'); ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 23 err 1 -1 no such table: main.t1 -stmt 63 err 1 -1 no such table: main.t1 -stmt 101 err 1 -1 no such table: main.t1 -stmt 140 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 23 no such table: main.t1 +stmt 23 err 1 -1 63 no such table: main.t1 +stmt 63 err 1 -1 101 no such table: main.t1 +stmt 101 err 1 -1 140 no such table: main.t1 +stmt 140 err 1 -1 180 no such table: main.t1 ==== e_update-1.5.0 INSERT INTO t2(rowid, a, b, c) VALUES(1, 3, 1, 4); INSERT INTO t2(rowid, a, b, c) VALUES(2, 1, 5, 9); INSERT INTO t2(rowid, a, b, c) VALUES(3, 2, 6, 5); ---- -stmt 0 err 1 -1 no such table: t2 -stmt 54 err 1 -1 no such table: t2 -stmt 108 err 1 -1 no such table: t2 +stmt 0 err 1 -1 54 no such table: t2 +stmt 54 err 1 -1 108 no such table: t2 +stmt 108 err 1 -1 162 no such table: t2 ==== e_update-1.7.0 DELETE FROM t2; @@ -92,10 +92,10 @@ stmt 108 err 1 -1 no such table: t2 INSERT INTO t2(rowid, a, b, c) VALUES(2, 1, 5, 9); INSERT INTO t2(rowid, a, b, c) VALUES(3, 2, 6, 5); ---- -stmt 0 err 1 -1 no such table: t2 -stmt 18 err 1 -1 no such table: t2 -stmt 72 err 1 -1 no such table: t2 -stmt 126 err 1 -1 no such table: t2 +stmt 0 err 1 -1 18 no such table: t2 +stmt 18 err 1 -1 72 no such table: t2 +stmt 72 err 1 -1 126 no such table: t2 +stmt 126 err 1 -1 180 no such table: t2 ==== e_update-1.8.0 DELETE FROM t3; @@ -104,15 +104,15 @@ stmt 126 err 1 -1 no such table: t2 INSERT INTO t3 VALUES(3, 'three'); INSERT INTO t3 VALUES(4, 'four'); ---- -stmt 0 err 1 -1 no such table: t3 -stmt 18 err 1 -1 no such table: t3 -stmt 53 err 1 -1 no such table: t3 -stmt 88 err 1 -1 no such table: t3 -stmt 125 err 1 -1 no such table: t3 +stmt 0 err 1 -1 18 no such table: t3 +stmt 18 err 1 -1 53 no such table: t3 +stmt 53 err 1 -1 88 no such table: t3 +stmt 88 err 1 -1 125 no such table: t3 +stmt 125 err 1 -1 161 no such table: t3 ==== e_update-generated SELECT * FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 17 no such table: t3 ==== e_update-2.1.3 CREATE TRIGGER tr1 AFTER DELETE ON t4 BEGIN @@ -120,15 +120,15 @@ stmt 0 err 1 -1 no such table: t3 END; DROP TRIGGER tr1; ---- -stmt 0 err 1 -1 no such table: main.t4 -stmt 86 err 1 -1 no such trigger: tr1 +stmt 0 err 1 -1 46 no such table: main.t4 +stmt 86 err 1 -1 106 no such trigger: tr1 ==== e_update-2.2.X DROP TRIGGER tr1; DROP TRIGGER aux.tr1; ---- -stmt 0 err 1 -1 no such trigger: tr1 -stmt 20 err 1 -1 no such trigger: aux.tr1 +stmt 0 err 1 -1 20 no such trigger: tr1 +stmt 20 err 1 -1 44 no such trigger: aux.tr1 ==== e_update-2.3.0 SELECT 'main', tbl_name FROM main.sqlite_master WHERE type = 'table'; @@ -137,7 +137,7 @@ stmt 20 err 1 -1 no such trigger: aux.tr1 ---- stmt 0 ok stmt 72 ok -stmt 144 err 1 -1 no such table: aux.sqlite_master +stmt 144 err 1 -1 214 no such table: aux.sqlite_master ==== e_update-2.3.1 DELETE FROM main.t6; @@ -153,14 +153,14 @@ stmt 144 err 1 -1 no such table: aux.sqlite_master SELECT * FROM main.t6; SELECT * FROM temp.t6; ---- -stmt 0 err 1 -1 no such table: main.t6 -stmt 23 err 1 -1 no such table: temp.t6 -stmt 46 err 1 -1 no such table: main.t6 -stmt 82 err 1 -1 no such table: temp.t6 -stmt 118 err 1 -1 no such table: t4 -stmt 202 err 1 -1 no such table: t4 -stmt 234 err 1 -1 no such table: main.t6 -stmt 259 err 1 -1 no such table: temp.t6 +stmt 0 err 1 -1 23 no such table: main.t6 +stmt 23 err 1 -1 46 no such table: temp.t6 +stmt 46 err 1 -1 82 no such table: main.t6 +stmt 82 err 1 -1 118 no such table: temp.t6 +stmt 118 err 1 -1 170 no such table: t4 +stmt 202 err 1 -1 234 no such table: t4 +stmt 234 err 1 -1 259 no such table: main.t6 +stmt 259 err 1 -1 284 no such table: temp.t6 ==== e_update-2.3.2 DELETE FROM main.t1; @@ -176,14 +176,14 @@ stmt 259 err 1 -1 no such table: temp.t6 SELECT * FROM main.t1; SELECT * FROM aux.t1; ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 23 err 1 -1 no such table: aux.t1 -stmt 45 err 1 -1 no such table: main.t1 -stmt 81 err 1 -1 no such table: aux.t1 -stmt 116 err 1 -1 no such table: t4 -stmt 200 err 1 -1 no such table: t4 -stmt 219 err 1 -1 no such table: main.t1 -stmt 244 err 1 -1 no such table: aux.t1 +stmt 0 err 1 -1 23 no such table: main.t1 +stmt 23 err 1 -1 45 no such table: aux.t1 +stmt 45 err 1 -1 81 no such table: main.t1 +stmt 81 err 1 -1 116 no such table: aux.t1 +stmt 116 err 1 -1 168 no such table: t4 +stmt 200 err 1 -1 219 no such table: t4 +stmt 219 err 1 -1 244 no such table: main.t1 +stmt 244 err 1 -1 268 no such table: aux.t1 ==== e_update-2.3.3 DELETE FROM aux.t5; @@ -197,12 +197,12 @@ stmt 244 err 1 -1 no such table: aux.t1 UPDATE t4 SET x=10; SELECT * FROM aux.t5; ---- -stmt 0 err 1 -1 no such table: aux.t5 -stmt 22 err 1 -1 no such table: aux.t5 -stmt 57 err 1 -1 no such table: t4 -stmt 93 err 1 -1 no such table: t4 -stmt 176 err 1 -1 no such table: t4 -stmt 199 err 1 -1 no such table: aux.t5 +stmt 0 err 1 -1 22 no such table: aux.t5 +stmt 22 err 1 -1 57 no such table: aux.t5 +stmt 57 err 1 -1 93 no such table: t4 +stmt 93 err 1 -1 144 no such table: t4 +stmt 176 err 1 -1 199 no such table: t4 +stmt 199 err 1 -1 223 no such table: aux.t5 ==== e_update-3.1.0 CREATE TABLE t7(q, r, s); @@ -218,16 +218,16 @@ stmt 199 err 1 -1 no such table: aux.t5 INSERT INTO t7 VALUES(10, 'ten', 'X'); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t7 -stmt 70 err 1 -1 no such table: t7 -stmt 112 err 1 -1 no such table: t7 -stmt 154 err 1 -1 no such table: t7 -stmt 196 err 1 -1 no such table: t7 -stmt 238 err 1 -1 no such table: t7 -stmt 280 err 1 -1 no such table: t7 -stmt 322 err 1 -1 no such table: t7 -stmt 364 err 1 -1 no such table: t7 -stmt 406 err 1 -1 no such table: t7 +stmt 28 err 1 -1 70 no such table: t7 +stmt 70 err 1 -1 112 no such table: t7 +stmt 112 err 1 -1 154 no such table: t7 +stmt 154 err 1 -1 196 no such table: t7 +stmt 196 err 1 -1 238 no such table: t7 +stmt 238 err 1 -1 280 no such table: t7 +stmt 280 err 1 -1 322 no such table: t7 +stmt 322 err 1 -1 364 no such table: t7 +stmt 364 err 1 -1 406 no such table: t7 +stmt 406 err 1 -1 448 no such table: t7 ==== e_update-3.5.0 CREATE TABLE t8(x); @@ -236,4 +236,4 @@ stmt 406 err 1 -1 no such table: t7 END; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: main.t7 +stmt 22 err 1 -1 69 no such table: main.t7 diff --git a/parser/testdata/expr.test b/parser/testdata/expr.test index bce94cb..5ebb1f9 100644 --- a/parser/testdata/expr.test +++ b/parser/testdata/expr.test @@ -2,11 +2,11 @@ SELECT 1 IS #1; ---- -stmt 0 err 1 -1 near "#1": syntax error +stmt 0 err 1 -1 18 near "#1": syntax error ==== expr-7.1 SELECT * FROM test1 ORDER BY a ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 31 no such table: test1 ==== expr-8.1 SELECT CURRENT_TIME ---- @@ -95,12 +95,12 @@ stmt 0 ok SELECT (CASE a>4 THEN 1 ELSE 0 END) FROM test1; ---- -stmt 0 err 1 22 near "THEN": syntax error +stmt 0 err 1 22 26 near "THEN": syntax error ==== expr-12.2 SELECT (CASE WHEN a>4 THEN 1 ELSE 0) FROM test1; ---- -stmt 0 err 1 40 near ")": syntax error +stmt 0 err 1 40 41 near ")": syntax error ==== expr-13.2 SELECT 0+'9223372036854775807' @@ -131,26 +131,26 @@ stmt 0 ok ---- stmt 0 ok stmt 27 ok -stmt 49 err 1 -1 no such table: t1 -stmt 108 err 1 -1 no such table: t1 +stmt 49 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 193 no such table: t1 ==== expr-14.2 SELECT count(*) FROM t1 WHERE (x OR (8==9)) != (NOT NOT x); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 65 no such table: t1 ==== expr-14.3 SELECT sum(NOT x) FROM t1 WHERE x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 40 no such table: t1 ==== expr-14.4 SELECT sum(CASE WHEN x THEN 0 ELSE 1 END) FROM t1 WHERE x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 64 no such table: t1 ==== expr-generated DROP TABLE IF EXISTS t1; @@ -159,31 +159,31 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 29 ok -stmt 53 err 1 -1 no such table: t1 +stmt 53 err 1 -1 114 no such table: t1 ==== expr-generated.dup1 SELECT count(*) FROM t1 WHERE (x OR (8==9)) != (CASE WHEN x THEN 1 ELSE 0 END); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== expr-generated.dup2 SELECT count(*) FROM t1 WHERE (x OR (8==9)) != (NOT NOT x); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 69 no such table: t1 ==== expr-generated.dup3 SELECT sum(NOT x) FROM t1 WHERE x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 44 no such table: t1 ==== expr-generated.dup4 SELECT sum(CASE WHEN x THEN 0 ELSE 1 END) FROM t1 WHERE x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 68 no such table: t1 ==== expr-16.1 CREATE TABLE t1(a,b,c); @@ -192,22 +192,22 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 26 ok -stmt 54 err 1 -1 no such table: dual +stmt 54 err 1 -1 86 no such table: dual ==== expr-16.100 SELECT implies_nonnull_row( (b=1 AND 0)>(b=3 AND 0),a) FROM dual LEFT JOIN t1; ---- -stmt 0 err 1 -1 no such table: dual +stmt 0 err 1 -1 83 no such table: dual ==== expr-16.101 SELECT implies_nonnull_row( (b=1 AND 0)>(b=3 AND a=4),a) FROM dual LEFT JOIN t1; ---- -stmt 0 err 1 -1 no such table: dual +stmt 0 err 1 -1 85 no such table: dual ==== expr-16.102 SELECT implies_nonnull_row( (b=1 AND a=2)>(b=3 AND a=4),a) FROM dual LEFT JOIN t1; ---- -stmt 0 err 1 -1 no such table: dual +stmt 0 err 1 -1 87 no such table: dual diff --git a/parser/testdata/expr2.test b/parser/testdata/expr2.test index 7c42239..41ef4d0 100644 --- a/parser/testdata/expr2.test +++ b/parser/testdata/expr2.test @@ -4,40 +4,40 @@ INSERT INTO t0(c0) VALUES ('val'); ---- stmt 0 ok -stmt 23 err 1 -1 no such table: t0 +stmt 23 err 1 -1 60 no such table: t0 ==== 1.1 SELECT * FROM t0 WHERE ( ( (0 IS NOT FALSE) OR NOT (0 IS FALSE OR (t0.c0 = 1)) ) IS 0 ) ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 99 no such table: t0 ==== 1.2.1 SELECT ( (0 IS NOT FALSE) OR NOT (0 IS FALSE OR (t0.c0 = 1)) ) IS 0 FROM t0 ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 88 no such table: t0 ==== 1.2.2 SELECT ( (0 IS NOT FALSE) OR NOT (0 IS 0 OR (t0.c0 = 1)) ) IS 0 FROM t0 ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 84 no such table: t0 ==== 1.3 SELECT ( (0 IS NOT FALSE) OR NOT (0 IS FALSE OR (t0.c0 = 1)) ) FROM t0 ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 74 no such table: t0 ==== 1.4.1 SELECT (0 IS NOT FALSE) FROM t0 ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 35 no such table: t0 ==== 1.4.2 SELECT NOT (0 IS FALSE OR (t0.c0 = 1)) FROM t0 ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 50 no such table: t0 diff --git a/parser/testdata/in.test b/parser/testdata/in.test index f71ea21..ed71ecb 100644 --- a/parser/testdata/in.test +++ b/parser/testdata/in.test @@ -1,86 +1,86 @@ ==== in-1.1 SELECT a FROM t1 WHERE b BETWEEN 10 AND 50 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== in-1.2 SELECT a FROM t1 WHERE b NOT BETWEEN 10 AND 50 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 58 no such table: t1 ==== in-1.3 SELECT a FROM t1 WHERE b BETWEEN a AND a*5 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== in-1.4 SELECT a FROM t1 WHERE b NOT BETWEEN a AND a*5 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 58 no such table: t1 ==== in-1.6 SELECT a FROM t1 WHERE b BETWEEN a AND a*5 OR b=512 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 63 no such table: t1 ==== in-1.7 SELECT a+ 100*(a BETWEEN 1 and 3) FROM t1 ORDER BY b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 53 no such table: t1 ==== in-2.1 SELECT a FROM t1 WHERE b IN (8,12,16,24,32) ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 55 no such table: t1 ==== in-2.2 SELECT a FROM t1 WHERE b NOT IN (8,12,16,24,32) ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 59 no such table: t1 ==== in-2.3 SELECT a FROM t1 WHERE b IN (8,12,16,24,32) OR b=512 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 64 no such table: t1 ==== in-2.4 SELECT a FROM t1 WHERE b NOT IN (8,12,16,24,32) OR b=512 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 68 no such table: t1 ==== in-2.5 SELECT a+100*(b IN (8,16,24)) FROM t1 ORDER BY b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 49 no such table: t1 ==== in-2.6 SELECT a FROM t1 WHERE b IN (b+8,64) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 37 no such table: t1 ==== in-2.7 SELECT a FROM t1 WHERE b IN (max(5,10,b),20) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 45 no such table: t1 ==== in-2.8 SELECT a FROM t1 WHERE b IN (8*2,64/2) ORDER BY b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 50 no such table: t1 ==== in-2.9 SELECT a FROM t1 WHERE b IN (max(5,10),20) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 43 no such table: t1 ==== in-2.10 SELECT a FROM t1 WHERE min(0,b IN (a,30)) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 42 no such table: t1 ==== in-3.1 SELECT a FROM t1 WHERE b IN (SELECT b FROM t1 WHERE a<5) ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 81 no such table: t1 ==== in-3.2 SELECT a FROM t1 WHERE b IN (SELECT b FROM t1 WHERE a<5) OR b==512 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 91 no such table: t1 ==== in-3.3 SELECT a + 100*(b IN (SELECT b FROM t1 WHERE a<5)) FROM t1 ORDER BY b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 75 no such table: t1 ==== in-5.1 INSERT INTO t1 VALUES('hello', 'world'); @@ -91,8 +91,8 @@ stmt 0 err 1 -1 no such table: t1 'collisions','hash','table','are','resolved','properly', 'This','in-set','contains','thirty','one','entries','hello'); ---- -stmt 0 err 1 -1 no such table: t1 -stmt 45 err 1 -1 no such table: t1 +stmt 0 err 1 -1 45 no such table: t1 +stmt 45 err 1 -1 350 no such table: t1 ==== in-6.1 CREATE TABLE ta(a INTEGER PRIMARY KEY, b); @@ -107,14 +107,14 @@ stmt 45 err 1 -1 no such table: t1 SELECT * FROM ta WHERE a<10; ---- stmt 0 ok -stmt 47 err 1 -1 no such table: ta -stmt 79 err 1 -1 no such table: ta -stmt 111 err 1 -1 no such table: ta -stmt 143 err 1 -1 no such table: ta -stmt 175 err 1 -1 no such table: ta -stmt 207 err 1 -1 no such table: ta -stmt 239 err 1 -1 no such table: ta -stmt 346 err 1 -1 no such table: ta +stmt 47 err 1 -1 79 no such table: ta +stmt 79 err 1 -1 111 no such table: ta +stmt 111 err 1 -1 143 no such table: ta +stmt 143 err 1 -1 175 no such table: ta +stmt 175 err 1 -1 207 no such table: ta +stmt 207 err 1 -1 239 no such table: ta +stmt 239 err 1 -1 346 no such table: ta +stmt 346 err 1 -1 379 no such table: ta ==== in-6.2 CREATE TABLE tb(a INTEGER PRIMARY KEY, b); @@ -129,121 +129,121 @@ stmt 346 err 1 -1 no such table: ta SELECT * FROM tb WHERE a<10; ---- stmt 0 ok -stmt 47 err 1 -1 no such table: tb -stmt 79 err 1 -1 no such table: tb -stmt 111 err 1 -1 no such table: tb -stmt 143 err 1 -1 no such table: tb -stmt 175 err 1 -1 no such table: tb -stmt 207 err 1 -1 no such table: tb -stmt 239 err 1 -1 no such table: tb -stmt 346 err 1 -1 no such table: tb +stmt 47 err 1 -1 79 no such table: tb +stmt 79 err 1 -1 111 no such table: tb +stmt 111 err 1 -1 143 no such table: tb +stmt 143 err 1 -1 175 no such table: tb +stmt 175 err 1 -1 207 no such table: tb +stmt 207 err 1 -1 239 no such table: tb +stmt 239 err 1 -1 346 no such table: tb +stmt 346 err 1 -1 379 no such table: tb ==== in-6.3 SELECT a FROM ta WHERE b IN (SELECT a FROM tb); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 52 no such table: ta ==== in-6.4 SELECT a FROM ta WHERE b NOT IN (SELECT a FROM tb); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 56 no such table: ta ==== in-6.5 SELECT a FROM ta WHERE b IN (SELECT b FROM tb); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 52 no such table: ta ==== in-6.6 SELECT a FROM ta WHERE b NOT IN (SELECT b FROM tb); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 56 no such table: ta ==== in-6.7 SELECT a FROM ta WHERE a IN (SELECT a FROM tb); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 52 no such table: ta ==== in-6.8 SELECT a FROM ta WHERE a NOT IN (SELECT a FROM tb); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 56 no such table: ta ==== in-6.9 SELECT a FROM ta WHERE a IN (SELECT b FROM tb); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 52 no such table: ta ==== in-6.10 SELECT a FROM ta WHERE a NOT IN (SELECT b FROM tb); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 56 no such table: ta ==== in-7.1 SELECT a FROM t1 WHERE a IN (); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 36 no such table: t1 ==== in-7.2 SELECT a FROM t1 WHERE a IN (5); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 37 no such table: t1 ==== in-7.3 SELECT a FROM t1 WHERE a NOT IN () ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 51 no such table: t1 ==== in-7.4 SELECT a FROM t1 WHERE a IN (5) AND b IN (); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 49 no such table: t1 ==== in-7.5 SELECT a FROM t1 WHERE a IN (5) AND b NOT IN (); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 53 no such table: t1 ==== in-7.6.1 SELECT a FROM ta WHERE a IN (); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 36 no such table: ta ==== in-7.7 SELECT a FROM ta WHERE a NOT IN (); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 40 no such table: ta ==== in-7.8.1 SELECT * FROM ta LEFT JOIN tb ON (ta.b=tb.b) WHERE ta.a IN (); ---- -stmt 0 err 1 -1 no such table: ta +stmt 0 err 1 -1 67 no such table: ta ==== in-8.3 SELECT b FROM t1 WHERE a IN ('hello','there') ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 51 no such table: t1 ==== in-9.1 CREATE TABLE t4 AS SELECT a FROM tb; SELECT * FROM t4; ---- -stmt 0 err 1 -1 no such table: tb -stmt 41 err 1 -1 no such table: t4 +stmt 0 err 1 -1 41 no such table: tb +stmt 41 err 1 -1 63 no such table: t4 ==== in-9.2 SELECT b FROM t1 WHERE a IN t4; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 36 no such table: t1 ==== in-9.3 SELECT b FROM t1 WHERE a NOT IN t4; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 40 no such table: t1 ==== in-9.4 SELECT b FROM t1 WHERE a NOT IN tb; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 40 no such table: t1 ==== in-10.1 CREATE TABLE t5( @@ -254,13 +254,13 @@ stmt 0 err 1 -1 no such table: t1 SELECT * FROM t5; ---- stmt 0 ok -stmt 79 err 1 -1 no such table: t5 -stmt 111 err 1 -1 no such table: t5 +stmt 79 err 1 -1 111 no such table: t5 +stmt 111 err 1 -1 133 no such table: t5 ==== in-10.2 INSERT INTO t5 VALUES(4); ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 30 no such table: t5 ==== in-11.1 CREATE TABLE t6(a,b NUMERIC); @@ -269,14 +269,14 @@ stmt 0 err 1 -1 no such table: t5 SELECT * FROM t6 WHERE b IN (2); ---- stmt 0 ok -stmt 34 err 1 -1 no such table: t6 -stmt 66 err 1 -1 no such table: t6 -stmt 98 err 1 -1 no such table: t6 +stmt 34 err 1 -1 66 no such table: t6 +stmt 66 err 1 -1 98 no such table: t6 +stmt 98 err 1 -1 135 no such table: t6 ==== in-11.5 SELECT * FROM t6 WHERE a IN (2); ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 37 no such table: t6 ==== in-12.1 CREATE TABLE t2(a, b, c); @@ -290,98 +290,98 @@ stmt 30 ok SELECT a, b FROM t3 UNION ALL SELECT a, b FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== in-12.3 SELECT * FROM t2 WHERE a IN ( SELECT a, b FROM t3 UNION SELECT a, b FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 93 no such table: t2 ==== in-12.4 SELECT * FROM t2 WHERE a IN ( SELECT a, b FROM t3 EXCEPT SELECT a, b FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== in-12.5 SELECT * FROM t2 WHERE a IN ( SELECT a, b FROM t3 INTERSECT SELECT a, b FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== in-12.6 SELECT * FROM t2 WHERE a IN ( SELECT a, b FROM t3 UNION ALL SELECT a FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== in-12.7 SELECT * FROM t2 WHERE a IN ( SELECT a, b FROM t3 UNION SELECT a FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 90 no such table: t2 ==== in-12.8 SELECT * FROM t2 WHERE a IN ( SELECT a, b FROM t3 EXCEPT SELECT a FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 91 no such table: t2 ==== in-12.9 SELECT * FROM t2 WHERE a IN ( SELECT a, b FROM t3 INTERSECT SELECT a FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== in-12.10 SELECT * FROM t2 WHERE a IN ( SELECT a FROM t3 UNION ALL SELECT a, b FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== in-12.11 SELECT * FROM t2 WHERE a IN ( SELECT a FROM t3 UNION SELECT a, b FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 90 no such table: t2 ==== in-12.12 SELECT * FROM t2 WHERE a IN ( SELECT a FROM t3 EXCEPT SELECT a, b FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 91 no such table: t2 ==== in-12.13 SELECT * FROM t2 WHERE a IN ( SELECT a FROM t3 INTERSECT SELECT a, b FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== in-12.14 SELECT * FROM t2 WHERE a IN ( SELECT a, b FROM t3 UNION ALL SELECT a, b FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== in-12.15 SELECT * FROM t2 WHERE a IN ( SELECT a, b FROM t3 UNION ALL SELECT a FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== in-13.2 CREATE TABLE t7(a, b, c NOT NULL); @@ -392,35 +392,35 @@ stmt 0 err 1 -1 no such table: t2 INSERT INTO t7 VALUES(NULL, 5, 5); ---- stmt 0 ok -stmt 40 err 1 -1 no such table: t7 -stmt 79 err 1 -1 no such table: t7 -stmt 118 err 1 -1 no such table: t7 -stmt 157 err 1 -1 no such table: t7 -stmt 196 err 1 -1 no such table: t7 +stmt 40 err 1 -1 79 no such table: t7 +stmt 79 err 1 -1 118 no such table: t7 +stmt 118 err 1 -1 157 no such table: t7 +stmt 157 err 1 -1 196 no such table: t7 +stmt 196 err 1 -1 235 no such table: t7 ==== in-13.3 SELECT 2 IN (SELECT a FROM t7) ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 32 no such table: t7 ==== in-13.4 SELECT 6 IN (SELECT a FROM t7) ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 32 no such table: t7 ==== in-13.5 SELECT 2 IN (SELECT b FROM t7) ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 32 no such table: t7 ==== in-13.6 SELECT 6 IN (SELECT b FROM t7) ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 32 no such table: t7 ==== in-13.7 SELECT 2 IN (SELECT c FROM t7) ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 32 no such table: t7 ==== in-13.8 SELECT 6 IN (SELECT c FROM t7) ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 32 no such table: t7 ==== in-13.9 SELECT @@ -431,7 +431,7 @@ stmt 0 err 1 -1 no such table: t7 2 NOT IN (SELECT c FROM t7), 6 NOT IN (SELECT c FROM t7) ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 221 no such table: t7 ==== in-13.10 SELECT b IN ( @@ -441,7 +441,7 @@ stmt 0 err 1 -1 no such table: t7 ) FROM t7 AS outside ORDER BY b; ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 165 no such table: t7 ==== in-13.11 SELECT b NOT IN ( @@ -451,7 +451,7 @@ stmt 0 err 1 -1 no such table: t7 ) FROM t7 AS outside ORDER BY b; ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 168 no such table: t7 ==== in-13.13 SELECT @@ -462,7 +462,7 @@ stmt 0 err 1 -1 no such table: t7 2 NOT IN (SELECT c FROM t7), 6 NOT IN (SELECT c FROM t7) ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 221 no such table: t7 ==== in-13.14 BEGIN TRANSACTION; @@ -480,40 +480,40 @@ stmt 0 err 1 -1 no such table: t7 ---- stmt 0 ok stmt 23 ok -stmt 55 err 1 -1 no such table: a -stmt 84 err 1 -1 no such table: a -stmt 113 err 1 -1 no such table: a +stmt 55 err 1 -1 84 no such table: a +stmt 84 err 1 -1 113 no such table: a +stmt 113 err 1 -1 142 no such table: a stmt 142 ok -stmt 174 err 1 -1 no such table: b -stmt 206 err 1 -1 no such table: b -stmt 235 err 1 -1 no such table: b -stmt 264 err 1 -1 no such table: b +stmt 174 err 1 -1 206 no such table: b +stmt 206 err 1 -1 235 no such table: b +stmt 235 err 1 -1 264 no such table: b +stmt 264 err 1 -1 293 no such table: b stmt 293 ok -stmt 305 err 1 -1 no such table: a +stmt 305 err 1 -1 361 no such table: a ==== in-13.14.dup1 CREATE INDEX i5 ON b(id); SELECT * FROM a WHERE id NOT IN (SELECT id FROM b); ---- -stmt 0 err 1 -1 no such table: main.b -stmt 30 err 1 -1 no such table: a +stmt 0 err 1 -1 30 no such table: main.b +stmt 30 err 1 -1 86 no such table: a ==== in-13.15 SELECT 0 WHERE (SELECT 0,0) OR (0 IN (1,2)); ---- -stmt 0 err 1 -1 sub-select returns 2 columns - expected 1 +stmt 0 err 1 -1 49 sub-select returns 2 columns - expected 1 ==== in-14.0 CREATE TABLE c1(a); INSERT INTO c1 VALUES(1), (2), (4), (3); ---- stmt 0 ok -stmt 22 err 1 -1 no such table: c1 +stmt 22 err 1 -1 65 no such table: c1 ==== in-14.1 SELECT * FROM c1 WHERE a IN (SELECT a FROM c1) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: c1 +stmt 0 err 1 -1 61 no such table: c1 ==== in-15.0 DROP TABLE IF EXISTS t1; @@ -523,8 +523,8 @@ stmt 0 err 1 -1 no such table: c1 ---- stmt 0 ok stmt 27 ok -stmt 84 err 1 -1 no such table: t1 -stmt 112 err 1 -1 no such table: t1 +stmt 84 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 188 no such table: t1 ==== in-15.1 DROP TABLE IF EXISTS t2; @@ -536,10 +536,10 @@ stmt 112 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 71 err 1 -1 no such table: t2 -stmt 102 err 1 -1 no such table: t2 -stmt 133 err 1 -1 no such table: t2 -stmt 164 err 1 -1 no such table: t2 +stmt 71 err 1 -1 102 no such table: t2 +stmt 102 err 1 -1 133 no such table: t2 +stmt 133 err 1 -1 164 no such table: t2 +stmt 164 err 1 -1 209 no such table: t2 ==== in-15.2 DROP TABLE IF EXISTS t3; @@ -550,16 +550,16 @@ stmt 164 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 27 ok -stmt 69 err 1 -1 no such table: t3 -stmt 97 err 1 -1 no such table: t3 -stmt 167 err 1 -1 no such table: t3 +stmt 69 err 1 -1 97 no such table: t3 +stmt 97 err 1 -1 167 no such table: t3 +stmt 167 err 1 -1 240 no such table: t3 ==== in-15.3 SELECT CASE WHEN x NOT IN (5,6,7) OR x=0 THEN 'yes' ELSE 'no' END FROM t3; SELECT CASE WHEN x NOT IN (NULL,6,7) OR x=0 THEN 'yes' ELSE 'no' END FROM t3; ---- -stmt 0 err 1 -1 no such table: t3 -stmt 77 err 1 -1 no such table: t3 +stmt 0 err 1 -1 77 no such table: t3 +stmt 77 err 1 -1 157 no such table: t3 ==== in-15.4 DROP TABLE IF EXISTS t4; @@ -570,13 +570,13 @@ stmt 77 err 1 -1 no such table: t3 ---- stmt 0 ok stmt 27 ok -stmt 76 err 1 -1 no such table: t4 -stmt 200 err 1 -1 no such table: t4 +stmt 76 err 1 -1 200 no such table: t4 +stmt 200 err 1 -1 254 no such table: t4 ==== in-15.5 SELECT b FROM t4 WHERE a NOT IN (3,null,8); ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 46 no such table: t4 ==== in-15.6 DROP TABLE IF EXISTS t5; @@ -607,9 +607,9 @@ stmt 0 ok stmt 27 ok stmt 54 ok stmt 108 ok -stmt 173 err 1 -1 no such table: t5 -stmt 220 err 1 -1 no such table: t6 -stmt 283 err 1 -1 no such table: t5 +stmt 173 err 1 -1 220 no such table: t5 +stmt 220 err 1 -1 283 no such table: t6 +stmt 283 err 1 -1 791 no such table: t5 ==== in-16.0 CREATE TABLE x1(a, b); @@ -617,22 +617,22 @@ stmt 283 err 1 -1 no such table: t5 CREATE INDEX x1i ON x1(a, b); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: x1 -stmt 81 err 1 -1 no such table: main.x1 +stmt 25 err 1 -1 81 no such table: x1 +stmt 81 err 1 -1 113 no such table: main.x1 ==== in-16.1 SELECT * FROM x1 WHERE a IN (SELECT a FROM x1 WHERE (a%2)==0) ORDER BY a DESC, b; ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 90 no such table: x1 ==== in-16.2 SELECT * FROM x1 WHERE a IN (SELECT a FROM x1 WHERE (a%7)==0) ORDER BY a DESC, b; ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 90 no such table: x1 ==== in-17.1 SELECT 1 IN ('1'); @@ -662,8 +662,8 @@ stmt 0 ok ---- stmt 0 ok stmt 27 ok -stmt 61 err 1 -1 no such table: t0 -stmt 94 err 1 -1 no such table: t0 +stmt 61 err 1 -1 94 no such table: t0 +stmt 94 err 1 -1 135 no such table: t0 ==== in-19.10 DROP TABLE IF EXISTS t0; @@ -673,28 +673,28 @@ stmt 94 err 1 -1 no such table: t0 ---- stmt 0 ok stmt 27 ok -stmt 62 err 1 -1 no such table: t0 -stmt 102 err 1 -1 no such table: t0 +stmt 62 err 1 -1 102 no such table: t0 +stmt 102 err 1 -1 145 no such table: t0 ==== in-19.20 SELECT c0 IN ('2.0625') FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 35 no such table: t0 ==== in-19.21 SELECT c0 = ('2.0625') FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 34 no such table: t0 ==== in-19.22 SELECT c0 = ('0.20625e+01') FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 39 no such table: t0 ==== in-19.30 SELECT c0 IN ('2.0625',2,3) FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 39 no such table: t0 ==== in-19.40 DROP TABLE t0; @@ -703,10 +703,10 @@ stmt 0 err 1 -1 no such table: t0 INSERT INTO t0(c0, c2) VALUES (0, NULL) ON CONFLICT(c2, c1, c0) DO NOTHING; PRAGMA integrity_check; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 17 no such table: t0 stmt 17 ok -stmt 83 err 1 -1 no such table: main.t0 -stmt 120 err 1 -1 no such table: t0 +stmt 83 err 1 -1 120 no such table: main.t0 +stmt 120 err 1 -1 198 no such table: t0 stmt 198 ok ==== in-20.1 @@ -719,7 +719,7 @@ stmt 0 ok SELECT COUNT(*) FROM t0 ORDER BY (t0.c0 IN ()); ---- stmt 0 ok -stmt 23 err 1 -1 no such table: t0 +stmt 23 err 1 -1 73 no such table: t0 ==== in-22.1 DROP TABLE IF EXISTS t1; @@ -733,26 +733,26 @@ stmt 23 err 1 -1 no such table: t0 ---- stmt 0 ok stmt 27 ok -stmt 72 err 1 -1 no such table: t1 +stmt 72 err 1 -1 195 no such table: t1 stmt 195 ok stmt 222 ok -stmt 248 err 1 -1 no such table: t2 -stmt 284 err 1 -1 no such table: t1 +stmt 248 err 1 -1 284 no such table: t2 +stmt 284 err 1 -1 334 no such table: t1 ==== in-22.2 SELECT * FROM t1 WHERE x IN ((SELECT a FROM t2)); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 52 no such table: t1 ==== in-22.3 SELECT * FROM t1 WHERE x IN (((SELECT a FROM t2))); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== in-22.4 SELECT * FROM t1 WHERE x IN ((((((SELECT a FROM t2)))))); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 60 no such table: t1 ==== in-23.0 DROP TABLE IF EXISTS t4; @@ -766,9 +766,9 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 61 err 1 -1 no such table: t4 -stmt 120 err 1 -1 no such table: main.t4 -stmt 168 err 1 -1 no such table: t4 +stmt 61 err 1 -1 120 no such table: t4 +stmt 120 err 1 -1 168 no such table: main.t4 +stmt 168 err 1 -1 334 no such table: t4 ==== in-23.0-b SELECT a0.a, group_concat(a1.a) AS b @@ -776,7 +776,7 @@ stmt 168 err 1 -1 no such table: t4 GROUP BY a0.a HAVING (SELECT sum( (a1.a GLOB +a0.a COLLATE NOCASE) IN (SELECT b FROM t4))); ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 168 no such table: t4 ==== in-23.1 CREATE VIEW t5 AS @@ -787,4 +787,4 @@ stmt 0 err 1 -1 no such table: t4 SELECT * FROM t5; ---- stmt 0 ok -stmt 149 err 1 -1 no such table: t5 +stmt 149 err 1 -1 169 no such table: t5 diff --git a/parser/testdata/in3.test b/parser/testdata/in3.test index d5fb0ce..13739aa 100644 --- a/parser/testdata/in3.test +++ b/parser/testdata/in3.test @@ -6,31 +6,31 @@ INSERT INTO t1 VALUES(5, 6); ---- stmt 0 ok -stmt 39 err 1 -1 no such table: t1 -stmt 72 err 1 -1 no such table: t1 -stmt 105 err 1 -1 no such table: t1 +stmt 39 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 138 no such table: t1 ==== in3-2.2 SELECT rowid FROM t1 WHERE rowid IN (SELECT rowid FROM t1 WHERE rowid IN (1, 2)); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== in3-2.3 select rowid from t1 where rowid IN (-1,2,4) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 50 no such table: t1 ==== in3-2.4 SELECT rowid FROM t1 WHERE rowid IN (select rowid from t1 where rowid IN (-1,2,4)) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== in3-4.6 DROP INDEX t3_i2 ---- -stmt 0 err 1 -1 no such index: t3_i2 +stmt 0 err 1 -1 18 no such index: t3_i2 ==== in3-5.1 CREATE TABLE Folders( diff --git a/parser/testdata/in4.test b/parser/testdata/in4.test index 9125976..2b600bd 100644 --- a/parser/testdata/in4.test +++ b/parser/testdata/in4.test @@ -4,12 +4,12 @@ CREATE INDEX i1 ON t1(a); ---- stmt 0 ok -stmt 27 err 1 -1 no such table: main.t1 +stmt 27 err 1 -1 57 no such table: main.t1 ==== in4-1.2 SELECT * FROM t1 WHERE a IN ('aaa', 'bbb', 'ccc'); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 55 no such table: t1 ==== in4-1.3 INSERT INTO t1 VALUES('aaa', 1); @@ -18,26 +18,26 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES('eee', 4); SELECT b FROM t1 WHERE a IN ('aaa', 'bbb', 'ccc'); ---- -stmt 0 err 1 -1 no such table: t1 -stmt 37 err 1 -1 no such table: t1 -stmt 74 err 1 -1 no such table: t1 -stmt 111 err 1 -1 no such table: t1 -stmt 148 err 1 -1 no such table: t1 +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 111 no such table: t1 +stmt 111 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 203 no such table: t1 ==== in4-1.4 SELECT a FROM t1 WHERE rowid IN (1, 3); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 44 no such table: t1 ==== in4-1.5 SELECT a FROM t1 WHERE rowid IN (); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 40 no such table: t1 ==== in4-1.6 SELECT a FROM t1 WHERE a IN ('ddd'); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 41 no such table: t1 ==== in4-2.1 CREATE TABLE t2(a INTEGER PRIMARY KEY, b TEXT); @@ -48,39 +48,39 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t2 VALUES(3, 'three'); ---- stmt 0 ok -stmt 52 err 1 -1 no such table: t2 -stmt 91 err 1 -1 no such table: t2 -stmt 129 err 1 -1 no such table: t2 -stmt 166 err 1 -1 no such table: t2 -stmt 203 err 1 -1 no such table: t2 +stmt 52 err 1 -1 91 no such table: t2 +stmt 91 err 1 -1 129 no such table: t2 +stmt 129 err 1 -1 166 no such table: t2 +stmt 166 err 1 -1 203 no such table: t2 +stmt 203 err 1 -1 242 no such table: t2 ==== in4-2.2 SELECT b FROM t2 WHERE a IN (0, 2) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 36 no such table: t2 ==== in4-2.3 SELECT b FROM t2 WHERE a IN (2, 0) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 36 no such table: t2 ==== in4-2.4 SELECT b FROM t2 WHERE a IN (2, -1) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 37 no such table: t2 ==== in4-2.5 SELECT b FROM t2 WHERE a IN (NULL, 3) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 39 no such table: t2 ==== in4-2.6 SELECT b FROM t2 WHERE a IN (1.0, 2.1) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 40 no such table: t2 ==== in4-2.7 SELECT b FROM t2 WHERE a IN ('1', '2') ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 40 no such table: t2 ==== in4-2.8 SELECT b FROM t2 WHERE a IN ('', '0.0.0', '2') ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 48 no such table: t2 ==== in4-3.1 DROP TABLE IF EXISTS t1; @@ -102,87 +102,87 @@ stmt 0 ok stmt 29 ok stmt 58 ok stmt 86 ok -stmt 114 err 1 -1 no such table: t1 -stmt 153 err 1 -1 no such table: t1 -stmt 189 err 1 -1 no such table: t1 -stmt 222 err 1 -1 no such table: t1 -stmt 255 err 1 -1 no such table: t1 -stmt 288 err 1 -1 no such table: t1 -stmt 321 err 1 -1 no such table: t2 -stmt 357 err 1 -1 no such table: t2 -stmt 390 err 1 -1 no such table: t2 -stmt 426 err 1 -1 no such table: t2 +stmt 114 err 1 -1 153 no such table: t1 +stmt 153 err 1 -1 189 no such table: t1 +stmt 189 err 1 -1 222 no such table: t1 +stmt 222 err 1 -1 255 no such table: t1 +stmt 255 err 1 -1 288 no such table: t1 +stmt 288 err 1 -1 321 no such table: t1 +stmt 321 err 1 -1 357 no such table: t2 +stmt 357 err 1 -1 390 no such table: t2 +stmt 390 err 1 -1 426 no such table: t2 +stmt 426 err 1 -1 465 no such table: t2 ==== in4-3.2 SELECT x FROM t1 WHERE id IN () AND x IN (SELECT x FROM t2 WHERE id=1) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 ==== in4-3.4 SELECT * FROM t3 WHERE x = 10 AND y IN () ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 43 no such table: t3 ==== in4-3.5 SELECT * FROM t3 WHERE x IN () AND y = 10 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 43 no such table: t3 ==== in4-3.6 SELECT * FROM t3 WHERE x IN () OR x = 10 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 42 no such table: t3 ==== in4-3.7 SELECT * FROM t3 WHERE y IN () ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 32 no such table: t3 ==== in4-3.8 SELECT x IN() AS a FROM t3 WHERE a ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 36 no such table: t3 ==== in4-3.9 SELECT x IN() AS a FROM t3 WHERE NOT a ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 40 no such table: t3 ==== in4-3.10 SELECT * FROM t3 WHERE oid IN () ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 34 no such table: t3 ==== in4-3.11 SELECT * FROM t3 WHERE x IN (1, 2) OR y IN () ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 47 no such table: t3 ==== in4-3.12 SELECT * FROM t3 WHERE x IN (1, 2) AND y IN () ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== in4-3.21 SELECT * FROM t3 WHERE x=10 AND y IN (10); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 45 no such table: t3 ==== in4-3.22 SELECT * FROM t3 WHERE x IN (10) AND y=10; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 45 no such table: t3 ==== in4-3.23 SELECT * FROM t3 WHERE x IN (10) AND y IN (10); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 50 no such table: t3 ==== in4-3.24 SELECT * FROM t3 WHERE x=1 AND y NOT IN (10); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== in4-3.25 SELECT * FROM t3 WHERE x NOT IN (10) AND y=1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== in4-3.26 SELECT * FROM t3 WHERE x NOT IN (10) AND y NOT IN (10); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 58 no such table: t3 ==== in4-3.31 DROP INDEX t3i1; @@ -192,9 +192,9 @@ stmt 0 err 1 -1 no such table: t3 WHERE A.x=10 AND A.y IN (10) AND B.x=1 AND B.y IN (1); ---- -stmt 0 err 1 -1 no such index: t3i1 -stmt 19 err 1 -1 no such table: main.t3 -stmt 58 err 1 -1 no such table: t3 +stmt 0 err 1 -1 19 no such index: t3i1 +stmt 19 err 1 -1 58 no such table: main.t3 +stmt 58 err 1 -1 154 no such table: t3 ==== in4-3.32 EXPLAIN QUERY PLAN @@ -202,14 +202,14 @@ stmt 58 err 1 -1 no such table: t3 WHERE A.x=10 AND A.y IN (10) AND B.x=1 AND B.y IN (1); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 116 no such table: t3 ==== in4-3.33 SELECT *, '|' FROM t3 A, t3 B WHERE A.x IN (10) AND A.y=10 AND B.x IN (1) AND B.y=1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 95 no such table: t3 ==== in4-3.34 EXPLAIN QUERY PLAN @@ -217,45 +217,45 @@ stmt 0 err 1 -1 no such table: t3 WHERE A.x IN (10) AND A.y=10 AND B.x IN (1) AND B.y=1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 116 no such table: t3 ==== in4-3.41 SELECT * FROM t3 WHERE x IN (10,11); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 39 no such table: t3 ==== in4-3.42 EXPLAIN SELECT * FROM t3 WHERE x IN (10,11); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== in4-3.43 SELECT * FROM t3 WHERE x IN (10); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 36 no such table: t3 ==== in4-3.45 SELECT * FROM t3 WHERE x NOT IN (10,11,99999); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== in4-3.46 EXPLAIN SELECT * FROM t3 WHERE x NOT IN (10,11,99999); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 59 no such table: t3 ==== in4-3.47 SELECT * FROM t3 WHERE x NOT IN (10); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 40 no such table: t3 ==== in4-3.48 EXPLAIN SELECT * FROM t3 WHERE x NOT IN (10); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 50 no such table: t3 ==== in4-4.1 CREATE TABLE t4a(a TEXT, b TEXT COLLATE nocase, c); @@ -265,35 +265,35 @@ stmt 0 err 1 -1 no such table: t3 SELECT c FROM t4a WHERE a=b ORDER BY c; ---- stmt 0 ok -stmt 54 err 1 -1 no such table: t4a -stmt 95 err 1 -1 no such table: t4a -stmt 136 err 1 -1 no such table: t4a -stmt 177 err 1 -1 no such table: t4a +stmt 54 err 1 -1 95 no such table: t4a +stmt 95 err 1 -1 136 no such table: t4a +stmt 136 err 1 -1 177 no such table: t4a +stmt 177 err 1 -1 219 no such table: t4a ==== in4-4.2 SELECT c FROM t4a WHERE b=a ORDER BY c; ---- -stmt 0 err 1 -1 no such table: t4a +stmt 0 err 1 -1 42 no such table: t4a ==== in4-4.3 SELECT c FROM t4a WHERE (a||'')=b ORDER BY c; ---- -stmt 0 err 1 -1 no such table: t4a +stmt 0 err 1 -1 48 no such table: t4a ==== in4-4.4 SELECT c FROM t4a WHERE (a||'')=(b||'') ORDER BY c; ---- -stmt 0 err 1 -1 no such table: t4a +stmt 0 err 1 -1 54 no such table: t4a ==== in4-4.5 SELECT c FROM t4a WHERE a IN (b) ORDER BY c; ---- -stmt 0 err 1 -1 no such table: t4a +stmt 0 err 1 -1 47 no such table: t4a ==== in4-4.6 SELECT c FROM t4a WHERE (a||'') IN (b) ORDER BY c; ---- -stmt 0 err 1 -1 no such table: t4a +stmt 0 err 1 -1 53 no such table: t4a ==== in4-4.11 CREATE TABLE t4b(a TEXT, b NUMERIC, c); @@ -301,48 +301,48 @@ stmt 0 err 1 -1 no such table: t4a SELECT c FROM t4b WHERE a=b; ---- stmt 0 ok -stmt 42 err 1 -1 no such table: t4b -stmt 79 err 1 -1 no such table: t4b +stmt 42 err 1 -1 79 no such table: t4b +stmt 79 err 1 -1 110 no such table: t4b ==== in4-4.12 SELECT c FROM t4b WHERE b=a; ---- -stmt 0 err 1 -1 no such table: t4b +stmt 0 err 1 -1 31 no such table: t4b ==== in4-4.13 SELECT c FROM t4b WHERE +a=b; ---- -stmt 0 err 1 -1 no such table: t4b +stmt 0 err 1 -1 32 no such table: t4b ==== in4-4.14 SELECT c FROM t4b WHERE a=+b; ---- -stmt 0 err 1 -1 no such table: t4b +stmt 0 err 1 -1 32 no such table: t4b ==== in4-4.15 SELECT c FROM t4b WHERE +b=a; ---- -stmt 0 err 1 -1 no such table: t4b +stmt 0 err 1 -1 32 no such table: t4b ==== in4-4.16 SELECT c FROM t4b WHERE b=+a; ---- -stmt 0 err 1 -1 no such table: t4b +stmt 0 err 1 -1 32 no such table: t4b ==== in4-4.17 SELECT c FROM t4b WHERE a IN (b); ---- -stmt 0 err 1 -1 no such table: t4b +stmt 0 err 1 -1 36 no such table: t4b ==== in4-4.18 SELECT c FROM t4b WHERE b IN (a); ---- -stmt 0 err 1 -1 no such table: t4b +stmt 0 err 1 -1 36 no such table: t4b ==== in4-4.19 SELECT c FROM t4b WHERE +b IN (a); ---- -stmt 0 err 1 -1 no such table: t4b +stmt 0 err 1 -1 37 no such table: t4b ==== in4-5.1 CREATE TABLE t5(c INTEGER PRIMARY KEY, d TEXT COLLATE nocase); @@ -353,11 +353,11 @@ stmt 0 err 1 -1 no such table: t4b SELECT 4 FROM t5 WHERE d IN ('FUZZ'); -- match ---- stmt 0 ok -stmt 65 err 1 -1 no such table: t5 -stmt 102 err 1 -1 no such table: t5 -stmt 142 err 1 -1 no such table: t5 -stmt 192 err 1 -1 no such table: t5 -stmt 245 err 1 -1 no such table: t5 +stmt 65 err 1 -1 102 no such table: t5 +stmt 102 err 1 -1 142 no such table: t5 +stmt 142 err 1 -1 192 no such table: t5 +stmt 192 err 1 -1 245 no such table: t5 +stmt 245 err 1 -1 295 no such table: t5 ==== in4-6.1 CREATE TABLE t6a(a INTEGER PRIMARY KEY, b); @@ -368,27 +368,27 @@ stmt 245 err 1 -1 no such table: t5 SELECT * FROM t6a, t6b WHERE a=3 AND b IN (c); ---- stmt 0 ok -stmt 46 err 1 -1 no such table: t6a +stmt 46 err 1 -1 89 no such table: t6a stmt 89 ok -stmt 135 err 1 -1 no such table: t6b -stmt 181 err 1 -1 no such table: t6a +stmt 135 err 1 -1 181 no such table: t6b +stmt 181 err 1 -1 231 no such table: t6a ==== in4-6.1-eqp EXPLAIN QUERY PLAN SELECT * FROM t6a, t6b WHERE a=3 AND b IN (c); ---- -stmt 0 err 1 -1 no such table: t6a +stmt 0 err 1 -1 70 no such table: t6a ==== in4-6.2 SELECT * FROM t6a, t6b WHERE a=3 AND c IN (b); ---- -stmt 0 err 1 -1 no such table: t6a +stmt 0 err 1 -1 49 no such table: t6a ==== in4-6.2-eqp EXPLAIN QUERY PLAN SELECT * FROM t6a, t6b WHERE a=3 AND c IN (b); ---- -stmt 0 err 1 -1 no such table: t6a +stmt 0 err 1 -1 70 no such table: t6a ==== 7.0 CREATE TABLE t1(a, b, c); @@ -399,14 +399,14 @@ stmt 0 err 1 -1 no such table: t6a ---- stmt 0 ok stmt 28 ok -stmt 53 err 1 -1 no such table: main.t1 -stmt 86 err 1 -1 no such table: t2 -stmt 117 err 1 -1 no such table: t1 +stmt 53 err 1 -1 86 no such table: main.t1 +stmt 86 err 1 -1 117 no such table: t2 +stmt 117 err 1 -1 160 no such table: t1 ==== 7.1 SELECT * FROM t2 LEFT JOIN t1 ON c = d AND b IN (10,10,10); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 62 no such table: t2 ==== 7.2 CREATE VIRTUAL TABLE t1 USING rtree(a, b, c); @@ -415,12 +415,12 @@ stmt 0 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 50 ok -stmt 89 err 1 -1 no such table: t2 +stmt 89 err 1 -1 122 no such table: t2 ==== 7.3 SELECT * FROM t2 LEFT JOIN t1 ON c IN (d) AND b IN (10,10,10); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 67 no such table: t2 ==== 8.0 CREATE TABLE t1(x INTEGER PRIMARY KEY, y); @@ -432,27 +432,27 @@ stmt 0 err 1 -1 no such table: t2 INSERT INTO sqlite_stat1 VALUES('t1', 't1y','100 1'); ---- stmt 0 ok -stmt 45 err 1 -1 no such table: main.t1 -stmt 81 err 1 -1 no such table: t1 +stmt 45 err 1 -1 81 no such table: main.t1 +stmt 81 err 1 -1 144 no such table: t1 stmt 144 ok -stmt 166 err 1 -1 no such table: t2 +stmt 166 err 1 -1 206 no such table: t2 stmt 206 ok -stmt 231 err 1 -1 no such table: sqlite_stat1 +stmt 231 err 1 -1 287 no such table: sqlite_stat1 ==== 8.1 SELECT t1.x FROM t2 CROSS JOIN t1 WHERE t2.z = t1.y; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 55 no such table: t2 ==== 8.2 SELECT t1.x FROM t2 CROSS JOIN t1 WHERE t2.z = t1.y AND +t1.x IN (111, 222); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 79 no such table: t2 ==== 8.3 SELECT t1.x FROM t2 CROSS JOIN t1 WHERE t2.z = t1.y AND t1.x IN (111, 222); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 78 no such table: t2 ==== 9.0 CREATE TABLE node(node_id INTEGER PRIMARY KEY); @@ -472,11 +472,11 @@ stmt 0 err 1 -1 no such table: t2 stmt 0 ok stmt 50 ok stmt 99 ok -stmt 154 err 1 -1 no such table: main.edge -stmt 210 err 1 -1 no such table: main.edge +stmt 154 err 1 -1 210 no such table: main.edge +stmt 210 err 1 -1 266 no such table: main.edge stmt 266 ok -stmt 277 err 1 -1 no such table: sqlite_stat1 -stmt 305 err 1 -1 no such table: sqlite_stat1 +stmt 277 err 1 -1 305 no such table: sqlite_stat1 +stmt 305 err 1 -1 491 no such table: sqlite_stat1 stmt 491 ok ==== 10.0 @@ -493,12 +493,12 @@ stmt 491 ok SELECT d FROM t1 WHERE 0=a AND b IN (-17,-4,-3,1,5,25,7798); ---- stmt 0 ok -stmt 61 err 1 -1 no such table: t1 +stmt 61 err 1 -1 158 no such table: t1 stmt 158 ok -stmt 183 err 1 -1 no such table: sqlite_stat1 +stmt 183 err 1 -1 240 no such table: sqlite_stat1 stmt 240 ok stmt 265 ok -stmt 304 err 1 -1 no such table: t1 +stmt 304 err 1 -1 367 no such table: t1 ==== 11.0 CREATE TABLE t1(a TEXT, b INT, c INT, d INT); @@ -510,11 +510,11 @@ stmt 304 err 1 -1 no such table: t1 ANALYZE sqlite_schema; ---- stmt 0 ok -stmt 48 err 1 -1 no such table: t1 -stmt 88 err 1 -1 no such table: t1 -stmt 137 err 1 -1 no such table: main.t1 +stmt 48 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 137 no such table: t1 +stmt 137 err 1 -1 172 no such table: main.t1 stmt 172 ok -stmt 197 err 1 -1 no such table: sqlite_stat1 +stmt 197 err 1 -1 268 no such table: sqlite_stat1 stmt 268 ok ==== 11.1 @@ -524,7 +524,7 @@ stmt 268 ok AND c GLOB 'abc*xyz')) AND c BETWEEN 'abc' AND 'xyz'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 197 no such table: t1 ==== 11.2 EXPLAIN SELECT * FROM t1 @@ -533,7 +533,7 @@ stmt 0 err 1 -1 no such table: t1 AND c GLOB 'abc*xyz')) AND c BETWEEN 'abc' AND 'xyz'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 205 no such table: t1 ==== 12.0 CREATE TABLE t1(a,b,c); @@ -552,24 +552,24 @@ stmt 0 err 1 -1 no such table: t1 OR (b = 1119 AND c IN (1115, 1023)); ---- stmt 0 ok -stmt 26 err 1 -1 no such table: main.t1 -stmt 61 err 1 -1 no such table: main.t1 -stmt 96 err 1 -1 no such table: t1 -stmt 135 err 1 -1 no such table: t1 -stmt 174 err 1 -1 no such table: t1 -stmt 214 err 1 -1 no such table: t1 +stmt 26 err 1 -1 61 no such table: main.t1 +stmt 61 err 1 -1 96 no such table: main.t1 +stmt 96 err 1 -1 135 no such table: t1 +stmt 135 err 1 -1 174 no such table: t1 +stmt 174 err 1 -1 214 no such table: t1 +stmt 214 err 1 -1 254 no such table: t1 stmt 254 ok -stmt 279 err 1 -1 no such table: sqlite_stat1 -stmt 343 err 1 -1 no such table: sqlite_stat1 +stmt 279 err 1 -1 343 no such table: sqlite_stat1 +stmt 343 err 1 -1 407 no such table: sqlite_stat1 stmt 407 ok -stmt 432 err 1 -1 no such table: t1 +stmt 432 err 1 -1 544 no such table: t1 ==== 12.1 SELECT * FROM t1 WHERE (b = 1137 AND c IN (97, 98)) OR (b = 1119 AND c IN (1115, 1023)); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 100 no such table: t1 ==== 13.0 CREATE TABLE t1(id INTEGER PRIMARY KEY, a INT, b INT, c INT); @@ -588,12 +588,12 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY +id; ---- stmt 0 ok -stmt 64 err 1 -1 no such table: t1 -stmt 99 err 1 -1 no such table: t1 -stmt 134 err 1 -1 no such table: t1 -stmt 169 err 1 -1 no such table: t1 +stmt 64 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 134 no such table: t1 +stmt 134 err 1 -1 169 no such table: t1 +stmt 169 err 1 -1 204 no such table: t1 stmt 204 ok -stmt 229 err 1 -1 no such table: sqlite_stat1 -stmt 290 err 1 -1 no such table: main.t1 +stmt 229 err 1 -1 290 no such table: sqlite_stat1 +stmt 290 err 1 -1 323 no such table: main.t1 stmt 323 ok -stmt 355 err 1 -1 no such table: t1 +stmt 355 err 1 -1 451 no such table: t1 diff --git a/parser/testdata/in5.test b/parser/testdata/in5.test index d3a68e0..74ef355 100644 --- a/parser/testdata/in5.test +++ b/parser/testdata/in5.test @@ -16,86 +16,86 @@ SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY c; ---- stmt 0 ok -stmt 45 err 1 -1 no such table: t1x +stmt 45 err 1 -1 92 no such table: t1x stmt 92 ok -stmt 132 err 1 -1 no such table: t1y +stmt 132 err 1 -1 175 no such table: t1y stmt 175 ok -stmt 212 err 1 -1 no such table: t1z +stmt 212 err 1 -1 263 no such table: t1z stmt 263 ok -stmt 322 err 1 -1 no such table: t2 -stmt 496 err 1 -1 no such table: t1x -stmt 539 err 1 -1 no such table: t1y -stmt 582 err 1 -1 no such table: t1z -stmt 625 err 1 -1 no such table: t2 +stmt 322 err 1 -1 496 no such table: t2 +stmt 496 err 1 -1 539 no such table: t1x +stmt 539 err 1 -1 582 no such table: t1y +stmt 582 err 1 -1 625 no such table: t1z +stmt 625 err 1 -1 699 no such table: t2 ==== in5-1.2 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 74 no such table: t2 ==== in5-1.3 SELECT d FROM t2 WHERE a IN t3x AND b IN t3y AND c IN t3z ORDER BY d; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 74 no such table: t2 ==== in5-2.1 CREATE INDEX t2abc ON t2(a,b,c); SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d; ---- -stmt 0 err 1 -1 no such table: main.t2 -stmt 37 err 1 -1 no such table: t2 +stmt 0 err 1 -1 37 no such table: main.t2 +stmt 37 err 1 -1 111 no such table: t2 ==== in5-2.2 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 74 no such table: t2 ==== in5-2.4 SELECT d FROM t2 WHERE a IN t3x AND b IN t3y AND c IN t3z ORDER BY d; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 74 no such table: t2 ==== in5-3.1 DROP INDEX t2abc; CREATE INDEX t2ab ON t2(a,b); SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d; ---- -stmt 0 err 1 -1 no such index: t2abc -stmt 22 err 1 -1 no such table: main.t2 -stmt 56 err 1 -1 no such table: t2 +stmt 0 err 1 -1 22 no such index: t2abc +stmt 22 err 1 -1 56 no such table: main.t2 +stmt 56 err 1 -1 130 no such table: t2 ==== in5-3.2 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 74 no such table: t2 ==== in5-4.1 DROP INDEX t2ab; CREATE INDEX t2abcd ON t2(a,b,c,d); SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d; ---- -stmt 0 err 1 -1 no such index: t2ab -stmt 21 err 1 -1 no such table: main.t2 -stmt 61 err 1 -1 no such table: t2 +stmt 0 err 1 -1 21 no such index: t2ab +stmt 21 err 1 -1 61 no such table: main.t2 +stmt 61 err 1 -1 135 no such table: t2 ==== in5-4.2 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 74 no such table: t2 ==== in5-5.1 DROP INDEX t2abcd; CREATE INDEX t2cbad ON t2(c,b,a,d); SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d; ---- -stmt 0 err 1 -1 no such index: t2abcd -stmt 23 err 1 -1 no such table: main.t2 -stmt 63 err 1 -1 no such table: t2 +stmt 0 err 1 -1 23 no such index: t2abcd +stmt 23 err 1 -1 63 no such table: main.t2 +stmt 63 err 1 -1 137 no such table: t2 ==== in5-5.2 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 74 no such table: t2 ==== 6.1.1 CREATE TABLE t1(a COLLATE nocase); @@ -103,13 +103,13 @@ stmt 0 err 1 -1 no such table: t2 INSERT INTO t1 VALUES('ONE'); ---- stmt 0 ok -stmt 37 err 1 -1 no such table: t1 -stmt 69 err 1 -1 no such table: t1 +stmt 37 err 1 -1 69 no such table: t1 +stmt 69 err 1 -1 101 no such table: t1 ==== 6.1.2 SELECT count(*) FROM t1 WHERE a COLLATE BINARY IN (SELECT DISTINCT a FROM t1) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 81 no such table: t1 ==== 6.2.1 CREATE TABLE t3(a, b); @@ -124,25 +124,25 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t3 VALUES(3, 9); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t3 -stmt 56 err 1 -1 no such table: t3 -stmt 87 err 1 -1 no such table: t3 -stmt 118 err 1 -1 no such table: t3 -stmt 149 err 1 -1 no such table: t3 -stmt 180 err 1 -1 no such table: t3 -stmt 211 err 1 -1 no such table: t3 -stmt 242 err 1 -1 no such table: t3 -stmt 273 err 1 -1 no such table: t3 +stmt 25 err 1 -1 56 no such table: t3 +stmt 56 err 1 -1 87 no such table: t3 +stmt 87 err 1 -1 118 no such table: t3 +stmt 118 err 1 -1 149 no such table: t3 +stmt 149 err 1 -1 180 no such table: t3 +stmt 180 err 1 -1 211 no such table: t3 +stmt 211 err 1 -1 242 no such table: t3 +stmt 242 err 1 -1 273 no such table: t3 +stmt 273 err 1 -1 304 no such table: t3 ==== 6.2.2 SELECT count(*) FROM t3 WHERE b IN (SELECT DISTINCT a FROM t3 LIMIT 5); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 74 no such table: t3 ==== 6.2.3 SELECT count(*) FROM t3 WHERE b IN (SELECT a FROM t3 LIMIT 5); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 74 no such table: t3 ==== 6.3.1 CREATE TABLE x1(a); @@ -153,9 +153,9 @@ stmt 0 err 1 -1 no such table: t3 ---- stmt 0 ok stmt 22 ok -stmt 44 err 1 -1 no such table: x1 -stmt 82 err 1 -1 no such table: x2 -stmt 115 err 1 -1 no such table: x2 +stmt 44 err 1 -1 82 no such table: x1 +stmt 82 err 1 -1 115 no such table: x2 +stmt 115 err 1 -1 189 no such table: x2 ==== 7.1 CREATE TABLE y1(a, b); @@ -171,75 +171,75 @@ stmt 115 err 1 -1 no such table: x2 ---- stmt 0 ok stmt 25 ok -stmt 47 err 1 -1 no such table: y1 -stmt 87 err 1 -1 no such table: y1 -stmt 126 err 1 -1 no such table: y1 -stmt 167 err 1 -1 no such table: y2 -stmt 200 err 1 -1 no such table: y2 -stmt 232 err 1 -1 no such table: y2 +stmt 47 err 1 -1 87 no such table: y1 +stmt 87 err 1 -1 126 no such table: y1 +stmt 126 err 1 -1 167 no such table: y1 +stmt 167 err 1 -1 200 no such table: y2 +stmt 200 err 1 -1 232 no such table: y2 +stmt 232 err 1 -1 266 no such table: y2 ==== 7.2.1 SELECT a FROM y1 WHERE b NOT IN (SELECT a FROM y2); ---- -stmt 0 err 1 -1 no such table: y1 +stmt 0 err 1 -1 54 no such table: y1 ==== 7.2.2 SELECT a FROM y1 WHERE b IN (SELECT a FROM y2); ---- -stmt 0 err 1 -1 no such table: y1 +stmt 0 err 1 -1 50 no such table: y1 ==== 7.3.1 CREATE INDEX y2c ON y2(c); SELECT a FROM y1 WHERE b NOT IN (SELECT a FROM y2); ---- -stmt 0 err 1 -1 no such table: main.y2 -stmt 29 err 1 -1 no such table: y1 +stmt 0 err 1 -1 29 no such table: main.y2 +stmt 29 err 1 -1 83 no such table: y1 ==== 7.3.2 SELECT a FROM y1 WHERE b IN (SELECT a FROM y2); ---- -stmt 0 err 1 -1 no such table: y1 +stmt 0 err 1 -1 50 no such table: y1 ==== 8.0 CREATE TABLE n1(a INTEGER PRIMARY KEY, b VARCHAR(500)); CREATE UNIQUE INDEX n1a ON n1(a); ---- stmt 0 ok -stmt 58 err 1 -1 no such table: main.n1 +stmt 58 err 1 -1 94 no such table: main.n1 ==== 8.1 SELECT count(*) FROM n1 WHERE a IN (1, 2, 3) ---- -stmt 0 err 1 -1 no such table: n1 +stmt 0 err 1 -1 48 no such table: n1 ==== 8.2 SELECT count(*) FROM n1 WHERE a IN (SELECT +a FROM n1) ---- -stmt 0 err 1 -1 no such table: n1 +stmt 0 err 1 -1 58 no such table: n1 ==== 8.3 INSERT INTO n1 VALUES(1, NULL), (2, NULL), (3, NULL); SELECT count(*) FROM n1 WHERE a IN (1, 2, 3) ---- -stmt 0 err 1 -1 no such table: n1 -stmt 56 err 1 -1 no such table: n1 +stmt 0 err 1 -1 56 no such table: n1 +stmt 56 err 1 -1 104 no such table: n1 ==== 8.4 SELECT count(*) FROM n1 WHERE a IN (SELECT +a FROM n1) ---- -stmt 0 err 1 -1 no such table: n1 +stmt 0 err 1 -1 58 no such table: n1 ==== 9.0 CREATE TABLE t9(a INTEGER PRIMARY KEY); INSERT INTO t9 VALUES (44), (45); ---- stmt 0 ok -stmt 42 err 1 -1 no such table: t9 +stmt 42 err 1 -1 78 no such table: t9 ==== 9.1 SELECT * FROM t9 WHERE a IN (44, 45, 44, 45) ---- -stmt 0 err 1 -1 no such table: t9 +stmt 0 err 1 -1 48 no such table: t9 ==== 9.0.dup1 CREATE TABLE t0(c0); @@ -248,17 +248,17 @@ stmt 0 err 1 -1 no such table: t9 ---- stmt 0 ok stmt 23 ok -stmt 92 err 1 -1 no such table: t0 +stmt 92 err 1 -1 128 no such table: t0 ==== 9.1.dup1 SELECT lower('1e500') FROM t0 WHERE rowid NOT IN (0, 0, lower('1e500')); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 75 no such table: t0 ==== 9.2 SELECT lower('1e500') FROM t0 WHERE rowid != lower('1e500'); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 63 no such table: t0 ==== 10.0 CREATE TABLE t1(a, b TEXT COLLATE NOCASE); @@ -266,20 +266,20 @@ stmt 0 err 1 -1 no such table: t0 INSERT INTO t1 VALUES('ghi', 'jkl'); ---- stmt 0 ok -stmt 45 err 1 -1 no such table: t1 -stmt 84 err 1 -1 no such table: t1 +stmt 45 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 123 no such table: t1 ==== 10.1 SELECT rowid FROM t1 WHERE (a, b) IN ( VALUES('abc', 'def'), ('ghi', 'JKL') ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 81 no such table: t1 ==== 10.2 CREATE INDEX i1 ON t1(a, b COLLATE BINARY); ---- -stmt 0 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 46 no such table: main.t1 ==== 10.3 SELECT rowid FROM t1 WHERE (a, b) IN ( VALUES('abc', 'def'), ('ghi', 'JKL') ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 81 no such table: t1 diff --git a/parser/testdata/parser1.test b/parser/testdata/parser1.test index fd1b502..0e06564 100644 --- a/parser/testdata/parser1.test +++ b/parser/testdata/parser1.test @@ -6,7 +6,7 @@ FOREIGN KEY(b COLLATE nocase DESC) REFERENCES t1(a COLLATE binary ASC) ); ---- -stmt 0 err 1 -1 syntax error after column name "b" +stmt 0 err 1 -1 94 syntax error after column name "b" ==== parser1-1.2 CREATE TABLE t1( @@ -24,7 +24,7 @@ stmt 0 err 1 -1 syntax error after column name "b" SELECT name FROM sqlite_master WHERE sql LIKE '%collate%'; ---- stmt 0 ok -stmt 96 err 1 -1 no such table: t1 +stmt 96 err 1 -1 147 no such table: t1 stmt 147 ok stmt 176 ok stmt 334 ok @@ -37,7 +37,7 @@ stmt 334 ok )' WHERE name='t1'; SELECT name FROM sqlite_master WHERE sql LIKE '%ASC%'; ---- -stmt 0 err 1 -1 table sqlite_master may not be modified +stmt 0 err 1 -1 147 table sqlite_master may not be modified stmt 147 ok ==== parser1-2.1 @@ -45,14 +45,14 @@ stmt 147 ok c(x COLLATE binary) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<5) SELECT x FROM c; ---- -stmt 0 err 1 -1 syntax error after column name "x" +stmt 0 err 1 -1 41 syntax error after column name "x" ==== parser1-2.2 WITH RECURSIVE c(x ASC) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<5) SELECT x FROM c; ---- -stmt 0 err 1 -1 syntax error after column name "x" +stmt 0 err 1 -1 30 syntax error after column name "x" ==== parser1-3.1 CREATE TABLE t300(id INTEGER PRIMARY KEY); @@ -76,14 +76,14 @@ stmt 403 ok SELECT max(x) AND 0 FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== parser1-4.3 SELECT max(x) IN () FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 ==== parser1-4.4 SELECT max(x) NOT IN () FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 35 no such table: t1 diff --git a/parser/testdata/returning1.test b/parser/testdata/returning1.test index 50c4fd7..c7f2001 100644 --- a/parser/testdata/returning1.test +++ b/parser/testdata/returning1.test @@ -4,69 +4,69 @@ INSERT INTO t1(b) VALUES(10),('happy'),(NULL) RETURNING a,b,c; ---- stmt 0 ok -stmt 60 err 1 -1 no such table: t1 +stmt 60 err 1 -1 125 no such table: t1 ==== 1.1 SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 20 no such table: t1 ==== 1.2 INSERT INTO t1(b,c) VALUES(5,99) RETURNING b,c,a,rowid; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 58 no such table: t1 ==== 1.3 SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 20 no such table: t1 ==== 1.4 INSERT INTO t1 DEFAULT VALUES RETURNING *; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 45 no such table: t1 ==== 1.5 SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 20 no such table: t1 ==== 1.6 CREATE TABLE t2(x,y,z); INSERT INTO t2 VALUES(11,12,13),(21,'b','c'),(31,'b-value',4.75); ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t2 +stmt 26 err 1 -1 94 no such table: t2 ==== 1.7 INSERT INTO t1 SELECT * FROM t2 RETURNING *; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 47 no such table: t1 ==== 1.8 SELECT *, '|' FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 25 no such table: t1 ==== 2.1 UPDATE t1 SET c='bellum' WHERE c='pax' RETURNING rowid, b, '|'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 66 no such table: t1 ==== 2.2 SELECT *, '|' FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 25 no such table: t1 ==== 3.1 DELETE FROM t1 WHERE c='bellum' RETURNING rowid, *, '|'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 59 no such table: t1 ==== 3.2 SELECT *, '|' FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 25 no such table: t1 ==== 4.1 CREATE TABLE t4(a INT, b INT DEFAULT 1234, c INT DEFAULT -16); @@ -74,34 +74,34 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t4(a,b,c) VALUES(1,2,3); ---- stmt 0 ok -stmt 65 err 1 -1 no such table: main.t4 -stmt 101 err 1 -1 no such table: t4 +stmt 65 err 1 -1 101 no such table: main.t4 +stmt 101 err 1 -1 140 no such table: t4 ==== 4.2 INSERT INTO t4(a,b,c) VALUES(1,22,33) ON CONFLICT(a) DO UPDATE SET b=44 RETURNING *; ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 91 no such table: t4 ==== 4.3 SELECT * FROM t4; ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 20 no such table: t4 ==== 4.4 DELETE FROM t4; INSERT INTO t4 VALUES(1,2,3),(4,5,6),(7,8,9); ---- -stmt 0 err 1 -1 no such table: t4 -stmt 18 err 1 -1 no such table: t4 +stmt 0 err 1 -1 18 no such table: t4 +stmt 18 err 1 -1 66 no such table: t4 ==== 4.5 INSERT INTO t4(a,b,c) VALUES(2,3,4),(4,5,6),(5,6,7) ON CONFLICT(a) DO UPDATE SET b=100 RETURNING *, '|'; ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 111 no such table: t4 ==== 5.0 CREATE TABLE t1(xyz); @@ -113,33 +113,33 @@ stmt 24 ok UPDATE t2 SET b='123' WHERE b='abc' RETURNING (SELECT b FROM t1); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 68 no such table: t2 ==== 5.2 INSERT INTO t2(b) VALUES('abc'); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 35 no such table: t2 ==== 5.3 UPDATE t2 SET b='123' WHERE b='abc' RETURNING (SELECT b FROM t1); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 68 no such table: t2 ==== 5.4 INSERT INTO t2(b) VALUES('abc'); INSERT INTO t1(xyz) VALUES(1); UPDATE t2 SET b='123' WHERE b='abc' RETURNING b; ---- -stmt 0 err 1 -1 no such table: t2 -stmt 35 err 1 -1 no such table: t1 -stmt 68 err 1 -1 no such table: t2 +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 119 no such table: t2 ==== 5.5 INSERT INTO t2(b) VALUES('abc'); UPDATE t2 SET b='123' WHERE b='abc' RETURNING (SELECT b FROM t1); ---- -stmt 0 err 1 -1 no such table: t2 -stmt 35 err 1 -1 no such table: t2 +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 103 no such table: t2 ==== 6.0 CREATE TABLE t1(id INTEGER PRIMARY KEY); @@ -150,16 +150,16 @@ stmt 35 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 43 ok -stmt 76 err 1 -1 no such table: t1 -stmt 116 err 1 -1 no such table: t2 -stmt 162 err 1 -1 no such table: t1 +stmt 76 err 1 -1 116 no such table: t1 +stmt 116 err 1 -1 162 no such table: t2 +stmt 162 err 1 -1 227 no such table: t1 ==== 6.1 UPDATE t1 SET id=id+y FROM t2 WHERE t1.id=t2.x RETURNING *, '|'; SELECT * FROM t1 ORDER BY id; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 67 err 1 -1 no such table: t1 +stmt 0 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 99 no such table: t1 ==== 7.1 CREATE TABLE t1(a INT, b INT); @@ -169,43 +169,43 @@ stmt 67 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 33 ok -stmt 66 err 1 -1 no such table: t1 -stmt 101 err 1 -1 no such table: t2 +stmt 66 err 1 -1 101 no such table: t1 +stmt 101 err 1 -1 137 no such table: t2 ==== 7.2 UPDATE t1 SET b=b+1 RETURNING new.b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 39 no such table: t1 ==== 7.3 UPDATE t1 SET b=b+1 RETURNING old.b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 39 no such table: t1 ==== 7.4 UPDATE t1 SET b=b+1 RETURNING another.b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 43 no such table: t1 ==== 7.5 UPDATE t1 SET b=b+y FROM t2 WHERE t2.x=t1.a RETURNING t2.x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 62 no such table: t1 ==== 7.6 UPDATE t1 SET b=b+y FROM t2 WHERE t2.x=t1.a RETURNING t1.b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 62 no such table: t1 ==== 7.7 UPDATE t1 AS alias SET b=123 RETURNING alias.b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 50 no such table: t1 ==== 7.8 UPDATE t1 AS alias SET b=alias.b+1000 RETURNING t1.b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 56 no such table: t1 ==== 8.1 CREATE TABLE t1(a); @@ -215,28 +215,28 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 22 ok -stmt 46 err 1 -1 no such table: t1 -stmt 74 err 1 -1 no such table: t2 +stmt 46 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 105 no such table: t2 ==== 8.2 INSERT INTO t1 VALUES(3) RETURNING a, (SELECT c FROM t2 WHERE new.a=t2.b) AS x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 82 no such table: t1 ==== 8.3 INSERT INTO t1 VALUES(3) RETURNING a, (SELECT c FROM t2 WHERE old.a=t2.b) AS x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 82 no such table: t1 ==== 8.4 INSERT INTO t1 VALUES(3) RETURNING a, (SELECT c FROM t2 WHERE t1.a=t2.b) AS x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 81 no such table: t1 ==== 9.1 UPDATE pragma_encoding SET encoding='UTF-8' RETURNING a, b, *; ---- -stmt 0 err 1 -1 table pragma_encoding may not be modified +stmt 0 err 1 -1 65 table pragma_encoding may not be modified ==== 10.1 CREATE TABLE t1_a(a, b); @@ -250,9 +250,9 @@ stmt 0 err 1 -1 table pragma_encoding may not be modified ---- stmt 0 ok stmt 27 ok -stmt 70 err 1 -1 no such table: t1_a -stmt 108 err 1 -1 no such table: t1_a -stmt 145 err 1 -1 no such table: t1_a +stmt 70 err 1 -1 108 no such table: t1_a +stmt 108 err 1 -1 145 no such table: t1_a +stmt 145 err 1 -1 182 no such table: t1_a stmt 182 ok ==== 10.2 @@ -263,38 +263,38 @@ stmt 182 ok INSERT INTO log VALUES('update', new.rowid, new.a, new.b); END; ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 121 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 51 no such table: main.t1 +stmt 121 err 1 -1 172 no such table: main.t1 ==== 10.3a INSERT INTO t1(a, b) VALUES(1234, 5678) RETURNING rowid; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 61 no such table: t1 ==== 10.3b UPDATE t1 SET a='z' WHERE b='y' RETURNING rowid; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 53 no such table: t1 ==== 10.4 SELECT * FROM log; ---- -stmt 0 err 1 -1 no such table: log +stmt 0 err 1 -1 23 no such table: log ==== 10.3a.dup1 INSERT INTO t1(a, b) VALUES(1234, 5678) RETURNING rowid; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 61 no such table: t1 ==== 10.3b.dup1 UPDATE t1 SET a='z' WHERE b='y' RETURNING rowid; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 53 no such table: t1 ==== 10.4.dup1 SELECT * FROM log; ---- -stmt 0 err 1 -1 no such table: log +stmt 0 err 1 -1 23 no such table: log ==== 11.1 CREATE TEMP TABLE t1(a,b); @@ -325,58 +325,58 @@ stmt 0 ok stmt 29 ok stmt 58 ok stmt 87 ok -stmt 120 err 1 -1 no such table: t1 -stmt 234 err 1 -1 no such table: t1 -stmt 349 err 1 -1 no such table: t1 -stmt 463 err 1 -1 no such table: t2 -stmt 578 err 1 -1 no such table: t3 -stmt 692 err 1 -1 no such table: t3 -stmt 807 err 1 -1 no such table: t1 +stmt 120 err 1 -1 172 no such table: t1 +stmt 234 err 1 -1 287 no such table: t1 +stmt 349 err 1 -1 401 no such table: t1 +stmt 463 err 1 -1 516 no such table: t2 +stmt 578 err 1 -1 630 no such table: t3 +stmt 692 err 1 -1 745 no such table: t3 +stmt 807 err 1 -1 879 no such table: t1 ==== 11.2 UPDATE t1 SET b=9 WHERE a=1 RETURNING a, b, 'x'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 51 no such table: t1 ==== 11.3 DELETE FROM t1 WHERE a<>'xray' RETURNING a, b, '@'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== 11.4 SELECT * FROM log; DELETE FROM log; ---- -stmt 0 err 1 -1 no such table: log -stmt 21 err 1 -1 no such table: log +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 40 no such table: log ==== 11.5 INSERT INTO t2 VALUES('bravo','charlie') RETURNING d, c, 'z'; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 64 no such table: t2 ==== 11.6 SELECT * FROM log; DELETE FROM log; ---- -stmt 0 err 1 -1 no such table: log -stmt 21 err 1 -1 no such table: log +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 40 no such table: log ==== 11.7 INSERT INTO t3(e) VALUES(1),(2),(3) RETURNING 'I', e; UPDATE t3 SET f=e+100 RETURNING 'U', e, f; DELETE FROM t3 WHERE f>100 RETURNING 'D', e, f; ---- -stmt 0 err 1 -1 no such table: t3 -stmt 56 err 1 -1 no such table: t3 -stmt 101 err 1 -1 no such table: t3 +stmt 0 err 1 -1 56 no such table: t3 +stmt 56 err 1 -1 101 no such table: t3 +stmt 101 err 1 -1 151 no such table: t3 ==== 11.6.dup1 SELECT * FROM log; DELETE FROM log; ---- -stmt 0 err 1 -1 no such table: log -stmt 21 err 1 -1 no such table: log +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 40 no such table: log ==== 11.11 CREATE TEMP TABLE t1(a,b); @@ -386,15 +386,15 @@ stmt 21 err 1 -1 no such table: log INSERT INTO t1 VALUES(5,30); ---- stmt 0 ok -stmt 29 err 1 -1 no such table: main.t1 -stmt 90 err 1 -1 no such table: t1 -stmt 120 err 1 -1 no such trigger: r1 -stmt 139 err 1 -1 no such table: t1 +stmt 29 err 1 -1 75 no such table: main.t1 +stmt 90 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 139 no such trigger: r1 +stmt 139 err 1 -1 170 no such table: t1 ==== 11.12 SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 20 no such table: t1 ==== 13.0 CREATE VIRTUAL TABLE t1 USING rtree(a, b, c); @@ -407,7 +407,7 @@ stmt 48 ok INSERT INTO t1(a,b,c) VALUES(1,2,3) RETURNING (SELECT b FROM t2); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 71 no such table: t1 ==== 14.0 PRAGMA foreign_keys(1); @@ -421,24 +421,24 @@ stmt 73 ok INSERT INTO child(parent_id) VALUES(123) RETURNING id; ---- -stmt 0 err 1 -1 no such table: child +stmt 0 err 1 -1 57 no such table: child ==== 15.0 CREATE TABLE t1(x REAL); INSERT INTO t1(x) VALUES(5.0) RETURNING x, affinity(x); ---- stmt 0 ok -stmt 27 err 1 -1 no such table: t1 +stmt 27 err 1 -1 85 no such table: t1 ==== 15.1 UPDATE t1 SET x=x+1 RETURNING x, affinity(x); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 48 no such table: t1 ==== 15.2 DELETE FROM t1 RETURNING x, affinity(x); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 43 no such table: t1 ==== 16.0 CREATE TABLE t1(a,b,c); @@ -447,14 +447,14 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t2 SELECT * FROM t1 RETURNING *; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t1 +stmt 26 err 1 -1 72 no such table: t1 stmt 72 ok -stmt 103 err 1 -1 no such table: t2 +stmt 103 err 1 -1 150 no such table: t2 ==== 16.1 SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 20 no such table: t2 ==== returning1-generated INSERT INTO foo (fooval) VALUES (17), (4711), (17) @@ -462,7 +462,7 @@ stmt 0 err 1 -1 no such table: t2 UPDATE SET refcnt = refcnt+1 RETURNING fooid; ---- -stmt 0 err 1 -1 no such table: foo +stmt 0 err 1 -1 132 no such table: foo ==== 17.0 CREATE TABLE bug(id INTEGER PRIMARY KEY NOT NULL, x); @@ -470,8 +470,8 @@ stmt 0 err 1 -1 no such table: foo UPDATE bug SET x=NULL WHERE id = 20 RETURNING quote(x), x IS NULL; ---- stmt 0 ok -stmt 56 err 1 -1 no such table: bug -stmt 98 err 1 -1 no such table: bug +stmt 56 err 1 -1 98 no such table: bug +stmt 98 err 1 -1 167 no such table: bug ==== 18.0 CREATE TABLE v0(c1 INT); @@ -480,12 +480,12 @@ stmt 98 err 1 -1 no such table: bug ---- stmt 0 ok stmt 27 ok -stmt 121 err 1 -1 no such table: main.view_2 +stmt 121 err 1 -1 175 no such table: main.view_2 ==== 18.1 INSERT INTO view_2 DEFAULT VALUES RETURNING *; ---- -stmt 0 err 1 -1 no such table: view_2 +stmt 0 err 1 -1 49 no such table: view_2 ==== 19.0 DROP TABLE IF EXISTS t1;CREATE TABLE t1(a); @@ -493,7 +493,7 @@ stmt 0 err 1 -1 no such table: view_2 ---- stmt 0 ok stmt 27 ok -stmt 46 err 1 -1 no such table: main.t1 +stmt 46 err 1 -1 91 no such table: main.t1 ==== 19.1 CREATE TRIGGER IF NOT EXISTS r1 AFTER DELETE ON t1 BEGIN @@ -501,7 +501,7 @@ stmt 46 err 1 -1 no such table: main.t1 INSERT INTO t1(a) VALUES (2) RETURNING TRUE; END; ---- -stmt 0 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 59 no such table: main.t1 ==== 20.1 CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); @@ -515,9 +515,9 @@ stmt 0 err 1 -1 no such table: main.t1 ROLLBACK; ---- stmt 0 ok -stmt 49 err 1 -1 no such table: t1 +stmt 49 err 1 -1 115 no such table: t1 stmt 115 ok -stmt 124 err 1 -1 no such table: t1 +stmt 124 err 1 -1 295 no such table: t1 stmt 295 ok ==== 20.2 @@ -530,7 +530,7 @@ stmt 295 ok ROLLBACK; ---- stmt 0 ok -stmt 9 err 1 -1 no such table: t1 +stmt 9 err 1 -1 169 no such table: t1 stmt 169 ok ==== 20.3 @@ -543,7 +543,7 @@ stmt 169 ok ROLLBACK; ---- stmt 0 ok -stmt 9 err 1 -1 no such table: t1 +stmt 9 err 1 -1 223 no such table: t1 stmt 223 ok ==== 21.0 @@ -556,7 +556,7 @@ stmt 29 ok INSERT INTO sqlite_temp_schema DEFAULT VALUES RETURNING sqlite_temp_schema.name; ---- -stmt 0 err 1 -1 table sqlite_temp_master may not be modified +stmt 0 err 1 -1 83 table sqlite_temp_master may not be modified ==== 22.0 PRAGMA writable_schema=ON; @@ -570,7 +570,7 @@ stmt 29 ok RETURNING (SELECT * FROM xyz AS sqlite_master WHERE a=sqlite_master.name); ---- -stmt 0 err 1 -1 table sqlite_temp_master may not be modified +stmt 0 err 1 -1 132 table sqlite_temp_master may not be modified ==== 23.0 PRAGMA recursive_triggers = 1; @@ -581,17 +581,17 @@ stmt 0 err 1 -1 table sqlite_temp_master may not be modified ---- stmt 0 ok stmt 33 ok -stmt 58 err 1 -1 no such table: main.t1 +stmt 58 err 1 -1 122 no such table: main.t1 ==== 23.1 INSERT INTO t1 VALUES(1, 'one') RETURNING *; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 47 no such table: t1 ==== 23.2 SELECT * FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 20 no such table: t1 ==== 24.0 CREATE VIRTUAL TABLE ft USING fts5(c); @@ -600,14 +600,14 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 43 ok -stmt 67 err 1 -1 no such table: t1 +stmt 67 err 1 -1 99 no such table: t1 ==== 24.1 SELECT * FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 22 no such table: t1 ==== 24.3 INSERT INTO ft VALUES('hello world') RETURNING * ---- -stmt 0 err 1 -1 no such table: ft +stmt 0 err 1 -1 54 no such table: ft diff --git a/parser/testdata/select1.test b/parser/testdata/select1.test index b9ec87a..d3cece0 100644 --- a/parser/testdata/select1.test +++ b/parser/testdata/select1.test @@ -1,136 +1,136 @@ ==== select1-1.4 SELECT f1 FROM test1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 21 no such table: test1 ==== select1-1.5 SELECT f2 FROM test1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 21 no such table: test1 ==== select1-1.6 SELECT f2, f1 FROM test1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 25 no such table: test1 ==== select1-1.7 SELECT f1, f2 FROM test1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 25 no such table: test1 ==== select1-1.8 SELECT * FROM test1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 20 no such table: test1 ==== select1-1.8.1 SELECT *, * FROM test1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 23 no such table: test1 ==== select1-1.8.2 SELECT *, min(f1,f2), max(f1,f2) FROM test1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 44 no such table: test1 ==== select1-1.8.3 SELECT 'one', *, 'two', * FROM test1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 37 no such table: test1 ==== select1-1.9 SELECT * FROM test1, test2 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 27 no such table: test1 ==== select1-1.9.1 SELECT *, 'hi' FROM test1, test2 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 33 no such table: test1 ==== select1-1.9.2 SELECT 'one', *, 'two', * FROM test1, test2 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 44 no such table: test1 ==== select1-1.10 SELECT test1.f1, test2.r1 FROM test1, test2 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 44 no such table: test1 ==== select1-1.11 SELECT test1.f1, test2.r1 FROM test2, test1 ---- -stmt 0 err 1 -1 no such table: test2 +stmt 0 err 1 -1 44 no such table: test2 ==== select1-1.11.1 SELECT * FROM test2, test1 ---- -stmt 0 err 1 -1 no such table: test2 +stmt 0 err 1 -1 27 no such table: test2 ==== select1-1.11.2 SELECT * FROM test1 AS a, test1 AS b ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 37 no such table: test1 ==== select1-1.12 SELECT max(test1.f1,test2.r1), min(test1.f2,test2.r2) FROM test2, test1 ---- -stmt 0 err 1 -1 no such table: test2 +stmt 0 err 1 -1 83 no such table: test2 ==== select1-1.13 SELECT min(test1.f1,test2.r1), max(test1.f2,test2.r2) FROM test1, test2 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 83 no such table: test1 ==== select1-2.5.1 SELECT count(*),count(a),count(b) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 42 no such table: t3 ==== select1-2.5.2 SELECT count(*),count(a),count(b) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 42 no such table: t4 ==== select1-2.5.3 SELECT count(*),count(a),count(b) FROM t4 WHERE b=5 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 52 no such table: t4 ==== select1-2.8.1 SELECT coalesce(min(a),'xyzzy') FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 40 no such table: t3 ==== select1-2.8.2 SELECT min(coalesce(a,'xyzzy')) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 40 no such table: t3 ==== select1-2.8.3 SELECT min(b), min(b) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 30 no such table: t4 ==== select1-2.13.1 SELECT coalesce(max(a),'xyzzy') FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 40 no such table: t3 ==== select1-2.13.2 SELECT max(coalesce(a,'xyzzy')) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 40 no such table: t3 ==== select1-2.17.1 SELECT sum(a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 22 no such table: t3 ==== select1-2.21 SELECT min(f1) AS m FROM test1 GROUP BY f1 HAVING max(m+5)<10 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 68 no such table: test1 ==== select1-2.22 SELECT coalesce(min(f1)+5,11) AS m FROM test1 GROUP BY f1 HAVING max(m+5)<10 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 94 no such table: test1 ==== select1-4.5 INSERT INTO test1(f1) SELECT f1 FROM test1 ORDER BY min(f1); ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 63 no such table: test1 ==== select1-4.5.dup1 SELECT f1 FROM test1 ORDER BY 8.4 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 39 no such table: test1 ==== select1-4.6 SELECT f1 FROM test1 ORDER BY '8.4' ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 41 no such table: test1 ==== select1-4.8 CREATE TABLE t5(a,b); @@ -139,46 +139,46 @@ stmt 0 err 1 -1 no such table: test1 SELECT * FROM t5 ORDER BY 1; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t5 -stmt 59 err 1 -1 no such table: t5 -stmt 91 err 1 -1 no such table: t5 +stmt 26 err 1 -1 59 no such table: t5 +stmt 59 err 1 -1 91 no such table: t5 +stmt 91 err 1 -1 124 no such table: t5 ==== select1-4.9.1 SELECT * FROM t5 ORDER BY 2; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 33 no such table: t5 ==== select1-4.9.2 SELECT * FROM t5 ORDER BY +2; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 34 no such table: t5 ==== select1-4.10.1 SELECT * FROM t5 ORDER BY 3; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 33 no such table: t5 ==== select1-4.10.2 SELECT * FROM t5 ORDER BY -1; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 34 no such table: t5 ==== select1-4.11 INSERT INTO t5 VALUES(3,10); SELECT * FROM t5 ORDER BY 2, 1 DESC; ---- -stmt 0 err 1 -1 no such table: t5 -stmt 33 err 1 -1 no such table: t5 +stmt 0 err 1 -1 33 no such table: t5 +stmt 33 err 1 -1 74 no such table: t5 ==== select1-4.12 SELECT * FROM t5 ORDER BY 1 DESC, b; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 41 no such table: t5 ==== select1-4.13 SELECT * FROM t5 ORDER BY b DESC, 1; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 41 no such table: t5 ==== select1-6.20 CREATE TABLE t6(a TEXT, b TEXT); @@ -191,18 +191,18 @@ stmt 0 err 1 -1 no such table: t5 ORDER BY 1 LIMIT 1) ---- stmt 0 ok -stmt 38 err 1 -1 no such table: t6 -stmt 75 err 1 -1 no such table: t6 -stmt 112 err 1 -1 no such table: t6 -stmt 149 err 1 -1 no such table: t6 -stmt 186 err 1 -1 no such table: t6 +stmt 38 err 1 -1 75 no such table: t6 +stmt 75 err 1 -1 112 no such table: t6 +stmt 112 err 1 -1 149 no such table: t6 +stmt 149 err 1 -1 186 no such table: t6 +stmt 186 err 1 -1 319 no such table: t6 ==== select1-6.21 SELECT a FROM t6 WHERE b IN (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x ORDER BY 1 DESC LIMIT 1) ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 138 no such table: t6 ==== select1-6.22 SELECT a FROM t6 WHERE b IN @@ -210,7 +210,7 @@ stmt 0 err 1 -1 no such table: t6 ORDER BY b LIMIT 2) ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 149 no such table: t6 ==== select1-6.23 SELECT a FROM t6 WHERE b IN @@ -218,28 +218,28 @@ stmt 0 err 1 -1 no such table: t6 ORDER BY x DESC LIMIT 2) ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 154 no such table: t6 ==== select1-7.9 SELECT f1 FROM test1 LIMIT 5+3 OFFSET 11 ORDER BY f2; ---- -stmt 0 err 1 47 near "ORDER": syntax error +stmt 0 err 1 47 52 near "ORDER": syntax error ==== select1-8.1 SELECT f1 FROM test1 WHERE 4.3+2.4 OR 1 ORDER BY f1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 52 no such table: test1 ==== select1-8.2 SELECT f1 FROM test1 WHERE ('x' || f1) BETWEEN 'x10' AND 'x20' ORDER BY f1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 84 no such table: test1 ==== select1-8.3 SELECT f1 FROM test1 WHERE 5-3==2 ORDER BY f1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 55 no such table: test1 ==== select1-8.4 SELECT coalesce(f1/(f1-11),'x'), @@ -247,48 +247,48 @@ stmt 0 err 1 -1 no such table: test1 coalesce(max(f1/(f1-33),6),'z') FROM test1 ORDER BY f1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 152 no such table: test1 ==== select1-8.5 SELECT min(1,2,3), -max(1,2,3) FROM test1 ORDER BY f1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 63 no such table: test1 ==== select1-10.1 SELECT f1 AS x FROM test1 ORDER BY x ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 42 no such table: test1 ==== select1-10.2 SELECT f1 AS x FROM test1 ORDER BY -x ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 43 no such table: test1 ==== select1-10.3 SELECT f1-23 AS x FROM test1 ORDER BY abs(x) ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 50 no such table: test1 ==== select1-10.4 SELECT f1-23 AS x FROM test1 ORDER BY -abs(x) ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 51 no such table: test1 ==== select1-10.5 SELECT f1-22 AS x, f2-22 as y FROM test1 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 46 no such table: test1 ==== select1-10.6 SELECT f1-22 AS x, f2-22 as y FROM test1 WHERE x>0 AND y<50 ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 65 no such table: test1 ==== select1-10.7 SELECT f1 COLLATE nocase AS x FROM test1 ORDER BY x ---- -stmt 0 err 1 -1 no such table: test1 +stmt 0 err 1 -1 57 no such table: test1 ==== select1-11.1 DELETE FROM t3; @@ -297,68 +297,68 @@ stmt 0 err 1 -1 no such table: test1 INSERT INTO t4 VALUES(3,4); SELECT * FROM t3, t4; ---- -stmt 0 err 1 -1 no such table: t3 -stmt 20 err 1 -1 no such table: t4 -stmt 40 err 1 -1 no such table: t3 -stmt 72 err 1 -1 no such table: t4 -stmt 104 err 1 -1 no such table: t3 +stmt 0 err 1 -1 20 no such table: t3 +stmt 20 err 1 -1 40 no such table: t4 +stmt 40 err 1 -1 72 no such table: t3 +stmt 72 err 1 -1 104 no such table: t4 +stmt 104 err 1 -1 130 no such table: t3 ==== select1-11.2.1 SELECT * FROM t3, t4; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 26 no such table: t3 ==== select1-11.4.1 SELECT t3.*, t4.b FROM t3, t4; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 35 no such table: t3 ==== select1-11.4.2 SELECT "t3".*, t4.b FROM t3, t4; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 37 no such table: t3 ==== select1-11.7 SELECT t3.b, t4.* FROM t3, t4; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 35 no such table: t3 ==== select1-11.10 SELECT t5.* FROM t3, t4; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 29 no such table: t3 ==== select1-11.11 SELECT t3.* FROM t3 AS x, t4; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 34 no such table: t3 ==== select1-12.4 DELETE FROM t3; INSERT INTO t3 VALUES(1,2); ---- -stmt 0 err 1 -1 no such table: t3 -stmt 20 err 1 -1 no such table: t3 +stmt 0 err 1 -1 20 no such table: t3 +stmt 20 err 1 -1 52 no such table: t3 ==== select1-12.5 SELECT * FROM t3 UNION SELECT 3 AS 'a', 4 ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 58 no such table: t3 ==== select1-12.6 SELECT 3, 4 UNION SELECT * FROM t3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 40 no such table: t3 ==== select1-12.7 SELECT * FROM t3 WHERE a=(SELECT 1); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 43 no such table: t3 ==== select1-12.8 SELECT * FROM t3 WHERE a=(SELECT 2); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 43 no such table: t3 ==== select1-14.1 SELECT * FROM sqlite_master WHERE rowid>10; @@ -388,23 +388,23 @@ stmt 0 ok INSERT INTO t1 VALUES(3); ---- stmt 0 ok -stmt 26 err 1 -1 no such table: main.t1 -stmt 58 err 1 -1 no such table: t1 -stmt 90 err 1 -1 no such table: t1 -stmt 122 err 1 -1 no such table: t1 +stmt 26 err 1 -1 58 no such table: main.t1 +stmt 58 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 122 no such table: t1 +stmt 122 err 1 -1 154 no such table: t1 ==== select1-15.3 SELECT 2 IN (SELECT a FROM t1) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t1 ==== select1-16.1 SELECT 1 FROM (SELECT *) ---- -stmt 0 err 1 -1 no tables specified +stmt 0 err 1 -1 25 no tables specified ==== select1-16.2 SELECT 1 FROM sqlite_master LIMIT 1,#1; ---- -stmt 0 err 1 -1 near "#1": syntax error +stmt 0 err 1 -1 42 near "#1": syntax error ==== select1-17.1 DROP TABLE IF EXISTS t1; @@ -417,22 +417,22 @@ stmt 0 err 1 -1 near "#1": syntax error stmt 0 ok stmt 27 ok stmt 54 ok -stmt 76 err 1 -1 no such table: t1 +stmt 76 err 1 -1 104 no such table: t1 stmt 104 ok -stmt 128 err 1 -1 no such table: t2 -stmt 156 err 1 -1 no such table: main.t2 -stmt 185 err 1 -1 no such table: t1 +stmt 128 err 1 -1 156 no such table: t2 +stmt 156 err 1 -1 185 no such table: main.t2 +stmt 185 err 1 -1 247 no such table: t1 ==== select1-17.2 SELECT * FROM t1,(SELECT * FROM t2 WHERE y=2 ORDER BY y,z LIMIT 4); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 70 no such table: t1 ==== select1-17.3 SELECT * FROM t1,(SELECT * FROM t2 WHERE y=2 UNION ALL SELECT * FROM t2 WHERE y=3 ORDER BY y,z LIMIT 4); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 116 no such table: t1 ==== select1-18.1 DROP TABLE IF EXISTS t1; @@ -461,9 +461,9 @@ stmt 0 ok stmt 27 ok stmt 54 ok stmt 76 ok -stmt 113 err 1 -1 no such table: t1 -stmt 146 err 1 -1 no such table: t2 -stmt 179 err 1 -1 no such table: t2 +stmt 113 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 179 no such table: t2 +stmt 179 err 1 -1 877 no such table: t2 ==== select1-18.2 DROP TABLE IF EXISTS t1; @@ -492,9 +492,9 @@ stmt 0 ok stmt 27 ok stmt 54 ok stmt 76 ok -stmt 113 err 1 -1 no such table: t1 -stmt 146 err 1 -1 no such table: t2 -stmt 179 err 1 -1 no such table: t2 +stmt 113 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 179 no such table: t2 +stmt 179 err 1 -1 887 no such table: t2 ==== select1-18.3 SELECT 1 FROM t1 WHERE ( @@ -505,7 +505,7 @@ stmt 179 err 1 -1 no such table: t2 ) ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 182 no such table: t1 ==== select1-18.4 SELECT 1 FROM t1, t2 WHERE ( @@ -514,7 +514,7 @@ stmt 0 err 1 -1 no such table: t1 ) WHERE x>c OR x=c ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 145 no such table: t1 ==== select1-19.10 DROP TABLE IF EXISTS t1; @@ -529,7 +529,7 @@ stmt 27 ok UNION ALL SELECT 1,2,3,4,5,6,7 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 93 no such table: t1 ==== select1-19.21 INSERT INTO t1 @@ -537,7 +537,7 @@ stmt 0 err 1 -1 no such table: t1 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 137 no such table: t1 ==== select1-20.10 CREATE TABLE t1 ( @@ -550,13 +550,13 @@ stmt 0 err 1 -1 no such table: t1 OR a = 10; ---- stmt 0 ok -stmt 73 err 1 -1 no such table: t1 -stmt 106 err 1 -1 no such table: t1 +stmt 73 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 218 no such table: t1 ==== select1-20.20 SELECT ifnull(a, max((SELECT 123))), count(a) FROM t1 ; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 58 no such table: t1 ==== select1-21.1 CREATE TABLE t1(a IMTEGES PRIMARY KEY,R); @@ -567,4 +567,4 @@ stmt 0 err 1 -1 no such table: t1 stmt 0 ok stmt 44 ok stmt 73 ok -stmt 128 err 1 -1 no such table: t1 +stmt 128 err 1 -1 291 no such table: t1 diff --git a/parser/testdata/select2.test b/parser/testdata/select2.test index f638852..b8e6b85 100644 --- a/parser/testdata/select2.test +++ b/parser/testdata/select2.test @@ -1,27 +1,27 @@ ==== select2-2.1 SELECT count(*) FROM tbl2 ---- -stmt 0 err 1 -1 no such table: tbl2 +stmt 0 err 1 -1 26 no such table: tbl2 ==== select2-2.2 SELECT count(*) FROM tbl2 WHERE f2>1000 ---- -stmt 0 err 1 -1 no such table: tbl2 +stmt 0 err 1 -1 40 no such table: tbl2 ==== select2-3.1 SELECT f1 FROM tbl2 WHERE 1000=f2 ---- -stmt 0 err 1 -1 no such table: tbl2 +stmt 0 err 1 -1 34 no such table: tbl2 ==== select2-3.2a CREATE INDEX idx1 ON tbl2(f2) ---- -stmt 0 err 1 -1 no such table: main.tbl2 +stmt 0 err 1 -1 30 no such table: main.tbl2 ==== select2-3.2b SELECT f1 FROM tbl2 WHERE 1000=f2 ---- -stmt 0 err 1 -1 no such table: tbl2 +stmt 0 err 1 -1 34 no such table: tbl2 ==== select2-3.2c SELECT f1 FROM tbl2 WHERE f2=1000 ---- -stmt 0 err 1 -1 no such table: tbl2 +stmt 0 err 1 -1 34 no such table: tbl2 ==== select2-4.1 CREATE TABLE aa(a); @@ -34,40 +34,40 @@ stmt 0 err 1 -1 no such table: tbl2 ---- stmt 0 ok stmt 24 ok -stmt 48 err 1 -1 no such table: aa -stmt 78 err 1 -1 no such table: aa -stmt 108 err 1 -1 no such table: bb -stmt 138 err 1 -1 no such table: bb -stmt 168 err 1 -1 no such table: aa +stmt 48 err 1 -1 78 no such table: aa +stmt 78 err 1 -1 108 no such table: aa +stmt 108 err 1 -1 138 no such table: bb +stmt 138 err 1 -1 168 no such table: bb +stmt 168 err 1 -1 211 no such table: aa ==== select2-4.2 INSERT INTO bb VALUES(0); SELECT * FROM aa CROSS JOIN bb WHERE b; ---- -stmt 0 err 1 -1 no such table: bb -stmt 30 err 1 -1 no such table: aa +stmt 0 err 1 -1 30 no such table: bb +stmt 30 err 1 -1 74 no such table: aa ==== select2-4.3 SELECT * FROM aa CROSS JOIN bb WHERE NOT b; ---- -stmt 0 err 1 -1 no such table: aa +stmt 0 err 1 -1 48 no such table: aa ==== select2-4.4 SELECT * FROM aa, bb WHERE min(a,b); ---- -stmt 0 err 1 -1 no such table: aa +stmt 0 err 1 -1 41 no such table: aa ==== select2-4.5 SELECT * FROM aa, bb WHERE NOT min(a,b); ---- -stmt 0 err 1 -1 no such table: aa +stmt 0 err 1 -1 45 no such table: aa ==== select2-4.6 SELECT * FROM aa, bb WHERE CASE WHEN a=b-1 THEN 1 END; ---- -stmt 0 err 1 -1 no such table: aa +stmt 0 err 1 -1 59 no such table: aa ==== select2-4.7 SELECT * FROM aa, bb WHERE CASE WHEN a=b-1 THEN 0 ELSE 1 END; ---- -stmt 0 err 1 -1 no such table: aa +stmt 0 err 1 -1 66 no such table: aa diff --git a/parser/testdata/select3.test b/parser/testdata/select3.test index 71757be..949db53 100644 --- a/parser/testdata/select3.test +++ b/parser/testdata/select3.test @@ -1,100 +1,100 @@ ==== select3-1.1 SELECT count(*) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 24 no such table: t1 ==== select3-1.2 SELECT min(n),min(log),max(n),max(log),sum(n),sum(log),avg(n),avg(log) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 88 no such table: t1 ==== select3-1.3 SELECT max(n)/avg(n), max(log)/avg(log) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 48 no such table: t1 ==== select3-2.1 SELECT log, count(*) FROM t1 GROUP BY log ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 55 no such table: t1 ==== select3-2.2 SELECT log, min(n) FROM t1 GROUP BY log ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 53 no such table: t1 ==== select3-2.3.1 SELECT log, avg(n) FROM t1 GROUP BY log ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 53 no such table: t1 ==== select3-2.3.2 SELECT log, avg(n)+1 FROM t1 GROUP BY log ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 55 no such table: t1 ==== select3-2.4 SELECT log, avg(n)-min(n) FROM t1 GROUP BY log ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 60 no such table: t1 ==== select3-2.5 SELECT log*2+1, avg(n)-min(n) FROM t1 GROUP BY log ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 64 no such table: t1 ==== select3-2.6 SELECT log*2+1 as x, count(*) FROM t1 GROUP BY x ORDER BY x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 65 no such table: t1 ==== select3-2.7 SELECT log*2+1 AS x, count(*) AS y FROM t1 GROUP BY x ORDER BY y, x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 73 no such table: t1 ==== select3-2.8 SELECT log*2+1 AS x, count(*) AS y FROM t1 GROUP BY x ORDER BY 10-(x+y) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 77 no such table: t1 ==== select3-2.10 SELECT log, count(*) FROM t1 GROUP BY 0 ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 58 no such table: t1 ==== select3-2.11 SELECT log, count(*) FROM t1 GROUP BY 3 ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 58 no such table: t1 ==== select3-2.12 SELECT log, count(*) FROM t1 GROUP BY 1 ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 58 no such table: t1 ==== select3-2.13 SELECT log, count(*) FROM t1 GROUP BY ORDER BY log; ---- -stmt 0 err 1 43 near "ORDER": syntax error +stmt 0 err 1 43 48 near "ORDER": syntax error ==== select3-2.14 SELECT log, count(*) FROM t1 GROUP BY; ---- -stmt 0 err 1 42 near ";": syntax error +stmt 0 err 1 42 43 near ";": syntax error ==== select3-3.1 SELECT log, count(*) FROM t1 HAVING log>=4 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 46 no such table: t1 ==== select3-3.2 SELECT count(*) FROM t1 HAVING log>=4 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 41 no such table: t1 ==== select3-3.3 SELECT count(*) FROM t1 HAVING log!=400 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 43 no such table: t1 ==== select3-4.1 SELECT log, count(*) FROM t1 GROUP BY log HAVING log>=4 ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 69 no such table: t1 ==== select3-4.2 SELECT log, count(*) FROM t1 @@ -102,7 +102,7 @@ stmt 0 err 1 -1 no such table: t1 HAVING count(*)>=4 ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 94 no such table: t1 ==== select3-4.3 SELECT log, count(*) FROM t1 @@ -110,7 +110,7 @@ stmt 0 err 1 -1 no such table: t1 HAVING count(*)>=4 ORDER BY max(n)+0 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== select3-4.4 SELECT log AS x, count(*) AS y FROM t1 @@ -118,7 +118,7 @@ stmt 0 err 1 -1 no such table: t1 HAVING y>=4 ORDER BY max(n)+0 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== select3-4.5 SELECT log AS x FROM t1 @@ -126,63 +126,63 @@ stmt 0 err 1 -1 no such table: t1 HAVING count(*)>=4 ORDER BY max(n)+0 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 91 no such table: t1 ==== select3-5.1 SELECT log, count(*), avg(n), max(n+log*2) FROM t1 GROUP BY log ORDER BY max(n+log*2)+0, avg(n)+0 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 113 no such table: t1 ==== select3-5.2 SELECT log, count(*), avg(n), max(n+log*2) FROM t1 GROUP BY log ORDER BY max(n+log*2)+0, min(log,avg(n))+0 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 122 no such table: t1 ==== select3-6.1 SELECT log, min(n) FROM t1 GROUP BY log ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 58 no such table: t1 ==== select3-6.2 SELECT log, min(n) FROM t1 GROUP BY log ORDER BY log DESC; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 63 no such table: t1 ==== select3-6.3 SELECT log, min(n) FROM t1 GROUP BY log ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 56 no such table: t1 ==== select3-6.4 SELECT log, min(n) FROM t1 GROUP BY log ORDER BY 1 DESC; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 61 no such table: t1 ==== select3-6.5 CREATE INDEX i1 ON t1(log); SELECT log, min(n) FROM t1 GROUP BY log ORDER BY log; ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 32 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: main.t1 +stmt 32 err 1 -1 90 no such table: t1 ==== select3-6.6 SELECT log, min(n) FROM t1 GROUP BY log ORDER BY log DESC; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 63 no such table: t1 ==== select3-6.7 SELECT log, min(n) FROM t1 GROUP BY log ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 56 no such table: t1 ==== select3-6.8 SELECT log, min(n) FROM t1 GROUP BY log ORDER BY 1 DESC; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 61 no such table: t1 ==== select3-7.1 CREATE TABLE t2(a,b); @@ -190,13 +190,13 @@ stmt 0 err 1 -1 no such table: t1 SELECT a, sum(b) FROM t2 WHERE b=5 GROUP BY a; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t2 -stmt 58 err 1 -1 no such table: t2 +stmt 26 err 1 -1 58 no such table: t2 +stmt 58 err 1 -1 109 no such table: t2 ==== select3-7.2 SELECT a, sum(b) FROM t2 WHERE b=5; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 40 no such table: t2 ==== select3-8.1 CREATE TABLE A ( @@ -209,14 +209,14 @@ stmt 0 err 1 -1 no such table: t2 SELECT typeof(sum(a3)) FROM a; ---- stmt 0 ok -stmt 94 err 1 -1 no such table: A -stmt 144 err 1 -1 no such table: A -stmt 194 err 1 -1 no such table: a +stmt 94 err 1 -1 144 no such table: A +stmt 144 err 1 -1 194 no such table: A +stmt 194 err 1 -1 229 no such table: a ==== select3-8.2 SELECT typeof(sum(a3)) FROM a GROUP BY a1; ---- -stmt 0 err 1 -1 no such table: a +stmt 0 err 1 -1 47 no such table: a ==== select3-9.100 CREATE TABLE t0(c0 REAL, c1 REAL GENERATED ALWAYS AS (c0)); @@ -224,8 +224,8 @@ stmt 0 err 1 -1 no such table: a SELECT * FROM t0 GROUP BY c0; ---- stmt 0 ok -stmt 62 err 1 -1 no such table: t0 -stmt 95 err 1 -1 no such table: t0 +stmt 62 err 1 -1 95 no such table: t0 +stmt 95 err 1 -1 127 no such table: t0 ==== select3.10.100 CREATE TABLE t1(a, b); @@ -236,14 +236,14 @@ stmt 95 err 1 -1 no such table: t0 ---- stmt 0 ok stmt 25 ok -stmt 50 err 1 -1 no such table: t1 +stmt 50 err 1 -1 152 no such table: t1 ==== select3-generated SELECT max(a), val FROM t1 LEFT JOIN ( SELECT 'constant' AS val FROM t2 WHERE x=1234 ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 104 no such table: t1 ==== select3-generated.dup1 INSERT INTO t2 VALUES(123); @@ -251,8 +251,8 @@ stmt 0 err 1 -1 no such table: t1 SELECT 'constant' AS val FROM t2 WHERE x=1234 ) ---- -stmt 0 err 1 -1 no such table: t2 -stmt 32 err 1 -1 no such table: t1 +stmt 0 err 1 -1 32 no such table: t2 +stmt 32 err 1 -1 136 no such table: t1 ==== select3-generated.dup2 INSERT INTO t2 VALUES(1234); @@ -260,8 +260,8 @@ stmt 32 err 1 -1 no such table: t1 SELECT 'constant' AS val FROM t2 WHERE x=1234 ) ---- -stmt 0 err 1 -1 no such table: t2 -stmt 33 err 1 -1 no such table: t1 +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 err 1 -1 137 no such table: t1 ==== 12.0 CREATE TABLE t1(a); @@ -273,35 +273,35 @@ stmt 22 ok SELECT count(x), m FROM t1 LEFT JOIN (SELECT x, 59 AS m FROM t2) GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 79 no such table: t1 ==== 12.2 INSERT INTO t1 VALUES(1), (1), (2), (3); SELECT count(x), m FROM t1 LEFT JOIN (SELECT x, 59 AS m FROM t2) GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 43 err 1 -1 no such table: t1 +stmt 0 err 1 -1 43 no such table: t1 +stmt 43 err 1 -1 122 no such table: t1 ==== 12.3 INSERT INTO t2 VALUES(45); SELECT count(x), m FROM t1 LEFT JOIN (SELECT x, 59 AS m FROM t2) GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t2 -stmt 29 err 1 -1 no such table: t1 +stmt 0 err 1 -1 29 no such table: t2 +stmt 29 err 1 -1 108 no such table: t1 ==== 12.4 INSERT INTO t2 VALUES(210); SELECT count(x), m FROM t1 LEFT JOIN (SELECT x, 59 AS m FROM t2) GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t2 -stmt 30 err 1 -1 no such table: t1 +stmt 0 err 1 -1 30 no such table: t2 +stmt 30 err 1 -1 109 no such table: t1 ==== 12.5 INSERT INTO t2 VALUES(NULL); SELECT count(x), m FROM t1 LEFT JOIN (SELECT x, 59 AS m FROM t2) GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t2 -stmt 31 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t2 +stmt 31 err 1 -1 110 no such table: t1 ==== 12.6 DELETE FROM t2; @@ -309,19 +309,19 @@ stmt 31 err 1 -1 no such table: t1 INSERT INTO t1 VALUES('value'); INSERT INTO t2 VALUES('hello'); ---- -stmt 0 err 1 -1 no such table: t2 -stmt 18 err 1 -1 no such table: t1 -stmt 36 err 1 -1 no such table: t1 -stmt 70 err 1 -1 no such table: t2 +stmt 0 err 1 -1 18 no such table: t2 +stmt 18 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 70 no such table: t1 +stmt 70 err 1 -1 104 no such table: t2 ==== 12.7 SELECT group_concat(x), m FROM t1 LEFT JOIN (SELECT x, 59 AS m FROM t2) GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 91 no such table: t1 ==== 12.8 SELECT group_concat(x), m, n FROM t1 LEFT JOIN (SELECT x, 59 AS m, 60 AS n FROM t2) GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 103 no such table: t1 diff --git a/parser/testdata/select4.test b/parser/testdata/select4.test index 285a450..9457b42 100644 --- a/parser/testdata/select4.test +++ b/parser/testdata/select4.test @@ -1,7 +1,7 @@ ==== select4-1.0 SELECT DISTINCT log FROM t1 ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 41 no such table: t1 ==== select4-1.1c SELECT DISTINCT log FROM t1 @@ -9,7 +9,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT n FROM t1 WHERE log=3 ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 97 no such table: t1 ==== select4-1.1d CREATE TABLE t2 AS @@ -19,8 +19,8 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY log; SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 128 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 150 no such table: t2 ==== select4-1.1e CREATE TABLE t2 AS @@ -30,15 +30,15 @@ stmt 128 err 1 -1 no such table: t2 ORDER BY log DESC; SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 133 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t1 +stmt 133 err 1 -1 155 no such table: t2 ==== select4-1.1f SELECT DISTINCT log FROM t1 UNION ALL SELECT n FROM t1 WHERE log=2 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 80 no such table: t1 ==== select4-1.1g CREATE TABLE t2 AS @@ -47,8 +47,8 @@ stmt 0 err 1 -1 no such table: t1 SELECT n FROM t1 WHERE log=2; SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 110 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 132 no such table: t2 ==== select4-1.2 SELECT log FROM t1 WHERE n IN @@ -56,13 +56,13 @@ stmt 110 err 1 -1 no such table: t2 SELECT n FROM t1 WHERE log=3) ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 143 no such table: t1 ==== select4-1.4 SELECT (VALUES(0) INTERSECT SELECT(0) UNION SELECT(0) ORDER BY 1 UNION SELECT 0 UNION SELECT 0 ORDER BY 1); ---- -stmt 0 err 1 -1 ORDER BY clause should come after UNION not before +stmt 0 err 1 -1 119 ORDER BY clause should come after UNION not before ==== select4-2.1 SELECT DISTINCT log FROM t1 @@ -70,7 +70,7 @@ stmt 0 err 1 -1 ORDER BY clause should come after UNION not before SELECT n FROM t1 WHERE log=3 ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 93 no such table: t1 ==== select4-2.2 SELECT log FROM t1 WHERE n IN @@ -78,7 +78,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT n FROM t1 WHERE log=3) ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 139 no such table: t1 ==== select4-2.5 SELECT 123 AS x ORDER BY (SELECT x ORDER BY 1); @@ -91,7 +91,7 @@ stmt 0 ok SELECT n FROM t1 WHERE log=3 ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 94 no such table: t1 ==== select4-3.1.2 CREATE TABLE t2 AS @@ -101,8 +101,8 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY log; SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 126 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 148 no such table: t2 ==== select4-3.1.3 CREATE TABLE t2 AS @@ -112,8 +112,8 @@ stmt 126 err 1 -1 no such table: t2 ORDER BY log DESC; SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 131 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 153 no such table: t2 ==== select4-3.2 SELECT log FROM t1 WHERE n IN @@ -121,7 +121,7 @@ stmt 131 err 1 -1 no such table: t2 SELECT n FROM t1 WHERE log=3) ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 140 no such table: t1 ==== select4-4.1.1 SELECT DISTINCT log FROM t1 @@ -129,7 +129,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT n FROM t1 WHERE log=3 ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 97 no such table: t1 ==== select4-4.1.2 SELECT DISTINCT log FROM t1 @@ -139,7 +139,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT n FROM t1 WHERE log=3 ORDER BY t1.log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 127 no such table: t1 ==== select4-4.1.3 CREATE TABLE t2 AS @@ -149,8 +149,8 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY log; SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 147 err 1 -1 no such table: t2 +stmt 0 err 1 -1 147 no such table: t1 +stmt 147 err 1 -1 169 no such table: t2 ==== select4-4.1.4 CREATE TABLE t2 AS @@ -160,8 +160,8 @@ stmt 147 err 1 -1 no such table: t2 ORDER BY log DESC; SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 152 err 1 -1 no such table: t2 +stmt 0 err 1 -1 152 no such table: t1 +stmt 152 err 1 -1 174 no such table: t2 ==== select4-4.2 SELECT log FROM t1 WHERE n IN @@ -169,7 +169,7 @@ stmt 152 err 1 -1 no such table: t2 SELECT n FROM t1 WHERE log=3) ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 143 no such table: t1 ==== select4-4.4 SELECT 3 IN ( @@ -181,7 +181,7 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY 1 ); ---- -stmt 0 err 1 -1 ORDER BY clause should come after INTERSECT not before +stmt 0 err 1 -1 114 ORDER BY clause should come after INTERSECT not before ==== select4-5.2f SELECT DISTINCT log FROM t1 @@ -189,7 +189,7 @@ stmt 0 err 1 -1 ORDER BY clause should come after INTERSECT not before SELECT n FROM t1 WHERE log=3 ORDER BY log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 97 no such table: t1 ==== select4-5.2g SELECT DISTINCT log FROM t1 @@ -197,7 +197,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT n FROM t1 WHERE log=3 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 95 no such table: t1 ==== select4-5.2h SELECT DISTINCT log FROM t1 @@ -205,7 +205,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT n FROM t1 WHERE log=3 ORDER BY 2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 95 no such table: t1 ==== select4-5.2i SELECT DISTINCT 1, log FROM t1 @@ -213,7 +213,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT 2, n FROM t1 WHERE log=3 ORDER BY 2, 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 104 no such table: t1 ==== select4-5.2j SELECT DISTINCT 1, log FROM t1 @@ -221,7 +221,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT 2, n FROM t1 WHERE log=3 ORDER BY 1, 2 DESC; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 109 no such table: t1 ==== select4-5.2k SELECT DISTINCT 1, log FROM t1 @@ -229,12 +229,12 @@ stmt 0 err 1 -1 no such table: t1 SELECT 2, n FROM t1 WHERE log=3 ORDER BY n, 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 104 no such table: t1 ==== select4-5.3-3807-1 SELECT 1 UNION SELECT 2, 3 UNION SELECT 4, 5 ORDER BY 1; ---- -stmt 0 err 1 -1 SELECTs to the left and right of UNION do not have the same number of result columns +stmt 0 err 1 -1 61 SELECTs to the left and right of UNION do not have the same number of result columns ==== select4-6.1 SELECT log, count(*) as cnt FROM t1 GROUP BY log @@ -242,7 +242,7 @@ stmt 0 err 1 -1 SELECTs to the left and right of UNION do not have the same numb SELECT log, n FROM t1 WHERE n=7 ORDER BY cnt, log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 122 no such table: t1 ==== select4-6.2 SELECT log, count(*) FROM t1 GROUP BY log @@ -250,7 +250,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT log, n FROM t1 WHERE n=7 ORDER BY count(*), log; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 120 no such table: t1 ==== select4-6.3 SELECT NULL UNION SELECT NULL UNION @@ -296,13 +296,13 @@ stmt 0 ok CREATE TABLE t2 AS SELECT log AS 'x', count(*) AS 'y' FROM t1 GROUP BY log; SELECT * FROM t2 ORDER BY x; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 80 err 1 -1 no such table: t2 +stmt 0 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 113 no such table: t2 ==== select4-8.2 SELECT DISTINCT c FROM t3 ORDER BY c; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 42 no such table: t3 ==== select4-9.8 SELECT 0 AS x, 1 AS y @@ -315,103 +315,103 @@ stmt 0 ok SELECT DISTINCT log FROM t1 ORDER BY log ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 46 no such table: t1 ==== select4-10.2 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 4 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== select4-10.3 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 0 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== select4-10.4 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT -1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 55 no such table: t1 ==== select4-10.5 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT -1 OFFSET 2 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 64 no such table: t1 ==== select4-10.6 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 3 OFFSET 2 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 63 no such table: t1 ==== select4-10.7 SELECT DISTINCT log FROM t1 ORDER BY +log LIMIT 3 OFFSET 20 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 65 no such table: t1 ==== select4-10.8 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 0 OFFSET 3 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 63 no such table: t1 ==== select4-10.9 SELECT DISTINCT max(n), log FROM t1 ORDER BY +log; -- LIMIT 2 OFFSET 1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 55 no such table: t1 ==== select4-11.1 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 UNION SELECT x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== select4-11.2 SELECT x FROM t2 UNION SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== select4-11.3 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 UNION ALL SELECT x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== select4-11.4 SELECT x FROM t2 UNION ALL SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== select4-11.5 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 EXCEPT SELECT x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== select4-11.6 SELECT x FROM t2 EXCEPT SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== select4-11.7 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 INTERSECT SELECT x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== select4-11.8 SELECT x FROM t2 INTERSECT SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== select4-11.11 SELECT x FROM t2 @@ -424,7 +424,7 @@ stmt 0 err 1 -1 no such table: t2 INTERSECT SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 215 no such table: t2 ==== select4-11.12 SELECT x FROM t2 @@ -437,7 +437,7 @@ stmt 0 err 1 -1 no such table: t2 EXCEPT SELECT x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 212 no such table: t2 ==== select4-11.13 SELECT x FROM t2 @@ -450,7 +450,7 @@ stmt 0 err 1 -1 no such table: t2 EXCEPT SELECT x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 215 no such table: t2 ==== select4-11.14 SELECT x FROM t2 @@ -463,7 +463,7 @@ stmt 0 err 1 -1 no such table: t2 EXCEPT SELECT x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 211 no such table: t2 ==== select4-11.15 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 @@ -476,12 +476,12 @@ stmt 0 err 1 -1 no such table: t2 EXCEPT SELECT x FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 215 no such table: t2 ==== select4-11.16 INSERT INTO t2(rowid) VALUES(2) UNION SELECT 3,4 UNION SELECT 5,6 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 82 no such table: t2 ==== select4-14.1 CREATE TABLE t14(a,b,c); @@ -489,52 +489,52 @@ stmt 0 err 1 -1 no such table: t2 SELECT * FROM t14 INTERSECT VALUES(3,2,1),(2,3,1),(1,2,3),(2,1,3); ---- stmt 0 ok -stmt 27 err 1 -1 no such table: t14 -stmt 68 err 1 -1 no such table: t14 +stmt 27 err 1 -1 68 no such table: t14 +stmt 68 err 1 -1 137 no such table: t14 ==== select4-14.2 SELECT * FROM t14 INTERSECT VALUES(1,2,3); ---- -stmt 0 err 1 -1 no such table: t14 +stmt 0 err 1 -1 45 no such table: t14 ==== select4-14.3 SELECT * FROM t14 UNION VALUES(3,2,1),(2,3,1),(1,2,3),(7,8,9),(4,5,6) UNION SELECT * FROM t14 ORDER BY 1, 2, 3 ---- -stmt 0 err 1 -1 no such table: t14 +stmt 0 err 1 -1 120 no such table: t14 ==== select4-14.4 SELECT * FROM t14 UNION VALUES(3,2,1) UNION SELECT * FROM t14 ORDER BY 1, 2, 3 ---- -stmt 0 err 1 -1 no such table: t14 +stmt 0 err 1 -1 88 no such table: t14 ==== select4-14.5 SELECT * FROM t14 EXCEPT VALUES(3,2,1),(2,3,1),(1,2,3),(2,1,3); ---- -stmt 0 err 1 -1 no such table: t14 +stmt 0 err 1 -1 66 no such table: t14 ==== select4-14.6 SELECT * FROM t14 EXCEPT VALUES(1,2,3) ---- -stmt 0 err 1 -1 no such table: t14 +stmt 0 err 1 -1 42 no such table: t14 ==== select4-14.7 SELECT * FROM t14 EXCEPT VALUES(1,2,3) EXCEPT VALUES(4,5,6) ---- -stmt 0 err 1 -1 no such table: t14 +stmt 0 err 1 -1 63 no such table: t14 ==== select4-14.8 SELECT * FROM t14 EXCEPT VALUES('a','b','c') EXCEPT VALUES(4,5,6) ---- -stmt 0 err 1 -1 no such table: t14 +stmt 0 err 1 -1 69 no such table: t14 ==== select4-14.9 SELECT * FROM t14 UNION ALL VALUES(3,2,1),(2,3,1),(1,2,3),(2,1,3); ---- -stmt 0 err 1 -1 no such table: t14 +stmt 0 err 1 -1 69 no such table: t14 ==== select4-14.10 SELECT (VALUES(1),(2),(3),(4)) @@ -593,9 +593,9 @@ stmt 0 ok ---- stmt 0 ok stmt 27 ok -stmt 76 err 1 -1 no such table: tx -stmt 114 err 1 -1 no such table: tx -stmt 152 err 1 -1 no such table: tx +stmt 76 err 1 -1 114 no such table: tx +stmt 114 err 1 -1 152 no such table: tx +stmt 152 err 1 -1 392 no such table: tx ==== select4-16.1 DROP TABLE IF EXISTS t1; @@ -614,8 +614,8 @@ stmt 152 err 1 -1 no such table: tx ---- stmt 0 ok stmt 27 ok -stmt 138 err 1 -1 no such table: t1 -stmt 297 err 1 -1 no such table: t1 +stmt 138 err 1 -1 297 no such table: t1 +stmt 297 err 1 -1 448 no such table: t1 ==== select4-16.2 SELECT t3.c FROM @@ -624,7 +624,7 @@ stmt 297 err 1 -1 no such table: t1 WHERE t2.a=t3.a AND t2.m=t3.b ORDER BY t3.a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 156 no such table: t1 ==== select4-16.3 SELECT t3.c FROM @@ -633,7 +633,7 @@ stmt 0 err 1 -1 no such table: t1 WHERE t2.a=t3.a AND t2.m=t3.b ORDER BY t3.a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 155 no such table: t1 ==== select4-17.1 DROP TABLE IF EXISTS t1; @@ -648,8 +648,8 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 60 err 1 -1 no such table: t1 -stmt 104 err 1 -1 no such table: t1 +stmt 60 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 249 no such table: t1 ==== select4-17.2 SELECT x, y FROM ( @@ -659,7 +659,7 @@ stmt 104 err 1 -1 no such table: t1 ) AS w WHERE y>=20 ORDER BY +x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 145 no such table: t1 ==== select4-17.3 SELECT x, y FROM ( @@ -669,14 +669,14 @@ stmt 0 err 1 -1 no such table: t1 ) AS w WHERE y>=20 ORDER BY +x; ---- -stmt 0 err 1 -1 LIMIT clause should come after UNION not before +stmt 0 err 1 -1 121 LIMIT clause should come after UNION not before ==== select4-18.1 CREATE VIEW v0(v0) AS WITH v0 AS(SELECT 0 v0) SELECT(SELECT min(v0) OVER()) FROM v0 GROUP BY v0; SELECT *FROM v0 v1 JOIN v0 USING(v0) WHERE datetime(v0) = (v0.v0)AND v0 = 10; ---- stmt 0 ok -stmt 99 err 1 -1 no such table: v0 +stmt 99 err 1 -1 179 no such table: v0 ==== select4-18.2 CREATE VIEW t1(aa) AS @@ -685,13 +685,13 @@ stmt 99 err 1 -1 no such table: v0 SELECT * FROM t1; ---- stmt 0 ok -stmt 114 err 1 -1 no such table: t1 +stmt 114 err 1 -1 134 no such table: t1 ==== select4-18.3 SELECT * FROM t1 AS z1 JOIN t1 AS z2 USING(aa) WHERE abs(z1.aa)=z2.aa AND z1.aa=123; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== select4-19.1 CREATE TABLE t1(x); @@ -699,5 +699,5 @@ stmt 0 err 1 -1 no such table: t1 SELECT sum((SELECT 1 FROM (SELECT 2 WHERE x IS NULL) WHERE 0)) FROM t1; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t1 -stmt 51 err 1 -1 no such table: t1 +stmt 22 err 1 -1 51 no such table: t1 +stmt 51 err 1 -1 125 no such table: t1 diff --git a/parser/testdata/select5.test b/parser/testdata/select5.test index 535b2d2..00e12d7 100644 --- a/parser/testdata/select5.test +++ b/parser/testdata/select5.test @@ -1,59 +1,59 @@ ==== select5-1.0 SELECT DISTINCT y FROM t1 ORDER BY y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 37 no such table: t1 ==== select5-1.1 SELECT y, count(*) FROM t1 GROUP BY y ORDER BY y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 49 no such table: t1 ==== select5-1.2 SELECT y, count(*) FROM t1 GROUP BY y ORDER BY count(*), y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 59 no such table: t1 ==== select5-1.3 SELECT count(*), y FROM t1 GROUP BY y ORDER BY count(*), y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 59 no such table: t1 ==== select5-2.1.1 SELECT y, count(*) FROM t1 GROUP BY z ORDER BY y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== select5-2.1.2 SELECT y, count(*) FROM t1 GROUP BY temp.t1.y ORDER BY y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 62 no such table: t1 ==== select5-3.1 SELECT x, count(*), avg(y) FROM t1 GROUP BY x HAVING x<4 ORDER BY x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 73 no such table: t1 ==== select5-4.1 SELECT avg(x) FROM t1 WHERE x>100 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 39 no such table: t1 ==== select5-4.2 SELECT count(x) FROM t1 WHERE x>100 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 41 no such table: t1 ==== select5-4.3 SELECT min(x) FROM t1 WHERE x>100 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 39 no such table: t1 ==== select5-4.4 SELECT max(x) FROM t1 WHERE x>100 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 39 no such table: t1 ==== select5-4.5 SELECT sum(x) FROM t1 WHERE x>100 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 39 no such table: t1 ==== select5-5.1 CREATE TABLE t2(a, b, c); @@ -63,35 +63,35 @@ stmt 0 err 1 -1 no such table: t1 CREATE INDEX t2_idx ON t2(a); ---- stmt 0 ok -stmt 30 err 1 -1 no such table: t2 -stmt 66 err 1 -1 no such table: t2 -stmt 102 err 1 -1 no such table: t2 -stmt 138 err 1 -1 no such table: main.t2 +stmt 30 err 1 -1 66 no such table: t2 +stmt 66 err 1 -1 102 no such table: t2 +stmt 102 err 1 -1 138 no such table: t2 +stmt 138 err 1 -1 172 no such table: main.t2 ==== select5-5.2 SELECT a FROM t2 GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 33 no such table: t2 ==== select5-5.3 SELECT a FROM t2 WHERE a>2 GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 43 no such table: t2 ==== select5-5.4 SELECT a, b FROM t2 GROUP BY a, b; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 39 no such table: t2 ==== select5-5.5 SELECT a, b FROM t2 GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 36 no such table: t2 ==== select5-5.11 SELECT max(c), b*a, b, a FROM t2 GROUP BY b*a, b, a ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 57 no such table: t2 ==== select5-6.1 CREATE TABLE t3(x,y); @@ -101,10 +101,10 @@ stmt 0 err 1 -1 no such table: t2 SELECT count(x), y FROM t3 GROUP BY y ORDER BY 1 ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t3 -stmt 61 err 1 -1 no such table: t3 -stmt 96 err 1 -1 no such table: t3 -stmt 128 err 1 -1 no such table: t3 +stmt 26 err 1 -1 61 no such table: t3 +stmt 61 err 1 -1 96 no such table: t3 +stmt 96 err 1 -1 128 no such table: t3 +stmt 128 err 1 -1 182 no such table: t3 ==== select5-6.2 CREATE TABLE t4(x,y,z); @@ -119,20 +119,20 @@ stmt 128 err 1 -1 no such table: t3 SELECT max(x), count(x), y, z FROM t4 GROUP BY y, z ORDER BY 1 ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t4 -stmt 65 err 1 -1 no such table: t4 -stmt 102 err 1 -1 no such table: t4 -stmt 139 err 1 -1 no such table: t4 -stmt 176 err 1 -1 no such table: t4 -stmt 213 err 1 -1 no such table: t4 -stmt 253 err 1 -1 no such table: t4 -stmt 293 err 1 -1 no such table: t4 -stmt 327 err 1 -1 no such table: t4 +stmt 28 err 1 -1 65 no such table: t4 +stmt 65 err 1 -1 102 no such table: t4 +stmt 102 err 1 -1 139 no such table: t4 +stmt 139 err 1 -1 176 no such table: t4 +stmt 176 err 1 -1 213 no such table: t4 +stmt 213 err 1 -1 253 no such table: t4 +stmt 253 err 1 -1 293 no such table: t4 +stmt 293 err 1 -1 327 no such table: t4 +stmt 327 err 1 -1 395 no such table: t4 ==== select5-7.2 SELECT count(*), count(x) as cnt FROM t4 GROUP BY y ORDER BY cnt; ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 70 no such table: t4 ==== select5-8.1 CREATE TABLE t8a(a,b); @@ -148,51 +148,51 @@ stmt 0 err 1 -1 no such table: t4 ---- stmt 0 ok stmt 27 ok -stmt 52 err 1 -1 no such table: t8a -stmt 90 err 1 -1 no such table: t8a -stmt 128 err 1 -1 no such table: t8a -stmt 166 err 1 -1 no such table: t8a -stmt 207 err 1 -1 no such table: t8b -stmt 251 err 1 -1 no such table: t8b -stmt 295 err 1 -1 no such table: t8b -stmt 339 err 1 -1 no such table: t8a +stmt 52 err 1 -1 90 no such table: t8a +stmt 90 err 1 -1 128 no such table: t8a +stmt 128 err 1 -1 166 no such table: t8a +stmt 166 err 1 -1 207 no such table: t8a +stmt 207 err 1 -1 251 no such table: t8b +stmt 251 err 1 -1 295 no such table: t8b +stmt 295 err 1 -1 339 no such table: t8b +stmt 339 err 1 -1 417 no such table: t8a ==== select5-8.2 SELECT a, count(b) FROM t8a, t8b WHERE b=+t8b.rowid GROUP BY a ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t8a +stmt 0 err 1 -1 79 no such table: t8a ==== select5-8.3 SELECT t8a.a, count(t8a.b) FROM t8a, t8b WHERE t8a.b=t8b.rowid GROUP BY 1 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t8a +stmt 0 err 1 -1 95 no such table: t8a ==== select5-8.4 SELECT a, count(*) FROM t8a, t8b WHERE b=+t8b.rowid GROUP BY a ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t8a +stmt 0 err 1 -1 79 no such table: t8a ==== select5-8.5 SELECT a, count(b) FROM t8a, t8b WHERE b10 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 86 no such table: t1 ==== select6-3.7 SELECT a,b,a+b FROM (SELECT avg(x) as 'a', avg(y) as 'b' FROM t1) WHERE a<10 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 86 no such table: t1 ==== select6-3.8 SELECT a,b,a+b FROM (SELECT avg(x) as 'a', avg(y) as 'b' FROM t1 WHERE y=4) WHERE a>10 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== select6-3.9 SELECT a,b,a+b FROM (SELECT avg(x) as 'a', avg(y) as 'b' FROM t1 WHERE y=4) WHERE a<10 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== select6-3.10 SELECT a,b,a+b FROM (SELECT avg(x) as 'a', y as 'b' FROM t1 GROUP BY b) ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 92 no such table: t1 ==== select6-3.11 SELECT a,b,a+b FROM (SELECT avg(x) as 'a', y as 'b' FROM t1 GROUP BY b) WHERE b<4 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 110 no such table: t1 ==== select6-3.12 SELECT a,b,a+b FROM (SELECT avg(x) as 'a', y as 'b' FROM t1 GROUP BY b HAVING a>1) WHERE b<4 ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 121 no such table: t1 ==== select6-3.13 SELECT a,b,a+b FROM (SELECT avg(x) as 'a', y as 'b' FROM t1 GROUP BY b HAVING a>1) ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 111 no such table: t1 ==== select6-4.1 SELECT a,b,c FROM (SELECT x AS 'a', y AS 'b', x+y AS 'c' FROM t1 WHERE y=4) WHERE a<10 ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 114 no such table: t1 ==== select6-4.2 SELECT y FROM (SELECT DISTINCT y FROM t1) WHERE y<5 ORDER BY y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 68 no such table: t1 ==== select6-4.3 SELECT DISTINCT y FROM (SELECT y FROM t1) WHERE y<5 ORDER BY y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 68 no such table: t1 ==== select6-4.4 SELECT avg(y) FROM (SELECT DISTINCT y FROM t1) WHERE y<5 ORDER BY y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 73 no such table: t1 ==== select6-4.5 SELECT avg(y) FROM (SELECT DISTINCT y FROM t1 WHERE y<5) ORDER BY y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 73 no such table: t1 ==== select6-5.1 SELECT a,x,b FROM @@ -240,7 +240,7 @@ stmt 0 err 1 -1 no such table: t1 WHERE a=b ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 156 no such table: t1 ==== select6-5.2 SELECT a,x,b FROM @@ -249,49 +249,49 @@ stmt 0 err 1 -1 no such table: t1 WHERE a=b ORDER BY a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 142 no such table: t1 ==== select6-6.1 DELETE FROM t1 WHERE x>4; SELECT * FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 -stmt 30 err 1 -1 no such table: t1 +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 52 no such table: t1 ==== select6-6.2 SELECT * FROM ( SELECT x AS 'a' FROM t1 UNION ALL SELECT x+10 AS 'a' FROM t1 ) ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 111 no such table: t1 ==== select6-6.3 SELECT * FROM ( SELECT x AS 'a' FROM t1 UNION ALL SELECT x+1 AS 'a' FROM t1 ) ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 110 no such table: t1 ==== select6-6.4 SELECT * FROM ( SELECT x AS 'a' FROM t1 UNION SELECT x+1 AS 'a' FROM t1 ) ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 106 no such table: t1 ==== select6-6.5 SELECT * FROM ( SELECT x AS 'a' FROM t1 INTERSECT SELECT x+1 AS 'a' FROM t1 ) ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 110 no such table: t1 ==== select6-6.6 SELECT * FROM ( SELECT x AS 'a' FROM t1 EXCEPT SELECT x*2 AS 'a' FROM t1 ) ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 107 no such table: t1 ==== select6-7.1 SELECT * FROM (SELECT 1) @@ -321,13 +321,13 @@ stmt 0 ok ---- stmt 0 ok stmt 11 ok -stmt 37 err 1 -1 no such table: t3 -stmt 70 err 1 -1 no such table: t3 +stmt 37 err 1 -1 70 no such table: t3 +stmt 70 err 1 -1 103 no such table: t3 stmt 103 ok -stmt 129 err 1 -1 no such table: t4 -stmt 164 err 1 -1 no such table: t4 +stmt 129 err 1 -1 164 no such table: t4 +stmt 164 err 1 -1 199 no such table: t4 stmt 199 ok -stmt 211 err 1 -1 no such table: t3 +stmt 211 err 1 -1 249 no such table: t3 ==== select6-8.2 SELECT y, p, q, r FROM @@ -335,7 +335,7 @@ stmt 211 err 1 -1 no such table: t3 (SELECT t3.p AS p, t3.q AS q, t4.r AS r FROM t3 NATURAL JOIN t4) as n WHERE y=p ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 191 no such table: t1 ==== select6-8.4 SELECT DISTINCT y, p, q, r FROM @@ -343,7 +343,7 @@ stmt 0 err 1 -1 no such table: t1 (SELECT t3.p AS p, t3.q AS q, t4.r AS r FROM t3 NATURAL JOIN t4) as n WHERE y=p ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 200 no such table: t1 ==== select6-8.5 SELECT * FROM @@ -354,63 +354,63 @@ stmt 0 err 1 -1 no such table: t1 (SELECT r AS z FROM t4 WHERE q=11) AS f WHERE e.r=f.z ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 290 no such table: t1 ==== select6-9.1 SELECT a.x, b.x FROM t1 AS a, (SELECT x FROM t1 LIMIT 2) AS b ORDER BY 1, 2 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 86 no such table: t1 ==== select6-9.2 SELECT x FROM (SELECT x FROM t1 LIMIT 2); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 46 no such table: t1 ==== select6-9.3 SELECT x FROM (SELECT x FROM t1 LIMIT 2 OFFSET 1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 55 no such table: t1 ==== select6-9.4 SELECT x FROM (SELECT x FROM t1) LIMIT 2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 46 no such table: t1 ==== select6-9.5 SELECT x FROM (SELECT x FROM t1) LIMIT 2 OFFSET 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 55 no such table: t1 ==== select6-9.6 SELECT x FROM (SELECT x FROM t1 LIMIT 2) LIMIT 3; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== select6-9.7 SELECT x FROM (SELECT x FROM t1 LIMIT -1) LIMIT 3; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 55 no such table: t1 ==== select6-9.8 SELECT x FROM (SELECT x FROM t1 LIMIT -1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 47 no such table: t1 ==== select6-9.9 SELECT x FROM (SELECT x FROM t1 LIMIT -1 OFFSET 1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 56 no such table: t1 ==== select6-9.10 SELECT x, y FROM (SELECT x, (SELECT 10+x) y FROM t1 LIMIT -1 OFFSET 1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 ==== select6-9.11 SELECT x, y FROM (SELECT x, (SELECT 10)+x y FROM t1 LIMIT -1 OFFSET 1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 ==== 10.1 CREATE TABLE t(i,j,k); @@ -424,27 +424,27 @@ stmt 48 ok SELECT * FROM (SELECT * FROM t), j; ---- -stmt 0 err 1 -1 no such table: t +stmt 0 err 1 -1 38 no such table: t ==== 10.3 SELECT * FROM t UNION ALL SELECT * FROM j ---- -stmt 0 err 1 -1 no such table: j +stmt 0 err 1 -1 45 no such table: j ==== 10.4 SELECT * FROM (SELECT i FROM t UNION ALL SELECT l, m FROM j) ---- -stmt 0 err 1 -1 no such table: j +stmt 0 err 1 -1 64 no such table: j ==== 10.5 SELECT * FROM (SELECT j FROM t UNION ALL SELECT * FROM j) ---- -stmt 0 err 1 -1 no such table: j +stmt 0 err 1 -1 61 no such table: j ==== 10.6 SELECT * FROM (SELECT * FROM t UNION ALL SELECT * FROM j) ---- -stmt 0 err 1 -1 no such table: j +stmt 0 err 1 -1 61 no such table: j ==== 10.7 SELECT * FROM ( @@ -453,7 +453,7 @@ stmt 0 err 1 -1 no such table: j SELECT * FROM k ) ---- -stmt 0 err 1 -1 no such table: k +stmt 0 err 1 -1 108 no such table: k ==== 10.8 SELECT * FROM ( @@ -462,7 +462,7 @@ stmt 0 err 1 -1 no such table: k SELECT l,m,l FROM j ) ---- -stmt 0 err 1 -1 no such table: j +stmt 0 err 1 -1 109 no such table: j ==== 11.1 DROP TABLE IF EXISTS t1; @@ -484,20 +484,20 @@ stmt 0 err 1 -1 no such table: j ---- stmt 0 ok stmt 27 ok -stmt 60 err 1 -1 no such table: t1 -stmt 154 err 1 -1 no such table: main.t1 +stmt 60 err 1 -1 154 no such table: t1 +stmt 154 err 1 -1 186 no such table: main.t1 stmt 186 ok stmt 214 ok -stmt 254 err 1 -1 no such table: t2 -stmt 326 err 1 -1 no such table: main.t2 -stmt 358 err 1 -1 no such table: t1 +stmt 254 err 1 -1 326 no such table: t2 +stmt 326 err 1 -1 358 no such table: main.t2 +stmt 358 err 1 -1 499 no such table: t1 ==== 11.2 SELECT cnt, xyz, lower((SELECT y FROM t2 WHERE w=cnt)), '|' FROM (SELECT count(*) AS cnt, w AS xyz FROM t1 GROUP BY 2) ORDER BY cnt, xyz; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 147 no such table: t1 ==== 11.3 SELECT cnt, xyz, '|' @@ -505,14 +505,14 @@ stmt 0 err 1 -1 no such table: t1 WHERE (SELECT y FROM t2 WHERE w=cnt)!='two' ORDER BY cnt, xyz; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 155 no such table: t1 ==== 11.4 SELECT cnt, xyz, '|' FROM (SELECT count(*) AS cnt, w AS xyz FROM t1 GROUP BY 2) ORDER BY lower((SELECT y FROM t2 WHERE w=cnt)); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 137 no such table: t1 ==== 11.5 SELECT cnt, xyz, @@ -522,7 +522,7 @@ stmt 0 err 1 -1 no such table: t1 FROM (SELECT count(*) AS cnt, w AS xyz FROM t1 GROUP BY 2) ORDER BY +cnt; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 213 no such table: t1 ==== 11.100 DROP TABLE t1; @@ -532,11 +532,11 @@ stmt 0 err 1 -1 no such table: t1 SELECT ( SELECT y FROM t2 WHERE z = cnt ) FROM ( SELECT count(*) AS cnt FROM t1 ); ---- -stmt 0 err 1 -1 no such table: t1 -stmt 17 err 1 -1 no such table: t2 +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 stmt 34 ok stmt 56 ok -stmt 81 err 1 -1 no such table: t1 +stmt 81 err 1 -1 170 no such table: t1 ==== 12.100 DROP TABLE t1; @@ -551,14 +551,14 @@ stmt 81 err 1 -1 no such table: t1 UNION ALL SELECT * from t2); ---- -stmt 0 err 1 -1 no such table: t1 -stmt 17 err 1 -1 no such table: t2 +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 stmt 34 ok -stmt 56 err 1 -1 no such table: t1 -stmt 84 err 1 -1 no such table: t1 +stmt 56 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 112 no such table: t1 stmt 112 ok -stmt 134 err 1 -1 no such table: t2 -stmt 162 err 1 -1 no such table: t2 +stmt 134 err 1 -1 162 no such table: t2 +stmt 162 err 1 -1 262 no such table: t2 ==== 13.100 @@ -571,9 +571,9 @@ stmt 162 err 1 -1 no such table: t2 CREATE TABLE empty1(z); ---- stmt 0 ok -stmt 29 err 1 -1 no such table: t1 +stmt 29 err 1 -1 62 no such table: t1 stmt 62 ok -stmt 95 err 1 -1 no such table: t2 +stmt 95 err 1 -1 123 no such table: t2 stmt 123 ok ==== 13.110 @@ -587,7 +587,7 @@ stmt 123 ok , t1 RIGHT JOIN (SELECT 'BBB' FROM ( SELECT 'CCC' )) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 226 no such table: t2 ==== 13.120 SELECT t1.y @@ -601,4 +601,4 @@ stmt 0 err 1 -1 no such table: t2 RIGHT JOIN (SELECT 'BBB' FROM ( SELECT 'CCC' )) WHERE t1.y ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 241 no such table: t2 diff --git a/parser/testdata/select7.test b/parser/testdata/select7.test index 10ed2b8..e99b576 100644 --- a/parser/testdata/select7.test +++ b/parser/testdata/select7.test @@ -10,11 +10,11 @@ intersect select * from t1 where x like '__x'; ---- stmt 0 ok -stmt 31 err 1 -1 no such table: t1 -stmt 67 err 1 -1 no such table: t1 -stmt 103 err 1 -1 no such table: t1 -stmt 139 err 1 -1 no such table: t1 -stmt 175 err 1 -1 no such table: t1 +stmt 31 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 103 no such table: t1 +stmt 103 err 1 -1 139 no such table: t1 +stmt 139 err 1 -1 175 no such table: t1 +stmt 175 err 1 -1 326 no such table: t1 ==== select7-2.1 CREATE TABLE x(id integer primary key, a TEXT NULL); @@ -27,13 +27,13 @@ stmt 175 err 1 -1 no such table: t1 SELECT * FROM tv2; ---- stmt 0 ok -stmt 57 err 1 -1 no such table: x +stmt 57 err 1 -1 97 no such table: x stmt 97 ok -stmt 158 err 1 -1 no such table: tempx +stmt 158 err 1 -1 204 no such table: tempx stmt 204 ok stmt 282 ok stmt 361 ok -stmt 428 err 1 -1 no such table: tv2 +stmt 428 err 1 -1 451 no such table: tv2 ==== select7-3.1 SELECT * FROM (SELECT * FROM sqlite_master) GROUP BY name @@ -52,7 +52,7 @@ stmt 0 ok ---- stmt 0 ok stmt 67 ok -stmt 143 err 1 -1 no such table: PHOTO +stmt 143 err 1 -1 363 no such table: PHOTO ==== select7-4.2 INSERT INTO photo VALUES(1,1); @@ -67,35 +67,35 @@ stmt 143 err 1 -1 no such table: PHOTO SELECT T3.pk from TAG T3 WHERE T3.fk = P.pk AND T3.name LIKE '%foo%' ); ---- -stmt 0 err 1 -1 no such table: photo -stmt 37 err 1 -1 no such table: photo -stmt 74 err 1 -1 no such table: photo -stmt 111 err 1 -1 no such table: tag -stmt 153 err 1 -1 no such table: tag -stmt 195 err 1 -1 no such table: tag -stmt 239 err 1 -1 no such table: PHOTO +stmt 0 err 1 -1 37 no such table: photo +stmt 37 err 1 -1 74 no such table: photo +stmt 74 err 1 -1 111 no such table: photo +stmt 111 err 1 -1 153 no such table: tag +stmt 153 err 1 -1 195 no such table: tag +stmt 195 err 1 -1 239 no such table: tag +stmt 239 err 1 -1 454 no such table: PHOTO ==== select7-5.1 CREATE TABLE t2(a,b); SELECT 5 IN (SELECT a,b FROM t2); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t2 +stmt 28 err 1 -1 68 no such table: t2 ==== select7-5.2 SELECT 5 IN (SELECT * FROM t2); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 38 no such table: t2 ==== select7-5.3 SELECT 5 IN (SELECT a,b FROM t2 UNION SELECT b,a FROM t2); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 65 no such table: t2 ==== select7-5.4 SELECT 5 IN (SELECT * FROM t2 UNION SELECT * FROM t2); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 61 no such table: t2 ==== select7-6.5 DROP TABLE IF EXISTS t1; @@ -111,12 +111,12 @@ stmt 27 ok (0,"",NULL), (0.0,NULL,X''), ("",X'',NULL), (NULL,0,""), (0,NULL,0), (X'',X'',0.0); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 275 no such table: t1 ==== select7-6.7 SELECT count(*) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 27 no such table: t1 ==== select7-6.8 INSERT INTO t1 VALUES @@ -125,12 +125,12 @@ stmt 0 err 1 -1 no such table: t1 (0,"",NULL), (0.0,NULL,X''), ("",X'',NULL), (NULL,0,""), (0,NULL,0), (X'',X'',0.0); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 275 no such table: t1 ==== select7-6.9 SELECT count(*) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 27 no such table: t1 ==== select7-7.1 CREATE TABLE t3(a REAL); @@ -138,8 +138,8 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t3 VALUES(56.0); ---- stmt 0 ok -stmt 29 err 1 -1 no such table: t3 -stmt 62 err 1 -1 no such table: t3 +stmt 29 err 1 -1 62 no such table: t3 +stmt 62 err 1 -1 95 no such table: t3 ==== select7-7.2 pragma vdbe_trace = 0; @@ -147,7 +147,7 @@ stmt 62 err 1 -1 no such table: t3 FROM t3 GROUP BY categ ---- stmt 0 ok -stmt 27 err 1 -1 no such table: t3 +stmt 27 err 1 -1 131 no such table: t3 ==== select7-7.3 CREATE TABLE t4(a REAL); @@ -155,21 +155,21 @@ stmt 27 err 1 -1 no such table: t3 INSERT INTO t4 VALUES( 3.0 ); ---- stmt 0 ok -stmt 29 err 1 -1 no such table: t4 -stmt 63 err 1 -1 no such table: t4 +stmt 29 err 1 -1 63 no such table: t4 +stmt 63 err 1 -1 97 no such table: t4 ==== select7-7.4 SELECT (CASE WHEN a=0 THEN 'zero' ELSE a/2 END) AS t FROM t4 GROUP BY t; ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 77 no such table: t4 ==== select7-7.5 SELECT a=0, typeof(a) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 31 no such table: t4 ==== select7-7.6 SELECT a=0, typeof(a) FROM t4 GROUP BY a ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 42 no such table: t4 ==== select7-7.7 CREATE TABLE t5(a TEXT, b INT); @@ -177,8 +177,8 @@ stmt 0 err 1 -1 no such table: t4 SELECT typeof(a), a FROM t5 GROUP BY a HAVING a='d' ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 86 no such table: t1 ==== selectA-2.42 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-2.43 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-2.44 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== selectA-2.45 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 88 no such table: t1 ==== selectA-2.46 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 88 no such table: t1 ==== selectA-2.47 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 87 no such table: t1 ==== selectA-2.48 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== selectA-2.49 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1 ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== selectA-2.50 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 86 no such table: t1 ==== selectA-2.51 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-2.52 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-2.53 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY b, a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== selectA-2.54 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== selectA-2.55 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1 ORDER BY b DESC, c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 93 no such table: t1 ==== selectA-2.56 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY b, c DESC, a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 92 no such table: t1 ==== selectA-2.57 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY b COLLATE NOCASE ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== selectA-2.58 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 ORDER BY b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 84 no such table: t1 ==== selectA-2.59 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY c, a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== selectA-2.60 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== selectA-2.61 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1 ORDER BY c COLLATE BINARY, b DESC, c, a, b, c, a, b, c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 129 no such table: t1 ==== selectA-2.62 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY c DESC, a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-2.63 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY c COLLATE NOCASE ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== selectA-2.64 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 ORDER BY c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 84 no such table: t1 ==== selectA-2.65 SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY c COLLATE NOCASE ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== selectA-2.66 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t3 ORDER BY c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 84 no such table: t3 ==== selectA-2.67 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t3 WHERE b<'d' ORDER BY c DESC, a ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 89 no such table: t3 ==== selectA-2.68 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' @@ -460,7 +460,7 @@ stmt 0 err 1 -1 no such table: t3 EXCEPT SELECT b,c,a FROM t3 ORDER BY c DESC, a ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 156 no such table: t3 ==== selectA-2.69 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' @@ -468,7 +468,7 @@ stmt 0 err 1 -1 no such table: t3 EXCEPT SELECT b,c,a FROM t3 ORDER BY c COLLATE NOCASE ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 166 no such table: t3 ==== selectA-2.70 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 @@ -476,7 +476,7 @@ stmt 0 err 1 -1 no such table: t3 EXCEPT SELECT b,c,a FROM t3 ORDER BY c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 151 no such table: t3 ==== selectA-2.71 SELECT a,b,c FROM t1 WHERE b<'d' @@ -491,127 +491,127 @@ stmt 0 err 1 -1 no such table: t3 EXCEPT SELECT c,b,a FROM t3 ORDER BY c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 356 no such table: t3 ==== selectA-2.72 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-2.73 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY a DESC,b,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 77 no such table: t2 ==== selectA-2.74 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY a,c,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-2.75 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY b,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-2.76 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY b COLLATE NOCASE,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 87 no such table: t2 ==== selectA-2.77 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY b COLLATE NOCASE DESC,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== selectA-2.78 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY c,b,a ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-2.79 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY c,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-2.80 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY c DESC,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 77 no such table: t2 ==== selectA-2.81 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY c COLLATE BINARY DESC,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== selectA-2.82 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-2.83 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY a DESC,b,c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 77 no such table: t3 ==== selectA-2.84 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY a,c,b ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-2.85 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY b,a,c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-2.86 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE,x,z ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 87 no such table: t3 ==== selectA-2.87 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 92 no such table: t3 ==== selectA-2.88 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY c,b,a ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-2.89 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY c,a,b ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-2.90 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY c DESC,a,b ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 77 no such table: t3 ==== selectA-2.91 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY z COLLATE BINARY DESC,x,y ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 92 no such table: t3 ==== selectA-2.92 SELECT x,y,z FROM t2 @@ -623,27 +623,27 @@ stmt 0 err 1 -1 no such table: t3 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 261 no such table: t3 ==== selectA-2.93 SELECT upper((SELECT c FROM t1 UNION SELECT z FROM t2 ORDER BY 1)); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-2.94 SELECT lower((SELECT c FROM t1 UNION ALL SELECT z FROM t2 ORDER BY 1)); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== selectA-2.95 SELECT lower((SELECT c FROM t1 INTERSECT SELECT z FROM t2 ORDER BY 1)); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== selectA-2.96 SELECT lower((SELECT z FROM t2 EXCEPT SELECT c FROM t1 ORDER BY 1)); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 73 no such table: t1 ==== selectA-3.0 CREATE UNIQUE INDEX t1a ON t1(a); @@ -654,415 +654,415 @@ stmt 0 err 1 -1 no such table: t1 CREATE UNIQUE INDEX t2z ON t2(z); SELECT name FROM sqlite_master WHERE type='index' ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 38 err 1 -1 no such table: main.t1 -stmt 76 err 1 -1 no such table: main.t1 -stmt 114 err 1 -1 no such table: main.t2 -stmt 152 err 1 -1 no such table: main.t2 -stmt 190 err 1 -1 no such table: main.t2 +stmt 0 err 1 -1 38 no such table: main.t1 +stmt 38 err 1 -1 76 no such table: main.t1 +stmt 76 err 1 -1 114 no such table: main.t1 +stmt 114 err 1 -1 152 no such table: main.t2 +stmt 152 err 1 -1 190 no such table: main.t2 +stmt 190 err 1 -1 228 no such table: main.t2 stmt 228 ok ==== selectA-3.1 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== selectA-3.2 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY a DESC,b,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 81 no such table: t2 ==== selectA-3.3 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY a,c,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== selectA-3.4 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY b,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== selectA-3.5 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY b COLLATE NOCASE,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 91 no such table: t2 ==== selectA-3.6 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY b COLLATE NOCASE DESC,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 ==== selectA-3.7 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY c,b,a ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== selectA-3.8 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY c,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== selectA-3.9 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY c DESC,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 81 no such table: t2 ==== selectA-3.10 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2 ORDER BY c COLLATE BINARY DESC,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 ==== selectA-3.11 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 ==== selectA-3.12 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY a DESC,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 81 no such table: t1 ==== selectA-3.13 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY a,c,b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 ==== selectA-3.14 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY b,a,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 ==== selectA-3.15 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY b COLLATE NOCASE,a,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 91 no such table: t1 ==== selectA-3.16 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY b COLLATE NOCASE DESC,a,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== selectA-3.17 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY c,b,a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 ==== selectA-3.18 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY c,a,b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 ==== selectA-3.19 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY c DESC,a,b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 81 no such table: t1 ==== selectA-3.20 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1 ORDER BY c COLLATE BINARY DESC,a,b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== selectA-3.21 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.22 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY a DESC,b,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 77 no such table: t2 ==== selectA-3.23 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY a,c,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.24 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY b,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.25 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY b COLLATE NOCASE,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 87 no such table: t2 ==== selectA-3.26 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY b COLLATE NOCASE DESC,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== selectA-3.27 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY c,b,a ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.28 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY c,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.29 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY c DESC,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 77 no such table: t2 ==== selectA-3.30 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2 ORDER BY c COLLATE BINARY DESC,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== selectA-3.31 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 72 no such table: t1 ==== selectA-3.32 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY a DESC,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 77 no such table: t1 ==== selectA-3.33 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY a,c,b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 72 no such table: t1 ==== selectA-3.34 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY b,a,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 72 no such table: t1 ==== selectA-3.35 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY y COLLATE NOCASE,x,z ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 87 no such table: t1 ==== selectA-3.36 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY y COLLATE NOCASE DESC,x,z ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 92 no such table: t1 ==== selectA-3.37 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY c,b,a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 72 no such table: t1 ==== selectA-3.38 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY c,a,b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 72 no such table: t1 ==== selectA-3.39 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY c DESC,a,b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 77 no such table: t1 ==== selectA-3.40 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 ORDER BY z COLLATE BINARY DESC,x,y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 92 no such table: t1 ==== selectA-3.41 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 86 no such table: t1 ==== selectA-3.42 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-3.43 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-3.44 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== selectA-3.45 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 88 no such table: t1 ==== selectA-3.46 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 88 no such table: t1 ==== selectA-3.47 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 87 no such table: t1 ==== selectA-3.48 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== selectA-3.49 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1 ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== selectA-3.50 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 86 no such table: t1 ==== selectA-3.51 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-3.52 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 ORDER BY a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-3.53 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY b, a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== selectA-3.54 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== selectA-3.55 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1 ORDER BY b DESC, c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 93 no such table: t1 ==== selectA-3.56 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY b, c DESC, a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 92 no such table: t1 ==== selectA-3.57 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY b COLLATE NOCASE ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== selectA-3.58 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 ORDER BY b ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 84 no such table: t1 ==== selectA-3.59 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY c, a DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== selectA-3.60 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== selectA-3.61 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1 ORDER BY c COLLATE BINARY, b DESC, c, a, b, c, a, b, c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 129 no such table: t1 ==== selectA-3.62 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY c DESC, a ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectA-3.63 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY c COLLATE NOCASE ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== selectA-3.64 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 ORDER BY c ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 84 no such table: t1 ==== selectA-3.65 SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' ORDER BY c COLLATE NOCASE ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== selectA-3.66 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t3 ORDER BY c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 84 no such table: t3 ==== selectA-3.67 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t3 WHERE b<'d' ORDER BY c DESC, a ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 89 no such table: t3 ==== selectA-3.68 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' @@ -1070,7 +1070,7 @@ stmt 0 err 1 -1 no such table: t3 EXCEPT SELECT b,c,a FROM t3 ORDER BY c DESC, a ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 156 no such table: t3 ==== selectA-3.69 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' @@ -1078,7 +1078,7 @@ stmt 0 err 1 -1 no such table: t3 EXCEPT SELECT b,c,a FROM t3 ORDER BY c COLLATE NOCASE ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 166 no such table: t3 ==== selectA-3.70 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 @@ -1086,7 +1086,7 @@ stmt 0 err 1 -1 no such table: t3 EXCEPT SELECT b,c,a FROM t3 ORDER BY c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 151 no such table: t3 ==== selectA-3.71 SELECT a,b,c FROM t1 WHERE b<'d' @@ -1101,127 +1101,127 @@ stmt 0 err 1 -1 no such table: t3 EXCEPT SELECT c,b,a FROM t3 ORDER BY c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 356 no such table: t3 ==== selectA-3.72 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.73 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY a DESC,b,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 77 no such table: t2 ==== selectA-3.74 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY a,c,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.75 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY b,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.76 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY b COLLATE NOCASE,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 87 no such table: t2 ==== selectA-3.77 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY b COLLATE NOCASE DESC,a,c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== selectA-3.78 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY c,b,a ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.79 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY c,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.80 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY c DESC,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 77 no such table: t2 ==== selectA-3.81 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2 ORDER BY c COLLATE BINARY DESC,a,b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== selectA-3.82 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY a,b,c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-3.83 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY a DESC,b,c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 77 no such table: t3 ==== selectA-3.84 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY a,c,b ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-3.85 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY b,a,c ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-3.86 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE,x,z ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 87 no such table: t3 ==== selectA-3.87 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 92 no such table: t3 ==== selectA-3.88 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY c,b,a ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-3.89 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY c,a,b ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 72 no such table: t3 ==== selectA-3.90 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY c DESC,a,b ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 77 no such table: t3 ==== selectA-3.91 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 ORDER BY z COLLATE BINARY DESC,x,y ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 92 no such table: t3 ==== selectA-3.92 SELECT x,y,z FROM t2 @@ -1233,27 +1233,27 @@ stmt 0 err 1 -1 no such table: t3 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 261 no such table: t3 ==== selectA-3.93 SELECT upper((SELECT c FROM t1 UNION SELECT z FROM t2 ORDER BY 1)); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectA-3.94 SELECT lower((SELECT c FROM t1 UNION ALL SELECT z FROM t2 ORDER BY 1)); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== selectA-3.95 SELECT lower((SELECT c FROM t1 INTERSECT SELECT z FROM t2 ORDER BY 1)); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== selectA-3.96 SELECT lower((SELECT z FROM t2 EXCEPT SELECT c FROM t1 ORDER BY 1)); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 73 no such table: t1 ==== selectA-3.97 SELECT upper((SELECT x FROM ( @@ -1266,7 +1266,7 @@ stmt 0 err 1 -1 no such table: t1 UNION SELECT a,b,c FROM t3 ORDER BY y COLLATE NOCASE DESC,x,z))) ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 314 no such table: t3 ==== selectA-3.98 WITH RECURSIVE @@ -1285,7 +1285,7 @@ stmt 0 err 1 -1 no such table: t3 ) SELECT n FROM xyz ORDER BY +n; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 468 no such table: t3 ==== 4.1.1 CREATE TABLE t4(a, b); @@ -1301,12 +1301,12 @@ stmt 0 err 1 -1 no such table: t3 ---- stmt 0 ok stmt 25 ok -stmt 50 err 1 -1 no such table: t5 -stmt 84 err 1 -1 no such table: t5 -stmt 117 err 1 -1 no such table: t4 -stmt 150 err 1 -1 no such table: t4 -stmt 183 err 1 -1 no such table: main.t4 -stmt 212 err 1 -1 no such table: main.t5 +stmt 50 err 1 -1 84 no such table: t5 +stmt 84 err 1 -1 117 no such table: t5 +stmt 117 err 1 -1 150 no such table: t4 +stmt 150 err 1 -1 183 no such table: t4 +stmt 183 err 1 -1 212 no such table: main.t4 +stmt 212 err 1 -1 240 no such table: main.t5 ==== 4.1.3 SELECT c, d FROM t5 @@ -1314,7 +1314,7 @@ stmt 212 err 1 -1 no such table: main.t5 SELECT a, b FROM t4 WHERE f()==f() ORDER BY 1,2 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 88 no such table: t4 ==== 4.2.1 CREATE TABLE t6(a, b); @@ -1332,14 +1332,14 @@ stmt 0 err 1 -1 no such table: t4 ---- stmt 0 ok stmt 25 ok -stmt 50 err 1 -1 no such table: t7 -stmt 82 err 1 -1 no such table: t6 -stmt 113 err 1 -1 no such table: t6 -stmt 144 err 1 -1 no such table: t7 -stmt 175 err 1 -1 no such table: t6 -stmt 206 err 1 -1 no such table: t7 -stmt 237 err 1 -1 no such table: main.t6 -stmt 266 err 1 -1 no such table: main.t7 +stmt 50 err 1 -1 82 no such table: t7 +stmt 82 err 1 -1 113 no such table: t6 +stmt 113 err 1 -1 144 no such table: t6 +stmt 144 err 1 -1 175 no such table: t7 +stmt 175 err 1 -1 206 no such table: t6 +stmt 206 err 1 -1 237 no such table: t7 +stmt 237 err 1 -1 266 no such table: main.t6 +stmt 266 err 1 -1 294 no such table: main.t7 ==== 4.2.2 SELECT c, f(d,c,d,c,d) FROM t7 @@ -1347,7 +1347,7 @@ stmt 266 err 1 -1 no such table: main.t7 SELECT a, b FROM t6 ORDER BY 1,2 ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 84 no such table: t6 ==== 5.0 CREATE TABLE t8(a, b); @@ -1359,7 +1359,7 @@ stmt 25 ok SELECT * FROM t8 UNION SELECT * FROM t9 ORDER BY a+b COLLATE NOCASE ---- -stmt 0 err 1 -1 no such table: t9 +stmt 0 err 1 -1 71 no such table: t9 ==== 6.1 DROP TABLE IF EXISTS t1; @@ -1373,8 +1373,8 @@ stmt 0 ok stmt 27 ok stmt 54 ok stmt 84 ok -stmt 111 err 1 -1 no such table: t2 -stmt 148 err 1 -1 no such table: t2 +stmt 111 err 1 -1 148 no such table: t2 +stmt 148 err 1 -1 217 no such table: t2 ==== 7.1 CREATE TABLE t1(c1); INSERT INTO t1 VALUES(12),(123),(1234),(NULL),('abc'); @@ -1384,23 +1384,23 @@ stmt 148 err 1 -1 no such table: t2 CREATE VIEW t5 AS SELECT c3 FROM t3 ORDER BY c4; ---- stmt 0 ok -stmt 23 err 1 -1 no such table: t1 +stmt 23 err 1 -1 82 no such table: t1 stmt 82 ok -stmt 105 err 1 -1 no such table: t2 +stmt 105 err 1 -1 147 no such table: t2 stmt 147 ok -stmt 173 err 1 -1 no such table: t3 +stmt 173 err 1 -1 218 no such table: t3 stmt 218 ok stmt 257 ok ==== 7.2 SELECT * FROM t1, t2 WHERE c1=(SELECT 123 INTERSECT SELECT c2 FROM t4) AND c1=123; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== 7.3 SELECT * FROM t1, t2 WHERE c1=(SELECT 123 INTERSECT SELECT c2 FROM t5) AND c1=123; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== 7.4 CREATE TABLE a(b); @@ -1409,7 +1409,7 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 21 ok -stmt 71 err 1 -1 no such table: c +stmt 71 err 1 -1 197 no such table: c ==== 8.0 CREATE TABLE x1(x); @@ -1419,15 +1419,15 @@ stmt 71 err 1 -1 no such table: c ---- stmt 0 ok stmt 22 ok -stmt 53 err 1 -1 no such table: main.t1 -stmt 82 err 1 -1 no such table: main.t1 +stmt 53 err 1 -1 82 no such table: main.t1 +stmt 82 err 1 -1 111 no such table: main.t1 ==== 8.1 SELECT 'ABCD' FROM t1 WHERE (a=? OR b=?) AND (0 OR (SELECT 'xyz' INTERSECT SELECT a ORDER BY 1)) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 118 no such table: t1 ==== 9.0 CREATE TABLE t1(a COLLATE nocase); @@ -1438,17 +1438,17 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 37 ok -stmt 74 err 1 -1 no such table: t1 -stmt 107 err 1 -1 no such table: t2 +stmt 74 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 139 no such table: t2 ==== 9.1 SELECT a FROM t1 INTERSECT SELECT b FROM t2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 47 no such table: t2 ==== 9.2 SELECT * FROM ( SELECT a FROM t1 INTERSECT SELECT b FROM t2 ) WHERE a||'' = 'ABC'; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 93 no such table: t2 diff --git a/parser/testdata/selectB.test b/parser/testdata/selectB.test index b494efe..dcd6b86 100644 --- a/parser/testdata/selectB.test +++ b/parser/testdata/selectB.test @@ -13,26 +13,26 @@ ---- stmt 0 ok stmt 30 ok -stmt 60 err 1 -1 no such table: t1 -stmt 100 err 1 -1 no such table: t1 -stmt 139 err 1 -1 no such table: t1 -stmt 178 err 1 -1 no such table: t2 -stmt 218 err 1 -1 no such table: t2 -stmt 257 err 1 -1 no such table: t2 +stmt 60 err 1 -1 100 no such table: t1 +stmt 100 err 1 -1 139 no such table: t1 +stmt 139 err 1 -1 178 no such table: t1 +stmt 178 err 1 -1 218 no such table: t2 +stmt 218 err 1 -1 257 no such table: t2 +stmt 257 err 1 -1 296 no such table: t2 ==== selectB-2.1 CREATE INDEX i1 ON t1(a); CREATE INDEX i2 ON t2(d); ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 34 err 1 -1 no such table: main.t2 +stmt 0 err 1 -1 34 no such table: main.t1 +stmt 34 err 1 -1 68 no such table: main.t2 ==== selectB-3.0 DROP INDEX i1; DROP INDEX i2; ---- -stmt 0 err 1 -1 no such index: i1 -stmt 19 err 1 -1 no such index: i2 +stmt 0 err 1 -1 19 no such index: i1 +stmt 19 err 1 -1 38 no such index: i2 ==== selectB-5.0 CREATE INDEX i1 ON t1(a); @@ -42,33 +42,33 @@ stmt 19 err 1 -1 no such index: i2 CREATE INDEX i5 ON t2(e); CREATE INDEX i6 ON t2(f); ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 36 err 1 -1 no such table: main.t1 -stmt 72 err 1 -1 no such table: main.t1 -stmt 108 err 1 -1 no such table: main.t2 -stmt 144 err 1 -1 no such table: main.t2 -stmt 180 err 1 -1 no such table: main.t2 +stmt 0 err 1 -1 36 no such table: main.t1 +stmt 36 err 1 -1 72 no such table: main.t1 +stmt 72 err 1 -1 108 no such table: main.t1 +stmt 108 err 1 -1 144 no such table: main.t2 +stmt 144 err 1 -1 180 no such table: main.t2 +stmt 180 err 1 -1 216 no such table: main.t2 ==== selectB-generated SELECT DISTINCT * FROM (SELECT c FROM t1 UNION ALL SELECT e FROM t2) ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== selectB-generated.dup1 SELECT c, count(*) FROM (SELECT c FROM t1 UNION ALL SELECT e FROM t2) GROUP BY c ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== selectB-generated.dup2 SELECT c, count(*) FROM (SELECT c FROM t1 UNION ALL SELECT e FROM t2) GROUP BY c HAVING count(*)>1; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== selectB-generated.dup3 SELECT t4.c, t3.a FROM @@ -76,35 +76,35 @@ stmt 0 err 1 -1 no such table: t2 WHERE t3.a=14 ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 138 no such table: t2 ==== selectB-generated.dup4 SELECT d FROM t2 EXCEPT SELECT a FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== selectB-generated.dup5 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) EXCEPT SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 147 no such table: t2 ==== selectB-generated.dup6 SELECT c FROM t1 EXCEPT SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== selectB-generated.dup7 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) EXCEPT SELECT c FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 104 no such table: t1 ==== selectB-generated.dup8 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) @@ -112,7 +112,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT c FROM t1 ORDER BY c DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 126 no such table: t1 ==== selectB-generated.dup9 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) @@ -120,7 +120,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT c FROM t1 ORDER BY c DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 125 no such table: t1 ==== selectB-generated.dup10 SELECT c FROM t1 @@ -128,13 +128,13 @@ stmt 0 err 1 -1 no such table: t1 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) ORDER BY c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== selectB-generated.dup11 SELECT c FROM t1 UNION SELECT e FROM t2 UNION ALL SELECT f FROM t2 ORDER BY c ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 91 no such table: t2 ==== selectB-generated.dup12 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) @@ -142,7 +142,7 @@ stmt 0 err 1 -1 no such table: t2 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 163 no such table: t2 ==== selectB-generated.dup13 SELECT c FROM t1 @@ -150,7 +150,7 @@ stmt 0 err 1 -1 no such table: t2 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== selectB-generated.dup14 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) @@ -158,7 +158,7 @@ stmt 0 err 1 -1 no such table: t2 SELECT c FROM t1 ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 124 no such table: t1 ==== selectB-generated.dup15 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) @@ -166,45 +166,45 @@ stmt 0 err 1 -1 no such table: t1 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 167 no such table: t2 ==== selectB-generated.dup16 SELECT * FROM ( SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 4 ) LIMIT 2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== selectB-generated.dup17 SELECT * FROM ( SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 4 OFFSET 2 ) LIMIT 2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== selectB-generated.dup18 SELECT * FROM ( SELECT DISTINCT (a/10) FROM t1 UNION ALL SELECT DISTINCT(d%2) FROM t2 ) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== selectB-generated.dup19 SELECT DISTINCT * FROM ( SELECT DISTINCT (a/10) FROM t1 UNION ALL SELECT DISTINCT(d%2) FROM t2 ) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== selectB-generated.dup20 SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2) ORDER BY a+b ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 80 no such table: t2 ==== selectB-generated.dup21 SELECT * FROM (SELECT 345 UNION ALL SELECT d FROM t2) ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== selectB-generated.dup22 SELECT x, y FROM ( @@ -215,7 +215,7 @@ stmt 0 err 1 -1 no such table: t2 SELECT a*100, b*100 FROM t1 ) ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 218 no such table: t1 ==== selectB-generated.dup23 SELECT x, y FROM ( @@ -226,7 +226,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT a*100, b*100 FROM t1 ) ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 223 no such table: t1 ==== selectB-generated.dup24 SELECT x+y FROM ( @@ -237,4 +237,4 @@ stmt 0 err 1 -1 no such table: t1 SELECT a*100, b*100 FROM t1 ) WHERE y+x NOT NULL ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 241 no such table: t1 diff --git a/parser/testdata/selectC.test b/parser/testdata/selectC.test index 62462f2..ab17956 100644 --- a/parser/testdata/selectC.test +++ b/parser/testdata/selectC.test @@ -10,52 +10,52 @@ WHERE y IN ('aaabbb','xxx'); ---- stmt 0 ok -stmt 30 err 1 -1 no such table: t1 -stmt 72 err 1 -1 no such table: t1 -stmt 109 err 1 -1 no such table: t1 -stmt 151 err 1 -1 no such table: t1 +stmt 30 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 109 no such table: t1 +stmt 109 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 238 no such table: t1 ==== selectC-1.2 SELECT DISTINCT a AS x, b||c AS y FROM t1 WHERE b||c IN ('aaabbb','xxx'); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== selectC-1.3 SELECT DISTINCT a AS x, b||c AS y FROM t1 WHERE y='aaabbb' ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 75 no such table: t1 ==== selectC-1.4 SELECT DISTINCT a AS x, b||c AS y FROM t1 WHERE b||c='aaabbb' ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 78 no such table: t1 ==== selectC-1.5 SELECT DISTINCT a AS x, b||c AS y FROM t1 WHERE x=2 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 68 no such table: t1 ==== selectC-1.6 SELECT DISTINCT a AS x, b||c AS y FROM t1 WHERE a=2 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 68 no such table: t1 ==== selectC-1.7 SELECT DISTINCT a AS x, b||c AS y FROM t1 WHERE +y='aaabbb' ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 ==== selectC-1.8 SELECT a AS x, b||c AS y @@ -63,7 +63,7 @@ stmt 0 err 1 -1 no such table: t1 GROUP BY x, y HAVING y='aaabbb' ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== selectC-1.9 SELECT a AS x, b||c AS y @@ -71,7 +71,7 @@ stmt 0 err 1 -1 no such table: t1 GROUP BY x, y HAVING b||c='aaabbb' ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 88 no such table: t1 ==== selectC-1.10 SELECT a AS x, b||c AS y @@ -79,7 +79,7 @@ stmt 0 err 1 -1 no such table: t1 WHERE y='aaabbb' GROUP BY x, y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 85 no such table: t1 ==== selectC-1.11 SELECT a AS x, b||c AS y @@ -87,21 +87,21 @@ stmt 0 err 1 -1 no such table: t1 WHERE b||c='aaabbb' GROUP BY x, y ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 88 no such table: t1 ==== selectC-1.12.1 SELECT DISTINCT upper(b) AS x FROM t1 ORDER BY x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 65 no such table: t1 ==== selectC-1.12.2 SELECT DISTINCT uppercaseconversionfunctionwithaverylongname(b) AS x FROM t1 ORDER BY x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 104 no such table: t1 ==== selectC-1.13.1 SELECT upper(b) AS x @@ -109,7 +109,7 @@ stmt 0 err 1 -1 no such table: t1 GROUP BY x ORDER BY x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 72 no such table: t1 ==== selectC-1.13.2 SELECT uppercaseconversionfunctionwithaverylongname(b) AS x @@ -117,21 +117,21 @@ stmt 0 err 1 -1 no such table: t1 GROUP BY x ORDER BY x ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 111 no such table: t1 ==== selectC-1.14.1 SELECT upper(b) AS x FROM t1 ORDER BY x DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 61 no such table: t1 ==== selectC-1.14.2 SELECT uppercaseconversionfunctionwithaverylongname(b) AS x FROM t1 ORDER BY x DESC ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 100 no such table: t1 ==== selectC-2.1 CREATE TABLE t21a(a,b); @@ -144,10 +144,10 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t21b VALUES(6); ---- stmt 0 ok -stmt 30 err 1 -1 no such table: t21a +stmt 30 err 1 -1 66 no such table: t21a stmt 66 ok -stmt 94 err 1 -1 no such table: main.t21b -stmt 269 err 1 -1 no such table: t21b +stmt 94 err 1 -1 146 no such table: main.t21b +stmt 269 err 1 -1 303 no such table: t21b ==== selectC-3.1 CREATE TABLE person ( @@ -176,17 +176,17 @@ stmt 269 err 1 -1 no such table: t21b GROUP BY 1; ---- stmt 0 ok -stmt 256 err 1 -1 no such table: person -stmt 316 err 1 -1 no such table: person -stmt 376 err 1 -1 no such table: person -stmt 435 err 1 -1 no such table: person -stmt 488 err 1 -1 no such table: person -stmt 546 err 1 -1 no such table: person -stmt 604 err 1 -1 no such table: person -stmt 665 err 1 -1 no such table: person -stmt 721 err 1 -1 no such table: person -stmt 778 err 1 -1 no such table: person -stmt 837 err 1 -1 no such table: person +stmt 256 err 1 -1 316 no such table: person +stmt 316 err 1 -1 376 no such table: person +stmt 376 err 1 -1 435 no such table: person +stmt 435 err 1 -1 488 no such table: person +stmt 488 err 1 -1 546 no such table: person +stmt 546 err 1 -1 604 no such table: person +stmt 604 err 1 -1 665 no such table: person +stmt 665 err 1 -1 721 no such table: person +stmt 721 err 1 -1 778 no such table: person +stmt 778 err 1 -1 837 no such table: person +stmt 837 err 1 -1 1021 no such table: person ==== selectC-3.2 CREATE TABLE t2(a PRIMARY KEY, b); @@ -195,14 +195,14 @@ stmt 837 err 1 -1 no such table: person SELECT a, max(b || a) FROM t2 WHERE (b||b||b)!='value' GROUP BY a; ---- stmt 0 ok -stmt 39 err 1 -1 no such table: t2 -stmt 80 err 1 -1 no such table: t2 -stmt 121 err 1 -1 no such table: t2 +stmt 39 err 1 -1 80 no such table: t2 +stmt 80 err 1 -1 121 no such table: t2 +stmt 121 err 1 -1 192 no such table: t2 ==== selectC-3.3 SELECT b, max(a || b) FROM t2 WHERE (b||b||b)!='value' GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 71 no such table: t2 ==== selectC-4.1 create table t_distinct_bug (a, b, c); @@ -214,29 +214,29 @@ stmt 0 err 1 -1 no such table: t2 insert into t_distinct_bug values ('1', '3', 'f'); ---- stmt 0 ok -stmt 41 err 1 -1 no such table: t_distinct_bug -stmt 94 err 1 -1 no such table: t_distinct_bug -stmt 147 err 1 -1 no such table: t_distinct_bug -stmt 200 err 1 -1 no such table: t_distinct_bug -stmt 253 err 1 -1 no such table: t_distinct_bug -stmt 306 err 1 -1 no such table: t_distinct_bug +stmt 41 err 1 -1 94 no such table: t_distinct_bug +stmt 94 err 1 -1 147 no such table: t_distinct_bug +stmt 147 err 1 -1 200 no such table: t_distinct_bug +stmt 200 err 1 -1 253 no such table: t_distinct_bug +stmt 253 err 1 -1 306 no such table: t_distinct_bug +stmt 306 err 1 -1 359 no such table: t_distinct_bug ==== selectC-4.2 select a from (select distinct a, b from t_distinct_bug) ---- -stmt 0 err 1 -1 no such table: t_distinct_bug +stmt 0 err 1 -1 60 no such table: t_distinct_bug ==== selectC-4.2b CREATE VIEW v42b AS SELECT DISTINCT a, b FROM t_distinct_bug; SELECT a FROM v42b; ---- stmt 0 ok -stmt 64 err 1 -1 no such table: v42b +stmt 64 err 1 -1 86 no such table: v42b ==== selectC-4.3 select a, udf() from (select distinct a, b from t_distinct_bug) ---- -stmt 0 err 1 -1 no such table: t_distinct_bug +stmt 0 err 1 -1 67 no such table: t_distinct_bug ==== 5.0 CREATE TABLE x1(a); @@ -252,23 +252,23 @@ stmt 0 ok stmt 22 ok stmt 44 ok stmt 66 ok -stmt 116 err 1 -1 no such table: x1 -stmt 154 err 1 -1 no such table: x2 -stmt 207 err 1 -1 no such table: x3 +stmt 116 err 1 -1 154 no such table: x1 +stmt 154 err 1 -1 207 no such table: x2 +stmt 207 err 1 -1 251 no such table: x3 ==== 5.1 CREATE TABLE x4 AS SELECT b FROM vvv UNION ALL SELECT c from x3; SELECT * FROM x4; ---- -stmt 0 err 1 -1 no such table: x3 -stmt 67 err 1 -1 no such table: x4 +stmt 0 err 1 -1 67 no such table: x3 +stmt 67 err 1 -1 87 no such table: x4 ==== 5.2 SELECT * FROM x1, x4 ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 24 no such table: x1 ==== 5.3 SELECT * FROM x1, (SELECT b FROM vvv UNION ALL SELECT c from x3) ORDER BY 1,2; ---- -stmt 0 err 1 -1 no such table: x1 +stmt 0 err 1 -1 81 no such table: x1 diff --git a/parser/testdata/selectD.test b/parser/testdata/selectD.test index 8cecd4d..523ea1f 100644 --- a/parser/testdata/selectD.test +++ b/parser/testdata/selectD.test @@ -5,7 +5,7 @@ ON main.t4.a=t2.a+222) ON t2.a=t1.a+111; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 185 no such table: t1 ==== selectD-4.1 CREATE TABLE t41(a INTEGER PRIMARY KEY, b INTEGER); @@ -23,4 +23,4 @@ stmt 0 err 1 -1 no such table: t1 stmt 0 ok stmt 54 ok stmt 108 ok -stmt 162 err 1 -1 no such table: t41 +stmt 162 err 1 -1 402 no such table: t41 diff --git a/parser/testdata/selectE.test b/parser/testdata/selectE.test index 4695804..eae091a 100644 --- a/parser/testdata/selectE.test +++ b/parser/testdata/selectE.test @@ -2,4 +2,4 @@ SELECT 1 EXCEPT SELECT 2 ORDER BY 1 COLLATE nocase EXCEPT SELECT 3; ---- -stmt 0 err 1 -1 ORDER BY clause should come after EXCEPT not before +stmt 0 err 1 -1 70 ORDER BY clause should come after EXCEPT not before diff --git a/parser/testdata/selectF.test b/parser/testdata/selectF.test index a8c9e8e..0313606 100644 --- a/parser/testdata/selectF.test +++ b/parser/testdata/selectF.test @@ -12,11 +12,11 @@ ---- stmt 0 ok stmt 21 ok -stmt 49 err 1 -1 no such table: t1 +stmt 49 err 1 -1 89 no such table: t1 stmt 89 ok -stmt 117 err 1 -1 no such table: t2 -stmt 158 err 1 -1 no such table: t2 -stmt 198 err 1 -1 no such table: main.t1 +stmt 117 err 1 -1 158 no such table: t2 +stmt 158 err 1 -1 198 no such table: t2 +stmt 198 err 1 -1 230 no such table: main.t1 stmt 230 ok ==== 2 @@ -25,4 +25,4 @@ stmt 230 ok SELECT * FROM t1 WHERE a<5 ORDER BY 2, 1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 79 no such table: t1 diff --git a/parser/testdata/selectH.test b/parser/testdata/selectH.test index 2633135..34d7366 100644 --- a/parser/testdata/selectH.test +++ b/parser/testdata/selectH.test @@ -21,8 +21,8 @@ CREATE INDEX t1c60 ON t1(c60); ---- stmt 0 ok -stmt 387 err 1 -1 no such table: t1 -stmt 714 err 1 -1 no such table: main.t1 +stmt 387 err 1 -1 714 no such table: t1 +stmt 714 err 1 -1 747 no such table: main.t1 ==== 1.2 SELECT DISTINCT c44 FROM ( @@ -31,7 +31,7 @@ stmt 714 err 1 -1 no such table: main.t1 SELECT c1 AS a, *, counter(1) FROM t1 ) WHERE c60=60; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 145 no such table: t1 ==== 2.1 SELECT a FROM ( @@ -41,7 +41,7 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY b ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 172 no such table: t1 ==== 3.1 CREATE VIEW v1 AS @@ -55,22 +55,22 @@ stmt 0 err 1 -1 no such table: t1 SELECT count(*) FROM v1 WHERE c60=60; ---- stmt 0 ok -stmt 255 err 1 -1 no such table: v1 +stmt 255 err 1 -1 295 no such table: v1 ==== 3.3 SELECT count(a) FROM v1 WHERE c60=60; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 40 no such table: v1 ==== 3.4 SELECT a FROM v1 WHERE c60=60; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 33 no such table: v1 ==== 3.6 SELECT x FROM v1 WHERE c60=60; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 33 no such table: v1 ==== 4.1 DROP TABLE IF EXISTS t1; @@ -80,14 +80,14 @@ stmt 0 err 1 -1 no such table: v1 ---- stmt 0 ok stmt 27 ok -stmt 77 err 1 -1 no such table: t1 +stmt 77 err 1 -1 194 no such table: t1 ==== 4.2 SELECT DISTINCT name COLLATE rtrim FROM sqlite_schema UNION ALL SELECT a FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 92 no such table: t1 ==== 5.0 CREATE TABLE t1 (val1); @@ -96,18 +96,18 @@ stmt 0 err 1 -1 no such table: t1 CREATE TABLE t2 (val2); ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t1 -stmt 54 err 1 -1 no such table: t1 +stmt 26 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 82 no such table: t1 stmt 82 ok ==== 5.1 SELECT DISTINCT val1 FROM t1 UNION ALL SELECT val2 FROM t2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 62 no such table: t2 ==== 5.2 SELECT count(1234) FROM ( SELECT DISTINCT val1 FROM t1 UNION ALL SELECT val2 FROM t2 ) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 diff --git a/parser/testdata/tokenize.test b/parser/testdata/tokenize.test index 97f9f33..5b9fef5 100644 --- a/parser/testdata/tokenize.test +++ b/parser/testdata/tokenize.test @@ -1,51 +1,51 @@ ==== tokenize-1.1 SELECT 1.0e+ ---- -stmt 0 err 1 7 unrecognized token: "1.0e" +stmt 0 err 1 7 7 unrecognized token: "1.0e" ==== tokenize-1.2 SELECT 1.0E+ ---- -stmt 0 err 1 7 unrecognized token: "1.0E" +stmt 0 err 1 7 7 unrecognized token: "1.0E" ==== tokenize-1.3 SELECT 1.0e- ---- -stmt 0 err 1 7 unrecognized token: "1.0e" +stmt 0 err 1 7 7 unrecognized token: "1.0e" ==== tokenize-1.4 SELECT 1.0E- ---- -stmt 0 err 1 7 unrecognized token: "1.0E" +stmt 0 err 1 7 7 unrecognized token: "1.0E" ==== tokenize-1.5 SELECT 1.0e+/ ---- -stmt 0 err 1 7 unrecognized token: "1.0e" +stmt 0 err 1 7 7 unrecognized token: "1.0e" ==== tokenize-1.6 SELECT 1.0E+: ---- -stmt 0 err 1 7 unrecognized token: "1.0E" +stmt 0 err 1 7 7 unrecognized token: "1.0E" ==== tokenize-1.7 SELECT 1.0e-: ---- -stmt 0 err 1 7 unrecognized token: "1.0e" +stmt 0 err 1 7 7 unrecognized token: "1.0e" ==== tokenize-1.8 SELECT 1.0E-/ ---- -stmt 0 err 1 7 unrecognized token: "1.0E" +stmt 0 err 1 7 7 unrecognized token: "1.0E" ==== tokenize-1.9 SELECT 1.0F+5 ---- -stmt 0 err 1 7 unrecognized token: "1.0F" +stmt 0 err 1 7 7 unrecognized token: "1.0F" ==== tokenize-1.10 SELECT 1.0d-10 ---- -stmt 0 err 1 7 unrecognized token: "1.0d" +stmt 0 err 1 7 7 unrecognized token: "1.0d" ==== tokenize-1.11 SELECT 1.0e,5 ---- -stmt 0 err 1 7 unrecognized token: "1.0e" +stmt 0 err 1 7 7 unrecognized token: "1.0e" ==== tokenize-1.12 SELECT 1.0E.10 ---- -stmt 0 err 1 7 unrecognized token: "1.0E" +stmt 0 err 1 7 7 unrecognized token: "1.0E" ==== tokenize-2.1 SELECT 1, 2 /* ---- diff --git a/parser/testdata/trigger1.metadata.json b/parser/testdata/trigger1.metadata.json index a04608a..0967ef4 100644 --- a/parser/testdata/trigger1.metadata.json +++ b/parser/testdata/trigger1.metadata.json @@ -1,7 +1 @@ -{ - "todo": { - "trigger1-2.1": true, - "trigger1-2.2": true, - "trigger1-23.1": true - } -} +{} diff --git a/parser/testdata/trigger1.test b/parser/testdata/trigger1.test index 0aa24f1..e528d3b 100644 --- a/parser/testdata/trigger1.test +++ b/parser/testdata/trigger1.test @@ -4,42 +4,42 @@ SELECT * from sqlite_master; END; ---- -stmt 0 err 1 -1 no such table: main.no_such_table +stmt 0 err 1 -1 55 no such table: main.no_such_table ==== trigger1-1.1.2 CREATE TEMP TRIGGER trig UPDATE ON no_such_table BEGIN SELECT * from sqlite_master; END; ---- -stmt 0 err 1 -1 no such table: no_such_table +stmt 0 err 1 -1 62 no such table: no_such_table ==== trigger1-1.1.3 CREATE TRIGGER trig UPDATE ON t1 FOR EACH STATEMENT BEGIN SELECT * FROM sqlite_master; END; ---- -stmt 0 err 1 48 near "STATEMENT": syntax error +stmt 0 err 1 48 57 near "STATEMENT": syntax error ==== trigger1-1.2.0 CREATE TRIGGER IF NOT EXISTS tr1 DELETE ON t1 BEGIN SELECT * FROM sqlite_master; END ---- -stmt 0 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 60 no such table: main.t1 ==== trigger1-1.2.1 CREATE TRIGGER tr1 DELETE ON t1 BEGIN SELECT * FROM sqlite_master; END ---- -stmt 0 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 46 no such table: main.t1 ==== trigger1-1.2.2 CREATE TRIGGER "tr1" DELETE ON t1 BEGIN SELECT * FROM sqlite_master; END ---- -stmt 0 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 48 no such table: main.t1 ==== trigger1-1.3 BEGIN; @@ -50,9 +50,9 @@ stmt 0 err 1 -1 no such table: main.t1 SELECT * from sqlite_master; END; ---- stmt 0 ok -stmt 15 err 1 -1 no such table: main.t1 +stmt 15 err 1 -1 61 no such table: main.t1 stmt 107 ok -stmt 125 err 1 -1 no such table: main.t1 +stmt 125 err 1 -1 171 no such table: main.t1 ==== trigger1-1.4 DROP TRIGGER IF EXISTS tr1; @@ -61,7 +61,7 @@ stmt 125 err 1 -1 no such table: main.t1 END ---- stmt 0 ok -stmt 36 err 1 -1 no such table: main.t1 +stmt 36 err 1 -1 82 no such table: main.t1 ==== trigger1-1.5 BEGIN; @@ -70,9 +70,9 @@ stmt 36 err 1 -1 no such table: main.t1 DROP TRIGGER tr2; ---- stmt 0 ok -stmt 15 err 1 -1 no such trigger: tr2 +stmt 15 err 1 -1 41 no such trigger: tr2 stmt 41 ok -stmt 59 err 1 -1 no such trigger: tr2 +stmt 59 err 1 -1 85 no such trigger: tr2 ==== trigger1-1.6.1 DROP TRIGGER IF EXISTS biggles; @@ -82,14 +82,14 @@ stmt 0 ok DROP TRIGGER biggles; ---- -stmt 0 err 1 -1 no such trigger: biggles +stmt 0 err 1 -1 30 no such trigger: biggles ==== trigger1-1.7 DROP TABLE t1; DROP TRIGGER tr1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 23 err 1 -1 no such trigger: tr1 +stmt 0 err 1 -1 23 no such table: t1 +stmt 23 err 1 -1 49 no such trigger: tr1 ==== trigger1-1.8 CREATE TRIGGER temp_trig UPDATE ON temp_table BEGIN @@ -97,7 +97,7 @@ stmt 23 err 1 -1 no such trigger: tr1 END; SELECT count(*) FROM sqlite_master WHERE name = 'temp_trig'; ---- -stmt 0 err 1 -1 no such table: main.temp_table +stmt 0 err 1 -1 62 no such table: main.temp_table stmt 120 ok ==== trigger1-1.9 @@ -105,7 +105,7 @@ stmt 120 ok SELECT * FROM sqlite_master; END; ---- -stmt 0 err 1 -1 cannot create trigger on system table +stmt 0 err 1 -1 59 cannot create trigger on system table ==== trigger1-1.10 create table t1(a,b); @@ -121,14 +121,14 @@ stmt 0 err 1 -1 cannot create trigger on system table drop table t1; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t1 -stmt 60 err 1 -1 no such table: t1 -stmt 94 err 1 -1 no such table: t1 -stmt 128 err 1 -1 no such table: t1 -stmt 162 err 1 -1 no such table: main.t1 -stmt 269 err 1 -1 no such table: t1 -stmt 306 err 1 -1 no such table: t1 -stmt 328 err 1 -1 no such table: t1 +stmt 26 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 222 no such table: main.t1 +stmt 269 err 1 -1 306 no such table: t1 +stmt 306 err 1 -1 328 no such table: t1 +stmt 328 err 1 -1 347 no such table: t1 ==== trigger1-1.11 create table t1(a,b); @@ -144,14 +144,14 @@ stmt 328 err 1 -1 no such table: t1 drop table t1; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t1 -stmt 60 err 1 -1 no such table: t1 -stmt 94 err 1 -1 no such table: t1 -stmt 128 err 1 -1 no such table: t1 -stmt 162 err 1 -1 no such table: main.t1 -stmt 269 err 1 -1 no such table: t1 -stmt 317 err 1 -1 no such table: t1 -stmt 339 err 1 -1 no such table: t1 +stmt 26 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 222 no such table: main.t1 +stmt 269 err 1 -1 317 no such table: t1 +stmt 317 err 1 -1 339 no such table: t1 +stmt 339 err 1 -1 358 no such table: t1 ==== trigger1-1.12 create table t1(a,b); @@ -160,7 +160,7 @@ stmt 339 err 1 -1 no such table: t1 end; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: main.t1 +stmt 26 err 1 -1 92 no such table: main.t1 ==== trigger1-1.13 create view v1 as select * from t1; @@ -169,7 +169,7 @@ stmt 26 err 1 -1 no such table: main.t1 end; ---- stmt 0 ok -stmt 40 err 1 -1 no such table: main.v1 +stmt 40 err 1 -1 102 no such table: main.v1 ==== trigger1-1.14 drop view v1; @@ -178,16 +178,16 @@ stmt 40 err 1 -1 no such table: main.v1 delete from t1 WHERE a=old.a+2; end; ---- -stmt 0 err 1 -1 no such view: v1 +stmt 0 err 1 -1 18 no such view: v1 stmt 18 ok -stmt 58 err 1 -1 no such table: main.v1 +stmt 58 err 1 -1 119 no such table: main.v1 ==== trigger1-2.1 CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN SELECT * FROM; -- Syntax error END; ---- -stmt 0 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 47 no such table: main.t1 ==== trigger1-2.2 CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN @@ -195,21 +195,21 @@ stmt 0 err 1 -1 no such table: main.t1 SELECT * FROM; -- Syntax error END; ---- -stmt 0 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 47 no such table: main.t1 ==== trigger1-3.2 INSERT INTO t1 VALUES(1,2); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 34 err 1 -1 no such table: t2 +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 58 no such table: t2 ==== trigger1-3.4 INSERT INTO t1 VALUES(1,2); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 34 err 1 -1 no such table: t2 +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 58 no such table: t2 ==== trigger1-3.5 CREATE TEMP TABLE t2(x,y); @@ -217,8 +217,8 @@ stmt 34 err 1 -1 no such table: t2 SELECT * FROM t2; ---- stmt 0 ok -stmt 33 err 1 -1 no such table: t1 -stmt 67 err 1 -1 no such table: t2 +stmt 33 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 91 no such table: t2 ==== trigger1-3.6.1 DROP TRIGGER r1; @@ -228,10 +228,10 @@ stmt 67 err 1 -1 no such table: t2 INSERT INTO t1 VALUES(1,2); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such trigger: r1 -stmt 23 err 1 -1 no such table: t1 -stmt 156 err 1 -1 no such table: t1 -stmt 190 err 1 -1 no such table: t2 +stmt 0 err 1 -1 23 no such trigger: r1 +stmt 23 err 1 -1 77 no such table: t1 +stmt 156 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 214 no such table: t2 ==== trigger1-3.6.2 DROP TRIGGER r1; @@ -243,37 +243,37 @@ stmt 190 err 1 -1 no such table: t2 INSERT INTO t1 VALUES(1,2); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such trigger: r1 -stmt 23 err 1 -1 no such table: t1 -stmt 45 err 1 -1 no such table: t2 -stmt 67 err 1 -1 no such table: t1 -stmt 176 err 1 -1 no such table: t1 -stmt 210 err 1 -1 no such table: t2 +stmt 0 err 1 -1 23 no such trigger: r1 +stmt 23 err 1 -1 45 no such table: t1 +stmt 45 err 1 -1 67 no such table: t2 +stmt 67 err 1 -1 121 no such table: t1 +stmt 176 err 1 -1 210 no such table: t1 +stmt 210 err 1 -1 234 no such table: t2 ==== trigger1-3.7 DROP TABLE t2; CREATE TABLE t2(x,y); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 21 no such table: t2 stmt 21 ok -stmt 49 err 1 -1 no such table: t2 +stmt 49 err 1 -1 73 no such table: t2 ==== trigger1-3.8 INSERT INTO t1 VALUES(3,4); SELECT * FROM t1 UNION ALL SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 34 err 1 -1 no such table: t2 +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 85 no such table: t2 ==== trigger1-3.8.dup1 INSERT INTO t1 VALUES(3,4); SELECT * FROM t1; SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 34 err 1 -1 no such table: t1 -stmt 58 err 1 -1 no such table: t2 +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 83 no such table: t2 ==== trigger1-4.1 CREATE TEMP TRIGGER r1 BEFORE INSERT ON t1 BEGIN @@ -282,9 +282,9 @@ stmt 58 err 1 -1 no such table: t2 INSERT INTO t1 VALUES(7,8); SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 110 err 1 -1 no such table: t1 -stmt 144 err 1 -1 no such table: t2 +stmt 0 err 1 -1 55 no such table: t1 +stmt 110 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 168 no such table: t2 ==== trigger1-6.1 SELECT type, name FROM sqlite_master ---- @@ -296,54 +296,54 @@ stmt 0 ok END; SELECT type, name FROM sqlite_master; ---- -stmt 0 err 1 -1 no such table: main.t2 +stmt 0 err 1 -1 48 no such table: main.t2 stmt 112 ok ==== trigger1-6.3 DELETE FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 15 no such table: t2 ==== trigger1-6.4 SELECT * FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 17 no such table: t2 ==== trigger1-6.6 DROP TRIGGER t2; SELECT type, name FROM sqlite_master; ---- -stmt 0 err 1 -1 no such trigger: t2 +stmt 0 err 1 -1 21 no such trigger: t2 stmt 21 ok ==== trigger1-6.7 SELECT * FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 17 no such table: t2 ==== trigger1-8.1 CREATE TRIGGER 'trigger' AFTER INSERT ON t2 BEGIN SELECT 1; END; SELECT name FROM sqlite_master WHERE type='trigger'; ---- -stmt 0 err 1 -1 no such table: main.t2 +stmt 0 err 1 -1 54 no such table: main.t2 stmt 69 ok ==== trigger1-8.2 DROP TRIGGER 'trigger'; SELECT name FROM sqlite_master WHERE type='trigger'; ---- -stmt 0 err 1 -1 no such trigger: trigger +stmt 0 err 1 -1 28 no such trigger: trigger stmt 28 ok ==== trigger1-8.3 CREATE TRIGGER "trigger" AFTER INSERT ON t2 BEGIN SELECT 1; END; SELECT name FROM sqlite_master WHERE type='trigger'; ---- -stmt 0 err 1 -1 no such table: main.t2 +stmt 0 err 1 -1 54 no such table: main.t2 stmt 69 ok ==== trigger1-8.4 DROP TRIGGER "trigger"; SELECT name FROM sqlite_master WHERE type='trigger'; ---- -stmt 0 err 1 -1 no such trigger: trigger +stmt 0 err 1 -1 28 no such trigger: trigger stmt 28 ok ==== trigger1-9.1 @@ -357,16 +357,16 @@ stmt 28 ok ---- stmt 0 ok stmt 30 ok -stmt 68 err 1 -1 no such table: main.t3 -stmt 180 err 1 -1 no such table: t3 -stmt 216 err 1 -1 no such table: t4 +stmt 68 err 1 -1 120 no such table: main.t3 +stmt 180 err 1 -1 216 no such table: t3 +stmt 216 err 1 -1 293 no such table: t4 ==== trigger1-9.2 INSERT INTO t3 VALUES(1,3); SELECT * FROM t3 UNION ALL SELECT 99, 99 UNION ALL SELECT * FROM t4; ---- -stmt 0 err 1 -1 no such table: t3 -stmt 36 err 1 -1 no such table: t4 +stmt 0 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 113 no such table: t4 ==== trigger1-9.1.dup1 CREATE TABLE t3(a,b); @@ -379,20 +379,20 @@ stmt 36 err 1 -1 no such table: t4 ---- stmt 0 ok stmt 30 ok -stmt 68 err 1 -1 no such table: main.t3 -stmt 180 err 1 -1 no such table: t3 -stmt 216 err 1 -1 no such table: t3 +stmt 68 err 1 -1 120 no such table: main.t3 +stmt 180 err 1 -1 216 no such table: t3 +stmt 216 err 1 -1 242 no such table: t3 stmt 242 ok -stmt 257 err 1 -1 no such table: t4 +stmt 257 err 1 -1 275 no such table: t4 ==== trigger1-9.2.dup1 INSERT INTO t3 VALUES(1,3); SELECT * FROM t3; SELECT 99, 99; SELECT * FROM t4; ---- -stmt 0 err 1 -1 no such table: t3 -stmt 36 err 1 -1 no such table: t3 +stmt 0 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 62 no such table: t3 stmt 62 ok -stmt 77 err 1 -1 no such table: t4 +stmt 77 err 1 -1 95 no such table: t4 ==== trigger1-10.1 CREATE TABLE main.t4(a, b, c); @@ -402,7 +402,7 @@ stmt 77 err 1 -1 no such table: t4 ---- stmt 0 ok stmt 37 ok -stmt 74 err 1 94 unknown database aux +stmt 74 err 1 94 101 unknown database aux stmt 110 ok ==== trigger1-10.2 @@ -416,23 +416,23 @@ stmt 110 ok INSERT INTO insert_log VALUES('aux', new.a, new.b, new.c); END; ---- -stmt 0 err 1 -1 no such table: main.t4 -stmt 142 err 1 -1 no such table: temp.t4 -stmt 284 err 1 -1 no such table: aux.t4 +stmt 0 err 1 -1 62 no such table: main.t4 +stmt 142 err 1 -1 204 no such table: temp.t4 +stmt 284 err 1 -1 345 no such table: aux.t4 ==== trigger1-10.3 INSERT INTO main.t4 VALUES(1, 2, 3); INSERT INTO temp.t4 VALUES(4, 5, 6); INSERT INTO aux.t4 VALUES(7, 8, 9); ---- -stmt 0 err 1 -1 no such table: main.t4 -stmt 43 err 1 -1 no such table: temp.t4 -stmt 86 err 1 -1 no such table: aux.t4 +stmt 0 err 1 -1 43 no such table: main.t4 +stmt 43 err 1 -1 86 no such table: temp.t4 +stmt 86 err 1 -1 129 no such table: aux.t4 ==== trigger1-10.4 SELECT * FROM insert_log; ---- -stmt 0 err 1 -1 no such table: insert_log +stmt 0 err 1 -1 32 no such table: insert_log ==== trigger1-10.5 BEGIN; @@ -442,15 +442,15 @@ stmt 0 err 1 -1 no such table: insert_log ROLLBACK; ---- stmt 0 ok -stmt 13 err 1 -1 no such table: main.t4 -stmt 56 err 1 -1 no such table: temp.t4 -stmt 99 err 1 -1 no such table: aux.t4 +stmt 13 err 1 -1 56 no such table: main.t4 +stmt 56 err 1 -1 99 no such table: temp.t4 +stmt 99 err 1 -1 142 no such table: aux.t4 stmt 142 ok ==== trigger1-10.6 SELECT * FROM insert_log; ---- -stmt 0 err 1 -1 no such table: insert_log +stmt 0 err 1 -1 32 no such table: insert_log ==== trigger1-10.7 DELETE FROM insert_log; @@ -458,79 +458,79 @@ stmt 0 err 1 -1 no such table: insert_log INSERT INTO temp.t4 VALUES(14, 15, 16); INSERT INTO aux.t4 VALUES(17, 18, 19); ---- -stmt 0 err 1 -1 no such table: insert_log -stmt 30 err 1 -1 no such table: main.t4 -stmt 76 err 1 -1 no such table: temp.t4 -stmt 122 err 1 -1 no such table: aux.t4 +stmt 0 err 1 -1 30 no such table: insert_log +stmt 30 err 1 -1 76 no such table: main.t4 +stmt 76 err 1 -1 122 no such table: temp.t4 +stmt 122 err 1 -1 168 no such table: aux.t4 ==== trigger1-10.8 SELECT * FROM insert_log; ---- -stmt 0 err 1 -1 no such table: insert_log +stmt 0 err 1 -1 32 no such table: insert_log ==== trigger1-10.10 INSERT INTO main.t4 VALUES(21, 22, 23); INSERT INTO temp.t4 VALUES(24, 25, 26); INSERT INTO aux.t4 VALUES(27, 28, 29); ---- -stmt 0 err 1 -1 no such table: main.t4 -stmt 46 err 1 -1 no such table: temp.t4 -stmt 92 err 1 -1 no such table: aux.t4 +stmt 0 err 1 -1 46 no such table: main.t4 +stmt 46 err 1 -1 92 no such table: temp.t4 +stmt 92 err 1 -1 138 no such table: aux.t4 ==== trigger1-10.11 SELECT * FROM insert_log; ---- -stmt 0 err 1 -1 no such table: insert_log +stmt 0 err 1 -1 32 no such table: insert_log ==== trigger1-11.1 SELECT raise(abort,'message'); ---- -stmt 0 err 1 -1 RAISE() may only be used within a trigger-program +stmt 0 err 1 -1 30 RAISE() may only be used within a trigger-program ==== trigger1-15.2 INSERT INTO tA VALUES('abc', 2, 3) ---- -stmt 0 err 1 -1 no such table: tA +stmt 0 err 1 -1 36 no such table: tA ==== trigger1-16.2 CREATE TRIGGER main.t16err2 AFTER INSERT ON tA BEGIN UPDATE main.t16 SET rowid=rowid+1; END; ---- -stmt 0 err 1 -1 no such table: main.tA +stmt 0 err 1 -1 57 no such table: main.tA ==== trigger1-16.3 CREATE TRIGGER main.t16err3 AFTER INSERT ON tA BEGIN DELETE FROM main.t16; END; ---- -stmt 0 err 1 -1 no such table: main.tA +stmt 0 err 1 -1 57 no such table: main.tA ==== trigger1-16.4 CREATE TRIGGER main.t16err4 AFTER INSERT ON tA BEGIN UPDATE t16 NOT INDEXED SET rowid=rowid+1; END; ---- -stmt 0 err 1 -1 no such table: main.tA +stmt 0 err 1 -1 57 no such table: main.tA ==== trigger1-16.5 CREATE TRIGGER main.t16err5 AFTER INSERT ON tA BEGIN UPDATE t16 INDEXED BY t16a SET rowid=rowid+1 WHERE a=1; END; ---- -stmt 0 err 1 -1 no such table: main.tA +stmt 0 err 1 -1 57 no such table: main.tA ==== trigger1-16.6 CREATE TRIGGER main.t16err6 AFTER INSERT ON tA BEGIN DELETE FROM t16 NOT INDEXED WHERE a=123; END; ---- -stmt 0 err 1 -1 no such table: main.tA +stmt 0 err 1 -1 57 no such table: main.tA ==== trigger1-16.7 CREATE TRIGGER main.t16err7 AFTER INSERT ON tA BEGIN DELETE FROM t16 INDEXED BY t16a WHERE a=123; END; ---- -stmt 0 err 1 -1 no such table: main.tA +stmt 0 err 1 -1 57 no such table: main.tA ==== trigger1-17.0 CREATE TABLE t17a(ii INT); @@ -546,9 +546,9 @@ stmt 0 err 1 -1 no such table: main.tA ---- stmt 0 ok stmt 29 ok -stmt 75 err 1 -1 no such table: main.t17a -stmt 175 err 1 -1 no such table: main.t17b -stmt 262 err 1 -1 no such table: t17a +stmt 75 err 1 -1 127 no such table: main.t17a +stmt 175 err 1 -1 227 no such table: main.t17b +stmt 262 err 1 -1 298 no such table: t17a stmt 298 ok ==== trigger1-18.0 @@ -561,10 +561,10 @@ stmt 298 ok SELECT * FROM t18; ---- stmt 0 ok -stmt 39 err 1 -1 no such table: t18 -stmt 79 err 1 -1 no such table: main.t18 -stmt 177 err 1 -1 no such table: t18 -stmt 209 err 1 -1 no such table: t18 +stmt 39 err 1 -1 79 no such table: t18 +stmt 79 err 1 -1 129 no such table: main.t18 +stmt 177 err 1 -1 209 no such table: t18 +stmt 209 err 1 -1 230 no such table: t18 ==== trigger1-18.1 DELETE FROM t18; @@ -572,10 +572,10 @@ stmt 209 err 1 -1 no such table: t18 UPDATE t18 SET c=b, b=b+1 WHERE a=1; SELECT * FROM t18; ---- -stmt 0 err 1 -1 no such table: t18 -stmt 19 err 1 -1 no such table: t18 -stmt 59 err 1 -1 no such table: t18 -stmt 98 err 1 -1 no such table: t18 +stmt 0 err 1 -1 19 no such table: t18 +stmt 19 err 1 -1 59 no such table: t18 +stmt 59 err 1 -1 98 no such table: t18 +stmt 98 err 1 -1 119 no such table: t18 ==== trigger1-19.0 CREATE TABLE t19(a INT PRIMARY KEY, b, c)WITHOUT ROWID; @@ -585,10 +585,10 @@ stmt 98 err 1 -1 no such table: t18 SELECT * FROM t19; ---- stmt 0 ok -stmt 58 err 1 -1 no such table: t19 -stmt 98 err 1 -1 no such table: main.t19 -stmt 167 err 1 -1 no such table: t19 -stmt 199 err 1 -1 no such table: t19 +stmt 58 err 1 -1 98 no such table: t19 +stmt 98 err 1 -1 148 no such table: main.t19 +stmt 167 err 1 -1 199 no such table: t19 +stmt 199 err 1 -1 220 no such table: t19 ==== trigger1-19.1 DELETE FROM t19; @@ -596,10 +596,10 @@ stmt 199 err 1 -1 no such table: t19 UPDATE t19 SET c=CASE WHEN b=2 THEN b ELSE b+99 END WHERE a=1; SELECT * FROM t19; ---- -stmt 0 err 1 -1 no such table: t19 -stmt 19 err 1 -1 no such table: t19 -stmt 59 err 1 -1 no such table: t19 -stmt 124 err 1 -1 no such table: t19 +stmt 0 err 1 -1 19 no such table: t19 +stmt 19 err 1 -1 59 no such table: t19 +stmt 59 err 1 -1 124 no such table: t19 +stmt 124 err 1 -1 145 no such table: t19 ==== trigger1-20.1 CREATE TABLE t20_1(x); @@ -612,11 +612,11 @@ stmt 124 err 1 -1 no such table: t19 ---- stmt 0 ok stmt 25 ok -stmt 53 err 1 69 unknown database aux -stmt 82 err 1 98 unknown database aux -stmt 111 err 1 -1 no such table: t20_2 +stmt 53 err 1 69 79 unknown database aux +stmt 82 err 1 98 108 unknown database aux +stmt 111 err 1 -1 167 no such table: t20_2 stmt 196 ok -stmt 210 err 1 -1 no such trigger: r20_3 +stmt 210 err 1 -1 232 no such trigger: r20_3 ==== trigger1-21.1 PRAGMA recursive_triggers = true; @@ -631,11 +631,11 @@ stmt 210 err 1 -1 no such trigger: r20_3 ---- stmt 0 ok stmt 36 ok -stmt 71 err 1 -1 no such table: main.t0 -stmt 114 err 1 -1 no such table: main.t0 -stmt 187 err 1 -1 no such table: t0 -stmt 234 err 1 -1 no such table: t0 -stmt 274 err 1 -1 no such table: t0 +stmt 71 err 1 -1 114 no such table: main.t0 +stmt 114 err 1 -1 160 no such table: main.t0 +stmt 187 err 1 -1 234 no such table: t0 +stmt 234 err 1 -1 274 no such table: t0 +stmt 274 err 1 -1 294 no such table: t0 ==== trigger1-22.10 CREATE TABLE t1( @@ -659,10 +659,10 @@ stmt 274 err 1 -1 no such table: t0 SELECT a, CASE WHEN typeof(b)='text' THEN quote(b) ELSE '' END, '|' FROM t1; ---- stmt 0 ok -stmt 64 err 1 -1 no such table: main.t1 -stmt 301 err 1 -1 no such table: t1 -stmt 477 err 1 -1 no such table: t1 -stmt 522 err 1 -1 no such table: t1 +stmt 64 err 1 -1 108 no such table: main.t1 +stmt 301 err 1 -1 351 no such table: t1 +stmt 477 err 1 -1 522 no such table: t1 +stmt 522 err 1 -1 607 no such table: t1 ==== trigger1-23.1 CREATE TABLE t1(a INT); @@ -671,7 +671,7 @@ stmt 522 err 1 -1 no such table: t1 END; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: main.t1 +stmt 26 err 1 -1 71 no such table: main.t1 ==== trigger1-24.1 CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN @@ -680,10 +680,10 @@ stmt 26 err 1 -1 no such table: main.t1 END; INSERT INTO t1 VALUES(0),(1),(2),(4),(8),(65536); ---- -stmt 0 err 1 -1 no such table: main.t1 -stmt 174 err 1 -1 no such table: t1 +stmt 0 err 1 -1 45 no such table: main.t1 +stmt 174 err 1 -1 226 no such table: t1 ==== trigger1-24.2 INSERT INTO t1 VALUES(9876); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 31 no such table: t1 diff --git a/parser/testdata/upsert1.test b/parser/testdata/upsert1.test index 796cab6..ae43d48 100644 --- a/parser/testdata/upsert1.test +++ b/parser/testdata/upsert1.test @@ -7,10 +7,10 @@ SELECT * FROM t1; ---- stmt 0 ok -stmt 63 err 1 -1 no such table: main.t1 -stmt 100 err 1 -1 no such table: t1 -stmt 158 err 1 -1 no such table: t1 -stmt 224 err 1 -1 no such table: t1 +stmt 63 err 1 -1 100 no such table: main.t1 +stmt 100 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 224 no such table: t1 +stmt 224 err 1 -1 244 no such table: t1 ==== upsert1-101 DELETE FROM t1; @@ -18,10 +18,10 @@ stmt 224 err 1 -1 no such table: t1 INSERT INTO t1(a,b) VALUES(2,99) ON CONFLICT(a) DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 79 err 1 -1 no such table: t1 -stmt 141 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 161 no such table: t1 ==== upsert1-102 DELETE FROM t1; @@ -29,40 +29,40 @@ stmt 141 err 1 -1 no such table: t1 INSERT INTO t1(a,b) VALUES(99,4) ON CONFLICT(b) DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 79 err 1 -1 no such table: t1 -stmt 141 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 161 no such table: t1 ==== upsert1-110 INSERT INTO t1(a,b) VALUES(5,6) ON CONFLICT(x) DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 61 err 1 -1 no such table: t1 +stmt 0 err 1 -1 61 no such table: t1 +stmt 61 err 1 -1 81 no such table: t1 ==== upsert1-120 INSERT INTO t1(a,b) VALUES(5,6) ON CONFLICT(c) DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 61 err 1 -1 no such table: t1 +stmt 0 err 1 -1 61 no such table: t1 +stmt 61 err 1 -1 81 no such table: t1 ==== upsert1-130 INSERT INTO t1(a,b) VALUES(5,6) ON CONFLICT(b COLLATE nocase) DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 76 err 1 -1 no such table: t1 +stmt 0 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 96 no such table: t1 ==== upsert1-140 DELETE FROM t1; INSERT INTO t1(a,b) VALUES(5,6) ON CONFLICT(b COLLATE binary) DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 94 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 114 no such table: t1 ==== upsert1-200 DROP TABLE t1; @@ -72,26 +72,26 @@ stmt 94 err 1 -1 no such table: t1 INSERT INTO t1(a,b) VALUES(8,7),(9,6) ON CONFLICT(a+b) DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok -stmt 79 err 1 -1 no such table: main.t1 -stmt 118 err 1 -1 no such table: t1 -stmt 181 err 1 -1 no such table: t1 -stmt 250 err 1 -1 no such table: t1 +stmt 79 err 1 -1 118 no such table: main.t1 +stmt 118 err 1 -1 181 no such table: t1 +stmt 181 err 1 -1 250 no such table: t1 +stmt 250 err 1 -1 270 no such table: t1 ==== upsert1-201 INSERT INTO t1(a,b) VALUES(8,7),(9,6) ON CONFLICT(a) DO NOTHING; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 67 no such table: t1 ==== upsert1-210 DELETE FROM t1; INSERT INTO t1(a,b) VALUES(9,10) ON CONFLICT(a+(+b)) DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 85 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 105 no such table: t1 ==== upsert1-300 DROP INDEX t1x1; @@ -100,20 +100,20 @@ stmt 85 err 1 -1 no such table: t1 INSERT INTO t1(a,b) VALUES(1,2),(3,2) ON CONFLICT(b) DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such index: t1x1 -stmt 19 err 1 -1 no such table: t1 -stmt 37 err 1 -1 no such table: main.t1 -stmt 85 err 1 -1 no such table: t1 -stmt 152 err 1 -1 no such table: t1 +stmt 0 err 1 -1 19 no such index: t1x1 +stmt 19 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 85 no such table: main.t1 +stmt 85 err 1 -1 152 no such table: t1 +stmt 152 err 1 -1 172 no such table: t1 ==== upsert1-310 DELETE FROM t1; INSERT INTO t1(a,b) VALUES(1,2),(3,2) ON CONFLICT(b) WHERE b!=10 DO NOTHING; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 97 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 97 no such table: t1 +stmt 97 err 1 -1 117 no such table: t1 ==== upsert1-320 DELETE FROM t1; @@ -121,9 +121,9 @@ stmt 97 err 1 -1 no such table: t1 ON CONFLICT(b) WHERE b>10 DO NOTHING; SELECT *, 'x' FROM t1 ORDER BY b, a; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 119 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 119 no such table: t1 +stmt 119 err 1 -1 158 no such table: t1 ==== upsert1-400 DROP TABLE IF EXISTS t2; @@ -135,16 +135,16 @@ stmt 119 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 78 err 1 -1 no such table: t2 +stmt 78 err 1 -1 131 no such table: t2 stmt 131 ok -stmt 158 err 1 -1 no such table: t2 +stmt 158 err 1 -1 261 no such table: t2 ==== upsert1-410 PRAGMA count_changes=OFF; SELECT a, b FROM t2 ORDER BY a; ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t2 +stmt 28 err 1 -1 62 no such table: t2 ==== upsert1-500 DROP TABLE t1; @@ -153,10 +153,10 @@ stmt 28 err 1 -1 no such table: t2 ON CONFLICT(x) DO UPDATE SET y=max(t1.y,excluded.y) AND true; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok -stmt 73 err 1 -1 no such table: t1 -stmt 183 err 1 -1 no such table: t1 +stmt 73 err 1 -1 183 no such table: t1 +stmt 183 err 1 -1 203 no such table: t1 ==== upsert1-600 DROP TABLE t1; @@ -164,9 +164,9 @@ stmt 183 err 1 -1 no such table: t1 INSERT OR IGNORE INTO t1(a) VALUES('1') ON CONFLICT(a) DO NOTHING; PRAGMA integrity_check; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok -stmt 79 err 1 -1 no such table: t1 +stmt 79 err 1 -1 148 no such table: t1 stmt 148 ok ==== upsert1-610 @@ -174,8 +174,8 @@ stmt 148 ok INSERT OR IGNORE INTO t1(a) VALUES('1'),(1) ON CONFLICT(a) DO NOTHING; PRAGMA integrity_check; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 91 no such table: t1 stmt 91 ok ==== upsert1-700 @@ -188,13 +188,13 @@ stmt 91 ok ON CONFLICT(e) DO UPDATE SET c=excluded.c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok -stmt 87 err 1 -1 no such table: main.t1 -stmt 123 err 1 -1 no such table: main.t1 -stmt 159 err 1 -1 no such table: t1 -stmt 206 err 1 -1 no such table: t1 -stmt 301 err 1 -1 no such table: t1 +stmt 87 err 1 -1 123 no such table: main.t1 +stmt 123 err 1 -1 159 no such table: main.t1 +stmt 159 err 1 -1 206 no such table: t1 +stmt 206 err 1 -1 301 no such table: t1 +stmt 301 err 1 -1 321 no such table: t1 ==== upsert1-710 DELETE FROM t1; @@ -203,10 +203,10 @@ stmt 301 err 1 -1 no such table: t1 ON CONFLICT(a) DO UPDATE SET c=excluded.c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 65 err 1 -1 no such table: t1 -stmt 160 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 180 no such table: t1 ==== upsert1-720 DELETE FROM t1; @@ -215,10 +215,10 @@ stmt 160 err 1 -1 no such table: t1 ON CONFLICT(b) DO UPDATE SET c=excluded.c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 65 err 1 -1 no such table: t1 -stmt 160 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 180 no such table: t1 ==== upsert1-730 DROP TABLE t1; @@ -231,14 +231,14 @@ stmt 160 err 1 -1 no such table: t1 ON CONFLICT(e) DO UPDATE SET c=excluded.c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok -stmt 71 err 1 -1 no such table: main.t1 -stmt 107 err 1 -1 no such table: main.t1 -stmt 143 err 1 -1 no such table: main.t1 -stmt 179 err 1 -1 no such table: t1 -stmt 226 err 1 -1 no such table: t1 -stmt 321 err 1 -1 no such table: t1 +stmt 71 err 1 -1 107 no such table: main.t1 +stmt 107 err 1 -1 143 no such table: main.t1 +stmt 143 err 1 -1 179 no such table: main.t1 +stmt 179 err 1 -1 226 no such table: t1 +stmt 226 err 1 -1 321 no such table: t1 +stmt 321 err 1 -1 341 no such table: t1 ==== upsert1-740 DELETE FROM t1; @@ -247,10 +247,10 @@ stmt 321 err 1 -1 no such table: t1 ON CONFLICT(a) DO UPDATE SET c=excluded.c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 65 err 1 -1 no such table: t1 -stmt 160 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 180 no such table: t1 ==== upsert1-750 DELETE FROM t1; @@ -259,10 +259,10 @@ stmt 160 err 1 -1 no such table: t1 ON CONFLICT(b) DO UPDATE SET c=excluded.c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 65 err 1 -1 no such table: t1 -stmt 160 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 180 no such table: t1 ==== upsert1-760 DROP TABLE t1; @@ -275,14 +275,14 @@ stmt 160 err 1 -1 no such table: t1 ON CONFLICT(e) DO UPDATE SET c=excluded.c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok -stmt 97 err 1 -1 no such table: main.t1 -stmt 133 err 1 -1 no such table: main.t1 -stmt 169 err 1 -1 no such table: main.t1 -stmt 205 err 1 -1 no such table: t1 -stmt 252 err 1 -1 no such table: t1 -stmt 347 err 1 -1 no such table: t1 +stmt 97 err 1 -1 133 no such table: main.t1 +stmt 133 err 1 -1 169 no such table: main.t1 +stmt 169 err 1 -1 205 no such table: main.t1 +stmt 205 err 1 -1 252 no such table: t1 +stmt 252 err 1 -1 347 no such table: t1 +stmt 347 err 1 -1 367 no such table: t1 ==== upsert1-770 DELETE FROM t1; @@ -291,10 +291,10 @@ stmt 347 err 1 -1 no such table: t1 ON CONFLICT(a) DO UPDATE SET c=excluded.c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 65 err 1 -1 no such table: t1 -stmt 160 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 180 no such table: t1 ==== upsert1-780 DELETE FROM t1; @@ -303,10 +303,10 @@ stmt 160 err 1 -1 no such table: t1 ON CONFLICT(b) DO UPDATE SET c=excluded.c; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t1 -stmt 65 err 1 -1 no such table: t1 -stmt 160 err 1 -1 no such table: t1 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 180 no such table: t1 ==== upsert1-800 DROP TABLE IF EXISTS t0; @@ -319,9 +319,9 @@ stmt 160 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 66 err 1 -1 no such table: main.t0 -stmt 114 err 1 -1 no such table: t0 -stmt 163 err 1 -1 no such table: t0 +stmt 66 err 1 -1 114 no such table: main.t0 +stmt 114 err 1 -1 163 no such table: t0 +stmt 163 err 1 -1 241 no such table: t0 stmt 241 ok stmt 267 ok ==== upsert1-900 @@ -332,12 +332,12 @@ stmt 267 ok END; ---- stmt 0 ok -stmt 33 err 1 -1 no such table: main.t1 +stmt 33 err 1 -1 85 no such table: main.t1 ==== upsert1-910 INSERT INTO t1 VALUES(3) ON CONFLICT(x) DO NOTHING; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== upsert1-1000 CREATE TABLE t0(c0 PRIMARY KEY, c1, c2 UNIQUE) WITHOUT ROWID; @@ -345,7 +345,7 @@ stmt 0 err 1 -1 no such table: t1 ON CONFLICT(c2) DO UPDATE SET c1 = c0; ---- stmt 0 ok -stmt 64 err 1 -1 no such table: t0 +stmt 64 err 1 -1 155 no such table: t0 ==== upsert1-1100 CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT REPLACE, b UNIQUE); @@ -354,21 +354,21 @@ stmt 64 err 1 -1 no such table: t0 SELECT * FROM t1; ---- stmt 0 ok -stmt 72 err 1 -1 no such table: t1 -stmt 104 err 1 -1 no such table: t1 -stmt 162 err 1 -1 no such table: t1 +stmt 72 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 182 no such table: t1 ==== upsert1-1200 CREATE TABLE t1(a INT, b INT); CREATE UNIQUE INDEX t1x ON t1(b+3); ---- stmt 0 ok -stmt 33 err 1 -1 no such table: main.t1 +stmt 33 err 1 -1 71 no such table: main.t1 ==== upsert1-1210 INSERT INTO t1(a,b) VALUES(1,2) ON CONFLICT(b+?1) DO NOTHING; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 64 no such table: t1 ==== upsert1-1300 CREATE TABLE t1(x INT, y TEXT); @@ -389,7 +389,7 @@ stmt 0 err 1 -1 no such table: t1 ON CONFLICT (x) DO UPDATE SET y = excluded.y; ---- stmt 0 ok -stmt 34 err 1 -1 no such table: t1 +stmt 34 err 1 -1 190 no such table: t1 stmt 190 ok -stmt 231 err 1 -1 no such table: main.t2 -stmt 506 err 1 -1 no such table: t2 +stmt 231 err 1 -1 277 no such table: main.t2 +stmt 506 err 1 -1 612 no such table: t2 diff --git a/parser/testdata/upsert2.test b/parser/testdata/upsert2.test index 073c7e7..51a15bd 100644 --- a/parser/testdata/upsert2.test +++ b/parser/testdata/upsert2.test @@ -7,9 +7,9 @@ SELECT *, 'x' FROM t1 ORDER BY a; ---- stmt 0 ok -stmt 62 err 1 -1 no such table: t1 -stmt 103 err 1 -1 no such table: t1 -stmt 226 err 1 -1 no such table: t1 +stmt 62 err 1 -1 103 no such table: t1 +stmt 103 err 1 -1 226 no such table: t1 +stmt 226 err 1 -1 262 no such table: t1 ==== upsert2-110 DROP TABLE t1; @@ -19,11 +19,11 @@ stmt 226 err 1 -1 no such table: t1 ON CONFLICT(a) DO UPDATE SET b=excluded.b, c=c+1 WHERE t1.b1 ORDER BY b LIMIT 2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 42 err 1 -1 no such table: t1 -stmt 82 err 1 -1 no such table: t1 +stmt 0 err 1 -1 42 no such table: t1 +stmt 42 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 176 no such table: t1 ==== 13.1 DROP TABLE IF EXISTS t1; @@ -540,43 +540,43 @@ stmt 82 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 60 err 1 -1 no such table: t1 -stmt 91 err 1 -1 no such table: t1 +stmt 60 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 122 no such table: t1 ==== 13.2.1 SELECT a, rank() OVER(ORDER BY b) FROM t1; SELECT a, rank() OVER(ORDER BY b DESC) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 45 err 1 -1 no such table: t1 +stmt 0 err 1 -1 45 no such table: t1 +stmt 45 err 1 -1 95 no such table: t1 ==== 13.2.2 SELECT a, rank() OVER(ORDER BY b) FROM t1 UNION ALL SELECT a, rank() OVER(ORDER BY b DESC) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 108 no such table: t1 ==== 13.3 SELECT a, rank() OVER(ORDER BY b) FROM t1 UNION SELECT a, rank() OVER(ORDER BY b DESC) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 105 no such table: t1 ==== 13.4 SELECT a, rank() OVER(ORDER BY b) FROM t1 EXCEPT SELECT a, rank() OVER(ORDER BY b DESC) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 106 no such table: t1 ==== 13.5 SELECT a, rank() OVER(ORDER BY b) FROM t1 INTERSECT SELECT a, rank() OVER(ORDER BY b DESC) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 109 no such table: t1 ==== 14.0 SELECT * FROM( @@ -597,10 +597,10 @@ stmt 0 ok ); ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t1 +stmt 22 err 1 -1 55 no such table: t1 stmt 55 ok -stmt 77 err 1 -1 no such table: t2 -stmt 106 err 1 -1 no such table: t2 +stmt 77 err 1 -1 106 no such table: t2 +stmt 106 err 1 -1 219 no such table: t2 ==== 15.0 WITH t(id, parent) AS ( @@ -628,7 +628,7 @@ stmt 106 err 1 -1 no such table: t2 SELECT * FROM q; ---- -stmt 0 err 1 -1 cannot use window functions in recursive queries +stmt 0 err 1 -1 444 cannot use window functions in recursive queries ==== 15.1 DROP TABLE IF EXISTS t1; @@ -647,10 +647,10 @@ stmt 0 err 1 -1 cannot use window functions in recursive queries stmt 0 ok stmt 27 ok stmt 54 ok -stmt 76 err 1 -1 no such table: t1 +stmt 76 err 1 -1 120 no such table: t1 stmt 120 ok -stmt 145 err 1 -1 no such table: t2 -stmt 208 err 1 -1 no such table: t1 +stmt 145 err 1 -1 208 no such table: t2 +stmt 208 err 1 -1 396 no such table: t1 ==== 15.2 SELECT( @@ -669,25 +669,25 @@ stmt 0 ok (3, 100, 2); ---- stmt 0 ok -stmt 24 err 1 -1 no such table: t7 +stmt 24 err 1 -1 116 no such table: t7 ==== 16.1 SELECT rowid, sum(a) OVER (PARTITION BY b IN (SELECT rowid FROM t7)) FROM t7; ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 80 no such table: t7 ==== 16.2 SELECT rowid, sum(a) OVER w1 FROM t7 WINDOW w1 AS (PARTITION BY b IN (SELECT rowid FROM t7)); ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 99 no such table: t7 ==== 17.0 CREATE TABLE t8(a); INSERT INTO t8 VALUES(1), (2), (3); ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t8 +stmt 22 err 1 -1 60 no such table: t8 ==== 17.1 SELECT +sum(0) OVER () ORDER BY +sum(0) OVER (); @@ -697,14 +697,14 @@ stmt 0 ok select +sum(a) OVER () FROM t8 ORDER BY +sum(a) OVER () DESC; ---- -stmt 0 err 1 -1 no such table: t8 +stmt 0 err 1 -1 64 no such table: t8 ==== 17.3 SELECT 10+sum(a) OVER (ORDER BY a) FROM t8 ORDER BY 10+sum(a) OVER (ORDER BY a) DESC; ---- -stmt 0 err 1 -1 no such table: t8 +stmt 0 err 1 -1 94 no such table: t8 ==== 18.0 DROP TABLE IF EXISTS t1; @@ -718,25 +718,25 @@ stmt 0 err 1 -1 no such table: t8 ---- stmt 0 ok stmt 27 ok -stmt 96 err 1 -1 no such table: t1 -stmt 144 err 1 -1 no such table: t1 -stmt 192 err 1 -1 no such table: t1 -stmt 240 err 1 -1 no such table: t1 -stmt 288 err 1 -1 no such table: t1 -stmt 336 err 1 -1 no such table: t1 +stmt 96 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 240 no such table: t1 +stmt 240 err 1 -1 288 no such table: t1 +stmt 288 err 1 -1 336 no such table: t1 +stmt 336 err 1 -1 384 no such table: t1 ==== 18.3.1 SELECT string_agg(c, '.') OVER (PARTITION BY b ORDER BY c) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 72 no such table: t1 ==== 18.3.2 SELECT group_concat(c, '.') OVER (win1 ORDER BY c) FROM t1 WINDOW win1 AS (PARTITION BY b) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 98 no such table: t1 ==== 18.3.3 SELECT string_agg(c, '.') OVER win2 @@ -744,7 +744,7 @@ stmt 0 err 1 -1 no such table: t1 WINDOW win1 AS (PARTITION BY b), win2 AS (win1 ORDER BY c) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 119 no such table: t1 ==== 18.3.4 SELECT group_concat(c, '.') OVER (win2) @@ -752,7 +752,7 @@ stmt 0 err 1 -1 no such table: t1 WINDOW win1 AS (PARTITION BY b), win2 AS (win1 ORDER BY c) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 123 no such table: t1 ==== 18.3.5 SELECT string_agg(c, '.') OVER win5 @@ -763,7 +763,7 @@ stmt 0 err 1 -1 no such table: t1 win4 AS (win3), win5 AS (win4 ORDER BY c) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 194 no such table: t1 ==== 19.0 CREATE TABLE t1(a, b); @@ -772,40 +772,40 @@ stmt 0 err 1 -1 no such table: t1 ('a', 6), ('b', 7), ('c', 8), ('d', 9), ('e', 10); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 +stmt 25 err 1 -1 148 no such table: t1 ==== 19.1 SELECT a, sum(b) OVER (ORDER BY a) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 46 no such table: t1 ==== 19.2.1 SELECT a, sum(b) OVER ( ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 19.2.2 SELECT a, sum(b) OVER ( ORDER BY a DESC RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1 ORDER BY a ASC; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 116 no such table: t1 ==== 19.3.1 SELECT a, sum(b) OVER ( ORDER BY a RANGE BETWEEN 2 PRECEDING AND 1 FOLLOWING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 19.3.2 SELECT a, sum(b) OVER ( ORDER BY a DESC RANGE BETWEEN 1 PRECEDING AND 2 FOLLOWING ) FROM t1 ORDER BY a ASC; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 116 no such table: t1 ==== 20.0 CREATE TABLE t1(a, b); @@ -815,40 +815,40 @@ stmt 0 err 1 -1 no such table: t1 ('a', 6), ('b', 7), ('c', 8), ('d', 9), ('e', 10); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 +stmt 25 err 1 -1 179 no such table: t1 ==== 20.1 SELECT a, sum(b) OVER (ORDER BY a) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 46 no such table: t1 ==== 20.2.1 SELECT a, sum(b) OVER ( ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 20.2.2 SELECT a, sum(b) OVER ( ORDER BY a DESC RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1 ORDER BY a ASC; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 116 no such table: t1 ==== 20.3.1 SELECT a, sum(b) OVER ( ORDER BY a RANGE BETWEEN 2 PRECEDING AND 1 FOLLOWING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 20.3.2 SELECT a, sum(b) OVER ( ORDER BY a DESC RANGE BETWEEN 1 PRECEDING AND 2 FOLLOWING ) FROM t1 ORDER BY a ASC; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 116 no such table: t1 ==== 21.0 CREATE TABLE keyword_tab( @@ -864,14 +864,14 @@ stmt 0 ok partition, preceding, range, ties, unbounded, window FROM keyword_tab ---- -stmt 0 err 1 -1 no such table: keyword_tab +stmt 0 err 1 -1 153 no such table: keyword_tab ==== 23.0 CREATE TABLE t5(a, b, c); CREATE INDEX t5ab ON t5(a, b); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: main.t5 +stmt 28 err 1 -1 61 no such table: main.t5 ==== 24.1 SELECT sum(44) OVER () @@ -895,9 +895,9 @@ stmt 0 ok stmt 0 ok stmt 49 ok stmt 98 ok -stmt 147 err 1 -1 no such table: t1 -stmt 187 err 1 -1 no such table: t2 -stmt 226 err 1 -1 no such table: t3 +stmt 147 err 1 -1 187 no such table: t1 +stmt 187 err 1 -1 226 no such table: t2 +stmt 226 err 1 -1 267 no such table: t3 ==== 25.1 SELECT t1.* FROM t1, t2 WHERE @@ -905,7 +905,7 @@ stmt 226 err 1 -1 no such table: t3 SELECT t1_id + row_number() OVER ( ORDER BY t1_id ) FROM t3 ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 139 no such table: t1 ==== 25.2 SELECT t1.* FROM t1, t2 WHERE @@ -913,7 +913,7 @@ stmt 0 err 1 -1 no such table: t1 SELECT row_number() OVER ( ORDER BY t1_id ) FROM t3 ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 139 no such table: t1 ==== 26.0 CREATE TABLE t1(x); @@ -925,7 +925,7 @@ stmt 22 ok SELECT ( SELECT row_number() OVER () FROM ( SELECT c FROM t1 ) ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 76 no such table: t2 ==== 26.2 INSERT INTO t1 VALUES(1), (2), (3), (4); @@ -934,9 +934,9 @@ stmt 0 err 1 -1 no such table: t2 SELECT row_number() OVER () FROM ( SELECT c FROM t1 ) ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t1 -stmt 43 err 1 -1 no such table: t2 -stmt 86 err 1 -1 no such table: t2 +stmt 0 err 1 -1 43 no such table: t1 +stmt 43 err 1 -1 86 no such table: t2 +stmt 86 err 1 -1 177 no such table: t2 ==== 26.3 DELETE FROM t1; @@ -949,29 +949,29 @@ stmt 86 err 1 -1 no such table: t2 SELECT row_number() OVER () FROM ( SELECT 1 FROM t1 WHERE x=c ) ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t1 -stmt 18 err 1 -1 no such table: t2 -stmt 36 err 1 -1 no such table: t2 -stmt 80 err 1 -1 no such table: t1 -stmt 148 err 1 -1 no such table: t2 +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 36 no such table: t2 +stmt 36 err 1 -1 80 no such table: t2 +stmt 80 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 250 no such table: t2 ==== 27.0 CREATE TABLE t1(x); INSERT INTO t1 VALUES(NULL), (1), (2), (3), (4), (5); ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t1 +stmt 22 err 1 -1 78 no such table: t1 ==== 27.1 SELECT min(x) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 25 no such table: t1 ==== 27.2 SELECT min(x) OVER win FROM t1 WINDOW win AS (ORDER BY rowid ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 108 no such table: t1 ==== 28.1.1 CREATE TABLE t1(a INTEGER PRIMARY KEY, b CHAR(1), c CHAR(2), d ANY); @@ -979,14 +979,14 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES (13,'M', 'cc', NULL); ---- stmt 0 ok -stmt 71 err 1 -1 no such table: t1 -stmt 116 err 1 -1 no such table: t1 +stmt 71 err 1 -1 116 no such table: t1 +stmt 116 err 1 -1 162 no such table: t1 ==== 28.1.2 SELECT string_agg(b,'') OVER w1 FROM t1 WINDOW w1 AS (ORDER BY a RANGE BETWEEN 3 PRECEDING AND 1 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 115 no such table: t1 ==== 28.2.1 CREATE TABLE t2(a TEXT, b INTEGER); @@ -994,8 +994,8 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t2 VALUES('B', NULL); ---- stmt 0 ok -stmt 38 err 1 -1 no such table: t2 -stmt 74 err 1 -1 no such table: t2 +stmt 38 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 110 no such table: t2 ==== 28.2.1.dup1 DROP TABLE IF EXISTS t1; @@ -1007,7 +1007,7 @@ stmt 74 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 27 ok -stmt 98 err 1 -1 no such table: t1 +stmt 98 err 1 -1 201 no such table: t1 ==== 28.2.2 SELECT a, b, c, quote(d), group_concat(b,'') OVER w1, '|' FROM t1 @@ -1015,7 +1015,7 @@ stmt 98 err 1 -1 no such table: t1 (ORDER BY d DESC RANGE BETWEEN 7.0 PRECEDING AND 2.5 PRECEDING) ORDER BY c, d, a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 175 no such table: t1 ==== 29.1 DROP TABLE IF EXISTS t1; @@ -1037,7 +1037,7 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 98 err 1 -1 no such table: t1 +stmt 98 err 1 -1 456 no such table: t1 ==== 29.2 SELECT a, b, c, quote(d), group_concat(b,'') OVER w1, '|' FROM t1 @@ -1046,7 +1046,7 @@ stmt 98 err 1 -1 no such table: t1 RANGE BETWEEN 7.0 PRECEDING AND 2.5 PRECEDING) ORDER BY c, d, a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 195 no such table: t1 ==== 30.0 DROP TABLE IF EXISTS t1; @@ -1063,8 +1063,8 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 55 err 1 -1 no such table: t1 -stmt 95 err 1 -1 no such table: t1 +stmt 55 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 418 no such table: t1 ==== 31.1 CREATE TABLE t1(a, b); @@ -1078,23 +1078,23 @@ stmt 95 err 1 -1 no such table: t1 stmt 0 ok stmt 25 ok stmt 50 ok -stmt 75 err 1 -1 no such table: t1 -stmt 107 err 1 -1 no such table: t2 -stmt 138 err 1 -1 no such table: t3 +stmt 75 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 138 no such table: t2 +stmt 138 err 1 -1 169 no such table: t3 ==== 31.2 SELECT d IN (SELECT sum(c) OVER (ORDER BY e+c) FROM t3) FROM ( SELECT * FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 91 no such table: t2 ==== 31.3 SELECT d IN (SELECT sum(c) OVER (PARTITION BY d ORDER BY e+c) FROM t3) FROM ( SELECT * FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 31.3.dup1 SELECT d IN ( @@ -1105,7 +1105,7 @@ stmt 0 err 1 -1 no such table: t2 SELECT * FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 31.3.dup2 SELECT d IN ( @@ -1116,7 +1116,7 @@ stmt 0 err 1 -1 no such table: t2 SELECT * FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 32.10 CREATE VIEW a AS SELECT NULL INTERSECT SELECT NULL ORDER BY s() OVER R; @@ -1125,7 +1125,7 @@ stmt 0 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 76 ok -stmt 109 err 1 -1 no such table: a0 +stmt 109 err 1 -1 141 no such table: a0 ==== 33.1 CREATE TABLE t1(aa, bb); @@ -1135,16 +1135,16 @@ stmt 109 err 1 -1 no such table: a0 INSERT INTO t2 VALUES(1); ---- stmt 0 ok -stmt 27 err 1 -1 no such table: t1 -stmt 58 err 1 -1 no such table: t1 +stmt 27 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 89 no such table: t1 stmt 89 ok -stmt 111 err 1 -1 no such table: t2 +stmt 111 err 1 -1 139 no such table: t2 ==== 33.2 SELECT (SELECT DISTINCT sum(aa) OVER() FROM t1 ORDER BY 1), x FROM t2 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 87 no such table: t2 ==== 34.1 CREATE TABLE t1(a,b,c); @@ -1162,17 +1162,17 @@ stmt 0 ok ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 215 no such table: t1 ==== 35.0 SELECT * WINDOW f AS () ORDER BY name COLLATE nocase; ---- -stmt 0 err 1 -1 no tables specified +stmt 0 err 1 -1 56 no tables specified ==== 35.1 VALUES(1) INTERSECT SELECT * WINDOW f AS () ORDER BY x COLLATE nocase; ---- -stmt 0 err 1 -1 no tables specified +stmt 0 err 1 -1 73 no tables specified ==== 35.2 CREATE TABLE t1(x); @@ -1181,20 +1181,20 @@ stmt 0 err 1 -1 no tables specified SELECT sum(x) OVER f FROM t1 WINDOW f AS (ORDER BY x) ORDER BY 1; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t1 -stmt 60 err 1 -1 no such table: t1 +stmt 22 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 151 no such table: t1 ==== 35.3 VALUES(8) EXCEPT SELECT sum(x) OVER f FROM t1 WINDOW f AS (ORDER BY x) ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 88 no such table: t1 ==== 35.4 VALUES(1) UNION SELECT sum(x) OVER f FROM t1 WINDOW f AS (ORDER BY x) ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 87 no such table: t1 ==== 36.10 VALUES(count(*)OVER()); @@ -1223,16 +1223,16 @@ stmt 0 ok ---- stmt 0 ok stmt 44 ok -stmt 122 err 1 -1 no such table: v0 +stmt 122 err 1 -1 168 no such table: v0 ==== 37.20 DROP VIEW v0; CREATE VIEW v0(c) AS SELECT max((SELECT count(a)OVER(ORDER BY 1234))) FROM t0; SELECT c FROM v0 WHERE c BETWEEN -10 AND 20; ---- -stmt 0 err 1 -1 no such view: v0 +stmt 0 err 1 -1 16 no such view: v0 stmt 16 ok -stmt 97 err 1 -1 no such table: v0 +stmt 97 err 1 -1 144 no such table: v0 ==== 38.10 CREATE TABLE t0(c0); @@ -1243,19 +1243,19 @@ stmt 97 err 1 -1 no such table: v0 ---- stmt 0 ok stmt 23 ok -stmt 57 err 1 -1 no such table: t0 -stmt 89 err 1 -1 no such table: t1 -stmt 126 err 1 -1 no such table: t0 +stmt 57 err 1 -1 89 no such table: t0 +stmt 89 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 199 no such table: t0 ==== 38.20 SELECT COUNT(*), AVG(1) FILTER(WHERE t1.c1) FROM t0, t1; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 59 no such table: t0 ==== 38.30 SELECT COUNT(*) FROM t0, t1 WHERE (SELECT AVG(1) FILTER(WHERE t1.c1)); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 73 no such table: t0 ==== 39.1 CREATE TABLE t0(c0 UNIQUE); @@ -1270,12 +1270,12 @@ stmt 0 ok SELECT * FROM t0 WHERE(c0, 0) IN(SELECT FIRST_VALUE(0) OVER(), 0); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 69 no such table: t0 ==== 39.4 SELECT * FROM t0 WHERE (t0.c0, 1) IN(SELECT NTILE(1) OVER(), 0 FROM t0); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 75 no such table: t0 ==== 40.1 CREATE VIRTUAL TABLE t0 USING rtree(c0, c1, c2); @@ -1283,7 +1283,7 @@ stmt 0 err 1 -1 no such table: t0 WHERE ((0,0) IN (SELECT COUNT(*),LAG(5)OVER(PARTITION BY 0) FROM t0),0)<=(c1,0); ---- stmt 0 ok -stmt 53 err 1 -1 no such table: t0 +stmt 53 err 1 -1 160 no such table: t0 ==== 41.1 CREATE TABLE t1(a, b, c); @@ -1293,24 +1293,24 @@ stmt 53 err 1 -1 no such table: t0 INSERT INTO t1 VALUES('FF','Rb',574); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t1 -stmt 68 err 1 -1 no such table: t1 -stmt 108 err 1 -1 no such table: t1 -stmt 148 err 1 -1 no such table: t1 +stmt 28 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 188 no such table: t1 ==== 41.2 SELECT min(c) OVER ( ORDER BY a RANGE BETWEEN 5.2 PRECEDING AND 0.1 PRECEDING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 97 no such table: t1 ==== 41.2.dup1 SELECT min(c) OVER ( ORDER BY a RANGE BETWEEN 5.2 PRECEDING AND 0.1 PRECEDING ) << 100 FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 104 no such table: t1 ==== 41.3 SELECT @@ -1321,7 +1321,7 @@ stmt 0 err 1 -1 no such table: t1 PARTITION BY 6 ORDER BY a RANGE BETWEEN 5.2 PRECEDING AND 0.1 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 218 no such table: t1 ==== 42.1 CREATE TABLE t1(a, b, c); @@ -1329,28 +1329,28 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES(2, 2, 2); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t1 -stmt 62 err 1 -1 no such table: t1 +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 96 no such table: t1 ==== 42.2 SELECT * FROM t1 WHERE (0, 0) IN ( SELECT count(*), 0 FROM t1 ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 67 no such table: t1 ==== 42.3 SELECT * FROM t1 WHERE (2, 0) IN ( SELECT count(*), 0 FROM t1 ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 67 no such table: t1 ==== 42.3.dup1 SELECT count(*), max(a) OVER () FROM t1 GROUP BY c; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 54 no such table: t1 ==== 42.4 SELECT sum(a), max(b) OVER () FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 41 no such table: t1 ==== 42.5 CREATE TABLE t2(a, b); @@ -1362,34 +1362,34 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t2 VALUES('b', 6); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t2 -stmt 58 err 1 -1 no such table: t2 -stmt 91 err 1 -1 no such table: t2 -stmt 124 err 1 -1 no such table: t2 -stmt 157 err 1 -1 no such table: t2 -stmt 190 err 1 -1 no such table: t2 +stmt 25 err 1 -1 58 no such table: t2 +stmt 58 err 1 -1 91 no such table: t2 +stmt 91 err 1 -1 124 no such table: t2 +stmt 124 err 1 -1 157 no such table: t2 +stmt 157 err 1 -1 190 no such table: t2 +stmt 190 err 1 -1 223 no such table: t2 ==== 42.6 SELECT a, sum(b), sum( sum(b) ) OVER (ORDER BY a) FROM t2 GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 72 no such table: t2 ==== 42.7 SELECT sum(b), sum( sum(b) ) OVER (ORDER BY a) FROM t2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 58 no such table: t2 ==== 43.1.1 CREATE TABLE t1(x INTEGER PRIMARY KEY); INSERT INTO t1 VALUES (10); ---- stmt 0 ok -stmt 42 err 1 -1 no such table: t1 +stmt 42 err 1 -1 72 no such table: t1 ==== 43.1.2 SELECT count() OVER() AS m FROM t1 ORDER BY (SELECT m); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 58 no such table: t1 ==== 43.2.1 CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER); @@ -1401,37 +1401,37 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1(a, b) VALUES(6, -11); -- 24 ---- stmt 0 ok -stmt 53 err 1 -1 no such table: t1 -stmt 92 err 1 -1 no such table: t1 -stmt 137 err 1 -1 no such table: t1 -stmt 182 err 1 -1 no such table: t1 -stmt 227 err 1 -1 no such table: t1 -stmt 272 err 1 -1 no such table: t1 +stmt 53 err 1 -1 92 no such table: t1 +stmt 92 err 1 -1 137 no such table: t1 +stmt 137 err 1 -1 182 no such table: t1 +stmt 182 err 1 -1 227 no such table: t1 +stmt 227 err 1 -1 272 no such table: t1 +stmt 272 err 1 -1 317 no such table: t1 ==== 43.2.2 SELECT a, sum(b) OVER (ORDER BY a) AS abc FROM t1 ORDER BY 2 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 64 no such table: t1 ==== 43.2.3 SELECT a, sum(b) OVER (ORDER BY a) AS abc FROM t1 ORDER BY abc ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 66 no such table: t1 ==== 43.2.4 SELECT a, sum(b) OVER (ORDER BY a) AS abc FROM t1 ORDER BY abc+5 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 68 no such table: t1 ==== 43.2.5 SELECT a, sum(b) OVER (ORDER BY a) AS abc FROM t1 ORDER BY (SELECT abc) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 75 no such table: t1 ==== 43.2.6 SELECT a, 1+sum(b) OVER (ORDER BY a) AS abc FROM t1 ORDER BY (SELECT abc) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 77 no such table: t1 ==== 44.1 CREATE TABLE t0(c0); @@ -1446,7 +1446,7 @@ stmt 0 ok SELECT (0, 0) IN(SELECT MIN(c0), NTILE(0) OVER()) FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 61 no such table: t0 ==== 44.3.1 SELECT ntile(1) OVER (); @@ -1456,14 +1456,14 @@ stmt 0 ok SELECT (0, 0) IN(SELECT MIN(c0), NTILE(1) OVER()) FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 61 no such table: t0 ==== 44.4.2 INSERT INTO t0 VALUES(2), (1), (0); SELECT (0, 1) IN(SELECT MIN(c0), NTILE(1) OVER()) FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 -stmt 38 err 1 -1 no such table: t0 +stmt 0 err 1 -1 38 no such table: t0 +stmt 38 err 1 -1 99 no such table: t0 ==== 45.1 CREATE TABLE t0(x); @@ -1474,16 +1474,16 @@ stmt 38 err 1 -1 no such table: t0 ---- stmt 0 ok stmt 22 ok -stmt 44 err 1 -1 no such table: t1 -stmt 75 err 1 -1 no such table: t1 -stmt 106 err 1 -1 no such table: t0 +stmt 44 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 138 no such table: t0 ==== 45.2 SELECT * FROM ( SELECT sum (a) OVER() FROM t1 UNION ALL SELECT x FROM t0 ); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 86 no such table: t0 ==== 46.1 CREATE TABLE t1 (a); @@ -1492,25 +1492,25 @@ stmt 0 err 1 -1 no such table: t0 INSERT INTO t1 VALUES (10); ---- stmt 0 ok -stmt 23 err 1 -1 no such table: main.t1 -stmt 51 err 1 -1 no such table: t1 +stmt 23 err 1 -1 51 no such table: main.t1 +stmt 51 err 1 -1 82 no such table: t1 ==== 46.2 SELECT (SELECT sum(a) OVER(ORDER BY a)) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 51 no such table: t1 ==== 46.3 SELECT * FROM t1 WHERE (SELECT sum(a) OVER(ORDER BY a)); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 59 no such table: t1 ==== 46.4 SELECT * FROM t1 NATURAL JOIN t1 WHERE a=1 OR ((SELECT sum(a)OVER(ORDER BY a)) AND a<=10) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 101 no such table: t1 ==== 47.0 CREATE TABLE t1( @@ -1534,7 +1534,7 @@ stmt 0 ok WHERE k=1 OR (SELECT k FROM t2 WHERE (SELECT sum(a) OVER() FROM t1 GROUP BY 1)); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 48.0 CREATE TABLE t1(a); @@ -1545,23 +1545,23 @@ stmt 0 err 1 -1 no such table: t2 FROM (SELECT (SELECT sum(a) FROM t1) AS x FROM t1); ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t1 -stmt 50 err 1 -1 no such table: t1 -stmt 78 err 1 -1 no such table: t1 -stmt 106 err 1 -1 no such table: t1 +stmt 22 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 228 no such table: t1 ==== 48.1 SELECT (SELECT max(x)OVER(ORDER BY x) + min(x)OVER(ORDER BY x)) FROM (SELECT (SELECT sum(a) FROM t1 GROUP BY a) AS x FROM t1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 133 no such table: t1 ==== 49.1 CREATE TABLE t1 (a PRIMARY KEY); INSERT INTO t1 VALUES(1); ---- stmt 0 ok -stmt 35 err 1 -1 no such table: t1 +stmt 35 err 1 -1 63 no such table: t1 ==== 49.2 SELECT b AS c FROM ( @@ -1572,19 +1572,19 @@ stmt 35 err 1 -1 no such table: t1 ) WHERE c=1 OR c>=10; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 164 no such table: t1 ==== 50.0 CREATE TABLE t1 (a DOUBLE PRIMARY KEY); INSERT INTO t1 VALUES(10.0); ---- stmt 0 ok -stmt 42 err 1 -1 no such table: t1 +stmt 42 err 1 -1 73 no such table: t1 ==== 50.1 SELECT * FROM t1 WHERE a%1 OR (SELECT sum(a) OVER (ORDER BY a%2)) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 69 no such table: t1 ==== 50.2 SELECT * FROM ( @@ -1592,7 +1592,7 @@ stmt 0 err 1 -1 no such table: t1 ) WHERE a=1 OR ( (SELECT sum(a) OVER (ORDER BY a%4)) AND a<=10 ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 159 no such table: t1 ==== 50.3 SELECT a FROM ( @@ -1603,7 +1603,7 @@ stmt 0 err 1 -1 no such table: t1 ) WHERE a=1 OR a=10.0 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 212 no such table: t1 ==== 50.4 SELECT a FROM ( @@ -1614,12 +1614,12 @@ stmt 0 err 1 -1 no such table: t1 ) WHERE a=1 OR ((SELECT sum(a) OVER(ORDER BY a%8)) AND 10<=a) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 252 no such table: t1 ==== 50.5 SELECT * FROM (SELECT * FROM t1 NATURAL JOIN t1 WHERE a%1 OR ((SELECT sum(a)OVER(ORDER BY a)) AND a<=10)) NATURAL JOIN t1 WHERE a=1 OR ((SELECT sum((SELECT * FROM (SELECT * FROM (SELECT * FROM t1 NATURAL JOIN t1 WHERE a%1 OR ((SELECT sum(a)OVER(ORDER BY a)) AND a<=10)) NATURAL JOIN t1 WHERE a=1 OR ((SELECT sum((SELECT * FROM t1 NATURAL JOIN t1 WHERE a=1 OR ((SELECT sum(a)OVER(ORDER BY a)) AND a<=10)))OVER(ORDER BY a% 1 )) AND a<=10)) NATURAL JOIN t1 WHERE a=1 OR ((SELECT sum(a)OVER(ORDER BY a)) AND 10<=a)))OVER(ORDER BY a%5)) AND a<=10); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 544 no such table: t1 ==== 51.1 CREATE TABLE a(b, c); @@ -1628,7 +1628,7 @@ stmt 0 err 1 -1 no such table: t1 sum(b) OVER(PARTITION BY min(DISTINCT c), c ORDER BY b))); ---- stmt 0 ok -stmt 24 err 1 -1 no such table: a +stmt 24 err 1 -1 173 no such table: a ==== 52.1 CREATE TABLE t1(a, b, c); @@ -1638,10 +1638,10 @@ stmt 24 err 1 -1 no such table: a INSERT INTO t1 VALUES('FF','bb',938); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t1 -stmt 68 err 1 -1 no such table: t1 -stmt 108 err 1 -1 no such table: t1 -stmt 148 err 1 -1 no such table: t1 +stmt 28 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 188 no such table: t1 ==== 52.2 SELECT @@ -1655,7 +1655,7 @@ stmt 148 err 1 -1 no such table: t1 win2 AS (PARTITION BY 6 ORDER BY a RANGE BETWEEN 5 PRECEDING AND 0 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 263 no such table: t1 ==== 52.3 SELECT @@ -1669,7 +1669,7 @@ WINDOW win2 AS (PARTITION BY 6 COLLATE binary ORDER BY a RANGE BETWEEN 5 PRECEDING AND 0 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 251 no such table: t1 ==== 52.4 SELECT @@ -1683,7 +1683,7 @@ stmt 0 err 1 -1 no such table: t1 win2 AS (PARTITION BY 6 COLLATE binary ORDER BY a RANGE BETWEEN 5 PRECEDING AND 0 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 273 no such table: t1 ==== 53.0 CREATE TABLE a(c UNIQUE); @@ -1697,15 +1697,15 @@ stmt 0 err 1 -1 no such table: t1 WHERE a.c); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: a -stmt 68 err 1 -1 no such table: a +stmt 28 err 1 -1 68 no such table: a +stmt 68 err 1 -1 267 no such table: a ==== 54.1 CREATE TABLE t1(a VARCHAR(20), b FLOAT); INSERT INTO t1 VALUES('1',10.0); ---- stmt 0 ok -stmt 43 err 1 -1 no such table: t1 +stmt 43 err 1 -1 78 no such table: t1 ==== 54.2 SELECT * FROM ( @@ -1714,14 +1714,14 @@ stmt 43 err 1 -1 no such table: t1 SELECT b AS c FROM t1 ) WHERE c>10; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 112 no such table: t1 ==== 54.3 INSERT INTO t1 VALUES('2',5.0); INSERT INTO t1 VALUES('3',15.0); ---- -stmt 0 err 1 -1 no such table: t1 -stmt 34 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 69 no such table: t1 ==== 54.4 SELECT * FROM ( @@ -1730,7 +1730,7 @@ stmt 34 err 1 -1 no such table: t1 SELECT b AS c FROM t1 ) WHERE c>10; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 112 no such table: t1 ==== 55.1 CREATE TABLE a(b); @@ -1745,7 +1745,7 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY 1; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: a +stmt 22 err 1 -1 213 no such table: a ==== 56.1 CREATE TABLE t1(a, b INTEGER); @@ -1760,7 +1760,7 @@ stmt 33 ok SELECT min(c) OVER () FROM t2 ORDER BY nosuchcolumn; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 57.1 CREATE TABLE t4(a, b, c, d, e); @@ -1780,7 +1780,7 @@ stmt 0 ok ) ); ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 199 no such table: t4 ==== 57.1.dup1 CREATE TABLE t1(a, b, c); @@ -1792,8 +1792,8 @@ stmt 0 err 1 -1 no such table: t4 FROM t1; ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t1 -stmt 69 err 1 -1 no such table: t1 +stmt 28 err 1 -1 69 no such table: t1 +stmt 69 err 1 -1 153 no such table: t1 ==== 57.2.dup1 CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; @@ -1801,8 +1801,8 @@ stmt 69 err 1 -1 no such table: t1 SELECT DISTINCT v1, lead(v1) OVER() FROM v0 GROUP BY v1 ORDER BY 2; ---- stmt 0 ok -stmt 47 err 1 -1 no such table: v0 -stmt 81 err 1 -1 no such table: v0 +stmt 47 err 1 -1 81 no such table: v0 +stmt 81 err 1 -1 152 no such table: v0 ==== 57.3 DROP TABLE t1; @@ -1815,12 +1815,12 @@ stmt 81 err 1 -1 no such table: v0 ) FROM t3; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok -stmt 39 err 1 -1 no such table: t1 +stmt 39 err 1 -1 71 no such table: t1 stmt 71 ok -stmt 93 err 1 -1 no such table: t3 -stmt 134 err 1 -1 no such table: t3 +stmt 93 err 1 -1 134 no such table: t3 +stmt 134 err 1 -1 239 no such table: t3 ==== 58.1 CREATE TABLE a(a, b, c); @@ -1830,9 +1830,9 @@ stmt 134 err 1 -1 no such table: t3 sum(avg(678)) OVER (ORDER BY c) FROM a; ---- stmt 0 ok -stmt 27 err 1 -1 no such table: a -stmt 60 err 1 -1 no such table: a -stmt 93 err 1 -1 no such table: a +stmt 27 err 1 -1 60 no such table: a +stmt 60 err 1 -1 93 no such table: a +stmt 93 err 1 -1 186 no such table: a ==== 59.1 DROP TABLE IF EXISTS t1; @@ -1845,8 +1845,8 @@ stmt 93 err 1 -1 no such table: a ---- stmt 0 ok stmt 27 ok -stmt 69 err 1 -1 no such table: t1 -stmt 100 err 1 -1 no such table: t1 +stmt 69 err 1 -1 100 no such table: t1 +stmt 100 err 1 -1 199 no such table: t1 ==== 60.1 DROP TABLE IF EXISTS t1; @@ -1856,8 +1856,8 @@ stmt 100 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 70 err 1 -1 no such table: t1 -stmt 100 err 1 -1 no such table: t1 +stmt 70 err 1 -1 100 no such table: t1 +stmt 100 err 1 -1 172 no such table: t1 ==== 61.1 CREATE TABLE t1(a); @@ -1865,8 +1865,8 @@ INSERT INTO t1 VALUES(5),(NULL),('seventeen'); SELECT (SELECT max(x)OVER(ORDER BY x) % min(x)OVER(ORDER BY CASE x WHEN 889 THEN x WHEN x THEN x END)) FROM (SELECT (SELECT sum(CAST(a IN(SELECT (SELECT max(x)OVER(ORDER BY CASE x WHEN 889 THEN 299 WHEN 863 THEN 863 END)) FROM (SELECT (SELECT sum(CAST((SELECT (SELECT max(x)OVER(ORDER BY x) / min(x)OVER(ORDER BY CASE x WHEN 889 THEN 299 WHEN -true THEN 863 END)) FROM (SELECT (SELECT sum(CAST(a IN(SELECT (SELECT max(x) & sum ( a )OVER(ORDER BY CASE x WHEN -8 THEN 299 WHEN 863 THEN 863 END)) FROM (SELECT (SELECT sum(CAST(a AS )) FROM t1) AS x FROM t1)) AS t1 )) FROM t1) AS x FROM t1)) AS x )) FROM t1) AS x FROM t1)) AS real)) FROM t1) AS x FROM t1); ---- stmt 0 ok -stmt 20 err 1 -1 no such table: t1 -stmt 67 err 1 -1 no such table: t1 +stmt 20 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 722 no such table: t1 ==== window1-generated SELECT @@ -1875,7 +1875,7 @@ stmt 67 err 1 -1 no such table: t1 SELECT (SELECT sum(a) FROM t1 ) AS x FROM t1 ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 137 no such table: t1 ==== 61.3.0 CREATE TABLE t1(a); @@ -1891,7 +1891,7 @@ stmt 22 ok ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 116 no such table: t1 ==== 61.4.2 SELECT ( @@ -1900,7 +1900,7 @@ stmt 0 err 1 -1 no such table: t1 ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== 61.4.3 SELECT @@ -1908,7 +1908,7 @@ stmt 0 err 1 -1 no such table: t1 FROM t1 ORDER BY (SELECT sum(a) FROM t2) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== 61.4.4 SELECT @@ -1916,14 +1916,14 @@ stmt 0 err 1 -1 no such table: t1 FROM t1 ORDER BY (SELECT sum(y) FROM t2) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== 62.1 CREATE TABLE t1(a VARCHAR(20), b FLOAT); INSERT INTO t1 VALUES('1',10.0); ---- stmt 0 ok -stmt 43 err 1 -1 no such table: t1 +stmt 43 err 1 -1 78 no such table: t1 ==== 62.2 SELECT * FROM ( @@ -1932,14 +1932,14 @@ stmt 43 err 1 -1 no such table: t1 SELECT b AS c FROM t1 ) WHERE c>10; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 120 no such table: t1 ==== 62.3 INSERT INTO t1 VALUES('2',5.0); INSERT INTO t1 VALUES('3',15.0); ---- -stmt 0 err 1 -1 no such table: t1 -stmt 34 err 1 -1 no such table: t1 +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 69 no such table: t1 ==== 62.4 SELECT * FROM ( @@ -1948,7 +1948,7 @@ stmt 34 err 1 -1 no such table: t1 SELECT b AS c FROM t1 ) WHERE c>10; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 120 no such table: t1 ==== 63.1 CREATE TABLE t1(b, x); @@ -1966,7 +1966,7 @@ stmt 50 ok ) ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 116 no such table: t1 ==== 63.3 SELECT sum(b) over( @@ -1981,7 +1981,7 @@ stmt 0 err 1 -1 no such table: t1 ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 219 no such table: t1 ==== 64.1 CREATE TABLE t1(a INTEGER PRIMARY KEY, b); @@ -1991,10 +1991,10 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES(4, 'DEFG'); ---- stmt 0 ok -stmt 45 err 1 -1 no such table: t1 -stmt 81 err 1 -1 no such table: t1 -stmt 117 err 1 -1 no such table: t1 -stmt 153 err 1 -1 no such table: t1 +stmt 45 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 117 no such table: t1 +stmt 117 err 1 -1 153 no such table: t1 +stmt 153 err 1 -1 189 no such table: t1 ==== 64.2 SELECT rowid, max(b COLLATE nocase)||'' @@ -2002,7 +2002,7 @@ stmt 153 err 1 -1 no such table: t1 GROUP BY rowid ORDER BY max(b COLLATE nocase)||''; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 109 no such table: t1 ==== 64.3 SELECT count() OVER (), rowid, max(b COLLATE nocase)||'' @@ -2010,7 +2010,7 @@ stmt 0 err 1 -1 no such table: t1 GROUP BY rowid ORDER BY max(b COLLATE nocase)||''; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 126 no such table: t1 ==== 64.4 SELECT count() OVER (), rowid, max(b COLLATE nocase) @@ -2018,26 +2018,26 @@ stmt 0 err 1 -1 no such table: t1 GROUP BY rowid ORDER BY max(b COLLATE nocase); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 117 no such table: t1 ==== 65.1 CREATE TABLE t1(c1); INSERT INTO t1 VALUES('abcd'); ---- stmt 0 ok -stmt 23 err 1 -1 no such table: t1 +stmt 23 err 1 -1 56 no such table: t1 ==== 65.2 SELECT max(c1 COLLATE nocase) IN (SELECT 'aBCd') FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 60 no such table: t1 ==== 65.3 SELECT count() OVER (), group_concat(c1 COLLATE nocase) IN (SELECT 'aBCd') FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 98 no such table: t1 ==== 65.4 SELECT COUNT() OVER () LIKE lead(102030) OVER( @@ -2045,7 +2045,7 @@ stmt 0 err 1 -1 no such table: t1 ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 127 no such table: t1 ==== 66.1 CREATE TABLE t1(a INTEGER); @@ -2053,8 +2053,8 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES(3029012920382354029); ---- stmt 0 ok -stmt 30 err 1 -1 no such table: t1 -stmt 76 err 1 -1 no such table: t1 +stmt 30 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 122 no such table: t1 ==== 66.3 CREATE TABLE t2(a INTEGER); @@ -2062,8 +2062,8 @@ stmt 76 err 1 -1 no such table: t1 INSERT INTO t2 VALUES(30); ---- stmt 0 ok -stmt 30 err 1 -1 no such table: t2 -stmt 59 err 1 -1 no such table: t2 +stmt 30 err 1 -1 59 no such table: t2 +stmt 59 err 1 -1 88 no such table: t2 ==== 67.0 CREATE TABLE t1(a, b, c); @@ -2078,7 +2078,7 @@ stmt 28 ok WINDOW w1 AS ( ORDER BY ((SELECT 1 FROM v1)) ) ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 173 no such table: t1 ==== 67.2 SELECT a,c,b FROM t1 INTERSECT SELECT a,b,c FROM t1 ORDER BY ( @@ -2086,7 +2086,7 @@ stmt 0 err 1 -1 no such table: t1 WINDOW w1 AS ( ORDER BY ((SELECT 1 FROM t2)) ) ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 173 no such table: t1 ==== 68.0 CREATE TABLE t1(a,b); @@ -2094,8 +2094,8 @@ stmt 0 err 1 -1 no such table: t1 SELECT rowid, a, b, sum(a)OVER() FROM t1 ORDER BY count(b); ---- stmt 0 ok -stmt 24 err 1 -1 no such table: t1 -stmt 84 err 1 -1 no such table: t1 +stmt 24 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 146 no such table: t1 ==== 69.0 CREATE TABLE t1(a,b); @@ -2103,18 +2103,18 @@ stmt 84 err 1 -1 no such table: t1 SELECT * FROM t1 WHERE b = (SELECT b FROM t1 ORDER BY lead(b) OVER () AND sum(a)); ---- stmt 0 ok -stmt 24 err 1 -1 no such table: main.t1 -stmt 56 err 1 -1 no such table: t1 +stmt 24 err 1 -1 56 no such table: main.t1 +stmt 56 err 1 -1 141 no such table: t1 ==== 69.1 SELECT * FROM t1 WHERE b >= (SELECT b FROM t1 ORDER BY lead(b) OVER () AND sum(a)); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 86 no such table: t1 ==== 69.2 SELECT * FROM t1 WHERE b <= (SELECT b FROM t1 ORDER BY lead(b) OVER () AND sum(a)); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 86 no such table: t1 ==== 70.0 CREATE TABLE t1(a); @@ -2124,12 +2124,12 @@ stmt 0 ok SELECT substr(a,4,lag(a,7) OVER(PARTITION BY 'cf23' ORDER BY 2)) AS ca0 FROM t1 ORDER BY ca0; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 70.2 SELECT substr(a,4,lag(a,7) OVER(PARTITION BY 'cf23' ORDER BY likely(2))) AS ca0 FROM t1 ORDER BY ca0; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 104 no such table: t1 ==== 71.0 CREATE TABLE t0(a); @@ -2139,7 +2139,7 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY b; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t0 +stmt 22 err 1 -1 177 no such table: t0 ==== 72.1 CREATE TABLE dual(dummy); INSERT INTO dual VALUES('X'); @@ -2147,9 +2147,9 @@ stmt 22 err 1 -1 no such table: t0 SELECT * FROM v1 WHERE true; ---- stmt 0 ok -stmt 28 err 1 -1 no such table: dual +stmt 28 err 1 -1 59 no such table: dual stmt 59 ok -stmt 139 err 1 -1 no such table: v1 +stmt 139 err 1 -1 170 no such table: v1 ==== 72.0 CREATE TABLE t0(c0); @@ -2157,7 +2157,7 @@ stmt 139 err 1 -1 no such table: v1 CREATE VIEW v0(c0) AS SELECT TOTAL(0) OVER (PARTITION BY t0.c0) FROM t0; ---- stmt 0 ok -stmt 23 err 1 -1 no such table: t0 +stmt 23 err 1 -1 56 no such table: t0 stmt 56 ok ==== 72.1.dup1 @@ -2166,7 +2166,7 @@ stmt 56 ok ) WHERE ('1' IS NOT ('abcde' NOTNULL)); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 129 no such table: t0 ==== 73.0 CREATE TABLE t1(a INT); @@ -2175,44 +2175,44 @@ stmt 0 err 1 -1 no such table: t0 CREATE TRIGGER x1 INSTEAD OF UPDATE ON t2 BEGIN SELECT true; END; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t1 +stmt 26 err 1 -1 65 no such table: t1 stmt 65 ok -stmt 155 err 1 -1 no such table: main.t2 +stmt 155 err 1 -1 205 no such table: main.t2 ==== 73.1 SELECT * FROM t2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 20 no such table: t2 ==== 73.2 UPDATE t2 SET c=99 WHERE b=4 RETURNING *; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 44 no such table: t2 ==== 73.3 SELECT *, nth_value(15,2) OVER() FROM t2, t1 WHERE b=4; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 58 no such table: t2 ==== 73.4 UPDATE t2 SET c=nth_value(15,2) OVER() FROM (SELECT * FROM t1) WHERE b=4 RETURNING *; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 88 no such table: t2 ==== 73.5 DROP TRIGGER x1; ---- -stmt 0 err 1 -1 no such trigger: x1 +stmt 0 err 1 -1 19 no such trigger: x1 ==== 73.6 UPDATE t2 SET c=99 WHERE b=4 RETURNING *; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 44 no such table: t2 ==== 73.7 UPDATE t2 SET c=nth_value(15,2) OVER() FROM (SELECT * FROM t1) WHERE b=4 RETURNING *; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 88 no such table: t2 ==== 74.0 CREATE TABLE t1 (a INT, b INT); @@ -2223,9 +2223,9 @@ stmt 0 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 34 ok -stmt 68 err 1 -1 no such table: main.t1 -stmt 102 err 1 -1 no such table: t1 -stmt 138 err 1 -1 no such table: t2 +stmt 68 err 1 -1 102 no such table: main.t1 +stmt 102 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 174 no such table: t2 ==== 74.1 SELECT ( @@ -2233,7 +2233,7 @@ stmt 138 err 1 -1 no such table: t2 ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 64 no such table: t1 ==== 74.2 SELECT ( @@ -2241,7 +2241,7 @@ stmt 0 err 1 -1 no such table: t1 ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 66 no such table: t1 ==== 74.3 SELECT ( @@ -2250,7 +2250,7 @@ stmt 0 err 1 -1 no such table: t1 ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 124 no such table: t1 ==== 74.4 /* Original test case reported in https://sqlite.org/forum/forumpost/bad532820c @@ -2268,16 +2268,16 @@ stmt 0 err 1 -1 no such table: t1 CREATE TABLE t1(a INT, b INT); CREATE INDEX t1x ON t1(a+b); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok -stmt 50 err 1 -1 no such table: main.t1 +stmt 50 err 1 -1 81 no such table: main.t1 ==== 75.1 SELECT count((SELECT count(a0.a+a0.b) ORDER BY sum(0) OVER (PARTITION BY 0))) FROM t1 AS a0 JOIN t1 AS a1 GROUP BY a1.a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 130 no such table: t1 ==== 76.0 CREATE TABLE t1(a INT, b INT); @@ -2287,10 +2287,10 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t2 VALUES (333),(444),(555); ---- stmt 0 ok -stmt 33 err 1 -1 no such table: t1 -stmt 93 err 1 -1 no such table: main.t1 +stmt 33 err 1 -1 93 no such table: t1 +stmt 93 err 1 -1 122 no such table: main.t1 stmt 122 ok -stmt 148 err 1 -1 no such table: t2 +stmt 148 err 1 -1 191 no such table: t2 ==== 76.1 SELECT c, (SELECT c + sum(1) OVER ()) AS "res" @@ -2298,7 +2298,7 @@ stmt 148 err 1 -1 no such table: t2 GROUP BY c ORDER by c; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 139 no such table: t2 ==== 76.2 CREATE TABLE t3(x); @@ -2308,23 +2308,23 @@ stmt 0 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 22 ok -stmt 44 err 1 -1 no such table: t3 -stmt 88 err 1 -1 no such table: t4 +stmt 44 err 1 -1 88 no such table: t3 +stmt 88 err 1 -1 132 no such table: t4 ==== 76.3 SELECT (SELECT y+sum(0) OVER ()) FROM t3 LEFT JOIN t4 ON x=y; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 64 no such table: t3 ==== 76.4 SELECT (SELECT y+sum(0) OVER ()) FROM t3 LEFT JOIN t4 ON x=y GROUP BY x; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 75 no such table: t3 ==== 76.5 SELECT (SELECT max(y)+sum(0) OVER ()) FROM t3 LEFT JOIN t4 ON x=y GROUP BY x; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 80 no such table: t3 ==== 77.1 CREATE TABLE t1(x INT); @@ -2332,13 +2332,13 @@ stmt 0 err 1 -1 no such table: t3 INSERT INTO t1 VALUES(1),(2),(4),(8); ---- stmt 0 ok -stmt 26 err 1 -1 no such table: main.t1 -stmt 63 err 1 -1 no such table: t1 +stmt 26 err 1 -1 63 no such table: main.t1 +stmt 63 err 1 -1 103 no such table: t1 ==== 77.2 SELECT max(~likely(x)) FILTER (WHERE true) FROM t1 INDEXED BY t1x GROUP BY x; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 80 no such table: t1 ==== 78.1 SELECT quote(group_concat(x) OVER ()) FROM (SELECT '' AS x); @@ -2359,27 +2359,27 @@ stmt 0 ok INSERT INTO t0 VALUES(3); ---- stmt 0 ok -stmt 33 err 1 -1 no such table: t0 -stmt 61 err 1 -1 no such table: t0 -stmt 89 err 1 -1 no such table: t0 +stmt 33 err 1 -1 61 no such table: t0 +stmt 61 err 1 -1 89 no such table: t0 +stmt 89 err 1 -1 117 no such table: t0 ==== 79.1 SELECT COUNT(*) OVER ( ROWS BETWEEN 0 FOLLOWING AND 100 FOLLOWING) FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 84 no such table: t0 ==== 79.2 SELECT COUNT(*) OVER ( ORDER BY c0 RANGE BETWEEN 0 FOLLOWING AND 10_000_000_000 FOLLOWING ) FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 109 no such table: t0 ==== 79.3 SELECT sum(c0), COUNT(*) OVER ( ORDER BY c0 RANGE BETWEEN 0 FOLLOWING AND 10_000_000_000 FOLLOWING ) FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 118 no such table: t0 diff --git a/parser/testdata/window2.test b/parser/testdata/window2.test index c315d16..b4e42b4 100644 --- a/parser/testdata/window2.test +++ b/parser/testdata/window2.test @@ -11,27 +11,27 @@ ---- stmt 0 ok stmt 27 ok -stmt 96 err 1 -1 no such table: t1 -stmt 144 err 1 -1 no such table: t1 -stmt 192 err 1 -1 no such table: t1 -stmt 240 err 1 -1 no such table: t1 -stmt 288 err 1 -1 no such table: t1 -stmt 336 err 1 -1 no such table: t1 +stmt 96 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 240 no such table: t1 +stmt 240 err 1 -1 288 no such table: t1 +stmt 288 err 1 -1 336 no such table: t1 +stmt 336 err 1 -1 384 no such table: t1 ==== 1.1 SELECT c, sum(d) OVER (PARTITION BY b ORDER BY c) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 61 no such table: t1 ==== 1.2 SELECT sum(d) OVER () FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 33 no such table: t1 ==== 1.3 SELECT sum(d) OVER (PARTITION BY b) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 47 no such table: t1 ==== 2.1 SELECT a, sum(d) OVER ( @@ -39,7 +39,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1000 PRECEDING AND 1 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 102 no such table: t1 ==== 2.2 SELECT a, sum(d) OVER ( @@ -47,7 +47,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1000 PRECEDING AND 1000 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 105 no such table: t1 ==== 2.3 SELECT a, sum(d) OVER ( @@ -55,7 +55,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 PRECEDING AND 1000 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 102 no such table: t1 ==== 2.4 SELECT a, sum(d) OVER ( @@ -63,7 +63,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== 2.5 SELECT a, sum(d) OVER ( @@ -71,7 +71,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 99 no such table: t1 ==== 2.6 SELECT a, sum(d) OVER ( @@ -80,7 +80,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 119 no such table: t1 ==== 2.7 SELECT a, sum(d) OVER ( @@ -89,7 +89,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 0 PRECEDING AND 0 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 119 no such table: t1 ==== 2.8 SELECT a, sum(d) OVER ( @@ -97,7 +97,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 100 no such table: t1 ==== 2.9 SELECT a, sum(d) OVER ( @@ -105,7 +105,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 108 no such table: t1 ==== 2.10 SELECT a, sum(d) OVER ( @@ -113,7 +113,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 100 no such table: t1 ==== 2.11 SELECT a, sum(d) OVER ( @@ -121,7 +121,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 100 no such table: t1 ==== 2.13 SELECT a, sum(d) OVER ( @@ -129,7 +129,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 108 no such table: t1 ==== 2.14 SELECT a, sum(d) OVER ( @@ -137,7 +137,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 100 no such table: t1 ==== 2.15 SELECT a, sum(d) OVER ( @@ -146,7 +146,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 119 no such table: t1 ==== 2.16 SELECT a, sum(d) OVER ( @@ -155,7 +155,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 119 no such table: t1 ==== 2.17 SELECT a, sum(d) OVER ( @@ -164,7 +164,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 119 no such table: t1 ==== 2.18 SELECT a, sum(d) OVER ( @@ -173,7 +173,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 127 no such table: t1 ==== 2.19 SELECT a, sum(d) OVER ( @@ -182,7 +182,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 FOLLOWING AND 3 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 119 no such table: t1 ==== 2.20 SELECT a, sum(d) OVER ( @@ -190,7 +190,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 100 no such table: t1 ==== 2.21 SELECT a, sum(d) OVER ( @@ -198,7 +198,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 108 no such table: t1 ==== 2.22 SELECT a, sum(d) OVER ( @@ -207,7 +207,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 127 no such table: t1 ==== 2.23 SELECT a, sum(d) OVER ( @@ -215,7 +215,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 108 no such table: t1 ==== 2.24 SELECT a, sum(d) OVER ( @@ -224,7 +224,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 129 no such table: t1 ==== 2.25 SELECT a, sum(d) OVER ( @@ -232,7 +232,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 116 no such table: t1 ==== 2.26 SELECT a, sum(d) OVER ( @@ -241,7 +241,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 135 no such table: t1 ==== 2.27 SELECT a, sum(d) OVER ( @@ -249,7 +249,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 100 no such table: t1 ==== 2.28 SELECT a, sum(d) OVER ( @@ -258,7 +258,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 119 no such table: t1 ==== 2.29 SELECT a, sum(d) OVER ( @@ -266,7 +266,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 109 no such table: t1 ==== 2.30 SELECT a, sum(d) OVER ( @@ -274,7 +274,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 109 no such table: t1 ==== 3.1 SELECT a, sum(d) OVER ( @@ -282,7 +282,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 123 no such table: t1 ==== 3.2 SELECT a, sum(d) OVER ( @@ -290,7 +290,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 108 no such table: t1 ==== 3.3 SELECT a, sum(d) OVER ( @@ -298,7 +298,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 115 no such table: t1 ==== 3.4 SELECT a, sum(d) OVER ( @@ -306,7 +306,7 @@ stmt 0 err 1 -1 no such table: t1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 109 no such table: t1 ==== 4.0 DROP TABLE IF EXISTS t2; @@ -341,7 +341,7 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 80 err 1 -1 no such table: t2 +stmt 80 err 1 -1 2036 no such table: t2 ==== 4.1 SELECT a, sum(b) OVER ( @@ -349,7 +349,7 @@ stmt 80 err 1 -1 no such table: t2 ORDER BY b ) FROM t2 ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 4.2 SELECT a, sum(b) OVER ( @@ -358,7 +358,7 @@ stmt 0 err 1 -1 no such table: t2 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 4.3 SELECT b, sum(b) OVER ( @@ -366,7 +366,7 @@ stmt 0 err 1 -1 no such table: t2 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ORDER BY b; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 4.4 SELECT b, sum(b) OVER ( @@ -374,7 +374,7 @@ stmt 0 err 1 -1 no such table: t2 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ORDER BY b; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 4.5 SELECT b, sum(b) OVER ( @@ -382,61 +382,61 @@ stmt 0 err 1 -1 no such table: t2 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ORDER BY b; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 4.6.1 SELECT b, sum(b) OVER ( RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ORDER BY b; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 ==== 4.6.2 SELECT b, sum(b) OVER () FROM t2 ORDER BY b; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 47 no such table: t2 ==== 4.6.3 SELECT b, sum(b) OVER ( RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ORDER BY b; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 4.6.4 SELECT b, sum(b) OVER ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ORDER BY b; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 4.7.1 SELECT b, sum(b) OVER ( ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ORDER BY 1, 2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 4.7.2 SELECT b, sum(b) OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ORDER BY 1, 2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 4.7.3 SELECT b, sum(b) OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ORDER BY 1, 2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 4.7.4 SELECT b, sum(b) OVER ( ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ORDER BY 1, 2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 4.8.1 SELECT b, sum(b) OVER ( @@ -444,7 +444,7 @@ stmt 0 err 1 -1 no such table: t2 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ORDER BY 1, 2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 4.8.2 SELECT b, sum(b) OVER ( @@ -452,7 +452,7 @@ stmt 0 err 1 -1 no such table: t2 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ORDER BY 1, 2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 4.8.3 SELECT b, sum(b) OVER ( @@ -460,7 +460,7 @@ stmt 0 err 1 -1 no such table: t2 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ORDER BY 1, 2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 4.8.4 SELECT b, sum(b) OVER ( @@ -468,17 +468,17 @@ stmt 0 err 1 -1 no such table: t2 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ORDER BY 1, 2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 4.10 SELECT count(*) OVER (ORDER BY b) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 45 no such table: t1 ==== 4.11 SELECT count(distinct a) FILTER (WHERE b='odd') FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 59 no such table: t1 ==== 5.0 DROP TABLE IF EXISTS t1; @@ -491,11 +491,11 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 68 err 1 -1 no such table: t1 -stmt 100 err 1 -1 no such table: t1 -stmt 132 err 1 -1 no such table: t1 -stmt 163 err 1 -1 no such table: t1 -stmt 194 err 1 -1 no such table: t1 +stmt 68 err 1 -1 100 no such table: t1 +stmt 100 err 1 -1 132 no such table: t1 +stmt 132 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 194 no such table: t1 +stmt 194 err 1 -1 225 no such table: t1 ==== 6.0 DROP TABLE IF EXISTS t0; @@ -504,18 +504,18 @@ stmt 194 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 65 err 1 -1 no such table: t0 +stmt 65 err 1 -1 93 no such table: t0 ==== 6.1 SELECT DENSE_RANK() OVER(), LAG(0) OVER() FROM t0; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 53 no such table: t0 ==== 6.2 SELECT * FROM t0 WHERE (0, t0.c0) IN (SELECT DENSE_RANK() OVER(), LAG(0) OVER() FROM t0); ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 99 no such table: t0 ==== 7.0 DROP TABLE IF EXISTS t1; @@ -527,25 +527,25 @@ stmt 0 err 1 -1 no such table: t0 ---- stmt 0 ok stmt 27 ok -stmt 79 err 1 -1 no such table: t1 -stmt 113 err 1 -1 no such table: t1 -stmt 147 err 1 -1 no such table: t1 -stmt 181 err 1 -1 no such table: t1 +stmt 79 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 147 no such table: t1 +stmt 147 err 1 -1 181 no such table: t1 +stmt 181 err 1 -1 215 no such table: t1 ==== 7.1 SELECT c, sum(c) OVER win1 FROM t1 WINDOW win1 AS (ORDER BY b) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 69 no such table: t1 ==== 7.2 SELECT c, sum(c) OVER win1 FROM t1 WINDOW win1 AS (PARTITION BY 1 ORDER BY b) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 84 no such table: t1 ==== 7.3 SELECT c, sum(c) OVER win1 FROM t1 WINDOW win1 AS (ORDER BY 1) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 69 no such table: t1 diff --git a/parser/testdata/window3.test b/parser/testdata/window3.test index 2ff3de5..ed79b2a 100644 --- a/parser/testdata/window3.test +++ b/parser/testdata/window3.test @@ -31,99 +31,99 @@ ---- stmt 0 ok stmt 27 ok -stmt 80 err 1 -1 no such table: t2 +stmt 80 err 1 -1 1964 no such table: t2 ==== 1.1 SELECT max(b) OVER ( ORDER BY a ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 51 no such table: t2 ==== 1.1.2.1 SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.1.2.2 SELECT min(b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.1.3.1 SELECT row_number() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.1.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.1.3.3 SELECT row_number() OVER ( RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 90 no such table: t2 ==== 1.1.4.1 SELECT dense_rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.1.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.1.4.3 SELECT dense_rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.1.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.1.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.1.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.1.5.1 SELECT rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.1.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.1.5.3 SELECT rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.1.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.1.5.5 SELECT rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.1.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.1.6.1 SELECT @@ -132,187 +132,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 346 no such table: t2 ==== 1.1.9.1 SELECT last_value(a+b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.1.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.1.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.1.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.1.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.1.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.1.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.1.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.1.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.1.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.1.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.1.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.1.11.1 SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.1.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.1.11.3 SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.1.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.1.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.1.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.1.12.1 SELECT lead(b,b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 ==== 1.1.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.1.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.1.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.1.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.1.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.1.13.1 SELECT lag(b,b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.1.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.1.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.1.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.1.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.1.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.1.14.1 SELECT string_agg(CAST(b AS TEXT), '.') OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.1.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 139 no such table: t2 ==== 1.1.14.3 SELECT string_agg(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.1.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 1.1.14.5 SELECT string_agg(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.1.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 1.1.14.7 SELECT string_agg(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) @@ -320,7 +320,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 187 no such table: t2 ==== 1.1.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) @@ -328,7 +328,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 189 no such table: t2 ==== 1.1.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -337,120 +337,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 213 no such table: t2 ==== 1.1.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.1.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 186 no such table: t2 ==== 1.1.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 206 no such table: t2 ==== 1.1.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 208 no such table: t2 ==== 1.2.2.1 SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.2.2.2 SELECT min(b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.2.3.1 SELECT row_number() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.2.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.2.3.3 SELECT row_number() OVER ( RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.2.4.1 SELECT dense_rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.2.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.2.4.3 SELECT dense_rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.2.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.2.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.2.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.2.5.1 SELECT rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.2.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.2.5.3 SELECT rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.2.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.2.5.5 SELECT rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.2.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.2.6.1 SELECT @@ -459,187 +459,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 370 no such table: t2 ==== 1.2.9.1 SELECT last_value(a+b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.2.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.2.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.2.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.2.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.2.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.2.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.2.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.2.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.2.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.2.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.2.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.2.11.1 SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.2.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.2.11.3 SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.2.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.2.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.2.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.2.12.1 SELECT lead(b,b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.2.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.2.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.2.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.2.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.2.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.2.13.1 SELECT lag(b,b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.2.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.2.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.2.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.2.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.2.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.2.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.2.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 147 no such table: t2 ==== 1.2.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.2.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 151 no such table: t2 ==== 1.2.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 136 no such table: t2 ==== 1.2.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 151 no such table: t2 ==== 1.2.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) @@ -647,7 +647,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 197 no such table: t2 ==== 1.2.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) @@ -655,7 +655,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 197 no such table: t2 ==== 1.2.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -664,120 +664,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 221 no such table: t2 ==== 1.2.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 196 no such table: t2 ==== 1.2.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 194 no such table: t2 ==== 1.2.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 214 no such table: t2 ==== 1.2.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 216 no such table: t2 ==== 1.3.2.1 SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.3.2.2 SELECT min(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.3.3.1 SELECT row_number() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.3.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.3.3.3 SELECT row_number() OVER ( RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 90 no such table: t2 ==== 1.3.4.1 SELECT dense_rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.3.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.3.4.3 SELECT dense_rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.3.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.3.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.3.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.3.5.1 SELECT rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.3.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.3.5.3 SELECT rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.3.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.3.5.5 SELECT rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.3.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.3.6.1 SELECT @@ -786,187 +786,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 346 no such table: t2 ==== 1.3.9.1 SELECT last_value(a+b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.3.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.3.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.3.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.3.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.3.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.3.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.3.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.3.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.3.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.3.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.3.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.3.11.1 SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.3.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.3.11.3 SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.3.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.3.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.3.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.3.12.1 SELECT lead(b,b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 ==== 1.3.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.3.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.3.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.3.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.3.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.3.13.1 SELECT lag(b,b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.3.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.3.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.3.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.3.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.3.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.3.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.3.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 139 no such table: t2 ==== 1.3.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.3.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 1.3.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.3.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 1.3.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) @@ -974,7 +974,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 189 no such table: t2 ==== 1.3.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) @@ -982,7 +982,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 189 no such table: t2 ==== 1.3.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -991,120 +991,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 213 no such table: t2 ==== 1.3.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.3.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 186 no such table: t2 ==== 1.3.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 206 no such table: t2 ==== 1.3.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 208 no such table: t2 ==== 1.4.2.1 SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.4.2.2 SELECT min(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.4.3.1 SELECT row_number() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.4.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.4.3.3 SELECT row_number() OVER ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.4.4.1 SELECT dense_rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.4.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.4.4.3 SELECT dense_rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.4.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.4.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.4.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.4.5.1 SELECT rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.4.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.4.5.3 SELECT rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.4.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.4.5.5 SELECT rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.4.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.4.6.1 SELECT @@ -1113,187 +1113,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 370 no such table: t2 ==== 1.4.9.1 SELECT last_value(a+b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.4.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.4.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.4.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.4.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.4.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.4.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.4.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.4.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.4.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.4.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.4.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.4.11.1 SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.4.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.4.11.3 SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.4.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.4.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.4.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.4.12.1 SELECT lead(b,b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.4.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.4.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.4.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.4.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.4.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.4.13.1 SELECT lag(b,b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.4.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.4.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.4.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.4.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.4.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.4.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.4.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 147 no such table: t2 ==== 1.4.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.4.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 151 no such table: t2 ==== 1.4.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 136 no such table: t2 ==== 1.4.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 151 no such table: t2 ==== 1.4.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) @@ -1301,7 +1301,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 197 no such table: t2 ==== 1.4.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) @@ -1309,7 +1309,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 197 no such table: t2 ==== 1.4.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -1318,120 +1318,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 221 no such table: t2 ==== 1.4.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 196 no such table: t2 ==== 1.4.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 194 no such table: t2 ==== 1.4.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 214 no such table: t2 ==== 1.4.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 216 no such table: t2 ==== 1.5.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.5.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.5.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.5.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.5.3.3 SELECT row_number() OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.5.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.5.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.5.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.5.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.5.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.5.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.5.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.5.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.5.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.5.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.5.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.5.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.5.6.1 SELECT @@ -1440,187 +1440,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 343 no such table: t2 ==== 1.5.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.5.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.5.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.5.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.5.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.5.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.5.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.5.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.5.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.5.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.5.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.5.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.5.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.5.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.5.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.5.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.5.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.5.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.5.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.5.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.5.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.5.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.5.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.5.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.5.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.5.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.5.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.5.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.5.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.5.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.5.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.5.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 138 no such table: t2 ==== 1.5.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.5.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.5.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.5.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.5.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) @@ -1628,7 +1628,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.5.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) @@ -1636,7 +1636,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.5.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -1645,120 +1645,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 212 no such table: t2 ==== 1.5.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 187 no such table: t2 ==== 1.5.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 185 no such table: t2 ==== 1.5.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 205 no such table: t2 ==== 1.5.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 207 no such table: t2 ==== 1.6.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.6.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.6.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.6.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.6.3.3 SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 84 no such table: t2 ==== 1.6.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.6.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.6.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.6.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.6.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.6.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.6.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.6.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.6.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.6.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.6.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== 1.6.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.6.6.1 SELECT @@ -1767,187 +1767,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 328 no such table: t2 ==== 1.6.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.6.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.6.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.6.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.6.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.6.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.6.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.6.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.6.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.6.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.6.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.6.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.6.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.6.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.6.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.6.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.6.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.6.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.6.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 90 no such table: t2 ==== 1.6.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.6.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.6.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.6.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.6.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.6.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.6.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.6.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 93 no such table: t2 ==== 1.6.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.6.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 ==== 1.6.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.6.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.6.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.6.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.6.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.6.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.6.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.6.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) @@ -1955,7 +1955,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 183 no such table: t2 ==== 1.6.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) @@ -1963,7 +1963,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 183 no such table: t2 ==== 1.6.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -1972,120 +1972,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 207 no such table: t2 ==== 1.6.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 182 no such table: t2 ==== 1.6.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 180 no such table: t2 ==== 1.6.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 200 no such table: t2 ==== 1.6.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 202 no such table: t2 ==== 1.7.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.7.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.7.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.7.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.7.3.3 SELECT row_number() OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.7.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.7.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.7.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.7.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.7.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.7.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.7.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.7.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.7.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.7.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.7.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.7.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.7.6.1 SELECT @@ -2094,187 +2094,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 343 no such table: t2 ==== 1.7.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.7.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.7.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.7.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.7.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.7.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.7.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.7.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.7.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.7.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.7.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.7.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.7.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.7.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.7.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.7.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.7.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.7.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.7.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.7.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.7.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.7.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.7.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.7.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.7.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.7.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.7.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.7.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.7.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.7.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.7.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.7.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 138 no such table: t2 ==== 1.7.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.7.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.7.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.7.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.7.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) @@ -2282,7 +2282,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.7.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) @@ -2290,7 +2290,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.7.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -2299,120 +2299,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 212 no such table: t2 ==== 1.7.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 187 no such table: t2 ==== 1.7.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 185 no such table: t2 ==== 1.7.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 205 no such table: t2 ==== 1.7.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 207 no such table: t2 ==== 1.8.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.8.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.8.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.8.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.8.3.3 SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 84 no such table: t2 ==== 1.8.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.8.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.8.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.8.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.8.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.8.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.8.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.8.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.8.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.8.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.8.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== 1.8.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.8.6.1 SELECT @@ -2421,187 +2421,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 328 no such table: t2 ==== 1.8.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.8.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.8.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.8.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.8.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.8.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.8.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.8.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.8.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.8.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.8.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.8.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.8.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.8.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.8.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.8.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.8.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.8.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.8.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 90 no such table: t2 ==== 1.8.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.8.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.8.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.8.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.8.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.8.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.8.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.8.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 93 no such table: t2 ==== 1.8.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.8.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 ==== 1.8.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.8.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.8.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.8.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.8.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.8.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.8.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.8.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) @@ -2609,7 +2609,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 183 no such table: t2 ==== 1.8.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) @@ -2617,7 +2617,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 183 no such table: t2 ==== 1.8.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -2626,120 +2626,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 207 no such table: t2 ==== 1.8.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 182 no such table: t2 ==== 1.8.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 180 no such table: t2 ==== 1.8.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 200 no such table: t2 ==== 1.8.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 202 no such table: t2 ==== 1.9.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.9.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.9.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.9.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.9.3.3 SELECT row_number() OVER ( ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.9.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.9.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.9.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.9.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.9.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.9.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.9.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.9.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.9.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.9.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.9.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.9.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.9.6.1 SELECT @@ -2748,187 +2748,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 343 no such table: t2 ==== 1.9.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.9.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.9.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.9.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.9.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.9.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.9.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.9.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.9.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.9.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.9.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.9.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.9.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.9.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.9.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.9.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.9.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.9.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.9.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.9.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.9.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.9.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.9.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.9.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.9.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.9.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.9.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.9.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.9.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.9.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.9.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.9.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 138 no such table: t2 ==== 1.9.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.9.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.9.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.9.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.9.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) @@ -2936,7 +2936,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.9.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) @@ -2944,7 +2944,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.9.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -2953,120 +2953,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 212 no such table: t2 ==== 1.9.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 187 no such table: t2 ==== 1.9.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 185 no such table: t2 ==== 1.9.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 205 no such table: t2 ==== 1.9.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 207 no such table: t2 ==== 1.10.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.10.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.10.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.10.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.10.3.3 SELECT row_number() OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.10.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.10.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.10.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.10.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.10.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.10.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.10.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.10.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.10.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.10.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.10.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.10.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.10.6.1 SELECT @@ -3075,187 +3075,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 343 no such table: t2 ==== 1.10.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.10.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.10.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.10.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.10.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.10.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.10.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.10.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.10.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.10.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.10.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.10.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.10.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.10.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.10.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.10.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.10.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.10.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.10.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.10.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.10.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.10.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.10.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.10.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.10.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.10.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.10.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.10.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.10.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.10.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.10.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.10.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 138 no such table: t2 ==== 1.10.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.10.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.10.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.10.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.10.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) @@ -3263,7 +3263,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.10.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) @@ -3271,7 +3271,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.10.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -3280,120 +3280,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 212 no such table: t2 ==== 1.10.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 187 no such table: t2 ==== 1.10.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 185 no such table: t2 ==== 1.10.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 205 no such table: t2 ==== 1.10.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 207 no such table: t2 ==== 1.11.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.11.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.11.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.11.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.11.3.3 SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 84 no such table: t2 ==== 1.11.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.11.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.11.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.11.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.11.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.11.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.11.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.11.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.11.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.11.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.11.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== 1.11.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.11.6.1 SELECT @@ -3402,187 +3402,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 328 no such table: t2 ==== 1.11.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.11.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.11.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.11.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.11.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.11.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.11.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.11.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.11.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.11.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.11.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.11.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.11.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.11.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.11.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.11.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.11.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.11.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.11.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 90 no such table: t2 ==== 1.11.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.11.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.11.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.11.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.11.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.11.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.11.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.11.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 93 no such table: t2 ==== 1.11.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.11.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 ==== 1.11.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.11.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.11.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.11.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.11.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.11.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.11.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.11.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) @@ -3590,7 +3590,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 183 no such table: t2 ==== 1.11.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) @@ -3598,7 +3598,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 183 no such table: t2 ==== 1.11.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -3607,120 +3607,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 207 no such table: t2 ==== 1.11.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 182 no such table: t2 ==== 1.11.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 180 no such table: t2 ==== 1.11.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 200 no such table: t2 ==== 1.11.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 202 no such table: t2 ==== 1.12.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.12.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.12.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.12.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.12.3.3 SELECT row_number() OVER ( ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.12.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.12.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.12.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.12.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.12.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.12.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.12.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.12.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.12.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.12.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.12.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.12.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.12.6.1 SELECT @@ -3729,187 +3729,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 343 no such table: t2 ==== 1.12.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.12.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.12.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.12.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.12.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.12.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.12.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.12.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.12.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.12.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.12.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.12.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.12.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.12.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.12.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.12.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.12.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.12.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.12.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.12.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.12.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.12.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.12.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.12.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.12.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.12.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.12.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.12.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.12.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.12.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.12.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.12.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 138 no such table: t2 ==== 1.12.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.12.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.12.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.12.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 142 no such table: t2 ==== 1.12.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) @@ -3917,7 +3917,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.12.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) @@ -3925,7 +3925,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.12.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -3934,120 +3934,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 212 no such table: t2 ==== 1.12.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 187 no such table: t2 ==== 1.12.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 185 no such table: t2 ==== 1.12.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 205 no such table: t2 ==== 1.12.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 207 no such table: t2 ==== 1.13.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.13.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.13.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.13.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.13.3.3 SELECT row_number() OVER ( ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 84 no such table: t2 ==== 1.13.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.13.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.13.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.13.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.13.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.13.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.13.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.13.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.13.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.13.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.13.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== 1.13.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.13.6.1 SELECT @@ -4056,187 +4056,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 328 no such table: t2 ==== 1.13.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.13.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.13.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.13.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.13.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.13.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.13.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.13.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.13.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.13.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.13.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.13.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.13.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 95 no such table: t2 ==== 1.13.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.13.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 99 no such table: t2 ==== 1.13.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.13.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.13.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.13.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 90 no such table: t2 ==== 1.13.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.13.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 1.13.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.13.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.13.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.13.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 89 no such table: t2 ==== 1.13.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.13.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 93 no such table: t2 ==== 1.13.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.13.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 96 no such table: t2 ==== 1.13.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.13.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.13.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.13.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.13.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.13.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.13.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.13.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) @@ -4244,7 +4244,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 183 no such table: t2 ==== 1.13.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) @@ -4252,7 +4252,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 183 no such table: t2 ==== 1.13.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -4261,120 +4261,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 207 no such table: t2 ==== 1.13.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 182 no such table: t2 ==== 1.13.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 180 no such table: t2 ==== 1.13.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 200 no such table: t2 ==== 1.13.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 202 no such table: t2 ==== 1.14.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.14.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.14.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.14.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.14.3.3 SELECT row_number() OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.14.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.14.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.14.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.14.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.14.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.14.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.14.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.14.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.14.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.14.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.14.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.14.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.14.6.1 SELECT @@ -4383,187 +4383,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 367 no such table: t2 ==== 1.14.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.14.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.14.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.14.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.14.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.14.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.14.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.14.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.14.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.14.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.14.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.14.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.14.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.14.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.14.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.14.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.14.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.14.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.14.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.14.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.14.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.14.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.14.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.14.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.14.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.14.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.14.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.14.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.14.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.14.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.14.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.14.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 146 no such table: t2 ==== 1.14.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.14.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 150 no such table: t2 ==== 1.14.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 1.14.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 150 no such table: t2 ==== 1.14.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) @@ -4571,7 +4571,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 196 no such table: t2 ==== 1.14.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) @@ -4579,7 +4579,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 196 no such table: t2 ==== 1.14.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -4588,120 +4588,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 220 no such table: t2 ==== 1.14.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 195 no such table: t2 ==== 1.14.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 193 no such table: t2 ==== 1.14.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 213 no such table: t2 ==== 1.14.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 215 no such table: t2 ==== 1.15.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.15.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.15.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.15.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.15.3.3 SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== 1.15.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.15.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.15.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.15.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.15.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.15.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.15.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.15.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.15.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.15.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.15.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.15.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.15.6.1 SELECT @@ -4710,187 +4710,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 352 no such table: t2 ==== 1.15.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.15.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.15.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.15.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.15.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.15.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.15.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.15.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.15.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.15.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.15.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.15.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.15.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.15.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.15.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.15.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.15.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.15.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.15.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.15.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.15.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.15.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.15.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.15.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.15.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.15.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.15.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.15.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.15.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.15.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.15.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.15.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 141 no such table: t2 ==== 1.15.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.15.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 145 no such table: t2 ==== 1.15.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.15.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 145 no such table: t2 ==== 1.15.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) @@ -4898,7 +4898,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 191 no such table: t2 ==== 1.15.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) @@ -4906,7 +4906,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 191 no such table: t2 ==== 1.15.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -4915,120 +4915,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 215 no such table: t2 ==== 1.15.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 190 no such table: t2 ==== 1.15.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.15.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 208 no such table: t2 ==== 1.15.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 210 no such table: t2 ==== 1.16.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.16.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.16.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.16.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.16.3.3 SELECT row_number() OVER ( ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.16.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.16.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.16.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.16.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.16.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.16.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.16.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.16.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.16.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.16.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.16.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.16.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.16.6.1 SELECT @@ -5037,187 +5037,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 367 no such table: t2 ==== 1.16.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.16.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.16.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.16.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.16.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.16.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.16.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.16.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.16.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.16.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.16.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.16.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.16.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.16.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.16.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.16.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.16.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.16.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.16.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.16.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.16.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.16.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.16.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.16.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.16.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.16.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.16.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.16.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.16.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.16.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.16.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.16.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 146 no such table: t2 ==== 1.16.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.16.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 150 no such table: t2 ==== 1.16.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 1.16.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 150 no such table: t2 ==== 1.16.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) @@ -5225,7 +5225,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 196 no such table: t2 ==== 1.16.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) @@ -5233,7 +5233,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 196 no such table: t2 ==== 1.16.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -5242,120 +5242,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 220 no such table: t2 ==== 1.16.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 195 no such table: t2 ==== 1.16.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 193 no such table: t2 ==== 1.16.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 213 no such table: t2 ==== 1.16.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 215 no such table: t2 ==== 1.17.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.17.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.17.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.17.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.17.3.3 SELECT row_number() OVER ( ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 92 no such table: t2 ==== 1.17.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.17.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.17.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.17.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.17.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.17.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.17.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.17.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.17.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.17.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.17.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 100 no such table: t2 ==== 1.17.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.17.6.1 SELECT @@ -5364,187 +5364,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 352 no such table: t2 ==== 1.17.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.17.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.17.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 108 no such table: t2 ==== 1.17.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.17.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.17.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.17.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.17.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.17.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 109 no such table: t2 ==== 1.17.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.17.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.17.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.17.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 103 no such table: t2 ==== 1.17.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.17.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 107 no such table: t2 ==== 1.17.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.17.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.17.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.17.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 98 no such table: t2 ==== 1.17.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.17.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 102 no such table: t2 ==== 1.17.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.17.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.17.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.17.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 97 no such table: t2 ==== 1.17.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.17.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 101 no such table: t2 ==== 1.17.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.17.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 104 no such table: t2 ==== 1.17.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.17.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.17.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 141 no such table: t2 ==== 1.17.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.17.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 145 no such table: t2 ==== 1.17.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.17.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 145 no such table: t2 ==== 1.17.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) @@ -5552,7 +5552,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 191 no such table: t2 ==== 1.17.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) @@ -5560,7 +5560,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 191 no such table: t2 ==== 1.17.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -5569,120 +5569,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 215 no such table: t2 ==== 1.17.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 190 no such table: t2 ==== 1.17.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 188 no such table: t2 ==== 1.17.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 208 no such table: t2 ==== 1.17.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 210 no such table: t2 ==== 1.18.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.18.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.18.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.18.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 141 no such table: t2 ==== 1.18.3.3 SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.18.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.18.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 141 no such table: t2 ==== 1.18.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.18.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 141 no such table: t2 ==== 1.18.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.18.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 1.18.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.18.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 1.18.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.18.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 1.18.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.18.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.18.6.1 SELECT @@ -5691,187 +5691,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 412 no such table: t2 ==== 1.18.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.18.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 144 no such table: t2 ==== 1.18.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.18.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 146 no such table: t2 ==== 1.18.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.18.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 146 no such table: t2 ==== 1.18.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.18.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 1.18.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.18.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 147 no such table: t2 ==== 1.18.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.18.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 147 no such table: t2 ==== 1.18.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.18.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 141 no such table: t2 ==== 1.18.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 1.18.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 145 no such table: t2 ==== 1.18.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.18.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 145 no such table: t2 ==== 1.18.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.18.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 136 no such table: t2 ==== 1.18.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.18.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 140 no such table: t2 ==== 1.18.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.18.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 140 no such table: t2 ==== 1.18.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.18.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 1.18.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.18.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 139 no such table: t2 ==== 1.18.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.18.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 139 no such table: t2 ==== 1.18.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 1.18.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 161 no such table: t2 ==== 1.18.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 147 no such table: t2 ==== 1.18.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 165 no such table: t2 ==== 1.18.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 150 no such table: t2 ==== 1.18.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 165 no such table: t2 ==== 1.18.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) @@ -5879,7 +5879,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 211 no such table: t2 ==== 1.18.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) @@ -5887,7 +5887,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 211 no such table: t2 ==== 1.18.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -5896,120 +5896,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 235 no such table: t2 ==== 1.18.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 210 no such table: t2 ==== 1.18.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 208 no such table: t2 ==== 1.18.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 228 no such table: t2 ==== 1.18.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 230 no such table: t2 ==== 1.19.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.19.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.19.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.19.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 1.19.3.3 SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 105 no such table: t2 ==== 1.19.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.19.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 1.19.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.19.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 1.19.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.19.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 136 no such table: t2 ==== 1.19.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.19.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.19.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.19.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.19.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 113 no such table: t2 ==== 1.19.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.19.6.1 SELECT @@ -6018,187 +6018,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 391 no such table: t2 ==== 1.19.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.19.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.19.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.19.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 139 no such table: t2 ==== 1.19.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.19.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 139 no such table: t2 ==== 1.19.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.19.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 136 no such table: t2 ==== 1.19.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.19.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 140 no such table: t2 ==== 1.19.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.19.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 140 no such table: t2 ==== 1.19.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.19.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 1.19.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.19.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 138 no such table: t2 ==== 1.19.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.19.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 138 no such table: t2 ==== 1.19.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.19.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.19.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.19.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.19.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.19.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.19.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 110 no such table: t2 ==== 1.19.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 1.19.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.19.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.19.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.19.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 132 no such table: t2 ==== 1.19.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 136 no such table: t2 ==== 1.19.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 154 no such table: t2 ==== 1.19.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 140 no such table: t2 ==== 1.19.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 158 no such table: t2 ==== 1.19.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 143 no such table: t2 ==== 1.19.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 158 no such table: t2 ==== 1.19.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) @@ -6206,7 +6206,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 204 no such table: t2 ==== 1.19.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) @@ -6214,7 +6214,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 204 no such table: t2 ==== 1.19.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -6223,120 +6223,120 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 228 no such table: t2 ==== 1.19.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 203 no such table: t2 ==== 1.19.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 201 no such table: t2 ==== 1.19.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 221 no such table: t2 ==== 1.19.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 223 no such table: t2 ==== 1.20.2.1 SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.20.2.2 SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.20.3.1 SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.20.3.2 SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 1.20.3.3 SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 106 no such table: t2 ==== 1.20.4.1 SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.20.4.2 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 1.20.4.3 SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.20.4.4 SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 1.20.4.5 SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.20.4.6 SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.20.5.1 SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.20.5.2 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.20.5.3 SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.20.5.4 SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.20.5.5 SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 114 no such table: t2 ==== 1.20.5.6 SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 131 no such table: t2 ==== 1.20.6.1 SELECT @@ -6345,187 +6345,187 @@ stmt 0 err 1 -1 no such table: t2 dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 394 no such table: t2 ==== 1.20.9.1 SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 120 no such table: t2 ==== 1.20.9.2 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 138 no such table: t2 ==== 1.20.9.3 SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 122 no such table: t2 ==== 1.20.9.4 SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 140 no such table: t2 ==== 1.20.9.5 SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 1.20.9.6 SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 140 no such table: t2 ==== 1.20.10.1 SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.20.10.2 SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.20.10.3 SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 123 no such table: t2 ==== 1.20.10.4 SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 141 no such table: t2 ==== 1.20.10.5 SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 126 no such table: t2 ==== 1.20.10.6 SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 141 no such table: t2 ==== 1.20.11.1 SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 117 no such table: t2 ==== 1.20.11.2 SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 1.20.11.3 SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 1.20.11.4 SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 139 no such table: t2 ==== 1.20.11.5 SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 124 no such table: t2 ==== 1.20.11.6 SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 139 no such table: t2 ==== 1.20.12.1 SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 112 no such table: t2 ==== 1.20.12.2 SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 1.20.12.3 SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 116 no such table: t2 ==== 1.20.12.4 SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 1.20.12.5 SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 119 no such table: t2 ==== 1.20.12.6 SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 1.20.13.1 SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 111 no such table: t2 ==== 1.20.13.2 SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 129 no such table: t2 ==== 1.20.13.3 SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 115 no such table: t2 ==== 1.20.13.4 SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.20.13.5 SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 118 no such table: t2 ==== 1.20.13.6 SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 1.20.14.1 SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 137 no such table: t2 ==== 1.20.14.2 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 155 no such table: t2 ==== 1.20.14.3 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 141 no such table: t2 ==== 1.20.14.4 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 159 no such table: t2 ==== 1.20.14.5 SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 144 no such table: t2 ==== 1.20.14.6 SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 159 no such table: t2 ==== 1.20.14.7 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) @@ -6533,7 +6533,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 205 no such table: t2 ==== 1.20.14.8 SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) @@ -6541,7 +6541,7 @@ stmt 0 err 1 -1 no such table: t2 WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 205 no such table: t2 ==== 1.20.14.9 SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 @@ -6550,32 +6550,32 @@ stmt 0 err 1 -1 no such table: t2 win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) ORDER BY 1 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 229 no such table: t2 ==== 1.20.15.1 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 204 no such table: t2 ==== 1.20.15.2 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 0=1) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 202 no such table: t2 ==== 1.20.15.3 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE 1=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 222 no such table: t2 ==== 1.20.15.4 SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') FILTER (WHERE a%2=0) OVER win FROM t2 WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 224 no such table: t2 diff --git a/parser/testdata/window4.test b/parser/testdata/window4.test index dae7d52..6d9bb53 100644 --- a/parser/testdata/window4.test +++ b/parser/testdata/window4.test @@ -7,103 +7,103 @@ ---- stmt 0 ok stmt 27 ok -stmt 66 err 1 -1 no such table: t3 -stmt 124 err 1 -1 no such table: t3 +stmt 66 err 1 -1 124 no such table: t3 +stmt 124 err 1 -1 182 no such table: t3 ==== 1.1 SELECT a, ntile(1) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== 1.2 SELECT a, ntile(2) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== 1.3 SELECT a, ntile(3) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== 1.4 SELECT a, ntile(4) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== 1.5 SELECT a, ntile(5) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== 1.6 SELECT a, ntile(6) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== 1.7 SELECT a, ntile(7) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== 1.8 SELECT a, ntile(8) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== 1.9 SELECT a, ntile(9) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 48 no such table: t3 ==== 1.10 SELECT a, ntile(10) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 1.11 SELECT a, ntile(11) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 1.12 SELECT a, ntile(12) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 1.13 SELECT a, ntile(13) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 1.14 SELECT a, ntile(14) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 1.15 SELECT a, ntile(15) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 1.16 SELECT a, ntile(16) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 1.17 SELECT a, ntile(17) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 1.18 SELECT a, ntile(18) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 1.19 SELECT a, ntile(19) OVER (ORDER BY a) FROM t3 ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 49 no such table: t3 ==== 2.0 DROP TABLE IF EXISTS t4; @@ -121,58 +121,58 @@ stmt 0 err 1 -1 no such table: t3 ---- stmt 0 ok stmt 27 ok -stmt 88 err 1 -1 no such table: t4 -stmt 124 err 1 -1 no such table: t4 -stmt 160 err 1 -1 no such table: t4 -stmt 196 err 1 -1 no such table: t4 -stmt 233 err 1 -1 no such table: t4 -stmt 269 err 1 -1 no such table: t4 -stmt 305 err 1 -1 no such table: t4 -stmt 341 err 1 -1 no such table: t4 -stmt 377 err 1 -1 no such table: t4 -stmt 414 err 1 -1 no such table: t4 +stmt 88 err 1 -1 124 no such table: t4 +stmt 124 err 1 -1 160 no such table: t4 +stmt 160 err 1 -1 196 no such table: t4 +stmt 196 err 1 -1 233 no such table: t4 +stmt 233 err 1 -1 269 no such table: t4 +stmt 269 err 1 -1 305 no such table: t4 +stmt 305 err 1 -1 341 no such table: t4 +stmt 341 err 1 -1 377 no such table: t4 +stmt 377 err 1 -1 414 no such table: t4 +stmt 414 err 1 -1 451 no such table: t4 ==== 2.1 SELECT a, nth_value(b, c) OVER (ORDER BY a) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 55 no such table: t4 ==== 2.2.1 SELECT a, lead(b) OVER (ORDER BY a) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 47 no such table: t4 ==== 2.2.2 SELECT a, lead(b, 2) OVER (ORDER BY a) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 50 no such table: t4 ==== 2.2.3 SELECT a, lead(b, 3, 'abc') OVER (ORDER BY a) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 57 no such table: t4 ==== 2.3.1 SELECT a, lag(b) OVER (ORDER BY a) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 46 no such table: t4 ==== 2.3.2 SELECT a, lag(b, 2) OVER (ORDER BY a) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 49 no such table: t4 ==== 2.3.3 SELECT a, lag(b, 3, 'abc') OVER (ORDER BY a) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 56 no such table: t4 ==== 2.4.1 SELECT group_concat(b, '.') OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t4 ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 114 no such table: t4 ==== 3.0 DROP TABLE IF EXISTS t5; @@ -185,21 +185,21 @@ stmt 0 err 1 -1 no such table: t4 ---- stmt 0 ok stmt 27 ok -stmt 96 err 1 -1 no such table: t5 -stmt 141 err 1 -1 no such table: t5 -stmt 186 err 1 -1 no such table: t5 -stmt 231 err 1 -1 no such table: t5 -stmt 276 err 1 -1 no such table: t5 +stmt 96 err 1 -1 141 no such table: t5 +stmt 141 err 1 -1 186 no such table: t5 +stmt 186 err 1 -1 231 no such table: t5 +stmt 231 err 1 -1 276 no such table: t5 +stmt 276 err 1 -1 321 no such table: t5 ==== 3.1 SELECT a, nth_value(c, d) OVER (ORDER BY b) FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 55 no such table: t5 ==== 3.2 SELECT a, nth_value(c, d) OVER (PARTITION BY b ORDER BY a) FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 70 no such table: t5 ==== 3.3 SELECT a, count(*) OVER abc, count(*) OVER def FROM t5 @@ -207,49 +207,49 @@ stmt 0 err 1 -1 no such table: t5 def AS (ORDER BY a DESC) ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 136 no such table: t5 ==== 3.4 SELECT a, max(a) FILTER (WHERE (a%2)=0) OVER w FROM t5 WINDOW w AS (ORDER BY a) ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 86 no such table: t5 ==== 3.5.1 SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING) FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 89 no such table: t5 ==== 3.5.2 SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 89 no such table: t5 ==== 3.5.3 SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING) FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 89 no such table: t5 ==== 3.6.1 SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING) FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 89 no such table: t5 ==== 3.6.2 SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 89 no such table: t5 ==== 3.6.3 SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 FOLLOWING AND 0 FOLLOWING) FROM t5 ---- -stmt 0 err 1 -1 no such table: t5 +stmt 0 err 1 -1 89 no such table: t5 ==== 4.0 DROP TABLE IF EXISTS ttt; @@ -268,1059 +268,1059 @@ stmt 0 err 1 -1 no such table: t5 ---- stmt 0 ok stmt 28 ok -stmt 93 err 1 -1 no such table: ttt -stmt 128 err 1 -1 no such table: ttt -stmt 163 err 1 -1 no such table: ttt -stmt 198 err 1 -1 no such table: ttt -stmt 234 err 1 -1 no such table: ttt -stmt 269 err 1 -1 no such table: ttt -stmt 304 err 1 -1 no such table: ttt -stmt 340 err 1 -1 no such table: ttt -stmt 375 err 1 -1 no such table: ttt +stmt 93 err 1 -1 128 no such table: ttt +stmt 128 err 1 -1 163 no such table: ttt +stmt 163 err 1 -1 198 no such table: ttt +stmt 198 err 1 -1 234 no such table: ttt +stmt 234 err 1 -1 269 no such table: ttt +stmt 269 err 1 -1 304 no such table: ttt +stmt 304 err 1 -1 340 no such table: ttt +stmt 340 err 1 -1 375 no such table: ttt +stmt 375 err 1 -1 410 no such table: ttt ==== 4.1 SELECT max(c), max(b) OVER (ORDER BY b) FROM ttt GROUP BY b; ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 63 no such table: ttt ==== 4.2 SELECT max(b) OVER (ORDER BY max(c)) FROM ttt GROUP BY b; ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 60 no such table: ttt ==== 4.3 SELECT abs(max(b) OVER (ORDER BY b)) FROM ttt GROUP BY b; ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 60 no such table: ttt ==== 4.4 SELECT sum(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM ttt; ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 102 no such table: ttt ==== 4.5.1.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.1.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.2.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 219 no such table: ttt ==== 4.5.2.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 226 no such table: ttt ==== 4.5.3.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 202 no such table: ttt ==== 4.5.3.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 209 no such table: ttt ==== 4.5.4.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.4.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.5.1 SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 219 no such table: ttt ==== 4.5.5.2 SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 226 no such table: ttt ==== 4.5.6.1 SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 222 no such table: ttt ==== 4.5.6.2 SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 229 no such table: ttt ==== 4.5.7.1 SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.7.2 SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 212 no such table: ttt ==== 4.5.8.1 SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 219 no such table: ttt ==== 4.5.8.2 SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 226 no such table: ttt ==== 4.5.9.1 SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 202 no such table: ttt ==== 4.5.9.2 SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 209 no such table: ttt ==== 4.5.10.1 SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.10.2 SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 212 no such table: ttt ==== 4.5.11.1 SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 188 no such table: ttt ==== 4.5.11.2 SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 195 no such table: ttt ==== 4.5.12.1 SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 202 no such table: ttt ==== 4.5.12.2 SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 209 no such table: ttt ==== 4.5.13.1 SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.13.2 SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.14.1 SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 219 no such table: ttt ==== 4.5.14.2 SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 226 no such table: ttt ==== 4.5.15.1 SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 202 no such table: ttt ==== 4.5.15.2 SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 209 no such table: ttt ==== 4.5.16.1 SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.16.2 SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.17.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.17.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.18.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 224 no such table: ttt ==== 4.5.18.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 231 no such table: ttt ==== 4.5.19.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 208 no such table: ttt ==== 4.5.19.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 215 no such table: ttt ==== 4.5.20.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.20.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.21.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 224 no such table: ttt ==== 4.5.21.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 231 no such table: ttt ==== 4.5.22.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 232 no such table: ttt ==== 4.5.22.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 239 no such table: ttt ==== 4.5.23.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.23.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.24.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 224 no such table: ttt ==== 4.5.24.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 231 no such table: ttt ==== 4.5.25.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 208 no such table: ttt ==== 4.5.25.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 215 no such table: ttt ==== 4.5.26.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.26.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.27.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 200 no such table: ttt ==== 4.5.27.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 207 no such table: ttt ==== 4.5.28.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 208 no such table: ttt ==== 4.5.28.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 215 no such table: ttt ==== 4.5.29.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.29.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.30.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 224 no such table: ttt ==== 4.5.30.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 231 no such table: ttt ==== 4.5.31.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 208 no such table: ttt ==== 4.5.31.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 215 no such table: ttt ==== 4.5.32.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.32.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.33.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.33.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.34.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.34.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.35.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.35.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.36.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.36.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.37.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 200 no such table: ttt ==== 4.5.37.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 207 no such table: ttt ==== 4.5.38.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.38.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.39.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.39.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.40.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.40.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.41.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.41.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.42.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 200 no such table: ttt ==== 4.5.42.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 207 no such table: ttt ==== 4.5.43.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.43.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.44.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.44.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.45.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.45.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.46.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.46.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.47.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 200 no such table: ttt ==== 4.5.47.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 207 no such table: ttt ==== 4.5.48.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.48.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.49.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.49.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.50.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.50.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.51.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 198 no such table: ttt ==== 4.5.51.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 205 no such table: ttt ==== 4.5.52.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 200 no such table: ttt ==== 4.5.52.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 207 no such table: ttt ==== 4.5.53.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 200 no such table: ttt ==== 4.5.53.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 207 no such table: ttt ==== 4.5.54.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 200 no such table: ttt ==== 4.5.54.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 207 no such table: ttt ==== 4.5.55.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 200 no such table: ttt ==== 4.5.55.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 207 no such table: ttt ==== 4.5.56.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 200 no such table: ttt ==== 4.5.56.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 207 no such table: ttt ==== 4.5.57.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 202 no such table: ttt ==== 4.5.57.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 209 no such table: ttt ==== 4.5.58.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.58.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 223 no such table: ttt ==== 4.5.59.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 221 no such table: ttt ==== 4.5.59.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 228 no such table: ttt ==== 4.5.60.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 206 no such table: ttt ==== 4.5.60.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 213 no such table: ttt ==== 4.5.61.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 219 no such table: ttt ==== 4.5.61.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 226 no such table: ttt ==== 4.5.62.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 221 no such table: ttt ==== 4.5.62.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 228 no such table: ttt ==== 4.5.63.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 226 no such table: ttt ==== 4.5.63.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 233 no such table: ttt ==== 4.5.64.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 211 no such table: ttt ==== 4.5.64.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 218 no such table: ttt ==== 4.5.65.1 SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 224 no such table: ttt ==== 4.5.65.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 231 no such table: ttt ==== 4.5.66.1 SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 206 no such table: ttt ==== 4.5.66.2 SELECT sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 213 no such table: ttt ==== 4.5.67.1 SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 211 no such table: ttt ==== 4.5.67.2 SELECT sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 218 no such table: ttt ==== 4.5.68.1 SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 196 no such table: ttt ==== 4.5.68.2 SELECT sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 203 no such table: ttt ==== 4.5.69.1 SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 209 no such table: ttt ==== 4.5.69.2 SELECT sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.70.1 SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 219 no such table: ttt ==== 4.5.70.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 226 no such table: ttt ==== 4.5.71.1 SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 224 no such table: ttt ==== 4.5.71.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 231 no such table: ttt ==== 4.5.72.1 SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 209 no such table: ttt ==== 4.5.72.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 216 no such table: ttt ==== 4.5.73.1 SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 222 no such table: ttt ==== 4.5.73.2 SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM ttt ORDER BY a ---- -stmt 0 err 1 -1 no such table: ttt +stmt 0 err 1 -1 229 no such table: ttt ==== 7.0 DROP TABLE IF EXISTS t1; @@ -1333,29 +1333,29 @@ stmt 0 err 1 -1 no such table: ttt ---- stmt 0 ok stmt 27 ok -stmt 68 err 1 -1 no such table: t1 -stmt 99 err 1 -1 no such table: t1 -stmt 130 err 1 -1 no such table: t1 -stmt 161 err 1 -1 no such table: t1 -stmt 192 err 1 -1 no such table: t1 +stmt 68 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 224 no such table: t1 ==== 7.1 SELECT lead(y) OVER win FROM t1 WINDOW win AS (ORDER BY x) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 64 no such table: t1 ==== 7.2 SELECT lead(y, 2) OVER win FROM t1 WINDOW win AS (ORDER BY x) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 67 no such table: t1 ==== 7.3 SELECT lead(y, 3, -1) OVER win FROM t1 WINDOW win AS (ORDER BY x) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 71 no such table: t1 ==== 7.4 SELECT @@ -1363,7 +1363,7 @@ stmt 0 err 1 -1 no such table: t1 FROM t1 WINDOW win AS (ORDER BY x) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 89 no such table: t1 ==== 7.5 SELECT @@ -1373,7 +1373,7 @@ stmt 0 err 1 -1 no such table: t1 FROM t1 WINDOW win AS (ORDER BY x) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 127 no such table: t1 ==== 8.0 DROP TABLE IF EXISTS t1; @@ -1384,9 +1384,9 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 90 err 1 -1 no such table: t1 -stmt 127 err 1 -1 no such table: t1 -stmt 164 err 1 -1 no such table: t1 +stmt 90 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 164 no such table: t1 +stmt 164 err 1 -1 204 no such table: t1 ==== 8.1 SELECT row_number() OVER win, @@ -1395,7 +1395,7 @@ stmt 164 err 1 -1 no such table: t1 FROM t1 WINDOW win AS (ORDER BY a) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 132 no such table: t1 ==== 8.2 SELECT row_number() OVER win, @@ -1412,7 +1412,7 @@ stmt 0 err 1 -1 no such table: t1 FROM t1 WINDOW win AS (ORDER BY a) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 387 no such table: t1 ==== 9.0 DROP TABLE IF EXISTS t2; @@ -1421,27 +1421,27 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 57 err 1 -1 no such table: t2 +stmt 57 err 1 -1 115 no such table: t2 ==== 9.1 SELECT rank() OVER () FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 33 no such table: t2 ==== 9.2 SELECT dense_rank() OVER (PARTITION BY x) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 53 no such table: t2 ==== 9.4 SELECT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 59 no such table: t2 ==== 9.5 SELECT DISTINCT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 68 no such table: t2 ==== 10.0 DROP TABLE IF EXISTS t7; @@ -1452,22 +1452,22 @@ stmt 0 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 27 ok -stmt 92 err 1 -1 no such table: t7 +stmt 92 err 1 -1 206 no such table: t7 ==== 10.1 SELECT id, min(b) OVER (PARTITION BY a ORDER BY id) FROM t7; ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 63 no such table: t7 ==== 10.2 SELECT id, lead(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7; ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 68 no such table: t7 ==== 10.3 SELECT id, lag(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7; ---- -stmt 0 err 1 -1 no such table: t7 +stmt 0 err 1 -1 67 no such table: t7 ==== 11.0 DROP VIEW IF EXISTS v8; @@ -1480,14 +1480,14 @@ stmt 0 err 1 -1 no such table: t7 stmt 0 ok stmt 26 ok stmt 53 ok -stmt 90 err 1 -1 no such table: t8 -stmt 120 err 1 -1 no such table: t8 -stmt 150 err 1 -1 no such table: t8 +stmt 90 err 1 -1 120 no such table: t8 +stmt 120 err 1 -1 150 no such table: t8 +stmt 150 err 1 -1 181 no such table: t8 ==== 11.1 SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8; ---- -stmt 0 err 1 -1 no such table: t8 +stmt 0 err 1 -1 61 no such table: t8 ==== 11.2 CREATE VIEW v8 AS SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8; @@ -1497,34 +1497,34 @@ stmt 0 ok SELECT * FROM v8; ---- -stmt 0 err 1 -1 no such table: v8 +stmt 0 err 1 -1 20 no such table: v8 ==== 11.4 SELECT * FROM ( SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8 ) sub; ---- -stmt 0 err 1 -1 no such table: t8 +stmt 0 err 1 -1 89 no such table: t8 ==== 11.5 SELECT sum( min(t) ) OVER () FROM t8 GROUP BY total; ---- -stmt 0 err 1 -1 no such table: t8 +stmt 0 err 1 -1 55 no such table: t8 ==== 11.5.dup1 SELECT sum( max(t) ) OVER () FROM t8 GROUP BY total; ---- -stmt 0 err 1 -1 no such table: t8 +stmt 0 err 1 -1 55 no such table: t8 ==== 11.7 SELECT sum( min(t) ) OVER () FROM t8; ---- -stmt 0 err 1 -1 no such table: t8 +stmt 0 err 1 -1 40 no such table: t8 ==== 11.8 SELECT sum( max(t) ) OVER () FROM t8; ---- -stmt 0 err 1 -1 no such table: t8 +stmt 0 err 1 -1 40 no such table: t8 ==== 12.0 DROP TABLE IF EXISTS t2; @@ -1533,9 +1533,9 @@ stmt 0 err 1 -1 no such table: t8 ---- stmt 0 ok stmt 27 ok -stmt 57 err 1 -1 no such table: t2 +stmt 57 err 1 -1 95 no such table: t2 ==== 12.1 SELECT (SELECT min(a) OVER ()) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 42 no such table: t2 diff --git a/parser/testdata/window5.test b/parser/testdata/window5.test index 1af840e..32400e9 100644 --- a/parser/testdata/window5.test +++ b/parser/testdata/window5.test @@ -9,36 +9,36 @@ INSERT INTO t1 VALUES(3, 'f'); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 58 err 1 -1 no such table: t1 -stmt 91 err 1 -1 no such table: t1 -stmt 124 err 1 -1 no such table: t1 -stmt 157 err 1 -1 no such table: t1 -stmt 190 err 1 -1 no such table: t1 +stmt 25 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 223 no such table: t1 ==== 1.1 SELECT win(a) OVER (ORDER BY b), median(a) OVER (ORDER BY b) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 72 no such table: t1 ==== 2.0 SELECT sumint(a) OVER (ORDER BY rowid) FROM t1 ORDER BY rowid; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 65 no such table: t1 ==== 2.1 SELECT sumint(a) OVER (ORDER BY rowid ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1 ORDER BY rowid; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 106 no such table: t1 ==== 3.0 SELECT sum(a) OVER (ORDER BY b ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 90 no such table: t1 ==== 3.1 SELECT sum(a) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 25 no such table: t1 diff --git a/parser/testdata/window6.test b/parser/testdata/window6.test index 80e749a..4ad0110 100644 --- a/parser/testdata/window6.test +++ b/parser/testdata/window6.test @@ -2,16 +2,16 @@ SELECT window('hello world'); ---- -stmt 0 err 1 10 no such function: window +stmt 0 err 1 10 32 no such function: window ==== 3.0 CREATE TABLE window(x COLLATE window); INSERT INTO window VALUES('bob'), ('alice'), ('cate'); SELECT * FROM window ORDER BY x COLLATE window; ---- -stmt 0 err 1 -1 no such collation sequence: window -stmt 41 err 1 -1 no such table: window -stmt 98 err 1 -1 no such table: window +stmt 0 err 1 -1 40 no such collation sequence: window +stmt 41 err 1 -1 98 no such table: window +stmt 98 err 1 -1 148 no such table: window ==== 3.1 DROP TABLE window; @@ -20,11 +20,11 @@ stmt 98 err 1 -1 no such table: window CREATE INDEX window ON x1(x COLLATE window); SELECT * FROM x1 ORDER BY x COLLATE window; ---- -stmt 0 err 1 -1 no such table: window +stmt 0 err 1 -1 21 no such table: window stmt 21 ok -stmt 43 err 1 -1 no such table: x1 -stmt 96 err 1 -1 no such table: main.x1 -stmt 143 err 1 -1 no such table: x1 +stmt 43 err 1 -1 96 no such table: x1 +stmt 96 err 1 -1 143 no such table: main.x1 +stmt 143 err 1 -1 189 no such table: x1 ==== 4.0 CREATE TABLE t4(x, y); ---- @@ -33,7 +33,7 @@ stmt 0 ok SELECT * FROM t4 window, t4; ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 32 no such table: t4 ==== 5.0 CREATE TABLE over(x, over); @@ -44,35 +44,35 @@ stmt 0 err 1 -1 no such table: t4 ---- stmt 0 ok stmt 30 ok -stmt 64 err 1 -1 no such table: over -stmt 113 err 1 -1 no such table: window -stmt 164 err 1 -1 no such table: over +stmt 64 err 1 -1 113 no such table: over +stmt 113 err 1 -1 164 no such table: window +stmt 164 err 1 -1 196 no such table: over ==== 5.1 SELECT sum(x) over over FROM over WINDOW over AS () ---- -stmt 0 err 1 -1 no such table: over +stmt 0 err 1 -1 55 no such table: over ==== 5.2 SELECT sum(over) over over over FROM over over WINDOW over AS (ORDER BY over) ---- -stmt 0 err 1 -1 no such table: over +stmt 0 err 1 -1 81 no such table: over ==== 5.3 SELECT sum(over) over over over FROM over over WINDOW over AS (ORDER BY over); ---- -stmt 0 err 1 -1 no such table: over +stmt 0 err 1 -1 81 no such table: over ==== 5.4 SELECT sum(window) OVER window window FROM window window window window AS (ORDER BY window); ---- -stmt 0 err 1 -1 no such table: window +stmt 0 err 1 -1 95 no such table: window ==== 5.5 SELECT count(*) OVER win FROM over WINDOW win AS (ORDER BY x ROWS BETWEEN +2 FOLLOWING AND +3 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: over +stmt 0 err 1 -1 110 no such table: over ==== 6.0 SELECT LIKE('!', '', '!') x WHERE x; @@ -87,7 +87,7 @@ stmt 0 ok SELECT LIKE("!","","!")""window""; ---- -stmt 0 err 1 30 near "window": syntax error +stmt 0 err 1 30 36 near "window": syntax error ==== 7.0 CREATE TABLE t1(x TEXT); @@ -95,13 +95,13 @@ stmt 0 err 1 30 near "window": syntax error INSERT INTO t1 VALUES(''); ---- stmt 0 ok -stmt 27 err 1 -1 no such table: main.t1 -stmt 70 err 1 -1 no such table: t1 +stmt 27 err 1 -1 70 no such table: main.t1 +stmt 70 err 1 -1 99 no such table: t1 ==== 7.1 SELECT count(*) FROM t1 WHERE x LIKE '!' ESCAPE '!'; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 57 no such table: t1 ==== 8.0 CREATE TABLE IF NOT EXISTS "sample" ( @@ -114,7 +114,7 @@ stmt 0 err 1 -1 no such table: t1 VALUES (1, 10.), (1, 20.), (2, 1.), (2, 3.), (3, 100.); ---- stmt 0 ok -stmt 150 err 1 -1 no such table: sample +stmt 150 err 1 -1 250 no such table: sample ==== 8.1 SELECT "counter", "value", RANK() OVER w AS "rank" @@ -122,7 +122,7 @@ stmt 150 err 1 -1 no such table: sample WINDOW w AS (PARTITION BY "counter" ORDER BY "value" DESC) ORDER BY "counter", RANK() OVER w ---- -stmt 0 err 1 -1 no such table: sample +stmt 0 err 1 -1 169 no such table: sample ==== 8.2 SELECT "counter", "value", SUM("value") OVER @@ -130,7 +130,7 @@ stmt 0 err 1 -1 no such table: sample FROM "sample" ORDER BY "id" ---- -stmt 0 err 1 -1 no such table: sample +stmt 0 err 1 -1 120 no such table: sample ==== 8.3 SELECT SUM("value") OVER @@ -138,7 +138,7 @@ stmt 0 err 1 -1 no such table: sample FROM "sample" ORDER BY "id" ---- -stmt 0 err 1 -1 no such table: sample +stmt 0 err 1 -1 124 no such table: sample ==== 9.0 WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) @@ -151,25 +151,25 @@ stmt 0 ok WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) SELECT count(DISTINCT x) OVER (ORDER BY x) FROM c; ---- -stmt 0 err 1 -1 DISTINCT is not supported for window functions +stmt 0 err 1 -1 125 DISTINCT is not supported for window functions ==== 9.4 WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) SELECT count() OVER (ORDER BY x RANGE UNBOUNDED FOLLOWING) FROM c; ---- -stmt 0 err 1 126 near "FOLLOWING": syntax error +stmt 0 err 1 126 135 near "FOLLOWING": syntax error ==== 9.5 WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) SELECT count() OVER (ORDER BY x RANGE BETWEEN UNBOUNDED FOLLOWING AND UNBOUNDED FOLLOWING) FROM c; ---- -stmt 0 err 1 134 near "FOLLOWING": syntax error +stmt 0 err 1 134 143 near "FOLLOWING": syntax error ==== 9.6 WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) SELECT count() OVER (ORDER BY x RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED PRECEDING) FROM c; ---- -stmt 0 err 1 158 near "PRECEDING": syntax error +stmt 0 err 1 158 167 near "PRECEDING": syntax error ==== 9.8.1 WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) @@ -202,38 +202,38 @@ stmt 0 ok INSERT INTO t3(x,y) VALUES(10,'ten'),('15','fifteen'),(30,'thirty'); ---- stmt 0 ok -stmt 26 err 1 -1 no such table: t1 +stmt 26 err 1 -1 90 no such table: t1 stmt 90 ok -stmt 127 err 1 -1 no such table: t3 +stmt 127 err 1 -1 198 no such table: t3 ==== 11.1 SELECT a, (SELECT y FROM t3 WHERE x=a) FROM t1 ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 61 no such table: t1 ==== 11.2 SELECT a, (SELECT y FROM t3 WHERE x=a), sum(a) OVER (ORDER BY a) FROM t1 ORDER BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 91 no such table: t1 ==== 11.3.1 SELECT a, sum(a) OVER win FROM t1 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 115 no such table: t1 ==== 11.3.2 SELECT a, sum(a) OVER win FROM t1 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 0 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 115 no such table: t1 ==== 11.3.3 SELECT a, sum(a) OVER win FROM t1 WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 115 no such table: t1 ==== 11.4.1 SELECT y, group_concat(y, '.') OVER win FROM t3 @@ -241,4 +241,4 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY y RANGE BETWEEN UNBOUNDED PRECEDING AND 10 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 diff --git a/parser/testdata/window7.test b/parser/testdata/window7.test index 4b6b445..5746917 100644 --- a/parser/testdata/window7.test +++ b/parser/testdata/window7.test @@ -19,65 +19,65 @@ ---- stmt 0 ok stmt 27 ok -stmt 68 err 1 -1 no such table: t3 +stmt 68 err 1 -1 1048 no such table: t3 ==== 1.1 SELECT a, sum(b) FROM t3 GROUP BY a ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 50 no such table: t3 ==== 1.2 SELECT a, sum(b) OVER ( ORDER BY a GROUPS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t3 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 108 no such table: t3 ==== 1.3 SELECT a, sum(b) OVER ( ORDER BY a GROUPS BETWEEN 0 PRECEDING AND 0 FOLLOWING ) FROM t3 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 108 no such table: t3 ==== 1.4 SELECT a, sum(b) OVER ( ORDER BY a GROUPS BETWEEN 2 PRECEDING AND 2 FOLLOWING ) FROM t3 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 108 no such table: t3 ==== 1.5 SELECT a, sum(b) OVER ( ORDER BY a RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING ) FROM t3 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 107 no such table: t3 ==== 1.6 SELECT a, sum(b) OVER ( ORDER BY a RANGE BETWEEN 2 PRECEDING AND 2 FOLLOWING ) FROM t3 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 107 no such table: t3 ==== 1.7 SELECT a, sum(b) OVER ( ORDER BY a RANGE BETWEEN 2 PRECEDING AND 1 FOLLOWING ) FROM t3 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 107 no such table: t3 ==== 1.8.1 SELECT a, sum(b) OVER ( ORDER BY a RANGE BETWEEN 0 PRECEDING AND 1 FOLLOWING ) FROM t3 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 107 no such table: t3 ==== 1.8.2 SELECT a, sum(b) OVER ( ORDER BY a DESC RANGE BETWEEN 0 PRECEDING AND 1 FOLLOWING ) FROM t3 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 112 no such table: t3 diff --git a/parser/testdata/window8.test b/parser/testdata/window8.test index 97ce0ec..1ea2a43 100644 --- a/parser/testdata/window8.test +++ b/parser/testdata/window8.test @@ -33,42 +33,42 @@ ---- stmt 0 ok stmt 27 ok -stmt 73 err 1 -1 no such table: t3 +stmt 73 err 1 -1 1751 no such table: t3 ==== 1.1.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.1.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.1.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.1.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.1.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.1.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.1.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.1.8 SELECT a, b, @@ -78,42 +78,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.2.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.2.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.2.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.2.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.2.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.2.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.2.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.2.8 SELECT a, b, @@ -123,42 +123,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.3.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.3.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.3.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.3.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.3.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.3.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.3.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.3.8 SELECT a, b, @@ -168,42 +168,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.4.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 127 no such table: t3 ==== 1.4.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.4.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 127 no such table: t3 ==== 1.4.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.4.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.4.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 147 no such table: t3 ==== 1.4.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 149 no such table: t3 ==== 1.4.8 SELECT a, b, @@ -213,42 +213,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 461 no such table: t3 ==== 1.5.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.5.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.5.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.5.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.5.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.5.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.5.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.5.8 SELECT a, b, @@ -258,42 +258,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.6.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.6.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.6.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.6.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.6.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.6.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.6.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.6.8 SELECT a, b, @@ -303,42 +303,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.7.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.7.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.7.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.7.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.7.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.7.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.7.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.7.8 SELECT a, b, @@ -348,42 +348,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.8.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.8.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.8.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.8.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.8.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.8.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.8.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.8.8 SELECT a, b, @@ -393,42 +393,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.9.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.9.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.9.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.9.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.9.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.9.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.9.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.9.8 SELECT a, b, @@ -438,42 +438,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.10.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.10.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.10.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.10.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.10.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.10.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.10.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.10.8 SELECT a, b, @@ -483,42 +483,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.11.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 127 no such table: t3 ==== 1.11.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.11.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 127 no such table: t3 ==== 1.11.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.11.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.11.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 147 no such table: t3 ==== 1.11.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 149 no such table: t3 ==== 1.11.8 SELECT a, b, @@ -528,42 +528,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 461 no such table: t3 ==== 1.12.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.12.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.12.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.12.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.12.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.12.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.12.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.12.8 SELECT a, b, @@ -573,42 +573,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.13.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.13.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.13.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.13.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.13.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.13.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.13.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.13.8 SELECT a, b, @@ -618,42 +618,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.14.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.14.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 123 no such table: t3 ==== 1.14.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.14.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 123 no such table: t3 ==== 1.14.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 123 no such table: t3 ==== 1.14.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.14.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 143 no such table: t3 ==== 1.14.8 SELECT a, b, @@ -663,42 +663,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 437 no such table: t3 ==== 1.15.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 127 no such table: t3 ==== 1.15.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.15.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 127 no such table: t3 ==== 1.15.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.15.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.15.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 147 no such table: t3 ==== 1.15.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 149 no such table: t3 ==== 1.15.8 SELECT a, b, @@ -708,42 +708,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 461 no such table: t3 ==== 1.16.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.16.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.16.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.16.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.16.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.16.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.16.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.16.8 SELECT a, b, @@ -753,42 +753,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.17.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.17.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.17.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.17.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.17.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.17.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.17.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.17.8 SELECT a, b, @@ -798,42 +798,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.18.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.18.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.18.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 119 no such table: t3 ==== 1.18.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.18.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 121 no such table: t3 ==== 1.18.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 139 no such table: t3 ==== 1.18.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 141 no such table: t3 ==== 1.18.8 SELECT a, b, @@ -843,42 +843,42 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 429 no such table: t3 ==== 1.19.1 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 127 no such table: t3 ==== 1.19.2 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.19.3 SELECT a, b, rank() OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 127 no such table: t3 ==== 1.19.4 SELECT a, b, max(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.19.5 SELECT a, b, min(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 129 no such table: t3 ==== 1.19.6 SELECT a, b, sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 147 no such table: t3 ==== 1.19.7 SELECT a, b, sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 149 no such table: t3 ==== 1.19.8 SELECT a, b, @@ -888,7 +888,7 @@ stmt 0 err 1 -1 no such table: t3 sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t3 ORDER BY 1, 2, 3; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 461 no such table: t3 ==== 2.1.1 SELECT row_number() OVER win @@ -898,7 +898,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 177 no such table: t3 ==== 2.1.2 SELECT nth_value(c, 14) OVER win @@ -908,7 +908,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 181 no such table: t3 ==== 2.1.3 SELECT min(c) OVER win, max(c) OVER win, sum(c) OVER win FROM t3 @@ -917,7 +917,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS ) ORDER BY a, b, c; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 209 no such table: t3 ==== 2.2.1 SELECT row_number() OVER win @@ -927,7 +927,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 179 no such table: t3 ==== 2.2.2 SELECT nth_value(c, 14) OVER win @@ -937,7 +937,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 183 no such table: t3 ==== 2.2.3 SELECT min(c) OVER win, max(c) OVER win, sum(c) OVER win FROM t3 @@ -946,7 +946,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW ) ORDER BY a, b, c; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 211 no such table: t3 ==== 2.3.1 SELECT row_number() OVER win @@ -956,7 +956,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 173 no such table: t3 ==== 2.3.2 SELECT nth_value(c, 14) OVER win @@ -966,7 +966,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 177 no such table: t3 ==== 2.3.3 SELECT min(c) OVER win, max(c) OVER win, sum(c) OVER win FROM t3 @@ -975,7 +975,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE GROUP ) ORDER BY a, b, c; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 205 no such table: t3 ==== 2.4.1 SELECT row_number() OVER win @@ -985,7 +985,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 172 no such table: t3 ==== 2.4.2 SELECT nth_value(c, 14) OVER win @@ -995,7 +995,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 176 no such table: t3 ==== 2.4.3 SELECT min(c) OVER win, max(c) OVER win, sum(c) OVER win FROM t3 @@ -1004,7 +1004,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES ) ORDER BY a, b, c; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 204 no such table: t3 ==== 3.0 DROP TABLE IF EXISTS t1; @@ -1015,72 +1015,72 @@ stmt 0 err 1 -1 no such table: t3 ---- stmt 0 ok stmt 27 ok -stmt 65 err 1 -1 no such table: t1 +stmt 65 err 1 -1 180 no such table: t1 ==== 3.1 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 125 no such table: t1 ==== 3.2 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a RANGE BETWEEN 10 PRECEDING AND 5 PRECEDING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 126 no such table: t1 ==== 3.3 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 3 FOLLOWING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 125 no such table: t1 ==== 3.4 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a DESC RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 130 no such table: t1 ==== 3.5 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a DESC RANGE BETWEEN 10 PRECEDING AND 5 PRECEDING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 131 no such table: t1 ==== 3.6 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a DESC RANGE BETWEEN 2 FOLLOWING AND 3 FOLLOWING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 130 no such table: t1 ==== 3.7 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a RANGE BETWEEN 5.1 PRECEDING AND 5.3 FOLLOWING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 129 no such table: t1 ==== 3.8 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a RANGE BETWEEN 10.2 PRECEDING AND 5.4 PRECEDING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 130 no such table: t1 ==== 3.9 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a RANGE BETWEEN 2.6 FOLLOWING AND 3.5 FOLLOWING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 129 no such table: t1 ==== 3.10 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a DESC RANGE BETWEEN 5.7 PRECEDING AND 5.8 FOLLOWING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 134 no such table: t1 ==== 3.11 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND 5.9 PRECEDING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 140 no such table: t1 ==== 3.12 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a DESC RANGE BETWEEN 2.1 FOLLOWING AND UNBOUNDED FOLLOWING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 140 no such table: t1 ==== 3.13 SELECT CAST(a AS INTEGER), sum(b) OVER win FROM t1 WINDOW win AS ( ORDER BY a RANGE 5.1 PRECEDING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 103 no such table: t1 ==== 4.0 DROP TABLE IF EXISTS t1; @@ -1090,98 +1090,98 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 68 err 1 -1 no such table: t1 +stmt 68 err 1 -1 147 no such table: t1 ==== 4.1.1 SELECT sum(b) OVER ( ORDER BY a RANGE BETWEEN 5 PRECEDING AND 10 FOLLOWING ) FROM t1 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 105 no such table: t1 ==== 4.1.2 SELECT sum(b) OVER ( ORDER BY a DESC RANGE BETWEEN 5 PRECEDING AND 10 FOLLOWING ) FROM t1 ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 110 no such table: t1 ==== 4.2.1 SELECT sum(b) OVER ( ORDER BY a RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING ) FROM t1 ORDER BY 1 NULLS FIRST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 117 no such table: t1 ==== 4.2.2 SELECT sum(b) OVER ( ORDER BY a RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING ) FROM t1 ORDER BY 1 NULLS LAST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 116 no such table: t1 ==== 4.2.3 SELECT sum(b) OVER ( ORDER BY a DESC RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING ) FROM t1 ORDER BY 1 NULLS FIRST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 122 no such table: t1 ==== 4.2.4 SELECT sum(b) OVER ( ORDER BY a DESC RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING ) FROM t1 ORDER BY 1 NULLS LAST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 121 no such table: t1 ==== 4.3.1 SELECT sum(b) OVER ( ORDER BY a NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM t1 ORDER BY 1 NULLS FIRST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 137 no such table: t1 ==== 4.3.2 SELECT sum(b) OVER ( ORDER BY a NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM t1 ORDER BY 1 NULLS LAST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 135 no such table: t1 ==== 4.4.1 SELECT sum(b) OVER ( ORDER BY a NULLS FIRST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1 ORDER BY 1 NULLS FIRST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 127 no such table: t1 ==== 4.4.2 SELECT sum(b) OVER ( ORDER BY a NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1 ORDER BY 1 NULLS LAST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 125 no such table: t1 ==== 4.4.3 SELECT sum(b) OVER ( ORDER BY a DESC NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1 ORDER BY 1 NULLS FIRST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 131 no such table: t1 ==== 4.4.4 SELECT sum(b) OVER ( ORDER BY a DESC NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM t1 ORDER BY 1 NULLS LAST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 130 no such table: t1 ==== 4.5.1 SELECT sum(b) OVER ( ORDER BY a ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM t1 ORDER BY 1 NULLS LAST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 140 no such table: t1 ==== 4.5.2 SELECT sum(b) OVER ( @@ -1189,7 +1189,7 @@ stmt 0 err 1 -1 no such table: t1 BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM t1 ORDER BY 1 NULLS LAST; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 146 no such table: t1 ==== 5.0 INSERT INTO t3 VALUES @@ -1197,7 +1197,7 @@ stmt 0 err 1 -1 no such table: t1 ('JJ', NULL, 839), ('FF', NULL, 618), ('BB', NULL, 393), (NULL, 'bb', 629), (NULL, NULL, 667), (NULL, NULL, 870); ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 209 no such table: t3 ==== 5.1.1.1 SELECT max(c) OVER win, @@ -1207,7 +1207,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 257 no such table: t3 ==== 5.1.1.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1217,7 +1217,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 285 no such table: t3 ==== 5.1.2.1 SELECT max(c) OVER win, @@ -1228,7 +1228,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 289 no such table: t3 ==== 5.1.2.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1239,7 +1239,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 317 no such table: t3 ==== 5.1.3.1 SELECT max(c) OVER win, @@ -1250,7 +1250,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 295 no such table: t3 ==== 5.1.3.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1261,7 +1261,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 323 no such table: t3 ==== 5.1.4.1 SELECT max(c) OVER win, @@ -1271,7 +1271,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS FIRST GROUPS 6 PRECEDING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 249 no such table: t3 ==== 5.1.4.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1281,7 +1281,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS FIRST GROUPS 6 PRECEDING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 277 no such table: t3 ==== 5.1.5.1 SELECT max(c) OVER win, @@ -1291,7 +1291,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 272 no such table: t3 ==== 5.1.5.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1301,7 +1301,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 300 no such table: t3 ==== 5.1.6.1 SELECT max(c) OVER win, @@ -1311,7 +1311,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 272 no such table: t3 ==== 5.1.6.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1321,7 +1321,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 300 no such table: t3 ==== 5.1.7.1 SELECT max(c) OVER win, @@ -1332,7 +1332,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 317 no such table: t3 ==== 5.1.7.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1343,7 +1343,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 345 no such table: t3 ==== 5.1.8.1 SELECT max(c) OVER win, @@ -1353,7 +1353,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 257 no such table: t3 ==== 5.1.8.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1363,7 +1363,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 285 no such table: t3 ==== 5.1.9.1 SELECT max(c) OVER win, @@ -1374,7 +1374,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 288 no such table: t3 ==== 5.1.9.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1385,7 +1385,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 316 no such table: t3 ==== 5.1.10.1 SELECT max(c) OVER win, @@ -1396,7 +1396,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 295 no such table: t3 ==== 5.1.10.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1407,7 +1407,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 323 no such table: t3 ==== 5.1.11.1 SELECT max(c) OVER win, @@ -1417,7 +1417,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS LAST GROUPS 6 PRECEDING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 248 no such table: t3 ==== 5.1.11.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1427,7 +1427,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS LAST GROUPS 6 PRECEDING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 276 no such table: t3 ==== 5.1.12.1 SELECT max(c) OVER win, @@ -1437,7 +1437,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 271 no such table: t3 ==== 5.1.12.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1447,7 +1447,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 299 no such table: t3 ==== 5.1.13.1 SELECT max(c) OVER win, @@ -1457,7 +1457,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 271 no such table: t3 ==== 5.1.13.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1467,7 +1467,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 299 no such table: t3 ==== 5.1.14.1 SELECT max(c) OVER win, @@ -1478,7 +1478,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 314 no such table: t3 ==== 5.1.14.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1489,7 +1489,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 342 no such table: t3 ==== 5.2.1.1 SELECT max(c) OVER win, @@ -1499,7 +1499,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 259 no such table: t3 ==== 5.2.1.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1509,7 +1509,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 287 no such table: t3 ==== 5.2.2.1 SELECT max(c) OVER win, @@ -1520,7 +1520,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 291 no such table: t3 ==== 5.2.2.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1531,7 +1531,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 319 no such table: t3 ==== 5.2.3.1 SELECT max(c) OVER win, @@ -1542,7 +1542,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 297 no such table: t3 ==== 5.2.3.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1553,7 +1553,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 325 no such table: t3 ==== 5.2.4.1 SELECT max(c) OVER win, @@ -1563,7 +1563,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS FIRST GROUPS 6 PRECEDING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 251 no such table: t3 ==== 5.2.4.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1573,7 +1573,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS FIRST GROUPS 6 PRECEDING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 279 no such table: t3 ==== 5.2.5.1 SELECT max(c) OVER win, @@ -1583,7 +1583,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 274 no such table: t3 ==== 5.2.5.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1593,7 +1593,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 302 no such table: t3 ==== 5.2.6.1 SELECT max(c) OVER win, @@ -1603,7 +1603,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 274 no such table: t3 ==== 5.2.6.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1613,7 +1613,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 302 no such table: t3 ==== 5.2.7.1 SELECT max(c) OVER win, @@ -1624,7 +1624,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 319 no such table: t3 ==== 5.2.7.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1635,7 +1635,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 347 no such table: t3 ==== 5.2.8.1 SELECT max(c) OVER win, @@ -1645,7 +1645,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 259 no such table: t3 ==== 5.2.8.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1655,7 +1655,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 287 no such table: t3 ==== 5.2.9.1 SELECT max(c) OVER win, @@ -1666,7 +1666,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 290 no such table: t3 ==== 5.2.9.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1677,7 +1677,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 318 no such table: t3 ==== 5.2.10.1 SELECT max(c) OVER win, @@ -1688,7 +1688,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 297 no such table: t3 ==== 5.2.10.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1699,7 +1699,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 325 no such table: t3 ==== 5.2.11.1 SELECT max(c) OVER win, @@ -1709,7 +1709,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS LAST GROUPS 6 PRECEDING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 250 no such table: t3 ==== 5.2.11.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1719,7 +1719,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS LAST GROUPS 6 PRECEDING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 278 no such table: t3 ==== 5.2.12.1 SELECT max(c) OVER win, @@ -1729,7 +1729,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 273 no such table: t3 ==== 5.2.12.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1739,7 +1739,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 301 no such table: t3 ==== 5.2.13.1 SELECT max(c) OVER win, @@ -1749,7 +1749,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 273 no such table: t3 ==== 5.2.13.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1759,7 +1759,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 301 no such table: t3 ==== 5.2.14.1 SELECT max(c) OVER win, @@ -1770,7 +1770,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 316 no such table: t3 ==== 5.2.14.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1781,7 +1781,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 344 no such table: t3 ==== 5.3.1.1 SELECT max(c) OVER win, @@ -1791,7 +1791,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 253 no such table: t3 ==== 5.3.1.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1801,7 +1801,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 281 no such table: t3 ==== 5.3.2.1 SELECT max(c) OVER win, @@ -1812,7 +1812,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 285 no such table: t3 ==== 5.3.2.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1823,7 +1823,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 313 no such table: t3 ==== 5.3.3.1 SELECT max(c) OVER win, @@ -1834,7 +1834,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 291 no such table: t3 ==== 5.3.3.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1845,7 +1845,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 319 no such table: t3 ==== 5.3.4.1 SELECT max(c) OVER win, @@ -1855,7 +1855,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS FIRST GROUPS 6 PRECEDING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 245 no such table: t3 ==== 5.3.4.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1865,7 +1865,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS FIRST GROUPS 6 PRECEDING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 273 no such table: t3 ==== 5.3.5.1 SELECT max(c) OVER win, @@ -1875,7 +1875,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 268 no such table: t3 ==== 5.3.5.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1885,7 +1885,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 296 no such table: t3 ==== 5.3.6.1 SELECT max(c) OVER win, @@ -1895,7 +1895,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 268 no such table: t3 ==== 5.3.6.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1905,7 +1905,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 296 no such table: t3 ==== 5.3.7.1 SELECT max(c) OVER win, @@ -1916,7 +1916,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 313 no such table: t3 ==== 5.3.7.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1927,7 +1927,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 341 no such table: t3 ==== 5.3.8.1 SELECT max(c) OVER win, @@ -1937,7 +1937,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 253 no such table: t3 ==== 5.3.8.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1947,7 +1947,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 281 no such table: t3 ==== 5.3.9.1 SELECT max(c) OVER win, @@ -1958,7 +1958,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 284 no such table: t3 ==== 5.3.9.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1969,7 +1969,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 312 no such table: t3 ==== 5.3.10.1 SELECT max(c) OVER win, @@ -1980,7 +1980,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 291 no such table: t3 ==== 5.3.10.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -1991,7 +1991,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 319 no such table: t3 ==== 5.3.11.1 SELECT max(c) OVER win, @@ -2001,7 +2001,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS LAST GROUPS 6 PRECEDING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 244 no such table: t3 ==== 5.3.11.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2011,7 +2011,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS LAST GROUPS 6 PRECEDING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 272 no such table: t3 ==== 5.3.12.1 SELECT max(c) OVER win, @@ -2021,7 +2021,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 267 no such table: t3 ==== 5.3.12.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2031,7 +2031,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 295 no such table: t3 ==== 5.3.13.1 SELECT max(c) OVER win, @@ -2041,7 +2041,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 267 no such table: t3 ==== 5.3.13.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2051,7 +2051,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 295 no such table: t3 ==== 5.3.14.1 SELECT max(c) OVER win, @@ -2062,7 +2062,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 310 no such table: t3 ==== 5.3.14.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2073,7 +2073,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 338 no such table: t3 ==== 5.4.1.1 SELECT max(c) OVER win, @@ -2083,7 +2083,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 252 no such table: t3 ==== 5.4.1.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2093,7 +2093,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 280 no such table: t3 ==== 5.4.2.1 SELECT max(c) OVER win, @@ -2104,7 +2104,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 284 no such table: t3 ==== 5.4.2.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2115,7 +2115,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 312 no such table: t3 ==== 5.4.3.1 SELECT max(c) OVER win, @@ -2126,7 +2126,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 290 no such table: t3 ==== 5.4.3.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2137,7 +2137,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 318 no such table: t3 ==== 5.4.4.1 SELECT max(c) OVER win, @@ -2147,7 +2147,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS FIRST GROUPS 6 PRECEDING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 244 no such table: t3 ==== 5.4.4.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2157,7 +2157,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS FIRST GROUPS 6 PRECEDING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 272 no such table: t3 ==== 5.4.5.1 SELECT max(c) OVER win, @@ -2167,7 +2167,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 267 no such table: t3 ==== 5.4.5.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2177,7 +2177,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 295 no such table: t3 ==== 5.4.6.1 SELECT max(c) OVER win, @@ -2187,7 +2187,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 267 no such table: t3 ==== 5.4.6.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2197,7 +2197,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 295 no such table: t3 ==== 5.4.7.1 SELECT max(c) OVER win, @@ -2208,7 +2208,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 312 no such table: t3 ==== 5.4.7.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2219,7 +2219,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 340 no such table: t3 ==== 5.4.8.1 SELECT max(c) OVER win, @@ -2229,7 +2229,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 252 no such table: t3 ==== 5.4.8.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2239,7 +2239,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 280 no such table: t3 ==== 5.4.9.1 SELECT max(c) OVER win, @@ -2250,7 +2250,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 283 no such table: t3 ==== 5.4.9.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2261,7 +2261,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 311 no such table: t3 ==== 5.4.10.1 SELECT max(c) OVER win, @@ -2272,7 +2272,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 290 no such table: t3 ==== 5.4.10.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2283,7 +2283,7 @@ stmt 0 err 1 -1 no such table: t3 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 318 no such table: t3 ==== 5.4.11.1 SELECT max(c) OVER win, @@ -2293,7 +2293,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS LAST GROUPS 6 PRECEDING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 243 no such table: t3 ==== 5.4.11.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2303,7 +2303,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY a NULLS LAST GROUPS 6 PRECEDING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 271 no such table: t3 ==== 5.4.12.1 SELECT max(c) OVER win, @@ -2313,7 +2313,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 266 no such table: t3 ==== 5.4.12.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2323,7 +2323,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 294 no such table: t3 ==== 5.4.13.1 SELECT max(c) OVER win, @@ -2333,7 +2333,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 266 no such table: t3 ==== 5.4.13.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2343,7 +2343,7 @@ stmt 0 err 1 -1 no such table: t3 WINDOW win AS ( ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 294 no such table: t3 ==== 5.4.14.1 SELECT max(c) OVER win, @@ -2354,7 +2354,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 309 no such table: t3 ==== 5.4.14.2 SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, @@ -2365,7 +2365,7 @@ stmt 0 err 1 -1 no such table: t3 ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ) ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 337 no such table: t3 ==== 6.0 DROP TABLE IF EXISTS t2; @@ -2376,9 +2376,9 @@ stmt 0 err 1 -1 no such table: t3 ---- stmt 0 ok stmt 27 ok -stmt 65 err 1 -1 no such table: t2 -stmt 101 err 1 -1 no such table: t2 -stmt 137 err 1 -1 no such table: t2 +stmt 65 err 1 -1 101 no such table: t2 +stmt 101 err 1 -1 137 no such table: t2 +stmt 137 err 1 -1 170 no such table: t2 ==== 6.1 SELECT group_concat(a, '.') OVER ( @@ -2386,7 +2386,7 @@ stmt 137 err 1 -1 no such table: t2 ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 121 no such table: t2 ==== 6.2 SELECT group_concat(a, '.') OVER ( @@ -2394,7 +2394,7 @@ stmt 0 err 1 -1 no such table: t2 ) FROM t2 ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 125 no such table: t2 ==== 7.0 DROP TABLE IF EXISTS t2; @@ -2409,12 +2409,12 @@ stmt 0 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 27 ok -stmt 68 err 1 -1 no such table: t2 -stmt 101 err 1 -1 no such table: t2 -stmt 135 err 1 -1 no such table: t2 -stmt 169 err 1 -1 no such table: t2 -stmt 203 err 1 -1 no such table: t2 -stmt 235 err 1 -1 no such table: t2 +stmt 68 err 1 -1 101 no such table: t2 +stmt 101 err 1 -1 135 no such table: t2 +stmt 135 err 1 -1 169 no such table: t2 +stmt 169 err 1 -1 203 no such table: t2 +stmt 203 err 1 -1 235 no such table: t2 +stmt 235 err 1 -1 267 no such table: t2 ==== 7.1.1 SELECT sum (a) OVER win FROM t2 @@ -2422,7 +2422,7 @@ stmt 235 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 7.1.2 SELECT sum (a) OVER win FROM t2 @@ -2430,7 +2430,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 7.1.3 SELECT sum (a) OVER win FROM t2 @@ -2438,7 +2438,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 7.1.4 SELECT sum (a) OVER win FROM t2 @@ -2446,7 +2446,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 7.1.5 SELECT sum (a) OVER win FROM t2 @@ -2454,7 +2454,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 7.1.6 SELECT sum (a) OVER win FROM t2 @@ -2462,7 +2462,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 7.1.7 SELECT sum (a) OVER win FROM t2 @@ -2470,7 +2470,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 7.1.8 SELECT sum (a) OVER win FROM t2 @@ -2478,7 +2478,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 7.1.9 SELECT sum (a) OVER win FROM t2 @@ -2486,7 +2486,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 7.2.1 SELECT min (a) OVER win FROM t2 @@ -2494,7 +2494,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 7.2.2 SELECT min (a) OVER win FROM t2 @@ -2502,7 +2502,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 7.2.3 SELECT min (a) OVER win FROM t2 @@ -2510,7 +2510,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 7.2.4 SELECT min (a) OVER win FROM t2 @@ -2518,7 +2518,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 7.2.5 SELECT min (a) OVER win FROM t2 @@ -2526,7 +2526,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 7.2.6 SELECT min (a) OVER win FROM t2 @@ -2534,7 +2534,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 7.2.7 SELECT min (a) OVER win FROM t2 @@ -2542,7 +2542,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 7.2.8 SELECT min (a) OVER win FROM t2 @@ -2550,7 +2550,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 7.2.9 SELECT min (a) OVER win FROM t2 @@ -2558,7 +2558,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 7.3.1 SELECT sum (a) OVER win FROM t2 @@ -2566,7 +2566,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 7.3.2 SELECT sum (a) OVER win FROM t2 @@ -2574,7 +2574,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 7.3.3 SELECT sum (a) OVER win FROM t2 @@ -2582,7 +2582,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 7.3.4 SELECT sum (a) OVER win FROM t2 @@ -2590,7 +2590,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 7.3.5 SELECT sum (a) OVER win FROM t2 @@ -2598,7 +2598,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 7.3.6 SELECT sum (a) OVER win FROM t2 @@ -2606,7 +2606,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 7.3.7 SELECT sum (a) OVER win FROM t2 @@ -2614,7 +2614,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 7.3.8 SELECT sum (a) OVER win FROM t2 @@ -2622,7 +2622,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 7.3.9 SELECT sum (a) OVER win FROM t2 @@ -2630,7 +2630,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 7.4.1 SELECT max (a) OVER win FROM t2 @@ -2638,7 +2638,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 135 no such table: t2 ==== 7.4.2 SELECT max (a) OVER win FROM t2 @@ -2646,7 +2646,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 7.4.3 SELECT max (a) OVER win FROM t2 @@ -2654,7 +2654,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 127 no such table: t2 ==== 7.4.4 SELECT max (a) OVER win FROM t2 @@ -2662,7 +2662,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 7.4.5 SELECT max (a) OVER win FROM t2 @@ -2670,7 +2670,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 128 no such table: t2 ==== 7.4.6 SELECT max (a) OVER win FROM t2 @@ -2678,7 +2678,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 130 no such table: t2 ==== 7.4.7 SELECT max (a) OVER win FROM t2 @@ -2686,7 +2686,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 ==== 7.4.8 SELECT max (a) OVER win FROM t2 @@ -2694,7 +2694,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 7.4.9 SELECT max (a) OVER win FROM t2 @@ -2702,7 +2702,7 @@ stmt 0 err 1 -1 no such table: t2 ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 134 no such table: t2 ==== 8.0 DROP TABLE IF EXISTS tx; @@ -2717,10 +2717,10 @@ stmt 0 err 1 -1 no such table: t2 ---- stmt 0 ok stmt 27 ok -stmt 69 err 1 -1 no such table: tx +stmt 69 err 1 -1 122 no such table: tx stmt 122 ok stmt 151 ok -stmt 202 err 1 -1 no such table: map +stmt 202 err 1 -1 311 no such table: map ==== 8.1 SELECT sum(a) OVER ( @@ -2729,7 +2729,7 @@ stmt 202 err 1 -1 no such table: map ) ORDER BY a ) FROM tx; ---- -stmt 0 err 1 -1 no such table: tx +stmt 0 err 1 -1 106 no such table: tx ==== 8.2 SELECT sum(a) OVER win FROM tx @@ -2739,7 +2739,7 @@ stmt 0 err 1 -1 no such table: tx ) ORDER BY a ); ---- -stmt 0 err 1 -1 no such table: tx +stmt 0 err 1 -1 126 no such table: tx ==== 8.3 WITH map2 AS ( @@ -2751,7 +2751,7 @@ stmt 0 err 1 -1 no such table: tx ) ORDER BY a ) FROM tx; ---- -stmt 0 err 1 -1 no such table: tx +stmt 0 err 1 -1 150 no such table: tx ==== 8.4 WITH map2 AS ( @@ -2764,7 +2764,7 @@ stmt 0 err 1 -1 no such table: tx ) ORDER BY a ); ---- -stmt 0 err 1 -1 no such table: tx +stmt 0 err 1 -1 170 no such table: tx ==== 9.1 DROP TABLE IF EXISTS t1; @@ -2784,7 +2784,7 @@ stmt 84 ok ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 112 no such table: t1 ==== 10.0 DROP TABLE IF EXISTS t1; @@ -2797,7 +2797,7 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 68 err 1 -1 no such table: t1 +stmt 68 err 1 -1 237 no such table: t1 ==== 10.1 SELECT @@ -2805,7 +2805,7 @@ stmt 68 err 1 -1 no such table: t1 FROM t1 WINDOW win AS (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 142 no such table: t1 ==== 10.2 SELECT @@ -2813,7 +2813,7 @@ stmt 0 err 1 -1 no such table: t1 FROM t1 WINDOW win AS (); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 91 no such table: t1 ==== 10.3 SELECT @@ -2821,7 +2821,7 @@ stmt 0 err 1 -1 no such table: t1 FROM t1 WINDOW win AS (ORDER BY a); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 101 no such table: t1 ==== 10.4 SELECT @@ -2829,7 +2829,7 @@ stmt 0 err 1 -1 no such table: t1 FROM t1 WINDOW win AS (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 122 no such table: t1 ==== 11.0 DROP TABLE IF EXISTS t2; @@ -2847,20 +2847,20 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 68 err 1 -1 no such table: t2 -stmt 100 err 1 -1 no such table: t2 -stmt 132 err 1 -1 no such table: t2 -stmt 164 err 1 -1 no such table: t2 -stmt 196 err 1 -1 no such table: t2 -stmt 228 err 1 -1 no such table: t2 -stmt 260 err 1 -1 no such table: t2 -stmt 292 err 1 -1 no such table: t2 -stmt 324 err 1 -1 no such table: t2 -stmt 356 err 1 -1 no such table: t2 +stmt 68 err 1 -1 100 no such table: t2 +stmt 100 err 1 -1 132 no such table: t2 +stmt 132 err 1 -1 164 no such table: t2 +stmt 164 err 1 -1 196 no such table: t2 +stmt 196 err 1 -1 228 no such table: t2 +stmt 228 err 1 -1 260 no such table: t2 +stmt 260 err 1 -1 292 no such table: t2 +stmt 292 err 1 -1 324 no such table: t2 +stmt 324 err 1 -1 356 no such table: t2 +stmt 356 err 1 -1 388 no such table: t2 ==== 11.1 SELECT a, min(b) FILTER (WHERE a%2 != 0) OVER win FROM t2 WINDOW win AS (ORDER BY a ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 133 no such table: t2 diff --git a/parser/testdata/window9.test b/parser/testdata/window9.test index 36cc668..3dcb739 100644 --- a/parser/testdata/window9.test +++ b/parser/testdata/window9.test @@ -13,22 +13,22 @@ stmt 0 ok INSERT INTO fruits (name, color) VALUES ('pear', 'YELLOW'); INSERT INTO fruits (name, color) VALUES ('PEAR', 'green'); ---- -stmt 0 err 1 -1 no such table: fruits -stmt 60 err 1 -1 no such table: fruits -stmt 123 err 1 -1 no such table: fruits -stmt 185 err 1 -1 no such table: fruits +stmt 0 err 1 -1 60 no such table: fruits +stmt 60 err 1 -1 123 no such table: fruits +stmt 123 err 1 -1 185 no such table: fruits +stmt 185 err 1 -1 246 no such table: fruits ==== 1.2 SELECT name, color, dense_rank() OVER (ORDER BY name) FROM fruits; ---- -stmt 0 err 1 -1 no such table: fruits +stmt 0 err 1 -1 69 no such table: fruits ==== 1.3 SELECT name, color, dense_rank() OVER (PARTITION BY name ORDER BY color) FROM fruits; ---- -stmt 0 err 1 -1 no such table: fruits +stmt 0 err 1 -1 94 no such table: fruits ==== 1.4 SELECT name, color, @@ -36,7 +36,7 @@ stmt 0 err 1 -1 no such table: fruits dense_rank() OVER (PARTITION BY name ORDER BY color) FROM fruits; ---- -stmt 0 err 1 -1 no such table: fruits +stmt 0 err 1 -1 133 no such table: fruits ==== 1.5 SELECT name, color, @@ -44,7 +44,7 @@ stmt 0 err 1 -1 no such table: fruits dense_rank() OVER (PARTITION BY name ORDER BY color) FROM fruits ORDER BY color; ---- -stmt 0 err 1 -1 no such table: fruits +stmt 0 err 1 -1 148 no such table: fruits ==== 2.0 CREATE TABLE t1(a BLOB, b INTEGER, c COLLATE nocase); @@ -52,28 +52,28 @@ stmt 0 err 1 -1 no such table: fruits INSERT INTO t1 VALUES(3, 4, 'ABC'); ---- stmt 0 ok -stmt 56 err 1 -1 no such table: t1 -stmt 94 err 1 -1 no such table: t1 +stmt 56 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 132 no such table: t1 ==== 2.1.1 SELECT c=='Abc' FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 27 no such table: t1 ==== 2.1.2 SELECT c=='Abc', rank() OVER (ORDER BY b) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 53 no such table: t1 ==== 2.2.1 SELECT b=='2' FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 25 no such table: t1 ==== 2.2.2 SELECT b=='2', rank() OVER (ORDER BY a) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 51 no such table: t1 ==== 3.0 CREATE TABLE t1(a); @@ -85,13 +85,13 @@ stmt 22 ok SELECT EXISTS(SELECT 1 FROM t1 ORDER BY sum(a) OVER ()) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 67 no such table: t1 ==== 3.2 SELECT sum(a) OVER () FROM t2 ORDER BY EXISTS(SELECT 1 FROM t2 ORDER BY sum(a) OVER ()); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 94 no such table: t2 ==== 3.3 SELECT a, sum(a) OVER (ORDER BY a DESC) FROM t2 @@ -99,7 +99,7 @@ stmt 0 err 1 -1 no such table: t2 SELECT 1 FROM t2 ORDER BY sum(a) OVER (ORDER BY a) ) OVER (ORDER BY a); ---- -stmt 0 err 1 130 near "OVER": syntax error +stmt 0 err 1 130 134 near "OVER": syntax error ==== 3.4 SELECT y, y+1, y+2 FROM ( @@ -110,38 +110,38 @@ stmt 0 err 1 130 near "OVER": syntax error ) AS y FROM t2 ); ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 184 no such table: t2 ==== 4.0 CREATE TABLE t1(a, b TEXT); INSERT INTO t1 VALUES('A', 1), ('A', 2), ('2', 1), ('2', 2); ---- stmt 0 ok -stmt 30 err 1 -1 no such table: t1 +stmt 30 err 1 -1 93 no such table: t1 ==== 4.1.1 SELECT b, b=count(*), '1,2' FROM t1 GROUP BY b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 68 no such table: t1 ==== 4.1.2 SELECT b, b=count(*), group_concat(b) OVER () FROM t1 GROUP BY b; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 68 no such table: t1 ==== 5.0 CREATE TABLE t1(a, b, c, d, e); CREATE INDEX i1 ON t1(a, b, c, d, e); ---- stmt 0 ok -stmt 34 err 1 -1 no such table: main.t1 +stmt 34 err 1 -1 74 no such table: main.t1 ==== 6.0 CREATE TABLE t0(c0); INSERT INTO t0(c0) VALUES (0); ---- stmt 0 ok -stmt 23 err 1 -1 no such table: t0 +stmt 23 err 1 -1 56 no such table: t0 ==== 6.1 SELECT * FROM t0 WHERE @@ -152,7 +152,7 @@ stmt 23 err 1 -1 no such table: t0 SELECT MIN(c0) OVER (), CUME_DIST() OVER () FROM t0 ) <=1; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 182 no such table: t0 ==== 6.2 SELECT * FROM t0 WHERE EXISTS ( @@ -160,7 +160,7 @@ stmt 0 err 1 -1 no such table: t0 ) BETWEEN 1 AND 1; ---- -stmt 0 err 1 -1 no such table: t0 +stmt 0 err 1 -1 114 no such table: t0 ==== 7.0 DROP TABLE IF EXISTS t1; @@ -173,31 +173,31 @@ stmt 0 err 1 -1 no such table: t0 ---- stmt 0 ok stmt 27 ok -stmt 52 err 1 -1 no such table: t1 -stmt 84 err 1 -1 no such table: t1 -stmt 116 err 1 -1 no such table: t1 -stmt 147 err 1 -1 no such table: t1 -stmt 178 err 1 -1 no such table: t1 +stmt 52 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 116 no such table: t1 +stmt 116 err 1 -1 147 no such table: t1 +stmt 147 err 1 -1 178 no such table: t1 +stmt 178 err 1 -1 209 no such table: t1 ==== 7.1 SELECT avg(x) OVER (ORDER BY y) AS z FROM t1 ORDER BY z ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 59 no such table: t1 ==== 7.2 SELECT avg(x) OVER (ORDER BY y) z FROM t1 ORDER BY (z IS y); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 63 no such table: t1 ==== 7.3 SELECT avg(x) OVER (ORDER BY y) z FROM t1 ORDER BY (y IS z); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 63 no such table: t1 ==== 7.4 SELECT avg(x) OVER (ORDER BY y) z FROM t1 ORDER BY z + 0.0; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 62 no such table: t1 ==== 8.1.1 CREATE TABLE t1(a, b); @@ -205,13 +205,13 @@ stmt 0 err 1 -1 no such table: t1 SELECT min( sum(a) ) OVER () FROM t1; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 64 err 1 -1 no such table: t1 +stmt 25 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 104 no such table: t1 ==== 8.1.2 SELECT min( sum(a) ) OVER () FROM t1 GROUP BY a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 51 no such table: t1 ==== 8.2 CREATE VIEW v1 AS @@ -226,7 +226,7 @@ stmt 0 ok SELECT min( max((SELECT x FROM v1)) ) OVER() ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 48 no such table: v1 ==== 8.4 SELECT( @@ -235,7 +235,7 @@ stmt 0 err 1 -1 no such table: v1 ) FROM v1; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 98 no such table: v1 ==== 9.0 CREATE TABLE t1(a, b, c); @@ -245,10 +245,10 @@ stmt 0 err 1 -1 no such table: v1 INSERT INTO t1 VALUES('FF','bb',938); ---- stmt 0 ok -stmt 28 err 1 -1 no such table: t1 -stmt 68 err 1 -1 no such table: t1 -stmt 108 err 1 -1 no such table: t1 -stmt 148 err 1 -1 no such table: t1 +stmt 28 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 188 no such table: t1 ==== 9.1 SELECT sum(c) OVER ( @@ -256,7 +256,7 @@ stmt 148 err 1 -1 no such table: t1 ) FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 100 no such table: t1 ==== 10.0 CREATE TABLE t1(a, b); @@ -268,37 +268,37 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES(6, 'f'); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 58 err 1 -1 no such table: t1 -stmt 91 err 1 -1 no such table: t1 -stmt 124 err 1 -1 no such table: t1 -stmt 157 err 1 -1 no such table: t1 -stmt 190 err 1 -1 no such table: t1 +stmt 25 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 223 no such table: t1 ==== 10.1 SELECT a, min(b) OVER win FROM t1 WINDOW win AS (ORDER BY a ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 109 no such table: t1 ==== 10.2 SELECT a, min(b) FILTER (WHERE a%2) OVER win FROM t1 WINDOW win AS (ORDER BY a ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 128 no such table: t1 ==== 10.3 SELECT a, min(b) FILTER (WHERE (a%2)=0) OVER win FROM t1 WINDOW win AS (ORDER BY a ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 132 no such table: t1 ==== 10.4 SELECT a, nth_value(b, 1) FILTER (WHERE (a%2)=0) OVER win FROM t1 WINDOW win AS (ORDER BY a ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 141 no such table: t1 diff --git a/parser/testdata/windowA.test b/parser/testdata/windowA.test index 0d5ece3..e9ac414 100644 --- a/parser/testdata/windowA.test +++ b/parser/testdata/windowA.test @@ -11,7 +11,7 @@ (7, 'N', NULL); ---- stmt 0 ok -stmt 62 err 1 -1 no such table: t1 +stmt 62 err 1 -1 219 no such table: t1 ==== 1.1 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -20,7 +20,7 @@ stmt 62 err 1 -1 no such table: t1 RANGE BETWEEN 2.50 PRECEDING AND 2.25 FOLLOWING) ORDER BY +d DESC NULLS LAST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 199 no such table: t1 ==== 1.2 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -29,7 +29,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN 2.50 PRECEDING AND 2.25 FOLLOWING) ORDER BY +d DESC NULLS FIRST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 201 no such table: t1 ==== 1.3 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -38,7 +38,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN 2.50 PRECEDING AND UNBOUNDED FOLLOWING) ORDER BY +d DESC NULLS LAST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 204 no such table: t1 ==== 1.4 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -47,7 +47,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN 2.50 PRECEDING AND UNBOUNDED FOLLOWING) ORDER BY +d DESC NULLS FIRST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 206 no such table: t1 ==== 1.5 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -56,7 +56,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN 2.50 PRECEDING AND CURRENT ROW) ORDER BY +d DESC NULLS LAST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 196 no such table: t1 ==== 1.6 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -65,7 +65,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN 2.50 PRECEDING AND CURRENT ROW) ORDER BY +d DESC NULLS FIRST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 198 no such table: t1 ==== 2.1 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -74,7 +74,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN UNBOUNDED PRECEDING AND 2.25 FOLLOWING) ORDER BY +d DESC NULLS LAST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 204 no such table: t1 ==== 2.2 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -83,7 +83,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN UNBOUNDED PRECEDING AND 2.25 FOLLOWING) ORDER BY +d DESC NULLS FIRST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 206 no such table: t1 ==== 2.3 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -92,7 +92,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ORDER BY +d DESC NULLS LAST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 209 no such table: t1 ==== 2.4 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -101,7 +101,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ORDER BY +d DESC NULLS FIRST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 211 no such table: t1 ==== 2.5 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -110,7 +110,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ORDER BY +d DESC NULLS LAST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 201 no such table: t1 ==== 2.6 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -119,7 +119,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ORDER BY +d DESC NULLS FIRST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 203 no such table: t1 ==== 3.1 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -128,7 +128,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN CURRENT ROW AND 2.25 FOLLOWING) ORDER BY +d DESC NULLS LAST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 196 no such table: t1 ==== 3.2 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -137,7 +137,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN CURRENT ROW AND 2.25 FOLLOWING) ORDER BY +d DESC NULLS FIRST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 198 no such table: t1 ==== 3.3 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -146,7 +146,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ORDER BY +d DESC NULLS LAST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 201 no such table: t1 ==== 3.4 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -155,7 +155,7 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) ORDER BY +d DESC NULLS FIRST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 203 no such table: t1 ==== 4.0 SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 @@ -164,4 +164,4 @@ stmt 0 err 1 -1 no such table: t1 RANGE BETWEEN 2.50 PRECEDING AND 0.5 PRECEDING) ORDER BY +d DESC NULLS FIRST, +a; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 200 no such table: t1 diff --git a/parser/testdata/windowB.test b/parser/testdata/windowB.test index 4b6722e..ccde1ff 100644 --- a/parser/testdata/windowB.test +++ b/parser/testdata/windowB.test @@ -6,9 +6,9 @@ INSERT INTO t1 VALUES(NULL, 3); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 59 err 1 -1 no such table: t1 -stmt 93 err 1 -1 no such table: t1 +stmt 25 err 1 -1 59 no such table: t1 +stmt 59 err 1 -1 93 no such table: t1 +stmt 93 err 1 -1 127 no such table: t1 ==== 1.2 SELECT sum(b) OVER win FROM t1 @@ -16,7 +16,7 @@ stmt 93 err 1 -1 no such table: t1 ORDER BY a DESC NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 130 no such table: t1 ==== 2.0 CREATE TABLE t1(a, b); @@ -30,14 +30,14 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES(8, NULL); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 59 err 1 -1 no such table: t1 -stmt 91 err 1 -1 no such table: t1 -stmt 125 err 1 -1 no such table: t1 -stmt 168 err 1 -1 no such table: t1 -stmt 211 err 1 -1 no such table: t1 -stmt 248 err 1 -1 no such table: t1 -stmt 285 err 1 -1 no such table: t1 +stmt 25 err 1 -1 59 no such table: t1 +stmt 59 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 168 no such table: t1 +stmt 168 err 1 -1 211 no such table: t1 +stmt 211 err 1 -1 248 no such table: t1 +stmt 248 err 1 -1 285 no such table: t1 +stmt 285 err 1 -1 319 no such table: t1 ==== 3.0 CREATE TABLE testjson(id INTEGER PRIMARY KEY, j TEXT, x TEXT); @@ -47,20 +47,20 @@ stmt 285 err 1 -1 no such table: t1 INSERT INTO testjson VALUES(4, '{"d":4}', 'd'); ---- stmt 0 ok -stmt 67 err 1 -1 no such table: testjson -stmt 119 err 1 -1 no such table: testjson -stmt 171 err 1 -1 no such table: testjson -stmt 223 err 1 -1 no such table: testjson +stmt 67 err 1 -1 119 no such table: testjson +stmt 119 err 1 -1 171 no such table: testjson +stmt 171 err 1 -1 223 no such table: testjson +stmt 223 err 1 -1 275 no such table: testjson ==== 3.1 SELECT json_group_array(json(j)) FROM testjson; ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 52 no such table: testjson ==== 3.2 SELECT json_group_array(json(j)) OVER (ORDER BY id) FROM testjson; ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 71 no such table: testjson ==== 3.3 SELECT json_group_array(json(j)) OVER ( @@ -68,70 +68,70 @@ stmt 0 err 1 -1 no such table: testjson EXCLUDE TIES ) FROM testjson; ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 152 no such table: testjson ==== 3.4 SELECT json_group_array(json(j)) OVER ( ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM testjson; ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 124 no such table: testjson ==== 3.5 SELECT json_group_array(json(j)) OVER ( ORDER BY id ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM testjson; ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 124 no such table: testjson ==== 3.5a UPDATE testjson SET j = replace(j,char(125),',"e":9'||char(125)); SELECT j FROM testjson; ---- -stmt 0 err 1 -1 no such table: testjson -stmt 70 err 1 -1 no such table: testjson +stmt 0 err 1 -1 70 no such table: testjson +stmt 70 err 1 -1 98 no such table: testjson ==== 3.5b SELECT group_concat(x,'') OVER ( ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING ) FROM testjson ORDER BY id; ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 129 no such table: testjson ==== 3.5c SELECT json_group_array(json(j)) OVER ( ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING ) FROM testjson; ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 124 no such table: testjson ==== 3.5d SELECT json_group_object(x,json(j)) OVER ( ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING ) FROM testjson; ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 127 no such table: testjson ==== 3.7b SELECT group_concat(x,'') FILTER (WHERE id!=2) OVER ( ORDER BY id ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM testjson; ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 138 no such table: testjson ==== 3.7c SELECT json_group_array(json(j)) FILTER (WHERE id!=2) OVER ( ORDER BY id ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM testjson ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 145 no such table: testjson ==== 3.7d SELECT json_group_object(x,json(j)) FILTER (WHERE id!=2) OVER ( ORDER BY id ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING ) FROM testjson ---- -stmt 0 err 1 -1 no such table: testjson +stmt 0 err 1 -1 148 no such table: testjson ==== 3.8 CREATE TABLE t1(id INT, k TEXT, v INT); @@ -145,63 +145,63 @@ stmt 0 err 1 -1 no such table: testjson (7, 'h', 7); ---- stmt 0 ok -stmt 44 err 1 -1 no such table: t1 +stmt 44 err 1 -1 203 no such table: t1 ==== 3.9 SELECT id, json_group_object(if(id<>1,k),v) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS jx FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 149 no such table: t1 ==== 3.10 SELECT id, json_group_object(if(id>4,k),v) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS jx FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 148 no such table: t1 ==== 3.11 SELECT id, json_group_object(if(id>4,k||'@'),v) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS jx FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 153 no such table: t1 ==== 3.12 SELECT id, json_group_object(k,v) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS jx FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 139 no such table: t1 ==== 3.13 SELECT id, json_group_object(if(id>1 AND id<7,k),v) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS jx FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 157 no such table: t1 ==== 3.14 SELECT id, json_group_object(if(id>2 AND id<6,k),v) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS jx FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 157 no such table: t1 ==== 3.15 SELECT id, json_group_object(if(id<2 OR id>6,k),v) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS jx FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 156 no such table: t1 ==== 3.16 SELECT id, json_group_object(if(id<3 OR id>5,k),v) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS jx FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 156 no such table: t1 ==== 4.0 CREATE TABLE x(a); @@ -209,8 +209,8 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO x VALUES(2); ---- stmt 0 ok -stmt 21 err 1 -1 no such table: x -stmt 48 err 1 -1 no such table: x +stmt 21 err 1 -1 48 no such table: x +stmt 48 err 1 -1 75 no such table: x ==== 4.1 WITH y AS ( @@ -218,7 +218,7 @@ stmt 48 err 1 -1 no such table: x ) SELECT * FROM y; ---- -stmt 0 err 1 -1 no such table: x +stmt 0 err 1 -1 112 no such table: x ==== 4.2 WITH y AS ( @@ -226,7 +226,7 @@ stmt 0 err 1 -1 no such table: x BY fake_column)) SELECT * FROM y; ---- -stmt 0 err 1 -1 no such table: x +stmt 0 err 1 -1 119 no such table: x ==== 4.3 SELECT 1 WINDOW win AS (PARTITION BY fake_column); @@ -242,17 +242,17 @@ stmt 0 ok INSERT INTO t1 VALUES(2, 1001); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 -stmt 53 err 1 -1 no such table: t1 -stmt 87 err 1 -1 no such table: t1 -stmt 120 err 1 -1 no such table: t1 +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 87 no such table: t1 +stmt 87 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 154 no such table: t1 ==== 5.1 SELECT a, sum(c) OVER ( ORDER BY a RANGE BETWEEN 0 PRECEDING AND 3 PRECEDING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 5.2 INSERT INTO t1 VALUES(NULL, 123); @@ -264,32 +264,32 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY a RANGE BETWEEN 0 PRECEDING AND 3 PRECEDING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 36 err 1 -1 no such table: t1 -stmt 72 err 1 -1 no such table: t1 -stmt 109 err 1 -1 no such table: t1 -stmt 146 err 1 -1 no such table: t1 +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 109 no such table: t1 +stmt 109 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 243 no such table: t1 ==== 5.3 SELECT a, sum(c) OVER ( ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 5.4 SELECT a, sum(c) OVER ( ORDER BY a RANGE BETWEEN 0 PRECEDING AND 3 PRECEDING EXCLUDE NO OTHERS ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 114 no such table: t1 ==== 5.5 SELECT a, sum(c) OVER ( ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING EXCLUDE NO OTHERS ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 114 no such table: t1 ==== 6.0 CREATE TABLE t1(a, c); @@ -300,24 +300,24 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES('abc', 1001); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 -stmt 53 err 1 -1 no such table: t1 -stmt 88 err 1 -1 no such table: t1 -stmt 122 err 1 -1 no such table: t1 +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 122 no such table: t1 +stmt 122 err 1 -1 160 no such table: t1 ==== 6.1 SELECT a, sum(c) OVER ( ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 97 no such table: t1 ==== 6.2 SELECT a, sum(c) OVER ( ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING EXCLUDE NO OTHERS ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 114 no such table: t1 ==== 7.0 CREATE TABLE t1(a, c); @@ -334,44 +334,44 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t1 VALUES('xyz', 3333); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: main.t1 -stmt 53 err 1 -1 no such table: t1 -stmt 89 err 1 -1 no such table: t1 -stmt 124 err 1 -1 no such table: t1 -stmt 158 err 1 -1 no such table: t1 -stmt 193 err 1 -1 no such table: t1 -stmt 227 err 1 -1 no such table: t1 -stmt 262 err 1 -1 no such table: t1 -stmt 300 err 1 -1 no such table: t1 -stmt 338 err 1 -1 no such table: t1 +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 89 no such table: t1 +stmt 89 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 193 no such table: t1 +stmt 193 err 1 -1 227 no such table: t1 +stmt 227 err 1 -1 262 no such table: t1 +stmt 262 err 1 -1 300 no such table: t1 +stmt 300 err 1 -1 338 no such table: t1 +stmt 338 err 1 -1 376 no such table: t1 ==== 7.1 SELECT a, max(c) OVER ( ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 7.2 SELECT a, min(c) OVER ( ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 7.3 SELECT a, max(c) OVER ( ORDER BY a RANGE BETWEEN 0 PRECEDING AND 2 PRECEDING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 7.4 SELECT a, min(c) OVER ( ORDER BY a RANGE BETWEEN 0 PRECEDING AND 2 PRECEDING ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 8.0 BEGIN TRANSACTION; @@ -386,19 +386,19 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 21 ok -stmt 48 err 1 -1 no such table: t1 -stmt 86 err 1 -1 no such table: t1 -stmt 124 err 1 -1 no such table: t1 -stmt 162 err 1 -1 no such table: t1 +stmt 48 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 200 no such table: t1 stmt 200 ok -stmt 210 err 1 -1 no such table: main.t1 +stmt 210 err 1 -1 254 no such table: main.t1 ==== 8.1 SELECT sum(c) OVER (ORDER BY a COLLATE nocase RANGE BETWEEN 10.0 PRECEDING AND 5.0 PRECEDING) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 111 no such table: t1 ==== 9.0 CREATE TABLE seps(x); @@ -408,8 +408,8 @@ stmt 0 err 1 -1 no such table: t1 FROM seps; ---- stmt 0 ok -stmt 24 err 1 -1 no such table: seps -stmt 87 err 1 -1 no such table: seps +stmt 24 err 1 -1 87 no such table: seps +stmt 87 err 1 -1 195 no such table: seps ==== 10.1 CREATE TABLE t1(i INTEGER PRIMARY KEY, v); @@ -417,8 +417,8 @@ stmt 87 err 1 -1 no such table: seps INSERT INTO t1 VALUES( 2, 'two' ); ---- stmt 0 ok -stmt 45 err 1 -1 no such table: t1 -stmt 82 err 1 -1 no such table: t1 +stmt 45 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 119 no such table: t1 ==== 10.2 SELECT @@ -429,7 +429,7 @@ stmt 82 err 1 -1 no such table: t1 range between unbounded preceding and unbounded following ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 172 no such table: t1 ==== 10.3 SELECT @@ -442,4 +442,4 @@ stmt 0 err 1 -1 no such table: t1 range between unbounded preceding and unbounded following ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 232 no such table: t1 diff --git a/parser/testdata/windowD.test b/parser/testdata/windowD.test index 9ed17a4..e53ea16 100644 --- a/parser/testdata/windowD.test +++ b/parser/testdata/windowD.test @@ -7,32 +7,32 @@ ---- stmt 0 ok stmt 28 ok -stmt 121 err 1 -1 no such table: t0 +stmt 121 err 1 -1 152 no such table: t0 ==== 1.1 SELECT ('500') IS (v0.c1) FROM v0; ---- -stmt 0 err 1 -1 no such table: v0 +stmt 0 err 1 -1 37 no such table: v0 ==== 1.2 SELECT (('500') IS (v0.c1)) FROM v0, t0; ---- -stmt 0 err 1 -1 no such table: v0 +stmt 0 err 1 -1 43 no such table: v0 ==== 1.2.dup1 SELECT (('500') IS (v0.c1)) IS FALSE FROM v0; ---- -stmt 0 err 1 -1 no such table: v0 +stmt 0 err 1 -1 48 no such table: v0 ==== 1.3 SELECT * FROM v0; ---- -stmt 0 err 1 -1 no such table: v0 +stmt 0 err 1 -1 20 no such table: v0 ==== 1.4 SELECT * FROM v0 WHERE ('500' IS v0.c1) IS FALSE; ---- -stmt 0 err 1 -1 no such table: v0 +stmt 0 err 1 -1 52 no such table: v0 ==== 2.0 CREATE TABLE t1(x); @@ -40,23 +40,23 @@ stmt 0 err 1 -1 no such table: v0 CREATE VIEW v1(a, b, c, d) AS SELECT 1, 2, TRUE, FALSE FROM t1; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t1 +stmt 22 err 1 -1 56 no such table: t1 stmt 56 ok ==== 2.1 SELECT 500 IS a, 500 IS b, 500 IS c, 500 IS d FROM v1 ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 57 no such table: v1 ==== 2.2 SELECT * FROM v1 WHERE 500 IS c; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 35 no such table: v1 ==== 2.3 SELECT * FROM v1 WHERE 500 IS d; ---- -stmt 0 err 1 -1 no such table: v1 +stmt 0 err 1 -1 35 no such table: v1 ==== 2.4 CREATE VIEW v2 AS SELECT max(x) OVER () AS a, TRUE AS c FROM t1; @@ -66,9 +66,9 @@ stmt 0 ok SELECT 500 IS c FROM v2; ---- -stmt 0 err 1 -1 no such table: v2 +stmt 0 err 1 -1 27 no such table: v2 ==== 2.6 SELECT * FROM v2 WHERE 500 IS c; ---- -stmt 0 err 1 -1 no such table: v2 +stmt 0 err 1 -1 35 no such table: v2 diff --git a/parser/testdata/windowE.test b/parser/testdata/windowE.test index 9226911..bcc5846 100644 --- a/parser/testdata/windowE.test +++ b/parser/testdata/windowE.test @@ -9,19 +9,19 @@ INSERT INTO t1 VALUES(6, 'six'); CREATE INDEX t1b ON t1(b); ---- -stmt 0 err 1 -1 no such collation sequence: custom -stmt 65 err 1 -1 no such table: t1 -stmt 100 err 1 -1 no such table: t1 -stmt 135 err 1 -1 no such table: t1 -stmt 172 err 1 -1 no such table: t1 -stmt 208 err 1 -1 no such table: t1 -stmt 244 err 1 -1 no such table: t1 -stmt 279 err 1 -1 no such table: main.t1 +stmt 0 err 1 -1 64 no such collation sequence: custom +stmt 65 err 1 -1 100 no such table: t1 +stmt 100 err 1 -1 135 no such table: t1 +stmt 135 err 1 -1 172 no such table: t1 +stmt 172 err 1 -1 208 no such table: t1 +stmt 208 err 1 -1 244 no such table: t1 +stmt 244 err 1 -1 279 no such table: t1 +stmt 279 err 1 -1 308 no such table: main.t1 ==== 1.1 SELECT * FROM t1 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 20 no such table: t1 ==== 1.2 SELECT group_concat(a,',') OVER win FROM t1 @@ -29,7 +29,7 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY b RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 127 no such table: t1 ==== 1.3 SELECT group_concat(a,',') OVER win FROM t1 @@ -37,7 +37,7 @@ stmt 0 err 1 -1 no such table: t1 ORDER BY b RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ) ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 127 no such table: t1 ==== 2.0 CREATE TABLE t1(x); @@ -48,13 +48,13 @@ stmt 0 ok SELECT min(x) OVER w1 FROM t1 WINDOW w1 AS (PARTITION BY x_count(x) OVER w1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 84 no such table: t1 ==== 2.2 SELECT min(x) FILTER (WHERE x_count(x) OVER w1) OVER w1 FROM t1 WINDOW w1 AS (PARTITION BY x OVER w1); ---- -stmt 0 err 1 100 near "OVER": syntax error +stmt 0 err 1 100 104 near "OVER": syntax error ==== 3.0 BEGIN TRANSACTION; @@ -74,13 +74,13 @@ stmt 0 err 1 100 near "OVER": syntax error ---- stmt 0 ok stmt 21 ok -stmt 59 err 1 -1 no such table: t2 +stmt 59 err 1 -1 884 no such table: t2 stmt 884 ok ==== 3.1 select c1, max(c2) over (order by c1 range 366.0 preceding) from t2; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 71 no such table: t2 ==== 4.0 CREATE TABLE t1(a, b); @@ -90,24 +90,24 @@ stmt 0 err 1 -1 no such table: t2 INSERT INTO t1 VALUES(4, 4); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t1 -stmt 56 err 1 -1 no such table: t1 -stmt 105 err 1 -1 no such table: t1 -stmt 136 err 1 -1 no such table: t1 +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 167 no such table: t1 ==== 4.1 SELECT a, total(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 104 no such table: t1 ==== 4.2 SELECT a, total(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 96 no such table: t1 ==== 5.0 CREATE TABLE t(id, x); @@ -117,21 +117,21 @@ stmt 0 err 1 -1 no such table: t1 INSERT INTO t VALUES(4, 0.5); ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t -stmt 56 err 1 -1 no such table: t -stmt 104 err 1 -1 no such table: t -stmt 134 err 1 -1 no such table: t +stmt 25 err 1 -1 56 no such table: t +stmt 56 err 1 -1 104 no such table: t +stmt 104 err 1 -1 134 no such table: t +stmt 134 err 1 -1 166 no such table: t ==== 5.1 SELECT id, sum(id) OVER (ORDER BY id ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) FROM t t1 ---- -stmt 0 err 1 -1 no such table: t +stmt 0 err 1 -1 99 no such table: t ==== 5.2 SELECT id, sum(x) OVER (ORDER BY id ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) FROM t t1 ---- -stmt 0 err 1 -1 no such table: t +stmt 0 err 1 -1 98 no such table: t diff --git a/parser/testdata/windowerr.test b/parser/testdata/windowerr.test index 610d0af..7ff8df9 100644 --- a/parser/testdata/windowerr.test +++ b/parser/testdata/windowerr.test @@ -10,8 +10,8 @@ ---- stmt 0 ok stmt 27 ok -stmt 68 err 1 -1 no such table: t1 -stmt 99 err 1 -1 no such table: t1 -stmt 130 err 1 -1 no such table: t1 -stmt 161 err 1 -1 no such table: t1 -stmt 192 err 1 -1 no such table: t1 +stmt 68 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 223 no such table: t1 diff --git a/parser/testdata/with1.test b/parser/testdata/with1.test index 834a4d0..b3eef23 100644 --- a/parser/testdata/with1.test +++ b/parser/testdata/with1.test @@ -14,17 +14,17 @@ stmt 0 ok WITH x(a) AS ( SELECT * FROM t1) INSERT INTO t1 VALUES(1,2); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 63 no such table: t1 ==== 1.3 WITH x(a) AS ( SELECT * FROM t1) DELETE FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 51 no such table: t1 ==== 1.4 WITH x(a) AS ( SELECT * FROM t1) UPDATE t1 SET x = y; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 56 no such table: t1 ==== 2.1 DROP TABLE IF EXISTS t1; @@ -35,42 +35,42 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 27 ok -stmt 49 err 1 -1 no such table: t1 -stmt 77 err 1 -1 no such table: t1 -stmt 105 err 1 -1 no such table: t1 +stmt 49 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 159 no such table: t1 ==== 2.2 WITH tmp(a) AS ( SELECT * FROM t1 ) SELECT a FROM tmp; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 57 no such table: t1 ==== 2.3 SELECT * FROM ( WITH tmp(a) AS ( SELECT * FROM t1 ) SELECT a FROM tmp ); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 81 no such table: t1 ==== 2.4 WITH tmp1(a) AS ( SELECT * FROM t1 ), tmp2(x) AS ( SELECT * FROM tmp1) SELECT * FROM tmp2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 102 no such table: t1 ==== 2.5 WITH tmp2(x) AS ( SELECT * FROM tmp1), tmp1(a) AS ( SELECT * FROM t1 ) SELECT * FROM tmp2; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 102 no such table: t1 ==== 3.1 WITH tmp2(x) AS ( SELECT * FROM tmp1 ), tmp1(a) AS ( SELECT * FROM tmp2 ) SELECT * FROM tmp1; ---- -stmt 0 err 1 -1 circular reference: tmp1 +stmt 0 err 1 -1 105 circular reference: tmp1 ==== 3.2 CREATE TABLE t2(x INTEGER); @@ -79,7 +79,7 @@ stmt 0 err 1 -1 circular reference: tmp1 SELECT * FROM tmp; ---- stmt 0 ok -stmt 30 err 1 -1 duplicate WITH table name: tmp +stmt 30 err 1 -1 112 duplicate WITH table name: tmp ==== 3.3 CREATE TABLE t3(x); @@ -93,29 +93,29 @@ stmt 30 err 1 -1 duplicate WITH table name: tmp ---- stmt 0 ok stmt 22 ok -stmt 44 err 1 -1 no such table: t3 -stmt 76 err 1 -1 no such table: t4 -stmt 107 err 1 -1 no such table: t4 +stmt 44 err 1 -1 76 no such table: t3 +stmt 76 err 1 -1 107 no such table: t4 +stmt 107 err 1 -1 163 no such table: t4 ==== 3.4 WITH tmp AS ( SELECT * FROM t3 ), tmp2 AS ( WITH tmp AS ( SELECT * FROM t4 ) SELECT * FROM tmp ) SELECT * FROM tmp2; ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 129 no such table: t4 ==== 3.5 WITH tmp AS ( SELECT * FROM t3 ), tmp2 AS ( WITH xxxx AS ( SELECT * FROM t4 ) SELECT * FROM tmp ) SELECT * FROM tmp2; ---- -stmt 0 err 1 -1 no such table: t3 +stmt 0 err 1 -1 130 no such table: t3 ==== 3.6 WITH tmp AS ( SELECT * FROM t3 ), SELECT * FROM tmp; ---- -stmt 0 err 1 39 near "SELECT": syntax error +stmt 0 err 1 39 45 near "SELECT": syntax error ==== 4.1 DROP TABLE IF EXISTS t1; @@ -131,28 +131,28 @@ stmt 0 err 1 39 near "SELECT": syntax error ---- stmt 0 ok stmt 27 ok -stmt 49 err 1 -1 no such table: t1 -stmt 77 err 1 -1 no such table: t1 -stmt 105 err 1 -1 no such table: t1 -stmt 133 err 1 -1 no such table: t1 -stmt 161 err 1 -1 no such table: t1 -stmt 243 err 1 -1 no such table: t1 +stmt 49 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 133 no such table: t1 +stmt 133 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 243 no such table: t1 +stmt 243 err 1 -1 263 no such table: t1 ==== 4.2 WITH iset AS ( SELECT 2 UNION ALL SELECT 4 ) INSERT INTO t1 SELECT * FROM iset; SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 84 err 1 -1 no such table: t1 +stmt 0 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 104 no such table: t1 ==== 4.3 WITH uset(a, b) AS ( SELECT 2, 8 UNION ALL SELECT 4, 9 ) UPDATE t1 SET x = COALESCE( (SELECT b FROM uset WHERE a=x), x ); SELECT * FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 126 err 1 -1 no such table: t1 +stmt 0 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 146 no such table: t1 ==== 5.1 WITH i(x) AS ( VALUES(1) UNION ALL SELECT x+1 FROM i) @@ -192,19 +192,19 @@ stmt 0 ok SELECT * FROM ancest; ---- stmt 0 ok -stmt 77 err 1 -1 no such table: edge -stmt 114 err 1 -1 no such table: edge -stmt 151 err 1 -1 no such table: edge -stmt 188 err 1 -1 no such table: edge -stmt 225 err 1 -1 no such table: edge -stmt 262 err 1 -1 no such table: edge -stmt 299 err 1 -1 no such table: edge -stmt 336 err 1 -1 no such table: edge -stmt 373 err 1 -1 no such table: edge -stmt 410 err 1 -1 no such table: edge -stmt 447 err 1 -1 no such table: edge -stmt 484 err 1 -1 no such table: edge -stmt 521 err 1 -1 no such table: edge +stmt 77 err 1 -1 114 no such table: edge +stmt 114 err 1 -1 151 no such table: edge +stmt 151 err 1 -1 188 no such table: edge +stmt 188 err 1 -1 225 no such table: edge +stmt 225 err 1 -1 262 no such table: edge +stmt 262 err 1 -1 299 no such table: edge +stmt 299 err 1 -1 336 no such table: edge +stmt 336 err 1 -1 373 no such table: edge +stmt 373 err 1 -1 410 no such table: edge +stmt 410 err 1 -1 447 no such table: edge +stmt 447 err 1 -1 484 no such table: edge +stmt 484 err 1 -1 521 no such table: edge +stmt 521 err 1 -1 736 no such table: edge ==== 5.2.2 WITH RECURSIVE @@ -217,7 +217,7 @@ stmt 521 err 1 -1 no such table: edge ) SELECT * FROM ancest; ---- -stmt 0 err 1 -1 no such table: edge +stmt 0 err 1 -1 216 no such table: edge ==== 5.2.3 WITH RECURSIVE @@ -230,7 +230,7 @@ stmt 0 err 1 -1 no such table: edge ) SELECT * FROM ancest; ---- -stmt 0 err 1 -1 no such table: edge +stmt 0 err 1 -1 233 no such table: edge ==== 5.3 WITH i(x) AS ( VALUES(1) UNION ALL SELECT x+1 FROM i LIMIT 5) @@ -254,13 +254,13 @@ stmt 0 ok WITH i(x, y) AS ( VALUES(1) ) SELECT * FROM i; ---- -stmt 0 err 1 -1 table i has 1 values for 2 columns +stmt 0 err 1 -1 51 table i has 1 values for 2 columns ==== 5.6.2 WITH i(x) AS ( VALUES(1,2) ) SELECT * FROM i; ---- -stmt 0 err 1 -1 table i has 2 values for 1 columns +stmt 0 err 1 -1 50 table i has 2 values for 1 columns ==== 5.6.3 CREATE TABLE t5(a, b); @@ -268,31 +268,31 @@ stmt 0 err 1 -1 table i has 2 values for 1 columns SELECT * FROM i; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: t5 +stmt 25 err 1 -1 80 no such table: t5 ==== 5.6.4 WITH i(x) AS ( SELECT 1, 2 UNION ALL SELECT 1 ) SELECT * FROM i; ---- -stmt 0 err 1 -1 table i has 2 values for 1 columns +stmt 0 err 1 -1 69 table i has 2 values for 1 columns ==== 5.6.5 WITH i(x) AS ( SELECT 1 UNION ALL SELECT 1, 2 ) SELECT * FROM i; ---- -stmt 0 err 1 -1 SELECTs to the left and right of UNION ALL do not have the same number of result columns +stmt 0 err 1 -1 69 SELECTs to the left and right of UNION ALL do not have the same number of result columns ==== 5.6.6 WITH i(x) AS ( SELECT 1 UNION ALL SELECT x+1, x*2 FROM i ) SELECT * FROM i; ---- -stmt 0 err 1 -1 SELECTs to the left and right of UNION ALL do not have the same number of result columns +stmt 0 err 1 -1 80 SELECTs to the left and right of UNION ALL do not have the same number of result columns ==== 5.6.7 WITH i(x) AS ( SELECT 1, 2 UNION SELECT x+1 FROM i ) SELECT * FROM i; ---- -stmt 0 err 1 -1 table i has 2 values for 1 columns +stmt 0 err 1 -1 74 table i has 2 values for 1 columns ==== 6.1 CREATE TABLE f( @@ -316,21 +316,21 @@ stmt 0 err 1 -1 table i has 2 values for 1 columns INSERT INTO f VALUES(14, 13, 'logo.gif'); ---- stmt 0 ok -stmt 86 err 1 -1 no such table: f -stmt 124 err 1 -1 no such table: f -stmt 161 err 1 -1 no such table: f -stmt 201 err 1 -1 no such table: f -stmt 242 err 1 -1 no such table: f -stmt 280 err 1 -1 no such table: f -stmt 320 err 1 -1 no such table: f -stmt 357 err 1 -1 no such table: f -stmt 397 err 1 -1 no such table: f -stmt 444 err 1 -1 no such table: f -stmt 490 err 1 -1 no such table: f -stmt 529 err 1 -1 no such table: f -stmt 570 err 1 -1 no such table: f -stmt 621 err 1 -1 no such table: f -stmt 673 err 1 -1 no such table: f +stmt 86 err 1 -1 124 no such table: f +stmt 124 err 1 -1 161 no such table: f +stmt 161 err 1 -1 201 no such table: f +stmt 201 err 1 -1 242 no such table: f +stmt 242 err 1 -1 280 no such table: f +stmt 280 err 1 -1 320 no such table: f +stmt 320 err 1 -1 357 no such table: f +stmt 357 err 1 -1 397 no such table: f +stmt 397 err 1 -1 444 no such table: f +stmt 444 err 1 -1 490 no such table: f +stmt 490 err 1 -1 529 no such table: f +stmt 529 err 1 -1 570 no such table: f +stmt 570 err 1 -1 621 no such table: f +stmt 621 err 1 -1 673 no such table: f +stmt 673 err 1 -1 725 no such table: f ==== 6.2 WITH flat(fid, fpath) AS ( @@ -340,7 +340,7 @@ stmt 673 err 1 -1 no such table: f ) SELECT fpath FROM flat WHERE fpath!='' ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: f +stmt 0 err 1 -1 216 no such table: f ==== 6.3 WITH flat(fid, fpath) AS ( @@ -350,7 +350,7 @@ stmt 0 err 1 -1 no such table: f ) SELECT count(*) FROM flat; ---- -stmt 0 err 1 -1 no such table: f +stmt 0 err 1 -1 192 no such table: f ==== 6.4 WITH x(i) AS ( @@ -371,11 +371,11 @@ stmt 0 ok INSERT INTO tree VALUES(5, 4); ---- stmt 0 ok -stmt 27 err 1 -1 no such table: tree -stmt 63 err 1 -1 no such table: tree -stmt 96 err 1 -1 no such table: tree -stmt 129 err 1 -1 no such table: tree -stmt 162 err 1 -1 no such table: tree +stmt 27 err 1 -1 63 no such table: tree +stmt 63 err 1 -1 96 no such table: tree +stmt 96 err 1 -1 129 no such table: tree +stmt 129 err 1 -1 162 no such table: tree +stmt 162 err 1 -1 195 no such table: tree ==== 7.2 WITH t(id, path) AS ( @@ -385,7 +385,7 @@ stmt 162 err 1 -1 no such table: tree ) SELECT path FROM t; ---- -stmt 0 err 1 -1 no such table: tree +stmt 0 err 1 -1 165 no such table: tree ==== 7.3 WITH t(id) AS ( @@ -395,7 +395,7 @@ stmt 0 err 1 -1 no such table: tree ) SELECT id FROM t; ---- -stmt 0 err 1 -1 no such table: tree +stmt 0 err 1 -1 110 no such table: tree ==== 7.4 WITH t(id) AS ( @@ -405,7 +405,7 @@ stmt 0 err 1 -1 no such table: tree ) SELECT id FROM t; ---- -stmt 0 err 1 -1 no such table: tree +stmt 0 err 1 -1 124 no such table: tree ==== 7.5 WITH t(id) AS ( @@ -415,7 +415,7 @@ stmt 0 err 1 -1 no such table: tree ) SELECT id FROM t; ---- -stmt 0 err 1 -1 no such table: tree +stmt 0 err 1 -1 138 no such table: tree ==== 7.6 WITH t(id) AS ( @@ -425,7 +425,7 @@ stmt 0 err 1 -1 no such table: tree ) SELECT id FROM t; ---- -stmt 0 err 1 -1 no such table: tree +stmt 0 err 1 -1 149 no such table: tree ==== 8.1-mandelbrot WITH RECURSIVE @@ -499,7 +499,7 @@ stmt 29 ok ) SELECT p FROM flat ORDER BY p; ---- -stmt 0 err 1 -1 no such table: tree +stmt 0 err 1 -1 209 no such table: tree ==== 10.7.1 WITH t(a) AS ( @@ -507,7 +507,7 @@ stmt 0 err 1 -1 no such table: tree ) SELECT * FROM t ---- -stmt 0 err 1 -1 1st ORDER BY term does not match any column in the result set +stmt 0 err 1 -1 113 1st ORDER BY term does not match any column in the result set ==== 10.7.2 WITH t(a) AS ( @@ -534,7 +534,7 @@ stmt 0 ok ) SELECT p FROM flat; ---- -stmt 0 err 1 -1 no such table: tree +stmt 0 err 1 -1 246 no such table: tree ==== 10.8.2 WITH flat(fid, depth, p) AS ( @@ -547,7 +547,7 @@ stmt 0 err 1 -1 no such table: tree ) SELECT p FROM flat; ---- -stmt 0 err 1 -1 no such table: tree +stmt 0 err 1 -1 267 no such table: tree ==== 10.8.3 WITH flat(fid, depth, p) AS ( @@ -560,7 +560,7 @@ stmt 0 err 1 -1 no such table: tree ) SELECT p FROM flat; ---- -stmt 0 err 1 -1 no such table: tree +stmt 0 err 1 -1 267 no such table: tree ==== 10.8.4.1 CREATE TABLE tst(a,b); @@ -570,20 +570,20 @@ stmt 0 err 1 -1 no such table: tree SELECT a COLLATE nocase FROM tst UNION ALL SELECT b FROM tst ORDER BY 1; ---- stmt 0 ok -stmt 25 err 1 -1 no such table: tst -stmt 61 err 1 -1 no such table: tst -stmt 97 err 1 -1 no such table: tst -stmt 133 err 1 -1 no such table: tst +stmt 25 err 1 -1 61 no such table: tst +stmt 61 err 1 -1 97 no such table: tst +stmt 97 err 1 -1 133 no such table: tst +stmt 133 err 1 -1 208 no such table: tst ==== 10.8.4.2 SELECT a FROM tst UNION ALL SELECT b COLLATE nocase FROM tst ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: tst +stmt 0 err 1 -1 75 no such table: tst ==== 10.8.4.3 SELECT a||'' FROM tst UNION ALL SELECT b COLLATE nocase FROM tst ORDER BY 1; ---- -stmt 0 err 1 -1 no such table: tst +stmt 0 err 1 -1 79 no such table: tst ==== 11.1 CREATE TABLE org( @@ -625,26 +625,26 @@ stmt 0 err 1 -1 no such table: tst FROM under_alice; ---- stmt 0 ok -stmt 95 err 1 -1 no such table: org -stmt 135 err 1 -1 no such table: org -stmt 176 err 1 -1 no such table: org -stmt 219 err 1 -1 no such table: org -stmt 259 err 1 -1 no such table: org -stmt 299 err 1 -1 no such table: org -stmt 341 err 1 -1 no such table: org -stmt 383 err 1 -1 no such table: org -stmt 425 err 1 -1 no such table: org -stmt 468 err 1 -1 no such table: org -stmt 508 err 1 -1 no such table: org -stmt 549 err 1 -1 no such table: org -stmt 591 err 1 -1 no such table: org -stmt 632 err 1 -1 no such table: org -stmt 675 err 1 -1 no such table: org -stmt 718 err 1 -1 no such table: org -stmt 900 err 1 -1 no such table: org -stmt 942 err 1 -1 no such table: org -stmt 987 err 1 -1 no such table: org -stmt 1027 err 1 -1 no such table: org +stmt 95 err 1 -1 135 no such table: org +stmt 135 err 1 -1 176 no such table: org +stmt 176 err 1 -1 219 no such table: org +stmt 219 err 1 -1 259 no such table: org +stmt 259 err 1 -1 299 no such table: org +stmt 299 err 1 -1 341 no such table: org +stmt 341 err 1 -1 383 no such table: org +stmt 383 err 1 -1 425 no such table: org +stmt 425 err 1 -1 468 no such table: org +stmt 468 err 1 -1 508 no such table: org +stmt 508 err 1 -1 549 no such table: org +stmt 549 err 1 -1 591 no such table: org +stmt 591 err 1 -1 632 no such table: org +stmt 632 err 1 -1 675 no such table: org +stmt 675 err 1 -1 718 no such table: org +stmt 718 err 1 -1 900 no such table: org +stmt 900 err 1 -1 942 no such table: org +stmt 942 err 1 -1 987 no such table: org +stmt 987 err 1 -1 1027 no such table: org +stmt 1027 err 1 -1 1417 no such table: org ==== 11.2 WITH RECURSIVE @@ -659,7 +659,7 @@ stmt 1027 err 1 -1 no such table: org SELECT group_concat(substr('...............',1,level*3) || name,x'0a') FROM under_alice; ---- -stmt 0 err 1 -1 no such table: org +stmt 0 err 1 -1 334 no such table: org ==== 11.3 WITH RECURSIVE @@ -673,7 +673,7 @@ stmt 0 err 1 -1 no such table: org SELECT group_concat(substr('...............',1,level*3) || name,x'0a') FROM under_alice; ---- -stmt 0 err 1 -1 no such table: org +stmt 0 err 1 -1 310 no such table: org ==== 12.1 WITH RECURSIVE @@ -687,19 +687,19 @@ stmt 0 ok WITH RECURSIVE c(i) AS (SELECT * UNION ALL SELECT i+1 FROM c WHERE i<10) SELECT i FROM c; ---- -stmt 0 err 1 -1 no tables specified +stmt 0 err 1 -1 94 no tables specified ==== 13.2 WITH RECURSIVE c(i) AS (SELECT 5,* UNION ALL SELECT i+1 FROM c WHERE i<10) SELECT i FROM c; ---- -stmt 0 err 1 -1 no tables specified +stmt 0 err 1 -1 96 no tables specified ==== 13.3 WITH RECURSIVE c(i,j) AS (SELECT 5,* UNION ALL SELECT i+1,11 FROM c WHERE i<10) SELECT i FROM c; ---- -stmt 0 err 1 -1 table c has 1 values for 2 columns +stmt 0 err 1 -1 101 table c has 1 values for 2 columns ==== 14.1 WITH x AS (SELECT * FROM t) SELECT 0 EXCEPT SELECT 0 ORDER BY 1 COLLATE binary; @@ -711,21 +711,21 @@ stmt 0 ok d(x) AS (VALUES(1) UNION ALL SELECT rowid+1 FROM d WHERE rowid<10) SELECT x FROM d; ---- -stmt 0 err 1 58 no such column: rowid +stmt 0 err 1 58 107 no such column: rowid ==== 16.1 WITH RECURSIVE i(x) AS (VALUES(1) UNION SELECT count(*) FROM i) SELECT * FROM i; ---- -stmt 0 err 1 -1 recursive aggregate queries not supported +stmt 0 err 1 -1 89 recursive aggregate queries not supported ==== 16.2 WITH RECURSIVE i(x) AS (VALUES(1) UNION SELECT count(*) OVER () FROM i) SELECT * FROM i; ---- -stmt 0 err 1 -1 cannot use window functions in recursive queries +stmt 0 err 1 -1 105 cannot use window functions in recursive queries ==== 16.3 WITH RECURSIVE @@ -738,7 +738,7 @@ stmt 0 err 1 -1 cannot use window functions in recursive queries ) SELECT * FROM q; ---- -stmt 0 err 1 -1 cannot use window functions in recursive queries +stmt 0 err 1 -1 272 cannot use window functions in recursive queries ==== 17.1 WITH x(a) AS ( @@ -765,7 +765,7 @@ stmt 0 ok ) SELECT * FROM i; ---- -stmt 0 err 1 -1 circular reference: i +stmt 0 err 1 -1 104 circular reference: i ==== 17.4 WITH i AS ( @@ -774,7 +774,7 @@ stmt 0 err 1 -1 circular reference: i ) SELECT * FROM i; ---- -stmt 0 err 1 -1 no such table: t11 +stmt 0 err 1 -1 107 no such table: t11 ==== 17.5 WITH @@ -921,7 +921,7 @@ stmt 0 ok ) SELECT 4 FROM c,c,c,c,c,c,c,c,c; ---- -stmt 0 err 1 -1 too many FROM clause terms, max: 200 +stmt 0 err 1 -1 465 too many FROM clause terms, max: 200 ==== 23.1 CREATE TABLE t1(id INTEGER NULL PRIMARY KEY, name Text); @@ -945,14 +945,14 @@ stmt 0 err 1 -1 too many FROM clause terms, max: 200 SELECT * FROM v3; ---- stmt 0 ok -stmt 59 err 1 -1 no such table: t1 -stmt 96 err 1 -1 no such table: t1 -stmt 134 err 1 -1 no such table: t1 -stmt 173 err 1 -1 no such table: t1 -stmt 211 err 1 -1 no such table: t1 +stmt 59 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 134 no such table: t1 +stmt 134 err 1 -1 173 no such table: t1 +stmt 173 err 1 -1 211 no such table: t1 +stmt 211 err 1 -1 249 no such table: t1 stmt 249 ok stmt 342 ok -stmt 575 err 1 -1 no such table: v3 +stmt 575 err 1 -1 595 no such table: v3 ==== 24.1 CREATE TABLE t1(a, b, c); @@ -972,11 +972,11 @@ stmt 28 ok SELECT * FROM main.v2 AS a, aux.v2 AS b, aux.v2 AS c, main.v2 AS d; ---- stmt 0 ok -stmt 20 err 1 35 unknown database aux +stmt 20 err 1 35 55 unknown database aux stmt 55 ok -stmt 91 err 1 107 unknown database aux +stmt 91 err 1 107 134 unknown database aux stmt 134 ok -stmt 177 err 1 -1 no such table: main.v2 +stmt 177 err 1 -1 248 no such table: main.v2 ==== with1-generated WITH cte1 AS ( @@ -989,7 +989,7 @@ stmt 177 err 1 -1 no such table: main.v2 ) SELECT (SELECT 1324 FROM cte1) FROM cte1; ---- -stmt 0 err 1 -1 no such table: dual +stmt 0 err 1 -1 235 no such table: dual ==== 26.0 WITH i(x) AS ( @@ -997,7 +997,7 @@ stmt 0 err 1 -1 no such table: dual ) SELECT x,O. * O FROM i ¬I,I? 10; ---- -stmt 0 err 1 117 near "O": syntax error +stmt 0 err 1 117 118 near "O": syntax error ==== 26.1 CREATE TABLE t (label VARCHAR(10), step INTEGER); @@ -1012,10 +1012,10 @@ stmt 0 err 1 117 near "O": syntax error SELECT * FROM cte ORDER BY +label, +step; ---- stmt 0 ok -stmt 52 err 1 -1 no such table: T -stmt 84 err 1 -1 no such table: T -stmt 116 err 1 -1 no such table: T -stmt 148 err 1 -1 no such table: t +stmt 52 err 1 -1 84 no such table: T +stmt 84 err 1 -1 116 no such table: T +stmt 116 err 1 -1 148 no such table: T +stmt 148 err 1 -1 335 no such table: t ==== 26.2 WITH RECURSIVE cte(label, step) AS ( @@ -1025,7 +1025,7 @@ stmt 148 err 1 -1 no such table: t ) SELECT * FROM cte ORDER BY +label, +step; ---- -stmt 0 err 1 -1 no such table: t +stmt 0 err 1 -1 173 no such table: t ==== 26.3 CREATE TABLE tworow(x); @@ -1039,9 +1039,9 @@ stmt 0 err 1 -1 no such table: t SELECT * FROM cte ORDER BY +label, +step; ---- stmt 0 ok -stmt 26 err 1 -1 no such table: tworow -stmt 65 err 1 -1 no such table: t -stmt 96 err 1 -1 no such table: t +stmt 26 err 1 -1 65 no such table: tworow +stmt 65 err 1 -1 96 no such table: t +stmt 96 err 1 -1 289 no such table: t ==== 27.1 CREATE TABLE t1(k); @@ -1065,11 +1065,11 @@ stmt 96 err 1 -1 no such table: t stmt 0 ok stmt 22 ok stmt 64 ok -stmt 90 err 1 -1 no such table: map -stmt 142 err 1 -1 no such table: main.t1 -stmt 400 err 1 -1 no such table: t1 -stmt 431 err 1 -1 no such table: t1 -stmt 459 err 1 -1 no such table: log +stmt 90 err 1 -1 142 no such table: map +stmt 142 err 1 -1 191 no such table: main.t1 +stmt 400 err 1 -1 431 no such table: t1 +stmt 431 err 1 -1 459 no such table: t1 +stmt 459 err 1 -1 515 no such table: log ==== 28.1 DROP TABLE t1; @@ -1086,7 +1086,7 @@ stmt 459 err 1 -1 no such table: log SELECT 1 FROM t2 WHERE y=x ) FROM t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok -stmt 59 err 1 -1 no such table: t1 -stmt 97 err 1 -1 no such table: t1 +stmt 59 err 1 -1 97 no such table: t1 +stmt 97 err 1 -1 291 no such table: t1 diff --git a/parser/testdata/with2.test b/parser/testdata/with2.test index 44176d2..2c3e244 100644 --- a/parser/testdata/with2.test +++ b/parser/testdata/with2.test @@ -5,26 +5,26 @@ INSERT INTO t1 VALUES(2); ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t1 -stmt 50 err 1 -1 no such table: t1 +stmt 22 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 78 no such table: t1 ==== 1.1 WITH x1 AS (SELECT * FROM t1) SELECT sum(a) FROM x1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 57 no such table: t1 ==== 1.2 WITH x1 AS (SELECT * FROM t1) SELECT (SELECT sum(a) FROM x1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 66 no such table: t1 ==== 1.3 WITH x1 AS (SELECT * FROM t1) SELECT (SELECT sum(a) FROM x1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 66 no such table: t1 ==== 1.4 CREATE TABLE t2(i); @@ -39,10 +39,10 @@ stmt 0 err 1 -1 no such table: t1 SELECT a FROM i WHERE a NOT IN x1 ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t2 -stmt 50 err 1 -1 no such table: t2 -stmt 78 err 1 -1 no such table: t2 -stmt 106 err 1 -1 no such table: t2 +stmt 22 err 1 -1 50 no such table: t2 +stmt 50 err 1 -1 78 no such table: t2 +stmt 78 err 1 -1 106 no such table: t2 +stmt 106 err 1 -1 273 no such table: t2 ==== 1.5 WITH x1 AS (SELECT a FROM t1), @@ -50,7 +50,7 @@ stmt 106 err 1 -1 no such table: t2 x3 AS (SELECT * FROM x1, x2 WHERE x1.a IN x2 AND x2.i IN x1) SELECT * FROM x3 ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 154 no such table: t1 ==== 1.6 CREATE TABLE t3 AS SELECT 3 AS x; @@ -65,7 +65,7 @@ stmt 0 err 1 -1 no such table: t1 ---- stmt 0 ok stmt 36 ok -stmt 72 err 1 -1 no such table: t3 +stmt 72 err 1 -1 215 no such table: t3 ==== 1.7 WITH x2 AS ( @@ -74,7 +74,7 @@ stmt 72 err 1 -1 no such table: t3 ) SELECT * FROM x2; ---- -stmt 0 err 1 -1 no such table: t4 +stmt 0 err 1 -1 109 no such table: t4 ==== 1.8 WITH x2 AS ( @@ -83,19 +83,19 @@ stmt 0 err 1 -1 no such table: t4 ) SELECT * FROM x2; ---- -stmt 0 err 1 -1 no such table: main.t3 +stmt 0 err 1 -1 114 no such table: main.t3 ==== 1.9 WITH x1 AS (SELECT * FROM t1) SELECT (SELECT sum(a) FROM x1), (SELECT max(a) FROM x1); ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 91 no such table: t1 ==== 1.10 WITH x1 AS (SELECT * FROM t1) SELECT (SELECT sum(a) FROM x1), (SELECT max(a) FROM x1), a FROM x1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 102 no such table: t1 ==== 1.11 WITH @@ -107,7 +107,7 @@ stmt 0 err 1 -1 no such table: t1 ) SELECT * FROM i; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 141 no such table: t1 ==== 1.12 WITH r(i) AS ( @@ -156,7 +156,7 @@ stmt 0 ok ) SELECT * FROM t4; ---- -stmt 0 err 1 -1 no such table: main.t4 +stmt 0 err 1 -1 114 no such table: main.t4 ==== 1.15.2 WITH @@ -167,7 +167,7 @@ stmt 0 err 1 -1 no such table: main.t4 ) SELECT * FROM t4; ---- -stmt 0 err 1 -1 no such table: main.t4 +stmt 0 err 1 -1 130 no such table: main.t4 ==== 1.16 WITH @@ -178,13 +178,13 @@ stmt 0 err 1 -1 no such table: main.t4 ) SELECT * FROM t4; ---- -stmt 0 err 1 -1 multiple references to recursive table: t4 +stmt 0 err 1 -1 122 multiple references to recursive table: t4 ==== 3.1 WITH i(x, y) AS ( VALUES(1, (SELECT x FROM i)) ) SELECT * FROM i; ---- -stmt 0 err 1 -1 circular reference: i +stmt 0 err 1 -1 70 circular reference: i ==== 3.2 WITH @@ -193,7 +193,7 @@ stmt 0 err 1 -1 circular reference: i k(x) AS ( SELECT * FROM i ) SELECT * FROM i; ---- -stmt 0 err 1 -1 circular reference: i +stmt 0 err 1 -1 119 circular reference: i ==== 3.3 WITH @@ -201,7 +201,7 @@ stmt 0 err 1 -1 circular reference: i j(x) AS ( SELECT * FROM (SELECT * FROM i) ) SELECT * FROM i; ---- -stmt 0 err 1 -1 circular reference: i +stmt 0 err 1 -1 120 circular reference: i ==== 3.4 WITH @@ -209,7 +209,7 @@ stmt 0 err 1 -1 circular reference: i j(x) AS ( SELECT * FROM (SELECT * FROM i) ) SELECT * FROM j; ---- -stmt 0 err 1 -1 circular reference: j +stmt 0 err 1 -1 120 circular reference: j ==== 3.5 WITH @@ -219,13 +219,13 @@ stmt 0 err 1 -1 circular reference: j ) SELECT * FROM i; ---- -stmt 0 err 1 -1 circular reference: i +stmt 0 err 1 -1 101 circular reference: i ==== 4.1 WITH x() AS ( SELECT 1,2,3 ) SELECT * FROM x; ---- -stmt 0 err 1 10 near ")": syntax error +stmt 0 err 1 10 11 near ")": syntax error ==== 5.1 DROP TABLE IF EXISTS t1; @@ -253,51 +253,51 @@ stmt 79 ok WITH x AS (SELECT * FROM t1) INSERT INTO t2 VALUES(1, 2,); ---- -stmt 0 err 1 61 near ")": syntax error +stmt 0 err 1 61 62 near ")": syntax error ==== 6.3 WITH x AS (SELECT * FROM t1) INSERT INTO t2 SELECT a, b, FROM t1; ---- -stmt 0 err 1 62 near "FROM": syntax error +stmt 0 err 1 62 66 near "FROM": syntax error ==== 6.3.dup1 WITH x AS (SELECT * FROM t1) INSERT INTO t2 SELECT a, b FROM abc; ---- -stmt 0 err 1 -1 no such table: t2 +stmt 0 err 1 -1 70 no such table: t2 ==== 6.4 WITH x AS (SELECT * FROM t1) INSERT INTO t2 SELECT a, b, FROM t1 a a a; ---- -stmt 0 err 1 62 near "FROM": syntax error +stmt 0 err 1 62 66 near "FROM": syntax error ==== 6.5 WITH x AS (SELECT * FROM t1) DELETE FROM t2 WHERE; ---- -stmt 0 err 1 54 near ";": syntax error +stmt 0 err 1 54 55 near ";": syntax error ==== 6.6 WITH x AS (SELECT * FROM t1) DELETE FROM t2 WHERE ---- -stmt 0 err 1 -1 incomplete input +stmt 0 err 1 -1 54 incomplete input ==== 6.7 WITH x AS (SELECT * FROM t1) DELETE FROM t2 WHRE 1; ---- -stmt 0 err 1 48 near "WHRE": syntax error +stmt 0 err 1 48 52 near "WHRE": syntax error ==== 6.8 WITH x AS (SELECT * FROM t1) UPDATE t2 SET a = 10, b = ; ---- -stmt 0 err 1 59 near ";": syntax error +stmt 0 err 1 59 60 near ";": syntax error ==== 6.9 WITH x AS (SELECT * FROM t1) UPDATE t2 SET a = 10, b = 1 WHERE a===b; ---- -stmt 0 err 1 70 near "=": syntax error +stmt 0 err 1 70 71 near "=": syntax error ==== 6.10 WITH x(a,b) AS ( @@ -307,7 +307,7 @@ stmt 0 err 1 70 near "=": syntax error ) SELECT * FROM x ---- -stmt 0 err 1 82 no such column: c +stmt 0 err 1 82 108 no such column: c ==== 7.1 CREATE TABLE t5(x INTEGER); @@ -323,25 +323,25 @@ stmt 0 err 1 82 no such column: c ---- stmt 0 ok stmt 30 ok -stmt 60 err 1 -1 no such table: t5 -stmt 166 err 1 -1 no such table: t6 +stmt 60 err 1 -1 166 no such table: t5 +stmt 166 err 1 -1 272 no such table: t6 ==== 7.2 SELECT * FROM t6 WHERE y IN (SELECT x FROM t5) ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 50 no such table: t6 ==== 7.3 WITH ss AS (SELECT x FROM t5) SELECT * FROM t6 WHERE y IN (SELECT x FROM ss) ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 82 no such table: t6 ==== 7.4 WITH ss(x) AS ( VALUES(7) UNION ALL SELECT x+7 FROM ss WHERE x<49 ) SELECT * FROM t6 WHERE y IN (SELECT x FROM ss) ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 120 no such table: t6 ==== 7.5 SELECT * FROM t6 WHERE y IN ( @@ -349,7 +349,7 @@ stmt 0 err 1 -1 no such table: t6 SELECT x FROM ss ) ---- -stmt 0 err 1 -1 no such table: t6 +stmt 0 err 1 -1 130 no such table: t6 ==== 8.1 CREATE TABLE t7(y); @@ -357,7 +357,7 @@ stmt 0 err 1 -1 no such table: t6 CREATE VIEW v AS SELECT * FROM t7 ORDER BY y; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t7 +stmt 22 err 1 -1 53 no such table: t7 stmt 53 ok ==== 8.2 @@ -368,7 +368,7 @@ stmt 53 ok ) SELECT * FROM q; ---- -stmt 0 err 1 -1 no such table: v +stmt 0 err 1 -1 99 no such table: v ==== 8.3 WITH q(a) AS ( @@ -378,7 +378,7 @@ stmt 0 err 1 -1 no such table: v ) SELECT * FROM q; ---- -stmt 0 err 1 -1 no such table: v +stmt 0 err 1 -1 102 no such table: v ==== 9.1 WITH xyz(a) AS ( @@ -494,7 +494,7 @@ stmt 0 ok ) SELECT * FROM radygrid , ypos; ---- -stmt 0 err 1 -1 no such table: generate_series +stmt 0 err 1 -1 3754 no such table: generate_series ==== 10.1 SELECT 1 AS c WHERE ( @@ -521,15 +521,15 @@ stmt 0 ok ---- stmt 0 ok stmt 24 ok -stmt 211 err 1 -1 no such table: t1 +stmt 211 err 1 -1 252 no such table: t1 stmt 252 ok ==== 11.2 INSERT INTO t1 VALUES(55); SELECT * FROM v2; ---- -stmt 0 err 1 -1 no such table: t1 -stmt 31 err 1 -1 no such table: v2 +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 53 no such table: v2 ==== 11.3 DROP VIEW v2; @@ -542,9 +542,9 @@ stmt 31 err 1 -1 no such table: v2 ) SELECT * from t1, x; SELECT * FROM v2; ---- -stmt 0 err 1 -1 no such view: v2 +stmt 0 err 1 -1 18 no such view: v2 stmt 18 ok -stmt 208 err 1 -1 no such table: v2 +stmt 208 err 1 -1 230 no such table: v2 ==== 11.4 DROP VIEW v2; @@ -557,9 +557,9 @@ stmt 208 err 1 -1 no such table: v2 ) SELECT * from t1, x; SELECT * FROM v2; ---- -stmt 0 err 1 -1 no such view: v2 +stmt 0 err 1 -1 18 no such view: v2 stmt 18 ok -stmt 208 err 1 -1 no such table: v2 +stmt 208 err 1 -1 230 no such table: v2 ==== 11.5 WITH x AS ( @@ -569,7 +569,7 @@ stmt 208 err 1 -1 no such table: v2 ) SELECT a ) SELECT * from t1; ---- -stmt 0 err 1 -1 no such table: t1 +stmt 0 err 1 -1 149 no such table: t1 ==== 12.1 CREATE TABLE t1(a); @@ -580,11 +580,11 @@ stmt 0 err 1 -1 no such table: t1 SELECT quote(c) FROM v3; ---- stmt 0 ok -stmt 24 err 1 -1 no such table: t1 +stmt 24 err 1 -1 96 no such table: t1 stmt 96 ok stmt 217 ok -stmt 338 err 1 -1 no such table: t1 -stmt 372 err 1 -1 no such table: v3 +stmt 338 err 1 -1 372 no such table: t1 +stmt 372 err 1 -1 401 no such table: v3 ==== 13.1 WITH diff --git a/parser/testdata/with3.test b/parser/testdata/with3.test index 0bcd71e..90e9320 100644 --- a/parser/testdata/with3.test +++ b/parser/testdata/with3.test @@ -6,7 +6,7 @@ ) SELECT * FROM i; ---- -stmt 0 err 1 -1 no such table: m +stmt 0 err 1 -1 109 no such table: m ==== 1.1 CREATE VIEW v1(x,y) AS @@ -15,7 +15,7 @@ stmt 0 err 1 -1 no such table: m SELECT * FROM v1; ---- stmt 0 ok -stmt 98 err 1 -1 no such table: v1 +stmt 98 err 1 -1 118 no such table: v1 ==== 2.0 WITH @@ -43,8 +43,8 @@ stmt 0 ok SELECT * FROM t1; ---- stmt 0 ok -stmt 22 err 1 -1 no such table: t1 -stmt 153 err 1 -1 no such table: t1 +stmt 22 err 1 -1 153 no such table: t1 +stmt 153 err 1 -1 173 no such table: t1 ==== 3.1.1 CREATE TABLE y1(a, b); @@ -55,8 +55,8 @@ stmt 153 err 1 -1 no such table: t1 ANALYZE; ---- stmt 0 ok -stmt 27 err 1 -1 no such table: main.y1 -stmt 58 err 1 -1 no such table: y1 +stmt 27 err 1 -1 58 no such table: main.y1 +stmt 58 err 1 -1 177 no such table: y1 stmt 177 ok ==== 3.2.1 @@ -136,7 +136,7 @@ stmt 0 ok cte2(z) as ( select 1 from cte1 ) select * from cte2, cte1; ---- -stmt 0 err 1 -1 table cte1 has 3 values for 2 columns +stmt 0 err 1 -1 111 table cte1 has 3 values for 2 columns ==== 6.1 with @@ -144,4 +144,4 @@ stmt 0 err 1 -1 table cte1 has 3 values for 2 columns cte2(z) as ( select 1 from cte1 UNION ALL SELECT z+1 FROM cte2 WHERE z<5) select * from cte2, cte1; ---- -stmt 0 err 1 -1 table cte1 has 3 values for 2 columns +stmt 0 err 1 -1 151 table cte1 has 3 values for 2 columns diff --git a/parser/testdata/withM.test b/parser/testdata/withM.test index 0757af1..f1cdc7a 100644 --- a/parser/testdata/withM.test +++ b/parser/testdata/withM.test @@ -4,4 +4,4 @@ INSERT INTO t1 VALUES(123, 456); ---- stmt 0 ok -stmt 41 err 1 -1 no such table: t1 +stmt 41 err 1 -1 76 no such table: t1 From 6f3292ad3ab6280ad39eefd5aaa935f2be76fd01 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 19:32:00 +0000 Subject: [PATCH 03/23] Extract the corpus from every pinned test script, and assert error offsets PLAN.md milestone 2 named a hand-picked starter set of 69 scripts. Taking the whole pinned test suite instead costs 4.4 MB and raises the corpus from 4,685 to 20,971 cases across 943 scripts, with no curation to redo when the pin advances. Scripts that yield no literal-SQL block (the C-level tokenizer tests, the VFS and WAL harnesses) get no corpus file. The harness now also checks the error byte offset against sqlite3_error_offset wherever SQLite reported one, not just the message. Two fixes this shook out of the tooling: - An error message can span lines, because the offending token can: "SELECT X'0102, 1" reports the rest of the input, newline included, as an unrecognized token. runOracle joined nothing and failed the whole run; it now folds continuation lines back into the message so testfile.CheckCase can drop the case the way it already documents. - regenerate-parse wrote an empty corpus file for a script with nothing extractable, and left a stale one behind if a script stopped yielding cases. Corpus: 20971/20971 cases passing, and the parser needed no changes to get there. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- CLAUDE.md | 10 +- cmd/regenerate-parse/main.go | 87 +- parser/parser_test.go | 9 +- parser/testdata/README.md | 12 +- ....metadata.json => affinity2.metadata.json} | 0 parser/testdata/affinity2.test | 165 + ....metadata.json => affinity3.metadata.json} | 0 parser/testdata/affinity3.test | 147 + parser/testdata/aggerror.metadata.json | 1 + parser/testdata/aggerror.test | 17 + parser/testdata/aggfault.metadata.json | 1 + parser/testdata/aggfault.test | 7 + parser/testdata/aggnested.metadata.json | 1 + parser/testdata/aggnested.test | 280 + parser/testdata/aggorderby.metadata.json | 1 + parser/testdata/aggorderby.test | 150 + parser/testdata/alterauth.metadata.json | 1 + parser/testdata/alterauth.test | 16 + parser/testdata/alterauth2.metadata.json | 1 + parser/testdata/alterauth2.test | 16 + parser/testdata/altercol.metadata.json | 1 + parser/testdata/altercol.test | 879 ++ parser/testdata/altercons.metadata.json | 1 + parser/testdata/altercons.test | 349 + parser/testdata/altercons2.metadata.json | 1 + parser/testdata/altercons2.test | 249 + parser/testdata/altercorrupt.metadata.json | 1 + parser/testdata/altercorrupt.test | 12 + parser/testdata/alterfault.metadata.json | 1 + parser/testdata/alterfault.test | 14 + parser/testdata/alterlegacy.metadata.json | 1 + parser/testdata/alterlegacy.test | 516 + parser/testdata/altermalloc2.metadata.json | 1 + parser/testdata/altermalloc2.test | 45 + parser/testdata/altermalloc3.metadata.json | 1 + parser/testdata/altermalloc3.test | 41 + parser/testdata/alterqf.metadata.json | 1 + parser/testdata/alterqf.test | 28 + parser/testdata/altertrig.metadata.json | 1 + parser/testdata/altertrig.test | 36 + parser/testdata/amatch1.metadata.json | 1 + parser/testdata/amatch1.test | 82 + parser/testdata/analyze.metadata.json | 1 + parser/testdata/analyze.test | 326 + parser/testdata/analyze3.metadata.json | 1 + parser/testdata/analyze3.test | 120 + parser/testdata/analyze7.metadata.json | 1 + parser/testdata/analyze7.test | 52 + parser/testdata/analyze8.metadata.json | 1 + parser/testdata/analyze8.test | 9 + parser/testdata/analyze9.metadata.json | 1 + parser/testdata/analyze9.test | 567 + parser/testdata/analyzeC.metadata.json | 1 + parser/testdata/analyzeC.test | 204 + parser/testdata/analyzeD.metadata.json | 1 + parser/testdata/analyzeD.test | 12 + parser/testdata/analyzeE.metadata.json | 1 + parser/testdata/analyzeE.test | 377 + parser/testdata/analyzeF.metadata.json | 1 + parser/testdata/analyzeF.test | 78 + parser/testdata/analyzeG.metadata.json | 1 + parser/testdata/analyzeG.test | 26 + parser/testdata/atof1.metadata.json | 1 + parser/testdata/atof1.test | 54 + parser/testdata/atof2.metadata.json | 1 + parser/testdata/atof2.test | 20 + parser/testdata/atomic.metadata.json | 1 + parser/testdata/atomic.test | 14 + parser/testdata/atomic2.metadata.json | 1 + parser/testdata/atomic2.test | 13 + parser/testdata/attach.metadata.json | 1 + parser/testdata/attach.test | 401 + parser/testdata/attach2.metadata.json | 1 + parser/testdata/attach2.test | 87 + parser/testdata/attach3.metadata.json | 1 + parser/testdata/attach3.test | 194 + parser/testdata/attach4.metadata.json | 1 + parser/testdata/attach4.test | 28 + parser/testdata/auth.metadata.json | 1 + parser/testdata/auth.test | 613 + parser/testdata/auth3.metadata.json | 1 + parser/testdata/auth3.test | 24 + parser/testdata/autoanalyze1.metadata.json | 1 + parser/testdata/autoanalyze1.test | 101 + parser/testdata/autoinc.metadata.json | 1 + parser/testdata/autoinc.test | 502 + parser/testdata/autoindex1.metadata.json | 1 + parser/testdata/autoindex1.test | 427 + parser/testdata/autoindex2.metadata.json | 1 + parser/testdata/autoindex2.test | 263 + parser/testdata/autoindex3.metadata.json | 1 + parser/testdata/autoindex3.test | 85 + parser/testdata/autoindex4.metadata.json | 1 + parser/testdata/autoindex4.test | 115 + parser/testdata/autoindex5.metadata.json | 1 + parser/testdata/autoindex5.test | 217 + parser/testdata/autovacuum.metadata.json | 1 + parser/testdata/autovacuum.test | 269 + parser/testdata/autovacuum2.metadata.json | 1 + parser/testdata/autovacuum2.test | 65 + parser/testdata/avtrans.metadata.json | 1 + parser/testdata/avtrans.test | 512 + parser/testdata/backup.metadata.json | 1 + parser/testdata/backup.test | 110 + parser/testdata/backup4.metadata.json | 1 + parser/testdata/backup4.test | 34 + parser/testdata/backup5.metadata.json | 1 + parser/testdata/backup5.test | 49 + parser/testdata/backup_malloc.metadata.json | 1 + parser/testdata/backup_malloc.test | 13 + parser/testdata/basexx1.metadata.json | 1 + parser/testdata/basexx1.test | 150 + parser/testdata/bestindex1.metadata.json | 1 + parser/testdata/bestindex1.test | 70 + parser/testdata/bestindex2.metadata.json | 1 + parser/testdata/bestindex2.test | 14 + parser/testdata/bestindex3.metadata.json | 1 + parser/testdata/bestindex3.test | 55 + parser/testdata/bestindex4.metadata.json | 1 + parser/testdata/bestindex4.test | 7 + parser/testdata/bestindex5.metadata.json | 1 + parser/testdata/bestindex5.test | 110 + parser/testdata/bestindex6.metadata.json | 1 + parser/testdata/bestindex6.test | 34 + parser/testdata/bestindex7.metadata.json | 1 + parser/testdata/bestindex7.test | 62 + parser/testdata/bestindex8.metadata.json | 1 + parser/testdata/bestindex8.test | 66 + parser/testdata/bestindexA.metadata.json | 1 + parser/testdata/bestindexA.test | 5 + parser/testdata/bestindexB.metadata.json | 1 + parser/testdata/bestindexB.test | 33 + parser/testdata/bestindexC.metadata.json | 1 + parser/testdata/bestindexC.test | 212 + parser/testdata/bestindexD.metadata.json | 1 + parser/testdata/bestindexD.test | 8 + parser/testdata/bestindexE.metadata.json | 1 + parser/testdata/bestindexE.test | 29 + parser/testdata/bestindexF.metadata.json | 1 + parser/testdata/bestindexF.test | 57 + parser/testdata/bigfile.metadata.json | 1 + parser/testdata/bigfile.test | 36 + parser/testdata/bigfile2.metadata.json | 1 + parser/testdata/bigfile2.test | 7 + parser/testdata/bigmmap.metadata.json | 1 + parser/testdata/bigmmap.test | 15 + parser/testdata/bigrow.metadata.json | 1 + parser/testdata/bigrow.test | 73 + parser/testdata/bigsort.metadata.json | 1 + parser/testdata/bigsort.test | 25 + parser/testdata/bind.metadata.json | 1 + parser/testdata/bind.test | 119 + parser/testdata/bind2.metadata.json | 1 + parser/testdata/bind2.test | 9 + parser/testdata/blob.metadata.json | 1 + parser/testdata/blob.test | 36 + parser/testdata/bloom1.metadata.json | 1 + parser/testdata/bloom1.test | 215 + parser/testdata/btree01.metadata.json | 1 + parser/testdata/btree01.test | 40 + parser/testdata/btree02.metadata.json | 1 + parser/testdata/btree02.test | 19 + parser/testdata/btreefault.metadata.json | 1 + parser/testdata/btreefault.test | 16 + parser/testdata/busy.metadata.json | 1 + parser/testdata/busy.test | 42 + parser/testdata/cache.metadata.json | 1 + parser/testdata/cache.test | 61 + parser/testdata/cacheflush.metadata.json | 1 + parser/testdata/cacheflush.test | 112 + parser/testdata/cachespill.metadata.json | 1 + parser/testdata/cachespill.test | 15 + parser/testdata/capi2.metadata.json | 1 + parser/testdata/capi2.test | 72 + parser/testdata/capi3.metadata.json | 1 + parser/testdata/capi3.test | 97 + parser/testdata/capi3b.metadata.json | 1 + parser/testdata/capi3b.test | 22 + parser/testdata/capi3c.metadata.json | 1 + parser/testdata/capi3c.test | 97 + parser/testdata/capi3d.metadata.json | 1 + parser/testdata/capi3d.test | 17 + parser/testdata/carray01.metadata.json | 1 + parser/testdata/carray01.test | 14 + parser/testdata/carray02.metadata.json | 1 + parser/testdata/carray02.test | 24 + parser/testdata/carrayfault.metadata.json | 1 + parser/testdata/carrayfault.test | 5 + parser/testdata/cast.metadata.json | 1 + parser/testdata/cast.test | 579 + parser/testdata/cffault.metadata.json | 1 + parser/testdata/cffault.test | 34 + parser/testdata/changes.metadata.json | 1 + parser/testdata/changes.test | 15 + parser/testdata/changes2.metadata.json | 1 + parser/testdata/changes2.test | 47 + parser/testdata/check.metadata.json | 1 + parser/testdata/check.test | 642 + parser/testdata/checkfault.metadata.json | 1 + parser/testdata/checkfault.test | 9 + parser/testdata/chunksize.metadata.json | 1 + parser/testdata/chunksize.test | 7 + parser/testdata/cksumvfs.metadata.json | 1 + parser/testdata/cksumvfs.test | 47 + parser/testdata/close.metadata.json | 1 + parser/testdata/close.test | 11 + parser/testdata/closure01.metadata.json | 1 + parser/testdata/closure01.test | 187 + parser/testdata/collate1.metadata.json | 1 + parser/testdata/collate1.test | 393 + parser/testdata/collate2.metadata.json | 1 + parser/testdata/collate2.test | 632 + parser/testdata/collate3.metadata.json | 1 + parser/testdata/collate3.test | 228 + parser/testdata/collate4.metadata.json | 1 + parser/testdata/collate4.test | 382 + parser/testdata/collate5.metadata.json | 1 + parser/testdata/collate5.test | 206 + parser/testdata/collate6.metadata.json | 1 + parser/testdata/collate6.test | 110 + parser/testdata/collate7.metadata.json | 1 + parser/testdata/collate7.test | 10 + parser/testdata/collate8.metadata.json | 1 + parser/testdata/collate8.test | 137 + parser/testdata/collate9.metadata.json | 1 + parser/testdata/collate9.test | 71 + parser/testdata/collateA.metadata.json | 1 + parser/testdata/collateA.test | 244 + parser/testdata/collateB.metadata.json | 1 + parser/testdata/collateB.test | 88 + parser/testdata/colname.metadata.json | 1 + parser/testdata/colname.test | 61 + parser/testdata/columncount.metadata.json | 1 + parser/testdata/columncount.test | 7 + parser/testdata/conflict.metadata.json | 1 + parser/testdata/conflict.test | 418 + parser/testdata/conflict2.metadata.json | 1 + parser/testdata/conflict2.test | 386 + parser/testdata/conflict3.metadata.json | 1 + parser/testdata/conflict3.test | 439 + parser/testdata/corrupt.metadata.json | 1 + parser/testdata/corrupt.test | 50 + parser/testdata/corrupt2.metadata.json | 1 + parser/testdata/corrupt2.test | 48 + parser/testdata/corrupt3.metadata.json | 1 + parser/testdata/corrupt3.test | 15 + parser/testdata/corrupt4.metadata.json | 1 + parser/testdata/corrupt4.test | 18 + parser/testdata/corrupt9.metadata.json | 1 + parser/testdata/corrupt9.test | 21 + parser/testdata/corruptF.metadata.json | 1 + parser/testdata/corruptF.test | 14 + parser/testdata/corruptG.metadata.json | 1 + parser/testdata/corruptG.test | 31 + parser/testdata/corruptH.metadata.json | 1 + parser/testdata/corruptH.test | 71 + parser/testdata/corruptI.metadata.json | 1 + parser/testdata/corruptI.test | 106 + parser/testdata/corruptJ.metadata.json | 1 + parser/testdata/corruptJ.test | 12 + parser/testdata/corruptK.metadata.json | 1 + parser/testdata/corruptK.test | 83 + parser/testdata/corruptL.metadata.json | 1 + parser/testdata/corruptL.test | 276 + parser/testdata/corruptM.metadata.json | 1 + parser/testdata/corruptM.test | 114 + parser/testdata/corruptN.metadata.json | 1 + parser/testdata/corruptN.test | 174 + parser/testdata/cost.metadata.json | 1 + parser/testdata/cost.test | 120 + parser/testdata/count.metadata.json | 1 + parser/testdata/count.test | 162 + parser/testdata/countofview.metadata.json | 1 + parser/testdata/countofview.test | 109 + parser/testdata/crash.metadata.json | 1 + parser/testdata/crash.test | 28 + parser/testdata/crash3.metadata.json | 1 + parser/testdata/crash3.test | 50 + parser/testdata/crash7.metadata.json | 1 + parser/testdata/crash7.test | 37 + parser/testdata/crash8.metadata.json | 1 + parser/testdata/crash8.test | 125 + parser/testdata/crash9.metadata.json | 1 + parser/testdata/crash9.test | 21 + parser/testdata/crashM.metadata.json | 1 + parser/testdata/crashM.test | 38 + parser/testdata/createtab.metadata.json | 1 + parser/testdata/createtab.test | 32 + parser/testdata/cse.metadata.json | 1 + parser/testdata/cse.test | 156 + parser/testdata/csv01.metadata.json | 1 + parser/testdata/csv01.test | 279 + parser/testdata/ctime.metadata.json | 1 + parser/testdata/ctime.test | 105 + parser/testdata/cursorhint.metadata.json | 1 + parser/testdata/cursorhint.test | 76 + parser/testdata/cursorhint2.metadata.json | 1 + parser/testdata/cursorhint2.test | 29 + parser/testdata/date.metadata.json | 1 + parser/testdata/date.test | 80 + parser/testdata/date2.metadata.json | 1 + parser/testdata/date2.test | 215 + parser/testdata/date3.metadata.json | 1 + parser/testdata/date3.test | 18 + parser/testdata/dbdata.metadata.json | 1 + parser/testdata/dbdata.test | 58 + parser/testdata/dbfuzz001.metadata.json | 1 + parser/testdata/dbfuzz001.test | 50 + parser/testdata/dbpage.metadata.json | 1 + parser/testdata/dbpage.test | 199 + parser/testdata/dbpagefault.metadata.json | 1 + parser/testdata/dbpagefault.test | 37 + parser/testdata/dbstatus.metadata.json | 1 + parser/testdata/dbstatus.test | 25 + parser/testdata/dbstatus2.metadata.json | 1 + parser/testdata/dbstatus2.test | 42 + parser/testdata/decimal.metadata.json | 1 + parser/testdata/decimal.test | 318 + parser/testdata/default.metadata.json | 1 + parser/testdata/default.test | 137 + parser/testdata/delete.metadata.json | 1 + parser/testdata/delete.test | 200 + parser/testdata/delete2.metadata.json | 1 + parser/testdata/delete2.test | 33 + parser/testdata/delete3.metadata.json | 1 + parser/testdata/delete3.test | 58 + parser/testdata/delete4.metadata.json | 1 + parser/testdata/delete4.test | 352 + parser/testdata/descidx1.metadata.json | 1 + parser/testdata/descidx1.test | 143 + parser/testdata/descidx2.metadata.json | 1 + parser/testdata/descidx2.test | 38 + parser/testdata/descidx3.metadata.json | 1 + parser/testdata/descidx3.test | 84 + parser/testdata/diskfull.metadata.json | 1 + parser/testdata/diskfull.test | 21 + parser/testdata/distinct.metadata.json | 1 + parser/testdata/distinct.test | 283 + parser/testdata/distinct2.metadata.json | 1 + parser/testdata/distinct2.test | 465 + parser/testdata/distinctagg.metadata.json | 1 + parser/testdata/distinctagg.test | 187 + parser/testdata/e_blobbytes.metadata.json | 1 + parser/testdata/e_blobbytes.test | 12 + parser/testdata/e_blobclose.metadata.json | 1 + parser/testdata/e_blobclose.test | 29 + parser/testdata/e_blobopen.metadata.json | 1 + parser/testdata/e_blobopen.test | 179 + parser/testdata/e_blobwrite.metadata.json | 1 + parser/testdata/e_blobwrite.test | 24 + parser/testdata/e_changes.metadata.json | 1 + parser/testdata/e_changes.test | 308 + parser/testdata/e_dropview.metadata.json | 1 + parser/testdata/e_dropview.test | 97 + parser/testdata/e_fkey.metadata.json | 1 + parser/testdata/e_fkey.test | 1748 +++ parser/testdata/e_fts3.metadata.json | 1 + parser/testdata/e_fts3.test | 8 + parser/testdata/e_reindex.metadata.json | 1 + parser/testdata/e_reindex.test | 112 + parser/testdata/e_resolve.metadata.json | 1 + parser/testdata/e_resolve.test | 123 + parser/testdata/e_select2.metadata.json | 1 + parser/testdata/e_select2.test | 52 + parser/testdata/e_totalchanges.metadata.json | 1 + parser/testdata/e_totalchanges.test | 18 + parser/testdata/e_vacuum.metadata.json | 1 + parser/testdata/e_vacuum.test | 193 + parser/testdata/e_wal.metadata.json | 1 + parser/testdata/e_wal.test | 88 + parser/testdata/e_walauto.metadata.json | 1 + parser/testdata/e_walauto.test | 8 + parser/testdata/e_walckpt.metadata.json | 1 + parser/testdata/e_walckpt.test | 15 + parser/testdata/e_walhook.metadata.json | 1 + parser/testdata/e_walhook.test | 29 + parser/testdata/emptytable.metadata.json | 1 + parser/testdata/emptytable.test | 27 + parser/testdata/enc.metadata.json | 1 + parser/testdata/enc.test | 85 + parser/testdata/enc2.metadata.json | 1 + parser/testdata/enc2.test | 113 + parser/testdata/enc3.metadata.json | 1 + parser/testdata/enc3.test | 60 + parser/testdata/eqp.metadata.json | 1 + parser/testdata/eqp.test | 122 + parser/testdata/eqp2.metadata.json | 1 + parser/testdata/eqp2.test | 7 + parser/testdata/errmsg.metadata.json | 1 + parser/testdata/errmsg.test | 21 + parser/testdata/errofst1.metadata.json | 1 + parser/testdata/errofst1.test | 14 + parser/testdata/eval.metadata.json | 1 + parser/testdata/eval.test | 70 + parser/testdata/exclusive.metadata.json | 1 + parser/testdata/exclusive.test | 153 + parser/testdata/exclusive2.metadata.json | 1 + parser/testdata/exclusive2.test | 25 + parser/testdata/exec.metadata.json | 1 + parser/testdata/exec.test | 9 + parser/testdata/existsexpr.metadata.json | 1 + parser/testdata/existsexpr.test | 426 + parser/testdata/existsexpr2.metadata.json | 1 + parser/testdata/existsexpr2.test | 80 + parser/testdata/existsfault.metadata.json | 1 + parser/testdata/existsfault.test | 16 + parser/testdata/exprfault.metadata.json | 1 + parser/testdata/exprfault.test | 7 + parser/testdata/exprfault2.metadata.json | 1 + parser/testdata/exprfault2.test | 9 + parser/testdata/expridx1.metadata.json | 1 + parser/testdata/expridx1.test | 179 + parser/testdata/fallocate.metadata.json | 1 + parser/testdata/fallocate.test | 13 + parser/testdata/filefmt.metadata.json | 1 + parser/testdata/filefmt.test | 107 + parser/testdata/filter1.metadata.json | 1 + parser/testdata/filter1.test | 274 + parser/testdata/filter2.metadata.json | 1 + parser/testdata/filter2.test | 126 + parser/testdata/filterfault.metadata.json | 1 + parser/testdata/filterfault.test | 11 + parser/testdata/fkey1.metadata.json | 1 + parser/testdata/fkey1.test | 272 + parser/testdata/fkey2.metadata.json | 1 + parser/testdata/fkey2.test | 1245 ++ parser/testdata/fkey3.metadata.json | 1 + parser/testdata/fkey3.test | 202 + parser/testdata/fkey4.metadata.json | 1 + parser/testdata/fkey4.test | 13 + parser/testdata/fkey5.metadata.json | 1 + parser/testdata/fkey5.test | 170 + parser/testdata/fkey6.metadata.json | 1 + parser/testdata/fkey6.test | 341 + parser/testdata/fkey7.metadata.json | 1 + parser/testdata/fkey7.test | 93 + parser/testdata/fkey8.metadata.json | 1 + parser/testdata/fkey8.test | 252 + parser/testdata/fordelete.metadata.json | 1 + parser/testdata/fordelete.test | 86 + parser/testdata/fpconv1.metadata.json | 1 + parser/testdata/fpconv1.test | 60 + parser/testdata/fts-9fd058691.metadata.json | 1 + parser/testdata/fts-9fd058691.test | 27 + parser/testdata/fts3aa.metadata.json | 1 + parser/testdata/fts3aa.test | 256 + parser/testdata/fts3ab.metadata.json | 1 + parser/testdata/fts3ab.test | 64 + parser/testdata/fts3ac.metadata.json | 1 + parser/testdata/fts3ac.test | 160 + parser/testdata/fts3ad.metadata.json | 1 + parser/testdata/fts3ad.test | 95 + parser/testdata/fts3ae.metadata.json | 1 + parser/testdata/fts3ae.test | 24 + parser/testdata/fts3af.metadata.json | 1 + parser/testdata/fts3af.test | 28 + parser/testdata/fts3ag.metadata.json | 1 + parser/testdata/fts3ag.test | 52 + parser/testdata/fts3ah.metadata.json | 1 + parser/testdata/fts3ah.test | 4 + parser/testdata/fts3ai.metadata.json | 1 + parser/testdata/fts3ai.test | 4 + parser/testdata/fts3aj.metadata.json | 1 + parser/testdata/fts3aj.test | 26 + parser/testdata/fts3ak.metadata.json | 1 + parser/testdata/fts3ak.test | 81 + parser/testdata/fts3al.metadata.json | 1 + parser/testdata/fts3al.test | 4 + parser/testdata/fts3am.metadata.json | 1 + parser/testdata/fts3am.test | 33 + parser/testdata/fts3ao.metadata.json | 1 + parser/testdata/fts3ao.test | 184 + parser/testdata/fts3atoken.metadata.json | 1 + parser/testdata/fts3atoken.test | 131 + parser/testdata/fts3atoken2.metadata.json | 1 + parser/testdata/fts3atoken2.test | 30 + parser/testdata/fts3auto.metadata.json | 1 + parser/testdata/fts3auto.test | 26 + parser/testdata/fts3aux1.metadata.json | 1 + parser/testdata/fts3aux1.test | 383 + parser/testdata/fts3aux2.metadata.json | 1 + parser/testdata/fts3aux2.test | 142 + parser/testdata/fts3b.metadata.json | 1 + parser/testdata/fts3b.test | 104 + parser/testdata/fts3c.metadata.json | 1 + parser/testdata/fts3c.test | 44 + parser/testdata/fts3comp1.metadata.json | 1 + parser/testdata/fts3comp1.test | 124 + parser/testdata/fts3conf.metadata.json | 1 + parser/testdata/fts3conf.test | 226 + parser/testdata/fts3corrupt.metadata.json | 1 + parser/testdata/fts3corrupt.test | 183 + parser/testdata/fts3corrupt3.metadata.json | 1 + parser/testdata/fts3corrupt3.test | 37 + parser/testdata/fts3corrupt4.metadata.json | 1 + parser/testdata/fts3corrupt4.test | 785 ++ parser/testdata/fts3corrupt5.metadata.json | 1 + parser/testdata/fts3corrupt5.test | 21 + parser/testdata/fts3corrupt6.metadata.json | 1 + parser/testdata/fts3corrupt6.test | 110 + parser/testdata/fts3corrupt7.metadata.json | 1 + parser/testdata/fts3corrupt7.test | 73 + parser/testdata/fts3cov.metadata.json | 1 + parser/testdata/fts3cov.test | 156 + parser/testdata/fts3d.metadata.json | 1 + parser/testdata/fts3d.test | 73 + parser/testdata/fts3defer.metadata.json | 1 + parser/testdata/fts3defer.test | 160 + parser/testdata/fts3defer2.metadata.json | 1 + parser/testdata/fts3defer2.test | 141 + parser/testdata/fts3defer3.metadata.json | 1 + parser/testdata/fts3defer3.test | 25 + parser/testdata/fts3drop.metadata.json | 1 + parser/testdata/fts3drop.test | 51 + parser/testdata/fts3dropmod.metadata.json | 1 + parser/testdata/fts3dropmod.test | 20 + parser/testdata/fts3e.metadata.json | 1 + parser/testdata/fts3e.test | 49 + parser/testdata/fts3expr.metadata.json | 1 + parser/testdata/fts3expr.test | 81 + parser/testdata/fts3expr5.metadata.json | 1 + parser/testdata/fts3expr5.test | 32 + parser/testdata/fts3f.metadata.json | 1 + parser/testdata/fts3f.test | 21 + parser/testdata/fts3fault.metadata.json | 1 + parser/testdata/fts3fault.test | 14 + parser/testdata/fts3fault2.metadata.json | 1 + parser/testdata/fts3fault2.test | 38 + parser/testdata/fts3fault3.metadata.json | 1 + parser/testdata/fts3fault3.test | 25 + parser/testdata/fts3first.metadata.json | 1 + parser/testdata/fts3first.test | 76 + parser/testdata/fts3fuzz001.metadata.json | 1 + parser/testdata/fts3fuzz001.test | 46 + parser/testdata/fts3integrity.metadata.json | 1 + parser/testdata/fts3integrity.test | 21 + parser/testdata/fts3join.metadata.json | 1 + parser/testdata/fts3join.test | 102 + parser/testdata/fts3malloc.metadata.json | 1 + parser/testdata/fts3malloc.test | 12 + parser/testdata/fts3matchinfo.metadata.json | 1 + parser/testdata/fts3matchinfo.test | 302 + parser/testdata/fts3matchinfo2.metadata.json | 1 + parser/testdata/fts3matchinfo2.test | 11 + parser/testdata/fts3misc.metadata.json | 1 + parser/testdata/fts3misc.test | 319 + parser/testdata/fts3near.metadata.json | 1 + parser/testdata/fts3near.test | 219 + parser/testdata/fts3offsets.metadata.json | 1 + parser/testdata/fts3offsets.test | 95 + parser/testdata/fts3prefix.metadata.json | 1 + parser/testdata/fts3prefix.test | 290 + parser/testdata/fts3prefix2.metadata.json | 1 + parser/testdata/fts3prefix2.test | 54 + parser/testdata/fts3query.metadata.json | 1 + parser/testdata/fts3query.test | 103 + parser/testdata/fts3rank.metadata.json | 1 + parser/testdata/fts3rank.test | 43 + parser/testdata/fts3shared.metadata.json | 1 + parser/testdata/fts3shared.test | 28 + parser/testdata/fts3snippet.metadata.json | 1 + parser/testdata/fts3snippet.test | 98 + parser/testdata/fts3snippet2.metadata.json | 1 + parser/testdata/fts3snippet2.test | 48 + parser/testdata/fts3sort.metadata.json | 1 + parser/testdata/fts3sort.test | 49 + parser/testdata/fts3tok1.metadata.json | 1 + parser/testdata/fts3tok1.test | 90 + parser/testdata/fts4aa.metadata.json | 1 + parser/testdata/fts4aa.test | 76 + parser/testdata/fts4check.metadata.json | 1 + parser/testdata/fts4check.test | 72 + parser/testdata/fts4content.metadata.json | 1 + parser/testdata/fts4content.test | 677 + parser/testdata/fts4docid.metadata.json | 1 + parser/testdata/fts4docid.test | 52 + parser/testdata/fts4growth.metadata.json | 1 + parser/testdata/fts4growth.test | 255 + parser/testdata/fts4growth2.metadata.json | 1 + parser/testdata/fts4growth2.test | 20 + parser/testdata/fts4incr.metadata.json | 1 + parser/testdata/fts4incr.test | 15 + parser/testdata/fts4intck1.metadata.json | 1 + parser/testdata/fts4intck1.test | 52 + parser/testdata/fts4langid.metadata.json | 1 + parser/testdata/fts4langid.test | 265 + parser/testdata/fts4lastrowid.metadata.json | 1 + parser/testdata/fts4lastrowid.test | 73 + parser/testdata/fts4merge.metadata.json | 1 + parser/testdata/fts4merge.test | 143 + parser/testdata/fts4merge4.metadata.json | 1 + parser/testdata/fts4merge4.test | 24 + parser/testdata/fts4merge5.metadata.json | 1 + parser/testdata/fts4merge5.test | 34 + parser/testdata/fts4min.metadata.json | 1 + parser/testdata/fts4min.test | 28 + parser/testdata/fts4noti.metadata.json | 1 + parser/testdata/fts4noti.test | 255 + parser/testdata/fts4onepass.metadata.json | 1 + parser/testdata/fts4onepass.test | 74 + parser/testdata/fts4opt.metadata.json | 1 + parser/testdata/fts4opt.test | 108 + parser/testdata/fts4record.metadata.json | 1 + parser/testdata/fts4record.test | 94 + parser/testdata/fts4rename.metadata.json | 1 + parser/testdata/fts4rename.test | 26 + parser/testdata/fts4umlaut.metadata.json | 1 + parser/testdata/fts4umlaut.test | 10 + parser/testdata/fts4unicode.metadata.json | 1 + parser/testdata/fts4unicode.test | 179 + parser/testdata/fts4upfrom.metadata.json | 1 + parser/testdata/fts4upfrom.test | 51 + parser/testdata/func.metadata.json | 1 + parser/testdata/func.test | 1160 ++ parser/testdata/func2.metadata.json | 1 + parser/testdata/func2.test | 256 + parser/testdata/func3.metadata.json | 1 + parser/testdata/func3.test | 125 + parser/testdata/func4.metadata.json | 1 + parser/testdata/func4.test | 1019 ++ parser/testdata/func5.metadata.json | 1 + parser/testdata/func5.test | 40 + parser/testdata/func6.metadata.json | 1 + parser/testdata/func6.test | 78 + parser/testdata/func7.metadata.json | 1 + parser/testdata/func7.test | 360 + parser/testdata/func8.metadata.json | 1 + parser/testdata/func8.test | 66 + parser/testdata/func9.metadata.json | 1 + parser/testdata/func9.test | 55 + parser/testdata/fuzz-oss1.metadata.json | 1 + parser/testdata/fuzz-oss1.test | 5 + parser/testdata/fuzz.metadata.json | 1 + parser/testdata/fuzz.test | 195 + parser/testdata/fuzz2.metadata.json | 1 + parser/testdata/fuzz2.test | 20 + parser/testdata/fuzz4.metadata.json | 1 + parser/testdata/fuzz4.test | 89 + parser/testdata/fuzzer1.metadata.json | 1 + parser/testdata/fuzzer1.test | 2999 ++++ parser/testdata/fuzzer2.metadata.json | 1 + parser/testdata/fuzzer2.test | 27 + parser/testdata/fuzzerfault.metadata.json | 1 + parser/testdata/fuzzerfault.test | 11 + parser/testdata/gcfault.metadata.json | 1 + parser/testdata/gcfault.test | 14 + parser/testdata/gencol1.metadata.json | 1 + parser/testdata/gencol1.test | 665 + parser/testdata/having.metadata.json | 1 + parser/testdata/having.test | 92 + parser/testdata/hexlit.metadata.json | 1 + parser/testdata/hexlit.test | 38 + parser/testdata/hidden.metadata.json | 1 + parser/testdata/hidden.test | 163 + parser/testdata/hook.metadata.json | 1 + parser/testdata/hook.test | 315 + parser/testdata/hook2.metadata.json | 1 + parser/testdata/hook2.test | 49 + parser/testdata/icu.metadata.json | 1 + parser/testdata/icu.test | 72 + parser/testdata/ieee754.metadata.json | 1 + parser/testdata/ieee754.test | 15 + parser/testdata/imposter1.metadata.json | 1 + parser/testdata/imposter1.test | 69 + parser/testdata/in6.metadata.json | 1 + parser/testdata/in6.test | 69 + parser/testdata/in7.metadata.json | 1 + parser/testdata/in7.test | 139 + parser/testdata/incrblob.metadata.json | 1 + parser/testdata/incrblob.test | 70 + parser/testdata/incrblob2.metadata.json | 1 + parser/testdata/incrblob2.test | 45 + parser/testdata/incrblob3.metadata.json | 1 + parser/testdata/incrblob3.test | 32 + parser/testdata/incrblob4.metadata.json | 1 + parser/testdata/incrblob4.test | 23 + parser/testdata/incrblobfault.metadata.json | 1 + parser/testdata/incrblobfault.test | 29 + parser/testdata/incrcorrupt.metadata.json | 1 + parser/testdata/incrcorrupt.test | 34 + parser/testdata/incrvacuum.metadata.json | 1 + parser/testdata/incrvacuum.test | 173 + parser/testdata/incrvacuum2.metadata.json | 1 + parser/testdata/incrvacuum2.test | 70 + parser/testdata/incrvacuum3.metadata.json | 1 + parser/testdata/incrvacuum3.test | 12 + parser/testdata/index.metadata.json | 1 + parser/testdata/index.test | 563 + parser/testdata/index2.metadata.json | 1 + parser/testdata/index2.test | 8 + parser/testdata/index3.metadata.json | 1 + parser/testdata/index3.test | 55 + parser/testdata/index4.metadata.json | 1 + parser/testdata/index4.test | 162 + parser/testdata/index6.metadata.json | 1 + parser/testdata/index6.test | 585 + parser/testdata/index7.metadata.json | 1 + parser/testdata/index7.test | 313 + parser/testdata/index8.metadata.json | 1 + parser/testdata/index8.test | 34 + parser/testdata/index9.metadata.json | 1 + parser/testdata/index9.test | 22 + parser/testdata/indexA.metadata.json | 1 + parser/testdata/indexA.test | 334 + parser/testdata/indexedby.metadata.json | 1 + parser/testdata/indexedby.test | 257 + parser/testdata/indexexpr1.metadata.json | 1 + parser/testdata/indexexpr1.test | 813 ++ parser/testdata/indexexpr2.metadata.json | 1 + parser/testdata/indexexpr2.test | 338 + parser/testdata/indexfault.metadata.json | 1 + parser/testdata/indexfault.test | 127 + parser/testdata/insert.metadata.json | 1 + parser/testdata/insert.test | 448 + parser/testdata/insert2.metadata.json | 1 + parser/testdata/insert2.test | 132 + parser/testdata/insert3.metadata.json | 1 + parser/testdata/insert3.test | 172 + parser/testdata/insert4.metadata.json | 1 + parser/testdata/insert4.test | 332 + parser/testdata/insert5.metadata.json | 1 + parser/testdata/insert5.test | 39 + parser/testdata/insertfault.metadata.json | 1 + parser/testdata/insertfault.test | 9 + parser/testdata/instr.metadata.json | 1 + parser/testdata/instr.test | 61 + parser/testdata/instrfault.metadata.json | 1 + parser/testdata/instrfault.test | 9 + parser/testdata/interrupt.metadata.json | 1 + parser/testdata/interrupt.test | 63 + parser/testdata/interrupt2.metadata.json | 1 + parser/testdata/interrupt2.test | 41 + parser/testdata/intpkey.metadata.json | 1 + parser/testdata/intpkey.test | 414 + parser/testdata/intreal.metadata.json | 1 + parser/testdata/intreal.test | 128 + parser/testdata/io.metadata.json | 1 + parser/testdata/io.test | 60 + parser/testdata/ioerr2.metadata.json | 1 + parser/testdata/ioerr2.test | 21 + parser/testdata/ioerr5.metadata.json | 1 + parser/testdata/ioerr5.test | 18 + parser/testdata/ioerr6.metadata.json | 1 + parser/testdata/ioerr6.test | 4 + parser/testdata/istrue.metadata.json | 1 + parser/testdata/istrue.test | 226 + parser/testdata/join.metadata.json | 1 + parser/testdata/join.test | 1188 ++ parser/testdata/join2.metadata.json | 1 + parser/testdata/join2.test | 440 + parser/testdata/join4.metadata.json | 1 + parser/testdata/join4.test | 30 + parser/testdata/join5.metadata.json | 1 + parser/testdata/join5.test | 482 + parser/testdata/join6.metadata.json | 1 + parser/testdata/join6.test | 168 + parser/testdata/join7.metadata.json | 1 + parser/testdata/join7.test | 163 + parser/testdata/join8.metadata.json | 1 + parser/testdata/join8.test | 992 ++ parser/testdata/join9.metadata.json | 1 + parser/testdata/join9.test | 244 + parser/testdata/joinA.metadata.json | 1 + parser/testdata/joinA.test | 134 + parser/testdata/joinB.metadata.json | 1 + parser/testdata/joinB.test | 5760 ++++++++ parser/testdata/joinC.metadata.json | 1 + parser/testdata/joinC.test | 3328 +++++ parser/testdata/joinD.metadata.json | 1 + parser/testdata/joinD.test | 11435 ++++++++++++++++ parser/testdata/joinE.metadata.json | 1 + parser/testdata/joinE.test | 252 + parser/testdata/joinF.metadata.json | 1 + parser/testdata/joinF.test | 513 + parser/testdata/joinH.metadata.json | 1 + parser/testdata/joinH.test | 591 + parser/testdata/joinI.metadata.json | 1 + parser/testdata/joinI.test | 287 + parser/testdata/journal1.metadata.json | 1 + parser/testdata/journal1.test | 15 + parser/testdata/journal2.metadata.json | 1 + parser/testdata/journal2.test | 19 + parser/testdata/journal3.metadata.json | 1 + parser/testdata/journal3.test | 8 + parser/testdata/jrnlmode.metadata.json | 1 + parser/testdata/jrnlmode.test | 334 + parser/testdata/jrnlmode2.metadata.json | 1 + parser/testdata/jrnlmode2.test | 9 + parser/testdata/json101.metadata.json | 1 + parser/testdata/json101.test | 566 + parser/testdata/json102.metadata.json | 1 + parser/testdata/json102.test | 216 + parser/testdata/json103.metadata.json | 1 + parser/testdata/json103.test | 107 + parser/testdata/json104.metadata.json | 1 + parser/testdata/json104.test | 138 + parser/testdata/json106.metadata.json | 1 + parser/testdata/json106.test | 61 + parser/testdata/json107.metadata.json | 1 + parser/testdata/json107.test | 51 + parser/testdata/json108.metadata.json | 1 + parser/testdata/json108.test | 25 + parser/testdata/json501.metadata.json | 1 + parser/testdata/json501.test | 236 + parser/testdata/json502.metadata.json | 1 + parser/testdata/json502.test | 9 + parser/testdata/jsonb01.metadata.json | 1 + parser/testdata/jsonb01.test | 5 + parser/testdata/keyword1.test | 0 parser/testdata/lastinsert.metadata.json | 1 + parser/testdata/lastinsert.test | 256 + parser/testdata/laststmtchanges.metadata.json | 1 + parser/testdata/laststmtchanges.test | 247 + parser/testdata/like.metadata.json | 1 + parser/testdata/like.test | 336 + parser/testdata/like3.metadata.json | 1 + parser/testdata/like3.test | 276 + parser/testdata/limit.metadata.json | 1 + parser/testdata/limit.test | 413 + parser/testdata/limit2.metadata.json | 1 + parser/testdata/limit2.test | 250 + parser/testdata/literal.metadata.json | 1 + parser/testdata/literal.test | 5 + parser/testdata/literal2.metadata.json | 1 + parser/testdata/literal2.test | 25 + parser/testdata/loadext.metadata.json | 1 + parser/testdata/loadext.test | 30 + parser/testdata/loadext2.metadata.json | 1 + parser/testdata/loadext2.test | 50 + parser/testdata/lock.metadata.json | 1 + parser/testdata/lock.test | 58 + parser/testdata/lock2.metadata.json | 1 + parser/testdata/lock2.test | 26 + parser/testdata/lock3.metadata.json | 1 + parser/testdata/lock3.test | 8 + parser/testdata/lock5.metadata.json | 1 + parser/testdata/lock5.test | 19 + parser/testdata/lock6.metadata.json | 1 + parser/testdata/lock6.test | 4 + parser/testdata/main.metadata.json | 1 + parser/testdata/main.test | 100 + parser/testdata/malloc.metadata.json | 1 + parser/testdata/malloc.test | 29 + parser/testdata/malloc3.metadata.json | 1 + parser/testdata/malloc3.test | 140 + parser/testdata/malloc5.metadata.json | 1 + parser/testdata/malloc5.test | 5 + parser/testdata/mallocA.metadata.json | 1 + parser/testdata/mallocA.test | 32 + parser/testdata/mallocK.metadata.json | 1 + parser/testdata/mallocK.test | 106 + parser/testdata/mallocM.metadata.json | 1 + parser/testdata/mallocM.test | 17 + parser/testdata/memdb.metadata.json | 1 + parser/testdata/memdb.test | 184 + parser/testdata/memdb1.metadata.json | 1 + parser/testdata/memdb1.test | 147 + parser/testdata/memdb2.metadata.json | 1 + parser/testdata/memdb2.test | 24 + parser/testdata/memjournal.metadata.json | 1 + parser/testdata/memjournal.test | 19 + parser/testdata/memjournal2.metadata.json | 1 + parser/testdata/memjournal2.test | 38 + parser/testdata/merge1.metadata.json | 1 + parser/testdata/merge1.test | 36 + parser/testdata/minmax.metadata.json | 1 + parser/testdata/minmax.test | 523 + parser/testdata/minmax2.metadata.json | 1 + parser/testdata/minmax2.test | 267 + parser/testdata/minmax3.metadata.json | 1 + parser/testdata/minmax3.test | 186 + parser/testdata/minmax4.metadata.json | 1 + parser/testdata/minmax4.test | 106 + parser/testdata/misc1.metadata.json | 1 + parser/testdata/misc1.test | 518 + parser/testdata/misc2.metadata.json | 1 + parser/testdata/misc2.test | 193 + parser/testdata/misc3.metadata.json | 1 + parser/testdata/misc3.test | 233 + parser/testdata/misc4.metadata.json | 1 + parser/testdata/misc4.test | 81 + parser/testdata/misc5.metadata.json | 1 + parser/testdata/misc5.test | 168 + parser/testdata/misc7.metadata.json | 1 + parser/testdata/misc7.test | 78 + parser/testdata/misc8.metadata.json | 1 + parser/testdata/misc8.test | 145 + parser/testdata/misuse.metadata.json | 1 + parser/testdata/misuse.test | 20 + parser/testdata/mjournal.metadata.json | 1 + parser/testdata/mjournal.test | 62 + parser/testdata/mmap1.metadata.json | 1 + parser/testdata/mmap1.test | 71 + parser/testdata/mmap2.metadata.json | 1 + parser/testdata/mmap2.test | 26 + parser/testdata/mmapcorrupt.metadata.json | 1 + parser/testdata/mmapcorrupt.test | 27 + parser/testdata/mmapwarm.metadata.json | 1 + parser/testdata/mmapwarm.test | 14 + parser/testdata/multiplex.metadata.json | 1 + parser/testdata/multiplex.test | 80 + parser/testdata/nockpt.metadata.json | 1 + parser/testdata/nockpt.test | 53 + parser/testdata/normalize.metadata.json | 1 + parser/testdata/normalize.test | 17 + parser/testdata/notify1.metadata.json | 1 + parser/testdata/notify1.test | 58 + parser/testdata/notify3.metadata.json | 1 + parser/testdata/notify3.test | 19 + parser/testdata/notnull.metadata.json | 1 + parser/testdata/notnull.test | 694 + parser/testdata/notnull2.metadata.json | 1 + parser/testdata/notnull2.test | 69 + parser/testdata/notnullfault.metadata.json | 1 + parser/testdata/notnullfault.test | 14 + parser/testdata/null.metadata.json | 1 + parser/testdata/null.test | 269 + parser/testdata/nulls1.metadata.json | 1 + parser/testdata/nulls1.test | 277 + parser/testdata/nulls2.metadata.json | 1 + parser/testdata/nulls2.test | 40 + parser/testdata/numindex1.metadata.json | 1 + parser/testdata/numindex1.test | 89 + parser/testdata/offset1.metadata.json | 1 + parser/testdata/offset1.test | 232 + parser/testdata/openv2.metadata.json | 1 + parser/testdata/openv2.test | 9 + parser/testdata/orderby1.metadata.json | 1 + parser/testdata/orderby1.test | 95 + parser/testdata/orderby3.metadata.json | 1 + parser/testdata/orderby3.test | 134 + parser/testdata/orderby4.metadata.json | 1 + parser/testdata/orderby4.test | 50 + parser/testdata/orderby5.metadata.json | 1 + parser/testdata/orderby5.test | 225 + parser/testdata/orderby6.metadata.json | 1 + parser/testdata/orderby6.test | 120 + parser/testdata/orderby7.metadata.json | 1 + parser/testdata/orderby7.test | 98 + parser/testdata/orderby9.metadata.json | 1 + parser/testdata/orderby9.test | 10 + parser/testdata/orderbyA.metadata.json | 1 + parser/testdata/orderbyA.test | 66 + parser/testdata/orderbyB.metadata.json | 1 + parser/testdata/orderbyB.test | 26 + parser/testdata/ovfl.metadata.json | 1 + parser/testdata/ovfl.test | 5 + parser/testdata/pager1.metadata.json | 1 + parser/testdata/pager1.test | 628 + parser/testdata/pager2.metadata.json | 1 + parser/testdata/pager2.test | 7 + parser/testdata/pager4.metadata.json | 1 + parser/testdata/pager4.test | 75 + parser/testdata/pagerfault3.metadata.json | 1 + parser/testdata/pagerfault3.test | 13 + parser/testdata/pagesize.metadata.json | 1 + parser/testdata/pagesize.test | 144 + parser/testdata/pcache2.metadata.json | 1 + parser/testdata/pcache2.test | 7 + parser/testdata/pendingrace.metadata.json | 1 + parser/testdata/pendingrace.test | 19 + parser/testdata/percentile.metadata.json | 1 + parser/testdata/percentile.test | 382 + parser/testdata/pragma.metadata.json | 1 + parser/testdata/pragma.test | 1014 ++ parser/testdata/pragma2.metadata.json | 1 + parser/testdata/pragma2.test | 193 + parser/testdata/pragma3.metadata.json | 1 + parser/testdata/pragma3.test | 84 + parser/testdata/pragma4.metadata.json | 1 + parser/testdata/pragma4.test | 234 + parser/testdata/pragma5.metadata.json | 1 + parser/testdata/pragma5.test | 37 + parser/testdata/pragmafault.metadata.json | 1 + parser/testdata/pragmafault.test | 9 + parser/testdata/prefixes.metadata.json | 1 + parser/testdata/prefixes.test | 43 + parser/testdata/printf.metadata.json | 1 + parser/testdata/printf.test | 85 + parser/testdata/printf2.metadata.json | 1 + parser/testdata/printf2.test | 260 + parser/testdata/progress.metadata.json | 1 + parser/testdata/progress.test | 5 + parser/testdata/ptrchng.metadata.json | 1 + parser/testdata/ptrchng.test | 163 + parser/testdata/pushdown.metadata.json | 1 + parser/testdata/pushdown.test | 220 + parser/testdata/qrf01.metadata.json | 1 + parser/testdata/qrf01.test | 44 + parser/testdata/qrf02.metadata.json | 1 + parser/testdata/qrf02.test | 7 + parser/testdata/qrf05.metadata.json | 1 + parser/testdata/qrf05.test | 5 + parser/testdata/queryonly.metadata.json | 1 + parser/testdata/queryonly.test | 80 + parser/testdata/quickcheck.metadata.json | 1 + parser/testdata/quickcheck.test | 18 + parser/testdata/quota.metadata.json | 1 + parser/testdata/quota.test | 20 + parser/testdata/quote.metadata.json | 1 + parser/testdata/quote.test | 137 + parser/testdata/rdonly.metadata.json | 1 + parser/testdata/rdonly.test | 14 + parser/testdata/readonly.metadata.json | 1 + parser/testdata/readonly.test | 19 + parser/testdata/recover.metadata.json | 1 + parser/testdata/recover.test | 51 + parser/testdata/regexp1.metadata.json | 1 + parser/testdata/regexp1.test | 227 + parser/testdata/regexp2.metadata.json | 1 + parser/testdata/regexp2.test | 140 + parser/testdata/reindex.metadata.json | 1 + parser/testdata/reindex.test | 106 + parser/testdata/reservebytes.metadata.json | 1 + parser/testdata/reservebytes.test | 20 + parser/testdata/resetdb.metadata.json | 1 + parser/testdata/resetdb.test | 115 + parser/testdata/resolver01.metadata.json | 1 + parser/testdata/resolver01.test | 176 + parser/testdata/returningfault.metadata.json | 1 + parser/testdata/returningfault.test | 10 + parser/testdata/rollback.metadata.json | 1 + parser/testdata/rollback.test | 31 + parser/testdata/rollback2.metadata.json | 1 + parser/testdata/rollback2.test | 19 + parser/testdata/rollbackfault.metadata.json | 1 + parser/testdata/rollbackfault.test | 19 + parser/testdata/rowallock.metadata.json | 1 + parser/testdata/rowallock.test | 28 + parser/testdata/rowhash.metadata.json | 1 + parser/testdata/rowhash.test | 11 + parser/testdata/rowid.metadata.json | 1 + parser/testdata/rowid.test | 729 + parser/testdata/rowvalue.metadata.json | 1 + parser/testdata/rowvalue.test | 968 ++ parser/testdata/rowvalue2.metadata.json | 1 + parser/testdata/rowvalue2.test | 130 + parser/testdata/rowvalue3.metadata.json | 1 + parser/testdata/rowvalue3.test | 133 + parser/testdata/rowvalue4.metadata.json | 1 + parser/testdata/rowvalue4.test | 202 + parser/testdata/rowvalue5.metadata.json | 1 + parser/testdata/rowvalue5.test | 5 + parser/testdata/rowvalue6.metadata.json | 1 + parser/testdata/rowvalue6.test | 27 + parser/testdata/rowvalue7.metadata.json | 1 + parser/testdata/rowvalue7.test | 67 + parser/testdata/rowvalue8.metadata.json | 1 + parser/testdata/rowvalue8.test | 48 + parser/testdata/rowvalue9.metadata.json | 1 + parser/testdata/rowvalue9.test | 364 + parser/testdata/rowvalueA.metadata.json | 1 + parser/testdata/rowvalueA.test | 135 + parser/testdata/rowvaluefault.metadata.json | 1 + parser/testdata/rowvaluefault.test | 16 + parser/testdata/rowvaluevtab.metadata.json | 1 + parser/testdata/rowvaluevtab.test | 57 + parser/testdata/savepoint.metadata.json | 1 + parser/testdata/savepoint.test | 331 + parser/testdata/savepoint4.metadata.json | 1 + parser/testdata/savepoint4.test | 84 + parser/testdata/scanstatus.metadata.json | 1 + parser/testdata/scanstatus.test | 287 + parser/testdata/scanstatus2.metadata.json | 1 + parser/testdata/scanstatus2.test | 85 + parser/testdata/schema.metadata.json | 1 + parser/testdata/schema.test | 5 + parser/testdata/schema2.metadata.json | 1 + parser/testdata/schema2.test | 5 + parser/testdata/schema4.metadata.json | 1 + parser/testdata/schema4.test | 200 + parser/testdata/schema5.metadata.json | 1 + parser/testdata/schema5.test | 16 + parser/testdata/schemafault.metadata.json | 1 + parser/testdata/schemafault.test | 7 + parser/testdata/securedel2.metadata.json | 1 + parser/testdata/securedel2.test | 20 + parser/testdata/seekscan1.metadata.json | 1 + parser/testdata/seekscan1.test | 47 + parser/testdata/selectG.test | 0 parser/testdata/shared.metadata.json | 1 + parser/testdata/shared.test | 85 + parser/testdata/shared2.metadata.json | 1 + parser/testdata/shared2.test | 7 + parser/testdata/shared3.metadata.json | 1 + parser/testdata/shared3.test | 36 + parser/testdata/shared7.metadata.json | 1 + parser/testdata/shared7.test | 5 + parser/testdata/sharedlock.metadata.json | 1 + parser/testdata/sharedlock.test | 20 + parser/testdata/shell7.metadata.json | 1 + parser/testdata/shell7.test | 19 + parser/testdata/shell9.metadata.json | 1 + parser/testdata/shell9.test | 38 + parser/testdata/shmlock.metadata.json | 1 + parser/testdata/shmlock.test | 9 + parser/testdata/shortread1.metadata.json | 1 + parser/testdata/shortread1.test | 27 + parser/testdata/sidedelete.metadata.json | 1 + parser/testdata/sidedelete.test | 20 + parser/testdata/skipscan1.metadata.json | 1 + parser/testdata/skipscan1.test | 541 + parser/testdata/skipscan2.metadata.json | 1 + parser/testdata/skipscan2.test | 227 + parser/testdata/skipscan3.metadata.json | 1 + parser/testdata/skipscan3.test | 64 + parser/testdata/skipscan5.metadata.json | 1 + parser/testdata/skipscan5.test | 21 + parser/testdata/skipscan6.metadata.json | 1 + parser/testdata/skipscan6.test | 233 + parser/testdata/snapshot.metadata.json | 1 + parser/testdata/snapshot.test | 113 + parser/testdata/snapshot2.metadata.json | 1 + parser/testdata/snapshot2.test | 59 + parser/testdata/snapshot3.metadata.json | 1 + parser/testdata/snapshot3.test | 26 + parser/testdata/snapshot4.metadata.json | 1 + parser/testdata/snapshot4.test | 23 + parser/testdata/snapshot_fault.metadata.json | 1 + parser/testdata/snapshot_fault.test | 41 + parser/testdata/snapshot_up.metadata.json | 1 + parser/testdata/snapshot_up.test | 52 + parser/testdata/softheap1.metadata.json | 1 + parser/testdata/softheap1.test | 23 + parser/testdata/sort.metadata.json | 1 + parser/testdata/sort.test | 521 + parser/testdata/sort2.metadata.json | 1 + parser/testdata/sort2.test | 52 + parser/testdata/sort3.metadata.json | 1 + parser/testdata/sort3.test | 51 + parser/testdata/sort5.metadata.json | 1 + parser/testdata/sort5.test | 14 + parser/testdata/sorterref.metadata.json | 1 + parser/testdata/sorterref.test | 44 + parser/testdata/sortfault.metadata.json | 1 + parser/testdata/sortfault.test | 12 + parser/testdata/speed3.metadata.json | 1 + parser/testdata/speed3.test | 7 + parser/testdata/spellfix.metadata.json | 1 + parser/testdata/spellfix.test | 277 + parser/testdata/spellfix2.metadata.json | 1 + parser/testdata/spellfix2.test | 60 + parser/testdata/spellfix3.metadata.json | 1 + parser/testdata/spellfix3.test | 50 + parser/testdata/spellfix4.metadata.json | 1 + parser/testdata/spellfix4.test | 391 + parser/testdata/sqllimits1.metadata.json | 1 + parser/testdata/sqllimits1.test | 82 + parser/testdata/sqllog.metadata.json | 1 + parser/testdata/sqllog.test | 14 + parser/testdata/starschema1.metadata.json | 1 + parser/testdata/starschema1.test | 771 ++ parser/testdata/stat.metadata.json | 1 + parser/testdata/stat.test | 278 + parser/testdata/statfault.metadata.json | 1 + parser/testdata/statfault.test | 15 + parser/testdata/stmt.metadata.json | 1 + parser/testdata/stmt.test | 8 + parser/testdata/stmtrand.metadata.json | 1 + parser/testdata/stmtrand.test | 24 + parser/testdata/stmtvtab1.metadata.json | 1 + parser/testdata/stmtvtab1.test | 15 + parser/testdata/strict1.metadata.json | 1 + parser/testdata/strict1.test | 351 + parser/testdata/strict2.metadata.json | 1 + parser/testdata/strict2.test | 215 + parser/testdata/subjournal.metadata.json | 1 + parser/testdata/subjournal.test | 59 + parser/testdata/subquery.metadata.json | 1 + parser/testdata/subquery.test | 561 + parser/testdata/subquery2.metadata.json | 1 + parser/testdata/subquery2.test | 231 + parser/testdata/subselect.metadata.json | 1 + parser/testdata/subselect.test | 130 + parser/testdata/subtype1.metadata.json | 1 + parser/testdata/subtype1.test | 90 + parser/testdata/superlock.metadata.json | 1 + parser/testdata/superlock.test | 166 + parser/testdata/swarmvtab.metadata.json | 1 + parser/testdata/swarmvtab.test | 105 + parser/testdata/swarmvtab2.metadata.json | 1 + parser/testdata/swarmvtab2.test | 27 + parser/testdata/swarmvtab3.metadata.json | 1 + parser/testdata/swarmvtab3.test | 32 + parser/testdata/swarmvtabfault.metadata.json | 1 + parser/testdata/swarmvtabfault.test | 15 + parser/testdata/symlink.metadata.json | 1 + parser/testdata/symlink.test | 24 + parser/testdata/symlink2.metadata.json | 1 + parser/testdata/symlink2.test | 7 + parser/testdata/sync2.metadata.json | 1 + parser/testdata/sync2.test | 87 + parser/testdata/syscall.metadata.json | 1 + parser/testdata/syscall.test | 13 + parser/testdata/tabfunc01.metadata.json | 1 + parser/testdata/tabfunc01.test | 804 ++ parser/testdata/table.metadata.json | 1 + parser/testdata/table.test | 327 + parser/testdata/tableopts.metadata.json | 1 + parser/testdata/tableopts.test | 55 + parser/testdata/tclsqlite.metadata.json | 1 + parser/testdata/tclsqlite.test | 102 + parser/testdata/tempdb.metadata.json | 1 + parser/testdata/tempdb.test | 5 + parser/testdata/tempdb2.metadata.json | 1 + parser/testdata/tempdb2.test | 72 + parser/testdata/temptable.metadata.json | 1 + parser/testdata/temptable.test | 132 + parser/testdata/temptable2.metadata.json | 1 + parser/testdata/temptable2.test | 368 + parser/testdata/temptable3.metadata.json | 1 + parser/testdata/temptable3.test | 36 + parser/testdata/temptrigger.metadata.json | 1 + parser/testdata/temptrigger.test | 359 + parser/testdata/thread001.metadata.json | 1 + parser/testdata/thread001.test | 44 + parser/testdata/thread004.metadata.json | 1 + parser/testdata/thread004.test | 4 + parser/testdata/thread1.metadata.json | 1 + parser/testdata/thread1.test | 27 + parser/testdata/thread2.metadata.json | 1 + parser/testdata/thread2.test | 15 + parser/testdata/thread3.metadata.json | 1 + parser/testdata/thread3.test | 12 + parser/testdata/tkt-02a8e81d44.metadata.json | 1 + parser/testdata/tkt-02a8e81d44.test | 15 + parser/testdata/tkt-18458b1a.metadata.json | 1 + parser/testdata/tkt-18458b1a.test | 24 + parser/testdata/tkt-2a5629202f.metadata.json | 1 + parser/testdata/tkt-2a5629202f.test | 43 + parser/testdata/tkt-2d1a5c67d.metadata.json | 1 + parser/testdata/tkt-2d1a5c67d.test | 35 + parser/testdata/tkt-313723c356.metadata.json | 1 + parser/testdata/tkt-313723c356.test | 21 + parser/testdata/tkt-385a5b56b9.metadata.json | 1 + parser/testdata/tkt-385a5b56b9.test | 32 + parser/testdata/tkt-38cb5df375.metadata.json | 1 + parser/testdata/tkt-38cb5df375.test | 13 + parser/testdata/tkt-3a77c9714e.metadata.json | 1 + parser/testdata/tkt-3a77c9714e.test | 62 + parser/testdata/tkt-4c86b126f2.metadata.json | 1 + parser/testdata/tkt-4c86b126f2.test | 39 + parser/testdata/tkt-4dd95f6943.metadata.json | 1 + parser/testdata/tkt-4dd95f6943.test | 65 + parser/testdata/tkt-4ef7e3cfca.metadata.json | 1 + parser/testdata/tkt-4ef7e3cfca.test | 69 + parser/testdata/tkt-54844eea3f.metadata.json | 1 + parser/testdata/tkt-54844eea3f.test | 61 + parser/testdata/tkt-5e10420e8d.metadata.json | 1 + parser/testdata/tkt-5e10420e8d.test | 45 + parser/testdata/tkt-752e1646fc.metadata.json | 1 + parser/testdata/tkt-752e1646fc.test | 13 + parser/testdata/tkt-78e04e52ea.metadata.json | 1 + parser/testdata/tkt-78e04e52ea.test | 49 + parser/testdata/tkt-7a31705a7e6.metadata.json | 1 + parser/testdata/tkt-7a31705a7e6.test | 11 + parser/testdata/tkt-7bbfb7d442.metadata.json | 1 + parser/testdata/tkt-7bbfb7d442.test | 152 + parser/testdata/tkt-80ba201079.metadata.json | 1 + parser/testdata/tkt-80ba201079.test | 58 + parser/testdata/tkt-80e031a00f.metadata.json | 1 + parser/testdata/tkt-80e031a00f.test | 477 + parser/testdata/tkt-868145d012.metadata.json | 1 + parser/testdata/tkt-868145d012.test | 58 + parser/testdata/tkt-8c63ff0ec.metadata.json | 1 + parser/testdata/tkt-8c63ff0ec.test | 37 + parser/testdata/tkt-91e2e8ba6f.metadata.json | 1 + parser/testdata/tkt-91e2e8ba6f.test | 41 + .../tkt-99378177930f87bd.metadata.json | 1 + parser/testdata/tkt-99378177930f87bd.test | 210 + parser/testdata/tkt-9a8b09f8e6.metadata.json | 1 + parser/testdata/tkt-9a8b09f8e6.test | 261 + parser/testdata/tkt-9d68c883.metadata.json | 1 + parser/testdata/tkt-9d68c883.test | 19 + parser/testdata/tkt-9f2eb3abac.metadata.json | 1 + parser/testdata/tkt-9f2eb3abac.test | 62 + parser/testdata/tkt-a7debbe0.metadata.json | 1 + parser/testdata/tkt-a7debbe0.test | 114 + parser/testdata/tkt-a8a0d2996a.metadata.json | 1 + parser/testdata/tkt-a8a0d2996a.test | 118 + parser/testdata/tkt-b1d3a2e531.metadata.json | 1 + parser/testdata/tkt-b1d3a2e531.test | 138 + parser/testdata/tkt-b351d95f9.metadata.json | 1 + parser/testdata/tkt-b351d95f9.test | 33 + parser/testdata/tkt-b75a9ca6b0.metadata.json | 1 + parser/testdata/tkt-b75a9ca6b0.test | 16 + parser/testdata/tkt-ba7cbfaedc.metadata.json | 1 + parser/testdata/tkt-ba7cbfaedc.test | 39 + parser/testdata/tkt-bd484a090c.metadata.json | 1 + parser/testdata/tkt-bd484a090c.test | 8 + parser/testdata/tkt-bdc6bbbb38.metadata.json | 1 + parser/testdata/tkt-bdc6bbbb38.test | 37 + parser/testdata/tkt-c48d99d690.metadata.json | 1 + parser/testdata/tkt-c48d99d690.test | 21 + parser/testdata/tkt-cbd054fa6b.metadata.json | 1 + parser/testdata/tkt-cbd054fa6b.test | 16 + parser/testdata/tkt-d11f09d36e.metadata.json | 1 + parser/testdata/tkt-d11f09d36e.test | 28 + parser/testdata/tkt-d635236375.metadata.json | 1 + parser/testdata/tkt-d635236375.test | 20 + parser/testdata/tkt-f3e5abed55.metadata.json | 1 + parser/testdata/tkt-f3e5abed55.test | 20 + parser/testdata/tkt-f67b41381a.metadata.json | 1 + parser/testdata/tkt-f67b41381a.test | 15 + parser/testdata/tkt-f777251dc7a.metadata.json | 1 + parser/testdata/tkt-f777251dc7a.test | 74 + parser/testdata/tkt-f973c7ac31.metadata.json | 1 + parser/testdata/tkt-f973c7ac31.test | 59 + parser/testdata/tkt-fa7bf5ec.metadata.json | 1 + parser/testdata/tkt-fa7bf5ec.test | 15 + parser/testdata/tkt-fc62af4523.metadata.json | 1 + parser/testdata/tkt-fc62af4523.test | 11 + parser/testdata/tkt1435.metadata.json | 1 + parser/testdata/tkt1435.test | 33 + parser/testdata/tkt1443.metadata.json | 1 + parser/testdata/tkt1443.test | 55 + parser/testdata/tkt1444.metadata.json | 1 + parser/testdata/tkt1444.test | 34 + parser/testdata/tkt1449.metadata.json | 1 + parser/testdata/tkt1449.test | 302 + parser/testdata/tkt1473.metadata.json | 1 + parser/testdata/tkt1473.test | 693 + parser/testdata/tkt1501.metadata.json | 1 + parser/testdata/tkt1501.test | 12 + parser/testdata/tkt1512.metadata.json | 1 + parser/testdata/tkt1512.test | 11 + parser/testdata/tkt1514.metadata.json | 1 + parser/testdata/tkt1514.test | 7 + parser/testdata/tkt1536.metadata.json | 1 + parser/testdata/tkt1536.test | 19 + parser/testdata/tkt1537.metadata.json | 1 + parser/testdata/tkt1537.test | 99 + parser/testdata/tkt1567.metadata.json | 1 + parser/testdata/tkt1567.test | 34 + parser/testdata/tkt1644.metadata.json | 1 + parser/testdata/tkt1644.test | 29 + parser/testdata/tkt1667.metadata.json | 1 + parser/testdata/tkt1667.test | 5 + parser/testdata/tkt1873.metadata.json | 1 + parser/testdata/tkt1873.test | 29 + parser/testdata/tkt2141.metadata.json | 1 + parser/testdata/tkt2141.test | 39 + parser/testdata/tkt2192.metadata.json | 1 + parser/testdata/tkt2192.test | 131 + parser/testdata/tkt2251.metadata.json | 1 + parser/testdata/tkt2251.test | 70 + parser/testdata/tkt2285.metadata.json | 1 + parser/testdata/tkt2285.test | 19 + parser/testdata/tkt2332.metadata.json | 1 + parser/testdata/tkt2332.test | 7 + parser/testdata/tkt2339.metadata.json | 1 + parser/testdata/tkt2339.test | 78 + parser/testdata/tkt2391.metadata.json | 1 + parser/testdata/tkt2391.test | 28 + parser/testdata/tkt2409.metadata.json | 1 + parser/testdata/tkt2409.test | 4 + parser/testdata/tkt2450.metadata.json | 1 + parser/testdata/tkt2450.test | 28 + parser/testdata/tkt2565.metadata.json | 1 + parser/testdata/tkt2565.test | 7 + parser/testdata/tkt2640.metadata.json | 1 + parser/testdata/tkt2640.test | 98 + parser/testdata/tkt2686.metadata.json | 1 + parser/testdata/tkt2686.test | 12 + parser/testdata/tkt2767.metadata.json | 1 + parser/testdata/tkt2767.test | 59 + parser/testdata/tkt2817.metadata.json | 1 + parser/testdata/tkt2817.test | 34 + parser/testdata/tkt2822.metadata.json | 1 + parser/testdata/tkt2822.test | 224 + parser/testdata/tkt2832.metadata.json | 1 + parser/testdata/tkt2832.test | 53 + parser/testdata/tkt2920.metadata.json | 1 + parser/testdata/tkt2920.test | 4 + parser/testdata/tkt2942.metadata.json | 1 + parser/testdata/tkt2942.test | 30 + parser/testdata/tkt3080.metadata.json | 1 + parser/testdata/tkt3080.test | 4 + parser/testdata/tkt3121.metadata.json | 1 + parser/testdata/tkt3121.test | 30 + parser/testdata/tkt3201.metadata.json | 1 + parser/testdata/tkt3201.test | 18 + parser/testdata/tkt3292.metadata.json | 1 + parser/testdata/tkt3292.test | 33 + parser/testdata/tkt3298.metadata.json | 1 + parser/testdata/tkt3298.test | 69 + parser/testdata/tkt3334.metadata.json | 1 + parser/testdata/tkt3334.test | 69 + parser/testdata/tkt3346.metadata.json | 1 + parser/testdata/tkt3346.test | 10 + parser/testdata/tkt3357.metadata.json | 1 + parser/testdata/tkt3357.test | 45 + parser/testdata/tkt3419.metadata.json | 1 + parser/testdata/tkt3419.test | 64 + parser/testdata/tkt3424.metadata.json | 1 + parser/testdata/tkt3424.test | 40 + parser/testdata/tkt3442.metadata.json | 1 + parser/testdata/tkt3442.test | 11 + parser/testdata/tkt3461.metadata.json | 1 + parser/testdata/tkt3461.test | 18 + parser/testdata/tkt3493.metadata.json | 1 + parser/testdata/tkt3493.test | 158 + parser/testdata/tkt3508.metadata.json | 1 + parser/testdata/tkt3508.test | 20 + parser/testdata/tkt3554.metadata.json | 1 + parser/testdata/tkt3554.test | 26 + parser/testdata/tkt35xx.metadata.json | 1 + parser/testdata/tkt35xx.test | 26 + parser/testdata/tkt3718.metadata.json | 1 + parser/testdata/tkt3718.test | 27 + parser/testdata/tkt3731.metadata.json | 1 + parser/testdata/tkt3731.test | 33 + parser/testdata/tkt3793.metadata.json | 1 + parser/testdata/tkt3793.test | 7 + parser/testdata/tkt3810.metadata.json | 1 + parser/testdata/tkt3810.test | 21 + parser/testdata/tkt3841.metadata.json | 1 + parser/testdata/tkt3841.test | 32 + parser/testdata/tkt3871.metadata.json | 1 + parser/testdata/tkt3871.test | 8 + parser/testdata/tkt3879.metadata.json | 1 + parser/testdata/tkt3879.test | 38 + parser/testdata/tkt3911.metadata.json | 1 + parser/testdata/tkt3911.test | 19 + parser/testdata/tkt3918.metadata.json | 1 + parser/testdata/tkt3918.test | 35 + parser/testdata/tkt3922.metadata.json | 1 + parser/testdata/tkt3922.test | 36 + parser/testdata/tkt3929.metadata.json | 1 + parser/testdata/tkt3929.test | 22 + parser/testdata/tkt3935.metadata.json | 1 + parser/testdata/tkt3935.test | 43 + parser/testdata/tkt3992.metadata.json | 1 + parser/testdata/tkt3992.test | 50 + parser/testdata/tkt3997.metadata.json | 1 + parser/testdata/tkt3997.test | 46 + parser/testdata/tkt4018.metadata.json | 1 + parser/testdata/tkt4018.test | 16 + parser/testdata/tpch01.metadata.json | 1 + parser/testdata/tpch01.test | 160 + parser/testdata/trace.metadata.json | 1 + parser/testdata/trace.test | 18 + parser/testdata/trace2.metadata.json | 1 + parser/testdata/trace2.test | 9 + parser/testdata/trace3.metadata.json | 1 + parser/testdata/trace3.test | 44 + parser/testdata/trans.metadata.json | 1 + parser/testdata/trans.test | 525 + parser/testdata/transitive1.metadata.json | 1 + parser/testdata/transitive1.test | 683 + parser/testdata/trigger2.metadata.json | 1 + parser/testdata/trigger2.test | 381 + parser/testdata/trigger3.metadata.json | 1 + parser/testdata/trigger3.test | 108 + parser/testdata/trigger4.metadata.json | 1 + parser/testdata/trigger4.test | 126 + parser/testdata/trigger5.metadata.json | 1 + parser/testdata/trigger5.test | 23 + parser/testdata/trigger6.metadata.json | 1 + parser/testdata/trigger6.test | 35 + parser/testdata/trigger7.metadata.json | 1 + parser/testdata/trigger7.test | 38 + parser/testdata/trigger9.metadata.json | 1 + parser/testdata/trigger9.test | 263 + parser/testdata/triggerB.metadata.json | 1 + parser/testdata/triggerB.test | 43 + parser/testdata/triggerC.metadata.json | 1 + parser/testdata/triggerC.test | 538 + parser/testdata/triggerE.metadata.json | 1 + parser/testdata/triggerE.test | 53 + parser/testdata/triggerF.metadata.json | 1 + parser/testdata/triggerF.test | 30 + parser/testdata/triggerG.metadata.json | 1 + parser/testdata/triggerG.test | 92 + parser/testdata/triggerupfrom.metadata.json | 1 + parser/testdata/triggerupfrom.test | 173 + parser/testdata/trustschema1.metadata.json | 1 + parser/testdata/trustschema1.test | 344 + parser/testdata/types.metadata.json | 1 + parser/testdata/types.test | 123 + parser/testdata/types3.metadata.json | 1 + parser/testdata/types3.test | 35 + parser/testdata/unhex.metadata.json | 1 + parser/testdata/unhex.test | 32 + parser/testdata/unionall.metadata.json | 1 + parser/testdata/unionall.test | 471 + parser/testdata/unionall2.metadata.json | 1 + parser/testdata/unionall2.test | 46 + parser/testdata/unionallfault.metadata.json | 1 + parser/testdata/unionallfault.test | 7 + parser/testdata/unionvtab.metadata.json | 1 + parser/testdata/unionvtab.test | 490 + parser/testdata/unionvtabfault.metadata.json | 1 + parser/testdata/unionvtabfault.test | 18 + parser/testdata/unique.metadata.json | 1 + parser/testdata/unique.test | 226 + parser/testdata/unique2.metadata.json | 1 + parser/testdata/unique2.test | 18 + parser/testdata/unordered.metadata.json | 1 + parser/testdata/unordered.test | 25 + parser/testdata/update.metadata.json | 1 + parser/testdata/update.test | 636 + parser/testdata/update2.metadata.json | 1 + parser/testdata/update2.test | 214 + parser/testdata/upfrom1.metadata.json | 1 + parser/testdata/upfrom1.test | 261 + parser/testdata/upfrom2.metadata.json | 1 + parser/testdata/upfrom2.test | 373 + parser/testdata/upfrom3.metadata.json | 1 + parser/testdata/upfrom3.test | 239 + parser/testdata/upfrom4.metadata.json | 1 + parser/testdata/upfrom4.test | 168 + parser/testdata/upfromfault.metadata.json | 1 + parser/testdata/upfromfault.test | 46 + parser/testdata/upsertfault.metadata.json | 1 + parser/testdata/upsertfault.test | 9 + parser/testdata/uri.metadata.json | 1 + parser/testdata/uri.test | 10 + parser/testdata/vacuum-into.metadata.json | 1 + parser/testdata/vacuum-into.test | 102 + parser/testdata/vacuum.metadata.json | 1 + parser/testdata/vacuum.test | 85 + parser/testdata/vacuum2.metadata.json | 1 + parser/testdata/vacuum2.test | 56 + parser/testdata/vacuum3.metadata.json | 1 + parser/testdata/vacuum3.test | 31 + parser/testdata/vacuum5.metadata.json | 1 + parser/testdata/vacuum5.test | 102 + parser/testdata/vacuum6.metadata.json | 1 + parser/testdata/vacuum6.test | 73 + parser/testdata/vacuummem.metadata.json | 1 + parser/testdata/vacuummem.test | 25 + parser/testdata/values.metadata.json | 1 + parser/testdata/values.test | 577 + parser/testdata/valuesfault.metadata.json | 1 + parser/testdata/valuesfault.test | 5 + parser/testdata/view.metadata.json | 1 + parser/testdata/view.test | 674 + parser/testdata/view2.metadata.json | 1 + parser/testdata/view2.test | 31 + parser/testdata/view3.metadata.json | 1 + parser/testdata/view3.test | 41 + parser/testdata/vtab1.metadata.json | 1 + parser/testdata/vtab1.test | 709 + parser/testdata/vtab2.metadata.json | 1 + parser/testdata/vtab2.test | 88 + parser/testdata/vtab3.metadata.json | 1 + parser/testdata/vtab3.test | 35 + parser/testdata/vtab4.metadata.json | 1 + parser/testdata/vtab4.test | 27 + parser/testdata/vtab5.metadata.json | 1 + parser/testdata/vtab5.test | 79 + parser/testdata/vtab6.metadata.json | 1 + parser/testdata/vtab6.test | 372 + parser/testdata/vtab7.metadata.json | 1 + parser/testdata/vtab7.test | 21 + parser/testdata/vtab8.metadata.json | 1 + parser/testdata/vtab8.test | 58 + parser/testdata/vtab9.metadata.json | 1 + parser/testdata/vtab9.test | 21 + parser/testdata/vtabA.metadata.json | 1 + parser/testdata/vtabA.test | 54 + parser/testdata/vtabB.metadata.json | 1 + parser/testdata/vtabB.test | 42 + parser/testdata/vtabC.metadata.json | 1 + parser/testdata/vtabC.test | 18 + parser/testdata/vtabD.metadata.json | 1 + parser/testdata/vtabD.test | 35 + parser/testdata/vtabF.metadata.json | 1 + parser/testdata/vtabF.test | 31 + parser/testdata/vtabH.metadata.json | 1 + parser/testdata/vtabH.test | 23 + parser/testdata/vtabI.metadata.json | 1 + parser/testdata/vtabI.test | 7 + parser/testdata/vtabJ.metadata.json | 1 + parser/testdata/vtabJ.test | 61 + parser/testdata/vtabK.metadata.json | 1 + parser/testdata/vtabK.test | 89 + parser/testdata/vtabL.metadata.json | 1 + parser/testdata/vtabL.test | 20 + parser/testdata/vtab_alter.metadata.json | 1 + parser/testdata/vtab_alter.test | 58 + parser/testdata/vtab_err.metadata.json | 1 + parser/testdata/vtab_err.test | 7 + parser/testdata/vtab_shared.metadata.json | 1 + parser/testdata/vtab_shared.test | 9 + parser/testdata/vtabdistinct.metadata.json | 1 + parser/testdata/vtabdistinct.test | 23 + parser/testdata/vtabdrop.metadata.json | 1 + parser/testdata/vtabdrop.test | 61 + parser/testdata/vtabrhs1.metadata.json | 1 + parser/testdata/vtabrhs1.test | 45 + parser/testdata/wal.metadata.json | 1 + parser/testdata/wal.test | 219 + parser/testdata/wal2.metadata.json | 1 + parser/testdata/wal2.test | 163 + parser/testdata/wal3.metadata.json | 1 + parser/testdata/wal3.test | 11 + parser/testdata/wal4.metadata.json | 1 + parser/testdata/wal4.test | 13 + parser/testdata/wal5.metadata.json | 1 + parser/testdata/wal5.test | 24 + parser/testdata/wal6.metadata.json | 1 + parser/testdata/wal6.test | 106 + parser/testdata/wal64k.metadata.json | 1 + parser/testdata/wal64k.test | 23 + parser/testdata/wal8.metadata.json | 1 + parser/testdata/wal8.test | 21 + parser/testdata/wal9.metadata.json | 1 + parser/testdata/wal9.test | 56 + parser/testdata/walbak.metadata.json | 1 + parser/testdata/walbak.test | 41 + parser/testdata/walbig.metadata.json | 1 + parser/testdata/walbig.test | 27 + parser/testdata/walblock.metadata.json | 1 + parser/testdata/walblock.test | 22 + parser/testdata/walckptnoop.metadata.json | 1 + parser/testdata/walckptnoop.test | 76 + parser/testdata/walcksum.metadata.json | 1 + parser/testdata/walcksum.test | 163 + parser/testdata/walcrash.metadata.json | 1 + parser/testdata/walcrash.test | 40 + parser/testdata/walcrash3.metadata.json | 1 + parser/testdata/walcrash3.test | 21 + parser/testdata/walcrash4.metadata.json | 1 + parser/testdata/walcrash4.test | 18 + parser/testdata/walfault2.metadata.json | 1 + parser/testdata/walfault2.test | 28 + parser/testdata/walhook.metadata.json | 1 + parser/testdata/walhook.test | 8 + parser/testdata/walmode.metadata.json | 1 + parser/testdata/walmode.test | 222 + parser/testdata/walnoshm.metadata.json | 1 + parser/testdata/walnoshm.test | 69 + parser/testdata/waloverwrite.metadata.json | 1 + parser/testdata/waloverwrite.test | 19 + parser/testdata/walprotocol.metadata.json | 1 + parser/testdata/walprotocol.test | 28 + parser/testdata/walprotocol2.metadata.json | 1 + parser/testdata/walprotocol2.test | 31 + parser/testdata/walrestart.metadata.json | 1 + parser/testdata/walrestart.test | 40 + parser/testdata/walro2.metadata.json | 1 + parser/testdata/walro2.test | 7 + parser/testdata/walrofault.metadata.json | 1 + parser/testdata/walrofault.test | 24 + parser/testdata/walseh1.metadata.json | 1 + parser/testdata/walseh1.test | 11 + parser/testdata/walsetlk.metadata.json | 1 + parser/testdata/walsetlk.test | 42 + parser/testdata/walsetlk2.metadata.json | 1 + parser/testdata/walsetlk2.test | 104 + parser/testdata/walsetlk3.metadata.json | 1 + parser/testdata/walsetlk3.test | 38 + .../testdata/walsetlk_recover.metadata.json | 1 + parser/testdata/walsetlk_recover.test | 18 + .../testdata/walsetlk_snapshot.metadata.json | 1 + parser/testdata/walsetlk_snapshot.test | 18 + parser/testdata/walshared.metadata.json | 1 + parser/testdata/walshared.test | 28 + parser/testdata/walslow.metadata.json | 1 + parser/testdata/walslow.test | 13 + parser/testdata/walvfs.metadata.json | 1 + parser/testdata/walvfs.test | 183 + parser/testdata/where.metadata.json | 1 + parser/testdata/where.test | 519 + parser/testdata/where2.metadata.json | 1 + parser/testdata/where2.test | 306 + parser/testdata/where3.metadata.json | 1 + parser/testdata/where3.test | 229 + parser/testdata/where4.metadata.json | 1 + parser/testdata/where4.test | 178 + parser/testdata/where5.metadata.json | 1 + parser/testdata/where5.test | 245 + parser/testdata/where6.metadata.json | 1 + parser/testdata/where6.test | 89 + parser/testdata/where7.metadata.json | 1 + parser/testdata/where7.test | 118 + parser/testdata/where8.metadata.json | 1 + parser/testdata/where8.test | 305 + parser/testdata/where9.metadata.json | 1 + parser/testdata/where9.test | 148 + parser/testdata/whereA.metadata.json | 1 + parser/testdata/whereA.test | 44 + parser/testdata/whereC.metadata.json | 1 + parser/testdata/whereC.test | 53 + parser/testdata/whereD.metadata.json | 1 + parser/testdata/whereD.test | 395 + parser/testdata/whereE.metadata.json | 1 + parser/testdata/whereE.test | 74 + parser/testdata/whereF.metadata.json | 1 + parser/testdata/whereF.test | 201 + parser/testdata/whereG.metadata.json | 1 + parser/testdata/whereG.test | 388 + parser/testdata/whereH.metadata.json | 1 + parser/testdata/whereH.test | 178 + parser/testdata/whereI.metadata.json | 1 + parser/testdata/whereI.test | 76 + parser/testdata/whereJ.metadata.json | 1 + parser/testdata/whereJ.test | 1009 ++ parser/testdata/whereK.metadata.json | 1 + parser/testdata/whereK.test | 83 + parser/testdata/whereL.metadata.json | 1 + parser/testdata/whereL.test | 248 + parser/testdata/whereM.metadata.json | 1 + parser/testdata/whereM.test | 139 + parser/testdata/whereN.metadata.json | 1 + parser/testdata/whereN.test | 49 + parser/testdata/wherefault.metadata.json | 1 + parser/testdata/wherefault.test | 17 + parser/testdata/wherelfault.metadata.json | 1 + parser/testdata/wherelfault.test | 37 + parser/testdata/wherelimit.metadata.json | 1 + parser/testdata/wherelimit.test | 111 + parser/testdata/wherelimit2.metadata.json | 1 + parser/testdata/wherelimit2.test | 365 + parser/testdata/wherelimit3.metadata.json | 1 + parser/testdata/wherelimit3.test | 14 + parser/testdata/widetab1.metadata.json | 1 + parser/testdata/widetab1.test | 180 + parser/testdata/win32heap.metadata.json | 1 + parser/testdata/win32heap.test | 15 + parser/testdata/win32nolock.metadata.json | 1 + parser/testdata/win32nolock.test | 4 + parser/testdata/windowfault.metadata.json | 1 + parser/testdata/windowfault.test | 58 + parser/testdata/windowpushd.metadata.json | 1 + parser/testdata/windowpushd.test | 177 + parser/testdata/with4.metadata.json | 1 + parser/testdata/with4.test | 42 + parser/testdata/with5.metadata.json | 1 + parser/testdata/with5.test | 225 + parser/testdata/with6.metadata.json | 1 + parser/testdata/with6.test | 130 + parser/testdata/without_rowid1.metadata.json | 1 + parser/testdata/without_rowid1.test | 545 + parser/testdata/without_rowid2.metadata.json | 1 + parser/testdata/without_rowid2.test | 97 + parser/testdata/without_rowid3.metadata.json | 1 + parser/testdata/without_rowid3.test | 1332 ++ parser/testdata/without_rowid4.metadata.json | 1 + parser/testdata/without_rowid4.test | 344 + parser/testdata/without_rowid5.metadata.json | 1 + parser/testdata/without_rowid5.test | 187 + parser/testdata/without_rowid6.metadata.json | 1 + parser/testdata/without_rowid6.test | 143 + parser/testdata/without_rowid7.metadata.json | 1 + parser/testdata/without_rowid7.test | 68 + parser/testdata/writecrash.metadata.json | 1 + parser/testdata/writecrash.test | 18 + parser/testdata/zeroblob.metadata.json | 1 + parser/testdata/zeroblob.test | 140 + parser/testdata/zipfile.metadata.json | 1 + parser/testdata/zipfile.test | 599 + parser/testdata/zipfile2.metadata.json | 1 + parser/testdata/zipfile2.test | 65 + parser/testdata/zipfilefault.metadata.json | 1 + parser/testdata/zipfilefault.test | 19 + 1758 files changed, 136976 insertions(+), 41 deletions(-) rename parser/testdata/{keyword1.metadata.json => affinity2.metadata.json} (100%) create mode 100644 parser/testdata/affinity2.test rename parser/testdata/{selectG.metadata.json => affinity3.metadata.json} (100%) create mode 100644 parser/testdata/affinity3.test create mode 100644 parser/testdata/aggerror.metadata.json create mode 100644 parser/testdata/aggerror.test create mode 100644 parser/testdata/aggfault.metadata.json create mode 100644 parser/testdata/aggfault.test create mode 100644 parser/testdata/aggnested.metadata.json create mode 100644 parser/testdata/aggnested.test create mode 100644 parser/testdata/aggorderby.metadata.json create mode 100644 parser/testdata/aggorderby.test create mode 100644 parser/testdata/alterauth.metadata.json create mode 100644 parser/testdata/alterauth.test create mode 100644 parser/testdata/alterauth2.metadata.json create mode 100644 parser/testdata/alterauth2.test create mode 100644 parser/testdata/altercol.metadata.json create mode 100644 parser/testdata/altercol.test create mode 100644 parser/testdata/altercons.metadata.json create mode 100644 parser/testdata/altercons.test create mode 100644 parser/testdata/altercons2.metadata.json create mode 100644 parser/testdata/altercons2.test create mode 100644 parser/testdata/altercorrupt.metadata.json create mode 100644 parser/testdata/altercorrupt.test create mode 100644 parser/testdata/alterfault.metadata.json create mode 100644 parser/testdata/alterfault.test create mode 100644 parser/testdata/alterlegacy.metadata.json create mode 100644 parser/testdata/alterlegacy.test create mode 100644 parser/testdata/altermalloc2.metadata.json create mode 100644 parser/testdata/altermalloc2.test create mode 100644 parser/testdata/altermalloc3.metadata.json create mode 100644 parser/testdata/altermalloc3.test create mode 100644 parser/testdata/alterqf.metadata.json create mode 100644 parser/testdata/alterqf.test create mode 100644 parser/testdata/altertrig.metadata.json create mode 100644 parser/testdata/altertrig.test create mode 100644 parser/testdata/amatch1.metadata.json create mode 100644 parser/testdata/amatch1.test create mode 100644 parser/testdata/analyze.metadata.json create mode 100644 parser/testdata/analyze.test create mode 100644 parser/testdata/analyze3.metadata.json create mode 100644 parser/testdata/analyze3.test create mode 100644 parser/testdata/analyze7.metadata.json create mode 100644 parser/testdata/analyze7.test create mode 100644 parser/testdata/analyze8.metadata.json create mode 100644 parser/testdata/analyze8.test create mode 100644 parser/testdata/analyze9.metadata.json create mode 100644 parser/testdata/analyze9.test create mode 100644 parser/testdata/analyzeC.metadata.json create mode 100644 parser/testdata/analyzeC.test create mode 100644 parser/testdata/analyzeD.metadata.json create mode 100644 parser/testdata/analyzeD.test create mode 100644 parser/testdata/analyzeE.metadata.json create mode 100644 parser/testdata/analyzeE.test create mode 100644 parser/testdata/analyzeF.metadata.json create mode 100644 parser/testdata/analyzeF.test create mode 100644 parser/testdata/analyzeG.metadata.json create mode 100644 parser/testdata/analyzeG.test create mode 100644 parser/testdata/atof1.metadata.json create mode 100644 parser/testdata/atof1.test create mode 100644 parser/testdata/atof2.metadata.json create mode 100644 parser/testdata/atof2.test create mode 100644 parser/testdata/atomic.metadata.json create mode 100644 parser/testdata/atomic.test create mode 100644 parser/testdata/atomic2.metadata.json create mode 100644 parser/testdata/atomic2.test create mode 100644 parser/testdata/attach.metadata.json create mode 100644 parser/testdata/attach.test create mode 100644 parser/testdata/attach2.metadata.json create mode 100644 parser/testdata/attach2.test create mode 100644 parser/testdata/attach3.metadata.json create mode 100644 parser/testdata/attach3.test create mode 100644 parser/testdata/attach4.metadata.json create mode 100644 parser/testdata/attach4.test create mode 100644 parser/testdata/auth.metadata.json create mode 100644 parser/testdata/auth.test create mode 100644 parser/testdata/auth3.metadata.json create mode 100644 parser/testdata/auth3.test create mode 100644 parser/testdata/autoanalyze1.metadata.json create mode 100644 parser/testdata/autoanalyze1.test create mode 100644 parser/testdata/autoinc.metadata.json create mode 100644 parser/testdata/autoinc.test create mode 100644 parser/testdata/autoindex1.metadata.json create mode 100644 parser/testdata/autoindex1.test create mode 100644 parser/testdata/autoindex2.metadata.json create mode 100644 parser/testdata/autoindex2.test create mode 100644 parser/testdata/autoindex3.metadata.json create mode 100644 parser/testdata/autoindex3.test create mode 100644 parser/testdata/autoindex4.metadata.json create mode 100644 parser/testdata/autoindex4.test create mode 100644 parser/testdata/autoindex5.metadata.json create mode 100644 parser/testdata/autoindex5.test create mode 100644 parser/testdata/autovacuum.metadata.json create mode 100644 parser/testdata/autovacuum.test create mode 100644 parser/testdata/autovacuum2.metadata.json create mode 100644 parser/testdata/autovacuum2.test create mode 100644 parser/testdata/avtrans.metadata.json create mode 100644 parser/testdata/avtrans.test create mode 100644 parser/testdata/backup.metadata.json create mode 100644 parser/testdata/backup.test create mode 100644 parser/testdata/backup4.metadata.json create mode 100644 parser/testdata/backup4.test create mode 100644 parser/testdata/backup5.metadata.json create mode 100644 parser/testdata/backup5.test create mode 100644 parser/testdata/backup_malloc.metadata.json create mode 100644 parser/testdata/backup_malloc.test create mode 100644 parser/testdata/basexx1.metadata.json create mode 100644 parser/testdata/basexx1.test create mode 100644 parser/testdata/bestindex1.metadata.json create mode 100644 parser/testdata/bestindex1.test create mode 100644 parser/testdata/bestindex2.metadata.json create mode 100644 parser/testdata/bestindex2.test create mode 100644 parser/testdata/bestindex3.metadata.json create mode 100644 parser/testdata/bestindex3.test create mode 100644 parser/testdata/bestindex4.metadata.json create mode 100644 parser/testdata/bestindex4.test create mode 100644 parser/testdata/bestindex5.metadata.json create mode 100644 parser/testdata/bestindex5.test create mode 100644 parser/testdata/bestindex6.metadata.json create mode 100644 parser/testdata/bestindex6.test create mode 100644 parser/testdata/bestindex7.metadata.json create mode 100644 parser/testdata/bestindex7.test create mode 100644 parser/testdata/bestindex8.metadata.json create mode 100644 parser/testdata/bestindex8.test create mode 100644 parser/testdata/bestindexA.metadata.json create mode 100644 parser/testdata/bestindexA.test create mode 100644 parser/testdata/bestindexB.metadata.json create mode 100644 parser/testdata/bestindexB.test create mode 100644 parser/testdata/bestindexC.metadata.json create mode 100644 parser/testdata/bestindexC.test create mode 100644 parser/testdata/bestindexD.metadata.json create mode 100644 parser/testdata/bestindexD.test create mode 100644 parser/testdata/bestindexE.metadata.json create mode 100644 parser/testdata/bestindexE.test create mode 100644 parser/testdata/bestindexF.metadata.json create mode 100644 parser/testdata/bestindexF.test create mode 100644 parser/testdata/bigfile.metadata.json create mode 100644 parser/testdata/bigfile.test create mode 100644 parser/testdata/bigfile2.metadata.json create mode 100644 parser/testdata/bigfile2.test create mode 100644 parser/testdata/bigmmap.metadata.json create mode 100644 parser/testdata/bigmmap.test create mode 100644 parser/testdata/bigrow.metadata.json create mode 100644 parser/testdata/bigrow.test create mode 100644 parser/testdata/bigsort.metadata.json create mode 100644 parser/testdata/bigsort.test create mode 100644 parser/testdata/bind.metadata.json create mode 100644 parser/testdata/bind.test create mode 100644 parser/testdata/bind2.metadata.json create mode 100644 parser/testdata/bind2.test create mode 100644 parser/testdata/blob.metadata.json create mode 100644 parser/testdata/blob.test create mode 100644 parser/testdata/bloom1.metadata.json create mode 100644 parser/testdata/bloom1.test create mode 100644 parser/testdata/btree01.metadata.json create mode 100644 parser/testdata/btree01.test create mode 100644 parser/testdata/btree02.metadata.json create mode 100644 parser/testdata/btree02.test create mode 100644 parser/testdata/btreefault.metadata.json create mode 100644 parser/testdata/btreefault.test create mode 100644 parser/testdata/busy.metadata.json create mode 100644 parser/testdata/busy.test create mode 100644 parser/testdata/cache.metadata.json create mode 100644 parser/testdata/cache.test create mode 100644 parser/testdata/cacheflush.metadata.json create mode 100644 parser/testdata/cacheflush.test create mode 100644 parser/testdata/cachespill.metadata.json create mode 100644 parser/testdata/cachespill.test create mode 100644 parser/testdata/capi2.metadata.json create mode 100644 parser/testdata/capi2.test create mode 100644 parser/testdata/capi3.metadata.json create mode 100644 parser/testdata/capi3.test create mode 100644 parser/testdata/capi3b.metadata.json create mode 100644 parser/testdata/capi3b.test create mode 100644 parser/testdata/capi3c.metadata.json create mode 100644 parser/testdata/capi3c.test create mode 100644 parser/testdata/capi3d.metadata.json create mode 100644 parser/testdata/capi3d.test create mode 100644 parser/testdata/carray01.metadata.json create mode 100644 parser/testdata/carray01.test create mode 100644 parser/testdata/carray02.metadata.json create mode 100644 parser/testdata/carray02.test create mode 100644 parser/testdata/carrayfault.metadata.json create mode 100644 parser/testdata/carrayfault.test create mode 100644 parser/testdata/cast.metadata.json create mode 100644 parser/testdata/cast.test create mode 100644 parser/testdata/cffault.metadata.json create mode 100644 parser/testdata/cffault.test create mode 100644 parser/testdata/changes.metadata.json create mode 100644 parser/testdata/changes.test create mode 100644 parser/testdata/changes2.metadata.json create mode 100644 parser/testdata/changes2.test create mode 100644 parser/testdata/check.metadata.json create mode 100644 parser/testdata/check.test create mode 100644 parser/testdata/checkfault.metadata.json create mode 100644 parser/testdata/checkfault.test create mode 100644 parser/testdata/chunksize.metadata.json create mode 100644 parser/testdata/chunksize.test create mode 100644 parser/testdata/cksumvfs.metadata.json create mode 100644 parser/testdata/cksumvfs.test create mode 100644 parser/testdata/close.metadata.json create mode 100644 parser/testdata/close.test create mode 100644 parser/testdata/closure01.metadata.json create mode 100644 parser/testdata/closure01.test create mode 100644 parser/testdata/collate1.metadata.json create mode 100644 parser/testdata/collate1.test create mode 100644 parser/testdata/collate2.metadata.json create mode 100644 parser/testdata/collate2.test create mode 100644 parser/testdata/collate3.metadata.json create mode 100644 parser/testdata/collate3.test create mode 100644 parser/testdata/collate4.metadata.json create mode 100644 parser/testdata/collate4.test create mode 100644 parser/testdata/collate5.metadata.json create mode 100644 parser/testdata/collate5.test create mode 100644 parser/testdata/collate6.metadata.json create mode 100644 parser/testdata/collate6.test create mode 100644 parser/testdata/collate7.metadata.json create mode 100644 parser/testdata/collate7.test create mode 100644 parser/testdata/collate8.metadata.json create mode 100644 parser/testdata/collate8.test create mode 100644 parser/testdata/collate9.metadata.json create mode 100644 parser/testdata/collate9.test create mode 100644 parser/testdata/collateA.metadata.json create mode 100644 parser/testdata/collateA.test create mode 100644 parser/testdata/collateB.metadata.json create mode 100644 parser/testdata/collateB.test create mode 100644 parser/testdata/colname.metadata.json create mode 100644 parser/testdata/colname.test create mode 100644 parser/testdata/columncount.metadata.json create mode 100644 parser/testdata/columncount.test create mode 100644 parser/testdata/conflict.metadata.json create mode 100644 parser/testdata/conflict.test create mode 100644 parser/testdata/conflict2.metadata.json create mode 100644 parser/testdata/conflict2.test create mode 100644 parser/testdata/conflict3.metadata.json create mode 100644 parser/testdata/conflict3.test create mode 100644 parser/testdata/corrupt.metadata.json create mode 100644 parser/testdata/corrupt.test create mode 100644 parser/testdata/corrupt2.metadata.json create mode 100644 parser/testdata/corrupt2.test create mode 100644 parser/testdata/corrupt3.metadata.json create mode 100644 parser/testdata/corrupt3.test create mode 100644 parser/testdata/corrupt4.metadata.json create mode 100644 parser/testdata/corrupt4.test create mode 100644 parser/testdata/corrupt9.metadata.json create mode 100644 parser/testdata/corrupt9.test create mode 100644 parser/testdata/corruptF.metadata.json create mode 100644 parser/testdata/corruptF.test create mode 100644 parser/testdata/corruptG.metadata.json create mode 100644 parser/testdata/corruptG.test create mode 100644 parser/testdata/corruptH.metadata.json create mode 100644 parser/testdata/corruptH.test create mode 100644 parser/testdata/corruptI.metadata.json create mode 100644 parser/testdata/corruptI.test create mode 100644 parser/testdata/corruptJ.metadata.json create mode 100644 parser/testdata/corruptJ.test create mode 100644 parser/testdata/corruptK.metadata.json create mode 100644 parser/testdata/corruptK.test create mode 100644 parser/testdata/corruptL.metadata.json create mode 100644 parser/testdata/corruptL.test create mode 100644 parser/testdata/corruptM.metadata.json create mode 100644 parser/testdata/corruptM.test create mode 100644 parser/testdata/corruptN.metadata.json create mode 100644 parser/testdata/corruptN.test create mode 100644 parser/testdata/cost.metadata.json create mode 100644 parser/testdata/cost.test create mode 100644 parser/testdata/count.metadata.json create mode 100644 parser/testdata/count.test create mode 100644 parser/testdata/countofview.metadata.json create mode 100644 parser/testdata/countofview.test create mode 100644 parser/testdata/crash.metadata.json create mode 100644 parser/testdata/crash.test create mode 100644 parser/testdata/crash3.metadata.json create mode 100644 parser/testdata/crash3.test create mode 100644 parser/testdata/crash7.metadata.json create mode 100644 parser/testdata/crash7.test create mode 100644 parser/testdata/crash8.metadata.json create mode 100644 parser/testdata/crash8.test create mode 100644 parser/testdata/crash9.metadata.json create mode 100644 parser/testdata/crash9.test create mode 100644 parser/testdata/crashM.metadata.json create mode 100644 parser/testdata/crashM.test create mode 100644 parser/testdata/createtab.metadata.json create mode 100644 parser/testdata/createtab.test create mode 100644 parser/testdata/cse.metadata.json create mode 100644 parser/testdata/cse.test create mode 100644 parser/testdata/csv01.metadata.json create mode 100644 parser/testdata/csv01.test create mode 100644 parser/testdata/ctime.metadata.json create mode 100644 parser/testdata/ctime.test create mode 100644 parser/testdata/cursorhint.metadata.json create mode 100644 parser/testdata/cursorhint.test create mode 100644 parser/testdata/cursorhint2.metadata.json create mode 100644 parser/testdata/cursorhint2.test create mode 100644 parser/testdata/date.metadata.json create mode 100644 parser/testdata/date.test create mode 100644 parser/testdata/date2.metadata.json create mode 100644 parser/testdata/date2.test create mode 100644 parser/testdata/date3.metadata.json create mode 100644 parser/testdata/date3.test create mode 100644 parser/testdata/dbdata.metadata.json create mode 100644 parser/testdata/dbdata.test create mode 100644 parser/testdata/dbfuzz001.metadata.json create mode 100644 parser/testdata/dbfuzz001.test create mode 100644 parser/testdata/dbpage.metadata.json create mode 100644 parser/testdata/dbpage.test create mode 100644 parser/testdata/dbpagefault.metadata.json create mode 100644 parser/testdata/dbpagefault.test create mode 100644 parser/testdata/dbstatus.metadata.json create mode 100644 parser/testdata/dbstatus.test create mode 100644 parser/testdata/dbstatus2.metadata.json create mode 100644 parser/testdata/dbstatus2.test create mode 100644 parser/testdata/decimal.metadata.json create mode 100644 parser/testdata/decimal.test create mode 100644 parser/testdata/default.metadata.json create mode 100644 parser/testdata/default.test create mode 100644 parser/testdata/delete.metadata.json create mode 100644 parser/testdata/delete.test create mode 100644 parser/testdata/delete2.metadata.json create mode 100644 parser/testdata/delete2.test create mode 100644 parser/testdata/delete3.metadata.json create mode 100644 parser/testdata/delete3.test create mode 100644 parser/testdata/delete4.metadata.json create mode 100644 parser/testdata/delete4.test create mode 100644 parser/testdata/descidx1.metadata.json create mode 100644 parser/testdata/descidx1.test create mode 100644 parser/testdata/descidx2.metadata.json create mode 100644 parser/testdata/descidx2.test create mode 100644 parser/testdata/descidx3.metadata.json create mode 100644 parser/testdata/descidx3.test create mode 100644 parser/testdata/diskfull.metadata.json create mode 100644 parser/testdata/diskfull.test create mode 100644 parser/testdata/distinct.metadata.json create mode 100644 parser/testdata/distinct.test create mode 100644 parser/testdata/distinct2.metadata.json create mode 100644 parser/testdata/distinct2.test create mode 100644 parser/testdata/distinctagg.metadata.json create mode 100644 parser/testdata/distinctagg.test create mode 100644 parser/testdata/e_blobbytes.metadata.json create mode 100644 parser/testdata/e_blobbytes.test create mode 100644 parser/testdata/e_blobclose.metadata.json create mode 100644 parser/testdata/e_blobclose.test create mode 100644 parser/testdata/e_blobopen.metadata.json create mode 100644 parser/testdata/e_blobopen.test create mode 100644 parser/testdata/e_blobwrite.metadata.json create mode 100644 parser/testdata/e_blobwrite.test create mode 100644 parser/testdata/e_changes.metadata.json create mode 100644 parser/testdata/e_changes.test create mode 100644 parser/testdata/e_dropview.metadata.json create mode 100644 parser/testdata/e_dropview.test create mode 100644 parser/testdata/e_fkey.metadata.json create mode 100644 parser/testdata/e_fkey.test create mode 100644 parser/testdata/e_fts3.metadata.json create mode 100644 parser/testdata/e_fts3.test create mode 100644 parser/testdata/e_reindex.metadata.json create mode 100644 parser/testdata/e_reindex.test create mode 100644 parser/testdata/e_resolve.metadata.json create mode 100644 parser/testdata/e_resolve.test create mode 100644 parser/testdata/e_select2.metadata.json create mode 100644 parser/testdata/e_select2.test create mode 100644 parser/testdata/e_totalchanges.metadata.json create mode 100644 parser/testdata/e_totalchanges.test create mode 100644 parser/testdata/e_vacuum.metadata.json create mode 100644 parser/testdata/e_vacuum.test create mode 100644 parser/testdata/e_wal.metadata.json create mode 100644 parser/testdata/e_wal.test create mode 100644 parser/testdata/e_walauto.metadata.json create mode 100644 parser/testdata/e_walauto.test create mode 100644 parser/testdata/e_walckpt.metadata.json create mode 100644 parser/testdata/e_walckpt.test create mode 100644 parser/testdata/e_walhook.metadata.json create mode 100644 parser/testdata/e_walhook.test create mode 100644 parser/testdata/emptytable.metadata.json create mode 100644 parser/testdata/emptytable.test create mode 100644 parser/testdata/enc.metadata.json create mode 100644 parser/testdata/enc.test create mode 100644 parser/testdata/enc2.metadata.json create mode 100644 parser/testdata/enc2.test create mode 100644 parser/testdata/enc3.metadata.json create mode 100644 parser/testdata/enc3.test create mode 100644 parser/testdata/eqp.metadata.json create mode 100644 parser/testdata/eqp.test create mode 100644 parser/testdata/eqp2.metadata.json create mode 100644 parser/testdata/eqp2.test create mode 100644 parser/testdata/errmsg.metadata.json create mode 100644 parser/testdata/errmsg.test create mode 100644 parser/testdata/errofst1.metadata.json create mode 100644 parser/testdata/errofst1.test create mode 100644 parser/testdata/eval.metadata.json create mode 100644 parser/testdata/eval.test create mode 100644 parser/testdata/exclusive.metadata.json create mode 100644 parser/testdata/exclusive.test create mode 100644 parser/testdata/exclusive2.metadata.json create mode 100644 parser/testdata/exclusive2.test create mode 100644 parser/testdata/exec.metadata.json create mode 100644 parser/testdata/exec.test create mode 100644 parser/testdata/existsexpr.metadata.json create mode 100644 parser/testdata/existsexpr.test create mode 100644 parser/testdata/existsexpr2.metadata.json create mode 100644 parser/testdata/existsexpr2.test create mode 100644 parser/testdata/existsfault.metadata.json create mode 100644 parser/testdata/existsfault.test create mode 100644 parser/testdata/exprfault.metadata.json create mode 100644 parser/testdata/exprfault.test create mode 100644 parser/testdata/exprfault2.metadata.json create mode 100644 parser/testdata/exprfault2.test create mode 100644 parser/testdata/expridx1.metadata.json create mode 100644 parser/testdata/expridx1.test create mode 100644 parser/testdata/fallocate.metadata.json create mode 100644 parser/testdata/fallocate.test create mode 100644 parser/testdata/filefmt.metadata.json create mode 100644 parser/testdata/filefmt.test create mode 100644 parser/testdata/filter1.metadata.json create mode 100644 parser/testdata/filter1.test create mode 100644 parser/testdata/filter2.metadata.json create mode 100644 parser/testdata/filter2.test create mode 100644 parser/testdata/filterfault.metadata.json create mode 100644 parser/testdata/filterfault.test create mode 100644 parser/testdata/fkey1.metadata.json create mode 100644 parser/testdata/fkey1.test create mode 100644 parser/testdata/fkey2.metadata.json create mode 100644 parser/testdata/fkey2.test create mode 100644 parser/testdata/fkey3.metadata.json create mode 100644 parser/testdata/fkey3.test create mode 100644 parser/testdata/fkey4.metadata.json create mode 100644 parser/testdata/fkey4.test create mode 100644 parser/testdata/fkey5.metadata.json create mode 100644 parser/testdata/fkey5.test create mode 100644 parser/testdata/fkey6.metadata.json create mode 100644 parser/testdata/fkey6.test create mode 100644 parser/testdata/fkey7.metadata.json create mode 100644 parser/testdata/fkey7.test create mode 100644 parser/testdata/fkey8.metadata.json create mode 100644 parser/testdata/fkey8.test create mode 100644 parser/testdata/fordelete.metadata.json create mode 100644 parser/testdata/fordelete.test create mode 100644 parser/testdata/fpconv1.metadata.json create mode 100644 parser/testdata/fpconv1.test create mode 100644 parser/testdata/fts-9fd058691.metadata.json create mode 100644 parser/testdata/fts-9fd058691.test create mode 100644 parser/testdata/fts3aa.metadata.json create mode 100644 parser/testdata/fts3aa.test create mode 100644 parser/testdata/fts3ab.metadata.json create mode 100644 parser/testdata/fts3ab.test create mode 100644 parser/testdata/fts3ac.metadata.json create mode 100644 parser/testdata/fts3ac.test create mode 100644 parser/testdata/fts3ad.metadata.json create mode 100644 parser/testdata/fts3ad.test create mode 100644 parser/testdata/fts3ae.metadata.json create mode 100644 parser/testdata/fts3ae.test create mode 100644 parser/testdata/fts3af.metadata.json create mode 100644 parser/testdata/fts3af.test create mode 100644 parser/testdata/fts3ag.metadata.json create mode 100644 parser/testdata/fts3ag.test create mode 100644 parser/testdata/fts3ah.metadata.json create mode 100644 parser/testdata/fts3ah.test create mode 100644 parser/testdata/fts3ai.metadata.json create mode 100644 parser/testdata/fts3ai.test create mode 100644 parser/testdata/fts3aj.metadata.json create mode 100644 parser/testdata/fts3aj.test create mode 100644 parser/testdata/fts3ak.metadata.json create mode 100644 parser/testdata/fts3ak.test create mode 100644 parser/testdata/fts3al.metadata.json create mode 100644 parser/testdata/fts3al.test create mode 100644 parser/testdata/fts3am.metadata.json create mode 100644 parser/testdata/fts3am.test create mode 100644 parser/testdata/fts3ao.metadata.json create mode 100644 parser/testdata/fts3ao.test create mode 100644 parser/testdata/fts3atoken.metadata.json create mode 100644 parser/testdata/fts3atoken.test create mode 100644 parser/testdata/fts3atoken2.metadata.json create mode 100644 parser/testdata/fts3atoken2.test create mode 100644 parser/testdata/fts3auto.metadata.json create mode 100644 parser/testdata/fts3auto.test create mode 100644 parser/testdata/fts3aux1.metadata.json create mode 100644 parser/testdata/fts3aux1.test create mode 100644 parser/testdata/fts3aux2.metadata.json create mode 100644 parser/testdata/fts3aux2.test create mode 100644 parser/testdata/fts3b.metadata.json create mode 100644 parser/testdata/fts3b.test create mode 100644 parser/testdata/fts3c.metadata.json create mode 100644 parser/testdata/fts3c.test create mode 100644 parser/testdata/fts3comp1.metadata.json create mode 100644 parser/testdata/fts3comp1.test create mode 100644 parser/testdata/fts3conf.metadata.json create mode 100644 parser/testdata/fts3conf.test create mode 100644 parser/testdata/fts3corrupt.metadata.json create mode 100644 parser/testdata/fts3corrupt.test create mode 100644 parser/testdata/fts3corrupt3.metadata.json create mode 100644 parser/testdata/fts3corrupt3.test create mode 100644 parser/testdata/fts3corrupt4.metadata.json create mode 100644 parser/testdata/fts3corrupt4.test create mode 100644 parser/testdata/fts3corrupt5.metadata.json create mode 100644 parser/testdata/fts3corrupt5.test create mode 100644 parser/testdata/fts3corrupt6.metadata.json create mode 100644 parser/testdata/fts3corrupt6.test create mode 100644 parser/testdata/fts3corrupt7.metadata.json create mode 100644 parser/testdata/fts3corrupt7.test create mode 100644 parser/testdata/fts3cov.metadata.json create mode 100644 parser/testdata/fts3cov.test create mode 100644 parser/testdata/fts3d.metadata.json create mode 100644 parser/testdata/fts3d.test create mode 100644 parser/testdata/fts3defer.metadata.json create mode 100644 parser/testdata/fts3defer.test create mode 100644 parser/testdata/fts3defer2.metadata.json create mode 100644 parser/testdata/fts3defer2.test create mode 100644 parser/testdata/fts3defer3.metadata.json create mode 100644 parser/testdata/fts3defer3.test create mode 100644 parser/testdata/fts3drop.metadata.json create mode 100644 parser/testdata/fts3drop.test create mode 100644 parser/testdata/fts3dropmod.metadata.json create mode 100644 parser/testdata/fts3dropmod.test create mode 100644 parser/testdata/fts3e.metadata.json create mode 100644 parser/testdata/fts3e.test create mode 100644 parser/testdata/fts3expr.metadata.json create mode 100644 parser/testdata/fts3expr.test create mode 100644 parser/testdata/fts3expr5.metadata.json create mode 100644 parser/testdata/fts3expr5.test create mode 100644 parser/testdata/fts3f.metadata.json create mode 100644 parser/testdata/fts3f.test create mode 100644 parser/testdata/fts3fault.metadata.json create mode 100644 parser/testdata/fts3fault.test create mode 100644 parser/testdata/fts3fault2.metadata.json create mode 100644 parser/testdata/fts3fault2.test create mode 100644 parser/testdata/fts3fault3.metadata.json create mode 100644 parser/testdata/fts3fault3.test create mode 100644 parser/testdata/fts3first.metadata.json create mode 100644 parser/testdata/fts3first.test create mode 100644 parser/testdata/fts3fuzz001.metadata.json create mode 100644 parser/testdata/fts3fuzz001.test create mode 100644 parser/testdata/fts3integrity.metadata.json create mode 100644 parser/testdata/fts3integrity.test create mode 100644 parser/testdata/fts3join.metadata.json create mode 100644 parser/testdata/fts3join.test create mode 100644 parser/testdata/fts3malloc.metadata.json create mode 100644 parser/testdata/fts3malloc.test create mode 100644 parser/testdata/fts3matchinfo.metadata.json create mode 100644 parser/testdata/fts3matchinfo.test create mode 100644 parser/testdata/fts3matchinfo2.metadata.json create mode 100644 parser/testdata/fts3matchinfo2.test create mode 100644 parser/testdata/fts3misc.metadata.json create mode 100644 parser/testdata/fts3misc.test create mode 100644 parser/testdata/fts3near.metadata.json create mode 100644 parser/testdata/fts3near.test create mode 100644 parser/testdata/fts3offsets.metadata.json create mode 100644 parser/testdata/fts3offsets.test create mode 100644 parser/testdata/fts3prefix.metadata.json create mode 100644 parser/testdata/fts3prefix.test create mode 100644 parser/testdata/fts3prefix2.metadata.json create mode 100644 parser/testdata/fts3prefix2.test create mode 100644 parser/testdata/fts3query.metadata.json create mode 100644 parser/testdata/fts3query.test create mode 100644 parser/testdata/fts3rank.metadata.json create mode 100644 parser/testdata/fts3rank.test create mode 100644 parser/testdata/fts3shared.metadata.json create mode 100644 parser/testdata/fts3shared.test create mode 100644 parser/testdata/fts3snippet.metadata.json create mode 100644 parser/testdata/fts3snippet.test create mode 100644 parser/testdata/fts3snippet2.metadata.json create mode 100644 parser/testdata/fts3snippet2.test create mode 100644 parser/testdata/fts3sort.metadata.json create mode 100644 parser/testdata/fts3sort.test create mode 100644 parser/testdata/fts3tok1.metadata.json create mode 100644 parser/testdata/fts3tok1.test create mode 100644 parser/testdata/fts4aa.metadata.json create mode 100644 parser/testdata/fts4aa.test create mode 100644 parser/testdata/fts4check.metadata.json create mode 100644 parser/testdata/fts4check.test create mode 100644 parser/testdata/fts4content.metadata.json create mode 100644 parser/testdata/fts4content.test create mode 100644 parser/testdata/fts4docid.metadata.json create mode 100644 parser/testdata/fts4docid.test create mode 100644 parser/testdata/fts4growth.metadata.json create mode 100644 parser/testdata/fts4growth.test create mode 100644 parser/testdata/fts4growth2.metadata.json create mode 100644 parser/testdata/fts4growth2.test create mode 100644 parser/testdata/fts4incr.metadata.json create mode 100644 parser/testdata/fts4incr.test create mode 100644 parser/testdata/fts4intck1.metadata.json create mode 100644 parser/testdata/fts4intck1.test create mode 100644 parser/testdata/fts4langid.metadata.json create mode 100644 parser/testdata/fts4langid.test create mode 100644 parser/testdata/fts4lastrowid.metadata.json create mode 100644 parser/testdata/fts4lastrowid.test create mode 100644 parser/testdata/fts4merge.metadata.json create mode 100644 parser/testdata/fts4merge.test create mode 100644 parser/testdata/fts4merge4.metadata.json create mode 100644 parser/testdata/fts4merge4.test create mode 100644 parser/testdata/fts4merge5.metadata.json create mode 100644 parser/testdata/fts4merge5.test create mode 100644 parser/testdata/fts4min.metadata.json create mode 100644 parser/testdata/fts4min.test create mode 100644 parser/testdata/fts4noti.metadata.json create mode 100644 parser/testdata/fts4noti.test create mode 100644 parser/testdata/fts4onepass.metadata.json create mode 100644 parser/testdata/fts4onepass.test create mode 100644 parser/testdata/fts4opt.metadata.json create mode 100644 parser/testdata/fts4opt.test create mode 100644 parser/testdata/fts4record.metadata.json create mode 100644 parser/testdata/fts4record.test create mode 100644 parser/testdata/fts4rename.metadata.json create mode 100644 parser/testdata/fts4rename.test create mode 100644 parser/testdata/fts4umlaut.metadata.json create mode 100644 parser/testdata/fts4umlaut.test create mode 100644 parser/testdata/fts4unicode.metadata.json create mode 100644 parser/testdata/fts4unicode.test create mode 100644 parser/testdata/fts4upfrom.metadata.json create mode 100644 parser/testdata/fts4upfrom.test create mode 100644 parser/testdata/func.metadata.json create mode 100644 parser/testdata/func.test create mode 100644 parser/testdata/func2.metadata.json create mode 100644 parser/testdata/func2.test create mode 100644 parser/testdata/func3.metadata.json create mode 100644 parser/testdata/func3.test create mode 100644 parser/testdata/func4.metadata.json create mode 100644 parser/testdata/func4.test create mode 100644 parser/testdata/func5.metadata.json create mode 100644 parser/testdata/func5.test create mode 100644 parser/testdata/func6.metadata.json create mode 100644 parser/testdata/func6.test create mode 100644 parser/testdata/func7.metadata.json create mode 100644 parser/testdata/func7.test create mode 100644 parser/testdata/func8.metadata.json create mode 100644 parser/testdata/func8.test create mode 100644 parser/testdata/func9.metadata.json create mode 100644 parser/testdata/func9.test create mode 100644 parser/testdata/fuzz-oss1.metadata.json create mode 100644 parser/testdata/fuzz-oss1.test create mode 100644 parser/testdata/fuzz.metadata.json create mode 100644 parser/testdata/fuzz.test create mode 100644 parser/testdata/fuzz2.metadata.json create mode 100644 parser/testdata/fuzz2.test create mode 100644 parser/testdata/fuzz4.metadata.json create mode 100644 parser/testdata/fuzz4.test create mode 100644 parser/testdata/fuzzer1.metadata.json create mode 100644 parser/testdata/fuzzer1.test create mode 100644 parser/testdata/fuzzer2.metadata.json create mode 100644 parser/testdata/fuzzer2.test create mode 100644 parser/testdata/fuzzerfault.metadata.json create mode 100644 parser/testdata/fuzzerfault.test create mode 100644 parser/testdata/gcfault.metadata.json create mode 100644 parser/testdata/gcfault.test create mode 100644 parser/testdata/gencol1.metadata.json create mode 100644 parser/testdata/gencol1.test create mode 100644 parser/testdata/having.metadata.json create mode 100644 parser/testdata/having.test create mode 100644 parser/testdata/hexlit.metadata.json create mode 100644 parser/testdata/hexlit.test create mode 100644 parser/testdata/hidden.metadata.json create mode 100644 parser/testdata/hidden.test create mode 100644 parser/testdata/hook.metadata.json create mode 100644 parser/testdata/hook.test create mode 100644 parser/testdata/hook2.metadata.json create mode 100644 parser/testdata/hook2.test create mode 100644 parser/testdata/icu.metadata.json create mode 100644 parser/testdata/icu.test create mode 100644 parser/testdata/ieee754.metadata.json create mode 100644 parser/testdata/ieee754.test create mode 100644 parser/testdata/imposter1.metadata.json create mode 100644 parser/testdata/imposter1.test create mode 100644 parser/testdata/in6.metadata.json create mode 100644 parser/testdata/in6.test create mode 100644 parser/testdata/in7.metadata.json create mode 100644 parser/testdata/in7.test create mode 100644 parser/testdata/incrblob.metadata.json create mode 100644 parser/testdata/incrblob.test create mode 100644 parser/testdata/incrblob2.metadata.json create mode 100644 parser/testdata/incrblob2.test create mode 100644 parser/testdata/incrblob3.metadata.json create mode 100644 parser/testdata/incrblob3.test create mode 100644 parser/testdata/incrblob4.metadata.json create mode 100644 parser/testdata/incrblob4.test create mode 100644 parser/testdata/incrblobfault.metadata.json create mode 100644 parser/testdata/incrblobfault.test create mode 100644 parser/testdata/incrcorrupt.metadata.json create mode 100644 parser/testdata/incrcorrupt.test create mode 100644 parser/testdata/incrvacuum.metadata.json create mode 100644 parser/testdata/incrvacuum.test create mode 100644 parser/testdata/incrvacuum2.metadata.json create mode 100644 parser/testdata/incrvacuum2.test create mode 100644 parser/testdata/incrvacuum3.metadata.json create mode 100644 parser/testdata/incrvacuum3.test create mode 100644 parser/testdata/index.metadata.json create mode 100644 parser/testdata/index.test create mode 100644 parser/testdata/index2.metadata.json create mode 100644 parser/testdata/index2.test create mode 100644 parser/testdata/index3.metadata.json create mode 100644 parser/testdata/index3.test create mode 100644 parser/testdata/index4.metadata.json create mode 100644 parser/testdata/index4.test create mode 100644 parser/testdata/index6.metadata.json create mode 100644 parser/testdata/index6.test create mode 100644 parser/testdata/index7.metadata.json create mode 100644 parser/testdata/index7.test create mode 100644 parser/testdata/index8.metadata.json create mode 100644 parser/testdata/index8.test create mode 100644 parser/testdata/index9.metadata.json create mode 100644 parser/testdata/index9.test create mode 100644 parser/testdata/indexA.metadata.json create mode 100644 parser/testdata/indexA.test create mode 100644 parser/testdata/indexedby.metadata.json create mode 100644 parser/testdata/indexedby.test create mode 100644 parser/testdata/indexexpr1.metadata.json create mode 100644 parser/testdata/indexexpr1.test create mode 100644 parser/testdata/indexexpr2.metadata.json create mode 100644 parser/testdata/indexexpr2.test create mode 100644 parser/testdata/indexfault.metadata.json create mode 100644 parser/testdata/indexfault.test create mode 100644 parser/testdata/insert.metadata.json create mode 100644 parser/testdata/insert.test create mode 100644 parser/testdata/insert2.metadata.json create mode 100644 parser/testdata/insert2.test create mode 100644 parser/testdata/insert3.metadata.json create mode 100644 parser/testdata/insert3.test create mode 100644 parser/testdata/insert4.metadata.json create mode 100644 parser/testdata/insert4.test create mode 100644 parser/testdata/insert5.metadata.json create mode 100644 parser/testdata/insert5.test create mode 100644 parser/testdata/insertfault.metadata.json create mode 100644 parser/testdata/insertfault.test create mode 100644 parser/testdata/instr.metadata.json create mode 100644 parser/testdata/instr.test create mode 100644 parser/testdata/instrfault.metadata.json create mode 100644 parser/testdata/instrfault.test create mode 100644 parser/testdata/interrupt.metadata.json create mode 100644 parser/testdata/interrupt.test create mode 100644 parser/testdata/interrupt2.metadata.json create mode 100644 parser/testdata/interrupt2.test create mode 100644 parser/testdata/intpkey.metadata.json create mode 100644 parser/testdata/intpkey.test create mode 100644 parser/testdata/intreal.metadata.json create mode 100644 parser/testdata/intreal.test create mode 100644 parser/testdata/io.metadata.json create mode 100644 parser/testdata/io.test create mode 100644 parser/testdata/ioerr2.metadata.json create mode 100644 parser/testdata/ioerr2.test create mode 100644 parser/testdata/ioerr5.metadata.json create mode 100644 parser/testdata/ioerr5.test create mode 100644 parser/testdata/ioerr6.metadata.json create mode 100644 parser/testdata/ioerr6.test create mode 100644 parser/testdata/istrue.metadata.json create mode 100644 parser/testdata/istrue.test create mode 100644 parser/testdata/join.metadata.json create mode 100644 parser/testdata/join.test create mode 100644 parser/testdata/join2.metadata.json create mode 100644 parser/testdata/join2.test create mode 100644 parser/testdata/join4.metadata.json create mode 100644 parser/testdata/join4.test create mode 100644 parser/testdata/join5.metadata.json create mode 100644 parser/testdata/join5.test create mode 100644 parser/testdata/join6.metadata.json create mode 100644 parser/testdata/join6.test create mode 100644 parser/testdata/join7.metadata.json create mode 100644 parser/testdata/join7.test create mode 100644 parser/testdata/join8.metadata.json create mode 100644 parser/testdata/join8.test create mode 100644 parser/testdata/join9.metadata.json create mode 100644 parser/testdata/join9.test create mode 100644 parser/testdata/joinA.metadata.json create mode 100644 parser/testdata/joinA.test create mode 100644 parser/testdata/joinB.metadata.json create mode 100644 parser/testdata/joinB.test create mode 100644 parser/testdata/joinC.metadata.json create mode 100644 parser/testdata/joinC.test create mode 100644 parser/testdata/joinD.metadata.json create mode 100644 parser/testdata/joinD.test create mode 100644 parser/testdata/joinE.metadata.json create mode 100644 parser/testdata/joinE.test create mode 100644 parser/testdata/joinF.metadata.json create mode 100644 parser/testdata/joinF.test create mode 100644 parser/testdata/joinH.metadata.json create mode 100644 parser/testdata/joinH.test create mode 100644 parser/testdata/joinI.metadata.json create mode 100644 parser/testdata/joinI.test create mode 100644 parser/testdata/journal1.metadata.json create mode 100644 parser/testdata/journal1.test create mode 100644 parser/testdata/journal2.metadata.json create mode 100644 parser/testdata/journal2.test create mode 100644 parser/testdata/journal3.metadata.json create mode 100644 parser/testdata/journal3.test create mode 100644 parser/testdata/jrnlmode.metadata.json create mode 100644 parser/testdata/jrnlmode.test create mode 100644 parser/testdata/jrnlmode2.metadata.json create mode 100644 parser/testdata/jrnlmode2.test create mode 100644 parser/testdata/json101.metadata.json create mode 100644 parser/testdata/json101.test create mode 100644 parser/testdata/json102.metadata.json create mode 100644 parser/testdata/json102.test create mode 100644 parser/testdata/json103.metadata.json create mode 100644 parser/testdata/json103.test create mode 100644 parser/testdata/json104.metadata.json create mode 100644 parser/testdata/json104.test create mode 100644 parser/testdata/json106.metadata.json create mode 100644 parser/testdata/json106.test create mode 100644 parser/testdata/json107.metadata.json create mode 100644 parser/testdata/json107.test create mode 100644 parser/testdata/json108.metadata.json create mode 100644 parser/testdata/json108.test create mode 100644 parser/testdata/json501.metadata.json create mode 100644 parser/testdata/json501.test create mode 100644 parser/testdata/json502.metadata.json create mode 100644 parser/testdata/json502.test create mode 100644 parser/testdata/jsonb01.metadata.json create mode 100644 parser/testdata/jsonb01.test delete mode 100644 parser/testdata/keyword1.test create mode 100644 parser/testdata/lastinsert.metadata.json create mode 100644 parser/testdata/lastinsert.test create mode 100644 parser/testdata/laststmtchanges.metadata.json create mode 100644 parser/testdata/laststmtchanges.test create mode 100644 parser/testdata/like.metadata.json create mode 100644 parser/testdata/like.test create mode 100644 parser/testdata/like3.metadata.json create mode 100644 parser/testdata/like3.test create mode 100644 parser/testdata/limit.metadata.json create mode 100644 parser/testdata/limit.test create mode 100644 parser/testdata/limit2.metadata.json create mode 100644 parser/testdata/limit2.test create mode 100644 parser/testdata/literal.metadata.json create mode 100644 parser/testdata/literal.test create mode 100644 parser/testdata/literal2.metadata.json create mode 100644 parser/testdata/literal2.test create mode 100644 parser/testdata/loadext.metadata.json create mode 100644 parser/testdata/loadext.test create mode 100644 parser/testdata/loadext2.metadata.json create mode 100644 parser/testdata/loadext2.test create mode 100644 parser/testdata/lock.metadata.json create mode 100644 parser/testdata/lock.test create mode 100644 parser/testdata/lock2.metadata.json create mode 100644 parser/testdata/lock2.test create mode 100644 parser/testdata/lock3.metadata.json create mode 100644 parser/testdata/lock3.test create mode 100644 parser/testdata/lock5.metadata.json create mode 100644 parser/testdata/lock5.test create mode 100644 parser/testdata/lock6.metadata.json create mode 100644 parser/testdata/lock6.test create mode 100644 parser/testdata/main.metadata.json create mode 100644 parser/testdata/main.test create mode 100644 parser/testdata/malloc.metadata.json create mode 100644 parser/testdata/malloc.test create mode 100644 parser/testdata/malloc3.metadata.json create mode 100644 parser/testdata/malloc3.test create mode 100644 parser/testdata/malloc5.metadata.json create mode 100644 parser/testdata/malloc5.test create mode 100644 parser/testdata/mallocA.metadata.json create mode 100644 parser/testdata/mallocA.test create mode 100644 parser/testdata/mallocK.metadata.json create mode 100644 parser/testdata/mallocK.test create mode 100644 parser/testdata/mallocM.metadata.json create mode 100644 parser/testdata/mallocM.test create mode 100644 parser/testdata/memdb.metadata.json create mode 100644 parser/testdata/memdb.test create mode 100644 parser/testdata/memdb1.metadata.json create mode 100644 parser/testdata/memdb1.test create mode 100644 parser/testdata/memdb2.metadata.json create mode 100644 parser/testdata/memdb2.test create mode 100644 parser/testdata/memjournal.metadata.json create mode 100644 parser/testdata/memjournal.test create mode 100644 parser/testdata/memjournal2.metadata.json create mode 100644 parser/testdata/memjournal2.test create mode 100644 parser/testdata/merge1.metadata.json create mode 100644 parser/testdata/merge1.test create mode 100644 parser/testdata/minmax.metadata.json create mode 100644 parser/testdata/minmax.test create mode 100644 parser/testdata/minmax2.metadata.json create mode 100644 parser/testdata/minmax2.test create mode 100644 parser/testdata/minmax3.metadata.json create mode 100644 parser/testdata/minmax3.test create mode 100644 parser/testdata/minmax4.metadata.json create mode 100644 parser/testdata/minmax4.test create mode 100644 parser/testdata/misc1.metadata.json create mode 100644 parser/testdata/misc1.test create mode 100644 parser/testdata/misc2.metadata.json create mode 100644 parser/testdata/misc2.test create mode 100644 parser/testdata/misc3.metadata.json create mode 100644 parser/testdata/misc3.test create mode 100644 parser/testdata/misc4.metadata.json create mode 100644 parser/testdata/misc4.test create mode 100644 parser/testdata/misc5.metadata.json create mode 100644 parser/testdata/misc5.test create mode 100644 parser/testdata/misc7.metadata.json create mode 100644 parser/testdata/misc7.test create mode 100644 parser/testdata/misc8.metadata.json create mode 100644 parser/testdata/misc8.test create mode 100644 parser/testdata/misuse.metadata.json create mode 100644 parser/testdata/misuse.test create mode 100644 parser/testdata/mjournal.metadata.json create mode 100644 parser/testdata/mjournal.test create mode 100644 parser/testdata/mmap1.metadata.json create mode 100644 parser/testdata/mmap1.test create mode 100644 parser/testdata/mmap2.metadata.json create mode 100644 parser/testdata/mmap2.test create mode 100644 parser/testdata/mmapcorrupt.metadata.json create mode 100644 parser/testdata/mmapcorrupt.test create mode 100644 parser/testdata/mmapwarm.metadata.json create mode 100644 parser/testdata/mmapwarm.test create mode 100644 parser/testdata/multiplex.metadata.json create mode 100644 parser/testdata/multiplex.test create mode 100644 parser/testdata/nockpt.metadata.json create mode 100644 parser/testdata/nockpt.test create mode 100644 parser/testdata/normalize.metadata.json create mode 100644 parser/testdata/normalize.test create mode 100644 parser/testdata/notify1.metadata.json create mode 100644 parser/testdata/notify1.test create mode 100644 parser/testdata/notify3.metadata.json create mode 100644 parser/testdata/notify3.test create mode 100644 parser/testdata/notnull.metadata.json create mode 100644 parser/testdata/notnull.test create mode 100644 parser/testdata/notnull2.metadata.json create mode 100644 parser/testdata/notnull2.test create mode 100644 parser/testdata/notnullfault.metadata.json create mode 100644 parser/testdata/notnullfault.test create mode 100644 parser/testdata/null.metadata.json create mode 100644 parser/testdata/null.test create mode 100644 parser/testdata/nulls1.metadata.json create mode 100644 parser/testdata/nulls1.test create mode 100644 parser/testdata/nulls2.metadata.json create mode 100644 parser/testdata/nulls2.test create mode 100644 parser/testdata/numindex1.metadata.json create mode 100644 parser/testdata/numindex1.test create mode 100644 parser/testdata/offset1.metadata.json create mode 100644 parser/testdata/offset1.test create mode 100644 parser/testdata/openv2.metadata.json create mode 100644 parser/testdata/openv2.test create mode 100644 parser/testdata/orderby1.metadata.json create mode 100644 parser/testdata/orderby1.test create mode 100644 parser/testdata/orderby3.metadata.json create mode 100644 parser/testdata/orderby3.test create mode 100644 parser/testdata/orderby4.metadata.json create mode 100644 parser/testdata/orderby4.test create mode 100644 parser/testdata/orderby5.metadata.json create mode 100644 parser/testdata/orderby5.test create mode 100644 parser/testdata/orderby6.metadata.json create mode 100644 parser/testdata/orderby6.test create mode 100644 parser/testdata/orderby7.metadata.json create mode 100644 parser/testdata/orderby7.test create mode 100644 parser/testdata/orderby9.metadata.json create mode 100644 parser/testdata/orderby9.test create mode 100644 parser/testdata/orderbyA.metadata.json create mode 100644 parser/testdata/orderbyA.test create mode 100644 parser/testdata/orderbyB.metadata.json create mode 100644 parser/testdata/orderbyB.test create mode 100644 parser/testdata/ovfl.metadata.json create mode 100644 parser/testdata/ovfl.test create mode 100644 parser/testdata/pager1.metadata.json create mode 100644 parser/testdata/pager1.test create mode 100644 parser/testdata/pager2.metadata.json create mode 100644 parser/testdata/pager2.test create mode 100644 parser/testdata/pager4.metadata.json create mode 100644 parser/testdata/pager4.test create mode 100644 parser/testdata/pagerfault3.metadata.json create mode 100644 parser/testdata/pagerfault3.test create mode 100644 parser/testdata/pagesize.metadata.json create mode 100644 parser/testdata/pagesize.test create mode 100644 parser/testdata/pcache2.metadata.json create mode 100644 parser/testdata/pcache2.test create mode 100644 parser/testdata/pendingrace.metadata.json create mode 100644 parser/testdata/pendingrace.test create mode 100644 parser/testdata/percentile.metadata.json create mode 100644 parser/testdata/percentile.test create mode 100644 parser/testdata/pragma.metadata.json create mode 100644 parser/testdata/pragma.test create mode 100644 parser/testdata/pragma2.metadata.json create mode 100644 parser/testdata/pragma2.test create mode 100644 parser/testdata/pragma3.metadata.json create mode 100644 parser/testdata/pragma3.test create mode 100644 parser/testdata/pragma4.metadata.json create mode 100644 parser/testdata/pragma4.test create mode 100644 parser/testdata/pragma5.metadata.json create mode 100644 parser/testdata/pragma5.test create mode 100644 parser/testdata/pragmafault.metadata.json create mode 100644 parser/testdata/pragmafault.test create mode 100644 parser/testdata/prefixes.metadata.json create mode 100644 parser/testdata/prefixes.test create mode 100644 parser/testdata/printf.metadata.json create mode 100644 parser/testdata/printf.test create mode 100644 parser/testdata/printf2.metadata.json create mode 100644 parser/testdata/printf2.test create mode 100644 parser/testdata/progress.metadata.json create mode 100644 parser/testdata/progress.test create mode 100644 parser/testdata/ptrchng.metadata.json create mode 100644 parser/testdata/ptrchng.test create mode 100644 parser/testdata/pushdown.metadata.json create mode 100644 parser/testdata/pushdown.test create mode 100644 parser/testdata/qrf01.metadata.json create mode 100644 parser/testdata/qrf01.test create mode 100644 parser/testdata/qrf02.metadata.json create mode 100644 parser/testdata/qrf02.test create mode 100644 parser/testdata/qrf05.metadata.json create mode 100644 parser/testdata/qrf05.test create mode 100644 parser/testdata/queryonly.metadata.json create mode 100644 parser/testdata/queryonly.test create mode 100644 parser/testdata/quickcheck.metadata.json create mode 100644 parser/testdata/quickcheck.test create mode 100644 parser/testdata/quota.metadata.json create mode 100644 parser/testdata/quota.test create mode 100644 parser/testdata/quote.metadata.json create mode 100644 parser/testdata/quote.test create mode 100644 parser/testdata/rdonly.metadata.json create mode 100644 parser/testdata/rdonly.test create mode 100644 parser/testdata/readonly.metadata.json create mode 100644 parser/testdata/readonly.test create mode 100644 parser/testdata/recover.metadata.json create mode 100644 parser/testdata/recover.test create mode 100644 parser/testdata/regexp1.metadata.json create mode 100644 parser/testdata/regexp1.test create mode 100644 parser/testdata/regexp2.metadata.json create mode 100644 parser/testdata/regexp2.test create mode 100644 parser/testdata/reindex.metadata.json create mode 100644 parser/testdata/reindex.test create mode 100644 parser/testdata/reservebytes.metadata.json create mode 100644 parser/testdata/reservebytes.test create mode 100644 parser/testdata/resetdb.metadata.json create mode 100644 parser/testdata/resetdb.test create mode 100644 parser/testdata/resolver01.metadata.json create mode 100644 parser/testdata/resolver01.test create mode 100644 parser/testdata/returningfault.metadata.json create mode 100644 parser/testdata/returningfault.test create mode 100644 parser/testdata/rollback.metadata.json create mode 100644 parser/testdata/rollback.test create mode 100644 parser/testdata/rollback2.metadata.json create mode 100644 parser/testdata/rollback2.test create mode 100644 parser/testdata/rollbackfault.metadata.json create mode 100644 parser/testdata/rollbackfault.test create mode 100644 parser/testdata/rowallock.metadata.json create mode 100644 parser/testdata/rowallock.test create mode 100644 parser/testdata/rowhash.metadata.json create mode 100644 parser/testdata/rowhash.test create mode 100644 parser/testdata/rowid.metadata.json create mode 100644 parser/testdata/rowid.test create mode 100644 parser/testdata/rowvalue.metadata.json create mode 100644 parser/testdata/rowvalue.test create mode 100644 parser/testdata/rowvalue2.metadata.json create mode 100644 parser/testdata/rowvalue2.test create mode 100644 parser/testdata/rowvalue3.metadata.json create mode 100644 parser/testdata/rowvalue3.test create mode 100644 parser/testdata/rowvalue4.metadata.json create mode 100644 parser/testdata/rowvalue4.test create mode 100644 parser/testdata/rowvalue5.metadata.json create mode 100644 parser/testdata/rowvalue5.test create mode 100644 parser/testdata/rowvalue6.metadata.json create mode 100644 parser/testdata/rowvalue6.test create mode 100644 parser/testdata/rowvalue7.metadata.json create mode 100644 parser/testdata/rowvalue7.test create mode 100644 parser/testdata/rowvalue8.metadata.json create mode 100644 parser/testdata/rowvalue8.test create mode 100644 parser/testdata/rowvalue9.metadata.json create mode 100644 parser/testdata/rowvalue9.test create mode 100644 parser/testdata/rowvalueA.metadata.json create mode 100644 parser/testdata/rowvalueA.test create mode 100644 parser/testdata/rowvaluefault.metadata.json create mode 100644 parser/testdata/rowvaluefault.test create mode 100644 parser/testdata/rowvaluevtab.metadata.json create mode 100644 parser/testdata/rowvaluevtab.test create mode 100644 parser/testdata/savepoint.metadata.json create mode 100644 parser/testdata/savepoint.test create mode 100644 parser/testdata/savepoint4.metadata.json create mode 100644 parser/testdata/savepoint4.test create mode 100644 parser/testdata/scanstatus.metadata.json create mode 100644 parser/testdata/scanstatus.test create mode 100644 parser/testdata/scanstatus2.metadata.json create mode 100644 parser/testdata/scanstatus2.test create mode 100644 parser/testdata/schema.metadata.json create mode 100644 parser/testdata/schema.test create mode 100644 parser/testdata/schema2.metadata.json create mode 100644 parser/testdata/schema2.test create mode 100644 parser/testdata/schema4.metadata.json create mode 100644 parser/testdata/schema4.test create mode 100644 parser/testdata/schema5.metadata.json create mode 100644 parser/testdata/schema5.test create mode 100644 parser/testdata/schemafault.metadata.json create mode 100644 parser/testdata/schemafault.test create mode 100644 parser/testdata/securedel2.metadata.json create mode 100644 parser/testdata/securedel2.test create mode 100644 parser/testdata/seekscan1.metadata.json create mode 100644 parser/testdata/seekscan1.test delete mode 100644 parser/testdata/selectG.test create mode 100644 parser/testdata/shared.metadata.json create mode 100644 parser/testdata/shared.test create mode 100644 parser/testdata/shared2.metadata.json create mode 100644 parser/testdata/shared2.test create mode 100644 parser/testdata/shared3.metadata.json create mode 100644 parser/testdata/shared3.test create mode 100644 parser/testdata/shared7.metadata.json create mode 100644 parser/testdata/shared7.test create mode 100644 parser/testdata/sharedlock.metadata.json create mode 100644 parser/testdata/sharedlock.test create mode 100644 parser/testdata/shell7.metadata.json create mode 100644 parser/testdata/shell7.test create mode 100644 parser/testdata/shell9.metadata.json create mode 100644 parser/testdata/shell9.test create mode 100644 parser/testdata/shmlock.metadata.json create mode 100644 parser/testdata/shmlock.test create mode 100644 parser/testdata/shortread1.metadata.json create mode 100644 parser/testdata/shortread1.test create mode 100644 parser/testdata/sidedelete.metadata.json create mode 100644 parser/testdata/sidedelete.test create mode 100644 parser/testdata/skipscan1.metadata.json create mode 100644 parser/testdata/skipscan1.test create mode 100644 parser/testdata/skipscan2.metadata.json create mode 100644 parser/testdata/skipscan2.test create mode 100644 parser/testdata/skipscan3.metadata.json create mode 100644 parser/testdata/skipscan3.test create mode 100644 parser/testdata/skipscan5.metadata.json create mode 100644 parser/testdata/skipscan5.test create mode 100644 parser/testdata/skipscan6.metadata.json create mode 100644 parser/testdata/skipscan6.test create mode 100644 parser/testdata/snapshot.metadata.json create mode 100644 parser/testdata/snapshot.test create mode 100644 parser/testdata/snapshot2.metadata.json create mode 100644 parser/testdata/snapshot2.test create mode 100644 parser/testdata/snapshot3.metadata.json create mode 100644 parser/testdata/snapshot3.test create mode 100644 parser/testdata/snapshot4.metadata.json create mode 100644 parser/testdata/snapshot4.test create mode 100644 parser/testdata/snapshot_fault.metadata.json create mode 100644 parser/testdata/snapshot_fault.test create mode 100644 parser/testdata/snapshot_up.metadata.json create mode 100644 parser/testdata/snapshot_up.test create mode 100644 parser/testdata/softheap1.metadata.json create mode 100644 parser/testdata/softheap1.test create mode 100644 parser/testdata/sort.metadata.json create mode 100644 parser/testdata/sort.test create mode 100644 parser/testdata/sort2.metadata.json create mode 100644 parser/testdata/sort2.test create mode 100644 parser/testdata/sort3.metadata.json create mode 100644 parser/testdata/sort3.test create mode 100644 parser/testdata/sort5.metadata.json create mode 100644 parser/testdata/sort5.test create mode 100644 parser/testdata/sorterref.metadata.json create mode 100644 parser/testdata/sorterref.test create mode 100644 parser/testdata/sortfault.metadata.json create mode 100644 parser/testdata/sortfault.test create mode 100644 parser/testdata/speed3.metadata.json create mode 100644 parser/testdata/speed3.test create mode 100644 parser/testdata/spellfix.metadata.json create mode 100644 parser/testdata/spellfix.test create mode 100644 parser/testdata/spellfix2.metadata.json create mode 100644 parser/testdata/spellfix2.test create mode 100644 parser/testdata/spellfix3.metadata.json create mode 100644 parser/testdata/spellfix3.test create mode 100644 parser/testdata/spellfix4.metadata.json create mode 100644 parser/testdata/spellfix4.test create mode 100644 parser/testdata/sqllimits1.metadata.json create mode 100644 parser/testdata/sqllimits1.test create mode 100644 parser/testdata/sqllog.metadata.json create mode 100644 parser/testdata/sqllog.test create mode 100644 parser/testdata/starschema1.metadata.json create mode 100644 parser/testdata/starschema1.test create mode 100644 parser/testdata/stat.metadata.json create mode 100644 parser/testdata/stat.test create mode 100644 parser/testdata/statfault.metadata.json create mode 100644 parser/testdata/statfault.test create mode 100644 parser/testdata/stmt.metadata.json create mode 100644 parser/testdata/stmt.test create mode 100644 parser/testdata/stmtrand.metadata.json create mode 100644 parser/testdata/stmtrand.test create mode 100644 parser/testdata/stmtvtab1.metadata.json create mode 100644 parser/testdata/stmtvtab1.test create mode 100644 parser/testdata/strict1.metadata.json create mode 100644 parser/testdata/strict1.test create mode 100644 parser/testdata/strict2.metadata.json create mode 100644 parser/testdata/strict2.test create mode 100644 parser/testdata/subjournal.metadata.json create mode 100644 parser/testdata/subjournal.test create mode 100644 parser/testdata/subquery.metadata.json create mode 100644 parser/testdata/subquery.test create mode 100644 parser/testdata/subquery2.metadata.json create mode 100644 parser/testdata/subquery2.test create mode 100644 parser/testdata/subselect.metadata.json create mode 100644 parser/testdata/subselect.test create mode 100644 parser/testdata/subtype1.metadata.json create mode 100644 parser/testdata/subtype1.test create mode 100644 parser/testdata/superlock.metadata.json create mode 100644 parser/testdata/superlock.test create mode 100644 parser/testdata/swarmvtab.metadata.json create mode 100644 parser/testdata/swarmvtab.test create mode 100644 parser/testdata/swarmvtab2.metadata.json create mode 100644 parser/testdata/swarmvtab2.test create mode 100644 parser/testdata/swarmvtab3.metadata.json create mode 100644 parser/testdata/swarmvtab3.test create mode 100644 parser/testdata/swarmvtabfault.metadata.json create mode 100644 parser/testdata/swarmvtabfault.test create mode 100644 parser/testdata/symlink.metadata.json create mode 100644 parser/testdata/symlink.test create mode 100644 parser/testdata/symlink2.metadata.json create mode 100644 parser/testdata/symlink2.test create mode 100644 parser/testdata/sync2.metadata.json create mode 100644 parser/testdata/sync2.test create mode 100644 parser/testdata/syscall.metadata.json create mode 100644 parser/testdata/syscall.test create mode 100644 parser/testdata/tabfunc01.metadata.json create mode 100644 parser/testdata/tabfunc01.test create mode 100644 parser/testdata/table.metadata.json create mode 100644 parser/testdata/table.test create mode 100644 parser/testdata/tableopts.metadata.json create mode 100644 parser/testdata/tableopts.test create mode 100644 parser/testdata/tclsqlite.metadata.json create mode 100644 parser/testdata/tclsqlite.test create mode 100644 parser/testdata/tempdb.metadata.json create mode 100644 parser/testdata/tempdb.test create mode 100644 parser/testdata/tempdb2.metadata.json create mode 100644 parser/testdata/tempdb2.test create mode 100644 parser/testdata/temptable.metadata.json create mode 100644 parser/testdata/temptable.test create mode 100644 parser/testdata/temptable2.metadata.json create mode 100644 parser/testdata/temptable2.test create mode 100644 parser/testdata/temptable3.metadata.json create mode 100644 parser/testdata/temptable3.test create mode 100644 parser/testdata/temptrigger.metadata.json create mode 100644 parser/testdata/temptrigger.test create mode 100644 parser/testdata/thread001.metadata.json create mode 100644 parser/testdata/thread001.test create mode 100644 parser/testdata/thread004.metadata.json create mode 100644 parser/testdata/thread004.test create mode 100644 parser/testdata/thread1.metadata.json create mode 100644 parser/testdata/thread1.test create mode 100644 parser/testdata/thread2.metadata.json create mode 100644 parser/testdata/thread2.test create mode 100644 parser/testdata/thread3.metadata.json create mode 100644 parser/testdata/thread3.test create mode 100644 parser/testdata/tkt-02a8e81d44.metadata.json create mode 100644 parser/testdata/tkt-02a8e81d44.test create mode 100644 parser/testdata/tkt-18458b1a.metadata.json create mode 100644 parser/testdata/tkt-18458b1a.test create mode 100644 parser/testdata/tkt-2a5629202f.metadata.json create mode 100644 parser/testdata/tkt-2a5629202f.test create mode 100644 parser/testdata/tkt-2d1a5c67d.metadata.json create mode 100644 parser/testdata/tkt-2d1a5c67d.test create mode 100644 parser/testdata/tkt-313723c356.metadata.json create mode 100644 parser/testdata/tkt-313723c356.test create mode 100644 parser/testdata/tkt-385a5b56b9.metadata.json create mode 100644 parser/testdata/tkt-385a5b56b9.test create mode 100644 parser/testdata/tkt-38cb5df375.metadata.json create mode 100644 parser/testdata/tkt-38cb5df375.test create mode 100644 parser/testdata/tkt-3a77c9714e.metadata.json create mode 100644 parser/testdata/tkt-3a77c9714e.test create mode 100644 parser/testdata/tkt-4c86b126f2.metadata.json create mode 100644 parser/testdata/tkt-4c86b126f2.test create mode 100644 parser/testdata/tkt-4dd95f6943.metadata.json create mode 100644 parser/testdata/tkt-4dd95f6943.test create mode 100644 parser/testdata/tkt-4ef7e3cfca.metadata.json create mode 100644 parser/testdata/tkt-4ef7e3cfca.test create mode 100644 parser/testdata/tkt-54844eea3f.metadata.json create mode 100644 parser/testdata/tkt-54844eea3f.test create mode 100644 parser/testdata/tkt-5e10420e8d.metadata.json create mode 100644 parser/testdata/tkt-5e10420e8d.test create mode 100644 parser/testdata/tkt-752e1646fc.metadata.json create mode 100644 parser/testdata/tkt-752e1646fc.test create mode 100644 parser/testdata/tkt-78e04e52ea.metadata.json create mode 100644 parser/testdata/tkt-78e04e52ea.test create mode 100644 parser/testdata/tkt-7a31705a7e6.metadata.json create mode 100644 parser/testdata/tkt-7a31705a7e6.test create mode 100644 parser/testdata/tkt-7bbfb7d442.metadata.json create mode 100644 parser/testdata/tkt-7bbfb7d442.test create mode 100644 parser/testdata/tkt-80ba201079.metadata.json create mode 100644 parser/testdata/tkt-80ba201079.test create mode 100644 parser/testdata/tkt-80e031a00f.metadata.json create mode 100644 parser/testdata/tkt-80e031a00f.test create mode 100644 parser/testdata/tkt-868145d012.metadata.json create mode 100644 parser/testdata/tkt-868145d012.test create mode 100644 parser/testdata/tkt-8c63ff0ec.metadata.json create mode 100644 parser/testdata/tkt-8c63ff0ec.test create mode 100644 parser/testdata/tkt-91e2e8ba6f.metadata.json create mode 100644 parser/testdata/tkt-91e2e8ba6f.test create mode 100644 parser/testdata/tkt-99378177930f87bd.metadata.json create mode 100644 parser/testdata/tkt-99378177930f87bd.test create mode 100644 parser/testdata/tkt-9a8b09f8e6.metadata.json create mode 100644 parser/testdata/tkt-9a8b09f8e6.test create mode 100644 parser/testdata/tkt-9d68c883.metadata.json create mode 100644 parser/testdata/tkt-9d68c883.test create mode 100644 parser/testdata/tkt-9f2eb3abac.metadata.json create mode 100644 parser/testdata/tkt-9f2eb3abac.test create mode 100644 parser/testdata/tkt-a7debbe0.metadata.json create mode 100644 parser/testdata/tkt-a7debbe0.test create mode 100644 parser/testdata/tkt-a8a0d2996a.metadata.json create mode 100644 parser/testdata/tkt-a8a0d2996a.test create mode 100644 parser/testdata/tkt-b1d3a2e531.metadata.json create mode 100644 parser/testdata/tkt-b1d3a2e531.test create mode 100644 parser/testdata/tkt-b351d95f9.metadata.json create mode 100644 parser/testdata/tkt-b351d95f9.test create mode 100644 parser/testdata/tkt-b75a9ca6b0.metadata.json create mode 100644 parser/testdata/tkt-b75a9ca6b0.test create mode 100644 parser/testdata/tkt-ba7cbfaedc.metadata.json create mode 100644 parser/testdata/tkt-ba7cbfaedc.test create mode 100644 parser/testdata/tkt-bd484a090c.metadata.json create mode 100644 parser/testdata/tkt-bd484a090c.test create mode 100644 parser/testdata/tkt-bdc6bbbb38.metadata.json create mode 100644 parser/testdata/tkt-bdc6bbbb38.test create mode 100644 parser/testdata/tkt-c48d99d690.metadata.json create mode 100644 parser/testdata/tkt-c48d99d690.test create mode 100644 parser/testdata/tkt-cbd054fa6b.metadata.json create mode 100644 parser/testdata/tkt-cbd054fa6b.test create mode 100644 parser/testdata/tkt-d11f09d36e.metadata.json create mode 100644 parser/testdata/tkt-d11f09d36e.test create mode 100644 parser/testdata/tkt-d635236375.metadata.json create mode 100644 parser/testdata/tkt-d635236375.test create mode 100644 parser/testdata/tkt-f3e5abed55.metadata.json create mode 100644 parser/testdata/tkt-f3e5abed55.test create mode 100644 parser/testdata/tkt-f67b41381a.metadata.json create mode 100644 parser/testdata/tkt-f67b41381a.test create mode 100644 parser/testdata/tkt-f777251dc7a.metadata.json create mode 100644 parser/testdata/tkt-f777251dc7a.test create mode 100644 parser/testdata/tkt-f973c7ac31.metadata.json create mode 100644 parser/testdata/tkt-f973c7ac31.test create mode 100644 parser/testdata/tkt-fa7bf5ec.metadata.json create mode 100644 parser/testdata/tkt-fa7bf5ec.test create mode 100644 parser/testdata/tkt-fc62af4523.metadata.json create mode 100644 parser/testdata/tkt-fc62af4523.test create mode 100644 parser/testdata/tkt1435.metadata.json create mode 100644 parser/testdata/tkt1435.test create mode 100644 parser/testdata/tkt1443.metadata.json create mode 100644 parser/testdata/tkt1443.test create mode 100644 parser/testdata/tkt1444.metadata.json create mode 100644 parser/testdata/tkt1444.test create mode 100644 parser/testdata/tkt1449.metadata.json create mode 100644 parser/testdata/tkt1449.test create mode 100644 parser/testdata/tkt1473.metadata.json create mode 100644 parser/testdata/tkt1473.test create mode 100644 parser/testdata/tkt1501.metadata.json create mode 100644 parser/testdata/tkt1501.test create mode 100644 parser/testdata/tkt1512.metadata.json create mode 100644 parser/testdata/tkt1512.test create mode 100644 parser/testdata/tkt1514.metadata.json create mode 100644 parser/testdata/tkt1514.test create mode 100644 parser/testdata/tkt1536.metadata.json create mode 100644 parser/testdata/tkt1536.test create mode 100644 parser/testdata/tkt1537.metadata.json create mode 100644 parser/testdata/tkt1537.test create mode 100644 parser/testdata/tkt1567.metadata.json create mode 100644 parser/testdata/tkt1567.test create mode 100644 parser/testdata/tkt1644.metadata.json create mode 100644 parser/testdata/tkt1644.test create mode 100644 parser/testdata/tkt1667.metadata.json create mode 100644 parser/testdata/tkt1667.test create mode 100644 parser/testdata/tkt1873.metadata.json create mode 100644 parser/testdata/tkt1873.test create mode 100644 parser/testdata/tkt2141.metadata.json create mode 100644 parser/testdata/tkt2141.test create mode 100644 parser/testdata/tkt2192.metadata.json create mode 100644 parser/testdata/tkt2192.test create mode 100644 parser/testdata/tkt2251.metadata.json create mode 100644 parser/testdata/tkt2251.test create mode 100644 parser/testdata/tkt2285.metadata.json create mode 100644 parser/testdata/tkt2285.test create mode 100644 parser/testdata/tkt2332.metadata.json create mode 100644 parser/testdata/tkt2332.test create mode 100644 parser/testdata/tkt2339.metadata.json create mode 100644 parser/testdata/tkt2339.test create mode 100644 parser/testdata/tkt2391.metadata.json create mode 100644 parser/testdata/tkt2391.test create mode 100644 parser/testdata/tkt2409.metadata.json create mode 100644 parser/testdata/tkt2409.test create mode 100644 parser/testdata/tkt2450.metadata.json create mode 100644 parser/testdata/tkt2450.test create mode 100644 parser/testdata/tkt2565.metadata.json create mode 100644 parser/testdata/tkt2565.test create mode 100644 parser/testdata/tkt2640.metadata.json create mode 100644 parser/testdata/tkt2640.test create mode 100644 parser/testdata/tkt2686.metadata.json create mode 100644 parser/testdata/tkt2686.test create mode 100644 parser/testdata/tkt2767.metadata.json create mode 100644 parser/testdata/tkt2767.test create mode 100644 parser/testdata/tkt2817.metadata.json create mode 100644 parser/testdata/tkt2817.test create mode 100644 parser/testdata/tkt2822.metadata.json create mode 100644 parser/testdata/tkt2822.test create mode 100644 parser/testdata/tkt2832.metadata.json create mode 100644 parser/testdata/tkt2832.test create mode 100644 parser/testdata/tkt2920.metadata.json create mode 100644 parser/testdata/tkt2920.test create mode 100644 parser/testdata/tkt2942.metadata.json create mode 100644 parser/testdata/tkt2942.test create mode 100644 parser/testdata/tkt3080.metadata.json create mode 100644 parser/testdata/tkt3080.test create mode 100644 parser/testdata/tkt3121.metadata.json create mode 100644 parser/testdata/tkt3121.test create mode 100644 parser/testdata/tkt3201.metadata.json create mode 100644 parser/testdata/tkt3201.test create mode 100644 parser/testdata/tkt3292.metadata.json create mode 100644 parser/testdata/tkt3292.test create mode 100644 parser/testdata/tkt3298.metadata.json create mode 100644 parser/testdata/tkt3298.test create mode 100644 parser/testdata/tkt3334.metadata.json create mode 100644 parser/testdata/tkt3334.test create mode 100644 parser/testdata/tkt3346.metadata.json create mode 100644 parser/testdata/tkt3346.test create mode 100644 parser/testdata/tkt3357.metadata.json create mode 100644 parser/testdata/tkt3357.test create mode 100644 parser/testdata/tkt3419.metadata.json create mode 100644 parser/testdata/tkt3419.test create mode 100644 parser/testdata/tkt3424.metadata.json create mode 100644 parser/testdata/tkt3424.test create mode 100644 parser/testdata/tkt3442.metadata.json create mode 100644 parser/testdata/tkt3442.test create mode 100644 parser/testdata/tkt3461.metadata.json create mode 100644 parser/testdata/tkt3461.test create mode 100644 parser/testdata/tkt3493.metadata.json create mode 100644 parser/testdata/tkt3493.test create mode 100644 parser/testdata/tkt3508.metadata.json create mode 100644 parser/testdata/tkt3508.test create mode 100644 parser/testdata/tkt3554.metadata.json create mode 100644 parser/testdata/tkt3554.test create mode 100644 parser/testdata/tkt35xx.metadata.json create mode 100644 parser/testdata/tkt35xx.test create mode 100644 parser/testdata/tkt3718.metadata.json create mode 100644 parser/testdata/tkt3718.test create mode 100644 parser/testdata/tkt3731.metadata.json create mode 100644 parser/testdata/tkt3731.test create mode 100644 parser/testdata/tkt3793.metadata.json create mode 100644 parser/testdata/tkt3793.test create mode 100644 parser/testdata/tkt3810.metadata.json create mode 100644 parser/testdata/tkt3810.test create mode 100644 parser/testdata/tkt3841.metadata.json create mode 100644 parser/testdata/tkt3841.test create mode 100644 parser/testdata/tkt3871.metadata.json create mode 100644 parser/testdata/tkt3871.test create mode 100644 parser/testdata/tkt3879.metadata.json create mode 100644 parser/testdata/tkt3879.test create mode 100644 parser/testdata/tkt3911.metadata.json create mode 100644 parser/testdata/tkt3911.test create mode 100644 parser/testdata/tkt3918.metadata.json create mode 100644 parser/testdata/tkt3918.test create mode 100644 parser/testdata/tkt3922.metadata.json create mode 100644 parser/testdata/tkt3922.test create mode 100644 parser/testdata/tkt3929.metadata.json create mode 100644 parser/testdata/tkt3929.test create mode 100644 parser/testdata/tkt3935.metadata.json create mode 100644 parser/testdata/tkt3935.test create mode 100644 parser/testdata/tkt3992.metadata.json create mode 100644 parser/testdata/tkt3992.test create mode 100644 parser/testdata/tkt3997.metadata.json create mode 100644 parser/testdata/tkt3997.test create mode 100644 parser/testdata/tkt4018.metadata.json create mode 100644 parser/testdata/tkt4018.test create mode 100644 parser/testdata/tpch01.metadata.json create mode 100644 parser/testdata/tpch01.test create mode 100644 parser/testdata/trace.metadata.json create mode 100644 parser/testdata/trace.test create mode 100644 parser/testdata/trace2.metadata.json create mode 100644 parser/testdata/trace2.test create mode 100644 parser/testdata/trace3.metadata.json create mode 100644 parser/testdata/trace3.test create mode 100644 parser/testdata/trans.metadata.json create mode 100644 parser/testdata/trans.test create mode 100644 parser/testdata/transitive1.metadata.json create mode 100644 parser/testdata/transitive1.test create mode 100644 parser/testdata/trigger2.metadata.json create mode 100644 parser/testdata/trigger2.test create mode 100644 parser/testdata/trigger3.metadata.json create mode 100644 parser/testdata/trigger3.test create mode 100644 parser/testdata/trigger4.metadata.json create mode 100644 parser/testdata/trigger4.test create mode 100644 parser/testdata/trigger5.metadata.json create mode 100644 parser/testdata/trigger5.test create mode 100644 parser/testdata/trigger6.metadata.json create mode 100644 parser/testdata/trigger6.test create mode 100644 parser/testdata/trigger7.metadata.json create mode 100644 parser/testdata/trigger7.test create mode 100644 parser/testdata/trigger9.metadata.json create mode 100644 parser/testdata/trigger9.test create mode 100644 parser/testdata/triggerB.metadata.json create mode 100644 parser/testdata/triggerB.test create mode 100644 parser/testdata/triggerC.metadata.json create mode 100644 parser/testdata/triggerC.test create mode 100644 parser/testdata/triggerE.metadata.json create mode 100644 parser/testdata/triggerE.test create mode 100644 parser/testdata/triggerF.metadata.json create mode 100644 parser/testdata/triggerF.test create mode 100644 parser/testdata/triggerG.metadata.json create mode 100644 parser/testdata/triggerG.test create mode 100644 parser/testdata/triggerupfrom.metadata.json create mode 100644 parser/testdata/triggerupfrom.test create mode 100644 parser/testdata/trustschema1.metadata.json create mode 100644 parser/testdata/trustschema1.test create mode 100644 parser/testdata/types.metadata.json create mode 100644 parser/testdata/types.test create mode 100644 parser/testdata/types3.metadata.json create mode 100644 parser/testdata/types3.test create mode 100644 parser/testdata/unhex.metadata.json create mode 100644 parser/testdata/unhex.test create mode 100644 parser/testdata/unionall.metadata.json create mode 100644 parser/testdata/unionall.test create mode 100644 parser/testdata/unionall2.metadata.json create mode 100644 parser/testdata/unionall2.test create mode 100644 parser/testdata/unionallfault.metadata.json create mode 100644 parser/testdata/unionallfault.test create mode 100644 parser/testdata/unionvtab.metadata.json create mode 100644 parser/testdata/unionvtab.test create mode 100644 parser/testdata/unionvtabfault.metadata.json create mode 100644 parser/testdata/unionvtabfault.test create mode 100644 parser/testdata/unique.metadata.json create mode 100644 parser/testdata/unique.test create mode 100644 parser/testdata/unique2.metadata.json create mode 100644 parser/testdata/unique2.test create mode 100644 parser/testdata/unordered.metadata.json create mode 100644 parser/testdata/unordered.test create mode 100644 parser/testdata/update.metadata.json create mode 100644 parser/testdata/update.test create mode 100644 parser/testdata/update2.metadata.json create mode 100644 parser/testdata/update2.test create mode 100644 parser/testdata/upfrom1.metadata.json create mode 100644 parser/testdata/upfrom1.test create mode 100644 parser/testdata/upfrom2.metadata.json create mode 100644 parser/testdata/upfrom2.test create mode 100644 parser/testdata/upfrom3.metadata.json create mode 100644 parser/testdata/upfrom3.test create mode 100644 parser/testdata/upfrom4.metadata.json create mode 100644 parser/testdata/upfrom4.test create mode 100644 parser/testdata/upfromfault.metadata.json create mode 100644 parser/testdata/upfromfault.test create mode 100644 parser/testdata/upsertfault.metadata.json create mode 100644 parser/testdata/upsertfault.test create mode 100644 parser/testdata/uri.metadata.json create mode 100644 parser/testdata/uri.test create mode 100644 parser/testdata/vacuum-into.metadata.json create mode 100644 parser/testdata/vacuum-into.test create mode 100644 parser/testdata/vacuum.metadata.json create mode 100644 parser/testdata/vacuum.test create mode 100644 parser/testdata/vacuum2.metadata.json create mode 100644 parser/testdata/vacuum2.test create mode 100644 parser/testdata/vacuum3.metadata.json create mode 100644 parser/testdata/vacuum3.test create mode 100644 parser/testdata/vacuum5.metadata.json create mode 100644 parser/testdata/vacuum5.test create mode 100644 parser/testdata/vacuum6.metadata.json create mode 100644 parser/testdata/vacuum6.test create mode 100644 parser/testdata/vacuummem.metadata.json create mode 100644 parser/testdata/vacuummem.test create mode 100644 parser/testdata/values.metadata.json create mode 100644 parser/testdata/values.test create mode 100644 parser/testdata/valuesfault.metadata.json create mode 100644 parser/testdata/valuesfault.test create mode 100644 parser/testdata/view.metadata.json create mode 100644 parser/testdata/view.test create mode 100644 parser/testdata/view2.metadata.json create mode 100644 parser/testdata/view2.test create mode 100644 parser/testdata/view3.metadata.json create mode 100644 parser/testdata/view3.test create mode 100644 parser/testdata/vtab1.metadata.json create mode 100644 parser/testdata/vtab1.test create mode 100644 parser/testdata/vtab2.metadata.json create mode 100644 parser/testdata/vtab2.test create mode 100644 parser/testdata/vtab3.metadata.json create mode 100644 parser/testdata/vtab3.test create mode 100644 parser/testdata/vtab4.metadata.json create mode 100644 parser/testdata/vtab4.test create mode 100644 parser/testdata/vtab5.metadata.json create mode 100644 parser/testdata/vtab5.test create mode 100644 parser/testdata/vtab6.metadata.json create mode 100644 parser/testdata/vtab6.test create mode 100644 parser/testdata/vtab7.metadata.json create mode 100644 parser/testdata/vtab7.test create mode 100644 parser/testdata/vtab8.metadata.json create mode 100644 parser/testdata/vtab8.test create mode 100644 parser/testdata/vtab9.metadata.json create mode 100644 parser/testdata/vtab9.test create mode 100644 parser/testdata/vtabA.metadata.json create mode 100644 parser/testdata/vtabA.test create mode 100644 parser/testdata/vtabB.metadata.json create mode 100644 parser/testdata/vtabB.test create mode 100644 parser/testdata/vtabC.metadata.json create mode 100644 parser/testdata/vtabC.test create mode 100644 parser/testdata/vtabD.metadata.json create mode 100644 parser/testdata/vtabD.test create mode 100644 parser/testdata/vtabF.metadata.json create mode 100644 parser/testdata/vtabF.test create mode 100644 parser/testdata/vtabH.metadata.json create mode 100644 parser/testdata/vtabH.test create mode 100644 parser/testdata/vtabI.metadata.json create mode 100644 parser/testdata/vtabI.test create mode 100644 parser/testdata/vtabJ.metadata.json create mode 100644 parser/testdata/vtabJ.test create mode 100644 parser/testdata/vtabK.metadata.json create mode 100644 parser/testdata/vtabK.test create mode 100644 parser/testdata/vtabL.metadata.json create mode 100644 parser/testdata/vtabL.test create mode 100644 parser/testdata/vtab_alter.metadata.json create mode 100644 parser/testdata/vtab_alter.test create mode 100644 parser/testdata/vtab_err.metadata.json create mode 100644 parser/testdata/vtab_err.test create mode 100644 parser/testdata/vtab_shared.metadata.json create mode 100644 parser/testdata/vtab_shared.test create mode 100644 parser/testdata/vtabdistinct.metadata.json create mode 100644 parser/testdata/vtabdistinct.test create mode 100644 parser/testdata/vtabdrop.metadata.json create mode 100644 parser/testdata/vtabdrop.test create mode 100644 parser/testdata/vtabrhs1.metadata.json create mode 100644 parser/testdata/vtabrhs1.test create mode 100644 parser/testdata/wal.metadata.json create mode 100644 parser/testdata/wal.test create mode 100644 parser/testdata/wal2.metadata.json create mode 100644 parser/testdata/wal2.test create mode 100644 parser/testdata/wal3.metadata.json create mode 100644 parser/testdata/wal3.test create mode 100644 parser/testdata/wal4.metadata.json create mode 100644 parser/testdata/wal4.test create mode 100644 parser/testdata/wal5.metadata.json create mode 100644 parser/testdata/wal5.test create mode 100644 parser/testdata/wal6.metadata.json create mode 100644 parser/testdata/wal6.test create mode 100644 parser/testdata/wal64k.metadata.json create mode 100644 parser/testdata/wal64k.test create mode 100644 parser/testdata/wal8.metadata.json create mode 100644 parser/testdata/wal8.test create mode 100644 parser/testdata/wal9.metadata.json create mode 100644 parser/testdata/wal9.test create mode 100644 parser/testdata/walbak.metadata.json create mode 100644 parser/testdata/walbak.test create mode 100644 parser/testdata/walbig.metadata.json create mode 100644 parser/testdata/walbig.test create mode 100644 parser/testdata/walblock.metadata.json create mode 100644 parser/testdata/walblock.test create mode 100644 parser/testdata/walckptnoop.metadata.json create mode 100644 parser/testdata/walckptnoop.test create mode 100644 parser/testdata/walcksum.metadata.json create mode 100644 parser/testdata/walcksum.test create mode 100644 parser/testdata/walcrash.metadata.json create mode 100644 parser/testdata/walcrash.test create mode 100644 parser/testdata/walcrash3.metadata.json create mode 100644 parser/testdata/walcrash3.test create mode 100644 parser/testdata/walcrash4.metadata.json create mode 100644 parser/testdata/walcrash4.test create mode 100644 parser/testdata/walfault2.metadata.json create mode 100644 parser/testdata/walfault2.test create mode 100644 parser/testdata/walhook.metadata.json create mode 100644 parser/testdata/walhook.test create mode 100644 parser/testdata/walmode.metadata.json create mode 100644 parser/testdata/walmode.test create mode 100644 parser/testdata/walnoshm.metadata.json create mode 100644 parser/testdata/walnoshm.test create mode 100644 parser/testdata/waloverwrite.metadata.json create mode 100644 parser/testdata/waloverwrite.test create mode 100644 parser/testdata/walprotocol.metadata.json create mode 100644 parser/testdata/walprotocol.test create mode 100644 parser/testdata/walprotocol2.metadata.json create mode 100644 parser/testdata/walprotocol2.test create mode 100644 parser/testdata/walrestart.metadata.json create mode 100644 parser/testdata/walrestart.test create mode 100644 parser/testdata/walro2.metadata.json create mode 100644 parser/testdata/walro2.test create mode 100644 parser/testdata/walrofault.metadata.json create mode 100644 parser/testdata/walrofault.test create mode 100644 parser/testdata/walseh1.metadata.json create mode 100644 parser/testdata/walseh1.test create mode 100644 parser/testdata/walsetlk.metadata.json create mode 100644 parser/testdata/walsetlk.test create mode 100644 parser/testdata/walsetlk2.metadata.json create mode 100644 parser/testdata/walsetlk2.test create mode 100644 parser/testdata/walsetlk3.metadata.json create mode 100644 parser/testdata/walsetlk3.test create mode 100644 parser/testdata/walsetlk_recover.metadata.json create mode 100644 parser/testdata/walsetlk_recover.test create mode 100644 parser/testdata/walsetlk_snapshot.metadata.json create mode 100644 parser/testdata/walsetlk_snapshot.test create mode 100644 parser/testdata/walshared.metadata.json create mode 100644 parser/testdata/walshared.test create mode 100644 parser/testdata/walslow.metadata.json create mode 100644 parser/testdata/walslow.test create mode 100644 parser/testdata/walvfs.metadata.json create mode 100644 parser/testdata/walvfs.test create mode 100644 parser/testdata/where.metadata.json create mode 100644 parser/testdata/where.test create mode 100644 parser/testdata/where2.metadata.json create mode 100644 parser/testdata/where2.test create mode 100644 parser/testdata/where3.metadata.json create mode 100644 parser/testdata/where3.test create mode 100644 parser/testdata/where4.metadata.json create mode 100644 parser/testdata/where4.test create mode 100644 parser/testdata/where5.metadata.json create mode 100644 parser/testdata/where5.test create mode 100644 parser/testdata/where6.metadata.json create mode 100644 parser/testdata/where6.test create mode 100644 parser/testdata/where7.metadata.json create mode 100644 parser/testdata/where7.test create mode 100644 parser/testdata/where8.metadata.json create mode 100644 parser/testdata/where8.test create mode 100644 parser/testdata/where9.metadata.json create mode 100644 parser/testdata/where9.test create mode 100644 parser/testdata/whereA.metadata.json create mode 100644 parser/testdata/whereA.test create mode 100644 parser/testdata/whereC.metadata.json create mode 100644 parser/testdata/whereC.test create mode 100644 parser/testdata/whereD.metadata.json create mode 100644 parser/testdata/whereD.test create mode 100644 parser/testdata/whereE.metadata.json create mode 100644 parser/testdata/whereE.test create mode 100644 parser/testdata/whereF.metadata.json create mode 100644 parser/testdata/whereF.test create mode 100644 parser/testdata/whereG.metadata.json create mode 100644 parser/testdata/whereG.test create mode 100644 parser/testdata/whereH.metadata.json create mode 100644 parser/testdata/whereH.test create mode 100644 parser/testdata/whereI.metadata.json create mode 100644 parser/testdata/whereI.test create mode 100644 parser/testdata/whereJ.metadata.json create mode 100644 parser/testdata/whereJ.test create mode 100644 parser/testdata/whereK.metadata.json create mode 100644 parser/testdata/whereK.test create mode 100644 parser/testdata/whereL.metadata.json create mode 100644 parser/testdata/whereL.test create mode 100644 parser/testdata/whereM.metadata.json create mode 100644 parser/testdata/whereM.test create mode 100644 parser/testdata/whereN.metadata.json create mode 100644 parser/testdata/whereN.test create mode 100644 parser/testdata/wherefault.metadata.json create mode 100644 parser/testdata/wherefault.test create mode 100644 parser/testdata/wherelfault.metadata.json create mode 100644 parser/testdata/wherelfault.test create mode 100644 parser/testdata/wherelimit.metadata.json create mode 100644 parser/testdata/wherelimit.test create mode 100644 parser/testdata/wherelimit2.metadata.json create mode 100644 parser/testdata/wherelimit2.test create mode 100644 parser/testdata/wherelimit3.metadata.json create mode 100644 parser/testdata/wherelimit3.test create mode 100644 parser/testdata/widetab1.metadata.json create mode 100644 parser/testdata/widetab1.test create mode 100644 parser/testdata/win32heap.metadata.json create mode 100644 parser/testdata/win32heap.test create mode 100644 parser/testdata/win32nolock.metadata.json create mode 100644 parser/testdata/win32nolock.test create mode 100644 parser/testdata/windowfault.metadata.json create mode 100644 parser/testdata/windowfault.test create mode 100644 parser/testdata/windowpushd.metadata.json create mode 100644 parser/testdata/windowpushd.test create mode 100644 parser/testdata/with4.metadata.json create mode 100644 parser/testdata/with4.test create mode 100644 parser/testdata/with5.metadata.json create mode 100644 parser/testdata/with5.test create mode 100644 parser/testdata/with6.metadata.json create mode 100644 parser/testdata/with6.test create mode 100644 parser/testdata/without_rowid1.metadata.json create mode 100644 parser/testdata/without_rowid1.test create mode 100644 parser/testdata/without_rowid2.metadata.json create mode 100644 parser/testdata/without_rowid2.test create mode 100644 parser/testdata/without_rowid3.metadata.json create mode 100644 parser/testdata/without_rowid3.test create mode 100644 parser/testdata/without_rowid4.metadata.json create mode 100644 parser/testdata/without_rowid4.test create mode 100644 parser/testdata/without_rowid5.metadata.json create mode 100644 parser/testdata/without_rowid5.test create mode 100644 parser/testdata/without_rowid6.metadata.json create mode 100644 parser/testdata/without_rowid6.test create mode 100644 parser/testdata/without_rowid7.metadata.json create mode 100644 parser/testdata/without_rowid7.test create mode 100644 parser/testdata/writecrash.metadata.json create mode 100644 parser/testdata/writecrash.test create mode 100644 parser/testdata/zeroblob.metadata.json create mode 100644 parser/testdata/zeroblob.test create mode 100644 parser/testdata/zipfile.metadata.json create mode 100644 parser/testdata/zipfile.test create mode 100644 parser/testdata/zipfile2.metadata.json create mode 100644 parser/testdata/zipfile2.test create mode 100644 parser/testdata/zipfilefault.metadata.json create mode 100644 parser/testdata/zipfilefault.test diff --git a/CLAUDE.md b/CLAUDE.md index 06a6b11..5570068 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -22,9 +22,11 @@ https://sqlite.org/lang.html. ## The corpus Each `parser/testdata/.test` holds cases extracted from SQLite's -`test/.test` TCL scripts. For every case, the raw oracle results (one -line per statement: prepared OK, or the exact error message and offset) are -stored; the harness derives the expectation from them: +`test/.test` TCL script; there is one for every script in the pinned +source tree that yields at least one literal-SQL block. For every case, the +raw oracle results (one line per statement: prepared OK, or the exact error +message, offset and parse tail) are stored; the harness derives the +expectation from them: - If any statement failed with a **syntax-family** message (`near "…": syntax error`, `unrecognized token: "…"`, `incomplete input`), meyer must @@ -64,7 +66,7 @@ the fix is in `cmd/regenerate-parse` (or the classification in ## Regenerating the corpus ```sh -go run ./cmd/regenerate-parse # the full starter set +go run ./cmd/regenerate-parse # every script in the pinned tree go run ./cmd/regenerate-parse -files select1 # one file ``` diff --git a/cmd/regenerate-parse/main.go b/cmd/regenerate-parse/main.go index 1b39aad..715516d 100644 --- a/cmd/regenerate-parse/main.go +++ b/cmd/regenerate-parse/main.go @@ -22,7 +22,10 @@ // // go run ./cmd/regenerate-parse [-files select1,expr,...] [flags] // -// With no -files, the starter set below is regenerated. +// With no -files, every test script in the pinned source tree is +// regenerated. Scripts that yield no literal-SQL cases (the tokenizer +// tests written in C, the VFS and WAL harnesses, and so on) produce no +// corpus file, and a stale one left over from an earlier run is removed. package main import ( @@ -37,6 +40,7 @@ import ( "os/exec" "path/filepath" "runtime" + "sort" "strconv" "strings" "sync" @@ -60,24 +64,21 @@ const ( srcSHA = "d18fa15aec74d8c17e1463f861095adc01b5ad190256acb4f91d22f0368d232b" ) -// starterSet is the corpus from PLAN.md milestone 2: the dedicated -// parser/tokenizer tests, the grammar-heavy statement suites, and the -// evidence files that map 1:1 to the documented grammar. -var starterSet = []string{ - "parser1", "tokenize", "keyword1", - "select1", "select2", "select3", "select4", "select5", "select6", - "select7", "select8", "select9", "selectA", "selectB", "selectC", - "selectD", "selectE", "selectF", "selectG", "selectH", - "expr", "expr2", "in", "in2", "in3", "in4", "in5", "between", - "with1", "with2", "with3", "withM", - "window1", "window2", "window3", "window4", "window5", - "window6", "window7", "window8", "window9", "windowA", - "windowB", "windowC", "windowD", "windowE", "windowerr", - "alter", "alter2", "alter3", "alter4", "altertab", "altertab2", "altertab3", - "alterdropcol", "alterdropcol2", - "trigger1", "upsert1", "upsert2", "upsert3", "upsert4", "upsert5", - "returning1", - "e_select", "e_expr", "e_createtable", "e_insert", "e_update", "e_delete", +// allScripts lists every test/*.test script of the pinned source tree, in +// sorted order. PLAN.md milestone 2 named a hand-picked starter set; taking +// the whole suite instead costs a few megabytes and quadruples the case +// count, and needs no curation when the pin advances. +func allScripts(testDir string) ([]string, error) { + paths, err := filepath.Glob(filepath.Join(testDir, "*.test")) + if err != nil { + return nil, err + } + names := make([]string, len(paths)) + for i, path := range paths { + names[i] = strings.TrimSuffix(filepath.Base(path), ".test") + } + sort.Strings(names) + return names, nil } func main() { @@ -89,11 +90,6 @@ func main() { ) flag.Parse() - names := starterSet - if *files != "" { - names = strings.Split(*files, ",") - } - oracle, err := ensureOracle(*cacheDir) if err != nil { fatal(err) @@ -102,11 +98,18 @@ func main() { if err != nil { fatal(err) } + + var names []string + if *files != "" { + names = strings.Split(*files, ",") + } else if names, err = allScripts(testDir); err != nil { + fatal(err) + } if err := os.MkdirAll(*testdata, 0o755); err != nil { fatal(err) } - var totalCases, totalTodo int + var totalCases, totalTodo, usedScripts, emptyScripts int var totals tclextract.Stats for _, name := range names { // Snapshot the previous corpus state before regenerating, so the @@ -127,6 +130,17 @@ func main() { if err != nil { fatal(fmt.Errorf("%s: %w", name, err)) } + totals.Found += stats.Found + totals.SkippedSubst += stats.SkippedSubst + totals.SkippedForm += stats.SkippedForm + if len(cases) == 0 { + // Nothing extractable: leave no corpus file behind, and clear + // away one from an earlier run of a differently pinned tree. + os.Remove(testPath) + os.Remove(testfile.MetadataPath(testPath)) + emptyScripts++ + continue + } todo, err := mergeMetadata(testPath, prevCases, prevMeta.Todo, cases) if err != nil { fatal(fmt.Errorf("%s: %w", name, err)) @@ -135,12 +149,11 @@ func main() { name, len(cases), todo, stats.SkippedSubst, stats.SkippedForm) totalCases += len(cases) totalTodo += todo - totals.Found += stats.Found - totals.SkippedSubst += stats.SkippedSubst - totals.SkippedForm += stats.SkippedForm + usedScripts++ } - fmt.Printf("\ntotal: %d cases (%d todo) from %d files; %d of %d found blocks skipped (%d substitution, %d malformed/non-literal)\n", - totalCases, totalTodo, len(names), + fmt.Printf("\ntotal: %d cases (%d todo) from %d of %d scripts (%d yielded nothing); "+ + "%d of %d found blocks skipped (%d substitution, %d malformed/non-literal)\n", + totalCases, totalTodo, usedScripts, len(names), emptyScripts, totals.SkippedSubst+totals.SkippedForm, totals.Found, totals.SkippedSubst, totals.SkippedForm) } @@ -196,6 +209,9 @@ func regenerateFile(oracle, testDir, outDir, name string, jobs int) ([]testfile. } kept = append(kept, c) } + if len(kept) == 0 { + return nil, stats, nil + } if err := testfile.Write(filepath.Join(outDir, name+".test"), kept); err != nil { return nil, stats, err } @@ -214,6 +230,17 @@ func runOracle(oracle, sql string) ([]testfile.StmtResult, error) { } var results []testfile.StmtResult for _, line := range strings.Split(strings.TrimRight(out.String(), "\n"), "\n") { + // An error message can itself contain a newline, because the + // offending token can: "SELECT X'0102, 1" reports the rest of the + // input, newline included, as an unrecognized token. Such a line is + // a continuation of the message before it. The corpus file format + // cannot hold a multi-line message, so testfile.CheckCase drops the + // case later; joining here keeps the observation faithful until + // then instead of failing the whole run. + if !strings.HasPrefix(line, "stmt ") && len(results) > 0 { + results[len(results)-1].Message += "\n" + line + continue + } if line == "" { continue } diff --git a/parser/parser_test.go b/parser/parser_test.go index f6f2bce..2123691 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -76,9 +76,8 @@ func runFile(t *testing.T, path string) { // runCase checks one corpus case against the oracle-derived expectation: // meyer must accept exactly when SQLite's parser accepted, and must produce -// the identical message on rejection. (Error offsets are recorded in the -// corpus but not asserted yet; they become part of this check once the -// parser tracks positions.) +// the identical message and byte offset on rejection. SQLite reports -1 from +// sqlite3_error_offset for errors it cannot place, and those are not checked. func runCase(c testfile.Case) error { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() @@ -108,5 +107,9 @@ func runCase(c testfile.Case) error { if pe.Message != exp.Message { return fmt.Errorf("error message mismatch:\n got: %s\n want: %s", pe.Message, exp.Message) } + if exp.Offset >= 0 && pe.Offset != exp.Offset { + return fmt.Errorf("error offset mismatch for %s: got %d, want %d", + exp.Message, pe.Offset, exp.Offset) + } return nil } diff --git a/parser/testdata/README.md b/parser/testdata/README.md index 205d9d2..4a0f450 100644 --- a/parser/testdata/README.md +++ b/parser/testdata/README.md @@ -3,10 +3,14 @@ The `*.test` files in this directory are generated by `go run ./cmd/regenerate-parse`. **Do not edit them by hand.** -- **Source of the SQL**: SQLite's own test suite (`test/*.test` TCL scripts) - from the pinned release below. SQL blocks are extracted verbatim from - `do_execsql_test` / `do_catchsql_test` invocations whose SQL argument is a - literal TCL brace block (cases using TCL substitution are skipped). +- **Source of the SQL**: SQLite's own test suite from the pinned release + below — every `test/*.test` TCL script, not a curated subset. SQL blocks + are extracted verbatim from `do_execsql_test` / `do_catchsql_test` + invocations whose SQL argument is a literal TCL brace block (cases using + TCL substitution are skipped, as are the few whose oracle message spans + more than one line, which the file format cannot hold). Scripts that yield + no such block — the C-level tokenizer tests, the VFS and WAL harnesses — + have no corpus file here. - **Source of the expectations**: a real SQLite build. Every statement of every case is prepared independently with `sqlite3_prepare_v2` against an empty in-memory database (nothing is executed) using the oracle program in diff --git a/parser/testdata/keyword1.metadata.json b/parser/testdata/affinity2.metadata.json similarity index 100% rename from parser/testdata/keyword1.metadata.json rename to parser/testdata/affinity2.metadata.json diff --git a/parser/testdata/affinity2.test b/parser/testdata/affinity2.test new file mode 100644 index 0000000..0b5f1d8 --- /dev/null +++ b/parser/testdata/affinity2.test @@ -0,0 +1,165 @@ +==== affinity2-100 + + CREATE TABLE t1( + xi INTEGER, + xr REAL, + xb BLOB, + xn NUMERIC, + xt TEXT + ); + INSERT INTO t1(rowid,xi,xr,xb,xn,xt) VALUES(1,1,1,1,1,1); + INSERT INTO t1(rowid,xi,xr,xb,xn,xt) VALUES(2,'2','2','2','2','2'); + INSERT INTO t1(rowid,xi,xr,xb,xn,xt) VALUES(3,'03','03','03','03','03'); +---- +stmt 0 ok +stmt 94 err 1 -1 154 no such table: t1 +stmt 154 err 1 -1 224 no such table: t1 +stmt 224 err 1 -1 299 no such table: t1 +==== affinity2-110 + + SELECT xi, typeof(xi) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== affinity2-120 + + SELECT xr, typeof(xr) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== affinity2-130 + + SELECT xb, typeof(xb) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== affinity2-140 + + SELECT xn, typeof(xn) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== affinity2-150 + + SELECT xt, typeof(xt) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== affinity2-200 + + SELECT rowid, xi==xt, xi==xb, xi==+xt FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== affinity2-210 + + SELECT rowid, xr==xt, xr==xb, xr==+xt FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== affinity2-220 + + SELECT rowid, xn==xt, xn==xb, xn==+xt FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== affinity2-300 + + SELECT rowid, xt==+xi, xt==xi, xt==xb FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== 400 + + CREATE TABLE ttt(c0, c1); + CREATE INDEX ii ON ttt(CAST(c0 AS NUMERIC)); + INSERT INTO ttt VALUES('abc', '-1'); +---- +stmt 0 ok +stmt 28 err 1 -1 75 no such table: main.ttt +stmt 75 err 1 -1 115 no such table: ttt +==== 410 + + SELECT * FROM ttt WHERE CAST(c0 AS NUMERIC) > c1 GROUP BY rowid; +---- +stmt 0 err 1 -1 67 no such table: ttt +==== 420 + + SELECT * FROM ttt INDEXED BY ii WHERE CAST(c0 AS NUMERIC) > c1 GROUP BY rowid; +---- +stmt 0 err 1 -1 81 no such table: ttt +==== 430 + + CREATE TABLE t3(a, b, c INTEGER); + CREATE INDEX t3ac ON t3(a, c-1); + INSERT INTO t3 VALUES(1, 1, 1); + INSERT INTO t3 VALUES(2, 1, 0); + INSERT INTO t3 VALUES(3, 1, 1); + INSERT INTO t3 VALUES(4, 1, 0); + INSERT INTO t3 VALUES(5, 1, 1); +---- +stmt 0 ok +stmt 36 err 1 -1 71 no such table: main.t3 +stmt 71 err 1 -1 105 no such table: t3 +stmt 105 err 1 -1 139 no such table: t3 +stmt 139 err 1 -1 173 no such table: t3 +stmt 173 err 1 -1 207 no such table: t3 +stmt 207 err 1 -1 241 no such table: t3 +==== 440 + + SELECT * FROM t3 WHERE c='0' ORDER BY a; +---- +stmt 0 err 1 -1 43 no such table: t3 +==== 500 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 TEXT UNIQUE, c1); + INSERT INTO t0(c0) VALUES (-1); + SELECT quote(- x'ce'), quote(t0.c0), quote(- x'ce' >= t0.c0) FROM t0; +---- +stmt 0 ok +stmt 27 ok +stmt 66 err 1 -1 100 no such table: t0 +stmt 100 err 1 -1 172 no such table: t0 +==== 501 + + SELECT * FROM t0 WHERE - x'ce' >= t0.c0; +---- +stmt 0 err 1 -1 43 no such table: t0 +==== 502 + + SELECT quote(+-+x'ce'), quote(t0.c0), quote(+-+x'ce' >= t0.c0) FROM t0; +---- +stmt 0 err 1 -1 74 no such table: t0 +==== 503 + + SELECT * FROM t0 WHERE +-+x'ce' >= t0.c0; +---- +stmt 0 err 1 -1 44 no such table: t0 +==== 504 + + SELECT quote(- 'ce'), quote(t0.c0), quote(- 'ce' >= t0.c0) FROM t0; +---- +stmt 0 err 1 -1 70 no such table: t0 +==== 505 + + SELECT * FROM t0 WHERE - 'ce' >= t0.c0; +---- +stmt 0 err 1 -1 42 no such table: t0 +==== 506 + + SELECT quote(+-+'ce'), quote(t0.c0), quote(+-+'ce' >= t0.c0) FROM t0; +---- +stmt 0 err 1 -1 72 no such table: t0 +==== 507 + + SELECT * FROM t0 WHERE +-+'ce' >= t0.c0; +---- +stmt 0 err 1 -1 43 no such table: t0 +==== 600 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 REAL UNIQUE); + INSERT INTO t0(c0) VALUES (3175546974276630385); + SELECT 3175546974276630385 < c0 FROM t0; +---- +stmt 0 ok +stmt 29 ok +stmt 66 err 1 -1 119 no such table: t0 +stmt 119 err 1 -1 164 no such table: t0 +==== 601 + + SELECT 1 FROM t0 WHERE 3175546974276630385 < c0; +---- +stmt 0 err 1 -1 53 no such table: t0 diff --git a/parser/testdata/selectG.metadata.json b/parser/testdata/affinity3.metadata.json similarity index 100% rename from parser/testdata/selectG.metadata.json rename to parser/testdata/affinity3.metadata.json diff --git a/parser/testdata/affinity3.test b/parser/testdata/affinity3.test new file mode 100644 index 0000000..016b390 --- /dev/null +++ b/parser/testdata/affinity3.test @@ -0,0 +1,147 @@ +==== affinity3-100 + + CREATE TABLE customer (id INT PRIMARY KEY); + CREATE TABLE apr (id INT PRIMARY KEY, apr REAL); + + CREATE VIEW v1 AS + SELECT c.id, i.apr + FROM customer c + LEFT JOIN apr i ON i.id=c.id; + + CREATE VIEW v1rj AS + SELECT c.id, i.apr + FROM apr i + RIGHT JOIN customer c ON i.id=c.id; + + CREATE VIEW v2 AS + SELECT c.id, v1.apr + FROM customer c + LEFT JOIN v1 ON v1.id=c.id; + + CREATE VIEW v2rj AS + SELECT c.id, v1.apr + FROM v1 RIGHT JOIN customer c ON v1.id=c.id; + + CREATE VIEW v2rjrj AS + SELECT c.id, v1rj.apr + FROM v1rj RIGHT JOIN customer c ON v1rj.id=c.id; + + INSERT INTO customer (id) VALUES (1); + INSERT INTO apr (id, apr) VALUES (1, 12); + INSERT INTO customer (id) VALUES (2); + INSERT INTO apr (id, apr) VALUES (2, 12.01); +---- +stmt 0 ok +stmt 46 ok +stmt 97 ok +stmt 191 ok +stmt 288 ok +stmt 381 ok +stmt 475 ok +stmt 577 err 1 -1 620 no such table: customer +stmt 620 err 1 -1 664 no such table: apr +stmt 664 err 1 -1 704 no such table: customer +stmt 704 err 1 -1 751 no such table: apr +==== affinity3-110 + + PRAGMA automatic_index=ON; + SELECT id, (apr / 100), typeof(apr) apr_type FROM v1; +---- +stmt 0 ok +stmt 29 err 1 -1 86 no such table: v1 +==== affinity3-111 + + PRAGMA automatic_index=ON; + SELECT id, (apr / 100), typeof(apr) apr_type FROM v1rj; +---- +stmt 0 ok +stmt 29 err 1 -1 88 no such table: v1rj +==== affinity3-120 + + SELECT id, (apr / 100), typeof(apr) apr_type FROM v2; +---- +stmt 0 err 1 -1 57 no such table: v2 +==== affinity3-121 + + SELECT id, (apr / 100), typeof(apr) apr_type FROM v2rj; +---- +stmt 0 err 1 -1 59 no such table: v2rj +==== affinity3-122 + + SELECT id, (apr / 100), typeof(apr) apr_type FROM v2rjrj; +---- +stmt 0 err 1 -1 61 no such table: v2rjrj +==== affinity3-130 + + PRAGMA automatic_index=OFF; + SELECT id, (apr / 100), typeof(apr) apr_type FROM v1; +---- +stmt 0 ok +stmt 30 err 1 -1 87 no such table: v1 +==== affinity3-131 + + SELECT id, (apr / 100), typeof(apr) apr_type FROM v1rj; +---- +stmt 0 err 1 -1 59 no such table: v1rj +==== affinity3-140 + + SELECT id, (apr / 100), typeof(apr) apr_type FROM v2; +---- +stmt 0 err 1 -1 57 no such table: v2 +==== affinity3-141 + + SELECT id, (apr / 100), typeof(apr) apr_type FROM v2rj; +---- +stmt 0 err 1 -1 59 no such table: v2rj +==== affinity3-142 + + SELECT id, (apr / 100), typeof(apr) apr_type FROM v2rjrj; +---- +stmt 0 err 1 -1 61 no such table: v2rjrj +==== affinity3-200 + + CREATE TABLE map_integer (id INT, name); + INSERT INTO map_integer VALUES(1,'a'); + CREATE TABLE map_text (id TEXT, name); + INSERT INTO map_text VALUES('4','e'); + CREATE TABLE data (id TEXT, name); + INSERT INTO data VALUES(1,'abc'); + INSERT INTO data VALUES('4','xyz'); + CREATE VIEW idmap as + SELECT * FROM map_integer + UNION SELECT * FROM map_text; + CREATE TABLE mzed AS SELECT * FROM idmap; +---- +stmt 0 ok +stmt 43 err 1 -1 84 no such table: map_integer +stmt 84 ok +stmt 125 err 1 -1 165 no such table: map_text +stmt 165 ok +stmt 202 err 1 -1 238 no such table: data +stmt 238 err 1 -1 276 no such table: data +stmt 276 ok +stmt 367 err 1 -1 411 no such table: idmap +==== affinity3-210 + + PRAGMA automatic_index=ON; + SELECT * FROM data JOIN idmap USING(id); +---- +stmt 0 ok +stmt 29 err 1 -1 72 no such table: data +==== affinity3-220 + + SELECT * FROM data JOIN mzed USING(id); +---- +stmt 0 err 1 -1 42 no such table: data +==== affinity3-250 + + PRAGMA automatic_index=OFF; + SELECT * FROM data JOIN idmap USING(id); +---- +stmt 0 ok +stmt 30 err 1 -1 73 no such table: data +==== affinity3-260 + + SELECT * FROM data JOIN mzed USING(id); +---- +stmt 0 err 1 -1 42 no such table: data diff --git a/parser/testdata/aggerror.metadata.json b/parser/testdata/aggerror.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/aggerror.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/aggerror.test b/parser/testdata/aggerror.test new file mode 100644 index 0000000..82f96c4 --- /dev/null +++ b/parser/testdata/aggerror.test @@ -0,0 +1,17 @@ +==== aggerror-1.2 + + INSERT INTO t1 VALUES(40); + SELECT x_count(*) FROM t1; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 62 no such table: t1 +==== aggerror-1.3 + + SELECT x_count(a) FROM t1; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== aggerror-1.5 + + SELECT x_count(*) FROM t1 +---- +stmt 0 err 1 -1 31 no such table: t1 diff --git a/parser/testdata/aggfault.metadata.json b/parser/testdata/aggfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/aggfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/aggfault.test b/parser/testdata/aggfault.test new file mode 100644 index 0000000..c4a99ad --- /dev/null +++ b/parser/testdata/aggfault.test @@ -0,0 +1,7 @@ +==== 1 + + CREATE TABLE t1(x); + CREATE INDEX t1x ON t1(x, x=0); +---- +stmt 0 ok +stmt 22 err 1 -1 56 no such table: main.t1 diff --git a/parser/testdata/aggnested.metadata.json b/parser/testdata/aggnested.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/aggnested.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/aggnested.test b/parser/testdata/aggnested.test new file mode 100644 index 0000000..64b3a54 --- /dev/null +++ b/parser/testdata/aggnested.test @@ -0,0 +1,280 @@ +==== aggnested-4.1 + + DROP TABLE IF EXISTS aa; + DROP TABLE IF EXISTS bb; + CREATE TABLE aa(x INT); INSERT INTO aa(x) VALUES(123); + CREATE TABLE bb(y INT); INSERT INTO bb(y) VALUES(456); + SELECT (SELECT sum(x+(SELECT y)) FROM bb) FROM aa; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 80 err 1 -1 112 no such table: aa +stmt 112 ok +stmt 138 err 1 -1 170 no such table: bb +stmt 170 err 1 -1 223 no such table: aa +==== aggnested-4.2 + + SELECT (SELECT sum(x+y) FROM bb) FROM aa; +---- +stmt 0 err 1 -1 44 no such table: aa +==== aggnested-4.3 + + DROP TABLE IF EXISTS tx; + DROP TABLE IF EXISTS ty; + CREATE TABLE tx(x INT); + INSERT INTO tx VALUES(1),(2),(3),(4),(5); + CREATE TABLE ty(y INT); + INSERT INTO ty VALUES(91),(92),(93); + SELECT min((SELECT count(y) FROM ty)) FROM tx; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 80 err 1 -1 124 no such table: tx +stmt 124 ok +stmt 150 err 1 -1 189 no such table: ty +stmt 189 err 1 -1 238 no such table: tx +==== aggnested-4.4 + + SELECT max((SELECT a FROM (SELECT count(*) AS a FROM ty) AS s)) FROM tx; +---- +stmt 0 err 1 -1 75 no such table: tx +==== 5.0 + + CREATE TABLE x1(a, b); + INSERT INTO x1 VALUES(1, 2); + CREATE TABLE x2(x); + INSERT INTO x2 VALUES(NULL), (NULL), (NULL); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: x1 +stmt 56 ok +stmt 78 err 1 -1 125 no such table: x2 +==== 5.1 + + SELECT ( SELECT total( (SELECT b FROM x1) ) ) FROM x2; +---- +stmt 0 err 1 -1 57 no such table: x2 +==== 5.2 + + SELECT ( SELECT total( (SELECT 2 FROM x1) ) ) FROM x2; +---- +stmt 0 err 1 -1 57 no such table: x2 +==== 5.3 + + CREATE TABLE t1(a); + CREATE TABLE t2(b); +---- +stmt 0 ok +stmt 22 ok +==== 5.4 + + SELECT( + SELECT max(b) LIMIT ( + SELECT total( (SELECT a FROM t1) ) + ) + ) + FROM t2; +---- +stmt 0 err 1 -1 98 no such table: t2 +==== 5.5 + + CREATE TABLE a(b); + WITH c AS(SELECT a) + SELECT(SELECT(SELECT string_agg(b, b) + LIMIT(SELECT 0.100000 * + AVG(DISTINCT(SELECT 0 FROM a ORDER BY b, b, b)))) + FROM a GROUP BY b, + b, b) FROM a EXCEPT SELECT b FROM a ORDER BY b, + b, b; +---- +stmt 0 ok +stmt 21 err 1 -1 274 no such table: a +==== 6.0 + + CREATE TABLE t1(a); + CREATE TABLE t2(b); + + INSERT INTO t1 VALUES('x'); + INSERT INTO t2 VALUES(1); +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 103 no such table: t2 +==== 6.1.1 + + SELECT ( + SELECT t2.b FROM (SELECT t2.b AS c FROM t1) GROUP BY 1 HAVING t2.b + ) + FROM t2 GROUP BY 'constant_string'; +---- +stmt 0 err 1 -1 125 no such table: t2 +==== 6.1.2 + + SELECT ( + SELECT c FROM (SELECT t2.b AS c FROM t1) GROUP BY c HAVING t2.b + ) + FROM t2 GROUP BY 'constant_string'; +---- +stmt 0 err 1 -1 122 no such table: t2 +==== 6.2.0 + + UPDATE t2 SET b=0 +---- +stmt 0 err 1 -1 21 no such table: t2 +==== 6.2.1 + + SELECT ( + SELECT t2.b FROM (SELECT t2.b AS c FROM t1) GROUP BY 1 HAVING t2.b + ) + FROM t2 GROUP BY 'constant_string'; +---- +stmt 0 err 1 -1 125 no such table: t2 +==== 6.2.2 + + SELECT ( + SELECT c FROM (SELECT t2.b AS c FROM t1) GROUP BY c HAVING t2.b + ) + FROM t2 GROUP BY 'constant_string'; +---- +stmt 0 err 1 -1 122 no such table: t2 +==== 7.0 + + CREATE TABLE invoice ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + amount DOUBLE PRECISION DEFAULT NULL, + name VARCHAR(100) DEFAULT NULL + ); + + INSERT INTO invoice (amount, name) VALUES + (4.0, 'Michael'), (15.0, 'Bara'), (4.0, 'Michael'), (6.0, 'John'); +---- +stmt 0 ok +stmt 164 err 1 -1 283 no such table: invoice +==== 7.1 + + SELECT sum(amount), name + from invoice + group by name + having (select v > 6 from (select sum(amount) v) t) +---- +stmt 0 err 1 -1 115 no such table: invoice +==== 7.2 + + SELECT (select 1 from (select sum(amount))) FROM invoice +---- +stmt 0 err 1 -1 60 no such table: invoice +==== 8.0 + + CREATE TABLE t1(x INT); + INSERT INTO t1 VALUES(100); + INSERT INTO t1 VALUES(20); + INSERT INTO t1 VALUES(3); + SELECT (SELECT y FROM (SELECT sum(x) AS y) AS t2 ) FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 175 no such table: t1 +==== 8.1 + + SELECT ( + SELECT y FROM ( + SELECT z AS y FROM (SELECT sum(x) AS z) AS t2 + ) + ) FROM t1; +---- +stmt 0 err 1 -1 104 no such table: t1 +==== 8.2 + + SELECT ( + SELECT a FROM ( + SELECT y AS a FROM ( + SELECT z AS y FROM (SELECT sum(x) AS z) AS t2 + ) + ) + ) FROM t1; +---- +stmt 0 err 1 -1 141 no such table: t1 +==== 9.1 + + WITH out(i, j, k) AS ( + VALUES(1234, 5678, 9012) + ) + SELECT ( + SELECT ( + SELECT min(abc) = ( SELECT ( SELECT 1234 fROM (SELECT abc) ) ) + FROM ( + SELECT sum( out.i ) + ( SELECT sum( out.i ) ) AS abc FROM (SELECT out.j) + ) + ) + ) FROM out; +---- +stmt 0 ok +==== 9.2 + + CREATE TABLE t1(a); + CREATE TABLE t2(b); + INSERT INTO t1 VALUES(1), (2), (3); + INSERT INTO t2 VALUES(4), (5), (6); + + SELECT ( + SELECT min(y) + (SELECT x) FROM ( + SELECT sum(a) AS x, b AS y FROM t2 + ) + ) + FROM t1; +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 120 no such table: t2 +stmt 120 err 1 -1 233 no such table: t1 +==== 9.3 + + SELECT ( + SELECT min(y) + (SELECT (SELECT x)) FROM ( + SELECT sum(a) AS x, b AS y FROM t2 + ) + ) + FROM t1; +---- +stmt 0 err 1 -1 121 no such table: t1 +==== 9.4 + + SELECT ( + SELECT (SELECT x) FROM ( + SELECT sum(a) AS x, b AS y FROM t2 + ) GROUP BY y + ) + FROM t1; +---- +stmt 0 err 1 -1 117 no such table: t1 +==== 9.5 + + SELECT ( + SELECT (SELECT (SELECT x)) FROM ( + SELECT sum(a) AS x, b AS y FROM t2 + ) GROUP BY y + ) + FROM t1; +---- +stmt 0 err 1 -1 126 no such table: t1 +==== 10.1 + + DROP TABLE IF EXISTS t0; + DROP TABLE IF EXISTS t1; + CREATE TABLE t0(c1, c2); INSERT INTO t0 VALUES(1,2); + CREATE TABLE t1(c3, c4); INSERT INTO t1 VALUES(3,4); + SELECT * FROM t0 WHERE EXISTS (SELECT 1 FROM t1 GROUP BY c3 HAVING ( SELECT count(*) FROM (SELECT 1 UNION ALL SELECT sum(DISTINCT c1) ) ) ) BETWEEN 1 AND 1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 err 1 -1 110 no such table: t0 +stmt 110 ok +stmt 137 err 1 -1 166 no such table: t1 +stmt 166 err 1 -1 325 no such table: t0 diff --git a/parser/testdata/aggorderby.metadata.json b/parser/testdata/aggorderby.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/aggorderby.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/aggorderby.test b/parser/testdata/aggorderby.test new file mode 100644 index 0000000..6a16775 --- /dev/null +++ b/parser/testdata/aggorderby.test @@ -0,0 +1,150 @@ +==== aggorderby-1.1 + + CREATE TABLE t1(a TEXT,b INT,c INT,d INT); + WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<9) + INSERT INTO t1(a,b,c,d) SELECT printf('%d',(x*7)%10),1,x,10-x FROM c; + INSERT INTO t1(a,b,c,d) SELECT a, 2, c, 10-d FROM t1; + CREATE INDEX t1b ON t1(b); +---- +stmt 0 ok +stmt 45 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 248 no such table: t1 +stmt 248 err 1 -1 277 no such table: main.t1 +==== aggorderby-1.2 + + SELECT b, group_concat(a ORDER BY max(d)) FROM t1 GROUP BY b; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== aggorderby-1.3 + + SELECT abs(a ORDER BY max(d)) FROM t1; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== aggorderby-2.0 + + SELECT group_concat(a ORDER BY a) FROM t1 WHERE b=1; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== aggorderby-2.1 + + SELECT group_concat(a ORDER BY c) FROM t1 WHERE b=1; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== aggorderby-2.2 + + SELECT group_concat(a ORDER BY b, d) FROM t1; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== aggorderby-2.3 + + SELECT string_agg(a, ',' ORDER BY b DESC, d) FROM t1; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== aggorderby-2.4 + + SELECT b, group_concat(a ORDER BY d) FROM t1 GROUP BY b ORDER BY b; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== aggorderby-3.0 + + SELECT group_concat(DISTINCT a ORDER BY a) FROM t1; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== aggorderby-3.1 + + SELECT group_concat(DISTINCT a ORDER BY c) FROM t1; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== aggorderby-4.0 + + SELECT count(ORDER BY a) FROM t1; +---- +stmt 0 err 1 -1 36 no such table: t1 +==== aggorderby-4.1 + + SELECT c, max(a ORDER BY a) FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== aggorderby-5.0 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t3; + CREATE TABLE t1(a TEXT); INSERT INTO t1 VALUES('aaa'),('bbb'); + CREATE TABLE t3(d TEXT); INSERT INTO t3 VALUES('/'),('-'); + SELECT (SELECT string_agg(a,d) FROM t3) FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 err 1 -1 120 no such table: t1 +stmt 120 ok +stmt 147 err 1 -1 182 no such table: t3 +stmt 182 err 1 -1 233 no such table: t1 +==== aggorderby-5.1 + + SELECT (SELECT group_concat(a,d ORDER BY d) FROM t3) FROM t1; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== aggorderby-5.2 + + SELECT (SELECT string_agg(a,d ORDER BY d DESC) FROM t3) FROM t1; +---- +stmt 0 err 1 -1 67 no such table: t1 +==== aggorderby-5.3 + + SELECT (SELECT string_agg(a,'#' ORDER BY d) FROM t3) FROM t1; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== aggorderby-6.0 + + WITH c(x) AS (VALUES('abc'),('DEF'),('xyz'),('ABC'),('XYZ')) + SELECT string_agg(x,',' ORDER BY x COLLATE nocase), + string_agg(x,',' ORDER BY x) FROM c; +---- +stmt 0 ok +==== aggorderby-6.1 + + WITH c(x,y) AS (VALUES(1,'a'),(2,'B'),(3,'c'),(4,'D')) + SELECT group_concat(x ORDER BY y COLLATE nocase), + group_concat(x ORDER BY y COLLATE binary) FROM c; +---- +stmt 0 ok +==== aggorderby-7.0 + + WITH c(x) AS (VALUES(1),(NULL),(2.5),(NULL),('three')) + SELECT json_group_array(x ORDER BY x NULLS FIRST), + json_group_array(x ORDER BY x NULLS LAST) FROM c; +---- +stmt 0 ok +==== aggorderby-7.1 + + WITH c(x,y) AS (VALUES(1,9),(2,null),(3,5),(4,null),(5,1)) + SELECT json_group_array(x ORDER BY y NULLS FIRST, x), + json_group_array(x ORDER BY y NULLS LAST, x) FROM c; +---- +stmt 0 ok +==== aggorderby-8.0 + + WITH c(x,y,z) AS (VALUES('a',4,5),('b',3,6),('c',2,7),('c',1,8)) + SELECT group_concat(DISTINCT x ORDER BY y, z) FROM c; +---- +stmt 0 ok +==== aggorderby-8.1 + + WITH c(x,y,z) AS (VALUES('a',4,5),('b',3,6),('b',2,7),('c',1,8)) + SELECT group_concat(DISTINCT x ORDER BY y, z) FROM c; +---- +stmt 0 ok +==== aggorderby-8.2 + + WITH c(x,y) AS (VALUES(1,1),(2,2),(3,3),(3,4),(3,5),(3,6)) + SELECT sum(DISTINCT x ORDER BY y) FROM c; +---- +stmt 0 ok +==== aggorderby-10.0 + + CREATE TABLE t1(w, x); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 diff --git a/parser/testdata/alterauth.metadata.json b/parser/testdata/alterauth.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/alterauth.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/alterauth.test b/parser/testdata/alterauth.test new file mode 100644 index 0000000..c7094e5 --- /dev/null +++ b/parser/testdata/alterauth.test @@ -0,0 +1,16 @@ +==== 1.0 + CREATE TABLE t1(a, b, c); +---- +stmt 0 ok +==== 2.1 + ALTER TABLE t2 RENAME TO t3 +---- +stmt 0 err 1 -1 29 no such table: t2 +==== 2.2 + ALTER TABLE t2 RENAME d TO ddd +---- +stmt 0 err 1 -1 32 no such table: t2 +==== 2.3 + ALTER TABLE t2 ADD COLUMN e +---- +stmt 0 err 1 -1 29 no such table: t2 diff --git a/parser/testdata/alterauth2.metadata.json b/parser/testdata/alterauth2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/alterauth2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/alterauth2.test b/parser/testdata/alterauth2.test new file mode 100644 index 0000000..e3499f6 --- /dev/null +++ b/parser/testdata/alterauth2.test @@ -0,0 +1,16 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + DELETE FROM t1 WHERE a=40 AND rid>0 ) + ); +---- +stmt 0 ok +==== 6.1.dup1 + + ALTER TABLE "blob" RENAME COLUMN "rid" TO "a1"; +---- +stmt 0 err 1 -1 50 no such table: blob +==== 6.3 + + SELECT "where" FROM blob; +---- +stmt 0 err 1 -1 28 no such table: blob +==== 7.0 + + CREATE TABLE c(x); + INSERT INTO c VALUES(0); + CREATE TABLE t6("col a", "col b", "col c"); + CREATE TRIGGER zzz AFTER UPDATE OF "col a", "col c" ON t6 BEGIN + UPDATE c SET x=x+1; + END; +---- +stmt 0 ok +stmt 21 err 1 -1 48 no such table: c +stmt 48 ok +stmt 94 err 1 -1 160 no such table: main.t6 +==== 7.1.1 + + INSERT INTO t6 VALUES(0, 0, 0); + UPDATE t6 SET "col c" = 1; + SELECT * FROM c; +---- +stmt 0 err 1 -1 34 no such table: t6 +stmt 34 err 1 -1 63 no such table: t6 +stmt 63 err 1 -1 82 no such table: c +==== 7.1.2 + + ALTER TABLE t6 RENAME "col c" TO "col 3"; +---- +stmt 0 err 1 -1 44 no such table: t6 +==== 7.1.3 + + UPDATE t6 SET "col 3" = 0; + SELECT * FROM c; +---- +stmt 0 err 1 -1 29 no such table: t6 +stmt 29 err 1 -1 48 no such table: c +==== 8.0 + + CREATE TABLE a1(x INTEGER, y TEXT, z BLOB, PRIMARY KEY(x)); + CREATE TABLE a2(a, b, c); + CREATE VIEW v1 AS SELECT x, y, z FROM a1; +---- +stmt 0 ok +stmt 62 ok +stmt 90 ok +==== 8.1 + + ALTER TABLE a1 RENAME y TO yyy; + SELECT sql FROM sqlite_master WHERE type='view'; +---- +stmt 0 err 1 -1 34 no such table: a1 +stmt 34 ok +==== 8.2.1 + + DROP VIEW v1; + CREATE VIEW v2 AS SELECT x, x+x, a, a+a FROM a1, a2; +---- +stmt 0 err 1 -1 16 no such view: v1 +stmt 16 ok +==== 8.2.2 + + ALTER TABLE a1 RENAME x TO xxx; +---- +stmt 0 err 1 -1 34 no such table: a1 +==== 8.2.3 + + SELECT sql FROM sqlite_master WHERE type='view'; +---- +stmt 0 ok +==== 8.3.1 + + DROP TABLE a2; + DROP VIEW v2; + CREATE TABLE a2(a INTEGER PRIMARY KEY, b, c); + CREATE VIEW v2 AS SELECT xxx, xxx+xxx, a, a+a FROM a1, a2; +---- +stmt 0 err 1 -1 17 no such table: a2 +stmt 17 err 1 -1 33 no such view: v2 +stmt 33 ok +stmt 81 ok +==== 8.3.2 + + ALTER TABLE a1 RENAME xxx TO x; +---- +stmt 0 err 1 -1 34 no such table: a1 +==== 8.3.3 + + SELECT sql FROM sqlite_master WHERE type='view'; +---- +stmt 0 ok +==== 8.4.0 + + CREATE TABLE b1(a, b, c); + CREATE TABLE b2(x, y, z); +---- +stmt 0 ok +stmt 28 ok +==== 8.4.1 + + CREATE VIEW vvv AS SELECT c+c || coalesce(c, c) FROM b1, b2 WHERE x=c GROUP BY c HAVING c>0; + ALTER TABLE b1 RENAME c TO "a;b"; + SELECT sql FROM sqlite_master WHERE name='vvv'; +---- +stmt 0 ok +stmt 95 err 1 -1 131 no such table: b1 +stmt 131 ok +==== 8.4.2 + + CREATE VIEW www AS SELECT b FROM b1 UNION ALL SELECT y FROM b2; + ALTER TABLE b1 RENAME b TO bbb; + SELECT sql FROM sqlite_master WHERE name='www'; +---- +stmt 0 ok +stmt 66 err 1 -1 100 no such table: b1 +stmt 100 ok +==== 8.4.3 + + CREATE VIEW xxx AS SELECT a FROM b1 UNION SELECT x FROM b2 ORDER BY 1 COLLATE nocase; +---- +stmt 0 ok +==== 8.4.4 + + ALTER TABLE b2 RENAME x TO hello; + SELECT sql FROM sqlite_master WHERE name='xxx'; +---- +stmt 0 err 1 -1 36 no such table: b2 +stmt 36 ok +==== 8.4.5 + + CREATE VIEW zzz AS SELECT george, ringo FROM b1; + ALTER TABLE b1 RENAME a TO aaa; +---- +stmt 0 ok +stmt 51 err 1 -1 85 no such table: b1 +==== 8.5 + + DROP VIEW zzz; + CREATE TABLE t5(a TEXT, b INT); + INSERT INTO t5(a,b) VALUES('aaa',7),('bbb',3),('ccc',4); + CREATE VIEW vt5(x) AS SELECT group_concat(a ORDER BY b) FROM t5; + SELECT x FROM vt5; +---- +stmt 0 err 1 -1 17 no such view: zzz +stmt 17 ok +stmt 51 err 1 -1 110 no such table: t5 +stmt 110 ok +stmt 177 err 1 -1 198 no such table: vt5 +==== 8.5.1 + + ALTER TABLE t5 RENAME COLUMN b TO bbb; + SELECT sql FROM sqlite_schema WHERE name='vt5'; +---- +stmt 0 err 1 -1 41 no such table: t5 +stmt 41 ok +==== 8.5.2 + + SELECT x FROM vt5; +---- +stmt 0 err 1 -1 21 no such table: vt5 +==== altercol-generated.dup4 + + SELECT sql FROM sqlite_master WHERE sql!='' ORDER BY 1 +---- +stmt 0 ok +==== altercol-generated.dup5 + + SELECT sql FROM sqlite_master ORDER BY 1 +---- +stmt 0 ok +==== 11.0 + + CREATE TABLE x1(a, b, c); + CREATE VIRTUAL TABLE e1 USING echo(x1); +---- +stmt 0 ok +stmt 30 ok +==== 11.1 + + ALTER TABLE x1 RENAME b TO bbb; + SELECT sql FROM sqlite_master; +---- +stmt 0 err 1 -1 36 no such table: x1 +stmt 36 ok +==== 11.2 + + CREATE VIEW v1 AS SELECT e1.*, x1.c FROM e1, x1; +---- +stmt 0 ok +==== 11.3 + + ALTER TABLE x1 RENAME c TO ccc; +---- +stmt 0 err 1 -1 36 no such table: x1 +==== 12.1.1 + + CREATE TABLE t1(a, b); + CREATE INDEX t1a ON t1(a); + INSERT INTO t1 VALUES(1, 1), (2, 2), (3, 4); + ANALYZE; +---- +stmt 0 ok +stmt 25 err 1 -1 54 no such table: main.t1 +stmt 54 err 1 -1 101 no such table: t1 +stmt 101 ok +==== 12.1.2 + + ALTER TABLE sqlite_stat1 RENAME idx TO theindex; +---- +stmt 0 err 1 -1 51 no such table: sqlite_stat1 +==== 12.1.3 + + SELECT sql FROM sqlite_master WHERE tbl_name = 'sqlite_stat1' +---- +stmt 0 ok +==== 12.2.1 + + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE VIEW v2(c, d) AS SELECT * FROM t1; +---- +stmt 0 ok +stmt 38 ok +==== 12.2.2 + + ALTER TABLE v1 RENAME a TO z; +---- +stmt 0 err 1 -1 32 no such table: v1 +==== 12.2.3 + + ALTER TABLE v2 RENAME c TO y; +---- +stmt 0 err 1 -1 32 no such table: v2 +==== 12.3.1 + + CREATE VIRTUAL TABLE ft USING fts5(a, b, c); +---- +stmt 0 ok +==== 12.3.2 + + ALTER TABLE ft RENAME a TO z; +---- +stmt 0 err 1 -1 34 no such table: ft +==== 12.4.1 + + CREATE TABLE t2(x, y, z); +---- +stmt 0 ok +==== 12.4.2 + + ALTER TABLE t2 RENAME COLUMN a TO b; +---- +stmt 0 err 1 -1 39 no such table: t2 +==== 12.5.1 + + ALTER TABLE t3 RENAME COLUMN a TO b; +---- +stmt 0 err 1 -1 39 no such table: t3 +==== 13.1.1 + + CREATE TABLE x1(i INTEGER, t TEXT UNIQUE); + CREATE TRIGGER tr1 AFTER INSERT ON x1 BEGIN + SELECT * FROM nosuchtable; + END; +---- +stmt 0 ok +stmt 45 err 1 -1 91 no such table: main.x1 +==== 13.1.2 + + ALTER TABLE x1 RENAME COLUMN t TO ttt; +---- +stmt 0 err 1 -1 41 no such table: x1 +==== 13.1.3 + + DROP TRIGGER tr1; + CREATE INDEX x1i ON x1(i); + SELECT sql FROM sqlite_master WHERE name='x1i'; +---- +stmt 0 err 1 -1 20 no such trigger: tr1 +stmt 20 err 1 -1 49 no such table: main.x1 +stmt 49 ok +==== 13.1.4 + + PRAGMA writable_schema = ON; + UPDATE sqlite_master SET sql = 'CREATE INDEX x1i ON x1(j)' WHERE name='x1i'; + PRAGMA writable_schema = OFF; +---- +stmt 0 ok +stmt 31 ok +stmt 110 ok +==== 13.1.5 + + ALTER TABLE x1 RENAME COLUMN t TO ttt; +---- +stmt 0 err 1 -1 41 no such table: x1 +==== 13.1.6 + + PRAGMA writable_schema = ON; + UPDATE sqlite_master SET sql = '' WHERE name='x1i'; + PRAGMA writable_schema = OFF; +---- +stmt 0 ok +stmt 31 ok +stmt 85 ok +==== 13.1.7 + + ALTER TABLE x1 RENAME COLUMN t TO ttt; +---- +stmt 0 err 1 -1 41 no such table: x1 +==== 13.1.8 + + PRAGMA writable_schema = ON; + DELETE FROM sqlite_master WHERE name = 'x1i'; + PRAGMA writable_schema = OFF; +---- +stmt 0 ok +stmt 31 ok +stmt 79 ok +==== 13.2.0 + + CREATE TABLE data(x UNIQUE, y, z); +---- +stmt 0 ok +==== altercol-generated.dup6 + + ALTER TABLE x1 RENAME COLUMN t TO ttt; +---- +stmt 0 err 1 -1 43 no such table: x1 +==== 14.1 + + CREATE TABLE ddd(sql, type, object, db, tbl, icol, znew, bquote); + INSERT INTO ddd VALUES( + 'CREATE TABLE x1(i INTEGER, t TEXT)', + 'table', 'x1', 'main', 'x1', -1, 'zzz', 0 + ), ( + 'CREATE TABLE x1(i INTEGER, t TEXT)', + 'table', 'x1', 'main', 'x1', 2, 'zzz', 0 + ), ( + 'CREATE TABLE x1(i INTEGER, t TEXT)', + 'table', 'x1', 'main', 'notable', 0, 'zzz', 0 + ), ( + 'CREATE TABLE x1(i INTEGER, t TEXT)', + 'table', 'x1', 'main', 'ddd', -1, 'zzz', 0 + ); +---- +stmt 0 ok +stmt 68 err 1 -1 492 no such table: ddd +==== 14.2 + + SELECT + sqlite_rename_column(sql, type, object, db, tbl, icol, znew, bquote, 0) + FROM ddd; +---- +stmt 0 err 1 -1 96 no such table: ddd +==== 14.3 + + SELECT sqlite_rename_column(0,0,0,0,0,0,0,0,0); +---- +stmt 0 err 1 10 50 no such function: sqlite_rename_column +==== 15.0 + + CREATE TABLE xxx(a, b, c); + SELECT a AS d FROM xxx WHERE d=0; +---- +stmt 0 ok +stmt 29 err 1 -1 65 no such table: xxx +==== 15.1 + + CREATE VIEW vvv AS SELECT a AS d FROM xxx WHERE d=0; + ALTER TABLE xxx RENAME a TO xyz; +---- +stmt 0 ok +stmt 55 err 1 -1 90 no such table: xxx +==== 15.2 + + SELECT sql FROM sqlite_master WHERE type='view'; +---- +stmt 0 ok +==== 16.1.0 + + CREATE TABLE t1(a,b,c); + CREATE TABLE t2(d,e,f); + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t2 VALUES(4,5,6); + CREATE VIEW v4 AS SELECT a, d FROM t1, t2; + SELECT * FROM v4; +---- +stmt 0 ok +stmt 26 ok +stmt 52 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 116 no such table: t2 +stmt 116 ok +stmt 161 err 1 -1 181 no such table: v4 +==== 16.1.1 + + ALTER TABLE t2 RENAME d TO a; +---- +stmt 0 err 1 -1 32 no such table: t2 +==== 16.1.2 + + SELECT * FROM v4; +---- +stmt 0 err 1 -1 20 no such table: v4 +==== 16.1.3 + + CREATE UNIQUE INDEX t2d ON t2(d); + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(new.a, new.b, new.c) + ON CONFLICT(d) DO UPDATE SET f = excluded.f; + END; +---- +stmt 0 err 1 -1 36 no such table: main.t2 +stmt 36 err 1 -1 82 no such table: main.t1 +==== 16.1.4 + + INSERT INTO t1 VALUES(4, 8, 456); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 56 no such table: t2 +==== 16.1.5 + + ALTER TABLE t2 RENAME COLUMN f TO "big f"; + INSERT INTO t1 VALUES(4, 0, 20456); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 45 no such table: t2 +stmt 45 err 1 -1 83 no such table: t1 +stmt 83 err 1 -1 103 no such table: t2 +==== 16.1.6 + + ALTER TABLE t1 RENAME COLUMN c TO "big c"; + INSERT INTO t1 VALUES(4, 0, 0); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 45 no such table: t1 +stmt 45 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 99 no such table: t2 +==== 16.2.1 + + CREATE VIEW temp.v5 AS SELECT "big c" FROM t1; + SELECT * FROM v5; +---- +stmt 0 ok +stmt 49 err 1 -1 70 no such table: v5 +==== 16.2.2 + + ALTER TABLE t1 RENAME COLUMN "big c" TO reallybigc; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 16.2.3 + + SELECT * FROM v5; +---- +stmt 0 err 1 -1 20 no such table: v5 +==== 17.0 + + CREATE TABLE u7(x, y, z); + CREATE TRIGGER u7t AFTER INSERT ON u7 BEGIN + INSERT INTO u8 VALUES(new.x, new.y, new.z); + END; +---- +stmt 0 ok +stmt 28 err 1 -1 74 no such table: main.u7 +==== 17.1 + + ALTER TABLE u7 RENAME x TO xxx; +---- +stmt 0 err 1 -1 34 no such table: u7 +==== 17.2 + + CREATE TEMP TABLE uu7(x, y, z); + CREATE TRIGGER uu7t AFTER INSERT ON uu7 BEGIN + INSERT INTO u8 VALUES(new.x, new.y, new.z); + END; +---- +stmt 0 ok +stmt 34 err 1 -1 82 no such table: main.uu7 +==== 17.3 + + ALTER TABLE uu7 RENAME x TO xxx; +---- +stmt 0 err 1 -1 35 no such table: uu7 +==== 18.0 + + ATTACH 'test.db2' AS aux; + CREATE TABLE t1(a); + CREATE TABLE aux.log(v); + CREATE TEMP TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO log VALUES(new.a); + END; + INSERT INTO t1 VALUES(111); + SELECT v FROM log; +---- +stmt 0 ok +stmt 28 ok +stmt 50 err 1 66 74 unknown database aux +stmt 77 err 1 -1 128 no such table: t1 +stmt 170 err 1 -1 200 no such table: t1 +stmt 200 err 1 -1 221 no such table: log +==== 18.1 + + ALTER TABLE t1 RENAME a TO b; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 19.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + CREATE VIEW v2(e) AS SELECT coalesce(t2.c,t1.a) FROM t1, t2 WHERE t1.b=t2.d; +---- +stmt 0 ok +stmt 25 ok +stmt 50 ok +==== 19.1 + + ALTER TABLE t1 RENAME a TO f; + SELECT sql FROM sqlite_master WHERE name = 'v2'; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 ok +==== 20.100 + + CREATE TABLE t1(aaa,b,c,UNIQUE(aaA),PRIMARY KEY(aAa),UNIQUE(aAA)); + ALTER TABLE t1 RENAME aaa TO bbb; + SELECT sql FROM sqlite_master WHERE name='t1'; +---- +stmt 0 ok +stmt 69 err 1 -1 105 no such table: t1 +stmt 105 ok +==== 20.105 + + DROP TABLE t1; + CREATE TABLE t1(aaa,b,c,UNIQUE(aaA),PRIMARY KEY(aAa),UNIQUE(aAA))WITHOUT ROWID; + ALTER TABLE t1 RENAME aaa TO bbb; + SELECT sql FROM sqlite_master WHERE name='t1'; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 99 err 1 -1 135 no such table: t1 +stmt 135 ok +==== 20.110 + + DROP TABLE t1; + CREATE TABLE t1(aa UNIQUE,bb UNIQUE,cc UNIQUE,UNIQUE(aA),PRIMARY KEY(bB),UNIQUE(cC)); + ALTER TABLE t1 RENAME aa TO xx; + ALTER TABLE t1 RENAME bb TO yy; + ALTER TABLE t1 RENAME cc TO zz; + SELECT sql FROM sqlite_master WHERE name='t1'; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 105 err 1 -1 139 no such table: t1 +stmt 139 err 1 -1 173 no such table: t1 +stmt 173 err 1 -1 207 no such table: t1 +stmt 207 ok +==== 21.0 + + CREATE TABLE t1(a, b, c NOT NULL); + CREATE TRIGGER tr1 AFTER INSERT ON t1 WHEN new.c IS NOT NULL BEGIN + SELECT c NOT NULL FROM t1; + END; +---- +stmt 0 ok +stmt 37 err 1 -1 106 no such table: main.t1 +==== 21.1 + + ALTER TABLE t1 RENAME c TO d; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 21.2 + + SELECT sql FROM sqlite_schema WHERE name IS 'tr1' +---- +stmt 0 ok +==== 22.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, othername, extra AS (c + 1)); + ALTER TABLE t1 RENAME a to othername; + SELECT sql FROM sqlite_schema; +---- +stmt 0 ok +stmt 25 ok +stmt 76 err 1 -1 116 no such table: t1 +stmt 116 ok +==== 22.0.dup1 + + CREATE TABLE t1(a, b); + CREATE INDEX x1 on t1("c"=b); + INSERT INTO t1 VALUES('a', 'a'); + INSERT INTO t1 VALUES('b', 'b'); + INSERT INTO t1 VALUES('c', 'c'); + ALTER TABLE t1 RENAME COLUMN a TO "c"; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 25 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 92 no such table: t1 +stmt 92 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 203 no such table: t1 +stmt 203 ok +==== 23.0 + + CREATE TABLE t1('a'"b",c); + CREATE INDEX i1 ON t1('a'); + INSERT INTO t1 VALUES(1,2), (3,4); + ALTER TABLE t1 RENAME COLUMN a TO x; + PRAGMA integrity_check; + SELECT sql FROM sqlite_schema WHERE name='t1'; +---- +stmt 0 ok +stmt 29 err 1 -1 59 no such table: main.t1 +stmt 59 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 135 no such table: t1 +stmt 135 ok +stmt 161 ok +==== 23.0.dup1 + + CREATE TABLE t1(a INT, b REAL, c TEXT, d BLOB, e ANY); + CREATE INDEX t1abx ON t1(a, b, a+b) WHERE c IS NOT NULL; + CREATE VIEW t2 AS SELECT a+10, b*5.0, xyz FROM t1; -- unknown column "xyz" + CREATE TABLE schema_copy(name TEXT, sql TEXT); + INSERT INTO schema_copy(name,sql) SELECT name, sql FROM sqlite_schema WHERE sql IS NOT NULL; +---- +stmt 0 ok +stmt 57 err 1 -1 116 no such table: main.t1 +stmt 116 ok +stmt 169 ok +stmt 242 err 1 -1 337 no such table: schema_copy +==== 23.1 + + ALTER TABLE t1 RENAME COLUMN e TO eeee; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 23.2 + + SELECT name, sql FROM sqlite_master + EXCEPT SELECT name, sql FROM schema_copy; +---- +stmt 0 err 1 -1 84 no such table: schema_copy +==== 23.3 + + BEGIN; + PRAGMA writable_schema=ON; + ALTER TABLE t1 RENAME COLUMN e TO eeee; + PRAGMA writable_schema=OFF; + SELECT name FROM sqlite_master + WHERE (name, sql) NOT IN (SELECT name, sql FROM schema_copy); + ROLLBACK; +---- +stmt 0 ok +stmt 9 ok +stmt 38 err 1 -1 80 no such table: t1 +stmt 80 ok +stmt 110 err 1 -1 210 no such table: schema_copy +stmt 210 ok +==== 23.10 + + DROP VIEW t2; + CREATE TRIGGER r3 AFTER INSERT ON t1 BEGIN + INSERT INTO t3(x,y) VALUES(new.a, new.b); + INSERT INTO t4(p) VALUES(new.c); -- no such table "t4" + END; + DELETE FROM schema_copy; + INSERT INTO schema_copy(name,sql) SELECT name, sql FROM sqlite_schema WHERE sql IS NOT NULL; +---- +stmt 0 err 1 -1 16 no such view: t2 +stmt 16 err 1 -1 61 no such table: main.t1 +stmt 176 err 1 -1 203 no such table: schema_copy +stmt 203 err 1 -1 298 no such table: schema_copy +==== 23.11 + + ALTER TABLE t1 RENAME COLUMN e TO eeee; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 23.12 + + SELECT name, sql FROM sqlite_master + EXCEPT SELECT name, sql FROM schema_copy; +---- +stmt 0 err 1 -1 84 no such table: schema_copy +==== 23.13 + + BEGIN; + PRAGMA writable_schema=ON; + ALTER TABLE t1 RENAME COLUMN e TO eeee; + PRAGMA writable_schema=OFF; + SELECT name FROM sqlite_master + WHERE (name, sql) NOT IN (SELECT name, sql FROM schema_copy); + ROLLBACK; +---- +stmt 0 ok +stmt 9 ok +stmt 38 err 1 -1 80 no such table: t1 +stmt 80 ok +stmt 110 err 1 -1 210 no such table: schema_copy +stmt 210 ok +==== 23.20 + + CREATE TABLE t4(id INTEGER PRIMARY KEY, c1 INT, c2 INT); + CREATE VIEW t4v1 AS SELECT id, c1, c99 FROM t4; + DELETE FROM schema_copy; + INSERT INTO schema_copy SELECT name, sql FROM sqlite_schema; + BEGIN; + PRAGMA writable_schema=ON; + ALTER TABLE t4 RENAME to t4new; + SELECT name FROM sqlite_schema WHERE (name,sql) NOT IN (SELECT * FROM schema_copy); + ROLLBACK; +---- +stmt 0 ok +stmt 59 ok +stmt 109 err 1 -1 136 no such table: schema_copy +stmt 136 err 1 -1 199 no such table: schema_copy +stmt 199 ok +stmt 208 ok +stmt 237 err 1 -1 271 no such table: t4 +stmt 271 err 1 -1 357 no such table: schema_copy +stmt 357 ok +==== 24.0 + + CREATE TABLE t1(a PRIMARY KEY, b); + CREATE TABLE t2(a, b, c); + INSERT INTO t2 VALUES(1, 1, 1); +---- +stmt 0 ok +stmt 37 ok +stmt 65 err 1 -1 99 no such table: t2 +==== 24.1 + + PRAGMA foreign_keys = 1; + ALTER TABLE t2 ADD COLUMN d REFERENCES t1 DEFAULT 123; +---- +stmt 0 ok +stmt 27 err 1 -1 68 no such table: t2 diff --git a/parser/testdata/altercons.metadata.json b/parser/testdata/altercons.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/altercons.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/altercons.test b/parser/testdata/altercons.test new file mode 100644 index 0000000..dbf52a2 --- /dev/null +++ b/parser/testdata/altercons.test @@ -0,0 +1,349 @@ +==== altercons-generated + + ALTER TABLE t1 DROP CONSTRAINT abc; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== altercons-generated.dup1 + + SELECT sql FROM sqlite_schema WHERE name='t1' +---- +stmt 0 ok +==== 2.0 + + CREATE TABLE t2(x, y CONSTRAINT ccc UNIQUE); +---- +stmt 0 ok +==== 2.1 + + ALTER TABLE t2 DROP CONSTRAINT ccc +---- +stmt 0 err 1 -1 38 no such table: t2 +==== 2.2 + + ALTER TABLE t2 DROP CONSTRAINT ddd +---- +stmt 0 err 1 -1 38 no such table: t2 +==== altercons-generated.dup2 + + SELECT sql FROM sqlite_schema WHERE name='t1' +---- +stmt 0 ok +==== 4.0 + + CREATE TABLE t2(x, y CONSTRAINT ccc UNIQUE); +---- +stmt 0 ok +==== 4.1 + + ALTER TABLE t2 ALTER x DROP NOT NULL; + ALTER TABLE t2 ALTER x DROP NOT NULL; + ALTER TABLE t2 ALTER x DROP NOT NULL; +---- +stmt 0 err 1 -1 40 no such table: t2 +stmt 40 err 1 -1 80 no such table: t2 +stmt 80 err 1 -1 120 no such table: t2 +==== 5.1 + + CREATE TABLE t3(a INTEGER PRIMARY KEY, b); + INSERT INTO t3 VALUES(1000, NULL); +---- +stmt 0 ok +stmt 45 err 1 -1 82 no such table: t3 +==== 5.2.1 + + ALTER TABLE t3 ALTER b SET NOT NULL +---- +stmt 0 err 1 -1 39 no such table: t3 +==== altercons-generated.dup3 + + SELECT sql FROM sqlite_schema WHERE name='t1'; +---- +stmt 0 ok +==== 5.4.1 + + CREATE TABLE x1(a, b, c); +---- +stmt 0 ok +==== 5.4.2 + + ALTER TABLE x1 ALTER d SET NOT NULL; +---- +stmt 0 err 1 -1 39 no such table: x1 +==== 5.4.3 + + ALTER TABLE x2 ALTER c SET NOT NULL; +---- +stmt 0 err 1 -1 39 no such table: x2 +==== 5.4.4 + + ALTER TABLE temp.x1 ALTER c SET NOT NULL; +---- +stmt 0 err 1 -1 44 no such table: temp.x1 +==== 6.1 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 96 no such table: t1 +==== 6.2.1 + + ALTER TABLE t1 ADD CONSTRAINT nn CHECK (c!=6); +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 6.2.2 + + DELETE FROM t1 WHERE c=6; + ALTER TABLE t1 ADD CONSTRAINT nn CHECK (c!=6); +---- +stmt 0 err 1 -1 28 no such table: t1 +stmt 28 err 1 -1 77 no such table: t1 +==== 6.2.3 + + INSERT INTO t1 VALUES(4, 5, 6); +---- +stmt 0 err 1 -1 34 no such table: t1 +==== altercons-generated.dup4 + + SELECT sql FROM sqlite_schema WHERE type='table'; +---- +stmt 0 ok +==== 6.4.1 + + CREATE TABLE b1(a, b, CONSTRAINT abc CHECK (a!=2)); +---- +stmt 0 ok +==== 6.4.2 + + ALTER TABLE b1 ADD CONSTRAINT abc CHECK (a!=3); +---- +stmt 0 err 1 -1 50 no such table: b1 +==== 6.4.1.dup1 + + SELECT sql FROM sqlite_schema WHERE tbl_name='b1' +---- +stmt 0 ok +==== 6.5 + + CREATE TABLE abc(x,y); +---- +stmt 0 ok +==== 6.6 + + ALTER TABLE abc ADD CHECK (z>=0); +---- +stmt 0 err 1 -1 36 no such table: abc +==== 7.0 + + CREATE TABLE x1(a, b AS (a+1)); + INSERT INTO x1 VALUES(1), (2), (3), (NULL); +---- +stmt 0 ok +stmt 34 err 1 -1 80 no such table: x1 +==== 7.1 + + ALTER TABLE x1 ALTER b SET NOT NULL; +---- +stmt 0 err 1 -1 39 no such table: x1 +==== 7.2 + + DELETE FROM x1 WHERE b IS NULL; + ALTER TABLE x1 ALTER b SET NOT NULL; +---- +stmt 0 err 1 -1 34 no such table: x1 +stmt 34 err 1 -1 73 no such table: x1 +==== 7.3 + + SELECT b FROM x1 +---- +stmt 0 err 1 -1 20 no such table: x1 +==== 7.4 + + ALTER TABLE x1 ALTER rowid SET NOT NULL; +---- +stmt 0 err 1 -1 43 no such table: x1 +==== 7.5 + + CREATE VIEW v1 AS SELECT a, b FROM x1; +---- +stmt 0 ok +==== 7.6 + + ALTER TABLE v1 RENAME a TO c; +---- +stmt 0 err 1 -1 32 no such table: v1 +==== 7.7 + + ALTER TABLE v1 ALTER a SET NOT NULL; +---- +stmt 0 err 1 -1 39 no such table: v1 +==== 7.8 + + ALTER TABLE sqlite_schema ALTER sql SET NOT NULL; +---- +stmt 0 err 1 -1 52 table sqlite_master may not be altered +==== 7.9 + + ALTER TABLE v1 ALTER a DROP NOT NULL +---- +stmt 0 err 1 -1 40 no such table: v1 +==== 8.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b NOT NULL, c CHECK (c!=555), d); + INSERT INTO t1 VALUES(1, 1, 1, 1); + INSERT INTO t1 VALUES(2, 2, 2, 2); + INSERT INTO t1 VALUES(3, 3, 3, 3); +---- +stmt 0 ok +stmt 75 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 186 no such table: t1 +==== 8.1.1 + + ALTER TABLE t1 ALTER a SET NOT NULL; + ALTER TABLE t1 ALTER b SET NOT NULL; + ALTER TABLE t1 ALTER c SET NOT NULL; + ALTER TABLE t1 ALTER d SET NOT NULL; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 117 no such table: t1 +stmt 117 err 1 -1 156 no such table: t1 +==== 8.1.2 + + SELECT sql FROM sqlite_schema WHERE tbl_name = 't1' +---- +stmt 0 ok +==== 8.1.3 + + SELECT * FROM t1 WHERE a=2; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== 8.2.1 + + ALTER TABLE t1 ALTER a DROP NOT NULL; + ALTER TABLE t1 ALTER b DROP NOT NULL; + ALTER TABLE t1 ALTER c DROP NOT NULL; + ALTER TABLE t1 ALTER d DROP NOT NULL; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 160 no such table: t1 +==== 8.2.2 + + SELECT sql FROM sqlite_schema WHERE tbl_name = 't1' +---- +stmt 0 ok +==== 8.2.3 + + SELECT * FROM t1 WHERE a=3; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== 9.0 + + CREATE TABLE t1(x, y, z); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t1(x, y, z); + INSERT INTO aux.t1 VALUES(1, 1, 1); + INSERT INTO aux.t1 VALUES(2, 2, 2); + INSERT INTO aux.t1 VALUES(3, 3, NULL); + + CREATE TABLE aux.t2(x, y, z); +---- +stmt 0 ok +stmt 28 ok +stmt 56 err 1 72 79 unknown database aux +stmt 88 err 1 -1 126 no such table: aux.t1 +stmt 126 err 1 -1 164 no such table: aux.t1 +stmt 164 err 1 -1 205 no such table: aux.t1 +stmt 205 err 1 222 229 unknown database aux +==== 9.1.1 + + ALTER TABLE aux.t1 ALTER COLUMN z SET NOT NULL +---- +stmt 0 err 1 -1 50 no such table: aux.t1 +==== 9.1.2 + + UPDATE aux.t1 SET z=x; + ALTER TABLE aux.t1 ALTER COLUMN z SET NOT NULL; + SELECT sql FROM aux.sqlite_schema WHERE name='t1'; +---- +stmt 0 err 1 -1 25 no such table: aux.t1 +stmt 25 err 1 -1 75 no such table: aux.t1 +stmt 75 err 1 -1 128 no such table: aux.sqlite_schema +==== 9.1.3 + + ALTER TABLE aux.t1 ALTER z DROP NOT NULL; + SELECT sql FROM aux.sqlite_schema WHERE name='t1'; +---- +stmt 0 err 1 -1 44 no such table: aux.t1 +stmt 44 err 1 -1 97 no such table: aux.sqlite_schema +==== 9.1.4 + + ALTER TABLE t2 ALTER x SET NOT NULL; + SELECT sql FROM aux.sqlite_schema WHERE name='t2'; +---- +stmt 0 err 1 -1 39 no such table: t2 +stmt 39 err 1 -1 92 no such table: aux.sqlite_schema +==== 9.1.5 + + ALTER TABLE t2 ALTER x DROP NOT NULL; + SELECT sql FROM aux.sqlite_schema WHERE name='t2'; +---- +stmt 0 err 1 -1 40 no such table: t2 +stmt 40 err 1 -1 93 no such table: aux.sqlite_schema +==== 9.2.1 + + ALTER TABLE aux.t1 ADD CONSTRAINT bill CHECK (y!=2); +---- +stmt 0 err 1 -1 55 no such table: aux.t1 +==== 9.2.2 + + UPDATE aux.t1 SET y=4 WHERE y=2; + ALTER TABLE aux.t1 ADD CONSTRAINT bill CHECK (y!=2); + SELECT sql FROM aux.sqlite_schema WHERE name='t1'; +---- +stmt 0 err 1 -1 35 no such table: aux.t1 +stmt 35 err 1 -1 90 no such table: aux.t1 +stmt 90 err 1 -1 143 no such table: aux.sqlite_schema +==== 9.2.3 + + ALTER TABLE aux.t1 DROP CONSTRAINT bill; + SELECT sql FROM aux.sqlite_schema WHERE name='t1'; +---- +stmt 0 err 1 -1 43 no such table: aux.t1 +stmt 43 err 1 -1 96 no such table: aux.sqlite_schema +==== 9.2.4 + + ALTER TABLE t2 ADD CONSTRAINT william CHECK (z!=''); + SELECT sql FROM aux.sqlite_schema WHERE name='t2'; +---- +stmt 0 err 1 -1 55 no such table: t2 +stmt 55 err 1 -1 108 no such table: aux.sqlite_schema +==== 9.2.5 + + ALTER TABLE t2 DROP CONSTRAINT william; + SELECT sql FROM aux.sqlite_schema WHERE name='t2'; +---- +stmt 0 err 1 -1 42 no such table: t2 +stmt 42 err 1 -1 95 no such table: aux.sqlite_schema +==== 10.1 + + CREATE TABLE t1(x,y,z); + INSERT INTO t1 VALUES(1,'two',x'3333'); +---- +stmt 0 ok +stmt 26 err 1 -1 68 no such table: t1 +==== 10.2 + + ALTER TABLE t1 ADD CONSTRAINT c1 CHECK( sqlite_drop_column(22,'CREATE TABLE a(b,c)', 0)); +---- +stmt 0 err 1 -1 92 no such table: t1 +==== 10.3 + + ALTER TABLE t1 ADD CONSTRAINT c1 CHECK( x>#2 ); +---- +stmt 0 err 1 45 49 near "#2": syntax error diff --git a/parser/testdata/altercons2.metadata.json b/parser/testdata/altercons2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/altercons2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/altercons2.test b/parser/testdata/altercons2.test new file mode 100644 index 0000000..713d14c --- /dev/null +++ b/parser/testdata/altercons2.test @@ -0,0 +1,249 @@ +==== altercons2-generated + + CREATE TABLE t1(a, b, c NOT NULL, CONSTRAINT xyz CHECK( a!=0 )); +---- +stmt 0 ok +==== altercons2-generated.dup1 + + SELECT sql FROM sqlite_schema WHERE name='t1' +---- +stmt 0 ok +==== 2.0 + + CREATE TABLE x1(a PRIMARY KEY, b CHECK(a!=b) NOT NULL, c); +---- +stmt 0 ok +==== 2.1.1 + + ALTER TABLE x1 ADD CONSTRAINT ccc CHECK (a!='a') +---- +stmt 0 err 1 -1 52 no such table: x1 +==== 2.1.2 + + SELECT sql FROM sqlite_schema WHERE name='x1' +---- +stmt 0 ok +==== 2.2.1 + + ALTER TABLE x1 ALTER c SET NOT NULL +---- +stmt 0 err 1 -1 39 no such table: x1 +==== 2.2.2 + + SELECT sql FROM sqlite_schema WHERE name='x1' +---- +stmt 0 ok +==== 3.0 + + CREATE TABLE t1(x); +---- +stmt 0 ok +==== 3.1 + + ALTER TABLE t1 ALTER x SET NOT NULL; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 4.0 + + CREATE TABLE abc(a, b, c, CONSTRAINT one CONSTRAINT two CHECK (b!=c)); +---- +stmt 0 ok +==== 4.1 + + ALTER TABLE abc DROP CONSTRAINT one +---- +stmt 0 err 1 -1 39 no such table: abc +==== 4.2 + + SELECT sql FROM sqlite_schema +---- +stmt 0 ok +==== 5.0 + + CREATE TABLE abc(a, b, c, CONSTRAINT two CHECK (b!=c), d) +---- +stmt 0 err 1 58 59 near "d": syntax error +==== 5.1 + + CREATE TABLE def(CONSTRAINT abc CHECK( b!=c ), a, b, c); +---- +stmt 0 err 1 20 30 near "CONSTRAINT": syntax error +==== 6.0 + + CREATE TABLE abc(a, b CONSTRAINT two COLLATE nocase CHECK (a!=b), c CONSTRAINT one DEFAULT 'abc'); +---- +stmt 0 ok +==== 6.1 + + ALTER TABLE abc DROP CONSTRAINT one; + ALTER TABLE abc DROP CONSTRAINT two; +---- +stmt 0 err 1 -1 39 no such table: abc +stmt 39 err 1 -1 78 no such table: abc +==== 6.2 + + SELECT sql FROM sqlite_schema +---- +stmt 0 ok +==== 7.0 + + CREATE TABLE abc(a, b, c, CONSTRAINT one CHECK (a>b) FOREIGN KEY(a) REFERENCES abc); +---- +stmt 0 ok +==== 7.1 + + ALTER TABLE abc DROP CONSTRAINT one +---- +stmt 0 err 1 -1 39 no such table: abc +==== 7.2 + + SELECT sql FROM sqlite_schema +---- +stmt 0 ok +==== 8.0 + + CREATE TABLE abc(a, b, c, CONSTRAINT one FOREIGN KEY(a) REFERENCES abc); +---- +stmt 0 ok +==== 8.1 + + ALTER TABLE abc DROP CONSTRAINT one +---- +stmt 0 err 1 -1 39 no such table: abc +==== 9.0 + + CREATE TABLE abc(a, b NOT NULL AS (a+1)) +---- +stmt 0 ok +==== 9.1 + + ALTER TABLE abc ALTER b DROP NOT NULL; + SELECT sql FROM sqlite_schema; +---- +stmt 0 err 1 -1 41 no such table: abc +stmt 41 ok +==== 10.0 + + CREATE TABLE abc(a, b GENERATED ALWAYS AS (a+1)); + INSERT INTO abc VALUES(1), (2); + SELECT * FROM abc; +---- +stmt 0 ok +stmt 52 err 1 -1 86 no such table: abc +stmt 86 err 1 -1 107 no such table: abc +==== 10.1 + + ALTER TABLE abc ALTER b SET NOT NULL; +---- +stmt 0 err 1 -1 40 no such table: abc +==== 10.2 + + INSERT INTO abc VALUES(NULL); +---- +stmt 0 err 1 -1 32 no such table: abc +==== 10.3 + + INSERT INTO abc VALUES(3); + ALTER TABLE abc ALTER COLUMN b DROP NOT NULL; +---- +stmt 0 err 1 -1 29 no such table: abc +stmt 29 err 1 -1 77 no such table: abc +==== 10.4 + + INSERT INTO abc VALUES(NULL); +---- +stmt 0 err 1 -1 32 no such table: abc +==== 11.0 + + CREATE TABLE t1(a, b, c); +---- +stmt 0 ok +==== 11.1.1 + + ALTER TABLE t1 ADD CONSTRAINT c1 CHECK(a=b) --comment + ; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== 11.1.2 +ALTER TABLE t1 ADD CONSTRAINT c2 CHECK(a=b) --comment +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 11.1.3 + + SELECT sql FROM sqlite_schema; +---- +stmt 0 ok +==== 11.2.1 + + CREATE TABLE t2(a, b); +---- +stmt 0 ok +==== 11.2.2 +ALTER TABLE t2 ALTER b SET NOT NULL --new cons +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 11.2.3 + + SELECT sql FROM sqlite_schema WHERE name='t2'; +---- +stmt 0 ok +==== 11.2.3.dup1 + + ALTER TABLE t2 ALTER b DROP NOT NULL; + SELECT sql FROM sqlite_schema WHERE name='t2'; +---- +stmt 0 err 1 -1 40 no such table: t2 +stmt 40 ok +==== 11.2.2.dup1 +ALTER TABLE t2 ALTER b SET NOT NULL --new cons +; +---- +stmt 0 err 1 -1 48 no such table: t2 +==== 12.0 + + CREATE TABLE "Test" ( + "IsActive" INTEGER, + CONSTRAINT "BooleanZeroOrOne" CHECK ("IsActive" IN (0, 1)) + ); +---- +stmt 0 ok +==== 12.1 + + ALTER TABLE Test DROP CONSTRAINT BooleanZeroOrOne +---- +stmt 0 err 1 -1 53 no such table: Test +==== 12.2 + + SELECT sql FROM sqlite_schema +---- +stmt 0 ok +==== 12.3 + + DROP TABLE Test; + CREATE TABLE "Test" ( + "IsActive" INTEGER, + CONSTRAINT "BooleanZeroOrOne" CHECK ("IsActive" IN (0, 1)) + ); +---- +stmt 0 err 1 -1 19 no such table: Test +stmt 19 ok +==== 12.4 + + ALTER TABLE Test DROP CONSTRAINT "BooleanZeroOrOne" +---- +stmt 0 err 1 -1 55 no such table: Test +==== 12.5 + + SELECT sql FROM sqlite_schema +---- +stmt 0 ok +==== 12.6 + + CREATE TABLE t1(a, b CONSTRAINT "a""b" CHECK (b IS NOT NULL)); +---- +stmt 0 ok +==== 12.7 + + ALTER TABLE t1 DROP CONSTRAINT "a""b" +---- +stmt 0 err 1 -1 41 no such table: t1 diff --git a/parser/testdata/altercorrupt.metadata.json b/parser/testdata/altercorrupt.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/altercorrupt.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/altercorrupt.test b/parser/testdata/altercorrupt.test new file mode 100644 index 0000000..03ec101 --- /dev/null +++ b/parser/testdata/altercorrupt.test @@ -0,0 +1,12 @@ +==== 1.1 + + ALTER TABLE t2 DROP COLUMN e; + ALTER TABLE t1 DROP COLUMN f; +---- +stmt 0 err 1 -1 32 no such table: t2 +stmt 32 err 1 -1 64 no such table: t1 +==== 2.1 + + ALTER TABLE t1 DROP COLUMN a; +---- +stmt 0 err 1 -1 32 no such table: t1 diff --git a/parser/testdata/alterfault.metadata.json b/parser/testdata/alterfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/alterfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/alterfault.test b/parser/testdata/alterfault.test new file mode 100644 index 0000000..76f73a8 --- /dev/null +++ b/parser/testdata/alterfault.test @@ -0,0 +1,14 @@ +==== 1.0 + + CREATE TABLE t1(a); + CREATE TEMP TRIGGER tr1 AFTER INSERT ON t1 BEGIN + SELECT 123; + END; +---- +stmt 0 ok +stmt 22 err 1 -1 90 no such table: t1 +==== 2.0 + + CREATE TABLE x1(d, e CONSTRAINT abc NOT NULL, f); +---- +stmt 0 ok diff --git a/parser/testdata/alterlegacy.metadata.json b/parser/testdata/alterlegacy.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/alterlegacy.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/alterlegacy.test b/parser/testdata/alterlegacy.test new file mode 100644 index 0000000..b8fe9c2 --- /dev/null +++ b/parser/testdata/alterlegacy.test @@ -0,0 +1,516 @@ +==== 1.0 + + PRAGMA legacy_alter_table = 1; + CREATE TABLE t1(a, b, CHECK(t1.a != t1.b)); + CREATE TABLE t2(a, b); + CREATE INDEX t2expr ON t2(a) WHERE t2.b>0; +---- +stmt 0 ok +stmt 33 ok +stmt 79 ok +stmt 104 err 1 -1 149 no such table: main.t2 +==== 1.1 + + SELECT sql FROM sqlite_master +---- +stmt 0 ok +==== 1.2 + + ALTER TABLE t1 RENAME TO t1new; +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 1.3 + + CREATE TABLE t3(c, d); + ALTER TABLE t3 RENAME TO t3new; + DROP TABLE t3new; +---- +stmt 0 ok +stmt 25 err 1 -1 59 no such table: t3 +stmt 59 err 1 -1 79 no such table: t3new +==== 1.4 + + SELECT sql FROM sqlite_master +---- +stmt 0 ok +==== 1.3.dup1 + + ALTER TABLE t2 RENAME TO t2new; +---- +stmt 0 err 1 -1 34 no such table: t2 +==== 1.4.dup1 + + SELECT sql FROM sqlite_master +---- +stmt 0 ok +==== 2.0 + + PRAGMA legacy_alter_table = 1; + CREATE TABLE abc(a, b, c); + INSERT INTO abc VALUES(1, 2, 3); + CREATE VIRTUAL TABLE eee USING echo('abc'); + SELECT * FROM eee; +---- +stmt 0 ok +stmt 35 ok +stmt 66 err 1 -1 103 no such table: abc +stmt 103 ok +stmt 151 err 1 -1 174 no such table: eee +==== 2.1 + + ALTER TABLE eee RENAME TO fff; + SELECT * FROM fff; +---- +stmt 0 err 1 -1 35 no such table: eee +stmt 35 err 1 -1 58 no such table: fff +==== 2.2 + + ALTER TABLE fff RENAME TO ggg; +---- +stmt 0 err 1 -1 35 no such table: fff +==== 3.0 + + PRAGMA legacy_alter_table = 1; + CREATE TABLE txx(a, b, c); + INSERT INTO txx VALUES(1, 2, 3); + CREATE VIEW vvv AS SELECT main.txx.a, txx.b, c FROM txx; + CREATE VIEW uuu AS SELECT main.one.a, one.b, c FROM txx AS one; + CREATE VIEW temp.ttt AS SELECT main.txx.a, txx.b, one.b, main.one.a FROM txx AS one, txx; +---- +stmt 0 ok +stmt 33 ok +stmt 62 err 1 -1 97 no such table: txx +stmt 97 ok +stmt 156 ok +stmt 222 ok +==== 3.1.1 + + SELECT * FROM vvv; +---- +stmt 0 err 1 -1 21 no such table: vvv +==== 3.1.2a + + ALTER TABLE txx RENAME TO "t xx"; +---- +stmt 0 err 1 -1 36 no such table: txx +==== 3.1.2b + + SELECT * FROM vvv; +---- +stmt 0 err 1 -1 21 no such table: vvv +==== 3.1.3 + + SELECT sql FROM sqlite_master WHERE name='vvv'; +---- +stmt 0 ok +==== 3.2.1 + + SELECT * FROM uuu; +---- +stmt 0 err 1 -1 21 no such table: uuu +==== 3.2.2 + + SELECT sql FROM sqlite_master WHERE name='uuu';; +---- +stmt 0 ok +stmt 50 ok +==== 3.3.1 + + SELECT * FROM ttt; +---- +stmt 0 err 1 -1 21 no such table: ttt +==== 3.3.2 + + SELECT sql FROM sqlite_temp_master WHERE name='ttt'; +---- +stmt 0 ok +==== 4.0 + + PRAGMA legacy_alter_table = 1; + CREATE table t1(x, y); + CREATE table t2(a, b); + + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + SELECT t1.x, * FROM t1, t2; + INSERT INTO t2 VALUES(new.x, new.y); + END; +---- +stmt 0 ok +stmt 33 ok +stmt 58 ok +stmt 83 err 1 -1 130 no such table: main.t1 +==== 4.1 + + INSERT INTO t1 VALUES(1, 1); + ALTER TABLE t1 RENAME TO t11; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 63 no such table: t1 +==== 4.1a + + INSERT INTO t11 VALUES(2, 2); +---- +stmt 0 err 1 -1 32 no such table: t11 +==== 4.1b + + ALTER TABLE t11 RENAME TO t1; + ALTER TABLE t2 RENAME TO t22; +---- +stmt 0 err 1 -1 32 no such table: t11 +stmt 32 err 1 -1 64 no such table: t2 +==== 4.1c + + INSERT INTO t1 VALUES(3, 3); +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 4.2 + SELECT squish(sql) FROM sqlite_master WHERE name = 'tr1' +---- +stmt 0 err 1 8 58 no such function: squish +==== 5.0 + + PRAGMA legacy_alter_table = 1; + CREATE TABLE t9(a, b, c); + CREATE TABLE t10(a, b, c); + CREATE TEMP TABLE t9(a, b, c); + + CREATE TRIGGER temp.t9t AFTER INSERT ON temp.t9 BEGIN + INSERT INTO t10 VALUES(new.a, new.b, new.c); + END; + + INSERT INTO temp.t9 VALUES(1, 2, 3); + SELECT * FROM t10; +---- +stmt 0 ok +stmt 33 ok +stmt 61 ok +stmt 90 ok +stmt 123 err 1 -1 180 no such table: temp.t9 +stmt 236 err 1 -1 276 no such table: temp.t9 +stmt 276 err 1 -1 297 no such table: t10 +==== 5.1 + + ALTER TABLE temp.t9 RENAME TO 't1234567890' +---- +stmt 0 err 1 -1 47 no such table: temp.t9 +==== 5.2 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t2 VALUES(3, 4); + CREATE VIEW v AS SELECT one.a, one.b, t2.a, t2.b FROM t1 AS one, t2; + SELECT * FROM v; +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 112 no such table: t2 +stmt 112 ok +stmt 183 err 1 -1 202 no such table: v +==== 5.3 + + ALTER TABLE t2 RENAME TO one; +---- +stmt 0 err 1 -1 32 no such table: t2 +==== 5.4 + + SELECT * FROM v +---- +stmt 0 err 1 -1 21 no such table: v +==== 5.5 + + ALTER TABLE one RENAME TO t2; + DROP VIEW v; + CREATE VIEW temp.vv AS SELECT one.a, one.b, t2.a, t2.b FROM t1 AS one, t2; + SELECT * FROM vv; +---- +stmt 0 err 1 -1 32 no such table: one +stmt 32 err 1 -1 47 no such view: v +stmt 47 ok +stmt 124 err 1 -1 144 no such table: vv +==== 5.6 + + ALTER TABLE t2 RENAME TO one; +---- +stmt 0 err 1 -1 32 no such table: t2 +==== 5.7 + + SELECT * FROM vv +---- +stmt 0 err 1 -1 22 no such table: vv +==== 6.0 + + CREATE VIRTUAL TABLE x1 USING tcl(tcl_command); +---- +stmt 0 ok +==== 6.1 + + ALTER TABLE x1 RENAME TO x2; + SELECT sql FROM sqlite_master WHERE name = 'x2' +---- +stmt 0 err 1 -1 33 no such table: x1 +stmt 33 ok +==== 7.1 + + CREATE TABLE ddd(db, sql, zOld, zNew, bTemp); + INSERT INTO ddd VALUES( + 'main', 'CREATE TABLE x1(i INTEGER, t TEXT)', 'ddd', NULL, 0 + ), ( + 'main', 'CREATE TABLE x1(i INTEGER, t TEXT)', NULL, 'eee', 0 + ), ( + 'main', NULL, 'ddd', 'eee', 0 + ); +---- +stmt 0 ok +stmt 50 err 1 -1 279 no such table: ddd +==== 8.1 + + PRAGMA legacy_alter_table = 1; + ATTACH 'test.db2' AS aux; + PRAGMA foreign_keys = on; + CREATE TABLE aux.p1(a INTEGER PRIMARY KEY, b); + CREATE TABLE aux.c1(x INTEGER PRIMARY KEY, y REFERENCES p1(a)); + INSERT INTO aux.p1 VALUES(1, 1); + INSERT INTO aux.p1 VALUES(2, 2); + INSERT INTO aux.c1 VALUES(NULL, 2); + CREATE TABLE aux.c2(x INTEGER PRIMARY KEY, y REFERENCES c1(a)); +---- +stmt 0 ok +stmt 33 ok +stmt 61 ok +stmt 89 err 1 105 112 unknown database aux +stmt 138 err 1 154 161 unknown database aux +stmt 204 err 1 -1 239 no such table: aux.p1 +stmt 239 err 1 -1 274 no such table: aux.p1 +stmt 274 err 1 -1 312 no such table: aux.c1 +stmt 312 err 1 328 335 unknown database aux +==== 8.2 + + ALTER TABLE aux.p1 RENAME TO ppp; +---- +stmt 0 err 1 -1 36 no such table: aux.p1 +==== 8.2.dup1 + + INSERT INTO aux.c1 VALUES(NULL, 1); + SELECT sql FROM aux.sqlite_master WHERE name = 'c1'; +---- +stmt 0 err 1 -1 38 no such table: aux.c1 +stmt 38 err 1 -1 93 no such table: aux.sqlite_master +==== 9.0 + + PRAGMA legacy_alter_table = 1; + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t2; +---- +stmt 0 ok +stmt 33 ok +stmt 61 ok +==== 9.1 + + ALTER TABLE t1 RENAME TO t3; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 9.1b + + ALTER TABLE t3 RENAME TO t1; +---- +stmt 0 err 1 -1 31 no such table: t3 +==== 9.2 + + DROP VIEW v1; + CREATE TRIGGER tr AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(new.a); + END; +---- +stmt 0 err 1 -1 16 no such view: v1 +stmt 16 err 1 -1 61 no such table: main.t1 +==== 9.3 + + ALTER TABLE t1 RENAME TO t3; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 9.4 + + ALTER TABLE t3 RENAME TO t1; + DROP TRIGGER tr; + + ATTACH 'test.db2' AS aux; + CREATE TRIGGER tr AFTER INSERT ON t1 WHEN new.a IS NULL BEGIN SELECT 1, 2, 3; END; + + CREATE TABLE aux.t1(x); + CREATE TEMP TRIGGER tr AFTER INSERT ON aux.t1 BEGIN SELECT 1, 2, 3; END; +---- +stmt 0 err 1 -1 31 no such table: t3 +stmt 31 err 1 -1 50 no such trigger: tr +stmt 50 ok +stmt 79 err 1 -1 143 no such table: main.t1 +stmt 164 err 1 181 188 unknown database aux +stmt 191 err 1 -1 245 no such table: aux.t1 +==== 9.5 + + ALTER TABLE main.t1 RENAME TO t3; +---- +stmt 0 err 1 -1 36 no such table: main.t1 +==== 9.6 + + SELECT sql FROM sqlite_temp_master; + SELECT sql FROM sqlite_master WHERE type='trigger'; +---- +stmt 0 ok +stmt 38 ok +==== 10.0 + + PRAGMA legacy_alter_table = 1; + CREATE VIRTUAL TABLE fff USING fts5(x, y, z); +---- +stmt 0 ok +stmt 35 ok +==== 10.1 + + BEGIN; + INSERT INTO fff VALUES('a', 'b', 'c'); + ALTER TABLE fff RENAME TO ggg; + COMMIT; +---- +stmt 0 ok +stmt 11 err 1 -1 56 no such table: fff +stmt 56 err 1 -1 93 no such table: fff +stmt 93 ok +==== 10.2 + + SELECT * FROM ggg; +---- +stmt 0 err 1 -1 23 no such table: ggg +==== 11.0 + + PRAGMA legacy_alter_table = 1; + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t1(a, b, c); + CREATE TABLE main.t1(a, b, c); + CREATE TEMP TRIGGER tr AFTER INSERT ON aux.t1 BEGIN + SELECT trigger(new.a, new.b, new.c); + END; +---- +stmt 0 ok +stmt 33 ok +stmt 61 err 1 77 84 unknown database aux +stmt 93 ok +stmt 126 err 1 -1 180 no such table: aux.t1 +==== 11.1 + + INSERT INTO main.t1 VALUES(1, 2, 3); + INSERT INTO aux.t1 VALUES(4, 5, 6); +---- +stmt 0 err 1 -1 39 no such table: main.t1 +stmt 39 err 1 -1 77 no such table: aux.t1 +==== 11.3 + + SELECT name, tbl_name FROM sqlite_temp_master; +---- +stmt 0 ok +==== 11.4 + + ALTER TABLE main.t1 RENAME TO t2; + SELECT name, tbl_name FROM sqlite_temp_master; +---- +stmt 0 err 1 -1 36 no such table: main.t1 +stmt 36 ok +==== 11.5 + + ALTER TABLE aux.t1 RENAME TO t2; + SELECT name, tbl_name FROM sqlite_temp_master; +---- +stmt 0 err 1 -1 35 no such table: aux.t1 +stmt 35 ok +==== 11.6 + + INSERT INTO aux.t2 VALUES(7, 8, 9); +---- +stmt 0 err 1 -1 38 no such table: aux.t2 +==== 12.0 + + PRAGMA legacy_alter_table = 1; + CREATE TABLE t1(a); + CREATE TABLE t2(w); + CREATE TRIGGER temp.r1 AFTER INSERT ON main.t2 BEGIN + INSERT INTO t1(a) VALUES(new.w); + END; + CREATE TEMP TABLE t2(x); +---- +stmt 0 ok +stmt 33 ok +stmt 55 ok +stmt 77 err 1 -1 132 no such table: main.t2 +stmt 176 ok +==== 12.1 + + ALTER TABLE main.t2 RENAME TO t3; +---- +stmt 0 err 1 -1 36 no such table: main.t2 +==== 12.2 + + INSERT INTO t3 VALUES('WWW'); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 32 no such table: t3 +stmt 32 err 1 -1 52 no such table: t1 +==== 14.0 + + PRAGMA legacy_alter_table = 1; + CREATE VIRTUAL TABLE rt USING rtree(id, minx, maxx, miny, maxy); + + CREATE TABLE "mytable" ( "fid" INTEGER PRIMARY KEY, "geom" BLOB); + + CREATE TRIGGER tr1 AFTER UPDATE OF "geom" ON "mytable" + WHEN OLD."fid" = NEW."fid" AND NEW."geom" IS NULL BEGIN + DELETE FROM rt WHERE id = OLD."fid"; + END; + + INSERT INTO mytable VALUES(1, X'abcd'); +---- +stmt 0 ok +stmt 35 ok +stmt 104 ok +stmt 175 err 1 -1 302 no such table: main.mytable +stmt 356 err 1 -1 401 no such table: mytable +==== 14.1 + + UPDATE mytable SET geom = X'1234' +---- +stmt 0 err 1 -1 39 no such table: mytable +==== 14.2 + + ALTER TABLE mytable RENAME TO mytable_renamed; +---- +stmt 0 err 1 -1 51 no such table: mytable +==== 14.3 + + CREATE TRIGGER tr2 AFTER INSERT ON mytable_renamed BEGIN + DELETE FROM rt WHERE id=(SELECT min(id) FROM rt); + END; +---- +stmt 0 err 1 -1 61 no such table: main.mytable_renamed +==== 14.4 + + ALTER TABLE mytable_renamed RENAME TO mytable2; +---- +stmt 0 err 1 -1 52 no such table: mytable_renamed +==== 14.5 + + PRAGMA legacy_alter_table = 1; + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE TRIGGER xyz AFTER INSERT ON t1 BEGIN + SELECT a, b FROM v1; + END; +---- +stmt 0 ok +stmt 33 ok +stmt 61 ok +stmt 99 err 1 -1 145 no such table: main.t1 +==== 14.6 + + ALTER TABLE t1 RENAME TO tt1; +---- +stmt 0 err 1 -1 32 no such table: t1 diff --git a/parser/testdata/altermalloc2.metadata.json b/parser/testdata/altermalloc2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/altermalloc2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/altermalloc2.test b/parser/testdata/altermalloc2.test new file mode 100644 index 0000000..22607fb --- /dev/null +++ b/parser/testdata/altermalloc2.test @@ -0,0 +1,45 @@ +==== 1.0 + + CREATE TABLE t1(abcd, efgh); +---- +stmt 0 ok +==== 2.0 + + PRAGMA encoding = 'utf-16'; + CREATE TABLE t1(abcd, efgh); +---- +stmt 0 ok +stmt 30 ok +==== 3.0 + + CREATE TABLE t1(abcd, efgh); + CREATE VIEW v1 AS SELECT * FROM t1 WHERE abcd>efgh; +---- +stmt 0 ok +stmt 31 ok +==== 4.0 + + CREATE TABLE rr(a, b); + CREATE VIEW vv AS SELECT * FROM rr; + + CREATE TRIGGER vv1 INSTEAD OF INSERT ON vv BEGIN + SELECT 1, 2, 3; + END; + CREATE TRIGGER tr1 AFTER INSERT ON rr BEGIN + INSERT INTO vv VALUES(new.a, new.b); + END; +---- +stmt 0 ok +stmt 25 ok +stmt 63 err 1 -1 115 no such table: main.vv +stmt 142 err 1 -1 188 no such table: main.rr +==== 5.0 + + CREATE TABLE rr(a, b); + CREATE VIEW vv AS SELECT * FROM ( + WITH abc(d, e) AS (SELECT * FROM rr) + SELECT * FROM abc + ); +---- +stmt 0 ok +stmt 25 ok diff --git a/parser/testdata/altermalloc3.metadata.json b/parser/testdata/altermalloc3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/altermalloc3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/altermalloc3.test b/parser/testdata/altermalloc3.test new file mode 100644 index 0000000..2b23450 --- /dev/null +++ b/parser/testdata/altermalloc3.test @@ -0,0 +1,41 @@ +==== 1.0 + + CREATE TABLE x1( + one, two, three, PRIMARY KEY(one), + CHECK (three!="xyz"), CHECK (two!="one") + ) WITHOUT ROWID; + CREATE INDEX x1i ON x1(one+"two"+"four") WHERE "five"; + CREATE TEMP TRIGGER AFTER INSERT ON x1 BEGIN + UPDATE x1 SET two=new.three || "new" WHERE one=new.one||""; + END; + CREATE TABLE t1(a, b, c, d, PRIMARY KEY(d, b)) WITHOUT ROWID; + INSERT INTO t1 VALUES(1, 2, 3, 4); +---- +stmt 0 ok +stmt 127 err 1 -1 184 no such table: main.x1 +stmt 184 err 1 -1 231 no such table: x1 +stmt 302 ok +stmt 366 err 1 -1 403 no such table: t1 +==== 2.0 + + CREATE TABLE t2(k,v); + CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN + UPDATE t2 SET (k,v)= ( + (WITH cte1(a) AS ( SELECT 1 FROM ( SELECT * FROM t2 ) ) + SELECT a FROM cte1 + ), 1); + END; + + CREATE TRIGGER r1 AFTER INSERT ON t2 BEGIN + UPDATE t2 SET k=1 FROM t2 AS one, t2 AS two NATURAL JOIN t2 AS three + WHERE one.k=two.v; + END; +---- +stmt 0 ok +stmt 24 err 1 -1 69 no such table: main.t2 +stmt 203 err 1 -1 249 no such table: main.t2 +==== 2.1 + + ALTER TABLE t2 RENAME TO t2x; +---- +stmt 0 err 1 -1 32 no such table: t2 diff --git a/parser/testdata/alterqf.metadata.json b/parser/testdata/alterqf.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/alterqf.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/alterqf.test b/parser/testdata/alterqf.test new file mode 100644 index 0000000..6e72b89 --- /dev/null +++ b/parser/testdata/alterqf.test @@ -0,0 +1,28 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); +---- +stmt 0 ok +==== 2.0 + + CREATE TABLE x1( + one, two, three, PRIMARY KEY(one), + CHECK (three!="xyz"), CHECK (two!="one") + ) WITHOUT ROWID; + CREATE INDEX x1i ON x1(one+"two"+"four") WHERE "five"; + CREATE TEMP TRIGGER AFTER INSERT ON x1 BEGIN + UPDATE x1 SET two=new.three || "new" WHERE one=new.one||""; + END; +---- +stmt 0 ok +stmt 127 err 1 -1 184 no such table: main.x1 +stmt 184 err 1 -1 231 no such table: x1 +==== 2.1 + + ALTER TABLE x1 RENAME two TO 'four'; + SELECT sql FROM sqlite_schema; + SELECT sql FROM sqlite_temp_schema; +---- +stmt 0 err 1 -1 39 no such table: x1 +stmt 39 ok +stmt 72 ok diff --git a/parser/testdata/altertrig.metadata.json b/parser/testdata/altertrig.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/altertrig.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/altertrig.test b/parser/testdata/altertrig.test new file mode 100644 index 0000000..ceade41 --- /dev/null +++ b/parser/testdata/altertrig.test @@ -0,0 +1,36 @@ +==== 1.0 + + CREATE TABLE t1(x); + CREATE TABLE t2(y); + CREATE TABLE t3(z); + CREATE TABLE t4(a); + + CREATE TRIGGER r1 INSERT ON t1 BEGIN + UPDATE t1 SET d='xyz' FROM t2, t3; + END; +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +stmt 66 ok +stmt 88 err 1 -1 128 no such table: main.t1 +==== 1.2 + + DROP TRIGGER r1; + CREATE TRIGGER r1 INSERT ON t1 BEGIN + UPDATE t1 SET d='xyz' FROM t2, (SELECT * FROM t5); + END; +---- +stmt 0 err 1 -1 19 no such trigger: r1 +stmt 19 err 1 -1 58 no such table: main.t1 +==== altertrig-generated + + CREATE TABLE t1(a,b); + CREATE TABLE t2(c,d); + CREATE TABLE t3(e,f); + CREATE TABLE t4(e,f); +---- +stmt 0 ok +stmt 26 ok +stmt 52 ok +stmt 78 ok diff --git a/parser/testdata/amatch1.metadata.json b/parser/testdata/amatch1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/amatch1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/amatch1.test b/parser/testdata/amatch1.test new file mode 100644 index 0000000..4130708 --- /dev/null +++ b/parser/testdata/amatch1.test @@ -0,0 +1,82 @@ +==== amatch1-2.0 + + CREATE TABLE costs(iLang, cFrom, cTo, Cost); + INSERT INTO costs VALUES(0, '', '?', 100); + INSERT INTO costs VALUES(0, '?', '', 100); + INSERT INTO costs VALUES(0, '?', '?', 150); + CREATE TABLE vocab(w TEXT UNIQUE); + INSERT OR IGNORE INTO vocab SELECT term FROM t1aux; + CREATE VIRTUAL TABLE t2 USING approximate_match( + vocabulary_table=t1aux, + vocabulary_word=term, + edit_distances=costs + ); + CREATE VIRTUAL TABLE t3 USING approximate_match( + vocabulary_table=vocab, + vocabulary_word=w, + edit_distances=costs + ); + CREATE VIRTUAL TABLE t4 USING approximate_match( + vocabulary_table=vtemp, + vocabulary_word=w, + edit_distances=costs + ); +---- +stmt 0 ok +stmt 49 err 1 -1 96 no such table: costs +stmt 96 err 1 -1 143 no such table: costs +stmt 143 err 1 -1 191 no such table: costs +stmt 191 ok +stmt 230 err 1 -1 286 no such table: vocab +stmt 286 ok +stmt 431 ok +stmt 573 ok +==== amatch1-2.1 + + SELECT word, distance FROM t2 + WHERE word MATCH 'josxph' AND distance<300; +---- +stmt 0 err 1 -1 87 no such table: t2 +==== amatch1-2.2 + + SELECT word, distance FROM t3 + WHERE word MATCH 'josxph' AND distance<300; +---- +stmt 0 err 1 -1 87 no such table: t3 +==== amatch1-2.3a + + CREATE TEMP TABLE vtemp(w TEXT UNIQUE); + INSERT OR IGNORE INTO vtemp SELECT term FROM t1aux; +---- +stmt 0 ok +stmt 46 err 1 -1 104 no such table: vtemp +==== amatch1-2.3b + + SELECT word, distance FROM t4 + WHERE word MATCH 'josxph' AND distance<300; +---- +stmt 0 err 1 -1 87 no such table: t4 +==== amatch1-2.11 + + SELECT word, distance FROM t2 + WHERE word MATCH 'joxxph' AND distance<=300; +---- +stmt 0 err 1 -1 84 no such table: t2 +==== amatch1-2.12 + + SELECT word, distance FROM t3 + WHERE word MATCH 'joxxph' AND distance<=300; +---- +stmt 0 err 1 -1 84 no such table: t3 +==== amatch1-2.21 + + SELECT word, distance FROM t2 + WHERE word MATCH 'joxxph' AND distance<300; +---- +stmt 0 err 1 -1 83 no such table: t2 +==== amatch1-2.22 + + SELECT word, distance FROM t3 + WHERE word MATCH 'joxxph' AND distance<300; +---- +stmt 0 err 1 -1 83 no such table: t3 diff --git a/parser/testdata/analyze.metadata.json b/parser/testdata/analyze.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyze.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyze.test b/parser/testdata/analyze.test new file mode 100644 index 0000000..979b48d --- /dev/null +++ b/parser/testdata/analyze.test @@ -0,0 +1,326 @@ +==== analyze-1.1 + + ANALYZE no_such_table +---- +stmt 0 err 1 -1 27 no such table: no_such_table +==== analyze-1.2 + + SELECT count(*) FROM sqlite_master WHERE name='sqlite_stat1' +---- +stmt 0 ok +==== analyze-1.3 + + ANALYZE no_such_db.no_such_table +---- +stmt 0 err 1 13 38 unknown database no_such_db +==== analyze-1.4 + + SELECT count(*) FROM sqlite_master WHERE name='sqlite_stat1' +---- +stmt 0 ok +==== analyze-1.5.1 + + ANALYZE +---- +stmt 0 ok +==== analyze-1.5.2 + + PRAGMA empty_result_callbacks=1; + ANALYZE +---- +stmt 0 ok +stmt 37 ok +==== analyze-1.6 + + SELECT count(*) FROM sqlite_master WHERE name='sqlite_stat1' +---- +stmt 0 ok +==== analyze-1.6.2 + + CREATE INDEX stat1idx ON sqlite_stat1(idx); +---- +stmt 0 err 1 -1 48 no such table: main.sqlite_stat1 +==== analyze-1.6.3 + + CREATE INDEX main.stat1idx ON SQLite_stat1(idx); +---- +stmt 0 err 1 -1 53 no such table: main.SQLite_stat1 +==== analyze-1.7 + + SELECT * FROM sqlite_stat1 WHERE idx NOT NULL +---- +stmt 0 err 1 -1 51 no such table: sqlite_stat1 +==== analyze-1.8 + + ANALYZE main +---- +stmt 0 ok +==== analyze-1.9 + + SELECT * FROM sqlite_stat1 WHERE idx NOT NULL +---- +stmt 0 err 1 -1 51 no such table: sqlite_stat1 +==== analyze-1.10 + + CREATE TABLE t1(a,b); + ANALYZE main.t1; +---- +stmt 0 ok +stmt 26 err 1 -1 47 no such table: main.t1 +==== analyze-1.11 + + SELECT * FROM sqlite_stat1 +---- +stmt 0 err 1 -1 32 no such table: sqlite_stat1 +==== analyze-1.12 + + ANALYZE t1; +---- +stmt 0 err 1 -1 16 no such table: t1 +==== analyze-1.13 + + SELECT * FROM sqlite_stat1 +---- +stmt 0 err 1 -1 32 no such table: sqlite_stat1 +==== analyze-2.1 + + CREATE INDEX t1i1 ON t1(a); + ANALYZE main.t1; + SELECT * FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 32 no such table: main.t1 +stmt 32 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 98 no such table: sqlite_stat1 +==== analyze-2.2 + + CREATE INDEX t1i2 ON t1(b); + ANALYZE t1; + SELECT * FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 32 no such table: main.t1 +stmt 32 err 1 -1 48 no such table: t1 +stmt 48 err 1 -1 93 no such table: sqlite_stat1 +==== analyze-2.3 + + CREATE INDEX t1i3 ON t1(a,b); + ANALYZE main; + SELECT * FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 34 no such table: main.t1 +stmt 34 ok +stmt 52 err 1 -1 97 no such table: sqlite_stat1 +==== analyze-3.1 + + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(1,3); + ANALYZE main.t1; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 85 no such table: main.t1 +stmt 85 err 1 -1 138 no such table: sqlite_stat1 +==== analyze-3.2 + + INSERT INTO t1 VALUES(1,4); + INSERT INTO t1 VALUES(1,5); + ANALYZE t1; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 133 no such table: sqlite_stat1 +==== analyze-3.3 + + INSERT INTO t1 VALUES(2,5); + ANALYZE main; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 ok +stmt 50 err 1 -1 103 no such table: sqlite_stat1 +==== analyze-3.4 + + CREATE TABLE t2 AS SELECT * FROM t1; + CREATE INDEX t2i1 ON t2(a); + CREATE INDEX t2i2 ON t2(b); + CREATE INDEX t2i3 ON t2(a,b); + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 41 no such table: t1 +stmt 41 err 1 -1 73 no such table: main.t2 +stmt 73 err 1 -1 105 no such table: main.t2 +stmt 105 err 1 -1 139 no such table: main.t2 +stmt 139 ok +stmt 152 err 1 -1 205 no such table: sqlite_stat1 +==== analyze-3.5 + + DROP INDEX t2i3; + ANALYZE t1; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 21 no such index: t2i3 +stmt 21 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 90 no such table: sqlite_stat1 +==== analyze-3.6 + + ANALYZE t2; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 16 no such table: t2 +stmt 16 err 1 -1 69 no such table: sqlite_stat1 +==== analyze-3.7 + + DROP INDEX t2i2; + ANALYZE t2; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 21 no such index: t2i2 +stmt 21 err 1 -1 37 no such table: t2 +stmt 37 err 1 -1 90 no such table: sqlite_stat1 +==== analyze-3.8 + + CREATE TABLE t3 AS SELECT a, b, rowid AS c, 'hi' AS d FROM t1; + CREATE INDEX t3i1 ON t3(a); + CREATE INDEX t3i2 ON t3(a,b,c,d); + CREATE INDEX t3i3 ON t3(d,b,c,a); + DROP TABLE t1; + DROP TABLE t2; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 99 no such table: main.t3 +stmt 99 err 1 -1 137 no such table: main.t3 +stmt 137 err 1 -1 175 no such table: main.t3 +stmt 175 err 1 -1 194 no such table: t1 +stmt 194 err 1 -1 213 no such table: t2 +stmt 213 err 1 -1 266 no such table: sqlite_stat1 +==== analyze-3.9 + + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 ok +stmt 13 err 1 -1 66 no such table: sqlite_stat1 +==== analyze-3.11 + + DROP INDEX "foolish ' name"; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 33 no such index: foolish ' name +stmt 33 err 1 -1 86 no such table: sqlite_stat1 +==== analyze-3.11.dup1 + + DROP TABLE "silly "" name"; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; +---- +stmt 0 err 1 -1 32 no such table: silly " name +stmt 32 err 1 -1 85 no such table: sqlite_stat1 +==== analyze-5.0 + + DELETE FROM t3; + DELETE FROM t4; + INSERT INTO t3 VALUES(1,2,3,4); + INSERT INTO t3 VALUES(5,6,7,8); + INSERT INTO t3 SELECT a+8, b+8, c+8, d+8 FROM t3; + INSERT INTO t3 SELECT a+16, b+16, c+16, d+16 FROM t3; + INSERT INTO t3 SELECT a+32, b+32, c+32, d+32 FROM t3; + INSERT INTO t3 SELECT a+64, b+64, c+64, d+64 FROM t3; + INSERT INTO t4 SELECT a, b, c FROM t3; + ANALYZE; + SELECT DISTINCT idx FROM sqlite_stat1 ORDER BY 1; + SELECT DISTINCT tbl FROM sqlite_stat1 ORDER BY 1; +---- +stmt 0 err 1 -1 20 no such table: t3 +stmt 20 err 1 -1 40 no such table: t4 +stmt 40 err 1 -1 76 no such table: t3 +stmt 76 err 1 -1 112 no such table: t3 +stmt 112 err 1 -1 166 no such table: t3 +stmt 166 err 1 -1 224 no such table: t3 +stmt 224 err 1 -1 282 no such table: t3 +stmt 282 err 1 -1 340 no such table: t3 +stmt 340 err 1 -1 383 no such table: t4 +stmt 383 ok +stmt 396 err 1 -1 450 no such table: sqlite_stat1 +stmt 450 err 1 -1 504 no such table: sqlite_stat1 +==== analyze-5.1 + + SELECT DISTINCT idx FROM sqlite_stat4 ORDER BY 1; + SELECT DISTINCT tbl FROM sqlite_stat4 ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: sqlite_stat4 +stmt 56 err 1 -1 112 no such table: sqlite_stat4 +==== analyze-5.2 + + DROP INDEX t3i2; + SELECT DISTINCT idx FROM sqlite_stat1 ORDER BY 1; + SELECT DISTINCT tbl FROM sqlite_stat1 ORDER BY 1; +---- +stmt 0 err 1 -1 21 no such index: t3i2 +stmt 21 err 1 -1 75 no such table: sqlite_stat1 +stmt 75 err 1 -1 129 no such table: sqlite_stat1 +==== analyze-5.3 + + SELECT DISTINCT idx FROM sqlite_stat4 ORDER BY 1; + SELECT DISTINCT tbl FROM sqlite_stat4 ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: sqlite_stat4 +stmt 56 err 1 -1 112 no such table: sqlite_stat4 +==== analyze-5.4 + + DROP TABLE t3; + SELECT DISTINCT idx FROM sqlite_stat1 ORDER BY 1; + SELECT DISTINCT tbl FROM sqlite_stat1 ORDER BY 1; +---- +stmt 0 err 1 -1 19 no such table: t3 +stmt 19 err 1 -1 73 no such table: sqlite_stat1 +stmt 73 err 1 -1 127 no such table: sqlite_stat1 +==== analyze-5.5 + + SELECT DISTINCT idx FROM sqlite_stat4 ORDER BY 1; + SELECT DISTINCT tbl FROM sqlite_stat4 ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: sqlite_stat4 +stmt 56 err 1 -1 112 no such table: sqlite_stat4 +==== analyze-6.1 + + CREATE TABLE sqliteDemo(a); + INSERT INTO sqliteDemo(a) VALUES(1),(2),(3),(4),(5); + CREATE TABLE SQLiteDemo2(a INTEGER PRIMARY KEY AUTOINCREMENT); + INSERT INTO SQLiteDemo2 SELECT * FROM sqliteDemo; + CREATE TABLE t1(b); + INSERT INTO t1(b) SELECT a FROM sqliteDemo; + ANALYZE; + SELECT tbl FROM sqlite_stat1 WHERE idx IS NULL ORDER BY tbl; +---- +stmt 0 ok +stmt 30 err 1 -1 85 no such table: sqliteDemo +stmt 85 ok +stmt 150 err 1 -1 202 no such table: SQLiteDemo2 +stmt 202 ok +stmt 224 err 1 -1 270 no such table: t1 +stmt 270 ok +stmt 281 err 1 -1 344 no such table: sqlite_stat1 +==== analyze-7.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER); + INSERT INTO t1 VALUES(1, 7223372036854775); + INSERT INTO t1 VALUES(2, 7223372036854776); + INSERT INTO t1 VALUES(3, 7223372036854777); + CREATE INDEX i1 ON t1(b); + ANALYZE; + UPDATE sqlite_stat4 SET sample = substr(sample, 0, 4); + ANALYZE sqlite_schema; + SELECT * FROM t1 WHERE b>7223372036854775 +---- +stmt 0 ok +stmt 55 err 1 -1 103 no such table: t1 +stmt 103 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 199 no such table: t1 +stmt 199 err 1 -1 229 no such table: main.t1 +stmt 229 ok +stmt 242 err 1 -1 301 no such table: sqlite_stat4 +stmt 301 ok +stmt 328 err 1 -1 375 no such table: t1 diff --git a/parser/testdata/analyze3.metadata.json b/parser/testdata/analyze3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyze3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyze3.test b/parser/testdata/analyze3.test new file mode 100644 index 0000000..0093c34 --- /dev/null +++ b/parser/testdata/analyze3.test @@ -0,0 +1,120 @@ +==== analyze3-1.1.x + + SELECT count(*) FROM t1 WHERE x>200 AND x<300; + SELECT count(*) FROM t1 WHERE x>0 AND x<1100; +---- +stmt 0 err 1 -1 49 no such table: t1 +stmt 49 err 1 -1 97 no such table: t1 +==== analyze3-1.2.1 + + BEGIN; + CREATE TABLE t2(x TEXT, y); + INSERT INTO t2 SELECT * FROM t1; + CREATE INDEX i2 ON t2(x); + COMMIT; + ANALYZE; +---- +stmt 0 ok +stmt 11 ok +stmt 45 err 1 -1 84 no such table: t2 +stmt 84 err 1 -1 116 no such table: main.t2 +stmt 116 ok +stmt 128 ok +==== analyze3-2.1.x + + SELECT count(*) FROM t2 WHERE x>1 AND x<2; + SELECT count(*) FROM t2 WHERE x>0 AND x<99; +---- +stmt 0 err 1 -1 45 no such table: t2 +stmt 45 err 1 -1 91 no such table: t2 +==== analyze3-1.3.1 + + BEGIN; + CREATE TABLE t3(y TEXT, x INTEGER); + INSERT INTO t3 SELECT y, x FROM t1; + CREATE INDEX i3 ON t3(x); + COMMIT; + ANALYZE; +---- +stmt 0 ok +stmt 11 ok +stmt 53 err 1 -1 95 no such table: t3 +stmt 95 err 1 -1 127 no such table: main.t3 +stmt 127 ok +stmt 139 ok +==== analyze3-1.3.x + + SELECT count(*) FROM t3 WHERE x>200 AND x<300; + SELECT count(*) FROM t3 WHERE x>0 AND x<1100 +---- +stmt 0 err 1 -1 49 no such table: t3 +stmt 49 err 1 -1 97 no such table: t3 +==== analyze3-3.8.1 + + CREATE TABLE t4(x, y TEXT COLLATE NOCASE); + CREATE INDEX i4 ON t4(y); +---- +stmt 0 ok +stmt 47 err 1 -1 77 no such table: main.t4 +==== analyze-7.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + INSERT INTO t1 VALUES(1,1,'0000'); + CREATE INDEX t0b ON t1(b); + ANALYZE; + SELECT c FROM t1 WHERE b=3 AND a BETWEEN 30 AND hex(1); +---- +stmt 0 ok +stmt 27 ok +stmt 75 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 141 no such table: main.t1 +stmt 141 ok +stmt 152 err 1 -1 210 no such table: t1 +==== 7.2 + + CREATE TABLE t1(a,b,c); + CREATE INDEX t1a ON t1(a); + ANALYZE; + SELECT * FROM sqlite_stat1; + INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES('t1','t1a','12000'); + INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES('t1','t1a','12000'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 26 err 1 -1 55 no such table: main.t1 +stmt 55 ok +stmt 66 err 1 -1 96 no such table: sqlite_stat1 +stmt 96 err 1 -1 165 no such table: sqlite_stat1 +stmt 165 err 1 -1 234 no such table: sqlite_stat1 +stmt 234 ok +==== 8.0 + + CREATE TABLE t1(a PRIMARY KEY, v) WITHOUT ROWID; + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat1 VALUES('t1','t1','1 1'); + INSERT INTO sqlite_stat4 VALUES('t1','t1','1','0','0',X'021b76657273696f6e'); + INSERT INTO sqlite_stat4 VALUES('T1','T1','1','0','0',X'021b76657273696f6e'); + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 51 ok +stmt 76 err 1 -1 128 no such table: sqlite_stat1 +stmt 128 err 1 -1 208 no such table: sqlite_stat4 +stmt 208 err 1 -1 288 no such table: sqlite_stat4 +stmt 288 ok +==== 8.1 + + CREATE TABLE t1(a INT PRIMARY KEY, b INT) WITHOUT ROWID; + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat4 VALUES + ('t1','t1','1','2','2',X'03000103'), + ('t1','sqlite_autoindex_t1_1','1','2','2',X'03000103'); + ANALYZE sqlite_schema; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 59 ok +stmt 84 err 1 -1 221 no such table: sqlite_stat4 +stmt 221 ok +stmt 246 ok diff --git a/parser/testdata/analyze7.metadata.json b/parser/testdata/analyze7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyze7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyze7.test b/parser/testdata/analyze7.test new file mode 100644 index 0000000..11368bb --- /dev/null +++ b/parser/testdata/analyze7.test @@ -0,0 +1,52 @@ +==== analyze7-1.1 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== analyze7-1.2 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== analyze7-2.1 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== analyze7-2.2 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== analyze7-2.3 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND b=123 +---- +stmt 0 err 1 -1 58 no such table: t1 +==== analyze7-3.1 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== analyze7-3.2.1 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=?; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== analyze7-3.2.2 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== analyze7-3.2.3 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== analyze7-3.3 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND b=123 +---- +stmt 0 err 1 -1 58 no such table: t1 +==== analyze7-3.4 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=123 AND b=123 +---- +stmt 0 err 1 -1 58 no such table: t1 +==== analyze7-3.5 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND c=123 +---- +stmt 0 err 1 -1 58 no such table: t1 +==== analyze7-3.6 +EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=123 AND d=123 AND b=123 +---- +stmt 0 err 1 -1 68 no such table: t1 diff --git a/parser/testdata/analyze8.metadata.json b/parser/testdata/analyze8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyze8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyze8.test b/parser/testdata/analyze8.test new file mode 100644 index 0000000..27fb376 --- /dev/null +++ b/parser/testdata/analyze8.test @@ -0,0 +1,9 @@ +==== 3.0 + + SELECT count(*) FROM t1 WHERE b BETWEEN 30 AND 34; + SELECT count(*) FROM t1 WHERE c BETWEEN 0 AND 100000; + SELECT count(*) FROM t1 WHERE c BETWEEN 800000 AND 900000; +---- +stmt 0 err 1 -1 53 no such table: t1 +stmt 53 err 1 -1 109 no such table: t1 +stmt 109 err 1 -1 170 no such table: t1 diff --git a/parser/testdata/analyze9.metadata.json b/parser/testdata/analyze9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyze9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyze9.test b/parser/testdata/analyze9.test new file mode 100644 index 0000000..f89d141 --- /dev/null +++ b/parser/testdata/analyze9.test @@ -0,0 +1,567 @@ +==== 1.0 + + CREATE TABLE t1(a TEXT, b TEXT); + INSERT INTO t1 VALUES('(0)', '(0)'); + INSERT INTO t1 VALUES('(1)', '(1)'); + INSERT INTO t1 VALUES('(2)', '(2)'); + INSERT INTO t1 VALUES('(3)', '(3)'); + INSERT INTO t1 VALUES('(4)', '(4)'); + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 35 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 114 no such table: t1 +stmt 114 err 1 -1 153 no such table: t1 +stmt 153 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 231 no such table: t1 +stmt 231 err 1 -1 262 no such table: main.t1 +==== 1.1 + + ANALYZE; +---- +stmt 0 ok +==== 1.2 + + SELECT tbl,idx,nEq,nLt,nDLt,test_decode(sample) FROM sqlite_stat4; +---- +stmt 0 err 1 -1 69 no such table: sqlite_stat4 +==== 1.3 + + SELECT tbl,idx,nEq,nLt,nDLt,s(sample) FROM sqlite_stat4; +---- +stmt 0 err 1 -1 61 no such table: sqlite_stat4 +==== 2.1 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES('some text', 14, NULL); + INSERT INTO t1 VALUES(22.0, NULL, x'656667'); + CREATE INDEX i1 ON t1(a, b, c); + ANALYZE; + SELECT test_decode(sample) FROM sqlite_stat4; +---- +stmt 0 ok +stmt 28 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 158 no such table: main.t1 +stmt 158 ok +stmt 169 err 1 -1 217 no such table: sqlite_stat4 +==== 3.1 + + CREATE TABLE t2(a, b); + CREATE INDEX i2 ON t2(a, b); + BEGIN; +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t2 +stmt 56 ok +==== 3.3.1 + + SELECT count(*) FROM t2 GROUP BY a; +---- +stmt 0 err 1 -1 38 no such table: t2 +==== 3.3.2 + + ANALYZE; + SELECT lindex(nEq, 0) FROM sqlite_stat4; +---- +stmt 0 ok +stmt 11 err 1 -1 54 no such table: sqlite_stat4 +==== 3.4 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + INSERT INTO t1 VALUES(1, 1, 'one-a'); + INSERT INTO t1 VALUES(11, 1, 'one-b'); + INSERT INTO t1 VALUES(21, 1, 'one-c'); + INSERT INTO t1 VALUES(31, 1, 'one-d'); + INSERT INTO t1 VALUES(41, 1, 'one-e'); + INSERT INTO t1 VALUES(51, 1, 'one-f'); + INSERT INTO t1 VALUES(61, 1, 'one-g'); + INSERT INTO t1 VALUES(71, 1, 'one-h'); + INSERT INTO t1 VALUES(81, 1, 'one-i'); + INSERT INTO t1 VALUES(91, 1, 'one-j'); + INSERT INTO t1 SELECT a+1,2,'two' || substr(c,4) FROM t1; + INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 WHERE c GLOB 'one-*'; + INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE c GLOB 'one-*'; + INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE c GLOB 'one-*'; + INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c GLOB 'one-*'; + CREATE INDEX t1b ON t1(b); + ANALYZE; + SELECT c FROM t1 WHERE b=3 AND a BETWEEN 30 AND 60; +---- +stmt 0 ok +stmt 27 ok +stmt 75 err 1 -1 115 no such table: t1 +stmt 115 err 1 -1 156 no such table: t1 +stmt 156 err 1 -1 197 no such table: t1 +stmt 197 err 1 -1 238 no such table: t1 +stmt 238 err 1 -1 279 no such table: t1 +stmt 279 err 1 -1 320 no such table: t1 +stmt 320 err 1 -1 361 no such table: t1 +stmt 361 err 1 -1 402 no such table: t1 +stmt 402 err 1 -1 443 no such table: t1 +stmt 443 err 1 -1 484 no such table: t1 +stmt 484 err 1 -1 544 no such table: t1 +stmt 544 err 1 -1 625 no such table: t1 +stmt 625 err 1 -1 705 no such table: t1 +stmt 705 err 1 -1 785 no such table: t1 +stmt 785 err 1 -1 864 no such table: t1 +stmt 864 err 1 -1 894 no such table: main.t1 +stmt 894 ok +stmt 905 err 1 -1 959 no such table: t1 +==== 4.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a, b, c); + CREATE INDEX i1 ON t1(c, b, a); +---- +stmt 0 ok +stmt 27 ok +stmt 55 err 1 -1 89 no such table: main.t1 +==== 4.2 + + SELECT + neq, + lrange(nlt, 0, 2), + lrange(ndlt, 0, 2), + lrange(test_decode(sample), 0, 2) + FROM sqlite_stat4 + ORDER BY rowid LIMIT 16; +---- +stmt 0 err 1 -1 153 no such table: sqlite_stat4 +==== 4.3 + + SELECT + neq, + lrange(nlt, 0, 2), + lrange(ndlt, 0, 2), + lrange(test_decode(sample), 0, 1) + FROM sqlite_stat4 + ORDER BY rowid DESC LIMIT 2; +---- +stmt 0 err 1 -1 157 no such table: sqlite_stat4 +==== 4.4 + SELECT count(DISTINCT c) FROM t1 WHERE c<201 +---- +stmt 0 err 1 -1 46 no such table: t1 +==== 4.5 + SELECT count(DISTINCT c) FROM t1 WHERE c<200 +---- +stmt 0 err 1 -1 46 no such table: t1 +==== 4.6 + + SELECT count(*) FROM sqlite_stat4 + WHERE lindex(test_decode(sample), 3) IN + ('34', '68', '102', '136', '170', '204', '238', '272') +---- +stmt 0 err 1 -1 139 no such table: sqlite_stat4 +==== 4.8 + + SELECT test_decode(sample) FROM sqlite_stat4; +---- +stmt 0 err 1 -1 48 no such table: sqlite_stat4 +==== 5.1 + + PRAGMA encoding = 'utf-16'; + CREATE TABLE t0(v); + ANALYZE; +---- +stmt 0 ok +stmt 30 ok +stmt 52 ok +==== 6.1 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); + INSERT INTO t1 VALUES(1, 1); + INSERT INTO t1 VALUES(2, 2); + INSERT INTO t1 VALUES(3, 3); + INSERT INTO t1 VALUES(4, 4); + INSERT INTO t1 VALUES(5, 5); + ANALYZE; + PRAGMA writable_schema = 1; + CREATE TEMP TABLE x1 AS + SELECT tbl,idx,neq,nlt,ndlt,sample FROM sqlite_stat4 + ORDER BY (rowid%5), rowid; + DELETE FROM sqlite_stat4; + INSERT INTO sqlite_stat4 SELECT * FROM x1; + PRAGMA writable_schema = 0; + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 81 no such table: main.t1 +stmt 81 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 143 no such table: t1 +stmt 143 err 1 -1 174 no such table: t1 +stmt 174 err 1 -1 205 no such table: t1 +stmt 205 err 1 -1 236 no such table: t1 +stmt 236 ok +stmt 247 ok +stmt 277 err 1 -1 391 no such table: sqlite_stat4 +stmt 391 err 1 -1 419 no such table: sqlite_stat4 +stmt 419 err 1 -1 464 no such table: sqlite_stat4 +stmt 464 ok +stmt 494 ok +==== 6.2 + + SELECT * FROM t1 WHERE a = 'abc'; +---- +stmt 0 err 1 -1 36 no such table: t1 +==== 7.1 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + INSERT INTO t1 VALUES(1, 1); + INSERT INTO t1 VALUES(2, 2); + INSERT INTO t1 VALUES(3, 3); + INSERT INTO t1 VALUES(4, 4); + INSERT INTO t1 VALUES(5, 5); + ANALYZE; + UPDATE sqlite_stat4 SET sample = X'' WHERE rowid = 1; + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t1 +stmt 56 err 1 -1 87 no such table: t1 +stmt 87 err 1 -1 118 no such table: t1 +stmt 118 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 180 no such table: t1 +stmt 180 err 1 -1 211 no such table: t1 +stmt 211 ok +stmt 222 err 1 -1 278 no such table: sqlite_stat4 +stmt 278 ok +==== 7.2 + + UPDATE sqlite_stat4 SET sample = X'FFFF'; + ANALYZE sqlite_master; + SELECT * FROM t1 WHERE a = 1; +---- +stmt 0 err 1 -1 44 no such table: sqlite_stat4 +stmt 44 ok +stmt 69 err 1 -1 101 no such table: t1 +==== 7.3 + + ANALYZE; + UPDATE sqlite_stat4 SET neq = '0 0 0'; + ANALYZE sqlite_master; + SELECT * FROM t1 WHERE a = 1; +---- +stmt 0 ok +stmt 11 err 1 -1 52 no such table: sqlite_stat4 +stmt 52 ok +stmt 77 err 1 -1 109 no such table: t1 +==== 7.4 + + ANALYZE; + UPDATE sqlite_stat4 SET ndlt = '0 0 0'; + ANALYZE sqlite_master; + SELECT * FROM t1 WHERE a = 3; +---- +stmt 0 ok +stmt 11 err 1 -1 53 no such table: sqlite_stat4 +stmt 53 ok +stmt 78 err 1 -1 110 no such table: t1 +==== 7.5 + + ANALYZE; + UPDATE sqlite_stat4 SET nlt = '0 0 0'; + ANALYZE sqlite_master; + SELECT * FROM t1 WHERE a = 5; +---- +stmt 0 ok +stmt 11 err 1 -1 52 no such table: sqlite_stat4 +stmt 52 ok +stmt 77 err 1 -1 109 no such table: t1 +==== 8.1 + + CREATE TABLE t1(x TEXT); + CREATE INDEX i1 ON t1(x); + INSERT INTO t1 VALUES('1'); + INSERT INTO t1 VALUES('2'); + INSERT INTO t1 VALUES('3'); + INSERT INTO t1 VALUES('4'); + ANALYZE; +---- +stmt 0 ok +stmt 27 err 1 -1 55 no such table: main.t1 +stmt 55 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 115 no such table: t1 +stmt 115 err 1 -1 145 no such table: t1 +stmt 145 err 1 -1 175 no such table: t1 +stmt 175 ok +==== 8.2 + + SELECT * FROM t1 WHERE x = 3; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 9.1 + + CREATE TABLE t1(a, b, c, d, e); + CREATE INDEX i1 ON t1(a, b, c, d); + CREATE INDEX i2 ON t1(e); +---- +stmt 0 ok +stmt 34 err 1 -1 71 no such table: main.t1 +stmt 71 err 1 -1 99 no such table: main.t1 +==== 10.1.1 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(a, b); + CREATE INDEX t3a ON t3(a); + CREATE INDEX t3b ON t3(b); +---- +stmt 0 ok +stmt 27 ok +stmt 52 err 1 -1 81 no such table: main.t3 +stmt 81 err 1 -1 110 no such table: main.t3 +==== 10.2.1 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(x, a, b); + CREATE INDEX t3a ON t3(x, a); + CREATE INDEX t3b ON t3(x, b); +---- +stmt 0 ok +stmt 27 ok +stmt 55 err 1 -1 87 no such table: main.t3 +stmt 87 err 1 -1 119 no such table: main.t3 +==== 14.4.3 + + SELECT lrange(test_decode(sample), 0, 1) AS s FROM sqlite_stat4 + WHERE lindex(s, 1)=='1' ORDER BY rowid +---- +stmt 0 err 1 -1 108 no such table: sqlite_stat4 +==== 15.1 + + CREATE TABLE x1(a, b, UNIQUE(a, b)); + INSERT INTO x1 VALUES(1, 2); + INSERT INTO x1 VALUES(3, 4); + INSERT INTO x1 VALUES(5, 6); + ANALYZE; + INSERT INTO sqlite_stat4 VALUES(NULL, NULL, NULL, NULL, NULL, NULL); +---- +stmt 0 ok +stmt 39 err 1 -1 70 no such table: x1 +stmt 70 err 1 -1 101 no such table: x1 +stmt 101 err 1 -1 132 no such table: x1 +stmt 132 ok +stmt 143 err 1 -1 214 no such table: sqlite_stat4 +==== 15.2 + SELECT * FROM x1 +---- +stmt 0 err 1 -1 18 no such table: x1 +==== 15.3 + + INSERT INTO sqlite_stat4 VALUES(42, 42, 42, 42, 42, 42); +---- +stmt 0 err 1 -1 59 no such table: sqlite_stat4 +==== 15.4 + SELECT * FROM x1 +---- +stmt 0 err 1 -1 18 no such table: x1 +==== 15.5 + + UPDATE sqlite_stat1 SET stat = NULL; +---- +stmt 0 err 1 -1 39 no such table: sqlite_stat1 +==== 15.6 + SELECT * FROM x1 +---- +stmt 0 err 1 -1 18 no such table: x1 +==== 15.7 + + ANALYZE; + UPDATE sqlite_stat1 SET tbl = 'no such tbl'; +---- +stmt 0 ok +stmt 11 err 1 -1 58 no such table: sqlite_stat1 +==== 15.8 + SELECT * FROM x1 +---- +stmt 0 err 1 -1 18 no such table: x1 +==== 15.9 + + ANALYZE; + UPDATE sqlite_stat4 SET neq = NULL, nlt=NULL, ndlt=NULL; +---- +stmt 0 ok +stmt 11 err 1 -1 70 no such table: sqlite_stat4 +==== 15.10 + SELECT * FROM x1 +---- +stmt 0 err 1 -1 18 no such table: x1 +==== 15.11 + + ANALYZE; + UPDATE sqlite_stat1 SET stat = stat || ' unordered'; +---- +stmt 0 ok +stmt 11 err 1 -1 66 no such table: sqlite_stat1 +==== 15.12 + SELECT * FROM x1 +---- +stmt 0 err 1 -1 18 no such table: x1 +==== 17.1.2 + + ANALYZE temp.t1; +---- +stmt 0 err 1 -1 19 no such table: temp.t1 +==== 17.4 + + CREATE INDEX i2 ON t1(c, d); + ANALYZE main.i2; +---- +stmt 0 err 1 -1 31 no such table: main.t1 +stmt 31 err 1 -1 50 no such table: main.i2 +==== 20.2 + ANALYZE +---- +stmt 0 ok +==== 21.0 + + CREATE TABLE t2(a, b); + CREATE INDEX i2 ON t2(a); +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: main.t2 +==== 22.0 + + CREATE TABLE t3(a, b, c, d, PRIMARY KEY(a, b)) WITHOUT ROWID; + SELECT * FROM t3; +---- +stmt 0 ok +stmt 64 err 1 -1 84 no such table: t3 +==== 22.1 + + WITH r(x) AS ( + SELECT 1 + UNION ALL + SELECT x+1 FROM r WHERE x<=100 + ) + + INSERT INTO t3 SELECT + CASE WHEN (x>45 AND x<96) THEN 'B' ELSE 'A' END, /* Column "a" */ + x, /* Column "b" */ + CASE WHEN (x<51) THEN 'one' ELSE 'two' END, /* Column "c" */ + x /* Column "d" */ + FROM r; + + CREATE INDEX i3 ON t3(c); + CREATE INDEX i4 ON t3(d); + ANALYZE; +---- +stmt 0 err 1 -1 402 no such table: t3 +stmt 402 err 1 -1 431 no such table: main.t3 +stmt 431 err 1 -1 459 no such table: main.t3 +stmt 459 ok +==== 23.0 + + CREATE TABLE t4( + a COLLATE nocase, b, c, + d, e, f, + PRIMARY KEY(c, b, a) + ) WITHOUT ROWID; + CREATE INDEX i41 ON t4(e); + CREATE INDEX i42 ON t4(f); + + WITH data(a, b, c, d, e, f) AS ( + SELECT int_to_char(0), 'xyz', 'zyx', '*', 0, 0 + UNION ALL + SELECT + int_to_char(f+1), b, c, d, (e+1) % 2, f+1 + FROM data WHERE f<1024 + ) + INSERT INTO t4 SELECT a, b, c, d, e, f FROM data; + ANALYZE; +---- +stmt 0 ok +stmt 106 err 1 -1 135 no such table: main.t4 +stmt 135 err 1 -1 164 no such table: main.t4 +stmt 164 err 1 -1 408 no such table: t4 +stmt 408 ok +==== 24.0 + + CREATE TABLE t5(c, d, b, e, a, PRIMARY KEY(a, b, c)) WITHOUT ROWID; + WITH data(a, b, c, d, e) AS ( + SELECT 'z', 'y', 0, 0, 0 + UNION ALL + SELECT + a, CASE WHEN b='y' THEN 'n' ELSE 'y' END, c+1, e/250, e+1 + FROM data + WHERE e<1000 + ) + INSERT INTO t5(a, b, c, d, e) SELECT * FROM data; + CREATE INDEX t5d ON t5(d); + CREATE INDEX t5e ON t5(e); + ANALYZE; +---- +stmt 0 ok +stmt 70 err 1 -1 309 no such table: t5 +stmt 309 err 1 -1 338 no such table: main.t5 +stmt 338 err 1 -1 367 no such table: main.t5 +stmt 367 ok +==== 25.1 + + CREATE TABLE t6(a, b); + WITH ints(i,j) AS ( + SELECT 1,1 UNION ALL SELECT i+1,j+1 FROM ints WHERE i<100 + ) INSERT INTO t6 SELECT * FROM ints; + CREATE INDEX aa ON t6(a); + CREATE INDEX bb ON t6(b); + ANALYZE; +---- +stmt 0 ok +stmt 27 err 1 -1 156 no such table: t6 +stmt 156 err 1 -1 186 no such table: main.t6 +stmt 186 err 1 -1 216 no such table: main.t6 +stmt 216 ok +==== 26.1.2 + + SELECT count(*) FROM t1 WHERE x = 10000 AND y < 50; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 26.1.3 + + SELECT count(*) FROM t1 WHERE z = 444; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 26.2.1 + + BEGIN; + CREATE TABLE t1(x, y, z); + CREATE INDEX i1 ON t1(x, y); + CREATE INDEX i2 ON t1(z); + + WITH + cnt(y) AS (SELECT 0 UNION ALL SELECT y+1 FROM cnt WHERE y<99), + letters(x) AS ( + SELECT 'A' UNION SELECT 'B' UNION SELECT 'C' UNION SELECT 'D' + ) + INSERT INTO t1(x, y) SELECT x, y FROM letters, cnt; + + WITH + letters(x) AS ( + SELECT 'A' UNION SELECT 'B' UNION SELECT 'C' UNION SELECT 'D' + ) + INSERT INTO t1(x, y) SELECT x, 70 FROM letters; + + WITH + cnt(i) AS (SELECT 0 UNION ALL SELECT i+1 FROM cnt WHERE i<9999) + INSERT INTO t1(x, y) SELECT i, i FROM cnt; + + UPDATE t1 SET z = (rowid / 95); + ANALYZE; + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 39 err 1 -1 72 no such table: main.t1 +stmt 72 err 1 -1 102 no such table: main.t1 +stmt 102 err 1 -1 332 no such table: t1 +stmt 332 err 1 -1 490 no such table: t1 +stmt 490 err 1 -1 617 no such table: t1 +stmt 617 err 1 -1 656 no such table: t1 +stmt 656 ok +stmt 669 ok diff --git a/parser/testdata/analyzeC.metadata.json b/parser/testdata/analyzeC.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyzeC.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyzeC.test b/parser/testdata/analyzeC.test new file mode 100644 index 0000000..f7f802f --- /dev/null +++ b/parser/testdata/analyzeC.test @@ -0,0 +1,204 @@ +==== 1.0 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1(a,b,c) + VALUES(1,2,3),(7,8,9),(4,5,6),(10,11,12),(4,8,12),(1,11,111); + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1b ON t1(b); + ANALYZE; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1(tbl,idx,stat) + VALUES('t1','t1a','12345 2'),('t1','t1b','12345 4'); + ANALYZE sqlite_master; + SELECT *, '#' FROM t1 WHERE a BETWEEN 3 AND 8 ORDER BY c; +---- +stmt 0 ok +stmt 26 err 1 -1 116 no such table: t1 +stmt 116 err 1 -1 145 no such table: main.t1 +stmt 145 err 1 -1 174 no such table: main.t1 +stmt 174 ok +stmt 185 err 1 -1 213 no such table: sqlite_stat1 +stmt 213 err 1 -1 311 no such table: sqlite_stat1 +stmt 311 ok +stmt 336 err 1 -1 396 no such table: t1 +==== 1.1 + + EXPLAIN QUERY PLAN + SELECT *, '#' FROM t1 WHERE a BETWEEN 3 AND 8 ORDER BY c; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== 1.2 + + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 1.3 + + EXPLAIN QUERY PLAN + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== 1.3x + + EXPLAIN QUERY PLAN + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== 2.0 + + UPDATE sqlite_stat1 SET stat='12345 2 unordered' WHERE idx='t1a'; + ANALYZE sqlite_master; + SELECT *, '#' FROM t1 WHERE a BETWEEN 3 AND 8 ORDER BY c; +---- +stmt 0 err 1 -1 68 no such table: sqlite_stat1 +stmt 68 ok +stmt 93 err 1 -1 153 no such table: t1 +==== 2.1 + + EXPLAIN QUERY PLAN + SELECT *, '#' FROM t1 WHERE a BETWEEN 3 AND 8 ORDER BY c; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== 2.2 + + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 2.3 + + EXPLAIN QUERY PLAN + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== 2.3x + + EXPLAIN QUERY PLAN + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== 3.0 + + UPDATE sqlite_stat1 SET stat='12345 2 whatever=5 unordered xyzzy=11' + WHERE idx='t1a'; + ANALYZE sqlite_master; + SELECT *, '#' FROM t1 WHERE a BETWEEN 3 AND 8 ORDER BY c; +---- +stmt 0 err 1 -1 91 no such table: sqlite_stat1 +stmt 91 ok +stmt 116 err 1 -1 176 no such table: t1 +==== 3.1 + + EXPLAIN QUERY PLAN + SELECT *, '#' FROM t1 WHERE a BETWEEN 3 AND 8 ORDER BY c; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== 3.2 + + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 3.3 + + EXPLAIN QUERY PLAN + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== 3.3x + + EXPLAIN QUERY PLAN + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== 4.0 + + DROP INDEX t1a; + CREATE INDEX t1ab ON t1(a,b); + CREATE INDEX t1ca ON t1(c,a); + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1(tbl,idx,stat) + VALUES('t1','t1ab','12345 3 2 sz=10'),('t1','t1ca','12345 3 2 sz=20'); + ANALYZE sqlite_master; + SELECT count(a) FROM t1; +---- +stmt 0 err 1 -1 18 no such index: t1a +stmt 18 err 1 -1 50 no such table: main.t1 +stmt 50 err 1 -1 82 no such table: main.t1 +stmt 82 err 1 -1 110 no such table: sqlite_stat1 +stmt 110 err 1 -1 226 no such table: sqlite_stat1 +stmt 226 ok +stmt 251 err 1 -1 278 no such table: t1 +==== 4.1 + + EXPLAIN QUERY PLAN + SELECT count(a) FROM t1; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 4.2 + + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1(tbl,idx,stat) + VALUES('t1','t1ab','12345 3 2 sz=20'),('t1','t1ca','12345 3 2 sz=10'); + ANALYZE sqlite_master; + SELECT count(a) FROM t1; +---- +stmt 0 err 1 -1 28 no such table: sqlite_stat1 +stmt 28 err 1 -1 144 no such table: sqlite_stat1 +stmt 144 ok +stmt 169 err 1 -1 196 no such table: t1 +==== 4.3 + + EXPLAIN QUERY PLAN + SELECT count(a) FROM t1; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 4.4 + + DROP TABLE IF EXISTS t44; + CREATE TABLE t44(a PRIMARY KEY); + INSERT INTO sqlite_stat1 VALUES('t44',null,'sz=0'); + ANALYZE sqlite_master; + SELECT 0 FROM t44 WHERE a IN(1,2,3); +---- +stmt 0 ok +stmt 28 ok +stmt 63 err 1 -1 117 no such table: sqlite_stat1 +stmt 117 ok +stmt 142 err 1 -1 181 no such table: t44 +==== 5.0 + + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1(tbl,idx,stat) + VALUES('t1','t1ab','12345 3 2 x=5 sz=10 y=10'), + ('t1','t1ca','12345 3 2 whatever sz=20 junk'); + ANALYZE sqlite_master; + SELECT count(a) FROM t1; +---- +stmt 0 err 1 -1 28 no such table: sqlite_stat1 +stmt 28 err 1 -1 178 no such table: sqlite_stat1 +stmt 178 ok +stmt 203 err 1 -1 230 no such table: t1 +==== 5.1 + + EXPLAIN QUERY PLAN + SELECT count(a) FROM t1; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 5.2 + + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1(tbl,idx,stat) + VALUES('t1','t1ca','12345 3 2 x=5 sz=10 y=10'), + ('t1','t1ab','12345 3 2 whatever sz=20 junk'); + ANALYZE sqlite_master; + SELECT count(a) FROM t1; +---- +stmt 0 err 1 -1 28 no such table: sqlite_stat1 +stmt 28 err 1 -1 178 no such table: sqlite_stat1 +stmt 178 ok +stmt 203 err 1 -1 230 no such table: t1 +==== 5.3 + + EXPLAIN QUERY PLAN + SELECT count(a) FROM t1; +---- +stmt 0 err 1 -1 48 no such table: t1 diff --git a/parser/testdata/analyzeD.metadata.json b/parser/testdata/analyzeD.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyzeD.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyzeD.test b/parser/testdata/analyzeD.test new file mode 100644 index 0000000..92195f9 --- /dev/null +++ b/parser/testdata/analyzeD.test @@ -0,0 +1,12 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); +---- +stmt 0 ok +==== 1.5 + + UPDATE t1 SET a=13 WHERE a = 3001; + ANALYZE; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 ok diff --git a/parser/testdata/analyzeE.metadata.json b/parser/testdata/analyzeE.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyzeE.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyzeE.test b/parser/testdata/analyzeE.test new file mode 100644 index 0000000..70515bc --- /dev/null +++ b/parser/testdata/analyzeE.test @@ -0,0 +1,377 @@ +==== analyzeE-1.0 + + CREATE TABLE t1(a,b); + WITH RECURSIVE + cnt(x) AS (VALUES(1000) UNION ALL SELECT x+1 FROM cnt WHERE x<2000) + INSERT INTO t1(a,b) SELECT x, x FROM cnt; + CREATE INDEX t1a ON t1(a); + ANALYZE; +---- +stmt 0 ok +stmt 24 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 186 no such table: main.t1 +stmt 186 ok +==== analyzeE-1.1 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 500 AND 2500; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== analyzeE-1.2 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 2900 AND 3000; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== analyzeE-1.3 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 1700 AND 1750; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== analyzeE-1.4 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 1 AND 500 +---- +stmt 0 err 1 -1 67 no such table: t1 +==== analyzeE-1.5 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 3000 AND 3000000 +---- +stmt 0 err 1 -1 74 no such table: t1 +==== analyzeE-1.6 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<500 +---- +stmt 0 err 1 -1 53 no such table: t1 +==== analyzeE-1.7 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>2500 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-1.8 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>1900 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-1.9 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>1100 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-1.10 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<1100 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-1.11 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<1900 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-2.0 + + DROP INDEX t1a; + CREATE INDEX t1a ON t1(a DESC); + ANALYZE; +---- +stmt 0 err 1 -1 18 no such index: t1a +stmt 18 err 1 -1 52 no such table: main.t1 +stmt 52 ok +==== analyzeE-2.1 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 500 AND 2500; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== analyzeE-2.2 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 2900 AND 3000; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== analyzeE-2.3 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 1700 AND 1750; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== analyzeE-2.4 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 1 AND 500 +---- +stmt 0 err 1 -1 67 no such table: t1 +==== analyzeE-2.5 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 3000 AND 3000000 +---- +stmt 0 err 1 -1 74 no such table: t1 +==== analyzeE-2.6 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<500 +---- +stmt 0 err 1 -1 53 no such table: t1 +==== analyzeE-2.7 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>2500 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-2.8 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>1900 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-2.9 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>1100 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-2.10 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<1100 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-2.11 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<1900 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== analyzeE-3.0 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c); + WITH RECURSIVE + cnt(x) AS (VALUES(1000) UNION ALL SELECT x+1 FROM cnt WHERE x<2000) + INSERT INTO t1(a,b,c) SELECT x, x, 123 FROM cnt; + CREATE INDEX t1ca ON t1(c,a); + ANALYZE; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 43 err 1 -1 183 no such table: t1 +stmt 183 err 1 -1 215 no such table: main.t1 +stmt 215 ok +==== analyzeE-3.1 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 500 AND 2500 AND c=123; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== analyzeE-3.2 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 2900 AND 3000 AND c=123; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== analyzeE-3.3 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 1700 AND 1750 AND c=123; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== analyzeE-3.4 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 1 AND 500 AND c=123 +---- +stmt 0 err 1 -1 77 no such table: t1 +==== analyzeE-3.5 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 3000 AND 3000000 AND c=123 +---- +stmt 0 err 1 -1 84 no such table: t1 +==== analyzeE-3.6 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<500 AND c=123 +---- +stmt 0 err 1 -1 63 no such table: t1 +==== analyzeE-3.7 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>2500 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-3.8 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>1900 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-3.9 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>1100 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-3.10 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<1100 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-3.11 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<1900 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-4.0 + + DROP INDEX t1ca; + CREATE INDEX t1ca ON t1(c ASC,a DESC); + ANALYZE; +---- +stmt 0 err 1 -1 19 no such index: t1ca +stmt 19 err 1 -1 60 no such table: main.t1 +stmt 60 ok +==== analyzeE-4.1 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 500 AND 2500 AND c=123; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== analyzeE-4.2 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 2900 AND 3000 AND c=123; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== analyzeE-4.3 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 1700 AND 1750 AND c=123; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== analyzeE-4.4 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 1 AND 500 AND c=123 +---- +stmt 0 err 1 -1 77 no such table: t1 +==== analyzeE-4.5 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a BETWEEN 3000 AND 3000000 AND c=123 +---- +stmt 0 err 1 -1 84 no such table: t1 +==== analyzeE-4.6 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<500 AND c=123 +---- +stmt 0 err 1 -1 63 no such table: t1 +==== analyzeE-4.7 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>2500 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-4.8 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>1900 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-4.9 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a>1100 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-4.10 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<1100 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-4.11 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a<1900 AND c=123 +---- +stmt 0 err 1 -1 64 no such table: t1 +==== analyzeE-5.0 + + PRAGMA encoding = 'UTF-16'; + CREATE TABLE t0 (c1 TEXT); + INSERT INTO t0 VALUES (''); + CREATE INDEX i0 ON t0(c1); + ANALYZE; + SELECT * FROM t0 WHERE t0.c1 BETWEEN '' AND (ABS('')); +---- +stmt 0 ok +stmt 30 ok +stmt 59 err 1 -1 89 no such table: t0 +stmt 89 err 1 -1 118 no such table: main.t0 +stmt 118 ok +stmt 129 err 1 -1 186 no such table: t0 +==== analyzeE-6.0 + + CREATE TABLE t1(x); + CREATE INDEX i1 ON t1(x,x,x,x,x||2); + CREATE INDEX i2 ON t1(1<2); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000) + INSERT INTO t1(x) SELECT x FROM c; + ANALYZE; +---- +stmt 0 ok +stmt 22 err 1 -1 61 no such table: main.t1 +stmt 61 err 1 -1 91 no such table: main.t1 +stmt 91 err 1 -1 208 no such table: t1 +stmt 208 ok +==== analyzeE-6.1 + + SELECT count(*)>1 FROM sqlite_stat4 WHERE idx='i2' AND neq='1000 1'; +---- +stmt 0 err 1 -1 71 no such table: sqlite_stat4 +==== analyzeE-6.2 + + SELECT count(*) FROM sqlite_stat4 WHERE idx='i2' AND neq<>'1000 1'; +---- +stmt 0 err 1 -1 70 no such table: sqlite_stat4 +==== analyzeE-6.3 + + SELECT count(*)>1 FROM sqlite_stat4 WHERE idx='i1' AND neq='1 1 1 1 1 1'; +---- +stmt 0 err 1 -1 76 no such table: sqlite_stat4 +==== analyzeE-6.4 + + SELECT count(*) FROM sqlite_stat4 WHERE idx='i1' AND neq<>'1 1 1 1 1 1'; +---- +stmt 0 err 1 -1 75 no such table: sqlite_stat4 +==== analyzeE-7.0 + + CREATE TABLE t1(a TEXT COLLATE binary); + CREATE INDEX t1x ON t1(a); + INSERT INTO t1(a) VALUES(0),('apple'),(NULL),(''),('banana'); + ANALYZE; + SELECT format('(%s)',a) FROM t1 WHERE t1.a > CAST(zeroblob(5) AS TEXT); +---- +stmt 0 ok +stmt 42 err 1 -1 71 no such table: main.t1 +stmt 71 err 1 -1 135 no such table: t1 +stmt 135 ok +stmt 146 err 1 -1 220 no such table: t1 +==== analyzeE-7.1 + + SELECT format('(%s)',a) FROM t1 WHERE t1.a <= CAST(zeroblob(5) AS TEXT); +---- +stmt 0 err 1 -1 75 no such table: t1 diff --git a/parser/testdata/analyzeF.metadata.json b/parser/testdata/analyzeF.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyzeF.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyzeF.test b/parser/testdata/analyzeF.test new file mode 100644 index 0000000..fc60d1c --- /dev/null +++ b/parser/testdata/analyzeF.test @@ -0,0 +1,78 @@ +==== 1.0 + + CREATE TABLE t1(x INTEGER, y INTEGER); + WITH data(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM data + ) + INSERT INTO t1 SELECT isqrt(i), isqrt(i) FROM data LIMIT 400; + CREATE INDEX t1x ON t1(x); + CREATE INDEX t1y ON t1(y); + ANALYZE; +---- +stmt 0 ok +stmt 41 err 1 -1 173 no such table: t1 +stmt 173 err 1 -1 202 no such table: main.t1 +stmt 202 err 1 -1 231 no such table: main.t1 +stmt 231 ok +==== 2.1 + + SELECT * FROM t1 WHERE x = substr('145', 2, 1) AND y = func(1, 2, 3) +---- +stmt 0 err 1 -1 72 no such table: t1 +==== 2.2 + + UPDATE t1 SET y=y+1 WHERE x = substr('145', 2, 1) AND y = func(1, 2, 3) +---- +stmt 0 err 1 -1 75 no such table: t1 +==== 4.1 + + SELECT * FROM t1 WHERE x = error('error one') AND y = 4; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 4.2 + + SELECT * FROM t1 WHERE x = zeroblob(2200000000) AND y = 4; +---- +stmt 0 err 1 -1 61 no such table: t1 +==== 4.3 + + SELECT * FROM t1 WHERE x = dstr() AND y = 11; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 4.4 + + SELECT * FROM t1 WHERE x = test_zeroblob(1100000) AND y = 4; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 5.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<10000) + INSERT INTO t1(a, c) SELECT x, x FROM c; + UPDATE t1 SET b=printf('x%02x',a/500) WHERE a>4000; + UPDATE t1 SET b='xyz' where a>=9998; + CREATE INDEX t1b ON t1(b); + ANALYZE; + SELECT count(*), b FROM t1 GROUP BY 2 ORDER BY 2; +---- +stmt 0 ok +stmt 27 ok +stmt 84 err 1 -1 208 no such table: t1 +stmt 208 err 1 -1 262 no such table: t1 +stmt 262 err 1 -1 301 no such table: t1 +stmt 301 err 1 -1 330 no such table: main.t1 +stmt 330 ok +stmt 341 err 1 -1 393 no such table: t1 +==== 5.2 + + explain query plan + SELECT * FROM t1 WHERE b='xyz' AND b IS NOT NULL ORDER BY +a; + /* v---- Should be "=", not ">" */ +---- +stmt 0 err 1 -1 85 no such table: t1 +==== 5.3 + + SELECT * FROM t1 WHERE b='xyz' AND b IS NOT NULL ORDER BY +a; +---- +stmt 0 err 1 -1 64 no such table: t1 diff --git a/parser/testdata/analyzeG.metadata.json b/parser/testdata/analyzeG.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyzeG.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyzeG.test b/parser/testdata/analyzeG.test new file mode 100644 index 0000000..2a29b2f --- /dev/null +++ b/parser/testdata/analyzeG.test @@ -0,0 +1,26 @@ +==== 1.0 + + PRAGMA automatic_index = 0; + CREATE TABLE t1(a, x); + CREATE TABLE t2(b, y); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 + ) + INSERT INTO t1 SELECT (i%50), NULL FROM s; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 + ) + INSERT INTO t2 SELECT (CASE WHEN i<95 THEN 44 ELSE i END), NULL FROM s; +---- +stmt 0 ok +stmt 30 ok +stmt 55 ok +stmt 80 err 1 -1 199 no such table: t1 +stmt 199 err 1 -1 347 no such table: t2 +==== 1.2 + + CREATE INDEX t2b ON t2(b); + ANALYZE; +---- +stmt 0 err 1 -1 29 no such table: main.t2 +stmt 29 ok diff --git a/parser/testdata/atof1.metadata.json b/parser/testdata/atof1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/atof1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/atof1.test b/parser/testdata/atof1.test new file mode 100644 index 0000000..348a0bf --- /dev/null +++ b/parser/testdata/atof1.test @@ -0,0 +1,54 @@ +==== atof1-2.10 + + PRAGMA encoding = 'UTF16be'; + CREATE TABLE t1(a, b); + INSERT INTO t1(rowid,a) VALUES (1,x'00'),(2,3); + SELECT substr(a,',') is true FROM t1 ORDER BY rowid; +---- +stmt 0 ok +stmt 31 ok +stmt 56 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 161 no such table: t1 +==== atof1-2.20 + + SELECT substr(a,',') is true FROM t1 ORDER BY rowid DESC; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== atof1-2.30 + + CREATE INDEX i1 ON t1(a); + SELECT count(*) FROM t1 WHERE substr(a,','); +---- +stmt 0 err 1 -1 28 no such table: main.t1 +stmt 28 err 1 -1 75 no such table: t1 +==== atof1-2.40 + + SELECT randomblob(0) - 1; +---- +stmt 0 ok +==== atof-3.2 + + WITH RECURSIVE bigval(i,vtxt) AS ( + SELECT 0, '18.446744073709550000' + UNION ALL + SELECT i+1, format('18.44674407370955%04d',i+1) FROM bigval + WHERE i+1<=9999 + ) + SELECT vtxt, CAST(vtxt AS REAL) FROM bigval + WHERE CAST(vtxt AS REAL) NOT GLOB '18.446744073709*'; +---- +stmt 0 ok +==== atof-3.3 + + WITH RECURSIVE exp(n,v1,v2) AS ( + SELECT -200, '1.8446744073709550592e-200', '1.8446744073709551609e-200' + UNION ALL + SELECT n+1, ('1.8446744073709550592e'||n),('1.8446744073709551609e'||n) + FROM exp WHERE n<200 + ) + SELECT n, v1, v2 + FROM exp + WHERE format('%.10e',CAST(v1 AS REAL)) NOT GLOB '1.8446*' + OR format('%.10e',CAST(v2 AS REAL)) NOT GLOB '1.8446*'; +---- +stmt 0 ok diff --git a/parser/testdata/atof2.metadata.json b/parser/testdata/atof2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/atof2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/atof2.test b/parser/testdata/atof2.test new file mode 100644 index 0000000..8cf54d7 --- /dev/null +++ b/parser/testdata/atof2.test @@ -0,0 +1,20 @@ +==== atof2-1.0 + + SELECT format('%g',192.496475); +---- +stmt 0 ok +==== atof2-1.1 + + SELECT format('%g',192.496501); +---- +stmt 0 ok +==== atof2-2.1 + + SELECT format('%!.30f',ieee754_inc(100.0,-1)); +---- +stmt 0 err 1 26 49 no such function: ieee754_inc +==== atof2-2.2 + + SELECT format('%!.30f',ieee754_inc(100.0,-2)); +---- +stmt 0 err 1 26 49 no such function: ieee754_inc diff --git a/parser/testdata/atomic.metadata.json b/parser/testdata/atomic.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/atomic.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/atomic.test b/parser/testdata/atomic.test new file mode 100644 index 0000000..108a4be --- /dev/null +++ b/parser/testdata/atomic.test @@ -0,0 +1,14 @@ +==== 1.0 + + CREATE TABLE t1(x, y); + BEGIN; + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 25 ok +stmt 34 err 1 -1 67 no such table: t1 +==== 1.2 + + COMMIT; +---- +stmt 0 ok diff --git a/parser/testdata/atomic2.metadata.json b/parser/testdata/atomic2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/atomic2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/atomic2.test b/parser/testdata/atomic2.test new file mode 100644 index 0000000..d0ec1d9 --- /dev/null +++ b/parser/testdata/atomic2.test @@ -0,0 +1,13 @@ +==== 1.0 + + CREATE TABLE t1(x, y); + CREATE INDEX i1x ON t1(x); + CREATE INDEX i2x ON t1(y); + + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 ) + INSERT INTO t1 SELECT randomblob(400), randomblob(400) FROM s; +---- +stmt 0 ok +stmt 25 err 1 -1 54 no such table: main.t1 +stmt 54 err 1 -1 83 no such table: main.t1 +stmt 83 err 1 -1 217 no such table: t1 diff --git a/parser/testdata/attach.metadata.json b/parser/testdata/attach.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/attach.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/attach.test b/parser/testdata/attach.test new file mode 100644 index 0000000..034ee8a --- /dev/null +++ b/parser/testdata/attach.test @@ -0,0 +1,401 @@ +==== attach-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(3,4); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 112 no such table: t1 +==== attach-1.3 + + ATTACH DATABASE 'test2.db' AS two; + SELECT * FROM two.t2; +---- +stmt 0 ok +stmt 39 err 1 -1 65 no such table: two.t2 +==== attach-1.4 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== attach-1.5 + + DETACH DATABASE two; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 25 err 1 -1 47 no such table: t1 +==== attach-1.6 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== attach-1.7 + + SELECT * FROM two.t2; +---- +stmt 0 err 1 -1 26 no such table: two.t2 +==== attach-1.8 + + ATTACH DATABASE 'test3.db' AS three; +---- +stmt 0 ok +==== attach-1.9 + + SELECT * FROM three.sqlite_master; +---- +stmt 0 err 1 -1 39 no such table: three.sqlite_master +==== attach-1.11 + + ATTACH 'test.db' AS db2; + ATTACH 'test.db' AS db3; + ATTACH 'test.db' AS db4; + ATTACH 'test.db' AS db5; + ATTACH 'test.db' AS db6; + ATTACH 'test.db' AS db7; + ATTACH 'test.db' AS db8; + ATTACH 'test.db' AS db9; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 87 ok +stmt 116 ok +stmt 145 ok +stmt 174 ok +stmt 203 ok +==== attach-1.12 + + ATTACH 'test.db' as db2; +---- +stmt 0 ok +==== attach-1.13 + + ATTACH 'test.db' as db5; +---- +stmt 0 ok +==== attach-1.14 + + ATTACH 'test.db' as db9; +---- +stmt 0 ok +==== attach-1.15 + + ATTACH 'test.db' as main; +---- +stmt 0 ok +==== attach-1.16 + + ATTACH 'test.db' as temp; +---- +stmt 0 ok +==== attach-1.17 + + ATTACH 'test.db' as MAIN; +---- +stmt 0 ok +==== attach-1.18 + + ATTACH 'test.db' as db10; + ATTACH 'test.db' as db11; +---- +stmt 0 ok +stmt 30 ok +==== attach-1.19 + + ATTACH 'test.db' as db12; +---- +stmt 0 ok +==== attach-1.20.1 + + DETACH db5; +---- +stmt 0 ok +==== attach-1.21 + + ATTACH 'test.db' as db12; +---- +stmt 0 ok +==== attach-1.22 + + ATTACH 'test.db' as db13; +---- +stmt 0 ok +==== attach-1.23 + + DETACH "db14"; +---- +stmt 0 ok +==== attach-1.24 + + DETACH db12; +---- +stmt 0 ok +==== attach-1.25 + + DETACH db12; +---- +stmt 0 ok +==== attach-1.26 + + DETACH main; +---- +stmt 0 ok +==== attach-1.27 + + DETACH Temp; +---- +stmt 0 ok +==== attach-1.27.dup1 + + DETACH Temp; +---- +stmt 0 ok +==== attach-1.28 + + DETACH db11; + DETACH db10; + DETACH db9; + DETACH db8; + DETACH db7; + DETACH db6; + DETACH db4; + DETACH db3; + DETACH db2; +---- +stmt 0 ok +stmt 17 ok +stmt 34 ok +stmt 50 ok +stmt 66 ok +stmt 82 ok +stmt 98 ok +stmt 114 ok +stmt 130 ok +==== attach-2.3 + + CREATE TABLE tx(x1,x2,y1,y2); + SELECT * FROM tx; +---- +stmt 0 ok +stmt 34 err 1 -1 56 no such table: tx +==== attach-2.4 + + ATTACH 'test2.db' AS db2; +---- +stmt 0 ok +==== attach-2.5 + + UPDATE db2.t2 SET x=x+10; + SELECT * FROM db2.tx; +---- +stmt 0 err 1 -1 30 no such table: db2.t2 +stmt 30 err 1 -1 56 no such table: db2.tx +==== attach-2.6 + + SELECT * FROM main.tx; +---- +stmt 0 err 1 -1 27 no such table: main.tx +==== attach-2.7 + + SELECT type, name, tbl_name FROM db2.sqlite_master; +---- +stmt 0 err 1 -1 56 no such table: db2.sqlite_master +==== attach-2.13 + + SELECT * FROM t2 WHERE x>5; +---- +stmt 0 err 1 -1 32 no such table: t2 +==== attach-2.14 + + SELECT type, name, tbl_name FROM sqlite_master; +---- +stmt 0 ok +==== attach-2.15 + + SELECT type, name, tbl_name FROM db2.sqlite_master; +---- +stmt 0 err 1 -1 56 no such table: db2.sqlite_master +==== attach-3.2 + + SELECT * FROM t2 +---- +stmt 0 err 1 -1 22 no such table: t2 +==== attach-3.3 + + ATTACH DATABASE 'test2.db' AS db2; + SELECT * FROM t2 +---- +stmt 0 ok +stmt 39 err 1 -1 61 no such table: t2 +==== attach-3.10 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== attach-3.11 +UPDATE t1 SET a=a+1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== attach-3.12 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== attach-3.13 +UPDATE t2 SET x=x+1 WHERE x=50 +---- +stmt 0 err 1 -1 31 no such table: t2 +==== attach-3.14 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== attach-4.2 + + CREATE TABLE t3(a,b); + CREATE UNIQUE INDEX t3i1b ON t3(a); + INSERT INTO t3 VALUES(9,10); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 26 err 1 -1 66 no such table: main.t3 +stmt 66 err 1 -1 99 no such table: t3 +stmt 99 err 1 -1 121 no such table: t3 +==== attach-4.3 + + ATTACH DATABASE 'test2.db' AS db2; + SELECT * FROM db2.t3; +---- +stmt 0 ok +stmt 39 err 1 -1 65 no such table: db2.t3 +==== attach-4.4 + + SELECT * FROM main.t3; +---- +stmt 0 err 1 -1 27 no such table: main.t3 +==== attach-4.5 + + INSERT INTO db2.t3 VALUES(9,10); + SELECT * FROM db2.t3; +---- +stmt 0 err 1 -1 37 no such table: db2.t3 +stmt 37 err 1 -1 63 no such table: db2.t3 +==== attach-4.7 + + CREATE TABLE t4(y); + CREATE TRIGGER t3r3 AFTER INSERT ON t3 BEGIN + INSERT INTO t4 VALUES('main.' || NEW.a); + END; + INSERT INTO main.t3 VALUES(11,12); + SELECT * FROM main.t4; +---- +stmt 0 ok +stmt 26 err 1 -1 77 no such table: main.t3 +stmt 137 err 1 -1 178 no such table: main.t3 +stmt 178 err 1 -1 207 no such table: main.t4 +==== attach-4.8 + + ATTACH DATABASE 'test2.db' AS db2; + INSERT INTO db2.t3 VALUES(13,14); + SELECT * FROM db2.t4 UNION ALL SELECT * FROM main.t4; +---- +stmt 0 ok +stmt 39 err 1 -1 77 no such table: db2.t3 +stmt 77 err 1 -1 135 no such table: main.t4 +==== attach-4.11 + + CREATE VIEW v3 AS SELECT a*100+b FROM t3; + SELECT * FROM v3; +---- +stmt 0 ok +stmt 46 err 1 -1 68 no such table: v3 +==== attach-4.12 + + ATTACH DATABASE 'test2.db' AS db2; + SELECT * FROM db2.v3; +---- +stmt 0 ok +stmt 39 err 1 -1 65 no such table: db2.v3 +==== attach-4.13 + + SELECT * FROM main.v3; +---- +stmt 0 err 1 -1 27 no such table: main.v3 +==== attach-6.1 + + ATTACH DATABASE 'no-such-file' AS nosuch; +---- +stmt 0 ok +==== attach-6.3 + + CREATE TABLE no_such_db.t1(a, b, c); +---- +stmt 0 err 1 18 32 unknown database no_such_db +==== attach-9.2 + + BEGIN; + INSERT INTO aux1.t1 VALUES(3, 4); + INSERT INTO aux2.t1 VALUES(5, 6); +---- +stmt 0 ok +stmt 11 err 1 -1 51 no such table: aux1.t1 +stmt 51 err 1 -1 91 no such table: aux2.t1 +==== attach-9.3 + + COMMIT; + SELECT * FROM aux2.t1; +---- +stmt 0 ok +stmt 12 err 1 -1 39 no such table: aux2.t1 +==== attach-10.1 + + ATTACH '' AS noname; + ATTACH ':memory:' AS inmem; + BEGIN; + CREATE TABLE noname.noname(x); + CREATE TABLE inmem.inmem(y); + CREATE TABLE main.main(z); + COMMIT; + SELECT name FROM noname.sqlite_master; + SELECT name FROM inmem.sqlite_master; +---- +stmt 0 ok +stmt 25 ok +stmt 57 ok +stmt 68 err 1 86 100 unknown database noname +stmt 103 err 1 121 133 unknown database inmem +stmt 136 ok +stmt 167 ok +stmt 179 err 1 -1 222 no such table: noname.sqlite_master +stmt 222 err 1 -1 264 no such table: inmem.sqlite_master +==== attach-11.1 + + ATTACH printf('file:%09000x/x.db?mode=memory&cache=shared',1) AS aux1; + CREATE TABLE aux1.t1(x,y); + INSERT INTO aux1.t1(x,y) VALUES(1,2),(3,4); + SELECT * FROM aux1.t1; +---- +stmt 0 ok +stmt 73 err 1 89 97 unknown database aux1 +stmt 102 err 1 -1 148 no such table: aux1.t1 +stmt 148 err 1 -1 173 no such table: aux1.t1 +==== attach-12.1 + + CREATE TABLE Table1 (col TEXT NOT NULL PRIMARY KEY); + ATTACH ':memory:' AS db2; + CREATE TABLE db2.Table2(col1 INTEGER, col2 INTEGER, col3 INTEGER, col4); + CREATE UNIQUE INDEX db2.idx_col1_unique ON Table2 (col1); + CREATE UNIQUE INDEX db2.idx_col23_unique ON Table2 (col2, col3); + CREATE INDEX db2.idx_col2 ON Table2 (col2); + INSERT INTO Table2 VALUES(1,2,3,4); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 55 ok +stmt 83 err 1 99 110 unknown database db2 +stmt 158 err 1 181 218 unknown database db2 +stmt 218 err 1 241 285 unknown database db2 +stmt 285 err 1 301 331 unknown database db2 +stmt 331 err 1 -1 369 no such table: Table2 +stmt 369 ok diff --git a/parser/testdata/attach2.metadata.json b/parser/testdata/attach2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/attach2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/attach2.test b/parser/testdata/attach2.test new file mode 100644 index 0000000..17f4021 --- /dev/null +++ b/parser/testdata/attach2.test @@ -0,0 +1,87 @@ +==== attach2-2.9 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== attach2-2.12 + + COMMIT +---- +stmt 0 ok +==== attach2-4.13 +SELECT * FROM file2.t1 +---- +stmt 0 err 1 -1 23 no such table: file2.t1 +==== attach2-4.14 +INSERT INTO t1 VALUES(1, 2) +---- +stmt 0 err 1 -1 28 no such table: t1 +==== attach2-5.2 + + BEGIN; + CREATE TABLE tbl(a, b, c); + CREATE TABLE aux.tbl(a, b, c); + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 42 err 1 60 68 unknown database aux +stmt 77 ok +==== attach2-5.4 + + BEGIN; + DROP TABLE aux.tbl; + DROP TABLE tbl; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 35 no such table: aux.tbl +stmt 35 err 1 -1 55 no such table: tbl +stmt 55 ok +==== attach2-6.1 + + BEGIN; +---- +stmt 0 ok +==== attach2-6.2 + + ATTACH 'test3.db' as aux2; + DETACH aux2; +---- +stmt 0 ok +stmt 31 ok +==== attach2-6.3 + + DETACH aux; +---- +stmt 0 ok +==== 2.1 + + PRAGMA encoding = 'utf16'; + ATTACH 'test.db2' AS aux; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 31 ok +stmt 61 err 1 -1 83 no such table: t2 +==== 2.2 + + ATTACH 'test.db4' AS aux; + SELECT * FROM t4; +---- +stmt 0 ok +stmt 30 err 1 -1 52 no such table: t4 +==== 2.3 + + ATTACH 'test.db3' AS aux; + SELECT * FROM t3; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 30 err 1 -1 52 no such table: t3 +stmt 52 err 1 -1 74 no such table: t2 +==== 2.4 + + ATTACH 'test.db4' AS aux; +---- +stmt 0 ok diff --git a/parser/testdata/attach3.metadata.json b/parser/testdata/attach3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/attach3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/attach3.test b/parser/testdata/attach3.test new file mode 100644 index 0000000..2ce23bf --- /dev/null +++ b/parser/testdata/attach3.test @@ -0,0 +1,194 @@ +==== attach3-1.1 + + ATTACH 'test2.db' AS aux; +---- +stmt 0 ok +==== attach3-1.2 + + CREATE TABLE aux.t3(e, f); +---- +stmt 0 err 1 18 25 unknown database aux +==== attach3-1.3 + + SELECT * FROM sqlite_master WHERE name = 't3'; +---- +stmt 0 ok +==== attach3-1.4 + + SELECT * FROM aux.sqlite_master WHERE name = 't3'; +---- +stmt 0 err 1 -1 55 no such table: aux.sqlite_master +==== attach3-1.5 + + INSERT INTO t3 VALUES(1, 2); + SELECT * FROM t3; +---- +stmt 0 err 1 -1 33 no such table: t3 +stmt 33 err 1 -1 55 no such table: t3 +==== attach3-2.1 + + CREATE INDEX aux.i1 on t3(e); +---- +stmt 0 err 1 18 34 unknown database aux +==== attach3-2.2 + + SELECT * FROM sqlite_master WHERE name = 'i1'; +---- +stmt 0 ok +==== attach3-2.3 + + SELECT * FROM aux.sqlite_master WHERE name = 'i1'; +---- +stmt 0 err 1 -1 55 no such table: aux.sqlite_master +==== attach3-3.1 + + DROP INDEX aux.i1; + SELECT * FROM aux.sqlite_master WHERE name = 'i1'; +---- +stmt 0 err 1 -1 23 no such index: aux.i1 +stmt 23 err 1 -1 78 no such table: aux.sqlite_master +==== attach3-3.2 + + CREATE INDEX aux.i1 on t3(e); + SELECT * FROM aux.sqlite_master WHERE name = 'i1'; +---- +stmt 0 err 1 18 34 unknown database aux +stmt 34 err 1 -1 89 no such table: aux.sqlite_master +==== attach3-3.3 + + DROP INDEX i1; + SELECT * FROM aux.sqlite_master WHERE name = 'i1'; +---- +stmt 0 err 1 -1 19 no such index: i1 +stmt 19 err 1 -1 74 no such table: aux.sqlite_master +==== attach3-4.1 + + DROP TABLE aux.t1; + SELECT name FROM aux.sqlite_master; +---- +stmt 0 err 1 -1 23 no such table: aux.t1 +stmt 23 err 1 -1 63 no such table: aux.sqlite_master +==== attach3-4.3 + + DROP TABLE t2; + SELECT name FROM aux.sqlite_master; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 err 1 -1 59 no such table: aux.sqlite_master +==== attach3-5.1 + + CREATE VIEW aux.v1 AS SELECT * FROM t3; +---- +stmt 0 err 1 17 44 unknown database aux +==== attach3-5.2 + + SELECT * FROM aux.sqlite_master WHERE name = 'v1'; +---- +stmt 0 err 1 -1 55 no such table: aux.sqlite_master +==== attach3-5.3 + + INSERT INTO aux.t3 VALUES('hello', 'world'); + SELECT * FROM v1; +---- +stmt 0 err 1 -1 49 no such table: aux.t3 +stmt 49 err 1 -1 71 no such table: v1 +==== attach3-6.1 + + DROP VIEW aux.v1; +---- +stmt 0 err 1 -1 22 no such view: aux.v1 +==== attach3-6.2 + + SELECT * FROM aux.sqlite_master WHERE name = 'v1'; +---- +stmt 0 err 1 -1 55 no such table: aux.sqlite_master +==== attach3-7.1 + + CREATE TRIGGER aux.tr1 AFTER INSERT ON t3 BEGIN + INSERT INTO t3 VALUES(new.e*2, new.f*2); + END; +---- +stmt 0 err 1 20 52 unknown database aux +==== attach3-7.2 + + DELETE FROM t3; + INSERT INTO t3 VALUES(10, 20); + SELECT * FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t3 +stmt 20 err 1 -1 55 no such table: t3 +stmt 55 err 1 -1 77 no such table: t3 +==== attach3-5.3.dup1 + + SELECT * FROM aux.sqlite_master WHERE name = 'tr1'; +---- +stmt 0 err 1 -1 56 no such table: aux.sqlite_master +==== attach3-8.1 + + DROP TRIGGER aux.tr1; +---- +stmt 0 err 1 -1 26 no such trigger: aux.tr1 +==== attach3-8.2 + + SELECT * FROM aux.sqlite_master WHERE name = 'tr1'; +---- +stmt 0 err 1 -1 56 no such table: aux.sqlite_master +==== attach3-9.0 + + CREATE TABLE main.t4(a, b, c); + CREATE TABLE aux.t4(a, b, c); + CREATE TEMP TRIGGER tst_trigger BEFORE INSERT ON aux.t4 BEGIN + SELECT 'hello world'; + END; + SELECT count(*) FROM temp.sqlite_master; +---- +stmt 0 ok +stmt 37 err 1 57 64 unknown database aux +stmt 73 err 1 -1 141 no such table: aux.t4 +stmt 183 ok +==== attach3-9.1 + + DROP TABLE main.t4; + SELECT count(*) FROM sqlite_temp_master; +---- +stmt 0 err 1 -1 26 no such table: main.t4 +stmt 26 ok +==== attach3-9.2 + + DROP TABLE aux.t4; + SELECT count(*) FROM temp.sqlite_master; +---- +stmt 0 err 1 -1 25 no such table: aux.t4 +stmt 25 ok +==== attach3-10.0 + + INSERT INTO aux.sqlite_master VALUES(1, 2, 3, 4, 5); +---- +stmt 0 err 1 -1 57 no such table: aux.sqlite_master +==== attach3-11.0 + + ATTACH DATABASE '/nodir/nofile.x' AS notadb; +---- +stmt 0 ok +==== attach3-11.1 + + ATTACH DATABASE ':memory:' AS notadb; +---- +stmt 0 ok +==== attach3-11.2 + + DETACH DATABASE notadb; +---- +stmt 0 ok +==== attach3-12.11 + + DETACH NULL +---- +stmt 0 ok +==== attach3-12.12 + + ATTACH null AS null; + ATTACH '' AS ''; +---- +stmt 0 ok +stmt 25 ok diff --git a/parser/testdata/attach4.metadata.json b/parser/testdata/attach4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/attach4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/attach4.test b/parser/testdata/attach4.test new file mode 100644 index 0000000..2791983 --- /dev/null +++ b/parser/testdata/attach4.test @@ -0,0 +1,28 @@ +==== 1.2.2 + + ATTACH 'x.db' AS next; +---- +stmt 0 ok +==== 2.0 + + ATTACH DATABASE '' AS aux; + CREATE TABLE IF NOT EXISTS aux.t1(a, b); + CREATE TEMPORARY TRIGGER tr1 DELETE ON t1 BEGIN + DELETE FROM t1; + END; + CREATE TABLE temp.t1(a, b); +---- +stmt 0 ok +stmt 29 err 1 59 66 unknown database aux +stmt 72 err 1 -1 122 no such table: t1 +stmt 151 ok +==== 2.1 + + DETACH DATABASE aux; +---- +stmt 0 ok +==== 2.2 + + DROP TRIGGER tr1; +---- +stmt 0 err 1 -1 20 no such trigger: tr1 diff --git a/parser/testdata/auth.metadata.json b/parser/testdata/auth.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/auth.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/auth.test b/parser/testdata/auth.test new file mode 100644 index 0000000..a5b5593 --- /dev/null +++ b/parser/testdata/auth.test @@ -0,0 +1,613 @@ +==== auth-1.2 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.4 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.6 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.8 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.10 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.12 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.14 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.16 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.18 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.20 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.22 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.24 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.26 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.28 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.30 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.32 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.34 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.42 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.44 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.46 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.48 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.50 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.50.2 +INSERT INTO t2 VALUES(11, 2, 33) +---- +stmt 0 err 1 -1 33 no such table: t2 +==== auth-1.54 +INSERT INTO t2 VALUES(7, 8, 9); +---- +stmt 0 err 1 -1 31 no such table: t2 +==== auth-1.55 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.64 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.66 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.68 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.70 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.72 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.74 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.76 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.78 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.81 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.84 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.87 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.90 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.92 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.94 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.96 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.98 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.100 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.103 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.105 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.108 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.111 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.113 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.116 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.118 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.121 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.124 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.127 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.129 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.132 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.134 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.136.2 + + SELECT name FROM sqlite_master WHERE type='trigger' +---- +stmt 0 ok +==== auth-1.136.4 + + SELECT * FROM tx; +---- +stmt 0 err 1 -1 22 no such table: tx +==== auth-1.137 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.140 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.142 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.145 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.147 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.150 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.152 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.155 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.157 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.160 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.163 + + DROP TABLE tx; + DELETE FROM t2 WHERE a=1 AND b=2 AND c=3; + SELECT name FROM sqlite_master; +---- +stmt 0 err 1 -1 19 no such table: tx +stmt 19 err 1 -1 65 no such table: t2 +stmt 65 ok +==== auth-1.165 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.168 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.170 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.173 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.176 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.179 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.181 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.184 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.186 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.189 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.192 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.194 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.197 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.199 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.202 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.204 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.205b + + DROP INDEX di205.t1x; +---- +stmt 0 err 1 -1 24 no such index: di205.t1x +==== auth-1.207 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.209 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.212 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.215 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== auth-1.217 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.220 +SELECT name FROM sqlite_temp_master +---- +stmt 0 ok +==== auth-1.222 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.225 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.228 +SELECT name FROM temp.sqlite_master +---- +stmt 0 ok +==== auth-1.244 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.245 +ROLLBACK +---- +stmt 0 ok +==== auth-1.247 +END TRANSACTION +---- +stmt 0 ok +==== auth-1.250 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== auth-1.264 +SELECT name FROM sqlite_temp_master WHERE type='table' +---- +stmt 0 ok +==== auth-1.267 +SELECT name FROM temp.sqlite_master WHERE type='table' +---- +stmt 0 ok +==== auth-1.270 +SELECT name FROM sqlite_temp_master WHERE type='table' +---- +stmt 0 ok +==== auth-1.273 +SELECT name FROM sqlite_master WHERE type='table' +---- +stmt 0 ok +==== auth-1.276 +SELECT name FROM sqlite_master WHERE type='table' +---- +stmt 0 ok +==== auth-1.279 +SELECT name FROM sqlite_master WHERE type='table' +---- +stmt 0 ok +==== auth-1.281 + + CREATE TABLE t3(a PRIMARY KEY, b, c); + CREATE INDEX t3_idx1 ON t3(c COLLATE BINARY); + CREATE INDEX t3_idx2 ON t3(b COLLATE NOCASE); +---- +stmt 0 ok +stmt 42 err 1 -1 92 no such table: main.t3 +stmt 92 err 1 -1 142 no such table: main.t3 +==== auth-1.286 + + DROP TABLE t3; +---- +stmt 0 err 1 -1 19 no such table: t3 +==== auth-1.287 + + CREATE TEMP TABLE t3(a PRIMARY KEY, b, c); + CREATE INDEX t3_idx1 ON t3(c COLLATE BINARY); + CREATE INDEX t3_idx2 ON t3(b COLLATE NOCASE); +---- +stmt 0 ok +stmt 49 err 1 -1 101 no such table: main.t3 +stmt 101 err 1 -1 153 no such table: main.t3 +==== auth-1.293 + + DROP TABLE t3; +---- +stmt 0 err 1 -1 21 no such table: t3 +==== auth-1.295 + + SELECT count(*) FROM sqlite_stat1; +---- +stmt 0 err 1 -1 41 no such table: sqlite_stat1 +==== auth-1.297 + + SELECT count(*) FROM sqlite_stat1; +---- +stmt 0 err 1 -1 41 no such table: sqlite_stat1 +==== auth-1.302-drop-1 + + ALTER TABLE t5 DROP COLUMN new_col_1; +---- +stmt 0 err 1 -1 42 no such table: t5 +==== auth-1.305-drop-1 + + ALTER TABLE t5 DROP COLUMN new_col_1; + SELECT 1 FROM sqlite_schema WHERE name='t5' AND sql LIKE '%new_col_1%'; +---- +stmt 0 err 1 -1 43 no such table: t5 +stmt 43 ok +==== auth-1.308-drop-1 + + ALTER TABLE t5 DROP COLUMN new_col_1; +---- +stmt 0 err 1 -1 42 no such table: t5 +==== auth-1.308-drop-2 + + SELECT 1 FROM sqlite_schema WHERE name='t5' AND sql LIKE '%new_col_1%'; +---- +stmt 0 ok +==== auth-1.311 + + WITH + auth1311(x,y) AS (SELECT a+b, b-a FROM t1) + SELECT * FROM auth1311 ORDER BY x; +---- +stmt 0 err 1 -1 98 no such table: t1 +==== auth-1.312 + + WITH RECURSIVE + auth1312(x,y) AS (SELECT a+b, b-a FROM t1) + SELECT x, y FROM auth1312 ORDER BY x; +---- +stmt 0 err 1 -1 111 no such table: t1 +==== auth-1.313 + + WITH RECURSIVE + auth1313(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM auth1313 WHERE x<5) + SELECT * FROM t1; +---- +stmt 0 err 1 -1 120 no such table: t1 +==== auth-1.314 + + WITH RECURSIVE + auth1314(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM auth1314 WHERE x<5) + SELECT * FROM t1 LEFT JOIN auth1314; +---- +stmt 0 err 1 -1 139 no such table: t1 +==== auth-1.351 + + SELECT name FROM pragma_table_info('t1') ORDER BY cid; +---- +stmt 0 ok +==== auth-1.354 + + SELECT name FROM pragma_table_info('t1') ORDER BY cid; +---- +stmt 0 ok +==== auth-1.357 + + SELECT name FROM pragma_table_info('t1') ORDER BY cid; +---- +stmt 0 ok +==== auth-2.1 +SELECT y,z FROM t3 +---- +stmt 0 err 1 -1 19 no such table: t3 +==== auth-2.2 +SELECT ROWID,y,z FROM t3 +---- +stmt 0 err 1 -1 25 no such table: t3 +==== auth-2.3 +SELECT OID,y,z FROM t3 +---- +stmt 0 err 1 -1 23 no such table: t3 +==== auth-2.5 +SELECT rowid,y,z FROM t3 +---- +stmt 0 err 1 -1 25 no such table: t3 +==== auth-2.7 +SELECT ROWID,y,z FROM t3 +---- +stmt 0 err 1 -1 25 no such table: t3 +==== auth-4.2 + + CREATE VIEW v1 AS SELECT a+b AS x FROM t2; + CREATE TABLE v1chng(x1,x2); + CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO v1chng VALUES(OLD.x,NEW.x); + END; + SELECT * FROM v1; +---- +stmt 0 ok +stmt 47 ok +stmt 79 err 1 -1 131 no such table: main.v1 +stmt 186 err 1 -1 208 no such table: v1 +==== auth-4.4 + + CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN + INSERT INTO v1chng VALUES(OLD.x,NULL); + END; + SELECT * FROM v1; +---- +stmt 0 err 1 -1 52 no such table: main.v1 +stmt 106 err 1 -1 128 no such table: v1 +==== auth-5.2 + + SELECT name FROM ( + SELECT * FROM sqlite_master UNION ALL SELECT * FROM temp.sqlite_master) + WHERE type='table' + ORDER BY name +---- +stmt 0 ok +==== auth-5.3.1 + + CREATE TABLE t5 ( x ); + CREATE TRIGGER t5_tr1 AFTER INSERT ON t5 BEGIN + UPDATE t5 SET x = 1 WHERE NEW.x = 0; + END; +---- +stmt 0 ok +stmt 29 err 1 -1 82 no such table: main.t5 +==== auth-5.3.2 + SELECT * FROM t5 +---- +stmt 0 err 1 -1 18 no such table: t5 +==== auth-6.1 + + CREATE TABLE t6(a,b,c,d,e,f,g,h); + INSERT INTO t6 VALUES(1,2,3,4,5,6,7,8); +---- +stmt 0 ok +stmt 38 err 1 -1 82 no such table: t6 +==== auth-6.3 +SELECT rowid, * FROM t6 +---- +stmt 0 err 1 -1 24 no such table: t6 +==== auth-7.1 + + CREATE TABLE t7(a, b, c); + CREATE VIEW v7 AS SELECT * FROM t7; +---- +stmt 0 ok +stmt 28 ok +==== auth-8.3 + + SELECT count(*) FROM t7 +---- +stmt 0 err 1 -1 27 no such table: t7 diff --git a/parser/testdata/auth3.metadata.json b/parser/testdata/auth3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/auth3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/auth3.test b/parser/testdata/auth3.test new file mode 100644 index 0000000..e01d32a --- /dev/null +++ b/parser/testdata/auth3.test @@ -0,0 +1,24 @@ +==== auth3-1.1 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); +---- +stmt 0 ok +stmt 28 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 100 no such table: t1 +==== auth3.1.4 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== auth3-3.0 + + CREATE TEMPORARY TABLE TempTable ( + key TEXT NOT NULL ON CONFLICT FAIL UNIQUE ON CONFLICT REPLACE, + value TEXT NOT NULL ON CONFLICT FAIL); + ALTER TABLE TempTable RENAME TO DoNotRead; + SELECT name FROM temp.sqlite_master; +---- +stmt 0 ok +stmt 157 err 1 -1 204 no such table: TempTable +stmt 204 ok diff --git a/parser/testdata/autoanalyze1.metadata.json b/parser/testdata/autoanalyze1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/autoanalyze1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/autoanalyze1.test b/parser/testdata/autoanalyze1.test new file mode 100644 index 0000000..8f9bc56 --- /dev/null +++ b/parser/testdata/autoanalyze1.test @@ -0,0 +1,101 @@ +==== autoanalyze1-100 + + -- Build up a test table with some indexes + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, d); + CREATE UNIQUE INDEX t1bc ON t1(b,c); + CREATE INDEX t1d ON t1(d); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b,c,d) SELECT x, x, x, x FROM c; + -- Verify that the hasStat1 flag is clear on on indexes + SELECT idx, flgs FROM pragma_stats + WHERE idx IS NOT NULL + ORDER BY idx; + -- Verify that the TF_HasStat1 flag is clear on the table + SELECT tbl, (flgs & 0x10)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 ok +stmt 96 err 1 -1 135 no such table: main.t1 +stmt 135 err 1 -1 164 no such table: main.t1 +stmt 164 err 1 -1 295 no such table: t1 +stmt 295 err 1 -1 432 no such table: pragma_stats +stmt 432 err 1 -1 573 no such table: pragma_stats +==== autoanalyze1-110 + + SELECT (flgs & 0x0100)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 err 1 -1 78 no such table: pragma_stats +==== autoanalyze1-200 + + SELECT * FROM t1 WHERE a=55; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== autoanalyze1-201 + + SELECT (flgs & 0x0100)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 err 1 -1 78 no such table: pragma_stats +==== autoanalyze1-210 + + SELECT * FROM t1 WHERE a IN (55,199,299); +---- +stmt 0 err 1 -1 44 no such table: t1 +==== autoanalyze1-211 + + SELECT (flgs & 0x0100)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 err 1 -1 78 no such table: pragma_stats +==== autoanalyze1-220 + + SELECT * FROM t1 WHERE (b,c)=(45,45); +---- +stmt 0 err 1 -1 40 no such table: t1 +==== autoanalyze1-221 + + SELECT (flgs & 0x0100)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 err 1 -1 78 no such table: pragma_stats +==== autoanalyze1-300 + + SELECT * FROM t1 WHERE d=45; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== autoanalyze1-301 + + SELECT (flgs & 0x0100)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 err 1 -1 78 no such table: pragma_stats +==== autoanalyze1-310 + + SELECT * FROM t1 WHERE d=45 AND a=45; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== autoanalyze1-311 + + SELECT (flgs & 0x0100)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 err 1 -1 78 no such table: pragma_stats +==== autoanalyze1-320 + + SELECT * FROM t1 WHERE d=45 AND a IN (45,46); +---- +stmt 0 err 1 -1 48 no such table: t1 +==== autoanalyze1-321 + + SELECT (flgs & 0x0100)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 err 1 -1 78 no such table: pragma_stats +==== autoanalyze1-400 + + SELECT * FROM t1 WHERE b=45; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== autoanalyze1-401 + + SELECT (flgs & 0x0100)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 err 1 -1 78 no such table: pragma_stats +==== autoanalyze1-500 + + SELECT (flgs & 0x0100)!=0 FROM pragma_stats WHERE tbl='t1' AND idx IS NULL; +---- +stmt 0 err 1 -1 78 no such table: pragma_stats diff --git a/parser/testdata/autoinc.metadata.json b/parser/testdata/autoinc.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/autoinc.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/autoinc.test b/parser/testdata/autoinc.test new file mode 100644 index 0000000..ccd3cd2 --- /dev/null +++ b/parser/testdata/autoinc.test @@ -0,0 +1,502 @@ +==== autoinc-1.1 + + SELECT name FROM sqlite_master WHERE type='table'; +---- +stmt 0 ok +==== autoinc-1.2 + + CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y); + SELECT name FROM sqlite_master WHERE type='table'; +---- +stmt 0 ok +stmt 61 ok +==== autoinc-1.3 + + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 35 no such table: sqlite_sequence +==== autoinc-1.3.1 + + CREATE INDEX seqidx ON sqlite_sequence(name) +---- +stmt 0 err 1 -1 50 no such table: main.sqlite_sequence +==== autoinc-1.5 +DROP TABLE sqlite_sequence +---- +stmt 0 err 1 -1 27 no such table: sqlite_sequence +==== autoinc-1.6 +SELECT name FROM sqlite_master WHERE type='table' +---- +stmt 0 ok +==== autoinc-2.1 + + SELECT * FROM sqlite_sequence +---- +stmt 0 err 1 -1 35 no such table: sqlite_sequence +==== autoinc-2.2 + + INSERT INTO t1 VALUES(12,34); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 69 no such table: sqlite_sequence +==== autoinc-2.3 + + INSERT INTO t1 VALUES(1,23); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 68 no such table: sqlite_sequence +==== autoinc-2.4 + + INSERT INTO t1 VALUES(123,456); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 71 no such table: sqlite_sequence +==== autoinc-2.5 + + INSERT INTO t1 VALUES(NULL,567); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 72 no such table: sqlite_sequence +==== autoinc-2.6 + + DELETE FROM t1 WHERE y=567; + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 67 no such table: sqlite_sequence +==== autoinc-2.7 + + INSERT INTO t1 VALUES(NULL,567); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 72 no such table: sqlite_sequence +==== autoinc-2.8 + + DELETE FROM t1; + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 55 no such table: sqlite_sequence +==== autoinc-2.9 + + INSERT INTO t1 VALUES(12,34); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 69 no such table: sqlite_sequence +==== autoinc-2.10 + + INSERT INTO t1 VALUES(125,456); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 71 no such table: sqlite_sequence +==== autoinc-2.11 + + INSERT INTO t1 VALUES(-1234567,-1); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 75 no such table: sqlite_sequence +==== autoinc-2.12 + + INSERT INTO t1 VALUES(234,5678); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 72 no such table: sqlite_sequence +==== autoinc-2.13 + + DELETE FROM t1; + INSERT INTO t1 VALUES(NULL,1); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 55 no such table: t1 +stmt 55 err 1 -1 90 no such table: sqlite_sequence +==== autoinc-2.14 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== autoinc-2.20 + + UPDATE sqlite_sequence SET seq=1234 WHERE name='t1'; + INSERT INTO t1 VALUES(NULL,2); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 57 no such table: sqlite_sequence +stmt 57 err 1 -1 92 no such table: t1 +stmt 92 err 1 -1 114 no such table: t1 +==== autoinc-2.21 + + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 35 no such table: sqlite_sequence +==== autoinc-2.22 + + UPDATE sqlite_sequence SET seq=NULL WHERE name='t1'; + INSERT INTO t1 VALUES(NULL,3); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 57 no such table: sqlite_sequence +stmt 57 err 1 -1 92 no such table: t1 +stmt 92 err 1 -1 114 no such table: t1 +==== autoinc-2.23 + + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 35 no such table: sqlite_sequence +==== autoinc-2.24 + + UPDATE sqlite_sequence SET seq='a-string' WHERE name='t1'; + INSERT INTO t1 VALUES(NULL,4); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 63 no such table: sqlite_sequence +stmt 63 err 1 -1 98 no such table: t1 +stmt 98 err 1 -1 120 no such table: t1 +==== autoinc-2.25 + + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 35 no such table: sqlite_sequence +==== autoinc-2.26 + + DELETE FROM sqlite_sequence WHERE name='t1'; + INSERT INTO t1 VALUES(NULL,5); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 49 no such table: sqlite_sequence +stmt 49 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 106 no such table: t1 +==== autoinc-2.27 + + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 35 no such table: sqlite_sequence +==== autoinc-2.28 + + UPDATE sqlite_sequence SET seq='-12345678901234567890' + WHERE name='t1'; + INSERT INTO t1 VALUES(NULL,6); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 82 no such table: sqlite_sequence +stmt 82 err 1 -1 117 no such table: t1 +stmt 117 err 1 -1 139 no such table: t1 +==== autoinc-2.29 + + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 35 no such table: sqlite_sequence +==== autoinc-2.50 + + DELETE FROM t1 WHERE y>=3; + INSERT INTO t1 SELECT NULL, y+2 FROM t1; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 98 no such table: t1 +==== autoinc-2.51 + + SELECT * FROM sqlite_sequence +---- +stmt 0 err 1 -1 35 no such table: sqlite_sequence +==== autoinc-2.53 + + SELECT * FROM sqlite_sequence +---- +stmt 0 err 1 -1 37 no such table: sqlite_sequence +==== autoinc-2.54 + + DELETE FROM t1; + INSERT INTO t1 SELECT NULL, y FROM t2; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +stmt 22 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 91 no such table: t1 +==== autoinc-2.55 + + SELECT * FROM sqlite_sequence +---- +stmt 0 err 1 -1 37 no such table: sqlite_sequence +==== autoinc-2.71 + + INSERT INTO t2(d) VALUES(2); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 err 1 -1 68 no such table: sqlite_sequence +==== autoinc-2.72 + + INSERT INTO t1(x) VALUES(10000); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 72 no such table: sqlite_sequence +==== autoinc-2.73 + + CREATE TABLE t3(g INTEGER PRIMARY KEY AUTOINCREMENT, h); + INSERT INTO t3(h) VALUES(1); + SELECT * FROM sqlite_sequence; +---- +stmt 0 ok +stmt 61 err 1 -1 94 no such table: t3 +stmt 94 err 1 -1 129 no such table: sqlite_sequence +==== autoinc-2.74 + + INSERT INTO t2(d,e) VALUES(3,100); + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 39 no such table: t2 +stmt 39 err 1 -1 74 no such table: sqlite_sequence +==== autoinc-3.1 +SELECT name FROM sqlite_sequence +---- +stmt 0 err 1 -1 33 no such table: sqlite_sequence +==== autoinc-3.2 + + DROP TABLE t1; + SELECT name FROM sqlite_sequence; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 57 no such table: sqlite_sequence +==== autoinc-3.3 + + DROP TABLE t3; + SELECT name FROM sqlite_sequence; +---- +stmt 0 err 1 -1 19 no such table: t3 +stmt 19 err 1 -1 57 no such table: sqlite_sequence +==== autoinc-3.4 + + DROP TABLE t2; + SELECT name FROM sqlite_sequence; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 err 1 -1 57 no such table: sqlite_sequence +==== autoinc-4.1 + + SELECT 1, name FROM sqlite_master WHERE type='table'; + SELECT 2, name FROM temp.sqlite_master WHERE type='table'; +---- +stmt 0 ok +stmt 60 ok +==== autoinc-4.2 + + CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y); + CREATE TEMP TABLE t3(a INTEGER PRIMARY KEY AUTOINCREMENT, b); + SELECT 1, name FROM sqlite_master WHERE type='table'; + SELECT 2, name FROM sqlite_temp_master WHERE type='table'; +---- +stmt 0 ok +stmt 63 ok +stmt 131 ok +stmt 191 ok +==== autoinc-4.3 + + SELECT 1, * FROM main.sqlite_sequence; + SELECT 2, * FROM temp.sqlite_sequence; +---- +stmt 0 err 1 -1 45 no such table: main.sqlite_sequence +stmt 45 err 1 -1 90 no such table: temp.sqlite_sequence +==== autoinc-4.4 + + INSERT INTO t1 VALUES(10,1); + INSERT INTO t3 VALUES(20,2); + INSERT INTO t1 VALUES(NULL,3); + INSERT INTO t3 VALUES(NULL,4); +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 70 no such table: t3 +stmt 70 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 144 no such table: t3 +==== autoinc-4.4.1 + + SELECT * FROM t1 UNION ALL SELECT * FROM t3; +---- +stmt 0 err 1 -1 51 no such table: t3 +==== autoinc-4.5 + + SELECT 1, * FROM main.sqlite_sequence; + SELECT 2, * FROM temp.sqlite_sequence; +---- +stmt 0 err 1 -1 45 no such table: main.sqlite_sequence +stmt 45 err 1 -1 90 no such table: temp.sqlite_sequence +==== autoinc-4.6 + + INSERT INTO t1 SELECT * FROM t3; + SELECT 1, * FROM main.sqlite_sequence; + SELECT 2, * FROM temp.sqlite_sequence; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 84 no such table: main.sqlite_sequence +stmt 84 err 1 -1 129 no such table: temp.sqlite_sequence +==== autoinc-4.7 + + INSERT INTO t3 SELECT x+100, y FROM t1; + SELECT 1, * FROM main.sqlite_sequence; + SELECT 2, * FROM temp.sqlite_sequence; +---- +stmt 0 err 1 -1 47 no such table: t3 +stmt 47 err 1 -1 92 no such table: main.sqlite_sequence +stmt 92 err 1 -1 137 no such table: temp.sqlite_sequence +==== autoinc-4.8 + + DROP TABLE t3; + SELECT 1, * FROM main.sqlite_sequence; + SELECT 2, * FROM temp.sqlite_sequence; +---- +stmt 0 err 1 -1 21 no such table: t3 +stmt 21 err 1 -1 66 no such table: main.sqlite_sequence +stmt 66 err 1 -1 111 no such table: temp.sqlite_sequence +==== autoinc-4.9 + + CREATE TEMP TABLE t2(p INTEGER PRIMARY KEY AUTOINCREMENT, q); + INSERT INTO t2 SELECT * FROM t1; + DROP TABLE t1; + SELECT 1, * FROM main.sqlite_sequence; + SELECT 2, * FROM temp.sqlite_sequence; +---- +stmt 0 ok +stmt 68 err 1 -1 107 no such table: t2 +stmt 107 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 173 no such table: main.sqlite_sequence +stmt 173 err 1 -1 218 no such table: temp.sqlite_sequence +==== autoinc-4.10 + + DROP TABLE t2; + SELECT 1, * FROM main.sqlite_sequence; + SELECT 2, * FROM temp.sqlite_sequence; +---- +stmt 0 err 1 -1 21 no such table: t2 +stmt 21 err 1 -1 66 no such table: main.sqlite_sequence +stmt 66 err 1 -1 111 no such table: temp.sqlite_sequence +==== autoinc-5.2 + + INSERT INTO t4 VALUES(NULL,1); + SELECT 1, * FROM main.sqlite_sequence; + SELECT 2, * FROM temp.sqlite_sequence; + SELECT 3, * FROM aux.sqlite_sequence; +---- +stmt 0 err 1 -1 37 no such table: t4 +stmt 37 err 1 -1 82 no such table: main.sqlite_sequence +stmt 82 err 1 -1 127 no such table: temp.sqlite_sequence +stmt 127 err 1 -1 171 no such table: aux.sqlite_sequence +==== autoinc-5.4 + + SELECT 1, * FROM main.sqlite_sequence; + SELECT 2, * FROM temp.sqlite_sequence; + SELECT 3, * FROM aux.sqlite_sequence; +---- +stmt 0 err 1 -1 45 no such table: main.sqlite_sequence +stmt 45 err 1 -1 90 no such table: temp.sqlite_sequence +stmt 90 err 1 -1 134 no such table: aux.sqlite_sequence +==== autoinc-6.1 + + CREATE TABLE t6(v INTEGER PRIMARY KEY AUTOINCREMENT, w); + INSERT INTO t6 VALUES(2147483647,1); + SELECT seq FROM main.sqlite_sequence WHERE name='t6'; +---- +stmt 0 ok +stmt 63 err 1 -1 106 no such table: t6 +stmt 106 err 1 -1 166 no such table: main.sqlite_sequence +==== autoinc-6.1.dup1 + + CREATE TABLE t6(v INTEGER PRIMARY KEY AUTOINCREMENT, w); + INSERT INTO t6 VALUES(9223372036854775807,1); + SELECT seq FROM main.sqlite_sequence WHERE name='t6'; +---- +stmt 0 ok +stmt 63 err 1 -1 115 no such table: t6 +stmt 115 err 1 -1 175 no such table: main.sqlite_sequence +==== autoinc-6.2 + + INSERT INTO t6 VALUES(NULL,1); +---- +stmt 0 err 1 -1 35 no such table: t6 +==== autoinc-7.1 + + CREATE TABLE t7(x INTEGER, y REAL, PRIMARY KEY(x AUTOINCREMENT)); + INSERT INTO t7(y) VALUES(123); + INSERT INTO t7(y) VALUES(234); + DELETE FROM t7; + INSERT INTO t7(y) VALUES(345); + SELECT * FROM t7; +---- +stmt 0 ok +stmt 70 err 1 -1 105 no such table: t7 +stmt 105 err 1 -1 140 no such table: t7 +stmt 140 err 1 -1 160 no such table: t7 +stmt 160 err 1 -1 195 no such table: t7 +stmt 195 err 1 -1 217 no such table: t7 +==== autoinc-7.2 + + CREATE TABLE t8(x TEXT PRIMARY KEY AUTOINCREMENT); +---- +stmt 0 err 1 -1 54 AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY +==== autoinc-10.1 + + DELETE FROM sqlite_sequence; + CREATE TABLE t10a(a INTEGER PRIMARY KEY AUTOINCREMENT, b UNIQUE); + INSERT INTO t10a VALUES(888,9999); + CREATE TABLE t10b(x INTEGER PRIMARY KEY AUTOINCREMENT, y UNIQUE); + INSERT INTO t10b SELECT * FROM t10a; + SELECT * FROM sqlite_sequence; +---- +stmt 0 err 1 -1 31 no such table: sqlite_sequence +stmt 31 ok +stmt 99 err 1 -1 136 no such table: t10a +stmt 136 ok +stmt 204 err 1 -1 243 no such table: t10b +stmt 243 err 1 -1 276 no such table: sqlite_sequence +==== autoinc-11.1 + + CREATE TABLE t11(a INTEGER PRIMARY KEY AUTOINCREMENT,b UNIQUE); + INSERT INTO t11(a,b) VALUES(2,3),(5,6),(4,3),(1,2) + ON CONFLICT(b) DO UPDATE SET a=a+1000; + SELECT seq FROM sqlite_sequence WHERE name='t11'; +---- +stmt 0 ok +stmt 66 err 1 -1 162 no such table: t11 +stmt 162 err 1 -1 214 no such table: sqlite_sequence +==== 13.0 + + CREATE TABLE t1(i INTEGER PRIMARY KEY AUTOINCREMENT, j); + CREATE TABLE t2(i INTEGER PRIMARY KEY AUTOINCREMENT, j); + CREATE TABLE t3(i INTEGER PRIMARY KEY AUTOINCREMENT, j); + + INSERT INTO t1 VALUES(NULL, 1); + INSERT INTO t2 VALUES(NULL, 2); + INSERT INTO t3 VALUES(NULL, 3); + + SELECT name FROM sqlite_sequence; +---- +stmt 0 ok +stmt 59 ok +stmt 118 ok +stmt 177 err 1 -1 212 no such table: t1 +stmt 212 err 1 -1 246 no such table: t2 +stmt 246 err 1 -1 280 no such table: t3 +stmt 280 err 1 -1 317 no such table: sqlite_sequence +==== 13.1 + + UPDATE sqlite_sequence SET name=NULL WHERE name='t2'; + INSERT INTO t3 VALUES(NULL, 4); + DELETE FROM t3; + INSERT INTO t3 VALUES(NULL, 5); + SELECT * FROM t3; +---- +stmt 0 err 1 -1 56 no such table: sqlite_sequence +stmt 56 err 1 -1 90 no such table: t3 +stmt 90 err 1 -1 108 no such table: t3 +stmt 108 err 1 -1 142 no such table: t3 +stmt 142 err 1 -1 162 no such table: t3 diff --git a/parser/testdata/autoindex1.metadata.json b/parser/testdata/autoindex1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/autoindex1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/autoindex1.test b/parser/testdata/autoindex1.test new file mode 100644 index 0000000..75caf3f --- /dev/null +++ b/parser/testdata/autoindex1.test @@ -0,0 +1,427 @@ +==== autoindex1-299 + + UPDATE sqlite_stat1 SET stat='10000' WHERE tbl='t2'; + ANALYZE sqlite_master; + EXPLAIN QUERY PLAN + SELECT b, d FROM t1 CROSS JOIN t2 ON (c=a); +---- +stmt 0 err 1 -1 55 no such table: sqlite_stat1 +stmt 55 ok +stmt 80 err 1 -1 147 no such table: t1 +==== autoindex1-500 + + CREATE TABLE t501(a INTEGER PRIMARY KEY, b); + CREATE TABLE t502(x INTEGER PRIMARY KEY, y); + INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES('t501',null,'1000000'); + INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES('t502',null,'1000'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 47 ok +stmt 94 err 1 -1 166 no such table: sqlite_stat1 +stmt 166 err 1 -1 235 no such table: sqlite_stat1 +stmt 235 ok +==== autoindex1-600 + + CREATE TABLE flock_owner( + owner_rec_id INTEGER CONSTRAINT flock_owner_key PRIMARY KEY, + flock_no VARCHAR(6) NOT NULL REFERENCES flock (flock_no), + owner_person_id INTEGER NOT NULL REFERENCES person (person_id), + owner_change_date TEXT, last_changed TEXT NOT NULL, + CONSTRAINT fo_owner_date UNIQUE (flock_no, owner_change_date) + ); + CREATE TABLE sheep ( + Sheep_No char(7) NOT NULL, + Date_of_Birth char(8), + Sort_DoB text, + Flock_Book_Vol char(2), + Breeder_No char(6), + Breeder_Person integer, + Originating_Flock char(6), + Registering_Flock char(6), + Tag_Prefix char(9), + Tag_No char(15), + Sort_Tag_No integer, + Breeders_Temp_Tag char(15), + Sex char(1), + Sheep_Name char(32), + Sire_No char(7), + Dam_No char(7), + Register_Code char(1), + Colour char(48), + Colour_Code char(2), + Pattern_Code char(8), + Horns char(1), + Litter_Size char(1), + Coeff_of_Inbreeding real, + Date_of_Registration text, + Date_Last_Changed text, + UNIQUE(Sheep_No)); + CREATE INDEX fo_flock_no_index + ON flock_owner (flock_no); + CREATE INDEX fo_owner_change_date_index + ON flock_owner (owner_change_date); + CREATE INDEX fo_owner_person_id_index + ON flock_owner (owner_person_id); + CREATE INDEX sheep_org_flock_index + ON sheep (originating_flock); + CREATE INDEX sheep_reg_flock_index + ON sheep (registering_flock); +---- +stmt 0 ok +stmt 350 ok +stmt 1032 err 1 -1 1108 no such table: main.flock_owner +stmt 1108 err 1 -1 1202 no such table: main.flock_owner +stmt 1202 err 1 -1 1292 no such table: main.flock_owner +stmt 1292 err 1 -1 1372 no such table: main.sheep +stmt 1372 err 1 -1 1452 no such table: main.sheep +==== autoindex1-700 + + CREATE TABLE t5(a, b, c); +---- +stmt 0 ok +==== autoindex1-800 + + CREATE TABLE accounts( + _id INTEGER PRIMARY KEY AUTOINCREMENT, + account_name TEXT, + account_type TEXT, + data_set TEXT + ); + CREATE TABLE data( + _id INTEGER PRIMARY KEY AUTOINCREMENT, + package_id INTEGER REFERENCES package(_id), + mimetype_id INTEGER REFERENCES mimetype(_id) NOT NULL, + raw_contact_id INTEGER REFERENCES raw_contacts(_id) NOT NULL, + is_read_only INTEGER NOT NULL DEFAULT 0, + is_primary INTEGER NOT NULL DEFAULT 0, + is_super_primary INTEGER NOT NULL DEFAULT 0, + data_version INTEGER NOT NULL DEFAULT 0, + data1 TEXT, + data2 TEXT, + data3 TEXT, + data4 TEXT, + data5 TEXT, + data6 TEXT, + data7 TEXT, + data8 TEXT, + data9 TEXT, + data10 TEXT, + data11 TEXT, + data12 TEXT, + data13 TEXT, + data14 TEXT, + data15 TEXT, + data_sync1 TEXT, + data_sync2 TEXT, + data_sync3 TEXT, + data_sync4 TEXT + ); + CREATE TABLE mimetypes( + _id INTEGER PRIMARY KEY AUTOINCREMENT, + mimetype TEXT NOT NULL + ); + CREATE TABLE raw_contacts( + _id INTEGER PRIMARY KEY AUTOINCREMENT, + account_id INTEGER REFERENCES accounts(_id), + sourceid TEXT, + raw_contact_is_read_only INTEGER NOT NULL DEFAULT 0, + version INTEGER NOT NULL DEFAULT 1, + dirty INTEGER NOT NULL DEFAULT 0, + deleted INTEGER NOT NULL DEFAULT 0, + contact_id INTEGER REFERENCES contacts(_id), + aggregation_mode INTEGER NOT NULL DEFAULT 0, + aggregation_needed INTEGER NOT NULL DEFAULT 1, + custom_ringtone TEXT, + send_to_voicemail INTEGER NOT NULL DEFAULT 0, + times_contacted INTEGER NOT NULL DEFAULT 0, + last_time_contacted INTEGER, + starred INTEGER NOT NULL DEFAULT 0, + display_name TEXT, + display_name_alt TEXT, + display_name_source INTEGER NOT NULL DEFAULT 0, + phonetic_name TEXT, + phonetic_name_style TEXT, + sort_key TEXT, + sort_key_alt TEXT, + name_verified INTEGER NOT NULL DEFAULT 0, + sync1 TEXT, + sync2 TEXT, + sync3 TEXT, + sync4 TEXT, + sync_uid TEXT, + sync_version INTEGER NOT NULL DEFAULT 1, + has_calendar_event INTEGER NOT NULL DEFAULT 0, + modified_time INTEGER, + is_restricted INTEGER DEFAULT 0, + yp_source TEXT, + method_selected INTEGER DEFAULT 0, + custom_vibration_type INTEGER DEFAULT 0, + custom_ringtone_path TEXT, + message_notification TEXT, + message_notification_path TEXT + ); + CREATE INDEX data_mimetype_data1_index ON data (mimetype_id,data1); + CREATE INDEX data_raw_contact_id ON data (raw_contact_id); + CREATE UNIQUE INDEX mime_type ON mimetypes (mimetype); + CREATE INDEX raw_contact_sort_key1_index ON raw_contacts (sort_key); + CREATE INDEX raw_contact_sort_key2_index ON raw_contacts (sort_key_alt); + CREATE INDEX raw_contacts_contact_id_index ON raw_contacts (contact_id); + CREATE INDEX raw_contacts_source_id_account_id_index + ON raw_contacts (sourceid, account_id); + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 + VALUES('raw_contacts','raw_contact_sort_key2_index','1600 4'); + INSERT INTO sqlite_stat1 + VALUES('raw_contacts','raw_contact_sort_key1_index','1600 4'); + INSERT INTO sqlite_stat1 + VALUES('raw_contacts','raw_contacts_source_id_account_id_index', + '1600 1600 1600'); + INSERT INTO sqlite_stat1 + VALUES('raw_contacts','raw_contacts_contact_id_index','1600 1'); + INSERT INTO sqlite_stat1 VALUES('mimetypes','mime_type','12 1'); + INSERT INTO sqlite_stat1 + VALUES('data','data_mimetype_data1_index','9819 2455 3'); + INSERT INTO sqlite_stat1 VALUES('data','data_raw_contact_id','9819 7'); + INSERT INTO sqlite_stat1 VALUES('accounts',NULL,'1'); + DROP TABLE IF EXISTS sqlite_stat3; + ANALYZE sqlite_master; + + EXPLAIN QUERY PLAN + SELECT * FROM + data JOIN mimetypes ON (data.mimetype_id=mimetypes._id) + JOIN raw_contacts ON (data.raw_contact_id=raw_contacts._id) + JOIN accounts ON (raw_contacts.account_id=accounts._id) + WHERE mimetype_id=10 AND data14 IS NOT NULL; +---- +stmt 0 ok +stmt 137 ok +stmt 891 ok +stmt 992 ok +stmt 2346 err 1 -1 2416 no such table: main.data +stmt 2416 err 1 -1 2477 no such table: main.data +stmt 2477 err 1 -1 2534 no such table: main.mimetypes +stmt 2534 err 1 -1 2605 no such table: main.raw_contacts +stmt 2605 err 1 -1 2680 no such table: main.raw_contacts +stmt 2680 err 1 -1 2755 no such table: main.raw_contacts +stmt 2755 err 1 -1 2856 no such table: main.raw_contacts +stmt 2856 ok +stmt 2881 err 1 -1 2976 no such table: sqlite_stat1 +stmt 2976 err 1 -1 3071 no such table: sqlite_stat1 +stmt 3071 err 1 -1 3199 no such table: sqlite_stat1 +stmt 3199 err 1 -1 3296 no such table: sqlite_stat1 +stmt 3296 err 1 -1 3363 no such table: sqlite_stat1 +stmt 3363 err 1 -1 3453 no such table: sqlite_stat1 +stmt 3453 err 1 -1 3527 no such table: sqlite_stat1 +stmt 3527 err 1 -1 3583 no such table: sqlite_stat1 +stmt 3583 ok +stmt 3620 ok +stmt 3645 err 1 -1 3942 no such table: data +==== autoindex1-801 + + EXPLAIN QUERY PLAN + SELECT * FROM + data JOIN mimetypes ON (data.mimetype_id=mimetypes._id) + JOIN raw_contacts ON (data.raw_contact_id=raw_contacts._id) + JOIN accounts ON (raw_contacts.account_id=accounts._id) + WHERE mimetypes._id=10 AND data14 IS NOT NULL; +---- +stmt 0 err 1 -1 296 no such table: data +==== autoindex1-900 + + CREATE TABLE messages (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, message_id, document_id BLOB, in_reply_to, remote_id INTEGER, sender INTEGER, subject_prefix, subject INTEGER, date_sent INTEGER, date_received INTEGER, date_created INTEGER, date_last_viewed INTEGER, mailbox INTEGER, remote_mailbox INTEGER, original_mailbox INTEGER, flags INTEGER, read, flagged, size INTEGER, color, encoding, type INTEGER, pad, conversation_id INTEGER DEFAULT -1, snippet TEXT DEFAULT NULL, fuzzy_ancestor INTEGER DEFAULT NULL, automated_conversation INTEGER DEFAULT 0, root_status INTEGER DEFAULT -1, conversation_position INTEGER DEFAULT -1); + CREATE INDEX date_index ON messages(date_received); + CREATE INDEX date_last_viewed_index ON messages(date_last_viewed); + CREATE INDEX date_created_index ON messages(date_created); + CREATE INDEX message_message_id_mailbox_index ON messages(message_id, mailbox); + CREATE INDEX message_document_id_index ON messages(document_id); + CREATE INDEX message_read_index ON messages(read); + CREATE INDEX message_flagged_index ON messages(flagged); + CREATE INDEX message_mailbox_index ON messages(mailbox, date_received); + CREATE INDEX message_remote_mailbox_index ON messages(remote_mailbox, remote_id); + CREATE INDEX message_type_index ON messages(type); + CREATE INDEX message_conversation_id_conversation_position_index ON messages(conversation_id, conversation_position); + CREATE INDEX message_fuzzy_ancestor_index ON messages(fuzzy_ancestor); + CREATE INDEX message_subject_fuzzy_ancestor_index ON messages(subject, fuzzy_ancestor); + CREATE INDEX message_sender_subject_automated_conversation_index ON messages(sender, subject, automated_conversation); + CREATE INDEX message_sender_index ON messages(sender); + CREATE INDEX message_root_status ON messages(root_status); + CREATE TABLE subjects (ROWID INTEGER PRIMARY KEY, subject COLLATE RTRIM, normalized_subject COLLATE RTRIM); + CREATE INDEX subject_subject_index ON subjects(subject); + CREATE INDEX subject_normalized_subject_index ON subjects(normalized_subject); + CREATE TABLE addresses (ROWID INTEGER PRIMARY KEY, address COLLATE NOCASE, comment, UNIQUE(address, comment)); + CREATE INDEX addresses_address_index ON addresses(address); + CREATE TABLE mailboxes (ROWID INTEGER PRIMARY KEY, url UNIQUE, total_count INTEGER DEFAULT 0, unread_count INTEGER DEFAULT 0, unseen_count INTEGER DEFAULT 0, deleted_count INTEGER DEFAULT 0, unread_count_adjusted_for_duplicates INTEGER DEFAULT 0, change_identifier, source INTEGER, alleged_change_identifier); + CREATE INDEX mailboxes_source_index ON mailboxes(source); + CREATE TABLE labels (ROWID INTEGER PRIMARY KEY, message_id INTEGER NOT NULL, mailbox_id INTEGER NOT NULL, UNIQUE(message_id, mailbox_id)); + CREATE INDEX labels_message_id_mailbox_id_index ON labels(message_id, mailbox_id); + CREATE INDEX labels_mailbox_id_index ON labels(mailbox_id); + + explain query plan + SELECT messages.ROWID, + messages.message_id, + messages.remote_id, + messages.date_received, + messages.date_sent, + messages.flags, + messages.size, + messages.color, + messages.date_last_viewed, + messages.subject_prefix, + subjects.subject, + sender.comment, + sender.address, + NULL, + messages.mailbox, + messages.original_mailbox, + NULL, + NULL, + messages.type, + messages.document_id, + sender, + NULL, + messages.conversation_id, + messages.conversation_position, + agglabels.labels + FROM mailboxes AS mailbox + JOIN messages ON mailbox.ROWID = messages.mailbox + LEFT OUTER JOIN subjects ON messages.subject = subjects.ROWID + LEFT OUTER JOIN addresses AS sender ON messages.sender = sender.ROWID + LEFT OUTER JOIN ( + SELECT message_id, group_concat(mailbox_id) as labels + FROM labels GROUP BY message_id + ) AS agglabels ON messages.ROWID = agglabels.message_id + WHERE (mailbox.url = 'imap://email.app@imap.gmail.com/%5BGmail%5D/All%20Mail') + AND (messages.ROWID IN ( + SELECT labels.message_id + FROM labels JOIN mailboxes ON labels.mailbox_id = mailboxes.ROWID + WHERE mailboxes.url = 'imap://email.app@imap.gmail.com/INBOX')) + AND messages.mailbox in (6,12,18,24,30,36,42,1,7,13,19,25,31,37,43,2,8, + 14,20,26,32,38,3,9,15,21,27,33,39,4,10,16,22,28, + 34,40,5,11,17,23,35,41) + ORDER BY date_received DESC; +---- +stmt 0 ok +stmt 631 err 1 -1 685 no such table: main.messages +stmt 685 err 1 -1 754 no such table: main.messages +stmt 754 err 1 -1 815 no such table: main.messages +stmt 815 err 1 -1 897 no such table: main.messages +stmt 897 err 1 -1 964 no such table: main.messages +stmt 964 err 1 -1 1017 no such table: main.messages +stmt 1017 err 1 -1 1076 no such table: main.messages +stmt 1076 err 1 -1 1150 no such table: main.messages +stmt 1150 err 1 -1 1234 no such table: main.messages +stmt 1234 err 1 -1 1287 no such table: main.messages +stmt 1287 err 1 -1 1407 no such table: main.messages +stmt 1407 err 1 -1 1480 no such table: main.messages +stmt 1480 err 1 -1 1570 no such table: main.messages +stmt 1570 err 1 -1 1691 no such table: main.messages +stmt 1691 err 1 -1 1748 no such table: main.messages +stmt 1748 err 1 -1 1809 no such table: main.messages +stmt 1809 ok +stmt 1919 err 1 -1 1978 no such table: main.subjects +stmt 1978 err 1 -1 2059 no such table: main.subjects +stmt 2059 ok +stmt 2172 err 1 -1 2234 no such table: main.addresses +stmt 2234 ok +stmt 2546 err 1 -1 2606 no such table: main.mailboxes +stmt 2606 ok +stmt 2747 err 1 -1 2832 no such table: main.labels +stmt 2832 err 1 -1 2894 no such table: main.labels +stmt 2894 err 1 -1 4571 no such table: mailboxes +==== autoindex1-901 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z); + CREATE TABLE t2(a, b); + CREATE VIEW agg2 AS SELECT a, sum(b) AS m FROM t2 GROUP BY a; + EXPLAIN QUERY PLAN + SELECT t1.z, agg2.m + FROM t1 JOIN agg2 ON t1.y=agg2.m + WHERE t1.x IN (1,2,3); +---- +stmt 0 ok +stmt 48 ok +stmt 73 ok +stmt 137 err 1 -1 243 no such table: t1 +==== autoindex1-920 + + CREATE TABLE t920(x); + INSERT INTO t920 VALUES(3),(4),(5); + SELECT * FROM t920,(SELECT 0 FROM t920),(VALUES(9)) WHERE 5 IN (x); +---- +stmt 0 ok +stmt 24 err 1 -1 62 no such table: t920 +stmt 62 err 1 -1 132 no such table: t920 +==== autoindex1-1010 + + CREATE TABLE t11(w); + CREATE TABLE t12(y); + INSERT INTO t11 VALUES(NULL); + INSERT INTO t12 VALUES('notnull'); +---- +stmt 0 ok +stmt 23 ok +stmt 46 err 1 -1 78 no such table: t11 +stmt 78 err 1 -1 115 no such table: t12 +==== autoindex1-1020 + + SELECT count(*) FROM t11 LEFT JOIN t12 WHERE t12.y IS t11.w; +---- +stmt 0 err 1 -1 63 no such table: t11 +==== autoindex-1100 + + CREATE TABLE t1(a INT, b INT); + CREATE TABLE t2(c INT, d INT); + CREATE TABLE t3(e TEXT, f TEXT); + INSERT INTO t1 VALUES(1, 1); + INSERT INTO t2 VALUES(1, 2); + INSERT INTO t3 VALUES('abc', 'def'); +---- +stmt 0 ok +stmt 33 ok +stmt 66 ok +stmt 101 err 1 -1 132 no such table: t1 +stmt 132 err 1 -1 163 no such table: t2 +stmt 163 err 1 -1 202 no such table: t3 +==== autoindex-1110 + + SELECT * FROM t1, t2 LEFT JOIN t3 ON (t2.d=1) WHERE t2.c = +t1.a; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== autoindex-1120 + + SELECT * FROM t1 LEFT JOIN t2 ON (t2.c=+t1.a) LEFT JOIN t3 ON (t2.d IS NULL); +---- +stmt 0 err 1 -1 80 no such table: t1 +==== autoindex-1200 + + CREATE TABLE t1(a INT, b INT, x INT, PRIMARY KEY(a,b)) WITHOUT ROWID; + INSERT INTO t1 VALUES(1,2,90),(1,3,91),(1,4,92); + CREATE TABLE t2a(c INTEGER PRIMARY KEY, i1 INT); + CREATE TABLE t2b(i1 INTEGER PRIMARY KEY, d INT); + CREATE VIEW t2(c,d) AS SELECT c, d FROM t2a NATURAL JOIN t2b; + INSERT INTO t2a VALUES(3,93),(4,94),(5,95),(6,96),(7,97); + INSERT INTO t2b VALUES(91,11),(92,22),(93,33),(94,44),(95,55); + CREATE TABLE dual(dummy TEXT); + INSERT INTO dual(dummy) VALUES('x'); +---- +stmt 0 ok +stmt 72 err 1 -1 123 no such table: t1 +stmt 123 ok +stmt 174 ok +stmt 225 ok +stmt 289 err 1 -1 349 no such table: t2a +stmt 349 err 1 -1 414 no such table: t2b +stmt 414 ok +stmt 447 err 1 -1 486 no such table: dual +==== autoindex-1210 + + SELECT t1.*, t2.* FROM t2 LEFT OUTER JOIN t1 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 67 no such table: t2 +==== autoindex-1211 + + EXPLAIN QUERY PLAN + SELECT t1.*, t2.* FROM t2 LEFT OUTER JOIN t1 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 88 no such table: t2 diff --git a/parser/testdata/autoindex2.metadata.json b/parser/testdata/autoindex2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/autoindex2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/autoindex2.test b/parser/testdata/autoindex2.test new file mode 100644 index 0000000..fc5c568 --- /dev/null +++ b/parser/testdata/autoindex2.test @@ -0,0 +1,263 @@ +==== autoindex2-100 + + CREATE TABLE t1( + t1_id largeint, + did char(9), + ptime largeint, + exbyte char(4), + pe_id int, + field_id int, + mass float, + param10 float, + param11 float, + exmass float, + deviation float, + trange float, + vstatus int, + commit_status int, + formula char(329), + tier int DEFAULT 2, + ssid int DEFAULT 0, + last_operation largeint DEFAULT 0, + admin_uuid int DEFAULT 0, + previous_value float, + job_id largeint, + last_t1 largeint DEFAULT 0, + data_t1 int, + previous_date largeint DEFAULT 0, + flg8 int DEFAULT 1, + failed_fields char(100) + ); + CREATE INDEX t1x0 on t1 (t1_id); + CREATE INDEX t1x1 on t1 (ptime, vstatus); + CREATE INDEX t1x2 on t1 (did, ssid, ptime, vstatus, exbyte, t1_id); + CREATE INDEX t1x3 on t1 (job_id); + + CREATE TABLE t2( + did char(9), + client_did char(30), + description char(49), + uid int, + tzid int, + privilege int, + param2 int, + type char(30), + subtype char(32), + dparam1 char(7) DEFAULT '', + param5 char(3) DEFAULT '', + notional float DEFAULT 0.000000, + create_time largeint, + sample_time largeint DEFAULT 0, + param6 largeint, + frequency int, + expiration largeint, + uw_status int, + next_sample largeint, + last_sample largeint, + reserve1 char(29) DEFAULT '', + reserve2 char(29) DEFAULT '', + reserve3 char(29) DEFAULT '', + bxcdr char(19) DEFAULT 'XY', + ssid int DEFAULT 1, + last_t1_id largeint, + reserve4 char(29) DEFAULT '', + reserve5 char(29) DEFAULT '', + param12 int DEFAULT 0, + long_did char(100) DEFAULT '', + gr_code int DEFAULT 0, + drx char(100) DEFAULT '', + parent_id char(9) DEFAULT '', + param13 int DEFAULT 0, + position float DEFAULT 1.000000, + client_did3 char(100) DEFAULT '', + client_did4 char(100) DEFAULT '', + dlib_id char(9) DEFAULT '' + ); + CREATE INDEX t2x0 on t2 (did); + CREATE INDEX t2x1 on t2 (client_did); + CREATE INDEX t2x2 on t2 (long_did); + CREATE INDEX t2x3 on t2 (uid); + CREATE INDEX t2x4 on t2 (param2); + CREATE INDEX t2x5 on t2 (type); + CREATE INDEX t2x6 on t2 (subtype); + CREATE INDEX t2x7 on t2 (last_sample); + CREATE INDEX t2x8 on t2 (param6); + CREATE INDEX t2x9 on t2 (frequency); + CREATE INDEX t2x10 on t2 (privilege); + CREATE INDEX t2x11 on t2 (sample_time); + CREATE INDEX t2x12 on t2 (notional); + CREATE INDEX t2x13 on t2 (tzid); + CREATE INDEX t2x14 on t2 (gr_code); + CREATE INDEX t2x15 on t2 (parent_id); + + CREATE TABLE t3( + uid int, + param3 int, + uuid int, + acc_id int, + cust_num int, + numerix_id int, + pfy char(29), + param4 char(29), + param15 int DEFAULT 0, + flg7 int DEFAULT 0, + param21 int DEFAULT 0, + bxcdr char(2) DEFAULT 'PC', + c31 int DEFAULT 0, + c33 int DEFAULT 0, + c35 int DEFAULT 0, + c37 int, + mgr_uuid int, + back_up_uuid int, + priv_mars int DEFAULT 0, + is_qc int DEFAULT 0, + c41 int DEFAULT 0, + deleted int DEFAULT 0, + c47 int DEFAULT 1 + ); + CREATE INDEX t3x0 on t3 (uid); + CREATE INDEX t3x1 on t3 (param3); + CREATE INDEX t3x2 on t3 (uuid); + CREATE INDEX t3x3 on t3 (acc_id); + CREATE INDEX t3x4 on t3 (param4); + CREATE INDEX t3x5 on t3 (pfy); + CREATE INDEX t3x6 on t3 (is_qc); + SELECT count(*) FROM sqlite_master; +---- +stmt 0 ok +stmt 611 err 1 -1 646 no such table: main.t1 +stmt 646 err 1 -1 690 no such table: main.t1 +stmt 690 err 1 -1 760 no such table: main.t1 +stmt 760 err 1 -1 796 no such table: main.t1 +stmt 796 ok +stmt 1868 err 1 -1 1901 no such table: main.t2 +stmt 1901 err 1 -1 1941 no such table: main.t2 +stmt 1941 err 1 -1 1979 no such table: main.t2 +stmt 1979 err 1 -1 2012 no such table: main.t2 +stmt 2012 err 1 -1 2048 no such table: main.t2 +stmt 2048 err 1 -1 2082 no such table: main.t2 +stmt 2082 err 1 -1 2119 no such table: main.t2 +stmt 2119 err 1 -1 2160 no such table: main.t2 +stmt 2160 err 1 -1 2196 no such table: main.t2 +stmt 2196 err 1 -1 2235 no such table: main.t2 +stmt 2235 err 1 -1 2275 no such table: main.t2 +stmt 2275 err 1 -1 2317 no such table: main.t2 +stmt 2317 err 1 -1 2356 no such table: main.t2 +stmt 2356 err 1 -1 2391 no such table: main.t2 +stmt 2391 err 1 -1 2429 no such table: main.t2 +stmt 2429 err 1 -1 2469 no such table: main.t2 +stmt 2469 ok +stmt 2990 err 1 -1 3023 no such table: main.t3 +stmt 3023 err 1 -1 3059 no such table: main.t3 +stmt 3059 err 1 -1 3093 no such table: main.t3 +stmt 3093 err 1 -1 3129 no such table: main.t3 +stmt 3129 err 1 -1 3165 no such table: main.t3 +stmt 3165 err 1 -1 3198 no such table: main.t3 +stmt 3198 err 1 -1 3233 no such table: main.t3 +stmt 3233 ok +==== autoindex2-110 + + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('t1','t1x3','10747267 260'); + INSERT INTO sqlite_stat1 VALUES('t1','t1x2','10747267 121 113 2 2 2 1'); + INSERT INTO sqlite_stat1 VALUES('t1','t1x1','10747267 50 40'); + INSERT INTO sqlite_stat1 VALUES('t1','t1x0','10747267 1'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x15','39667 253'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x14','39667 19834'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x13','39667 13223'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x12','39667 7'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x11','39667 17'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x10','39667 19834'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x9','39667 7934'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x8','39667 11'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x7','39667 5'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x6','39667 242'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x5','39667 1984'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x4','39667 4408'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x3','39667 81'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x2','39667 551'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x1','39667 2'); + INSERT INTO sqlite_stat1 VALUES('t2','t2x0','39667 1'); + INSERT INTO sqlite_stat1 VALUES('t3','t3x6','569 285'); + INSERT INTO sqlite_stat1 VALUES('t3','t3x5','569 2'); + INSERT INTO sqlite_stat1 VALUES('t3','t3x4','569 2'); + INSERT INTO sqlite_stat1 VALUES('t3','t3x3','569 5'); + INSERT INTO sqlite_stat1 VALUES('t3','t3x2','569 3'); + INSERT INTO sqlite_stat1 VALUES('t3','t3x1','569 6'); + INSERT INTO sqlite_stat1 VALUES('t3','t3x0','569 1'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 25 err 1 -1 88 no such table: sqlite_stat1 +stmt 88 err 1 -1 163 no such table: sqlite_stat1 +stmt 163 err 1 -1 228 no such table: sqlite_stat1 +stmt 228 err 1 -1 289 no such table: sqlite_stat1 +stmt 289 err 1 -1 350 no such table: sqlite_stat1 +stmt 350 err 1 -1 413 no such table: sqlite_stat1 +stmt 413 err 1 -1 476 no such table: sqlite_stat1 +stmt 476 err 1 -1 535 no such table: sqlite_stat1 +stmt 535 err 1 -1 595 no such table: sqlite_stat1 +stmt 595 err 1 -1 658 no such table: sqlite_stat1 +stmt 658 err 1 -1 719 no such table: sqlite_stat1 +stmt 719 err 1 -1 778 no such table: sqlite_stat1 +stmt 778 err 1 -1 836 no such table: sqlite_stat1 +stmt 836 err 1 -1 896 no such table: sqlite_stat1 +stmt 896 err 1 -1 957 no such table: sqlite_stat1 +stmt 957 err 1 -1 1018 no such table: sqlite_stat1 +stmt 1018 err 1 -1 1077 no such table: sqlite_stat1 +stmt 1077 err 1 -1 1137 no such table: sqlite_stat1 +stmt 1137 err 1 -1 1195 no such table: sqlite_stat1 +stmt 1195 err 1 -1 1253 no such table: sqlite_stat1 +stmt 1253 err 1 -1 1311 no such table: sqlite_stat1 +stmt 1311 err 1 -1 1367 no such table: sqlite_stat1 +stmt 1367 err 1 -1 1423 no such table: sqlite_stat1 +stmt 1423 err 1 -1 1479 no such table: sqlite_stat1 +stmt 1479 err 1 -1 1535 no such table: sqlite_stat1 +stmt 1535 err 1 -1 1591 no such table: sqlite_stat1 +stmt 1591 err 1 -1 1647 no such table: sqlite_stat1 +stmt 1647 ok +==== autoindex2-120 + + EXPLAIN QUERY PLAN + SELECT + t1_id, + t1.did, + param2, + param3, + t1.ptime, + t1.trange, + t1.exmass, + t1.mass, + t1.vstatus, + type, + subtype, + t1.deviation, + t1.formula, + dparam1, + reserve1, + reserve2, + param4, + t1.last_operation, + t1.admin_uuid, + t1.previous_value, + t1.job_id, + client_did, + t1.last_t1, + t1.data_t1, + t1.previous_date, + param5, + param6, + mgr_uuid + FROM + t1, + t2, + t3 + WHERE + t1.ptime > 1393520400 + AND param3<>9001 + AND t3.flg7 = 1 + AND t1.did = t2.did + AND t2.uid = t3.uid + ORDER BY t1.ptime desc LIMIT 500; +---- +stmt 0 err 1 -1 673 no such table: t1 diff --git a/parser/testdata/autoindex3.metadata.json b/parser/testdata/autoindex3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/autoindex3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/autoindex3.test b/parser/testdata/autoindex3.test new file mode 100644 index 0000000..655685d --- /dev/null +++ b/parser/testdata/autoindex3.test @@ -0,0 +1,85 @@ +==== autoindex3-100 + + CREATE TABLE t1(a,b,x); + CREATE TABLE t2(c,d,y); + CREATE INDEX t1b ON t1(b); + CREATE INDEX t2d ON t2(d); + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('t1','t1b','10000 500'); + INSERT INTO sqlite_stat1 VALUES('t2','t2d','10000 500'); + ANALYZE sqlite_master; + EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE d=b; +---- +stmt 0 ok +stmt 26 ok +stmt 52 err 1 -1 81 no such table: main.t1 +stmt 81 err 1 -1 110 no such table: main.t2 +stmt 110 ok +stmt 135 err 1 -1 194 no such table: sqlite_stat1 +stmt 194 err 1 -1 253 no such table: sqlite_stat1 +stmt 253 ok +stmt 278 err 1 -1 331 no such table: t1 +==== autoindex3-110 + + EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE d>b AND x=y; +---- +stmt 0 err 1 -1 61 no such table: t1 +==== autoindex3-120 + + EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE d ''), + fixed_version_id INTEGER NOT NULL DEFAULT 0, + release TEXT NOT NULL, + package_kind TEXT NOT NULL DEFAULT 'unknown', + urgency TEXT NOT NULL, + bug_origin TEXT NOT NULL DEFAULT ''); + CREATE INDEX package_notes_package + ON package_notes(package); + CREATE UNIQUE INDEX package_notes_bug + ON package_notes(bug_name, package, release); + + CREATE TABLE debian_bugs + (bug INTEGER NOT NULL, + note INTEGER NOT NULL, + PRIMARY KEY (bug, note)); + + + CREATE VIEW debian_cve AS + SELECT DISTINCT debian_bugs.bug, st.bug_name + FROM package_notes, debian_bugs, source_package_status AS st + WHERE package_notes.bug_name = st.bug_name + AND debian_bugs.note = package_notes.id + ORDER BY debian_bugs.bug; +---- +stmt 0 ok +stmt 228 err 1 -1 322 no such table: main.source_package_status +stmt 322 ok +stmt 660 ok +stmt 1102 ok +stmt 1576 err 1 -1 1654 no such table: main.package_notes +stmt 1654 err 1 -1 1754 no such table: main.package_notes +stmt 1754 ok +stmt 1888 ok +==== 2.1 + + CREATE TABLE one(o); + INSERT INTO one DEFAULT VALUES; + + CREATE TABLE t1(x, z); + INSERT INTO t1 VALUES('aaa', 4.0); + INSERT INTO t1 VALUES('aaa', 4.0); + CREATE VIEW vvv AS + SELECT * FROM t1 + UNION ALL + SELECT 0, 0 WHERE 0; + + SELECT ( + SELECT sum(z) FROM vvv WHERE x='aaa' + ) FROM one; +---- +stmt 0 ok +stmt 23 err 1 -1 57 no such table: one +stmt 57 ok +stmt 83 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 157 no such table: t1 +stmt 157 ok +stmt 238 err 1 -1 307 no such table: one +==== 2.2 + + DROP TABLE t1; + CREATE TABLE t1(aaa); + INSERT INTO t1(aaa) VALUES(9); + SELECT ( + SELECT aaa FROM t1 GROUP BY ( + SELECT bbb FROM ( + SELECT ccc AS bbb FROM ( + SELECT 1 ccc + ) WHERE rowid IS NOT 1 + ) WHERE bbb = 1 + ) + ); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 41 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 264 no such table: t1 +==== 3.0 + + -- This is the original test case reported on the mailing list + CREATE TABLE artists ( + id integer NOT NULL PRIMARY KEY AUTOINCREMENT, + name varchar(255) + ); + CREATE TABLE albums ( + id integer NOT NULL PRIMARY KEY AUTOINCREMENT, + name varchar(255), + artist_id integer REFERENCES artists + ); + INSERT INTO artists (name) VALUES ('Ar'); + INSERT INTO albums (name, artist_id) VALUES ('Al', 1); + SELECT artists.* + FROM artists + INNER JOIN artists AS 'b' ON (b.id = artists.id) + WHERE (artists.id IN ( + SELECT albums.artist_id + FROM albums + WHERE ((name = 'Al') + AND (albums.artist_id IS NOT NULL) + AND (albums.id IN ( + SELECT id + FROM ( + SELECT albums.id, + row_number() OVER ( + PARTITION BY albums.artist_id + ORDER BY name + ) AS 'x' + FROM albums + WHERE (name = 'Al') + ) AS 't1' + WHERE (x = 1) + )) + AND (albums.id IN (1, 2))) + )); +---- +stmt 0 ok +stmt 168 ok +stmt 312 err 1 -1 356 no such table: artists +stmt 356 err 1 -1 413 no such table: albums +stmt 413 err 1 -1 1005 no such table: artists +==== 3.1 + + CREATE TABLE t1 (a); INSERT INTO t1 (a) VALUES (104); + CREATE TABLE t2 (b); INSERT INTO t2 (b) VALUES (104); + CREATE TABLE t3 (c); INSERT INTO t3 (c) VALUES (104); + CREATE TABLE t4 (d); INSERT INTO t4 (d) VALUES (104); + SELECT * + FROM t1 CROSS JOIN t2 ON (t1.a = t2.b) WHERE t2.b IN ( + SELECT t3.c + FROM t3 + WHERE t3.c IN ( + SELECT d FROM (SELECT DISTINCT d FROM t4) AS x WHERE x.d=104 + ) + ); +---- +stmt 0 ok +stmt 23 err 1 -1 56 no such table: t1 +stmt 56 ok +stmt 79 err 1 -1 112 no such table: t2 +stmt 112 ok +stmt 135 err 1 -1 168 no such table: t3 +stmt 168 ok +stmt 191 err 1 -1 224 no such table: t4 +stmt 224 err 1 -1 418 no such table: t1 +==== 3.2 + + CREATE TABLE t5(a, b, c, d); + CREATE INDEX t5a ON t5(a); + CREATE INDEX t5b ON t5(b); + CREATE TABLE t6(e); + INSERT INTO t6 VALUES(1); + INSERT INTO t5 VALUES(1,1,1,1), (2,2,2,2); + SELECT * FROM t5 WHERE (a=1 OR b=2) AND c IN ( + SELECT e FROM (SELECT DISTINCT e FROM t6) WHERE e=1 + ); +---- +stmt 0 ok +stmt 31 err 1 -1 60 no such table: main.t5 +stmt 60 err 1 -1 89 no such table: main.t5 +stmt 89 ok +stmt 111 err 1 -1 139 no such table: t6 +stmt 139 err 1 -1 184 no such table: t5 +stmt 184 err 1 -1 294 no such table: t5 +==== 3.3 + + CREATE TABLE t1(a1, a2, a3); + CREATE INDEX t1a2 ON t1(a2, a1); + CREATE INDEX t1a3 ON t1(a3, a1); + CREATE TABLE t2(d); + INSERT INTO t1 VALUES(3, 1, 1), (3, 2, 2); + INSERT INTO t2 VALUES(3); + SELECT *, 'x' FROM t1 WHERE (a2=1 OR a3=2) AND a1 = ( + SELECT d FROM (SELECT DISTINCT d FROM t2) WHERE d=3 + ); +---- +stmt 0 ok +stmt 31 err 1 -1 66 no such table: main.t1 +stmt 66 err 1 -1 101 no such table: main.t1 +stmt 101 ok +stmt 123 err 1 -1 168 no such table: t1 +stmt 168 err 1 -1 196 no such table: t2 +stmt 196 err 1 -1 313 no such table: t1 diff --git a/parser/testdata/autovacuum.metadata.json b/parser/testdata/autovacuum.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/autovacuum.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/autovacuum.test b/parser/testdata/autovacuum.test new file mode 100644 index 0000000..ff1d75a --- /dev/null +++ b/parser/testdata/autovacuum.test @@ -0,0 +1,269 @@ +==== autovacuum-1.1 + + PRAGMA auto_vacuum = 1; + CREATE TABLE av1(a); + CREATE INDEX av1_idx ON av1(a); +---- +stmt 0 ok +stmt 28 ok +stmt 53 err 1 -1 89 no such table: main.av1 +==== autovacuum-generated + + pragma integrity_check +---- +stmt 0 ok +==== autovacuum-generated.dup1 + + pragma integrity_check +---- +stmt 0 ok +==== autovacuum-generated.dup2 + + select a from av1 order by rowid +---- +stmt 0 err 1 -1 42 no such table: av1 +==== autovacuum-2.1.1 + + DROP TABLE av1; +---- +stmt 0 err 1 -1 20 no such table: av1 +==== autovacuum-2.2.1 + + CREATE TABLE av1(x); + SELECT rootpage FROM sqlite_master ORDER BY rootpage; +---- +stmt 0 ok +stmt 25 ok +==== autovacuum-2.2.3 + + CREATE TABLE av2(x); + SELECT rootpage FROM sqlite_master ORDER BY rootpage; +---- +stmt 0 ok +stmt 25 ok +==== autovacuum-2.2.5 + + CREATE TABLE av3(x); + SELECT rootpage FROM sqlite_master ORDER BY rootpage; +---- +stmt 0 ok +stmt 25 ok +==== autovacuum-2.2.7 + + CREATE TABLE av4(x); + SELECT rootpage FROM sqlite_master ORDER BY rootpage; +---- +stmt 0 ok +stmt 25 ok +==== autovacuum-2.2.9 + + select * from av1 +---- +stmt 0 err 1 -1 23 no such table: av1 +==== autovacuum-2.3.2 + + DROP TABLE av2; + SELECT rootpage FROM sqlite_master ORDER BY rootpage; +---- +stmt 0 err 1 -1 20 no such table: av2 +stmt 20 ok +==== autovacuum-2.3.4 + + SELECT x FROM av3; +---- +stmt 0 err 1 -1 23 no such table: av3 +==== autovacuum-2.3.5 + + SELECT x FROM av4; +---- +stmt 0 err 1 -1 23 no such table: av4 +==== autovacuum-2.4.3 + + SELECT rootpage FROM sqlite_master ORDER by rootpage +---- +stmt 0 ok +==== autovacuum-2.5.1 + + CREATE TABLE av1(a PRIMARY KEY, b, c); + INSERT INTO av1 VALUES('av1 a', 'av1 b', 'av1 c'); + + CREATE TABLE av2(a PRIMARY KEY, b, c); + CREATE INDEX av2_i1 ON av2(b); + CREATE INDEX av2_i2 ON av2(c); + INSERT INTO av2 VALUES('av2 a', 'av2 b', 'av2 c'); + + CREATE TABLE av3(a PRIMARY KEY, b, c); + CREATE INDEX av3_i1 ON av3(b); + INSERT INTO av3 VALUES('av3 a', 'av3 b', 'av3 c'); + + CREATE TABLE av4(a, b, c); + CREATE INDEX av4_i1 ON av4(a); + CREATE INDEX av4_i2 ON av4(b); + CREATE INDEX av4_i3 ON av4(c); + CREATE INDEX av4_i4 ON av4(a, b, c); + INSERT INTO av4 VALUES('av4 a', 'av4 b', 'av4 c'); +---- +stmt 0 ok +stmt 43 err 1 -1 98 no such table: av1 +stmt 98 ok +stmt 142 err 1 -1 177 no such table: main.av2 +stmt 177 err 1 -1 212 no such table: main.av2 +stmt 212 err 1 -1 267 no such table: av2 +stmt 267 ok +stmt 311 err 1 -1 346 no such table: main.av3 +stmt 346 err 1 -1 401 no such table: av3 +stmt 401 ok +stmt 433 err 1 -1 468 no such table: main.av4 +stmt 468 err 1 -1 503 no such table: main.av4 +stmt 503 err 1 -1 538 no such table: main.av4 +stmt 538 err 1 -1 579 no such table: main.av4 +stmt 579 err 1 -1 634 no such table: av4 +==== autovacuum-2.5.2 + + SELECT name, rootpage FROM sqlite_master; +---- +stmt 0 ok +==== autovacuum-2.5.2.1 + + SELECT * FROM av1 WHERE a = 'av1 a'; +---- +stmt 0 err 1 -1 41 no such table: av1 +==== autovacuum-2.5.2.2 + + SELECT * FROM av2 WHERE a = 'av2 a' AND b = 'av2 b' AND c = 'av2 c' +---- +stmt 0 err 1 -1 73 no such table: av2 +==== autovacuum-2.5.2.3 + + SELECT * FROM av3 WHERE a = 'av3 a' AND b = 'av3 b'; +---- +stmt 0 err 1 -1 57 no such table: av3 +==== autovacuum-2.5.2.4 + + SELECT * FROM av4 WHERE a = 'av4 a' AND b = 'av4 b' AND c = 'av4 c'; +---- +stmt 0 err 1 -1 73 no such table: av4 +==== autovacuum-2.5.3 + + DROP TABLE av3; + SELECT name, rootpage FROM sqlite_master; +---- +stmt 0 err 1 -1 20 no such table: av3 +stmt 20 ok +==== autovacuum-2.5.3.1 + + SELECT * FROM av1 WHERE a = 'av1 a'; +---- +stmt 0 err 1 -1 41 no such table: av1 +==== autovacuum-2.5.3.2 + + SELECT * FROM av2 WHERE a = 'av2 a' AND b = 'av2 b' AND c = 'av2 c' +---- +stmt 0 err 1 -1 73 no such table: av2 +==== autovacuum-2.5.3.3 + + SELECT * FROM av4 WHERE a = 'av4 a' AND b = 'av4 b' AND c = 'av4 c'; +---- +stmt 0 err 1 -1 73 no such table: av4 +==== autovacuum-2.5.4 + + DROP TABLE av1; + SELECT name, rootpage FROM sqlite_master; +---- +stmt 0 err 1 -1 20 no such table: av1 +stmt 20 ok +==== autovacuum-2.5.4.2 + + SELECT * FROM av2 WHERE a = 'av2 a' AND b = 'av2 b' AND c = 'av2 c' +---- +stmt 0 err 1 -1 73 no such table: av2 +==== autovacuum-2.5.4.4 + + SELECT * FROM av4 WHERE a = 'av4 a' AND b = 'av4 b' AND c = 'av4 c'; +---- +stmt 0 err 1 -1 73 no such table: av4 +==== autovacuum-2.5.5 + + DROP TABLE av4; + SELECT name, rootpage FROM sqlite_master; +---- +stmt 0 err 1 -1 20 no such table: av4 +stmt 20 ok +==== autovacuum-2.5.5.2 + + SELECT * FROM av2 WHERE a = 'av2 a' AND b = 'av2 b' AND c = 'av2 c' +---- +stmt 0 err 1 -1 73 no such table: av2 +==== autovacuum-3.1 + + PRAGMA auto_vacuum; +---- +stmt 0 ok +==== autovacuum-3.3 + + PRAGMA auto_vacuum = 0; + PRAGMA auto_vacuum; +---- +stmt 0 ok +stmt 28 ok +==== autovacuum-3.5 + + CREATE TABLE av1(x); + PRAGMA auto_vacuum; +---- +stmt 0 ok +stmt 25 ok +==== autovacuum-3.6 + + PRAGMA auto_vacuum = 1; + PRAGMA auto_vacuum; +---- +stmt 0 ok +stmt 28 ok +==== autovacuum-4.2 + + CREATE UNIQUE INDEX av1_i ON av1(a); +---- +stmt 0 err 1 -1 41 no such table: main.av1 +==== autovacuum-4.3 + + SELECT sum(a) FROM av1; +---- +stmt 0 err 1 -1 28 no such table: av1 +==== autovacuum-4.4 + + COMMIT; +---- +stmt 0 ok +==== autovacuum-9.1 + + DROP TABLE t1; + DROP TABLE t2; + DROP TABLE t3; + DROP TABLE t4; + DROP TABLE t5; + PRAGMA page_count; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 57 no such table: t3 +stmt 57 err 1 -1 76 no such table: t4 +stmt 76 err 1 -1 95 no such table: t5 +stmt 95 ok +==== autovacuum-9.4 + INSERT INTO t1 SELECT NULL, randstr(50,50) FROM t1 +---- +stmt 0 err 1 -1 52 no such table: t1 +==== autovacuum-10.1 + + DROP TABLE t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(25, randomblob(104)); + REPLACE INTO t1 VALUES(25, randomblob(1117)); + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 62 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 156 no such table: t1 +stmt 156 ok diff --git a/parser/testdata/autovacuum2.metadata.json b/parser/testdata/autovacuum2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/autovacuum2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/autovacuum2.test b/parser/testdata/autovacuum2.test new file mode 100644 index 0000000..008f3f6 --- /dev/null +++ b/parser/testdata/autovacuum2.test @@ -0,0 +1,65 @@ +==== autovacuum2-1.0 + + PRAGMA page_size=1024; + PRAGMA auto_vacuum=FULL; + CREATE TABLE t1(x); + VACUUM; + INSERT INTO t1(x) VALUES(zeroblob(10000)); + PRAGMA page_count; +---- +stmt 0 ok +stmt 25 ok +stmt 52 ok +stmt 74 ok +stmt 84 err 1 -1 129 no such table: t1 +stmt 129 ok +==== autovacuum2-1.1 + + BEGIN; + DELETE FROM t1; + PRAGMA freelist_count; + PRAGMA page_count; +---- +stmt 0 ok +stmt 9 err 1 -1 27 no such table: t1 +stmt 27 ok +stmt 52 ok +==== autovacuum2-1.2 + + COMMIT; +---- +stmt 0 ok +==== autovacuum2-1.4 + + PRAGMA freelist_count; + PRAGMA page_count; +---- +stmt 0 ok +stmt 25 ok +==== autovacuum2-1.5 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== autovacuum2-1.10 + + CREATE TABLE t2(x); + PRAGMA freelist_count; +---- +stmt 0 ok +stmt 22 ok +==== autovacuum2-1.20 + + BEGIN; + INSERT INTO t1(x) VALUES(zeroblob(10000)); + DELETE FROM t1; + PRAGMA freelist_count; + COMMIT; + PRAGMA freelist_count; +---- +stmt 0 ok +stmt 9 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 72 no such table: t1 +stmt 72 ok +stmt 97 ok +stmt 107 ok diff --git a/parser/testdata/avtrans.metadata.json b/parser/testdata/avtrans.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/avtrans.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/avtrans.test b/parser/testdata/avtrans.test new file mode 100644 index 0000000..4dd57f9 --- /dev/null +++ b/parser/testdata/avtrans.test @@ -0,0 +1,512 @@ +==== avtrans-1.0.1 + PRAGMA auto_vacuum +---- +stmt 0 ok +==== avtrans-1.1 + + CREATE TABLE two(a int PRIMARY KEY, b text); + INSERT INTO two VALUES(1,'I'); + INSERT INTO two VALUES(5,'V'); + INSERT INTO two VALUES(10,'X'); + SELECT b FROM two ORDER BY a; +---- +stmt 0 ok +stmt 49 err 1 -1 84 no such table: two +stmt 84 err 1 -1 119 no such table: two +stmt 119 err 1 -1 155 no such table: two +stmt 155 err 1 -1 189 no such table: two +==== avtrans-2.10 + + BEGIN; + SELECT a FROM one ORDER BY a; + SELECT a FROM two ORDER BY a; + END; +---- +stmt 0 ok +stmt 11 err 1 -1 45 no such table: one +stmt 45 err 1 -1 79 no such table: two +stmt 79 ok +==== avtrans-3.1 + + BEGIN; + UPDATE one SET a = 0 WHERE 0; + SELECT a FROM one ORDER BY a; +---- +stmt 0 ok +stmt 11 err 1 -1 45 no such table: one +stmt 45 err 1 -1 79 no such table: one +==== avtrans-3.4 + + INSERT INTO one VALUES(4,'four'); +---- +stmt 0 err 1 -1 38 no such table: one +==== avtrans-3.7 + + INSERT INTO two VALUES(4,'IV'); +---- +stmt 0 err 1 -1 36 no such table: two +==== avtrans-3.10 +END TRANSACTION +---- +stmt 0 ok +==== avtrans-5.1 +SELECT name FROM sqlite_master WHERE type='table' ORDER BY name +---- +stmt 0 ok +==== avtrans-5.4 +SELECT a,b FROM one ORDER BY b +---- +stmt 0 err 1 -1 31 no such table: one +==== avtrans-5.8 + + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name +---- +stmt 0 ok +==== avtrans-5.9 + + BEGIN TRANSACTION; + CREATE TABLE t1(a int, b int, c int); + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 ok +stmt 65 ok +==== avtrans-5.10 + + CREATE INDEX i1 ON t1(a); + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 ok +==== avtrans-5.11 + + COMMIT; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 12 ok +==== avtrans-5.12 + + BEGIN TRANSACTION; + CREATE TABLE t2(a int, b int, c int); + CREATE INDEX i2a ON t2(a); + CREATE INDEX i2b ON t2(b); + DROP TABLE t1; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 ok +stmt 65 err 1 -1 96 no such table: main.t2 +stmt 96 err 1 -1 127 no such table: main.t2 +stmt 127 err 1 -1 146 no such table: t1 +stmt 146 ok +==== avtrans-5.13 + + ROLLBACK; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 14 ok +==== avtrans-5.14 + + BEGIN TRANSACTION; + DROP INDEX i1; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 ok +==== avtrans-5.15 + + ROLLBACK; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 14 ok +==== avtrans-5.16 + + BEGIN TRANSACTION; + DROP INDEX i1; + CREATE TABLE t2(x int, y int, z int); + CREATE INDEX i2x ON t2(x); + CREATE INDEX i2y ON t2(y); + INSERT INTO t2 VALUES(1,2,3); + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 ok +stmt 84 err 1 -1 115 no such table: main.t2 +stmt 115 err 1 -1 146 no such table: main.t2 +stmt 146 err 1 -1 180 no such table: t2 +stmt 180 ok +==== avtrans-5.17 + + COMMIT; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 12 ok +==== avtrans-5.18 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== avtrans-5.19 + + SELECT x FROM t2 WHERE y=2; +---- +stmt 0 err 1 -1 32 no such table: t2 +==== avtrans-5.20 + + BEGIN TRANSACTION; + DROP TABLE t1; + DROP TABLE t2; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such table: t1 +stmt 42 err 1 -1 61 no such table: t2 +stmt 61 ok +==== avtrans-5.22 + + ROLLBACK; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 14 ok +==== avtrans-5.23 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== avtrans-6.7 + + COMMIT; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 34 no such table: t1 +==== avtrans-6.16 + + COMMIT; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 34 no such table: t1 +==== avtrans-6.20 + + CREATE TABLE t1(a integer primary key,b,c); + INSERT INTO t1 VALUES(1,-2,-3); + INSERT INTO t1 VALUES(4,-5,-6); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 48 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 142 no such table: t1 +==== avtrans-6.21 + + CREATE INDEX i1 ON t1(b); + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 err 1 -1 62 no such table: t1 +==== avtrans-6.22 + + BEGIN TRANSACTION; + DROP INDEX i1; + SELECT * FROM t1 WHERE b<1; + ROLLBACK; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 err 1 -1 74 no such table: t1 +stmt 74 ok +==== avtrans-6.23 + + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== avtrans-6.24 + + BEGIN TRANSACTION; + DROP TABLE t1; + ROLLBACK; + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such table: t1 +stmt 42 ok +stmt 56 err 1 -1 88 no such table: t1 +==== avtrans-6.25 + + BEGIN TRANSACTION; + DROP INDEX i1; + CREATE INDEX i1 ON t1(c); + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 err 1 -1 72 no such table: main.t1 +stmt 72 err 1 -1 104 no such table: t1 +==== avtrans-6.26 + + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== avtrans-6.27 + + ROLLBACK; + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 14 err 1 -1 46 no such table: t1 +==== avtrans-6.28 + + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== avtrans-6.30 + + BEGIN TRANSACTION; + DROP TABLE t1; + CREATE TABLE t1(a int unique,b,c); + COMMIT; + INSERT INTO t1 VALUES(1,-2,-3); + INSERT INTO t1 VALUES(4,-5,-6); + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such table: t1 +stmt 42 ok +stmt 81 ok +stmt 93 err 1 -1 129 no such table: t1 +stmt 129 err 1 -1 165 no such table: t1 +stmt 165 err 1 -1 198 no such table: t1 +==== avtrans-6.31 + + CREATE INDEX i1 ON t1(b); + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 err 1 -1 62 no such table: t1 +==== avtrans-6.32 + + BEGIN TRANSACTION; + DROP INDEX i1; + SELECT * FROM t1 WHERE b<1; + ROLLBACK; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 err 1 -1 74 no such table: t1 +stmt 74 ok +==== avtrans-6.33 + + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== avtrans-6.34 + + BEGIN TRANSACTION; + DROP TABLE t1; + ROLLBACK; + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such table: t1 +stmt 42 ok +stmt 56 err 1 -1 88 no such table: t1 +==== avtrans-6.35 + + BEGIN TRANSACTION; + DROP INDEX i1; + CREATE INDEX i1 ON t1(c); + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 err 1 -1 72 no such table: main.t1 +stmt 72 err 1 -1 104 no such table: t1 +==== avtrans-6.36 + + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== avtrans-6.37 + + DROP INDEX i1; + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 19 no such index: i1 +stmt 19 err 1 -1 51 no such table: t1 +==== avtrans-6.38 + + ROLLBACK; + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 14 err 1 -1 46 no such table: t1 +==== avtrans-6.39 + + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== avtrans-7.2 +SELECT md5sum(x,y,z) FROM t2 +---- +stmt 0 err 1 -1 29 no such table: t2 +==== avtrans-7.2.1 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== avtrans-7.3 + + BEGIN; + DELETE FROM t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 31 no such table: t2 +stmt 31 ok +stmt 45 err 1 -1 79 no such table: t2 +==== avtrans-7.4 + + BEGIN; + INSERT INTO t2 SELECT * FROM t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 48 no such table: t2 +stmt 48 ok +stmt 62 err 1 -1 96 no such table: t2 +==== avtrans-7.5 + + BEGIN; + DELETE FROM t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 31 no such table: t2 +stmt 31 ok +stmt 45 err 1 -1 79 no such table: t2 +==== avtrans-7.6 + + BEGIN; + INSERT INTO t2 SELECT * FROM t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 48 no such table: t2 +stmt 48 ok +stmt 62 err 1 -1 96 no such table: t2 +==== avtrans-7.7 + + BEGIN; + CREATE TABLE t3 AS SELECT * FROM t2; + INSERT INTO t2 SELECT * FROM t3; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 52 no such table: t2 +stmt 52 err 1 -1 89 no such table: t2 +stmt 89 ok +stmt 103 err 1 -1 137 no such table: t2 +==== avtrans-7.8 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== avtrans-7.9 + + BEGIN; + CREATE TEMP TABLE t3 AS SELECT * FROM t2; + INSERT INTO t2 SELECT * FROM t3; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 13 err 1 -1 61 no such table: t2 +stmt 61 err 1 -1 100 no such table: t2 +stmt 100 ok +stmt 116 err 1 -1 152 no such table: t2 +==== avtrans-7.10 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== avtrans-7.11 + + BEGIN; + CREATE TEMP TABLE t3 AS SELECT * FROM t2; + INSERT INTO t2 SELECT * FROM t3; + DROP INDEX i2x; + DROP INDEX i2y; + CREATE INDEX i3a ON t3(x); + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 13 err 1 -1 61 no such table: t2 +stmt 61 err 1 -1 100 no such table: t2 +stmt 100 err 1 -1 122 no such index: i2x +stmt 122 err 1 -1 144 no such index: i2y +stmt 144 err 1 -1 177 no such table: main.t3 +stmt 177 ok +stmt 193 err 1 -1 229 no such table: t2 +==== avtrans-7.12 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== avtrans-7.13 + + BEGIN; + DROP TABLE t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 13 err 1 -1 34 no such table: t2 +stmt 34 ok +stmt 50 err 1 -1 86 no such table: t2 +==== avtrans-7.14 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== avtrans-8.2 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== avtrans-generated + + INSERT INTO t3 SELECT randstr(10,400) FROM t3 WHERE random()%10==0; +---- +stmt 0 err 1 -1 77 no such table: t3 diff --git a/parser/testdata/backup.metadata.json b/parser/testdata/backup.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/backup.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/backup.test b/parser/testdata/backup.test new file mode 100644 index 0000000..7fafa87 --- /dev/null +++ b/parser/testdata/backup.test @@ -0,0 +1,110 @@ +==== backup-1.1 + + BEGIN; + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + INSERT INTO t1 VALUES(1, randstr(1000,1000)); + INSERT INTO t1 VALUES(2, randstr(1000,1000)); + INSERT INTO t1 VALUES(3, randstr(1000,1000)); + INSERT INTO t1 VALUES(4, randstr(1000,1000)); + INSERT INTO t1 VALUES(5, randstr(1000,1000)); + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 38 err 1 -1 71 no such table: main.t1 +stmt 71 err 1 -1 121 no such table: t1 +stmt 121 err 1 -1 171 no such table: t1 +stmt 171 err 1 -1 221 no such table: t1 +stmt 221 err 1 -1 271 no such table: t1 +stmt 271 err 1 -1 321 no such table: t1 +stmt 321 ok +==== backup-generated + + PRAGMA cache_size = 10; + BEGIN; + INSERT INTO t1 SELECT '', randstr(1000,1000) FROM t1; + INSERT INTO t1 SELECT '', randstr(1000,1000) FROM t1; + INSERT INTO t1 SELECT '', randstr(1000,1000) FROM t1; + INSERT INTO t1 SELECT '', randstr(1000,1000) FROM t1; + COMMIT; +---- +stmt 0 ok +stmt 30 ok +stmt 43 err 1 -1 103 no such table: t1 +stmt 103 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 223 no such table: t1 +stmt 223 err 1 -1 283 no such table: t1 +stmt 283 ok +==== backup-generated.dup1 + UPDATE t1 SET b = randstr(1000,1000) +---- +stmt 0 err 1 -1 38 no such table: t1 +==== backup-generated.dup2 + UPDATE t1 SET b = randstr(1000,1000) +---- +stmt 0 err 1 -1 38 no such table: t1 +==== backup-generated.dup3 + + PRAGMA auto_vacuum = incremental; + BEGIN; + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + INSERT INTO t1 VALUES(1, randstr(1000,1000)); + INSERT INTO t1 VALUES(2, randstr(1000,1000)); + INSERT INTO t1 VALUES(3, randstr(1000,1000)); + INSERT INTO t1 VALUES(4, randstr(1000,1000)); + INSERT INTO t1 VALUES(5, randstr(1000,1000)); + COMMIT; +---- +stmt 0 ok +stmt 40 ok +stmt 53 ok +stmt 82 err 1 -1 117 no such table: main.t1 +stmt 117 err 1 -1 169 no such table: t1 +stmt 169 err 1 -1 221 no such table: t1 +stmt 221 err 1 -1 273 no such table: t1 +stmt 273 err 1 -1 325 no such table: t1 +stmt 325 err 1 -1 377 no such table: t1 +stmt 377 ok +==== backup-7.2.1 + + BEGIN; + INSERT INTO t1 VALUES(1, 4); +---- +stmt 0 ok +stmt 12 err 1 -1 45 no such table: t1 +==== backup-8.9 + PRAGMA lock_status +---- +stmt 0 ok +==== backup-10.1.1 + + BEGIN; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, randstr(1000,1000)); + INSERT INTO t1 VALUES(2, randstr(1000,1000)); + INSERT INTO t1 VALUES(3, randstr(1000,1000)); + INSERT INTO t1 VALUES(4, randstr(1000,1000)); + INSERT INTO t1 VALUES(5, randstr(1000,1000)); + CREATE INDEX i1 ON t1(a, b); + COMMIT; +---- +stmt 0 ok +stmt 13 ok +stmt 42 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 198 no such table: t1 +stmt 198 err 1 -1 250 no such table: t1 +stmt 250 err 1 -1 302 no such table: t1 +stmt 302 err 1 -1 337 no such table: main.t1 +stmt 337 ok +==== backup-10.1.3 + + UPDATE t1 SET b = randstr(500,500); +---- +stmt 0 err 1 -1 42 no such table: t1 +==== backup-generated.dup4 + UPDATE t1 SET b = randomblob(200) WHERE a IN (1, 250) +---- +stmt 0 err 1 -1 55 no such table: t1 diff --git a/parser/testdata/backup4.metadata.json b/parser/testdata/backup4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/backup4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/backup4.test b/parser/testdata/backup4.test new file mode 100644 index 0000000..36220f6 --- /dev/null +++ b/parser/testdata/backup4.test @@ -0,0 +1,34 @@ +==== 1.0 + + CREATE TABLE t1(x, y, UNIQUE(x, y)); + INSERT INTO t1 VALUES('one', 'two'); + SELECT * FROM t1 WHERE x='one'; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 39 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 112 no such table: t1 +stmt 112 ok +==== 1.2 + + SELECT * FROM t1 WHERE x='one'; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 ok +==== 2.1 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t1 +==== 3.1 + + PRAGMA page_size = 4096; + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 27 ok +stmt 52 err 1 -1 83 no such table: main.t1 diff --git a/parser/testdata/backup5.metadata.json b/parser/testdata/backup5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/backup5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/backup5.test b/parser/testdata/backup5.test new file mode 100644 index 0000000..f1e9ef1 --- /dev/null +++ b/parser/testdata/backup5.test @@ -0,0 +1,49 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + INSERT INTO t2 VALUES(1, 1); + INSERT INTO t2 VALUES(2, 2); + INSERT INTO t2 VALUES(3, 3); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 81 no such table: t2 +stmt 81 err 1 -1 112 no such table: t2 +stmt 112 err 1 -1 143 no such table: t2 +==== 2.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + INSERT INTO t2 VALUES(1, 1); + INSERT INTO t2 VALUES(2, 2); + INSERT INTO t2 VALUES(3, 3); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t2(a); + ATTACH 'test2.db' AS aux2; +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 81 no such table: t2 +stmt 81 err 1 -1 112 no such table: t2 +stmt 112 err 1 -1 143 no such table: t2 +stmt 143 err 1 -1 171 no such table: main.t1 +stmt 171 err 1 -1 199 no such table: main.t2 +stmt 199 ok +==== 2.2 + + CREATE TABLE aux7.t3(a, b); + CREATE TABLE aux7.t4(a, b); + INSERT INTO t4 VALUES(1, 1); + INSERT INTO t4 VALUES(2, 2); + INSERT INTO t4 VALUES(3, 3); + CREATE INDEX aux7.i3 ON t3(a); + CREATE INDEX aux7.i4 ON t4(a); +---- +stmt 0 err 1 16 24 unknown database aux7 +stmt 30 err 1 46 54 unknown database aux7 +stmt 60 err 1 -1 91 no such table: t4 +stmt 91 err 1 -1 122 no such table: t4 +stmt 122 err 1 -1 153 no such table: t4 +stmt 153 err 1 169 186 unknown database aux7 +stmt 186 err 1 202 219 unknown database aux7 diff --git a/parser/testdata/backup_malloc.metadata.json b/parser/testdata/backup_malloc.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/backup_malloc.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/backup_malloc.test b/parser/testdata/backup_malloc.test new file mode 100644 index 0000000..67378e6 --- /dev/null +++ b/parser/testdata/backup_malloc.test @@ -0,0 +1,13 @@ +==== 3.0 + + PRAGMA page_size = 16384; + BEGIN; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + COMMIT; +---- +stmt 0 ok +stmt 28 ok +stmt 37 ok +stmt 62 err 1 -1 93 no such table: t1 +stmt 93 ok diff --git a/parser/testdata/basexx1.metadata.json b/parser/testdata/basexx1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/basexx1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/basexx1.test b/parser/testdata/basexx1.test new file mode 100644 index 0000000..c1dab03 --- /dev/null +++ b/parser/testdata/basexx1.test @@ -0,0 +1,150 @@ +==== 100 + + SELECT base64(x'')||base85(x''); +---- +stmt 0 err 1 23 35 no such function: base85 +==== 101 + + SELECT hex(x'01'||base64('')||base85('')||x'02'); +---- +stmt 0 err 1 33 52 no such function: base85 +==== 102 + + SELECT base64(x'000102030405'); + SELECT base64(x'0001020304'); + SELECT base64(x'00010203'); +---- +stmt 0 err 1 10 34 no such function: base64 +stmt 34 err 1 44 66 no such function: base64 +stmt 66 err 1 76 96 no such function: base64 +==== 102-b + + WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c wHERE n<5000) + SELECT sum(length(base64(randomblob(n)))) FROM c; +---- +stmt 0 err 1 99 130 no such function: base64 +==== 103 + + SELECT hex(base64('AAECAwQF')); + SELECT hex(base64('AAECAwQ=')); + SELECT hex(base64('AAECAw==')); +---- +stmt 0 err 1 14 34 no such function: base64 +stmt 34 err 1 48 68 no such function: base64 +stmt 68 err 1 82 102 no such function: base64 +==== 104 + + SELECT hex(base64(' AAECAwQF ')); + SELECT hex(base64(' AAECAwQ')); + SELECT hex(base64('AAECAw ')); +---- +stmt 0 err 1 14 36 no such function: base64 +stmt 36 err 1 50 70 no such function: base64 +stmt 70 err 1 84 103 no such function: base64 +==== 105 + + SELECT base85(x'000102030405'); + SELECT base85(x'0001020304'); + SELECT base85(x'00010203'); +---- +stmt 0 err 1 10 34 no such function: base85 +stmt 34 err 1 44 66 no such function: base85 +stmt 66 err 1 76 96 no such function: base85 +==== 106 + + SELECT hex(base85('##/2,#2/')); + SELECT hex(base85('##/2,#*')); + SELECT hex(base85('##/2,')); + SELECT hex(base85(' ##/2,#2/ ')); + SELECT hex(base85(' ##/2,#*')); + SELECT hex(base85('##/2, ')); +---- +stmt 0 err 1 14 34 no such function: base85 +stmt 34 err 1 48 67 no such function: base85 +stmt 67 err 1 81 98 no such function: base85 +stmt 98 err 1 112 134 no such function: base85 +stmt 134 err 1 148 168 no such function: base85 +stmt 168 err 1 182 200 no such function: base85 +==== 107 + + CREATE TEMP TABLE rb( len int, b blob ) STRICT; + INSERT INTO rb(len) VALUES (1),(2),(3),(4),(5),(150),(151),(152),(153),(1054); + UPDATE rb SET b = randomblob(len); + SELECT len, base64(base64(b))=b, base85(base85(b))=b + FROM rb ORDER BY len; +---- +stmt 0 ok +stmt 50 err 1 -1 131 no such table: rb +stmt 131 err 1 -1 168 no such table: rb +stmt 168 err 1 -1 247 no such table: rb +==== 108 + + CREATE TEMP TABLE junk(j text, rank int); + INSERT INTO junk VALUES ('',0),(' ',1),('~',2); + SELECT len, base64(j.j||base64(b)||j.j)=b, base85(j.j||base85(b)||j.j)=b + FROM rb r, junk j WHERE j.rank=(r.len+r.len/25)%3 ORDER BY len; +---- +stmt 0 ok +stmt 44 err 1 -1 94 no such table: junk +stmt 94 err 1 -1 235 no such table: rb +==== 109 + + SELECT len, base64(b) FROM rb WHERE len>200; +---- +stmt 0 err 1 -1 47 no such table: rb +==== 110 + + SELECT len, base85(b) FROM rb WHERE len>200; +---- +stmt 0 err 1 -1 47 no such table: rb +==== 111 + + SELECT length(base85(b))=1335 FROM rb WHERE len=1054; +---- +stmt 0 err 1 -1 56 no such table: rb +==== 113 + + SELECT is_base85(NULL) IS NULL; +---- +stmt 0 err 1 10 34 no such function: is_base85 +==== 114 + + SELECT is_base85(1); +---- +stmt 0 err 1 10 23 no such function: is_base85 +==== 115 + + SELECT is_base85(1.1); +---- +stmt 0 err 1 10 25 no such function: is_base85 +==== 116 + + SELECT is_base85(x'00'); +---- +stmt 0 err 1 10 27 no such function: is_base85 +==== 117 + + CREATE TABLE bs(b blob, num); + INSERT INTO bs SELECT randomblob(4000 + n%3), n + FROM ( + WITH RECURSIVE seq(n) AS ( + VALUES(1) UNION ALL SELECT n+1 + FROM seq WHERE n<100 + ) SELECT n FROM seq); + SELECT num FROM bs WHERE base64(base64(b))!=b; + SELECT num FROM bs WHERE base85(base85(b))!=b; +---- +stmt 0 ok +stmt 32 err 1 -1 217 no such table: bs +stmt 217 err 1 -1 266 no such table: bs +stmt 266 err 1 -1 315 no such table: bs +==== 118 + + SELECT base64(zeroblob(2000_000_000)) +---- +stmt 0 err 1 10 41 no such function: base64 +==== 119 + + SELECT base85(zeroblob(2000_000_000)) +---- +stmt 0 err 1 10 41 no such function: base85 diff --git a/parser/testdata/bestindex1.metadata.json b/parser/testdata/bestindex1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindex1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindex1.test b/parser/testdata/bestindex1.test new file mode 100644 index 0000000..b891c49 --- /dev/null +++ b/parser/testdata/bestindex1.test @@ -0,0 +1,70 @@ +==== 1.0 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); +---- +stmt 0 ok +==== 2.1 + + CREATE TABLE t1x(i INTEGER PRIMARY KEY, a, b); + INSERT INTO t1x VALUES(1, 'one', 1); + INSERT INTO t1x VALUES(2, 'two', 2); + INSERT INTO t1x VALUES(3, 'three', 3); + INSERT INTO t1x VALUES(4, 'four', 4); +---- +stmt 0 ok +stmt 49 err 1 -1 88 no such table: t1x +stmt 88 err 1 -1 127 no such table: t1x +stmt 127 err 1 -1 168 no such table: t1x +stmt 168 err 1 -1 208 no such table: t1x +==== bestindex1-generated +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== bestindex1-generated.dup1 +SELECT rowid FROM t1 +---- +stmt 0 err 1 -1 21 no such table: t1 +==== bestindex1-generated.dup2 +SELECT rowid FROM t1 WHERE a='two' +---- +stmt 0 err 1 -1 35 no such table: t1 +==== bestindex1-generated.dup3 + + SELECT rowid FROM t1 WHERE a IN ('one', 'four') ORDER BY +rowid +---- +stmt 0 err 1 -1 69 no such table: t1 +==== 3.2 + + CREATE VIRTUAL TABLE VirtualTableA USING tcl(vtab_command); + CREATE VIRTUAL TABLE VirtualTableB USING tcl(vtab_command); +---- +stmt 0 ok +stmt 62 ok +==== 3.3 + SELECT primarykey FROM VirtualTableA +---- +stmt 0 err 1 -1 38 no such table: VirtualTableA +==== 3.4 + + SELECT * FROM + VirtualTableA a CROSS JOIN VirtualTableB b ON b.PrimaryKey=a.PrimaryKey + WHERE a.ColumnA IN ('ValueA', 'ValueB') AND a.FlagA=0 +---- +stmt 0 err 1 -1 148 no such table: VirtualTableA +==== 3.5 + + SELECT * FROM + VirtualTableA a CROSS JOIN VirtualTableB b ON b.PrimaryKey=a.PrimaryKey + WHERE a.FlagA=0 AND a.ColumnA IN ('ValueA', 'ValueB') +---- +stmt 0 err 1 -1 148 no such table: VirtualTableA +==== 4.0 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); +---- +stmt 0 ok +==== 5.0 + + SELECT * FROM tcl('abc'); +---- +stmt 0 err 1 -1 28 no such table: tcl diff --git a/parser/testdata/bestindex2.metadata.json b/parser/testdata/bestindex2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindex2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindex2.test b/parser/testdata/bestindex2.test new file mode 100644 index 0000000..1bc8347 --- /dev/null +++ b/parser/testdata/bestindex2.test @@ -0,0 +1,14 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING tcl("vtab_cmd t1 {a b}"); + CREATE VIRTUAL TABLE t2 USING tcl("vtab_cmd t2 {c d}"); + CREATE VIRTUAL TABLE t3 USING tcl("vtab_cmd t3 {e f}"); +---- +stmt 0 ok +stmt 58 ok +stmt 116 ok +==== 1.7.1 + + CREATE TABLE x1(a, b); +---- +stmt 0 ok diff --git a/parser/testdata/bestindex3.metadata.json b/parser/testdata/bestindex3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindex3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindex3.test b/parser/testdata/bestindex3.test new file mode 100644 index 0000000..978cb7f --- /dev/null +++ b/parser/testdata/bestindex3.test @@ -0,0 +1,55 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING tcl("vtab_cmd 0"); +---- +stmt 0 ok +==== 1.5 + + CREATE TABLE ttt(a, b, c); + + INSERT INTO ttt VALUES(1, 'two', 'three'); + INSERT INTO ttt VALUES(2, 'one', 'two'); + INSERT INTO ttt VALUES(3, 'three', 'one'); + INSERT INTO ttt VALUES(4, 'y', 'one'); + INSERT INTO ttt VALUES(5, 'x', 'two'); + INSERT INTO ttt VALUES(6, 'y', 'three'); +---- +stmt 0 ok +stmt 29 err 1 -1 77 no such table: ttt +stmt 77 err 1 -1 122 no such table: ttt +stmt 122 err 1 -1 167 no such table: ttt +stmt 167 err 1 -1 212 no such table: ttt +stmt 212 err 1 -1 257 no such table: ttt +stmt 257 err 1 -1 304 no such table: ttt +==== bestindex3-generated + + SELECT rowid FROM t1 WHERE c LIKE 'o%' +---- +stmt 0 err 1 -1 45 no such table: t1 +==== bestindex3-generated.dup1 + + SELECT rowid FROM t1 WHERE c LIKE 'o%' OR b='y' +---- +stmt 0 err 1 -1 54 no such table: t1 +==== bestindex3-generated.dup2 + + SELECT rowid FROM t1 WHERE c = 'three' OR c LIKE 'o%' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== 2.1 + + CREATE TABLE t2(x TEXT COLLATE nocase, y TEXT); + CREATE INDEX t2x ON t2(x COLLATE nocase); + CREATE INDEX t2y ON t2(y); +---- +stmt 0 ok +stmt 52 err 1 -1 98 no such table: main.t2 +stmt 98 err 1 -1 129 no such table: main.t2 +==== 3.1 + CREATE VIRTUAL TABLE t3 USING tcl('vvv_command') +---- +stmt 0 ok +==== 3.2 + CREATE VIRTUAL TABLE t4 USING tcl('yyy_command') +---- +stmt 0 ok diff --git a/parser/testdata/bestindex4.metadata.json b/parser/testdata/bestindex4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindex4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindex4.test b/parser/testdata/bestindex4.test new file mode 100644 index 0000000..960d6b5 --- /dev/null +++ b/parser/testdata/bestindex4.test @@ -0,0 +1,7 @@ +==== 2.0 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); + CREATE TABLE t1 (x INT PRIMARY KEY); +---- +stmt 0 ok +stmt 51 ok diff --git a/parser/testdata/bestindex5.metadata.json b/parser/testdata/bestindex5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindex5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindex5.test b/parser/testdata/bestindex5.test new file mode 100644 index 0000000..65c8a6f --- /dev/null +++ b/parser/testdata/bestindex5.test @@ -0,0 +1,110 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING tcl('vtab_cmd'); + CREATE TABLE t1x(a INTEGER, b TEXT, c REAL); + INSERT INTO t1x VALUES(1, 2, 3); + INSERT INTO t1x VALUES(4, 5, 6); + INSERT INTO t1x VALUES(7, 8, 9); + + CREATE VIRTUAL TABLE t2 USING tcl('vtab_simple'); + CREATE TABLE t2x(x INTEGER); + INSERT INTO t2x VALUES(1); +---- +stmt 0 ok +stmt 49 ok +stmt 96 err 1 -1 131 no such table: t1x +stmt 131 err 1 -1 166 no such table: t1x +stmt 166 err 1 -1 201 no such table: t1x +stmt 201 ok +stmt 254 ok +stmt 285 err 1 -1 314 no such table: t2x +==== 2.0.0 + + DELETE FROM t1x; + INSERT INTO t1x VALUES('a', 'b', 'c'); +---- +stmt 0 err 1 -1 19 no such table: t1x +stmt 19 err 1 -1 60 no such table: t1x +==== 2.0.1 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 2.0.2 + SELECT * FROM t1 WHERE (a, b) != ('a', 'b'); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 2.1.0 + + DELETE FROM t1x; + INSERT INTO t1x VALUES(7, 8, 9); +---- +stmt 0 err 1 -1 19 no such table: t1x +stmt 19 err 1 -1 54 no such table: t1x +==== 2.1.1 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 2.1.2 + SELECT * FROM t1 WHERE (a, b) != (7, '8') +---- +stmt 0 err 1 -1 43 no such table: t1 +==== 2.1.3 + SELECT * FROM t1 WHERE a!=7 OR b!='8' +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 2.1.4 + SELECT * FROM t1 WHERE a!=7 OR b!='8' +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 2.2.1 + + CREATE TABLE t3(a INTEGER, b TEXT); + INSERT INTO t3 VALUES(45, 46); +---- +stmt 0 ok +stmt 38 err 1 -1 71 no such table: t3 +==== 2.2.2 + SELECT * FROM t3 WHERE (a, b) != (45, 46); +---- +stmt 0 err 1 -1 43 no such table: t3 +==== 2.2.3 + SELECT * FROM t3 WHERE (a, b) != ('45', '46'); +---- +stmt 0 err 1 -1 47 no such table: t3 +==== 2.2.4 + SELECT * FROM t3 WHERE (a, b) == (45, 46); +---- +stmt 0 err 1 -1 43 no such table: t3 +==== 2.2.5 + SELECT * FROM t3 WHERE (a, b) == ('45', '46'); +---- +stmt 0 err 1 -1 47 no such table: t3 +==== 3.0 + + CREATE TABLE t4x(a INTEGER); + INSERT INTO t4x VALUES(245); + CREATE VIRTUAL TABLE t4 USING tcl('vtab_simple_integer'); +---- +stmt 0 ok +stmt 31 err 1 -1 62 no such table: t4x +stmt 62 ok +==== 3.1 + SELECT rowid, * FROM t4 WHERE x=245; +---- +stmt 0 err 1 -1 37 no such table: t4 +==== 3.2 + SELECT rowid, * FROM t4 WHERE x='245'; +---- +stmt 0 err 1 -1 39 no such table: t4 +==== 3.3 + SELECT rowid, * FROM t4 WHERE x!=245; +---- +stmt 0 err 1 -1 38 no such table: t4 +==== 3.4 + SELECT rowid, * FROM t4 WHERE x!='245'; +---- +stmt 0 err 1 -1 40 no such table: t4 +==== 3.5 + SELECT rowid, * FROM t4 WHERE rowid!=1 OR x!='245'; +---- +stmt 0 err 1 -1 52 no such table: t4 diff --git a/parser/testdata/bestindex6.metadata.json b/parser/testdata/bestindex6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindex6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindex6.test b/parser/testdata/bestindex6.test new file mode 100644 index 0000000..4745f4e --- /dev/null +++ b/parser/testdata/bestindex6.test @@ -0,0 +1,34 @@ +==== 1.0 + + CREATE TABLE t1(id int, value text); + CREATE TABLE t2(ctx int, id int, value text); + + INSERT INTO t1 VALUES(1,'try'); + INSERT INTO t2 VALUES(1,1,'good'); + INSERT INTO t2 VALUES(2,2,'evil'); + + CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1); + CREATE VIRTUAL TABLE vt2 USING tcl(vtab_command t2); +---- +stmt 0 ok +stmt 39 ok +stmt 87 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 160 no such table: t2 +stmt 160 err 1 -1 197 no such table: t2 +stmt 197 ok +stmt 253 ok +==== 1.1 + + select * from t2 left join t1 on t1.id=t2.ctx where t1.value is null; +---- +stmt 0 err 1 -1 72 no such table: t2 +==== 1.2 + + select * from vt2 left join vt1 on vt1.id=vt2.ctx where vt1.value is null; +---- +stmt 0 err 1 -1 77 no such table: vt2 +==== 1.4 + + select * from t2 left join vt1 on vt1.id=t2.ctx where vt1.value = 3 +---- +stmt 0 err 1 -1 71 no such table: t2 diff --git a/parser/testdata/bestindex7.metadata.json b/parser/testdata/bestindex7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindex7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindex7.test b/parser/testdata/bestindex7.test new file mode 100644 index 0000000..c386b81 --- /dev/null +++ b/parser/testdata/bestindex7.test @@ -0,0 +1,62 @@ +==== 1.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(0), (2); + CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1); +---- +stmt 0 ok +stmt 22 err 1 -1 55 no such table: t1 +stmt 55 ok +==== 1.1 + select * from vt1 +---- +stmt 0 err 1 -1 19 no such table: vt1 +==== 1.2 + select * from vt1 WHERE a=0 +---- +stmt 0 err 1 -1 29 no such table: vt1 +==== 1.3 + select * from vt1 WHERE a=1 +---- +stmt 0 err 1 -1 29 no such table: vt1 +==== 1.4 + select * from vt1 WHERE a=1 OR a=0 +---- +stmt 0 err 1 -1 36 no such table: vt1 +==== 1.5 + + UPDATE t1 SET x=NULL WHERE x=2; +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 1.6 + select * from vt1 +---- +stmt 0 err 1 -1 19 no such table: vt1 +==== 1.7 + select * from vt1 WHERE a=0 +---- +stmt 0 err 1 -1 29 no such table: vt1 +==== 1.8 + select * from vt1 WHERE a=1 +---- +stmt 0 err 1 -1 29 no such table: vt1 +==== 1.9 + select * from vt1 WHERE a=1 OR a=0 +---- +stmt 0 err 1 -1 36 no such table: vt1 +==== 1.10 + select * from vt1 WHERE a IN (2) +---- +stmt 0 err 1 -1 34 no such table: vt1 +==== 1.10.dup1 + select * from vt1 WHERE a IN (0,1,2,3) +---- +stmt 0 err 1 -1 40 no such table: vt1 +==== 1.11 + select * from vt1 WHERE a IN (0, NULL) +---- +stmt 0 err 1 -1 40 no such table: vt1 +==== 1.12 + select * from vt1 WHERE a IN (NULL) +---- +stmt 0 err 1 -1 37 no such table: vt1 diff --git a/parser/testdata/bestindex8.metadata.json b/parser/testdata/bestindex8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindex8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindex8.test b/parser/testdata/bestindex8.test new file mode 100644 index 0000000..9c4a3c7 --- /dev/null +++ b/parser/testdata/bestindex8.test @@ -0,0 +1,66 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + INSERT INTO t1 VALUES('a', 'b'), ('c', 'd'); + INSERT INTO t1 VALUES('a', 'b'), ('c', 'd'); + CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1); + + CREATE TABLE t0(c0); + INSERT INTO t0(c0) VALUES (1), (0); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t1 +stmt 56 err 1 -1 103 no such table: t1 +stmt 103 err 1 -1 150 no such table: t1 +stmt 150 ok +stmt 205 ok +stmt 229 err 1 -1 267 no such table: t0 +==== 2.0 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t1 +stmt 56 ok +==== 3.0 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t1 +stmt 56 ok +==== 4.0 + + CREATE TABLE t1(a, b, c); + CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1); +---- +stmt 0 ok +stmt 28 ok +==== 5.0 + + CREATE TABLE t1(a, b, c); + CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(2, 3, 4); + INSERT INTO t1 VALUES(3, 4, 5); + INSERT INTO t1 VALUES(1, 5, 6); + INSERT INTO t1 VALUES(2, 6, 7); + INSERT INTO t1 VALUES(3, 7, 8); + INSERT INTO t1 VALUES(1, 8, 9); + INSERT INTO t1 VALUES(2, 9, 0); +---- +stmt 0 ok +stmt 28 ok +stmt 83 err 1 -1 117 no such table: t1 +stmt 117 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 185 no such table: t1 +stmt 185 err 1 -1 219 no such table: t1 +stmt 219 err 1 -1 253 no such table: t1 +stmt 253 err 1 -1 287 no such table: t1 +stmt 287 err 1 -1 321 no such table: t1 +stmt 321 err 1 -1 355 no such table: t1 diff --git a/parser/testdata/bestindexA.metadata.json b/parser/testdata/bestindexA.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindexA.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindexA.test b/parser/testdata/bestindexA.test new file mode 100644 index 0000000..fb5db54 --- /dev/null +++ b/parser/testdata/bestindexA.test @@ -0,0 +1,5 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING tcl(vtab_command); +---- +stmt 0 ok diff --git a/parser/testdata/bestindexB.metadata.json b/parser/testdata/bestindexB.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindexB.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindexB.test b/parser/testdata/bestindexB.test new file mode 100644 index 0000000..54d550c --- /dev/null +++ b/parser/testdata/bestindexB.test @@ -0,0 +1,33 @@ +==== 1.0 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); + CREATE TABLE y1(a, b); + CREATE TABLE y2(a, b); +---- +stmt 0 ok +stmt 51 ok +stmt 76 ok +==== 1.1 + + SELECT * FROM x1 +---- +stmt 0 err 1 -1 20 no such table: x1 +==== 1.2 + + INSERT INTO y1 VALUES(1, 2) RETURNING rowid; +---- +stmt 0 err 1 -1 47 no such table: y1 +==== 1.3 + + CREATE TRIGGER y1tr BEFORE INSERT ON y1 BEGIN + SELECT * FROM x1; + END; + INSERT INTO y1 VALUES(3, 4) RETURNING rowid; +---- +stmt 0 err 1 -1 48 no such table: main.y1 +stmt 77 err 1 -1 124 no such table: y1 +==== 1.4 + + INSERT INTO y1 VALUES(5, 6) RETURNING rowid; +---- +stmt 0 err 1 -1 47 no such table: y1 diff --git a/parser/testdata/bestindexC.metadata.json b/parser/testdata/bestindexC.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindexC.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindexC.test b/parser/testdata/bestindexC.test new file mode 100644 index 0000000..3392d7c --- /dev/null +++ b/parser/testdata/bestindexC.test @@ -0,0 +1,212 @@ +==== 1.0 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command "a b c d e f"); + CREATE VIRTUAL TABLE x2 USING tcl(vtab_command "A B C D E F a b"); +---- +stmt 0 ok +stmt 65 ok +==== 1.1 + + CREATE TEMP TABLE t_unionall AS + SELECT * FROM x1 UNION ALL SELECT * FROM x2; + + CREATE TEMP TABLE t_intersect AS + SELECT * FROM x1 INTERSECT SELECT * FROM x2; + + CREATE TEMP TABLE t_union AS + SELECT * FROM x1 UNION SELECT * FROM x2; + + CREATE TEMP TABLE t_except AS + SELECT * FROM x1 EXCEPT SELECT * FROM x2; +---- +stmt 0 err 1 -1 84 no such table: x2 +stmt 84 err 1 -1 170 no such table: x2 +stmt 170 err 1 -1 248 no such table: x2 +stmt 248 err 1 -1 328 no such table: x2 +==== 2.0 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command "a b c d e f"); + CREATE VIRTUAL TABLE x2 USING tcl(vtab_command "a b e f"); +---- +stmt 0 ok +stmt 65 ok +==== 2.1 + + SELECT * FROM x1 + EXCEPT + SELECT * FROM x2 + LIMIT 3 +---- +stmt 0 err 1 -1 61 no such table: x2 +==== 3.0 + + CREATE VIRTUAL TABLE y1 USING tcl(vtab_command "1 2 3 4 5 6 7 8 9 10"); +---- +stmt 0 ok +==== 3.1 + + SELECT * FROM y1 WHERE a = COALESCE('8', a) LIMIT 3 +---- +stmt 0 err 1 -1 55 no such table: y1 +==== 3.2 + + SELECT * FROM y1 WHERE a = '2' LIMIT 3 +---- +stmt 0 err 1 -1 42 no such table: y1 +==== 3.3 + + SELECT * FROM generate_series(1, 5) WHERE value = (value & 14) LIMIT 3 +---- +stmt 0 err 1 -1 74 no such table: generate_series +==== 3.4 + + SELECT value FROM generate_series(1,10) WHERE value>2 LIMIT 4 OFFSET 1; +---- +stmt 0 err 1 -1 74 no such table: generate_series +==== 3.5 + + SELECT * FROM y1 LIMIT 5 OFFSET 3 +---- +stmt 0 err 1 -1 37 no such table: y1 +==== 3.6 + + SELECT * FROM y1 LIMIT 5 OFFSET 3 +---- +stmt 0 err 1 -1 37 no such table: y1 +==== 4.0 + + CREATE VIRTUAL TABLE y1 USING tcl(vtab_command 1); +---- +stmt 0 ok +==== 4.2 + + CREATE VIRTUAL TABLE y1 USING tcl(vtab_command "PRAGMA page_size=1024"); +---- +stmt 0 ok +==== 4.3 + + CREATE VIRTUAL TABLE y1 USING tcl(vtab_command "CREATE TABLE x1("); +---- +stmt 0 ok +==== 4.4 + + CREATE VIRTUAL TABLE y1 USING tcl(vtab_command "CREATE TABLE x1(insert)"); +---- +stmt 0 ok +==== 5.1 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command t1); + CREATE TABLE t1(a, b, c, d); +---- +stmt 0 ok +stmt 54 ok +==== 5.3 + + SELECT * FROM x1 WHERE (a, b, c) = (?, ?, ?); +---- +stmt 0 err 1 -1 48 no such table: x1 +==== 5.4 + + INSERT INTO t1(rowid, a, b, c, d) VALUES(1, 'x', 'y', 'z', 'one'); + INSERT INTO t1(rowid, a, b, c, d) VALUES(2, 'X', 'Y', 'Z', 'two'); + SELECT * FROM x1 WHERE (a, b, c) = ('X', 'Y', 'Z'); +---- +stmt 0 err 1 -1 69 no such table: t1 +stmt 69 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 192 no such table: x1 +==== 5.5 + + SELECT * FROM x1 WHERE a='x' AND b='y' AND c='z'; +---- +stmt 0 err 1 -1 52 no such table: x1 +==== 5.6 + + SELECT * FROM x1 + WHERE a='x' COLLATE nocase AND b='y' COLLATE nocase AND c='z'COLLATE nocase; +---- +stmt 0 err 1 -1 99 no such table: x1 +==== 5.7 + + DELETE FROM t1; + + INSERT INTO t1(rowid, a, b, c, d) VALUES(0, 'x', 'y', 'z', 'zero'); + INSERT INTO t1(rowid, a, b, c, d) VALUES(1, 'x', 'y', 'Z', 'one'); + INSERT INTO t1(rowid, a, b, c, d) VALUES(2, 'x', 'Y', 'z', 'two'); + INSERT INTO t1(rowid, a, b, c, d) VALUES(3, 'x', 'Y', 'Z', 'three'); + INSERT INTO t1(rowid, a, b, c, d) VALUES(4, 'X', 'y', 'z', 'four'); + INSERT INTO t1(rowid, a, b, c, d) VALUES(5, 'X', 'y', 'Z', 'five'); + INSERT INTO t1(rowid, a, b, c, d) VALUES(6, 'X', 'Y', 'z', 'six'); + INSERT INTO t1(rowid, a, b, c, d) VALUES(7, 'X', 'Y', 'z', 'seven'); +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 89 no such table: t1 +stmt 89 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 227 no such table: t1 +stmt 227 err 1 -1 298 no such table: t1 +stmt 298 err 1 -1 368 no such table: t1 +stmt 368 err 1 -1 438 no such table: t1 +stmt 438 err 1 -1 507 no such table: t1 +stmt 507 err 1 -1 578 no such table: t1 +==== 5.8 + + SELECT d FROM x1 + WHERE a='x' AND ((b='y' AND c='z') OR (b='Y' AND c='z' COLLATE nocase)) +---- +stmt 0 err 1 -1 99 no such table: x1 +==== 5.9 + + SELECT d FROM x1 + WHERE a='x' COLLATE nocase + AND ((b='y' AND c='z') OR (b='Y' AND c='z' COLLATE nocase)) +---- +stmt 0 err 1 -1 119 no such table: x1 +==== 5.8.dup1 + + SELECT d FROM x1 + WHERE a='x' AND ((b='y' AND c='z') OR (b='Y' AND c='z' COLLATE nocase)) +---- +stmt 0 err 1 -1 99 no such table: x1 +==== 5.9.dup1 + + SELECT d FROM x1 + WHERE a='x' COLLATE nocase + AND ((b='y' AND c='z') OR (b='Y' AND c='z' COLLATE nocase)) +---- +stmt 0 err 1 -1 119 no such table: x1 +==== 6.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(2, 2); + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command t1); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 ok +==== 6.1 + SELECT * FROM x1 LIMIT 50 +---- +stmt 0 err 1 -1 27 no such table: x1 +==== 6.2 + SELECT * FROM x1 WHERE b=c LIMIT 5 +---- +stmt 0 err 1 -1 36 no such table: x1 +==== 6.3 + + SELECT (SELECT a FROM x1 WHERE t1.x=t1.y LIMIT 10) FROM t1 +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 6.4 + + SELECT (SELECT a FROM x1 WHERE x1.a=1) FROM t1 +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 6.5 + + SELECT (SELECT a FROM x1 WHERE x1.a=1 LIMIT 1) FROM t1 +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 6.6 + + SELECT (SELECT a FROM x1 WHERE x1.a=555 LIMIT 2) FROM t1 +---- +stmt 0 err 1 -1 61 no such table: t1 diff --git a/parser/testdata/bestindexD.metadata.json b/parser/testdata/bestindexD.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindexD.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindexD.test b/parser/testdata/bestindexD.test new file mode 100644 index 0000000..ff1588e --- /dev/null +++ b/parser/testdata/bestindexD.test @@ -0,0 +1,8 @@ +==== 1.0 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); + + CREATE TABLE t2(a, b); +---- +stmt 0 ok +stmt 51 ok diff --git a/parser/testdata/bestindexE.metadata.json b/parser/testdata/bestindexE.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindexE.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindexE.test b/parser/testdata/bestindexE.test new file mode 100644 index 0000000..8c4f1e1 --- /dev/null +++ b/parser/testdata/bestindexE.test @@ -0,0 +1,29 @@ +==== 3.1.0 + + PRAGMA table_info = tcl +---- +stmt 0 ok +==== 3.1.1 + + SELECT rowid, * FROM tcl +---- +stmt 0 err 1 -1 28 no such table: tcl +==== 3.1.2 + + INSERT INTO tcl VALUES('i', 'ii') RETURNING *; +---- +stmt 0 err 1 -1 49 no such table: tcl +==== 3.1.4 + + CREATE TABLE x1(x); +---- +stmt 0 ok +==== 3.2.1 + SELECT * FROM x1 +---- +stmt 0 err 1 -1 18 no such table: x1 +==== 3.2.3 + + INSERT INTO tcl VALUES('i', 'ii') RETURNING *; +---- +stmt 0 err 1 -1 49 no such table: tcl diff --git a/parser/testdata/bestindexF.metadata.json b/parser/testdata/bestindexF.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bestindexF.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bestindexF.test b/parser/testdata/bestindexF.test new file mode 100644 index 0000000..5ca84e5 --- /dev/null +++ b/parser/testdata/bestindexF.test @@ -0,0 +1,57 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING tcl(vtab_command) +---- +stmt 0 ok +==== 1.3 + + CREATE TABLE t0(c0); + INSERT INTO t0 VALUES(0); + INSERT INTO t0 VALUES(1); +---- +stmt 0 ok +stmt 23 err 1 -1 51 no such table: t0 +stmt 51 err 1 -1 79 no such table: t0 +==== 2.0 + + CREATE TABLE real_t1(a, b); + + INSERT INTO real_t1 VALUES (1, 'a'); + INSERT INTO real_t1 VALUES (2, 'a'); + INSERT INTO real_t1 VALUES (1, 'a'); + + INSERT INTO real_t1 VALUES (2, 'b'); + INSERT INTO real_t1 VALUES (1, 'b'); + INSERT INTO real_t1 VALUES (2, 'b'); + + INSERT INTO real_t1 VALUES (3, 'a'); + INSERT INTO real_t1 VALUES (4, 'b'); + INSERT INTO real_t1 VALUES (3, 'a'); + + INSERT INTO real_t1 VALUES (4, 'b'); + INSERT INTO real_t1 VALUES (3, 'a'); + INSERT INTO real_t1 VALUES (4, 'b'); +---- +stmt 0 ok +stmt 30 err 1 -1 70 no such table: real_t1 +stmt 70 err 1 -1 109 no such table: real_t1 +stmt 109 err 1 -1 148 no such table: real_t1 +stmt 148 err 1 -1 188 no such table: real_t1 +stmt 188 err 1 -1 227 no such table: real_t1 +stmt 227 err 1 -1 266 no such table: real_t1 +stmt 266 err 1 -1 306 no such table: real_t1 +stmt 306 err 1 -1 345 no such table: real_t1 +stmt 345 err 1 -1 384 no such table: real_t1 +stmt 384 err 1 -1 424 no such table: real_t1 +stmt 424 err 1 -1 463 no such table: real_t1 +stmt 463 err 1 -1 502 no such table: real_t1 +==== 2.0.dup1 + + CREATE VIRTUAL TABLE t1 USING tcl(vtab_command) +---- +stmt 0 ok +==== 2.1 + + SELECT a, b FROM t1 +---- +stmt 0 err 1 -1 23 no such table: t1 diff --git a/parser/testdata/bigfile.metadata.json b/parser/testdata/bigfile.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bigfile.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bigfile.test b/parser/testdata/bigfile.test new file mode 100644 index 0000000..937f3f0 --- /dev/null +++ b/parser/testdata/bigfile.test @@ -0,0 +1,36 @@ +==== bigfile-1.3 + + CREATE TABLE t2 AS SELECT * FROM t1; + SELECT md5sum(x) FROM t2; +---- +stmt 0 err 1 -1 41 no such table: t1 +stmt 41 err 1 -1 71 no such table: t2 +==== bigfile-1.7 + + CREATE TABLE t3 AS SELECT * FROM t1; + SELECT md5sum(x) FROM t3; +---- +stmt 0 err 1 -1 41 no such table: t1 +stmt 41 err 1 -1 71 no such table: t3 +==== bigfile-1.9 + + SELECT md5sum(x) FROM t2; +---- +stmt 0 err 1 -1 30 no such table: t2 +==== bigfile-1.13 + + CREATE TABLE t4 AS SELECT * FROM t1; + SELECT md5sum(x) FROM t4; +---- +stmt 0 err 1 -1 41 no such table: t1 +stmt 41 err 1 -1 71 no such table: t4 +==== bigfile-1.15 + + SELECT md5sum(x) FROM t2; +---- +stmt 0 err 1 -1 30 no such table: t2 +==== bigfile-1.16 + + SELECT md5sum(x) FROM t3; +---- +stmt 0 err 1 -1 30 no such table: t3 diff --git a/parser/testdata/bigfile2.metadata.json b/parser/testdata/bigfile2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bigfile2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bigfile2.test b/parser/testdata/bigfile2.test new file mode 100644 index 0000000..3a10fa8 --- /dev/null +++ b/parser/testdata/bigfile2.test @@ -0,0 +1,7 @@ +==== 1.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 diff --git a/parser/testdata/bigmmap.metadata.json b/parser/testdata/bigmmap.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bigmmap.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bigmmap.test b/parser/testdata/bigmmap.test new file mode 100644 index 0000000..241408e --- /dev/null +++ b/parser/testdata/bigmmap.test @@ -0,0 +1,15 @@ +==== 1.0 + + PRAGMA page_size = 4096; + CREATE TABLE t0(a INTEGER PRIMARY KEY, b, c, UNIQUE(b, c)); + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 100 ) + INSERT INTO t0 SELECT i, 't0', randomblob(800) FROM s; +---- +stmt 0 ok +stmt 27 ok +stmt 89 err 1 -1 213 no such table: t0 +==== bigmmap-generated + + PRAGMA main.mmap_size +---- +stmt 0 ok diff --git a/parser/testdata/bigrow.metadata.json b/parser/testdata/bigrow.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bigrow.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bigrow.test b/parser/testdata/bigrow.test new file mode 100644 index 0000000..8f231db --- /dev/null +++ b/parser/testdata/bigrow.test @@ -0,0 +1,73 @@ +==== bigrow-1.1 + + CREATE TABLE t1(a text, b text, c text); + SELECT name FROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name +---- +stmt 0 ok +stmt 45 ok +==== bigrow-1.3 +SELECT b FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== bigrow-1.4.1 +SELECT b FROM t1 ORDER BY c +---- +stmt 0 err 1 -1 28 no such table: t1 +==== bigrow-1.4.2 +SELECT c FROM t1 ORDER BY c +---- +stmt 0 err 1 -1 28 no such table: t1 +==== bigrow-1.5 + + UPDATE t1 SET a=b, b=a; + SELECT b,c FROM t1 +---- +stmt 0 err 1 -1 28 no such table: t1 +stmt 28 err 1 -1 52 no such table: t1 +==== bigrow-1.6 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== bigrow-1.7 + + INSERT INTO t1 VALUES('1','2','3'); + INSERT INTO t1 VALUES('A','B','C'); + SELECT b FROM t1 WHERE a=='1'; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 115 no such table: t1 +==== bigrow-generated + + UPDATE t1 SET b=b||b; + SELECT a,length(b),c FROM t1; +---- +stmt 0 err 1 -1 28 no such table: t1 +stmt 28 err 1 -1 64 no such table: t1 +==== bigrow-5.3 +UPDATE t1 SET b=b||b +---- +stmt 0 err 1 -1 21 no such table: t1 +==== bigrow-5.4 +SELECT length(b) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== bigrow-5.5 +UPDATE t1 SET b=b||b +---- +stmt 0 err 1 -1 21 no such table: t1 +==== bigrow-5.6 +SELECT length(b) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== bigrow-5.99 +DROP TABLE t1 +---- +stmt 0 err 1 -1 14 no such table: t1 +==== bigrow-6.1 + SELECT content FROM docs +---- +stmt 0 err 1 -1 26 no such table: docs diff --git a/parser/testdata/bigsort.metadata.json b/parser/testdata/bigsort.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bigsort.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bigsort.test b/parser/testdata/bigsort.test new file mode 100644 index 0000000..489d0e3 --- /dev/null +++ b/parser/testdata/bigsort.test @@ -0,0 +1,25 @@ +==== 1.0 + + PRAGMA page_size = 1024; + CREATE TABLE t1(a, b); + BEGIN; + WITH data(x,y) AS ( + SELECT 1, zeroblob(10000) + UNION ALL + SELECT x+1, y FROM data WHERE x < 300000 + ) + INSERT INTO t1 SELECT * FROM data; + COMMIT; +---- +stmt 0 ok +stmt 27 ok +stmt 52 ok +stmt 61 err 1 -1 213 no such table: t1 +stmt 213 ok +==== 1.1 + + PRAGMA cache_size = 4194304; + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 31 err 1 -1 62 no such table: main.t1 diff --git a/parser/testdata/bind.metadata.json b/parser/testdata/bind.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bind.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bind.test b/parser/testdata/bind.test new file mode 100644 index 0000000..aa83267 --- /dev/null +++ b/parser/testdata/bind.test @@ -0,0 +1,119 @@ +==== bind-1.3 +SELECT rowid, * FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== bind-1.5 +SELECT rowid, * FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== bind-1.7 +SELECT rowid, * FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== bind-2.4 +SELECT typeof(a), typeof(b), typeof(c) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== bind-2.5 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== bind-3.2 +SELECT typeof(a), typeof(b), typeof(c) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== bind-3.3 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== bind-4.2 +SELECT typeof(a), typeof(b), typeof(c) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== bind-4.3 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== bind-4.5 +SELECT typeof(a), typeof(b), typeof(c) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== bind-4.6 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== bind-5.2 +SELECT typeof(a), typeof(b), typeof(c) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== bind-5.3 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== bind-6.2 +SELECT typeof(a), typeof(b), typeof(c) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== bind-6.3 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== bind-6.5 +SELECT hex(a), hex(b), hex(c) FROM t1 +---- +stmt 0 err 1 -1 39 no such table: t1 +==== bind-6.5.dup1 +SELECT hex(a), hex(b), hex(c) FROM t1 +---- +stmt 0 err 1 -1 39 no such table: t1 +==== bind-6.5.dup2 +SELECT hex(a), hex(b), hex(c) FROM t1 +---- +stmt 0 err 1 -1 39 no such table: t1 +==== bind-6.6 +SELECT typeof(a), typeof(b), typeof(c) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== bind-6.7 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== bind-7.2 +SELECT typeof(a), typeof(b), typeof(c) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== bind-7.4 +SELECT hex(a), hex(b), hex(c) FROM t1 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== bind-7.4.dup1 +SELECT hex(a), hex(b), hex(c) FROM t1 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== bind-7.4.dup2 +SELECT hex(a), hex(b), hex(c) FROM t1 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== bind-7.5 +SELECT typeof(a), typeof(b), typeof(c) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== bind-7.99 +DELETE FROM t1; +---- +stmt 0 err 1 -1 15 no such table: t1 +==== bind-9.7 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== bind-10.10 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 diff --git a/parser/testdata/bind2.metadata.json b/parser/testdata/bind2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bind2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bind2.test b/parser/testdata/bind2.test new file mode 100644 index 0000000..f09e169 --- /dev/null +++ b/parser/testdata/bind2.test @@ -0,0 +1,9 @@ +==== 1.0 + + CREATE TABLE t1(a REAL); + INSERT INTO t1 VALUES(42.0); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 28 err 1 -1 59 no such table: t1 +stmt 59 err 1 -1 79 no such table: t1 diff --git a/parser/testdata/blob.metadata.json b/parser/testdata/blob.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/blob.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/blob.test b/parser/testdata/blob.test new file mode 100644 index 0000000..d2a6e8e --- /dev/null +++ b/parser/testdata/blob.test @@ -0,0 +1,36 @@ +==== blob-1.4 +SELECT X'01020k304', 100 +---- +stmt 0 err 1 7 7 unrecognized token: "X'01020k304'" +==== blob-1.6 +SELECT X'01020 100' +---- +stmt 0 err 1 7 7 unrecognized token: "X'01020 100'" +==== blob-1.7 +SELECT X'01001' +---- +stmt 0 err 1 7 7 unrecognized token: "X'01001'" +==== blob-1.8 +SELECT x'012/45' +---- +stmt 0 err 1 7 7 unrecognized token: "x'012/45'" +==== blob-1.9 +SELECT x'012:45' +---- +stmt 0 err 1 7 7 unrecognized token: "x'012:45'" +==== blob-1.10 +SELECT x'012@45' +---- +stmt 0 err 1 7 7 unrecognized token: "x'012@45'" +==== blob-1.11 +SELECT x'012G45' +---- +stmt 0 err 1 7 7 unrecognized token: "x'012G45'" +==== blob-1.12 +SELECT x'012`45' +---- +stmt 0 err 1 7 7 unrecognized token: "x'012`45'" +==== blob-1.13 +SELECT x'012g45' +---- +stmt 0 err 1 7 7 unrecognized token: "x'012g45'" diff --git a/parser/testdata/bloom1.metadata.json b/parser/testdata/bloom1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/bloom1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/bloom1.test b/parser/testdata/bloom1.test new file mode 100644 index 0000000..db50dfa --- /dev/null +++ b/parser/testdata/bloom1.test @@ -0,0 +1,215 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c INTEGER PRIMARY KEY, d); +---- +stmt 0 ok +stmt 25 ok +==== 1.1 + + INSERT INTO t1 VALUES('hello', 'world'); + INSERT INTO t2 VALUES(14, 'fourteen'); +---- +stmt 0 err 1 -1 43 no such table: t1 +stmt 43 err 1 -1 84 no such table: t2 +==== 1.2 + + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat1 VALUES('t2','idx1','6 6'); + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 25 err 1 -1 79 no such table: sqlite_stat1 +stmt 79 ok +==== 1.3 + + SELECT 'affinity!' FROM t1 CROSS JOIN t2 WHERE t2.c = '14'; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== 1.4 + + CREATE TABLE t1(a, b TEXT); + CREATE TABLE t2(c INTEGER PRIMARY KEY, d); + CREATE TABLE t3(e INTEGER PRIMARY KEY, f); + + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat1 VALUES('t1','idx1','600 6'); + INSERT INTO sqlite_stat1 VALUES('t2','idx1','6 6'); + INSERT INTO sqlite_stat1 VALUES('t3','idx2','6 6'); + ANALYZE sqlite_schema; + + INSERT INTO t1 VALUES(1, '123'); + INSERT INTO t2 VALUES(123, 'one'); + INSERT INTO t3 VALUES(123, 'two'); +---- +stmt 0 ok +stmt 30 ok +stmt 75 ok +stmt 120 ok +stmt 146 err 1 -1 202 no such table: sqlite_stat1 +stmt 202 err 1 -1 256 no such table: sqlite_stat1 +stmt 256 err 1 -1 310 no such table: sqlite_stat1 +stmt 310 ok +stmt 335 err 1 -1 371 no such table: t1 +stmt 371 err 1 -1 408 no such table: t2 +stmt 408 err 1 -1 445 no such table: t3 +==== 1.5 + + SELECT 'result' FROM t1, t2, t3 + WHERE t2.c=t1.b AND t2.d!='silly' + AND t3.e=t1.b AND t3.f!='silly' +---- +stmt 0 err 1 -1 108 no such table: t1 +==== 2.0 + + CREATE TABLE objs(c INTEGER, s INTEGER, p INTEGER, o INTEGER); + CREATE UNIQUE INDEX objs_cspo ON objs(o,p,c,s); + ANALYZE; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1 VALUES('objs','objs_cspo','520138 21 20 19 1'); + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 65 err 1 -1 115 no such table: main.objs +stmt 115 ok +stmt 126 err 1 -1 154 no such table: sqlite_stat1 +stmt 154 err 1 -1 229 no such table: sqlite_stat1 +stmt 229 ok +==== 3.1 + + CREATE TABLE t0(x TEXT COLLATE rtrim); + INSERT INTO t0(x) VALUES ('a'), ('b'), ('c'); + CREATE VIEW v0(y) AS SELECT DISTINCT x FROM t0; + SELECT count(*) FROM t0, v0 WHERE x='b '; +---- +stmt 0 ok +stmt 41 err 1 -1 89 no such table: t0 +stmt 89 ok +stmt 139 err 1 -1 183 no such table: t0 +==== 3.3 + + CREATE TABLE t1(x INT COLLATE rtrim); + INSERT INTO t1(x) VALUES ('a'), ('b'), ('c'); + CREATE VIEW v1(y) AS SELECT DISTINCT x FROM t1; + SELECT count(*) FROM t1, v1 WHERE x='b '; +---- +stmt 0 ok +stmt 40 err 1 -1 88 no such table: t1 +stmt 88 ok +stmt 138 err 1 -1 182 no such table: t1 +==== 4.1 + + CREATE TABLE t1(x TEXT, y INT, z TEXT); + INSERT INTO t1(rowid,x,y,z) VALUES(12,'aa','bb','aa'); + CREATE INDEX i1x ON t1(1 IS true,z); + CREATE TABLE t0(x TEXT); + INSERT INTO t0(rowid,x) VALUES(4,'aa'); + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat1 VALUES('t0',NULL,'20'); + INSERT INTO sqlite_stat1 VALUES('t1','i1x','18 18 2'); + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 42 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 138 no such table: main.t1 +stmt 138 ok +stmt 165 err 1 -1 207 no such table: t0 +stmt 207 ok +stmt 232 err 1 -1 283 no such table: sqlite_stat1 +stmt 283 err 1 -1 340 no such table: sqlite_stat1 +stmt 340 ok +==== 4.2 + + SELECT * FROM t0 NATURAL JOIN t1 WHERE z=t1.x; +---- +stmt 0 err 1 -1 49 no such table: t0 +==== 4.3 + + DROP TABLE t0; + CREATE TABLE t0(a TEXT); + INSERT INTO t0 VALUES ('xyz'); + CREATE INDEX t0x ON t0(a IS FALSE) WHERE false; + DROP TABLE t1; + CREATE TABLE t1(b INT); + INSERT INTO t1 VALUES('aaa'),('bbb'),('ccc'),('ddd'),(NULL); + CREATE TABLE t2(c REAL); + INSERT INTO t2 VALUES(7); + ANALYZE; + CREATE INDEX t2x ON t2(true IN ()); +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +stmt 44 err 1 -1 77 no such table: t0 +stmt 77 err 1 -1 127 no such table: main.t0 +stmt 127 err 1 -1 144 no such table: t1 +stmt 144 ok +stmt 170 err 1 -1 233 no such table: t1 +stmt 233 ok +stmt 260 err 1 -1 288 no such table: t2 +stmt 288 ok +stmt 299 err 1 -1 337 no such table: main.t2 +==== 4.4 + + SELECT * FROM t0 LEFT JOIN t1 LEFT JOIN t2 ON (b NOTNULL)==(c IN ()) WHERE c; +---- +stmt 0 err 1 -1 80 no such table: t0 +==== 5.0 + + CREATE TABLE t1 (c1); + INSERT INTO t1 VALUES (101); + CREATE TABLE t2 ( x ); + INSERT INTO t2 VALUES(404); +---- +stmt 0 ok +stmt 24 err 1 -1 55 no such table: t1 +stmt 55 ok +stmt 80 err 1 -1 110 no such table: t2 +==== 5.1 + + SELECT 'val' in ( + select 'val' from ( select 'valueB' from t1 order by 1 ) + union all + select 'val' + ); +---- +stmt 0 err 1 -1 125 no such table: t1 +==== 5.2 + + select * from t2 + where 'val' in ( + select 'val' from ( select 'valueB' from t1 order by 1 ) + union all + select 'val' + ); +---- +stmt 0 err 1 -1 153 no such table: t2 +==== 5.3 + + SELECT subq_1.c_0 as c_0 + FROM ( SELECT 0 as c_0) as subq_1 + WHERE (subq_1.c_0) IN ( + SELECT subq_2.c_0 as c_0 + FROM ( + SELECT 0 as c_0 + FROM t1 as ref_1 + WHERE (ref_1.c1) = (2) + ORDER BY c_0 desc + ) as subq_2 + UNION ALL + SELECT 0 as c_0 + ); +---- +stmt 0 err 1 -1 283 no such table: t1 +==== 6.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a); + SELECT 111 IN ( + SELECT 222 FROM (SELECT 333 ORDER BY 1) + UNION ALL + SELECT 444 FROM (SELECT 555 FROM t1 ORDER BY 1) + ); +---- +stmt 0 ok +stmt 27 ok +stmt 49 err 1 -1 182 no such table: t1 diff --git a/parser/testdata/btree01.metadata.json b/parser/testdata/btree01.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/btree01.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/btree01.test b/parser/testdata/btree01.test new file mode 100644 index 0000000..6bc5e92 --- /dev/null +++ b/parser/testdata/btree01.test @@ -0,0 +1,40 @@ +==== btree01-1.1 + + PRAGMA page_size=65536; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB); + WITH RECURSIVE + c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30) + INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c; + UPDATE t1 SET b=zeroblob(3000); + UPDATE t1 SET b=zeroblob(64000) WHERE a=2; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 26 ok +stmt 76 err 1 -1 212 no such table: t1 +stmt 212 err 1 -1 246 no such table: t1 +stmt 246 err 1 -1 291 no such table: t1 +stmt 291 ok +==== btree01-2.1 + + PRAGMA page_size=1024; + CREATE TABLE t1(a INT PRIMARY KEY, b BLOB, c INT) WITHOUT ROWID; + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b,c) SELECT x*2, zeroblob(100), x FROM c; + UPDATE t1 SET b=zeroblob(1000) WHERE a=198; + CREATE TABLE t2(x INTEGER PRIMARY KEY, y INT); + INSERT INTO t2(y) VALUES(198),(187),(100); + SELECT y, c FROM t2 LEFT JOIN t1 ON y=a ORDER BY x; +---- +stmt 0 ok +stmt 25 ok +stmt 92 err 1 -1 232 no such table: t1 +stmt 232 err 1 -1 278 no such table: t1 +stmt 278 ok +stmt 327 err 1 -1 372 no such table: t2 +stmt 372 err 1 -1 426 no such table: t2 +==== btree01-2.2 + + SELECT y, c FROM t1 RIGHT JOIN t2 ON y=a ORDER BY x; +---- +stmt 0 err 1 -1 55 no such table: t1 diff --git a/parser/testdata/btree02.metadata.json b/parser/testdata/btree02.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/btree02.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/btree02.test b/parser/testdata/btree02.test new file mode 100644 index 0000000..4761784 --- /dev/null +++ b/parser/testdata/btree02.test @@ -0,0 +1,19 @@ +==== btree02-100 + + CREATE TABLE t1(a TEXT, ax INTEGER, b INT, PRIMARY KEY(a,ax)) WITHOUT ROWID; + WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<10) + INSERT INTO t1(a,ax,b) SELECT printf('%02x',i+160), random(), i FROM c; + CREATE INDEX t1a ON t1(a); + CREATE TABLE t2(x,y); + CREATE TABLE t3(cnt); + WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<4) + INSERT INTO t3(cnt) SELECT i FROM c; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 79 err 1 -1 231 no such table: t1 +stmt 231 err 1 -1 260 no such table: main.t1 +stmt 260 ok +stmt 284 ok +stmt 308 err 1 -1 424 no such table: t3 +stmt 424 err 1 -1 451 no such table: t1 diff --git a/parser/testdata/btreefault.metadata.json b/parser/testdata/btreefault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/btreefault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/btreefault.test b/parser/testdata/btreefault.test new file mode 100644 index 0000000..95bba83 --- /dev/null +++ b/parser/testdata/btreefault.test @@ -0,0 +1,16 @@ +==== 2.0 + + CREATE TABLE t1(i INTEGER PRIMARY KEY, a, b); + CREATE INDEX i1 ON t1(b); + CREATE TABLE t2(x, y); +---- +stmt 0 ok +stmt 48 err 1 -1 76 no such table: main.t1 +stmt 76 ok +==== 2.1 + + INSERT INTO t1 VALUES(25, 25, 25); + INSERT INTO t2 VALUES(25, 'a'), (25, 'b'), (25, 'c'); +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 93 no such table: t2 diff --git a/parser/testdata/busy.metadata.json b/parser/testdata/busy.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/busy.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/busy.test b/parser/testdata/busy.test new file mode 100644 index 0000000..914609b --- /dev/null +++ b/parser/testdata/busy.test @@ -0,0 +1,42 @@ +==== 3.1 + + CREATE TABLE t1(x); + CREATE TABLE t2(y); + CREATE TABLE t3(z); + + CREATE INDEX i1 ON t1(x); + CREATE INDEX i2 ON t2(y); + + INSERT INTO t1 VALUES(1); + INSERT INTO t2 VALUES(1); + ANALYZE; + + SELECT * FROM t1 WHERE x=1; + SELECT * FROM t2 WHERE y=1; +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +stmt 66 err 1 -1 95 no such table: main.t1 +stmt 95 err 1 -1 123 no such table: main.t2 +stmt 123 err 1 -1 152 no such table: t1 +stmt 152 err 1 -1 180 no such table: t2 +stmt 180 ok +stmt 191 err 1 -1 222 no such table: t1 +stmt 222 err 1 -1 252 no such table: t2 +==== 3.3 + PRAGMA optimize +---- +stmt 0 ok +==== 3.5 + PRAGMA optimize +---- +stmt 0 ok +==== 3.7 + PRAGMA optimize +---- +stmt 0 ok +==== 3.8 + PRAGMA optimize +---- +stmt 0 ok diff --git a/parser/testdata/cache.metadata.json b/parser/testdata/cache.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/cache.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/cache.test b/parser/testdata/cache.test new file mode 100644 index 0000000..d5ebea1 --- /dev/null +++ b/parser/testdata/cache.test @@ -0,0 +1,61 @@ +==== cache-2.0 + + PRAGMA auto_vacuum=OFF; + PRAGMA journal_mode=DELETE; + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + INSERT INTO t1 VALUES('x', 'y'); + INSERT INTO t2 VALUES('i', 'j'); +---- +stmt 0 ok +stmt 26 ok +stmt 56 ok +stmt 81 ok +stmt 106 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 176 no such table: t2 +==== cache-2.3.1 + + PRAGMA cache_size = 1; + BEGIN; + INSERT INTO t1 VALUES(1, 2); + PRAGMA lock_status; +---- +stmt 0 ok +stmt 25 ok +stmt 34 err 1 -1 67 no such table: t1 +stmt 67 ok +==== cache-2.3.3 + + INSERT INTO t2 VALUES(1, 2); + PRAGMA lock_status; +---- +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 ok +==== cache-2.3.7 + + SELECT * FROM t1 UNION SELECT * FROM t2; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== cache-2.4.1 + + PRAGMA cache_size = 0; + BEGIN; + INSERT INTO t1 VALUES(1, 2); + PRAGMA lock_status; +---- +stmt 0 ok +stmt 25 ok +stmt 34 err 1 -1 67 no such table: t1 +stmt 67 ok +==== cache-2.4.3 + + INSERT INTO t2 VALUES(1, 2); + PRAGMA lock_status; +---- +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 ok +==== cache-2.4.7 + + SELECT * FROM t1 UNION SELECT * FROM t2; +---- +stmt 0 err 1 -1 43 no such table: t2 diff --git a/parser/testdata/cacheflush.metadata.json b/parser/testdata/cacheflush.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/cacheflush.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/cacheflush.test b/parser/testdata/cacheflush.test new file mode 100644 index 0000000..04274bb --- /dev/null +++ b/parser/testdata/cacheflush.test @@ -0,0 +1,112 @@ +==== 1.1.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + BEGIN; + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 ok +stmt 65 err 1 -1 98 no such table: t1 +==== 1.2.0 + + COMMIT; + CREATE TABLE t2(a, b); + BEGIN; + INSERT INTO t1 VALUES(5, 6); + INSERT INTO t2 VALUES('a', 'b'); +---- +stmt 0 ok +stmt 10 ok +stmt 35 ok +stmt 44 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 114 no such table: t2 +==== 1.3.0 + + COMMIT; + CREATE TABLE t3(a, b); + BEGIN; + INSERT INTO t1 VALUES(7, 8); + INSERT INTO t2 VALUES('c', 'd'); + INSERT INTO t3 VALUES('i', 'ii'); +---- +stmt 0 ok +stmt 10 ok +stmt 35 ok +stmt 44 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 114 no such table: t2 +stmt 114 err 1 -1 152 no such table: t3 +==== 1.4.0 + + COMMIT; + BEGIN; + INSERT INTO t1 VALUES(9, 10); +---- +stmt 0 ok +stmt 10 ok +stmt 19 err 1 -1 53 no such table: t1 +==== 1.4.5 + COMMIT +---- +stmt 0 ok +==== 2.1.0 + + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t4(x, y); + INSERT INTO t4 VALUES('A', 'B'); + BEGIN; + INSERT INTO t1 VALUES(11, 12); + INSERT INTO t4 VALUES('C', 'D'); +---- +stmt 0 ok +stmt 28 err 1 44 51 unknown database aux +stmt 57 err 1 -1 92 no such table: t4 +stmt 92 ok +stmt 101 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 173 no such table: t4 +==== 2.1.5 + COMMIT +---- +stmt 0 ok +==== 2.2.0 + + BEGIN; + INSERT INTO t1 VALUES(13, 14); + INSERT INTO t4 VALUES('E', 'F'); +---- +stmt 0 ok +stmt 9 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 81 no such table: t4 +==== 2.2.7 + COMMIT +---- +stmt 0 ok +==== 3.1 + PRAGMA integrity_check +---- +stmt 0 ok +==== 3.2 + COMMIT +---- +stmt 0 ok +==== 3.3 + PRAGMA integrity_check +---- +stmt 0 ok +==== 3.4 + + SELECT count(*) FROM t1; + SELECT count(*) FROM t2; +---- +stmt 0 err 1 -1 28 no such table: t1 +stmt 28 err 1 -1 55 no such table: t2 +==== 4.5 + + ROLLBACK; + SELECT a FROM ta; + SELECT b FROM tb; +---- +stmt 0 ok +stmt 15 err 1 -1 37 no such table: ta +stmt 37 err 1 -1 59 no such table: tb diff --git a/parser/testdata/cachespill.metadata.json b/parser/testdata/cachespill.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/cachespill.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/cachespill.test b/parser/testdata/cachespill.test new file mode 100644 index 0000000..b481379 --- /dev/null +++ b/parser/testdata/cachespill.test @@ -0,0 +1,15 @@ +==== 1.1 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 1024; + PRAGMA cache_size = 100; + CREATE TABLE t1(a); +---- +stmt 0 ok +stmt 26 ok +stmt 53 ok +stmt 80 ok +==== 1.6 + ROLLBACK +---- +stmt 0 ok diff --git a/parser/testdata/capi2.metadata.json b/parser/testdata/capi2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/capi2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/capi2.test b/parser/testdata/capi2.test new file mode 100644 index 0000000..12b1dbe --- /dev/null +++ b/parser/testdata/capi2.test @@ -0,0 +1,72 @@ +==== capi2-3.20 + + CREATE TABLE a1(message_id, name , UNIQUE(message_id, name) ); + INSERT INTO a1 VALUES(1, 1); +---- +stmt 0 ok +stmt 67 err 1 -1 100 no such table: a1 +==== capi2-4.5 +SELECT * FROM t2 ORDER BY a +---- +stmt 0 err 1 -1 28 no such table: t2 +==== capi2-4.8 +SELECT * FROM t2 ORDER BY a +---- +stmt 0 err 1 -1 28 no such table: t2 +==== capi2-4.11 +SELECT * FROM t2 ORDER BY a +---- +stmt 0 err 1 -1 28 no such table: t2 +==== capi2-6.9 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== capi2-6.11 +BEGIN +---- +stmt 0 ok +==== capi2-6.15 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== capi2-6.17 +UPDATE t1 SET b=b+1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== capi2-6.19 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== capi2-6.25 + + INSERT INTO t1 VALUES(2,3,4); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 56 no such table: t1 +==== capi2-6.27 + + INSERT INTO t1 VALUES(2,4,5); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 56 no such table: t1 +==== capi2-7.11a +SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== capi2-11.1 + + CREATE TABLE tab1(col1, col2); +---- +stmt 0 ok +==== capi2-12.1 + + CREATE VIEW view1 AS SELECT * FROM tab1; +---- +stmt 0 ok +==== capi2-13.1 + + CREATE VIEW view2 AS SELECT * FROM tab1 limit 10 offset 10; +---- +stmt 0 ok diff --git a/parser/testdata/capi3.metadata.json b/parser/testdata/capi3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/capi3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/capi3.test b/parser/testdata/capi3.test new file mode 100644 index 0000000..6343682 --- /dev/null +++ b/parser/testdata/capi3.test @@ -0,0 +1,97 @@ +==== capi3-11.1 + + BEGIN; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 'int'); + INSERT INTO t1 VALUES(2, 'notatype'); +---- +stmt 0 ok +stmt 11 ok +stmt 38 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 117 no such table: t1 +==== capi3-11.3.1 + + COMMIT; +---- +stmt 0 ok +==== capi3-11.6 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== capi3-11.8 + + CREATE TABLE t2(a); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(2); + BEGIN; + INSERT INTO t2 VALUES(3); +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t2 +stmt 54 err 1 -1 84 no such table: t2 +stmt 84 ok +stmt 95 err 1 -1 125 no such table: t2 +==== capi3-11.9.2 + + ROLLBACK; +---- +stmt 0 ok +==== capi3-11.14 + + SELECT a FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== capi3-11.15 + + ROLLBACK; +---- +stmt 0 ok +==== capi3-11.16 + + SELECT a FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== capi3-11.17 + + BEGIN; +---- +stmt 0 ok +==== capi3-11.20 + + BEGIN; + COMMIT; +---- +stmt 0 ok +stmt 11 ok +==== capi3-12.2 + + INSERT INTO t1 VALUES(3, NULL); +---- +stmt 0 err 1 -1 36 no such table: t1 +==== capi3-12.3 + + INSERT INTO t2 VALUES(4); +---- +stmt 0 err 1 -1 30 no such table: t2 +==== capi3-12.4 + + BEGIN; + INSERT INTO t1 VALUES(4, NULL); +---- +stmt 0 ok +stmt 11 err 1 -1 47 no such table: t1 +==== capi3-12.8 + + COMMIT; + SELECT a FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 34 no such table: t1 +==== 20.1 + + CREATE TABLE t4(x); + INSERT INTO t4 VALUES('abcdefghij'); +---- +stmt 0 ok +stmt 22 err 1 -1 61 no such table: t4 diff --git a/parser/testdata/capi3b.metadata.json b/parser/testdata/capi3b.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/capi3b.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/capi3b.test b/parser/testdata/capi3b.test new file mode 100644 index 0000000..6404843 --- /dev/null +++ b/parser/testdata/capi3b.test @@ -0,0 +1,22 @@ +==== capi3b-1.1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + SELECT * FROM t1 +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 106 no such table: t1 +==== capi3b-1.3 + + BEGIN; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 11 err 1 -1 33 no such table: t1 +==== capi3b-1.9 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 diff --git a/parser/testdata/capi3c.metadata.json b/parser/testdata/capi3c.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/capi3c.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/capi3c.test b/parser/testdata/capi3c.test new file mode 100644 index 0000000..b0aad8e --- /dev/null +++ b/parser/testdata/capi3c.test @@ -0,0 +1,97 @@ +==== capi3c-11.1 + + BEGIN; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 'int'); + INSERT INTO t1 VALUES(2, 'notatype'); +---- +stmt 0 ok +stmt 11 ok +stmt 38 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 117 no such table: t1 +==== capi3-11.3.1 + + COMMIT; +---- +stmt 0 ok +==== capi3c-11.6 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== capi3c-11.8 + + CREATE TABLE t2(a); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(2); + BEGIN; + INSERT INTO t2 VALUES(3); +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t2 +stmt 54 err 1 -1 84 no such table: t2 +stmt 84 ok +stmt 95 err 1 -1 125 no such table: t2 +==== capi3c-11.9.2 + + ROLLBACK; +---- +stmt 0 ok +==== capi3c-11.14 + + SELECT a FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== capi3c-11.15 + + ROLLBACK; +---- +stmt 0 ok +==== capi3c-11.16 + + SELECT a FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== capi3c-11.17 + + BEGIN; +---- +stmt 0 ok +==== capi3c-11.20 + + BEGIN; + COMMIT; +---- +stmt 0 ok +stmt 11 ok +==== capi3c-12.2 + + INSERT INTO t1 VALUES(3, NULL); +---- +stmt 0 err 1 -1 36 no such table: t1 +==== capi3c-12.3 + + INSERT INTO t2 VALUES(4); +---- +stmt 0 err 1 -1 30 no such table: t2 +==== capi3c-12.4 + + BEGIN; + INSERT INTO t1 VALUES(4, NULL); +---- +stmt 0 ok +stmt 11 err 1 -1 47 no such table: t1 +==== capi3c-12.8 + + COMMIT; + SELECT a FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 34 no such table: t1 +==== 25.0 + + CREATE TABLE t11(a VARCHAR(10), b INTEGER); + CREATE TABLE t12(a VARCHAR(15), b FLOAT); +---- +stmt 0 ok +stmt 46 ok diff --git a/parser/testdata/capi3d.metadata.json b/parser/testdata/capi3d.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/capi3d.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/capi3d.test b/parser/testdata/capi3d.test new file mode 100644 index 0000000..f73712a --- /dev/null +++ b/parser/testdata/capi3d.test @@ -0,0 +1,17 @@ +==== capi3d-4.1 + + CREATE TABLE t4(x,y); + BEGIN; +---- +stmt 0 ok +stmt 24 ok +==== capi3d-4.2.3 + + VACUUM +---- +stmt 0 ok +==== capi3d-4.2.5 + + VACUUM +---- +stmt 0 ok diff --git a/parser/testdata/carray01.metadata.json b/parser/testdata/carray01.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/carray01.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/carray01.test b/parser/testdata/carray01.test new file mode 100644 index 0000000..eb681a5 --- /dev/null +++ b/parser/testdata/carray01.test @@ -0,0 +1,14 @@ +==== 400 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INT PRIMARY KEY, b INT) WITHOUT ROWID; + WITH c(x) AS ( + VALUES(1) + UNION + SELECT x+1 FROM (carray NATURAL FULL JOIN carray(t1.b)), t1, c + ) + SELECT * FROM c; +---- +stmt 0 ok +stmt 27 ok +stmt 86 err 1 -1 217 no such table: carray diff --git a/parser/testdata/carray02.metadata.json b/parser/testdata/carray02.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/carray02.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/carray02.test b/parser/testdata/carray02.test new file mode 100644 index 0000000..607f670 --- /dev/null +++ b/parser/testdata/carray02.test @@ -0,0 +1,24 @@ +==== 3.0.0 + + SELECT * FROM carray +---- +stmt 0 err 1 -1 24 no such table: carray +==== 3.0.1 + + SELECT * FROM carray('0xFFFF', 5) +---- +stmt 0 err 1 -1 37 no such table: carray +==== 3.0.2 + + SELECT * FROM carray('0xFFFF') +---- +stmt 0 err 1 -1 34 no such table: carray +==== 3.0.3 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('0xFFFF'); + SELECT * FROM t1, carray WHERE carray.pointer = t1.x; +---- +stmt 0 ok +stmt 22 err 1 -1 57 no such table: t1 +stmt 57 err 1 -1 113 no such table: t1 diff --git a/parser/testdata/carrayfault.metadata.json b/parser/testdata/carrayfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/carrayfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/carrayfault.test b/parser/testdata/carrayfault.test new file mode 100644 index 0000000..cf17816 --- /dev/null +++ b/parser/testdata/carrayfault.test @@ -0,0 +1,5 @@ +==== 2.0 + + CREATE TABLE t1(a); +---- +stmt 0 ok diff --git a/parser/testdata/cast.metadata.json b/parser/testdata/cast.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/cast.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/cast.test b/parser/testdata/cast.test new file mode 100644 index 0000000..6de27b8 --- /dev/null +++ b/parser/testdata/cast.test @@ -0,0 +1,579 @@ +==== cast-1.1 +SELECT x'616263' +---- +stmt 0 ok +==== cast-1.2 +SELECT typeof(x'616263') +---- +stmt 0 ok +==== cast-1.3 +SELECT CAST(x'616263' AS text) +---- +stmt 0 ok +==== cast-1.4 +SELECT typeof(CAST(x'616263' AS text)) +---- +stmt 0 ok +==== cast-1.5 +SELECT CAST(x'616263' AS numeric) +---- +stmt 0 ok +==== cast-1.6 +SELECT typeof(CAST(x'616263' AS numeric)) +---- +stmt 0 ok +==== cast-1.7 +SELECT CAST(x'616263' AS blob) +---- +stmt 0 ok +==== cast-1.8 +SELECT typeof(CAST(x'616263' AS blob)) +---- +stmt 0 ok +==== cast-1.9 +SELECT CAST(x'616263' AS integer) +---- +stmt 0 ok +==== cast-1.10 +SELECT typeof(CAST(x'616263' AS integer)) +---- +stmt 0 ok +==== cast-1.11 +SELECT null +---- +stmt 0 ok +==== cast-1.12 +SELECT typeof(NULL) +---- +stmt 0 ok +==== cast-1.13 +SELECT CAST(NULL AS text) +---- +stmt 0 ok +==== cast-1.14 +SELECT typeof(CAST(NULL AS text)) +---- +stmt 0 ok +==== cast-1.15 +SELECT CAST(NULL AS numeric) +---- +stmt 0 ok +==== cast-1.16 +SELECT typeof(CAST(NULL AS numeric)) +---- +stmt 0 ok +==== cast-1.17 +SELECT CAST(NULL AS blob) +---- +stmt 0 ok +==== cast-1.18 +SELECT typeof(CAST(NULL AS blob)) +---- +stmt 0 ok +==== cast-1.19 +SELECT CAST(NULL AS integer) +---- +stmt 0 ok +==== cast-1.20 +SELECT typeof(CAST(NULL AS integer)) +---- +stmt 0 ok +==== cast-1.21 +SELECT 123 +---- +stmt 0 ok +==== cast-1.22 +SELECT typeof(123) +---- +stmt 0 ok +==== cast-1.23 +SELECT CAST(123 AS text) +---- +stmt 0 ok +==== cast-1.24 +SELECT typeof(CAST(123 AS text)) +---- +stmt 0 ok +==== cast-1.25 +SELECT CAST(123 AS numeric) +---- +stmt 0 ok +==== cast-1.26 +SELECT typeof(CAST(123 AS numeric)) +---- +stmt 0 ok +==== cast-1.27 +SELECT CAST(123 AS blob) +---- +stmt 0 ok +==== cast-1.28 +SELECT typeof(CAST(123 AS blob)) +---- +stmt 0 ok +==== cast-1.29 +SELECT CAST(123 AS integer) +---- +stmt 0 ok +==== cast-1.30 +SELECT typeof(CAST(123 AS integer)) +---- +stmt 0 ok +==== cast-1.31 +SELECT 123.456 +---- +stmt 0 ok +==== cast-1.32 +SELECT typeof(123.456) +---- +stmt 0 ok +==== cast-1.33 +SELECT CAST(123.456 AS text) +---- +stmt 0 ok +==== cast-1.34 +SELECT typeof(CAST(123.456 AS text)) +---- +stmt 0 ok +==== cast-1.35 +SELECT CAST(123.456 AS numeric) +---- +stmt 0 ok +==== cast-1.36 +SELECT typeof(CAST(123.456 AS numeric)) +---- +stmt 0 ok +==== cast-1.37 +SELECT CAST(123.456 AS blob) +---- +stmt 0 ok +==== cast-1.38 +SELECT typeof(CAST(123.456 AS blob)) +---- +stmt 0 ok +==== cast-1.39 +SELECT CAST(123.456 AS integer) +---- +stmt 0 ok +==== cast-1.38.dup1 +SELECT typeof(CAST(123.456 AS integer)) +---- +stmt 0 ok +==== cast-1.41 +SELECT '123abc' +---- +stmt 0 ok +==== cast-1.42 +SELECT typeof('123abc') +---- +stmt 0 ok +==== cast-1.43 +SELECT CAST('123abc' AS text) +---- +stmt 0 ok +==== cast-1.44 +SELECT typeof(CAST('123abc' AS text)) +---- +stmt 0 ok +==== cast-1.45 +SELECT CAST('123abc' AS numeric) +---- +stmt 0 ok +==== cast-1.46 +SELECT typeof(CAST('123abc' AS numeric)) +---- +stmt 0 ok +==== cast-1.47 +SELECT CAST('123abc' AS blob) +---- +stmt 0 ok +==== cast-1.48 +SELECT typeof(CAST('123abc' AS blob)) +---- +stmt 0 ok +==== cast-1.49 +SELECT CAST('123abc' AS integer) +---- +stmt 0 ok +==== cast-1.50 +SELECT typeof(CAST('123abc' AS integer)) +---- +stmt 0 ok +==== cast-1.51 +SELECT CAST('123.5abc' AS numeric) +---- +stmt 0 ok +==== cast-1.53 +SELECT CAST('123.5abc' AS integer) +---- +stmt 0 ok +==== cast-1.60 +SELECT CAST(null AS REAL) +---- +stmt 0 ok +==== cast-1.61 +SELECT typeof(CAST(null AS REAL)) +---- +stmt 0 ok +==== cast-1.62 +SELECT CAST(1 AS REAL) +---- +stmt 0 ok +==== cast-1.63 +SELECT typeof(CAST(1 AS REAL)) +---- +stmt 0 ok +==== cast-1.64 +SELECT CAST('1' AS REAL) +---- +stmt 0 ok +==== cast-1.65 +SELECT typeof(CAST('1' AS REAL)) +---- +stmt 0 ok +==== cast-1.66 +SELECT CAST('abc' AS REAL) +---- +stmt 0 ok +==== cast-1.67 +SELECT typeof(CAST('abc' AS REAL)) +---- +stmt 0 ok +==== cast-1.68 +SELECT CAST(x'31' AS REAL) +---- +stmt 0 ok +==== cast-1.69 +SELECT typeof(CAST(x'31' AS REAL)) +---- +stmt 0 ok +==== cast-2.1 +SELECT CAST(' 123' AS integer) +---- +stmt 0 ok +==== cast-2.2 +SELECT CAST(' -123.456' AS real) +---- +stmt 0 ok +==== cast-3.1 +SELECT CAST(9223372036854774800 AS integer) +---- +stmt 0 ok +==== cast-3.2 +SELECT CAST(9223372036854774800 AS numeric) +---- +stmt 0 ok +==== cast-3.4 +SELECT CAST(CAST(9223372036854774800 AS real) AS integer) +---- +stmt 0 ok +==== cast-3.5 +SELECT CAST(-9223372036854774800 AS integer) +---- +stmt 0 ok +==== cast-3.6 +SELECT CAST(-9223372036854774800 AS numeric) +---- +stmt 0 ok +==== cast-3.8 +SELECT CAST(CAST(-9223372036854774800 AS real) AS integer) +---- +stmt 0 ok +==== cast-3.11 +SELECT CAST('9223372036854774800' AS integer) +---- +stmt 0 ok +==== cast-3.12 +SELECT CAST('9223372036854774800' AS numeric) +---- +stmt 0 ok +==== cast-3.14 +SELECT CAST(CAST('9223372036854774800' AS real) AS integer) +---- +stmt 0 ok +==== cast-3.15 +SELECT CAST('-9223372036854774800' AS integer) +---- +stmt 0 ok +==== cast-3.16 +SELECT CAST('-9223372036854774800' AS numeric) +---- +stmt 0 ok +==== cast-3.18 +SELECT CAST(CAST('-9223372036854774800' AS real) AS integer) +---- +stmt 0 ok +==== cast-3.21 +SELECT CAST(x'39323233333732303336383534373734383030' AS integer) +---- +stmt 0 ok +==== cast-3.22 +SELECT CAST(x'39323233333732303336383534373734383030' AS numeric) +---- +stmt 0 ok +==== cast-3.24 + + SELECT CAST(CAST(x'39323233333732303336383534373734383030' AS real) + AS integer) +---- +stmt 0 ok +==== cast-3.31 +SELECT CAST(NULL AS numeric) +---- +stmt 0 ok +==== cast-5.1 + + SELECT CAST('9223372036854775808' AS integer); + SELECT CAST(' +000009223372036854775808' AS integer); + SELECT CAST('12345678901234567890123' AS INTEGER); +---- +stmt 0 ok +stmt 49 ok +stmt 106 ok +==== cast-5.2 + + SELECT CAST('-9223372036854775808' AS integer); + SELECT CAST('-9223372036854775809' AS integer); + SELECT CAST('-12345678901234567890123' AS INTEGER); +---- +stmt 0 ok +stmt 50 ok +stmt 100 ok +==== cast-5.3 + + SELECT CAST('123e+5' AS INTEGER); + SELECT CAST('123e+5' AS NUMERIC); + SELECT CAST('123e+5' AS REAL); +---- +stmt 0 ok +stmt 36 ok +stmt 72 ok +==== cast-6.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a NUMERIC); + INSERT INTO t1 VALUES + ('9000000000000000001'), + ('9000000000000000001 '), + (' 9000000000000000001'), + (' 9000000000000000001 '); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 57 err 1 -1 205 no such table: t1 +stmt 205 err 1 -1 225 no such table: t1 +==== cast-7.1 + + SELECT CAST('-' AS NUMERIC); +---- +stmt 0 ok +==== cast-7.2 + + SELECT CAST('-0' AS NUMERIC); +---- +stmt 0 ok +==== cast-7.3 + + SELECT CAST('+' AS NUMERIC); +---- +stmt 0 ok +==== cast-7.4 + + SELECT CAST('/' AS NUMERIC); +---- +stmt 0 ok +==== cast-7.10 + + SELECT '' - 2851427734582196970; +---- +stmt 0 ok +==== cast-7.11 + + SELECT 0 - 2851427734582196970; +---- +stmt 0 ok +==== cast-7.12 + + SELECT '' - 1; +---- +stmt 0 ok +==== cast-7.20 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0 (c0 TEXT); + INSERT INTO t0(c0) VALUES ('1.0'); + SELECT CAST(c0 AS NUMERIC) FROM t0; +---- +stmt 0 ok +stmt 27 ok +stmt 56 err 1 -1 93 no such table: t0 +stmt 93 err 1 -1 131 no such table: t0 +==== cast-7.30 + + SELECT -'.'; +---- +stmt 0 ok +==== cast-7.31 + + SELECT '.'+0; +---- +stmt 0 ok +==== cast-7.32 + + SELECT CAST('.' AS numeric); +---- +stmt 0 ok +==== cast-7.33 + + SELECT -CAST('.' AS numeric); +---- +stmt 0 ok +==== cast-7.40 + + SELECT CAST('-0.0' AS numeric); +---- +stmt 0 ok +==== cast-7.41 + + SELECT CAST('0.0' AS numeric); +---- +stmt 0 ok +==== cast-7.42 + + SELECT CAST('+0.0' AS numeric); +---- +stmt 0 ok +==== cast-7.43 + + SELECT CAST('-1.0' AS numeric); +---- +stmt 0 ok +==== cast-8.1 + + SELECT quote(X'310032003300')==quote(substr(X'310032003300', 1)) +---- +stmt 0 ok +==== cast-8.2 + + SELECT CAST(X'310032003300' AS TEXT) + ==CAST(substr(X'310032003300', 1) AS TEXT) +---- +stmt 0 ok +==== cast-9.0 + + CREATE TABLE t0(c0); + INSERT INTO t0(c0) VALUES (0); + CREATE VIEW v1(c0, c1) AS + SELECT CAST(0.0 AS NUMERIC), COUNT(*) OVER () FROM t0; + SELECT v1.c0 FROM v1, t0 WHERE v1.c0=0; +---- +stmt 0 ok +stmt 23 err 1 -1 56 no such table: t0 +stmt 56 ok +stmt 144 err 1 -1 186 no such table: v1 +==== cast-9.1 + + CREATE TABLE dual(dummy TEXT); + INSERT INTO dual VALUES('X'); + SELECT CAST(4 AS NUMERIC); +---- +stmt 0 ok +stmt 33 err 1 -1 65 no such table: dual +stmt 65 ok +==== cast-9.2 + + SELECT CAST(4.0 AS NUMERIC); +---- +stmt 0 ok +==== cast-9.3 + + SELECT CAST(4.5 AS NUMERIC); +---- +stmt 0 ok +==== cast-9.4 + + SELECT x, typeof(x) FROM (SELECT CAST(4 AS NUMERIC) AS x) JOIN dual; +---- +stmt 0 err 1 -1 71 no such table: dual +==== cast-9.5 + + SELECT x, typeof(x) FROM dual CROSS JOIN (SELECT CAST(4 AS NUMERIC) AS x); +---- +stmt 0 err 1 -1 77 no such table: dual +==== cast-9.10 + + SELECT x, typeof(x) FROM (SELECT CAST(4.0 AS NUMERIC) AS x) JOIN dual; +---- +stmt 0 err 1 -1 73 no such table: dual +==== cast-9.11 + + SELECT x, typeof(x) FROM dual CROSS JOIN (SELECT CAST(4.0 AS NUMERIC) AS x); +---- +stmt 0 err 1 -1 79 no such table: dual +==== cast-9.12 + + SELECT x, typeof(x) FROM (SELECT CAST(4.5 AS NUMERIC) AS x) JOIN dual; +---- +stmt 0 err 1 -1 73 no such table: dual +==== cast-9.13 + + SELECT x, typeof(x) FROM dual CROSS JOIN (SELECT CAST(4.5 AS NUMERIC) AS x); +---- +stmt 0 err 1 -1 79 no such table: dual +==== cast-10.1 + + VALUES(CAST(44 AS REAL)),(55); +---- +stmt 0 ok +==== cast-10.2 + + SELECT CAST(44 AS REAL) AS 'm' UNION ALL SELECT 55; +---- +stmt 0 ok +==== cast-10.3 + + SELECT * FROM (VALUES(CAST(44 AS REAL)),(55)); +---- +stmt 0 ok +==== cast-10.4 + + SELECT * FROM (SELECT CAST(44 AS REAL) AS 'm' UNION ALL SELECT 55); +---- +stmt 0 ok +==== cast-10.5 + + SELECT * FROM dual CROSS JOIN (VALUES(CAST(44 AS REAL)),(55)); +---- +stmt 0 err 1 -1 65 no such table: dual +==== cast-10.6 + + SELECT * FROM dual CROSS JOIN (SELECT CAST(44 AS REAL) AS 'm' + UNION ALL SELECT 55); +---- +stmt 0 err 1 -1 119 no such table: dual +==== cast-10.7 + + DROP VIEW v1; + CREATE VIEW v1 AS SELECT CAST(44 AS REAL) AS 'm' UNION ALL SELECT 55; + SELECT name, type FROM pragma_table_info('v1'); +---- +stmt 0 err 1 -1 18 no such view: v1 +stmt 18 ok +stmt 92 ok +==== cast-10.8 + + CREATE VIEW v2 AS VALUES(CAST(44 AS REAL)),(55); + SELECT type FROM pragma_table_info('v2'); +---- +stmt 0 ok +stmt 53 ok +==== cast-10.9 + + SELECT * FROM v1; +---- +stmt 0 err 1 -1 22 no such table: v1 +==== cast-10.10 + + SELECT * FROM v2; +---- +stmt 0 err 1 -1 22 no such table: v2 diff --git a/parser/testdata/cffault.metadata.json b/parser/testdata/cffault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/cffault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/cffault.test b/parser/testdata/cffault.test new file mode 100644 index 0000000..7b76fc8 --- /dev/null +++ b/parser/testdata/cffault.test @@ -0,0 +1,34 @@ +==== 1.0 + + CREATE TABLE t1(a PRIMARY KEY, b); + CREATE INDEX i1 ON t1(b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + INSERT INTO t1 VALUES(7, 8); +---- +stmt 0 ok +stmt 37 err 1 -1 65 no such table: main.t1 +stmt 65 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 189 no such table: t1 +==== 2.0 + + CREATE TABLE t1(a PRIMARY KEY, b, c); + CREATE INDEX i1 ON t1(b); + CREATE INDEX i2 ON t1(c, b); + INSERT INTO t1 VALUES(1, 2, randomblob(600)); + INSERT INTO t1 VALUES(3, 4, randomblob(600)); + INSERT INTO t1 VALUES(5, 6, randomblob(600)); + INSERT INTO t1 VALUES(7, 8, randomblob(600)); + INSERT INTO t1 VALUES(9, 10, randomblob(600)); +---- +stmt 0 ok +stmt 40 err 1 -1 68 no such table: main.t1 +stmt 68 err 1 -1 99 no such table: main.t1 +stmt 99 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 197 no such table: t1 +stmt 197 err 1 -1 246 no such table: t1 +stmt 246 err 1 -1 295 no such table: t1 +stmt 295 err 1 -1 344 no such table: t1 diff --git a/parser/testdata/changes.metadata.json b/parser/testdata/changes.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/changes.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/changes.test b/parser/testdata/changes.test new file mode 100644 index 0000000..67e06ed --- /dev/null +++ b/parser/testdata/changes.test @@ -0,0 +1,15 @@ +==== changes-generated + + INSERT INTO t1 VALUES(-1) +---- +stmt 0 err 1 -1 31 no such table: t1 +==== changes-generated.dup1 + + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 29 no such table: t1 +==== changes-generated.dup2 + + DELETE FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 diff --git a/parser/testdata/changes2.metadata.json b/parser/testdata/changes2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/changes2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/changes2.test b/parser/testdata/changes2.test new file mode 100644 index 0000000..06b5f55 --- /dev/null +++ b/parser/testdata/changes2.test @@ -0,0 +1,47 @@ +==== 1.0 + + CREATE TABLE some_table ( + id INTEGER NOT NULL, value VARCHAR(40) NOT NULL, PRIMARY KEY (id) + ); + INSERT INTO some_table (id, value) VALUES (1, 'v1'); +---- +stmt 0 ok +stmt 104 err 1 -1 159 no such table: some_table +==== 1.2 + + DROP TABLE some_table; + CREATE TABLE some_table ( + id INTEGER NOT NULL, value VARCHAR(40) NOT NULL, PRIMARY KEY (id) + ); + INSERT INTO some_table (id, value) VALUES (1, 'v1'); +---- +stmt 0 err 1 -1 25 no such table: some_table +stmt 25 ok +stmt 129 err 1 -1 184 no such table: some_table +==== 2.0 + + CREATE TABLE t1(a, b); + CREATE TABLE log(t); +---- +stmt 0 ok +stmt 25 ok +==== 2.1 + + INSERT INTO t1 VALUES (1, 'v1'), (2, 'v2'); +---- +stmt 0 err 1 -1 46 no such table: t1 +==== 2.3 + + CREATE TABLE t3(x); +---- +stmt 0 ok +==== 2.2 + + INSERT INTO t1 VALUES (3, 'v1'), (4, 'v2'); +---- +stmt 0 err 1 -1 46 no such table: t1 +==== 2.4 + + SELECT * FROM log; +---- +stmt 0 err 1 -1 21 no such table: log diff --git a/parser/testdata/check.metadata.json b/parser/testdata/check.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/check.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/check.test b/parser/testdata/check.test new file mode 100644 index 0000000..a377197 --- /dev/null +++ b/parser/testdata/check.test @@ -0,0 +1,642 @@ +==== check-1.1 + + CREATE TABLE t1( + x INTEGER CHECK( x<5 ), + y REAL CHECK( y>x ) + ); +---- +stmt 0 ok +==== check-1.2 + + INSERT INTO t1 VALUES(3,4); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 54 no such table: t1 +==== check-1.3 + + INSERT INTO t1 VALUES(6,7); +---- +stmt 0 err 1 -1 32 no such table: t1 +==== check-1.4 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== check-1.5 + + INSERT INTO t1 VALUES(4,3); +---- +stmt 0 err 1 -1 32 no such table: t1 +==== check-1.6 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== check-1.7 + + INSERT INTO t1 VALUES(NULL,6); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== check-1.8 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== check-1.9 + + INSERT INTO t1 VALUES(2,NULL); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== check-1.10 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== check-1.11 + + DELETE FROM t1 WHERE x IS NULL OR x!=3; + UPDATE t1 SET x=2 WHERE x==3; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 100 no such table: t1 +==== check-1.12 + + UPDATE t1 SET x=7 WHERE x==2 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== check-1.13 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== check-1.14 + + UPDATE t1 SET x=5 WHERE x==2 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== check-1.15 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== check-1.16 + + UPDATE t1 SET x=4, y=11 WHERE x==2 +---- +stmt 0 err 1 -1 40 no such table: t1 +==== check-1.17 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== check-2.1 + + PRAGMA writable_schema = 1; + CREATE TABLE t2( + x INTEGER CONSTRAINT one CHECK( typeof(coalesce(x,0))=="integer" ), + y REAL CONSTRAINT two CHECK( typeof(coalesce(y,0.1))=='real' ), + z TEXT CONSTRAINT three CHECK( typeof(coalesce(z,''))=='text' ) + ); + CREATE TABLE t2n( + x INTEGER CONSTRAINT one CHECK( typeof(coalesce(x,0))=="integer" ), + y NUMERIC CONSTRAINT two CHECK( typeof(coalesce(y,0.1))=='real' ), + z TEXT CONSTRAINT three CHECK( typeof(coalesce(z,''))=='text' ) + ); + PRAGMA writable_schema = 0; +---- +stmt 0 ok +stmt 32 ok +stmt 274 ok +stmt 520 ok +==== check-2.2 + + INSERT INTO t2 VALUES(1,2.2,'three'); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 42 no such table: t2 +stmt 42 err 1 -1 64 no such table: t2 +==== check-2.3 + + INSERT INTO t2 VALUES(NULL, NULL, NULL); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 45 no such table: t2 +stmt 45 err 1 -1 67 no such table: t2 +==== check-2.4 + + INSERT INTO t2 VALUES(1.1, NULL, NULL); +---- +stmt 0 err 1 -1 44 no such table: t2 +==== check-2.6 + + INSERT INTO t2 VALUES(NULL, NULL, 3.14159); +---- +stmt 0 err 1 -1 48 no such table: t2 +==== check-2.10 + + CREATE TABLE t2b( + x INTEGER CHECK( typeof(coalesce(x,0))=='integer' ) CONSTRAINT one, + y TEXT PRIMARY KEY constraint two, + z INTEGER, + UNIQUE(x,z) constraint three + ); +---- +stmt 0 ok +==== check-2.11 + + INSERT INTO t2b VALUES('xyzzy','hi',5); +---- +stmt 0 err 1 -1 44 no such table: t2b +==== check-2.12 + + CREATE TABLE t2c( + x INTEGER CONSTRAINT x_one CONSTRAINT x_two + CHECK( typeof(coalesce(x,0))=='integer' ) + CONSTRAINT x_two CONSTRAINT x_three, + y INTEGER, z INTEGER, + CONSTRAINT u_one UNIQUE(x,y,z) CONSTRAINT u_two + ); +---- +stmt 0 ok +==== check-2.13 + + INSERT INTO t2c VALUES('xyzzy',7,8); +---- +stmt 0 err 1 -1 41 no such table: t2c +==== check-2.cleanup + + DROP TABLE IF EXISTS t2b; + DROP TABLE IF EXISTS t2c; + DROP TABLE IF EXISTS t2n; +---- +stmt 0 ok +stmt 30 ok +stmt 60 ok +==== check-3.1 + + CREATE TABLE t3( + x, y, z, + CHECK( x<(SELECT min(x) FROM t1) ) + ); +---- +stmt 0 err 1 -1 92 subqueries prohibited in CHECK constraints +==== check-3.2 + + SELECT name FROM sqlite_master ORDER BY name +---- +stmt 0 ok +==== check-3.3 + + CREATE TABLE t3( + x, y, z, + CHECK( q0 )); + CREATE TABLE t811(b, CHECK( xyzzy.t811.b BETWEEN 5 AND 10 )); +---- +stmt 0 ok +stmt 48 ok +==== 9.1 + + CREATE TABLE t1( + a INTEGER PRIMARY KEY, + b INTEGER NOT NULL CONSTRAINT 'b-check' CHECK( b>a ), + c INTEGER NOT NULL CONSTRAINT 'c-check' CHECK( c>rowid*2 ), + d INTEGER NOT NULL CONSTRAINT 'd-check' CHECK( d BETWEEN b AND c ) + ); + INSERT INTO t1(a,b,c,d) VALUES(1,2,4,3),(2,4,6,5),(3,10,30,20); +---- +stmt 0 ok +stmt 244 err 1 -1 310 no such table: t1 +==== 9.2 + + UPDATE t1 SET b=0 WHERE a=1; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 9.3 + + UPDATE t1 SET c=a*2 WHERE a=1; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 10.1 + + CREATE TABLE t1(x); + CREATE VIEW v1(y) AS SELECT x FROM t1; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 22 ok +stmt 63 ok +==== 11.0 + + CREATE TABLE t1 (Col0 CHECK(1 COLLATE BINARY BETWEEN 1 AND 1) ) ; +---- +stmt 0 ok +==== 11.1 + + INSERT INTO t1 VALUES (NULL); +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 11.2 + + INSERT INTO t1 VALUES (NULL); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 11.3 + + CREATE TABLE t2(b, a CHECK( + CASE 'abc' COLLATE nocase WHEN a THEN 1 ELSE 0 END) + ); +---- +stmt 0 ok +==== 11.4 + + INSERT INTO t2(a) VALUES('abc'); +---- +stmt 0 err 1 -1 35 no such table: t2 +==== 11.5 + + INSERT INTO t2(b, a) VALUES(1, 'abc'||''); +---- +stmt 0 err 1 -1 45 no such table: t2 +==== 11.6 + + INSERT INTO t2(b, a) VALUES(2, 'abc'); +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 12.10 + + CREATE TABLE t1(a TEXT, CHECK(a=+a)); + INSERT INTO t1(a) VALUES(NULL),('xyz'),(5),(x'303132'),(4.75); + SELECT quote(a) FROM t1 ORDER BY rowid; +---- +stmt 0 ok +stmt 40 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 147 no such table: t1 +==== 12.20 + + DROP TABLE t1; + CREATE TABLE t1(a TEXT, CHECK(a<>+a)); + INSERT INTO t1(a) VALUES(NULL); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 58 err 1 -1 92 no such table: t1 +==== 12.21 + + INSERT INTO t1(a) VALUES('xyz'); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 12.22 + + INSERT INTO t1(a) VALUES(123); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 12.30 + + DROP TABLE t1; + CREATE TABLE t1(a TEXT, CHECK(NOT(a=+a))); + INSERT INTO t1(a) VALUES(NULL); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 62 err 1 -1 96 no such table: t1 +==== 12.31 + + INSERT INTO t1(a) VALUES('xyz'); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 12.32 + + INSERT INTO t1(a) VALUES(123); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 12.40 + + DROP TABLE t1; + CREATE TABLE t1(a TEXT, CHECK(NOT(a<>+a))); + INSERT INTO t1(a) VALUES(NULL),('xyz'),(5),(x'303132'),(4.75); + SELECT quote(a) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 63 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 170 no such table: t1 +==== 12.50 + + DROP TABLE t1; + CREATE TABLE t1(a TEXT, CHECK(a BETWEEN 0 AND +a)); + INSERT INTO t1(a) VALUES(NULL),('xyz'),(5),(x'303132'),(4.75); + SELECT quote(a) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 71 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 178 no such table: t1 +==== 12.60 + + DROP TABLE t1; + CREATE TABLE t1(a TEXT, CHECK(a NOT BETWEEN 0 AND +a)); + INSERT INTO t1(a) VALUES(NULL); + SELECT quote(a) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 75 err 1 -1 109 no such table: t1 +stmt 109 err 1 -1 151 no such table: t1 +==== 12.61 + + INSERT INTO t1(a) VALUES(456); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 12.70 + + DROP TABLE t1; + CREATE TABLE t1(a TEXT, CHECK(a BETWEEN +a AND 999999)); + INSERT INTO t1(a) VALUES(NULL),(5); + SELECT quote(a) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 76 err 1 -1 114 no such table: t1 +stmt 114 err 1 -1 156 no such table: t1 +==== 12.80 + + DROP TABLE t1; + CREATE TABLE t1(a TEXT, CHECK(a NOT BETWEEN +a AND 999999)); + INSERT INTO t1(a) VALUES(NULL); + SELECT quote(a) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 80 err 1 -1 114 no such table: t1 +stmt 114 err 1 -1 156 no such table: t1 +==== 12.81 + + INSERT INTO t1(a) VALUES(456); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 13.1.0 + + CREATE TABLE Table0 (Col0 , CHECK(Table0.Col0 NOT NULL ) ) ; + REPLACE INTO Table0 VALUES (hex(randomblob(100000))); +---- +stmt 0 ok +stmt 63 err 1 -1 119 no such table: Table0 +==== 13.1.2 + + UPDATE OR REPLACE Table0 SET Col0 = Table0.Col0 ; +---- +stmt 0 err 1 -1 52 no such table: Table0 +==== 13.1.4 + + SELECT length(col0) FROM table0; +---- +stmt 0 err 1 -1 35 no such table: table0 +==== 13.2.0 + + CREATE TABLE t2 (x , CHECK((NOT (x ISNULL) ))); + REPLACE INTO t2 VALUES (hex(randomblob(100000))); +---- +stmt 0 ok +stmt 50 err 1 -1 102 no such table: t2 +==== 13.2.1 + + SELECT length(x) FROM t2 +---- +stmt 0 err 1 -1 28 no such table: t2 +==== 13.2.2 + + UPDATE OR REPLACE t2 SET x = x; +---- +stmt 0 err 1 -1 34 no such table: t2 +==== 13.2.3 + + SELECT length(x) FROM t2 +---- +stmt 0 err 1 -1 28 no such table: t2 diff --git a/parser/testdata/checkfault.metadata.json b/parser/testdata/checkfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/checkfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/checkfault.test b/parser/testdata/checkfault.test new file mode 100644 index 0000000..ba5a19c --- /dev/null +++ b/parser/testdata/checkfault.test @@ -0,0 +1,9 @@ +==== 1.0 + + CREATE TABLE t1 (Col0 CHECK(1 COLLATE BINARY BETWEEN 1 AND 1) ) ; + CREATE TABLE t2(b, a CHECK( + CASE 'abc' COLLATE nocase WHEN a THEN 1 ELSE 0 END) + ); +---- +stmt 0 ok +stmt 68 ok diff --git a/parser/testdata/chunksize.metadata.json b/parser/testdata/chunksize.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/chunksize.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/chunksize.test b/parser/testdata/chunksize.test new file mode 100644 index 0000000..98c523a --- /dev/null +++ b/parser/testdata/chunksize.test @@ -0,0 +1,7 @@ +==== chunksize-generated + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t1 diff --git a/parser/testdata/cksumvfs.metadata.json b/parser/testdata/cksumvfs.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/cksumvfs.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/cksumvfs.test b/parser/testdata/cksumvfs.test new file mode 100644 index 0000000..cb2a6f9 --- /dev/null +++ b/parser/testdata/cksumvfs.test @@ -0,0 +1,47 @@ +==== 1.1 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 1.2 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 1.4 + + SELECT count(b) FROM t1 +---- +stmt 0 err 1 -1 27 no such table: t1 +==== 1.5 + + PRAGMA journal_mode = wal; + DELETE FROM t1; +---- +stmt 0 ok +stmt 29 err 1 -1 47 no such table: t1 +==== 1.6 + + PRAGMA wal_checkpoint; +---- +stmt 0 ok +==== 1.7 + + WITH s(i) AS ( + VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<100 + ) + INSERT INTO t1 SELECT NULL, randomblob(5000), randomblob(i) FROM s; + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 145 no such table: t1 +stmt 145 err 1 -1 172 no such table: t1 +==== 1.8 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== 1.9 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 diff --git a/parser/testdata/close.metadata.json b/parser/testdata/close.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/close.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/close.test b/parser/testdata/close.test new file mode 100644 index 0000000..3e2a159 --- /dev/null +++ b/parser/testdata/close.test @@ -0,0 +1,11 @@ +==== 1.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('one'); + INSERT INTO t1 VALUES('two'); + INSERT INTO t1 VALUES('three'); +---- +stmt 0 ok +stmt 22 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 120 no such table: t1 diff --git a/parser/testdata/closure01.metadata.json b/parser/testdata/closure01.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/closure01.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/closure01.test b/parser/testdata/closure01.test new file mode 100644 index 0000000..ab2ef34 --- /dev/null +++ b/parser/testdata/closure01.test @@ -0,0 +1,187 @@ +==== 1.0 + + BEGIN; + CREATE TABLE t1(x INTEGER PRIMARY KEY, y INTEGER); + WITH RECURSIVE + cnt(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM cnt LIMIT 131072) + INSERT INTO t1(x, y) SELECT i, nullif(i,1)/2 FROM cnt; + CREATE INDEX t1y ON t1(y); + COMMIT; + CREATE VIRTUAL TABLE cx + USING transitive_closure(tablename=t1, idcolumn=x, parentcolumn=y); +---- +stmt 0 ok +stmt 9 ok +stmt 62 err 1 -1 205 no such table: t1 +stmt 205 err 1 -1 234 no such table: main.t1 +stmt 234 ok +stmt 244 ok +==== 1.4 + + SELECT id, depth, root, tablename, idcolumn, parentcolumn FROM cx + WHERE root=16384 + AND depth=1 + ORDER BY id; +---- +stmt 0 err 1 -1 121 no such table: cx +==== 1.7 + + SELECT count(*), depth FROM cx WHERE root=1 AND depth<=5 + GROUP BY depth ORDER BY 1; +---- +stmt 0 err 1 -1 89 no such table: cx +==== 1.8 + + SELECT count(*), depth FROM cx WHERE root=1 AND depth=5 + GROUP BY depth ORDER BY 1; +---- +stmt 0 err 1 -1 88 no such table: cx +==== 1.9 + + SELECT count(*), depth FROM cx WHERE root=1 AND depth BETWEEN 3 AND 5 + GROUP BY depth ORDER BY 1; +---- +stmt 0 err 1 -1 102 no such table: cx +==== 2.1 + + SELECT count(*), min(id), max(id) FROM c2 WHERE root=1; +---- +stmt 0 err 1 -1 58 no such table: c2 +==== 2.2 + + SELECT id FROM c2 WHERE root=10; +---- +stmt 0 err 1 -1 35 no such table: c2 +==== 2.3 + + SELECT id FROM c2 WHERE root=12; +---- +stmt 0 err 1 -1 35 no such table: c2 +==== 2.4 + + SELECT id FROM c2 WHERE root IN (10,12) ORDER BY id; +---- +stmt 0 err 1 -1 55 no such table: c2 +==== 2.5 + + SELECT id FROM c2 WHERE root IN (10,12) ORDER BY +id; +---- +stmt 0 err 1 -1 56 no such table: c2 +==== 3.0 + + CREATE VIRTUAL TABLE c2up USING transitive_closure( + tablename = t2, + idcolumn = y, + parentcolumn = x + ); + SELECT id FROM c2up WHERE root=20; +---- +stmt 0 ok +stmt 118 err 1 -1 155 no such table: c2up +==== 3.1 + + SELECT id FROM cx + WHERE root=20 + AND tablename='t2' + AND idcolumn='y' + AND parentcolumn='x'; +---- +stmt 0 err 1 -1 110 no such table: cx +==== 3.2 + + SELECT DISTINCT id FROM c2 + WHERE root IN (SELECT id FROM c2up + WHERE root=20 AND depth<=2) + ORDER BY id; +---- +stmt 0 err 1 -1 130 no such table: c2 +==== 3.3 + + SELECT id FROM c2 + WHERE root=(SELECT id FROM c2up + WHERE root=20 AND depth=2) + AND depth=2 + EXCEPT + SELECT id FROM c2 + WHERE root=(SELECT id FROM c2up + WHERE root=20 AND depth=1) + AND depth<=1 + ORDER BY id; +---- +stmt 0 err 1 -1 254 no such table: c2 +==== 4.1 + + SELECT id FROM cx + WHERE root=20 + AND tablename='t3' + AND idcolumn='y' + AND parentcolumn='x'; +---- +stmt 0 err 1 -1 120 no such table: cx +==== 4.2 + + SELECT id FROM cx + WHERE root=20 + AND tablename='t2' + AND idcolumn='xyz' + AND parentcolumn='x'; +---- +stmt 0 err 1 -1 122 no such table: cx +==== 4.3 + + SELECT id FROM cx + WHERE root=20 + AND tablename='t2' + AND idcolumn='x' + AND parentcolumn='pqr'; +---- +stmt 0 err 1 -1 122 no such table: cx +==== 5.1 + + CREATE VIRTUAL TABLE temp.closure USING transitive_closure; + SELECT id FROM closure + WHERE root=1 + AND depth=3 + AND tablename='t1' + AND idcolumn='x' + AND parentcolumn='y' + ORDER BY id; +---- +stmt 0 ok +stmt 62 err 1 -1 207 no such table: closure +==== 6.0 + + CREATE TABLE t4 ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + parent_id INTEGER + ); + CREATE VIRTUAL TABLE vt4 USING transitive_closure ( + idcolumn=id, parentcolumn=parent_id, tablename=t4 + ); +---- +stmt 0 ok +stmt 100 ok +==== 6.1 + + SELECT * FROM t4, vt4 WHERE t4.id = vt4.root AND vt4.id=4 AND vt4.depth=2; +---- +stmt 0 err 1 -1 77 no such table: t4 +==== 7.1 + + CREATE TABLE t(p, abcx); + INSERT INTO t VALUES(1, 2); +---- +stmt 0 ok +stmt 27 err 1 -1 57 no such table: t +==== 7.2 + + CREATE VIRTUAL TABLE c + USING transitive_closure(idcolumn='abc'x, tablename='t', parentcolumn='p'); +---- +stmt 0 ok +==== 7.3 + + SELECT * FROM c WHERE root=1; +---- +stmt 0 err 1 -1 32 no such table: c diff --git a/parser/testdata/collate1.metadata.json b/parser/testdata/collate1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collate1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collate1.test b/parser/testdata/collate1.test new file mode 100644 index 0000000..59f09a5 --- /dev/null +++ b/parser/testdata/collate1.test @@ -0,0 +1,393 @@ +==== collate1-1.0 + + CREATE TABLE collate1t1(c1, c2); + INSERT INTO collate1t1 VALUES(45, hex(45)); + INSERT INTO collate1t1 VALUES(NULL, NULL); + INSERT INTO collate1t1 VALUES(281, hex(281)); +---- +stmt 0 ok +stmt 37 err 1 -1 85 no such table: collate1t1 +stmt 85 err 1 -1 132 no such table: collate1t1 +stmt 132 err 1 -1 182 no such table: collate1t1 +==== collate1-1.1 + + SELECT c2 FROM collate1t1 ORDER BY 1; +---- +stmt 0 err 1 -1 42 no such table: collate1t1 +==== collate1-1.2 + + SELECT c2 FROM collate1t1 ORDER BY 1 COLLATE hex; +---- +stmt 0 err 1 -1 54 no such table: collate1t1 +==== collate1-1.3 + + SELECT c2 FROM collate1t1 ORDER BY 1 COLLATE hex DESC; +---- +stmt 0 err 1 -1 59 no such table: collate1t1 +==== collate1-1.4 + + SELECT c2 FROM collate1t1 ORDER BY 1 COLLATE hex ASC; +---- +stmt 0 err 1 -1 57 no such table: collate1t1 +==== collate1-1.5 + + SELECT c2 COLLATE hex FROM collate1t1 ORDER BY 1 +---- +stmt 0 err 1 -1 54 no such table: collate1t1 +==== collate1-1.6 + + SELECT c2 COLLATE hex FROM collate1t1 ORDER BY 1 ASC +---- +stmt 0 err 1 -1 58 no such table: collate1t1 +==== collate1-1.7 + + SELECT c2 COLLATE hex FROM collate1t1 ORDER BY 1 DESC +---- +stmt 0 err 1 -1 59 no such table: collate1t1 +==== collate1-1.99 + + DROP TABLE collate1t1; +---- +stmt 0 err 1 -1 27 no such table: collate1t1 +==== collate1-2.0 + + CREATE TABLE collate1t1(c1, c2); + INSERT INTO collate1t1 VALUES('5', '0x11'); + INSERT INTO collate1t1 VALUES('5', '0xA'); + INSERT INTO collate1t1 VALUES(NULL, NULL); + INSERT INTO collate1t1 VALUES('7', '0xA'); + INSERT INTO collate1t1 VALUES('11', '0x11'); + INSERT INTO collate1t1 VALUES('11', '0x101'); +---- +stmt 0 ok +stmt 37 err 1 -1 85 no such table: collate1t1 +stmt 85 err 1 -1 132 no such table: collate1t1 +stmt 132 err 1 -1 179 no such table: collate1t1 +stmt 179 err 1 -1 226 no such table: collate1t1 +stmt 226 err 1 -1 275 no such table: collate1t1 +stmt 275 err 1 -1 325 no such table: collate1t1 +==== collate1-2.2 + + SELECT c1, c2 FROM collate1t1 ORDER BY 1 COLLATE numeric, 2 COLLATE hex; +---- +stmt 0 err 1 -1 77 no such table: collate1t1 +==== collate1-2.3 + + SELECT c1, c2 FROM collate1t1 ORDER BY 1 COLLATE binary, 2 COLLATE hex; +---- +stmt 0 err 1 -1 76 no such table: collate1t1 +==== collate1-2.4 + + SELECT c1, c2 FROM collate1t1 ORDER BY 1 COLLATE binary DESC, 2 COLLATE hex; +---- +stmt 0 err 1 -1 81 no such table: collate1t1 +==== collate1-2.5 + + SELECT c1, c2 FROM collate1t1 + ORDER BY 1 COLLATE binary DESC, 2 COLLATE hex DESC; +---- +stmt 0 err 1 -1 95 no such table: collate1t1 +==== collate1-2.6 + + SELECT c1, c2 FROM collate1t1 + ORDER BY 1 COLLATE binary ASC, 2 COLLATE hex ASC; +---- +stmt 0 err 1 -1 93 no such table: collate1t1 +==== collate1-2.12.1 + + SELECT c1 COLLATE numeric, c2 FROM collate1t1 + ORDER BY 1, 2 COLLATE hex; +---- +stmt 0 err 1 -1 83 no such table: collate1t1 +==== collate1-2.12.2 + + SELECT c1 COLLATE hex, c2 FROM collate1t1 + ORDER BY 1 COLLATE numeric, 2 COLLATE hex; +---- +stmt 0 err 1 -1 95 no such table: collate1t1 +==== collate1-2.12.3 + + SELECT c1, c2 COLLATE hex FROM collate1t1 + ORDER BY 1 COLLATE numeric, 2; +---- +stmt 0 err 1 -1 83 no such table: collate1t1 +==== collate1-2.12.4 + + SELECT c1 COLLATE numeric, c2 COLLATE hex + FROM collate1t1 + ORDER BY 1, 2; +---- +stmt 0 err 1 -1 89 no such table: collate1t1 +==== collate1-2.13 + + SELECT c1 COLLATE binary, c2 COLLATE hex + FROM collate1t1 + ORDER BY 1, 2; +---- +stmt 0 err 1 -1 87 no such table: collate1t1 +==== collate1-2.14 + + SELECT c1, c2 + FROM collate1t1 ORDER BY 1 COLLATE binary DESC, 2 COLLATE hex; +---- +stmt 0 err 1 -1 87 no such table: collate1t1 +==== collate1-2.15 + + SELECT c1 COLLATE binary, c2 COLLATE hex + FROM collate1t1 + ORDER BY 1 DESC, 2 DESC; +---- +stmt 0 err 1 -1 98 no such table: collate1t1 +==== collate1-2.16 + + SELECT c1 COLLATE hex, c2 COLLATE binary + FROM collate1t1 + ORDER BY 1 COLLATE binary ASC, 2 COLLATE hex ASC; +---- +stmt 0 err 1 -1 123 no such table: collate1t1 +==== collate1-2.99 + + DROP TABLE collate1t1; +---- +stmt 0 err 1 -1 27 no such table: collate1t1 +==== collate1-3.0 + + CREATE TABLE collate1t1(a COLLATE hex, b); + INSERT INTO collate1t1 VALUES( '0x5', 5 ); + INSERT INTO collate1t1 VALUES( '1', 1 ); + INSERT INTO collate1t1 VALUES( '0x45', 69 ); + INSERT INTO collate1t1 VALUES( NULL, NULL ); + SELECT * FROM collate1t1 ORDER BY a; +---- +stmt 0 err 1 -1 43 no such collation sequence: hex +stmt 47 err 1 -1 94 no such table: collate1t1 +stmt 94 err 1 -1 139 no such table: collate1t1 +stmt 139 err 1 -1 188 no such table: collate1t1 +stmt 188 err 1 -1 237 no such table: collate1t1 +stmt 237 err 1 -1 278 no such table: collate1t1 +==== collate1-3.1 + + SELECT * FROM collate1t1 ORDER BY 1; +---- +stmt 0 err 1 -1 41 no such table: collate1t1 +==== collate1-3.2 + + SELECT * FROM collate1t1 ORDER BY collate1t1.a; +---- +stmt 0 err 1 -1 52 no such table: collate1t1 +==== collate1-3.3 + + SELECT * FROM collate1t1 ORDER BY main.collate1t1.a; +---- +stmt 0 err 1 -1 57 no such table: collate1t1 +==== collate1-3.4 + + SELECT a as c1, b as c2 FROM collate1t1 ORDER BY c1; +---- +stmt 0 err 1 -1 57 no such table: collate1t1 +==== collate1-3.5 + + SELECT a as c1, b as c2 FROM collate1t1 ORDER BY c1 COLLATE binary; +---- +stmt 0 err 1 -1 72 no such table: collate1t1 +==== collate1-3.5.1 + + SELECT a COLLATE binary as c1, b as c2 + FROM collate1t1 ORDER BY c1; +---- +stmt 0 err 1 -1 78 no such table: collate1t1 +==== collate1-3.6 + + DROP TABLE collate1t1; +---- +stmt 0 err 1 -1 27 no such table: collate1t1 +==== collate1-4.0 + + CREATE TABLE collate1t1(c1 numeric, c2 text); + INSERT INTO collate1t1 VALUES(1, 1); + INSERT INTO collate1t1 VALUES(12, 12); + INSERT INTO collate1t1 VALUES(NULL, NULL); + INSERT INTO collate1t1 VALUES(101, 101); +---- +stmt 0 ok +stmt 50 err 1 -1 91 no such table: collate1t1 +stmt 91 err 1 -1 134 no such table: collate1t1 +stmt 134 err 1 -1 181 no such table: collate1t1 +stmt 181 err 1 -1 226 no such table: collate1t1 +==== collate1-4.1 + + SELECT c1 FROM collate1t1 ORDER BY 1; +---- +stmt 0 err 1 -1 42 no such table: collate1t1 +==== collate1-4.2 + + SELECT c2 FROM collate1t1 ORDER BY 1; +---- +stmt 0 err 1 -1 42 no such table: collate1t1 +==== collate1-4.3 + + SELECT c2+0 FROM collate1t1 ORDER BY 1; +---- +stmt 0 err 1 -1 44 no such table: collate1t1 +==== collate1-4.4 + + SELECT c1||'' FROM collate1t1 ORDER BY 1; +---- +stmt 0 err 1 -1 46 no such table: collate1t1 +==== collate1-4.4.1 + + SELECT (c1||'') COLLATE numeric FROM collate1t1 ORDER BY 1; +---- +stmt 0 err 1 -1 64 no such table: collate1t1 +==== collate1-4.5 + + DROP TABLE collate1t1; +---- +stmt 0 err 1 -1 27 no such table: collate1t1 +==== collate1-5.1 + + CREATE TABLE c5( + id INTEGER PRIMARY KEY, + a TEXT COLLATE binary COLLATE nocase COLLATE rtrim, + b TEXT COLLATE nocase COLLATE binary, + c TEXT COLLATE rtrim COLLATE binary COLLATE rtrim COLLATE nocase + ); + INSERT INTO c5 VALUES(1, 'abc','abc','abc'); + INSERT INTO c5 VALUES(2, 'abc ','ABC','ABC'); + SELECT id FROM c5 WHERE a='abc' ORDER BY id; +---- +stmt 0 ok +stmt 231 err 1 -1 280 no such table: c5 +stmt 280 err 1 -1 332 no such table: c5 +stmt 332 err 1 -1 381 no such table: c5 +==== collate1-5.2 + + SELECT id FROM c5 WHERE b='abc' ORDER BY id; +---- +stmt 0 err 1 -1 49 no such table: c5 +==== collate1-5.3 + + SELECT id FROM c5 WHERE c='abc' ORDER BY id; +---- +stmt 0 err 1 -1 49 no such table: c5 +==== 6.1 + + SELECT """"""""; +---- +stmt 0 ok +==== 6.2 + + CREATE TABLE x1(a); + SELECT a FROM x1 ORDER BY a COLLATE """"""""; +---- +stmt 0 ok +stmt 22 err 1 -1 70 no such table: x1 +==== 6.3 + + SELECT a FROM x1 ORDER BY 1 COLLATE """"""""; +---- +stmt 0 err 1 -1 48 no such table: x1 +==== 6.4 + + SELECT 0 UNION SELECT 0 ORDER BY 1 COLLATE """"""""; +---- +stmt 0 err 1 -1 55 no such collation sequence: """ +==== 6.5 + + PRAGMA foreign_keys = ON; + CREATE TABLE p1(a PRIMARY KEY COLLATE '"""'); + CREATE TABLE c1(x, y REFERENCES p1); +---- +stmt 0 ok +stmt 28 err 1 -1 75 no such collation sequence: """ +stmt 76 ok +==== 6.6 + + INSERT INTO p1 VALUES('abc'); + INSERT INTO c1 VALUES(1, 'ABC'); +---- +stmt 0 err 1 -1 33 no such table: p1 +stmt 33 err 1 -1 69 no such table: c1 +==== 6.7 + + DELETE FROM p1 WHERE rowid = 1 +---- +stmt 0 err 1 -1 37 no such table: p1 +==== 6.8 + + INSERT INTO p1 VALUES('abb'); + INSERT INTO p1 VALUES('wxz'); + INSERT INTO p1 VALUES('wxy'); + + INSERT INTO c1 VALUES(2, 'abb'); + INSERT INTO c1 VALUES(3, 'wxz'); + INSERT INTO c1 VALUES(4, 'WXY'); + SELECT x, y FROM c1 ORDER BY y COLLATE """"""""; +---- +stmt 0 err 1 -1 33 no such table: p1 +stmt 33 err 1 -1 65 no such table: p1 +stmt 65 err 1 -1 97 no such table: p1 +stmt 97 err 1 -1 133 no such table: c1 +stmt 133 err 1 -1 168 no such table: c1 +stmt 168 err 1 -1 203 no such table: c1 +stmt 203 err 1 -1 254 no such table: c1 +==== 7.0 + + SELECT 'abc' UNION ALL SELECT 'DEF' + ORDER BY 1 COLLATE nocase COLLATE nocase COLLATE nocase COLLATE nocase; +---- +stmt 0 ok +==== 7.1 + + SELECT 'abc' UNION ALL SELECT 'DEF' + ORDER BY 1 COLLATE nocase COLLATE nocase COLLATE nocase COLLATE binary; +---- +stmt 0 ok +==== 7.2 + + SELECT 'abc' UNION ALL SELECT 'DEF' + ORDER BY 1 COLLATE binary COLLATE binary COLLATE binary COLLATE nocase; +---- +stmt 0 ok +==== 8.0 + + SELECT ' ' > char(20) COLLATE rtrim; +---- +stmt 0 ok +==== 8.1 + + SELECT '' < char(20) COLLATE rtrim; +---- +stmt 0 ok +==== 8.2 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 COLLATE RTRIM, c1 BLOB UNIQUE, + PRIMARY KEY (c0, c1)) WITHOUT ROWID; + INSERT INTO t0 VALUES (123, 3), (' ', 1), (' ', 2), ('', 4); + SELECT * FROM t0 WHERE c1 = 1; +---- +stmt 0 ok +stmt 27 ok +stmt 134 err 1 -1 197 no such table: t0 +stmt 197 err 1 -1 230 no such table: t0 +==== 9.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); +---- +stmt 0 ok +stmt 25 ok +==== 10.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY,b); + INSERT INTO t1 VALUES(0,NULL); + CREATE TABLE t2(x UNIQUE); + CREATE VIEW v1a(z,y) AS SELECT x COLLATE x FROM t2; + SELECT a,b,z,y,'' FROM t1 JOIN v1a ON b IS NOT FALSE; +---- +stmt 0 ok +stmt 44 err 1 -1 77 no such table: t1 +stmt 77 ok +stmt 106 ok +stmt 160 err 1 -1 216 no such table: t1 diff --git a/parser/testdata/collate2.metadata.json b/parser/testdata/collate2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collate2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collate2.test b/parser/testdata/collate2.test new file mode 100644 index 0000000..5cb5637 --- /dev/null +++ b/parser/testdata/collate2.test @@ -0,0 +1,632 @@ +==== collate2-1.1 + + SELECT a FROM collate2t1 WHERE a > 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: collate2t1 +==== collate2-1.1.1 + + SELECT a FROM collate2t1 WHERE a COLLATE binary > 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 71 no such table: collate2t1 +==== collate2-1.1.2 + + SELECT a FROM collate2t1 WHERE b COLLATE binary > 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 71 no such table: collate2t1 +==== collate2-1.1.3 + + SELECT a FROM collate2t1 WHERE c COLLATE binary > 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 71 no such table: collate2t1 +==== collate2-1.2 + + SELECT b FROM collate2t1 WHERE b > 'aa' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 61 no such table: collate2t1 +==== collate2-1.2.1 + + SELECT b FROM collate2t1 WHERE a COLLATE nocase > 'aa' + ORDER BY 1, oid; +---- +stmt 0 err 1 -1 81 no such table: collate2t1 +==== collate2-1.2.2 + + SELECT b FROM collate2t1 WHERE b COLLATE nocase > 'aa' + ORDER BY 1, oid; +---- +stmt 0 err 1 -1 81 no such table: collate2t1 +==== collate2-1.2.3 + + SELECT b FROM collate2t1 WHERE c COLLATE nocase > 'aa' + ORDER BY 1, oid; +---- +stmt 0 err 1 -1 81 no such table: collate2t1 +==== collate2-1.2.4 + + SELECT b FROM collate2t1 WHERE b > 'aa' ORDER BY +b; +---- +stmt 0 err 1 -1 57 no such table: collate2t1 +==== collate2-1.2.5 + + SELECT b FROM collate2t1 WHERE a COLLATE nocase > 'aa' ORDER BY +b; +---- +stmt 0 err 1 -1 72 no such table: collate2t1 +==== collate2-1.2.6 + + SELECT b FROM collate2t1 WHERE b COLLATE nocase > 'aa' ORDER BY +b; +---- +stmt 0 err 1 -1 72 no such table: collate2t1 +==== collate2-1.2.7 + + SELECT b FROM collate2t1 WHERE c COLLATE nocase > 'aa' ORDER BY +b; +---- +stmt 0 err 1 -1 72 no such table: collate2t1 +==== collate2-1.3 + + SELECT c FROM collate2t1 WHERE c > 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: collate2t1 +==== collate2-1.3.1 + + SELECT c FROM collate2t1 WHERE a COLLATE backwards > 'aa' + ORDER BY 1; +---- +stmt 0 err 1 -1 78 no such table: collate2t1 +==== collate2-1.3.2 + + SELECT c FROM collate2t1 WHERE b COLLATE backwards > 'aa' + ORDER BY 1; +---- +stmt 0 err 1 -1 78 no such table: collate2t1 +==== collate2-1.3.3 + + SELECT c FROM collate2t1 WHERE c COLLATE backwards > 'aa' + ORDER BY 1; +---- +stmt 0 err 1 -1 78 no such table: collate2t1 +==== collate2-1.4 + + SELECT a FROM collate2t1 WHERE a < 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: collate2t1 +==== collate2-1.5 + + SELECT b FROM collate2t1 WHERE b < 'aa' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 61 no such table: collate2t1 +==== collate2-1.5.1 + + SELECT b FROM collate2t1 WHERE b < 'aa' ORDER BY +b; +---- +stmt 0 err 1 -1 57 no such table: collate2t1 +==== collate2-1.6 + + SELECT c FROM collate2t1 WHERE c < 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: collate2t1 +==== collate2-1.7 + + SELECT a FROM collate2t1 WHERE a = 'aa'; +---- +stmt 0 err 1 -1 45 no such table: collate2t1 +==== collate2-1.8 + + SELECT b FROM collate2t1 WHERE b = 'aa' ORDER BY oid; +---- +stmt 0 err 1 -1 58 no such table: collate2t1 +==== collate2-1.9 + + SELECT c FROM collate2t1 WHERE c = 'aa'; +---- +stmt 0 err 1 -1 45 no such table: collate2t1 +==== collate2-1.10 + + SELECT a FROM collate2t1 WHERE a >= 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 57 no such table: collate2t1 +==== collate2-1.11 + + SELECT b FROM collate2t1 WHERE b >= 'aa' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 62 no such table: collate2t1 +==== collate2-1.12 + + SELECT c FROM collate2t1 WHERE c >= 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 57 no such table: collate2t1 +==== collate2-1.13 + + SELECT a FROM collate2t1 WHERE a <= 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 57 no such table: collate2t1 +==== collate2-1.14 + + SELECT b FROM collate2t1 WHERE b <= 'aa' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 62 no such table: collate2t1 +==== collate2-1.15 + + SELECT c FROM collate2t1 WHERE c <= 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 57 no such table: collate2t1 +==== collate2-1.16 + + SELECT a FROM collate2t1 WHERE a BETWEEN 'Aa' AND 'Bb' ORDER BY 1; +---- +stmt 0 err 1 -1 71 no such table: collate2t1 +==== collate2-1.17 + + SELECT b FROM collate2t1 WHERE b BETWEEN 'Aa' AND 'Bb' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 76 no such table: collate2t1 +==== collate2-1.17.1 + + SELECT b FROM collate2t1 WHERE b BETWEEN 'Aa' AND 'Bb' ORDER BY +b; +---- +stmt 0 err 1 -1 72 no such table: collate2t1 +==== collate2-1.18 + + SELECT c FROM collate2t1 WHERE c BETWEEN 'Aa' AND 'Bb' ORDER BY 1; +---- +stmt 0 err 1 -1 71 no such table: collate2t1 +==== collate2-1.19 + + SELECT a FROM collate2t1 WHERE + CASE a WHEN 'aa' THEN 1 ELSE 0 END + ORDER BY 1, oid; +---- +stmt 0 err 1 -1 102 no such table: collate2t1 +==== collate2-1.20 + + SELECT b FROM collate2t1 WHERE + CASE b WHEN 'aa' THEN 1 ELSE 0 END + ORDER BY 1, oid; +---- +stmt 0 err 1 -1 102 no such table: collate2t1 +==== collate2-1.21 + + SELECT c FROM collate2t1 WHERE + CASE c WHEN 'aa' THEN 1 ELSE 0 END + ORDER BY 1, oid; +---- +stmt 0 err 1 -1 102 no such table: collate2t1 +==== collate2-1.22 + + SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb') ORDER BY 1, oid; +---- +stmt 0 err 1 -1 72 no such table: collate2t1 +==== collate2-1.23 + + SELECT b FROM collate2t1 WHERE b IN ('aa', 'bb') ORDER BY 1, oid; +---- +stmt 0 err 1 -1 72 no such table: collate2t1 +==== collate2-1.24 + + SELECT c FROM collate2t1 WHERE c IN ('aa', 'bb') ORDER BY 1, oid; +---- +stmt 0 err 1 -1 72 no such table: collate2t1 +==== collate2-1.25 + + SELECT a FROM collate2t1 + WHERE a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); +---- +stmt 0 err 1 -1 103 no such table: collate2t1 +==== collate2-1.26 + + SELECT b FROM collate2t1 + WHERE b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); +---- +stmt 0 err 1 -1 103 no such table: collate2t1 +==== collate2-1.27 + + SELECT c FROM collate2t1 + WHERE c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); +---- +stmt 0 err 1 -1 103 no such table: collate2t1 +==== collate2-2.1 + + SELECT a FROM collate2t1 WHERE NOT a > 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 60 no such table: collate2t1 +==== collate2-2.2 + + SELECT b FROM collate2t1 WHERE NOT b > 'aa' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 65 no such table: collate2t1 +==== collate2-2.3 + + SELECT c FROM collate2t1 WHERE NOT c > 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 60 no such table: collate2t1 +==== collate2-2.4 + + SELECT a FROM collate2t1 WHERE NOT a < 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 60 no such table: collate2t1 +==== collate2-2.5 + + SELECT b FROM collate2t1 WHERE NOT b < 'aa' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 65 no such table: collate2t1 +==== collate2-2.6 + + SELECT c FROM collate2t1 WHERE NOT c < 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 60 no such table: collate2t1 +==== collate2-2.7 + + SELECT a FROM collate2t1 WHERE NOT a = 'aa'; +---- +stmt 0 err 1 -1 49 no such table: collate2t1 +==== collate2-2.8 + + SELECT b FROM collate2t1 WHERE NOT b = 'aa'; +---- +stmt 0 err 1 -1 49 no such table: collate2t1 +==== collate2-2.9 + + SELECT c FROM collate2t1 WHERE NOT c = 'aa'; +---- +stmt 0 err 1 -1 49 no such table: collate2t1 +==== collate2-2.10 + + SELECT a FROM collate2t1 WHERE NOT a >= 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 61 no such table: collate2t1 +==== collate2-2.11 + + SELECT b FROM collate2t1 WHERE NOT b >= 'aa' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 66 no such table: collate2t1 +==== collate2-2.12 + + SELECT c FROM collate2t1 WHERE NOT c >= 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 61 no such table: collate2t1 +==== collate2-2.13 + + SELECT a FROM collate2t1 WHERE NOT a <= 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 61 no such table: collate2t1 +==== collate2-2.14 + + SELECT b FROM collate2t1 WHERE NOT b <= 'aa' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 66 no such table: collate2t1 +==== collate2-2.15 + + SELECT c FROM collate2t1 WHERE NOT c <= 'aa' ORDER BY 1; +---- +stmt 0 err 1 -1 61 no such table: collate2t1 +==== collate2-2.16 + + SELECT a FROM collate2t1 WHERE a NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1; +---- +stmt 0 err 1 -1 75 no such table: collate2t1 +==== collate2-2.17 + + SELECT b FROM collate2t1 WHERE b NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1, oid; +---- +stmt 0 err 1 -1 80 no such table: collate2t1 +==== collate2-2.18 + + SELECT c FROM collate2t1 WHERE c NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1; +---- +stmt 0 err 1 -1 75 no such table: collate2t1 +==== collate2-2.19 + + SELECT a FROM collate2t1 WHERE NOT CASE a WHEN 'aa' THEN 1 ELSE 0 END; +---- +stmt 0 err 1 -1 75 no such table: collate2t1 +==== collate2-2.20 + + SELECT b FROM collate2t1 WHERE NOT CASE b WHEN 'aa' THEN 1 ELSE 0 END; +---- +stmt 0 err 1 -1 75 no such table: collate2t1 +==== collate2-2.21 + + SELECT c FROM collate2t1 WHERE NOT CASE c WHEN 'aa' THEN 1 ELSE 0 END; +---- +stmt 0 err 1 -1 75 no such table: collate2t1 +==== collate2-2.22 + + SELECT a FROM collate2t1 WHERE NOT a IN ('aa', 'bb'); +---- +stmt 0 err 1 -1 60 no such table: collate2t1 +==== collate2-2.23 + + SELECT b FROM collate2t1 WHERE NOT b IN ('aa', 'bb'); +---- +stmt 0 err 1 -1 60 no such table: collate2t1 +==== collate2-2.24 + + SELECT c FROM collate2t1 WHERE NOT c IN ('aa', 'bb'); +---- +stmt 0 err 1 -1 60 no such table: collate2t1 +==== collate2-2.25 + + SELECT a FROM collate2t1 + WHERE NOT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); +---- +stmt 0 err 1 -1 107 no such table: collate2t1 +==== collate2-2.26 + + SELECT b FROM collate2t1 + WHERE NOT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); +---- +stmt 0 err 1 -1 107 no such table: collate2t1 +==== collate2-2.27 + + SELECT c FROM collate2t1 + WHERE NOT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); +---- +stmt 0 err 1 -1 107 no such table: collate2t1 +==== collate2-3.1 + + SELECT a > 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 37 no such table: collate2t1 +==== collate2-3.2 + + SELECT b > 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 37 no such table: collate2t1 +==== collate2-3.3 + + SELECT c > 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 37 no such table: collate2t1 +==== collate2-3.4 + + SELECT a < 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 37 no such table: collate2t1 +==== collate2-3.5 + + SELECT b < 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 37 no such table: collate2t1 +==== collate2-3.6 + + SELECT c < 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 37 no such table: collate2t1 +==== collate2-3.7 + + SELECT a = 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 37 no such table: collate2t1 +==== collate2-3.8 + + SELECT b = 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 37 no such table: collate2t1 +==== collate2-3.9 + + SELECT c = 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 37 no such table: collate2t1 +==== collate2-3.10 + + SELECT a <= 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 38 no such table: collate2t1 +==== collate2-3.11 + + SELECT b <= 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 38 no such table: collate2t1 +==== collate2-3.12 + + SELECT c <= 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 38 no such table: collate2t1 +==== collate2-3.13 + + SELECT a >= 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 38 no such table: collate2t1 +==== collate2-3.14 + + SELECT b >= 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 38 no such table: collate2t1 +==== collate2-3.15 + + SELECT c >= 'aa' FROM collate2t1; +---- +stmt 0 err 1 -1 38 no such table: collate2t1 +==== collate2-3.16 + + SELECT a BETWEEN 'Aa' AND 'Bb' FROM collate2t1; +---- +stmt 0 err 1 -1 52 no such table: collate2t1 +==== collate2-3.17 + + SELECT b BETWEEN 'Aa' AND 'Bb' FROM collate2t1; +---- +stmt 0 err 1 -1 52 no such table: collate2t1 +==== collate2-3.18 + + SELECT c BETWEEN 'Aa' AND 'Bb' FROM collate2t1; +---- +stmt 0 err 1 -1 52 no such table: collate2t1 +==== collate2-3.19 + + SELECT CASE a WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1; +---- +stmt 0 err 1 -1 63 no such table: collate2t1 +==== collate2-3.20 + + SELECT CASE b WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1; +---- +stmt 0 err 1 -1 63 no such table: collate2t1 +==== collate2-3.21 + + SELECT CASE c WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1; +---- +stmt 0 err 1 -1 63 no such table: collate2t1 +==== collate2-3.22 + + SELECT a IN ('aa', 'bb') FROM collate2t1; +---- +stmt 0 err 1 -1 48 no such table: collate2t1 +==== collate2-3.23 + + SELECT b IN ('aa', 'bb') FROM collate2t1; +---- +stmt 0 err 1 -1 48 no such table: collate2t1 +==== collate2-3.24 + + SELECT c IN ('aa', 'bb') FROM collate2t1; +---- +stmt 0 err 1 -1 48 no such table: collate2t1 +==== collate2-3.25 + + SELECT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) + FROM collate2t1; +---- +stmt 0 err 1 -1 95 no such table: collate2t1 +==== collate2-3.26 + + SELECT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) + FROM collate2t1; +---- +stmt 0 err 1 -1 95 no such table: collate2t1 +==== collate2-3.27 + + SELECT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) + FROM collate2t1; +---- +stmt 0 err 1 -1 95 no such table: collate2t1 +==== collate2-4.0 + + CREATE TABLE collate2t2(b COLLATE binary); + CREATE TABLE collate2t3(b text); + INSERT INTO collate2t2 VALUES('aa'); + INSERT INTO collate2t3 VALUES('aa'); +---- +stmt 0 ok +stmt 47 ok +stmt 84 err 1 -1 125 no such table: collate2t2 +stmt 125 err 1 -1 166 no such table: collate2t3 +==== collate2-4.1 + + SELECT collate2t1.a FROM collate2t1, collate2t2 + WHERE collate2t1.b = collate2t2.b; +---- +stmt 0 err 1 -1 94 no such table: collate2t1 +==== collate2-4.2 + + SELECT collate2t1.a FROM collate2t1, collate2t2 + WHERE collate2t2.b = collate2t1.b; +---- +stmt 0 err 1 -1 94 no such table: collate2t1 +==== collate2-4.3 + + SELECT collate2t1.a FROM collate2t1, collate2t3 + WHERE collate2t1.b = collate2t3.b||'' + ORDER BY +collate2t1.a DESC; +---- +stmt 0 err 1 -1 132 no such table: collate2t1 +==== collate2-4.4 + + SELECT collate2t1.a FROM collate2t1, collate2t3 + WHERE collate2t3.b||'' = collate2t1.b + ORDER BY +collate2t1.a DESC; +---- +stmt 0 err 1 -1 132 no such table: collate2t1 +==== collate2-4.5 + + DROP TABLE collate2t3; +---- +stmt 0 err 1 -1 27 no such table: collate2t3 +==== collate2-5.0 + + SELECT collate2t1.b FROM collate2t1 JOIN collate2t2 USING (b); +---- +stmt 0 err 1 -1 67 no such table: collate2t1 +==== collate2-5.1 + + SELECT collate2t1.b FROM collate2t2 JOIN collate2t1 USING (b); +---- +stmt 0 err 1 -1 67 no such table: collate2t2 +==== collate2-5.2 + + SELECT collate2t1.b FROM collate2t1 NATURAL JOIN collate2t2; +---- +stmt 0 err 1 -1 65 no such table: collate2t1 +==== collate2-5.3 + + SELECT collate2t1.b FROM collate2t2 NATURAL JOIN collate2t1; +---- +stmt 0 err 1 -1 65 no such table: collate2t2 +==== collate2-5.4.1 + + SELECT collate2t2.b FROM collate2t1 LEFT JOIN collate2t2 USING (b) order by collate2t1.oid; +---- +stmt 0 err 1 -1 96 no such table: collate2t1 +==== collate2-5.4.2 + + SELECT collate2t2.b FROM collate2t2 RIGHT JOIN collate2t1 ON collate2t1.b=collate2t2.b + ORDER BY collate2t1.oid; +---- +stmt 0 err 1 -1 121 no such table: collate2t2 +==== collate2-5.4.3 + + SELECT collate2t2.b FROM collate2t1 LEFT JOIN collate2t2 ON collate2t2.b=collate2t1.b + ORDER BY collate2t1.oid; +---- +stmt 0 err 1 -1 120 no such table: collate2t1 +==== collate2-5.5.1 + + SELECT collate2t1.b, collate2t2.b FROM collate2t2 LEFT OUTER JOIN collate2t1 USING (b); +---- +stmt 0 err 1 -1 92 no such table: collate2t2 +==== collate2-5.5.2 + + SELECT collate2t1.b, collate2t2.b + FROM collate2t1 RIGHT JOIN collate2t2 ON collate2t2.b=collate2t1.b +---- +stmt 0 err 1 -1 112 no such table: collate2t1 +==== 6.1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('b'); + INSERT INTO t1 VALUES('B'); +---- +stmt 0 ok +stmt 22 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 82 no such table: t1 +==== 6.2 + + SELECT * FROM t1 WHERE x COLLATE nocase BETWEEN 'a' AND 'c'; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 6.3 + + SELECT * FROM t1 WHERE x BETWEEN 'a' COLLATE nocase AND 'c' COLLATE nocase; +---- +stmt 0 err 1 -1 78 no such table: t1 +==== 6.4 + + SELECT * FROM t1 + WHERE x COLLATE nocase BETWEEN 'a' COLLATE nocase AND 'c' COLLATE nocase; +---- +stmt 0 err 1 -1 96 no such table: t1 +==== 6.5 + + SELECT * FROM t1 WHERE +x COLLATE nocase BETWEEN 'a' AND 'c'; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== 6.6 + + SELECT * FROM t1 WHERE +x BETWEEN 'a' COLLATE nocase AND 'c' COLLATE nocase; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== 6.7 + + SELECT * FROM t1 + WHERE +x COLLATE nocase BETWEEN 'a' COLLATE nocase AND 'c' COLLATE nocase; +---- +stmt 0 err 1 -1 97 no such table: t1 diff --git a/parser/testdata/collate3.metadata.json b/parser/testdata/collate3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collate3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collate3.test b/parser/testdata/collate3.test new file mode 100644 index 0000000..40a6c72 --- /dev/null +++ b/parser/testdata/collate3.test @@ -0,0 +1,228 @@ +==== collate3-1.0 + + CREATE TABLE collate3t1(c1 UNIQUE); +---- +stmt 0 ok +==== collate3-1.1 + + SELECT * FROM collate3t1 ORDER BY 1 collate garbage; +---- +stmt 0 err 1 -1 57 no such table: collate3t1 +==== collate3-1.1.2 + + SELECT DISTINCT c1 COLLATE garbage FROM collate3t1; +---- +stmt 0 err 1 -1 56 no such table: collate3t1 +==== collate3-1.2 + + CREATE TABLE collate3t2(c1 collate garbage); +---- +stmt 0 err 1 -1 48 no such collation sequence: garbage +==== collate3-1.3 + + CREATE INDEX collate3i1 ON collate3t1(c1 COLLATE garbage); +---- +stmt 0 err 1 -1 63 no such table: main.collate3t1 +==== collate3-1.8 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== collate3-2.1 + + SELECT * FROM collate3t1 ORDER BY 1 COLLATE string_compare; +---- +stmt 0 err 1 -1 64 no such table: collate3t1 +==== collate3-2.2 + + SELECT * FROM collate3t1 ORDER BY c1; +---- +stmt 0 err 1 -1 42 no such table: collate3t1 +==== collate3-2.3 + + SELECT * FROM collate3t1 WHERE c1 = 'xxx'; +---- +stmt 0 err 1 -1 47 no such table: collate3t1 +==== collate3-2.4 + + CREATE TABLE collate3t2(c1 COLLATE string_compare); +---- +stmt 0 err 1 -1 55 no such collation sequence: string_compare +==== collate3-2.5 + + CREATE INDEX collate3t1_i1 ON collate3t1(c1); +---- +stmt 0 err 1 -1 50 no such table: main.collate3t1 +==== collate3-2.6 + + SELECT * FROM collate3t1; +---- +stmt 0 err 1 -1 30 no such table: collate3t1 +==== collate3-2.7.1 + + SELECT count(*) FROM collate3t1 GROUP BY c1; +---- +stmt 0 err 1 -1 49 no such table: collate3t1 +==== collate3-2.7.2 + + SELECT * FROM collate3t1 GROUP BY c1; +---- +stmt 0 err 1 -1 42 no such table: collate3t1 +==== collate3-2.8 + + SELECT DISTINCT c1 FROM collate3t1; +---- +stmt 0 err 1 -1 40 no such table: collate3t1 +==== collate3-2.9 + + SELECT c1 FROM collate3t1 UNION SELECT c1 FROM collate3t1; +---- +stmt 0 err 1 -1 65 no such table: collate3t1 +==== collate3-2.10 + + SELECT c1 FROM collate3t1 EXCEPT SELECT c1 FROM collate3t1; +---- +stmt 0 err 1 -1 66 no such table: collate3t1 +==== collate3-2.11 + + SELECT c1 FROM collate3t1 INTERSECT SELECT c1 FROM collate3t1; +---- +stmt 0 err 1 -1 69 no such table: collate3t1 +==== collate3-2.12 + + SELECT c1 FROM collate3t1 UNION ALL SELECT c1 FROM collate3t1; +---- +stmt 0 err 1 -1 69 no such table: collate3t1 +==== collate3-2.13 + + SELECT 10 UNION ALL SELECT 20 ORDER BY 1 COLLATE string_compare; +---- +stmt 0 err 1 -1 71 no such collation sequence: string_compare +==== collate3-2.14 + + SELECT 10 INTERSECT SELECT 20 ORDER BY 1 COLLATE string_compare; +---- +stmt 0 err 1 -1 71 no such collation sequence: string_compare +==== collate3-2.15 + + SELECT 10 EXCEPT SELECT 20 ORDER BY 1 COLLATE string_compare; +---- +stmt 0 err 1 -1 68 no such collation sequence: string_compare +==== collate3-2.16 + + SELECT 10 UNION SELECT 20 ORDER BY 1 COLLATE string_compare; +---- +stmt 0 err 1 -1 67 no such collation sequence: string_compare +==== collate3-2.17 + + SELECT c1 FROM collate3t1 UNION ALL SELECT c1 FROM collate3t1 ORDER BY 1; +---- +stmt 0 err 1 -1 80 no such table: collate3t1 +==== collate3-3.1 + + INSERT INTO collate3t1 VALUES('xxx', 0); +---- +stmt 0 err 1 -1 45 no such table: collate3t1 +==== collate3-3.2 + + UPDATE collate3t1 SET c1 = 'xxx'; +---- +stmt 0 err 1 -1 38 no such table: collate3t1 +==== collate3-3.3 + + UPDATE collate3t1 SET c2 = 'xxx'; +---- +stmt 0 err 1 -1 38 no such table: collate3t1 +==== collate3-3.4 + + DELETE FROM collate3t1 WHERE 1; +---- +stmt 0 err 1 -1 36 no such table: collate3t1 +==== collate3-3.5 + + SELECT * FROM collate3t1; +---- +stmt 0 err 1 -1 30 no such table: collate3t1 +==== collate3-3.6 + + DELETE FROM collate3t1; +---- +stmt 0 err 1 -1 28 no such table: collate3t1 +==== collate3-3.8 + + PRAGMA integrity_check +---- +stmt 0 ok +==== collate3-3.9 + + SELECT * FROM collate3t1; +---- +stmt 0 err 1 -1 30 no such table: collate3t1 +==== collate3-3.10 + + SELECT * FROM collate3t1 ORDER BY 1 COLLATE string_compare; +---- +stmt 0 err 1 -1 64 no such table: collate3t1 +==== collate3-3.11 + + SELECT * FROM collate3t1 ORDER BY c1; +---- +stmt 0 err 1 -1 42 no such table: collate3t1 +==== collate3-3.12 + + SELECT * FROM collate3t1 WHERE c1 = 'xxx'; +---- +stmt 0 err 1 -1 47 no such table: collate3t1 +==== collate3-3.13 + + CREATE TABLE collate3t2(c1 COLLATE string_compare); +---- +stmt 0 err 1 -1 55 no such collation sequence: string_compare +==== collate3-3.14 + + CREATE INDEX collate3t1_i2 ON collate3t1(c1); +---- +stmt 0 err 1 -1 50 no such table: main.collate3t1 +==== collate3-3.15 + + DROP TABLE collate3t1; +---- +stmt 0 err 1 -1 27 no such table: collate3t1 +==== collate3-4.8.3 + + DROP TABLE collate3t1; +---- +stmt 0 err 1 -1 27 no such table: collate3t1 +==== collate3-4.12 + + DROP TABLE collate3t1; +---- +stmt 0 err 1 -1 27 no such table: collate3t1 +==== collate3-5.0 + + CREATE TABLE collate3t1(a); + INSERT INTO collate3t1 VALUES(10); + SELECT a FROM collate3t1 ORDER BY 1 COLLATE unk; +---- +stmt 0 ok +stmt 32 err 1 -1 71 no such table: collate3t1 +stmt 71 err 1 -1 124 no such table: collate3t1 +==== collate3-5.2 + + SELECT a FROM collate3t1 ORDER BY 1 COLLATE unk; +---- +stmt 0 err 1 -1 53 no such table: collate3t1 +==== collate3-5.4 + + SELECT a FROM collate3t1 ORDER BY 1 COLLATE unk; +---- +stmt 0 err 1 -1 53 no such table: collate3t1 +==== collate3-5.6 + + SELECT a FROM collate3t1 ORDER BY 1 COLLATE unk; +---- +stmt 0 err 1 -1 53 no such table: collate3t1 +==== collate3-5.9 + + DROP TABLE collate3t1; +---- +stmt 0 err 1 -1 27 no such table: collate3t1 diff --git a/parser/testdata/collate4.metadata.json b/parser/testdata/collate4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collate4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collate4.test b/parser/testdata/collate4.test new file mode 100644 index 0000000..bdeab63 --- /dev/null +++ b/parser/testdata/collate4.test @@ -0,0 +1,382 @@ +==== collate4-1.1.0 + + CREATE TABLE collate4t1(a COLLATE NOCASE, b COLLATE TEXT); + INSERT INTO collate4t1 VALUES( 'a', 'a' ); + INSERT INTO collate4t1 VALUES( 'b', 'b' ); + INSERT INTO collate4t1 VALUES( NULL, NULL ); + INSERT INTO collate4t1 VALUES( 'B', 'B' ); + INSERT INTO collate4t1 VALUES( 'A', 'A' ); + CREATE INDEX collate4i1 ON collate4t1(a); + CREATE INDEX collate4i2 ON collate4t1(b); +---- +stmt 0 err 1 -1 62 no such collation sequence: TEXT +stmt 63 err 1 -1 110 no such table: collate4t1 +stmt 110 err 1 -1 157 no such table: collate4t1 +stmt 157 err 1 -1 206 no such table: collate4t1 +stmt 206 err 1 -1 253 no such table: collate4t1 +stmt 253 err 1 -1 300 no such table: collate4t1 +stmt 300 err 1 -1 346 no such table: main.collate4t1 +stmt 346 err 1 -1 392 no such table: main.collate4t1 +==== collate4-1.1.7 + + CREATE TABLE collate4t2( + a PRIMARY KEY COLLATE NOCASE, + b UNIQUE COLLATE TEXT + ); + INSERT INTO collate4t2 VALUES( 'a', 'a' ); + INSERT INTO collate4t2 VALUES( NULL, NULL ); + INSERT INTO collate4t2 VALUES( 'B', 'B' ); +---- +stmt 0 err 1 -1 100 no such collation sequence: TEXT +stmt 101 err 1 -1 148 no such table: collate4t2 +stmt 148 err 1 -1 197 no such table: collate4t2 +stmt 197 err 1 -1 244 no such table: collate4t2 +==== collate4-1.1.14 + + CREATE TABLE collate4t3( + b COLLATE TEXT, + a COLLATE NOCASE, + UNIQUE(a), PRIMARY KEY(b) + ); + INSERT INTO collate4t3 VALUES( 'a', 'a' ); + INSERT INTO collate4t3 VALUES( NULL, NULL ); + INSERT INTO collate4t3 VALUES( 'B', 'B' ); +---- +stmt 0 err 1 -1 51 no such collation sequence: TEXT +stmt 117 err 1 -1 164 no such table: collate4t3 +stmt 164 err 1 -1 213 no such table: collate4t3 +stmt 213 err 1 -1 260 no such table: collate4t3 +==== collate4-1.1.21 + + CREATE TABLE collate4t4(a COLLATE NOCASE, b COLLATE TEXT); + INSERT INTO collate4t4 VALUES( 'a', 'a' ); + INSERT INTO collate4t4 VALUES( 'b', 'b' ); + INSERT INTO collate4t4 VALUES( NULL, NULL ); + INSERT INTO collate4t4 VALUES( 'B', 'B' ); + INSERT INTO collate4t4 VALUES( 'A', 'A' ); + CREATE INDEX collate4i3 ON collate4t4(a COLLATE TEXT); + CREATE INDEX collate4i4 ON collate4t4(b COLLATE NOCASE); +---- +stmt 0 err 1 -1 62 no such collation sequence: TEXT +stmt 63 err 1 -1 110 no such table: collate4t4 +stmt 110 err 1 -1 157 no such table: collate4t4 +stmt 157 err 1 -1 206 no such table: collate4t4 +stmt 206 err 1 -1 253 no such table: collate4t4 +stmt 253 err 1 -1 300 no such table: collate4t4 +stmt 300 err 1 -1 359 no such table: main.collate4t4 +stmt 359 err 1 -1 420 no such table: main.collate4t4 +==== collate4-1.1.30 + + DROP TABLE collate4t1; + DROP TABLE collate4t2; + DROP TABLE collate4t3; + DROP TABLE collate4t4; +---- +stmt 0 err 1 -1 27 no such table: collate4t1 +stmt 27 err 1 -1 54 no such table: collate4t2 +stmt 54 err 1 -1 81 no such table: collate4t3 +stmt 81 err 1 -1 108 no such table: collate4t4 +==== collate4-1.2.0 + + CREATE TABLE collate4t1(a COLLATE NOCASE, b COLLATE TEXT); + INSERT INTO collate4t1 VALUES( 'a', 'a' ); + INSERT INTO collate4t1 VALUES( 'b', 'b' ); + INSERT INTO collate4t1 VALUES( NULL, NULL ); + INSERT INTO collate4t1 VALUES( 'B', 'B' ); + INSERT INTO collate4t1 VALUES( 'A', 'A' ); + CREATE INDEX collate4i1 ON collate4t1(a, b); +---- +stmt 0 err 1 -1 62 no such collation sequence: TEXT +stmt 63 err 1 -1 110 no such table: collate4t1 +stmt 110 err 1 -1 157 no such table: collate4t1 +stmt 157 err 1 -1 206 no such table: collate4t1 +stmt 206 err 1 -1 253 no such table: collate4t1 +stmt 253 err 1 -1 300 no such table: collate4t1 +stmt 300 err 1 -1 349 no such table: main.collate4t1 +==== collate4-1.2.7 + + CREATE TABLE collate4t2( + a COLLATE NOCASE, + b COLLATE TEXT, + PRIMARY KEY(a, b) + ); + INSERT INTO collate4t2 VALUES( 'a', 'a' ); + INSERT INTO collate4t2 VALUES( NULL, NULL ); + INSERT INTO collate4t2 VALUES( 'B', 'B' ); +---- +stmt 0 err 1 -1 76 no such collation sequence: TEXT +stmt 108 err 1 -1 155 no such table: collate4t2 +stmt 155 err 1 -1 204 no such table: collate4t2 +stmt 204 err 1 -1 251 no such table: collate4t2 +==== collate4-1.2.14 + + CREATE TABLE collate4t3(a COLLATE NOCASE, b COLLATE TEXT); + INSERT INTO collate4t3 VALUES( 'a', 'a' ); + INSERT INTO collate4t3 VALUES( 'b', 'b' ); + INSERT INTO collate4t3 VALUES( NULL, NULL ); + INSERT INTO collate4t3 VALUES( 'B', 'B' ); + INSERT INTO collate4t3 VALUES( 'A', 'A' ); + CREATE INDEX collate4i2 ON collate4t3(a COLLATE TEXT, b COLLATE NOCASE); +---- +stmt 0 err 1 -1 62 no such collation sequence: TEXT +stmt 63 err 1 -1 110 no such table: collate4t3 +stmt 110 err 1 -1 157 no such table: collate4t3 +stmt 157 err 1 -1 206 no such table: collate4t3 +stmt 206 err 1 -1 253 no such table: collate4t3 +stmt 253 err 1 -1 300 no such table: collate4t3 +stmt 300 err 1 -1 377 no such table: main.collate4t3 +==== collate4-1.2.25 + + DROP TABLE collate4t1; + DROP TABLE collate4t2; + DROP TABLE collate4t3; +---- +stmt 0 err 1 -1 27 no such table: collate4t1 +stmt 27 err 1 -1 54 no such table: collate4t2 +stmt 54 err 1 -1 81 no such table: collate4t3 +==== collate4-2.1.0 + + PRAGMA automatic_index=OFF; + CREATE TABLE collate4t1(a COLLATE NOCASE); + CREATE TABLE collate4t2(b COLLATE TEXT); + + INSERT INTO collate4t1 VALUES('a'); + INSERT INTO collate4t1 VALUES('A'); + INSERT INTO collate4t1 VALUES('b'); + INSERT INTO collate4t1 VALUES('B'); + INSERT INTO collate4t1 VALUES('c'); + INSERT INTO collate4t1 VALUES('C'); + INSERT INTO collate4t1 VALUES('d'); + INSERT INTO collate4t1 VALUES('D'); + INSERT INTO collate4t1 VALUES('e'); + INSERT INTO collate4t1 VALUES('D'); + + INSERT INTO collate4t2 VALUES('A'); + INSERT INTO collate4t2 VALUES('Z'); +---- +stmt 0 ok +stmt 32 ok +stmt 79 err 1 -1 123 no such collation sequence: TEXT +stmt 124 err 1 -1 165 no such table: collate4t1 +stmt 165 err 1 -1 205 no such table: collate4t1 +stmt 205 err 1 -1 245 no such table: collate4t1 +stmt 245 err 1 -1 285 no such table: collate4t1 +stmt 285 err 1 -1 325 no such table: collate4t1 +stmt 325 err 1 -1 365 no such table: collate4t1 +stmt 365 err 1 -1 405 no such table: collate4t1 +stmt 405 err 1 -1 445 no such table: collate4t1 +stmt 445 err 1 -1 485 no such table: collate4t1 +stmt 485 err 1 -1 525 no such table: collate4t1 +stmt 525 err 1 -1 566 no such table: collate4t2 +stmt 566 err 1 -1 606 no such table: collate4t2 +==== collate4-2.1.10 + + DROP TABLE collate4t1; + DROP TABLE collate4t2; +---- +stmt 0 err 1 -1 27 no such table: collate4t1 +stmt 27 err 1 -1 54 no such table: collate4t2 +==== collate4-2.2.0 + + CREATE TABLE collate4t1(a COLLATE nocase, b COLLATE text, c); + CREATE TABLE collate4t2(a COLLATE nocase, b COLLATE text, c COLLATE TEXT); + + INSERT INTO collate4t1 VALUES('0', '0', '0'); + INSERT INTO collate4t1 VALUES('0', '0', '1'); + INSERT INTO collate4t1 VALUES('0', '1', '0'); + INSERT INTO collate4t1 VALUES('0', '1', '1'); + INSERT INTO collate4t1 VALUES('1', '0', '0'); + INSERT INTO collate4t1 VALUES('1', '0', '1'); + INSERT INTO collate4t1 VALUES('1', '1', '0'); + INSERT INTO collate4t1 VALUES('1', '1', '1'); + insert into collate4t2 SELECT * FROM collate4t1; +---- +stmt 0 err 1 -1 62 no such collation sequence: text +stmt 66 err 1 -1 128 no such collation sequence: text +stmt 145 err 1 -1 196 no such table: collate4t1 +stmt 196 err 1 -1 246 no such table: collate4t1 +stmt 246 err 1 -1 296 no such table: collate4t1 +stmt 296 err 1 -1 346 no such table: collate4t1 +stmt 346 err 1 -1 396 no such table: collate4t1 +stmt 396 err 1 -1 446 no such table: collate4t1 +stmt 446 err 1 -1 496 no such table: collate4t1 +stmt 496 err 1 -1 546 no such table: collate4t1 +stmt 546 err 1 -1 599 no such table: collate4t2 +==== collate4-2.2.10 + + DROP TABLE collate4t1; + DROP TABLE collate4t2; +---- +stmt 0 err 1 -1 27 no such table: collate4t1 +stmt 27 err 1 -1 54 no such table: collate4t2 +==== collate4-3.0 + + CREATE TABLE collate4t1(a PRIMARY KEY COLLATE NOCASE); +---- +stmt 0 ok +==== collate4-3.1 + + INSERT INTO collate4t1 VALUES('abc'); + INSERT INTO collate4t1 VALUES('ABC'); +---- +stmt 0 err 1 -1 42 no such table: collate4t1 +stmt 42 err 1 -1 84 no such table: collate4t1 +==== collate4-3.2 + + SELECT * FROM collate4t1; +---- +stmt 0 err 1 -1 30 no such table: collate4t1 +==== collate4-3.3 + + INSERT INTO collate4t1 SELECT upper(a) FROM collate4t1; +---- +stmt 0 err 1 -1 60 no such table: collate4t1 +==== collate4-3.4 + + INSERT INTO collate4t1 VALUES(1); + UPDATE collate4t1 SET a = 'abc'; +---- +stmt 0 err 1 -1 38 no such table: collate4t1 +stmt 38 err 1 -1 75 no such table: collate4t1 +==== collate4-3.5 + + DROP TABLE collate4t1; + CREATE TABLE collate4t1(a COLLATE NOCASE UNIQUE); +---- +stmt 0 err 1 -1 27 no such table: collate4t1 +stmt 27 ok +==== collate4-3.6 + + INSERT INTO collate4t1 VALUES('abc'); + INSERT INTO collate4t1 VALUES('ABC'); +---- +stmt 0 err 1 -1 42 no such table: collate4t1 +stmt 42 err 1 -1 84 no such table: collate4t1 +==== collate4-3.7 + + SELECT * FROM collate4t1; +---- +stmt 0 err 1 -1 30 no such table: collate4t1 +==== collate4-3.8 + + INSERT INTO collate4t1 SELECT upper(a) FROM collate4t1; +---- +stmt 0 err 1 -1 60 no such table: collate4t1 +==== collate4-3.9 + + INSERT INTO collate4t1 VALUES(1); + UPDATE collate4t1 SET a = 'abc'; +---- +stmt 0 err 1 -1 38 no such table: collate4t1 +stmt 38 err 1 -1 75 no such table: collate4t1 +==== collate4-3.10 + + DROP TABLE collate4t1; + CREATE TABLE collate4t1(a); + CREATE UNIQUE INDEX collate4i1 ON collate4t1(a COLLATE NOCASE); +---- +stmt 0 err 1 -1 27 no such table: collate4t1 +stmt 27 ok +stmt 59 err 1 -1 127 no such table: main.collate4t1 +==== collate4-3.11 + + INSERT INTO collate4t1 VALUES('abc'); + INSERT INTO collate4t1 VALUES('ABC'); +---- +stmt 0 err 1 -1 42 no such table: collate4t1 +stmt 42 err 1 -1 84 no such table: collate4t1 +==== collate4-3.12 + + SELECT * FROM collate4t1; +---- +stmt 0 err 1 -1 30 no such table: collate4t1 +==== collate4-3.13 + + INSERT INTO collate4t1 SELECT upper(a) FROM collate4t1; +---- +stmt 0 err 1 -1 60 no such table: collate4t1 +==== collate4-3.14 + + INSERT INTO collate4t1 VALUES(1); + UPDATE collate4t1 SET a = 'abc'; +---- +stmt 0 err 1 -1 38 no such table: collate4t1 +stmt 38 err 1 -1 75 no such table: collate4t1 +==== collate4-3.15 + + DROP TABLE collate4t1; +---- +stmt 0 err 1 -1 27 no such table: collate4t1 +==== collate4-4.0 + + CREATE TABLE collate4t1(a COLLATE TEXT); + INSERT INTO collate4t1 VALUES('2'); + INSERT INTO collate4t1 VALUES('10'); + INSERT INTO collate4t1 VALUES('20'); + INSERT INTO collate4t1 VALUES('104'); +---- +stmt 0 err 1 -1 44 no such collation sequence: TEXT +stmt 45 err 1 -1 85 no such table: collate4t1 +stmt 85 err 1 -1 126 no such table: collate4t1 +stmt 126 err 1 -1 167 no such table: collate4t1 +stmt 167 err 1 -1 209 no such table: collate4t1 +==== collate4-4.7 + + DROP TABLE collate4t1; +---- +stmt 0 err 1 -1 27 no such table: collate4t1 +==== collate4-4.8 + + CREATE TABLE collate4t1(a COLLATE TEXT, b COLLATE NUMERIC); + INSERT INTO collate4t1 VALUES('11', '101'); + INSERT INTO collate4t1 VALUES('101', '11') +---- +stmt 0 err 1 -1 44 no such collation sequence: TEXT +stmt 64 err 1 -1 112 no such table: collate4t1 +stmt 112 err 1 -1 160 no such table: collate4t1 +==== collate4-4.9 + + SELECT max(a, b) FROM collate4t1; +---- +stmt 0 err 1 -1 38 no such table: collate4t1 +==== collate4-4.10 + + SELECT max(b, a) FROM collate4t1; +---- +stmt 0 err 1 -1 38 no such table: collate4t1 +==== collate4-4.11 + + SELECT max(a, '101') FROM collate4t1; +---- +stmt 0 err 1 -1 42 no such table: collate4t1 +==== collate4-4.12 + + SELECT max('101', a) FROM collate4t1; +---- +stmt 0 err 1 -1 42 no such table: collate4t1 +==== collate4-4.13 + + SELECT max(b, '101') FROM collate4t1; +---- +stmt 0 err 1 -1 42 no such table: collate4t1 +==== collate4-4.14 + + SELECT max('101', b) FROM collate4t1; +---- +stmt 0 err 1 -1 42 no such table: collate4t1 +==== collate4-4.15 + + DROP TABLE collate4t1; +---- +stmt 0 err 1 -1 27 no such table: collate4t1 +==== collate4-6.0 + + CREATE TABLE collate4t1(a INTEGER PRIMARY KEY); + INSERT INTO collate4t1 VALUES(101); + INSERT INTO collate4t1 VALUES(10); + INSERT INTO collate4t1 VALUES(15); +---- +stmt 0 ok +stmt 52 err 1 -1 92 no such table: collate4t1 +stmt 92 err 1 -1 131 no such table: collate4t1 +stmt 131 err 1 -1 170 no such table: collate4t1 diff --git a/parser/testdata/collate5.metadata.json b/parser/testdata/collate5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collate5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collate5.test b/parser/testdata/collate5.test new file mode 100644 index 0000000..c9605f0 --- /dev/null +++ b/parser/testdata/collate5.test @@ -0,0 +1,206 @@ +==== collate5-1.0 + + CREATE TABLE collate5t1(a COLLATE nocase, b COLLATE text); + + INSERT INTO collate5t1 VALUES('a', 'apple'); + INSERT INTO collate5t1 VALUES('A', 'Apple'); + INSERT INTO collate5t1 VALUES('b', 'banana'); + INSERT INTO collate5t1 VALUES('B', 'banana'); + INSERT INTO collate5t1 VALUES('n', NULL); + INSERT INTO collate5t1 VALUES('N', NULL); +---- +stmt 0 err 1 -1 62 no such collation sequence: text +stmt 63 err 1 -1 113 no such table: collate5t1 +stmt 113 err 1 -1 162 no such table: collate5t1 +stmt 162 err 1 -1 212 no such table: collate5t1 +stmt 212 err 1 -1 262 no such table: collate5t1 +stmt 262 err 1 -1 308 no such table: collate5t1 +stmt 308 err 1 -1 354 no such table: collate5t1 +==== collate5-1.1 + + SELECT DISTINCT a FROM collate5t1; +---- +stmt 0 err 1 -1 39 no such table: collate5t1 +==== collate5-1.2 + + SELECT DISTINCT b FROM collate5t1; +---- +stmt 0 err 1 -1 39 no such table: collate5t1 +==== collate5-1.3 + + SELECT DISTINCT a, b FROM collate5t1; +---- +stmt 0 err 1 -1 42 no such table: collate5t1 +==== collate5-1.11 + + CREATE TABLE tkt3376(a COLLATE nocase PRIMARY KEY); + INSERT INTO tkt3376 VALUES('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'); + INSERT INTO tkt3376 VALUES('ABXYZ012234567890123456789ABXYZ012234567890123456789ABXYZ012234567890123456789ABXYZ012234567890123456789ABXYZ012234567890123456789ABXYZ012234567890123456789ABXYZ012234567890123456789'); + SELECT DISTINCT a FROM tkt3376; +---- +stmt 0 ok +stmt 56 err 1 -1 274 no such table: tkt3376 +stmt 274 err 1 -1 492 no such table: tkt3376 +stmt 492 err 1 -1 528 no such table: tkt3376 +==== collate5-2.0 + + CREATE TABLE collate5t2(a COLLATE text, b COLLATE nocase); + + INSERT INTO collate5t2 VALUES('a', 'apple'); + INSERT INTO collate5t2 VALUES('A', 'apple'); + INSERT INTO collate5t2 VALUES('b', 'banana'); + INSERT INTO collate5t2 VALUES('B', 'Banana'); +---- +stmt 0 err 1 -1 44 no such collation sequence: text +stmt 63 err 1 -1 113 no such table: collate5t2 +stmt 113 err 1 -1 162 no such table: collate5t2 +stmt 162 err 1 -1 212 no such table: collate5t2 +stmt 212 err 1 -1 262 no such table: collate5t2 +==== collate5-2.1.2 + + SELECT a FROM collate5t2 UNION select a FROM collate5t1; +---- +stmt 0 err 1 -1 61 no such table: collate5t1 +==== collate5-2.1.4 + + SELECT a, b FROM collate5t2 UNION select a, b FROM collate5t1; +---- +stmt 0 err 1 -1 67 no such table: collate5t1 +==== collate5-2.2.2 + + SELECT a FROM collate5t2 EXCEPT select a FROM collate5t1 WHERE a != 'a'; +---- +stmt 0 err 1 -1 77 no such table: collate5t1 +==== collate5-2.2.4 + + SELECT a, b FROM collate5t2 EXCEPT select a, b FROM collate5t1 + where a != 'a'; +---- +stmt 0 err 1 -1 90 no such table: collate5t1 +==== collate5-2.3.2 + + SELECT a FROM collate5t2 INTERSECT select a FROM collate5t1 WHERE a != 'a'; +---- +stmt 0 err 1 -1 80 no such table: collate5t1 +==== collate5-2.3.4 + + SELECT a, b FROM collate5t2 INTERSECT select a, b FROM collate5t1; +---- +stmt 0 err 1 -1 71 no such table: collate5t1 +==== collate5-2.4.1 +DROP TABLE collate5t3; +---- +stmt 0 err 1 -1 22 no such table: collate5t3 +==== collate5-3.0 + + SELECT a FROM collate5t1 UNION ALL SELECT a FROM collate5t2 ORDER BY 1; +---- +stmt 0 err 1 -1 76 no such table: collate5t2 +==== collate5-3.1 + + SELECT a FROM collate5t2 UNION ALL SELECT a FROM collate5t1 ORDER BY 1; +---- +stmt 0 err 1 -1 76 no such table: collate5t1 +==== collate5-3.2 + + SELECT a FROM collate5t1 UNION ALL SELECT a FROM collate5t2 + ORDER BY 1 COLLATE TEXT; +---- +stmt 0 err 1 -1 96 no such table: collate5t2 +==== collate5-3.3 + + CREATE TABLE collate5t_cn(a COLLATE NUMERIC); + CREATE TABLE collate5t_ct(a COLLATE TEXT); + INSERT INTO collate5t_cn VALUES('1'); + INSERT INTO collate5t_cn VALUES('11'); + INSERT INTO collate5t_cn VALUES('101'); + INSERT INTO collate5t_ct SELECT * FROM collate5t_cn; +---- +stmt 0 err 1 -1 49 no such collation sequence: NUMERIC +stmt 50 err 1 -1 96 no such collation sequence: TEXT +stmt 97 err 1 -1 139 no such table: collate5t_cn +stmt 139 err 1 -1 182 no such table: collate5t_cn +stmt 182 err 1 -1 226 no such table: collate5t_cn +stmt 226 err 1 -1 283 no such table: collate5t_ct +==== collate5-3.4 + + SELECT a FROM collate5t_cn INTERSECT SELECT a FROM collate5t_ct ORDER BY 1; +---- +stmt 0 err 1 -1 80 no such table: collate5t_ct +==== collate5-3.5 + + SELECT a FROM collate5t_ct INTERSECT SELECT a FROM collate5t_cn ORDER BY 1; +---- +stmt 0 err 1 -1 80 no such table: collate5t_cn +==== collate5-3.20 + + DROP TABLE collate5t_cn; + DROP TABLE collate5t_ct; + DROP TABLE collate5t1; + DROP TABLE collate5t2; +---- +stmt 0 err 1 -1 29 no such table: collate5t_cn +stmt 29 err 1 -1 58 no such table: collate5t_ct +stmt 58 err 1 -1 85 no such table: collate5t1 +stmt 85 err 1 -1 112 no such table: collate5t2 +==== collate5-4.0 + + CREATE TABLE collate5t1(a COLLATE NOCASE, b COLLATE NUMERIC); + INSERT INTO collate5t1 VALUES('a', '1'); + INSERT INTO collate5t1 VALUES('A', '1.0'); + INSERT INTO collate5t1 VALUES('b', '2'); + INSERT INTO collate5t1 VALUES('B', '3'); +---- +stmt 0 err 1 -1 65 no such collation sequence: NUMERIC +stmt 66 err 1 -1 112 no such table: collate5t1 +stmt 112 err 1 -1 159 no such table: collate5t1 +stmt 159 err 1 -1 204 no such table: collate5t1 +stmt 204 err 1 -1 249 no such table: collate5t1 +==== collate5-4.2 + + SELECT a, b, count(*) FROM collate5t1 GROUP BY a, b ORDER BY a, b; +---- +stmt 0 err 1 -1 71 no such table: collate5t1 +==== collate5-4.3 + + DROP TABLE collate5t1; +---- +stmt 0 err 1 -1 27 no such table: collate5t1 +==== 5.0 + + CREATE TABLE t1(a, b COLLATE nocase); + CREATE TABLE t2(c, d); + INSERT INTO t2 VALUES(1, 'bbb'); +---- +stmt 0 ok +stmt 40 ok +stmt 65 err 1 -1 100 no such table: t2 +==== 5.1 + + SELECT * FROM ( + SELECT a, b FROM t1 UNION ALL SELECT c, d FROM t2 + ) WHERE b='BbB'; +---- +stmt 0 err 1 -1 93 no such table: t2 +==== 5.2 + + CREATE TABLE t1(a,b,c COLLATE NOCASE); + INSERT INTO t1 VALUES(NULL,'C','c'); + CREATE VIEW v2 AS + SELECT a,b,c FROM t1 INTERSECT SELECT a,b,b FROM t1 + WHERE 'eT"3qRkL+oJMJjQ9z0'>=b + ORDER BY a,b,c; +---- +stmt 0 ok +stmt 41 err 1 -1 80 no such table: t1 +stmt 80 ok +==== 5.3 + + SELECT * FROM v2; +---- +stmt 0 err 1 -1 20 no such table: v2 +==== 5.4 + + SELECT * FROM v2 WHERE c='c'; +---- +stmt 0 err 1 -1 32 no such table: v2 diff --git a/parser/testdata/collate6.metadata.json b/parser/testdata/collate6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collate6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collate6.test b/parser/testdata/collate6.test new file mode 100644 index 0000000..1d0e14b --- /dev/null +++ b/parser/testdata/collate6.test @@ -0,0 +1,110 @@ +==== collate6-1.0 + + CREATE TABLE collate6log(a, b); + CREATE TABLE collate6tab(a COLLATE NOCASE, b COLLATE BINARY); +---- +stmt 0 ok +stmt 36 ok +==== collate6-1.1 + + CREATE TRIGGER collate6trig BEFORE INSERT ON collate6tab + WHEN new.a = 'a' BEGIN + INSERT INTO collate6log VALUES(new.a, new.b); + END; +---- +stmt 0 err 1 -1 91 no such table: main.collate6tab +==== collate6-1.2 + + INSERT INTO collate6tab VALUES('a', 'b'); + SELECT * FROM collate6log; +---- +stmt 0 err 1 -1 46 no such table: collate6tab +stmt 46 err 1 -1 77 no such table: collate6log +==== collate6-1.3 + + INSERT INTO collate6tab VALUES('A', 'B'); + SELECT * FROM collate6log; +---- +stmt 0 err 1 -1 46 no such table: collate6tab +stmt 46 err 1 -1 77 no such table: collate6log +==== collate6-1.4 + + DROP TRIGGER collate6trig; + DELETE FROM collate6log; +---- +stmt 0 err 1 -1 31 no such trigger: collate6trig +stmt 31 err 1 -1 60 no such table: collate6log +==== collate6-1.5 + + CREATE TRIGGER collate6trig BEFORE INSERT ON collate6tab BEGIN + INSERT INTO collate6log VALUES(new.a='a', new.b='b'); + END; +---- +stmt 0 err 1 -1 67 no such table: main.collate6tab +==== collate6-1.6 + + INSERT INTO collate6tab VALUES('a', 'b'); + SELECT * FROM collate6log; +---- +stmt 0 err 1 -1 46 no such table: collate6tab +stmt 46 err 1 -1 77 no such table: collate6log +==== collate6-1.7 + + INSERT INTO collate6tab VALUES('A', 'B'); + SELECT * FROM collate6log; +---- +stmt 0 err 1 -1 46 no such table: collate6tab +stmt 46 err 1 -1 77 no such table: collate6log +==== collate6-1.8 + + DROP TRIGGER collate6trig; + DELETE FROM collate6log; +---- +stmt 0 err 1 -1 31 no such trigger: collate6trig +stmt 31 err 1 -1 60 no such table: collate6log +==== collate6-1.9 + + DROP TABLE collate6tab; +---- +stmt 0 err 1 -1 28 no such table: collate6tab +==== collate6-2.1 + + CREATE TABLE abc(a COLLATE binary, b, c); + CREATE TABLE def(a, b, c); + CREATE TRIGGER abc_t1 AFTER INSERT ON abc BEGIN + INSERT INTO def SELECT * FROM abc WHERE a < new.a COLLATE nocase; + END +---- +stmt 0 ok +stmt 46 ok +stmt 77 err 1 -1 129 no such table: main.abc +==== collate6-2.2 + + INSERT INTO abc VALUES('One', 'Two', 'Three'); + INSERT INTO abc VALUES('one', 'two', 'three'); + SELECT * FROM def; +---- +stmt 0 err 1 -1 51 no such table: abc +stmt 51 err 1 -1 102 no such table: abc +stmt 102 err 1 -1 125 no such table: def +==== collate6-2.3 + + UPDATE abc SET a = 'four' WHERE a = 'one'; + CREATE TRIGGER abc_t2 AFTER UPDATE ON abc BEGIN + INSERT INTO def SELECT * FROM abc WHERE a < new.a COLLATE nocase; + END; + SELECT * FROM def; +---- +stmt 0 err 1 -1 47 no such table: abc +stmt 47 err 1 -1 99 no such table: main.abc +stmt 180 err 1 -1 203 no such table: def +==== collate6-3.1 + + SELECT 1 FROM sqlite_master WHERE name COLLATE nocase = 'hello'; +---- +stmt 0 ok +==== collate6-3.2 + + SELECT 1 FROM sqlite_master WHERE 'hello' = name COLLATE nocase; +---- +stmt 0 ok diff --git a/parser/testdata/collate7.metadata.json b/parser/testdata/collate7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collate7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collate7.test b/parser/testdata/collate7.test new file mode 100644 index 0000000..485e2ea --- /dev/null +++ b/parser/testdata/collate7.test @@ -0,0 +1,10 @@ +==== collate7-1.3 + + CREATE TABLE abc(a COLLATE CASELESS, b, c); +---- +stmt 0 err 1 -1 41 no such collation sequence: CASELESS +==== collate7-2.4 + + SELECT * FROM abc16 WHERE a < 'abc'; +---- +stmt 0 err 1 -1 41 no such table: abc16 diff --git a/parser/testdata/collate8.metadata.json b/parser/testdata/collate8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collate8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collate8.test b/parser/testdata/collate8.test new file mode 100644 index 0000000..7333cb7 --- /dev/null +++ b/parser/testdata/collate8.test @@ -0,0 +1,137 @@ +==== collate8-1.1 + + CREATE TABLE t1(a TEXT COLLATE nocase); + INSERT INTO t1 VALUES('aaa'); + INSERT INTO t1 VALUES('BBB'); + INSERT INTO t1 VALUES('ccc'); + INSERT INTO t1 VALUES('DDD'); + SELECT a FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 44 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 180 no such table: t1 +stmt 180 err 1 -1 213 no such table: t1 +==== collate8-1.2 + + SELECT rowid FROM t1 WHERE a<'ccc' ORDER BY 1 +---- +stmt 0 err 1 -1 51 no such table: t1 +==== collate8-1.3 + + SELECT rowid FROM t1 WHERE a<'ccc' COLLATE binary ORDER BY 1 +---- +stmt 0 err 1 -1 66 no such table: t1 +==== collate8-1.4 + + SELECT rowid FROM t1 WHERE +a<'ccc' ORDER BY 1 +---- +stmt 0 err 1 -1 52 no such table: t1 +==== collate8-1.5 + + SELECT a FROM t1 ORDER BY +a +---- +stmt 0 err 1 -1 34 no such table: t1 +==== collate8-1.11 + + SELECT a AS x FROM t1 ORDER BY "x"; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== collate8-1.12 + + SELECT a AS x FROM t1 WHERE x<'ccc' ORDER BY 1 +---- +stmt 0 err 1 -1 52 no such table: t1 +==== collate8-1.14 + + SELECT a AS x FROM t1 WHERE +x<'ccc' ORDER BY 1 +---- +stmt 0 err 1 -1 53 no such table: t1 +==== collate8-1.15 + + SELECT a AS x FROM t1 ORDER BY +x +---- +stmt 0 err 1 -1 39 no such table: t1 +==== collate8-2.1 + + CREATE TABLE t2(a); + INSERT INTO t2 VALUES('abc'); + INSERT INTO t2 VALUES('ABC'); + SELECT a AS x FROM t2 WHERE x='abc'; +---- +stmt 0 ok +stmt 24 err 1 -1 58 no such table: t2 +stmt 58 err 1 -1 92 no such table: t2 +stmt 92 err 1 -1 133 no such table: t2 +==== collate8-2.2 + + SELECT a AS x FROM t2 WHERE x='abc' COLLATE nocase; +---- +stmt 0 err 1 -1 56 no such table: t2 +==== collate8-2.3 + + SELECT a AS x FROM t2 WHERE (x COLLATE nocase)='abc'; +---- +stmt 0 err 1 -1 58 no such table: t2 +==== collate8-2.4 + + SELECT a COLLATE nocase AS x FROM t2 WHERE x='abc'; +---- +stmt 0 err 1 -1 56 no such table: t2 +==== collate8-2.5 + + SELECT a COLLATE nocase AS x FROM t2 WHERE (x COLLATE binary)='abc'; +---- +stmt 0 err 1 -1 73 no such table: t2 +==== collate8-2.6 + + SELECT a COLLATE nocase AS x FROM t2 WHERE x='abc' COLLATE binary; +---- +stmt 0 err 1 -1 71 no such table: t2 +==== collate8-2.7 + + SELECT * FROM t2 WHERE (a COLLATE nocase)='abc' COLLATE binary; +---- +stmt 0 err 1 -1 68 no such table: t2 +==== collate8-2.8 + + SELECT a COLLATE nocase AS x FROM t2 WHERE 'abc'=x COLLATE binary; +---- +stmt 0 err 1 -1 71 no such table: t2 +==== collate8-3.1 + + SELECT 'abc'==('ABC'||'') COLLATE nocase; + SELECT 'abc'==('ABC'||'' COLLATE nocase); + SELECT 'abc'==('ABC'||('' COLLATE nocase)); + SELECT 'abc'==('ABC'||upper('' COLLATE nocase)); +---- +stmt 0 ok +stmt 44 ok +stmt 88 ok +stmt 134 ok +==== collate8-3.2 + + SELECT 'abc'==('ABC'||max('' COLLATE nocase,'' COLLATE binary)); +---- +stmt 0 ok +==== collate8-3.3 + + SELECT 'abc'==('ABC'||max('' COLLATE binary,'' COLLATE nocase)); +---- +stmt 0 ok +==== collate8-3.4 + + SELECT 'abc'==('ABC'||CASE WHEN 1-1=2 THEN '' COLLATE nocase + ELSE '' COLLATE binary END); + SELECT 'abc'==('ABC'||CASE WHEN 1+1=2 THEN '' COLLATE nocase + ELSE '' COLLATE binary END); +---- +stmt 0 ok +stmt 132 ok +==== collate8-3.5 + + SELECT 'abc'==('ABC'||CASE WHEN 1=2 THEN '' COLLATE binary + ELSE '' COLLATE nocase END); +---- +stmt 0 ok diff --git a/parser/testdata/collate9.metadata.json b/parser/testdata/collate9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collate9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collate9.test b/parser/testdata/collate9.test new file mode 100644 index 0000000..2ed67b6 --- /dev/null +++ b/parser/testdata/collate9.test @@ -0,0 +1,71 @@ +==== collate9-1.1 + + CREATE TABLE xy(x COLLATE "reverse sort", y COLLATE binary); + INSERT INTO xy VALUES('one', 'one'); + INSERT INTO xy VALUES('two', 'two'); + INSERT INTO xy VALUES('three', 'three'); +---- +stmt 0 err 1 -1 46 no such collation sequence: reverse sort +stmt 65 err 1 -1 106 no such table: xy +stmt 106 err 1 -1 147 no such table: xy +stmt 147 err 1 -1 192 no such table: xy +==== collate9-1.2 + + SELECT x FROM xy ORDER BY x +---- +stmt 0 err 1 -1 34 no such table: xy +==== collate9-1.3 + + SELECT y FROM xy ORDER BY y +---- +stmt 0 err 1 -1 34 no such table: xy +==== collate9-1.5 + + CREATE INDEX xy_i ON xy(x) +---- +stmt 0 err 1 -1 33 no such table: main.xy +==== collate9-2.1 + + SELECT x, x < 'seven' FROM xy ORDER BY x +---- +stmt 0 err 1 -1 47 no such table: xy +==== collate9-2.2 + + SELECT y, y < 'seven' FROM xy ORDER BY x +---- +stmt 0 err 1 -1 47 no such table: xy +==== collate9-2.3 + + SELECT y, y COLLATE "reverse sort" < 'seven' FROM xy ORDER BY x +---- +stmt 0 err 1 -1 70 no such table: xy +==== collate9-2.4 + + SELECT y FROM xy ORDER BY y +---- +stmt 0 err 1 -1 33 no such table: xy +==== collate9-2.5 + + SELECT y FROM xy ORDER BY y COLLATE "reverse sort" +---- +stmt 0 err 1 -1 56 no such table: xy +==== collate9-2.6 + + SELECT y COLLATE "reverse sort" AS aaa FROM xy ORDER BY aaa +---- +stmt 0 err 1 -1 65 no such table: xy +==== collate9-3.1 + + CREATE INDEX xy_i2 ON xy(y COLLATE "reverse sort"); +---- +stmt 0 err 1 -1 56 no such table: main.xy +==== collate9-4.1 + + REINDEX "reverse sort" +---- +stmt 0 err 1 -1 30 unable to identify the object to be reindexed +==== collate9-4.3 + + REINDEX "reverse sort" +---- +stmt 0 err 1 -1 30 unable to identify the object to be reindexed diff --git a/parser/testdata/collateA.metadata.json b/parser/testdata/collateA.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collateA.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collateA.test b/parser/testdata/collateA.test new file mode 100644 index 0000000..0a11519 --- /dev/null +++ b/parser/testdata/collateA.test @@ -0,0 +1,244 @@ +==== collateA-1.1 + + CREATE TABLE t1( + a INTEGER PRIMARY KEY, + b TEXT COLLATE BINARY, + c TEXT COLLATE RTRIM + ); + INSERT INTO t1 VALUES(1, 'abcde','abcde'); + INSERT INTO t1 VALUES(2, 'xyzzy ','xyzzy '); + INSERT INTO t1 VALUES(3, 'xyzzy ','xyzzy '); + INSERT INTO t1 VALUES(4, 'xyzzy ','xyzzy '); + INSERT INTO t1 VALUES(5, ' ', ' '); + INSERT INTO t1 VALUES(6, '', ''); + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 113 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 209 no such table: t1 +stmt 209 err 1 -1 260 no such table: t1 +stmt 260 err 1 -1 313 no such table: t1 +stmt 313 err 1 -1 357 no such table: t1 +stmt 357 err 1 -1 395 no such table: t1 +stmt 395 err 1 -1 424 no such table: t1 +==== collateA-1.2 +SELECT a FROM t1 WHERE b='abcde ' +---- +stmt 0 err 1 -1 38 no such table: t1 +==== collateA-1.3 +SELECT a FROM t1 WHERE c='abcde ' +---- +stmt 0 err 1 -1 38 no such table: t1 +==== collateA-1.4 +SELECT a FROM t1 WHERE b='xyzzy' +---- +stmt 0 err 1 -1 33 no such table: t1 +==== collateA-1.5 +SELECT a FROM t1 WHERE c='xyzzy' +---- +stmt 0 err 1 -1 33 no such table: t1 +==== collateA-1.6 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 34 no such table: t1 +==== collateA-1.7 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 35 no such table: t1 +==== collateA-1.8 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 36 no such table: t1 +==== collateA-1.9 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 37 no such table: t1 +==== collateA-1.10 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 67 no such table: t1 +==== collateA-1.11 +SELECT 'abc123'='abc123 ' COLLATE RTRIM; +---- +stmt 0 ok +==== collateA-1.12 +SELECT 'abc123 '='abc123' COLLATE RTRIM; +---- +stmt 0 ok +==== collateA-1.13 +SELECT ' '='' COLLATE RTRIM, ' '='' COLLATE BINARY, ' '='' +---- +stmt 0 ok +==== collateA-1.14 +SELECT ''=' ' COLLATE RTRIM, ''=' ' COLLATE BINARY, ''=' ' +---- +stmt 0 ok +==== collateA-1.15 +SELECT ' '=' ' COLLATE RTRIM, ' '=' ' +---- +stmt 0 ok +==== collateA-1.16 +SELECT ''<>' ' COLLATE RTRIM, ''<>' ' COLLATE BINARY, ''<>' ' +---- +stmt 0 ok +==== collateA-1.17 +SELECT a FROM t1 WHERE c='xyzz' +---- +stmt 0 err 1 -1 32 no such table: t1 +==== collateA-1.18 +SELECT a FROM t1 WHERE c='xyzzyy ' +---- +stmt 0 err 1 -1 37 no such table: t1 +==== collateA-1.19 +SELECT a FROM t1 WHERE c='xyzz ' +---- +stmt 0 err 1 -1 35 no such table: t1 +==== collateA-1.20 +SELECT a FROM t1 WHERE c='abcd ' +---- +stmt 0 err 1 -1 35 no such table: t1 +==== collateA-1.21 +SELECT a FROM t1 WHERE c='abcd' +---- +stmt 0 err 1 -1 32 no such table: t1 +==== collateA-1.22 +SELECT a FROM t1 WHERE c='abc' +---- +stmt 0 err 1 -1 31 no such table: t1 +==== collateA-1.23 +SELECT a FROM t1 WHERE c='abcdef ' +---- +stmt 0 err 1 -1 38 no such table: t1 +==== collateA-1.24 +SELECT a FROM t1 WHERE c='' +---- +stmt 0 err 1 -1 28 no such table: t1 +==== collateA-1.25 +SELECT a FROM t1 WHERE c=' ' +---- +stmt 0 err 1 -1 29 no such table: t1 +==== collateA-1.26 +SELECT a FROM t1 WHERE c=' ' +---- +stmt 0 err 1 -1 48 no such table: t1 +==== collateA-2.1 + + CREATE INDEX i1b ON t1(b); + CREATE INDEX i1c ON t1(c); + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 31 no such table: main.t1 +stmt 31 err 1 -1 62 no such table: main.t1 +stmt 62 ok +==== collateA-2.2 +SELECT a FROM t1 WHERE b='abcde ' +---- +stmt 0 err 1 -1 38 no such table: t1 +==== collateA-2.3 +SELECT a FROM t1 WHERE c='abcde ' +---- +stmt 0 err 1 -1 38 no such table: t1 +==== collateA-2.4 +SELECT a FROM t1 WHERE b='xyzzy' +---- +stmt 0 err 1 -1 33 no such table: t1 +==== collateA-2.5 +SELECT a FROM t1 WHERE c='xyzzy' +---- +stmt 0 err 1 -1 33 no such table: t1 +==== collateA-2.6 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 34 no such table: t1 +==== collateA-2.7 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 35 no such table: t1 +==== collateA-2.8 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 36 no such table: t1 +==== collateA-2.9 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 37 no such table: t1 +==== collateA-2.10 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 67 no such table: t1 +==== collateA-2.17 +SELECT a FROM t1 WHERE c='xyzz' +---- +stmt 0 err 1 -1 32 no such table: t1 +==== collateA-2.18 +SELECT a FROM t1 WHERE c='xyzzyy ' +---- +stmt 0 err 1 -1 37 no such table: t1 +==== collateA-2.19 +SELECT a FROM t1 WHERE c='xyzz ' +---- +stmt 0 err 1 -1 35 no such table: t1 +==== collateA-2.20 +SELECT a FROM t1 WHERE c='abcd ' +---- +stmt 0 err 1 -1 35 no such table: t1 +==== collateA-2.21 +SELECT a FROM t1 WHERE c='abcd' +---- +stmt 0 err 1 -1 32 no such table: t1 +==== collateA-2.22 +SELECT a FROM t1 WHERE c='abc' +---- +stmt 0 err 1 -1 31 no such table: t1 +==== collateA-2.23 +SELECT a FROM t1 WHERE c='abcdef ' +---- +stmt 0 err 1 -1 38 no such table: t1 +==== collateA-2.24 +SELECT a FROM t1 WHERE c='' +---- +stmt 0 err 1 -1 28 no such table: t1 +==== collateA-2.25 +SELECT a FROM t1 WHERE c=' ' +---- +stmt 0 err 1 -1 29 no such table: t1 +==== collateA-2.26 +SELECT a FROM t1 WHERE c=' ' +---- +stmt 0 err 1 -1 48 no such table: t1 +==== collateA-3.2 +SELECT a FROM t1 WHERE b='abcde ' +---- +stmt 0 err 1 -1 38 no such table: t1 +==== collateA-3.3 +SELECT a FROM t1 WHERE c='abcde ' +---- +stmt 0 err 1 -1 38 no such table: t1 +==== collateA-3.4 +SELECT a FROM t1 WHERE b='xyzzy' +---- +stmt 0 err 1 -1 33 no such table: t1 +==== collateA-3.5 +SELECT a FROM t1 WHERE c='xyzzy' +---- +stmt 0 err 1 -1 33 no such table: t1 +==== collateA-3.6 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 34 no such table: t1 +==== collateA-3.7 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 35 no such table: t1 +==== collateA-3.8 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 36 no such table: t1 +==== collateA-3.9 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 37 no such table: t1 +==== collateA-3.10 +SELECT a FROM t1 WHERE c='xyzzy ' +---- +stmt 0 err 1 -1 67 no such table: t1 diff --git a/parser/testdata/collateB.metadata.json b/parser/testdata/collateB.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/collateB.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/collateB.test b/parser/testdata/collateB.test new file mode 100644 index 0000000..8c4f681 --- /dev/null +++ b/parser/testdata/collateB.test @@ -0,0 +1,88 @@ +==== collateB-1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY); + CREATE TABLE t2(b INTEGER PRIMARY KEY, x1 INT COLLATE NOCASE); + CREATE TABLE t3(x2 INT); + SELECT * FROM t3, t2, t1 WHERE x2=b AND x1=a AND a=1; +---- +stmt 0 ok +stmt 42 ok +stmt 107 ok +stmt 134 err 1 -1 190 no such table: t3 +==== collateB-1.2 + + INSERT INTO t1(a) VALUES(1),(2),(3); + INSERT INTO t2(b,x1) VALUES(11,1),(22,2),(33,3); + INSERT INTO t3(x2) VALUES(11),(22),(33); + SELECT *,'|' FROM t3, t2, t1 WHERE x2=b AND x1=a AND a=1; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 90 no such table: t2 +stmt 90 err 1 -1 133 no such table: t3 +stmt 133 err 1 -1 193 no such table: t3 +==== collateB-1.3 + + SELECT *,'|' FROM t3, t1, t2 WHERE x2=b AND x1=a AND a=1; +---- +stmt 0 err 1 -1 60 no such table: t3 +==== collateB-1.4 + + SELECT *,'|' FROM t2, t3, t1 WHERE x2=b AND x1=a AND a=1; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== collateB-1.5 + + SELECT *,'|' FROM t2, t1, t3 WHERE x2=b AND x1=a AND a=1; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== collateB-1.6 + + SELECT *,'|' FROM t1, t2, t3 WHERE x2=b AND x1=a AND a=1; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== collateB-1.7 + + SELECT *,'|' FROM t1, t2, t3 WHERE x2=b AND x1=a AND a=1; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== collateB-1.12 + + SELECT *,'|' FROM t3, t2, t1 WHERE b=x2 AND a=x1 AND 1=a; +---- +stmt 0 err 1 -1 60 no such table: t3 +==== collateB-1.13 + + SELECT *,'|' FROM t3, t1, t2 WHERE b=x2 AND a=x1 AND 1=a; +---- +stmt 0 err 1 -1 60 no such table: t3 +==== collateB-1.14 + + SELECT *,'|' FROM t2, t3, t1 WHERE b=x2 AND a=x1 AND 1=a; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== collateB-1.15 + + SELECT *,'|' FROM t2, t1, t3 WHERE b=x2 AND a=x1 AND 1=a; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== collateB-1.16 + + SELECT *,'|' FROM t1, t2, t3 WHERE b=x2 AND a=x1 AND 1=a; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== collateB-1.17 + + SELECT *,'|' FROM t1, t2, t3 WHERE b=x2 AND a=x1 AND 1=a; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== 2.1 + + CREATE TABLE t4(a COLLATE binary); + CREATE INDEX i4 ON t4(a); + INSERT INTO t4 VALUES('one'), ('two'), ('three'); + VACUUM; +---- +stmt 0 ok +stmt 37 err 1 -1 65 no such table: main.t4 +stmt 65 err 1 -1 117 no such table: t4 +stmt 117 ok diff --git a/parser/testdata/colname.metadata.json b/parser/testdata/colname.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/colname.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/colname.test b/parser/testdata/colname.test new file mode 100644 index 0000000..1abd1d9 --- /dev/null +++ b/parser/testdata/colname.test @@ -0,0 +1,61 @@ +==== colname-9.300 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(aaa INT); + INSERT INTO t1(aaa) VALUES(123); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 82 err 1 -1 117 no such table: t1 +==== colname-9.320 + + CREATE TABLE t2 AS SELECT BBb FROM (SELECT aaa AS Bbb FROM t1); + SELECT name FROM pragma_table_info('t2'); +---- +stmt 0 err 1 -1 68 no such table: t1 +stmt 68 ok +==== colname-9.330 + -- added 2019-08-10 to invalidate + DROP TABLE IF EXISTS t1; -- a couple assert()s that were + CREATE TABLE t1(a); -- added by ticket 3b44500725 + INSERT INTO t1 VALUES(17),(2),(99),(-3),(7); + SELECT (SELECT avg(a) UNION SELECT min(a) OVER()) FROM t1; +---- +stmt 0 ok +stmt 61 ok +stmt 120 err 1 -1 207 no such table: t1 +stmt 207 err 1 -1 268 no such table: t1 +==== colname-9.400 + + CREATE TABLE t4 AS SELECT #0; +---- +stmt 0 err 1 29 32 near "#0": syntax error +==== colname-9.410 + + CREATE TABLE t5 AS SELECT RAISE(abort,a); +---- +stmt 0 err 1 41 44 no such column: a +==== colname-10.100 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1("with space" TEXT); + DROP TABLE IF EXISTS t2; + CREATE TABLE t2 AS SELECT "with space" FROM t1; + PRAGMA table_info(t2); +---- +stmt 0 ok +stmt 27 ok +stmt 65 ok +stmt 92 err 1 -1 142 no such table: t1 +stmt 142 ok +==== colname-10.110 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3 AS SELECT "with space" FROM t1 GROUP BY 1; + PRAGMA table_info(t3); +---- +stmt 0 ok +stmt 27 err 1 -1 88 no such table: t1 +stmt 88 ok diff --git a/parser/testdata/columncount.metadata.json b/parser/testdata/columncount.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/columncount.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/columncount.test b/parser/testdata/columncount.test new file mode 100644 index 0000000..aaf5da5 --- /dev/null +++ b/parser/testdata/columncount.test @@ -0,0 +1,7 @@ +==== 1.0 + + CREATE TABLE t1(x, y, z); + INSERT INTO t1 VALUES('a', 'b', 'c'); +---- +stmt 0 ok +stmt 28 err 1 -1 68 no such table: t1 diff --git a/parser/testdata/conflict.metadata.json b/parser/testdata/conflict.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/conflict.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/conflict.test b/parser/testdata/conflict.test new file mode 100644 index 0000000..73e8db0 --- /dev/null +++ b/parser/testdata/conflict.test @@ -0,0 +1,418 @@ +==== conflict-1.0 + + CREATE TABLE t1(a, b, c, UNIQUE(a,b)); + CREATE TABLE t2(x); + SELECT c FROM t1 ORDER BY c; +---- +stmt 0 ok +stmt 43 ok +stmt 67 err 1 -1 100 no such table: t1 +==== conflict-2.0 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(a,b)); + CREATE TABLE t2(x); + SELECT c FROM t1 ORDER BY c; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 38 no such table: t2 +stmt 38 ok +stmt 101 ok +stmt 125 err 1 -1 158 no such table: t1 +==== conflict-3.0 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(a, b, c INTEGER, PRIMARY KEY(c), UNIQUE(a,b)); + CREATE TABLE t2(x); + SELECT c FROM t1 ORDER BY c; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 38 no such table: t2 +stmt 38 ok +stmt 105 ok +stmt 129 err 1 -1 162 no such table: t1 +==== conflict-4.0 + + DROP TABLE t2; + CREATE TABLE t2(x); + SELECT x FROM t2; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 ok +stmt 43 err 1 -1 65 no such table: t2 +==== conflict-5.0 + + DROP TABLE t2; + CREATE TABLE t2(x); + SELECT x FROM t2; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 ok +stmt 43 err 1 -1 65 no such table: t2 +==== conflict-6.0 + + DROP TABLE t2; + CREATE TABLE t2(a,b,c); + INSERT INTO t2 VALUES(1,2,1); + INSERT INTO t2 VALUES(2,3,2); + INSERT INTO t2 VALUES(3,4,1); + INSERT INTO t2 VALUES(4,5,4); + SELECT c FROM t2 ORDER BY b; + CREATE TABLE t3(x); + INSERT INTO t3 VALUES(1); +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 ok +stmt 47 err 1 -1 81 no such table: t2 +stmt 81 err 1 -1 115 no such table: t2 +stmt 115 err 1 -1 149 no such table: t2 +stmt 149 err 1 -1 183 no such table: t2 +stmt 183 err 1 -1 216 no such table: t2 +stmt 216 ok +stmt 240 err 1 -1 270 no such table: t3 +==== conflict-7.2 + + PRAGMA count_changes=on; + UPDATE OR IGNORE t1 SET a=1000; +---- +stmt 0 ok +stmt 29 err 1 -1 65 no such table: t1 +==== conflict-7.3 + + SELECT b FROM t1 WHERE a=1000; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== conflict-7.4 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== conflict-7.5 + + PRAGMA count_changes=on; + UPDATE OR REPLACE t1 SET a=1001; +---- +stmt 0 ok +stmt 29 err 1 -1 66 no such table: t1 +==== conflict-7.6 + + SELECT b FROM t1 WHERE a=1001; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== conflict-7.7 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== conflict-8.2 + + INSERT OR IGNORE INTO t1 VALUES(2,4); +---- +stmt 0 err 1 -1 42 no such table: t1 +==== conflict-8.3 + + INSERT OR REPLACE INTO t1 VALUES(2,4); +---- +stmt 0 err 1 -1 43 no such table: t1 +==== conflict-8.4 + + INSERT OR IGNORE INTO t1 SELECT * FROM t1; +---- +stmt 0 err 1 -1 47 no such table: t1 +==== conflict-8.5 + + INSERT OR IGNORE INTO t1 SELECT a+2,b+2 FROM t1; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== conflict-8.6 + + INSERT OR IGNORE INTO t1 SELECT a+3,b+3 FROM t1; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== conflict-9.1 + + PRAGMA count_changes=0; + CREATE TABLE t2( + a INTEGER UNIQUE ON CONFLICT IGNORE, + b INTEGER UNIQUE ON CONFLICT FAIL, + c INTEGER UNIQUE ON CONFLICT REPLACE, + d INTEGER UNIQUE ON CONFLICT ABORT, + e INTEGER UNIQUE ON CONFLICT ROLLBACK + ); + CREATE TABLE t3(x); + INSERT INTO t3 VALUES(1); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 28 ok +stmt 270 ok +stmt 294 err 1 -1 324 no such table: t3 +stmt 324 err 1 -1 346 no such table: t3 +==== conflict-9.2 + + INSERT INTO t2 VALUES(1,1,1,1,1); + INSERT INTO t2 VALUES(2,2,2,2,2); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 76 no such table: t2 +stmt 76 err 1 -1 98 no such table: t2 +==== conflict-9.3 + + INSERT INTO t2 VALUES(1,3,3,3,3); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 60 no such table: t2 +==== conflict-9.4 + + UPDATE t2 SET a=a+1 WHERE a=1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict-9.5 + + INSERT INTO t2 VALUES(3,1,3,3,3); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 60 no such table: t2 +==== conflict-9.6 + + UPDATE t2 SET b=b+1 WHERE b=1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict-9.7 + + BEGIN; + UPDATE t3 SET x=x+1; + INSERT INTO t2 VALUES(3,1,3,3,3); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 96 no such table: t2 +==== conflict-9.9 + + BEGIN; + UPDATE t3 SET x=x+1; + UPDATE t2 SET b=b+1 WHERE b=1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 71 no such table: t2 +stmt 71 err 1 -1 93 no such table: t2 +==== conflict-9.11 + + INSERT INTO t2 VALUES(3,3,3,1,3); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 60 no such table: t2 +==== conflict-9.12 + + UPDATE t2 SET d=d+1 WHERE d=1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict-9.13 + + BEGIN; + UPDATE t3 SET x=x+1; + INSERT INTO t2 VALUES(3,3,3,1,3); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 96 no such table: t2 +==== conflict-9.15 + + BEGIN; + UPDATE t3 SET x=x+1; + UPDATE t2 SET d=d+1 WHERE d=1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 71 no such table: t2 +stmt 71 err 1 -1 93 no such table: t2 +==== conflict-9.17 + + INSERT INTO t2 VALUES(3,3,3,3,1); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 60 no such table: t2 +==== conflict-9.18 + + UPDATE t2 SET e=e+1 WHERE e=1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict-9.19 + + BEGIN; + UPDATE t3 SET x=x+1; + INSERT INTO t2 VALUES(3,3,3,3,1); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 96 no such table: t2 +==== conflict-9.21 + + BEGIN; + UPDATE t3 SET x=x+1; + UPDATE t2 SET e=e+1 WHERE e=1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 71 no such table: t2 +stmt 71 err 1 -1 93 no such table: t2 +==== conflict-9.23 + + INSERT INTO t2 VALUES(3,3,1,3,3); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 60 no such table: t2 +==== conflict-9.24 + + UPDATE t2 SET c=c-1 WHERE c=2; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict-9.25 + + BEGIN; + UPDATE t3 SET x=x+1; + INSERT INTO t2 VALUES(3,3,1,3,3); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 96 no such table: t2 +==== conflict-12.1 + + CREATE TABLE t5(a INTEGER PRIMARY KEY, b text); + INSERT INTO t5 VALUES(1,'one'); + INSERT INTO t5 VALUES(2,'two'); + SELECT * FROM t5 +---- +stmt 0 ok +stmt 52 err 1 -1 88 no such table: t5 +stmt 88 err 1 -1 124 no such table: t5 +stmt 124 err 1 -1 146 no such table: t5 +==== conflict-12.2 + + UPDATE OR IGNORE t5 SET a=a+1 WHERE a=1; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 45 no such table: t5 +stmt 45 err 1 -1 67 no such table: t5 +==== conflict-12.3 + + UPDATE t5 SET a=a+1 WHERE a=1; +---- +stmt 0 err 1 -1 35 no such table: t5 +==== conflict-12.4 + + UPDATE OR REPLACE t5 SET a=a+1 WHERE a=1; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 46 no such table: t5 +stmt 46 err 1 -1 68 no such table: t5 +==== conflict-12.5 + + CREATE TABLE t5b(x); + INSERT INTO t5b(rowid, x) VALUES(1,10),(2,11); + UPDATE t5b SET rowid=rowid+1 WHERE x=10; +---- +stmt 0 ok +stmt 25 err 1 -1 76 no such table: t5b +stmt 76 err 1 -1 121 no such table: t5b +==== conflict-13.2 + + REPLACE INTO t13 VALUES(3); + COMMIT; + SELECT * FROM t13; +---- +stmt 0 err 1 -1 32 no such table: t13 +stmt 32 ok +stmt 44 err 1 -1 67 no such table: t13 +==== conflict-14.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x NOT NULL DEFAULT NULL); + REPLACE INTO t1 DEFAULT VALUES; +---- +stmt 0 ok +stmt 27 ok +stmt 71 err 1 -1 105 no such table: t1 +==== conflict-15.10 + + CREATE TABLE t1( + x PRIMARY KEY, + UNIQUE(x,x), + UNIQUE(x,x) ON CONFLICT REPLACE + ); + INSERT INTO t1(x) VALUES(1); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 96 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 147 no such table: t1 +==== conflict-15.20 + + INSERT INTO t1(x) VALUES(1); +---- +stmt 0 err 1 -1 31 no such table: t1 +==== conflict-15.30 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== conflict-16.1 + + -- ON CONFLICT clauses are not allowed on column CHECK constraints + CREATE TABLE t1(a INT CHECK( a!=5 ) ON CONFLICT ignore); +---- +stmt 0 err 1 108 110 near "ON": syntax error +==== conflict-16.2 + + -- ON CONFLICT is allowed on table CHECK constraints + CREATE TABLE t1(a INT, CHECK( a!=5 ) ON CONFLICT ignore); +---- +stmt 0 ok +==== conflict-16.3 + + -- The ON CONFLICT clause is in-op + INSERT INTO t1(a) VALUES(4),(5),(6); +---- +stmt 0 err 1 -1 76 no such table: t1 +==== conflict-16.4 + + SELECT a FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== conflict-16.5 + + INSERT OR IGNORE INTO t1(a) VALUES(4),(5),(6); + SELECT a FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 49 no such table: t1 +stmt 49 err 1 -1 80 no such table: t1 diff --git a/parser/testdata/conflict2.metadata.json b/parser/testdata/conflict2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/conflict2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/conflict2.test b/parser/testdata/conflict2.test new file mode 100644 index 0000000..5c580c6 --- /dev/null +++ b/parser/testdata/conflict2.test @@ -0,0 +1,386 @@ +==== conflict2-1.0 + + CREATE TABLE t1(a, b, c, PRIMARY KEY(a,b)) WITHOUT rowid; + CREATE TABLE t2(x); + SELECT c FROM t1 ORDER BY c; +---- +stmt 0 ok +stmt 62 ok +stmt 86 err 1 -1 119 no such table: t1 +==== conflict2-2.0 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(a,b)) WITHOUT rowid; + CREATE TABLE t2(x); + SELECT c FROM t1 ORDER BY c; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 38 no such table: t2 +stmt 38 ok +stmt 115 ok +stmt 139 err 1 -1 172 no such table: t1 +==== conflict2-3.0 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(a, b, c INTEGER, PRIMARY KEY(c), UNIQUE(a,b)) WITHOUT rowid; + CREATE TABLE t2(x); + SELECT c FROM t1 ORDER BY c; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 38 no such table: t2 +stmt 38 ok +stmt 119 ok +stmt 143 err 1 -1 176 no such table: t1 +==== conflict2-4.0 + + DROP TABLE t2; + CREATE TABLE t2(x); + SELECT x FROM t2; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 ok +stmt 43 err 1 -1 65 no such table: t2 +==== conflict2-5.0 + + DROP TABLE t2; + CREATE TABLE t2(x); + SELECT x FROM t2; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 ok +stmt 43 err 1 -1 65 no such table: t2 +==== conflict2-6.0 + + DROP TABLE t2; + CREATE TABLE t2(a,b,c); + INSERT INTO t2 VALUES(1,2,1); + INSERT INTO t2 VALUES(2,3,2); + INSERT INTO t2 VALUES(3,4,1); + INSERT INTO t2 VALUES(4,5,4); + SELECT c FROM t2 ORDER BY b; + CREATE TABLE t3(x); + INSERT INTO t3 VALUES(1); +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 ok +stmt 47 err 1 -1 81 no such table: t2 +stmt 81 err 1 -1 115 no such table: t2 +stmt 115 err 1 -1 149 no such table: t2 +stmt 149 err 1 -1 183 no such table: t2 +stmt 183 err 1 -1 216 no such table: t2 +stmt 216 ok +stmt 240 err 1 -1 270 no such table: t3 +==== conflict2-7.2 + + PRAGMA count_changes=on; + UPDATE OR IGNORE t1 SET a=1000; +---- +stmt 0 ok +stmt 29 err 1 -1 65 no such table: t1 +==== conflict2-7.3 + + SELECT b FROM t1 WHERE a=1000; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== conflict2-7.4 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== conflict2-7.5 + + PRAGMA count_changes=on; + UPDATE OR REPLACE t1 SET a=1001; +---- +stmt 0 ok +stmt 29 err 1 -1 66 no such table: t1 +==== conflict2-7.7 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== conflict2-8.2 + + INSERT OR IGNORE INTO t1 VALUES(2,4); +---- +stmt 0 err 1 -1 42 no such table: t1 +==== conflict2-8.3 + + INSERT OR REPLACE INTO t1 VALUES(2,4); +---- +stmt 0 err 1 -1 43 no such table: t1 +==== conflict2-8.4 + + INSERT OR IGNORE INTO t1 SELECT * FROM t1; +---- +stmt 0 err 1 -1 47 no such table: t1 +==== conflict2-8.5 + + INSERT OR IGNORE INTO t1 SELECT a+2,b+2 FROM t1; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== conflict2-8.6 + + INSERT OR IGNORE INTO t1 SELECT a+3,b+3 FROM t1; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== conflict2-9.1 + + PRAGMA count_changes=0; + CREATE TABLE t2( + a INTEGER PRIMARY KEY ON CONFLICT IGNORE, + b INTEGER UNIQUE ON CONFLICT FAIL, + c INTEGER UNIQUE ON CONFLICT REPLACE, + d INTEGER UNIQUE ON CONFLICT ABORT, + e INTEGER UNIQUE ON CONFLICT ROLLBACK + ) WITHOUT rowid; + CREATE TABLE t3(x); + INSERT INTO t3 VALUES(1); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 28 ok +stmt 289 ok +stmt 313 err 1 -1 343 no such table: t3 +stmt 343 err 1 -1 365 no such table: t3 +==== conflict2-9.2 + + INSERT INTO t2 VALUES(1,1,1,1,1); + INSERT INTO t2 VALUES(2,2,2,2,2); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 76 no such table: t2 +stmt 76 err 1 -1 98 no such table: t2 +==== conflict2-9.3 + + INSERT INTO t2 VALUES(1,3,3,3,3); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 60 no such table: t2 +==== conflict2-9.4 + + UPDATE t2 SET a=a+1 WHERE a=1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict2-9.5 + + INSERT INTO t2 VALUES(3,1,3,3,3); +---- +stmt 0 err 1 -1 38 no such table: t2 +==== conflict2-9.6 + + UPDATE t2 SET b=b+1 WHERE b=1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict2-9.7 + + BEGIN; + UPDATE t3 SET x=x+1; + INSERT INTO t2 VALUES(3,1,3,3,3); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 96 no such table: t2 +==== conflict2-9.9 + + BEGIN; + UPDATE t3 SET x=x+1; + UPDATE t2 SET b=b+1 WHERE b=1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 71 no such table: t2 +stmt 71 err 1 -1 93 no such table: t2 +==== conflict2-9.11 + + INSERT INTO t2 VALUES(3,3,3,1,3); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 60 no such table: t2 +==== conflict2-9.12 + + UPDATE t2 SET d=d+1 WHERE d=1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict2-9.13 + + BEGIN; + UPDATE t3 SET x=x+1; + INSERT INTO t2 VALUES(3,3,3,1,3); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 96 no such table: t2 +==== conflict2-9.15 + + BEGIN; + UPDATE t3 SET x=x+1; + UPDATE t2 SET d=d+1 WHERE d=1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 71 no such table: t2 +stmt 71 err 1 -1 93 no such table: t2 +==== conflict2-9.17 + + INSERT INTO t2 VALUES(3,3,3,3,1); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 60 no such table: t2 +==== conflict2-9.18 + + UPDATE t2 SET e=e+1 WHERE e=1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict2-9.19 + + BEGIN; + UPDATE t3 SET x=x+1; + INSERT INTO t2 VALUES(3,3,3,3,1); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 96 no such table: t2 +==== conflict2-9.21 + + BEGIN; + UPDATE t3 SET x=x+1; + UPDATE t2 SET e=e+1 WHERE e=1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 71 no such table: t2 +stmt 71 err 1 -1 93 no such table: t2 +==== conflict2-9.23 + + INSERT INTO t2 VALUES(3,3,1,3,3); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 60 no such table: t2 +==== conflict2-9.24 + + UPDATE t2 SET c=c-1 WHERE c=2; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 57 no such table: t2 +==== conflict2-9.25 + + BEGIN; + UPDATE t3 SET x=x+1; + INSERT INTO t2 VALUES(3,3,1,3,3); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 36 no such table: t3 +stmt 36 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 96 no such table: t2 +==== conflict2-12.1 + + CREATE TABLE t5(a INTEGER PRIMARY KEY, b text) WITHOUT rowid; + INSERT INTO t5 VALUES(1,'one'); + INSERT INTO t5 VALUES(2,'two'); + SELECT * FROM t5 +---- +stmt 0 ok +stmt 66 err 1 -1 102 no such table: t5 +stmt 102 err 1 -1 138 no such table: t5 +stmt 138 err 1 -1 160 no such table: t5 +==== conflict2-12.2 + + UPDATE OR IGNORE t5 SET a=a+1 WHERE a=1; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 45 no such table: t5 +stmt 45 err 1 -1 67 no such table: t5 +==== conflict2-12.3 + + UPDATE t5 SET a=a+1 WHERE a=1; +---- +stmt 0 err 1 -1 35 no such table: t5 +==== conflict2-12.4 + + UPDATE OR REPLACE t5 SET a=a+1 WHERE a=1; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 46 no such table: t5 +stmt 46 err 1 -1 68 no such table: t5 +==== conflict2-13.2 + + REPLACE INTO t13 VALUES(3); + COMMIT; + SELECT * FROM t13; +---- +stmt 0 err 1 -1 32 no such table: t13 +stmt 32 ok +stmt 44 err 1 -1 67 no such table: t13 +==== conflict2-14.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1( + x TEXT PRIMARY KEY NOT NULL, + y TEXT NOT NULL, + z INTEGER + ); + INSERT INTO t1 VALUES('alpha','beta',1); + CREATE UNIQUE INDEX t1xy ON t1(x,y); + REPLACE INTO t1(x,y,z) VALUES('alpha','gamma',1); + PRAGMA integrity_check; + SELECT x,y FROM t1 INDEXED BY t1xy; + SELECT x,y,z FROM t1 NOT INDEXED; +---- +stmt 0 ok +stmt 27 ok +stmt 120 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 202 no such table: main.t1 +stmt 202 err 1 -1 254 no such table: t1 +stmt 254 ok +stmt 280 err 1 -1 318 no such table: t1 +stmt 318 err 1 -1 354 no such table: t1 +==== conflict2-14.2 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1( + x TEXT PRIMARY KEY NOT NULL, + y TEXT NOT NULL, + z INTEGER + ) WITHOUT ROWID; + INSERT INTO t1 VALUES('alpha','beta',1); + CREATE UNIQUE INDEX t1xy ON t1(x,y); + REPLACE INTO t1(x,y,z) VALUES('alpha','gamma',1); + PRAGMA integrity_check; + SELECT x,y FROM t1 INDEXED BY t1xy; + SELECT x,y,z FROM t1 NOT INDEXED; +---- +stmt 0 ok +stmt 27 ok +stmt 134 err 1 -1 177 no such table: t1 +stmt 177 err 1 -1 216 no such table: main.t1 +stmt 216 err 1 -1 268 no such table: t1 +stmt 268 ok +stmt 294 err 1 -1 332 no such table: t1 +stmt 332 err 1 -1 368 no such table: t1 diff --git a/parser/testdata/conflict3.metadata.json b/parser/testdata/conflict3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/conflict3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/conflict3.test b/parser/testdata/conflict3.test new file mode 100644 index 0000000..8106122 --- /dev/null +++ b/parser/testdata/conflict3.test @@ -0,0 +1,439 @@ +==== 1.1 + + CREATE TABLE t1( + a INTEGER PRIMARY KEY ON CONFLICT REPLACE, + b UNIQUE ON CONFLICT IGNORE, + c UNIQUE ON CONFLICT FAIL + ); + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 135 err 1 -1 183 no such table: t1 +stmt 183 err 1 -1 218 no such table: t1 +==== 1.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 1.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 1.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 2.1 + + DROP TABLE t1; + CREATE TABLE t1( + a INT PRIMARY KEY ON CONFLICT REPLACE, + b UNIQUE ON CONFLICT IGNORE, + c UNIQUE ON CONFLICT FAIL + ); + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 148 err 1 -1 196 no such table: t1 +stmt 196 err 1 -1 231 no such table: t1 +==== 2.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 2.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 2.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 3.1 + + DROP TABLE t1; + CREATE TABLE t1( + a INT PRIMARY KEY ON CONFLICT REPLACE, + b UNIQUE ON CONFLICT IGNORE, + c UNIQUE ON CONFLICT FAIL + ) WITHOUT ROWID; + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 162 err 1 -1 210 no such table: t1 +stmt 210 err 1 -1 245 no such table: t1 +==== 3.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 3.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 3.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 4.1 + + DROP TABLE t1; + CREATE TABLE t1( + b UNIQUE ON CONFLICT IGNORE, + c UNIQUE ON CONFLICT FAIL, + a INT PRIMARY KEY ON CONFLICT REPLACE + ) WITHOUT ROWID; + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 161 err 1 -1 209 no such table: t1 +stmt 209 err 1 -1 244 no such table: t1 +==== 4.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 4.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 4.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 5.1 + + DROP TABLE t1; + CREATE TABLE t1( + b UNIQUE ON CONFLICT IGNORE, + a INT PRIMARY KEY ON CONFLICT REPLACE, + c UNIQUE ON CONFLICT FAIL + ); + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 147 err 1 -1 195 no such table: t1 +stmt 195 err 1 -1 230 no such table: t1 +==== 5.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 5.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 5.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 6.1 + + DROP TABLE t1; + CREATE TABLE t1( + c UNIQUE ON CONFLICT FAIL, + a INT PRIMARY KEY ON CONFLICT REPLACE, + b UNIQUE ON CONFLICT IGNORE + ); + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 147 err 1 -1 195 no such table: t1 +stmt 195 err 1 -1 230 no such table: t1 +==== 6.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 6.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 6.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 7.1 + + DROP TABLE t1; + CREATE TABLE t1( + a UNIQUE ON CONFLICT REPLACE, + b INTEGER PRIMARY KEY ON CONFLICT IGNORE, + c UNIQUE ON CONFLICT FAIL + ); + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 152 err 1 -1 200 no such table: t1 +stmt 200 err 1 -1 235 no such table: t1 +==== 7.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 7.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 7.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 8.1 + + DROP TABLE t1; + CREATE TABLE t1( + a UNIQUE ON CONFLICT REPLACE, + b INT PRIMARY KEY ON CONFLICT IGNORE, + c UNIQUE ON CONFLICT FAIL + ); + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 148 err 1 -1 196 no such table: t1 +stmt 196 err 1 -1 231 no such table: t1 +==== 8.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 8.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 8.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 9.1 + + DROP TABLE t1; + CREATE TABLE t1( + a UNIQUE ON CONFLICT REPLACE, + b INT PRIMARY KEY ON CONFLICT IGNORE, + c UNIQUE ON CONFLICT FAIL + ) WITHOUT ROWID; + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 162 err 1 -1 210 no such table: t1 +stmt 210 err 1 -1 245 no such table: t1 +==== 9.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 9.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 9.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 10.1 + + DROP TABLE t1; + CREATE TABLE t1( + a UNIQUE ON CONFLICT REPLACE, + b UNIQUE ON CONFLICT IGNORE, + c INTEGER PRIMARY KEY ON CONFLICT FAIL + ); + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 152 err 1 -1 200 no such table: t1 +stmt 200 err 1 -1 235 no such table: t1 +==== 10.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 10.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 10.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 11.1 + + DROP TABLE t1; + CREATE TABLE t1( + a UNIQUE ON CONFLICT REPLACE, + b UNIQUE ON CONFLICT IGNORE, + c PRIMARY KEY ON CONFLICT FAIL + ) WITHOUT ROWID; + INSERT INTO t1(a,b,c) VALUES(1,2,3), (2,3,4); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 158 err 1 -1 206 no such table: t1 +stmt 206 err 1 -1 241 no such table: t1 +==== 11.2 + + INSERT INTO t1(a,b,c) VALUES(3,2,5); + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 74 no such table: t1 +==== 11.3 +INSERT INTO t1(a,b,c) VALUES(4,5,6), (5,6,4); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 11.4 + + SELECT a,b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 12.1 + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t2 VALUES(111, '111'); +---- +stmt 0 ok +stmt 50 err 1 -1 87 no such table: t2 +==== 12.2 + + REPLACE INTO t2 VALUES(NULL, '112'), (111, '111B'); +---- +stmt 0 err 1 -1 54 no such table: t2 +==== 12.3 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t2 +==== 13.1.0 + + PRAGMA recursive_triggers = true; + CREATE TABLE t0 (c0 UNIQUE, c1 UNIQUE); + CREATE TRIGGER tr0 AFTER DELETE ON t0 BEGIN + DELETE FROM t0; + END; + + INSERT INTO t0 VALUES(1, NULL); + INSERT INTO t0 VALUES(0, NULL); +---- +stmt 0 ok +stmt 38 ok +stmt 82 err 1 -1 130 no such table: main.t0 +stmt 163 err 1 -1 200 no such table: t0 +stmt 200 err 1 -1 236 no such table: t0 +==== 13.1.1 + + UPDATE OR REPLACE t0 SET c1 = 1; +---- +stmt 0 err 1 -1 37 no such table: t0 +==== 13.1.3 + + SELECT * FROM t0 +---- +stmt 0 err 1 -1 22 no such table: t0 +==== 13.2.0 + + CREATE TABLE t2 (a PRIMARY KEY, b UNIQUE, c UNIQUE) WITHOUT ROWID; + CREATE TRIGGER tr3 AFTER DELETE ON t2 BEGIN + DELETE FROM t2; + END; + + INSERT INTO t2 VALUES(1, 1, 1); + INSERT INTO t2 VALUES(2, 2, 2); +---- +stmt 0 ok +stmt 71 err 1 -1 119 no such table: main.t2 +stmt 152 err 1 -1 189 no such table: t2 +stmt 189 err 1 -1 225 no such table: t2 +==== 13.2.1 + + UPDATE OR REPLACE t2 SET c = 0; +---- +stmt 0 err 1 -1 36 no such table: t2 +==== 13.2.3 + + SELECT * FROM t2 +---- +stmt 0 err 1 -1 22 no such table: t2 +==== 13.3.0 + + CREATE TABLE t1(a, b); + CREATE TABLE log(x); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1 VALUES(1, 2); + + CREATE TRIGGER tb BEFORE UPDATE ON t1 BEGIN + DELETE FROM t1; + END; + CREATE TRIGGER ta AFTER UPDATE ON t1 BEGIN + INSERT INTO log VALUES('fired!'); + END; + + UPDATE t1 SET b=3; +---- +stmt 0 ok +stmt 27 ok +stmt 52 err 1 -1 82 no such table: main.t1 +stmt 82 err 1 -1 115 no such table: t1 +stmt 115 err 1 -1 164 no such table: main.t1 +stmt 195 err 1 -1 242 no such table: main.t1 +stmt 291 err 1 -1 315 no such table: t1 +==== 13.3.1 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== 13.3.2 + + SELECT * FROM log; +---- +stmt 0 err 1 -1 23 no such table: log diff --git a/parser/testdata/corrupt.metadata.json b/parser/testdata/corrupt.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corrupt.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corrupt.test b/parser/testdata/corrupt.test new file mode 100644 index 0000000..97b6fd7 --- /dev/null +++ b/parser/testdata/corrupt.test @@ -0,0 +1,50 @@ +==== corrupt-1.1 + + BEGIN; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randstr(100,100)); + INSERT INTO t1 VALUES(randstr(90,90)); + INSERT INTO t1 VALUES(randstr(80,80)); + INSERT INTO t1 SELECT x || randstr(5,5) FROM t1; + INSERT INTO t1 SELECT x || randstr(6,6) FROM t1; + INSERT INTO t1 SELECT x || randstr(7,7) FROM t1; + INSERT INTO t1 SELECT x || randstr(8,8) FROM t1; + INSERT INTO t1 VALUES(randstr(3000,3000)); + INSERT INTO t1 SELECT x || randstr(9,9) FROM t1; + INSERT INTO t1 SELECT x || randstr(10,10) FROM t1; + INSERT INTO t1 SELECT x || randstr(11,11) FROM t1; + INSERT INTO t1 SELECT x || randstr(12,12) FROM t1; + CREATE INDEX t1i1 ON t1(x); + CREATE TABLE t2 AS SELECT * FROM t1; + DELETE FROM t2 WHERE rowid%5!=0; + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 35 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 166 no such table: t1 +stmt 166 err 1 -1 219 no such table: t1 +stmt 219 err 1 -1 272 no such table: t1 +stmt 272 err 1 -1 325 no such table: t1 +stmt 325 err 1 -1 378 no such table: t1 +stmt 378 err 1 -1 425 no such table: t1 +stmt 425 err 1 -1 478 no such table: t1 +stmt 478 err 1 -1 533 no such table: t1 +stmt 533 err 1 -1 588 no such table: t1 +stmt 588 err 1 -1 643 no such table: t1 +stmt 643 err 1 -1 675 no such table: main.t1 +stmt 675 err 1 -1 716 no such table: t1 +stmt 716 err 1 -1 753 no such table: t2 +stmt 753 ok +==== corrupt-7.2 + + UPDATE t1 SET x = X'870400020003000400050006000700080009000A' + WHERE rowid = 10; +---- +stmt 0 err 1 -1 94 no such table: t1 +==== corrupt-7.3 + + INSERT INTO t1 VALUES(X'000100020003000400050006000700080009000A'); +---- +stmt 0 err 1 -1 74 no such table: t1 diff --git a/parser/testdata/corrupt2.metadata.json b/parser/testdata/corrupt2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corrupt2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corrupt2.test b/parser/testdata/corrupt2.test new file mode 100644 index 0000000..81c71f8 --- /dev/null +++ b/parser/testdata/corrupt2.test @@ -0,0 +1,48 @@ +==== corrupt2-1.1 + + PRAGMA auto_vacuum=0; + PRAGMA page_size=1024; + CREATE TABLE abc(a, b, c); +---- +stmt 0 ok +stmt 26 ok +stmt 53 ok +==== corrupt2-13.3 + DELETE FROM t1 WHERE rowid < 30; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 14.0 + + PRAGMA auto_vacuum = 0; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randomblob(3500)); + DELETE FROM t1; +---- +stmt 0 ok +stmt 26 ok +stmt 48 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 109 no such table: t1 +==== 14.1 + + PRAGMA integrity_check; + PRAGMA freelist_count; +---- +stmt 0 ok +stmt 26 ok +==== 14.3 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 14.4 + + INSERT INTO t1 VALUES(randomblob(2500)); + PRAGMA freelist_count; +---- +stmt 0 err 1 -1 43 no such table: t1 +stmt 43 ok +==== 14.5 + + PRAGMA integrity_check; +---- +stmt 0 ok diff --git a/parser/testdata/corrupt3.metadata.json b/parser/testdata/corrupt3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corrupt3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corrupt3.test b/parser/testdata/corrupt3.test new file mode 100644 index 0000000..a68d9e9 --- /dev/null +++ b/parser/testdata/corrupt3.test @@ -0,0 +1,15 @@ +==== corrupt3-1.8 + + PRAGMA integrity_check +---- +stmt 0 ok +==== corrupt3-1.10 + + PRAGMA integrity_check +---- +stmt 0 ok +==== corrupt3-1.12 + + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/corrupt4.metadata.json b/parser/testdata/corrupt4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corrupt4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corrupt4.test b/parser/testdata/corrupt4.test new file mode 100644 index 0000000..d3aed9f --- /dev/null +++ b/parser/testdata/corrupt4.test @@ -0,0 +1,18 @@ +==== corrupt4-1.2 +PRAGMA freelist_count +---- +stmt 0 ok +==== 2.0 + + PRAGMA page_size = 512; + CREATE TABLE t1(a, b, c); +---- +stmt 0 ok +stmt 26 ok +==== 2.2 + + PRAGMA writable_schema = 1; + SELECT * FROM sqlite_schema; +---- +stmt 0 ok +stmt 32 ok diff --git a/parser/testdata/corrupt9.metadata.json b/parser/testdata/corrupt9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corrupt9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corrupt9.test b/parser/testdata/corrupt9.test new file mode 100644 index 0000000..3be6439 --- /dev/null +++ b/parser/testdata/corrupt9.test @@ -0,0 +1,21 @@ +==== corrupt9-2.2 + + CREATE INDEX i2 ON t2(b,a); + REINDEX; +---- +stmt 0 err 1 -1 32 no such table: main.t2 +stmt 32 ok +==== corrupt9-3.2 + + CREATE INDEX i2 ON t2(b,a); + REINDEX; +---- +stmt 0 err 1 -1 32 no such table: main.t2 +stmt 32 ok +==== corrupt9-4.2 + + CREATE INDEX i2 ON t2(b,a); + REINDEX; +---- +stmt 0 err 1 -1 32 no such table: main.t2 +stmt 32 ok diff --git a/parser/testdata/corruptF.metadata.json b/parser/testdata/corruptF.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corruptF.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corruptF.test b/parser/testdata/corruptF.test new file mode 100644 index 0000000..c9a26b2 --- /dev/null +++ b/parser/testdata/corruptF.test @@ -0,0 +1,14 @@ +==== 1.6 + + CREATE TABLE t4(x); + SELECT * FROM sqlite_master; +---- +stmt 0 ok +stmt 23 ok +==== 2.6 + + CREATE TABLE t4(x); + SELECT * FROM sqlite_master; +---- +stmt 0 ok +stmt 23 ok diff --git a/parser/testdata/corruptG.metadata.json b/parser/testdata/corruptG.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corruptG.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corruptG.test b/parser/testdata/corruptG.test new file mode 100644 index 0000000..dd110b2 --- /dev/null +++ b/parser/testdata/corruptG.test @@ -0,0 +1,31 @@ +==== 1.1 + + PRAGMA page_size=512; + CREATE TABLE t1(a,b,c); + INSERT INTO t1(rowid,a,b,c) VALUES(52,'abc','xyz','123'); + CREATE INDEX t1abc ON t1(a,b,c); +---- +stmt 0 ok +stmt 24 ok +stmt 50 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 145 no such table: main.t1 +==== 1.2 + + SELECT c FROM t1 WHERE a>'abc'; +---- +stmt 0 err 1 -1 36 no such table: t1 +==== 1.3 + + PRAGMA integrity_check +---- +stmt 0 ok +==== 1.4 + + SELECT c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 2.1 + + SELECT rowid FROM t1 WHERE a='abc' and b='xyz123456789XYZ'; +---- +stmt 0 err 1 -1 64 no such table: t1 diff --git a/parser/testdata/corruptH.metadata.json b/parser/testdata/corruptH.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corruptH.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corruptH.test b/parser/testdata/corruptH.test new file mode 100644 index 0000000..9c3a909 --- /dev/null +++ b/parser/testdata/corruptH.test @@ -0,0 +1,71 @@ +==== 1.1 + + PRAGMA page_size=1024; + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + + CREATE TABLE t2(x); + INSERT INTO t2 VALUES(randomblob(200)); + INSERT INTO t2 SELECT randomblob(200) FROM t2; + INSERT INTO t2 SELECT randomblob(200) FROM t2; + INSERT INTO t2 SELECT randomblob(200) FROM t2; + INSERT INTO t2 SELECT randomblob(200) FROM t2; + INSERT INTO t2 SELECT randomblob(200) FROM t2; + INSERT INTO t2 SELECT randomblob(200) FROM t2; +---- +stmt 0 ok +stmt 25 ok +stmt 71 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 141 no such table: t1 +stmt 141 ok +stmt 164 err 1 -1 206 no such table: t2 +stmt 206 err 1 -1 255 no such table: t2 +stmt 255 err 1 -1 304 no such table: t2 +stmt 304 err 1 -1 353 no such table: t2 +stmt 353 err 1 -1 402 no such table: t2 +stmt 402 err 1 -1 451 no such table: t2 +stmt 451 err 1 -1 500 no such table: t2 +==== 2.1 + + PRAGMA auto_vacuum=0; + PRAGMA page_size=1024; + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + + CREATE TABLE t3(x); + + CREATE TABLE t2(x PRIMARY KEY) WITHOUT ROWID; + INSERT INTO t2 VALUES(randomblob(100)); + + DROP TABLE t3; +---- +stmt 0 ok +stmt 24 ok +stmt 49 ok +stmt 95 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 165 no such table: t1 +stmt 165 ok +stmt 188 ok +stmt 237 err 1 -1 279 no such table: t2 +stmt 279 err 1 -1 297 no such table: t3 +==== 3.1 + + PRAGMA page_size=1024; + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + + CREATE TABLE t2(c INTEGER PRAGMA KEY, d); + INSERT INTO t2 VALUES(1, randomblob(1100)); +---- +stmt 0 ok +stmt 25 ok +stmt 71 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 141 no such table: t1 +stmt 141 ok +stmt 186 err 1 -1 232 no such table: t2 diff --git a/parser/testdata/corruptI.metadata.json b/parser/testdata/corruptI.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corruptI.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corruptI.test b/parser/testdata/corruptI.test new file mode 100644 index 0000000..1711778 --- /dev/null +++ b/parser/testdata/corruptI.test @@ -0,0 +1,106 @@ +==== 1.1 + + PRAGMA page_size=1024; + PRAGMA auto_vacuum=0; + CREATE TABLE t1(a); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1 VALUES('abcdefghijklmnop'); +---- +stmt 0 ok +stmt 25 ok +stmt 49 ok +stmt 71 err 1 -1 99 no such table: main.t1 +stmt 99 err 1 -1 144 no such table: t1 +==== 2.2 + SELECT * FROM r WHERE x >= 10 +---- +stmt 0 err 1 -1 31 no such table: r +==== 3.1 + + PRAGMA auto_vacuum=0; + PRAGMA page_size = 512; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + WITH s(a, b) AS ( + SELECT 2, 'abcdefghij' + UNION ALL + SELECT a+2, b FROM s WHERe a < 40 + ) + INSERT INTO t1 SELECT * FROM s; +---- +stmt 0 ok +stmt 27 ok +stmt 56 ok +stmt 104 err 1 -1 259 no such table: t1 +==== 3.3 + + INSERT INTO t1 VALUES(9, 'klmnopqrst'); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 4.0 + + PRAGMA page_size = 65536; + PRAGMA autovacuum = 0; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(-1, 'abcdefghij'); + INSERT INTO t1 VALUES(0, 'abcdefghij'); +---- +stmt 0 ok +stmt 28 ok +stmt 53 ok +stmt 98 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 183 no such table: t1 +==== 5.1 + + PRAGMA page_count +---- +stmt 0 ok +==== 6.0 + + PRAGMA page_size = 512; + PRAGMA auto_vacuum=0; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(zeroblob(300)); + INSERT INTO t1 VALUES(zeroblob(600)); +---- +stmt 0 ok +stmt 26 ok +stmt 50 ok +stmt 72 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 152 no such table: t1 +==== 7.0 + + PRAGMA auto_vacuum=0; + CREATE TABLE t1(x PRIMARY KEY, y); + INSERT INTO t1 VALUES('a', 'A'); + INSERT INTO t1 VALUES('b', 'A'); + INSERT INTO t1 VALUES('c', 'A'); + SELECT name FROM sqlite_master; +---- +stmt 0 ok +stmt 24 ok +stmt 61 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 166 no such table: t1 +stmt 166 ok +==== 7.1 + + PRAGMA writable_schema = 1; + DELETE FROM sqlite_master WHERE name = 'sqlite_autoindex_t1_1'; +---- +stmt 0 ok +stmt 30 ok +==== 8.0 + + PRAGMA auto_vacuum=0; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(zeroblob(300)); + INSERT INTO t1 VALUES(zeroblob(300)); + INSERT INTO t1 VALUES(zeroblob(300)); + INSERT INTO t1 VALUES(zeroblob(300)); +---- +stmt 0 ok +stmt 24 ok +stmt 46 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 166 no such table: t1 +stmt 166 err 1 -1 206 no such table: t1 diff --git a/parser/testdata/corruptJ.metadata.json b/parser/testdata/corruptJ.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corruptJ.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corruptJ.test b/parser/testdata/corruptJ.test new file mode 100644 index 0000000..c36d729 --- /dev/null +++ b/parser/testdata/corruptJ.test @@ -0,0 +1,12 @@ +==== 1.1 + + PRAGMA page_size=1024; + PRAGMA auto_vacuum=0; + CREATE TABLE t1(a,b); + WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<10) + INSERT INTO t1(a,b) SELECT i, zeroblob(700) FROM c; +---- +stmt 0 ok +stmt 25 ok +stmt 49 ok +stmt 73 err 1 -1 205 no such table: t1 diff --git a/parser/testdata/corruptK.metadata.json b/parser/testdata/corruptK.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corruptK.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corruptK.test b/parser/testdata/corruptK.test new file mode 100644 index 0000000..29e6794 --- /dev/null +++ b/parser/testdata/corruptK.test @@ -0,0 +1,83 @@ +==== 1.1 + + PRAGMA page_size=1024; + PRAGMA auto_vacuum=0; + CREATE TABLE t1(x); + + INSERT INTO t1 VALUES(randomblob(20)); + INSERT INTO t1 VALUES(randomblob(100)); -- make this into a free slot + INSERT INTO t1 VALUES(randomblob(27)); -- this one will be corrupt + INSERT INTO t1 VALUES(randomblob(800)); + + DELETE FROM t1 WHERE rowid=2; -- free the 100 byte slot + PRAGMA page_count +---- +stmt 0 ok +stmt 25 ok +stmt 49 ok +stmt 71 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 155 no such table: t1 +stmt 155 err 1 -1 228 no such table: t1 +stmt 228 err 1 -1 301 no such table: t1 +stmt 301 err 1 -1 334 no such table: t1 +stmt 334 ok +==== 1.3 + + INSERT INTO t1 VALUES(randomblob(20)); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 1.4 + + INSERT INTO t1 VALUES(randomblob(90)); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 2.1 + + PRAGMA page_size=1024; + PRAGMA auto_vacuum=0; + CREATE TABLE t1(x); + + INSERT INTO t1 VALUES(randomblob(20)); + INSERT INTO t1 VALUES(randomblob(20)); -- free this one + INSERT INTO t1 VALUES(randomblob(20)); + INSERT INTO t1 VALUES(randomblob(20)); -- and this one + INSERT INTO t1 VALUES(randomblob(20)); -- corrupt this one. + + DELETE FROM t1 WHERE rowid IN(2, 4); + PRAGMA page_count +---- +stmt 0 ok +stmt 25 ok +stmt 49 ok +stmt 71 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 154 no such table: t1 +stmt 154 err 1 -1 215 no such table: t1 +stmt 215 err 1 -1 256 no such table: t1 +stmt 256 err 1 -1 316 no such table: t1 +stmt 316 err 1 -1 380 no such table: t1 +stmt 380 ok +==== 2.3 + + INSERT INTO t1 VALUES(randomblob(900)); +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 3.1 + + PRAGMA page_size=1024; + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(a, b, c); + CREATE TABLE t3(a, b, c); + CREATE TABLE t4(a, b, c); + CREATE TABLE t5(a, b, c); +---- +stmt 0 ok +stmt 27 ok +stmt 57 ok +stmt 87 ok +stmt 117 ok +stmt 147 ok +==== 3.3 + + PRAGMA integrity_check; +---- +stmt 0 ok diff --git a/parser/testdata/corruptL.metadata.json b/parser/testdata/corruptL.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corruptL.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corruptL.test b/parser/testdata/corruptL.test new file mode 100644 index 0000000..07cadc5 --- /dev/null +++ b/parser/testdata/corruptL.test @@ -0,0 +1,276 @@ +==== 1.1 + + PRAGMA cell_size_check = off; + DROP INDEX t1x1; +---- +stmt 0 ok +stmt 32 err 1 -1 51 no such index: t1x1 +==== 1.2 + + SELECT sum(s+length(b)) FROM t1 WHERE a IN (110,10,150) AND q IS NULL; +---- +stmt 0 err 1 -1 73 no such table: t1 +==== 1.3 + + REINDEX t1; +---- +stmt 0 err 1 -1 14 unable to identify the object to be reindexed +==== 1.4 + + PRAGMA integrity_check +---- +stmt 0 ok +==== 2.1 + + PRAGMA writable_schema=ON; -- bypass improved sqlite_master consistency checking + INSERT INTO t1(b) VALUES(X'a0fee3669f9fddefc5cba913e4225d4b6ce2b04f26b87fad3ee6f9b7d90a1ea62a169bf41e5d32707a6ca5c3d05e4bde05c9d89eaaa8c50e74333d2e9fcd7dfe95528a3a016aac1102d825c5cd70cf99d8a88e0ea7f798d4334386518b7ad359beb168b93aba059a2a3bd93112d65b44c12b9904ea786b204d80531cdf0504bf9b203dbe927061974caf7b9f30cbc3397b61f802e732012a6663d41c3607d6f1c0dbcfd489adac05ca500c0b04439d894cd93a840159225ef73b627e178b9f84b3ffe66cf22a963a8368813ff7961fc47f573211ccec95e0220dcbb3bf429f4a50ba54d7a53784ac51bfef346e6ac8ae0d0e7c3175946e62ba2b'); +---- +stmt 0 ok +stmt 29 err 1 -1 616 no such table: t1 +==== 2.2 + + SELECT b,c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 3.0 + + CREATE TABLE t1(a, b, c, d INTEGER PRIMARY KEY); + CREATE TABLE t2(a, b, c, d INTEGER PRIMARY KEY); + + INSERT INTO t1(a, b, c, d) VALUES (1, 2, 3, 100), (4, 5, 6, 101); + INSERT INTO t2(a, b, c, d) VALUES (1, 100, 3, 1000), (4, 101, 6, 1001); + + CREATE INDEX t1a ON t1(a); + CREATE INDEX t2a ON t2(a, b, c); + + PRAGMA writable_schema = 1; + UPDATE sqlite_master SET sql = 'CREATE INDEX t2a ON t2(a)' WHERE name='t2a'; +---- +stmt 0 ok +stmt 51 ok +stmt 102 err 1 -1 171 no such table: t1 +stmt 171 err 1 -1 245 no such table: t2 +stmt 245 err 1 -1 275 no such table: main.t1 +stmt 275 err 1 -1 310 no such table: main.t2 +stmt 310 ok +stmt 341 ok +==== 3.1 + + INSERT INTO t1 SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 4.1 + + PRAGMA writable_schema=ON; -- bypass improved sqlite_master consistency checking + INSERT INTO t3 SELECT * FROM t2; +---- +stmt 0 ok +stmt 29 err 1 -1 118 no such table: t3 +==== 5.1 + + INSERT INTO t1(b) VALUES(zeroblob(40000)); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 5.2 + + DROP INDEX t1x2; +---- +stmt 0 err 1 -1 19 no such index: t1x2 +==== 5.3 + + INSERT INTO t1(b) VALUES(zeroblob(40000)); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 6.1 + + BEGIN; + INSERT INTO t1(b) VALUES(1); + INSERT INTO t1(b) VALUES(2); + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 42 no such table: t1 +stmt 42 err 1 -1 75 no such table: t1 +stmt 75 ok +==== 7.1 + + SELECT * FROM sqlite_master; +---- +stmt 0 ok +==== 8.1 + + PRAGMA writable_schema=ON; -- bypass improved sqlite_master consistency checking + INSERT INTO t3 SELECT * FROM t2; +---- +stmt 0 ok +stmt 29 err 1 -1 118 no such table: t3 +==== 9.1 + + SAVEPOINT one; +---- +stmt 0 ok +==== 9.3 + + INSERT INTO t1(b,c) VALUES(5,6); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 9.3.dup1 + + ROLLBACK TO one; +---- +stmt 0 ok +==== 10.1 + + PRAGMA writable_schema=ON; -- bypass improved sqlite_master consistency checking + SELECT * FROM t1 WHERE a<='2019-05-09' ORDER BY a DESC; +---- +stmt 0 ok +stmt 29 err 1 -1 141 no such table: t1 +==== 11.1 + + PRAGMA writable_schema=ON; -- bypass improved sqlite_master consistency checking + DELETE FROM t3 WHERE x IN (SELECT x FROM t4); +---- +stmt 0 ok +stmt 29 err 1 -1 131 no such table: t3 +==== 12.1 + + SELECT CAST((SELECT b FROM t1 WHERE 16=c) AS int) FROM t1 WHERE 16=c; +---- +stmt 0 err 1 -1 72 no such table: t1 +==== 13.1 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x-2019 FROM c WHERE x<2) + INSERT INTO t1(b,c) SELECT last_insert_rowid(), x FROM c; +---- +stmt 0 err 1 -1 140 no such table: t1 +==== 14.1 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 14.2 + + ALTER TABLE t1 RENAME TO alkjalkjdfiiiwuer987lkjwer82mx97sf98788s9789s; +---- +stmt 0 err 1 -1 76 no such table: t1 +==== 15.1 + + PRAGMA cell_size_check = 0; + UPDATE c1 SET c= NOT EXISTS(SELECT 1 FROM c1 ORDER BY (SELECT 1 FROM c1 ORDER BY a)) +10 WHERE d BETWEEN 4 AND 7; +---- +stmt 0 ok +stmt 30 err 1 -1 146 no such table: c1 +==== 15.2 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 16.0 + + CREATE TABLE t1(w, x, y, z, UNIQUE(w, x), UNIQUE(y, z)); + INSERT INTO t1 VALUES(1, 1, 1, 1); + + CREATE TABLE t1idx(x, y, i INTEGER, PRIMARY KEY(x)) WITHOUT ROWID; + INSERT INTO t1idx VALUES(10, NULL, 5); + + PRAGMA writable_schema = 1; + UPDATE sqlite_master SET rootpage = ( + SELECT rootpage FROM sqlite_master WHERE name='t1idx' + ) WHERE type = 'index'; +---- +stmt 0 ok +stmt 59 err 1 -1 96 no such table: t1 +stmt 96 ok +stmt 166 err 1 -1 207 no such table: t1idx +stmt 207 ok +stmt 238 ok +==== 16.1 + + PRAGMA writable_schema = ON; + INSERT INTO t1(rowid, w, x, y, z) VALUES(5, 10, 11, 10, NULL); +---- +stmt 0 ok +stmt 31 err 1 -1 96 no such table: t1 +==== 17.0 + + CREATE TABLE t1(o INTEGER PRIMARY KEY, t UNIQUE); + INSERT INTO t1(t) VALUES(randomblob(123)); + INSERT INTO t1(t) SELECT randomblob(123) FROM t1; + INSERT INTO t1(t) SELECT randomblob(123) FROM t1; + INSERT INTO t1(t) SELECT randomblob(123) FROM t1; + INSERT INTO t1(t) SELECT randomblob(123) FROM t1; + INSERT INTO t1(t) SELECT randomblob(123) FROM t1; + INSERT INTO t1(t) SELECT randomblob(123) FROM t1; + INSERT INTO t1(t) SELECT randomblob(123) FROM t1; + INSERT INTO t1(t) SELECT randomblob(123) FROM t1; + INSERT INTO t1(t) SELECT randomblob(123) FROM t1; + + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(-1, 'b'); +---- +stmt 0 ok +stmt 54 err 1 -1 101 no such table: t1 +stmt 101 err 1 -1 155 no such table: t1 +stmt 155 err 1 -1 209 no such table: t1 +stmt 209 err 1 -1 263 no such table: t1 +stmt 263 err 1 -1 317 no such table: t1 +stmt 317 err 1 -1 371 no such table: t1 +stmt 371 err 1 -1 425 no such table: t1 +stmt 425 err 1 -1 479 no such table: t1 +stmt 479 err 1 -1 533 no such table: t1 +stmt 533 err 1 -1 587 no such table: t1 +stmt 587 ok +stmt 621 err 1 -1 657 no such table: t1 +==== 17.2 + + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== 18.1 + + SELECT + json_group_array(c) OVER win4 + FROM t1 + WINDOW win4 AS ( + ORDER BY a COLLATE nocase RANGE BETWEEN 1.0 PRECEDING AND CURRENT ROW + ) +---- +stmt 0 err 1 -1 161 no such table: t1 +==== 19.1 + + PRAGMA writable_schema=ON; +---- +stmt 0 ok +==== 19.2 + + UPDATE t1 SET a=1; +---- +stmt 0 err 1 -1 21 no such table: t1 +==== 19.3 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INTEGER, d TEXT); + CREATE INDEX i1 ON t1((NULL)); + INSERT INTO t1 VALUES(1, NULL, 1, 'text value'); + PRAGMA writable_schema = on; + UPDATE sqlite_schema SET + sql = 'CREATE INDEX i1 ON t1(b, c, d)', + tbl_name = 't1', + type='index' + WHERE name='i1'; +---- +stmt 0 ok +stmt 69 err 1 -1 102 no such table: main.t1 +stmt 102 err 1 -1 153 no such table: t1 +stmt 153 ok +stmt 184 ok +==== 19.4 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 18.1.dup1 + + SELECT a FROM t1 WHERE b GLOB b AND b GLOB '0^x]␅6␚xz]'; +---- +stmt 0 err 1 -1 63 no such table: t1 diff --git a/parser/testdata/corruptM.metadata.json b/parser/testdata/corruptM.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corruptM.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corruptM.test b/parser/testdata/corruptM.test new file mode 100644 index 0000000..fc81554 --- /dev/null +++ b/parser/testdata/corruptM.test @@ -0,0 +1,114 @@ +==== corruptM-100 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(111,222,333); + CREATE INDEX i1 ON t1(b); + CREATE VIEW v2 AS SELECT 15,22; + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN SELECT 5; END; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 ok +stmt 26 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 92 no such table: main.t1 +stmt 92 ok +stmt 126 err 1 -1 171 no such table: main.t1 +stmt 186 ok +==== corruptM-101 + + PRAGMA writable_schema=on; + UPDATE sqlite_master SET tbl_name=NULL WHERE name='t1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 ok +stmt 29 ok +stmt 87 ok +==== corruptM-110 + + UPDATE sqlite_master SET tbl_name='tx' WHERE name='t1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 58 table sqlite_master may not be modified +stmt 58 ok +==== corruptM-112 + + UPDATE sqlite_master SET tbl_name='t1', type='tabl' WHERE name='t1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 71 table sqlite_master may not be modified +stmt 71 ok +==== corruptM-114 + + UPDATE sqlite_master SET tbl_name='t9',type='table',name='t9'WHERE name='t1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 80 table sqlite_master may not be modified +stmt 80 ok +==== corruptM-120 + + UPDATE sqlite_master SET name='t1',tbl_name='T1' WHERE name='t9'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 68 table sqlite_master may not be modified +stmt 68 ok +==== corruptM-130 + + UPDATE sqlite_master SET type='view' WHERE name='t1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 56 table sqlite_master may not be modified +stmt 56 ok +==== corruptM-140 + + UPDATE sqlite_master SET type='table', tbl_name='t1' WHERE name='t1'; + UPDATE sqlite_master SET tbl_name='tx' WHERE name='i1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 72 table sqlite_master may not be modified +stmt 72 err 1 -1 130 table sqlite_master may not be modified +stmt 130 ok +==== corruptM-150 + + UPDATE sqlite_master SET type='table', tbl_name='t1' WHERE name='i1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 72 table sqlite_master may not be modified +stmt 72 ok +==== corruptM-160 + + UPDATE sqlite_master SET type='view', tbl_name='t1' WHERE name='i1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 71 table sqlite_master may not be modified +stmt 71 ok +==== corruptM-170 + + UPDATE sqlite_master SET type='index', tbl_name='t1' WHERE name='i1'; + UPDATE sqlite_master SET type='table', tbl_name='v2' WHERE name='v2'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 72 table sqlite_master may not be modified +stmt 72 err 1 -1 144 table sqlite_master may not be modified +stmt 144 ok +==== corruptM-180 + + UPDATE sqlite_master SET type='view',name='v3',tbl_name='v3' WHERE name='v2'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 80 table sqlite_master may not be modified +stmt 80 ok +==== corruptM-190 + + UPDATE sqlite_master SET type='view',name='v2',tbl_name='v2' WHERE name='v3'; + UPDATE sqlite_master SET type='view' WHERE name='r1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 80 table sqlite_master may not be modified +stmt 80 err 1 -1 136 table sqlite_master may not be modified +stmt 136 ok +==== corruptM-192 + + UPDATE sqlite_master SET type='trigger',tbl_name='v2' WHERE name='r1'; + SELECT type, name, tbl_name, '|' FROM sqlite_master; +---- +stmt 0 err 1 -1 73 table sqlite_master may not be modified +stmt 73 ok diff --git a/parser/testdata/corruptN.metadata.json b/parser/testdata/corruptN.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/corruptN.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/corruptN.test b/parser/testdata/corruptN.test new file mode 100644 index 0000000..01f770e --- /dev/null +++ b/parser/testdata/corruptN.test @@ -0,0 +1,174 @@ +==== 1.1 + + VACUUM; +---- +stmt 0 ok +==== 3.0 + + CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y); + PRAGMA writable_schema = 1; + UPDATE sqlite_schema + SET sql = 'CREATE TABLE sqlite_sequence(name-seq)' + WHERE name = 'sqlite_sequence'; +---- +stmt 0 ok +stmt 61 ok +stmt 93 ok +==== 3.1 + + PRAGMA writable_schema = 1; + INSERT INTO t1(y) VALUES('abc'); +---- +stmt 0 ok +stmt 32 err 1 -1 69 no such table: t1 +==== 4.1 + + CREATE TABLE x1(a INTEGER PRIMARY KEY, b UNIQUE, c UNIQUE); + INSERT INTO x1 VALUES(1, 1, 2); + INSERT INTO x1 VALUES(2, 2, 3); + INSERT INTO x1 VALUES(3, 3, 4); + INSERT INTO x1 VALUES(4, 5, 6); + PRAGMA writable_schema = 1; + + UPDATE sqlite_schema SET rootpage = ( + SELECT rootpage FROM sqlite_schema WHERE name = 'sqlite_autoindex_x1_2' + ) WHERE name = 'sqlite_autoindex_x1_1'; +---- +stmt 0 ok +stmt 64 err 1 -1 100 no such table: x1 +stmt 100 err 1 -1 136 no such table: x1 +stmt 136 err 1 -1 172 no such table: x1 +stmt 172 err 1 -1 208 no such table: x1 +stmt 208 ok +stmt 240 ok +==== 4.2 + + PRAGMA writable_schema = 1; + REPLACE INTO x1 VALUES(5, 2, 3); +---- +stmt 0 ok +stmt 32 err 1 -1 69 no such table: x1 +==== 5.0 + + CREATE TABLE t1(a, b); + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1b ON t1(b); + + PRAGMA writable_schema = 1; + UPDATE sqlite_schema + SET sql = strreplace(sql, 't1', 'json_each') + WHERE type='index'; +---- +stmt 0 ok +stmt 27 err 1 -1 58 no such table: main.t1 +stmt 58 err 1 -1 89 no such table: main.t1 +stmt 89 ok +stmt 122 err 1 165 226 no such function: strreplace +==== 5.1 + + PRAGMA writable_schema = 1; + SELECT * FROM t1 +---- +stmt 0 ok +stmt 34 err 1 -1 58 no such table: t1 +==== 6.0 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size=1024; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1(b) VALUES(zeroblob(300)),(zeroblob(300)),(zeroblob(300)),(zeroblob(300)); + CREATE TABLE t2(a); + CREATE TRIGGER t1tr BEFORE UPDATE ON t1 BEGIN DELETE FROM t2; END; + PRAGMA writable_schema=ON; + UPDATE sqlite_schema SET rootpage=3 WHERE rowid=2; + PRAGMA writable_schema=RESET; + INSERT INTO t2 VALUES('active'),('boomer'),('atom'),('atomic'), + ('alpha channel backup abandon test aback boomer atom alpha active'); +---- +stmt 0 ok +stmt 26 ok +stmt 51 ok +stmt 96 err 1 -1 187 no such table: t1 +stmt 187 ok +stmt 209 err 1 -1 257 no such table: main.t1 +stmt 278 ok +stmt 307 ok +stmt 360 ok +stmt 392 err 1 -1 537 no such table: t2 +==== 6.1 + + UPDATE t1 SET b=zeroblob(299); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 6.2 + + -- Make "t1" a large table. Large enough that the children of the root + -- node are interior nodes. + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = 0; + CREATE TABLE t1(x); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<500 + ) + INSERT INTO t1 SELECT zeroblob(300) FROM s; + + CREATE TABLE t2(y); + CREATE TRIGGER tr BEFORE UPDATE ON t1 BEGIN + DELETE FROM t2; + END; + + -- Set the root of table t2 to 137 - the leftmost child of the root of t1. + PRAGMA writable_schema = ON; + UPDATE sqlite_schema SET rootpage = 137 WHERE name='t2'; + PRAGMA writable_schema = RESET; +---- +stmt 0 ok +stmt 130 ok +stmt 156 ok +stmt 178 err 1 -1 298 no such table: t1 +stmt 298 ok +stmt 323 err 1 -1 369 no such table: main.t1 +stmt 396 ok +stmt 507 ok +stmt 566 ok +==== 6.3 + + -- Run an UPDATE on t1 that will hit a child of page 136. Have the trigger + -- clear page 136 and its children. Assert fails. + UPDATE t1 SET x='hello world' WHERE rowid=1; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== 7.0 + + BEGIN; + CREATE TABLE p1(x PRIMARY KEY); + CREATE TABLE c1(y); + + PRAGMA schema_version = 0; + PRAGMA writable_schema = RESET; + + INSERT INTO c1 VALUES(1000); + ROLLBACK; +---- +stmt 0 ok +stmt 9 ok +stmt 43 ok +stmt 65 ok +stmt 95 ok +stmt 129 err 1 -1 161 no such table: c1 +stmt 161 ok +==== 7.1 + + PRAGMA table_info = p1; +---- +stmt 0 ok +==== 7.2 + + SELECT * FROM p1; +---- +stmt 0 err 1 -1 20 no such table: p1 +==== 7.3 + + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/cost.metadata.json b/parser/testdata/cost.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/cost.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/cost.test b/parser/testdata/cost.test new file mode 100644 index 0000000..09be683 --- /dev/null +++ b/parser/testdata/cost.test @@ -0,0 +1,120 @@ +==== 1.1 + + CREATE TABLE t3(id INTEGER PRIMARY KEY, b NOT NULL); + CREATE TABLE t4(c, d, e); + CREATE UNIQUE INDEX i3 ON t3(b); + CREATE UNIQUE INDEX i4 ON t4(c, d); +---- +stmt 0 ok +stmt 55 ok +stmt 83 err 1 -1 118 no such table: main.t3 +stmt 118 err 1 -1 156 no such table: main.t4 +==== 2.1 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: main.t1 +==== 3.1 + + CREATE TABLE t5(a INTEGER PRIMARY KEY,b,c,d,e,f,g); + CREATE INDEX t5b ON t5(b); + CREATE INDEX t5c ON t5(c); + CREATE INDEX t5d ON t5(d); + CREATE INDEX t5e ON t5(e); + CREATE INDEX t5f ON t5(f); + CREATE INDEX t5g ON t5(g); +---- +stmt 0 ok +stmt 54 err 1 -1 83 no such table: main.t5 +stmt 83 err 1 -1 112 no such table: main.t5 +stmt 112 err 1 -1 141 no such table: main.t5 +stmt 141 err 1 -1 170 no such table: main.t5 +stmt 170 err 1 -1 199 no such table: main.t5 +stmt 199 err 1 -1 228 no such table: main.t5 +==== 4.1 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 81 no such table: main.t1 +==== 5.1 + + CREATE TABLE t2(x, y); + CREATE INDEX t2i1 ON t2(x); +---- +stmt 0 ok +stmt 25 err 1 -1 55 no such table: main.t2 +==== 6.1 + + CREATE TABLE t3(a INTEGER PRIMARY KEY, b, c); + CREATE INDEX t3i1 ON t3(b); + CREATE INDEX t3i2 ON t3(c); +---- +stmt 0 ok +stmt 48 err 1 -1 78 no such table: main.t3 +stmt 78 err 1 -1 108 no such table: main.t3 +==== 7.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c,d,e,f,g); + CREATE INDEX t1b ON t1(b); + CREATE INDEX t1c ON t1(c); + CREATE INDEX t1d ON t1(d); + CREATE INDEX t1e ON t1(e); + CREATE INDEX t1f ON t1(f); + CREATE INDEX t1g ON t1(g); +---- +stmt 0 ok +stmt 54 err 1 -1 83 no such table: main.t1 +stmt 83 err 1 -1 112 no such table: main.t1 +stmt 112 err 1 -1 141 no such table: main.t1 +stmt 141 err 1 -1 170 no such table: main.t1 +stmt 170 err 1 -1 199 no such table: main.t1 +stmt 199 err 1 -1 228 no such table: main.t1 +==== 8.1 + + CREATE TABLE composer( + cid INTEGER PRIMARY KEY, + cname TEXT + ); + CREATE TABLE album( + aid INTEGER PRIMARY KEY, + aname TEXT + ); + CREATE TABLE track( + tid INTEGER PRIMARY KEY, + cid INTEGER REFERENCES composer, + aid INTEGER REFERENCES album, + title TEXT + ); + CREATE INDEX track_i1 ON track(cid); + CREATE INDEX track_i2 ON track(aid); +---- +stmt 0 ok +stmt 74 ok +stmt 145 ok +stmt 287 err 1 -1 326 no such table: main.track +stmt 326 err 1 -1 365 no such table: main.track +==== 9.1 + + CREATE TABLE t1( + a,b,c,d,e, f,g,h,i,j, + k,l,m,n,o, p,q,r,s,t + ); + CREATE INDEX i1 ON t1(k,l,m,n,o,p,q,r,s,t); +---- +stmt 0 ok +stmt 75 err 1 -1 121 no such table: main.t1 +==== 10.1 + + CREATE TABLE t6(a, b, c); + CREATE INDEX t6i1 ON t6(a, b); + CREATE INDEX t6i2 ON t6(c); +---- +stmt 0 ok +stmt 30 err 1 -1 65 no such table: main.t6 +stmt 65 err 1 -1 97 no such table: main.t6 diff --git a/parser/testdata/count.metadata.json b/parser/testdata/count.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/count.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/count.test b/parser/testdata/count.test new file mode 100644 index 0000000..35abc72 --- /dev/null +++ b/parser/testdata/count.test @@ -0,0 +1,162 @@ +==== count-generated + + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 70 no such table: t1 +stmt 70 err 1 -1 101 no such table: t1 +==== count-generated.dup1 + + INSERT INTO t1 SELECT * FROM t1; -- 4 + INSERT INTO t1 SELECT * FROM t1; -- 8 + INSERT INTO t1 SELECT * FROM t1; -- 16 + INSERT INTO t1 SELECT * FROM t1; -- 32 + INSERT INTO t1 SELECT * FROM t1; -- 64 + INSERT INTO t1 SELECT * FROM t1; -- 128 + INSERT INTO t1 SELECT * FROM t1; -- 256 + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 204 no such table: t1 +stmt 204 err 1 -1 259 no such table: t1 +stmt 259 err 1 -1 314 no such table: t1 +stmt 314 err 1 -1 369 no such table: t1 +stmt 369 err 1 -1 416 no such table: t1 +==== count-generated.dup2 + + INSERT INTO t1 SELECT * FROM t1; -- 512 + INSERT INTO t1 SELECT * FROM t1; -- 1024 + INSERT INTO t1 SELECT * FROM t1; -- 2048 + INSERT INTO t1 SELECT * FROM t1; -- 4096 + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 207 no such table: t1 +stmt 207 err 1 -1 255 no such table: t1 +==== count-generated.dup3 + + BEGIN; + INSERT INTO t1 SELECT * FROM t1; -- 8192 + INSERT INTO t1 SELECT * FROM t1; -- 16384 + INSERT INTO t1 SELECT * FROM t1; -- 32768 + INSERT INTO t1 SELECT * FROM t1; -- 65536 + COMMIT; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 13 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 109 no such table: t1 +stmt 109 err 1 -1 166 no such table: t1 +stmt 166 err 1 -1 223 no such table: t1 +stmt 223 ok +stmt 255 err 1 -1 286 no such table: t1 +==== count-2.2 +SELECT count(DISTINCT *) FROM t2 +---- +stmt 0 err 1 22 23 near "*": syntax error +==== count-2.6 +SELECT count(DISTINCT) FROM t2 +---- +stmt 0 err 1 -1 31 no such table: t2 +==== count-2.9a + + SELECT count(*) FROM t2 HAVING count(*)>1; +---- +stmt 0 err 1 -1 45 no such table: t2 +==== count-2.9b + + SELECT count(*) FROM t2 HAVING count(*)<10; +---- +stmt 0 err 1 -1 46 no such table: t2 +==== count-3.1 + + CREATE TABLE t3(a, b); + SELECT a FROM (SELECT count(*) AS a FROM t3) WHERE a==0; +---- +stmt 0 ok +stmt 27 err 1 -1 88 no such table: t3 +==== count-3.2 + + SELECT a FROM (SELECT count(*) AS a FROM t3) WHERE a==1; +---- +stmt 0 err 1 -1 61 no such table: t3 +==== count-4.1 + + CREATE TABLE t4(a, b); + INSERT INTO t4 VALUES('a', 'b'); + CREATE INDEX t4i1 ON t4(b, a); + SELECT count(*) FROM t4; +---- +stmt 0 ok +stmt 27 err 1 -1 64 no such table: t4 +stmt 64 err 1 -1 99 no such table: main.t4 +stmt 99 err 1 -1 128 no such table: t4 +==== count-4.2 + + CREATE INDEX t4i2 ON t4(b); + SELECT count(*) FROM t4; +---- +stmt 0 err 1 -1 32 no such table: main.t4 +stmt 32 err 1 -1 61 no such table: t4 +==== count-4.3 + + DROP INDEX t4i1; + CREATE INDEX t4i1 ON t4(b, a); + SELECT count(*) FROM t4; +---- +stmt 0 err 1 -1 21 no such index: t4i1 +stmt 21 err 1 -1 56 no such table: main.t4 +stmt 56 err 1 -1 85 no such table: t4 +==== count-5.1 + + CREATE TABLE t5(a TEXT PRIMARY KEY, b VARCHAR(50)) WITHOUT ROWID; + INSERT INTO t5 VALUES('bison','jazz'); + SELECT count(*) FROM t5; +---- +stmt 0 ok +stmt 68 err 1 -1 109 no such table: t5 +stmt 109 err 1 -1 136 no such table: t5 +==== count-6.1 + + CREATE TABLE t6(x); + SELECT count(DISTINCT) FROM t6 GROUP BY x; +---- +stmt 0 ok +stmt 22 err 1 -1 67 no such table: t6 +==== count-7.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT, c VARCHAR(1000)); + CREATE INDEX t1b ON t1(b); + INSERT INTO t1(a,b,c) values(1,2,'count.test cases for NOT INDEXED'); + ANALYZE; + UPDATE sqlite_stat1 SET stat='1000000 10' WHERE idx='t1b'; + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 66 err 1 -1 95 no such table: main.t1 +stmt 95 err 1 -1 167 no such table: t1 +stmt 167 ok +stmt 178 err 1 -1 239 no such table: sqlite_stat1 +stmt 239 ok +==== count-8.0 + + CREATE TABLE t7(a INT,b TEXT,c BLOB,d REAL); + CREATE TABLE t8(a INT,b TEXT,c BLOB,d REAL); + CREATE INDEX t8a ON t8(a); +---- +stmt 0 ok +stmt 47 ok +stmt 94 err 1 -1 123 no such table: main.t8 +==== count-8.1 + + SELECT * FROM t8 WHERE (a, b) IN ( + SELECT count(t8.b), count(*) FROM t7 AS ra0 ORDER BY count(*) + ) AND t8.b=0; +---- +stmt 0 err 1 -1 121 no such table: t8 diff --git a/parser/testdata/countofview.metadata.json b/parser/testdata/countofview.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/countofview.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/countofview.test b/parser/testdata/countofview.test new file mode 100644 index 0000000..a12ee01 --- /dev/null +++ b/parser/testdata/countofview.test @@ -0,0 +1,109 @@ +==== 1.0 + + CREATE TABLE t2(c); + CREATE TABLE t3(f); + + INSERT INTO t2 VALUES(1), (2); + INSERT INTO t3 VALUES(3); +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 78 no such table: t2 +stmt 78 err 1 -1 106 no such table: t3 +==== 1.1 + + select c from t2 union all select f from t3 limit 1 offset 1 +---- +stmt 0 err 1 -1 64 no such table: t3 +==== 1.2 + + select count(*) from ( + select c from t2 union all select f from t3 limit 1 offset 1 + ) +---- +stmt 0 err 1 -1 95 no such table: t3 +==== 1.3 + + select count(*) from ( + select c from t2 union all select f from t3 + ) +---- +stmt 0 err 1 -1 78 no such table: t3 +==== 2.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1),(99),('abc'); + CREATE VIEW v1(x,y) AS SELECT x,1 FROM t1 UNION ALL SELECT x,2 FROM t1; + SELECT count(*) FROM v1 WHERE x<>1; +---- +stmt 0 ok +stmt 22 err 1 -1 63 no such table: t1 +stmt 63 ok +stmt 137 err 1 -1 175 no such table: v1 +==== 2.1 + + SELECT count(*) FROM v1 GROUP BY y; +---- +stmt 0 err 1 -1 38 no such table: v1 +==== 3.1 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c) + SELECT count(*) FROM c; +---- +stmt 0 ok +==== 4.1 + + DROP TABLE t1; + DROP TABLE t2; + DROP TABLE t3; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t1 VALUES(4,'four'); + CREATE TABLE t2(c INTEGER PRIMARY KEY, d TEXT); + CREATE VIEW t3 AS SELECT a, b FROM t1 UNION ALL SELECT c, d FROM t2; + SELECT count(*) FROM t3 ORDER BY sum(a); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 err 1 -1 51 no such table: t3 +stmt 51 ok +stmt 101 err 1 -1 136 no such table: t1 +stmt 136 ok +stmt 186 ok +stmt 257 err 1 -1 300 no such table: t3 +==== 5.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t1 VALUES(1,'one'),(4,'four'); + CREATE TABLE t2(c INTEGER PRIMARY KEY, d TEXT); + INSERT INTO t2 VALUES(2,'two'),(5,'five'); + CREATE VIEW t3 AS SELECT a, b FROM t1 UNION ALL SELECT c, d FROM t2; + SELECT count(*) FROM t3 HAVING count(*)>0; +---- +stmt 0 ok +stmt 50 err 1 -1 95 no such table: t1 +stmt 95 ok +stmt 145 err 1 -1 190 no such table: t2 +stmt 190 ok +stmt 261 err 1 -1 306 no such table: t3 +==== 5.2 + + SELECT count(*) FROM t3 HAVING count(*)>5; +---- +stmt 0 err 1 -1 45 no such table: t3 +==== 5.3 + + SELECT count(*) FROM t3 HAVING max(b)>'mmm'; +---- +stmt 0 err 1 -1 47 no such table: t3 +==== 5.4 + + SELECT count(*) FROM t3 HAVING min(b)>'mmm'; +---- +stmt 0 err 1 -1 47 no such table: t3 +==== 5.5 + + SELECT count(*) FROM ( + SELECT a, max(b) FROM t1 HAVING a<100 UNION ALL SELECT c, d FROM t2 + ) +---- +stmt 0 err 1 -1 103 no such table: t2 diff --git a/parser/testdata/crash.metadata.json b/parser/testdata/crash.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/crash.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/crash.test b/parser/testdata/crash.test new file mode 100644 index 0000000..d20a819 --- /dev/null +++ b/parser/testdata/crash.test @@ -0,0 +1,28 @@ +==== crash-1.7 + + SELECT * FROM abc; +---- +stmt 0 err 1 -1 23 no such table: abc +==== crash-1.9 + + SELECT * FROM abc; +---- +stmt 0 err 1 -1 23 no such table: abc +==== crash-1.11 + + SELECT * FROM abc; +---- +stmt 0 err 1 -1 23 no such table: abc +==== crash-5.1 + + CREATE TABLE abc(a, b, c); -- Root page 3 + INSERT INTO abc VALUES(randstr(1500,1500), 0, 0); -- Overflow page 4 + INSERT INTO abc SELECT * FROM abc; + INSERT INTO abc SELECT * FROM abc; + INSERT INTO abc SELECT * FROM abc; +---- +stmt 0 ok +stmt 31 err 1 -1 125 no such table: abc +stmt 125 err 1 -1 185 no such table: abc +stmt 185 err 1 -1 224 no such table: abc +stmt 224 err 1 -1 263 no such table: abc diff --git a/parser/testdata/crash3.metadata.json b/parser/testdata/crash3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/crash3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/crash3.test b/parser/testdata/crash3.test new file mode 100644 index 0000000..51ff3fc --- /dev/null +++ b/parser/testdata/crash3.test @@ -0,0 +1,50 @@ +==== crash3-generated + + PRAGMA page_size = 1024; + BEGIN; + CREATE TABLE abc(a, b, c); + INSERT INTO abc VALUES(1, 2, 3); + COMMIT; +---- +stmt 0 ok +stmt 33 ok +stmt 48 ok +stmt 83 err 1 -1 124 no such table: abc +stmt 124 ok +==== crash3-2.0 + + BEGIN; + CREATE TABLE abc(a PRIMARY KEY, b, c); + CREATE TABLE def(d PRIMARY KEY, e, f); + PRAGMA default_cache_size = 10; + INSERT INTO abc VALUES(randstr(10,1000),randstr(10,1000),randstr(10,1000)); + INSERT INTO abc + SELECT randstr(10,1000),randstr(10,1000),randstr(10,1000) FROM abc; + INSERT INTO abc + SELECT randstr(10,1000),randstr(10,1000),randstr(10,1000) FROM abc; + INSERT INTO abc + SELECT randstr(10,1000),randstr(10,1000),randstr(10,1000) FROM abc; + INSERT INTO abc + SELECT randstr(10,1000),randstr(10,1000),randstr(10,1000) FROM abc; + INSERT INTO abc + SELECT randstr(10,1000),randstr(10,1000),randstr(10,1000) FROM abc; + INSERT INTO abc + SELECT randstr(10,1000),randstr(10,1000),randstr(10,1000) FROM abc; + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 54 ok +stmt 97 ok +stmt 133 err 1 -1 213 no such table: abc +stmt 213 err 1 -1 308 no such table: abc +stmt 308 err 1 -1 403 no such table: abc +stmt 403 err 1 -1 498 no such table: abc +stmt 498 err 1 -1 593 no such table: abc +stmt 593 err 1 -1 688 no such table: abc +stmt 688 err 1 -1 783 no such table: abc +stmt 783 ok +==== crash3-generated.dup1 +PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/crash7.metadata.json b/parser/testdata/crash7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/crash7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/crash7.test b/parser/testdata/crash7.test new file mode 100644 index 0000000..9d488f2 --- /dev/null +++ b/parser/testdata/crash7.test @@ -0,0 +1,37 @@ +==== 2.0 + + CREATE TABLE t1(a, b, UNIQUE(a, b)); + INSERT INTO t1 VALUES(randomblob(100), randomblob(100)); + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1; + DELETE FROM t1 WHERE rowid%2; +---- +stmt 0 ok +stmt 39 err 1 -1 98 no such table: t1 +stmt 98 err 1 -1 164 no such table: t1 +stmt 164 err 1 -1 230 no such table: t1 +stmt 230 err 1 -1 296 no such table: t1 +stmt 296 err 1 -1 362 no such table: t1 +stmt 362 err 1 -1 428 no such table: t1 +stmt 428 err 1 -1 494 no such table: t1 +stmt 494 err 1 -1 560 no such table: t1 +stmt 560 err 1 -1 626 no such table: t1 +stmt 626 err 1 -1 692 no such table: t1 +stmt 692 err 1 -1 758 no such table: t1 +stmt 758 err 1 -1 824 no such table: t1 +stmt 824 err 1 -1 890 no such table: t1 +stmt 890 err 1 -1 956 no such table: t1 +stmt 956 err 1 -1 1022 no such table: t1 +stmt 1022 err 1 -1 1054 no such table: t1 diff --git a/parser/testdata/crash8.metadata.json b/parser/testdata/crash8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/crash8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/crash8.test b/parser/testdata/crash8.test new file mode 100644 index 0000000..6d4d3d0 --- /dev/null +++ b/parser/testdata/crash8.test @@ -0,0 +1,125 @@ +==== crash8-1.1 + + PRAGMA auto_vacuum=OFF; + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + INSERT INTO t1 VALUES(1, randstr(1000,1000)); + INSERT INTO t1 VALUES(2, randstr(1000,1000)); + INSERT INTO t1 VALUES(3, randstr(1000,1000)); + INSERT INTO t1 VALUES(4, randstr(1000,1000)); + INSERT INTO t1 VALUES(5, randstr(1000,1000)); + INSERT INTO t1 VALUES(6, randstr(1000,1000)); + CREATE TABLE t2(a, b); + CREATE TABLE t3(a, b); + CREATE TABLE t4(a, b); + CREATE TABLE t5(a, b); + CREATE TABLE t6(a, b); + CREATE TABLE t7(a, b); + CREATE TABLE t8(a, b); + CREATE TABLE t9(a, b); + CREATE TABLE t10(a, b); + PRAGMA integrity_check +---- +stmt 0 ok +stmt 28 ok +stmt 55 err 1 -1 88 no such table: main.t1 +stmt 88 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 188 no such table: t1 +stmt 188 err 1 -1 238 no such table: t1 +stmt 238 err 1 -1 288 no such table: t1 +stmt 288 err 1 -1 338 no such table: t1 +stmt 338 err 1 -1 388 no such table: t1 +stmt 388 ok +stmt 415 ok +stmt 442 ok +stmt 469 ok +stmt 496 ok +stmt 523 ok +stmt 550 ok +stmt 577 ok +stmt 604 ok +stmt 632 ok +==== crash8-1.3 +PRAGMA integrity_check +---- +stmt 0 ok +==== crash8-2.3 +PRAGMA integrity_check +---- +stmt 0 ok +==== crash8-3.2 + + PRAGMA synchronous = off; + BEGIN; + DELETE FROM t1; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 30 ok +stmt 41 err 1 -1 61 no such table: t1 +stmt 61 err 1 -1 90 no such table: t1 +==== crash8-4.1 + + PRAGMA journal_mode = persist; + CREATE TABLE ab(a, b); + INSERT INTO ab VALUES(0, 'abc'); + INSERT INTO ab VALUES(1, NULL); + INSERT INTO ab VALUES(2, NULL); + INSERT INTO ab VALUES(3, NULL); + INSERT INTO ab VALUES(4, NULL); + INSERT INTO ab VALUES(5, NULL); + INSERT INTO ab VALUES(6, NULL); + UPDATE ab SET b = randstr(1000,1000); + ATTACH 'test2.db' AS aux; + PRAGMA aux.journal_mode = persist; + CREATE TABLE aux.ab(a, b); + INSERT INTO aux.ab SELECT * FROM main.ab; + + UPDATE aux.ab SET b = randstr(1000,1000) WHERE a>=1; + UPDATE ab SET b = randstr(1000,1000) WHERE a>=1; +---- +stmt 0 ok +stmt 37 ok +stmt 66 err 1 -1 105 no such table: ab +stmt 105 err 1 -1 143 no such table: ab +stmt 143 err 1 -1 181 no such table: ab +stmt 181 err 1 -1 219 no such table: ab +stmt 219 err 1 -1 257 no such table: ab +stmt 257 err 1 -1 295 no such table: ab +stmt 295 err 1 -1 333 no such table: ab +stmt 333 err 1 -1 377 no such table: ab +stmt 377 ok +stmt 409 err 1 423 450 unknown database aux +stmt 450 err 1 470 477 unknown database aux +stmt 483 err 1 -1 531 no such table: aux.ab +stmt 531 err 1 -1 591 no such table: aux.ab +stmt 591 err 1 -1 646 no such table: ab +==== crash8-4.2 + + BEGIN; + UPDATE aux.ab SET b = 'def' WHERE a = 0; + UPDATE main.ab SET b = 'def' WHERE a = 0; + COMMIT; +---- +stmt 0 ok +stmt 13 err 1 -1 62 no such table: aux.ab +stmt 62 err 1 -1 112 no such table: main.ab +stmt 112 ok +==== crash8-4.3 + + UPDATE aux.ab SET b = randstr(1000,1000) WHERE a>=1; + UPDATE ab SET b = randstr(1000,1000) WHERE a>=1; +---- +stmt 0 err 1 -1 59 no such table: aux.ab +stmt 59 err 1 -1 114 no such table: ab +==== crash8-4.6 + + SELECT b FROM main.ab WHERE a = 0; + SELECT b FROM aux.ab WHERE a = 0; +---- +stmt 0 err 1 -1 41 no such table: main.ab +stmt 41 err 1 -1 81 no such table: aux.ab +==== crash8-4.9 + SELECT b FROM aux.ab WHERE a = 0 +---- +stmt 0 err 1 -1 34 no such table: aux.ab diff --git a/parser/testdata/crash9.metadata.json b/parser/testdata/crash9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/crash9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/crash9.test b/parser/testdata/crash9.test new file mode 100644 index 0000000..feb242d --- /dev/null +++ b/parser/testdata/crash9.test @@ -0,0 +1,21 @@ +==== 1.0 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y); + CREATE INDEX i1 ON t1(y); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<10 + ) + INSERT INTO t1 SELECT i, randomblob(900) FROM s; + + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t2(x, y); +---- +stmt 0 ok +stmt 45 err 1 -1 73 no such table: main.t1 +stmt 73 err 1 -1 197 no such table: t1 +stmt 197 ok +stmt 226 err 1 242 249 unknown database aux +==== crash9-generated + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/crashM.metadata.json b/parser/testdata/crashM.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/crashM.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/crashM.test b/parser/testdata/crashM.test new file mode 100644 index 0000000..f73e15a --- /dev/null +++ b/parser/testdata/crashM.test @@ -0,0 +1,38 @@ +==== 1.0 + + ATTACH 'file:test2.db?8_3_names=1' AS aux; + + CREATE TABLE t1(x, y); + CREATE INDEX t1x ON t1(x); + CREATE INDEX t1y ON t1(y); + + CREATE TABLE aux.t2(x, y); + CREATE INDEX aux.t2x ON t2(x); + CREATE INDEX aux.t2y ON t2(y); + + WITH s(a) AS ( + SELECT 1 UNION ALL SELECT a+1 FROM s WHERE a<1000 + ) + INSERT INTO t1 SELECT a, randomblob(500) FROM s; + + WITH s(a) AS ( + SELECT 1 UNION ALL SELECT a+1 FROM s WHERE a<1000 + ) + INSERT INTO t2 SELECT a, randomblob(500) FROM s; +---- +stmt 0 ok +stmt 45 ok +stmt 71 err 1 -1 100 no such table: main.t1 +stmt 100 err 1 -1 129 no such table: main.t1 +stmt 129 err 1 146 153 unknown database aux +stmt 159 err 1 175 192 unknown database aux +stmt 192 err 1 208 225 unknown database aux +stmt 225 err 1 -1 352 no such table: t1 +stmt 352 err 1 -1 479 no such table: t2 +==== crashM-generated + + PRAGMA main.integrity_check; + PRAGMA aux.integrity_check; +---- +stmt 0 ok +stmt 33 err 1 45 65 unknown database aux diff --git a/parser/testdata/createtab.metadata.json b/parser/testdata/createtab.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/createtab.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/createtab.test b/parser/testdata/createtab.test new file mode 100644 index 0000000..35ca470 --- /dev/null +++ b/parser/testdata/createtab.test @@ -0,0 +1,32 @@ +==== createtab-generated + + CREATE TABLE t2(a,b); + INSERT INTO t2 VALUES(1,2); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t2 +stmt 62 err 1 -1 86 no such table: t2 +==== createtab-generated.dup1 + + CREATE TABLE t3(a,b); + INSERT INTO t3 VALUES(4,5); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t3 +stmt 62 err 1 -1 86 no such table: t3 +==== createtab-generated.dup2 + + CREATE TABLE t4(a,b); + INSERT INTO t4 VALUES('abc','xyz'); + SELECT * FROM t4; +---- +stmt 0 ok +stmt 28 err 1 -1 70 no such table: t4 +stmt 70 err 1 -1 94 no such table: t4 +==== createtab-generated.dup3 + + SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1 +---- +stmt 0 ok diff --git a/parser/testdata/cse.metadata.json b/parser/testdata/cse.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/cse.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/cse.test b/parser/testdata/cse.test new file mode 100644 index 0000000..ce9d372 --- /dev/null +++ b/parser/testdata/cse.test @@ -0,0 +1,156 @@ +==== cse-1.2 + + SELECT b, b%b, b==b, b!=b, b='a' OR x='1'; + SELECT * FROM t2 RIGHT JOIN t1 ON true; +---- +stmt 0 ok +stmt 53 ok +stmt 113 err 1 -1 155 no such table: t2 +==== 5.1 + + CREATE TABLE v1 (c1, PRIMARY KEY( c1 )) WITHOUT ROWID; + CREATE VIEW v2 AS SELECT 0 FROM v1 WHERE c1 IS '' OR c1 > ''; + CREATE VIEW v3 AS SELECT 0 FROM v2 JOIN (v2 RIGHT JOIN v1); + CREATE VIEW v4 AS SELECT 0 FROM v3, v3; + SELECT * FROM v3 JOIN v3 AS a0, v4 AS a1, v4 AS a2, v3 AS a3, + v3 AS a4, v4 AS a5 + ORDER BY 1; +---- +stmt 0 ok +stmt 58 ok +stmt 124 ok +stmt 188 ok +stmt 232 err 1 -1 347 no such table: v3 +==== 6.0 + + CREATE TABLE t6(a TEXT UNIQUE, b TEXT); + INSERT INTO t6(a,b) VALUES('uvw','xyz'),('abc','def'); + WITH v1(a) AS (SELECT a COLLATE NOCASE FROM t6) + SELECT v1.a, count(*) FROM t6 LEFT JOIN v1 ON true + GROUP BY 1 + HAVING (SELECT true FROM t6 AS aa LEFT JOIN t6 AS bb ON length(v1.a)>5); +---- +stmt 0 ok +stmt 42 err 1 -1 99 no such table: t6 +stmt 99 err 1 -1 291 no such table: t6 +==== 7.1 + + CREATE TABLE t1(a INT PRIMARY KEY) WITHOUT ROWID; + CREATE TABLE t2(b INT PRIMARY KEY) WITHOUT ROWID; + CREATE TABLE t3(c INT PRIMARY KEY) WITHOUT ROWID; + INSERT INTO t1(a) VALUES(1),(2); + INSERT INTO t2(b) VALUES(4),(8); + INSERT INTO t3(c) VALUES(16),(32); + CREATE VIEW v4(d) AS SELECT c FROM t3; + SELECT * FROM t1 RIGHT JOIN t2 ON true JOIN v4 ON (d IS NULL); +---- +stmt 0 ok +stmt 52 ok +stmt 104 ok +stmt 156 err 1 -1 191 no such table: t1 +stmt 191 err 1 -1 226 no such table: t2 +stmt 226 err 1 -1 263 no such table: t3 +stmt 263 ok +stmt 304 err 1 -1 369 no such table: t1 diff --git a/parser/testdata/cursorhint2.metadata.json b/parser/testdata/cursorhint2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/cursorhint2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/cursorhint2.test b/parser/testdata/cursorhint2.test new file mode 100644 index 0000000..7dbc1db --- /dev/null +++ b/parser/testdata/cursorhint2.test @@ -0,0 +1,29 @@ +==== 1.0 + + PRAGMA automatic_index = 0; + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + CREATE TABLE t3(e, f); +---- +stmt 0 ok +stmt 30 ok +stmt 55 ok +stmt 80 ok +==== 2.0 + + CREATE TABLE x1(x, y); + CREATE TABLE x2(a, b); +---- +stmt 0 ok +stmt 25 ok +==== 3.0 + + CREATE TABLE t1 (i1 TEXT); + CREATE TABLE t2 (i2 TEXT UNIQUE); + INSERT INTO t1 VALUES('0'); + INSERT INTO t2 VALUES('0'); +---- +stmt 0 ok +stmt 29 ok +stmt 69 err 1 -1 103 no such table: t1 +stmt 103 err 1 -1 133 no such table: t2 diff --git a/parser/testdata/date.metadata.json b/parser/testdata/date.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/date.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/date.test b/parser/testdata/date.test new file mode 100644 index 0000000..b557dc8 --- /dev/null +++ b/parser/testdata/date.test @@ -0,0 +1,80 @@ +==== date-6.20 + + SELECT datetime('2000-05-29 14:16:00','localtime'); +---- +stmt 0 ok +==== date-6.25.1 + + SELECT datetime('2000-10-29 12:00Z','utc','utc'); +---- +stmt 0 ok +==== date-6.25.2 + + SELECT datetime('2000-10-29 12:00 +00:00','utc','utc'); +---- +stmt 0 ok +==== date-6.25.3 + + SELECT datetime('2000-10-29 12:00+00:00','utc','utc'); +---- +stmt 0 ok +==== date-6.25.4 + + SELECT datetime('2000-10-29 12:00:00+00:00','utc','utc'); +---- +stmt 0 ok +==== date-6.25.5 + + SELECT datetime('2000-10-29 12:00 -00:00','utc','utc'); +---- +stmt 0 ok +==== date-6.25.6 + + SELECT datetime('2000-10-29 12:00-00:00','utc','utc'); +---- +stmt 0 ok +==== date-6.25.7 + + SELECT datetime('2000-10-29 12:00:00-00:00','utc','utc'); +---- +stmt 0 ok +==== date-6.26 + + SELECT datetime('2000-10-29 12:00:00+05:00'); +---- +stmt 0 ok +==== date-6.27 + + SELECT datetime('2000-10-29 12:00:00+05:00', 'utc'); +---- +stmt 0 ok +==== date-6.28 + + SELECT datetime('2000-10-29 12:00:00Z', 'localtime'); +---- +stmt 0 ok +==== date-6.29 + + SELECT datetime('2000-10-29 12:00:00Z', 'utc', 'localtime'); +---- +stmt 0 ok +==== date-6.30 + + SELECT datetime('2000-10-29 12:00:00Z', 'utc', 'localtime', 'utc'); +---- +stmt 0 ok +==== date-6.31 + + SELECT datetime('2000-10-29 12:00:00Z', 'utc','localtime','utc','localtime'); +---- +stmt 0 ok +==== date-6.32 + + SELECT datetime('2000-10-29 12:00:00Z', 'localtime','localtime'); +---- +stmt 0 ok +==== date-13.1 + + SELECT strftime('%Y-%m-%d %H:%M:%f', julianday('2006-09-24T10:50:26.047')) +---- +stmt 0 ok diff --git a/parser/testdata/date2.metadata.json b/parser/testdata/date2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/date2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/date2.test b/parser/testdata/date2.test new file mode 100644 index 0000000..c9036fc --- /dev/null +++ b/parser/testdata/date2.test @@ -0,0 +1,215 @@ +==== date2-100 + + CREATE TABLE t1(x, y, CHECK( date(x) BETWEEN '2017-07-01' AND '2017-07-31' )); + INSERT INTO t1(x,y) VALUES('2017-07-20','one'); +---- +stmt 0 ok +stmt 81 err 1 -1 131 no such table: t1 +==== date2-110 + + INSERT INTO t1(x,y) VALUES('now','two'); +---- +stmt 0 err 1 -1 43 no such table: t1 +==== date2-120 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== date2-130 + + INSERT INTO t1(x,y) VALUES('2017-08-01','two'); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== date2-140 + + DROP TABLE t1; + CREATE TABLE t1(x, y, z AS (date())); + INSERT INTO t1(x,y) VALUES(1,2); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 57 err 1 -1 92 no such table: t1 +==== date2-200 + + CREATE TABLE t2(x,y); + INSERT INTO t2(x,y) VALUES(1, '2017-07-20'), (2, 'xyzzy'); + CREATE INDEX t2y ON t2(date(y)); +---- +stmt 0 ok +stmt 24 err 1 -1 85 no such table: t2 +stmt 85 err 1 -1 120 no such table: main.t2 +==== date2-210 + + INSERT INTO t2(x,y) VALUES(3, 'now'); +---- +stmt 0 err 1 -1 40 no such table: t2 +==== date2-220 + + SELECT x, y FROM t2 ORDER BY x; +---- +stmt 0 err 1 -1 34 no such table: t2 +==== date2-300 + + CREATE TABLE t3(a INTEGER PRIMARY KEY,b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000) + INSERT INTO t3(a,b) SELECT x, julianday('2017-07-01')+x FROM c; + UPDATE t3 SET b='now' WHERE a=500; +---- +stmt 0 ok +stmt 44 err 1 -1 190 no such table: t3 +stmt 190 err 1 -1 227 no such table: t3 +==== date2-310 + + CREATE INDEX t3b1 ON t3(datetime(b)); +---- +stmt 0 err 1 -1 40 no such table: main.t3 +==== date2-320 + + CREATE INDEX t3b1 ON t3(datetime(b)) WHERE typeof(b)='real'; +---- +stmt 0 err 1 -1 63 no such table: main.t3 +==== date2-330 + + EXPLAIN QUERY PLAN + SELECT a FROM t3 + WHERE typeof(b)='real' + AND datetime(b) BETWEEN '2017-07-04' AND '2017-07-08'; +---- +stmt 0 err 1 -1 126 no such table: t3 +==== date2-331 + + SELECT a FROM t3 + WHERE typeof(b)='real' + AND datetime(b) BETWEEN '2017-07-04' AND '2017-07-08' + ORDER BY a; +---- +stmt 0 err 1 -1 118 no such table: t3 +==== date2-400 + + CREATE TABLE t4(a INTEGER PRIMARY KEY,b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000) + INSERT INTO t4(a,b) SELECT x, julianday('2017-07-01')+x FROM c; + UPDATE t4 SET b='now' WHERE a=500; +---- +stmt 0 ok +stmt 44 err 1 -1 190 no such table: t4 +stmt 190 err 1 -1 227 no such table: t4 +==== date2-410 + + CREATE INDEX t4b1 ON t4(b) + WHERE date(b) BETWEEN '2017-06-01' AND '2017-08-31'; +---- +stmt 0 err 1 -1 86 no such table: main.t4 +==== date2-420 + + DELETE FROM t4 WHERE a=500; + CREATE INDEX t4b1 ON t4(b) + WHERE date(b) BETWEEN '2017-06-01' AND '2017-08-31'; +---- +stmt 0 err 1 -1 30 no such table: t4 +stmt 30 err 1 -1 116 no such table: main.t4 +==== date2-430 + + INSERT INTO t4(a,b) VALUES(9999,'now'); +---- +stmt 0 err 1 -1 42 no such table: t4 +==== date2-500 + + CREATE TABLE mods(x); + INSERT INTO mods(x) VALUES + ('+10 days'), + ('-10 days'), + ('+10 hours'), + ('-10 hours'), + ('+10 minutes'), + ('-10 minutes'), + ('+10 seconds'), + ('-10 seconds'), + ('+10 months'), + ('-10 months'), + ('+10 years'), + ('-10 years'), + ('start of month'), + ('start of year'), + ('start of day'), + ('weekday 1'), + ('unixepoch'); + CREATE TABLE t5(y,m); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + INSERT INTO t5(y,m) SELECT julianday('2017-07-01')+c.x, mods.x FROM c, mods; + CREATE INDEX t5x1 on t5(y) WHERE datetime(y,m) IS NOT NULL; +---- +stmt 0 ok +stmt 24 err 1 -1 396 no such table: mods +stmt 396 ok +stmt 420 err 1 -1 576 no such table: t5 +stmt 576 err 1 -1 638 no such table: main.t5 +==== date2-510 + + INSERT INTO t5(y,m) VALUES('2017-07-20','localtime'); +---- +stmt 0 err 1 -1 56 no such table: t5 +==== date2-520 + + INSERT INTO t5(y,m) VALUES('2017-07-20','utc'); +---- +stmt 0 err 1 -1 50 no such table: t5 +==== date2-600 + + CREATE TABLE t600(a REAL CHECK( a datetime(unixepoch('1970-01-01',format('%+d days',x)),'auto'); +---- +stmt 0 ok diff --git a/parser/testdata/dbdata.metadata.json b/parser/testdata/dbdata.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/dbdata.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/dbdata.test b/parser/testdata/dbdata.test new file mode 100644 index 0000000..24778f2 --- /dev/null +++ b/parser/testdata/dbdata.test @@ -0,0 +1,58 @@ +==== 1.0 + + CREATE TABLE T1(a, b); + INSERT INTO t1(rowid, a ,b) VALUES(5, 'v', 'five'); + INSERT INTO t1(rowid, a, b) VALUES(10, 'x', 'ten'); +---- +stmt 0 ok +stmt 25 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 133 no such table: t1 +==== 1.1 + + SELECT pgno, cell, field, quote(value) FROM sqlite_dbdata WHERE pgno=2; +---- +stmt 0 err 1 -1 74 no such table: sqlite_dbdata +==== 1.2 + + SELECT pgno, cell, field, quote(value) FROM sqlite_dbdata; +---- +stmt 0 err 1 -1 61 no such table: sqlite_dbdata +==== 1.4 + + DELETE FROM t1; + INSERT INTO t1 VALUES(NULL, randomblob(5050)); +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 67 no such table: t1 +==== 1.5 + + SELECT quote(value) FROM sqlite_dbdata WHERE pgno=2 AND cell=0 AND field=1; +---- +stmt 0 err 1 -1 80 no such table: sqlite_dbdata +==== 2.0 + + CREATE TABLE t1(a); + CREATE INDEX i1 ON t1(a); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<10 + ) + INSERT INTO t1 SELECT randomblob(900) FROM s; +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: main.t1 +stmt 50 err 1 -1 171 no such table: t1 +==== 2.1 + + SELECT * FROM sqlite_dbptr WHERE pgno=2; +---- +stmt 0 err 1 -1 43 no such table: sqlite_dbptr +==== 2.2 + + SELECT * FROM sqlite_dbptr WHERE pgno=3; +---- +stmt 0 err 1 -1 43 no such table: sqlite_dbptr +==== 2.3 + + SELECT * FROM sqlite_dbptr +---- +stmt 0 err 1 -1 30 no such table: sqlite_dbptr diff --git a/parser/testdata/dbfuzz001.metadata.json b/parser/testdata/dbfuzz001.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/dbfuzz001.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/dbfuzz001.test b/parser/testdata/dbfuzz001.test new file mode 100644 index 0000000..65a71c3 --- /dev/null +++ b/parser/testdata/dbfuzz001.test @@ -0,0 +1,50 @@ +==== dbfuzz001-101b + + PRAGMA writable_schema=on; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 31 ok +==== dbfuzz001-110 + + DELETE FROM t3 WHERE x IS NOT NULL AND +rowid=6; +---- +stmt 0 err 1 -1 51 no such table: t3 +==== dbfuzz001-320 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== dbfuzz001-330 + + DELETE FROM t3 WHERE x IN (SELECT x FROM t4); +---- +stmt 0 err 1 -1 48 no such table: t3 +==== dbfuzz001-430 + + CREATE TABLE t1(a INTEGER, b INT, c DEFAULT 0); +---- +stmt 0 ok +==== dbfuzz001-420 + + PRAGMA locking_mode=EXCLUSIVE; + PRAGMA journal_mode = memory; + INSERT INTO t1 VALUES(1,2,3); + PRAGMA journal_mode=PERSIST; +---- +stmt 0 ok +stmt 33 ok +stmt 65 err 1 -1 97 no such table: t1 +stmt 97 ok +==== dbfuzz001-430.dup1 + + INSERT INTO t1 VALUES(4, 5, 6); +---- +stmt 0 err 1 -1 34 no such table: t1 +==== dbfuzz001-440 + + PRAGMA journal_mode=MEMORY; + INSERT INTO t1 VALUES(7, 8, 9); +---- +stmt 0 ok +stmt 30 err 1 -1 64 no such table: t1 diff --git a/parser/testdata/dbpage.metadata.json b/parser/testdata/dbpage.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/dbpage.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/dbpage.test b/parser/testdata/dbpage.test new file mode 100644 index 0000000..a9cc478 --- /dev/null +++ b/parser/testdata/dbpage.test @@ -0,0 +1,199 @@ +==== 110 + + SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage('main') ORDER BY pgno; +---- +stmt 0 err 1 -1 81 no such table: sqlite_dbpage +==== 120 + + SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage WHERE pgno=2; +---- +stmt 0 err 1 -1 72 no such table: sqlite_dbpage +==== 130 + + SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage WHERE pgno=4; +---- +stmt 0 err 1 -1 72 no such table: sqlite_dbpage +==== 140 + + SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage WHERE pgno=5; +---- +stmt 0 err 1 -1 72 no such table: sqlite_dbpage +==== 150 + + SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage WHERE pgno=0; +---- +stmt 0 err 1 -1 72 no such table: sqlite_dbpage +==== 160 + + ATTACH ':memory:' AS aux1; + PRAGMA aux1.page_size=4096; + CREATE TABLE aux1.t2(a,b,c); + INSERT INTO t2 VALUES(11,12,13); + SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage('aux1'); +---- +stmt 0 ok +stmt 29 err 1 39 59 unknown database aux1 +stmt 59 err 1 75 83 unknown database aux1 +stmt 90 err 1 -1 125 no such table: t2 +stmt 125 err 1 -1 192 no such table: sqlite_dbpage +==== 170 + + CREATE TABLE aux1.x3(x,y,z); + INSERT INTO x3(x,y,z) VALUES(1,'main',1),(2,'aux1',1); + SELECT pgno, schema, substr(data,1,6) + FROM sqlite_dbpage, x3 + WHERE sqlite_dbpage.schema=x3.y AND sqlite_dbpage.pgno=x3.z + ORDER BY x3.x; +---- +stmt 0 err 1 16 24 unknown database aux1 +stmt 31 err 1 -1 88 no such table: x3 +stmt 88 err 1 -1 236 no such table: sqlite_dbpage +==== 200 + + CREATE TEMP TABLE saved_content(x); + INSERT INTO saved_content(x) SELECT data FROM sqlite_dbpage WHERE pgno=4; + UPDATE sqlite_dbpage SET data=zeroblob(4096) WHERE pgno=4; +---- +stmt 0 ok +stmt 38 err 1 -1 114 no such table: saved_content +stmt 114 err 1 -1 175 no such table: sqlite_dbpage +==== 210 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 220 + + SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage('main') ORDER BY pgno; +---- +stmt 0 err 1 -1 81 no such table: sqlite_dbpage +==== 230 + + UPDATE sqlite_dbpage SET data=(SELECT x FROM saved_content) WHERE pgno=4; +---- +stmt 0 err 1 -1 76 no such table: sqlite_dbpage +==== 230.dup1 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 240 + + DELETE FROM saved_content; + INSERT INTO saved_content(x) + SELECT data FROM sqlite_dbpage WHERE schema='aux1' AND pgno=2; +---- +stmt 0 err 1 -1 29 no such table: saved_content +stmt 29 err 1 -1 129 no such table: saved_content +==== 241 + + UPDATE sqlite_dbpage SET data=zeroblob(4096) WHERE pgno=2 AND schema='aux1'; +---- +stmt 0 err 1 -1 79 no such table: sqlite_dbpage +==== 250 + + PRAGMA aux1.integrity_check; +---- +stmt 0 err 1 10 31 unknown database aux1 +==== 260 + + UPDATE sqlite_dbpage SET data=(SELECT x FROM saved_content) + WHERE pgno=2 AND schema='aux1'; +---- +stmt 0 err 1 -1 97 no such table: sqlite_dbpage +==== 270 + + PRAGMA aux1.integrity_check; +---- +stmt 0 err 1 10 31 unknown database aux1 +==== 300 + + SELECT * FROM sqlite_temp_schema, sqlite_dbpage; +---- +stmt 0 err 1 -1 51 no such table: sqlite_dbpage +==== 400 + + ATTACH ':memory:' AS aux1; + BEGIN; + CREATE VIRTUAL TABLE aux1.t1 USING sqlite_dbpage; + INSERT INTO t1 VALUES(17, NULL); + COMMIT; +---- +stmt 0 ok +stmt 29 ok +stmt 38 err 1 64 92 unknown database aux1 +stmt 92 err 1 -1 129 no such table: t1 +stmt 129 ok +==== 500 + + PRAGMA auto_vacuum=NONE; + CREATE TABLE x1(a); + INSERT INTO x1 VALUES( hex(randomblob(2000)) ); + INSERT INTO x1 VALUES( hex(randomblob(2000)) ); + INSERT INTO x1 VALUES( hex(randomblob(2000)) ); + INSERT INTO x1 VALUES( hex(randomblob(2000)) ); + PRAGMA page_count; +---- +stmt 0 ok +stmt 27 ok +stmt 49 err 1 -1 99 no such table: x1 +stmt 99 err 1 -1 149 no such table: x1 +stmt 149 err 1 -1 199 no such table: x1 +stmt 199 err 1 -1 249 no such table: x1 +stmt 249 ok +==== 520 + + PRAGMA page_count; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 21 err 1 -1 41 no such table: t1 +==== 610 + + ATTACH 'test.db2' AS aux; + CREATE TABLE t1(x); + CREATE TABLE t2(y); + INSERT INTO t1 VALUES(1234); + CREATE TABLE aux.x1(z); +---- +stmt 0 ok +stmt 28 ok +stmt 50 ok +stmt 72 err 1 -1 103 no such table: t1 +stmt 103 err 1 119 126 unknown database aux +==== 640 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t2 +==== 700 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES( hex(randomblob(1000)) ); + INSERT INTO t1 VALUES( hex(randomblob(1000)) ); + INSERT INTO t1 VALUES( hex(randomblob(1000)) ); +---- +stmt 0 ok +stmt 22 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 122 no such table: t1 +stmt 122 err 1 -1 172 no such table: t1 +==== 720 + + PRAGMA integrity_check +---- +stmt 0 ok +==== 800 + + CREATE TABLE x1(x); +---- +stmt 0 ok +==== 810 + + SELECT pgno FROM sqlite_dbpage WHERE pgno=555 +---- +stmt 0 err 1 -1 49 no such table: sqlite_dbpage +==== 820 + + SELECT pgno FROM sqlite_dbpage WHERE pgno=4294967297 +---- +stmt 0 err 1 -1 56 no such table: sqlite_dbpage diff --git a/parser/testdata/dbpagefault.metadata.json b/parser/testdata/dbpagefault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/dbpagefault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/dbpagefault.test b/parser/testdata/dbpagefault.test new file mode 100644 index 0000000..5c39d49 --- /dev/null +++ b/parser/testdata/dbpagefault.test @@ -0,0 +1,37 @@ +==== 3.0 + + CREATE TABLE x1(z, b); + CREATE TRIGGER BEFORE INSERT ON x1 BEGIN + DELETE FROM sqlite_dbpage WHERE pgno=100; + UPDATE sqlite_dbpage SET data=null WHERE pgno=100; + END; +---- +stmt 0 ok +stmt 25 err 1 -1 68 no such table: main.x1 +==== 3.1 + + PRAGMA trusted_schema = 1; +---- +stmt 0 ok +==== 3.2 + + PRAGMA trusted_schema = 1; + INSERT INTO x1 DEFAULT VALUES; +---- +stmt 0 ok +stmt 29 err 1 -1 62 no such table: x1 +==== 4.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('one'); + CREATE TABLE t2(x); + INSERT INTO t2 VALUES('two'); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.x1(x); +---- +stmt 0 ok +stmt 22 err 1 -1 54 no such table: t1 +stmt 54 ok +stmt 76 err 1 -1 108 no such table: t2 +stmt 108 ok +stmt 136 err 1 152 159 unknown database aux diff --git a/parser/testdata/dbstatus.metadata.json b/parser/testdata/dbstatus.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/dbstatus.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/dbstatus.test b/parser/testdata/dbstatus.test new file mode 100644 index 0000000..3f0c631 --- /dev/null +++ b/parser/testdata/dbstatus.test @@ -0,0 +1,25 @@ +==== 4.0 + + PRAGMA auto_vacuum=NONE; + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); +---- +stmt 0 ok +stmt 31 ok +stmt 63 err 1 -1 101 no such table: t1 +==== 4.1 + + CREATE TEMP TABLE tt(a, b, c); + INSERT INTO tt VALUES(1, 2, 3); +---- +stmt 0 ok +stmt 37 err 1 -1 75 no such table: tt +==== 5.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 87 no such table: t1 diff --git a/parser/testdata/dbstatus2.metadata.json b/parser/testdata/dbstatus2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/dbstatus2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/dbstatus2.test b/parser/testdata/dbstatus2.test new file mode 100644 index 0000000..063d7d0 --- /dev/null +++ b/parser/testdata/dbstatus2.test @@ -0,0 +1,42 @@ +==== 1.0 + + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = 0; + + CREATE TABLE t1(a PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, randomblob(600)); + INSERT INTO t1 VALUES(2, randomblob(600)); + INSERT INTO t1 VALUES(3, randomblob(600)); +---- +stmt 0 ok +stmt 27 ok +stmt 53 ok +stmt 91 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 181 no such table: t1 +stmt 181 err 1 -1 226 no such table: t1 +==== 3.2 + + PRAGMA journal_mode=DELETE; + PRAGMA cache_size=3; + UPDATE t1 SET b=randomblob(1000); +---- +stmt 0 ok +stmt 30 ok +stmt 53 err 1 -1 89 no such table: t1 +==== 4.0 + + PRAGMA temp_store = file; + PRAGMA cache_size = -1024; +---- +stmt 0 ok +stmt 30 ok +==== 4.2 + + CREATE TABLE data(a INTEGER, b BLOB); + + -- Insert 5-6 MB of data. + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<75000 ) + INSERT INTO data SELECT i, hex(randomblob(50)) FROM s; +---- +stmt 0 ok +stmt 42 err 1 -1 204 no such table: data diff --git a/parser/testdata/decimal.metadata.json b/parser/testdata/decimal.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/decimal.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/decimal.test b/parser/testdata/decimal.test new file mode 100644 index 0000000..3538865 --- /dev/null +++ b/parser/testdata/decimal.test @@ -0,0 +1,318 @@ +==== 1000 + + SELECT decimal(1); +---- +stmt 0 err 1 10 21 no such function: decimal +==== 1001 + + SELECT decimal('+0'), decimal('-0'); +---- +stmt 0 err 1 10 39 no such function: decimal +==== 1010 + + SELECT decimal('1.0'); +---- +stmt 0 err 1 10 25 no such function: decimal +==== 1020 + + SELECT decimal('0001.0'); +---- +stmt 0 err 1 10 28 no such function: decimal +==== 1030 + + SELECT decimal('+0001.0'); +---- +stmt 0 err 1 10 29 no such function: decimal +==== 1040 + + SELECT decimal('-0001.0'); +---- +stmt 0 err 1 10 29 no such function: decimal +==== 1041 + + SELECT decimal('-0000.0'); +---- +stmt 0 err 1 10 29 no such function: decimal +==== 1042 + + SELECT decimal(0.0)==decimal(-0.0); +---- +stmt 0 err 1 24 38 no such function: decimal +==== 1050 + + SELECT decimal('1.0e72'); +---- +stmt 0 err 1 10 28 no such function: decimal +==== 1060 + + SELECT decimal('1.0e-72'); +---- +stmt 0 err 1 10 29 no such function: decimal +==== 1070 + + SELECT decimal('-123e-4'); +---- +stmt 0 err 1 10 29 no such function: decimal +==== 1080 + + SELECT decimal('+123e+4'); +---- +stmt 0 err 1 10 29 no such function: decimal +==== 1081 + + SELECT decimal_exp('+123e+4'); +---- +stmt 0 err 1 10 33 no such function: decimal_exp +==== 2000 + + CREATE TABLE t1(seq INTEGER PRIMARY KEY, val TEXT); + INSERT INTO t1 VALUES + (1, '-9999e99'), + (2, '-9998.000e+99'), + (3, '-9999.0'), + (4, '-1'), + (5, '-9999e-20'), + (6, '0'), + (7, '1e-30'), + (8, '1e-29'), + (9, '1'), + (10,'1.00000000000000001'), + (11,'+1.00001'), + (12,'99e+99'); + SELECT *, '|' + FROM t1 AS a, t1 AS b + WHERE a.seq=0; +---- +stmt 0 ok +stmt 54 err 1 -1 318 no such table: t1 +stmt 318 err 1 -1 419 no such table: t1 +==== 2001 + + WITH vx(a,b) AS (VALUES + ('-0','+0'), + ('-000.000','0'), + ('1.2','1.2000') + ) + SELECT *, '|' FROM vx + WHERE decimal_cmp(a,b)!=0 + OR decimal_cmp(b,a)!=0; +---- +stmt 0 err 1 125 174 no such function: decimal_cmp +==== 2010 + + SELECT *, '|' + FROM t1 AS a, t1 AS b + WHERE a.seq<>b.seq + AND decimal_cmp(a.val,b.val)==0; +---- +stmt 0 err 1 -1 102 no such table: t1 +==== 2020 + + SELECT *, '|' + FROM t1 AS a, t1 AS b + WHERE a.seq>b.seq + AND decimal_cmp(a.val,b.val)<=0; +---- +stmt 0 err 1 -1 101 no such table: t1 +==== 2030 + + SELECT seq FROM t1 ORDER BY val COLLATE decimal; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 2040 + + SELECT seq FROM t1 ORDER BY val COLLATE decimal DESC; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 3000 + + CREATE TABLE t3(seq INTEGER PRIMARY KEY, val TEXT); + WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<10) + INSERT INTO t3(seq, val) SELECT x, x FROM c; + WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<5) + INSERT INTO t3(seq, val) SELECT x+10, x*1000 FROM c; + SELECT decimal(val) FROM t3 ORDER BY seq; +---- +stmt 0 ok +stmt 54 err 1 -1 175 no such table: t3 +stmt 175 err 1 -1 303 no such table: t3 +stmt 303 err 1 -1 347 no such table: t3 +==== 3020 + + SELECT decimal_add(val,'0.5') FROM t3 WHERE seq>5 ORDER BY seq +---- +stmt 0 err 1 -1 66 no such table: t3 +==== 3030 + + SELECT decimal_add(val,'-10') FROM t3 ORDER BY seq; +---- +stmt 0 err 1 -1 54 no such table: t3 +==== 4000 + + SELECT decimal_sum(val) FROM t3; +---- +stmt 0 err 1 -1 35 no such table: t3 +==== 4010 + + SELECT decimal_sum(decimal_add(val,val||'e+10')) FROM t3; +---- +stmt 0 err 1 -1 60 no such table: t3 +==== 4010.dup1 + + SELECT decimal_sum(decimal_add(val||'e+20',decimal_add(val,val||'e-20'))) + FROM t3; +---- +stmt 0 err 1 -1 89 no such table: t3 +==== 5000 + + WITH RECURSIVE c(x,y,z) AS ( + VALUES(0,'1','1') + UNION ALL + SELECT x+1, decimal_mul(y,'2'), decimal_mul(z,'0.5') + FROM c WHERE x<32 + ) + SELECT count(*) FROM c WHERE decimal_mul(y,z)='1'; +---- +stmt 0 err 1 84 205 no such function: decimal_mul +==== 5100 + + SELECT decimal_mul('1234.00','2.00'); +---- +stmt 0 err 1 10 40 no such function: decimal_mul +==== 5101 + + SELECT decimal_mul('1234.00','2.0000'); +---- +stmt 0 err 1 10 42 no such function: decimal_mul +==== 5102 + + SELECT decimal_mul('1234.0000','2.000'); +---- +stmt 0 err 1 10 43 no such function: decimal_mul +==== 5103 + + SELECT decimal_mul('1234.0000','2'); +---- +stmt 0 err 1 10 39 no such function: decimal_mul +==== 6000 + + CREATE TABLE pow2(x INTEGER PRIMARY KEY, v TEXT); + WITH RECURSIVE c(x,v) AS ( + VALUES(0,'1') + UNION ALL + SELECT x+1, decimal_mul(v,'2') FROM c WHERE x+1<=971 + ) INSERT INTO pow2(x,v) SELECT x, v FROM c; + WITH RECURSIVE c(x,v) AS ( + VALUES(-1,'0.5') + UNION ALL + SELECT x-1, decimal_mul(v,'0.5') FROM c WHERE x-1>=-1075 + ) INSERT INTO pow2(x,v) SELECT x, v FROM c; +---- +stmt 0 ok +stmt 52 err 1 -1 216 no such table: pow2 +stmt 216 err 1 -1 387 no such table: pow2 +==== 6010 + + WITH c(n) AS (SELECT ieee754_from_blob(x'0000000000000001')) +SELECT decimal_mul(ieee754_mantissa(c.n),pow2.v) + FROM pow2, c WHERE pow2.x=ieee754_exponent(c.n); +---- +stmt 0 err 1 -1 163 no such table: pow2 +==== 6011 + + WITH c(n) AS (SELECT ieee754_from_blob(x'0000000000000001')) +SELECT decimal(c.n) FROM c; +---- +stmt 0 err 1 24 91 no such function: ieee754_from_blob +==== 6020 + + WITH c(n) AS (SELECT ieee754_from_blob(x'7fefffffffffffff')) +SELECT decimal_mul(ieee754_mantissa(c.n),pow2.v) + FROM pow2, c WHERE pow2.x=ieee754_exponent(c.n); +---- +stmt 0 err 1 -1 163 no such table: pow2 +==== 6100 + + SELECT ieee754(ieee754_from_blob(x'0000000000000001')); +---- +stmt 0 err 1 18 58 no such function: ieee754_from_blob +==== 6110 + + SELECT ieee754(ieee754_from_blob(x'7fefffffffffffff')); +---- +stmt 0 err 1 18 58 no such function: ieee754_from_blob +==== 6120 + + SELECT printf('%.8e',ieee754_from_blob(x'0000000000000001')); +---- +stmt 0 err 1 24 64 no such function: ieee754_from_blob +==== 6130 + + SELECT printf('%.8e',ieee754_from_blob(x'ffefffffffffffff')); +---- +stmt 0 err 1 24 64 no such function: ieee754_from_blob +==== 7000 + + SELECT decimal('999999999999999', 1); +---- +stmt 0 err 1 10 40 no such function: decimal +==== 7010 + + SELECT decimal('999999999999999', 2); +---- +stmt 0 err 1 10 40 no such function: decimal +==== 7020 + + SELECT decimal('999999999999999', 14); +---- +stmt 0 err 1 10 41 no such function: decimal +==== 7030 + + SELECT decimal('999999999999999', 15); +---- +stmt 0 err 1 10 41 no such function: decimal +==== 7040 + + SELECT decimal('899999999999999', 1); +---- +stmt 0 err 1 10 40 no such function: decimal +==== 7050 + + SELECT decimal('899999999999999', 14); +---- +stmt 0 err 1 10 41 no such function: decimal +==== 7060 + + SELECT decimal('899999999999999', 15); +---- +stmt 0 err 1 10 41 no such function: decimal +==== 7070 + + SELECT decimal('989999999999999', 14); +---- +stmt 0 err 1 10 41 no such function: decimal +==== 7080 + + SELECT decimal('998999999999999', 14); +---- +stmt 0 err 1 10 41 no such function: decimal +==== 8000 + + SELECT decimal('999.999',3); +---- +stmt 0 err 1 10 31 no such function: decimal +==== 8100 + + PRAGMA cache_size=10; + PRAGMA page_size=512; + CREATE TABLE t(x TEXT, pad TEXT); + WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<5000) + INSERT INTO t SELECT printf('%*s', 8, ''), randomblob(2000) FROM c; + SELECT count(*) FROM (SELECT x FROM t ORDER BY x COLLATE decimal); +---- +stmt 0 ok +stmt 24 ok +stmt 48 ok +stmt 84 err 1 -1 234 no such table: t +stmt 234 err 1 -1 303 no such table: t diff --git a/parser/testdata/default.metadata.json b/parser/testdata/default.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/default.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/default.test b/parser/testdata/default.test new file mode 100644 index 0000000..f2e4481 --- /dev/null +++ b/parser/testdata/default.test @@ -0,0 +1,137 @@ +==== default-1.1 + + CREATE TABLE t1( + a INTEGER, + b BLOB DEFAULT x'6869' + ); + INSERT INTO t1(a) VALUES(1); + SELECT * from t1; +---- +stmt 0 ok +stmt 82 err 1 -1 117 no such table: t1 +stmt 117 err 1 -1 141 no such table: t1 +==== default-1.2 + + CREATE TABLE t2( + x INTEGER, + y INTEGER DEFAULT NULL + ); + INSERT INTO t2(x) VALUES(1); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 74 err 1 -1 107 no such table: t2 +stmt 107 err 1 -1 129 no such table: t2 +==== default-1.3 + + CREATE TABLE t3( + x INTEGER, + y INTEGER DEFAULT (max(x,5)) + ) +---- +stmt 0 err 1 -1 79 default value of column [y] is not constant +==== default-2.1 + + CREATE TABLE t4(c DEFAULT 'abc'); + PRAGMA table_info(t4); +---- +stmt 0 ok +stmt 40 ok +==== default-2.2 + + INSERT INTO t4 DEFAULT VALUES; + PRAGMA table_info(t4); +---- +stmt 0 err 1 -1 37 no such table: t4 +stmt 37 ok +==== default-3.1 + + CREATE TABLE t3( + a INTEGER PRIMARY KEY AUTOINCREMENT, + b INT DEFAULT 12345 UNIQUE NOT NULL CHECK( b>=0 AND b<99999 ), + c VARCHAR(123,456) DEFAULT 'hello' NOT NULL ON CONFLICT REPLACE, + d REAL, + e FLOATING POINT(5,10) DEFAULT 4.36, + f NATIONAL CHARACTER(15) COLLATE RTRIM, + g LONG INTEGER DEFAULT( 3600*12 ) + ); + INSERT INTO t3 VALUES(null, 5, 'row1', '5.25', 'xyz', 321, '432'); + SELECT a, typeof(a), b, typeof(b), c, typeof(c), + d, typeof(d), e, typeof(e), f, typeof(f), + g, typeof(g) FROM t3; +---- +stmt 0 ok +stmt 336 err 1 -1 405 no such table: t3 +stmt 405 err 1 -1 539 no such table: t3 +==== default-3.2 + + DELETE FROM t3; + INSERT INTO t3 DEFAULT VALUES; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 18 no such table: t3 +stmt 18 err 1 -1 51 no such table: t3 +stmt 51 err 1 -1 71 no such table: t3 +==== default-3.3 + + CREATE TABLE t300( + a INT DEFAULT 2147483647, + b INT DEFAULT 2147483648, + c INT DEFAULT +9223372036854775807, + d INT DEFAULT -2147483647, + e INT DEFAULT -2147483648, + f INT DEFAULT -9223372036854775808, + g INT DEFAULT (-(-9223372036854775808)), + h INT DEFAULT (-(-9223372036854775807)) + ); + INSERT INTO t300 DEFAULT VALUES; + SELECT * FROM t300; +---- +stmt 0 ok +stmt 317 err 1 -1 352 no such table: t300 +stmt 352 err 1 -1 374 no such table: t300 +==== default-4.0 + + CREATE TABLE t1(a TEXT, b TEXT DEFAULT(99)); + PRAGMA writable_schema=ON; + UPDATE sqlite_master SET sql='CREATE TABLE t1(a TEXT, b TEXT DEFAULT(:xyz))'; +---- +stmt 0 ok +stmt 47 ok +stmt 76 ok +==== default-4.1 + + INSERT INTO t1(a) VALUES('xyzzy'); + SELECT a, quote(b) FROM t1; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 67 no such table: t1 +==== default-4.2 + + CREATE TABLE t2(a TEXT, b TEXT DEFAULT(:xyz)); +---- +stmt 0 err 1 -1 48 default value of column [b] is not constant +==== default-4.3 + + CREATE TABLE t2(a TEXT, b TEXT DEFAULT(abs(:xyz))); +---- +stmt 0 err 1 -1 53 default value of column [b] is not constant +==== default-4.4 + + CREATE TABLE t2(a TEXT, b TEXT DEFAULT(98+coalesce(5,:xyz))); +---- +stmt 0 err 1 -1 63 default value of column [b] is not constant +==== default-5.1 + + CREATE TABLE t1 (a,b DEFAULT(random() NOTNULL IN (RAISE(IGNORE),2,3))); + INSERT INTO t1(a) VALUES(1); +---- +stmt 0 err 1 -1 73 default value of column [b] is not constant +stmt 74 err 1 -1 105 no such table: t1 +==== default-5.2 + + CREATE TABLE Table0 (Col0 DEFAULT (RAISE(IGNORE) ) ) ; + INSERT INTO Table0 DEFAULT VALUES ; +---- +stmt 0 err 1 -1 56 default value of column [Col0] is not constant +stmt 58 err 1 -1 97 no such table: Table0 diff --git a/parser/testdata/delete.metadata.json b/parser/testdata/delete.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/delete.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/delete.test b/parser/testdata/delete.test new file mode 100644 index 0000000..cec5fbf --- /dev/null +++ b/parser/testdata/delete.test @@ -0,0 +1,200 @@ +==== delete-3.1.2 +DELETE FROM table1 WHERE f1=3 +---- +stmt 0 err 1 -1 30 no such table: table1 +==== delete-3.1.3 +SELECT * FROM table1 ORDER BY f1 +---- +stmt 0 err 1 -1 33 no such table: table1 +==== delete-3.1.5 +SELECT * FROM table1 ORDER BY f1 +---- +stmt 0 err 1 -1 33 no such table: table1 +==== delete-3.1.6.1 +DELETE FROM table1 WHERE f1=2 +---- +stmt 0 err 1 -1 30 no such table: table1 +==== delete-3.1.7 +SELECT * FROM table1 ORDER BY f1 +---- +stmt 0 err 1 -1 33 no such table: table1 +==== delete-5.1.1 +DELETE FROM table1 +---- +stmt 0 err 1 -1 19 no such table: table1 +==== delete-5.1.2 +SELECT count(*) FROM table1 +---- +stmt 0 err 1 -1 28 no such table: table1 +==== delete-5.2.2 +DELETE FROM table1 +---- +stmt 0 err 1 -1 19 no such table: table1 +==== delete-5.2.5 +SELECT count(*) FROM table1 +---- +stmt 0 err 1 -1 28 no such table: table1 +==== delete-5.4.2 +SELECT count(*) FROM table1 +---- +stmt 0 err 1 -1 28 no such table: table1 +==== delete-6.2 +SELECT count(*) FROM table2 +---- +stmt 0 err 1 -1 28 no such table: table2 +==== delete-6.3 +SELECT f1 FROM table1 WHERE f1<10 ORDER BY f1 +---- +stmt 0 err 1 -1 46 no such table: table1 +==== delete-6.4 +SELECT f1 FROM table2 WHERE f1<10 ORDER BY f1 +---- +stmt 0 err 1 -1 46 no such table: table2 +==== delete-6.5.2 +SELECT f1 FROM table1 ORDER BY f1 +---- +stmt 0 err 1 -1 34 no such table: table1 +==== delete-7.1 + + CREATE TABLE t3(a); + INSERT INTO t3 VALUES(1); + INSERT INTO t3 SELECT a+1 FROM t3; + INSERT INTO t3 SELECT a+2 FROM t3; + SELECT * FROM t3; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t3 +stmt 54 err 1 -1 93 no such table: t3 +stmt 93 err 1 -1 132 no such table: t3 +stmt 132 err 1 -1 154 no such table: t3 +==== delete-7.2 + + CREATE TABLE cnt(del); + INSERT INTO cnt VALUES(0); + CREATE TRIGGER r1 AFTER DELETE ON t3 FOR EACH ROW BEGIN + UPDATE cnt SET del=del+1; + END; + DELETE FROM t3 WHERE a<2; + SELECT * FROM t3; +---- +stmt 0 ok +stmt 29 err 1 -1 62 no such table: cnt +stmt 62 err 1 -1 124 no such table: main.t3 +stmt 169 err 1 -1 201 no such table: t3 +stmt 201 err 1 -1 225 no such table: t3 +==== delete-7.3 + + SELECT * FROM cnt; +---- +stmt 0 err 1 -1 25 no such table: cnt +==== delete-7.4 + + DELETE FROM t3; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 22 no such table: t3 +stmt 22 err 1 -1 46 no such table: t3 +==== delete-7.5 + + SELECT * FROM cnt; +---- +stmt 0 err 1 -1 25 no such table: cnt +==== delete-7.6 + + INSERT INTO t3 VALUES(1); + INSERT INTO t3 SELECT a+1 FROM t3; + INSERT INTO t3 SELECT a+2 FROM t3; + CREATE TABLE t4 AS SELECT * FROM t3; + PRAGMA count_changes=ON; + DELETE FROM t3; + DELETE FROM t4; +---- +stmt 0 err 1 -1 32 no such table: t3 +stmt 32 err 1 -1 73 no such table: t3 +stmt 73 err 1 -1 114 no such table: t3 +stmt 114 err 1 -1 157 no such table: t3 +stmt 157 ok +stmt 188 err 1 -1 210 no such table: t3 +stmt 210 err 1 -1 232 no such table: t4 +==== delete-8.0 + + PRAGMA count_changes=OFF; + INSERT INTO t3 VALUES(123); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 30 err 1 -1 62 no such table: t3 +stmt 62 err 1 -1 84 no such table: t3 +==== delete-8.1 + + DELETE FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t3 +==== delete-8.2 +SELECT * FROM t3 +---- +stmt 0 err 1 -1 17 no such table: t3 +==== delete-8.3 + + DELETE FROM t3 WHERE 1; +---- +stmt 0 err 1 -1 28 no such table: t3 +==== delete-8.4 +SELECT * FROM t3 +---- +stmt 0 err 1 -1 17 no such table: t3 +==== delete-8.6 +SELECT * FROM t3 +---- +stmt 0 err 1 -1 17 no such table: t3 +==== delete-10.0 + + CREATE TABLE t1(a INT UNIQUE, b INT); + INSERT INTO t1(a,b) VALUES('1','2'); + SELECT * FROM t1 WHERE a='1' AND b='2'; +---- +stmt 0 ok +stmt 40 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 121 no such table: t1 +==== delete-10.1 + + DELETE FROM t1 WHERE a='1' AND b='2'; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== delete-10.2 + + SELECT * FROM t1 WHERE a='1' AND b='2'; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== delete-11.0 + + CREATE TABLE t11(a INTEGER PRIMARY KEY, b INT); + WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<20) + INSERT INTO t11(a,b) SELECT x, (x*17)%100 FROM cnt; + SELECT * FROM t11; +---- +stmt 0 ok +stmt 50 err 1 -1 186 no such table: t11 +stmt 186 err 1 -1 207 no such table: t11 +==== delete-11.1 + + DELETE FROM t11 AS xyz + WHERE EXISTS(SELECT 1 FROM t11 WHERE t11.a>xyz.a AND t11.b<=xyz.b); + SELECT * FROM t11; +---- +stmt 0 err 1 -1 96 no such table: t11 +stmt 96 err 1 -1 117 no such table: t11 +==== delete-12.0 + + CREATE TABLE t0(vkey INTEGER, pkey INTEGER,c1 INTEGER); + INSERT INTO t0 VALUES(2,1,-20),(2,2,NULL),(2,3,0),(8,4,95); + DELETE FROM t0 WHERE NOT ( + (t0.vkey <= t0.c1) AND + (t0.vkey <> (SELECT vkey FROM t0 ORDER BY vkey LIMIT 1 OFFSET 2)) + ); + SELECT * FROM t0; +---- +stmt 0 ok +stmt 58 err 1 -1 120 no such table: t0 +stmt 120 err 1 -1 251 no such table: t0 +stmt 251 err 1 -1 271 no such table: t0 diff --git a/parser/testdata/delete2.metadata.json b/parser/testdata/delete2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/delete2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/delete2.test b/parser/testdata/delete2.test new file mode 100644 index 0000000..f577496 --- /dev/null +++ b/parser/testdata/delete2.test @@ -0,0 +1,33 @@ +==== delete2-1.2 + + SELECT * FROM q WHERE id='id.1'; +---- +stmt 0 err 1 -1 37 no such table: q +==== delete2-1.6 + + DELETE FROM q WHERE rowid=1 +---- +stmt 0 err 1 -1 33 no such table: q +==== delete2-1.8 + + SELECT * FROM q; +---- +stmt 0 err 1 -1 21 no such table: q +==== delete2-1.11 + + SELECT * FROM q; +---- +stmt 0 err 1 -1 21 no such table: q +==== delete2-2.1 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t2 VALUES(3, 4); + INSERT INTO t2 VALUES(5, 6); +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 87 no such table: t1 +stmt 87 err 1 -1 120 no such table: t2 +stmt 120 err 1 -1 153 no such table: t2 diff --git a/parser/testdata/delete3.metadata.json b/parser/testdata/delete3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/delete3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/delete3.test b/parser/testdata/delete3.test new file mode 100644 index 0000000..229119f --- /dev/null +++ b/parser/testdata/delete3.test @@ -0,0 +1,58 @@ +==== delete3-1.1 + + CREATE TABLE t1(x integer primary key); + BEGIN; + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 SELECT x+2 FROM t1; + INSERT INTO t1 SELECT x+4 FROM t1; + INSERT INTO t1 SELECT x+8 FROM t1; + INSERT INTO t1 SELECT x+16 FROM t1; + INSERT INTO t1 SELECT x+32 FROM t1; + INSERT INTO t1 SELECT x+64 FROM t1; + INSERT INTO t1 SELECT x+128 FROM t1; + INSERT INTO t1 SELECT x+256 FROM t1; + INSERT INTO t1 SELECT x+512 FROM t1; + INSERT INTO t1 SELECT x+1024 FROM t1; + INSERT INTO t1 SELECT x+2048 FROM t1; + INSERT INTO t1 SELECT x+4096 FROM t1; + INSERT INTO t1 SELECT x+8192 FROM t1; + INSERT INTO t1 SELECT x+16384 FROM t1; + INSERT INTO t1 SELECT x+32768 FROM t1; + INSERT INTO t1 SELECT x+65536 FROM t1; + INSERT INTO t1 SELECT x+131072 FROM t1; + INSERT INTO t1 SELECT x+262144 FROM t1; + COMMIT; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 44 ok +stmt 55 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 115 no such table: t1 +stmt 115 err 1 -1 154 no such table: t1 +stmt 154 err 1 -1 193 no such table: t1 +stmt 193 err 1 -1 232 no such table: t1 +stmt 232 err 1 -1 272 no such table: t1 +stmt 272 err 1 -1 312 no such table: t1 +stmt 312 err 1 -1 352 no such table: t1 +stmt 352 err 1 -1 393 no such table: t1 +stmt 393 err 1 -1 434 no such table: t1 +stmt 434 err 1 -1 475 no such table: t1 +stmt 475 err 1 -1 517 no such table: t1 +stmt 517 err 1 -1 559 no such table: t1 +stmt 559 err 1 -1 601 no such table: t1 +stmt 601 err 1 -1 643 no such table: t1 +stmt 643 err 1 -1 686 no such table: t1 +stmt 686 err 1 -1 729 no such table: t1 +stmt 729 err 1 -1 772 no such table: t1 +stmt 772 err 1 -1 816 no such table: t1 +stmt 816 err 1 -1 860 no such table: t1 +stmt 860 ok +stmt 872 err 1 -1 901 no such table: t1 +==== delete3-1.2 + + DELETE FROM t1 WHERE x%2==0; + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 62 no such table: t1 diff --git a/parser/testdata/delete4.metadata.json b/parser/testdata/delete4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/delete4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/delete4.test b/parser/testdata/delete4.test new file mode 100644 index 0000000..03f4fb8 --- /dev/null +++ b/parser/testdata/delete4.test @@ -0,0 +1,352 @@ +==== 1.1 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y); + INSERT INTO t1 VALUES(1, 0); + INSERT INTO t1 VALUES(2, 1); + INSERT INTO t1 VALUES(3, 0); + INSERT INTO t1 VALUES(4, 1); + INSERT INTO t1 VALUES(5, 0); + INSERT INTO t1 VALUES(6, 1); + INSERT INTO t1 VALUES(7, 0); + INSERT INTO t1 VALUES(8, 1); +---- +stmt 0 ok +stmt 45 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 169 no such table: t1 +stmt 169 err 1 -1 200 no such table: t1 +stmt 200 err 1 -1 231 no such table: t1 +stmt 231 err 1 -1 262 no such table: t1 +stmt 262 err 1 -1 293 no such table: t1 +==== 1.2 + + DELETE FROM t1 WHERE y=1; +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 1.3 + + SELECT x FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 2.1 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z); + INSERT INTO t1 VALUES(1, 0, randomblob(200)); + INSERT INTO t1 VALUES(2, 1, randomblob(200)); + INSERT INTO t1 VALUES(3, 0, randomblob(200)); + INSERT INTO t1 VALUES(4, 1, randomblob(200)); + INSERT INTO t1 VALUES(5, 0, randomblob(200)); + INSERT INTO t1 VALUES(6, 1, randomblob(200)); + INSERT INTO t1 VALUES(7, 0, randomblob(200)); + INSERT INTO t1 VALUES(8, 1, randomblob(200)); +---- +stmt 0 ok +stmt 48 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 240 no such table: t1 +stmt 240 err 1 -1 288 no such table: t1 +stmt 288 err 1 -1 336 no such table: t1 +stmt 336 err 1 -1 384 no such table: t1 +stmt 384 err 1 -1 432 no such table: t1 +==== 2.2 + + DELETE FROM t1 WHERE y=1; +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 2.3 + + SELECT x FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 3.0.1 + + CREATE TABLE t1(a, b, PRIMARY KEY(a, b)) WITHOUT ROWID; + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(2, 4); + INSERT INTO t1 VALUES(1, 5); + DELETE FROM t1 WHERE a=1; + SELECT printf('(%d)',changes()); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 58 err 1 -1 89 no such table: t1 +stmt 89 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 179 no such table: t1 +stmt 179 ok +stmt 214 err 1 -1 234 no such table: t1 +==== 3.0.2 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b) SELECT x, x+1 FROM c; + SELECT printf('(%d)',changes()); + DELETE FROM t1; + SELECT printf('(%d)',changes()); +---- +stmt 0 err 1 -1 124 no such table: t1 +stmt 124 ok +stmt 159 err 1 -1 177 no such table: t1 +stmt 177 ok +==== 3.1 + + CREATE TABLE t1(i INTEGER PRIMARY KEY, a, b); + CREATE INDEX i1a ON t1(a); + CREATE INDEX i1b ON t1(b); + INSERT INTO t1 VALUES(1, 'one', 'i'); + INSERT INTO t1 VALUES(2, 'two', 'ii'); + INSERT INTO t1 VALUES(3, 'three', 'iii'); + INSERT INTO t1 VALUES(4, 'four', 'iv'); + INSERT INTO t1 VALUES(5, 'one', 'i'); + INSERT INTO t1 VALUES(6, 'two', 'ii'); + INSERT INTO t1 VALUES(7, 'three', 'iii'); + INSERT INTO t1 VALUES(8, 'four', 'iv'); +---- +stmt 0 ok +stmt 48 err 1 -1 77 no such table: main.t1 +stmt 77 err 1 -1 106 no such table: main.t1 +stmt 106 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 187 no such table: t1 +stmt 187 err 1 -1 231 no such table: t1 +stmt 231 err 1 -1 273 no such table: t1 +stmt 273 err 1 -1 313 no such table: t1 +stmt 313 err 1 -1 354 no such table: t1 +stmt 354 err 1 -1 398 no such table: t1 +stmt 398 err 1 -1 440 no such table: t1 +==== 3.2 + + DELETE FROM t1 WHERE a='two' OR b='iv'; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 3.3 + + SELECT i FROM t1 ORDER BY i; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 3.4 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 4.1 + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(col0, col1); + INSERT INTO "t4" VALUES(14, 'abcde'); + CREATE INDEX idx_t4_0 ON t4 (col1, col0); + CREATE INDEX idx_t4_3 ON t4 (col0); + DELETE FROM t4 WHERE col0=69 OR col0>7; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 27 ok +stmt 58 err 1 -1 98 no such table: t4 +stmt 98 err 1 -1 142 no such table: main.t4 +stmt 142 err 1 -1 180 no such table: main.t4 +stmt 180 err 1 -1 222 no such table: t4 +stmt 222 ok +==== 4.2 + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(col0, col1); + INSERT INTO "t4" VALUES(14, 'abcde'); + CREATE INDEX idx_t4_3 ON t4 (col0); + CREATE INDEX idx_t4_0 ON t4 (col1, col0); + DELETE FROM t4 WHERE col0=69 OR col0>7; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 27 ok +stmt 58 err 1 -1 98 no such table: t4 +stmt 98 err 1 -1 136 no such table: main.t4 +stmt 136 err 1 -1 180 no such table: main.t4 +stmt 180 err 1 -1 222 no such table: t4 +stmt 222 ok +==== 4.11 + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(col0, col1, pk PRIMARY KEY) WITHOUT ROWID; + INSERT INTO t4 VALUES(14, 'abcde','xyzzy'); + CREATE INDEX idx_t4_0 ON t4 (col1, col0); + CREATE INDEX idx_t4_3 ON t4 (col0); + DELETE FROM t4 WHERE col0=69 OR col0>7; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 27 ok +stmt 88 err 1 -1 134 no such table: t4 +stmt 134 err 1 -1 178 no such table: main.t4 +stmt 178 err 1 -1 216 no such table: main.t4 +stmt 216 err 1 -1 258 no such table: t4 +stmt 258 ok +==== 4.12 + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(col0, col1, pk PRIMARY KEY) WITHOUT ROWID; + INSERT INTO t4 VALUES(14, 'abcde','xyzzy'); + CREATE INDEX idx_t4_3 ON t4 (col0); + CREATE INDEX idx_t4_0 ON t4 (col1, col0); + DELETE FROM t4 WHERE col0=69 OR col0>7; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 27 ok +stmt 88 err 1 -1 134 no such table: t4 +stmt 134 err 1 -1 172 no such table: main.t4 +stmt 172 err 1 -1 216 no such table: main.t4 +stmt 216 err 1 -1 258 no such table: t4 +stmt 258 ok +==== 5.0 + + PRAGMA page_size=1024; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + CREATE INDEX x1 ON t1(b, c); + INSERT INTO t1(a,b,c) VALUES(1, 1, zeroblob(80)); + INSERT INTO t1(a,b,c) SELECT a+1, 1, c FROM t1; + INSERT INTO t1(a,b,c) SELECT a+2, 1, c FROM t1; + INSERT INTO t1(a,b,c) SELECT a+10, 2, c FROM t1 WHERE b=1; + INSERT INTO t1(a,b,c) SELECT a+20, 3, c FROM t1 WHERE b=1; + PRAGMA reverse_unordered_selects = ON; + DELETE FROM t1 WHERE b=2; + SELECT a FROM t1 WHERE b=2; +---- +stmt 0 ok +stmt 25 ok +stmt 73 err 1 -1 104 no such table: main.t1 +stmt 104 err 1 -1 156 no such table: t1 +stmt 156 err 1 -1 206 no such table: t1 +stmt 206 err 1 -1 256 no such table: t1 +stmt 256 err 1 -1 317 no such table: t1 +stmt 317 err 1 -1 378 no such table: t1 +stmt 378 ok +stmt 419 err 1 -1 447 no such table: t1 +stmt 447 err 1 -1 477 no such table: t1 +==== 6.0 + + CREATE TABLE t2(x INT); + INSERT INTO t2(x) VALUES(1),(2),(3),(4),(5); + DELETE FROM t2 WHERE EXISTS(SELECT 1 FROM t2 AS v WHERE v.x=t2.x-1); + SELECT x FROM t2; +---- +stmt 0 ok +stmt 26 err 1 -1 73 no such table: t2 +stmt 73 err 1 -1 144 no such table: t2 +stmt 144 err 1 -1 164 no such table: t2 +==== 6.1 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x INT); + INSERT INTO t2(x) VALUES(1),(2),(3),(4),(5); + DELETE FROM t2 WHERE EXISTS(SELECT 1 FROM t2 AS v WHERE v.x=t2.x+1); + SELECT x FROM t2; +---- +stmt 0 ok +stmt 27 ok +stmt 53 err 1 -1 100 no such table: t2 +stmt 100 err 1 -1 171 no such table: t2 +stmt 171 err 1 -1 191 no such table: t2 +==== 7.1.0 + + CREATE TABLE t3(id INT PRIMARY KEY, a, b) WITHOUT ROWID; + CREATE INDEX t3a ON t3(a); + CREATE INDEX t3b ON t3(b); + + INSERT INTO t3 VALUES(1, 1, 1); + INSERT INTO t3 VALUES(2, 2, 2); + INSERT INTO t3 VALUES(3, 3, 3); + INSERT INTO t3 VALUES(4, 4, 1); +---- +stmt 0 ok +stmt 59 err 1 -1 88 no such table: main.t3 +stmt 88 err 1 -1 117 no such table: main.t3 +stmt 117 err 1 -1 152 no such table: t3 +stmt 152 err 1 -1 186 no such table: t3 +stmt 186 err 1 -1 220 no such table: t3 +stmt 220 err 1 -1 254 no such table: t3 +==== 7.1.1 + + DELETE FROM t3 WHERE a=4 OR b=1; +---- +stmt 0 err 1 -1 35 no such table: t3 +==== 7.1.2 + + SELECT * FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t3 +==== 7.2.0 + + CREATE TABLE t4(a PRIMARY KEY, b) WITHOUT ROWID; + CREATE INDEX t4i ON t4(b); + INSERT INTO t4 VALUES(1, 'hello'); + INSERT INTO t4 VALUES(2, 'world'); + + CREATE TABLE t5(a PRIMARY KEY, b) WITHOUT ROWID; + CREATE INDEX t5i ON t5(b); + INSERT INTO t5 VALUES(1, 'hello'); + INSERT INTO t5 VALUES(3, 'world'); + + PRAGMA writable_schema = 1; + UPDATE sqlite_master SET rootpage = ( + SELECT rootpage FROM sqlite_master WHERE name = 't5' + ) WHERE name = 't4'; +---- +stmt 0 ok +stmt 51 err 1 -1 80 no such table: main.t4 +stmt 80 err 1 -1 117 no such table: t4 +stmt 117 err 1 -1 154 no such table: t4 +stmt 154 ok +stmt 206 err 1 -1 235 no such table: main.t5 +stmt 235 err 1 -1 272 no such table: t5 +stmt 272 err 1 -1 309 no such table: t5 +stmt 309 ok +stmt 340 ok +==== 7.2.1 + + DELETE FROM t4 WHERE b='world' +---- +stmt 0 err 1 -1 34 no such table: t4 +==== 7.3.0 + + CREATE TABLE t3(id INT PRIMARY KEY, a, b) WITHOUT ROWID; + INSERT INTO t3 VALUES(1, 2, 3); + INSERT INTO t3 VALUES(4, 5, 6); + INSERT INTO t3 VALUES(7, 8, 9); + CREATE TRIGGER t3t BEFORE DELETE ON t3 BEGIN + DELETE FROM t3 WHERE id=old.id+3; + END; +---- +stmt 0 ok +stmt 59 err 1 -1 93 no such table: t3 +stmt 93 err 1 -1 127 no such table: t3 +stmt 127 err 1 -1 161 no such table: t3 +stmt 161 err 1 -1 208 no such table: main.t3 +==== 7.3.1 + + DELETE FROM t3 WHERE a IN(2, 5, 8); + SELECT * FROM t3; +---- +stmt 0 err 1 -1 38 no such table: t3 +stmt 38 err 1 -1 58 no such table: t3 +==== 7.3.2 + + DROP TRIGGER t3t; + INSERT INTO t3 VALUES(1, 2, 3); + INSERT INTO t3 VALUES(4, 5, 6); + INSERT INTO t3 VALUES(7, 8, 9); + CREATE TRIGGER t3t BEFORE DELETE ON t3 BEGIN + DELETE FROM t3 WHERE id=old.id; + END; +---- +stmt 0 err 1 -1 20 no such trigger: t3t +stmt 20 err 1 -1 54 no such table: t3 +stmt 54 err 1 -1 88 no such table: t3 +stmt 88 err 1 -1 122 no such table: t3 +stmt 122 err 1 -1 169 no such table: main.t3 +==== 7.3.3 + + DELETE FROM t3 WHERE a IN(2, 5, 8); + SELECT * FROM t3; +---- +stmt 0 err 1 -1 38 no such table: t3 +stmt 38 err 1 -1 58 no such table: t3 diff --git a/parser/testdata/descidx1.metadata.json b/parser/testdata/descidx1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/descidx1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/descidx1.test b/parser/testdata/descidx1.test new file mode 100644 index 0000000..0062e46 --- /dev/null +++ b/parser/testdata/descidx1.test @@ -0,0 +1,143 @@ +==== descidx1-2.1 + + INSERT INTO t1 VALUES(1,1); + INSERT INTO t1 VALUES(2,2); + INSERT INTO t1 SELECT a+2, a+2 FROM t1; + INSERT INTO t1 SELECT a+4, a+4 FROM t1; + SELECT b FROM t1 WHERE a>3 AND a<7; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 152 no such table: t1 +stmt 152 err 1 -1 192 no such table: t1 +==== descidx1-2.2 + + SELECT a FROM t1 WHERE b>3 AND b<7; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== descidx1-2.3 + + SELECT b FROM t1 WHERE a>=3 AND a<7; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== descidx1-2.4 + + SELECT b FROM t1 WHERE a>3 AND a<=7; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== descidx1-2.5 + + SELECT b FROM t1 WHERE a>=3 AND a<=7; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== descidx1-2.6 + + SELECT a FROM t1 WHERE b>=3 AND b<=7; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== descidx1-4.1 + + CREATE TABLE t2(a INT, b TEXT, c BLOB, d REAL); + CREATE INDEX i3 ON t2(a ASC, b DESC, c ASC); + CREATE INDEX i4 ON t2(b DESC, a ASC, d DESC); + INSERT INTO t2 VALUES(1,'one',x'31',1.0); + INSERT INTO t2 VALUES(2,'two',x'3232',2.0); + INSERT INTO t2 VALUES(3,'three',x'333333',3.0); + INSERT INTO t2 VALUES(4,'four',x'34343434',4.0); + INSERT INTO t2 VALUES(5,'five',x'3535353535',5.0); + INSERT INTO t2 VALUES(6,'six',x'363636363636',6.0); + INSERT INTO t2 VALUES(2,'two',x'323232',2.1); + INSERT INTO t2 VALUES(2,'zwei',x'3232',2.2); + INSERT INTO t2 VALUES(2,NULL,NULL,2.3); + SELECT count(*) FROM t2; +---- +stmt 0 ok +stmt 54 err 1 -1 105 no such table: main.t2 +stmt 105 err 1 -1 157 no such table: main.t2 +stmt 157 err 1 -1 205 no such table: t2 +stmt 205 err 1 -1 255 no such table: t2 +stmt 255 err 1 -1 309 no such table: t2 +stmt 309 err 1 -1 364 no such table: t2 +stmt 364 err 1 -1 421 no such table: t2 +stmt 421 err 1 -1 479 no such table: t2 +stmt 479 err 1 -1 531 no such table: t2 +stmt 531 err 1 -1 582 no such table: t2 +stmt 582 err 1 -1 628 no such table: t2 +stmt 628 err 1 -1 659 no such table: t2 +==== descidx1-4.2 + + SELECT d FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t2 +==== descidx1-4.3 + + SELECT d FROM t2 WHERE a>=2 ORDER BY a; +---- +stmt 0 err 1 -1 46 no such table: t2 +==== descidx1-4.4 + + SELECT d FROM t2 WHERE a>2 ORDER BY a; +---- +stmt 0 err 1 -1 45 no such table: t2 +==== descidx1-4.5 + + SELECT d FROM t2 WHERE a=2 AND b>'two'; +---- +stmt 0 err 1 -1 46 no such table: t2 +==== descidx1-4.6 + + SELECT d FROM t2 WHERE a=2 AND b>='two'; +---- +stmt 0 err 1 -1 47 no such table: t2 +==== descidx1-4.7 + + SELECT d FROM t2 WHERE a=2 AND b<'two'; +---- +stmt 0 err 1 -1 46 no such table: t2 +==== descidx1-4.8 + + SELECT d FROM t2 WHERE a=2 AND b<='two'; +---- +stmt 0 err 1 -1 47 no such table: t2 +==== descidx1-5.1 + + CREATE TABLE t3(a,b,c,d); + CREATE INDEX t3i1 ON t3(a DESC, b ASC, c DESC, d ASC); + INSERT INTO t3 VALUES(0,0,0,0); + INSERT INTO t3 VALUES(0,0,0,1); + INSERT INTO t3 VALUES(0,0,1,0); + INSERT INTO t3 VALUES(0,0,1,1); + INSERT INTO t3 VALUES(0,1,0,0); + INSERT INTO t3 VALUES(0,1,0,1); + INSERT INTO t3 VALUES(0,1,1,0); + INSERT INTO t3 VALUES(0,1,1,1); + INSERT INTO t3 VALUES(1,0,0,0); + INSERT INTO t3 VALUES(1,0,0,1); + INSERT INTO t3 VALUES(1,0,1,0); + INSERT INTO t3 VALUES(1,0,1,1); + INSERT INTO t3 VALUES(1,1,0,0); + INSERT INTO t3 VALUES(1,1,0,1); + INSERT INTO t3 VALUES(1,1,1,0); + INSERT INTO t3 VALUES(1,1,1,1); + SELECT count(*) FROM t3; +---- +stmt 0 ok +stmt 30 err 1 -1 89 no such table: main.t3 +stmt 89 err 1 -1 125 no such table: t3 +stmt 125 err 1 -1 161 no such table: t3 +stmt 161 err 1 -1 197 no such table: t3 +stmt 197 err 1 -1 233 no such table: t3 +stmt 233 err 1 -1 269 no such table: t3 +stmt 269 err 1 -1 305 no such table: t3 +stmt 305 err 1 -1 341 no such table: t3 +stmt 341 err 1 -1 377 no such table: t3 +stmt 377 err 1 -1 413 no such table: t3 +stmt 413 err 1 -1 449 no such table: t3 +stmt 449 err 1 -1 485 no such table: t3 +stmt 485 err 1 -1 521 no such table: t3 +stmt 521 err 1 -1 557 no such table: t3 +stmt 557 err 1 -1 593 no such table: t3 +stmt 593 err 1 -1 629 no such table: t3 +stmt 629 err 1 -1 665 no such table: t3 +stmt 665 err 1 -1 694 no such table: t3 diff --git a/parser/testdata/descidx2.metadata.json b/parser/testdata/descidx2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/descidx2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/descidx2.test b/parser/testdata/descidx2.test new file mode 100644 index 0000000..6d8e974 --- /dev/null +++ b/parser/testdata/descidx2.test @@ -0,0 +1,38 @@ +==== descidx2-2.1 + + INSERT INTO t1 VALUES(1,1); + INSERT INTO t1 VALUES(2,2); + INSERT INTO t1 SELECT a+2, a+2 FROM t1; + INSERT INTO t1 SELECT a+4, a+4 FROM t1; + SELECT b FROM t1 WHERE a>3 AND a<7; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 152 no such table: t1 +stmt 152 err 1 -1 192 no such table: t1 +==== descidx2-2.2 + + SELECT a FROM t1 WHERE b>3 AND b<7; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== descidx2-2.3 + + SELECT b FROM t1 WHERE a>=3 AND a<7; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== descidx2-2.4 + + SELECT b FROM t1 WHERE a>3 AND a<=7; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== descidx2-2.5 + + SELECT b FROM t1 WHERE a>=3 AND a<=7; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== descidx2-2.6 + + SELECT a FROM t1 WHERE b>=3 AND b<=7; +---- +stmt 0 err 1 -1 42 no such table: t1 diff --git a/parser/testdata/descidx3.metadata.json b/parser/testdata/descidx3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/descidx3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/descidx3.test b/parser/testdata/descidx3.test new file mode 100644 index 0000000..d919048 --- /dev/null +++ b/parser/testdata/descidx3.test @@ -0,0 +1,84 @@ +==== descidx3-2.1 + + INSERT INTO t1 VALUES(1, NULL, NULL, NULL, NULL); + INSERT INTO t1 VALUES(2, 2, 2, 2, 2); + INSERT INTO t1 VALUES(3, 3, 3, 3, 3); + INSERT INTO t1 VALUES(4, 2.5, 2.5, 2.5, 2.5); + INSERT INTO t1 VALUES(5, -5, -5, -5, -5); + INSERT INTO t1 VALUES(6, 'six', 'six', 'six', 'six'); + INSERT INTO t1 VALUES(7, x'77', x'77', x'77', x'77'); + INSERT INTO t1 VALUES(8, 'eight', 'eight', 'eight', 'eight'); + INSERT INTO t1 VALUES(9, x'7979', x'7979', x'7979', x'7979'); + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 188 no such table: t1 +stmt 188 err 1 -1 234 no such table: t1 +stmt 234 err 1 -1 292 no such table: t1 +stmt 292 err 1 -1 350 no such table: t1 +stmt 350 err 1 -1 416 no such table: t1 +stmt 416 err 1 -1 482 no such table: t1 +stmt 482 err 1 -1 511 no such table: t1 +==== descidx3-2.2 + + SELECT i FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== descidx3-2.3 + + SELECT i FROM t1 ORDER BY a DESC; +---- +stmt 0 err 1 -1 38 no such table: t1 +==== descidx3-2.4 + + SELECT i FROM t1 WHERE a<=x'7979'; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== descidx3-2.5 + + SELECT i FROM t1 WHERE a>-99; +---- +stmt 0 err 1 -1 34 no such table: t1 +==== descidx3-3.1 + + UPDATE t1 SET a=1; + SELECT i FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 23 no such table: t1 +stmt 23 err 1 -1 56 no such table: t1 +==== descidx3-3.2 + + SELECT i FROM t1 WHERE a=1 AND b>0 AND b<'zzz' +---- +stmt 0 err 1 -1 52 no such table: t1 +==== descidx3-3.3 + + SELECT i FROM t1 WHERE b>0 AND b<'zzz' +---- +stmt 0 err 1 -1 44 no such table: t1 +==== descidx3-3.4 + + SELECT i FROM t1 WHERE a=1 AND b>-9999 AND b-9999 AND b0 AND b<'zzz'; +---- +stmt 0 err 1 -1 25 no such table: t1 +stmt 25 err 1 -1 86 no such table: t1 +==== descidx3-4.3 + + UPDATE t1 SET b=2; + SELECT i FROM t1 WHERE a IN (1,2) AND b>0 AND b<'zzz'; +---- +stmt 0 err 1 -1 25 no such table: t1 +stmt 25 err 1 -1 86 no such table: t1 diff --git a/parser/testdata/diskfull.metadata.json b/parser/testdata/diskfull.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/diskfull.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/diskfull.test b/parser/testdata/diskfull.test new file mode 100644 index 0000000..6242e8a --- /dev/null +++ b/parser/testdata/diskfull.test @@ -0,0 +1,21 @@ +==== diskfull-1.1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randstr(1000,1000)); + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + CREATE INDEX t1i1 ON t1(x); + CREATE TABLE t2 AS SELECT x AS a, x AS b FROM t1; + CREATE INDEX t2i1 ON t2(b); +---- +stmt 0 ok +stmt 24 err 1 -1 71 no such table: t1 +stmt 71 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 145 no such table: t1 +stmt 145 err 1 -1 182 no such table: t1 +stmt 182 err 1 -1 219 no such table: t1 +stmt 219 err 1 -1 251 no such table: main.t1 +stmt 251 err 1 -1 305 no such table: t1 +stmt 305 err 1 -1 337 no such table: main.t2 diff --git a/parser/testdata/distinct.metadata.json b/parser/testdata/distinct.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/distinct.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/distinct.test b/parser/testdata/distinct.test new file mode 100644 index 0000000..ae11a18 --- /dev/null +++ b/parser/testdata/distinct.test @@ -0,0 +1,283 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c, d); + CREATE UNIQUE INDEX i1 ON t1(b, c); + CREATE UNIQUE INDEX i2 ON t1(d COLLATE nocase); + + CREATE TABLE t2(x INTEGER PRIMARY KEY, y); + + CREATE TABLE t3(c1 PRIMARY KEY NOT NULL, c2 NOT NULL); + CREATE INDEX i3 ON t3(c2); + + CREATE TABLE t4(a, b NOT NULL, c NOT NULL, d NOT NULL); + CREATE UNIQUE INDEX t4i1 ON t4(b, c); + CREATE UNIQUE INDEX t4i2 ON t4(d COLLATE nocase); +---- +stmt 0 ok +stmt 31 err 1 -1 69 no such table: main.t1 +stmt 69 err 1 -1 119 no such table: main.t1 +stmt 119 ok +stmt 165 ok +stmt 223 err 1 -1 252 no such table: main.t3 +stmt 252 ok +stmt 311 err 1 -1 351 no such table: main.t4 +stmt 351 err 1 -1 403 no such table: main.t4 +==== 2.0 + + CREATE TABLE t1(a, b, c); + + CREATE INDEX i1 ON t1(a, b); + CREATE INDEX i2 ON t1(b COLLATE nocase, c COLLATE nocase); + + INSERT INTO t1 VALUES('a', 'b', 'c'); + INSERT INTO t1 VALUES('A', 'B', 'C'); + INSERT INTO t1 VALUES('a', 'b', 'c'); + INSERT INTO t1 VALUES('A', 'B', 'C'); +---- +stmt 0 ok +stmt 28 err 1 -1 60 no such table: main.t1 +stmt 60 err 1 -1 121 no such table: main.t1 +stmt 121 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 202 no such table: t1 +stmt 202 err 1 -1 242 no such table: t1 +stmt 242 err 1 -1 282 no such table: t1 +==== 2.A + + SELECT (SELECT DISTINCT o.a FROM t1 AS i) FROM t1 AS o ORDER BY rowid; +---- +stmt 0 err 1 -1 73 no such table: t1 +==== 4.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER); + INSERT INTO t1 VALUES(3); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES(3); + INSERT INTO t1 VALUES(1); + CREATE TABLE t2(x); + INSERT INTO t2 + SELECT DISTINCT + CASE a WHEN 1 THEN x'0000000000' + WHEN 2 THEN zeroblob(5) + ELSE 'xyzzy' END + FROM t1; + SELECT quote(x) FROM t2 ORDER BY 1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 84 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 140 no such table: t1 +stmt 140 err 1 -1 168 no such table: t1 +stmt 168 err 1 -1 196 no such table: t1 +stmt 196 err 1 -1 224 no such table: t1 +stmt 224 err 1 -1 252 no such table: t1 +stmt 252 ok +stmt 274 err 1 -1 432 no such table: t2 +stmt 432 err 1 -1 470 no such table: t2 +==== 5.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES(3),(1),(5),(2),(6),(4),(5),(1),(3); + CREATE INDEX t1x ON t1(x DESC); + SELECT DISTINCT x FROM t1 ORDER BY x ASC; +---- +stmt 0 ok +stmt 27 ok +stmt 49 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 146 no such table: main.t1 +stmt 146 err 1 -1 190 no such table: t1 +==== 5.2 + + SELECT DISTINCT x FROM t1 ORDER BY x DESC; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 5.3 + + SELECT DISTINCT x FROM t1 ORDER BY x; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== 5.4 + + DROP INDEX t1x; + CREATE INDEX t1x ON t1(x ASC); + SELECT DISTINCT x FROM t1 ORDER BY x ASC; +---- +stmt 0 err 1 -1 18 no such index: t1x +stmt 18 err 1 -1 51 no such table: main.t1 +stmt 51 err 1 -1 95 no such table: t1 +==== 5.5 + + SELECT DISTINCT x FROM t1 ORDER BY x DESC; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 5.6 + + SELECT DISTINCT x FROM t1 ORDER BY x; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== 6.1 + + CREATE TABLE jjj(x); + SELECT (SELECT 'mmm' UNION SELECT DISTINCT max(name) ORDER BY 1) + FROM sqlite_master; +---- +stmt 0 ok +stmt 23 ok +==== 6.2 + + CREATE TABLE nnn(x); + SELECT (SELECT 'mmm' UNION SELECT DISTINCT max(name) ORDER BY 1) + FROM sqlite_master; +---- +stmt 0 ok +stmt 23 ok +==== 7.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY); + CREATE TABLE t3(a INTEGER PRIMARY KEY); + + CREATE TABLE t4(x); + CREATE TABLE t5(y); + + INSERT INTO t5 VALUES(1), (2), (2); + INSERT INTO t1 VALUES(2); + INSERT INTO t3 VALUES(2); + INSERT INTO t4 VALUES(2); +---- +stmt 0 ok +stmt 42 ok +stmt 84 ok +stmt 107 ok +stmt 129 err 1 -1 170 no such table: t5 +stmt 170 err 1 -1 198 no such table: t1 +stmt 198 err 1 -1 226 no such table: t3 +stmt 226 err 1 -1 254 no such table: t4 +==== 7.1 + + WITH t2(b) AS ( + SELECT DISTINCT y FROM t5 ORDER BY y + ) + SELECT * FROM + t4 CROSS JOIN t3 CROSS JOIN t1 + WHERE (t1.a=t3.a) AND (SELECT count(*) FROM t2 AS y WHERE t4.x!='abc')=t1.a +---- +stmt 0 err 1 -1 195 no such table: t4 +==== 8.0 + + CREATE TABLE person ( pid INT) ; + CREATE UNIQUE INDEX idx ON person ( pid ) WHERE pid == 1; + INSERT INTO person VALUES (1), (10), (10); + SELECT DISTINCT pid FROM person where pid = 10; +---- +stmt 0 ok +stmt 35 err 1 -1 95 no such table: main.person +stmt 95 err 1 -1 140 no such table: person +stmt 140 err 1 -1 190 no such table: person +==== 9.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES('a', 'a'); + INSERT INTO t1 VALUES('a', 'b'); + INSERT INTO t1 VALUES('a', 'c'); + + INSERT INTO t1 VALUES('b', 'a'); + INSERT INTO t1 VALUES('b', 'b'); + INSERT INTO t1 VALUES('b', 'c'); + + INSERT INTO t1 VALUES('a', 'a'); + INSERT INTO t1 VALUES('b', 'b'); + + INSERT INTO t1 VALUES('A', 'A'); + INSERT INTO t1 VALUES('B', 'B'); +---- +stmt 0 ok +stmt 25 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 166 no such table: t1 +stmt 166 err 1 -1 201 no such table: t1 +stmt 201 err 1 -1 236 no such table: t1 +stmt 236 err 1 -1 272 no such table: t1 +stmt 272 err 1 -1 307 no such table: t1 +stmt 307 err 1 -1 343 no such table: t1 +stmt 343 err 1 -1 378 no such table: t1 +==== distinct-generated + + SELECT DISTINCT a, b FROM t1 ORDER BY a, b +---- +stmt 0 err 1 -1 48 no such table: t1 +==== distinct-generated.dup1 + + SELECT DISTINCT a COLLATE nocase, b COLLATE nocase FROM t1 + ORDER BY a COLLATE nocase, b COLLATE nocase +---- +stmt 0 err 1 -1 113 no such table: t1 +==== 10.1 + + SELECT DISTINCT + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + ORDER BY + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x'; +---- +stmt 0 ok +==== 10.2 + + EXPLAIN + SELECT DISTINCT + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + ORDER BY + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x','x','x','x','x','x','x', + 'x','x','x','x'; +---- +stmt 0 ok +==== 10.3 + + EXPLAIN CREATE TABLE t2 AS SELECT DISTINCT ':memory:', 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 ORDER BY '%J%j%w%s', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', '%J%j%w%s', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 42e-300, 'unixepoch', 'unixepoch', 'unixepoch' LIMIT 0xda; +---- +stmt 0 ok +==== 10.4 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0 AS SELECT DISTINCT 0xda, 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 0xda-0xda-42e-300, 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0', 'lit0' ORDER BY '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%Y-%m-%d', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', 'lit0', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', 'auto', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', ':memory:', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', '%%', ''; + SELECT count(*) FROM t0; +---- +stmt 0 ok +stmt 27 ok +stmt 1003 err 1 -1 1030 no such table: t0 +==== 10.5 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2 AS SELECT DISTINCT ':memory:', 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0.0*7/0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 ORDER BY '%J%j%w%s', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', '%J%j%w%s', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 'unixepoch', 42e-300, 'unixepoch', 'unixepoch', 'unixepoch' LIMIT 0xda; + SELECT count(*) FROM t2; +---- +stmt 0 ok +stmt 27 ok +stmt 1126 err 1 -1 1153 no such table: t2 diff --git a/parser/testdata/distinct2.metadata.json b/parser/testdata/distinct2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/distinct2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/distinct2.test b/parser/testdata/distinct2.test new file mode 100644 index 0000000..7e549aa --- /dev/null +++ b/parser/testdata/distinct2.test @@ -0,0 +1,465 @@ +==== 100 + + CREATE TABLE t1(x INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(0),(1),(2); + CREATE TABLE t2 AS + SELECT DISTINCT a.x AS aa, b.x AS bb + FROM t1 a, t1 b; + SELECT *, '|' FROM t2 ORDER BY aa, bb; +---- +stmt 0 ok +stmt 42 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 164 no such table: t1 +stmt 164 err 1 -1 205 no such table: t2 +==== 110 + + DROP TABLE t2; + CREATE TABLE t2 AS + SELECT DISTINCT a.x AS aa, b.x AS bb + FROM t1 a, t1 b + WHERE a.x IN t1 AND b.x IN t1; + SELECT *, '|' FROM t2 ORDER BY aa, bb; +---- +stmt 0 err 1 -1 17 no such table: t2 +stmt 17 err 1 -1 140 no such table: t1 +stmt 140 err 1 -1 181 no such table: t2 +==== 120 + + CREATE TABLE t102 (i0 TEXT UNIQUE NOT NULL); + INSERT INTO t102 VALUES ('0'),('1'),('2'); + DROP TABLE t2; + CREATE TABLE t2 AS + SELECT DISTINCT * + FROM t102 AS t0 + JOIN t102 AS t4 ON (t2.i0 IN t102) + NATURAL JOIN t102 AS t3 + JOIN t102 AS t1 ON (t0.i0 IN t102) + JOIN t102 AS t2 ON (t2.i0=+t0.i0 OR (t0.i0<>500 AND t2.i0=t1.i0)); + SELECT *, '|' FROM t2 ORDER BY 1, 2, 3, 4, 5; +---- +stmt 0 ok +stmt 47 err 1 -1 92 no such table: t102 +stmt 92 err 1 -1 109 no such table: t2 +stmt 109 err 1 -1 351 no such table: t102 +stmt 351 err 1 -1 399 no such table: t2 +==== 400 + + CREATE TABLE t4(a,b,c,d,e,f,g,h,i,j); + INSERT INTO t4 VALUES(0,1,2,3,4,5,6,7,8,9); + INSERT INTO t4 SELECT * FROM t4; + INSERT INTO t4 SELECT * FROM t4; + CREATE INDEX t4x ON t4(c,d,e); + SELECT DISTINCT a,b,c FROM t4 WHERE a=0 AND b=1; +---- +stmt 0 ok +stmt 40 err 1 -1 86 no such table: t4 +stmt 86 err 1 -1 121 no such table: t4 +stmt 121 err 1 -1 156 no such table: t4 +stmt 156 err 1 -1 189 no such table: main.t4 +stmt 189 err 1 -1 240 no such table: t4 +==== 410 + + SELECT DISTINCT a,b,c,d FROM t4 WHERE a=0 AND b=1; +---- +stmt 0 err 1 -1 53 no such table: t4 +==== 411 + + SELECT DISTINCT d,a,b,c FROM t4 WHERE a=0 AND b=1; +---- +stmt 0 err 1 -1 53 no such table: t4 +==== 420 + + SELECT DISTINCT a,b,c,d,e FROM t4 WHERE a=0 AND b=1; +---- +stmt 0 err 1 -1 55 no such table: t4 +==== 430 + + SELECT DISTINCT a,b,c,d,e,f FROM t4 WHERE a=0 AND b=1; +---- +stmt 0 err 1 -1 57 no such table: t4 +==== 500 + + CREATE TABLE t5(a INT, b INT); + CREATE UNIQUE INDEX t5x ON t5(a+b); + INSERT INTO t5(a,b) VALUES(0,0),(1,0),(1,1),(0,3); + CREATE TEMP TABLE out AS SELECT DISTINCT a+b FROM t5; + SELECT * FROM out ORDER BY 1; +---- +stmt 0 ok +stmt 33 err 1 -1 71 no such table: main.t5 +stmt 71 err 1 -1 124 no such table: t5 +stmt 124 err 1 -1 180 no such table: t5 +stmt 180 err 1 -1 212 no such table: out +==== 600 + + CREATE TABLE t6a(x INTEGER PRIMARY KEY); + INSERT INTO t6a VALUES(1); + CREATE TABLE t6b(y INTEGER PRIMARY KEY); + INSERT INTO t6b VALUES(2),(3); + SELECT DISTINCT x, x FROM t6a, t6b; +---- +stmt 0 ok +stmt 43 err 1 -1 72 no such table: t6a +stmt 72 ok +stmt 115 err 1 -1 148 no such table: t6b +stmt 148 err 1 -1 186 no such table: t6a +==== 700 + + CREATE TABLE t7(a, b, c); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE (i+1)<200 + ) + INSERT INTO t7 SELECT i/100, i/50, i FROM s; +---- +stmt 0 ok +stmt 28 err 1 -1 153 no such table: t7 +==== 710 + + SELECT DISTINCT a, b FROM t7; +---- +stmt 0 err 1 -1 32 no such table: t7 +==== 720 + + SELECT DISTINCT a, b+1 FROM t7; +---- +stmt 0 err 1 -1 34 no such table: t7 +==== 730 + + CREATE INDEX i7 ON t7(a, b+1); + ANALYZE; + SELECT DISTINCT a, b+1 FROM t7; +---- +stmt 0 err 1 -1 33 no such table: main.t7 +stmt 33 ok +stmt 44 err 1 -1 78 no such table: t7 +==== 800 + + CREATE TABLE t8(a, b, c); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE (i+1)<100 + ) + INSERT INTO t8 SELECT i/40, i/20, i/40 FROM s; +---- +stmt 0 ok +stmt 28 err 1 -1 155 no such table: t8 +==== 820 + + SELECT DISTINCT a, b, c FROM t8; +---- +stmt 0 err 1 -1 35 no such table: t8 +==== 820.dup1 + + SELECT DISTINCT a, b, c FROM t8 WHERE b=3; +---- +stmt 0 err 1 -1 45 no such table: t8 +==== 830 + + CREATE INDEX i8 ON t8(a, c); + ANALYZE; + SELECT DISTINCT a, b, c FROM t8 WHERE b=3; +---- +stmt 0 err 1 -1 31 no such table: main.t8 +stmt 31 ok +stmt 42 err 1 -1 87 no such table: t8 +==== 900 + + CREATE TABLE t9(v); + INSERT INTO t9 VALUES + ('abcd'), ('Abcd'), ('aBcd'), ('ABcd'), ('abCd'), ('AbCd'), ('aBCd'), + ('ABCd'), ('abcD'), ('AbcD'), ('aBcD'), ('ABcD'), ('abCD'), ('AbCD'), + ('aBCD'), ('ABCD'), + ('wxyz'), ('Wxyz'), ('wXyz'), ('WXyz'), ('wxYz'), ('WxYz'), ('wXYz'), + ('WXYz'), ('wxyZ'), ('WxyZ'), ('wXyZ'), ('WXyZ'), ('wxYZ'), ('WxYZ'), + ('wXYZ'), ('WXYZ'); +---- +stmt 0 ok +stmt 22 err 1 -1 395 no such table: t9 +==== 910 + + SELECT DISTINCT v COLLATE NOCASE, v FROM t9 ORDER BY +v; +---- +stmt 0 err 1 -1 59 no such table: t9 +==== 920 + + CREATE INDEX i9 ON t9(v COLLATE NOCASE, v); + ANALYZE; + + SELECT DISTINCT v COLLATE NOCASE, v FROM t9 ORDER BY +v; +---- +stmt 0 err 1 -1 46 no such table: main.t9 +stmt 46 ok +stmt 57 err 1 -1 117 no such table: t9 +==== 1000 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER); + CREATE INDEX t1b ON t1(b); + CREATE TABLE t2(x INTEGER PRIMARY KEY, y INTEGER); + CREATE INDEX t2y ON t2(y); + WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<49) + INSERT INTO t1(b) SELECT x/10 - 1 FROM c; + WITH RECURSIVE c(x) AS (VALUES(-1) UNION ALL SELECT x+1 FROM c WHERE x<19) + INSERT INTO t2(x,y) SELECT x, 1 FROM c; + SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>-1; + ANALYZE; + SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>-1; +---- +stmt 0 ok +stmt 53 err 1 -1 82 no such table: main.t1 +stmt 82 ok +stmt 135 err 1 -1 164 no such table: main.t2 +stmt 164 err 1 -1 286 no such table: t1 +stmt 286 err 1 -1 407 no such table: t2 +stmt 407 err 1 -1 460 no such table: t1 +stmt 460 ok +stmt 471 err 1 -1 524 no such table: t1 +==== 1010 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER); + CREATE INDEX t1b ON t1(b); + CREATE TABLE t2(x INTEGER PRIMARY KEY, y INTEGER); + CREATE INDEX t2y ON t2(y); + WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<49) + INSERT INTO t1(b) SELECT -(x/10 - 1) FROM c; + WITH RECURSIVE c(x) AS (VALUES(-1) UNION ALL SELECT x+1 FROM c WHERE x<19) + INSERT INTO t2(x,y) SELECT -x, 1 FROM c; + SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>1 ORDER BY y DESC; + ANALYZE; + SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>1 ORDER BY y DESC; +---- +stmt 0 ok +stmt 53 err 1 -1 82 no such table: main.t1 +stmt 82 ok +stmt 135 err 1 -1 164 no such table: main.t2 +stmt 164 err 1 -1 289 no such table: t1 +stmt 289 err 1 -1 411 no such table: t2 +stmt 411 err 1 -1 479 no such table: t1 +stmt 479 ok +stmt 490 err 1 -1 558 no such table: t1 +==== 1020 + + CREATE TABLE t1(a, b); + CREATE INDEX t1a ON t1(a, b); + -- Lots of rows of (1, 'no'), followed by a single (1, 'yes'). + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a, b) SELECT 1, 'no' FROM c; + INSERT INTO t1(a, b) VALUES(1, 'yes'); + CREATE TABLE t2(x PRIMARY KEY); + INSERT INTO t2 VALUES('yes'); + SELECT DISTINCT a FROM t1, t2 WHERE x=b; + ANALYZE; + SELECT DISTINCT a FROM t1, t2 WHERE x=b; +---- +stmt 0 ok +stmt 25 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 247 no such table: t1 +stmt 247 err 1 -1 288 no such table: t1 +stmt 288 ok +stmt 322 err 1 -1 354 no such table: t2 +stmt 354 err 1 -1 397 no such table: t1 +stmt 397 ok +stmt 408 err 1 -1 451 no such table: t1 +==== 2000 + + CREATE TABLE t0 (c0, c1, c2, PRIMARY KEY (c0, c1)); + CREATE TABLE t1 (c2); + INSERT INTO t0(c2) VALUES (0),(1),(3),(4),(5),(6),(7),(8),(9),(10),(11); + INSERT INTO t0(c1) VALUES ('a'); + INSERT INTO t1(c2) VALUES (0); +---- +stmt 0 ok +stmt 54 ok +stmt 78 err 1 -1 153 no such table: t0 +stmt 153 err 1 -1 188 no such table: t0 +stmt 188 err 1 -1 221 no such table: t1 +==== 2010 + + SELECT DISTINCT t0.c0, t1._rowid_, t0.c1 FROM t1 CROSS JOIN t0 ORDER BY t0.c0; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== 1.2 + + ANALYZE; +---- +stmt 0 ok +==== 2020 + + SELECT DISTINCT t0.c0, t1._rowid_, t0.c1 FROM t1 CROSS JOIN t0 ORDER BY t0.c0; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== 2030 + + CREATE TABLE t2(a, b, c); + CREATE INDEX t2ab ON t2(a, b); + + WITH c(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM c WHERE i<64) + INSERT INTO t2 SELECT 'one', i%2, 'one' FROM c; + + WITH c(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM c WHERE i<64) + INSERT INTO t2 SELECT 'two', i%2, 'two' FROM c; + + CREATE TABLE t3(x INTEGER PRIMARY KEY); + INSERT INTO t3 VALUES(1); + + ANALYZE; +---- +stmt 0 ok +stmt 28 err 1 -1 61 no such table: main.t2 +stmt 61 err 1 -1 181 no such table: t2 +stmt 181 err 1 -1 299 no such table: t2 +stmt 299 ok +stmt 342 err 1 -1 370 no such table: t3 +stmt 370 ok +==== 2040 + + SELECT DISTINCT a, b, x FROM t3 CROSS JOIN t2 ORDER BY a, +b; +---- +stmt 0 err 1 -1 64 no such table: t3 +==== 3000 + + CREATE TABLE t0 (c0, c1 NOT NULL DEFAULT 1, c2, PRIMARY KEY (c0, c1)); + INSERT INTO t0(c2) VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL); + INSERT INTO t0(c2) VALUES('a'); +---- +stmt 0 ok +stmt 73 err 1 -1 189 no such table: t0 +stmt 189 err 1 -1 223 no such table: t0 +==== 3010 + + SELECT DISTINCT * FROM t0 WHERE NULL IS t0.c0; +---- +stmt 0 err 1 -1 49 no such table: t0 +==== 3020 + + ANALYZE; +---- +stmt 0 ok +==== 3030 + + SELECT DISTINCT * FROM t0 WHERE NULL IS c0; +---- +stmt 0 err 1 -1 46 no such table: t0 +==== 4010 + + CREATE TABLE t1(a, b COLLATE RTRIM); + INSERT INTO t1 VALUES(1, ''), (2, ' '), (3, ' '); +---- +stmt 0 ok +stmt 39 err 1 -1 92 no such table: t1 +==== 4020 + + SELECT b FROM t1 UNION SELECT 1; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 5010 + + CREATE TABLE cnt(a); + WITH RECURSIVE cnt2(x) AS ( + VALUES(1) UNION ALL SELECT x+1 FROM cnt2 WHERE x<50 + ) + INSERT INTO cnt SELECT x FROM cnt2; +---- +stmt 0 ok +stmt 23 err 1 -1 151 no such table: cnt +==== 5020 + + SELECT DISTINCT abs(random())%5 AS r FROM cnt ORDER BY r; +---- +stmt 0 err 1 -1 60 no such table: cnt +==== 5030 + + SELECT abs(random())%5 AS r FROM cnt GROUP BY 1 ORDER BY 1; +---- +stmt 0 err 1 -1 62 no such table: cnt +==== 5040 + + SELECT a FROM cnt WHERE a>45 GROUP BY 1; +---- +stmt 0 err 1 -1 43 no such table: cnt +==== 5050 + + CREATE TABLE t0(a TEXT); INSERT INTO t0 VALUES('abcd'); + CREATE TABLE t1(b TEXT); + CREATE TABLE t2(c TEXT); + CREATE TABLE t3(d TEXT); INSERT INTO t3 VALUES('wxyz'); + CREATE VIEW v4(e) AS SELECT (SELECT t2.c FROM t0, t1 GROUP BY 1) FROM t2; + SELECT v4.e FROM t3 LEFT JOIN v4 ON true GROUP BY 1; +---- +stmt 0 ok +stmt 27 err 1 -1 58 no such table: t0 +stmt 58 ok +stmt 85 ok +stmt 112 ok +stmt 139 err 1 -1 170 no such table: t3 +stmt 170 ok +stmt 247 err 1 -1 302 no such table: t3 +==== 5060 + + DROP VIEW v4; + CREATE VIEW v4(e) AS SELECT (SELECT t2.c COLLATE nocase FROM t0, t1 GROUP BY 1) FROM t2; + SELECT v4.e FROM t3 LEFT JOIN v4 ON true GROUP BY 1; +---- +stmt 0 err 1 -1 16 no such view: v4 +stmt 16 ok +stmt 108 err 1 -1 163 no such table: t3 +==== 5070 + + DROP VIEW v4; + CREATE VIEW v4(e) AS SELECT (SELECT unlikely(t2.c COLLATE nocase) FROM t0, t1 GROUP BY 1) FROM t2; + SELECT v4.e FROM t3 LEFT JOIN v4 ON true GROUP BY 1; +---- +stmt 0 err 1 -1 16 no such view: v4 +stmt 16 ok +stmt 118 err 1 -1 173 no such table: t3 +==== 5080 + + CREATE TABLE dual(dummy TEXT); + INSERT INTO dual VALUES('X'); + SELECT 11 = ( + SELECT b + FROM ( + SELECT a AS b + FROM dual + LEFT JOIN (SELECT 22 AS a FROM dual) + ) + GROUP BY b, b + ); +---- +stmt 0 ok +stmt 33 err 1 -1 65 no such table: dual +stmt 65 err 1 -1 344 no such table: dual +==== 6000 + + CREATE TABLE t1(c1 UNIQUE NOT NULL); + INSERT INTO t1 VALUES(1); + CREATE TABLE t0(c0 UNIQUE); + INSERT INTO t0 VALUES(0); + WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<1000) + INSERT INTO t0(c0) SELECT NULL FROM c; +---- +stmt 0 ok +stmt 39 err 1 -1 67 no such table: t1 +stmt 67 ok +stmt 97 err 1 -1 125 no such table: t0 +stmt 125 err 1 -1 246 no such table: t0 +==== 6010 + + SELECT DISTINCT * FROM t1 LEFT OUTER JOIN t0 ON c0>c1; +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 6020 + + SELECT DISTINCT * FROM t1 FULL OUTER JOIN t0 ON c0>c1; +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 6040 + + ANALYZE; + SELECT DISTINCT * FROM t1 LEFT OUTER JOIN t0 ON c0>c1; +---- +stmt 0 ok +stmt 11 err 1 -1 68 no such table: t1 +==== 6050 + + SELECT DISTINCT * FROM t1 FULL OUTER JOIN t0 ON c0>c1; +---- +stmt 0 err 1 -1 57 no such table: t1 diff --git a/parser/testdata/distinctagg.metadata.json b/parser/testdata/distinctagg.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/distinctagg.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/distinctagg.test b/parser/testdata/distinctagg.test new file mode 100644 index 0000000..dee31d0 --- /dev/null +++ b/parser/testdata/distinctagg.test @@ -0,0 +1,187 @@ +==== distinctagg-1.1 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t1 VALUES(1,3,4); + INSERT INTO t1 VALUES(1,3,5); + SELECT count(distinct a), + count(distinct b), + count(distinct c), + count(all a) FROM t1; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 253 no such table: t1 +==== distinctagg-1.2 + + SELECT b, count(distinct c) FROM t1 GROUP BY b +---- +stmt 0 err 1 -1 52 no such table: t1 +==== distinctagg-1.3 + + INSERT INTO t1 SELECT a+1, b+3, c+5 FROM t1; + INSERT INTO t1 SELECT a+2, b+6, c+10 FROM t1; + INSERT INTO t1 SELECT a+4, b+12, c+20 FROM t1; + SELECT count(*), count(distinct a), count(distinct b) FROM t1 +---- +stmt 0 err 1 -1 49 no such table: t1 +stmt 49 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 150 no such table: t1 +stmt 150 err 1 -1 217 no such table: t1 +==== distinctagg-1.4 + + SELECT a, count(distinct c) FROM t1 GROUP BY a ORDER BY a +---- +stmt 0 err 1 -1 63 no such table: t1 +==== distinctagg-2.1 + + SELECT count(distinct) FROM t1; +---- +stmt 0 err 1 -1 36 no such table: t1 +==== distinctagg-2.2 + + SELECT string_agg(distinct a,b) FROM t1; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 3.0 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(d, e, f); + + INSERT INTO t1 VALUES (1, 1, 1); + INSERT INTO t1 VALUES (2, 2, 2); + INSERT INTO t1 VALUES (3, 3, 3); + INSERT INTO t1 VALUES (4, 1, 4); + INSERT INTO t1 VALUES (5, 2, 1); + INSERT INTO t1 VALUES (5, 3, 2); + INSERT INTO t1 VALUES (4, 1, 3); + INSERT INTO t1 VALUES (3, 2, 4); + INSERT INTO t1 VALUES (2, 3, 1); + INSERT INTO t1 VALUES (1, 1, 2); + + INSERT INTO t2 VALUES('a', 'a', 'a'); + INSERT INTO t2 VALUES('b', 'b', 'b'); + INSERT INTO t2 VALUES('c', 'c', 'c'); + + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1bc ON t1(b, c); +---- +stmt 0 ok +stmt 28 ok +stmt 56 err 1 -1 92 no such table: t1 +stmt 92 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 197 no such table: t1 +stmt 197 err 1 -1 232 no such table: t1 +stmt 232 err 1 -1 267 no such table: t1 +stmt 267 err 1 -1 302 no such table: t1 +stmt 302 err 1 -1 337 no such table: t1 +stmt 337 err 1 -1 372 no such table: t1 +stmt 372 err 1 -1 407 no such table: t1 +stmt 407 err 1 -1 448 no such table: t2 +stmt 448 err 1 -1 488 no such table: t2 +stmt 488 err 1 -1 528 no such table: t2 +stmt 528 err 1 -1 558 no such table: main.t1 +stmt 558 err 1 -1 591 no such table: main.t1 +==== 3.10 + + SELECT a, count(DISTINCT b) FROM t1 GROUP BY a; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 3.0.dup1 + + CREATE TABLE t1(a, b, c); + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1bc ON t1(b, c); + + INSERT INTO t1 VALUES(1, 'A', 1); + INSERT INTO t1 VALUES(1, 'A', 1); + INSERT INTO t1 VALUES(2, 'A', 2); + INSERT INTO t1 VALUES(2, 'A', 2); + INSERT INTO t1 VALUES(1, 'B', 1); + INSERT INTO t1 VALUES(2, 'B', 2); + INSERT INTO t1 VALUES(3, 'B', 3); + INSERT INTO t1 VALUES(NULL, 'B', NULL); + INSERT INTO t1 VALUES(NULL, 'C', NULL); + INSERT INTO t1 VALUES('d', 'D', 'd'); + + CREATE TABLE t2(d, e, f); + CREATE INDEX t2def ON t2(d, e, f); + + INSERT INTO t2 VALUES(1, 1, 'a'); + INSERT INTO t2 VALUES(1, 1, 'a'); + INSERT INTO t2 VALUES(1, 2, 'a'); + INSERT INTO t2 VALUES(1, 2, 'a'); + INSERT INTO t2 VALUES(1, 2, 'b'); + INSERT INTO t2 VALUES(1, 3, 'b'); + INSERT INTO t2 VALUES(1, 3, 'a'); + INSERT INTO t2 VALUES(1, 3, 'b'); + INSERT INTO t2 VALUES(2, 3, 'x'); + INSERT INTO t2 VALUES(2, 3, 'y'); + INSERT INTO t2 VALUES(2, 3, 'z'); + + CREATE TABLE t3(x, y, z); + INSERT INTO t3 VALUES(1,1,1); + INSERT INTO t3 VALUES(2,2,2); + + CREATE TABLE t4(a); + CREATE INDEX t4a ON t4(a); + INSERT INTO t4 VALUES(1), (2), (2), (3), (1); +---- +stmt 0 ok +stmt 28 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 90 no such table: main.t1 +stmt 90 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 199 no such table: t1 +stmt 199 err 1 -1 235 no such table: t1 +stmt 235 err 1 -1 271 no such table: t1 +stmt 271 err 1 -1 307 no such table: t1 +stmt 307 err 1 -1 343 no such table: t1 +stmt 343 err 1 -1 385 no such table: t1 +stmt 385 err 1 -1 427 no such table: t1 +stmt 427 err 1 -1 467 no such table: t1 +stmt 467 ok +stmt 496 err 1 -1 533 no such table: main.t2 +stmt 533 err 1 -1 570 no such table: t2 +stmt 570 err 1 -1 606 no such table: t2 +stmt 606 err 1 -1 642 no such table: t2 +stmt 642 err 1 -1 678 no such table: t2 +stmt 678 err 1 -1 714 no such table: t2 +stmt 714 err 1 -1 750 no such table: t2 +stmt 750 err 1 -1 786 no such table: t2 +stmt 786 err 1 -1 822 no such table: t2 +stmt 822 err 1 -1 858 no such table: t2 +stmt 858 err 1 -1 894 no such table: t2 +stmt 894 err 1 -1 930 no such table: t2 +stmt 930 ok +stmt 959 err 1 -1 991 no such table: t3 +stmt 991 err 1 -1 1023 no such table: t3 +stmt 1023 ok +stmt 1046 err 1 -1 1075 no such table: main.t4 +stmt 1075 err 1 -1 1123 no such table: t4 +==== 6.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + INSERT INTO t1 VALUES(123,456); + INSERT INTO t2 VALUES(123,456); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 118 no such table: t2 +==== 6.1 + + SELECT count(DISTINCT c) FROM t1 LEFT JOIN t2; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 7.0 + + CREATE TABLE v1 ( v2 UNIQUE, v3 AS( TYPEOF ( NULL ) ) UNIQUE ); + SELECT COUNT ( DISTINCT TRUE ) FROM v1 GROUP BY likelihood ( v3 , 0.100000 ); +---- +stmt 0 ok +stmt 66 err 1 -1 147 no such table: v1 diff --git a/parser/testdata/e_blobbytes.metadata.json b/parser/testdata/e_blobbytes.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_blobbytes.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_blobbytes.test b/parser/testdata/e_blobbytes.test new file mode 100644 index 0000000..46bc1ea --- /dev/null +++ b/parser/testdata/e_blobbytes.test @@ -0,0 +1,12 @@ +==== 1.0 + + CREATE TABLE q1(r INTEGER PRIMARY KEY, s TEXT); + WITH d(a, b) AS ( + SELECT 0, '' + UNION ALL + SELECT a+1, b||'.' FROM d WHERE a<10000 + ) + INSERT INTO q1 SELECT * FROM d; +---- +stmt 0 ok +stmt 50 err 1 -1 186 no such table: q1 diff --git a/parser/testdata/e_blobclose.metadata.json b/parser/testdata/e_blobclose.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_blobclose.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_blobclose.test b/parser/testdata/e_blobclose.test new file mode 100644 index 0000000..a07c5cb --- /dev/null +++ b/parser/testdata/e_blobclose.test @@ -0,0 +1,29 @@ +==== 1.1 + PRAGMA lock_status +---- +stmt 0 ok +==== 1.2 + PRAGMA lock_status +---- +stmt 0 ok +==== 1.3 + PRAGMA lock_status +---- +stmt 0 ok +==== 2.3.3 + SELECT * FROM x1 WHERE a = 15 +---- +stmt 0 err 1 -1 31 no such table: x1 +==== 2.3.5 + SELECT a, val() FROM x1 LIMIT 1 +---- +stmt 0 err 1 -1 33 no such table: x1 +==== 3.4 + PRAGMA lock_status +---- +stmt 0 ok +==== 3.5 + + SELECT * FROM x1 WHERE a IN (1, -10); +---- +stmt 0 err 1 -1 40 no such table: x1 diff --git a/parser/testdata/e_blobopen.metadata.json b/parser/testdata/e_blobopen.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_blobopen.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_blobopen.test b/parser/testdata/e_blobopen.test new file mode 100644 index 0000000..46832d1 --- /dev/null +++ b/parser/testdata/e_blobopen.test @@ -0,0 +1,179 @@ +==== 1.0 + + ATTACH 'test.db2' AS aux; + + CREATE TABLE main.t1(a INTEGER PRIMARY KEY, b TEXT, c BLOB); + CREATE TEMP TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c BLOB); + CREATE TABLE aux.t1(a INTEGER PRIMARY KEY, b TEXT, c BLOB); + + CREATE TABLE main.x1(a INTEGER PRIMARY KEY, b TEXT, c BLOB); + CREATE TEMP TABLE x2(a INTEGER PRIMARY KEY, b TEXT, c BLOB); + CREATE TABLE aux.x3(a INTEGER PRIMARY KEY, b TEXT, c BLOB); + + INSERT INTO main.t1 VALUES(1, 'main one', X'0101'); + INSERT INTO main.t1 VALUES(2, 'main two', X'0102'); + INSERT INTO main.t1 VALUES(3, 'main three', X'0103'); + INSERT INTO main.t1 VALUES(4, 'main four', X'0104'); + INSERT INTO main.t1 VALUES(5, 'main five', X'0105'); + + INSERT INTO main.x1 VALUES(1, 'x main one', X'000101'); + INSERT INTO main.x1 VALUES(2, 'x main two', X'000102'); + INSERT INTO main.x1 VALUES(3, 'x main three', X'000103'); + INSERT INTO main.x1 VALUES(4, 'x main four', X'000104'); + INSERT INTO main.x1 VALUES(5, 'x main five', X'000105'); + + INSERT INTO temp.t1 VALUES(1, 'temp one', X'0201'); + INSERT INTO temp.t1 VALUES(2, 'temp two', X'0202'); + INSERT INTO temp.t1 VALUES(3, 'temp three', X'0203'); + INSERT INTO temp.t1 VALUES(4, 'temp four', X'0204'); + INSERT INTO temp.t1 VALUES(5, 'temp five', X'0205'); + + INSERT INTO temp.x2 VALUES(1, 'x temp one', X'000201'); + INSERT INTO temp.x2 VALUES(2, 'x temp two', X'000202'); + INSERT INTO temp.x2 VALUES(3, 'x temp three', X'000203'); + INSERT INTO temp.x2 VALUES(4, 'x temp four', X'000204'); + INSERT INTO temp.x2 VALUES(5, 'x temp five', X'000205'); + + INSERT INTO aux.t1 VALUES(1, 'aux one', X'0301'); + INSERT INTO aux.t1 VALUES(2, 'aux two', X'0302'); + INSERT INTO aux.t1 VALUES(3, 'aux three', X'0303'); + INSERT INTO aux.t1 VALUES(4, 'aux four', X'0304'); + INSERT INTO aux.t1 VALUES(5, 'aux five', X'0305'); + + INSERT INTO aux.x3 VALUES(1, 'x aux one', X'000301'); + INSERT INTO aux.x3 VALUES(2, 'x aux two', X'000302'); + INSERT INTO aux.x3 VALUES(3, 'x aux three', X'000303'); + INSERT INTO aux.x3 VALUES(4, 'x aux four', X'000304'); + INSERT INTO aux.x3 VALUES(5, 'x aux five', X'000305'); +---- +stmt 0 ok +stmt 28 ok +stmt 92 ok +stmt 155 err 1 171 178 unknown database aux +stmt 217 ok +stmt 281 ok +stmt 344 err 1 360 367 unknown database aux +stmt 406 err 1 -1 461 no such table: main.t1 +stmt 461 err 1 -1 515 no such table: main.t1 +stmt 515 err 1 -1 571 no such table: main.t1 +stmt 571 err 1 -1 626 no such table: main.t1 +stmt 626 err 1 -1 681 no such table: main.t1 +stmt 681 err 1 -1 740 no such table: main.x1 +stmt 740 err 1 -1 798 no such table: main.x1 +stmt 798 err 1 -1 858 no such table: main.x1 +stmt 858 err 1 -1 917 no such table: main.x1 +stmt 917 err 1 -1 976 no such table: main.x1 +stmt 976 err 1 -1 1031 no such table: temp.t1 +stmt 1031 err 1 -1 1085 no such table: temp.t1 +stmt 1085 err 1 -1 1141 no such table: temp.t1 +stmt 1141 err 1 -1 1196 no such table: temp.t1 +stmt 1196 err 1 -1 1251 no such table: temp.t1 +stmt 1251 err 1 -1 1310 no such table: temp.x2 +stmt 1310 err 1 -1 1368 no such table: temp.x2 +stmt 1368 err 1 -1 1428 no such table: temp.x2 +stmt 1428 err 1 -1 1487 no such table: temp.x2 +stmt 1487 err 1 -1 1546 no such table: temp.x2 +stmt 1546 err 1 -1 1599 no such table: aux.t1 +stmt 1599 err 1 -1 1651 no such table: aux.t1 +stmt 1651 err 1 -1 1705 no such table: aux.t1 +stmt 1705 err 1 -1 1758 no such table: aux.t1 +stmt 1758 err 1 -1 1811 no such table: aux.t1 +stmt 1811 err 1 -1 1868 no such table: aux.x3 +stmt 1868 err 1 -1 1924 no such table: aux.x3 +stmt 1924 err 1 -1 1982 no such table: aux.x3 +stmt 1982 err 1 -1 2039 no such table: aux.x3 +stmt 2039 err 1 -1 2096 no such table: aux.x3 +==== 4.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES('abcd', 152); + INSERT INTO t1 VALUES(NULL, X'00010203'); + INSERT INTO t1 VALUES('', 154.2); + + CREATE TABLE t2(x PRIMARY KEY, y) WITHOUT ROWID; + INSERT INTO t2 VALUES(1, 'blob'); + + CREATE TABLE t3(a PRIMARY KEY, b, c, d, e, f, UNIQUE(e, f)); + INSERT INTO t3 VALUES('aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff'); + CREATE INDEX t3b ON t3(b); + + CREATE TABLE p1(x PRIMARY KEY); + INSERT INTO p1 VALUES('abc'); + + CREATE TABLE c1(a INTEGER PRIMARY KEY, b REFERENCES p1); + INSERT INTO c1 VALUES(45, 'abc'); +---- +stmt 0 ok +stmt 25 err 1 -1 63 no such table: t1 +stmt 63 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 143 no such table: t1 +stmt 143 ok +stmt 195 err 1 -1 231 no such table: t2 +stmt 231 ok +stmt 295 err 1 -1 368 no such table: t3 +stmt 368 err 1 -1 397 no such table: main.t3 +stmt 397 ok +stmt 432 err 1 -1 464 no such table: p1 +stmt 464 ok +stmt 524 err 1 -1 560 no such table: c1 +==== 11.1 + + CREATE TABLE b1(a INTEGER PRIMARY KEY, b, c UNIQUE); + INSERT INTO b1 VALUES(1, '1234567890', 1); + INSERT INTO b1 VALUES(2, '1234567890', 2); + INSERT INTO b1 VALUES(3, '1234567890', 3); + INSERT INTO b1 VALUES(4, '1234567890', 4); + INSERT INTO b1 VALUES(5, '1234567890', 5); + INSERT INTO b1 VALUES(6, '1234567890', 6); + + CREATE TABLE b2(a INTEGER PRIMARY KEY, b, c UNIQUE); + INSERT INTO b2 VALUES(1, '1234567890', 1); + INSERT INTO b2 VALUES(2, '1234567890', 2); + INSERT INTO b2 VALUES(3, '1234567890', 3); + INSERT INTO b2 VALUES(4, '1234567890', 4); + INSERT INTO b2 VALUES(5, '1234567890', 5); + INSERT INTO b2 VALUES(6, '1234567890', 6); +---- +stmt 0 ok +stmt 55 err 1 -1 100 no such table: b1 +stmt 100 err 1 -1 145 no such table: b1 +stmt 145 err 1 -1 190 no such table: b1 +stmt 190 err 1 -1 235 no such table: b1 +stmt 235 err 1 -1 280 no such table: b1 +stmt 280 err 1 -1 325 no such table: b1 +stmt 325 ok +stmt 381 err 1 -1 426 no such table: b2 +stmt 426 err 1 -1 471 no such table: b2 +stmt 471 err 1 -1 516 no such table: b2 +stmt 516 err 1 -1 561 no such table: b2 +stmt 561 err 1 -1 606 no such table: b2 +stmt 606 err 1 -1 651 no such table: b2 +==== 12.1 + + CREATE TABLE b3(x INTEGER PRIMARY KEY, y TEXT, z INTEGER); + INSERT INTO b3 VALUES(22, '..........', NULL); +---- +stmt 0 ok +stmt 61 err 1 -1 110 no such table: b3 +==== 12.3 + + UPDATE b3 SET z = 'not null'; +---- +stmt 0 err 1 -1 32 no such table: b3 +==== 12.5 + + SELECT * FROM b3; +---- +stmt 0 err 1 -1 20 no such table: b3 +==== 12.6 + + SELECT * FROM b3; +---- +stmt 0 err 1 -1 20 no such table: b3 +==== 13.1 + + CREATE TABLE c2(i INTEGER PRIMARY KEY, j); + INSERT INTO c2 VALUES(10, zeroblob(24)); +---- +stmt 0 ok +stmt 45 err 1 -1 88 no such table: c2 diff --git a/parser/testdata/e_blobwrite.metadata.json b/parser/testdata/e_blobwrite.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_blobwrite.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_blobwrite.test b/parser/testdata/e_blobwrite.test new file mode 100644 index 0000000..d4512f2 --- /dev/null +++ b/parser/testdata/e_blobwrite.test @@ -0,0 +1,24 @@ +==== 3.1.2 + + UPDATE t3 SET k = 'xyz' WHERE i=1; + SELECT * FROM t3 WHERE i=1; +---- +stmt 0 err 1 -1 37 no such table: t3 +stmt 37 err 1 -1 67 no such table: t3 +==== 3.1.4 + + SELECT * FROM t3 WHERE i=1; +---- +stmt 0 err 1 -1 30 no such table: t3 +==== 3.2.2 + + UPDATE t3 SET j = 'xyz' WHERE i=2; + SELECT * FROM t3 WHERE i=2; +---- +stmt 0 err 1 -1 37 no such table: t3 +stmt 37 err 1 -1 67 no such table: t3 +==== 3.2.4 + + SELECT * FROM t3 WHERE i=2; +---- +stmt 0 err 1 -1 30 no such table: t3 diff --git a/parser/testdata/e_changes.metadata.json b/parser/testdata/e_changes.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_changes.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_changes.test b/parser/testdata/e_changes.test new file mode 100644 index 0000000..0e0ace8 --- /dev/null +++ b/parser/testdata/e_changes.test @@ -0,0 +1,308 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(x, y, PRIMARY KEY(x, y)) WITHOUT ROWID; + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t2(y); +---- +stmt 0 ok +stmt 25 ok +stmt 83 err 1 -1 111 no such table: main.t1 +stmt 111 err 1 -1 139 no such table: main.t2 +==== e_changes-generated + + INSERT INTO t1 VALUES('a', 0), ('b', 0), ('c', 0), (0, 11); +---- +stmt 0 err 1 -1 64 no such table: t1 +==== e_changes-generated.dup1 + + BEGIN; + INSERT INTO t1 VALUES('a', 0), ('b', 0), ('c', 0), (0, 11); +---- +stmt 0 ok +stmt 11 err 1 -1 77 no such table: t1 +==== 3.1.0 + + CREATE TABLE log(x); + CREATE TABLE p1(one PRIMARY KEY, two); + + CREATE TRIGGER tr_ai AFTER INSERT ON p1 BEGIN + INSERT INTO log VALUES('insert'); + END; + CREATE TRIGGER tr_bd BEFORE DELETE ON p1 BEGIN + INSERT INTO log VALUES('delete'); + END; + CREATE TRIGGER tr_au AFTER UPDATE ON p1 BEGIN + INSERT INTO log VALUES('update'); + END; +---- +stmt 0 ok +stmt 23 ok +stmt 64 err 1 -1 113 no such table: main.p1 +stmt 158 err 1 -1 207 no such table: main.p1 +stmt 252 err 1 -1 300 no such table: main.p1 +==== 3.1.4 + + -- None of the inserts on table log were counted. + SELECT count(*) FROM log +---- +stmt 0 err 1 -1 80 no such table: log +==== 3.2.0 + + DELETE FROM p1; + INSERT INTO p1 VALUES('a', 'A'), ('b', 'B'), ('c', 'C'); + + CREATE TABLE c1(a, b, FOREIGN KEY(a) REFERENCES p1 ON DELETE SET NULL); + CREATE TABLE c2(a, b, FOREIGN KEY(a) REFERENCES p1 ON DELETE SET DEFAULT); + CREATE TABLE c3(a, b, FOREIGN KEY(a) REFERENCES p1 ON DELETE CASCADE); + INSERT INTO c1 VALUES('a', 'aaa'); + INSERT INTO c2 VALUES('b', 'bbb'); + INSERT INTO c3 VALUES('c', 'ccc'); + + INSERT INTO p1 VALUES('d', 'D'), ('e', 'E'), ('f', 'F'); + CREATE TABLE c4(a, b, FOREIGN KEY(a) REFERENCES p1 ON UPDATE SET NULL); + CREATE TABLE c5(a, b, FOREIGN KEY(a) REFERENCES p1 ON UPDATE SET DEFAULT); + CREATE TABLE c6(a, b, FOREIGN KEY(a) REFERENCES p1 ON UPDATE CASCADE); + INSERT INTO c4 VALUES('d', 'aaa'); + INSERT INTO c5 VALUES('e', 'bbb'); + INSERT INTO c6 VALUES('f', 'ccc'); + + PRAGMA foreign_keys = ON; +---- +stmt 0 err 1 -1 18 no such table: p1 +stmt 18 err 1 -1 77 no such table: p1 +stmt 77 ok +stmt 152 ok +stmt 229 ok +stmt 302 err 1 -1 339 no such table: c1 +stmt 339 err 1 -1 376 no such table: c2 +stmt 376 err 1 -1 413 no such table: c3 +stmt 413 err 1 -1 473 no such table: p1 +stmt 473 ok +stmt 547 ok +stmt 624 ok +stmt 697 err 1 -1 734 no such table: c4 +stmt 734 err 1 -1 771 no such table: c5 +stmt 771 err 1 -1 808 no such table: c6 +stmt 808 ok +==== 3.2.4 + + SELECT * FROM c1; + SELECT * FROM c2; + SELECT * FROM c3; +---- +stmt 0 err 1 -1 21 no such table: c1 +stmt 21 err 1 -1 41 no such table: c2 +stmt 41 err 1 -1 61 no such table: c3 +==== 3.2.8 + + SELECT * FROM c4; + SELECT * FROM c5; + SELECT * FROM c6; +---- +stmt 0 err 1 -1 21 no such table: c4 +stmt 21 err 1 -1 41 no such table: c5 +stmt 41 err 1 -1 61 no such table: c6 +==== 3.3.0 + + CREATE TABLE r1(a UNIQUE, b UNIQUE); + INSERT INTO r1 VALUES('i', 'i'); + INSERT INTO r1 VALUES('ii', 'ii'); + INSERT INTO r1 VALUES('iii', 'iii'); + INSERT INTO r1 VALUES('iv', 'iv'); + INSERT INTO r1 VALUES('v', 'v'); + INSERT INTO r1 VALUES('vi', 'vi'); + INSERT INTO r1 VALUES('vii', 'vii'); +---- +stmt 0 ok +stmt 39 err 1 -1 74 no such table: r1 +stmt 74 err 1 -1 111 no such table: r1 +stmt 111 err 1 -1 150 no such table: r1 +stmt 150 err 1 -1 187 no such table: r1 +stmt 187 err 1 -1 222 no such table: r1 +stmt 222 err 1 -1 259 no such table: r1 +stmt 259 err 1 -1 298 no such table: r1 +==== 3.3.5 + + SELECT * FROM r1 ORDER BY a; +---- +stmt 0 err 1 -1 32 no such table: r1 +==== 4.1 + + CREATE TABLE log(log); + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE TRIGGER v1_i INSTEAD OF INSERT ON v1 BEGIN + INSERT INTO log VALUES('insert'); + END; + CREATE TRIGGER v1_u INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO log VALUES('update'), ('update'); + END; + CREATE TRIGGER v1_d INSTEAD OF DELETE ON v1 BEGIN + INSERT INTO log VALUES('delete'), ('delete'), ('delete'); + END; +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 143 no such table: t1 +stmt 143 ok +stmt 182 err 1 -1 234 no such table: main.v1 +stmt 279 err 1 -1 331 no such table: main.v1 +stmt 388 err 1 -1 440 no such table: main.v1 +==== 5.1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + CREATE TABLE t2(x); + INSERT INTO t1 VALUES(1, NULL); + INSERT INTO t1 VALUES(2, NULL); + INSERT INTO t1 VALUES(3, NULL); + CREATE TRIGGER AFTER UPDATE ON t1 BEGIN + INSERT INTO t2 VALUES('a'), ('b'), ('c'); + SELECT my_changes('trigger'); + END; +---- +stmt 0 ok +stmt 45 ok +stmt 67 err 1 -1 101 no such table: t1 +stmt 101 err 1 -1 135 no such table: t1 +stmt 135 err 1 -1 169 no such table: t1 +stmt 169 err 1 -1 211 no such table: main.t1 +==== 5.1.1 + + INSERT INTO t2 VALUES('a'), ('b'); + UPDATE t1 SET b = my_changes('update'); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 37 no such table: t2 +stmt 37 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 99 no such table: t1 +==== 5.2.0 + + CREATE TABLE t1(a, b); + CREATE TABLE log(x); + INSERT INTO t1 VALUES(1, 0); + INSERT INTO t1 VALUES(2, 0); + INSERT INTO t1 VALUES(3, 0); + CREATE TRIGGER t1_a_u AFTER UPDATE ON t1 BEGIN + INSERT INTO log VALUES(old.b || ' -> ' || new.b || ' c = ' || changes() ); + END; + CREATE TABLE t2(a); + INSERT INTO t2 VALUES(1), (2), (3); + UPDATE t1 SET b = changes(); +---- +stmt 0 ok +stmt 25 ok +stmt 48 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 190 no such table: main.t1 +stmt 276 ok +stmt 298 err 1 -1 336 no such table: t2 +stmt 336 err 1 -1 367 no such table: t1 +==== 5.2.1 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 5.2.2 + + SELECT * FROM log; +---- +stmt 0 err 1 -1 21 no such table: log +==== 6.0 + + + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + CREATE TABLE t3(a, b); + CREATE TABLE log(x); + + CREATE TRIGGER t1_i BEFORE INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(new.a, new.b), (new.a, new.b); + INSERT INTO log VALUES('t2->' || changes()); + END; + + CREATE TRIGGER t2_i AFTER INSERT ON t2 BEGIN + INSERT INTO t3 VALUES(new.a, new.b), (new.a, new.b), (new.a, new.b); + INSERT INTO log VALUES('t3->' || changes()); + END; + + CREATE TRIGGER t1_u AFTER UPDATE ON t1 BEGIN + UPDATE t2 SET b=new.b WHERE a=old.a; + INSERT INTO log VALUES('t2->' || changes()); + END; + + CREATE TRIGGER t2_u BEFORE UPDATE ON t2 BEGIN + UPDATE t3 SET b=new.b WHERE a=old.a; + INSERT INTO log VALUES('t3->' || changes()); + END; + + CREATE TRIGGER t1_d AFTER DELETE ON t1 BEGIN + DELETE FROM t2 WHERE a=old.a AND b=old.b; + INSERT INTO log VALUES('t2->' || changes()); + END; + + CREATE TRIGGER t2_d BEFORE DELETE ON t2 BEGIN + DELETE FROM t3 WHERE a=old.a AND b=old.b; + INSERT INTO log VALUES('t3->' || changes()); + END; +---- +stmt 0 ok +stmt 26 ok +stmt 51 ok +stmt 76 ok +stmt 99 err 1 -1 148 no such table: main.t1 +stmt 261 err 1 -1 309 no such table: main.t2 +stmt 438 err 1 -1 486 no such table: main.t1 +stmt 583 err 1 -1 632 no such table: main.t2 +stmt 729 err 1 -1 777 no such table: main.t1 +stmt 879 err 1 -1 928 no such table: main.t2 +==== 7.1 + + CREATE TABLE q1(t); + CREATE TABLE q2(u, v); + CREATE TABLE q3(w); + + CREATE TRIGGER q2_insert BEFORE INSERT ON q2 BEGIN + + /* changes() returns value from previous I/U/D in callers context */ + INSERT INTO q1 VALUES('1:' || changes()); + + /* changes() returns value of previous I/U/D in this context */ + INSERT INTO q3 VALUES(changes()), (2), (3); + INSERT INTO q1 VALUES('2:' || changes()); + INSERT INTO q3 VALUES(changes() + 3), (changes()+4); + SELECT 'this does not affect things!'; + INSERT INTO q1 VALUES('3:' || changes()); + UPDATE q3 SET w = w+10 WHERE w%2; + INSERT INTO q1 VALUES('4:' || changes()); + DELETE FROM q3; + INSERT INTO q1 VALUES('5:' || changes()); + END; +---- +stmt 0 ok +stmt 22 ok +stmt 47 ok +stmt 69 err 1 -1 123 no such table: main.q2 +==== 7.2 + + INSERT INTO q2 VALUES('x', 'y'); + SELECT * FROM q1; +---- +stmt 0 err 1 -1 35 no such table: q2 +stmt 35 err 1 -1 55 no such table: q1 +==== 7.3 + + DELETE FROM q1; + INSERT INTO q2 VALUES('x', 'y'); + SELECT * FROM q1; +---- +stmt 0 err 1 -1 18 no such table: q1 +stmt 18 err 1 -1 53 no such table: q2 +stmt 53 err 1 -1 73 no such table: q1 diff --git a/parser/testdata/e_dropview.metadata.json b/parser/testdata/e_dropview.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_dropview.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_dropview.test b/parser/testdata/e_dropview.test new file mode 100644 index 0000000..c72d927 --- /dev/null +++ b/parser/testdata/e_dropview.test @@ -0,0 +1,97 @@ +==== 2.1 + + CREATE VIEW "new view" AS SELECT * FROM t1 AS x, t1 AS y; + SELECT * FROM "new view"; +---- +stmt 0 ok +stmt 60 err 1 -1 88 no such table: new view +==== 2.2 +; + SELECT * FROM sqlite_master WHERE name = 'new view'; +---- +stmt 0 ok +stmt 1 ok +==== 2.3 + + DROP VIEW "new view"; + SELECT * FROM sqlite_master WHERE name = 'new view'; +---- +stmt 0 err 1 -1 24 no such view: new view +stmt 24 ok +==== 2.4 + + SELECT * FROM "new view" +---- +stmt 0 err 1 -1 28 no such table: new view +==== 3.1.0 + SELECT * FROM temp.v1 +---- +stmt 0 err 1 -1 23 no such table: temp.v1 +==== 3.1.1 + DROP VIEW temp.v1 +---- +stmt 0 err 1 -1 19 no such view: temp.v1 +==== 3.1.2 + SELECT * FROM temp.v1 +---- +stmt 0 err 1 -1 23 no such table: temp.v1 +==== 3.2.0 + SELECT * FROM v1 +---- +stmt 0 err 1 -1 18 no such table: v1 +==== 3.2.1 + DROP VIEW v1 +---- +stmt 0 err 1 -1 14 no such view: v1 +==== 3.2.2 + SELECT * FROM main.v1 +---- +stmt 0 err 1 -1 23 no such table: main.v1 +==== 3.3.0 + SELECT * FROM v2 +---- +stmt 0 err 1 -1 18 no such table: v2 +==== 3.3.1 + DROP VIEW v2 +---- +stmt 0 err 1 -1 14 no such view: v2 +==== 3.3.2 + SELECT * FROM main.v2 +---- +stmt 0 err 1 -1 23 no such table: main.v2 +==== 3.4.0 + SELECT * FROM v1 +---- +stmt 0 err 1 -1 18 no such table: v1 +==== 3.4.1 + DROP VIEW v1 +---- +stmt 0 err 1 -1 14 no such view: v1 +==== 3.4.2 + SELECT * FROM v1 +---- +stmt 0 err 1 -1 18 no such table: v1 +==== 3.5.0 + SELECT * FROM aux.v2 +---- +stmt 0 err 1 -1 22 no such table: aux.v2 +==== 3.5.1 + DROP VIEW aux.v2 +---- +stmt 0 err 1 -1 18 no such view: aux.v2 +==== 3.5.2 + SELECT * FROM aux.v2 +---- +stmt 0 err 1 -1 22 no such table: aux.v2 +==== 3.6.0 + SELECT * FROM v3 +---- +stmt 0 err 1 -1 18 no such table: v3 +==== 3.6.1 + DROP VIEW v3 +---- +stmt 0 err 1 -1 14 no such view: v3 +==== 3.6.2 + SELECT * FROM v3 +---- +stmt 0 err 1 -1 18 no such table: v3 diff --git a/parser/testdata/e_fkey.metadata.json b/parser/testdata/e_fkey.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_fkey.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_fkey.test b/parser/testdata/e_fkey.test new file mode 100644 index 0000000..c2f171a --- /dev/null +++ b/parser/testdata/e_fkey.test @@ -0,0 +1,1748 @@ +==== e_fkey-1 + + PRAGMA foreign_keys = ON; + CREATE TABLE p(i PRIMARY KEY); + CREATE TABLE c(j REFERENCES p ON UPDATE CASCADE); + INSERT INTO p VALUES('hello'); + INSERT INTO c VALUES('hello'); + UPDATE p SET i = 'world'; + SELECT * FROM c; +---- +stmt 0 ok +stmt 32 ok +stmt 69 ok +stmt 125 err 1 -1 162 no such table: p +stmt 162 err 1 -1 199 no such table: c +stmt 199 err 1 -1 231 no such table: p +stmt 231 err 1 -1 254 no such table: c +==== e_fkey-2.1 + + PRAGMA foreign_keys = ON; + CREATE TABLE p(i PRIMARY KEY); + CREATE TABLE c(j REFERENCES p ON UPDATE CASCADE); + INSERT INTO p VALUES('hello'); + INSERT INTO c VALUES('hello'); + UPDATE p SET i = 'world'; + SELECT * FROM c; +---- +stmt 0 ok +stmt 32 ok +stmt 69 ok +stmt 125 err 1 -1 162 no such table: p +stmt 162 err 1 -1 199 no such table: c +stmt 199 err 1 -1 231 no such table: p +stmt 231 err 1 -1 254 no such table: c +==== e_fkey-2.2 + PRAGMA foreign_key_list(c) +---- +stmt 0 ok +==== e_fkey-2.3 + PRAGMA foreign_keys +---- +stmt 0 ok +==== e_fkey-3.3 + PRAGMA table_info(c) +---- +stmt 0 ok +==== e_fkey-3.4 + PRAGMA foreign_key_list(c) +---- +stmt 0 ok +==== e_fkey-3.5 + PRAGMA foreign_keys +---- +stmt 0 ok +==== e_fkey-4.1 + + CREATE TABLE p(i PRIMARY KEY); + CREATE TABLE c(j REFERENCES p ON UPDATE CASCADE); + INSERT INTO p VALUES('hello'); + INSERT INTO c VALUES('hello'); + UPDATE p SET i = 'world'; + SELECT * FROM c; +---- +stmt 0 ok +stmt 35 ok +stmt 89 err 1 -1 124 no such table: p +stmt 124 err 1 -1 159 no such table: c +stmt 159 err 1 -1 189 no such table: p +stmt 189 err 1 -1 210 no such table: c +==== e_fkey-4.2 + + DELETE FROM c; + DELETE FROM p; + PRAGMA foreign_keys = ON; + INSERT INTO p VALUES('hello'); + INSERT INTO c VALUES('hello'); + UPDATE p SET i = 'world'; + SELECT * FROM c; +---- +stmt 0 err 1 -1 19 no such table: c +stmt 19 err 1 -1 38 no such table: p +stmt 38 ok +stmt 68 err 1 -1 103 no such table: p +stmt 103 err 1 -1 138 no such table: c +stmt 138 err 1 -1 168 no such table: p +stmt 168 err 1 -1 189 no such table: c +==== e_fkey-5.1 + PRAGMA foreign_keys +---- +stmt 0 ok +==== e_fkey-5.2 + + PRAGMA foreign_keys = ON; + PRAGMA foreign_keys; +---- +stmt 0 ok +stmt 31 ok +==== e_fkey-5.3 + + PRAGMA foreign_keys = OFF; + PRAGMA foreign_keys; +---- +stmt 0 ok +stmt 32 ok +==== e_fkey-6.2 + PRAGMA foreign_keys +---- +stmt 0 ok +==== e_fkey-6.3 + + COMMIT; + PRAGMA foreign_keys = OFF; + BEGIN; + PRAGMA foreign_keys = ON; + DELETE FROM t1; + PRAGMA foreign_keys; +---- +stmt 0 ok +stmt 12 ok +stmt 43 ok +stmt 54 ok +stmt 86 err 1 -1 108 no such table: t1 +stmt 108 ok +==== e_fkey-7.1 + + CREATE TABLE artist( + artistid INTEGER PRIMARY KEY, + artistname TEXT + ); + CREATE TABLE track( + trackid INTEGER, + trackname TEXT, + trackartist INTEGER, + FOREIGN KEY(trackartist) REFERENCES artist(artistid) + ); +---- +stmt 0 ok +stmt 95 ok +==== e_fkey-8.1 + INSERT INTO track VALUES(1, 'track 1', 1) +---- +stmt 0 err 1 -1 43 no such table: track +==== e_fkey-8.2 + INSERT INTO track VALUES(1, 'track 1', 2) +---- +stmt 0 err 1 -1 43 no such table: track +==== e_fkey-9.1 + DELETE FROM artist WHERE artistid = 2 +---- +stmt 0 err 1 -1 39 no such table: artist +==== e_fkey-9.2 + + DELETE FROM track WHERE trackartist = 2; + DELETE FROM artist WHERE artistid = 2; +---- +stmt 0 err 1 -1 46 no such table: track +stmt 46 err 1 -1 89 no such table: artist +==== e_fkey-10.1 + + INSERT INTO track VALUES(1, 'track 1', NULL); + INSERT INTO track VALUES(2, 'track 2', NULL); +---- +stmt 0 err 1 -1 50 no such table: track +stmt 50 err 1 -1 100 no such table: track +==== e_fkey-10.2 + SELECT * FROM artist +---- +stmt 0 err 1 -1 22 no such table: artist +==== e_fkey-10.5 + + UPDATE track SET trackartist = NULL WHERE trackid = 1; + DELETE FROM artist WHERE artistid = 5; +---- +stmt 0 err 1 -1 60 no such table: track +stmt 60 err 1 -1 103 no such table: artist +==== e_fkey-generated + + SELECT count(*) FROM track WHERE NOT ( + trackartist IS NULL OR + EXISTS(SELECT 1 FROM artist WHERE artistid=trackartist) + ) +---- +stmt 0 err 1 -1 150 no such table: track +==== e_fkey-12.1 + + CREATE TABLE artist( + artistid INTEGER PRIMARY KEY, + artistname TEXT + ); + CREATE TABLE track( + trackid INTEGER, + trackname TEXT, + trackartist INTEGER NOT NULL, + FOREIGN KEY(trackartist) REFERENCES artist(artistid) + ); +---- +stmt 0 ok +stmt 95 ok +==== e_fkey-12.2 + INSERT INTO track VALUES(14, 'Mr. Bojangles', NULL) +---- +stmt 0 err 1 -1 53 no such table: track +==== e_fkey-13.1 + + CREATE TABLE artist( + artistid INTEGER PRIMARY KEY, + artistname TEXT + ); + CREATE TABLE track( + trackid INTEGER, + trackname TEXT, + trackartist INTEGER, + FOREIGN KEY(trackartist) REFERENCES artist(artistid) + ); + INSERT INTO artist VALUES(1, 'Dean Martin'); + INSERT INTO artist VALUES(2, 'Frank Sinatra'); + INSERT INTO track VALUES(11, 'That''s Amore', 1); + INSERT INTO track VALUES(12, 'Christmas Blues', 1); + INSERT INTO track VALUES(13, 'My Way', 2); +---- +stmt 0 ok +stmt 95 ok +stmt 265 err 1 -1 314 no such table: artist +stmt 314 err 1 -1 365 no such table: artist +stmt 365 err 1 -1 419 no such table: track +stmt 419 err 1 -1 475 no such table: track +stmt 475 err 1 -1 522 no such table: track +==== e_fkey-13.2 + INSERT INTO track VALUES(14, 'Mr. Bojangles', 3) +---- +stmt 0 err 1 -1 50 no such table: track +==== e_fkey-13.3 + INSERT INTO track VALUES(14, 'Mr. Bojangles', NULL) +---- +stmt 0 err 1 -1 53 no such table: track +==== e_fkey-13.4 + + UPDATE track SET trackartist = 3 WHERE trackname = 'Mr. Bojangles'; +---- +stmt 0 err 1 -1 73 no such table: track +==== e_fkey-13.5 + + INSERT INTO artist VALUES(3, 'Sammy Davis Jr.'); + UPDATE track SET trackartist = 3 WHERE trackname = 'Mr. Bojangles'; + INSERT INTO track VALUES(15, 'Boogie Woogie', 3); +---- +stmt 0 err 1 -1 53 no such table: artist +stmt 53 err 1 -1 125 no such table: track +stmt 125 err 1 -1 179 no such table: track +==== e_fkey-14.1 + + DELETE FROM artist WHERE artistname = 'Frank Sinatra'; +---- +stmt 0 err 1 -1 59 no such table: artist +==== e_fkey-14.2 + + DELETE FROM track WHERE trackname = 'My Way'; + DELETE FROM artist WHERE artistname = 'Frank Sinatra'; +---- +stmt 0 err 1 -1 50 no such table: track +stmt 50 err 1 -1 109 no such table: artist +==== e_fkey-14.3 + + UPDATE artist SET artistid=4 WHERE artistname = 'Dean Martin'; +---- +stmt 0 err 1 -1 67 no such table: artist +==== e_fkey-14.4 + + DELETE FROM track WHERE trackname IN('That''s Amore', 'Christmas Blues'); + UPDATE artist SET artistid=4 WHERE artistname = 'Dean Martin'; +---- +stmt 0 err 1 -1 78 no such table: track +stmt 78 err 1 -1 145 no such table: artist +==== e_fkey-15.1 + + CREATE TABLE par(p PRIMARY KEY); + CREATE TABLE chi(c REFERENCES par); + + INSERT INTO par VALUES(1); + INSERT INTO par VALUES('1'); + INSERT INTO par VALUES(X'31'); + SELECT typeof(p) FROM par; +---- +stmt 0 ok +stmt 37 ok +stmt 77 err 1 -1 109 no such table: par +stmt 109 err 1 -1 142 no such table: par +stmt 142 err 1 -1 177 no such table: par +stmt 177 err 1 -1 208 no such table: par +==== e_fkey-generated.dup1 + + SELECT * FROM chi WHERE c IS NOT NULL AND c NOT IN (SELECT p FROM par) +---- +stmt 0 err 1 -1 78 no such table: chi +==== e_fkey-16.1 + + CREATE TABLE t1(a COLLATE nocase PRIMARY KEY); + CREATE TABLE t2(b REFERENCES t1); +---- +stmt 0 ok +stmt 51 ok +==== e_fkey-16.2 + + INSERT INTO t1 VALUES('oNe'); + INSERT INTO t2 VALUES('one'); + INSERT INTO t2 VALUES('ONE'); + UPDATE t2 SET b = 'OnE'; + UPDATE t1 SET a = 'ONE'; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 68 no such table: t2 +stmt 68 err 1 -1 102 no such table: t2 +stmt 102 err 1 -1 131 no such table: t2 +stmt 131 err 1 -1 160 no such table: t1 +==== e_fkey-16.3 + UPDATE t2 SET b = 'two' WHERE rowid = 1 +---- +stmt 0 err 1 -1 41 no such table: t2 +==== e_fkey-16.4 + DELETE FROM t1 WHERE rowid = 1 +---- +stmt 0 err 1 -1 32 no such table: t1 +==== e_fkey-17.1 + + CREATE TABLE t1(a NUMERIC PRIMARY KEY); + CREATE TABLE t2(b TEXT REFERENCES t1); +---- +stmt 0 ok +stmt 44 ok +==== e_fkey-17.2 + + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES('three'); + INSERT INTO t2 VALUES('2.0'); + SELECT b, typeof(b) FROM t2; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 130 no such table: t2 +stmt 130 err 1 -1 163 no such table: t2 +==== e_fkey-17.3 + SELECT typeof(a) FROM t1 +---- +stmt 0 err 1 -1 26 no such table: t1 +==== e_fkey-17.4 + DELETE FROM t1 WHERE rowid = 2 +---- +stmt 0 err 1 -1 32 no such table: t1 +==== e_fkey-18.1 + + CREATE TABLE t2(a REFERENCES t1(x)); +---- +stmt 0 ok +==== e_fkey-generated.dup2 + INSERT INTO t2 VALUES(NULL) +---- +stmt 0 err 1 -1 29 no such table: t2 +==== e_fkey-19.1 + + CREATE TABLE parent(a PRIMARY KEY, b UNIQUE, c, d, e, f); + CREATE UNIQUE INDEX i1 ON parent(c, d); + CREATE INDEX i2 ON parent(e); + CREATE UNIQUE INDEX i3 ON parent(f COLLATE nocase); + + CREATE TABLE child1(f, g REFERENCES parent(a)); -- Ok + CREATE TABLE child2(h, i REFERENCES parent(b)); -- Ok + CREATE TABLE child3(j, k, FOREIGN KEY(j, k) REFERENCES parent(c, d)); -- Ok + CREATE TABLE child4(l, m REFERENCES parent(e)); -- Err + CREATE TABLE child5(n, o REFERENCES parent(f)); -- Err + CREATE TABLE child6(p, q, FOREIGN KEY(p,q) REFERENCES parent(b, c)); -- Err + CREATE TABLE child7(r REFERENCES parent(c)); -- Err +---- +stmt 0 ok +stmt 62 err 1 -1 106 no such table: main.parent +stmt 106 err 1 -1 140 no such table: main.parent +stmt 140 err 1 -1 196 no such table: main.parent +stmt 196 ok +stmt 249 ok +stmt 329 ok +stmt 431 ok +stmt 489 ok +stmt 570 ok +stmt 672 ok +==== e_fkey-19.2 + + INSERT INTO parent VALUES(1, 2, 3, 4, 5, 6); + INSERT INTO child1 VALUES('xxx', 1); + INSERT INTO child2 VALUES('xxx', 2); + INSERT INTO child3 VALUES(3, 4); +---- +stmt 0 err 1 -1 49 no such table: parent +stmt 49 err 1 -1 90 no such table: child1 +stmt 90 err 1 -1 131 no such table: child2 +stmt 131 err 1 -1 168 no such table: child3 +==== e_fkey-19.2.dup1 + INSERT INTO child4 VALUES('xxx', 5) +---- +stmt 0 err 1 -1 37 no such table: child4 +==== e_fkey-19.3 + INSERT INTO child5 VALUES('xxx', 6) +---- +stmt 0 err 1 -1 37 no such table: child5 +==== e_fkey-19.4 + INSERT INTO child6 VALUES(2, 3) +---- +stmt 0 err 1 -1 33 no such table: child6 +==== e_fkey-19.5 + INSERT INTO child7 VALUES(3) +---- +stmt 0 err 1 -1 30 no such table: child7 +==== e_fkey-20.1 + + CREATE TABLE c1(c REFERENCES nosuchtable, d); + + CREATE TABLE p2(a, b, UNIQUE(a, b)); + CREATE TABLE c2(c, d, FOREIGN KEY(c, d) REFERENCES p2(a, x)); + + CREATE TABLE p3(a PRIMARY KEY, b); + CREATE TABLE c3(c REFERENCES p3(b), d); + + CREATE TABLE p4(a PRIMARY KEY, b); + CREATE UNIQUE INDEX p4i ON p4(b COLLATE nocase); + CREATE TABLE c4(c REFERENCES p4(b), d); + + CREATE TABLE p5(a PRIMARY KEY, b COLLATE nocase); + CREATE UNIQUE INDEX p5i ON p5(b COLLATE binary); + CREATE TABLE c5(c REFERENCES p5(b), d); + + CREATE TABLE p6(a PRIMARY KEY, b); + CREATE TABLE c6(c, d, FOREIGN KEY(c, d) REFERENCES p6); + + CREATE TABLE p7(a, b, PRIMARY KEY(a, b)); + CREATE TABLE c7(c, d REFERENCES p7); +---- +stmt 0 ok +stmt 50 ok +stmt 92 ok +stmt 158 ok +stmt 198 ok +stmt 242 ok +stmt 282 err 1 -1 335 no such table: main.p4 +stmt 335 ok +stmt 379 ok +stmt 434 err 1 -1 487 no such table: main.p5 +stmt 487 ok +stmt 531 ok +stmt 571 ok +stmt 631 ok +stmt 678 ok +==== e_fkey-21.1 + + CREATE TABLE parent2(a, b, PRIMARY KEY(a,b)); + + CREATE TABLE child8(x, y, FOREIGN KEY(x,y) REFERENCES parent2); -- Ok + CREATE TABLE child9(x REFERENCES parent2); -- Err + CREATE TABLE child10(x,y,z, FOREIGN KEY(x,y,z) REFERENCES parent2); -- Err +---- +stmt 0 ok +stmt 50 ok +stmt 119 ok +stmt 176 ok +==== e_fkey-21.2 + + INSERT INTO parent2 VALUES('I', 'II'); + INSERT INTO child8 VALUES('I', 'II'); +---- +stmt 0 err 1 -1 43 no such table: parent2 +stmt 43 err 1 -1 85 no such table: child8 +==== e_fkey-21.3 + INSERT INTO child9 VALUES('I') +---- +stmt 0 err 1 -1 32 no such table: child9 +==== e_fkey-21.4 + INSERT INTO child9 VALUES('II') +---- +stmt 0 err 1 -1 33 no such table: child9 +==== e_fkey-21.5 + INSERT INTO child9 VALUES(NULL) +---- +stmt 0 err 1 -1 33 no such table: child9 +==== e_fkey-21.6 + INSERT INTO child10 VALUES('I', 'II', 'III') +---- +stmt 0 err 1 -1 46 no such table: child10 +==== e_fkey-21.7 + INSERT INTO child10 VALUES(1, 2, 3) +---- +stmt 0 err 1 -1 37 no such table: child10 +==== e_fkey-21.8 + INSERT INTO child10 VALUES(NULL, NULL, NULL) +---- +stmt 0 err 1 -1 46 no such table: child10 +==== e_fkey-23.1 + + CREATE TABLE p1(a, b, PRIMARY KEY(a, b)); + CREATE TABLE p2(a, b PRIMARY KEY); + CREATE TABLE c1(c, d, FOREIGN KEY(c, d) REFERENCES p1); + CREATE TABLE c2(a, b REFERENCES p2); +---- +stmt 0 ok +stmt 46 ok +stmt 85 ok +stmt 145 ok +==== e_fkey-24.1 + + CREATE TABLE parent(x, y, UNIQUE(y, x)); + CREATE TABLE c1(a, b, FOREIGN KEY(a, b) REFERENCES parent(x, y)); + CREATE TABLE c2(a, b, FOREIGN KEY(a, b) REFERENCES parent(x, y)); + CREATE TABLE c3(a, b, FOREIGN KEY(a, b) REFERENCES parent(x, y)); + CREATE INDEX c2i ON c2(a, b); + CREATE UNIQUE INDEX c3i ON c2(b, a); +---- +stmt 0 ok +stmt 45 ok +stmt 115 ok +stmt 185 ok +stmt 255 err 1 -1 289 no such table: main.c2 +stmt 289 err 1 -1 330 no such table: main.c2 +==== e_fkey-25.1 + + CREATE TABLE artist( + artistid INTEGER PRIMARY KEY, + artistname TEXT + ); + CREATE TABLE track( + trackid INTEGER, + trackname TEXT, + trackartist INTEGER, + FOREIGN KEY(trackartist) REFERENCES artist(artistid) + ); +---- +stmt 0 ok +stmt 95 ok +==== e_fkey-25.4 + + INSERT INTO artist VALUES(5, 'artist 5'); + INSERT INTO artist VALUES(6, 'artist 6'); + INSERT INTO artist VALUES(7, 'artist 7'); + INSERT INTO track VALUES(1, 'track 1', 5); + INSERT INTO track VALUES(2, 'track 2', 6); +---- +stmt 0 err 1 -1 46 no such table: artist +stmt 46 err 1 -1 92 no such table: artist +stmt 92 err 1 -1 138 no such table: artist +stmt 138 err 1 -1 185 no such table: track +stmt 185 err 1 -1 232 no such table: track +==== e_fkey-26.1 + CREATE TABLE parent(x, y, UNIQUE(y, x)) +---- +stmt 0 ok +==== e_fkey-27.1 + + CREATE TABLE artist( + artistid INTEGER PRIMARY KEY, + artistname TEXT + ); + CREATE TABLE track( + trackid INTEGER, + trackname TEXT, + trackartist INTEGER REFERENCES artist + ); + CREATE INDEX trackindex ON track(trackartist); +---- +stmt 0 ok +stmt 95 ok +stmt 222 err 1 -1 273 no such table: main.track +==== e_fkey-29.1 + + CREATE TABLE album( + albumartist TEXT, + albumname TEXT, + albumcover BINARY, + PRIMARY KEY(albumartist, albumname) + ); + CREATE TABLE song( + songid INTEGER, + songartist TEXT, + songalbum TEXT, + songname TEXT, + FOREIGN KEY(songartist, songalbum) REFERENCES album(albumartist,albumname) + ); +---- +stmt 0 ok +stmt 144 ok +==== e_fkey-29.2 + + INSERT INTO album VALUES('Elvis Presley', 'Elvis'' Christmas Album', NULL); + INSERT INTO song VALUES( + 1, 'Elvis Presley', 'Elvis'' Christmas Album', 'Here Comes Santa Clause' + ); +---- +stmt 0 err 1 -1 80 no such table: album +stmt 80 err 1 -1 195 no such table: song +==== e_fkey-29.3 + + INSERT INTO song VALUES(2, 'Elvis Presley', 'Elvis Is Back!', 'Fever'); +---- +stmt 0 err 1 -1 76 no such table: song +==== e_fkey-30.1 + + INSERT INTO song VALUES(2, 'Elvis Presley', NULL, 'Fever'); + INSERT INTO song VALUES(3, NULL, 'Elvis Is Back', 'Soldier Boy'); +---- +stmt 0 err 1 -1 64 no such table: song +stmt 64 err 1 -1 134 no such table: song +==== e_fkey-31.1 + + CREATE TABLE king(a, b, PRIMARY KEY(a)); + CREATE TABLE prince(c REFERENCES king, d); +---- +stmt 0 ok +stmt 45 ok +==== e_fkey-31.5 + + COMMIT; + SELECT * FROM king; +---- +stmt 0 ok +stmt 12 err 1 -1 36 no such table: king +==== e_fkey-33.1 + + CREATE TABLE parent(x, y); + CREATE UNIQUE INDEX pi ON parent(x, y); + CREATE TABLE child(a, b, + FOREIGN KEY(a, b) REFERENCES parent(x, y) DEFERRABLE INITIALLY DEFERRED + ); +---- +stmt 0 ok +stmt 31 err 1 -1 75 no such table: main.parent +stmt 75 ok +==== e_fkey-34.1 + + CREATE TABLE parent(x, y, z, PRIMARY KEY(x,y,z)); + CREATE TABLE c1(a, b, c, + FOREIGN KEY(a, b, c) REFERENCES parent NOT DEFERRABLE INITIALLY DEFERRED + ); + CREATE TABLE c2(a, b, c, + FOREIGN KEY(a, b, c) REFERENCES parent NOT DEFERRABLE INITIALLY IMMEDIATE + ); + CREATE TABLE c3(a, b, c, + FOREIGN KEY(a, b, c) REFERENCES parent NOT DEFERRABLE + ); + CREATE TABLE c4(a, b, c, + FOREIGN KEY(a, b, c) REFERENCES parent DEFERRABLE INITIALLY IMMEDIATE + ); + CREATE TABLE c5(a, b, c, + FOREIGN KEY(a, b, c) REFERENCES parent DEFERRABLE + ); + CREATE TABLE c6(a, b, c, FOREIGN KEY(a, b, c) REFERENCES parent); + + -- This FK constraint is the only deferrable one. + CREATE TABLE c7(a, b, c, + FOREIGN KEY(a, b, c) REFERENCES parent DEFERRABLE INITIALLY DEFERRED + ); + + INSERT INTO parent VALUES('a', 'b', 'c'); + INSERT INTO parent VALUES('d', 'e', 'f'); + INSERT INTO parent VALUES('g', 'h', 'i'); + INSERT INTO parent VALUES('j', 'k', 'l'); + INSERT INTO parent VALUES('m', 'n', 'o'); + INSERT INTO parent VALUES('p', 'q', 'r'); + INSERT INTO parent VALUES('s', 't', 'u'); + + INSERT INTO c1 VALUES('a', 'b', 'c'); + INSERT INTO c2 VALUES('d', 'e', 'f'); + INSERT INTO c3 VALUES('g', 'h', 'i'); + INSERT INTO c4 VALUES('j', 'k', 'l'); + INSERT INTO c5 VALUES('m', 'n', 'o'); + INSERT INTO c6 VALUES('p', 'q', 'r'); + INSERT INTO c7 VALUES('s', 't', 'u'); +---- +stmt 0 ok +stmt 54 ok +stmt 169 ok +stmt 285 ok +stmt 381 ok +stmt 493 ok +stmt 585 ok +stmt 655 ok +stmt 821 err 1 -1 868 no such table: parent +stmt 868 err 1 -1 914 no such table: parent +stmt 914 err 1 -1 960 no such table: parent +stmt 960 err 1 -1 1006 no such table: parent +stmt 1006 err 1 -1 1052 no such table: parent +stmt 1052 err 1 -1 1098 no such table: parent +stmt 1098 err 1 -1 1144 no such table: parent +stmt 1144 err 1 -1 1187 no such table: c1 +stmt 1187 err 1 -1 1229 no such table: c2 +stmt 1229 err 1 -1 1271 no such table: c3 +stmt 1271 err 1 -1 1313 no such table: c4 +stmt 1313 err 1 -1 1355 no such table: c5 +stmt 1355 err 1 -1 1397 no such table: c6 +stmt 1397 err 1 -1 1439 no such table: c7 +==== e_fkey-35.3 + + INSERT INTO artist VALUES(5, 'Bing Crosby'); + COMMIT; +---- +stmt 0 err 1 -1 49 no such table: artist +stmt 49 ok +==== e_fkey-36.1 + + CREATE TABLE t1(a PRIMARY KEY, + b REFERENCES t1 DEFERRABLE INITIALLY DEFERRED + ); + INSERT INTO t1 VALUES(1, 1); + INSERT INTO t1 VALUES(2, 2); + INSERT INTO t1 VALUES(3, 3); +---- +stmt 0 ok +stmt 94 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 193 no such table: t1 +==== e_fkey-36.2 + + BEGIN; + SAVEPOINT one; + INSERT INTO t1 VALUES(4, 5); + RELEASE one; +---- +stmt 0 ok +stmt 11 ok +stmt 32 err 1 -1 69 no such table: t1 +stmt 69 ok +==== e_fkey-36.4 + + UPDATE t1 SET a = 5 WHERE a = 4; + COMMIT; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 ok +==== e_fkey-37.1 + + SAVEPOINT one; + SAVEPOINT two; + INSERT INTO t1 VALUES(6, 7); + RELEASE two; +---- +stmt 0 ok +stmt 19 ok +stmt 40 err 1 -1 77 no such table: t1 +stmt 77 ok +==== e_fkey-37.2 +RELEASE one +---- +stmt 0 ok +==== e_fkey-37.3 + + UPDATE t1 SET a = 7 WHERE a = 6; + RELEASE one; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 ok +==== e_fkey-37.4 + + SAVEPOINT one; + SAVEPOINT two; + INSERT INTO t1 VALUES(9, 10); + RELEASE two; +---- +stmt 0 ok +stmt 19 ok +stmt 40 err 1 -1 78 no such table: t1 +stmt 78 ok +==== e_fkey-37.5 +RELEASE one +---- +stmt 0 ok +==== e_fkey-37.6 +ROLLBACK TO one ; RELEASE one +---- +stmt 0 ok +stmt 17 ok +==== e_fkey-38.1 + + DELETE FROM t1 WHERE a>3; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 52 no such table: t1 +==== e_fkey-38.2 + + BEGIN; + INSERT INTO t1 VALUES(4, 4); + SAVEPOINT one; + INSERT INTO t1 VALUES(5, 6); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 11 err 1 -1 46 no such table: t1 +stmt 46 ok +stmt 67 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 130 no such table: t1 +==== e_fkey-38.4 + + ROLLBACK TO one; + COMMIT; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 21 ok +stmt 33 err 1 -1 55 no such table: t1 +==== e_fkey-38.5 + + SAVEPOINT a; + INSERT INTO t1 VALUES(5, 5); + SAVEPOINT b; + INSERT INTO t1 VALUES(6, 7); + SAVEPOINT c; + INSERT INTO t1 VALUES(7, 8); +---- +stmt 0 ok +stmt 17 err 1 -1 52 no such table: t1 +stmt 52 ok +stmt 71 err 1 -1 108 no such table: t1 +stmt 108 ok +stmt 129 err 1 -1 168 no such table: t1 +==== e_fkey-38.6 +RELEASE a +---- +stmt 0 ok +==== e_fkey-38.8 + + ROLLBACK TO b; + RELEASE a; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 19 ok +stmt 34 err 1 -1 56 no such table: t1 +==== e_fkey-39.1 + + CREATE TABLE p(a, b PRIMARY KEY, c); + CREATE TABLE c1(d, e, f DEFAULT 'k0' REFERENCES p + ON UPDATE SET DEFAULT + ON DELETE SET NULL + ); + + INSERT INTO p VALUES(0, 'k0', ''); + INSERT INTO p VALUES(1, 'k1', 'I'); + INSERT INTO p VALUES(2, 'k2', 'II'); + INSERT INTO p VALUES(3, 'k3', 'III'); + + INSERT INTO c1 VALUES(1, 'xx', 'k1'); + INSERT INTO c1 VALUES(2, 'xx', 'k2'); + INSERT INTO c1 VALUES(3, 'xx', 'k3'); +---- +stmt 0 ok +stmt 41 ok +stmt 156 err 1 -1 196 no such table: p +stmt 196 err 1 -1 236 no such table: p +stmt 236 err 1 -1 277 no such table: p +stmt 277 err 1 -1 319 no such table: p +stmt 319 err 1 -1 362 no such table: c1 +stmt 362 err 1 -1 404 no such table: c1 +stmt 404 err 1 -1 446 no such table: c1 +==== e_fkey-39.2 + + UPDATE p SET b = 'k4' WHERE a = 1; + SELECT * FROM c1; +---- +stmt 0 err 1 -1 39 no such table: p +stmt 39 err 1 -1 61 no such table: c1 +==== e_fkey-39.3 + + DELETE FROM p WHERE a = 2; + SELECT * FROM c1; +---- +stmt 0 err 1 -1 31 no such table: p +stmt 31 err 1 -1 53 no such table: c1 +==== e_fkey-39.4 + + CREATE UNIQUE INDEX pi ON p(c); + REPLACE INTO p VALUES(5, 'k5', 'III'); + SELECT * FROM c1; +---- +stmt 0 err 1 -1 36 no such table: main.p +stmt 36 err 1 -1 79 no such table: p +stmt 79 err 1 -1 101 no such table: c1 +==== e_fkey-40.1 + + CREATE TABLE parent(x PRIMARY KEY, y); + CREATE TABLE child1(a, + b REFERENCES parent ON UPDATE NO ACTION ON DELETE RESTRICT + ); + CREATE TABLE child2(a, + b REFERENCES parent ON UPDATE RESTRICT ON DELETE SET NULL + ); + CREATE TABLE child3(a, + b REFERENCES parent ON UPDATE SET NULL ON DELETE SET DEFAULT + ); + CREATE TABLE child4(a, + b REFERENCES parent ON UPDATE SET DEFAULT ON DELETE CASCADE + ); + + -- Create some foreign keys that use the default action - "NO ACTION" + CREATE TABLE child5(a, b REFERENCES parent ON UPDATE CASCADE); + CREATE TABLE child6(a, b REFERENCES parent ON DELETE RESTRICT); + CREATE TABLE child7(a, b REFERENCES parent ON DELETE NO ACTION); + CREATE TABLE child8(a, b REFERENCES parent ON UPDATE NO ACTION); +---- +stmt 0 ok +stmt 43 ok +stmt 143 ok +stmt 242 ok +stmt 344 ok +stmt 445 ok +stmt 587 ok +stmt 655 ok +stmt 724 ok +==== e_fkey-41.1 + + CREATE TABLE parent(p1, p2, PRIMARY KEY(p1, p2)); + CREATE TABLE child(c1, c2, + FOREIGN KEY(c1, c2) REFERENCES parent + ON UPDATE NO ACTION + ON DELETE NO ACTION + DEFERRABLE INITIALLY DEFERRED + ); + INSERT INTO parent VALUES('j', 'k'); + INSERT INTO parent VALUES('l', 'm'); + INSERT INTO child VALUES('j', 'k'); + INSERT INTO child VALUES('l', 'm'); +---- +stmt 0 ok +stmt 54 ok +stmt 225 err 1 -1 266 no such table: parent +stmt 266 err 1 -1 307 no such table: parent +stmt 307 err 1 -1 347 no such table: child +stmt 347 err 1 -1 387 no such table: child +==== e_fkey-41.2 + + BEGIN; + UPDATE parent SET p1='k' WHERE p1='j'; + DELETE FROM parent WHERE p1='l'; + SELECT * FROM child; +---- +stmt 0 ok +stmt 11 err 1 -1 56 no such table: parent +stmt 56 err 1 -1 95 no such table: parent +stmt 95 err 1 -1 122 no such table: child +==== e_fkey-41.1.dup1 + + CREATE TABLE parent(p1, p2); + CREATE UNIQUE INDEX parent_i ON parent(p1, p2); + CREATE TABLE child1(c1, c2, + FOREIGN KEY(c2, c1) REFERENCES parent(p1, p2) ON DELETE RESTRICT + ); + CREATE TABLE child2(c1, c2, + FOREIGN KEY(c2, c1) REFERENCES parent(p1, p2) ON UPDATE RESTRICT + ); +---- +stmt 0 ok +stmt 33 err 1 -1 85 no such table: main.parent +stmt 85 ok +stmt 196 ok +==== e_fkey-41.2.dup1 + + INSERT INTO parent VALUES('a', 'b'); + INSERT INTO parent VALUES('c', 'd'); + INSERT INTO child1 VALUES('b', 'a'); + INSERT INTO child2 VALUES('d', 'c'); +---- +stmt 0 err 1 -1 41 no such table: parent +stmt 41 err 1 -1 82 no such table: parent +stmt 82 err 1 -1 123 no such table: child1 +stmt 123 err 1 -1 164 no such table: child2 +==== e_fkey-41.3 + DELETE FROM parent WHERE p1 = 'a' +---- +stmt 0 err 1 -1 35 no such table: parent +==== e_fkey-41.4 + UPDATE parent SET p2 = 'e' WHERE p1 = 'c' +---- +stmt 0 err 1 -1 43 no such table: parent +==== e_fkey-42.1 + + CREATE TABLE parent(x PRIMARY KEY); + CREATE TABLE child1(c REFERENCES parent ON UPDATE RESTRICT); + CREATE TABLE child2(c REFERENCES parent ON UPDATE NO ACTION); + + INSERT INTO parent VALUES('key1'); + INSERT INTO parent VALUES('key2'); + INSERT INTO child1 VALUES('key1'); + INSERT INTO child2 VALUES('key2'); + + CREATE TRIGGER parent_t AFTER UPDATE ON parent BEGIN + UPDATE child1 set c = new.x WHERE c = old.x; + UPDATE child2 set c = new.x WHERE c = old.x; + END; +---- +stmt 0 ok +stmt 40 ok +stmt 105 ok +stmt 171 err 1 -1 211 no such table: parent +stmt 211 err 1 -1 250 no such table: parent +stmt 250 err 1 -1 289 no such table: child1 +stmt 289 err 1 -1 328 no such table: child2 +stmt 328 err 1 -1 386 no such table: main.parent +==== e_fkey-42.2 + UPDATE parent SET x = 'key one' WHERE x = 'key1' +---- +stmt 0 err 1 -1 50 no such table: parent +==== e_fkey-42.3 + + UPDATE parent SET x = 'key two' WHERE x = 'key2'; + SELECT * FROM child2; +---- +stmt 0 err 1 -1 55 no such table: parent +stmt 55 err 1 -1 81 no such table: child2 +==== e_fkey-42.4 + + CREATE TABLE parent(x PRIMARY KEY); + CREATE TABLE child1(c REFERENCES parent ON DELETE RESTRICT); + CREATE TABLE child2(c REFERENCES parent ON DELETE NO ACTION); + + INSERT INTO parent VALUES('key1'); + INSERT INTO parent VALUES('key2'); + INSERT INTO child1 VALUES('key1'); + INSERT INTO child2 VALUES('key2'); + + CREATE TRIGGER parent_t AFTER DELETE ON parent BEGIN + UPDATE child1 SET c = NULL WHERE c = old.x; + UPDATE child2 SET c = NULL WHERE c = old.x; + END; +---- +stmt 0 ok +stmt 40 ok +stmt 105 ok +stmt 171 err 1 -1 211 no such table: parent +stmt 211 err 1 -1 250 no such table: parent +stmt 250 err 1 -1 289 no such table: child1 +stmt 289 err 1 -1 328 no such table: child2 +stmt 328 err 1 -1 386 no such table: main.parent +==== e_fkey-42.5 + DELETE FROM parent WHERE x = 'key1' +---- +stmt 0 err 1 -1 37 no such table: parent +==== e_fkey-42.6 + + DELETE FROM parent WHERE x = 'key2'; + SELECT * FROM child2; +---- +stmt 0 err 1 -1 42 no such table: parent +stmt 42 err 1 -1 68 no such table: child2 +==== e_fkey-42.7 + + CREATE TABLE parent(x PRIMARY KEY); + CREATE TABLE child1(c REFERENCES parent ON DELETE RESTRICT); + CREATE TABLE child2(c REFERENCES parent ON DELETE NO ACTION); + + INSERT INTO parent VALUES('key1'); + INSERT INTO parent VALUES('key2'); + INSERT INTO child1 VALUES('key1'); + INSERT INTO child2 VALUES('key2'); +---- +stmt 0 ok +stmt 40 ok +stmt 105 ok +stmt 171 err 1 -1 211 no such table: parent +stmt 211 err 1 -1 250 no such table: parent +stmt 250 err 1 -1 289 no such table: child1 +stmt 289 err 1 -1 328 no such table: child2 +==== e_fkey-42.8 + REPLACE INTO parent VALUES('key1') +---- +stmt 0 err 1 -1 36 no such table: parent +==== e_fkey-42.9 + + REPLACE INTO parent VALUES('key2'); + SELECT * FROM child2; +---- +stmt 0 err 1 -1 41 no such table: parent +stmt 41 err 1 -1 67 no such table: child2 +==== e_fkey-43.1 + + CREATE TABLE parent(x PRIMARY KEY); + CREATE TABLE child1(c REFERENCES parent ON UPDATE RESTRICT + DEFERRABLE INITIALLY DEFERRED + ); + CREATE TABLE child2(c REFERENCES parent ON UPDATE NO ACTION + DEFERRABLE INITIALLY DEFERRED + ); + + INSERT INTO parent VALUES('key1'); + INSERT INTO parent VALUES('key2'); + INSERT INTO child1 VALUES('key1'); + INSERT INTO child2 VALUES('key2'); + BEGIN; +---- +stmt 0 ok +stmt 40 ok +stmt 146 ok +stmt 253 err 1 -1 293 no such table: parent +stmt 293 err 1 -1 332 no such table: parent +stmt 332 err 1 -1 371 no such table: child1 +stmt 371 err 1 -1 410 no such table: child2 +stmt 410 ok +==== e_fkey-43.2 + UPDATE parent SET x = 'key one' WHERE x = 'key1' +---- +stmt 0 err 1 -1 50 no such table: parent +==== e_fkey-43.3 + UPDATE parent SET x = 'key two' WHERE x = 'key2' +---- +stmt 0 err 1 -1 50 no such table: parent +==== e_fkey-43.5 + + UPDATE child2 SET c = 'key two'; + COMMIT; +---- +stmt 0 err 1 -1 37 no such table: child2 +stmt 37 ok +==== e_fkey-43.6 + + CREATE TABLE parent(x PRIMARY KEY); + CREATE TABLE child1(c REFERENCES parent ON DELETE RESTRICT + DEFERRABLE INITIALLY DEFERRED + ); + CREATE TABLE child2(c REFERENCES parent ON DELETE NO ACTION + DEFERRABLE INITIALLY DEFERRED + ); + + INSERT INTO parent VALUES('key1'); + INSERT INTO parent VALUES('key2'); + INSERT INTO child1 VALUES('key1'); + INSERT INTO child2 VALUES('key2'); + BEGIN; +---- +stmt 0 ok +stmt 40 ok +stmt 146 ok +stmt 253 err 1 -1 293 no such table: parent +stmt 293 err 1 -1 332 no such table: parent +stmt 332 err 1 -1 371 no such table: child1 +stmt 371 err 1 -1 410 no such table: child2 +stmt 410 ok +==== e_fkey-43.7 + DELETE FROM parent WHERE x = 'key1' +---- +stmt 0 err 1 -1 37 no such table: parent +==== e_fkey-43.8 + DELETE FROM parent WHERE x = 'key2' +---- +stmt 0 err 1 -1 37 no such table: parent +==== e_fkey-43.10 + + UPDATE child2 SET c = NULL; + COMMIT; +---- +stmt 0 err 1 -1 32 no such table: child2 +stmt 32 ok +==== e_fkey-44.1 + + CREATE TABLE pA(x PRIMARY KEY); + CREATE TABLE cA(c REFERENCES pA ON DELETE SET NULL); + CREATE TABLE cB(c REFERENCES pA ON UPDATE SET NULL); + + INSERT INTO pA VALUES(X'ABCD'); + INSERT INTO pA VALUES(X'1234'); + INSERT INTO cA VALUES(X'ABCD'); + INSERT INTO cB VALUES(X'1234'); +---- +stmt 0 ok +stmt 36 ok +stmt 93 ok +stmt 150 err 1 -1 187 no such table: pA +stmt 187 err 1 -1 223 no such table: pA +stmt 223 err 1 -1 259 no such table: cA +stmt 259 err 1 -1 295 no such table: cB +==== e_fkey-44.2 + + DELETE FROM pA WHERE rowid = 1; + SELECT quote(x) FROM pA; +---- +stmt 0 err 1 -1 36 no such table: pA +stmt 36 err 1 -1 65 no such table: pA +==== e_fkey-44.3 + + SELECT quote(c) FROM cA; +---- +stmt 0 err 1 -1 29 no such table: cA +==== e_fkey-44.4 + + UPDATE pA SET x = X'8765' WHERE rowid = 2; + SELECT quote(x) FROM pA; +---- +stmt 0 err 1 -1 47 no such table: pA +stmt 47 err 1 -1 76 no such table: pA +==== e_fkey-44.5 + SELECT quote(c) FROM cB +---- +stmt 0 err 1 -1 25 no such table: cB +==== e_fkey-45.1 + + CREATE TABLE pA(x PRIMARY KEY); + CREATE TABLE cA(c DEFAULT X'0000' REFERENCES pA ON DELETE SET DEFAULT); + CREATE TABLE cB(c DEFAULT X'9999' REFERENCES pA ON UPDATE SET DEFAULT); + + INSERT INTO pA(rowid, x) VALUES(1, X'0000'); + INSERT INTO pA(rowid, x) VALUES(2, X'9999'); + INSERT INTO pA(rowid, x) VALUES(3, X'ABCD'); + INSERT INTO pA(rowid, x) VALUES(4, X'1234'); + + INSERT INTO cA VALUES(X'ABCD'); + INSERT INTO cB VALUES(X'1234'); +---- +stmt 0 ok +stmt 36 ok +stmt 112 ok +stmt 188 err 1 -1 238 no such table: pA +stmt 238 err 1 -1 287 no such table: pA +stmt 287 err 1 -1 336 no such table: pA +stmt 336 err 1 -1 385 no such table: pA +stmt 385 err 1 -1 422 no such table: cA +stmt 422 err 1 -1 458 no such table: cB +==== e_fkey-45.2 + + DELETE FROM pA WHERE rowid = 3; + SELECT quote(x) FROM pA ORDER BY rowid; +---- +stmt 0 err 1 -1 36 no such table: pA +stmt 36 err 1 -1 80 no such table: pA +==== e_fkey-45.3 + SELECT quote(c) FROM cA +---- +stmt 0 err 1 -1 25 no such table: cA +==== e_fkey-45.4 + + UPDATE pA SET x = X'8765' WHERE rowid = 4; + SELECT quote(x) FROM pA ORDER BY rowid; +---- +stmt 0 err 1 -1 47 no such table: pA +stmt 47 err 1 -1 91 no such table: pA +==== e_fkey-45.5 + SELECT quote(c) FROM cB +---- +stmt 0 err 1 -1 25 no such table: cB +==== e_fkey-46.1 + + CREATE TABLE p1(a, b UNIQUE); + CREATE TABLE c1(c REFERENCES p1(b) ON DELETE CASCADE, d); + INSERT INTO p1 VALUES(NULL, NULL); + INSERT INTO p1 VALUES(4, 4); + INSERT INTO p1 VALUES(5, 5); + INSERT INTO c1 VALUES(NULL, NULL); + INSERT INTO c1 VALUES(4, 4); + INSERT INTO c1 VALUES(5, 5); + SELECT count(*) FROM c1; +---- +stmt 0 ok +stmt 34 ok +stmt 96 err 1 -1 135 no such table: p1 +stmt 135 err 1 -1 168 no such table: p1 +stmt 168 err 1 -1 201 no such table: p1 +stmt 201 err 1 -1 240 no such table: c1 +stmt 240 err 1 -1 273 no such table: c1 +stmt 273 err 1 -1 306 no such table: c1 +stmt 306 err 1 -1 335 no such table: c1 +==== e_fkey-46.2 + + DELETE FROM p1 WHERE a = 4; + SELECT d, c FROM c1; +---- +stmt 0 err 1 -1 32 no such table: p1 +stmt 32 err 1 -1 57 no such table: c1 +==== e_fkey-46.3 + + DELETE FROM p1; + SELECT d, c FROM c1; +---- +stmt 0 err 1 -1 20 no such table: p1 +stmt 20 err 1 -1 45 no such table: c1 +==== e_fkey-46.4 + SELECT * FROM p1 +---- +stmt 0 err 1 -1 18 no such table: p1 +==== e_fkey-47.1 + + CREATE TABLE p1(a, b UNIQUE); + CREATE TABLE c1(c REFERENCES p1(b) ON UPDATE CASCADE, d); + INSERT INTO p1 VALUES(NULL, NULL); + INSERT INTO p1 VALUES(4, 4); + INSERT INTO p1 VALUES(5, 5); + INSERT INTO c1 VALUES(NULL, NULL); + INSERT INTO c1 VALUES(4, 4); + INSERT INTO c1 VALUES(5, 5); + SELECT count(*) FROM c1; +---- +stmt 0 ok +stmt 34 ok +stmt 96 err 1 -1 135 no such table: p1 +stmt 135 err 1 -1 168 no such table: p1 +stmt 168 err 1 -1 201 no such table: p1 +stmt 201 err 1 -1 240 no such table: c1 +stmt 240 err 1 -1 273 no such table: c1 +stmt 273 err 1 -1 306 no such table: c1 +stmt 306 err 1 -1 335 no such table: c1 +==== e_fkey-47.2 + + UPDATE p1 SET b = 10 WHERE b = 5; + SELECT d, c FROM c1; +---- +stmt 0 err 1 -1 38 no such table: p1 +stmt 38 err 1 -1 63 no such table: c1 +==== e_fkey-47.3 + + UPDATE p1 SET b = 11 WHERE b = 4; + SELECT d, c FROM c1; +---- +stmt 0 err 1 -1 38 no such table: p1 +stmt 38 err 1 -1 63 no such table: c1 +==== e_fkey-47.4 + + UPDATE p1 SET b = 6 WHERE b IS NULL; + SELECT d, c FROM c1; +---- +stmt 0 err 1 -1 42 no such table: p1 +stmt 42 err 1 -1 67 no such table: c1 +==== e_fkey-46.5 + SELECT * FROM p1 +---- +stmt 0 err 1 -1 18 no such table: p1 +==== e_fkey-48.1 + + CREATE TABLE artist( + artistid INTEGER PRIMARY KEY, + artistname TEXT + ); + CREATE TABLE track( + trackid INTEGER, + trackname TEXT, + trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE + ); + + INSERT INTO artist VALUES(1, 'Dean Martin'); + INSERT INTO artist VALUES(2, 'Frank Sinatra'); + INSERT INTO track VALUES(11, 'That''s Amore', 1); + INSERT INTO track VALUES(12, 'Christmas Blues', 1); + INSERT INTO track VALUES(13, 'My Way', 2); +---- +stmt 0 ok +stmt 95 ok +stmt 250 err 1 -1 300 no such table: artist +stmt 300 err 1 -1 351 no such table: artist +stmt 351 err 1 -1 405 no such table: track +stmt 405 err 1 -1 461 no such table: track +stmt 461 err 1 -1 508 no such table: track +==== e_fkey-48.2 + + UPDATE artist SET artistid = 100 WHERE artistname = 'Dean Martin'; +---- +stmt 0 err 1 -1 71 no such table: artist +==== e_fkey-48.3 + SELECT * FROM artist +---- +stmt 0 err 1 -1 22 no such table: artist +==== e_fkey-48.4 + SELECT * FROM track +---- +stmt 0 err 1 -1 21 no such table: track +==== e_fkey-49.1 + + CREATE TABLE parent(a COLLATE nocase, b, c, PRIMARY KEY(c, a)); + CREATE TABLE child(d DEFAULT 'a', e, f DEFAULT 'c', + FOREIGN KEY(f, d) REFERENCES parent ON UPDATE SET DEFAULT + ); + + INSERT INTO parent VALUES('A', 'b', 'c'); + INSERT INTO parent VALUES('ONE', 'two', 'three'); + INSERT INTO child VALUES('one', 'two', 'three'); +---- +stmt 0 ok +stmt 68 ok +stmt 195 err 1 -1 242 no such table: parent +stmt 242 err 1 -1 296 no such table: parent +stmt 296 err 1 -1 349 no such table: child +==== e_fkey-49.2 + + BEGIN; + UPDATE parent SET a = '' WHERE a = 'oNe'; + SELECT * FROM child; +---- +stmt 0 ok +stmt 11 err 1 -1 59 no such table: parent +stmt 59 err 1 -1 86 no such table: child +==== e_fkey-49.3 + + ROLLBACK; + DELETE FROM parent WHERE a = 'A'; + SELECT * FROM parent; +---- +stmt 0 ok +stmt 14 err 1 -1 52 no such table: parent +stmt 52 err 1 -1 78 no such table: parent +==== e_fkey-49.4 + UPDATE parent SET a = '' WHERE a = 'oNe' +---- +stmt 0 err 1 -1 42 no such table: parent +==== e_fkey-50.1 + + CREATE TABLE artist( + artistid INTEGER PRIMARY KEY, + artistname TEXT + ); + CREATE TABLE track( + trackid INTEGER, + trackname TEXT, + trackartist INTEGER DEFAULT 0 REFERENCES artist(artistid) ON DELETE SET DEFAULT + ); + INSERT INTO artist VALUES(3, 'Sammy Davis Jr.'); + INSERT INTO track VALUES(14, 'Mr. Bojangles', 3); +---- +stmt 0 ok +stmt 95 ok +stmt 264 err 1 -1 317 no such table: artist +stmt 317 err 1 -1 371 no such table: track +==== e_fkey-50.2 + DELETE FROM artist WHERE artistname = 'Sammy Davis Jr.' +---- +stmt 0 err 1 -1 57 no such table: artist +==== e_fkey-50.3 + + INSERT INTO artist VALUES(0, 'Unknown Artist'); + DELETE FROM artist WHERE artistname = 'Sammy Davis Jr.'; +---- +stmt 0 err 1 -1 52 no such table: artist +stmt 52 err 1 -1 113 no such table: artist +==== e_fkey-50.4 + SELECT * FROM artist +---- +stmt 0 err 1 -1 22 no such table: artist +==== e_fkey-50.5 + SELECT * FROM track +---- +stmt 0 err 1 -1 21 no such table: track +==== e_fkey-51.2 + + UPDATE parent SET x = 22; + SELECT * FROM parent ORDER BY rowid; SELECT 'xxx' ; SELECT a FROM child; +---- +stmt 0 err 1 -1 30 no such table: parent +stmt 30 err 1 -1 71 no such table: parent +stmt 71 ok +stmt 86 err 1 -1 107 no such table: child +==== e_fkey-51.3 + + DELETE FROM child; + DELETE FROM parent; + INSERT INTO parent VALUES(-1); + INSERT INTO child VALUES(-1); + UPDATE parent SET x = 22; + SELECT * FROM parent ORDER BY rowid; SELECT 'xxx' ; SELECT a FROM child; +---- +stmt 0 err 1 -1 23 no such table: child +stmt 23 err 1 -1 47 no such table: parent +stmt 47 err 1 -1 82 no such table: parent +stmt 82 err 1 -1 116 no such table: child +stmt 116 err 1 -1 146 no such table: parent +stmt 146 err 1 -1 187 no such table: parent +stmt 187 ok +stmt 202 err 1 -1 223 no such table: child +==== e_fkey-52.2 + + UPDATE zeus SET a = 1, b = 1; + SELECT * FROM apollo; +---- +stmt 0 err 1 -1 34 no such table: zeus +stmt 34 err 1 -1 60 no such table: apollo +==== e_fkey-52.3 + + UPDATE zeus SET a = 1, b = 1; + SELECT typeof(c), c, typeof(d), d FROM apollo; +---- +stmt 0 err 1 -1 34 no such table: zeus +stmt 34 err 1 -1 85 no such table: apollo +==== e_fkey-52.4 + + UPDATE zeus SET a = '1'; + SELECT typeof(c), c, typeof(d), d FROM apollo; +---- +stmt 0 err 1 -1 29 no such table: zeus +stmt 29 err 1 -1 80 no such table: apollo +==== e_fkey-52.5 + + UPDATE zeus SET b = '1'; + SELECT typeof(c), c, typeof(d), d FROM apollo; +---- +stmt 0 err 1 -1 29 no such table: zeus +stmt 29 err 1 -1 80 no such table: apollo +==== e_fkey-52.6 + + UPDATE zeus SET b = NULL; + SELECT typeof(c), c, typeof(d), d FROM apollo; +---- +stmt 0 err 1 -1 30 no such table: zeus +stmt 30 err 1 -1 81 no such table: apollo +==== e_fkey-53.1 + + CREATE TABLE parent(x PRIMARY KEY); + CREATE TABLE child(y REFERENCES parent ON UPDATE SET NULL); + INSERT INTO parent VALUES('key'); + INSERT INTO child VALUES('key'); +---- +stmt 0 ok +stmt 40 ok +stmt 104 err 1 -1 142 no such table: parent +stmt 142 err 1 -1 179 no such table: child +==== e_fkey-53.2 + + UPDATE parent SET x = 'key'; + SELECT IFNULL(y, 'null') FROM child; +---- +stmt 0 err 1 -1 33 no such table: parent +stmt 33 err 1 -1 74 no such table: child +==== e_fkey-53.3 + + UPDATE parent SET x = 'key2'; + SELECT IFNULL(y, 'null') FROM child; +---- +stmt 0 err 1 -1 34 no such table: parent +stmt 34 err 1 -1 75 no such table: child +==== e_fkey-56.2 + ALTER TABLE 'p 1 "parent one"' RENAME TO p +---- +stmt 0 err 1 -1 44 no such table: p 1 "parent one" +==== e_fkey-56.3 + + UPDATE p SET a = 'xxx', b = 'xxx'; + SELECT * FROM p; + SELECT * FROM c1; + SELECT * FROM c2; + SELECT * FROM c3; +---- +stmt 0 err 1 -1 39 no such table: p +stmt 39 err 1 -1 60 no such table: p +stmt 60 err 1 -1 82 no such table: c1 +stmt 82 err 1 -1 104 no such table: c2 +stmt 104 err 1 -1 126 no such table: c3 +==== e_fkey-56.4 + SELECT sql FROM sqlite_master WHERE type = 'table' +---- +stmt 0 ok +==== e_fkey-57.2 + + INSERT INTO p VALUES('a', 'b'); + INSERT INTO c1 VALUES('a', 'b'); + INSERT INTO c2 VALUES('a', 'b'); + INSERT INTO c3 VALUES('a', 'b'); + BEGIN; + DROP TABLE p; + SELECT * FROM c1; +---- +stmt 0 err 1 -1 36 no such table: p +stmt 36 err 1 -1 73 no such table: c1 +stmt 73 err 1 -1 110 no such table: c2 +stmt 110 err 1 -1 147 no such table: c3 +stmt 147 ok +stmt 158 err 1 -1 178 no such table: p +stmt 178 err 1 -1 202 no such table: c1 +==== e_fkey-57.3 + SELECT * FROM c2 +---- +stmt 0 err 1 -1 18 no such table: c2 +==== e_fkey-57.4 + SELECT * FROM c3 +---- +stmt 0 err 1 -1 18 no such table: c3 +==== e_fkey-57.5 + SELECT * FROM log +---- +stmt 0 err 1 -1 19 no such table: log +==== e_fkey-57.7 + + BEGIN; + DELETE FROM p; + SELECT * FROM log; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 32 no such table: p +stmt 32 err 1 -1 57 no such table: log +stmt 57 ok +==== e_fkey-58.2 + SELECT * FROM p +---- +stmt 0 err 1 -1 17 no such table: p +==== e_fkey-58.3 + + BEGIN; + DROP TABLE p; +---- +stmt 0 ok +stmt 11 err 1 -1 31 no such table: p +==== e_fkey-58.4 + + SELECT * FROM p; + SELECT * FROM c5; + ROLLBACK; +---- +stmt 0 err 1 -1 21 no such table: p +stmt 21 err 1 -1 43 no such table: c5 +stmt 43 ok +==== e_fkey-59.1 + + DELETE FROM c1 ; DELETE FROM c2 ; DELETE FROM c3 ; + DELETE FROM c4 ; DELETE FROM c5 ; DELETE FROM c6 ; + DELETE FROM c7 +---- +stmt 0 err 1 -1 22 no such table: c1 +stmt 22 err 1 -1 39 no such table: c2 +stmt 39 err 1 -1 56 no such table: c3 +stmt 56 err 1 -1 77 no such table: c4 +stmt 77 err 1 -1 94 no such table: c5 +stmt 94 err 1 -1 111 no such table: c6 +stmt 111 err 1 -1 131 no such table: c7 +==== e_fkey-60.1 + + PRAGMA foreign_keys = OFF; + + CREATE TABLE p(a PRIMARY KEY, b REFERENCES nosuchtable); + CREATE TABLE c1(c, d, FOREIGN KEY(c, d) REFERENCES a); + CREATE TABLE c2(c REFERENCES p(b), d); + CREATE TABLE c3(c REFERENCES p ON DELETE SET NULL, d); + + INSERT INTO p VALUES(1, 2); + INSERT INTO c1 VALUES(1, 2); + INSERT INTO c2 VALUES(1, 2); + INSERT INTO c3 VALUES(1, 2); +---- +stmt 0 ok +stmt 31 ok +stmt 93 ok +stmt 152 ok +stmt 195 ok +stmt 254 err 1 -1 287 no such table: p +stmt 287 err 1 -1 320 no such table: c1 +stmt 320 err 1 -1 353 no such table: c2 +stmt 353 err 1 -1 386 no such table: c3 +==== e_fkey-60.3 + + BEGIN; + DROP TABLE p; + SELECT * FROM c3; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 31 no such table: p +stmt 31 err 1 -1 55 no such table: c3 +stmt 55 ok +==== e_fkey-61.1.3 + PRAGMA foreign_keys = ON +---- +stmt 0 ok +==== e_fkey-61.2.2 + + PRAGMA foreign_keys = OFF; + PRAGMA legacy_alter_table = ON; + ALTER TABLE p RENAME TO parent; + SELECT sql FROM sqlite_master WHERE name = 'c'; +---- +stmt 0 ok +stmt 31 ok +stmt 67 err 1 -1 103 no such table: p +stmt 103 ok +==== e_fkey-61.3.2 + + PRAGMA foreign_keys = OFF; + DROP TABLE p; + SELECT * FROM c; +---- +stmt 0 ok +stmt 31 err 1 -1 49 no such table: p +stmt 49 err 1 -1 70 no such table: c +==== e_fkey-61.3.3 + PRAGMA foreign_keys = ON +---- +stmt 0 ok +==== e_fkey-62.1 + SET CONSTRAINTS ALL IMMEDIATE +---- +stmt 0 err 1 1 4 near "SET": syntax error +==== e_fkey-62.2 + SET CONSTRAINTS ALL DEFERRED +---- +stmt 0 err 1 1 4 near "SET": syntax error +==== e_fkey-62.3 + + CREATE TABLE p(a, b, PRIMARY KEY(a, b)); + CREATE TABLE cd(c, d, + FOREIGN KEY(c, d) REFERENCES p DEFERRABLE INITIALLY DEFERRED); + CREATE TABLE ci(c, d, + FOREIGN KEY(c, d) REFERENCES p DEFERRABLE INITIALLY IMMEDIATE); + BEGIN; +---- +stmt 0 ok +stmt 45 ok +stmt 141 ok +stmt 238 ok +==== e_fkey-62.4 + INSERT INTO ci VALUES('x', 'y') +---- +stmt 0 err 1 -1 33 no such table: ci +==== e_fkey-62.5 + INSERT INTO cd VALUES('x', 'y') +---- +stmt 0 err 1 -1 33 no such table: cd +==== e_fkey-62.6 + COMMIT +---- +stmt 0 ok +==== e_fkey-62.7 + + DELETE FROM cd; + COMMIT; +---- +stmt 0 err 1 -1 21 no such table: cd +stmt 21 ok +==== e_fkey-generated.dup3 + + CREATE TABLE t1(a PRIMARY KEY, b REFERENCES t1 ON DELETE CASCADE); + INSERT INTO t1 VALUES(1, NULL); + INSERT INTO t1 VALUES(2, 1); + INSERT INTO t1 VALUES(3, 2); + INSERT INTO t1 VALUES(4, 3); + INSERT INTO t1 VALUES(5, 4); + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 73 err 1 -1 111 no such table: t1 +stmt 111 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 181 no such table: t1 +stmt 181 err 1 -1 216 no such table: t1 +stmt 216 err 1 -1 251 no such table: t1 +stmt 251 err 1 -1 282 no such table: t1 +==== e_fkey-generated.dup4 + SELECT count(*) FROM t1 WHERE a = 1 +---- +stmt 0 err 1 -1 37 no such table: t1 +==== e_fkey-generated.dup5 + + DELETE FROM t1 WHERE a = 1; + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 66 no such table: t1 diff --git a/parser/testdata/e_fts3.metadata.json b/parser/testdata/e_fts3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_fts3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_fts3.test b/parser/testdata/e_fts3.test new file mode 100644 index 0000000..cd311fc --- /dev/null +++ b/parser/testdata/e_fts3.test @@ -0,0 +1,8 @@ +==== e_fts3-4.4 + SELECT optimize(t4) FROM t4 LIMIT 1 +---- +stmt 0 err 1 -1 37 no such table: t4 +==== e_fts3-4.5 + SELECT optimize(t4) FROM t4 LIMIT 1 +---- +stmt 0 err 1 -1 37 no such table: t4 diff --git a/parser/testdata/e_reindex.metadata.json b/parser/testdata/e_reindex.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_reindex.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_reindex.test b/parser/testdata/e_reindex.test new file mode 100644 index 0000000..967c5d1 --- /dev/null +++ b/parser/testdata/e_reindex.test @@ -0,0 +1,112 @@ +==== e_reindex-0.0 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + CREATE INDEX i2 ON t1(b, a); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t1 +stmt 56 err 1 -1 87 no such table: main.t1 +==== e_reindex-1.1 + + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + + CREATE TABLE saved(a,b,c,d,e); + INSERT INTO saved SELECT * FROM sqlite_master WHERE type = 'index'; + PRAGMA writable_schema = 1; + DELETE FROM sqlite_master WHERE type = 'index'; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 93 no such table: t1 +stmt 93 ok +stmt 127 err 1 -1 197 no such table: saved +stmt 197 ok +stmt 227 ok +==== e_reindex-1.2 + + DELETE FROM t1 WHERE a = 3; + INSERT INTO t1 VALUES(7, 8); + INSERT INTO t1 VALUES(9, 10); + PRAGMA writable_schema = 1; + INSERT INTO sqlite_master SELECT * FROM saved; + DROP TABLE saved; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 61 no such table: t1 +stmt 61 err 1 -1 93 no such table: t1 +stmt 93 ok +stmt 123 err 1 -1 172 no such table: saved +stmt 172 err 1 -1 192 no such table: saved +==== e_reindex-1.3 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== e_reindex-1.4 + + REINDEX; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 11 ok +==== e_reindex-2.0 + + ATTACH 'test.db2' AS aux; + + CREATE TABLE t1(x); + CREATE INDEX i1_a ON t1(x COLLATE collA); + CREATE INDEX i1_b ON t1(x COLLATE collB); + INSERT INTO t1 VALUES('one'); + INSERT INTO t1 VALUES('two'); + INSERT INTO t1 VALUES('three'); + INSERT INTO t1 VALUES('four'); + INSERT INTO t1 VALUES('five'); + INSERT INTO t1 VALUES('six'); + INSERT INTO t1 VALUES('seven'); + INSERT INTO t1 VALUES('eight'); + + CREATE TABLE t2(x); + CREATE INDEX i2_a ON t2(x COLLATE collA); + CREATE INDEX i2_b ON t2(x COLLATE collB); + INSERT INTO t2 SELECT x FROM t1; + + CREATE TABLE aux.t1(x); + CREATE INDEX aux.i1_a ON t1(x COLLATE collA); + CREATE INDEX aux.i1_b ON t1(x COLLATE collB); + INSERT INTO aux.t1 SELECT x FROM main.t1; +---- +stmt 0 ok +stmt 28 ok +stmt 51 err 1 -1 95 no such table: main.t1 +stmt 95 err 1 -1 139 no such table: main.t1 +stmt 139 err 1 -1 171 no such table: t1 +stmt 171 err 1 -1 203 no such table: t1 +stmt 203 err 1 -1 237 no such table: t1 +stmt 237 err 1 -1 270 no such table: t1 +stmt 270 err 1 -1 303 no such table: t1 +stmt 303 err 1 -1 335 no such table: t1 +stmt 335 err 1 -1 369 no such table: t1 +stmt 369 err 1 -1 403 no such table: t1 +stmt 403 ok +stmt 426 err 1 -1 470 no such table: main.t2 +stmt 470 err 1 -1 514 no such table: main.t2 +stmt 514 err 1 -1 549 no such table: t2 +stmt 549 err 1 566 573 unknown database aux +stmt 576 err 1 592 624 unknown database aux +stmt 624 err 1 640 672 unknown database aux +stmt 672 err 1 -1 716 no such table: aux.t1 +==== e_reindex-2.6.0 + + CREATE TABLE collA(x); + CREATE INDEX icolla_a ON collA(x COLLATE collA); + CREATE INDEX icolla_b ON collA(x COLLATE collB); + + INSERT INTO collA SELECT x FROM t1; +---- +stmt 0 ok +stmt 25 err 1 -1 76 no such table: main.collA +stmt 76 err 1 -1 127 no such table: main.collA +stmt 127 err 1 -1 166 no such table: collA diff --git a/parser/testdata/e_resolve.metadata.json b/parser/testdata/e_resolve.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_resolve.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_resolve.test b/parser/testdata/e_resolve.test new file mode 100644 index 0000000..d67ab6f --- /dev/null +++ b/parser/testdata/e_resolve.test @@ -0,0 +1,123 @@ +==== 1.1 + SELECT * FROM n1 +---- +stmt 0 err 1 -1 18 no such table: n1 +==== 1.2 + SELECT * FROM n2 +---- +stmt 0 err 1 -1 18 no such table: n2 +==== 1.3 + SELECT * FROM n3 +---- +stmt 0 err 1 -1 18 no such table: n3 +==== 1.4 + SELECT * FROM n4 +---- +stmt 0 err 1 -1 18 no such table: n4 +==== 2.1.1 + SELECT * FROM main.n1 +---- +stmt 0 err 1 -1 23 no such table: main.n1 +==== 2.1.2 + SELECT * FROM temp.n1 +---- +stmt 0 err 1 -1 23 no such table: temp.n1 +==== 2.1.3 + SELECT * FROM at1.n1 +---- +stmt 0 err 1 -1 22 no such table: at1.n1 +==== 2.1.4 + SELECT * FROM at2.n1 +---- +stmt 0 err 1 -1 22 no such table: at2.n1 +==== 2.2 + SELECT * FROM xxx.n1 +---- +stmt 0 err 1 -1 22 no such table: xxx.n1 +==== 3.1 + SELECT * FROM MAIN.n1 +---- +stmt 0 err 1 -1 23 no such table: MAIN.n1 +==== 3.2 + SELECT * FROM tEmP.n1 +---- +stmt 0 err 1 -1 23 no such table: tEmP.n1 +==== 3.3 + SELECT * FROM aT1.n1 +---- +stmt 0 err 1 -1 22 no such table: aT1.n1 +==== 3.4 + SELECT * FROM At2.n1 +---- +stmt 0 err 1 -1 22 no such table: At2.n1 +==== 4.1 + SELECT * FROM temp.n2 +---- +stmt 0 err 1 -1 23 no such table: temp.n2 +==== 4.2 + SELECT * FROM main.n2 +---- +stmt 0 err 1 -1 23 no such table: main.n2 +==== 4.3 + SELECT * FROM at1.n2 +---- +stmt 0 err 1 -1 22 no such table: at1.n2 +==== 4.4 + SELECT * FROM at2.n2 +---- +stmt 0 err 1 -1 22 no such table: at2.n2 +==== 5.1 + SELECT * FROM n3 +---- +stmt 0 err 1 -1 18 no such table: n3 +==== 5.2 + SELECT * FROM n4 +---- +stmt 0 err 1 -1 18 no such table: n4 +==== 6.1 + + ATTACH 'file.db' AS aux; + CREATE TABLE t1(x, y); + CREATE TEMP TABLE t1(x, y); + CREATE TABLE aux.t1(x, y); +---- +stmt 0 ok +stmt 27 ok +stmt 52 ok +stmt 82 err 1 98 105 unknown database aux +==== 6.2.0 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== 6.2.1 + SELECT * FROM temp.t1 +---- +stmt 0 err 1 -1 23 no such table: temp.t1 +==== 6.2.2 + SELECT * FROM main.t1 +---- +stmt 0 err 1 -1 23 no such table: main.t1 +==== 6.2.3 + SELECT * FROM aux.t1 +---- +stmt 0 err 1 -1 22 no such table: aux.t1 +==== 6.3.0 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== 6.3.1 + SELECT * FROM main.t1 +---- +stmt 0 err 1 -1 23 no such table: main.t1 +==== 6.3.3 + SELECT * FROM aux.t1 +---- +stmt 0 err 1 -1 22 no such table: aux.t1 +==== 6.4.0 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== 6.4.1 + SELECT * FROM aux.t1 +---- +stmt 0 err 1 -1 22 no such table: aux.t1 diff --git a/parser/testdata/e_select2.metadata.json b/parser/testdata/e_select2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_select2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_select2.test b/parser/testdata/e_select2.test new file mode 100644 index 0000000..8978519 --- /dev/null +++ b/parser/testdata/e_select2.test @@ -0,0 +1,52 @@ +==== e_select-2.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + CREATE TABLE t3(b COLLATE nocase); + + INSERT INTO t1 VALUES(2, 'B'); + INSERT INTO t1 VALUES(1, 'A'); + INSERT INTO t1 VALUES(4, 'D'); + INSERT INTO t1 VALUES(NULL, NULL); + INSERT INTO t1 VALUES(3, NULL); + + INSERT INTO t2 VALUES(1, 'A'); + INSERT INTO t2 VALUES(2, NULL); + INSERT INTO t2 VALUES(5, 'E'); + INSERT INTO t2 VALUES(NULL, NULL); + INSERT INTO t2 VALUES(3, 'C'); + + INSERT INTO t3 VALUES('a'); + INSERT INTO t3 VALUES('c'); + INSERT INTO t3 VALUES('b'); +---- +stmt 0 ok +stmt 25 ok +stmt 50 ok +stmt 87 err 1 -1 121 no such table: t1 +stmt 121 err 1 -1 154 no such table: t1 +stmt 154 err 1 -1 187 no such table: t1 +stmt 187 err 1 -1 224 no such table: t1 +stmt 224 err 1 -1 258 no such table: t1 +stmt 258 err 1 -1 292 no such table: t2 +stmt 292 err 1 -1 326 no such table: t2 +stmt 326 err 1 -1 359 no such table: t2 +stmt 359 err 1 -1 396 no such table: t2 +stmt 396 err 1 -1 429 no such table: t2 +stmt 429 err 1 -1 460 no such table: t3 +stmt 460 err 1 -1 490 no such table: t3 +stmt 490 err 1 -1 520 no such table: t3 +==== e_select-2.2.0 + + CREATE TABLE t4(x TEXT COLLATE nocase); + CREATE TABLE t5(y INTEGER, z TEXT COLLATE binary); + + INSERT INTO t4 VALUES('2.0'); + INSERT INTO t4 VALUES('TWO'); + INSERT INTO t5 VALUES(2, 'two'); +---- +stmt 0 ok +stmt 42 ok +stmt 95 err 1 -1 128 no such table: t4 +stmt 128 err 1 -1 160 no such table: t4 +stmt 160 err 1 -1 195 no such table: t5 diff --git a/parser/testdata/e_totalchanges.metadata.json b/parser/testdata/e_totalchanges.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_totalchanges.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_totalchanges.test b/parser/testdata/e_totalchanges.test new file mode 100644 index 0000000..ab7cdea --- /dev/null +++ b/parser/testdata/e_totalchanges.test @@ -0,0 +1,18 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE INDEX t1_b ON t1(b); + CREATE TABLE t2(x, y, PRIMARY KEY(x, y)) WITHOUT ROWID; + CREATE INDEX t2_y ON t2(y); +---- +stmt 0 ok +stmt 25 err 1 -1 55 no such table: main.t1 +stmt 55 ok +stmt 113 err 1 -1 143 no such table: main.t2 +==== 1.2.1 + + DELETE FROM t1; + DELETE FROM t2; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 36 no such table: t2 diff --git a/parser/testdata/e_vacuum.metadata.json b/parser/testdata/e_vacuum.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_vacuum.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_vacuum.test b/parser/testdata/e_vacuum.test new file mode 100644 index 0000000..5cde32e --- /dev/null +++ b/parser/testdata/e_vacuum.test @@ -0,0 +1,193 @@ +==== e_vacuum-0.1 + VACUUM +---- +stmt 0 ok +==== e_vacuum-generated + + DELETE FROM t1; + DELETE FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 40 no such table: t2 +==== e_vacuum-generated.dup1 +PRAGMA freelist_count +---- +stmt 0 ok +==== e_vacuum-generated.dup2 +PRAGMA freelist_count +---- +stmt 0 ok +==== e_vacuum-generated.dup3 +VACUUM +---- +stmt 0 ok +==== e_vacuum-1.2.1 + + DELETE FROM t1 WHERE a%2; + INSERT INTO t1 SELECT b, a FROM t2 WHERE a%2; + UPDATE t1 SET b=randomblob(600) WHERE (a%2)==0; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 132 no such table: t1 +==== e_vacuum-1.2.3 + VACUUM +---- +stmt 0 ok +==== e_vacuum-2.1.1 + + ATTACH 'test.db2' AS aux; + PRAGMA aux.page_size = 1024; + CREATE TABLE aux.t3 AS SELECT * FROM t1; + DELETE FROM t3; +---- +stmt 0 ok +stmt 28 err 1 38 59 unknown database aux +stmt 59 err 1 75 84 unknown database aux +stmt 102 err 1 -1 120 no such table: t3 +==== e_vacuum-2.1.3 + VACUUM +---- +stmt 0 ok +==== e_vacuum-2.1.7 + VACUUM aux; +---- +stmt 0 err 1 8 12 unknown database aux +==== e_vacuum-3.1.1 + + CREATE TABLE t4(x); + INSERT INTO t4(x) VALUES('x'); + INSERT INTO t4(x) VALUES('y'); + INSERT INTO t4(x) VALUES('z'); + DELETE FROM t4 WHERE x = 'y'; + SELECT rowid, x FROM t4; +---- +stmt 0 ok +stmt 22 err 1 -1 55 no such table: t4 +stmt 55 err 1 -1 88 no such table: t4 +stmt 88 err 1 -1 121 no such table: t4 +stmt 121 err 1 -1 153 no such table: t4 +stmt 153 err 1 -1 180 no such table: t4 +==== e_vacuum-3.1.2 + + VACUUM; + SELECT rowid, x FROM t4; +---- +stmt 0 ok +stmt 10 err 1 -1 37 no such table: t4 +==== e_vacuum-3.1.3 + + CREATE TABLE t5(x, y INTEGER PRIMARY KEY); + INSERT INTO t5(x) VALUES('x'); + INSERT INTO t5(x) VALUES('y'); + INSERT INTO t5(x) VALUES('z'); + DELETE FROM t5 WHERE x = 'y'; + SELECT rowid, x FROM t5; +---- +stmt 0 ok +stmt 45 err 1 -1 78 no such table: t5 +stmt 78 err 1 -1 111 no such table: t5 +stmt 111 err 1 -1 144 no such table: t5 +stmt 144 err 1 -1 176 no such table: t5 +stmt 176 err 1 -1 203 no such table: t5 +==== e_vacuum-3.1.4 + + VACUUM; + SELECT rowid, x FROM t5; +---- +stmt 0 ok +stmt 10 err 1 -1 37 no such table: t5 +==== e_vacuum-3.1.5 + + DROP TABLE t5; + CREATE TABLE t5(x); + INSERT INTO t5(x) VALUES('x'); + INSERT INTO t5(x) VALUES('y'); + INSERT INTO t5(x) VALUES('z'); + DELETE FROM t5 WHERE x = 'y'; + SELECT rowid, x FROM t5; +---- +stmt 0 err 1 -1 17 no such table: t5 +stmt 17 ok +stmt 39 err 1 -1 72 no such table: t5 +stmt 72 err 1 -1 105 no such table: t5 +stmt 105 err 1 -1 138 no such table: t5 +stmt 138 err 1 -1 170 no such table: t5 +stmt 170 err 1 -1 197 no such table: t5 +==== e_vacuum-3.1.6 + + VACUUM INTO 'test2.db'; + ATTACH 'test2.db' AS aux1; + SELECT rowid, x FROM aux1.t5; + DETACH aux1; +---- +stmt 0 ok +stmt 26 ok +stmt 55 err 1 -1 87 no such table: aux1.t5 +stmt 87 ok +==== e_vacuum-3.1.7 + + DROP TABLE t5; + CREATE TABLE t5(x,y,z); + INSERT INTO t5(x) VALUES('x'); + INSERT INTO t5(x) VALUES('y'); + INSERT INTO t5(x) VALUES('z'); + UPDATE t5 SET y=x, z=random(); + DELETE FROM t5 WHERE x = 'y'; + CREATE INDEX t5x ON t5(x); + CREATE UNIQUE INDEX t5y ON t5(y); + CREATE INDEX t5zxy ON t5(z,x,y); + SELECT rowid, x FROM t5; +---- +stmt 0 err 1 -1 17 no such table: t5 +stmt 17 ok +stmt 43 err 1 -1 76 no such table: t5 +stmt 76 err 1 -1 109 no such table: t5 +stmt 109 err 1 -1 142 no such table: t5 +stmt 142 err 1 -1 175 no such table: t5 +stmt 175 err 1 -1 207 no such table: t5 +stmt 207 err 1 -1 236 no such table: main.t5 +stmt 236 err 1 -1 272 no such table: main.t5 +stmt 272 err 1 -1 307 no such table: main.t5 +stmt 307 err 1 -1 334 no such table: t5 +==== e_vacuum-3.1.8 + + VACUUM; + SELECT rowid, x FROM t5; +---- +stmt 0 ok +stmt 10 err 1 -1 37 no such table: t5 +==== e_vacuum-3.2.1.1 + BEGIN +---- +stmt 0 ok +==== e_vacuum-3.2.1.2 + + VACUUM +---- +stmt 0 ok +==== e_vacuum-3.2.1.3 + COMMIT +---- +stmt 0 ok +==== e_vacuum-3.2.1.4 + VACUUM +---- +stmt 0 ok +==== e_vacuum-3.2.1.5 + SAVEPOINT x +---- +stmt 0 ok +==== e_vacuum-3.2.1.6 + + VACUUM +---- +stmt 0 ok +==== e_vacuum-3.2.1.7 + COMMIT +---- +stmt 0 ok +==== e_vacuum-3.2.1.8 + VACUUM +---- +stmt 0 ok diff --git a/parser/testdata/e_wal.metadata.json b/parser/testdata/e_wal.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_wal.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_wal.test b/parser/testdata/e_wal.test new file mode 100644 index 0000000..5a28eed --- /dev/null +++ b/parser/testdata/e_wal.test @@ -0,0 +1,88 @@ +==== 1.1.1 + + PRAGMA journal_mode = WAL; +---- +stmt 0 ok +==== 1.1.2 + + PRAGMA locking_mode = EXCLUSIVE; + PRAGMA journal_mode = WAL; +---- +stmt 0 ok +stmt 35 ok +==== 1.1.3 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +==== 2.1.1 + + PRAGMA locking_mode = EXCLUSIVE; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 35 err 1 -1 55 no such table: t1 +==== 2.2.1 + + PRAGMA locking_mode = NORMAL; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 32 err 1 -1 52 no such table: t1 +==== 2.3.1 + + PRAGMA journal_mode = DELETE; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 32 err 1 -1 52 no such table: t1 +==== 2.3.3 + + PRAGMA locking_mode = NORMAL; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 32 err 1 -1 52 no such table: t1 +==== 3.2.1 + + PRAGMA locking_mode = EXCLUSIVE; + PRAGMA locking_mode = NORMAL; + PRAGMA locking_mode = EXCLUSIVE; + INSERT INTO t1 VALUES(5, 6); +---- +stmt 0 ok +stmt 35 ok +stmt 67 ok +stmt 102 err 1 -1 133 no such table: t1 +==== 3.2.3 + + PRAGMA locking_mode = NORMAL; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 32 err 1 -1 52 no such table: t1 +==== 3.2.5 + + PRAGMA locking_mode = EXCLUSIVE; + INSERT INTO t1 VALUES(7, 8); +---- +stmt 0 ok +stmt 35 err 1 -1 66 no such table: t1 +==== 4.1.1 + CREATE TABLE t1(x, y) +---- +stmt 0 ok +==== 4.1.3 + PRAGMA journal_mode = wAL +---- +stmt 0 ok +==== 4.2.1 + INSERT INTO t1 VALUES(1, 1); +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 4.2.3 + PRAGMA journal_mode = delete +---- +stmt 0 ok diff --git a/parser/testdata/e_walauto.metadata.json b/parser/testdata/e_walauto.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_walauto.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_walauto.test b/parser/testdata/e_walauto.test new file mode 100644 index 0000000..eebc34c --- /dev/null +++ b/parser/testdata/e_walauto.test @@ -0,0 +1,8 @@ +==== e_walauto-generated + PRAGMA journal_mode = WAL +---- +stmt 0 ok +==== e_walauto-generated.dup1 + CREATE TABLE t1(a, b) +---- +stmt 0 ok diff --git a/parser/testdata/e_walckpt.metadata.json b/parser/testdata/e_walckpt.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_walckpt.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_walckpt.test b/parser/testdata/e_walckpt.test new file mode 100644 index 0000000..e94f725 --- /dev/null +++ b/parser/testdata/e_walckpt.test @@ -0,0 +1,15 @@ +==== e_walckpt-generated + + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 91 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 196 no such table: t1 diff --git a/parser/testdata/e_walhook.metadata.json b/parser/testdata/e_walhook.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/e_walhook.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/e_walhook.test b/parser/testdata/e_walhook.test new file mode 100644 index 0000000..d23b806 --- /dev/null +++ b/parser/testdata/e_walhook.test @@ -0,0 +1,29 @@ +==== 3.0 + + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t2(x); + PRAGMA aux.journal_mode = wal; +---- +stmt 0 ok +stmt 30 err 1 48 55 unknown database aux +stmt 58 err 1 70 93 unknown database aux +==== 4.1 + + INSERT INTO t1 VALUES(7) +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 4.2 + + INSERT INTO t1 VALUES(8) +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 4.3 + + INSERT INTO t1 VALUES(9) +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 4.4 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 diff --git a/parser/testdata/emptytable.metadata.json b/parser/testdata/emptytable.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/emptytable.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/emptytable.test b/parser/testdata/emptytable.test new file mode 100644 index 0000000..6693415 --- /dev/null +++ b/parser/testdata/emptytable.test @@ -0,0 +1,27 @@ +==== emptytable-100 + + CREATE TABLE t1(a); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a) SELECT x FROM c; + CREATE TABLE empty(x); + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 22 err 1 -1 138 no such table: t1 +stmt 138 ok +stmt 163 err 1 -1 190 no such table: t1 +==== emptytable-110 + + SELECT count(*) FROM t1, t1, t1, t1, t1, t1, empty; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== emptytable-120 + + SELECT count(*) FROM t1, t1 LEFT JOIN empty; +---- +stmt 0 err 1 -1 47 no such table: t1 +==== emptytable-121 + + SELECT count(*) FROM t1, t1 LEFT JOIN t1, empty; +---- +stmt 0 err 1 -1 51 no such table: t1 diff --git a/parser/testdata/enc.metadata.json b/parser/testdata/enc.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/enc.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/enc.test b/parser/testdata/enc.test new file mode 100644 index 0000000..c52d6f9 --- /dev/null +++ b/parser/testdata/enc.test @@ -0,0 +1,85 @@ +==== enc-11.1 + + CREATE TABLE ab(a COLLATE test_collate, b); + INSERT INTO ab VALUES(CAST (X'C388' AS TEXT), X'888800'); + INSERT INTO ab VALUES(CAST (X'C0808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808388' AS TEXT), X'888800'); + CREATE INDEX ab_i ON ab(a, b); +---- +stmt 0 err 1 -1 44 no such collation sequence: test_collate +stmt 48 err 1 -1 110 no such table: ab +stmt 110 err 1 -1 278 no such table: ab +stmt 278 err 1 -1 313 no such table: main.ab +==== enc-12.0 + + PRAGMA encoding = 'utf-8'; + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES('a', 'b', 'c'); + ATTACH 'test.db3' AS aux; + CREATE TABLE aux.t3(x, y, z); + INSERT INTO t3 VALUES('xxx', 'yyy', 'zzz'); + PRAGMA encoding; +---- +stmt 0 ok +stmt 29 ok +stmt 57 err 1 -1 97 no such table: t1 +stmt 97 ok +stmt 125 err 1 141 148 unknown database aux +stmt 157 err 1 -1 203 no such table: t3 +stmt 203 ok +==== enc-12.3 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t2 +==== enc-12.4 + + SELECT * FROM t3; + PRAGMA encoding = 'UTF-16le'; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t3 +stmt 20 ok +stmt 52 err 1 -1 72 no such table: t3 +==== enc-12.5 + + PRAGMA encoding = 'UTF-16le'; + PRAGMA encoding; +---- +stmt 0 ok +stmt 32 ok +==== enc-12.6 + + PRAGMA encoding = 'UTF-8'; + CREATE TEMP TABLE t1(a, b, c); + INSERT INTO t1 VALUES('xxx', 'yyy', 'zzz'); +---- +stmt 0 ok +stmt 29 ok +stmt 62 err 1 -1 108 no such table: t1 +==== enc-12.8 + + SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t2 +stmt 20 err 1 -1 40 no such table: t1 +==== enc-12.9 + + CREATE TEMP TABLE t1(a, b, c); + INSERT INTO t1 VALUES('xxx', 'yyy', 'zzz'); +---- +stmt 0 ok +stmt 33 err 1 -1 79 no such table: t1 +==== enc-12.10 + + SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t2 +stmt 20 err 1 -1 40 no such table: t1 +==== enc-13.2 + + WITH t1(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM t1 WHERE x<3) + SELECT rtreecheck('t3') FROM t1; +---- +stmt 0 err 1 81 106 no such function: rtreecheck diff --git a/parser/testdata/enc2.metadata.json b/parser/testdata/enc2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/enc2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/enc2.test b/parser/testdata/enc2.test new file mode 100644 index 0000000..1d800e1 --- /dev/null +++ b/parser/testdata/enc2.test @@ -0,0 +1,113 @@ +==== enc2-generated + + SELECT * FROM t1 WHERE a = 'one'; +---- +stmt 0 err 1 -1 38 no such table: t1 +==== enc2-generated.dup1 + + SELECT * FROM t1 WHERE a = 'four'; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== enc2-generated.dup2 + + SELECT * FROM t1 WHERE a IN ('one', 'two'); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== enc2-4.3 + + ATTACH 'test2.db' as aux; +---- +stmt 0 ok +==== enc2-5.0 + + CREATE TABLE t5(a); + INSERT INTO t5 VALUES('one'); + INSERT INTO t5 VALUES('two'); + INSERT INTO t5 VALUES('five'); + INSERT INTO t5 VALUES('three'); + INSERT INTO t5 VALUES('four'); +---- +stmt 0 ok +stmt 24 err 1 -1 58 no such table: t5 +stmt 58 err 1 -1 92 no such table: t5 +stmt 92 err 1 -1 127 no such table: t5 +stmt 127 err 1 -1 163 no such table: t5 +stmt 163 err 1 -1 198 no such table: t5 +==== enc2-5.4 + + CREATE TABLE t5(a); + INSERT INTO t5 VALUES('one'); + INSERT INTO t5 VALUES('two'); + INSERT INTO t5 VALUES('five'); + INSERT INTO t5 VALUES('three'); + INSERT INTO t5 VALUES('four'); +---- +stmt 0 ok +stmt 24 err 1 -1 58 no such table: t5 +stmt 58 err 1 -1 92 no such table: t5 +stmt 92 err 1 -1 127 no such table: t5 +stmt 127 err 1 -1 163 no such table: t5 +stmt 163 err 1 -1 198 no such table: t5 +==== enc2-5.8 + + CREATE TABLE t5(a); + INSERT INTO t5 VALUES('one'); + INSERT INTO t5 VALUES('two'); + INSERT INTO t5 VALUES('five'); + INSERT INTO t5 VALUES('three'); + INSERT INTO t5 VALUES('four'); +---- +stmt 0 ok +stmt 24 err 1 -1 58 no such table: t5 +stmt 58 err 1 -1 92 no such table: t5 +stmt 92 err 1 -1 127 no such table: t5 +stmt 127 err 1 -1 163 no such table: t5 +stmt 163 err 1 -1 198 no such table: t5 +==== enc2-5.16 +CREATE TABLE t1(a varchar collate test_collate); +---- +stmt 0 err 1 -1 47 no such collation sequence: test_collate +==== enc2-6.0 + + CREATE TABLE t5(a); + INSERT INTO t5 VALUES('one'); +---- +stmt 0 ok +stmt 24 err 1 -1 58 no such table: t5 +==== enc2-6.3 + + CREATE TABLE t5(a); + INSERT INTO t5 VALUES('sqlite'); +---- +stmt 0 ok +stmt 24 err 1 -1 61 no such table: t5 +==== enc2-6.7 + + CREATE TABLE t5(a); + INSERT INTO t5 VALUES('sqlite'); +---- +stmt 0 ok +stmt 24 err 1 -1 61 no such table: t5 +==== enc2-7.4 + + SELECT * FROM sqlite_master; +---- +stmt 0 ok +==== enc2-7.5 + + PRAGMA encoding; +---- +stmt 0 ok +==== enc2-11.10 + + PRAGMA encoding=UTF8; + CREATE TEMP TABLE t1(x); + INSERT INTO t1 VALUES('this is a test'); + PRAGMA encoding=UTF16; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 24 ok +stmt 51 err 1 -1 94 no such table: t1 +stmt 94 ok +stmt 119 err 1 -1 139 no such table: t1 diff --git a/parser/testdata/enc3.metadata.json b/parser/testdata/enc3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/enc3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/enc3.test b/parser/testdata/enc3.test new file mode 100644 index 0000000..b3e7a8b --- /dev/null +++ b/parser/testdata/enc3.test @@ -0,0 +1,60 @@ +==== enc3-1.1 + + PRAGMA encoding=utf16le; + PRAGMA encoding; +---- +stmt 0 ok +stmt 31 ok +==== enc3-1.2 + + CREATE TABLE t1(x,y); + INSERT INTO t1 VALUES('abc''123',5); + SELECT * FROM t1 +---- +stmt 0 ok +stmt 26 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 89 no such table: t1 +==== enc3-1.3 + + SELECT quote(x) || ' ' || quote(y) FROM t1 +---- +stmt 0 err 1 -1 48 no such table: t1 +==== enc3-1.4 + + DELETE FROM t1; + INSERT INTO t1 VALUES(x'616263646566',NULL); + SELECT * FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +stmt 22 err 1 -1 73 no such table: t1 +stmt 73 err 1 -1 97 no such table: t1 +==== enc3-1.5 + + SELECT quote(x) || ' ' || quote(y) FROM t1 +---- +stmt 0 err 1 -1 50 no such table: t1 +==== enc3-2.1 + + PRAGMA encoding +---- +stmt 0 ok +==== enc3-2.2 + + CREATE TABLE t2(a); + INSERT INTO t2 VALUES(x'61006200630064006500'); + SELECT CAST(a AS text) FROM t2 WHERE CAST(a AS text) LIKE 'abc%'; +---- +stmt 0 ok +stmt 26 err 1 -1 80 no such table: t2 +stmt 80 err 1 -1 152 no such table: t2 +==== enc3-2.3 + + SELECT CAST(x'61006200630064006500' AS text); +---- +stmt 0 ok +==== enc3-2.4 + + SELECT rowid FROM t2 + WHERE CAST(a AS text) LIKE CAST(x'610062002500' AS text); +---- +stmt 0 err 1 -1 92 no such table: t2 diff --git a/parser/testdata/eqp.metadata.json b/parser/testdata/eqp.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/eqp.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/eqp.test b/parser/testdata/eqp.test new file mode 100644 index 0000000..679f571 --- /dev/null +++ b/parser/testdata/eqp.test @@ -0,0 +1,122 @@ +==== 1.1 + + CREATE TABLE t1(a INT, b INT, ex TEXT); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); + CREATE TABLE t2(a INT, b INT, ex TEXT); + CREATE TABLE t3(a INT, b INT, ex TEXT); +---- +stmt 0 ok +stmt 42 err 1 -1 70 no such table: main.t1 +stmt 70 err 1 -1 98 no such table: main.t1 +stmt 98 ok +stmt 140 ok +==== 2.1 + + CREATE TABLE t1(x INT, y INT, ex TEXT); + + CREATE TABLE t2(x INT, y INT, ex TEXT); + CREATE INDEX t2i1 ON t2(x); +---- +stmt 0 ok +stmt 42 ok +stmt 85 err 1 -1 115 no such table: main.t2 +==== 5.1.0 + CREATE TABLE t1(a INT, b INT, ex TEXT) +---- +stmt 0 ok +==== 5.2.0 + CREATE INDEX i1 ON t1(a) +---- +stmt 0 err 1 -1 26 no such table: main.t1 +==== 5.3.0 + CREATE INDEX i2 ON t1(a, b) +---- +stmt 0 err 1 -1 29 no such table: main.t1 +==== 5.4.0 +CREATE TABLE t2(c INT, d INT, ex TEXT) +---- +stmt 0 ok +==== 5.5.0 +CREATE INDEX i3 ON t1(b) +---- +stmt 0 err 1 -1 25 no such table: main.t1 +==== 5.8.0 +CREATE INDEX i4 ON t2(c) +---- +stmt 0 err 1 -1 25 no such table: main.t2 +==== 7.0 + + CREATE TABLE t1(a INT, b INT, ex CHAR(100)); + CREATE TABLE t2(a INT, b INT, ex CHAR(100)); + CREATE INDEX i1 ON t2(a); +---- +stmt 0 ok +stmt 47 ok +stmt 94 err 1 -1 122 no such table: main.t2 +==== 7.3 + + INSERT INTO t1(a,b) VALUES(1, 2); + INSERT INTO t1(a,b) VALUES(3, 4); + + INSERT INTO t2(a,b) VALUES(1, 2); + INSERT INTO t2(a,b) VALUES(3, 4); + INSERT INTO t2(a,b) VALUES(5, 6); + + ANALYZE; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 109 no such table: t2 +stmt 109 err 1 -1 145 no such table: t2 +stmt 145 err 1 -1 181 no such table: t2 +stmt 181 ok +==== 8.0 + + CREATE TABLE t1(a, b, c, PRIMARY KEY(b, c)) WITHOUT ROWID; + CREATE TABLE t2(a, b, c); +---- +stmt 0 ok +stmt 61 ok +==== 9.0 + + -- Schema from Fossil 2018-08-16 + CREATE TABLE forumpost( + fpid INTEGER PRIMARY KEY, + froot INT, + fprev INT, + firt INT, + fmtime REAL + ); + CREATE INDEX forumthread ON forumpost(froot,fmtime); + CREATE TABLE blob( + rid INTEGER PRIMARY KEY, + rcvid INTEGER, + size INTEGER, + uuid TEXT UNIQUE NOT NULL, + content BLOB, + CHECK( length(uuid)>=40 AND rid>0 ) + ); + CREATE TABLE event( + type TEXT, + mtime DATETIME, + objid INTEGER PRIMARY KEY, + tagid INTEGER, + uid INTEGER REFERENCES user, + bgcolor TEXT, + euser TEXT, + user TEXT, + ecomment TEXT, + comment TEXT, + brief TEXT, + omtime DATETIME + ); + CREATE INDEX event_i1 ON event(mtime); + CREATE TABLE private(rid INTEGER PRIMARY KEY); +---- +stmt 0 ok +stmt 156 err 1 -1 211 no such table: main.forumpost +stmt 211 ok +stmt 392 ok +stmt 659 err 1 -1 700 no such table: main.event +stmt 700 ok diff --git a/parser/testdata/eqp2.metadata.json b/parser/testdata/eqp2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/eqp2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/eqp2.test b/parser/testdata/eqp2.test new file mode 100644 index 0000000..78bf72d --- /dev/null +++ b/parser/testdata/eqp2.test @@ -0,0 +1,7 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c, d); + CREATE INDEX i1 ON t1(a, b, c); +---- +stmt 0 ok +stmt 31 err 1 -1 65 no such table: main.t1 diff --git a/parser/testdata/errmsg.metadata.json b/parser/testdata/errmsg.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/errmsg.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/errmsg.test b/parser/testdata/errmsg.test new file mode 100644 index 0000000..28f9ea6 --- /dev/null +++ b/parser/testdata/errmsg.test @@ -0,0 +1,21 @@ +==== 2.1 + + CREATE TABLE t1(a PRIMARY KEY, b UNIQUE); + INSERT INTO t1 VALUES('abc', 'def'); +---- +stmt 0 ok +stmt 44 err 1 -1 83 no such table: t1 +==== 3.1.1 + + CREATE TABLE t2(a PRIMARY KEY, b UNIQUE); + INSERT INTO t2 VALUES('abc', 'def'); +---- +stmt 0 ok +stmt 44 err 1 -1 83 no such table: t2 +==== 3.2.1 + + CREATE TABLE t2(a PRIMARY KEY, b UNIQUE); + INSERT INTO t2 VALUES('abc', 'def'); +---- +stmt 0 ok +stmt 44 err 1 -1 83 no such table: t2 diff --git a/parser/testdata/errofst1.metadata.json b/parser/testdata/errofst1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/errofst1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/errofst1.test b/parser/testdata/errofst1.test new file mode 100644 index 0000000..555f780 --- /dev/null +++ b/parser/testdata/errofst1.test @@ -0,0 +1,14 @@ +==== errofst1-1.1 + + CREATE TABLE t1 as select 1 as aa; + CREATE VIEW t2 AS + WITH t3 AS (SELECT 1 FROM t1 AS bb, t1 AS cc WHERE cc.aa <= sts.aa) + SELECT 1 FROM t3 AS dd; +---- +stmt 0 ok +stmt 37 ok +==== errofst1-1.2 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t2 diff --git a/parser/testdata/eval.metadata.json b/parser/testdata/eval.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/eval.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/eval.test b/parser/testdata/eval.test new file mode 100644 index 0000000..32520b9 --- /dev/null +++ b/parser/testdata/eval.test @@ -0,0 +1,70 @@ +==== eval-1.1 + + CREATE TABLE t1(x INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 SELECT x+2 FROM t1; + INSERT INTO t1 SELECT x+4 FROM t1; + INSERT INTO t1 SELECT x+8 FROM t1; + INSERT INTO t1 SELECT x+16 FROM t1; + INSERT INTO t1 SELECT x+32 FROM t1; + INSERT INTO t1 SELECT x+64 FROM t1; + INSERT INTO t1 SELECT x+128 FROM t1; + INSERT INTO t1 SELECT x+256 FROM t1; + SELECT count(*), max(x) FROM t1; +---- +stmt 0 ok +stmt 44 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 183 no such table: t1 +stmt 183 err 1 -1 222 no such table: t1 +stmt 222 err 1 -1 262 no such table: t1 +stmt 262 err 1 -1 302 no such table: t1 +stmt 302 err 1 -1 342 no such table: t1 +stmt 342 err 1 -1 383 no such table: t1 +stmt 383 err 1 -1 424 no such table: t1 +stmt 424 err 1 -1 461 no such table: t1 +==== eval-1.2 + + SELECT x, test_eval('SELECT max(x) FROM t1 WHERE x<' || x) FROM t1 LIMIT 5 +---- +stmt 0 err 1 -1 80 no such table: t1 +==== eval-2.1 + + CREATE TABLE t2(x,y); + INSERT INTO t2 SELECT x, x+1 FROM t1 WHERE x<5; + SELECT x, test_eval('DELETE FROM t2 WHERE x='||x), y FROM t2; +---- +stmt 0 ok +stmt 26 err 1 -1 78 no such table: t2 +stmt 78 err 1 -1 144 no such table: t2 +==== eval-2.2 + + SELECT * FROM t2 +---- +stmt 0 err 1 -1 22 no such table: t2 +==== eval-2.3 + + INSERT INTO t2 SELECT x, x+1 FROM t1 WHERE x<5; + SELECT x, test_eval('DELETE FROM t2 WHERE x='||x), y FROM t2 + ORDER BY rowid DESC; +---- +stmt 0 err 1 -1 52 no such table: t2 +stmt 52 err 1 -1 143 no such table: t2 +==== eval-2.4 + + SELECT * FROM t2 +---- +stmt 0 err 1 -1 22 no such table: t2 +==== eval-3.1 + + INSERT INTO t2 SELECT x, x+1 FROM t1 WHERE x<5; + SELECT x, test_eval('UPDATE t2 SET y=y+100 WHERE x='||x), y FROM t2; +---- +stmt 0 err 1 -1 52 no such table: t2 +stmt 52 err 1 -1 125 no such table: t2 +==== eval-4.1 + SELECT test_eval('SELECT ''abcdefghij''') +---- +stmt 0 err 1 8 43 no such function: test_eval diff --git a/parser/testdata/exclusive.metadata.json b/parser/testdata/exclusive.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/exclusive.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/exclusive.test b/parser/testdata/exclusive.test new file mode 100644 index 0000000..186e687 --- /dev/null +++ b/parser/testdata/exclusive.test @@ -0,0 +1,153 @@ +==== exclusive-1.0 + + pragma locking_mode; + pragma main.locking_mode; + pragma temp.locking_mode; +---- +stmt 0 ok +stmt 25 ok +stmt 55 ok +==== exclusive-1.1 + + pragma locking_mode = exclusive; +---- +stmt 0 ok +==== exclusive-1.2 + + pragma locking_mode; + pragma main.locking_mode; + pragma temp.locking_mode; +---- +stmt 0 ok +stmt 25 ok +stmt 55 ok +==== exclusive-1.3 + + pragma locking_mode = normal; +---- +stmt 0 ok +==== exclusive-1.4 + + pragma locking_mode; + pragma main.locking_mode; + pragma temp.locking_mode; +---- +stmt 0 ok +stmt 25 ok +stmt 55 ok +==== exclusive-1.5 + + pragma locking_mode = invalid; +---- +stmt 0 ok +==== exclusive-1.6 + + pragma locking_mode; + pragma main.locking_mode; + pragma temp.locking_mode; +---- +stmt 0 ok +stmt 25 ok +stmt 55 ok +==== exclusive-1.9 + + pragma locking_mode; +---- +stmt 0 ok +==== exclusive-1.99 + + DETACH aux; + DETACH aux2; + DETACH aux3; +---- +stmt 0 ok +stmt 18 ok +stmt 37 ok +==== exclusive-2.0 + + CREATE TABLE abc(a, b, c); + INSERT INTO abc VALUES(1, 2, 3); + PRAGMA locking_mode = exclusive; +---- +stmt 0 ok +stmt 31 err 1 -1 68 no such table: abc +stmt 68 ok +==== exclusive-3.3 + + INSERT INTO abc VALUES('A', 'B', 'C'); + SELECT * FROM abc; +---- +stmt 0 err 1 -1 45 no such table: abc +stmt 45 err 1 -1 70 no such table: abc +==== exclusive-3.4 + + BEGIN; + UPDATE abc SET a = 1, b = 2, c = 3; + ROLLBACK; + SELECT * FROM abc; +---- +stmt 0 ok +stmt 13 err 1 -1 55 no such table: abc +stmt 55 ok +stmt 71 err 1 -1 96 no such table: abc +==== exclusive-4.3 + + INSERT INTO t3 SELECT randstr(10,400) FROM t3 WHERE random()%10==0; +---- +stmt 0 err 1 -1 72 no such table: t3 +==== exclusive-4.5 + + PRAGMA locking_mode = NORMAL; + DROP TABLE t3; + DROP TABLE abc; +---- +stmt 0 ok +stmt 34 err 1 -1 53 no such table: t3 +stmt 53 err 1 -1 73 no such table: abc +==== exclusive-5.0 + + CREATE TABLE abc(a UNIQUE, b UNIQUE, c UNIQUE); + BEGIN; + INSERT INTO abc VALUES(1, 2, 3); + INSERT INTO abc SELECT a+1, b+1, c+1 FROM abc; +---- +stmt 0 ok +stmt 52 ok +stmt 63 err 1 -1 100 no such table: abc +stmt 100 err 1 -1 151 no such table: abc +==== exclusive-5.6 + + PRAGMA locking_mode = normal; + SELECT * FROM abc; +---- +stmt 0 ok +stmt 34 err 1 -1 57 no such table: abc +==== exclusive-6.1 + + CREATE TABLE t4(a, b); + INSERT INTO t4 VALUES('Eden', 1955); + BEGIN; + INSERT INTO t4 VALUES('Macmillan', 1957); + INSERT INTO t4 VALUES('Douglas-Home', 1963); + INSERT INTO t4 VALUES('Wilson', 1964); +---- +stmt 0 ok +stmt 25 err 1 -1 64 no such table: t4 +stmt 64 ok +stmt 73 err 1 -1 119 no such table: t4 +stmt 119 err 1 -1 168 no such table: t4 +stmt 168 err 1 -1 211 no such table: t4 +==== exclusive-6.3 + + PRAGMA locking_mode = EXCLUSIVE; + SELECT * FROM t4; +---- +stmt 0 ok +stmt 35 err 1 -1 55 no such table: t4 +==== exclusive-6.5 + + PRAGMA locking_mode = EXCLUSIVE; + SELECT * FROM sqlite_master; +---- +stmt 0 ok +stmt 35 ok diff --git a/parser/testdata/exclusive2.metadata.json b/parser/testdata/exclusive2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/exclusive2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/exclusive2.test b/parser/testdata/exclusive2.test new file mode 100644 index 0000000..082b095 --- /dev/null +++ b/parser/testdata/exclusive2.test @@ -0,0 +1,25 @@ +==== exclusive2-1.1 + + BEGIN; + CREATE TABLE t1(a, b); + INSERT INTO t1(a, b) VALUES(randstr(10, 400), 0); + INSERT INTO t1(a, b) VALUES(randstr(10, 400), 0); + INSERT INTO t1(a, b) SELECT randstr(10, 400), 0 FROM t1; + INSERT INTO t1(a, b) SELECT randstr(10, 400), 0 FROM t1; + INSERT INTO t1(a, b) SELECT randstr(10, 400), 0 FROM t1; + INSERT INTO t1(a, b) SELECT randstr(10, 400), 0 FROM t1; + INSERT INTO t1(a, b) SELECT randstr(10, 400), 0 FROM t1; + COMMIT; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 11 ok +stmt 38 err 1 -1 92 no such table: t1 +stmt 92 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 207 no such table: t1 +stmt 207 err 1 -1 268 no such table: t1 +stmt 268 err 1 -1 329 no such table: t1 +stmt 329 err 1 -1 390 no such table: t1 +stmt 390 err 1 -1 451 no such table: t1 +stmt 451 ok +stmt 463 err 1 -1 492 no such table: t1 diff --git a/parser/testdata/exec.metadata.json b/parser/testdata/exec.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/exec.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/exec.test b/parser/testdata/exec.test new file mode 100644 index 0000000..1461290 --- /dev/null +++ b/parser/testdata/exec.test @@ -0,0 +1,9 @@ +==== exec-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 80 no such table: t1 diff --git a/parser/testdata/existsexpr.metadata.json b/parser/testdata/existsexpr.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/existsexpr.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/existsexpr.test b/parser/testdata/existsexpr.test new file mode 100644 index 0000000..1c03185 --- /dev/null +++ b/parser/testdata/existsexpr.test @@ -0,0 +1,426 @@ +==== 1.0 + + CREATE TABLE x1(a, b, PRIMARY KEY(a)) WITHOUT ROWID; + INSERT INTO x1 VALUES(1, 2), (3, 4), (5, 6); + CREATE INDEX x1b ON x1(b); + + CREATE TABLE x2(x, y); + INSERT INTO x2 VALUES(1, 2), (3, 4), (5, 6); +---- +stmt 0 ok +stmt 55 err 1 -1 102 no such table: x1 +stmt 102 err 1 -1 131 no such table: main.x1 +stmt 131 ok +stmt 157 err 1 -1 204 no such table: x2 +==== 1.1 + + SELECT 1 WHERE EXISTS (SELECT 1 FROM x1 WHERE a=5) +---- +stmt 0 err 1 -1 54 no such table: x1 +==== 1.2 + + SELECT * FROM x2 WHERE EXISTS (SELECT 1 FROM x1 WHERE a=x) +---- +stmt 0 err 1 -1 62 no such table: x2 +==== 1.3.1 + + EXPLAIN QUERY PLAN + SELECT * FROM x2 WHERE EXISTS (SELECT 1 FROM x1 WHERE a=x) +---- +stmt 0 err 1 -1 83 no such table: x2 +==== 1.3.2 + + EXPLAIN QUERY PLAN + SELECT * FROM x2 WHERE EXISTS (SELECT 1 FROM x1 WHERE b=x) +---- +stmt 0 err 1 -1 83 no such table: x2 +==== 1.4.1 + + EXPLAIN QUERY PLAN + SELECT * FROM x2 WHERE x=1 AND EXISTS (SELECT 1 FROM x1 WHERE a=x) +---- +stmt 0 err 1 -1 91 no such table: x2 +==== 1.4.2 + + EXPLAIN QUERY PLAN + SELECT * FROM x2 WHERE EXISTS (SELECT 1 FROM x1 WHERE a=x) AND y=2 +---- +stmt 0 err 1 -1 91 no such table: x2 +==== 1.5 + + SELECT count(*) FROM x2 WHERE EXISTS (SELECT 1 FROM x1 WHERE a=x) +---- +stmt 0 err 1 -1 69 no such table: x2 +==== 2.0 + + CREATE TABLE t1(a, b); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<1000 + ) INSERT INTO t1 SELECT i, i FROM s; + + CREATE TABLE t2(c, d); + WITH s(i) AS ( + SELECT 10 UNION ALL SELECT i+10 FROM s WHERE i<1000 + ) INSERT INTO t2 SELECT i, i FROM s; +---- +stmt 0 ok +stmt 25 err 1 -1 135 no such table: t1 +stmt 135 ok +stmt 161 err 1 -1 273 no such table: t2 +==== 2.1 + + SELECT count(*) FROM t1; + SELECT count(*) FROM t2; +---- +stmt 0 err 1 -1 27 no such table: t1 +stmt 27 err 1 -1 54 no such table: t2 +==== 2.2 + + SELECT count(*) FROM t1, t2 WHERE a=c; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 2.3 + + SELECT count(*) FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c=a) +---- +stmt 0 err 1 -1 69 no such table: t1 +==== 2.4.0 + + CREATE UNIQUE INDEX t2c ON t2(c); + CREATE UNIQUE INDEX t1a ON t1(a); +---- +stmt 0 err 1 -1 36 no such table: main.t2 +stmt 36 err 1 -1 72 no such table: main.t1 +==== 2.4.2 + + ANALYZE; +---- +stmt 0 ok +==== 2.4.4 + + SELECT count(*) FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c=a); +---- +stmt 0 err 1 -1 69 no such table: t1 +==== 2.5.1 + + EXPLAIN QUERY PLAN + SELECT count(*) FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.rowid=a); +---- +stmt 0 err 1 -1 97 no such table: t1 +==== 3.0 + + CREATE TABLE y1(a, b, c); + CREATE TABLE y2(x, y, z); + CREATE UNIQUE INDEX y2zy ON y2(z, y); + + INSERT INTO y1 VALUES(1, 1, 1); + INSERT INTO y1 VALUES(2, 2, 2); + INSERT INTO y1 VALUES(3, 3, 3); + INSERT INTO y1 VALUES(4, 4, 4); + + INSERT INTO y2 VALUES(1, 1, 1); + INSERT INTO y2 VALUES(3, 3, 3); +---- +stmt 0 ok +stmt 28 ok +stmt 56 err 1 -1 96 no such table: main.y2 +stmt 96 err 1 -1 131 no such table: y1 +stmt 131 err 1 -1 165 no such table: y1 +stmt 165 err 1 -1 199 no such table: y1 +stmt 199 err 1 -1 233 no such table: y1 +stmt 233 err 1 -1 268 no such table: y2 +stmt 268 err 1 -1 302 no such table: y2 +==== 4.0 + + CREATE TABLE tx1(a TEXT COLLATE nocase, b TEXT); + CREATE UNIQUE INDEX tx1ab ON tx1(a, b); + + INSERT INTO tx1 VALUES('a', 'a'); + INSERT INTO tx1 VALUES('B', 'b'); + INSERT INTO tx1 VALUES('c', 'c'); + INSERT INTO tx1 VALUES('D', 'd'); + INSERT INTO tx1 VALUES('e', 'e'); + + CREATE TABLE tx2(x, y); + INSERT INTO tx2 VALUES('A', 'a'); + INSERT INTO tx2 VALUES('b', 'b'); + INSERT INTO tx2 VALUES('C', 'c'); + INSERT INTO tx2 VALUES('D', 'd'); +---- +stmt 0 ok +stmt 51 err 1 -1 93 no such table: main.tx1 +stmt 93 err 1 -1 130 no such table: tx1 +stmt 130 err 1 -1 166 no such table: tx1 +stmt 166 err 1 -1 202 no such table: tx1 +stmt 202 err 1 -1 238 no such table: tx1 +stmt 238 err 1 -1 274 no such table: tx1 +stmt 274 ok +stmt 301 err 1 -1 337 no such table: tx2 +stmt 337 err 1 -1 373 no such table: tx2 +stmt 373 err 1 -1 409 no such table: tx2 +stmt 409 err 1 -1 445 no such table: tx2 +==== 4.3 + + DROP INDEX tx1ab; + CREATE UNIQUE INDEX tx1ab ON tx1(a COLLATE binary, b); +---- +stmt 0 err 1 -1 20 no such index: tx1ab +stmt 20 err 1 -1 77 no such table: main.tx1 +==== 5.4 + + CREATE TABLE a2(o); + INSERT INTO a2 VALUES(2), (5); +---- +stmt 0 ok +stmt 22 err 1 -1 55 no such table: a2 +==== 6.0 + + CREATE TABLE t1(a, b UNIQUE, c UNIQUE); + CREATE TABLE t2(a INfEGER PRIMARY KEY, b); + CREATE UNIQUE INDEX t2b ON t2(b); +---- +stmt 0 ok +stmt 42 ok +stmt 87 err 1 -1 123 no such table: main.t2 +==== 6.1 + + SELECT a FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c COLLATE f = a) +---- +stmt 0 err 1 -1 74 no such table: t1 +==== 7.0 + + CREATE TABLE t1(x); + CREATE TABLE t2(y UNIQUE); + + INSERT INTO t1 VALUES(1), (2); + INSERT INTO t2 VALUES(1), (3); + + SELECT * FROM t1 one LEFT JOIN t1 two ON (one.x=two.x AND EXISTS ( + SELECT 1 FROM t2 WHERE y=one.x + )); +---- +stmt 0 ok +stmt 22 ok +stmt 51 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 118 no such table: t2 +stmt 118 err 1 -1 229 no such table: t1 +==== 8.0 + + CREATE TABLE t0 (c0 INT); INSERT INTO t0(c0) VALUES (1); + CREATE TABLE t1(c0 INT); INSERT INTO t1(c0) VALUES (2); + SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t0 LIMIT 0); +---- +stmt 0 ok +stmt 28 err 1 -1 60 no such table: t0 +stmt 60 ok +stmt 87 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 180 no such table: t1 +==== 9.0 + + CREATE TABLE t1(xx); + INSERT INTO t1 VALUES('big string value'); +---- +stmt 0 ok +stmt 23 err 1 -1 68 no such table: t1 +==== 9.1 + + PRAGMA automatic_index = off; + CREATE TABLE t2(ii); + INSERT INTO t2 VALUES(100); + INSERT INTO t2 VALUES(200); +---- +stmt 0 ok +stmt 32 ok +stmt 55 err 1 -1 85 no such table: t2 +stmt 85 err 1 -1 115 no such table: t2 +==== 9.2 + + CREATE TABLE t3(yy); + INSERT INTO t3 VALUES(200); +---- +stmt 0 ok +stmt 23 err 1 -1 53 no such table: t3 +==== 9.3 + + SELECT 1 FROM t2 WHERE EXISTS ( SELECT 1 FROM t3 WHERE yy==t2.ii ) +---- +stmt 0 err 1 -1 70 no such table: t2 +==== 9.4 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE EXISTS ( SELECT 1 FROM t3 WHERE yy==t2.ii ) + ) +---- +stmt 0 err 1 -1 94 no such table: t2 +==== 9.5 + + SELECT 1234 WHERE EXISTS ( + SELECT 1 FROM t2 WHERE EXISTS ( SELECT 1 FROM t3 WHERE yy==t2.ii ) + ) +---- +stmt 0 err 1 -1 105 no such table: t2 +==== 9.7.1 + + DROP TABLE t3; + CREATE TABLE t3(x INT, y INT); + CREATE TABLE t4(z INT); + INSERT INTO t3 VALUES (1,0),(2,2),(3,3); + INSERT INTO t4 VALUES (4),(5); +---- +stmt 0 err 1 -1 17 no such table: t3 +stmt 17 ok +stmt 50 ok +stmt 76 err 1 -1 119 no such table: t3 +stmt 119 err 1 -1 152 no such table: t4 +==== 10.0 + + CREATE TABLE t1(a); + CREATE TABLE x1(x); +---- +stmt 0 ok +stmt 22 ok +==== 10.1 + + SELECT EXISTS( SELECT 1 FROM t1 ) aaa FROM x1 WHERE aaa AND aaa +---- +stmt 0 err 1 -1 67 no such table: x1 +==== 10.2 + + SELECT + EXISTS( SELECT 1 FROM t1 ) aaa + WHERE ( + SELECT 1 FROM x1 WHERE aaa AND aaa + ); +---- +stmt 0 err 1 -1 99 no such table: t1 +==== 11.0 + + CREATE TABLE parent (id TEXT PRIMARY KEY); + CREATE TABLE child_a (id TEXT); + CREATE TABLE child_b (id TEXT); + INSERT INTO parent VALUES ('p1'); + INSERT INTO child_a VALUES ('p1'); +---- +stmt 0 ok +stmt 45 ok +stmt 79 ok +stmt 113 err 1 -1 149 no such table: parent +stmt 149 err 1 -1 186 no such table: child_a +==== 11.1 + + SELECT count(*), parent.id FROM parent + WHERE EXISTS ( + SELECT 1 FROM child_a WHERE child_a.id = parent.id + UNION + SELECT 1 FROM child_b WHERE child_b.id = parent.id + ) + GROUP BY id; +---- +stmt 0 err 1 -1 206 no such table: parent +==== 12.0 + + CREATE TABLE t2(id INT, data INT); + CREATE TABLE t3(amount INT); + + INSERT INTO t2 VALUES (1,0),(2,0); + INSERT INTO t3 VALUES (1),(1); +---- +stmt 0 ok +stmt 37 ok +stmt 68 err 1 -1 106 no such table: t2 +stmt 106 err 1 -1 139 no such table: t3 +==== 12.1 + + SELECT * FROM t2 + WHERE EXISTS (SELECT 1 FROM t3 WHERE t3.amount > t2.data) +---- +stmt 0 err 1 -1 82 no such table: t2 +==== 12.2 + + SELECT * FROM t2 + WHERE EXISTS (SELECT 1 FROM t3 WHERE t3.amount > t2.data) + LIMIT 2 OFFSET 3 +---- +stmt 0 err 1 -1 101 no such table: t2 +==== 13.0 + + CREATE TABLE t1(b,c); + CREATE TABLE t2(x,y); + CREATE TABLE t3(p,q); + + INSERT INTO t1 VALUES(7,10); + INSERT INTO t2 VALUES(1,1), (4,7); + INSERT INTO t3 VALUES(4,7); + + PRAGMA automatic_index = 0; +---- +stmt 0 ok +stmt 24 ok +stmt 48 ok +stmt 72 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 141 no such table: t2 +stmt 141 err 1 -1 171 no such table: t3 +stmt 171 ok +==== 13.1 + + SELECT * FROM t1 WHERE EXISTS ( + SELECT 1 FROM t2 + WHERE EXISTS ( + SELECT 1 FROM t3 WHERE t3.p=t2.x AND t3.q=t1.b + ) + ) +---- +stmt 0 err 1 -1 146 no such table: t1 +==== 14.1.0 + + CREATE TABLE t(n INTEGER, parent INTEGER); + CREATE INDEX idx ON t(parent); + INSERT INTO t VALUES (1, NULL); + INSERT INTO t VALUES (10, NULL); +---- +stmt 0 ok +stmt 45 err 1 -1 78 no such table: main.t +stmt 78 err 1 -1 113 no such table: t +stmt 113 err 1 -1 148 no such table: t +==== 14.1.1 + + SELECT count(*) FROM t b + WHERE (b.parent IS NULL OR b.parent = 99) + AND 5 <= +b.n +---- +stmt 0 err 1 -1 92 no such table: t +==== 14.1.2 + + SELECT 'match' WHERE EXISTS ( + SELECT 1 FROM t b + WHERE (b.parent IS NULL OR b.parent = 99) + AND 5 <= +b.n + ) +---- +stmt 0 err 1 -1 129 no such table: t +==== 14.2.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(20, 20); + + CREATE TABLE t2(c, d); + CREATE INDEX t2c ON t2(c); + CREATE INDEX t2d ON t2(d); + + INSERT INTO t2 VALUES(20, -1); + INSERT INTO t2 VALUES(20, 0); +---- +stmt 0 ok +stmt 25 err 1 -1 58 no such table: t1 +stmt 58 ok +stmt 84 err 1 -1 113 no such table: main.t2 +stmt 113 err 1 -1 142 no such table: main.t2 +stmt 142 err 1 -1 176 no such table: t2 +stmt 176 err 1 -1 209 no such table: t2 +==== 14.2.2 + + SELECT * FROM t1 WHERE EXISTS ( + SELECT 1 FROM t2 WHERE (c=a OR d=a) AND (d+1)>0 + ) +---- +stmt 0 err 1 -1 91 no such table: t1 diff --git a/parser/testdata/existsexpr2.metadata.json b/parser/testdata/existsexpr2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/existsexpr2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/existsexpr2.test b/parser/testdata/existsexpr2.test new file mode 100644 index 0000000..412d83e --- /dev/null +++ b/parser/testdata/existsexpr2.test @@ -0,0 +1,80 @@ +==== 1.0 + + CREATE TABLE x1(a, b, PRIMARY KEY(a)) WITHOUT ROWID; + INSERT INTO x1 VALUES(1, 2), (3, 4), (5, 6); + CREATE INDEX x1b ON x1(b); + + CREATE TABLE x2(x, y); + INSERT INTO x2 VALUES(1, 2), (3, 4), (5, 6); +---- +stmt 0 ok +stmt 55 err 1 -1 102 no such table: x1 +stmt 102 err 1 -1 131 no such table: main.x1 +stmt 131 ok +stmt 157 err 1 -1 204 no such table: x2 +==== 1.1 + + SELECT * FROM x1 WHERE EXISTS (SELECT 1 FROM x2 WHERE a!=123) +---- +stmt 0 err 1 -1 65 no such table: x1 +==== 1.2 + + CREATE TABLE x3(u, v); + CREATE INDEX x3u ON x3(u); + INSERT INTO x3 VALUES + (1, 1), (1, 2), (1, 3), + (2, 1), (2, 2), (2, 3); +---- +stmt 0 ok +stmt 25 err 1 -1 54 no such table: main.x3 +stmt 54 err 1 -1 134 no such table: x3 +==== 1.3 + + SELECT * FROM x1 WHERE EXISTS ( + SELECT 1 FROM x3 WHERE u IN (1, 2, 3, 4) AND v=b + ); +---- +stmt 0 err 1 -1 92 no such table: x1 +==== 2.0 + + CREATE TABLE t1(a, b, c); + CREATE INDEX t1ab ON t1(a,b); + + INSERT INTO t1 VALUES + ('abc', 1, 1), + ('abc', 2, 2), + ('abc', 2, 3), + + ('def', 1, 1), + ('def', 2, 2), + ('def', 2, 3); + + CREATE TABLE t2(x, y); + INSERT INTO t2 VALUES(1, 1), (2, 2), (3, 3); + + ANALYZE; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1 VALUES('t1','t1ab','10000 5000 2'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 28 err 1 -1 60 no such table: main.t1 +stmt 60 err 1 -1 212 no such table: t1 +stmt 212 ok +stmt 238 err 1 -1 285 no such table: t2 +stmt 285 ok +stmt 297 err 1 -1 325 no such table: sqlite_stat1 +stmt 325 err 1 -1 388 no such table: sqlite_stat1 +stmt 388 ok +==== 2.1 + + SELECT a,b,c FROM t1 WHERE b=2 ORDER BY a +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 2.2 + + SELECT x, y FROM t2 WHERE EXISTS ( + SELECT 1 FROM t1 WHERE b=x + ) +---- +stmt 0 err 1 -1 73 no such table: t2 diff --git a/parser/testdata/existsfault.metadata.json b/parser/testdata/existsfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/existsfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/existsfault.test b/parser/testdata/existsfault.test new file mode 100644 index 0000000..fdaed0c --- /dev/null +++ b/parser/testdata/existsfault.test @@ -0,0 +1,16 @@ +==== 1.0 + + CREATE TABLE x1(a, b); + INSERT INTO x1 VALUES(1, 2), (3, 4), (5, 6); + CREATE UNIQUE INDEX x1a ON x1(a); + CREATE INDEX x1b ON x1(b); + + CREATE TABLE x2(x, y); + INSERT INTO x2 VALUES(1, 2), (3, 4), (5, 6); +---- +stmt 0 ok +stmt 25 err 1 -1 72 no such table: x1 +stmt 72 err 1 -1 108 no such table: main.x1 +stmt 108 err 1 -1 137 no such table: main.x1 +stmt 137 ok +stmt 163 err 1 -1 210 no such table: x2 diff --git a/parser/testdata/exprfault.metadata.json b/parser/testdata/exprfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/exprfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/exprfault.test b/parser/testdata/exprfault.test new file mode 100644 index 0000000..5ac8184 --- /dev/null +++ b/parser/testdata/exprfault.test @@ -0,0 +1,7 @@ +==== 1.0 + + CREATE TABLE t1(a); + CREATE TABLE t2(d); +---- +stmt 0 ok +stmt 22 ok diff --git a/parser/testdata/exprfault2.metadata.json b/parser/testdata/exprfault2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/exprfault2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/exprfault2.test b/parser/testdata/exprfault2.test new file mode 100644 index 0000000..3ed7722 --- /dev/null +++ b/parser/testdata/exprfault2.test @@ -0,0 +1,9 @@ +==== 1.0 + + CREATE TABLE t1(a,b,c,d,f,PRIMARY KEY(b,b)); + CREATE TABLE t2(x INT PRIMARY KEY, y, z); + CREATE TABLE t3(a,b,c,d,e,PRIMARY KEY(a,b))WITHOUT ROWID; +---- +stmt 0 ok +stmt 47 ok +stmt 91 ok diff --git a/parser/testdata/expridx1.metadata.json b/parser/testdata/expridx1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/expridx1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/expridx1.test b/parser/testdata/expridx1.test new file mode 100644 index 0000000..494ff07 --- /dev/null +++ b/parser/testdata/expridx1.test @@ -0,0 +1,179 @@ +==== 1.0.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b REAL); + INSERT INTO t1 VALUES(10, 10.0); + INSERT INTO t1 VALUES(15, 15.0); + INSERT INTO t1 VALUES(20, 20.0); + INSERT INTO t1 VALUES(25, 25.0); + INSERT INTO t1 VALUES(30, 30.0); + CREATE INDEX i1 ON t1((b+0.0)); +---- +stmt 0 ok +stmt 50 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 155 no such table: t1 +stmt 155 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 225 no such table: t1 +stmt 225 err 1 -1 259 no such table: main.t1 +==== 1.1.1 + + UPDATE x1 SET b=21.0 WHERE rowid=20; +---- +stmt 0 err 1 -1 39 no such table: x1 +==== 1.1.1b + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 1.1.2 + + DELETE FROM t1 WHERE a=20; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 1.1.3 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 1.2.1 + + UPDATE x1 SET b=26.0 WHERE rowid=25; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 39 no such table: x1 +stmt 39 ok +==== 1.2.3 + + DELETE FROM t1 WHERE a=25; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 1.2.4 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 1.3.1 + + DELETE FROM t1; + INSERT INTO t1 VALUES(5, 15.0); + INSERT INTO t1 VALUES(10, 20.0); + INSERT INTO t1 VALUES(15, 20.0); + INSERT INTO t1 VALUES(20, 20.0); + INSERT INTO t1 VALUES(25, 20.0); + INSERT INTO t1 VALUES(30, 20.0); + INSERT INTO t1 VALUES(35, 25.0); + + UPDATE x1 SET b=19.0 WHERE b=20.0; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 53 no such table: t1 +stmt 53 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 193 no such table: t1 +stmt 193 err 1 -1 228 no such table: t1 +stmt 228 err 1 -1 263 no such table: t1 +stmt 263 err 1 -1 301 no such table: x1 +stmt 301 ok +==== 1.3.4 + + PRAGMA integrity_check +---- +stmt 0 ok +==== 2.2 + + UPDATE x1 SET c=hex(randomblob(50)) WHERE (a%2)!=0 +---- +stmt 0 err 1 -1 54 no such table: x1 +==== 3.0 + + CREATE TABLE y1(a, b, c GENERATED ALWAYS AS (a*b) VIRTUAL); + CREATE INDEX i1 ON y1(c); + INSERT INTO y1 VALUES(2, 3); + INSERT INTO y1 VALUES(4, 5); +---- +stmt 0 ok +stmt 62 err 1 -1 90 no such table: main.y1 +stmt 90 err 1 -1 121 no such table: y1 +stmt 121 err 1 -1 152 no such table: y1 +==== 3.2 + + UPDATE x1 SET c=19 WHERE rowid=2; +---- +stmt 0 err 1 -1 36 no such table: x1 +==== 3.4 + + DELETE FROM y1 WHERE a=4; +---- +stmt 0 err 1 -1 28 no such table: y1 +==== 4.0 + + CREATE TABLE z1(a INTEGER PRIMARY KEY, b); + CREATE INDEX z1b ON z1(b+0.0); + INSERT INTO z1 VALUES(1, 1.0); + INSERT INTO z1 VALUES(2, 4.0); + INSERT INTO z1 VALUES(3, 4.0); + INSERT INTO z1 VALUES(4, 4.0); + INSERT INTO z1 VALUES(5, 4.0); + INSERT INTO z1 VALUES(6, 4.0); + INSERT INTO z1 VALUES(7, 4.0); + INSERT INTO z1 VALUES(8, 1.0); +---- +stmt 0 ok +stmt 45 err 1 -1 78 no such table: main.z1 +stmt 78 err 1 -1 111 no such table: z1 +stmt 111 err 1 -1 144 no such table: z1 +stmt 144 err 1 -1 177 no such table: z1 +stmt 177 err 1 -1 210 no such table: z1 +stmt 210 err 1 -1 243 no such table: z1 +stmt 243 err 1 -1 276 no such table: z1 +stmt 276 err 1 -1 309 no such table: z1 +stmt 309 err 1 -1 342 no such table: z1 +==== 4.2 + + UPDATE x1 SET b=4.000000000000001 WHERE a=2; -- 1 ULP + UPDATE x1 SET b=4.000000000000002 WHERE a=3; -- 2 ULP + UPDATE x1 SET b=4.000000000000003 WHERE a=4; -- 3 ULP + UPDATE x1 SET b=3.9999999999999996 WHERE a=5; -- -1 ULP + UPDATE x1 SET b=3.9999999999999992 WHERE a=6; -- -2 ULP + UPDATE x1 SET b=3.9999999999999988 WHERE a=7; -- -3 ULP +---- +stmt 0 err 1 -1 47 no such table: x1 +stmt 47 err 1 -1 112 no such table: x1 +stmt 112 err 1 -1 177 no such table: x1 +stmt 177 err 1 -1 243 no such table: x1 +stmt 243 err 1 -1 309 no such table: x1 +stmt 309 err 1 -1 375 no such table: x1 +==== 4.3 + + PRAGMA integrity_check +---- +stmt 0 ok +==== 4.4 + + UPDATE z1 SET b=-4.0 WHERE b=4.0; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 36 no such table: z1 +stmt 36 ok +==== 4.5 + + UPDATE x1 SET b=-4.000000000000001 WHERE a=2; -- -1 ULP + UPDATE x1 SET b=-4.000000000000002 WHERE a=3; -- -2 ULP + UPDATE x1 SET b=-4.000000000000003 WHERE a=4; -- -3 ULP + UPDATE x1 SET b=-3.9999999999999996 WHERE a=5; -- 1 ULP + UPDATE x1 SET b=-3.9999999999999992 WHERE a=6; -- 2 ULP + UPDATE x1 SET b=-3.9999999999999988 WHERE a=7; -- 3 ULP +---- +stmt 0 err 1 -1 48 no such table: x1 +stmt 48 err 1 -1 115 no such table: x1 +stmt 115 err 1 -1 182 no such table: x1 +stmt 182 err 1 -1 250 no such table: x1 +stmt 250 err 1 -1 316 no such table: x1 +stmt 316 err 1 -1 382 no such table: x1 +==== 4.6 + + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/fallocate.metadata.json b/parser/testdata/fallocate.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fallocate.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fallocate.test b/parser/testdata/fallocate.test new file mode 100644 index 0000000..6a0a810 --- /dev/null +++ b/parser/testdata/fallocate.test @@ -0,0 +1,13 @@ +==== fallocate-1.6 + PRAGMA freelist_count +---- +stmt 0 ok +==== fallocate-1.8 + COMMIT +---- +stmt 0 ok +==== fallocate-1.9 + + PRAGMA max_page_count = 100; +---- +stmt 0 ok diff --git a/parser/testdata/filefmt.metadata.json b/parser/testdata/filefmt.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/filefmt.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/filefmt.test b/parser/testdata/filefmt.test new file mode 100644 index 0000000..41baa25 --- /dev/null +++ b/parser/testdata/filefmt.test @@ -0,0 +1,107 @@ +==== filefmt-1.3 + + SELECT count(*) FROM sqlite_master +---- +stmt 0 ok +==== filefmt-2.1.1 + + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = 0; + CREATE TABLE t1(a); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1 VALUES(a_string(3000)); + CREATE TABLE t2(a); + INSERT INTO t2 VALUES(1); +---- +stmt 0 ok +stmt 27 ok +stmt 53 ok +stmt 75 err 1 -1 103 no such table: main.t1 +stmt 103 err 1 -1 144 no such table: t1 +stmt 144 ok +stmt 166 err 1 -1 194 no such table: t2 +==== filefmt-2.1.4 + INSERT INTO t2 VALUES(2) +---- +stmt 0 err 1 -1 26 no such table: t2 +==== filefmt-2.2.1 + + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = 0; + CREATE TABLE t1(a); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1 VALUES(a_string(3000)); + CREATE TABLE t2(a); + INSERT INTO t2 VALUES(1); +---- +stmt 0 ok +stmt 27 ok +stmt 53 ok +stmt 75 err 1 -1 103 no such table: main.t1 +stmt 103 err 1 -1 144 no such table: t1 +stmt 144 ok +stmt 166 err 1 -1 194 no such table: t2 +==== filefmt-2.2.4 + + PRAGMA integrity_check; + BEGIN; + INSERT INTO t2 VALUES(2); + SAVEPOINT a; + INSERT INTO t2 VALUES(3); + ROLLBACK TO a; +---- +stmt 0 ok +stmt 27 ok +stmt 36 err 1 -1 66 no such table: t2 +stmt 66 ok +stmt 83 err 1 -1 115 no such table: t2 +stmt 115 ok +==== filefmt-2.2.6 + COMMIT +---- +stmt 0 ok +==== filefmt-3.1 + + PRAGMA auto_vacuum = 1; + CREATE TABLE t1(a, b); +---- +stmt 0 ok +stmt 26 ok +==== filefmt-3.3 + + SELECT * FROM sqlite_master; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 31 ok +==== filefmt-4.1 + + PRAGMA auto_vacuum = 1; + CREATE TABLE t1(x, y); + CREATE TABLE t2(x, y); + + INSERT INTO t1 VALUES(randomblob(100), randomblob(100)); + INSERT INTO t1 VALUES(randomblob(100), randomblob(100)); + INSERT INTO t1 VALUES(randomblob(100), randomblob(100)); + INSERT INTO t1 VALUES(randomblob(100), randomblob(100)); + INSERT INTO t1 VALUES(randomblob(100), randomblob(100)); + INSERT INTO t1 VALUES(randomblob(100), randomblob(100)); + + INSERT INTO t2 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t2 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t2 SELECT randomblob(100), randomblob(100) FROM t1; + INSERT INTO t2 SELECT randomblob(100), randomblob(100) FROM t1; +---- +stmt 0 ok +stmt 26 ok +stmt 51 ok +stmt 76 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 195 no such table: t1 +stmt 195 err 1 -1 254 no such table: t1 +stmt 254 err 1 -1 313 no such table: t1 +stmt 313 err 1 -1 372 no such table: t1 +stmt 372 err 1 -1 431 no such table: t1 +stmt 431 err 1 -1 498 no such table: t2 +stmt 498 err 1 -1 564 no such table: t2 +stmt 564 err 1 -1 630 no such table: t2 +stmt 630 err 1 -1 696 no such table: t2 diff --git a/parser/testdata/filter1.metadata.json b/parser/testdata/filter1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/filter1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/filter1.test b/parser/testdata/filter1.test new file mode 100644 index 0000000..1b3f7f7 --- /dev/null +++ b/parser/testdata/filter1.test @@ -0,0 +1,274 @@ +==== 1.0 + + CREATE TABLE t1(a); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1 VALUES(1), (2), (3), (4), (5), (6), (7), (8), (9); +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: main.t1 +stmt 50 err 1 -1 118 no such table: t1 +==== 1.1 + SELECT sum(a) FROM t1; +---- +stmt 0 err 1 -1 23 no such table: t1 +==== 1.2 + SELECT sum(a) FILTER( WHERE a<5 ) FROM t1; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== 1.3 + + SELECT sum(a) FILTER( WHERE a>9 ), + sum(a) FILTER( WHERE a>8 ), + sum(a) FILTER( WHERE a>7 ), + sum(a) FILTER( WHERE a>6 ), + sum(a) FILTER( WHERE a>5 ), + sum(a) FILTER( WHERE a>4 ), + sum(a) FILTER( WHERE a>3 ), + sum(a) FILTER( WHERE a>2 ), + sum(a) FILTER( WHERE a>1 ), + sum(a) FILTER( WHERE a>0 ) + FROM t1; +---- +stmt 0 err 1 -1 381 no such table: t1 +==== 1.4 + + SELECT max(a) FILTER (WHERE (a % 2)==0) FROM t1 +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 1.5 + + SELECT min(a) FILTER (WHERE a>4) FROM t1 +---- +stmt 0 err 1 -1 44 no such table: t1 +==== 1.6 + + SELECT count(*) FILTER (WHERE a!=5) FROM t1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 1.7 + + SELECT min(a) FILTER (WHERE a>3) FROM t1 GROUP BY (a%2) ORDER BY 1; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 1.8 + + CREATE VIEW vv AS + SELECT sum(a) FILTER( WHERE a>9 ), + sum(a) FILTER( WHERE a>8 ), + sum(a) FILTER( WHERE a>7 ), + sum(a) FILTER( WHERE a>6 ), + sum(a) FILTER( WHERE a>5 ), + sum(a) FILTER( WHERE a>4 ), + sum(a) FILTER( WHERE a>3 ), + sum(a) FILTER( WHERE a>2 ), + sum(a) FILTER( WHERE a>1 ), + sum(a) FILTER( WHERE a>0 ) + FROM t1; + SELECT * FROM vv; +---- +stmt 0 ok +stmt 401 err 1 -1 421 no such table: vv +==== 2.0 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1), (2), (3), (4), (5), (6), (7), (8), (9); +---- +stmt 0 ok +stmt 22 err 1 -1 90 no such table: t1 +==== 2.1 + + SELECT upper(a) FILTER (WHERE a=1) FROM t1 +---- +stmt 0 err 1 -1 46 no such table: t1 +==== 2.2 + + SELECT sum(a) FILTER (WHERE 1 - max(a) OVER () > 0) FROM t1 +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 2.3 + + SELECT sum(a) FILTER (WHERE 1 - count(a)) FROM t1 +---- +stmt 0 err 1 -1 53 no such table: t1 +==== 3.0 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1, 1); +---- +stmt 0 ok +stmt 24 err 1 -1 55 no such table: t1 +==== 3.1 + + SELECT b, max(a) FILTER (WHERE b='x') FROM t1; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 3.2 + + CREATE TABLE t2(a, b, c); + INSERT INTO t2 VALUES(1, 2, 3); + INSERT INTO t2 VALUES(1, 3, 4); + INSERT INTO t2 VALUES(2, 5, 6); + INSERT INTO t2 VALUES(2, 7, 8); +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t2 +stmt 62 err 1 -1 96 no such table: t2 +stmt 96 err 1 -1 130 no such table: t2 +stmt 130 err 1 -1 164 no such table: t2 +==== 3.3 + + SELECT a, c, max(b) FILTER (WHERE c='x') FROM t2 GROUP BY a; +---- +stmt 0 err 1 -1 63 no such table: t2 +==== 3.4 + + DELETE FROM t2; + INSERT INTO t2 VALUES(1, 5, 'x'); + INSERT INTO t2 VALUES(1, 2, 3); + INSERT INTO t2 VALUES(1, 4, 'x'); + INSERT INTO t2 VALUES(2, 5, 6); + INSERT INTO t2 VALUES(2, 7, 8); +---- +stmt 0 err 1 -1 18 no such table: t2 +stmt 18 err 1 -1 54 no such table: t2 +stmt 54 err 1 -1 88 no such table: t2 +stmt 88 err 1 -1 124 no such table: t2 +stmt 124 err 1 -1 158 no such table: t2 +stmt 158 err 1 -1 192 no such table: t2 +==== 3.5 + + SELECT a, c, max(b) FILTER (WHERE c='x') FROM t2 GROUP BY a; +---- +stmt 0 err 1 -1 63 no such table: t2 +==== 4.0 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES('a', 0, 5); + INSERT INTO t1 VALUES('a', 1, 10); + INSERT INTO t1 VALUES('a', 0, 15); + + INSERT INTO t1 VALUES('b', 0, 5); + INSERT INTO t1 VALUES('b', 1, 1000); + INSERT INTO t1 VALUES('b', 0, 5); + + INSERT INTO t1 VALUES('c', 0, 1); + INSERT INTO t1 VALUES('c', 1, 2); + INSERT INTO t1 VALUES('c', 0, 3); +---- +stmt 0 ok +stmt 28 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 101 no such table: t1 +stmt 101 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 175 no such table: t1 +stmt 175 err 1 -1 214 no such table: t1 +stmt 214 err 1 -1 250 no such table: t1 +stmt 250 err 1 -1 287 no such table: t1 +stmt 287 err 1 -1 323 no such table: t1 +stmt 323 err 1 -1 359 no such table: t1 +==== 4.1 + + SELECT avg(c) FILTER (WHERE b!=1) AS h FROM t1 GROUP BY a ORDER BY h; +---- +stmt 0 err 1 -1 72 no such table: t1 +==== 4.2 + + SELECT avg(c) FILTER (WHERE b!=1) AS h FROM t1 GROUP BY a ORDER BY (h+1.0); +---- +stmt 0 err 1 -1 78 no such table: t1 +==== 4.3 + + SELECT a, avg(c) FILTER (WHERE b!=1) AS h FROM t1 GROUP BY a ORDER BY avg(c); +---- +stmt 0 err 1 -1 80 no such table: t1 +==== 4.4 + + SELECT a, avg(c) FILTER (WHERE b!=1) FROM t1 GROUP BY a ORDER BY 2 +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 5.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(1, 3); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 87 no such table: t1 +==== 5.1 + + SELECT count(*) FILTER (WHERE b>2) FROM (SELECT * FROM t1) +---- +stmt 0 err 1 -1 62 no such table: t1 +==== 5.2 + + SELECT count(*) FILTER (WHERE b>2) OVER () FROM (SELECT * FROM t1) +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 5.3 + + SELECT count(*) FILTER (WHERE b>2) OVER (ORDER BY b) FROM (SELECT * FROM t1) +---- +stmt 0 err 1 -1 80 no such table: t1 +==== 6.0 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,1); + INSERT INTO t1 VALUES(2,2); + CREATE TABLE t2(x,y); + INSERT INTO t2 VALUES(1,1); +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 84 no such table: t1 +stmt 84 ok +stmt 108 err 1 -1 138 no such table: t2 +==== 6.1 + + SELECT (SELECT COUNT(a) FILTER(WHERE x) FROM t2) FROM t1; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== 6.2 + + SELECT (SELECT COUNT(a+x) FROM t2) FROM t1; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== 6.3 + + SELECT (SELECT COUNT(a) FROM t2) FROM t1; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== 7.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(321, 100000); + INSERT INTO t1 VALUES(111, 110000); + INSERT INTO t1 VALUES(444, 120000); + INSERT INTO t1 VALUES(222, 130000); +---- +stmt 0 ok +stmt 45 err 1 -1 83 no such table: t1 +stmt 83 err 1 -1 121 no such table: t1 +stmt 121 err 1 -1 159 no such table: t1 +stmt 159 err 1 -1 197 no such table: t1 +==== 7.1 + + SELECT max(a), max(a) FILTER (WHERE b<12345), b FROM t1; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 8.0 + + CREATE TABLE t0(c0 INT); + CREATE TABLE t1a(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t1a VALUES(1,'one'),(2,NULL),(3,'three'); + CREATE TABLE t1b(c INTEGER PRIMARY KEY, d TEXT); + INSERT INTO t1b VALUES(4,'four'),(5,NULL),(6,'six'); + CREATE VIEW t1 AS SELECT a, b FROM t1a UNION ALL SELECT c, d FROM t1b; + SELECT count()FILTER(WHERE b IS NULL) FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 78 err 1 -1 134 no such table: t1a +stmt 134 ok +stmt 185 err 1 -1 240 no such table: t1b +stmt 240 ok +stmt 313 err 1 -1 362 no such table: t1 diff --git a/parser/testdata/filter2.metadata.json b/parser/testdata/filter2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/filter2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/filter2.test b/parser/testdata/filter2.test new file mode 100644 index 0000000..a79ce25 --- /dev/null +++ b/parser/testdata/filter2.test @@ -0,0 +1,126 @@ +==== 1.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER); + INSERT INTO t1 VALUES + (1, 7), (2, 3), (3, 5), (4, 30), (5, 26), (6, 23), (7, 27), + (8, 3), (9, 17), (10, 26), (11, 33), (12, 25), (13, NULL), (14, 47), + (15, 36), (16, 13), (17, 45), (18, 31), (19, 11), (20, 36), (21, 37), + (22, 21), (23, 22), (24, 14), (25, 16), (26, 3), (27, 7), (28, 29), + (29, 50), (30, 38), (31, 3), (32, 36), (33, 12), (34, 4), (35, 46), + (36, 3), (37, 48), (38, 23), (39, NULL), (40, 24), (41, 5), (42, 46), + (43, 11), (44, NULL), (45, 18), (46, 25), (47, 15), (48, 18), (49, 23); +---- +stmt 0 ok +stmt 27 ok +stmt 80 err 1 -1 602 no such table: t1 +==== 1.1 + + SELECT sum(b) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== 1.2 + + SELECT sum(b) FILTER (WHERE a<10) FROM t1 +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 1.3 + + SELECT count(DISTINCT b) FROM t1 +---- +stmt 0 err 1 -1 36 no such table: t1 +==== 1.4 + + SELECT count(DISTINCT b) FILTER (WHERE a!=19) FROM t1 +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 1.5 + + SELECT min(b) FILTER (WHERE a>19), + min(b) FILTER (WHERE a>0), + max(a+b) FILTER (WHERE a>19), + max(b+a) FILTER (WHERE a BETWEEN 10 AND 40) + FROM t1; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== 1.6 + + SELECT min(b), + min(b), + max(a+b), + max(b+a) + FROM t1 + GROUP BY (a%10) + ORDER BY 1, 2, 3, 4; +---- +stmt 0 err 1 -1 122 no such table: t1 +==== 1.7 + + SELECT min(b) FILTER (WHERE a>19), + min(b) FILTER (WHERE a>0), + max(a+b) FILTER (WHERE a>19), + max(b+a) FILTER (WHERE a BETWEEN 10 AND 40) + FROM t1 + GROUP BY (a%10) + ORDER BY 1, 2, 3, 4; +---- +stmt 0 err 1 -1 216 no such table: t1 +==== 1.8 + + SELECT sum(a+b) FILTER (WHERE a=NULL) FROM t1 +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 1.9 + + SELECT (a%5) FROM t1 GROUP BY (a%5) + HAVING sum(b) FILTER (WHERE b<20) > 34 + ORDER BY 1 +---- +stmt 0 err 1 -1 94 no such table: t1 +==== 1.10 + + SELECT (a%5), sum(b) FILTER (WHERE b<20) AS bbb + FROM t1 + GROUP BY (a%5) HAVING sum(b) FILTER (WHERE b<20) >34 + ORDER BY 1 +---- +stmt 0 err 1 -1 129 no such table: t1 +==== 1.11 + + SELECT (a%5), sum(b) FILTER (WHERE b<20) AS bbb + FROM t1 + GROUP BY (a%5) HAVING sum(b) FILTER (WHERE b<20) >34 + ORDER BY 2 +---- +stmt 0 err 1 -1 129 no such table: t1 +==== 1.12 + + SELECT (a%5), + sum(b) FILTER (WHERE b<20) AS bbb, + count(distinct b) FILTER (WHERE b<20 OR a=13) AS ccc + FROM t1 GROUP BY (a%5) + ORDER BY 2 +---- +stmt 0 err 1 -1 152 no such table: t1 +==== 1.13 + + SELECT + string_agg(CAST(b AS TEXT), '_') FILTER (WHERE b%2!=0), + group_concat(CAST(b AS TEXT), '_') FILTER (WHERE b%2!=1), + count(*) FILTER (WHERE b%2!=0), + count(*) FILTER (WHERE b%2!=1) + FROM t1; +---- +stmt 0 err 1 -1 214 no such table: t1 +==== 1.15 + + SELECT + a/5, + sum(b) FILTER (WHERE a%5=0), + sum(b) FILTER (WHERE a%5=1), + sum(b) FILTER (WHERE a%5=2), + sum(b) FILTER (WHERE a%5=3), + sum(b) FILTER (WHERE a%5=4) + FROM t1 GROUP BY (a/5) ORDER BY 1; +---- +stmt 0 err 1 -1 220 no such table: t1 diff --git a/parser/testdata/filterfault.metadata.json b/parser/testdata/filterfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/filterfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/filterfault.test b/parser/testdata/filterfault.test new file mode 100644 index 0000000..b665328 --- /dev/null +++ b/parser/testdata/filterfault.test @@ -0,0 +1,11 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c, d); + INSERT INTO t1 VALUES(1, 2, 3, 4); + INSERT INTO t1 VALUES(5, 6, 7, 8); + INSERT INTO t1 VALUES(9, 10, 11, 12); +---- +stmt 0 ok +stmt 31 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 145 no such table: t1 diff --git a/parser/testdata/fkey1.metadata.json b/parser/testdata/fkey1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fkey1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fkey1.test b/parser/testdata/fkey1.test new file mode 100644 index 0000000..2fd7511 --- /dev/null +++ b/parser/testdata/fkey1.test @@ -0,0 +1,272 @@ +==== fkey1-1.0 + + CREATE TABLE t1( + a INTEGER PRIMARY KEY, + b INTEGER + REFERENCES t1 ON DELETE CASCADE + REFERENCES t2, + c TEXT, + FOREIGN KEY (b,c) REFERENCES t2(x,y) ON UPDATE CASCADE + ); +---- +stmt 0 ok +==== fkey1-1.1 + + CREATE TABLE t2( + x INTEGER PRIMARY KEY, + y TEXT + ); +---- +stmt 0 ok +==== fkey1-1.2 + + CREATE TABLE t3( + a INTEGER REFERENCES t2, + b INTEGER REFERENCES t1, + FOREIGN KEY (a,b) REFERENCES t2(x,y) + ); +---- +stmt 0 ok +==== fkey1-2.1 + + CREATE TABLE t4(a integer primary key); + CREATE TABLE t5(x references t4); + CREATE TABLE t6(x references t4); + CREATE TABLE t7(x references t4); + CREATE TABLE t8(x references t4); + CREATE TABLE t9(x references t4); + CREATE TABLE t10(x references t4); + DROP TABLE t7; + DROP TABLE t9; + DROP TABLE t5; + DROP TABLE t8; + DROP TABLE t6; + DROP TABLE t10; +---- +stmt 0 ok +stmt 44 ok +stmt 82 ok +stmt 120 ok +stmt 158 ok +stmt 196 ok +stmt 234 ok +stmt 273 err 1 -1 292 no such table: t7 +stmt 292 err 1 -1 311 no such table: t9 +stmt 311 err 1 -1 330 no such table: t5 +stmt 330 err 1 -1 349 no such table: t8 +stmt 349 err 1 -1 368 no such table: t6 +stmt 368 err 1 -1 388 no such table: t10 +==== fkey1-3.1 + + CREATE TABLE t5(a PRIMARY KEY, b, c); + CREATE TABLE t6( + d REFERENCES t5, + e REFERENCES t5(c) + ); + PRAGMA foreign_key_list(t6); +---- +stmt 0 ok +stmt 42 ok +stmt 118 ok +==== fkey1-3.2 + + CREATE TABLE t7(d, e, f, + FOREIGN KEY (d, e) REFERENCES t5(a, b) + ); + PRAGMA foreign_key_list(t7); +---- +stmt 0 ok +stmt 81 ok +==== fkey1-3.3 + + CREATE TABLE t8(d, e, f, + FOREIGN KEY (d, e) REFERENCES t5 ON DELETE CASCADE ON UPDATE SET NULL + ); + PRAGMA foreign_key_list(t8); +---- +stmt 0 ok +stmt 112 ok +==== fkey1-3.4 + + CREATE TABLE t9(d, e, f, + FOREIGN KEY (d, e) REFERENCES t5 ON DELETE CASCADE ON UPDATE SET DEFAULT + ); + PRAGMA foreign_key_list(t9); +---- +stmt 0 ok +stmt 115 ok +==== fkey1-4.0 + + PRAGMA foreign_keys=ON; + CREATE TABLE "xx1"("xx2" TEXT PRIMARY KEY, "xx3" TEXT); + INSERT INTO "xx1"("xx2","xx3") VALUES('abc','def'); + CREATE TABLE "xx4"("xx5" TEXT REFERENCES "xx1" ON DELETE CASCADE); + INSERT INTO "xx4"("xx5") VALUES('abc'); + INSERT INTO "xx1"("xx2","xx3") VALUES('uvw','xyz'); + SELECT 1, "xx5" FROM "xx4"; + DELETE FROM "xx1"; + SELECT 2, "xx5" FROM "xx4"; +---- +stmt 0 ok +stmt 26 ok +stmt 84 err 1 -1 138 no such table: xx1 +stmt 138 ok +stmt 207 err 1 -1 249 no such table: xx4 +stmt 249 err 1 -1 303 no such table: xx1 +stmt 303 err 1 -1 333 no such table: xx4 +stmt 333 err 1 -1 354 no such table: xx1 +stmt 354 err 1 -1 384 no such table: xx4 +==== fkey1-4.1 + + PRAGMA foreign_keys=ON; + CREATE TABLE """1"("""2" TEXT PRIMARY KEY, """3" TEXT); + INSERT INTO """1"("""2","""3") VALUES('abc','def'); + CREATE TABLE """4"("""5" TEXT REFERENCES """1" ON DELETE CASCADE); + INSERT INTO """4"("""5") VALUES('abc'); + INSERT INTO """1"("""2","""3") VALUES('uvw','xyz'); + SELECT 1, """5" FROM """4"; + DELETE FROM """1"; + SELECT 2, """5" FROM """4"; +---- +stmt 0 ok +stmt 26 ok +stmt 84 err 1 -1 138 no such table: "1 +stmt 138 ok +stmt 207 err 1 -1 249 no such table: "4 +stmt 249 err 1 -1 303 no such table: "1 +stmt 303 err 1 -1 333 no such table: "4 +stmt 333 err 1 -1 354 no such table: "1 +stmt 354 err 1 -1 384 no such table: "4 +==== fkey1-4.2 + + PRAGMA table_info="""1"; +---- +stmt 0 ok +==== fkey1-5.1 + + CREATE TABLE t11( + x INTEGER PRIMARY KEY, + parent REFERENCES t11 ON DELETE CASCADE + ); + INSERT INTO t11 VALUES (1, NULL), (2, 1), (3, 2); +---- +stmt 0 ok +stmt 97 err 1 -1 149 no such table: t11 +==== fkey1-5.2 + + INSERT OR REPLACE INTO t11 VALUES (2, 3); +---- +stmt 0 err 1 -1 44 no such table: t11 +==== fkey1-5.3 + + CREATE TABLE Foo ( + Id INTEGER PRIMARY KEY, + ParentId INTEGER REFERENCES Foo(Id) ON DELETE CASCADE, C1 + ); + INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (1, null, 'A'); + INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (2, 1, 'A-2-1'); + INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (3, 2, 'A-3-2'); + INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (4, 3, 'A-4-3'); +---- +stmt 0 ok +stmt 117 err 1 -1 187 no such table: Foo +stmt 187 err 1 -1 258 no such table: Foo +stmt 258 err 1 -1 329 no such table: Foo +stmt 329 err 1 -1 400 no such table: Foo +==== fkey1-5.4 + + INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (2, 3, 'A-2-3'); +---- +stmt 0 err 1 -1 71 no such table: Foo +==== 6.0 + + CREATE TABLE p1(x, y); + CREATE UNIQUE INDEX p1x ON p1(x) WHERE y<2; + INSERT INTO p1 VALUES(1, 1); + CREATE TABLE c1(a REFERENCES p1(x)); +---- +stmt 0 ok +stmt 25 err 1 -1 71 no such table: main.p1 +stmt 71 err 1 -1 102 no such table: p1 +stmt 102 ok +==== 6.1 + + INSERT INTO c1 VALUES(1); +---- +stmt 0 err 1 -1 28 no such table: c1 +==== 6.2 + + CREATE UNIQUE INDEX p1x2 ON p1(x); + INSERT INTO c1 VALUES(1); +---- +stmt 0 err 1 -1 37 no such table: main.p1 +stmt 37 err 1 -1 65 no such table: c1 +==== 7.1 + + PRAGMA foreign_keys=OFF; + CREATE TABLE t1(a,b,c,FOREIGN KEY(a,a,a,a,a,a,a,a,a,a,a,a,a,a) REFERENCES t0); + INSERT INTO t1 VALUES(1,2,3); + PRAGMA foreign_key_check; +---- +stmt 0 ok +stmt 27 ok +stmt 108 err 1 -1 140 no such table: t1 +stmt 140 ok +==== 7.2 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c AS(1),d, FOREIGN KEY(c,d,b,a,b,d,b,c) REFERENCES t0); + PRAGMA foreign_key_check; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 95 ok +==== 8.1 + + PRAGMA writable_schema=ON; + PRAGMA foreign_keys = ON; + CREATE TABLE sqlite_stat1 (tbl INTEGER PRIMARY KEY DESC, idx UNIQUE DEFAULT NULL) WITHOUT ROWID; + PRAGMA writable_schema=OFF; + CREATE TABLE sqlsim4(stat PRIMARY KEY);; + CREATE TABLE t1(sqlsim7 REFERENCES sqlite_stat1 ON DELETE CASCADE); + DROP table "sqlsim4"; +---- +stmt 0 ok +stmt 29 ok +stmt 57 ok +stmt 156 ok +stmt 186 ok +stmt 228 ok +stmt 229 ok +stmt 299 err 1 -1 323 no such table: sqlsim4 +==== 8.2 + + CREATE TABLE t1(a REFERENCES sqlite_stat1 ON DELETE CASCADE); + CREATE TABLE t2(a TEXT PRIMARY KEY); + PRAGMA writable_schema=ON; + CREATE TABLE sqlite_stat1(tbl INTEGER PRIMARY KEY DESC, idx UNIQUE DEFAULT NULL) WITHOUT ROWID; + UPDATE sqlite_schema SET name='sqlite_autoindex_sqlite_stat1_1' WHERE name='sqlite_autoindex_sqlite_stat1_2'; + PRAGMA writable_schema=RESET; +---- +stmt 0 ok +stmt 64 ok +stmt 103 ok +stmt 132 ok +stmt 230 ok +stmt 342 ok +==== 8.3 + + REINDEX; +---- +stmt 0 ok +==== 9.1 + + PRAGMA foreign_keys = ON; + CREATE TABLE """1"("""2", """3" PRIMARY KEY); + CREATE TABLE """4"("""5" REFERENCES """1" ON DELETE RESTRICT); + DELETE FROM """1"; +---- +stmt 0 ok +stmt 28 ok +stmt 76 ok +stmt 141 err 1 -1 162 no such table: "1 diff --git a/parser/testdata/fkey2.metadata.json b/parser/testdata/fkey2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fkey2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fkey2.test b/parser/testdata/fkey2.test new file mode 100644 index 0000000..7808af4 --- /dev/null +++ b/parser/testdata/fkey2.test @@ -0,0 +1,1245 @@ +==== fkey2-generated +PRAGMA foreign_key_check(t1) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== fkey2-generated.dup1 +PRAGMA foreign_key_check(t2) +---- +stmt 0 err 1 -1 29 no such table: t2 +==== fkey2-generated.dup2 +PRAGMA foreign_key_check(t3) +---- +stmt 0 err 1 -1 29 no such table: t3 +==== fkey2-generated.dup3 +PRAGMA foreign_key_check(t4) +---- +stmt 0 err 1 -1 29 no such table: t4 +==== fkey2-generated.dup4 +PRAGMA foreign_key_check(t7) +---- +stmt 0 err 1 -1 29 no such table: t7 +==== fkey2-generated.dup5 +PRAGMA foreign_key_check(t8) +---- +stmt 0 err 1 -1 29 no such table: t8 +==== fkey2-generated.dup6 +PRAGMA foreign_key_check(t1) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== fkey2-generated.dup7 +PRAGMA foreign_key_check(t2) +---- +stmt 0 err 1 -1 29 no such table: t2 +==== fkey2-generated.dup8 +PRAGMA foreign_key_check(t3) +---- +stmt 0 err 1 -1 29 no such table: t3 +==== fkey2-generated.dup9 +PRAGMA foreign_key_check(t4) +---- +stmt 0 err 1 -1 29 no such table: t4 +==== fkey2-generated.dup10 +PRAGMA foreign_key_check(t7) +---- +stmt 0 err 1 -1 29 no such table: t7 +==== fkey2-generated.dup11 +PRAGMA foreign_key_check(t8) +---- +stmt 0 err 1 -1 29 no such table: t8 +==== fkey2-generated.dup12 +PRAGMA foreign_key_check(t1) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== fkey2-generated.dup13 +PRAGMA foreign_key_check(t2) +---- +stmt 0 err 1 -1 29 no such table: t2 +==== fkey2-generated.dup14 +PRAGMA foreign_key_check(t3) +---- +stmt 0 err 1 -1 29 no such table: t3 +==== fkey2-generated.dup15 +PRAGMA foreign_key_check(t4) +---- +stmt 0 err 1 -1 29 no such table: t4 +==== fkey2-generated.dup16 +PRAGMA foreign_key_check(t7) +---- +stmt 0 err 1 -1 29 no such table: t7 +==== fkey2-generated.dup17 +PRAGMA foreign_key_check(t8) +---- +stmt 0 err 1 -1 29 no such table: t8 +==== fkey2-1.5.1 + + CREATE TABLE i(i INTEGER PRIMARY KEY); + CREATE TABLE j(j REFERENCES i); + INSERT INTO i VALUES(35); + INSERT INTO j VALUES('35.0'); + SELECT j, typeof(j) FROM j; +---- +stmt 0 ok +stmt 43 ok +stmt 79 err 1 -1 109 no such table: i +stmt 109 err 1 -1 143 no such table: j +stmt 143 err 1 -1 175 no such table: j +==== fkey2-1.5.2 + DELETE FROM i +---- +stmt 0 err 1 -1 15 no such table: i +==== fkey2-1.6.1 + + CREATE TABLE i(i INT UNIQUE); + CREATE TABLE j(j REFERENCES i(i)); + INSERT INTO i VALUES('35.0'); + INSERT INTO j VALUES('35.0'); + SELECT j, typeof(j) FROM j; + SELECT i, typeof(i) FROM i; +---- +stmt 0 ok +stmt 34 ok +stmt 73 err 1 -1 107 no such table: i +stmt 107 err 1 -1 141 no such table: j +stmt 141 err 1 -1 173 no such table: j +stmt 173 err 1 -1 205 no such table: i +==== fkey2-1.6.2 + DELETE FROM i +---- +stmt 0 err 1 -1 15 no such table: i +==== fkey2-3.1.1 + + CREATE TABLE ab(a PRIMARY KEY, b); + CREATE TABLE cd( + c PRIMARY KEY REFERENCES ab ON UPDATE CASCADE ON DELETE CASCADE, + d + ); + CREATE TABLE ef( + e REFERENCES cd ON UPDATE CASCADE, + f, CHECK (e!=5) + ); +---- +stmt 0 ok +stmt 39 ok +stmt 147 ok +==== fkey2-3.1.2 + + INSERT INTO ab VALUES(1, 'b'); + INSERT INTO cd VALUES(1, 'd'); + INSERT INTO ef VALUES(1, 'e'); +---- +stmt 0 err 1 -1 35 no such table: ab +stmt 35 err 1 -1 70 no such table: cd +stmt 70 err 1 -1 105 no such table: ef +==== fkey2-3.1.3 + UPDATE ab SET a = 5 +---- +stmt 0 err 1 -1 21 no such table: ab +==== fkey2-3.1.4 + SELECT * FROM ab +---- +stmt 0 err 1 -1 18 no such table: ab +==== fkey2-4.1 + + CREATE TABLE t1( + node PRIMARY KEY, + parent REFERENCES t1 ON DELETE CASCADE + ); + CREATE TABLE t2(node PRIMARY KEY, parent); + CREATE TRIGGER t2t AFTER DELETE ON t2 BEGIN + DELETE FROM t2 WHERE parent = old.node; + END; + INSERT INTO t1 VALUES(1, NULL); + INSERT INTO t1 VALUES(2, 1); + INSERT INTO t1 VALUES(3, 1); + INSERT INTO t1 VALUES(4, 2); + INSERT INTO t1 VALUES(5, 2); + INSERT INTO t1 VALUES(6, 3); + INSERT INTO t1 VALUES(7, 3); + INSERT INTO t2 SELECT * FROM t1; +---- +stmt 0 ok +stmt 98 ok +stmt 145 err 1 -1 193 no such table: main.t2 +stmt 248 err 1 -1 284 no such table: t1 +stmt 284 err 1 -1 317 no such table: t1 +stmt 317 err 1 -1 350 no such table: t1 +stmt 350 err 1 -1 383 no such table: t1 +stmt 383 err 1 -1 416 no such table: t1 +stmt 416 err 1 -1 449 no such table: t1 +stmt 449 err 1 -1 482 no such table: t1 +stmt 482 err 1 -1 519 no such table: t2 +==== fkey2-4.3 + + DELETE FROM t2 WHERE node = 1; + SELECT node FROM t2; + ROLLBACK; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 65 no such table: t2 +stmt 65 ok +==== fkey2-4.3.dup1 + + DELETE FROM t2 WHERE node = 1; + SELECT node FROM t2; + ROLLBACK; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 65 no such table: t2 +stmt 65 ok +==== fkey2-5.1 + + CREATE TABLE t1(a PRIMARY KEY, b); + CREATE TABLE t2(a PRIMARY KEY, b REFERENCES t1(a)); + INSERT INTO t1 VALUES('hello', 'world'); + INSERT INTO t2 VALUES('key', 'hello'); +---- +stmt 0 ok +stmt 41 ok +stmt 99 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 191 no such table: t2 +==== fkey2-5.5 + PRAGMA foreign_keys = on +---- +stmt 0 ok +==== fkey2-6.1 + + CREATE TABLE t1(a REFERENCES t2(c), b); + CREATE TABLE t2(c UNIQUE, b); + INSERT INTO t2 VALUES(1, 2); + INSERT INTO t1 VALUES(1, 2); + VACUUM; +---- +stmt 0 ok +stmt 46 ok +stmt 82 err 1 -1 117 no such table: t2 +stmt 117 err 1 -1 152 no such table: t1 +stmt 152 ok +==== fkey2-7.1 + + CREATE TABLE t1(a PRIMARY KEY, b); + CREATE TABLE t2(c INTEGER PRIMARY KEY REFERENCES t1, b); +---- +stmt 0 ok +stmt 39 ok +==== fkey2-7.2 + INSERT INTO t2 VALUES(1, 'A'); +---- +stmt 0 err 1 -1 31 no such table: t2 +==== fkey2-7.3 + + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(2, 3); + INSERT INTO t2 VALUES(1, 'A'); +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 102 no such table: t2 +==== fkey2-7.4 + UPDATE t2 SET c = 2 +---- +stmt 0 err 1 -1 21 no such table: t2 +==== fkey2-7.5 + UPDATE t2 SET c = 3 +---- +stmt 0 err 1 -1 21 no such table: t2 +==== fkey2-7.6 + DELETE FROM t1 WHERE a = 2 +---- +stmt 0 err 1 -1 28 no such table: t1 +==== fkey2-7.7 + DELETE FROM t1 WHERE a = 1 +---- +stmt 0 err 1 -1 28 no such table: t1 +==== fkey2-7.8 + UPDATE t1 SET a = 3 +---- +stmt 0 err 1 -1 21 no such table: t1 +==== fkey2-7.9 + UPDATE t2 SET rowid = 3 +---- +stmt 0 err 1 -1 25 no such table: t2 +==== fkey2-9.1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + CREATE TABLE t2( + c INTEGER PRIMARY KEY, + d INTEGER DEFAULT 1 REFERENCES t1 ON DELETE SET DEFAULT + ); + DELETE FROM t1; +---- +stmt 0 ok +stmt 47 ok +stmt 166 err 1 -1 186 no such table: t1 +==== fkey2-9.1.2 + + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t2 VALUES(1, 2); + SELECT * FROM t2; + DELETE FROM t1 WHERE a = 2; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 107 no such table: t2 +stmt 107 err 1 -1 129 no such table: t2 +stmt 129 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 183 no such table: t2 +==== fkey2-9.1.3 + + INSERT INTO t1 VALUES(2, 'two'); + UPDATE t2 SET d = 2; + DELETE FROM t1 WHERE a = 1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 62 no such table: t2 +stmt 62 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 116 no such table: t2 +==== fkey2-9.1.4 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== fkey2-9.1.5 + DELETE FROM t1 +---- +stmt 0 err 1 -1 16 no such table: t1 +==== fkey2-9.2.1 + + CREATE TABLE pp(a, b, c, PRIMARY KEY(b, c)); + CREATE TABLE cc(d DEFAULT 3, e DEFAULT 1, f DEFAULT 2, + FOREIGN KEY(f, d) REFERENCES pp + ON UPDATE SET DEFAULT + ON DELETE SET NULL + ); + INSERT INTO pp VALUES(1, 2, 3); + INSERT INTO pp VALUES(4, 5, 6); + INSERT INTO pp VALUES(7, 8, 9); +---- +stmt 0 ok +stmt 49 ok +stmt 214 err 1 -1 250 no such table: pp +stmt 250 err 1 -1 286 no such table: pp +stmt 286 err 1 -1 322 no such table: pp +==== fkey2-9.2.2 + + INSERT INTO cc VALUES(6, 'A', 5); + INSERT INTO cc VALUES(6, 'B', 5); + INSERT INTO cc VALUES(9, 'A', 8); + INSERT INTO cc VALUES(9, 'B', 8); + UPDATE pp SET b = 1 WHERE a = 7; + SELECT * FROM cc; +---- +stmt 0 err 1 -1 38 no such table: cc +stmt 38 err 1 -1 76 no such table: cc +stmt 76 err 1 -1 114 no such table: cc +stmt 114 err 1 -1 152 no such table: cc +stmt 152 err 1 -1 189 no such table: pp +stmt 189 err 1 -1 211 no such table: cc +==== fkey2-9.2.3 + + DELETE FROM pp WHERE a = 4; + SELECT * FROM cc; +---- +stmt 0 err 1 -1 32 no such table: pp +stmt 32 err 1 -1 54 no such table: cc +==== fkey2-9.3.0 + + CREATE TABLE t3(x PRIMARY KEY REFERENCES t3 ON DELETE SET NULL); + INSERT INTO t3(x) VALUES(12345); + DROP TABLE t3; +---- +stmt 0 ok +stmt 67 err 1 -1 102 no such table: t3 +stmt 102 err 1 -1 119 no such table: t3 +==== fkey2-11.1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, rowid, _rowid_, oid); + CREATE TABLE t2(c, d, FOREIGN KEY(c) REFERENCES t1(a) ON UPDATE CASCADE); + + INSERT INTO t1 VALUES(10, 100, 'abc', 'def', 'ghi'); + INSERT INTO t2 VALUES(10, 100); + UPDATE t1 SET a = 15; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 68 ok +stmt 146 err 1 -1 204 no such table: t1 +stmt 204 err 1 -1 240 no such table: t2 +stmt 240 err 1 -1 266 no such table: t1 +stmt 266 err 1 -1 288 no such table: t2 +==== fkey2-12.1.1 + + CREATE TABLE t1(a, b PRIMARY KEY); + CREATE TABLE t2( + x REFERENCES t1 ON UPDATE RESTRICT DEFERRABLE INITIALLY DEFERRED + ); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(3, 'three'); +---- +stmt 0 ok +stmt 39 ok +stmt 139 err 1 -1 176 no such table: t1 +stmt 176 err 1 -1 213 no such table: t1 +stmt 213 err 1 -1 252 no such table: t1 +==== fkey2-12.1.7 + + INSERT INTO t1 VALUES(2, 'two'); + COMMIT; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 ok +==== fkey2-12.2.1 + + CREATE TABLE t1(x COLLATE NOCASE PRIMARY KEY); + CREATE TRIGGER tt1 AFTER DELETE ON t1 + WHEN EXISTS ( SELECT 1 FROM t2 WHERE old.x = y ) + BEGIN + INSERT INTO t1 VALUES(old.x); + END; + CREATE TABLE t2(y REFERENCES t1); + INSERT INTO t1 VALUES('A'); + INSERT INTO t1 VALUES('B'); + INSERT INTO t2 VALUES('a'); + INSERT INTO t2 VALUES('b'); + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 51 err 1 -1 159 no such table: main.t1 +stmt 204 ok +stmt 242 err 1 -1 274 no such table: t1 +stmt 274 err 1 -1 306 no such table: t1 +stmt 306 err 1 -1 338 no such table: t2 +stmt 338 err 1 -1 370 no such table: t2 +stmt 370 err 1 -1 393 no such table: t1 +stmt 393 err 1 -1 415 no such table: t2 +==== fkey2-12.2.4 + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t1 +stmt 22 err 1 -1 44 no such table: t2 +==== fkey2-12.3.1 + + CREATE TABLE up( + c00, c01, c02, c03, c04, c05, c06, c07, c08, c09, + c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, + c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, + c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, + PRIMARY KEY(c34, c35) + ); + CREATE TABLE down( + c00, c01, c02, c03, c04, c05, c06, c07, c08, c09, + c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, + c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, + c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, + FOREIGN KEY(c39, c38) REFERENCES up ON UPDATE CASCADE + ); +---- +stmt 0 ok +stmt 280 ok +==== fkey2-12.3.2 + + INSERT INTO up(c34, c35) VALUES('yes', 'no'); + INSERT INTO down(c39, c38) VALUES('yes', 'no'); + UPDATE up SET c34 = 'possibly'; + SELECT c38, c39 FROM down; + DELETE FROM down; +---- +stmt 0 err 1 -1 50 no such table: up +stmt 50 err 1 -1 102 no such table: down +stmt 102 err 1 -1 138 no such table: up +stmt 138 err 1 -1 169 no such table: down +stmt 169 err 1 -1 191 no such table: down +==== fkey2-12.3.3 + INSERT INTO down(c39, c38) VALUES('yes', 'no') +---- +stmt 0 err 1 -1 48 no such table: down +==== fkey2-12.3.5 + + DELETE FROM up WHERE c34 = 'possibly'; + SELECT c34, c35 FROM up; + SELECT c39, c38 FROM down; +---- +stmt 0 err 1 -1 44 no such table: up +stmt 44 err 1 -1 73 no such table: up +stmt 73 err 1 -1 104 no such table: down +==== fkey2-13.1.1 + + CREATE TABLE pp(a UNIQUE, b, c, PRIMARY KEY(b, c)); + CREATE TABLE cc(d, e, f UNIQUE, FOREIGN KEY(d, e) REFERENCES pp); + INSERT INTO pp VALUES(1, 2, 3); + INSERT INTO cc VALUES(2, 3, 1); +---- +stmt 0 ok +stmt 56 ok +stmt 126 err 1 -1 162 no such table: pp +stmt 162 err 1 -1 198 no such table: cc +==== fkey2-generated.dup18 + + SELECT * FROM pp; + SELECT * FROM cc; +---- +stmt 0 err 1 -1 24 no such table: pp +stmt 24 err 1 -1 48 no such table: cc +==== fkey2-generated.dup19 + + COMMIT; + SELECT * FROM pp; + SELECT * FROM cc; +---- +stmt 0 ok +stmt 14 err 1 -1 38 no such table: pp +stmt 38 err 1 -1 62 no such table: cc +==== fkey2-13.1.3 + + REPLACE INTO pp(rowid, a, b, c) VALUES(1, 2, 2, 3); + SELECT rowid, * FROM pp; + SELECT * FROM cc; +---- +stmt 0 err 1 -1 57 no such table: pp +stmt 57 err 1 -1 86 no such table: pp +stmt 86 err 1 -1 108 no such table: cc +==== fkey2-13.1.4 + + REPLACE INTO pp(rowid, a, b, c) VALUES(2, 2, 2, 3); + SELECT rowid, * FROM pp; + SELECT * FROM cc; +---- +stmt 0 err 1 -1 57 no such table: pp +stmt 57 err 1 -1 86 no such table: pp +stmt 86 err 1 -1 108 no such table: cc +==== fkey2-14.1.2 + ALTER TABLE t2 ADD COLUMN d DEFAULT NULL REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== fkey2-14.1.3 + ALTER TABLE t2 ADD COLUMN e REFERENCES t1 DEFAULT NULL +---- +stmt 0 err 1 -1 39 no such table: t2 +==== fkey2-14.1.4 + ALTER TABLE t2 ADD COLUMN f REFERENCES t1 DEFAULT 'text' +---- +stmt 0 err 1 -1 39 no such table: t2 +==== fkey2-14.1.5 + ALTER TABLE t2 ADD COLUMN g DEFAULT CURRENT_TIME REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== fkey2-14.1.6 + + PRAGMA foreign_keys = off; + ALTER TABLE t2 ADD COLUMN h DEFAULT 'text' REFERENCES t1; + PRAGMA foreign_keys = on; + SELECT sql FROM sqlite_master WHERE name='t2'; +---- +stmt 0 ok +stmt 34 err 1 -1 76 no such table: t2 +stmt 98 ok +stmt 130 ok +==== fkey2-14.2.2.3 + INSERT INTO t3 VALUES(1, 2, 3) +---- +stmt 0 err 1 -1 32 no such table: t3 +==== fkey2-14.2.2.4 + INSERT INTO t4 VALUES(1, NULL) +---- +stmt 0 err 1 -1 32 no such table: t4 +==== fkey2-14.2.2.5 + UPDATE t4 SET b = 5 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== fkey2-14.2.2.6 + UPDATE t4 SET b = 1 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== fkey2-14.2.2.7 + INSERT INTO t3 VALUES(1, NULL, 1) +---- +stmt 0 err 1 -1 35 no such table: t3 +==== fkey2-14.1tmp.2 + ALTER TABLE t2 ADD COLUMN d DEFAULT NULL REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== fkey2-14.1tmp.3 + ALTER TABLE t2 ADD COLUMN e REFERENCES t1 DEFAULT NULL +---- +stmt 0 err 1 -1 39 no such table: t2 +==== fkey2-14.1tmp.4 + ALTER TABLE t2 ADD COLUMN f REFERENCES t1 DEFAULT 'text' +---- +stmt 0 err 1 -1 39 no such table: t2 +==== fkey2-14.1tmp.5 + ALTER TABLE t2 ADD COLUMN g DEFAULT CURRENT_TIME REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== fkey2-14.1tmp.6 + + PRAGMA foreign_keys = off; + ALTER TABLE t2 ADD COLUMN h DEFAULT 'text' REFERENCES t1; + PRAGMA foreign_keys = on; + SELECT sql FROM temp.sqlite_master WHERE name='t2'; +---- +stmt 0 ok +stmt 34 err 1 -1 76 no such table: t2 +stmt 98 ok +stmt 130 ok +==== fkey2-14.2tmp.2.3 + INSERT INTO t3 VALUES(1, 2, 3) +---- +stmt 0 err 1 -1 32 no such table: t3 +==== fkey2-14.2tmp.2.4 + INSERT INTO t4 VALUES(1, NULL) +---- +stmt 0 err 1 -1 32 no such table: t4 +==== fkey2-14.2tmp.2.5 + UPDATE t4 SET b = 5 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== fkey2-14.2tmp.2.6 + UPDATE t4 SET b = 1 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== fkey2-14.2tmp.2.7 + INSERT INTO t3 VALUES(1, NULL, 1) +---- +stmt 0 err 1 -1 35 no such table: t3 +==== fkey2-14.1aux.2 + ALTER TABLE t2 ADD COLUMN d DEFAULT NULL REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== fkey2-14.1aux.3 + ALTER TABLE t2 ADD COLUMN e REFERENCES t1 DEFAULT NULL +---- +stmt 0 err 1 -1 39 no such table: t2 +==== fkey2-14.1aux.4 + ALTER TABLE t2 ADD COLUMN f REFERENCES t1 DEFAULT 'text' +---- +stmt 0 err 1 -1 39 no such table: t2 +==== fkey2-14.1aux.5 + ALTER TABLE t2 ADD COLUMN g DEFAULT CURRENT_TIME REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== fkey2-14.1aux.6 + + PRAGMA foreign_keys = off; + ALTER TABLE t2 ADD COLUMN h DEFAULT 'text' REFERENCES t1; + PRAGMA foreign_keys = on; + SELECT sql FROM aux.sqlite_master WHERE name='t2'; +---- +stmt 0 ok +stmt 34 err 1 -1 76 no such table: t2 +stmt 98 ok +stmt 130 err 1 -1 187 no such table: aux.sqlite_master +==== fkey2-14.2aux.2.3 + INSERT INTO t3 VALUES(1, 2, 3) +---- +stmt 0 err 1 -1 32 no such table: t3 +==== fkey2-14.2aux.2.4 + INSERT INTO t4 VALUES(1, NULL) +---- +stmt 0 err 1 -1 32 no such table: t4 +==== fkey2-14.2aux.2.5 + UPDATE t4 SET b = 5 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== fkey2-14.2aux.2.6 + UPDATE t4 SET b = 1 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== fkey2-14.2aux.2.7 + INSERT INTO t3 VALUES(1, NULL, 1) +---- +stmt 0 err 1 -1 35 no such table: t3 +==== fkey-2.14.3.2 + + CREATE TABLE t1(a PRIMARY KEY, b); + INSERT INTO t1 VALUES('a', 1); + CREATE TABLE t2(x REFERENCES t1); + INSERT INTO t2 VALUES('a'); +---- +stmt 0 ok +stmt 39 err 1 -1 74 no such table: t1 +stmt 74 ok +stmt 112 err 1 -1 144 no such table: t2 +==== fkey-2.14.3.3 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== fkey-2.14.3.4 + + DELETE FROM t2; + DROP TABLE t1; +---- +stmt 0 err 1 -1 20 no such table: t2 +stmt 20 err 1 -1 39 no such table: t1 +==== fkey-2.14.3.4.dup1 + INSERT INTO t2 VALUES('x') +---- +stmt 0 err 1 -1 28 no such table: t2 +==== fkey-2.14.3.6 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== fkey-2.14.3.7 + + DROP TABLE t2; + DROP TABLE t1; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 err 1 -1 38 no such table: t1 +==== fkey-2.14.3.9 + DROP TABLE cc +---- +stmt 0 err 1 -1 15 no such table: cc +==== fkey-2.14.3.11 + + BEGIN; + DROP TABLE cc; + DROP TABLE pp; + COMMIT; +---- +stmt 0 ok +stmt 12 err 1 -1 33 no such table: cc +stmt 33 err 1 -1 54 no such table: pp +stmt 54 ok +==== fkey-2.14.3.12 + + CREATE TABLE b1(a, b); + CREATE TABLE b2(a, b REFERENCES b1); + DROP TABLE b1; +---- +stmt 0 ok +stmt 27 ok +stmt 68 err 1 -1 87 no such table: b1 +==== fkey-2.14.3.13 + + CREATE TABLE b3(a, b REFERENCES b2 DEFERRABLE INITIALLY DEFERRED); + DROP TABLE b2; +---- +stmt 0 ok +stmt 71 err 1 -1 90 no such table: b2 +==== fkey-2.14.4.1 + + CREATE TABLE t1(x REFERENCES v); + CREATE VIEW v AS SELECT * FROM t1; +---- +stmt 0 ok +stmt 37 ok +==== fkey-2.14.4.2 + + DROP VIEW v; +---- +stmt 0 err 1 -1 17 no such view: v +==== fkey-2.14.4.3 + CREATE VIRTUAL TABLE v USING echo(t1) +---- +stmt 0 ok +==== fkey-2.14.4.2.dup1 + + DROP TABLE v; +---- +stmt 0 err 1 -1 20 no such table: v +==== fkey2-15.1.1 + + CREATE TABLE pp(a PRIMARY KEY, b); + CREATE TABLE cc(x, y REFERENCES pp DEFERRABLE INITIALLY DEFERRED); + INSERT INTO pp VALUES(1, 'one'); + INSERT INTO pp VALUES(2, 'two'); + INSERT INTO cc VALUES('neung', 1); + INSERT INTO cc VALUES('song', 2); +---- +stmt 0 ok +stmt 39 ok +stmt 110 err 1 -1 147 no such table: pp +stmt 147 err 1 -1 184 no such table: pp +stmt 184 err 1 -1 223 no such table: cc +stmt 223 err 1 -1 261 no such table: cc +==== fkey2-generated.dup20 + UPDATE self SET a = 14, b = 14 +---- +stmt 0 err 1 -1 32 no such table: self +==== fkey2-generated.dup21 + UPDATE self SET b = 15 +---- +stmt 0 err 1 -1 24 no such table: self +==== fkey2-generated.dup22 + UPDATE self SET a = 15 +---- +stmt 0 err 1 -1 24 no such table: self +==== fkey2-generated.dup23 + UPDATE self SET a = 15, b = 16 +---- +stmt 0 err 1 -1 32 no such table: self +==== fkey2-generated.dup24 + UPDATE self SET a = 17, b = 17 +---- +stmt 0 err 1 -1 32 no such table: self +==== fkey2-generated.dup25 + DELETE FROM self +---- +stmt 0 err 1 -1 18 no such table: self +==== fkey2-generated.dup26 + INSERT INTO self VALUES(20, 21) +---- +stmt 0 err 1 -1 33 no such table: self +==== fkey2-17.1.5 + + INSERT INTO one VALUES(2, 3, 4); + INSERT INTO one VALUES(3, 4, 5); + INSERT INTO two VALUES(1, 2, 3); + INSERT INTO two VALUES(2, 3, 4); + INSERT INTO two VALUES(3, 4, 5); +---- +stmt 0 err 1 -1 37 no such table: one +stmt 37 err 1 -1 74 no such table: one +stmt 74 err 1 -1 111 no such table: two +stmt 111 err 1 -1 148 no such table: two +stmt 148 err 1 -1 185 no such table: two +==== fkey2-17.1.6 + + BEGIN; + INSERT INTO one VALUES(0, 0, 0); + UPDATE two SET e=e+1, f=f+1; +---- +stmt 0 ok +stmt 11 err 1 -1 50 no such table: one +stmt 50 err 1 -1 85 no such table: two +==== fkey2-17.1.7 + SELECT * FROM one +---- +stmt 0 err 1 -1 19 no such table: one +==== fkey2-17.1.8 + SELECT * FROM two +---- +stmt 0 err 1 -1 19 no such table: two +==== fkey2-17.1.10 + + CREATE TABLE three( + g, h, i, + FOREIGN KEY(h, i) REFERENCES one(b, c) DEFERRABLE INITIALLY DEFERRED + ); +---- +stmt 0 ok +==== fkey2-17.2.1 + + CREATE TABLE high("a'b!" PRIMARY KEY, b); + CREATE TABLE low( + c, + "d&6" REFERENCES high ON UPDATE CASCADE ON DELETE CASCADE + ); +---- +stmt 0 ok +stmt 46 ok +==== fkey2-17.2.3 + UPDATE high SET "a'b!" = 'c' +---- +stmt 0 err 1 -1 30 no such table: high +==== fkey2-17.2.6 + SELECT * FROM high ; SELECT * FROM low +---- +stmt 0 err 1 -1 21 no such table: high +stmt 21 err 1 -1 40 no such table: low +==== fkey2-17.2.7 + DELETE FROM high +---- +stmt 0 err 1 -1 18 no such table: high +==== fkey2-17.2.10 + SELECT * FROM high ; SELECT * FROM low +---- +stmt 0 err 1 -1 21 no such table: high +stmt 21 err 1 -1 40 no such table: low +==== fkey2-18.1 + + CREATE TABLE long(a, b PRIMARY KEY, c); + CREATE TABLE short(d, e, f REFERENCES long); + CREATE TABLE mid(g, h, i REFERENCES long DEFERRABLE INITIALLY DEFERRED); +---- +stmt 0 ok +stmt 46 ok +stmt 97 ok +==== fkey2-18.6 +SELECT * FROM cross +---- +stmt 0 err 1 -1 20 no such table: cross +==== fkey2-18.8 + INSERT INTO short VALUES(1, 3, 2) +---- +stmt 0 err 1 -1 35 no such table: short +==== fkey2-18.9 + INSERT INTO short VALUES(1, 3, NULL) +---- +stmt 0 err 1 -1 38 no such table: short +==== fkey2-18.10 + SELECT * FROM short +---- +stmt 0 err 1 -1 21 no such table: short +==== fkey2-18.11 + UPDATE short SET f = 2 WHERE f IS NULL +---- +stmt 0 err 1 -1 40 no such table: short +==== fkey2-19.1 + + CREATE TABLE main(id INTEGER PRIMARY KEY); + CREATE TABLE sub(id INT REFERENCES main(id)); + INSERT INTO main VALUES(1); + INSERT INTO main VALUES(2); + INSERT INTO sub VALUES(2); +---- +stmt 0 ok +stmt 47 ok +stmt 97 err 1 -1 129 no such table: main +stmt 129 err 1 -1 161 no such table: main +stmt 161 err 1 -1 192 no such table: sub +==== fkey2-20.1 + + CREATE TABLE pp(a PRIMARY KEY, b); + CREATE TABLE cc(c PRIMARY KEY, d REFERENCES pp); +---- +stmt 0 ok +stmt 39 ok +==== fkey2-generated.dup27 + SELECT * FROM cc +---- +stmt 0 err 1 -1 18 no such table: cc +==== fkey2-generated.dup28 + COMMIT ; SELECT * FROM cc +---- +stmt 0 ok +stmt 9 err 1 -1 27 no such table: cc +==== fkey2-generated.dup29 + DELETE FROM cc ; DELETE FROM pp +---- +stmt 0 err 1 -1 17 no such table: cc +stmt 17 err 1 -1 33 no such table: pp +==== fkey2-generated.dup30 + + INSERT INTO pp VALUES(2, 'two'); + INSERT INTO cc VALUES(1, 2); +---- +stmt 0 err 1 -1 39 no such table: pp +stmt 39 err 1 -1 74 no such table: cc +==== fkey2-generated.dup31 + SELECT * FROM pp +---- +stmt 0 err 1 -1 18 no such table: pp +==== fkey2-generated.dup32 + SELECT * FROM cc +---- +stmt 0 err 1 -1 18 no such table: cc +==== fkey2-generated.dup33 + COMMIT ; SELECT * FROM pp +---- +stmt 0 ok +stmt 9 err 1 -1 27 no such table: pp +==== fkey2-generated.dup34 + COMMIT ; SELECT * FROM cc +---- +stmt 0 ok +stmt 9 err 1 -1 27 no such table: cc +==== fkey2-generated.dup35 + DELETE FROM cc ; DELETE FROM pp +---- +stmt 0 err 1 -1 17 no such table: cc +stmt 17 err 1 -1 33 no such table: pp +==== fkey2-genfkey.1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(b, c)); + CREATE TABLE t2(e REFERENCES t1, f); + CREATE TABLE t3(g, h, i, FOREIGN KEY (h, i) REFERENCES t1(b, c)); +---- +stmt 0 ok +stmt 64 ok +stmt 105 ok +==== fkey2-genfkey.1.2 + INSERT INTO t2 VALUES(1, 2) +---- +stmt 0 err 1 -1 29 no such table: t2 +==== fkey2-genfkey.1.3 + + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t2 VALUES(1, 2); +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 69 no such table: t2 +==== fkey2-genfkey.1.4 + INSERT INTO t2 VALUES(NULL, 3) +---- +stmt 0 err 1 -1 32 no such table: t2 +==== fkey2-genfkey.1.5 + UPDATE t2 SET e = 5 WHERE e IS NULL +---- +stmt 0 err 1 -1 37 no such table: t2 +==== fkey2-genfkey.1.6 + UPDATE t2 SET e = 1 WHERE e IS NULL +---- +stmt 0 err 1 -1 37 no such table: t2 +==== fkey2-genfkey.1.7 + UPDATE t2 SET e = NULL WHERE f = 3 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== fkey2-genfkey.1.8 + UPDATE t1 SET a = 10 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== fkey2-genfkey.1.9 + UPDATE t1 SET a = NULL +---- +stmt 0 err 1 -1 24 no such table: t1 +==== fkey2-genfkey.1.10 + DELETE FROM t1 +---- +stmt 0 err 1 -1 16 no such table: t1 +==== fkey2-genfkey.1.11 + UPDATE t2 SET e = NULL +---- +stmt 0 err 1 -1 24 no such table: t2 +==== fkey2-genfkey.1.12 + + UPDATE t1 SET a = 10; + DELETE FROM t1; + DELETE FROM t2; +---- +stmt 0 err 1 -1 27 no such table: t1 +stmt 27 err 1 -1 47 no such table: t1 +stmt 47 err 1 -1 67 no such table: t2 +==== fkey2-genfkey.1.13 + + INSERT INTO t3 VALUES(1, NULL, NULL); + INSERT INTO t3 VALUES(1, 2, NULL); + INSERT INTO t3 VALUES(1, NULL, 3); +---- +stmt 0 err 1 -1 42 no such table: t3 +stmt 42 err 1 -1 81 no such table: t3 +stmt 81 err 1 -1 120 no such table: t3 +==== fkey2-genfkey.1.14 + INSERT INTO t3 VALUES(3, 1, 4) +---- +stmt 0 err 1 -1 32 no such table: t3 +==== fkey2-genfkey.1.15 + + INSERT INTO t1 VALUES(1, 1, 4); + INSERT INTO t3 VALUES(3, 1, 4); +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 73 no such table: t3 +==== fkey2-genfkey.1.16 + DELETE FROM t1 +---- +stmt 0 err 1 -1 16 no such table: t1 +==== fkey2-genfkey.1.17 + UPDATE t1 SET b = 10 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== fkey2-genfkey.1.18 + UPDATE t1 SET a = 10 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== fkey2-genfkey.1.19 + UPDATE t3 SET h = 'hello' WHERE i = 3 +---- +stmt 0 err 1 -1 39 no such table: t3 +==== fkey2-genfkey.2.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(b, c)); + CREATE TABLE t2(e REFERENCES t1 ON UPDATE CASCADE ON DELETE CASCADE, f); + CREATE TABLE t3(g, h, i, + FOREIGN KEY (h, i) + REFERENCES t1(b, c) ON UPDATE CASCADE ON DELETE CASCADE + ); +---- +stmt 0 ok +stmt 64 ok +stmt 141 ok +==== fkey2-genfkey.2.2 + + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t2 VALUES(1, 'one'); + INSERT INTO t2 VALUES(4, 'four'); +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 109 no such table: t2 +stmt 109 err 1 -1 147 no such table: t2 +==== fkey2-genfkey.2.3 + + UPDATE t1 SET a = 2 WHERE a = 1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 59 no such table: t2 +==== fkey2-genfkey.2.4 + + DELETE FROM t1 WHERE a = 4; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 54 no such table: t2 +==== fkey2-genfkey.2.5 + + INSERT INTO t3 VALUES('hello', 2, 3); + UPDATE t1 SET c = 2; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 42 no such table: t3 +stmt 42 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 89 no such table: t3 +==== fkey2-genfkey.2.6 + + DELETE FROM t1; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 42 no such table: t3 +==== fkey2-genfkey.3.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(c, b)); + CREATE TABLE t2(e REFERENCES t1 ON UPDATE SET NULL ON DELETE SET NULL, f); + CREATE TABLE t3(g, h, i, + FOREIGN KEY (h, i) + REFERENCES t1(b, c) ON UPDATE SET NULL ON DELETE SET NULL + ); +---- +stmt 0 ok +stmt 64 ok +stmt 143 ok +==== fkey2-genfkey.3.2 + + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t2 VALUES(1, 'one'); + INSERT INTO t2 VALUES(4, 'four'); +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 109 no such table: t2 +stmt 109 err 1 -1 147 no such table: t2 +==== fkey2-genfkey.3.3 + + UPDATE t1 SET a = 2 WHERE a = 1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 59 no such table: t2 +==== fkey2-genfkey.3.4 + + DELETE FROM t1 WHERE a = 4; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 54 no such table: t2 +==== fkey2-genfkey.3.5 + + INSERT INTO t3 VALUES('hello', 2, 3); + UPDATE t1 SET c = 2; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 42 no such table: t3 +stmt 42 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 89 no such table: t3 +==== fkey2-genfkey.3.6 + + UPDATE t3 SET h = 2, i = 2; + DELETE FROM t1; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 32 no such table: t3 +stmt 32 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 74 no such table: t3 +==== fkey2-dd08e5.1.1 + + PRAGMA foreign_keys=ON; + CREATE TABLE tdd08(a INTEGER PRIMARY KEY, b); + CREATE UNIQUE INDEX idd08 ON tdd08(a,b); + INSERT INTO tdd08 VALUES(200,300); + + CREATE TABLE tdd08_b(w,x,y, FOREIGN KEY(x,y) REFERENCES tdd08(a,b)); + INSERT INTO tdd08_b VALUES(100,200,300); +---- +stmt 0 ok +stmt 28 ok +stmt 78 err 1 -1 123 no such table: main.tdd08 +stmt 123 err 1 -1 162 no such table: tdd08 +stmt 162 ok +stmt 236 err 1 -1 281 no such table: tdd08_b +==== fkey2-dd08e5.1.2 + + DELETE FROM tdd08; +---- +stmt 0 err 1 -1 23 no such table: tdd08 +==== fkey2-dd08e5.1.3 + + SELECT * FROM tdd08; +---- +stmt 0 err 1 -1 25 no such table: tdd08 +==== fkey2-dd08e5.1.4 + + INSERT INTO tdd08_b VALUES(400,500,300); +---- +stmt 0 err 1 -1 45 no such table: tdd08_b +==== fkey2-dd08e5.1.5 + + UPDATE tdd08_b SET x=x+1; +---- +stmt 0 err 1 -1 30 no such table: tdd08_b +==== fkey2-dd08e5.1.6 + + UPDATE tdd08 SET a=a+1; +---- +stmt 0 err 1 -1 28 no such table: tdd08 +==== fkey2-ce7c13.1.1 + + CREATE TABLE tce71(a INTEGER PRIMARY KEY, b); + CREATE UNIQUE INDEX ice71 ON tce71(a,b); + INSERT INTO tce71 VALUES(100,200); + CREATE TABLE tce72(w, x, y, FOREIGN KEY(x,y) REFERENCES tce71(a,b)); + INSERT INTO tce72 VALUES(300,100,200); + UPDATE tce71 set b = 200 where a = 100; + SELECT * FROM tce71, tce72; +---- +stmt 0 ok +stmt 50 err 1 -1 95 no such table: main.tce71 +stmt 95 err 1 -1 134 no such table: tce71 +stmt 134 ok +stmt 207 err 1 -1 250 no such table: tce72 +stmt 250 err 1 -1 294 no such table: tce71 +stmt 294 err 1 -1 326 no such table: tce71 +==== fkey2-ce7c13.1.2 + + UPDATE tce71 set b = 201 where a = 100; +---- +stmt 0 err 1 -1 44 no such table: tce71 +==== fkey2-ce7c13.1.3 + + UPDATE tce71 set a = 101 where a = 100; +---- +stmt 0 err 1 -1 44 no such table: tce71 +==== fkey2-ce7c13.1.4 + + CREATE TABLE tce73(a INTEGER PRIMARY KEY, b, UNIQUE(a,b)); + INSERT INTO tce73 VALUES(100,200); + CREATE TABLE tce74(w, x, y, FOREIGN KEY(x,y) REFERENCES tce73(a,b)); + INSERT INTO tce74 VALUES(300,100,200); + UPDATE tce73 set b = 200 where a = 100; + SELECT * FROM tce73, tce74; +---- +stmt 0 ok +stmt 63 err 1 -1 102 no such table: tce73 +stmt 102 ok +stmt 175 err 1 -1 218 no such table: tce74 +stmt 218 err 1 -1 262 no such table: tce73 +stmt 262 err 1 -1 294 no such table: tce73 +==== fkey2-ce7c13.1.5 + + UPDATE tce73 set b = 201 where a = 100; +---- +stmt 0 err 1 -1 44 no such table: tce73 +==== fkey2-ce7c13.1.6 + + UPDATE tce73 set a = 101 where a = 100; +---- +stmt 0 err 1 -1 44 no such table: tce73 diff --git a/parser/testdata/fkey3.metadata.json b/parser/testdata/fkey3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fkey3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fkey3.test b/parser/testdata/fkey3.test new file mode 100644 index 0000000..39e87e0 --- /dev/null +++ b/parser/testdata/fkey3.test @@ -0,0 +1,202 @@ +==== fkey3-1.1 + + PRAGMA foreign_keys=ON; + CREATE TABLE t1(x INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(100); + INSERT INTO t1 VALUES(101); + CREATE TABLE t2(y INTEGER REFERENCES t1 (x)); + INSERT INTO t2 VALUES(100); + INSERT INTO t2 VALUES(101); + SELECT 1, x FROM t1; + SELECT 2, y FROM t2; +---- +stmt 0 ok +stmt 28 ok +stmt 72 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 136 no such table: t1 +stmt 136 ok +stmt 186 err 1 -1 218 no such table: t2 +stmt 218 err 1 -1 250 no such table: t2 +stmt 250 err 1 -1 275 no such table: t1 +stmt 275 err 1 -1 300 no such table: t2 +==== fkey3-1.2 + + DELETE FROM t1 WHERE x=100; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== fkey3-1.3 + + DROP TABLE t1; +---- +stmt 0 err 1 -1 19 no such table: t1 +==== fkey3-1.4 + + DROP TABLE t2; +---- +stmt 0 err 1 -1 19 no such table: t2 +==== fkey3-1.5 + + DROP TABLE t1; +---- +stmt 0 err 1 -1 19 no such table: t1 +==== 3.1.1 + + CREATE TABLE t3(a, b, c, d, + UNIQUE(a, b), + FOREIGN KEY(c, d) REFERENCES t3(a, b) + ); + INSERT INTO t3 VALUES(1, 2, 1, 2); +---- +stmt 0 ok +stmt 96 err 1 -1 133 no such table: t3 +==== 3.1.2 + + INSERT INTO t3 VALUES(NULL, 2, 5, 2); +---- +stmt 0 err 1 -1 40 no such table: t3 +==== 3.1.3 + + INSERT INTO t3 VALUES(NULL, 3, 5, 2); +---- +stmt 0 err 1 -1 40 no such table: t3 +==== 3.2.1 + + CREATE TABLE t4(a UNIQUE, b REFERENCES t4(a)); +---- +stmt 0 ok +==== 3.2.2 + + INSERT INTO t4 VALUES(NULL, 1); +---- +stmt 0 err 1 -1 34 no such table: t4 +==== 3.3.1 + + CREATE TABLE t5(a INTEGER PRIMARY KEY, b REFERENCES t5(a)); + INSERT INTO t5 VALUES(NULL, 1); +---- +stmt 0 ok +stmt 62 err 1 -1 96 no such table: t5 +==== 3.3.2 + + INSERT INTO t5 VALUES(NULL, 3); +---- +stmt 0 err 1 -1 34 no such table: t5 +==== 3.4.1 + + CREATE TABLE t6(a INTEGER PRIMARY KEY, b, c, d, + FOREIGN KEY(c, d) REFERENCES t6(a, b) + ); + CREATE UNIQUE INDEX t6i ON t6(b, a); +---- +stmt 0 ok +stmt 97 err 1 -1 136 no such table: main.t6 +==== 3.4.2 + INSERT INTO t6 VALUES(NULL, 'a', 1, 'a'); +---- +stmt 0 err 1 -1 42 no such table: t6 +==== 3.4.3 + INSERT INTO t6 VALUES(2, 'a', 2, 'a'); +---- +stmt 0 err 1 -1 39 no such table: t6 +==== 3.4.4 + INSERT INTO t6 VALUES(NULL, 'a', 1, 'a'); +---- +stmt 0 err 1 -1 42 no such table: t6 +==== 3.4.5 + INSERT INTO t6 VALUES(5, 'a', 2, 'a'); +---- +stmt 0 err 1 -1 39 no such table: t6 +==== 3.4.6 + + INSERT INTO t6 VALUES(NULL, 'a', 65, 'a'); +---- +stmt 0 err 1 -1 46 no such table: t6 +==== 3.4.7 + + INSERT INTO t6 VALUES(100, 'one', 100, 'one'); + DELETE FROM t6 WHERE a = 100; +---- +stmt 0 err 1 -1 49 no such table: t6 +stmt 49 err 1 -1 81 no such table: t6 +==== 3.4.8 + + INSERT INTO t6 VALUES(100, 'one', 100, 'one'); + UPDATE t6 SET c = 1, d = 'a' WHERE a = 100; + DELETE FROM t6 WHERE a = 100; +---- +stmt 0 err 1 -1 49 no such table: t6 +stmt 49 err 1 -1 95 no such table: t6 +stmt 95 err 1 -1 127 no such table: t6 +==== 3.5.1 + + CREATE TABLE t7(a, b, c, d INTEGER PRIMARY KEY, + FOREIGN KEY(c, d) REFERENCES t7(a, b) + ); + CREATE UNIQUE INDEX t7i ON t7(a, b); +---- +stmt 0 ok +stmt 97 err 1 -1 136 no such table: main.t7 +==== 3.5.2 + INSERT INTO t7 VALUES('x', 1, 'x', NULL) +---- +stmt 0 err 1 -1 42 no such table: t7 +==== 3.5.3 + INSERT INTO t7 VALUES('x', 2, 'x', 2) +---- +stmt 0 err 1 -1 39 no such table: t7 +==== 3.5.4 + + INSERT INTO t7 VALUES('x', 450, 'x', NULL); +---- +stmt 0 err 1 -1 47 no such table: t7 +==== 3.5.5 + + INSERT INTO t7 VALUES('x', 450, 'x', 451); +---- +stmt 0 err 1 -1 46 no such table: t7 +==== 3.6.1 + + CREATE TABLE t8(a, b, c, d, e, FOREIGN KEY(c, d) REFERENCES t8(a, b)); + CREATE UNIQUE INDEX t8i1 ON t8(a, b); + CREATE UNIQUE INDEX t8i2 ON t8(c); + INSERT INTO t8 VALUES(1, 1, 1, 1, 1); +---- +stmt 0 ok +stmt 73 err 1 -1 113 no such table: main.t8 +stmt 113 err 1 -1 150 no such table: main.t8 +stmt 150 err 1 -1 190 no such table: t8 +==== 3.6.2 + + UPDATE t8 SET d = 2; +---- +stmt 0 err 1 -1 24 no such table: t8 +==== 3.6.3 + UPDATE t8 SET d = 1; +---- +stmt 0 err 1 -1 21 no such table: t8 +==== 3.6.4 + UPDATE t8 SET e = 2; +---- +stmt 0 err 1 -1 21 no such table: t8 +==== 3.6.5 + + CREATE TABLE TestTable ( + id INTEGER PRIMARY KEY, + name text, + source_id integer not null, + parent_id integer, + + foreign key(source_id, parent_id) references TestTable(source_id, id) + ); + CREATE UNIQUE INDEX testindex on TestTable(source_id, id); + PRAGMA foreign_keys=1; + INSERT INTO TestTable VALUES (1, 'parent', 1, null); + INSERT INTO TestTable VALUES (2, 'child', 1, 1); + UPDATE TestTable SET parent_id=1000 where id=2; +---- +stmt 0 ok +stmt 205 err 1 -1 266 no such table: main.TestTable +stmt 266 ok +stmt 291 err 1 -1 346 no such table: TestTable +stmt 346 err 1 -1 397 no such table: TestTable +stmt 397 err 1 -1 447 no such table: TestTable diff --git a/parser/testdata/fkey4.metadata.json b/parser/testdata/fkey4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fkey4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fkey4.test b/parser/testdata/fkey4.test new file mode 100644 index 0000000..ad61d68 --- /dev/null +++ b/parser/testdata/fkey4.test @@ -0,0 +1,13 @@ +==== fkey4-1.1 + + PRAGMA foreign_keys = ON; + CREATE TABLE t1(a PRIMARY KEY, b); + CREATE TABLE t2(c REFERENCES t1 DEFERRABLE INITIALLY DEFERRED, d); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t2 VALUES(1,3); +---- +stmt 0 ok +stmt 30 ok +stmt 69 ok +stmt 140 err 1 -1 172 no such table: t1 +stmt 172 err 1 -1 204 no such table: t2 diff --git a/parser/testdata/fkey5.metadata.json b/parser/testdata/fkey5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fkey5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fkey5.test b/parser/testdata/fkey5.test new file mode 100644 index 0000000..7bf535b --- /dev/null +++ b/parser/testdata/fkey5.test @@ -0,0 +1,170 @@ +==== fkey5-1.6 + + PRAGMA temp.foreign_key_check(c2); +---- +stmt 0 err 1 -1 39 no such table: temp.c2 +==== fkey5-2.3 + + PRAGMA foreign_key_list(c5); +---- +stmt 0 ok +==== 9.1.1 + + CREATE TABLE k1(x REFERENCES s1); + PRAGMA foreign_key_check(k1); +---- +stmt 0 ok +stmt 36 err 1 -1 68 no such table: k1 +==== 9.1.2 + + INSERT INTO k1 VALUES(NULL); + PRAGMA foreign_key_check(k1); +---- +stmt 0 err 1 -1 31 no such table: k1 +stmt 31 err 1 -1 63 no such table: k1 +==== 9.1.3 + + INSERT INTO k1 VALUES(1); + PRAGMA foreign_key_check(k1); +---- +stmt 0 err 1 -1 28 no such table: k1 +stmt 28 err 1 -1 60 no such table: k1 +==== 9.2.1 + + CREATE TABLE k2(x, y, FOREIGN KEY(x, y) REFERENCES s1(a, b)); + PRAGMA foreign_key_check(k2); +---- +stmt 0 ok +stmt 64 err 1 -1 96 no such table: k2 +==== 9.2 + + INSERT INTO k2 VALUES(NULL, 'five'); + PRAGMA foreign_key_check(k2); +---- +stmt 0 err 1 -1 39 no such table: k2 +stmt 39 err 1 -1 71 no such table: k2 +==== 9.3 + + INSERT INTO k2 VALUES('one', NULL); + PRAGMA foreign_key_check(k2); +---- +stmt 0 err 1 -1 38 no such table: k2 +stmt 38 err 1 -1 70 no such table: k2 +==== 9.4 + + INSERT INTO k2 VALUES('six', 'seven'); + PRAGMA foreign_key_check(k2); +---- +stmt 0 err 1 -1 41 no such table: k2 +stmt 41 err 1 -1 73 no such table: k2 +==== 10.1 + + CREATE TABLE p30 (id INTEGER PRIMARY KEY); + CREATE TABLE IF NOT EXISTS c30 ( + line INTEGER, + master REFERENCES p30(id), + PRIMARY KEY(master) + ) WITHOUT ROWID; + + INSERT INTO p30 (id) VALUES (1); + INSERT INTO c30 (master, line) VALUES (1, 999); +---- +stmt 0 ok +stmt 45 ok +stmt 180 err 1 -1 216 no such table: p30 +stmt 216 err 1 -1 267 no such table: c30 +==== 10.2 + + PRAGMA foreign_key_check; +---- +stmt 0 ok +==== 10.3 + + INSERT INTO c30 VALUES(45, 45); + PRAGMA foreign_key_check; +---- +stmt 0 err 1 -1 34 no such table: c30 +stmt 34 ok +==== 11.0 + + CREATE TABLE tt(y); + CREATE TABLE c11(x REFERENCES tt(y)); +---- +stmt 0 ok +stmt 22 ok +==== 11.1 + + PRAGMA foreign_key_check; +---- +stmt 0 ok +==== 12.0 + + ATTACH ':memory:' as aux; + CREATE TABLE aux.t1(a INTEGER PRIMARY KEY, b TEXT REFERENCES t2); + CREATE TABLE main.t2(x TEXT PRIMARY KEY, y INT); + INSERT INTO main.t2 VALUES('abc',11),('def',22),('xyz',99); + INSERT INTO aux.t1 VALUES(5,'abc'),(7,'xyz'),(9,'oops'); + PRAGMA foreign_key_check=t1; +---- +stmt 0 ok +stmt 28 err 1 44 51 unknown database aux +stmt 96 ok +stmt 147 err 1 -1 209 no such table: main.t2 +stmt 209 err 1 -1 268 no such table: aux.t1 +stmt 268 err 1 -1 299 no such table: t1 +==== 12.1 + + CREATE TABLE aux.t2(x TEXT PRIMARY KEY, y INT); + INSERT INTO aux.t2 VALUES('abc',11),('def',22),('xyz',99); + PRAGMA foreign_key_check=t1; +---- +stmt 0 err 1 16 23 unknown database aux +stmt 50 err 1 -1 111 no such table: aux.t2 +stmt 111 err 1 -1 142 no such table: t1 +==== 13.0 + + SELECT *, 'x' FROM pragma_foreign_key_check('t1'); +---- +stmt 0 ok +==== 13.1 + + SELECT *, 'x' FROM pragma_foreign_key_check('t1','main'); +---- +stmt 0 ok +==== 13.2 + + SELECT *, 'x' FROM pragma_foreign_key_check('t1','aux'); +---- +stmt 0 ok +==== 13.10 + + PRAGMA foreign_keys=OFF; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT REFERENCES t2); + CREATE TABLE t2(x TEXT PRIMARY KEY, y INT); + CREATE TABLE t3(w TEXT, z INT REFERENCES t1); + INSERT INTO t2 VALUES('abc',11),('def',22),('xyz',99); + INSERT INTO t1 VALUES(5,'abc'),(7,'xyz'),(9,'oops'); + INSERT INTO t3 VALUES(11,7),(22,19); +---- +stmt 0 ok +stmt 31 ok +stmt 99 ok +stmt 149 ok +stmt 201 err 1 -1 262 no such table: t2 +stmt 262 err 1 -1 321 no such table: t1 +stmt 321 err 1 -1 364 no such table: t3 +==== 13.11 + + SELECT x.*, '|' + FROM sqlite_schema, pragma_foreign_key_check(name) AS x + WHERE type='table' + ORDER BY x."table"; +---- +stmt 0 ok +==== 13.12 + + SELECT *, '|' + FROM pragma_foreign_key_check AS x + ORDER BY x."table"; +---- +stmt 0 ok diff --git a/parser/testdata/fkey6.metadata.json b/parser/testdata/fkey6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fkey6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fkey6.test b/parser/testdata/fkey6.test new file mode 100644 index 0000000..5d65f61 --- /dev/null +++ b/parser/testdata/fkey6.test @@ -0,0 +1,341 @@ +==== fkey6-1.0 + + PRAGMA defer_foreign_keys; +---- +stmt 0 ok +==== fkey6-1.1 + + PRAGMA foreign_keys=ON; + CREATE TABLE t1(x INTEGER PRIMARY KEY); + CREATE TABLE t2(y INTEGER PRIMARY KEY, + z INTEGER REFERENCES t1(x) DEFERRABLE INITIALLY DEFERRED); + CREATE INDEX t2z ON t2(z); + CREATE TABLE t3(u INTEGER PRIMARY KEY, v INTEGER REFERENCES t1(x)); + CREATE INDEX t3v ON t3(v); + INSERT INTO t1 VALUES(1),(2),(3),(4),(5); + INSERT INTO t2 VALUES(1,1),(2,2); + INSERT INTO t3 VALUES(3,3),(4,4); +---- +stmt 0 ok +stmt 26 ok +stmt 68 ok +stmt 178 err 1 -1 207 no such table: main.t2 +stmt 207 ok +stmt 277 err 1 -1 306 no such table: main.t3 +stmt 306 err 1 -1 350 no such table: t1 +stmt 350 err 1 -1 386 no such table: t2 +stmt 386 err 1 -1 422 no such table: t3 +==== fkey6-1.2 +DELETE FROM t1 WHERE x=2; +---- +stmt 0 err 1 -1 25 no such table: t1 +==== fkey6-1.4 + + BEGIN; + DELETE FROM t1 WHERE x=1; +---- +stmt 0 ok +stmt 11 err 1 -1 41 no such table: t1 +==== fkey6-1.6 + + ROLLBACK; +---- +stmt 0 ok +==== fkey6-1.8 + + PRAGMA defer_foreign_keys=ON; + BEGIN; + DELETE FROM t1 WHERE x=3; +---- +stmt 0 ok +stmt 34 ok +stmt 45 err 1 -1 75 no such table: t1 +==== fkey6-1.10.1 + + PRAGMA defer_foreign_keys; + ROLLBACK; + PRAGMA defer_foreign_keys; + BEGIN; + PRAGMA defer_foreign_keys=ON; + PRAGMA defer_foreign_keys; + COMMIT; + PRAGMA defer_foreign_keys; + BEGIN; +---- +stmt 0 ok +stmt 29 ok +stmt 41 ok +stmt 70 ok +stmt 79 ok +stmt 111 ok +stmt 140 ok +stmt 150 ok +stmt 179 ok +==== fkey6-1.10.2 +DELETE FROM t1 WHERE x=3 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== fkey6-1.22 + + COMMIT; +---- +stmt 0 ok +==== fkey6-2.1 + + CREATE TABLE p1(a PRIMARY KEY); + INSERT INTO p1 VALUES('one'), ('two'); + CREATE TABLE c1(x REFERENCES p1); + INSERT INTO c1 VALUES('two'), ('one'); +---- +stmt 0 ok +stmt 34 err 1 -1 75 no such table: p1 +stmt 75 ok +stmt 111 err 1 -1 152 no such table: c1 +==== fkey6-2.2 + + BEGIN; + PRAGMA defer_foreign_keys = 1; + DELETE FROM p1; + ROLLBACK; + PRAGMA defer_foreign_keys; +---- +stmt 0 ok +stmt 9 ok +stmt 44 err 1 -1 64 no such table: p1 +stmt 64 ok +stmt 76 ok +==== fkey6-2.3 + + BEGIN; + PRAGMA defer_foreign_keys = 1; + DROP TABLE p1; + PRAGMA vdbe_trace = 0; + ROLLBACK; + PRAGMA defer_foreign_keys; +---- +stmt 0 ok +stmt 9 ok +stmt 44 err 1 -1 63 no such table: p1 +stmt 63 ok +stmt 90 ok +stmt 102 ok +==== fkey6-2.4 + + BEGIN; + PRAGMA defer_foreign_keys = 1; + DELETE FROM p1; + DROP TABLE c1; + COMMIT; + PRAGMA defer_foreign_keys; +---- +stmt 0 ok +stmt 9 ok +stmt 44 err 1 -1 64 no such table: p1 +stmt 64 err 1 -1 83 no such table: c1 +stmt 83 ok +stmt 93 ok +==== fkey6-2.5 + + DROP TABLE p1; + CREATE TABLE p1(a PRIMARY KEY); + INSERT INTO p1 VALUES('one'), ('two'); + CREATE TABLE c1(x REFERENCES p1); + INSERT INTO c1 VALUES('two'), ('one'); +---- +stmt 0 err 1 -1 17 no such table: p1 +stmt 17 ok +stmt 51 err 1 -1 92 no such table: p1 +stmt 92 ok +stmt 128 err 1 -1 169 no such table: c1 +==== fkey6-2.6 + + BEGIN; + PRAGMA defer_foreign_keys = 1; + INSERT INTO c1 VALUES('three'); + DROP TABLE c1; + COMMIT; + PRAGMA defer_foreign_keys; +---- +stmt 0 ok +stmt 9 ok +stmt 44 err 1 -1 80 no such table: c1 +stmt 80 err 1 -1 99 no such table: c1 +stmt 99 ok +stmt 109 ok +==== 3.1 + + CREATE TABLE p2(a PRIMARY KEY, b); + CREATE TABLE c2(x, y REFERENCES p2 ON DELETE RESTRICT ON UPDATE RESTRICT); + INSERT INTO p2 VALUES(1, 'one'); + INSERT INTO p2 VALUES(2, 'two'); + INSERT INTO c2 VALUES('i', 1); +---- +stmt 0 ok +stmt 37 ok +stmt 114 err 1 -1 149 no such table: p2 +stmt 149 err 1 -1 184 no such table: p2 +stmt 184 err 1 -1 217 no such table: c2 +==== 3.2.1 + + BEGIN; + UPDATE p2 SET a=a-1; +---- +stmt 0 ok +stmt 9 err 1 -1 34 no such table: p2 +==== 3.2.2 + COMMIT +---- +stmt 0 ok +==== 3.2.3 + + BEGIN; + PRAGMA defer_foreign_keys = 1; + UPDATE p2 SET a=a-1; + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 44 err 1 -1 69 no such table: p2 +stmt 69 ok +==== 3.2.4 + + BEGIN; + PRAGMA defer_foreign_keys = 1; + UPDATE p2 SET a=a-1; +---- +stmt 0 ok +stmt 9 ok +stmt 44 err 1 -1 69 no such table: p2 +==== 3.2.5 + + COMMIT; +---- +stmt 0 ok +==== 3.2.6 + ROLLBACK +---- +stmt 0 ok +==== 3.3.1 + + CREATE TRIGGER p2t AFTER DELETE ON p2 BEGIN + INSERT INTO p2 VALUES(old.a, 'deleted!'); + END; +---- +stmt 0 err 1 -1 46 no such table: main.p2 +==== 3.3.2 + + BEGIN; + DELETE FROM p2 WHERE a=1; +---- +stmt 0 ok +stmt 9 err 1 -1 39 no such table: p2 +==== 3.3.3 + COMMIT +---- +stmt 0 ok +==== 3.3.4 + + BEGIN; + PRAGMA defer_foreign_keys = 1; + DELETE FROM p2 WHERE a=1; + COMMIT; + SELECT * FROM p2; +---- +stmt 0 ok +stmt 9 ok +stmt 44 err 1 -1 74 no such table: p2 +stmt 74 ok +stmt 84 err 1 -1 104 no such table: p2 +==== 4.0 + + CREATE TABLE p1(a INTEGER PRIMARY KEY, b UNIQUE); + CREATE TABLE c1(x REFERENCES p1(b)); + + INSERT INTO p1 VALUES(1, 'one'), (2, 'two'), (3, 'three'); + INSERT INTO c1 VALUES('two'); + + PRAGMA foreign_keys = 1; + PRAGMA defer_foreign_keys = 1; +---- +stmt 0 ok +stmt 52 ok +stmt 91 err 1 -1 153 no such table: p1 +stmt 153 err 1 -1 185 no such table: c1 +stmt 185 ok +stmt 213 ok +==== 4.1 + + BEGIN; + DELETE FROM p1 WHERE a=2; +---- +stmt 0 ok +stmt 9 err 1 -1 39 no such table: p1 +==== 4.2 + + COMMIT; +---- +stmt 0 ok +==== 5.0 + + PRAGMA foreign_keys = 1; + CREATE TABLE p1(a INTEGER PRIMARY KEY, b); + CREATE TABLE c1(x REFERENCES p1 DEFERRABLE INITIALLY DEFERRED); +---- +stmt 0 ok +stmt 27 ok +stmt 72 ok +==== 5.1 + + BEGIN; + INSERT INTO c1 VALUES(123); + PRAGMA defer_foreign_keys = 1; + INSERT INTO p1 VALUES(123, 'one two three'); + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 41 no such table: c1 +stmt 41 ok +stmt 76 err 1 -1 125 no such table: p1 +stmt 125 ok +==== 6.1 + + PRAGMA auto_vacuum = 0; + PRAGMA writable_schema = 1; + INSERT INTO sqlite_schema + VALUES('table', 't1', 't1', 2, 'CREATE TABLE t1(x INTEGER PRIMARY KEY)'); +---- +stmt 0 ok +stmt 28 ok +stmt 60 ok +==== 6.1.dup1 + + PRAGMA foreign_keys = 1; + PRAGMA writable_schema = 1; +---- +stmt 0 ok +stmt 29 ok +==== 6.2 + + CREATE TABLE t2( + y INTEGER PRIMARY KEY, + z INTEGER REFERENCES t1(x) DEFERRABLE INITIALLY DEFERRED + ); +---- +stmt 0 ok +==== 6.3 + + BEGIN; + INSERT INTO t2 VALUES(1,0),(2,1); + CREATE VIRTUAL TABLE t3 USING fts5(a, b, content='', tokendata=1); + INSERT INTO t3 VALUES(3,3); + PRAGMA defer_foreign_keys=ON; + DELETE FROM t2; + COMMIT; +---- +stmt 0 ok +stmt 11 err 1 -1 51 no such table: t2 +stmt 51 ok +stmt 124 err 1 -1 158 no such table: t3 +stmt 158 ok +stmt 194 err 1 -1 216 no such table: t2 +stmt 216 ok diff --git a/parser/testdata/fkey7.metadata.json b/parser/testdata/fkey7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fkey7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fkey7.test b/parser/testdata/fkey7.test new file mode 100644 index 0000000..dad327c --- /dev/null +++ b/parser/testdata/fkey7.test @@ -0,0 +1,93 @@ +==== 1.1 + + PRAGMA foreign_keys = 1; + + CREATE TABLE s1(a PRIMARY KEY, b); + CREATE TABLE par(a, b REFERENCES s1, c UNIQUE, PRIMARY KEY(a)); + + CREATE TABLE c1(a, b REFERENCES par); + CREATE TABLE c2(a, b REFERENCES par); + CREATE TABLE c3(a, b REFERENCES par(c)); +---- +stmt 0 ok +stmt 27 ok +stmt 65 ok +stmt 131 ok +stmt 172 ok +stmt 212 ok +==== 2.0 + + CREATE TABLE pX(x PRIMARY KEY); + CREATE TABLE cX(a INTEGER PRIMARY KEY, b REFERENCES pX); +---- +stmt 0 ok +stmt 36 ok +==== 2.1 + + INSERT INTO cX VALUES(11, zeroblob(40)); +---- +stmt 0 err 1 -1 45 no such table: cX +==== 3.0 + + CREATE TABLE p4 (id INTEGER NOT NULL PRIMARY KEY); + INSERT INTO p4 VALUES(1), (2), (3); + + CREATE TABLE c4(x INTEGER REFERENCES p4(id) DEFERRABLE INITIALLY DEFERRED); + CREATE INDEX c4_x ON c4(x); + INSERT INTO c4 VALUES(1), (2), (3); + + ANALYZE; + INSERT INTO p4(id) VALUES(4); +---- +stmt 0 ok +stmt 55 err 1 -1 95 no such table: p4 +stmt 95 ok +stmt 176 err 1 -1 208 no such table: main.c4 +stmt 208 err 1 -1 248 no such table: c4 +stmt 248 ok +stmt 262 err 1 -1 296 no such table: p4 +==== 4.0 + + PRAGMA foreign_keys = true; + CREATE TABLE parent( + p PRIMARY KEY + ); + CREATE TABLE child( + c UNIQUE REFERENCES parent(p) + ); +---- +stmt 0 ok +stmt 30 ok +stmt 76 ok +==== 4.1 + + INSERT OR FAIL INTO child VALUES(123), (123); +---- +stmt 0 err 1 -1 48 no such table: child +==== 4.2 + + SELECT * FROM child; +---- +stmt 0 err 1 -1 23 no such table: child +==== 4.3 + + PRAGMA foreign_key_check; +---- +stmt 0 ok +==== 4.4 + + INSERT INTO parent VALUES(123); + INSERT OR FAIL INTO child VALUES(123), (123); +---- +stmt 0 err 1 -1 34 no such table: parent +stmt 34 err 1 -1 82 no such table: child +==== 4.5 + + SELECT * FROM child; +---- +stmt 0 err 1 -1 23 no such table: child +==== 4.6 + + PRAGMA foreign_key_check; +---- +stmt 0 ok diff --git a/parser/testdata/fkey8.metadata.json b/parser/testdata/fkey8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fkey8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fkey8.test b/parser/testdata/fkey8.test new file mode 100644 index 0000000..4c65232 --- /dev/null +++ b/parser/testdata/fkey8.test @@ -0,0 +1,252 @@ +==== 1.0 + PRAGMA foreign_keys = 1; +---- +stmt 0 ok +==== 2.1.0 + + PRAGMA foreign_keys = on; + CREATE TABLE p1(a PRIMARY KEY, b) WITHOUT ROWID; + CREATE TABLE c1(x REFERENCES p1 DEFERRABLE INITIALLY DEFERRED); + + INSERT INTO p1 VALUES(1, 'one'); + INSERT INTO p1 VALUES(2, 'two'); + INSERT INTO c1 VALUES(1); + INSERT INTO c1 VALUES(2); +---- +stmt 0 ok +stmt 28 ok +stmt 79 ok +stmt 145 err 1 -1 181 no such table: p1 +stmt 181 err 1 -1 216 no such table: p1 +stmt 216 err 1 -1 244 no such table: c1 +stmt 244 err 1 -1 272 no such table: c1 +==== 2.1.2 + + BEGIN; + DELETE FROM p1 WHERE a=1; + INSERT OR REPLACE INTO p1 VALUES(2, 'two'); + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 39 no such table: p1 +stmt 39 err 1 -1 87 no such table: p1 +stmt 87 ok +==== 2.2.0 + + PRAGMA foreign_keys = on; + CREATE TABLE p2(a PRIMARY KEY, b); + CREATE TABLE c2( + x PRIMARY KEY, + y REFERENCES p2 DEFERRABLE INITIALLY DEFERRED + ) WITHOUT ROWID; +---- +stmt 0 ok +stmt 28 ok +stmt 65 ok +==== 2.2.1 + + BEGIN; + INSERT INTO c2 VALUES(13, 13); + INSERT OR REPLACE INTO c2 VALUES(13, 13); + DELETE FROM c2; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 44 no such table: c2 +stmt 44 err 1 -1 90 no such table: c2 +stmt 90 err 1 -1 110 no such table: c2 +stmt 110 ok +==== 2.3.0 + + PRAGMA foreign_keys = on; + CREATE TABLE p3(a PRIMARY KEY, b) WITHOUT ROWID; + CREATE TABLE c3(x REFERENCES p3); + + INSERT INTO p3 VALUES(1, 'one'); + INSERT INTO p3 VALUES(2, 'two'); + INSERT INTO c3 VALUES(1); + INSERT INTO c3 VALUES(2); + + CREATE TRIGGER p3d AFTER DELETE ON p3 WHEN old.a=1 BEGIN + INSERT OR REPLACE INTO p3 VALUES(2, 'three'); + END; +---- +stmt 0 ok +stmt 28 ok +stmt 79 ok +stmt 115 err 1 -1 151 no such table: p3 +stmt 151 err 1 -1 186 no such table: p3 +stmt 186 err 1 -1 214 no such table: c3 +stmt 214 err 1 -1 242 no such table: c3 +stmt 242 err 1 -1 302 no such table: main.p3 +==== 2.3.1 + + DELETE FROM p3 WHERE a=1 +---- +stmt 0 err 1 -1 28 no such table: p3 +==== 3.0 + + PRAGMA foreign_keys=ON; + CREATE TABLE t2( + a PRIMARY KEY, b, c, d, e, + FOREIGN KEY(b, c) REFERENCES t2(d, e) + ) WITHOUT ROWID; + CREATE UNIQUE INDEX idx ON t2(d, e); + + INSERT INTO t2 VALUES(1, 'one', 'one', 'one', 'one'); -- row is parent of self + INSERT INTO t2 VALUES(2, 'one', 'one', 'one', NULL); -- parent is row 1 +---- +stmt 0 ok +stmt 26 ok +stmt 139 err 1 -1 178 no such table: main.t2 +stmt 178 err 1 -1 235 no such table: t2 +stmt 235 err 1 -1 315 no such table: t2 +==== 3.1 + + DELETE FROM t2 WHERE a=1; +---- +stmt 0 err 1 -1 28 no such table: t2 +==== 4.0 + + CREATE TABLE t1 ( + c1 PRIMARY KEY, + c2 NUMERIC, + FOREIGN KEY(c1) REFERENCES t1(c2) + ) WITHOUT ROWID ; + CREATE INDEX t1c1 ON t1(c1); + CREATE UNIQUE INDEX t1c1unique ON t1(c2); +---- +stmt 0 ok +stmt 124 err 1 -1 155 no such table: main.t1 +stmt 155 err 1 -1 199 no such table: main.t1 +==== 4.1 + + INSERT OR REPLACE INTO t1 VALUES(10000, 20000); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 4.2 + + INSERT OR REPLACE INTO t1 VALUES(20000, 20000); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 5.0 + + PRAGMA foreign_keys = true; + CREATE TABLE parent( + p TEXT PRIMARY KEY + ); + CREATE TABLE child( + c INTEGER UNIQUE, + FOREIGN KEY(c) REFERENCES parent(p) DEFERRABLE INITIALLY DEFERRED + ); + BEGIN; + INSERT INTO child VALUES(123); + INSERT INTO parent VALUES('123'); + COMMIT; +---- +stmt 0 ok +stmt 30 ok +stmt 81 ok +stmt 201 ok +stmt 210 err 1 -1 245 no such table: child +stmt 245 err 1 -1 283 no such table: parent +stmt 283 ok +==== 5.1 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 5.2 + + INSERT INTO parent VALUES(1200); + BEGIN; + INSERT INTO child VALUES(456); + UPDATE parent SET p = '456' WHERE p=1200; + COMMIT; +---- +stmt 0 err 1 -1 35 no such table: parent +stmt 35 ok +stmt 44 err 1 -1 79 no such table: child +stmt 79 err 1 -1 125 no such table: parent +stmt 125 ok +==== 5.3 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 6.1 + + PRAGMA foreign_keys = on; + CREATE TABLE c1(b); + INSERT INTO c1 VALUES(123); +---- +stmt 0 ok +stmt 28 ok +stmt 50 err 1 -1 80 no such table: c1 +==== 6.2 + + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.p1(a INTEGER PRIMARY KEY); + CREATE TABLE aux.c1(b REFERENCES p1(a) ON DELETE RESTRICT); + + INSERT INTO aux.p1 VALUES(123); +---- +stmt 0 ok +stmt 28 err 1 44 51 unknown database aux +stmt 74 err 1 90 97 unknown database aux +stmt 136 err 1 -1 171 no such table: aux.p1 +==== 6.3 + + DELETE FROM aux.p1 WHERE a=123; +---- +stmt 0 err 1 -1 34 no such table: aux.p1 +==== 7.0 + + PRAGMA foreign_keys = ON; + CREATE TABLE p1 (pid PRIMARY KEY); + CREATE TABLE c1 (cid PRIMARY KEY, + pid REFERENCES p1(pid) ON UPDATE CASCADE + ); +---- +stmt 0 ok +stmt 28 ok +stmt 65 ok +==== 7.1 + + ATTACH ':memory:' AS aux; + CREATE TABLE aux.p1 (pid PRIMARY KEY); + CREATE TABLE aux.c1 (cid PRIMARY KEY, + pid REFERENCES p1(pid) ON UPDATE CASCADE); + + INSERT INTO aux.p1 VALUES (10); + INSERT INTO aux.p1 VALUES (20); + + INSERT INTO aux.c1 VALUES(11, 10); + INSERT INTO aux.c1 VALUES(12, 10); + INSERT INTO aux.c1 VALUES(21, 20); + INSERT INTO aux.c1 VALUES(22, 20); +---- +stmt 0 ok +stmt 28 err 1 44 52 unknown database aux +stmt 69 err 1 85 93 unknown database aux +stmt 158 err 1 -1 193 no such table: aux.p1 +stmt 193 err 1 -1 227 no such table: aux.p1 +stmt 227 err 1 -1 265 no such table: aux.c1 +stmt 265 err 1 -1 302 no such table: aux.c1 +stmt 302 err 1 -1 339 no such table: aux.c1 +stmt 339 err 1 -1 376 no such table: aux.c1 +==== 7.2 + + UPDATE aux.p1 SET pid = pid * 10; +---- +stmt 0 err 1 -1 36 no such table: aux.p1 +==== 7.3 + + SELECT * FROM aux.p1; +---- +stmt 0 err 1 -1 24 no such table: aux.p1 +==== 7.4 + + SELECT * FROM aux.c1; +---- +stmt 0 err 1 -1 24 no such table: aux.c1 diff --git a/parser/testdata/fordelete.metadata.json b/parser/testdata/fordelete.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fordelete.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fordelete.test b/parser/testdata/fordelete.test new file mode 100644 index 0000000..3cf24f4 --- /dev/null +++ b/parser/testdata/fordelete.test @@ -0,0 +1,86 @@ +==== 1.0 + + CREATE TABLE t1(a PRIMARY KEY, b); +---- +stmt 0 ok +==== 2.0 + + CREATE TABLE t2(a, b, c); + CREATE INDEX t2a ON t2(a); + CREATE INDEX t2b ON t2(b); + CREATE INDEX t2c ON t2(c); +---- +stmt 0 ok +stmt 28 err 1 -1 57 no such table: main.t2 +stmt 57 err 1 -1 86 no such table: main.t2 +stmt 86 err 1 -1 115 no such table: main.t2 +==== 3.0 + + CREATE TABLE x1(a INTEGER PRIMARY KEY, b, c, d); + CREATE TABLE x2(a INTEGER PRIMARY KEY, b, c, d); +---- +stmt 0 ok +stmt 51 ok +==== 4.0 + + CREATE TABLE log(x); + CREATE TABLE p1(one PRIMARY KEY, two); + + CREATE TRIGGER tr_bd BEFORE DELETE ON p1 BEGIN + INSERT INTO log VALUES('delete'); + END; + INSERT INTO p1 VALUES('a', 'A'), ('b', 'B'), ('c', 'C'); + DELETE FROM p1 WHERE one = 'a'; +---- +stmt 0 ok +stmt 23 ok +stmt 64 err 1 -1 114 no such table: main.p1 +stmt 159 err 1 -1 218 no such table: p1 +stmt 218 err 1 -1 252 no such table: p1 +==== 4.1 + + BEGIN TRANSACTION; + CREATE TABLE tbl(a PRIMARY KEY, b, c); + CREATE TABLE log(a, b, c); + INSERT INTO "tbl" VALUES(1,2,3); + CREATE TRIGGER the_trigger BEFORE DELETE ON tbl BEGIN + INSERT INTO log VALUES(1, 2,3); + END; + COMMIT; + DELETE FROM tbl WHERE a=1; +---- +stmt 0 ok +stmt 21 ok +stmt 62 ok +stmt 91 err 1 -1 126 no such table: tbl +stmt 126 err 1 -1 182 no such table: main.tbl +stmt 226 ok +stmt 236 err 1 -1 265 no such table: tbl +==== 5.1 + + PRAGMA foreign_keys = 1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + CREATE TABLE t2( + c INTEGER PRIMARY KEY, + d INTEGER DEFAULT 1 REFERENCES t1 ON DELETE SET DEFAULT + ); +---- +stmt 0 ok +stmt 27 ok +stmt 72 ok +==== 5.2 + + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t2 VALUES(1, 2); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 70 no such table: t1 +stmt 70 err 1 -1 101 no such table: t2 +stmt 101 err 1 -1 121 no such table: t2 +==== 5.3 + + DELETE FROM t1 WHERE a = 2; +---- +stmt 0 err 1 -1 30 no such table: t1 diff --git a/parser/testdata/fpconv1.metadata.json b/parser/testdata/fpconv1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fpconv1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fpconv1.test b/parser/testdata/fpconv1.test new file mode 100644 index 0000000..4867d51 --- /dev/null +++ b/parser/testdata/fpconv1.test @@ -0,0 +1,60 @@ +==== fpconv1-1.0 + + SELECT 1.23 - 2.34; +---- +stmt 0 ok +==== fpconv1-1.1 + + SELECT 1.23 * 2.34; +---- +stmt 0 ok +==== fpconv1-1.2 + + SELECT 1.23 - 2.34; +---- +stmt 0 ok +==== fpconv1-1.3 + + SELECT 1.23 * 2.34; +---- +stmt 0 ok +==== fpconv1-2.0 + + WITH RECURSIVE + /* Number of random floating-point values to try. + ** On a circa 2021 Ryzen 5950X running Mint Linux, and + ** compiled with -O0 -DSQLITE_DEBUG, this test runs at + ** about 150000 cases per second ------------------vvvvvvv */ + c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<500_000), + fp(y) AS MATERIALIZED ( + SELECT CAST( format('%+d.%019d0e%+03d', + random()%10,abs(random()),random()%200) AS real) + FROM c + ) + SELECT y FROM fp + WHERE -log10(abs(decimal_sub(dtostr(y,24),format('%!.24e',y))/y))<17.0; + /* Number of digits of accuracy required -------^^^^ */ +---- +stmt 0 err 1 539 603 no such function: log10 +==== fpconv1-3.0 + + WITH RECURSIVE + c(x,s) AS MATERIALIZED (VALUES(1,random()&0xffefffffffffffff) + UNION ALL + SELECT x+1,random()&0xffefffffffffffff + FROM c WHERE x<1_000_000), + fp(y,s) AS ( + SELECT ieee754_from_int(s),s FROM c + ), + fp2(yt,y,s) AS ( + SELECT y||'', y, s FROM fp + ) + SELECT format('%#016x',s) aS 'orig-hex', + format('%#016x',ieee754_to_int(CAST(yt AS real))) AS 'full-roundtrip', + yt AS 'rendered-as', + decimal_exp(yt,30) AS 'text-decimal', + decimal_exp(ieee754_from_int(s),30) AS 'float-decimal' + FROM fp2 + WHERE ieee754_to_int(CAST(yt AS real))<>s; +---- +stmt 0 err 1 238 657 no such function: ieee754_from_int diff --git a/parser/testdata/fts-9fd058691.metadata.json b/parser/testdata/fts-9fd058691.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts-9fd058691.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts-9fd058691.test b/parser/testdata/fts-9fd058691.test new file mode 100644 index 0000000..84e2fa2 --- /dev/null +++ b/parser/testdata/fts-9fd058691.test @@ -0,0 +1,27 @@ +==== 1.0 + + CREATE VIRTUAL TABLE fts USING fts3( tags TEXT); + INSERT INTO fts (tags) VALUES ('tag1'); + SELECT * FROM fts WHERE tags MATCH 'tag1'; +---- +stmt 0 ok +stmt 51 err 1 -1 93 no such table: fts +stmt 93 err 1 -1 138 no such table: fts +==== 2.0 + + CREATE VIRTUAL TABLE fts USING fts3(tags TEXT); + INSERT INTO fts (docid, tags) VALUES (1, 'tag1'); + INSERT INTO fts (docid, tags) VALUES (2, NULL); + INSERT INTO fts (docid, tags) VALUES (3, 'three'); +---- +stmt 0 ok +stmt 50 err 1 -1 102 no such table: fts +stmt 102 err 1 -1 152 no such table: fts +stmt 152 err 1 -1 205 no such table: fts +==== 2.1 + + UPDATE fts SET tags = 'two' WHERE rowid = 2; + SELECT * FROM fts WHERE tags MATCH 'two'; +---- +stmt 0 err 1 -1 49 no such table: fts +stmt 49 err 1 -1 95 no such table: fts diff --git a/parser/testdata/fts3aa.metadata.json b/parser/testdata/fts3aa.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3aa.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3aa.test b/parser/testdata/fts3aa.test new file mode 100644 index 0000000..da47eb3 --- /dev/null +++ b/parser/testdata/fts3aa.test @@ -0,0 +1,256 @@ +==== fts3aa-1.1 +SELECT rowid FROM t1 WHERE content MATCH 'one' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== fts3aa-1.2 +SELECT rowid FROM t1 WHERE content MATCH 'one two' +---- +stmt 0 err 1 -1 51 no such table: t1 +==== fts3aa-1.3 +SELECT rowid FROM t1 WHERE content MATCH 'two one' +---- +stmt 0 err 1 -1 51 no such table: t1 +==== fts3aa-1.4 +SELECT rowid FROM t1 WHERE content MATCH 'one two three' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3aa-1.5 +SELECT rowid FROM t1 WHERE content MATCH 'one three two' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3aa-1.6 +SELECT rowid FROM t1 WHERE content MATCH 'two three one' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3aa-1.7 +SELECT rowid FROM t1 WHERE content MATCH 'two one three' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3aa-1.8 +SELECT rowid FROM t1 WHERE content MATCH 'three one two' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3aa-1.9 +SELECT rowid FROM t1 WHERE content MATCH 'three two one' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3aa-1.10 +SELECT rowid FROM t1 WHERE content MATCH 'one two THREE' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3aa-1.11 +SELECT rowid FROM t1 WHERE content MATCH ' ONE Two three ' +---- +stmt 0 err 1 -1 66 no such table: t1 +==== fts3aa-2.1 +SELECT rowid FROM t1 WHERE content MATCH '"one"' +---- +stmt 0 err 1 -1 49 no such table: t1 +==== fts3aa-2.2 +SELECT rowid FROM t1 WHERE content MATCH '"one two"' +---- +stmt 0 err 1 -1 53 no such table: t1 +==== fts3aa-2.3 +SELECT rowid FROM t1 WHERE content MATCH '"two one"' +---- +stmt 0 err 1 -1 53 no such table: t1 +==== fts3aa-2.4 +SELECT rowid FROM t1 WHERE content MATCH '"one two three"' +---- +stmt 0 err 1 -1 59 no such table: t1 +==== fts3aa-2.5 +SELECT rowid FROM t1 WHERE content MATCH '"one three two"' +---- +stmt 0 err 1 -1 59 no such table: t1 +==== fts3aa-2.6 +SELECT rowid FROM t1 WHERE content MATCH '"one two three four"' +---- +stmt 0 err 1 -1 64 no such table: t1 +==== fts3aa-2.7 +SELECT rowid FROM t1 WHERE content MATCH '"one three two four"' +---- +stmt 0 err 1 -1 64 no such table: t1 +==== fts3aa-2.8 +SELECT rowid FROM t1 WHERE content MATCH '"one three five"' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3aa-2.9 +SELECT rowid FROM t1 WHERE content MATCH '"one three" five' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3aa-2.10 +SELECT rowid FROM t1 WHERE content MATCH 'five "one three"' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3aa-2.11 +SELECT rowid FROM t1 WHERE content MATCH 'five "one three" four' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts3aa-2.12 +SELECT rowid FROM t1 WHERE content MATCH 'five four "one three"' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts3aa-2.13 +SELECT rowid FROM t1 WHERE content MATCH '"one three" four five' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts3aa-3.1 +SELECT rowid FROM t1 WHERE content MATCH 'one' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== fts3aa-3.2 +SELECT rowid FROM t1 WHERE content MATCH 'one -two' +---- +stmt 0 err 1 -1 52 no such table: t1 +==== fts3aa-3.3 +SELECT rowid FROM t1 WHERE content MATCH '-two one' +---- +stmt 0 err 1 -1 52 no such table: t1 +==== fts3aa-4.1 +SELECT rowid FROM t1 WHERE content MATCH 'one OR two' +---- +stmt 0 err 1 -1 54 no such table: t1 +==== fts3aa-4.2 +SELECT rowid FROM t1 WHERE content MATCH '"one two" OR three' +---- +stmt 0 err 1 -1 62 no such table: t1 +==== fts3aa-4.3 +SELECT rowid FROM t1 WHERE content MATCH 'three OR "one two"' +---- +stmt 0 err 1 -1 62 no such table: t1 +==== fts3aa-4.4 +SELECT rowid FROM t1 WHERE content MATCH 'one two OR three' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3aa-4.5 +SELECT rowid FROM t1 WHERE content MATCH 'three OR two one' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3aa-4.6 +SELECT rowid FROM t1 WHERE content MATCH 'one two OR three OR four' +---- +stmt 0 err 1 -1 68 no such table: t1 +==== fts3aa-4.7 +SELECT rowid FROM t1 WHERE content MATCH 'two OR three OR four one' +---- +stmt 0 err 1 -1 68 no such table: t1 +==== fts3aa-5.1 +INSERT INTO t1(content) VALUES(NULL) +---- +stmt 0 err 1 -1 37 no such table: t1 +==== fts3aa-5.3 +SELECT rowid FROM t1 WHERE content MATCH NULL +---- +stmt 0 err 1 -1 46 no such table: t1 +==== fts3aa-6.0 +INSERT INTO t1(rowid, content) VALUES(0, 'four five') +---- +stmt 0 err 1 -1 54 no such table: t1 +==== fts3aa-6.1 +SELECT content FROM t1 WHERE rowid = 0 +---- +stmt 0 err 1 -1 39 no such table: t1 +==== fts3aa-6.2 +INSERT INTO t1(rowid, content) VALUES(-1, 'three four') +---- +stmt 0 err 1 -1 56 no such table: t1 +==== fts3aa-6.3 +SELECT content FROM t1 WHERE rowid = -1 +---- +stmt 0 err 1 -1 40 no such table: t1 +==== fts3aa-6.4 +SELECT rowid FROM t1 WHERE t1 MATCH 'four' +---- +stmt 0 err 1 -1 43 no such table: t1 +==== fts3aa-7.1 + + CREATE VIRTUAL TABLE t2 USING fts3(xyz=abc); + SELECT xyz FROM t2; +---- +stmt 0 ok +stmt 47 err 1 -1 69 no such table: t2 +==== fts3aa-7.2 + + CREATE VIRTUAL TABLE t3 USING fts4(xyz=abc); +---- +stmt 0 ok +==== fts3aa-7.3 + + CREATE VIRTUAL TABLE t3 USING fts4(xyz = abc); +---- +stmt 0 ok +==== fts3aa-7.4 + + CREATE VIRTUAL TABLE t3 USING fts3(tokenize=simple, tokenize=simple); + SELECT tokenize FROM t3; +---- +stmt 0 ok +stmt 72 err 1 -1 99 no such table: t3 +==== fts3aa-7.5 + + CREATE VIRTUAL TABLE t4 USING fts4(tokenize=simple, tokenize=simple); +---- +stmt 0 ok +==== 8.0 + + CREATE VIRTUAL TABLE t0 USING fts4(order=desc); + BEGIN; + INSERT INTO t0(rowid, content) VALUES(1, 'abc'); + UPDATE t0 SET docid=5 WHERE docid=1; + INSERT INTO t0(rowid, content) VALUES(6, 'abc'); +---- +stmt 0 ok +stmt 50 ok +stmt 59 err 1 -1 110 no such table: t0 +stmt 110 err 1 -1 149 no such table: t0 +stmt 149 err 1 -1 200 no such table: t0 +==== 8.1 + + SELECT docid FROM t0 WHERE t0 MATCH 'abc'; +---- +stmt 0 err 1 -1 45 no such table: t0 +==== 8.2 + + SELECT docid FROM t0 WHERE t0 MATCH '"abc abc"'; +---- +stmt 0 err 1 -1 51 no such table: t0 +==== 8.3 + COMMIT +---- +stmt 0 ok +==== 8.4 + + SELECT docid FROM t0 WHERE t0 MATCH 'abc'; +---- +stmt 0 err 1 -1 45 no such table: t0 +==== 8.5 + + SELECT docid FROM t0 WHERE t0 MATCH '"abc abc"'; +---- +stmt 0 err 1 -1 51 no such table: t0 +==== 9.1 + + CREATE VIRTUAL TABLE t9 USING fts4(a, "", '---'); +---- +stmt 0 ok +==== 9.2 + + CREATE VIRTUAL TABLE t10 USING fts3(<, b, c); +---- +stmt 0 ok +==== 10.0 + + CREATE VIRTUAL TABLE z1 USING fts3; + INSERT INTO z1 VALUES('one two three'),('four one five'),('six two five'); + CREATE TRIGGER z1r1 AFTER DELETE ON z1_content BEGIN + DELETE FROM z1; + END; +---- +stmt 0 ok +stmt 38 err 1 -1 115 no such table: z1 +stmt 115 err 1 -1 170 no such table: main.z1_content +==== 10.1 + + DELETE FROM z1; +---- +stmt 0 err 1 -1 18 no such table: z1 diff --git a/parser/testdata/fts3ab.metadata.json b/parser/testdata/fts3ab.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3ab.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3ab.test b/parser/testdata/fts3ab.test new file mode 100644 index 0000000..aa1aa77 --- /dev/null +++ b/parser/testdata/fts3ab.test @@ -0,0 +1,64 @@ +==== fts3ab-1.1 +SELECT rowid FROM t1 WHERE english MATCH 'one' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== fts3ab-1.2 +SELECT rowid FROM t1 WHERE spanish MATCH 'one' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== fts3ab-1.3 +SELECT rowid FROM t1 WHERE german MATCH 'one' +---- +stmt 0 err 1 -1 46 no such table: t1 +==== fts3ab-1.4 +SELECT rowid FROM t1 WHERE t1 MATCH 'one' +---- +stmt 0 err 1 -1 42 no such table: t1 +==== fts3ab-1.5 +SELECT rowid FROM t1 WHERE t1 MATCH 'one dos drei' +---- +stmt 0 err 1 -1 51 no such table: t1 +==== fts3ab-1.6 +SELECT english, spanish, german FROM t1 WHERE rowid=1 +---- +stmt 0 err 1 -1 54 no such table: t1 +==== fts3ab-1.7 +SELECT rowid FROM t1 WHERE t1 MATCH '"one un"' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== fts3ab-4.1 +SELECT rowid FROM t4 WHERE t4 MATCH 'norm:one' +---- +stmt 0 err 1 -1 47 no such table: t4 +==== fts3ab-4.2 +SELECT rowid FROM t4 WHERE norm MATCH 'one' +---- +stmt 0 err 1 -1 44 no such table: t4 +==== fts3ab-4.3 +SELECT rowid FROM t4 WHERE t4 MATCH 'one' +---- +stmt 0 err 1 -1 42 no such table: t4 +==== fts3ab-4.4 +SELECT rowid FROM t4 WHERE t4 MATCH 'plusone:one' +---- +stmt 0 err 1 -1 50 no such table: t4 +==== fts3ab-4.5 +SELECT rowid FROM t4 WHERE plusone MATCH 'one' +---- +stmt 0 err 1 -1 47 no such table: t4 +==== fts3ab-4.6 +SELECT rowid FROM t4 WHERE t4 MATCH 'norm:one plusone:two' +---- +stmt 0 err 1 -1 59 no such table: t4 +==== fts3ab-4.7 +SELECT rowid FROM t4 WHERE t4 MATCH 'norm:one two' +---- +stmt 0 err 1 -1 51 no such table: t4 +==== fts3ab-4.8 +SELECT rowid FROM t4 WHERE t4 MATCH 'plusone:two norm:one' +---- +stmt 0 err 1 -1 59 no such table: t4 +==== fts3ab-4.9 +SELECT rowid FROM t4 WHERE t4 MATCH 'two norm:one' +---- +stmt 0 err 1 -1 51 no such table: t4 diff --git a/parser/testdata/fts3ac.metadata.json b/parser/testdata/fts3ac.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3ac.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3ac.test b/parser/testdata/fts3ac.test new file mode 100644 index 0000000..91f3187 --- /dev/null +++ b/parser/testdata/fts3ac.test @@ -0,0 +1,160 @@ +==== fts3ac-1.2 + + SELECT rowid FROM email WHERE email MATCH 'mark' +---- +stmt 0 err 1 -1 54 no such table: email +==== fts3ac-1.3 + + SELECT rowid FROM email WHERE email MATCH 'susan' +---- +stmt 0 err 1 -1 55 no such table: email +==== fts3ac-1.4 + + SELECT rowid FROM email WHERE email MATCH 'mark susan' +---- +stmt 0 err 1 -1 60 no such table: email +==== fts3ac-1.5 + + SELECT rowid FROM email WHERE email MATCH 'susan mark' +---- +stmt 0 err 1 -1 60 no such table: email +==== fts3ac-1.6 + + SELECT rowid FROM email WHERE email MATCH '"mark susan"' +---- +stmt 0 err 1 -1 62 no such table: email +==== fts3ac-1.7 + + SELECT rowid FROM email WHERE email MATCH 'mark -susan' +---- +stmt 0 err 1 -1 61 no such table: email +==== fts3ac-1.8 + + SELECT rowid FROM email WHERE email MATCH '-mark susan' +---- +stmt 0 err 1 -1 61 no such table: email +==== fts3ac-1.9 + + SELECT rowid FROM email WHERE email MATCH 'mark OR susan' +---- +stmt 0 err 1 -1 63 no such table: email +==== fts3ac-2.1 + + SELECT rowid, offsets(email) FROM email + WHERE email MATCH 'gas reminder' +---- +stmt 0 err 1 -1 83 no such table: email +==== fts3ac-2.2 + + SELECT rowid, offsets(email) FROM email + WHERE email MATCH 'subject:gas reminder' +---- +stmt 0 err 1 -1 91 no such table: email +==== fts3ac-2.3 + + SELECT rowid, offsets(email) FROM email + WHERE email MATCH 'body:gas reminder' +---- +stmt 0 err 1 -1 88 no such table: email +==== fts3ac-2.4 + + SELECT rowid, offsets(email) FROM email + WHERE subject MATCH 'gas reminder' +---- +stmt 0 err 1 -1 85 no such table: email +==== fts3ac-2.5 + + SELECT rowid, offsets(email) FROM email + WHERE body MATCH 'gas reminder' +---- +stmt 0 err 1 -1 82 no such table: email +==== fts3ac-3.1 + + SELECT rowid, offsets(email) FROM email + WHERE body MATCH 'child product' AND +rowid=32 +---- +stmt 0 err 1 -1 97 no such table: email +==== fts3ac-3.2 + + SELECT rowid, offsets(email) FROM email + WHERE body MATCH '"child product"' +---- +stmt 0 err 1 -1 85 no such table: email +==== fts3ac-4.1 + + SELECT snippet(email) FROM email + WHERE email MATCH 'subject:gas reminder' +---- +stmt 0 err 1 -1 84 no such table: email +==== fts3ac-4.2 + + SELECT snippet(email) FROM email + WHERE email MATCH 'christmas candlelight' +---- +stmt 0 err 1 -1 85 no such table: email +==== fts3ac-4.3 + + SELECT snippet(email) FROM email + WHERE email MATCH 'deal sheet potential reuse' +---- +stmt 0 err 1 -1 90 no such table: email +==== fts3ac-4.4 + + SELECT snippet(email,'<<<','>>>',' ') FROM email + WHERE email MATCH 'deal sheet potential reuse' +---- +stmt 0 err 1 -1 106 no such table: email +==== fts3ac-4.5 + + SELECT snippet(email,'<<<','>>>',' ') FROM email + WHERE email MATCH 'first things' +---- +stmt 0 err 1 -1 92 no such table: email +==== fts3ac-4.6 + + SELECT snippet(email) FROM email + WHERE email MATCH 'chris is here' +---- +stmt 0 err 1 -1 77 no such table: email +==== fts3ac-4.7 + + SELECT snippet(email) FROM email + WHERE email MATCH '"pursuant to"' +---- +stmt 0 err 1 -1 77 no such table: email +==== fts3ac-4.8 + + SELECT snippet(email) FROM email + WHERE email MATCH 'ancillary load davis' +---- +stmt 0 err 1 -1 84 no such table: email +==== fts3ac-5.1 + + SELECT snippet(email) FROM email + WHERE email MATCH 'questar enron OR com' +---- +stmt 0 err 1 -1 84 no such table: email +==== fts3ac-5.2 + + SELECT snippet(email) FROM email + WHERE email MATCH 'enron OR com questar' +---- +stmt 0 err 1 -1 84 no such table: email +==== fts3ac-6.1 + + CREATE VIRTUAL TABLE ft USING fts3(one, two); + INSERT INTO ft VALUES('', 'foo'); + INSERT INTO ft VALUES('foo', 'foo'); + SELECT offsets(ft) FROM ft WHERE ft MATCH 'foo'; +---- +stmt 0 ok +stmt 50 err 1 -1 88 no such table: ft +stmt 88 err 1 -1 129 no such table: ft +stmt 129 err 1 -1 182 no such table: ft +==== fts3ac-6.2 + + DELETE FROM ft WHERE one = 'foo'; + SELECT offsets(ft) FROM ft WHERE ft MATCH 'foo'; +---- +stmt 0 err 1 -1 38 no such table: ft +stmt 38 err 1 -1 91 no such table: ft diff --git a/parser/testdata/fts3ad.metadata.json b/parser/testdata/fts3ad.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3ad.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3ad.test b/parser/testdata/fts3ad.test new file mode 100644 index 0000000..9d6e4d7 --- /dev/null +++ b/parser/testdata/fts3ad.test @@ -0,0 +1,95 @@ +==== fts3ad-1.1 + + CREATE VIRTUAL TABLE t1 USING fts3(content, tokenize porter); + INSERT INTO t1(rowid, content) VALUES(1, 'running and jumping'); + SELECT rowid FROM t1 WHERE content MATCH 'run jump'; +---- +stmt 0 ok +stmt 66 err 1 -1 135 no such table: t1 +stmt 135 err 1 -1 192 no such table: t1 +==== fts3ad-1.2 + + SELECT snippet(t1) FROM t1 WHERE t1 MATCH 'run jump'; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== fts3ad-1.3 + + INSERT INTO t1(rowid, content) + VALUES(2, 'abcdefghijklmnopqrstuvwyxz'); + SELECT rowid, snippet(t1) FROM t1 WHERE t1 MATCH 'abcdefghijqrstuvwyxz' +---- +stmt 0 err 1 -1 87 no such table: t1 +stmt 87 err 1 -1 164 no such table: t1 +==== fts3ad-1.4 + + SELECT rowid, snippet(t1) FROM t1 WHERE t1 MATCH 'abcdefghijXXXXqrstuvwyxz' +---- +stmt 0 err 1 -1 81 no such table: t1 +==== fts3ad-1.5 + + INSERT INTO t1(rowid, content) + VALUES(3, 'The value is 123456789'); + SELECT rowid, snippet(t1) FROM t1 WHERE t1 MATCH '123789' +---- +stmt 0 err 1 -1 83 no such table: t1 +stmt 83 err 1 -1 146 no such table: t1 +==== fts3ad-1.6 + + SELECT rowid, snippet(t1) FROM t1 WHERE t1 MATCH '123000000789' +---- +stmt 0 err 1 -1 69 no such table: t1 +==== fts3ad-2.1 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts3(content, tokenize porter); + INSERT INTO t1(rowid, content) VALUES(1, 'running and jumping'); + SELECT rowid FROM t1 WHERE content MATCH 'run jump'; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 88 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 214 no such table: t1 +==== fts3ad-2.2 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts3(content, tokenize= porter); + INSERT INTO t1(rowid, content) VALUES(1, 'running and jumping'); + SELECT rowid FROM t1 WHERE content MATCH 'run jump'; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 88 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 214 no such table: t1 +==== fts3ad-2.3 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts3(content, tokenize= simple); + INSERT INTO t1(rowid, content) VALUES(1, 'running and jumping'); + SELECT rowid FROM t1 WHERE content MATCH 'run jump'; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 88 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 214 no such table: t1 +==== fts3ad-2.4 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts3(content, tokenize= porter); + INSERT INTO t1(rowid, content) VALUES(1, 'running and jumping'); + SELECT rowid FROM t1 WHERE content MATCH 'run jump'; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 90 err 1 -1 159 no such table: t1 +stmt 159 err 1 -1 216 no such table: t1 +==== fts3ad-2.5 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts3(content, tokenize = porter); + INSERT INTO t1(rowid, content) VALUES(1, 'running and jumping'); + SELECT rowid FROM t1 WHERE content MATCH 'run jump'; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 92 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 218 no such table: t1 diff --git a/parser/testdata/fts3ae.metadata.json b/parser/testdata/fts3ae.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3ae.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3ae.test b/parser/testdata/fts3ae.test new file mode 100644 index 0000000..c20fdd2 --- /dev/null +++ b/parser/testdata/fts3ae.test @@ -0,0 +1,24 @@ +==== fts3ae-1.1 +SELECT COUNT(*) FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== fts3ae-2.1 +SELECT rowid FROM t1 WHERE content MATCH 'one' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== fts3ae-2.2 +SELECT rowid FROM t1 WHERE content MATCH 'two' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== fts3ae-2.3 +SELECT rowid FROM t1 WHERE content MATCH 'three' +---- +stmt 0 err 1 -1 49 no such table: t1 +==== fts3ae-2.4 +SELECT rowid FROM t1 WHERE content MATCH 'four' +---- +stmt 0 err 1 -1 48 no such table: t1 +==== fts3ae-2.5 +SELECT rowid FROM t1 WHERE content MATCH 'five' +---- +stmt 0 err 1 -1 48 no such table: t1 diff --git a/parser/testdata/fts3af.metadata.json b/parser/testdata/fts3af.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3af.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3af.test b/parser/testdata/fts3af.test new file mode 100644 index 0000000..4dcb057 --- /dev/null +++ b/parser/testdata/fts3af.test @@ -0,0 +1,28 @@ +==== fts3af-1.1 +SELECT COUNT(*) FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== fts3af-2.0 +SELECT rowid FROM t1 WHERE content MATCH 'update' +---- +stmt 0 err 1 -1 50 no such table: t1 +==== fts3af-2.1 +SELECT rowid FROM t1 WHERE content MATCH 'one' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== fts3af-2.2 +SELECT rowid FROM t1 WHERE content MATCH 'two' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== fts3af-2.3 +SELECT rowid FROM t1 WHERE content MATCH 'three' +---- +stmt 0 err 1 -1 49 no such table: t1 +==== fts3af-2.4 +SELECT rowid FROM t1 WHERE content MATCH 'four' +---- +stmt 0 err 1 -1 48 no such table: t1 +==== fts3af-2.5 +SELECT rowid FROM t1 WHERE content MATCH 'five' +---- +stmt 0 err 1 -1 48 no such table: t1 diff --git a/parser/testdata/fts3ag.metadata.json b/parser/testdata/fts3ag.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3ag.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3ag.test b/parser/testdata/fts3ag.test new file mode 100644 index 0000000..431c541 --- /dev/null +++ b/parser/testdata/fts3ag.test @@ -0,0 +1,52 @@ +==== fts3ag-1.1 +SELECT rowid FROM t1 WHERE t1 MATCH 'something' +---- +stmt 0 err 1 -1 48 no such table: t1 +==== fts3ag-1.2 +SELECT rowid FROM t1 WHERE t1 MATCH '-this something' +---- +stmt 0 err 1 -1 54 no such table: t1 +==== fts3ag-1.3 +SELECT rowid FROM t1 WHERE t1 MATCH 'this -something' +---- +stmt 0 err 1 -1 54 no such table: t1 +==== fts3ag-1.4 +SELECT rowid FROM t1 WHERE t1 MATCH '"this something"' +---- +stmt 0 err 1 -1 55 no such table: t1 +==== fts3ag-1.5 +SELECT rowid FROM t1 WHERE t1 MATCH '"something is"' +---- +stmt 0 err 1 -1 53 no such table: t1 +==== fts3ag-1.6 +SELECT rowid FROM t1 WHERE t1 MATCH 'something OR this' +---- +stmt 0 err 1 -1 56 no such table: t1 +==== fts3ag-1.7 +SELECT rowid FROM t1 WHERE t1 MATCH 'this OR something' +---- +stmt 0 err 1 -1 56 no such table: t1 +==== fts3ag-1.8 +SELECT rowid FROM t1 WHERE t1 MATCH 'something this' +---- +stmt 0 err 1 -1 53 no such table: t1 +==== fts3ag-1.9 +SELECT rowid FROM t1 WHERE t1 MATCH 'this something' +---- +stmt 0 err 1 -1 53 no such table: t1 +==== fts3ag-1.10 +SELECT rowid FROM t1 WHERE t1 MATCH '-this -something' +---- +stmt 0 err 1 -1 55 no such table: t1 +==== fts3ag-1.11 +SELECT rowid FROM t1 WHERE t1 MATCH 'this OR also' +---- +stmt 0 err 1 -1 51 no such table: t1 +==== fts3ag-1.12 +SELECT rowid FROM t1 WHERE t1 MATCH 'also OR this' +---- +stmt 0 err 1 -1 51 no such table: t1 +==== fts3ag-1.13 +SELECT rowid FROM t1 WHERE t1 MATCH 'something OR nothing' +---- +stmt 0 err 1 -1 59 no such table: t1 diff --git a/parser/testdata/fts3ah.metadata.json b/parser/testdata/fts3ah.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3ah.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3ah.test b/parser/testdata/fts3ah.test new file mode 100644 index 0000000..ff3444d --- /dev/null +++ b/parser/testdata/fts3ah.test @@ -0,0 +1,4 @@ +==== fts3ah-1.1 +SELECT rowid FROM t1 WHERE t1 MATCH 'something' +---- +stmt 0 err 1 -1 48 no such table: t1 diff --git a/parser/testdata/fts3ai.metadata.json b/parser/testdata/fts3ai.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3ai.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3ai.test b/parser/testdata/fts3ai.test new file mode 100644 index 0000000..7907b5a --- /dev/null +++ b/parser/testdata/fts3ai.test @@ -0,0 +1,4 @@ +==== fts3ai-1.0 +PRAGMA encoding +---- +stmt 0 ok diff --git a/parser/testdata/fts3aj.metadata.json b/parser/testdata/fts3aj.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3aj.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3aj.test b/parser/testdata/fts3aj.test new file mode 100644 index 0000000..05738de --- /dev/null +++ b/parser/testdata/fts3aj.test @@ -0,0 +1,26 @@ +==== fts3aj-1.1 + + ATTACH DATABASE 'test2.db' AS two; + SELECT rowid FROM t1 WHERE t1 MATCH 'hello'; + DETACH DATABASE two; +---- +stmt 0 ok +stmt 39 err 1 -1 88 no such table: t1 +stmt 88 ok +==== fts3aj-1.2 + + ATTACH DATABASE 'test2.db' AS two; + CREATE VIRTUAL TABLE two.t2 USING fts3(content); + INSERT INTO t2 (rowid, content) VALUES(1, 'hello world'); + INSERT INTO t2 (rowid, content) VALUES(2, 'hello there'); + INSERT INTO t2 (rowid, content) VALUES(3, 'cruel world'); + SELECT rowid FROM t2 WHERE t2 MATCH 'hello'; + DETACH DATABASE two; +---- +stmt 0 ok +stmt 39 err 1 65 83 unknown database two +stmt 92 err 1 -1 154 no such table: t2 +stmt 154 err 1 -1 216 no such table: t2 +stmt 216 err 1 -1 278 no such table: t2 +stmt 278 err 1 -1 327 no such table: t2 +stmt 327 ok diff --git a/parser/testdata/fts3ak.metadata.json b/parser/testdata/fts3ak.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3ak.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3ak.test b/parser/testdata/fts3ak.test new file mode 100644 index 0000000..9d2c29d --- /dev/null +++ b/parser/testdata/fts3ak.test @@ -0,0 +1,81 @@ +==== fts3ak-1.1 + + BEGIN TRANSACTION; + INSERT INTO t1 (rowid, content) VALUES(4, 'false world'); + INSERT INTO t1 (rowid, content) VALUES(5, 'false door'); + COMMIT TRANSACTION; + SELECT rowid FROM t1 WHERE t1 MATCH 'world'; +---- +stmt 0 ok +stmt 23 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 146 no such table: t1 +stmt 146 ok +stmt 170 err 1 -1 219 no such table: t1 +==== fts3ak-1.2 + + BEGIN TRANSACTION; + INSERT INTO t1 (rowid, content) VALUES(6, 'another world'); + INSERT INTO t1 (rowid, content) VALUES(7, 'another test'); + SELECT rowid FROM t1 WHERE t1 MATCH 'world'; + COMMIT TRANSACTION; +---- +stmt 0 ok +stmt 23 err 1 -1 87 no such table: t1 +stmt 87 err 1 -1 150 no such table: t1 +stmt 150 err 1 -1 199 no such table: t1 +stmt 199 ok +==== fts3ak-1.3 + + BEGIN TRANSACTION; + INSERT INTO t1 (rowid, content) VALUES(8, 'second world'); + INSERT INTO t1 (rowid, content) VALUES(9, 'second sight'); + SELECT rowid FROM t1 WHERE t1 MATCH 'world'; + ROLLBACK TRANSACTION; +---- +stmt 0 ok +stmt 23 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 198 no such table: t1 +stmt 198 ok +==== fts3ak-1.4 + + SELECT rowid FROM t1 WHERE t1 MATCH 'world'; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== fts3ak-1.5 + + BEGIN TRANSACTION; + INSERT INTO t1 (rowid, content) VALUES(10, 'second world'); + INSERT INTO t1 (rowid, content) VALUES(11, 'second sight'); + ROLLBACK TRANSACTION; + SELECT rowid FROM t1 WHERE t1 MATCH 'world'; +---- +stmt 0 ok +stmt 23 err 1 -1 87 no such table: t1 +stmt 87 err 1 -1 151 no such table: t1 +stmt 151 ok +stmt 177 err 1 -1 226 no such table: t1 +==== fts3ak-1.6 + + BEGIN; + INSERT INTO t1 (rowid, content) VALUES(12, 'third world'); + COMMIT; + SELECT rowid FROM t1 WHERE t1 MATCH 'third'; +---- +stmt 0 ok +stmt 11 err 1 -1 74 no such table: t1 +stmt 74 ok +stmt 86 err 1 -1 135 no such table: t1 +==== fts3ak-1.7 + + BEGIN; + INSERT INTO t1 (rowid, content) VALUES(13, 'third dimension'); + CREATE TABLE x (c); + COMMIT; + SELECT rowid FROM t1 WHERE t1 MATCH 'dimension'; +---- +stmt 0 ok +stmt 11 err 1 -1 78 no such table: t1 +stmt 78 ok +stmt 102 ok +stmt 114 err 1 -1 167 no such table: t1 diff --git a/parser/testdata/fts3al.metadata.json b/parser/testdata/fts3al.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3al.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3al.test b/parser/testdata/fts3al.test new file mode 100644 index 0000000..e1aefd3 --- /dev/null +++ b/parser/testdata/fts3al.test @@ -0,0 +1,4 @@ +==== fts3al-1.4 +SELECT rowid, length(snippet(t4)) FROM t4 WHERE t4 MATCH 'target' +---- +stmt 0 err 1 -1 66 no such table: t4 diff --git a/parser/testdata/fts3am.metadata.json b/parser/testdata/fts3am.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3am.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3am.test b/parser/testdata/fts3am.test new file mode 100644 index 0000000..581e3b1 --- /dev/null +++ b/parser/testdata/fts3am.test @@ -0,0 +1,33 @@ +==== fts3am-1.0 + + SELECT COUNT(col_a), COUNT(col_b), COUNT(*) FROM t1; +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3am-1.1 + + DELETE FROM t1 WHERE rowid = 1; + SELECT COUNT(col_a), COUNT(col_b), COUNT(*) FROM t1; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 93 no such table: t1 +==== fts3am-1.2 + + DELETE FROM t1 WHERE rowid = 2; + SELECT COUNT(col_a), COUNT(col_b), COUNT(*) FROM t1; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 93 no such table: t1 +==== fts3am-1.3 + + DELETE FROM t1 WHERE rowid = 3; + SELECT COUNT(col_a), COUNT(col_b), COUNT(*) FROM t1; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 93 no such table: t1 +==== fts3am-1.4 + + DELETE FROM t1 WHERE rowid = 4; + SELECT COUNT(col_a), COUNT(col_b), COUNT(*) FROM t1; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 93 no such table: t1 diff --git a/parser/testdata/fts3ao.metadata.json b/parser/testdata/fts3ao.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3ao.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3ao.test b/parser/testdata/fts3ao.test new file mode 100644 index 0000000..0e81202 --- /dev/null +++ b/parser/testdata/fts3ao.test @@ -0,0 +1,184 @@ +==== fts3ao-1.1 + + SELECT rowid, snippet(t1) FROM t1 WHERE c MATCH 'four'; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3ao-1.2 + + SELECT rowid, snippet(t1) FROM t1 WHERE b MATCH 'four'; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3ao-1.3 + + SELECT rowid, snippet(t1) FROM t1 WHERE a MATCH 'four'; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3ao-2.1 + SELECT tbl_name FROM sqlite_master WHERE type = 'table' +---- +stmt 0 ok +==== fts3ao-2.2 + ALTER TABLE t1 RENAME to fts_t1; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== fts3ao-2.3 + SELECT rowid, snippet(fts_t1) FROM fts_t1 WHERE a MATCH 'four'; +---- +stmt 0 err 1 -1 64 no such table: fts_t1 +==== fts3ao-2.4 + SELECT tbl_name FROM sqlite_master WHERE type = 'table' +---- +stmt 0 ok +==== fts3ao-2.5 + + CREATE TABLE t1_segdir(a, b, c); + ALTER TABLE fts_t1 RENAME to t1; +---- +stmt 0 ok +stmt 37 err 1 -1 74 no such table: fts_t1 +==== fts3ao-2.6 + SELECT rowid, snippet(fts_t1) FROM fts_t1 WHERE a MATCH 'four'; +---- +stmt 0 err 1 -1 64 no such table: fts_t1 +==== fts3ao-2.7 + SELECT tbl_name FROM sqlite_master WHERE type = 'table' +---- +stmt 0 ok +==== fts3ao-2.8 + + BEGIN; + INSERT INTO fts_t1(a, b, c) VALUES('one two three', 'one four', 'one two'); +---- +stmt 0 ok +stmt 11 err 1 -1 91 no such table: fts_t1 +==== fts3ao-2.9 + + ALTER TABLE fts_t1 RENAME to t1; +---- +stmt 0 err 1 -1 37 no such table: fts_t1 +==== fts3ao-2.10 + SELECT rowid, snippet( fts_t1 ) FROM fts_t1 WHERE a MATCH 'four'; +---- +stmt 0 err 1 -1 66 no such table: fts_t1 +==== fts3ao-2.11 + SELECT tbl_name FROM sqlite_master WHERE type = 'table' +---- +stmt 0 ok +==== fts3ao-2.12 + SELECT a, b, c FROM fts_t1 WHERE c MATCH 'four'; +---- +stmt 0 err 1 -1 49 no such table: fts_t1 +==== fts3ao-3.1 + + CREATE VIRTUAL TABLE t1 USING fts3(a, b, c); + INSERT INTO t1(a, b, c) VALUES('one three four', 'one four', 'one two'); + SELECT a, b, c FROM t1 WHERE c MATCH 'two'; +---- +stmt 0 ok +stmt 49 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 174 no such table: t1 +==== fts3ao-3.2 + + SELECT a, b, c FROM t1 WHERE c MATCH 'two'; + CREATE TABLE t3(a, b, c); + SELECT a, b, c FROM t1 WHERE c MATCH 'two'; +---- +stmt 0 err 1 -1 48 no such table: t1 +stmt 48 ok +stmt 78 err 1 -1 128 no such table: t1 +==== fts3ao-3.1.dup1 + + ATTACH 'test2.db' AS aux; + CREATE VIRTUAL TABLE aux.t1 USING fts3(a, b, c); + INSERT INTO aux.t1(a, b, c) VALUES( + 'neung song sahm', 'neung see', 'neung see song' + ); +---- +stmt 0 ok +stmt 30 err 1 56 74 unknown database aux +stmt 83 err 1 -1 185 no such table: aux.t1 +==== fts3ao-3.2.dup1 + SELECT a, b, c FROM aux.t1 WHERE a MATCH 'song'; +---- +stmt 0 err 1 -1 49 no such table: aux.t1 +==== fts3ao-3.3 + SELECT a, b, c FROM t1 WHERE c MATCH 'two'; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== fts3ao-3.4 + ALTER TABLE aux.t1 RENAME TO t2 +---- +stmt 0 err 1 -1 33 no such table: aux.t1 +==== fts3ao-3.2.dup2 + SELECT a, b, c FROM t2 WHERE a MATCH 'song'; +---- +stmt 0 err 1 -1 45 no such table: t2 +==== fts3ao-3.3.dup1 + SELECT a, b, c FROM t1 WHERE c MATCH 'two'; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== fts3ao-4.1 + + CREATE VIRTUAL TABLE t4 USING fts3; + INSERT INTO t4 VALUES('the quick brown fox'); +---- +stmt 0 ok +stmt 40 err 1 -1 90 no such table: t4 +==== fts3ao-4.2 + + BEGIN; + INSERT INTO t4 VALUES('jumped over the'); +---- +stmt 0 ok +stmt 11 err 1 -1 59 no such table: t4 +==== fts3ao-4.3 + ALTER TABLE t4 RENAME TO t5; +---- +stmt 0 err 1 -1 29 no such table: t4 +==== fts3ao-4.4 + INSERT INTO t5 VALUES('lazy dog'); +---- +stmt 0 err 1 -1 35 no such table: t5 +==== fts3ao-4.6 + SELECT * FROM t5 +---- +stmt 0 err 1 -1 18 no such table: t5 +==== fts3ao-4.7 + + BEGIN; + INSERT INTO t5 VALUES('Down came a jumbuck to drink at that billabong'); + ALTER TABLE t5 RENAME TO t6; + INSERT INTO t6 VALUES('Down came the troopers, one, two, three'); + ROLLBACK; + SELECT * FROM t5; +---- +stmt 0 ok +stmt 11 err 1 -1 90 no such table: t5 +stmt 90 err 1 -1 125 no such table: t5 +stmt 125 err 1 -1 197 no such table: t6 +stmt 197 ok +stmt 211 err 1 -1 233 no such table: t5 +==== 5.1 + + CREATE VIRTUAL TABLE t7 USING FTS4; + INSERT INTO t7 VALUES('coined by a German clinician'); + SELECT count(*) FROM sqlite_master WHERE name LIKE 't7%'; + SELECT count(*) FROM sqlite_master WHERE name LIKE 't8%'; +---- +stmt 0 ok +stmt 38 err 1 -1 95 no such table: t7 +stmt 95 ok +stmt 155 ok +==== 5.2 + + ALTER TABLE t7 RENAME TO t8; + SELECT count(*) FROM sqlite_master WHERE name LIKE 't7%'; + SELECT count(*) FROM sqlite_master WHERE name LIKE 't8%'; +---- +stmt 0 err 1 -1 31 no such table: t7 +stmt 31 ok +stmt 91 ok +==== fts3ao-generated + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 diff --git a/parser/testdata/fts3atoken.metadata.json b/parser/testdata/fts3atoken.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3atoken.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3atoken.test b/parser/testdata/fts3atoken.test new file mode 100644 index 0000000..ef5cdbe --- /dev/null +++ b/parser/testdata/fts3atoken.test @@ -0,0 +1,131 @@ +==== fts3atoken-1.1 + + CREATE VIRTUAL TABLE t1 USING fts3(content, tokenize blah); +---- +stmt 0 ok +==== fts3atoken-1.2 + + SELECT fts3_tokenizer('blah', fts3_tokenizer('simple')) IS NULL; +---- +stmt 0 err 1 12 69 no such function: fts3_tokenizer +==== fts3atoken-1.3 + + SELECT fts3_tokenizer('blah') == fts3_tokenizer('simple'); +---- +stmt 0 err 1 38 63 no such function: fts3_tokenizer +==== fts3atoken-1.4 + + CREATE VIRTUAL TABLE t1 USING fts3(content, tokenize blah); +---- +stmt 0 ok +==== fts3atoken-1.5 + + INSERT INTO t1(content) VALUES('There was movement at the station'); + INSERT INTO t1(content) VALUES('For the word has passed around'); + INSERT INTO t1(content) VALUES('That the colt from ol regret had got'); + SELECT content FROM t1 WHERE content MATCH 'movement' +---- +stmt 0 err 1 -1 73 no such table: t1 +stmt 73 err 1 -1 143 no such table: t1 +stmt 143 err 1 -1 219 no such table: t1 +stmt 219 err 1 -1 278 no such table: t1 +==== 1.6 + + SELECT fts3_tokenizer('blah', fts3_tokenizer('simple')) IS NULL; +---- +stmt 0 err 1 10 67 no such function: fts3_tokenizer +==== fts3atoken-1.10 + + CREATE VIEW v110(x) AS + SELECT fts3_tokenizer('tok110', fts3_tokenizer('simple')) IS NULL; +---- +stmt 0 ok +==== fts3atoken-1.11 + + SELECT * FROM v110; +---- +stmt 0 err 1 -1 22 no such table: v110 +==== fts3atoken-1.12 + + CREATE TABLE t110(a,b); + CREATE TRIGGER r110 AFTER INSERT ON t110 BEGIN + SELECT fts3_tokenizer('tok110', fts3_tokenizer('simple')) IS NULL; + END; +---- +stmt 0 ok +stmt 26 err 1 -1 75 no such table: main.t110 +==== fts3atoken-1.13 + + INSERT INTO t110(a,b) VALUES(1,2); +---- +stmt 0 err 1 -1 37 no such table: t110 +==== fts3atoken-1.14 + + SELECT * FROM t110; +---- +stmt 0 err 1 -1 22 no such table: t110 +==== fts3atoken-2.1 + + SELECT fts3_tokenizer('nosuchtokenizer'); +---- +stmt 0 err 1 12 46 no such function: fts3_tokenizer +==== fts3atoken-3.1 + + SELECT fts3_tokenizer_test('simple', 'I don''t see how'); +---- +stmt 0 err 1 12 62 no such function: fts3_tokenizer_test +==== fts3atoken-3.2 + + SELECT fts3_tokenizer_test('porter', 'I don''t see how'); +---- +stmt 0 err 1 12 62 no such function: fts3_tokenizer_test +==== fts3atoken-3.3 + + SELECT fts3_tokenizer_test('icu', 'I don''t see how'); +---- +stmt 0 err 1 14 61 no such function: fts3_tokenizer_test +==== 5.1 + + CREATE VIRTUAL TABLE x1 USING fts3(name,TOKENIZE icu en_US); + insert into x1 (name) values (NULL); + insert into x1 (name) values (NULL); + delete from x1; +---- +stmt 0 ok +stmt 65 err 1 -1 106 no such table: x1 +stmt 106 err 1 -1 147 no such table: x1 +stmt 147 err 1 -1 167 no such table: x1 +==== fts3atoken-internal + SELECT fts3_tokenizer_internal_test() +---- +stmt 0 err 1 8 39 no such function: fts3_tokenizer_internal_test +==== 6.1.1 + + CREATE VIRTUAL TABLE t3 USING fts4(tokenize=""); +---- +stmt 0 ok +==== 6.1.2 + + CREATE VIRTUAL TABLE t3 USING fts4(tokenize=); +---- +stmt 0 ok +==== 6.1.3 + + CREATE VIRTUAL TABLE t3 USING fts4(tokenize=" "); +---- +stmt 0 ok +==== 6.2.1 + + SELECT fts3_tokenizer(NULL); +---- +stmt 0 err 1 10 31 no such function: fts3_tokenizer +==== 6.2.2 + + SELECT fts3_tokenizer(NULL, X'1234567812345678'); +---- +stmt 0 err 1 10 52 no such function: fts3_tokenizer +==== 6.2.3 + + SELECT fts3_tokenizer(NULL, X'12345678'); +---- +stmt 0 err 1 10 44 no such function: fts3_tokenizer diff --git a/parser/testdata/fts3atoken2.metadata.json b/parser/testdata/fts3atoken2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3atoken2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3atoken2.test b/parser/testdata/fts3atoken2.test new file mode 100644 index 0000000..352cc92 --- /dev/null +++ b/parser/testdata/fts3atoken2.test @@ -0,0 +1,30 @@ +==== 1.1.1 + + SELECT typeof( fts3_tokenizer('simple') ); +---- +stmt 0 err 1 18 45 no such function: fts3_tokenizer +==== 1.2.2 + + CREATE VIRTUAL TABLE x1 USING fts3(col, tokenize=mytok); +---- +stmt 0 ok +==== 1.2.4 + + CREATE VIRTUAL TABLE x1 USING fts3(col, tokenize=mytok); +---- +stmt 0 ok +==== 1.3.1 + + SELECT typeof( fts3_tokenizer('simple') ); +---- +stmt 0 err 1 18 45 no such function: fts3_tokenizer +==== 1.4.2 + + CREATE VIRTUAL TABLE x2 USING fts3(col, tokenize=mytok2); +---- +stmt 0 ok +==== 1.4.4 + + CREATE VIRTUAL TABLE x3 USING fts3(col, tokenize=mytok3); +---- +stmt 0 ok diff --git a/parser/testdata/fts3auto.metadata.json b/parser/testdata/fts3auto.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3auto.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3auto.test b/parser/testdata/fts3auto.test new file mode 100644 index 0000000..e9e541c --- /dev/null +++ b/parser/testdata/fts3auto.test @@ -0,0 +1,26 @@ +==== fts3auto-generated + + INSERT INTO t1(docid, x) VALUES(-2, 'a b c d e f g h i j k'); + INSERT INTO t1(docid, x) VALUES(-1, 'b c d e f g h i j k a'); + INSERT INTO t1(docid, x) VALUES(0, 'c d e f g h i j k a b'); + INSERT INTO t1(docid, x) VALUES(1, 'd e f g h i j k a b c'); + INSERT INTO t1(docid, x) VALUES(2, 'e f g h i j k a b c d'); + INSERT INTO t1(docid, x) VALUES(3, 'f g h i j k a b c d e'); + INSERT INTO t1(docid, x) VALUES(4, 'a c e g i k'); + INSERT INTO t1(docid, x) VALUES(5, 'a d g j'); + INSERT INTO t1(docid, x) VALUES(6, 'c a b'); +---- +stmt 0 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 132 no such table: t1 +stmt 132 err 1 -1 197 no such table: t1 +stmt 197 err 1 -1 262 no such table: t1 +stmt 262 err 1 -1 327 no such table: t1 +stmt 327 err 1 -1 392 no such table: t1 +stmt 392 err 1 -1 447 no such table: t1 +stmt 447 err 1 -1 498 no such table: t1 +stmt 498 err 1 -1 547 no such table: t1 +==== fts3auto-generated.dup1 + + SELECT docid FROM t1 WHERE t1 MATCH 'on* NEAR/3 fi*' +---- +stmt 0 err 1 -1 60 no such table: t1 diff --git a/parser/testdata/fts3aux1.metadata.json b/parser/testdata/fts3aux1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3aux1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3aux1.test b/parser/testdata/fts3aux1.test new file mode 100644 index 0000000..340f04a --- /dev/null +++ b/parser/testdata/fts3aux1.test @@ -0,0 +1,383 @@ +==== 1.1 + + CREATE VIRTUAL TABLE t1 USING fts4; + INSERT INTO t1 VALUES('one two three four'); + INSERT INTO t1 VALUES('three four five six'); + INSERT INTO t1 VALUES('one three five seven'); + + CREATE VIRTUAL TABLE terms USING fts4aux(t1); + SELECT term, documents, occurrences FROM terms WHERE col = '*'; +---- +stmt 0 ok +stmt 38 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 133 no such table: t1 +stmt 133 err 1 -1 182 no such table: t1 +stmt 182 ok +stmt 231 err 1 -1 297 no such table: terms +==== 1.2 + + INSERT INTO t1 VALUES('one one one three three three'); + SELECT term, documents, occurrences FROM terms WHERE col = '*'; +---- +stmt 0 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 124 no such table: terms +==== 1.3.1 + DELETE FROM t1; +---- +stmt 0 err 1 -1 16 no such table: t1 +==== 1.3.2 + + SELECT term, documents, occurrences FROM terms WHERE col = '*'; +---- +stmt 0 err 1 -1 66 no such table: terms +==== 1.4 + + INSERT INTO t1 VALUES('a b a b a b a'); + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + SELECT term, documents, occurrences FROM terms WHERE col = '*'; +---- +stmt 0 err 1 -1 42 no such table: t1 +stmt 42 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 147 no such table: t1 +stmt 147 err 1 -1 182 no such table: t1 +stmt 182 err 1 -1 217 no such table: t1 +stmt 217 err 1 -1 252 no such table: t1 +stmt 252 err 1 -1 287 no such table: t1 +stmt 287 err 1 -1 322 no such table: t1 +stmt 322 err 1 -1 388 no such table: terms +==== 2.0 + + DROP TABLE t1; + DROP TABLE terms; + + CREATE VIRTUAL TABLE x1 USING fts4(x); + INSERT INTO x1(x1) VALUES('nodesize=24'); + CREATE VIRTUAL TABLE terms USING fts4aux(x1); + + CREATE VIEW terms_v AS + SELECT term, documents, occurrences FROM terms WHERE col = '*'; + + INSERT INTO x1 VALUES('braes brag bragged bragger bragging'); + INSERT INTO x1 VALUES('brags braid braided braiding braids'); + INSERT INTO x1 VALUES('brain brainchild brained braining brains'); + INSERT INTO x1 VALUES('brainstem brainstems brainstorm brainstorms'); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 37 no such table: terms +stmt 37 ok +stmt 79 err 1 -1 123 no such table: x1 +stmt 123 ok +stmt 171 ok +stmt 264 err 1 -1 329 no such table: x1 +stmt 329 err 1 -1 393 no such table: x1 +stmt 393 err 1 -1 462 no such table: x1 +stmt 462 err 1 -1 534 no such table: x1 +==== 2.1.1.1 + + EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term='braid' +---- +stmt 0 err 1 -1 61 no such table: terms +==== 2.1.1.2 + + EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term='braid' +---- +stmt 0 err 1 -1 62 no such table: terms +==== 2.1.4.1 + SELECT * FROM terms_v WHERE term='braid' +---- +stmt 0 err 1 -1 42 no such table: terms_v +==== 2.1.4.2 + SELECT * FROM terms_v WHERE +term='braid' +---- +stmt 0 err 1 -1 43 no such table: terms_v +==== 2.1.4.3 + SELECT * FROM terms_v WHERE term='breakfast' +---- +stmt 0 err 1 -1 46 no such table: terms_v +==== 2.1.4.4 + SELECT * FROM terms_v WHERE +term='breakfast' +---- +stmt 0 err 1 -1 47 no such table: terms_v +==== 2.1.4.5 + SELECT * FROM terms_v WHERE term='cba' +---- +stmt 0 err 1 -1 40 no such table: terms_v +==== 2.1.4.6 + SELECT * FROM terms_v WHERE +term='cba' +---- +stmt 0 err 1 -1 41 no such table: terms_v +==== 2.1.4.7 + SELECT * FROM terms_v WHERE term='abc' +---- +stmt 0 err 1 -1 40 no such table: terms_v +==== 2.1.4.8 + SELECT * FROM terms_v WHERE +term='abc' +---- +stmt 0 err 1 -1 41 no such table: terms_v +==== 2.1.5 + SELECT * FROM terms WHERE term=NULL +---- +stmt 0 err 1 -1 37 no such table: terms +==== 2.2.1.1 + + EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term>'brain' +---- +stmt 0 err 1 -1 61 no such table: terms +==== 2.2.1.2 + + EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term>'brain' +---- +stmt 0 err 1 -1 62 no such table: terms +==== 2.2.1.3 + + EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term<'brain' +---- +stmt 0 err 1 -1 61 no such table: terms +==== 2.2.1.4 + + EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term<'brain' +---- +stmt 0 err 1 -1 62 no such table: terms +==== 2.2.1.5 + + EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term BETWEEN 'brags' AND 'brain' +---- +stmt 0 err 1 -1 81 no such table: terms +==== 2.2.1.6 + + EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term BETWEEN 'brags' AND 'brain' +---- +stmt 0 err 1 -1 82 no such table: terms +==== 2.2.2.3 + + SELECT term, documents, occurrences FROM terms_v WHERE term>'brain' +---- +stmt 0 err 1 -1 71 no such table: terms_v +==== 2.2.2.4 + + SELECT term, documents, occurrences FROM terms_v WHERE +term>'brain' +---- +stmt 0 err 1 -1 72 no such table: terms_v +==== 2.2.2.5 + + SELECT term, documents, occurrences FROM terms_v WHERE term>='brain' +---- +stmt 0 err 1 -1 72 no such table: terms_v +==== 2.2.2.6 + + SELECT term, documents, occurrences FROM terms_v WHERE +term>='brain' +---- +stmt 0 err 1 -1 73 no such table: terms_v +==== 2.2.2.7 + + SELECT term, documents, occurrences FROM terms_v WHERE term>='abc' +---- +stmt 0 err 1 -1 70 no such table: terms_v +==== 2.2.2.8 + + SELECT term, documents, occurrences FROM terms_v WHERE +term>='abc' +---- +stmt 0 err 1 -1 71 no such table: terms_v +==== 2.2.2.9 + + SELECT term, documents, occurrences FROM terms_v WHERE term>='brainstorms' +---- +stmt 0 err 1 -1 78 no such table: terms_v +==== 2.2.2.10 + + SELECT term, documents, occurrences FROM terms_v WHERE term>='brainstorms' +---- +stmt 0 err 1 -1 78 no such table: terms_v +==== 2.2.2.11 + SELECT * FROM terms_v WHERE term>'brainstorms' +---- +stmt 0 err 1 -1 48 no such table: terms_v +==== 2.2.2.12 + SELECT * FROM terms_v WHERE term>'brainstorms' +---- +stmt 0 err 1 -1 48 no such table: terms_v +==== 2.2.2.13 + SELECT * FROM terms_v WHERE term>'cba' +---- +stmt 0 err 1 -1 40 no such table: terms_v +==== 2.2.2.14 + SELECT * FROM terms_v WHERE term>'cba' +---- +stmt 0 err 1 -1 40 no such table: terms_v +==== 2.2.3.3 + + SELECT term, documents, occurrences FROM terms_v WHERE term<'brain' +---- +stmt 0 err 1 -1 71 no such table: terms_v +==== 2.2.3.4 + + SELECT term, documents, occurrences FROM terms_v WHERE +term<'brain' +---- +stmt 0 err 1 -1 72 no such table: terms_v +==== 2.2.3.5 + + SELECT term, documents, occurrences FROM terms_v WHERE term<='brain' +---- +stmt 0 err 1 -1 72 no such table: terms_v +==== 2.2.3.6 + + SELECT term, documents, occurrences FROM terms_v WHERE +term<='brain' +---- +stmt 0 err 1 -1 73 no such table: terms_v +==== 2.2.4.3 + + SELECT term, documents, occurrences FROM terms_v + WHERE rec('cnt', term) AND term BETWEEN 'brags' AND 'brain' +---- +stmt 0 err 1 -1 115 no such table: terms_v +==== 2.2.4.4 + + SELECT term, documents, occurrences FROM terms_v + WHERE rec('cnt', term) AND +term BETWEEN 'brags' AND 'brain' +---- +stmt 0 err 1 -1 116 no such table: terms_v +==== 2.2.4.5 + + SELECT term, documents, occurrences FROM terms_v + WHERE rec('cnt', term) AND term > 'brags' AND term < 'brain' +---- +stmt 0 err 1 -1 116 no such table: terms_v +==== 2.2.4.6 + + SELECT term, documents, occurrences FROM terms_v + WHERE rec('cnt', term) AND +term > 'brags' AND +term < 'brain' +---- +stmt 0 err 1 -1 118 no such table: terms_v +==== 3.1.1 + + CREATE VIRTUAL TABLE t2 USING fts4; +---- +stmt 0 ok +==== 3.1.2 + + CREATE VIRTUAL TABLE terms2 USING fts4aux; +---- +stmt 0 ok +==== 3.1.3 + + CREATE VIRTUAL TABLE terms2 USING fts4aux(t2, t2); +---- +stmt 0 ok +==== 3.2.1 + + CREATE VIRTUAL TABLE terms3 USING fts4aux(does_not_exist) +---- +stmt 0 ok +==== 3.2.2 + + SELECT * FROM terms3 +---- +stmt 0 err 1 -1 24 no such table: terms3 +==== 3.2.3 + + SELECT * FROM terms3 WHERE term = 'abc' +---- +stmt 0 err 1 -1 43 no such table: terms3 +==== 3.3.1 + + INSERT INTO terms VALUES(1,2,3); +---- +stmt 0 err 1 -1 35 no such table: terms +==== 3.3.2 + + DELETE FROM terms +---- +stmt 0 err 1 -1 21 no such table: terms +==== 3.3.3 + + UPDATE terms set documents = documents+1; +---- +stmt 0 err 1 -1 44 no such table: terms +==== 4.1 + + CREATE VIRTUAL TABLE x1 USING fts4(x); + CREATE VIRTUAL TABLE terms USING fts4aux(x1); + CREATE TABLE x2(y); + CREATE TABLE x3(y); + CREATE INDEX i1 ON x3(y); + + INSERT INTO x1 VALUES('a b c d e'); + INSERT INTO x1 VALUES('f g h i j'); + INSERT INTO x1 VALUES('k k l l a'); + + INSERT INTO x2 SELECT term FROM terms WHERE col = '*'; + INSERT INTO x3 SELECT term FROM terms WHERE col = '*'; +---- +stmt 0 ok +stmt 41 ok +stmt 89 ok +stmt 111 ok +stmt 133 err 1 -1 161 no such table: main.x3 +stmt 161 err 1 -1 200 no such table: x1 +stmt 200 err 1 -1 238 no such table: x1 +stmt 238 err 1 -1 276 no such table: x1 +stmt 276 err 1 -1 334 no such table: x2 +stmt 334 err 1 -1 391 no such table: x3 +==== 5.1 + + CREATE VIRTUAL TABLE "abc '!' def" USING fts4(x, y); + INSERT INTO "abc '!' def" VALUES('XX', 'YY'); + + CREATE VIRTUAL TABLE terms3 USING fts4aux("abc '!' def"); + SELECT * FROM terms3; +---- +stmt 0 ok +stmt 55 err 1 -1 103 no such table: abc '!' def +stmt 103 ok +stmt 164 err 1 -1 188 no such table: terms3 +==== 5.2 + + CREATE VIRTUAL TABLE "%%^^%%" USING fts4aux('abc ''!'' def'); + SELECT * FROM "%%^^%%"; +---- +stmt 0 ok +stmt 64 err 1 -1 90 no such table: %%^^%% +==== 6.1 + + CREATE VIRTUAL TABLE ft1 USING fts4(x, y); + INSERT INTO ft1 VALUES('a b', 'c d'); + INSERT INTO ft1 VALUES('e e', 'c d'); + INSERT INTO ft1 VALUES('a a', 'b b'); + CREATE VIRTUAL TABLE temp.aux1 USING fts4aux(main, ft1); + SELECT * FROM aux1; +---- +stmt 0 ok +stmt 45 err 1 -1 85 no such table: ft1 +stmt 85 err 1 -1 125 no such table: ft1 +stmt 125 err 1 -1 165 no such table: ft1 +stmt 165 ok +stmt 224 err 1 -1 246 no such table: aux1 +==== 6.2 + + ATTACH 'test.db2' AS att; + CREATE VIRTUAL TABLE att.ft1 USING fts4(x, y); + INSERT INTO att.ft1 VALUES('v w', 'x y'); + INSERT INTO att.ft1 VALUES('z z', 'x y'); + INSERT INTO att.ft1 VALUES('v v', 'w w'); + CREATE VIRTUAL TABLE temp.aux2 USING fts4aux(att, ft1); + SELECT * FROM aux2; +---- +stmt 0 ok +stmt 28 err 1 52 71 unknown database att +stmt 77 err 1 -1 121 no such table: att.ft1 +stmt 121 err 1 -1 165 no such table: att.ft1 +stmt 165 err 1 -1 209 no such table: att.ft1 +stmt 209 ok +stmt 267 err 1 -1 289 no such table: aux2 +==== 8.1 + CREATE VIRTUAL TABLE att.aux3 USING fts4aux(main, ft1) +---- +stmt 0 err 1 22 45 unknown database att diff --git a/parser/testdata/fts3aux2.metadata.json b/parser/testdata/fts3aux2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3aux2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3aux2.test b/parser/testdata/fts3aux2.test new file mode 100644 index 0000000..17a8779 --- /dev/null +++ b/parser/testdata/fts3aux2.test @@ -0,0 +1,142 @@ +==== 1.1 + + CREATE VIRTUAL TABLE t1 USING fts4(a, b, languageid=l); + INSERT INTO t1(a, b, l) VALUES + ('zero zero', 'zero zero', 0), + ('one two', 'three four', 1), + ('five six', 'seven eight', 2) + ; + CREATE VIRTUAL TABLE terms USING fts4aux(t1); +---- +stmt 0 ok +stmt 58 err 1 -1 199 no such table: t1 +stmt 199 ok +==== 1.2.1 + + SELECT term, documents, occurrences, languageid FROM terms WHERE col = '*'; +---- +stmt 0 err 1 -1 78 no such table: terms +==== 1.2.2 + + SELECT * FROM terms; +---- +stmt 0 err 1 -1 23 no such table: terms +==== 1.2.3 + + SELECT * FROM terms WHERE languageid=''; +---- +stmt 0 err 1 -1 43 no such table: terms +==== 1.2.4 + + SELECT * FROM terms WHERE languageid=-1; +---- +stmt 0 err 1 -1 43 no such table: terms +==== 1.2.5 + + SELECT * FROM terms WHERE languageid=9223372036854775807; +---- +stmt 0 err 1 -1 60 no such table: terms +==== 1.2.6 + + SELECT * FROM terms WHERE languageid=-9223372036854775808; +---- +stmt 0 err 1 -1 61 no such table: terms +==== 1.2.7 + + SELECT * FROM terms WHERE languageid=NULL; +---- +stmt 0 err 1 -1 45 no such table: terms +==== 1.3.1 + + SELECT term, documents, occurrences, languageid + FROM terms WHERE col = '*' AND languageid=1; +---- +stmt 0 err 1 -1 98 no such table: terms +==== 1.3.2 + + SELECT term, col, documents, occurrences, languageid + FROM terms WHERE languageid=1; +---- +stmt 0 err 1 -1 89 no such table: terms +==== 1.3.3 + + SELECT term, col, documents, occurrences, languageid + FROM terms WHERE languageid=1 AND term='zero' +---- +stmt 0 err 1 -1 105 no such table: terms +==== 1.3.4 + + SELECT term, col, documents, occurrences, languageid + FROM terms WHERE languageid='1' AND term='two' +---- +stmt 0 err 1 -1 106 no such table: terms +==== 1.3.5 + + SELECT term, col, documents, occurrences, languageid + FROM terms WHERE languageid='+1' AND term>'four' +---- +stmt 0 err 1 -1 108 no such table: terms +==== 1.4.1 + + SELECT term, documents, occurrences, languageid + FROM terms WHERE col = '*' AND languageid=2; +---- +stmt 0 err 1 -1 98 no such table: terms +==== 1.4.2 + + SELECT term, col, documents, occurrences, languageid + FROM terms WHERE languageid=2; +---- +stmt 0 err 1 -1 89 no such table: terms +==== 1.4.3 + + SELECT term, col, documents, occurrences, languageid + FROM terms WHERE languageid=2 AND term='five'; +---- +stmt 0 err 1 -1 105 no such table: terms +==== 1.4.4 + + SELECT term, col, documents, occurrences, languageid + FROM terms WHERE term='five' AND languageid=2 +---- +stmt 0 err 1 -1 105 no such table: terms +==== 1.4.5 + + SELECT term, col, documents, occurrences, languageid + FROM terms WHERE term>='seven' AND languageid=2 +---- +stmt 0 err 1 -1 107 no such table: terms +==== 1.4.6 + + SELECT term, col, documents, occurrences, languageid + FROM terms WHERE term>='e' AND term<'seven' AND languageid=2 +---- +stmt 0 err 1 -1 120 no such table: terms +==== 2.0 + + CREATE VIRTUAL TABLE ft USING fts3(); + INSERT INTO ft VALUES('a_234567890123456789'); + INSERT INTO ft VALUES('b_234567890123456789'); + INSERT INTO ft VALUES('c_234567890123456789'); + CREATE VIRTUAL TABLE t2 USING fts4aux(ft); +---- +stmt 0 ok +stmt 40 err 1 -1 89 no such table: ft +stmt 89 err 1 -1 138 no such table: ft +stmt 138 err 1 -1 187 no such table: ft +stmt 187 ok +==== 2.1 + + SELECT term FROM t2 WHERE term=X'625f323334353637383930313233343536373839'; +---- +stmt 0 err 1 -1 78 no such table: t2 +==== 2.2 + + SELECT term FROM t2 WHERE term docid; +---- +stmt 0 err 1 -1 47 no such table: t4 +==== fts3b-4.2 + + SELECT * FROM t4 WHERE rowid = 1; +---- +stmt 0 err 1 -1 38 no such table: t4 +==== fts3b-4.3 + + SELECT docid, * FROM t4 WHERE rowid = 1; +---- +stmt 0 err 1 -1 45 no such table: t4 +==== fts3b-4.4 + + SELECT docid, * FROM t4 WHERE docid = 1; +---- +stmt 0 err 1 -1 45 no such table: t4 +==== fts3b-4.5 + + INSERT INTO t4 VALUES ('another test'); +---- +stmt 0 err 1 -1 44 no such table: t4 +==== fts3b-4.6 + + INSERT INTO t4 (docid, c) VALUES (10, 'yet another test'); + SELECT * FROM t4 WHERE docid = 10; +---- +stmt 0 err 1 -1 63 no such table: t4 +stmt 63 err 1 -1 102 no such table: t4 +==== fts3b-4.7 + + INSERT INTO t4 (docid, c) VALUES (12, 'still testing'); + SELECT * FROM t4 WHERE docid = 12; +---- +stmt 0 err 1 -1 60 no such table: t4 +stmt 60 err 1 -1 99 no such table: t4 +==== fts3b-4.8 + + INSERT INTO t4 (rowid, docid, c) VALUES (14, 15, 'bad test'); + SELECT * FROM t4 WHERE docid = 14; +---- +stmt 0 err 1 -1 66 no such table: t4 +stmt 66 err 1 -1 105 no such table: t4 +==== fts3b-4.9 + SELECT docid FROM t4 WHERE t4 MATCH 'testing' +---- +stmt 0 err 1 -1 47 no such table: t4 +==== fts3b-4.10 + + UPDATE t4 SET docid = 14 WHERE docid = 12; + SELECT docid FROM t4 WHERE t4 MATCH 'testing'; +---- +stmt 0 err 1 -1 48 no such table: t4 +stmt 48 err 1 -1 99 no such table: t4 +==== fts3b-4.11 + SELECT * FROM t4 WHERE rowid = 14; +---- +stmt 0 err 1 -1 35 no such table: t4 +==== fts3b-4.12 + SELECT * FROM t4 WHERE rowid = 12; +---- +stmt 0 err 1 -1 35 no such table: t4 +==== fts3b-4.13 + SELECT docid FROM t4 WHERE t4 MATCH 'still'; +---- +stmt 0 err 1 -1 45 no such table: t4 diff --git a/parser/testdata/fts3c.metadata.json b/parser/testdata/fts3c.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3c.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3c.test b/parser/testdata/fts3c.test new file mode 100644 index 0000000..06a6d81 --- /dev/null +++ b/parser/testdata/fts3c.test @@ -0,0 +1,44 @@ +==== fts3c-1.0.segments + + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 58 no such table: t1_segdir +==== fts3c-1.0.matches + + SELECT OFFSETS(t1) FROM t1 + WHERE t1 MATCH 'this OR that OR was OR a OR is OR test' ORDER BY docid; +---- +stmt 0 err 1 -1 108 no such table: t1 +==== fts3c-1.1.segments + + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 58 no such table: t1_segdir +==== fts3c-1.1.matches + + SELECT OFFSETS(t1) FROM t1 + WHERE t1 MATCH 'this OR that OR was OR a OR is OR test' ORDER BY docid; +---- +stmt 0 err 1 -1 108 no such table: t1 +==== fts3c-1.2.segments + + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 58 no such table: t1_segdir +==== fts3c-1.2.matches + + SELECT OFFSETS(t1) FROM t1 + WHERE t1 MATCH 'this OR that OR was OR a OR is OR test' ORDER BY docid; +---- +stmt 0 err 1 -1 108 no such table: t1 +==== fts3c-1.3.segments + + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 58 no such table: t1_segdir +==== fts3c-1.3.matches + + SELECT OFFSETS(t1) FROM t1 + WHERE t1 MATCH 'this OR that OR was OR a OR is OR test' ORDER BY docid; +---- +stmt 0 err 1 -1 108 no such table: t1 diff --git a/parser/testdata/fts3comp1.metadata.json b/parser/testdata/fts3comp1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3comp1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3comp1.test b/parser/testdata/fts3comp1.test new file mode 100644 index 0000000..bfe69eb --- /dev/null +++ b/parser/testdata/fts3comp1.test @@ -0,0 +1,124 @@ +==== fts3comp1-generated + + INSERT INTO t1 VALUES('one two three', 'two four six'); + SELECT a, b FROM t1; +---- +stmt 0 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 85 no such table: t1 +==== fts3comp1-generated.dup1 + + SELECT c0a, c1b FROM t1_content; +---- +stmt 0 err 1 -1 37 no such table: t1_content +==== fts3comp1-generated.dup2 + + INSERT INTO t1 VALUES('three six nine', 'four eight twelve'); + SELECT a, b FROM t1; +---- +stmt 0 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 91 no such table: t1 +==== fts3comp1-generated.dup3 + + SELECT c0a, c1b FROM t1_content; +---- +stmt 0 err 1 -1 37 no such table: t1_content +==== fts3comp1-generated.dup4 + + SELECT a, b FROM t1 WHERE docid = 2 +---- +stmt 0 err 1 -1 41 no such table: t1 +==== fts3comp1-generated.dup5 + + SELECT a, b FROM t1 WHERE t1 MATCH 'two' +---- +stmt 0 err 1 -1 46 no such table: t1 +==== fts3comp1-generated.dup6 + + CREATE VIRTUAL TABLE terms USING fts4aux(t1); + SELECT term, documents, occurrences FROM terms WHERE col = '*'; +---- +stmt 0 ok +stmt 50 err 1 -1 118 no such table: terms +==== fts3comp1-generated.dup7 + + DELETE FROM t1 WHERE docid = 1; + SELECT term, documents, occurrences FROM terms WHERE col = '*'; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 104 no such table: terms +==== fts3comp1-generated.dup8 + SELECT c0a, c1b FROM t1_content +---- +stmt 0 err 1 -1 33 no such table: t1_content +==== 2.1 + + CREATE VIRTUAL TABLE t2 USING fts4(x, compress=zip) +---- +stmt 0 ok +==== 2.2 + + CREATE VIRTUAL TABLE t2 USING fts4(x, uncompress=unzip) +---- +stmt 0 ok +==== 3.0 + + PRAGMA trusted_schema = OFF; +---- +stmt 0 ok +==== 3.1 + + CREATE VIEW v1 AS SELECT myfunc('xyz'); +---- +stmt 0 ok +==== 3.2 + + SELECT * FROM v1 +---- +stmt 0 err 1 -1 20 no such table: v1 +==== 3.3 + + CREATE VIRTUAL TABLE f1 USING fts4(x, compress=myfunc, uncompress=myfunc); +---- +stmt 0 ok +==== 3.4 + + INSERT INTO f1(rowid, x) VALUES(123, 'one two three'); +---- +stmt 0 err 1 -1 57 no such table: f1 +==== 3.6.1 + + CREATE TABLE t1(x); + CREATE TABLE t2(y); + + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES( myfunc(new.x) ); + END; +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 91 no such table: main.t1 +==== 3.6.2 + + INSERT INTO t1 VALUES('hello world'); +---- +stmt 0 err 1 -1 40 no such table: t1 +==== 4.0 + + CREATE VIRTUAL TABLE v1 USING fts4(x, compress=comp, uncompress=uncomp); +---- +stmt 0 ok +==== 4.1 + + INSERT INTO v1 VALUES('one two three'); +---- +stmt 0 err 1 -1 42 no such table: v1 +==== 4.2 + + INSERT INTO v1 VALUES('one two three'); +---- +stmt 0 err 1 -1 42 no such table: v1 +==== 4.3 + + SELECT * FROM v1 +---- +stmt 0 err 1 -1 20 no such table: v1 diff --git a/parser/testdata/fts3conf.metadata.json b/parser/testdata/fts3conf.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3conf.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3conf.test b/parser/testdata/fts3conf.test new file mode 100644 index 0000000..37185f7 --- /dev/null +++ b/parser/testdata/fts3conf.test @@ -0,0 +1,226 @@ +==== 1.0.1 + + CREATE VIRTUAL TABLE t1 USING fts3(x); + INSERT INTO t1(rowid, x) VALUES(1, 'a b c d'); + INSERT INTO t1(rowid, x) VALUES(2, 'e f g h'); + + CREATE TABLE source(a, b); + INSERT INTO source VALUES(4, 'z'); + INSERT INTO source VALUES(2, 'y'); +---- +stmt 0 ok +stmt 41 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 139 no such table: t1 +stmt 139 ok +stmt 169 err 1 -1 206 no such table: source +stmt 206 err 1 -1 243 no such table: source +==== fts3conf-generated + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 2.1.1 + + DELETE FROM t1; + BEGIN; + INSERT INTO t1 VALUES('a b c'); + SAVEPOINT a; + INSERT INTO t1 VALUES('x y z'); + ROLLBACK TO a; + COMMIT; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 ok +stmt 27 err 1 -1 63 no such table: t1 +stmt 63 ok +stmt 80 err 1 -1 118 no such table: t1 +stmt 118 ok +stmt 137 ok +==== 2.2.1 + + DELETE FROM t1; + BEGIN; + INSERT INTO t1(docid, x) VALUES(0, 'a b c'); + INSERT INTO t1(docid, x) VALUES(1, 'a b c'); + REPLACE INTO t1(docid, x) VALUES('zero', 'd e f'); +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 ok +stmt 27 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 180 no such table: t1 +==== 2.2.2 + COMMIT +---- +stmt 0 ok +==== 2.2.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 3.1 + + CREATE VIRTUAL TABLE t3 USING fts4; + REPLACE INTO t3(docid, content) VALUES (1, 'one two'); + SELECT quote(matchinfo(t3, 'na')) FROM t3 WHERE t3 MATCH 'one' +---- +stmt 0 ok +stmt 40 err 1 -1 99 no such table: t3 +stmt 99 err 1 -1 167 no such table: t3 +==== 3.2 + + REPLACE INTO t3(docid, content) VALUES (2, 'one two three four'); + SELECT quote(matchinfo(t3, 'na')) FROM t3 WHERE t3 MATCH 'four' +---- +stmt 0 err 1 -1 70 no such table: t3 +stmt 70 err 1 -1 139 no such table: t3 +==== 3.3 + + REPLACE INTO t3(docid, content) VALUES (1, 'one two three four five six'); + SELECT quote(matchinfo(t3, 'na')) FROM t3 WHERE t3 MATCH 'six' +---- +stmt 0 err 1 -1 79 no such table: t3 +stmt 79 err 1 -1 147 no such table: t3 +==== 3.4 + + UPDATE OR REPLACE t3 SET docid = 2 WHERE docid=1; + SELECT quote(matchinfo(t3, 'na')) FROM t3 WHERE t3 MATCH 'six' +---- +stmt 0 err 1 -1 54 no such table: t3 +stmt 54 err 1 -1 122 no such table: t3 +==== 3.5 + + UPDATE OR REPLACE t3 SET docid = 3 WHERE docid=2; + SELECT quote(matchinfo(t3, 'na')) FROM t3 WHERE t3 MATCH 'six' +---- +stmt 0 err 1 -1 54 no such table: t3 +stmt 54 err 1 -1 122 no such table: t3 +==== 3.6 + + REPLACE INTO t3(docid, content) VALUES (3, 'one two'); + SELECT quote(matchinfo(t3, 'na')) FROM t3 WHERE t3 MATCH 'one' +---- +stmt 0 err 1 -1 59 no such table: t3 +stmt 59 err 1 -1 127 no such table: t3 +==== 3.7 + + REPLACE INTO t3(docid, content) VALUES(NULL,'one two three four'); + REPLACE INTO t3(docid, content) VALUES(NULL,'one two three four five six'); + SELECT docid FROM t3; +---- +stmt 0 err 1 -1 71 no such table: t3 +stmt 71 err 1 -1 151 no such table: t3 +stmt 151 err 1 -1 177 no such table: t3 +==== 3.8 + + UPDATE OR REPLACE t3 SET docid = 5, content='three four' WHERE docid = 4; + SELECT quote(matchinfo(t3, 'na')) FROM t3 WHERE t3 MATCH 'one' +---- +stmt 0 err 1 -1 78 no such table: t3 +stmt 78 err 1 -1 146 no such table: t3 +==== 4.1.1 + + CREATE VIRTUAL TABLE t0 USING fts4; + BEGIN; + INSERT INTO t0(rowid, content) SELECT + 1, 'abc' UNION ALL SELECT + 2, 'def' UNION ALL SELECT + 1, 'ghi'; +---- +stmt 0 ok +stmt 38 ok +stmt 47 err 1 -1 169 no such table: t0 +==== 4.1.2 + + COMMIT; +---- +stmt 0 ok +==== 4.1.3 + + SELECT * FROM t0 WHERE t0 MATCH 'abc'; + INSERT INTO t0(t0) VALUES('integrity-check'); + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 41 no such table: t0 +stmt 41 err 1 -1 89 no such table: t0 +stmt 89 ok +==== 4.2.1 + + CREATE VIRTUAL TABLE t01 USING fts4; + BEGIN; + SAVEPOINT abc; + INSERT INTO t01 VALUES('a b c'); + ROLLBACK TO abc; + COMMIT; +---- +stmt 0 ok +stmt 39 ok +stmt 48 ok +stmt 67 err 1 -1 106 no such table: t01 +stmt 106 ok +stmt 127 ok +==== 4.2.2 + + SELECT * FROM t01 WHERE t01 MATCH 'b'; + INSERT INTO t01(t01) VALUES('integrity-check'); + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 41 no such table: t01 +stmt 41 err 1 -1 91 no such table: t01 +stmt 91 ok +==== 4.3.1 + + CREATE VIRTUAL TABLE t02 USING fts4; + INSERT INTO t01 VALUES('1 1 1'); + INSERT INTO t02 VALUES('2 2 2'); + BEGIN; + SAVEPOINT abc; + INSERT INTO t01 VALUES('a b c'); + INSERT INTO t02 VALUES('a b c'); + ROLLBACK TO abc; + COMMIT; +---- +stmt 0 ok +stmt 39 err 1 -1 74 no such table: t01 +stmt 74 err 1 -1 109 no such table: t02 +stmt 109 ok +stmt 118 ok +stmt 137 err 1 -1 176 no such table: t01 +stmt 176 err 1 -1 215 no such table: t02 +stmt 215 ok +stmt 236 ok +==== 4.3.2 + + SELECT * FROM t01 WHERE t01 MATCH 'b'; + INSERT INTO t01(t01) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 41 no such table: t01 +stmt 41 err 1 -1 91 no such table: t01 +==== 4.4.1 + + CREATE TABLE A(ID INTEGER PRIMARY KEY, AnotherID INTEGER, Notes TEXT); + CREATE VIRTUAL TABLE AFTS USING FTS4 (Notes); + CREATE TRIGGER A_DeleteTrigger AFTER DELETE ON A FOR EACH ROW BEGIN + DELETE FROM AFTS WHERE rowid=OLD.ID; + END; + CREATE TABLE B(ID INTEGER PRIMARY KEY,Notes TEXT); + CREATE VIRTUAL TABLE BFTS USING FTS3 (Notes); + CREATE TRIGGER B_DeleteTrigger AFTER DELETE ON B FOR EACH ROW BEGIN + DELETE FROM BFTS WHERE rowid=OLD.ID; + END; +---- +stmt 0 ok +stmt 73 ok +stmt 121 err 1 -1 191 no such table: main.A +stmt 241 ok +stmt 294 ok +stmt 342 err 1 -1 412 no such table: main.B +==== 4.4.2 + + BEGIN TRANSACTION; + DELETE FROM A WHERE AnotherID=1; + DELETE FROM B WHERE ID=1; + COMMIT; +---- +stmt 0 ok +stmt 21 err 1 -1 58 no such table: A +stmt 58 err 1 -1 88 no such table: B +stmt 88 ok diff --git a/parser/testdata/fts3corrupt.metadata.json b/parser/testdata/fts3corrupt.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3corrupt.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3corrupt.test b/parser/testdata/fts3corrupt.test new file mode 100644 index 0000000..13c8f3c --- /dev/null +++ b/parser/testdata/fts3corrupt.test @@ -0,0 +1,183 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts3; + INSERT INTO t1 VALUES('hello'); +---- +stmt 0 ok +stmt 38 err 1 -1 72 no such table: t1 +==== 1.3 + + INSERT INTO t1 VALUES('world'); +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 1.4 + + DROP TABLE t1; +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 2.0 + + CREATE VIRTUAL TABLE t1 USING fts3; + BEGIN; + INSERT INTO t1 VALUES('hello'); + INSERT INTO t1 VALUES('hello'); + INSERT INTO t1 VALUES('hello'); + INSERT INTO t1 VALUES('hello'); + INSERT INTO t1 VALUES('hello'); + COMMIT; +---- +stmt 0 ok +stmt 38 ok +stmt 47 err 1 -1 83 no such table: t1 +stmt 83 err 1 -1 119 no such table: t1 +stmt 119 err 1 -1 155 no such table: t1 +stmt 155 err 1 -1 191 no such table: t1 +stmt 191 err 1 -1 227 no such table: t1 +stmt 227 ok +==== 2.2 + + SELECT rowid FROM t1 WHERE t1 MATCH 'hello' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 3.0 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts3; + BEGIN; + INSERT INTO t1 VALUES('hello'); + INSERT INTO t1 VALUES('world'); + COMMIT; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 55 ok +stmt 64 err 1 -1 100 no such table: t1 +stmt 100 err 1 -1 136 no such table: t1 +stmt 136 ok +==== 3.2 + + SELECT rowid FROM t1 WHERE t1 MATCH 'world' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 4.0 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts3; + INSERT INTO t1(t1) VALUES('nodesize=24'); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 55 err 1 -1 99 no such table: t1 +==== 4.2 + + UPDATE t1_segdir SET root = X'FFFFFFFFFFFFFFFF'; + SELECT rowid FROM t1 WHERE t1 MATCH 'world'; +---- +stmt 0 err 1 -1 51 no such table: t1_segdir +stmt 51 err 1 -1 98 no such table: t1 +==== 5.0 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts4; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +==== 5.2 + + UPDATE t1_stat SET value = X'0000'; + SELECT matchinfo(t1, 'nxa') FROM t1 WHERE t1 MATCH 't*'; +---- +stmt 0 err 1 -1 38 no such table: t1_stat +stmt 38 err 1 -1 97 no such table: t1 +==== 5.3 + + UPDATE t1_stat SET value = NULL; + SELECT matchinfo(t1, 'nxa') FROM t1 WHERE t1 MATCH 't*'; +---- +stmt 0 err 1 -1 35 no such table: t1_stat +stmt 35 err 1 -1 94 no such table: t1 +==== 6.10 + + CREATE VIRTUAL TABLE f using fts3(a,b); + CREATE TABLE f_stat(id INTEGER PRIMARY KEY, value BLOB); + INSERT INTO f_segdir VALUES (2000, 0,0,0, '16', ''); + INSERT INTO f_segdir VALUES (1999, 0,0,0, '0 18', + x'000131030102000103323334050101010200'); + INSERT INTO f_segments (blockid) values (16); + INSERT INTO f_segments values (0, x''); + INSERT INTO f_stat VALUES (1,x'cf0f01'); + INSERT INTO f(f) VALUES ('merge=1'); +---- +stmt 0 ok +stmt 42 ok +stmt 101 err 1 -1 156 no such table: f_segdir +stmt 156 err 1 -1 281 no such table: f_segdir +stmt 281 err 1 -1 329 no such table: f_segments +stmt 329 err 1 -1 371 no such table: f_segments +stmt 371 err 1 -1 414 no such table: f_stat +stmt 414 err 1 -1 453 no such table: f +==== 7.10 + + CREATE VIRTUAL TABLE f USING fts3(a,b); + INSERT INTO f_segdir VALUES (0,0,1,0,'0 0',x'01010101020101'); + SELECT matchinfo( f , 'pcx') FROM f WHERE b MATCH x'c533'; +---- +stmt 0 ok +stmt 42 err 1 -1 107 no such table: f_segdir +stmt 107 err 1 -1 170 no such table: f +==== 8.1 + + CREATE VIRTUAL TABLE f USING fts3(a); + INSERT INTO f(f) VALUES('nodesize=24'); + BEGIN; + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789'); + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789'); + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789'); + + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X'); + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X'); + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X'); + COMMIT; + BEGIN; + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789'); + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789'); + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789'); + + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X'); + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X'); + INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X'); + COMMIT; + + SELECT count(*) FROM f_segments; +---- +stmt 0 ok +stmt 40 err 1 -1 82 no such table: f +stmt 82 ok +stmt 91 err 1 -1 157 no such table: f +stmt 157 err 1 -1 223 no such table: f +stmt 223 err 1 -1 289 no such table: f +stmt 289 err 1 -1 356 no such table: f +stmt 356 err 1 -1 422 no such table: f +stmt 422 err 1 -1 488 no such table: f +stmt 488 ok +stmt 498 ok +stmt 507 err 1 -1 573 no such table: f +stmt 573 err 1 -1 639 no such table: f +stmt 639 err 1 -1 705 no such table: f +stmt 705 err 1 -1 772 no such table: f +stmt 772 err 1 -1 838 no such table: f +stmt 838 err 1 -1 904 no such table: f +stmt 904 ok +stmt 914 err 1 -1 950 no such table: f_segments +==== 8.2 + + UPDATE f_segments SET block = ( + SELECT block FROM f_segments WHERE blockid=1 + ) WHERE blockid=2 +---- +stmt 0 err 1 -1 104 no such table: f_segments +==== 8.3 + + INSERT INTO f(f) VALUES('merge=2,2'); +---- +stmt 0 err 1 -1 40 no such table: f diff --git a/parser/testdata/fts3corrupt3.metadata.json b/parser/testdata/fts3corrupt3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3corrupt3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3corrupt3.test b/parser/testdata/fts3corrupt3.test new file mode 100644 index 0000000..e7f25f1 --- /dev/null +++ b/parser/testdata/fts3corrupt3.test @@ -0,0 +1,37 @@ +==== 1.0 + + PRAGMA page_size = 512; + CREATE VIRTUAL TABLE t1 USING fts3; + BEGIN; + INSERT INTO t1 VALUES('one'); + INSERT INTO t1 VALUES('one'); + INSERT INTO t1 VALUES('one'); + COMMIT; +---- +stmt 0 ok +stmt 26 ok +stmt 64 ok +stmt 73 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 175 no such table: t1 +stmt 175 ok +==== 1.1 + + SELECT quote(root) from t1_segdir; +---- +stmt 0 err 1 -1 37 no such table: t1_segdir +==== 1.2 + + UPDATE t1_segdir SET root = X'00036F6E650EFFFFFFFFFFFFFFFFFFFFFFFF0200'; +---- +stmt 0 err 1 -1 75 no such table: t1_segdir +==== 1.3 + + SELECT rowid FROM t1 WHERE t1 MATCH 'one' +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 2.1 + + SELECT quote(root) from t2_segdir; +---- +stmt 0 err 1 -1 37 no such table: t2_segdir diff --git a/parser/testdata/fts3corrupt4.metadata.json b/parser/testdata/fts3corrupt4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3corrupt4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3corrupt4.test b/parser/testdata/fts3corrupt4.test new file mode 100644 index 0000000..6259a39 --- /dev/null +++ b/parser/testdata/fts3corrupt4.test @@ -0,0 +1,785 @@ +==== 1.0 + + BEGIN; + CREATE VIRTUAL TABLE ft USING fts3; + INSERT INTO ft VALUES('aback'); + INSERT INTO ft VALUES('abaft'); + INSERT INTO ft VALUES('abandon'); + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 49 err 1 -1 85 no such table: ft +stmt 85 err 1 -1 121 no such table: ft +stmt 121 err 1 -1 159 no such table: ft +stmt 159 ok +==== 1.1 + + SELECT quote(root) FROM ft_segdir; +---- +stmt 0 err 1 -1 37 no such table: ft_segdir +==== 1.2 + + UPDATE ft_segdir SET root = blob( + '0005616261636B03010200 FFFFFFFF0702 66740302020003046E646F6E03030200' + ); +---- +stmt 0 err 1 -1 116 no such table: ft_segdir +==== 1.3 + + SELECT * FROM ft WHERE ft MATCH 'abandon'; +---- +stmt 0 err 1 -1 45 no such table: ft +==== 2.0.0 + + CREATE VIRTUAL TABLE ft USING fts3; + INSERT INTO ft(ft) VALUES('nodesize=32'); +---- +stmt 0 ok +stmt 38 err 1 -1 82 no such table: ft +==== 2.1 + + INSERT INTO ft(ft) VALUES('merge=1,4'); + SELECT count(*) FROM ft_segdir; + SELECT count(*) FROM ft_segments; +---- +stmt 0 err 1 -1 42 no such table: ft +stmt 42 err 1 -1 76 no such table: ft_segdir +stmt 76 err 1 -1 112 no such table: ft_segments +==== 2.2 + + SELECT quote(block) FROM ft_segments WHERE blockid=2 +---- +stmt 0 err 1 -1 56 no such table: ft_segments +==== 2.3.1 + + UPDATE ft_segments SET block = + blob('00056162633130031F0200 FFFFFFFF07FF55 66740302020003046E646F6E03030200') + WHERE blockid=2; +---- +stmt 0 err 1 -1 138 no such table: ft_segments +==== 2.3.2 + + INSERT INTO ft(ft) VALUES('merge=1,4'); +---- +stmt 0 err 1 -1 42 no such table: ft +==== 2.4.1 + + UPDATE ft_segments SET block = + blob('00056162633130031F0200 02FFFFFFFF07 66740302020003046E646F6E03030200') + WHERE blockid=2; +---- +stmt 0 err 1 -1 136 no such table: ft_segments +==== 2.4.2 + + INSERT INTO ft(ft) VALUES('merge=1,4'); +---- +stmt 0 err 1 -1 42 no such table: ft +==== 2.5.1 + + UPDATE ft_segments SET block = + blob('00056162633130031F0200 0202 6674 FFFFFF070302020003046E646F6E030200') + WHERE blockid=2; +---- +stmt 0 err 1 -1 135 no such table: ft_segments +==== 2.5.2 + + INSERT INTO ft(ft) VALUES('merge=1,4'); +---- +stmt 0 err 1 -1 42 no such table: ft +==== 3.0.0 + + CREATE VIRTUAL TABLE ft USING fts3; + INSERT INTO ft(ft) VALUES('nodesize=32'); +---- +stmt 0 ok +stmt 38 err 1 -1 82 no such table: ft +==== 3.1 + + SELECT quote(root) FROM ft_segdir +---- +stmt 0 err 1 -1 37 no such table: ft_segdir +==== 3.2 + + UPDATE ft_segdir + SET root = blob('0101056162633132FFFFFFFF070236030132030136'); +---- +stmt 0 err 1 -1 85 no such table: ft_segdir +==== 3.1.dup1 + + SELECT * FROM ft WHERE ft MATCH 'abc20' +---- +stmt 0 err 1 -1 43 no such table: ft +==== 4.0 + + CREATE VIRTUAL TABLE t1 USING fts3(); + INSERT INTO t1 VALUES('one two three'); + UPDATE t1_segdir SET start_block = 1; +---- +stmt 0 ok +stmt 40 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 122 no such table: t1_segdir +==== 4.1 + + SELECT * FROM t1 WHERE t1 MATCH 'one'; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 4.2 + + SELECT * FROM t1 WHERE t1 MATCH 'two'; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 4.3 + + SELECT * FROM t1 WHERE t1 MATCH 'three'; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== 4.4 + + INSERT INTO t1(t1) VALUES('optimize'); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 5.1 + + SELECT * FROM t1 WHERE t1 MATCH 'abandon'; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 6.0 + + CREATE VIRTUAL TABLE Table0 USING fts3(); + INSERT INTO Table0_segdir VALUES(1,NULL,1,NULL,NULL,NULL); +---- +stmt 0 ok +stmt 44 err 1 -1 105 no such table: Table0_segdir +==== 6.1 + + SELECT * FROM Table0 WHERE Table0 MATCH 'a'; +---- +stmt 0 err 1 -1 47 no such table: Table0 +==== 6.2 + + INSERT INTO Table0(Table0) VALUES('optimize'); +---- +stmt 0 err 1 -1 49 no such table: Table0 +==== 7.1 + + SELECT matchinfo(t1,'y') FROM t1 WHERE t1 MATCH 'e*'; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 8.1 + + SELECT matchinfo(t1,'x') FROM t1 WHERE t1 MATCH 'e*'; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 9.1 + + SELECT count(*) FROM t1 WHERE t1 MATCH '"json1 enable"'; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 10.3 + + INSERT INTO t1(t1) VALUES('optimize'); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 11.1 + + SELECT rowid, quote(matchinfo(t1,'pcxybs')) FROM t1 WHERE t1 MATCH 'e*' +---- +stmt 0 err 1 -1 75 no such table: t1 +==== 12.1 + + SELECT rowid, quote(matchinfo(t1,'pcxybspcxybs')) + FROM t1 WHERE t1 MATCH 'e*e*' +---- +stmt 0 err 1 -1 86 no such table: t1 +==== 13.1 + + SELECT quote(matchinfo(t1,'pcxybs'))==0 FROM t1 WHERE b MATCH 'e*'; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 14.1 + + PRAGMA writable_schema = 1; + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<10) + INSERT INTO t1(a) SELECT randomblob(3000) FROM c; +---- +stmt 0 ok +stmt 30 err 1 -1 160 no such table: t1 +==== 14.2 + + INSERT INTO t1(t1) VALUES('optimize'); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 15.0 + + CREATE VIRTUAL TABLE t1 USING fts3(a, content=""); + INSERT INTO t1_segdir VALUES(0,0,0,0,'0 665',X'000261640303040002086970697363696e670301080001056c6971756103020c00050269700304040001036d65740301060001036e6a6d03080900010375746503050300000663696c6c756d0306020001066f6d6d6f646f0304070002096e736563746574757203010700050471756174030408000104756c7061030804000207706964617461740307050000086465736572756e740308070001016f0302030002036c6f720601040004050005016506020a00040300010375697303050200000265610304060001066975736d6f640302040001036c69740301090001036e696d13030300010373736503050b0002017403080b0001017403020900010175030604000101780304050002076365707465757203070100020a65726369746174696f6e030309000006667567696174030605000002696403080a0001016e070506040003030002086369646964756e740302060001047073756d030103000104727572650305040000066c61626f7265030208000502697303030b000502756d03080c0001046f72656d0301020000056d61676e6103020b000104696e696d0303050001056f6c6c69740308080000046e6973690304020001026f6e0307060002057374727564030308000104756c6c610306060000086f636361656361740307040001066666696369610308060000087061726961747572030607000107726f6964656e740307070000037175690308050003017303030700000d726570726568656e6465726974030507000003736564030202000103696e7403070300020174030105000103756e7403080200000674656d706f72030205000007756c6c616d636f03030a0001017409020700010200010300000576656c697403050a0002046e69616d0303060001086f6c75707461746503050900'); +---- +stmt 0 ok +stmt 53 err 1 -1 1436 no such table: t1_segdir +==== 15.1 + + SELECT quote(matchinfo(t1, t1 ))==0 FROM t1 WHERE t1 MATCH 'e*'; +---- +stmt 0 err 1 -1 67 no such table: t1 +==== 16.1 + + INSERT INTO t1(t1) VALUES('optimize'); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 17.1 + + BEGIN; + INSERT INTO t1(t1) SELECT x FROM t2; + UPDATE t1 SET b=quote(zeroblob(200)) WHERE a MATCH 'thread*'; +---- +stmt 0 ok +stmt 9 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 116 no such table: t1 +==== 17.2 + + INSERT INTO t1(t1) VALUES('optimize'); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 17.3 + + DROP TABLE IF EXISTS t1; +---- +stmt 0 ok +==== 18.1 + + SELECT quote(matchinfo(t1,'pcxybs'))==0 FROM t1 WHERE b MATCH 'e*'; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 19.1 + + PRAGMA writable_schema = 1; + SELECT rowid,a,c,snippet(t1,85101090932165,-1,10) FROM t1 WHERE a MATCH 'rtree'; +---- +stmt 0 ok +stmt 30 err 1 -1 113 no such table: t1 +==== 20.1 + + PRAGMA writable_schema = 1; + BEGIN; + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<10) + INSERT INTO t1(a) SELECT randomblob(3000) FROM c; +---- +stmt 0 ok +stmt 30 ok +stmt 39 err 1 -1 169 no such table: t1 +==== 20.2 + + INSERT INTO t1(t1) VALUES('optimize'); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 21.1 + + PRAGMA writable_schema = 1; + SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'R*'; +---- +stmt 0 ok +stmt 30 err 1 -1 80 no such table: t1 +==== 22.1 + + PRAGMA writable_schema = 1; + SELECT snippet(t1,'', '', '--',-1,01)==0 + FROM t1 WHERE a MATCH 'rtree OR json1rtree OR json1'; +---- +stmt 0 ok +stmt 30 err 1 -1 131 no such table: t1 +==== 23.1 + + PRAGMA writable_schema = 1; + SELECT 'FyzLy'FROM t1 WHERE t1 MATCH 'j'; +---- +stmt 0 ok +stmt 30 err 1 -1 74 no such table: t1 +==== 24.1 + + PRAGMA writable_schema = 1; + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT '4hE'+x FROM c WHERE x<72) + INSERT INTO t1(a) SELECT randomblob(2829) FROM c; +---- +stmt 0 ok +stmt 30 err 1 -1 164 no such table: t1 +==== 24.2 + + UPDATE t1 SET b=quote((true) ) WHERE t1 MATCH 'h'; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== 24.3 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT 3+x FROM c WHERE x<72) + INSERT INTO t1(a) SELECT randomblob(2829) FROM c; +---- +stmt 0 err 1 -1 130 no such table: t1 +==== 24.4 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT null<0 FROM t1_segments; +---- +stmt 0 ok +stmt 44 err 1 -1 90 no such table: t1 +stmt 90 ok +stmt 101 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 230 no such table: t1 +stmt 230 err 1 -1 301 no such table: t1 +stmt 301 err 1 -1 366 no such table: t1 +stmt 366 ok +stmt 378 err 1 -1 418 no such table: t1_segments +==== fts3cov-4.1 + + CREATE VIRTUAL TABLE t3 USING fts3(x); + INSERT INTO t3(t3) VALUES('nodesize=24'); + INSERT INTO t3(t3) VALUES('maxpending=100'); +---- +stmt 0 ok +stmt 43 err 1 -1 89 no such table: t3 +stmt 89 err 1 -1 138 no such table: t3 +==== fts3cov-5.1 + + CREATE VIRTUAL TABLE t4 USING fts3(x); + INSERT INTO t4(t4) VALUES('nodesize=24'); +---- +stmt 0 ok +stmt 43 err 1 -1 89 no such table: t4 +==== fts3cov-5.3 + INSERT INTO t4 VALUES('extra!') +---- +stmt 0 err 1 -1 33 no such table: t4 +==== fts3cov-5.5 + INSERT INTO t4 VALUES('more extra!') +---- +stmt 0 err 1 -1 38 no such table: t4 +==== fts3cov-7.1 + + CREATE VIRTUAL TABLE t7 USING fts3(a, b, c); + INSERT INTO t7 VALUES('A', 'B', 'C'); + UPDATE t7 SET docid = 5; + SELECT docid, * FROM t7; +---- +stmt 0 ok +stmt 49 err 1 -1 91 no such table: t7 +stmt 91 err 1 -1 120 no such table: t7 +stmt 120 err 1 -1 149 no such table: t7 +==== fts3cov-7.2 + + INSERT INTO t7 VALUES('D', 'E', 'F'); + UPDATE t7 SET docid = 1 WHERE docid = 6; + SELECT docid, * FROM t7; +---- +stmt 0 err 1 -1 42 no such table: t7 +stmt 42 err 1 -1 87 no such table: t7 +stmt 87 err 1 -1 116 no such table: t7 +==== fts3cov-9.1 + CREATE VIRTUAL TABLE xx USING fts3 +---- +stmt 0 ok +==== fts3cov-9.5 + INSERT INTO xx(xx) VALUES('optimize') +---- +stmt 0 err 1 -1 39 no such table: xx +==== 14.0 + + CREATE VIRTUAL TABLE t14 USING fts4(a, b); + INSERT INTO t14 VALUES('one two three', 'one three four'); + INSERT INTO t14 VALUES('a b c', 'd e a'); +---- +stmt 0 ok +stmt 45 err 1 -1 106 no such table: t14 +stmt 106 err 1 -1 150 no such table: t14 +==== 14.1 + + SELECT rowid FROM t14 WHERE t14 MATCH '"one two three"' +---- +stmt 0 err 1 -1 59 no such table: t14 +==== 14.2 + + SELECT rowid FROM t14 WHERE t14 MATCH '"one four"' +---- +stmt 0 err 1 -1 54 no such table: t14 +==== 14.3 + + SELECT rowid FROM t14 WHERE t14 MATCH '"e a"' +---- +stmt 0 err 1 -1 49 no such table: t14 +==== 14.5 + + SELECT rowid FROM t14 WHERE t14 MATCH '"e b"' +---- +stmt 0 err 1 -1 49 no such table: t14 +==== 14.6 + + SELECT rowid FROM t14 WHERE rowid MATCH 'one' +---- +stmt 0 err 1 -1 49 no such table: t14 +==== 14.7 + + SELECT rowid FROM t14 WHERE docid MATCH 'one' +---- +stmt 0 err 1 -1 49 no such table: t14 +==== 15.0 + + CREATE VIRTUAL TABLE t15 USING fts4(a, b, c); + INSERT INTO t15 VALUES('abc def ghi', 'abc2 def2 ghi2', 'abc3 def3 ghi3'); + INSERT INTO t15 VALUES('abc2 def2 ghi2', 'abc2 def2 ghi2', 'abc def3 ghi3'); +---- +stmt 0 ok +stmt 48 err 1 -1 125 no such table: t15 +stmt 125 err 1 -1 204 no such table: t15 +==== 15.1 + + SELECT rowid FROM t15 WHERE t15 MATCH '"abc* def2"' +---- +stmt 0 err 1 -1 55 no such table: t15 +==== 16.1 + + CREATE VIRTUAL TABLE t16 USING fts4; + INSERT INTO t16 VALUES('theoretical work to examine the relationship'); + INSERT INTO t16 VALUES('solution of our problems on the invisible'); + DELETE FROM t16_content WHERE rowid = 2; +---- +stmt 0 ok +stmt 39 err 1 -1 113 no such table: t16 +stmt 113 err 1 -1 184 no such table: t16 +stmt 184 err 1 -1 227 no such table: t16_content +==== 16.2 + + SELECT * FROM t16 WHERE t16 MATCH 'invisible' +---- +stmt 0 err 1 -1 49 no such table: t16 +==== 17.1 + + CREATE VIRTUAL TABLE t17 USING fts4; + INSERT INTO t17(content) VALUES('one one one'); + UPDATE t17_segdir SET root = X'00036F6E65FFFFFFFFFFFFFFFFFFFFFF02030300' +---- +stmt 0 ok +stmt 39 err 1 -1 89 no such table: t17 +stmt 89 err 1 -1 165 no such table: t17_segdir +==== 17.2 + + SELECT * FROM t17 WHERE t17 MATCH 'one' +---- +stmt 0 err 1 -1 43 no such table: t17 diff --git a/parser/testdata/fts3d.metadata.json b/parser/testdata/fts3d.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3d.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3d.test b/parser/testdata/fts3d.test new file mode 100644 index 0000000..a974b2f --- /dev/null +++ b/parser/testdata/fts3d.test @@ -0,0 +1,73 @@ +==== fts3d-1.segments + + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 58 no such table: t1_segdir +==== fts3d-1.matches + + SELECT OFFSETS(t1) FROM t1 + WHERE t1 MATCH 'this OR that OR was OR a OR is OR test' ORDER BY docid; +---- +stmt 0 err 1 -1 108 no such table: t1 +==== fts3d-2.segments + + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 58 no such table: t1_segdir +==== fts3d-2.matches + + SELECT OFFSETS(t1) FROM t1 + WHERE t1 MATCH 'this OR that OR was OR a OR is OR test' ORDER BY docid; +---- +stmt 0 err 1 -1 108 no such table: t1 +==== fts3d-3.segments + + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 58 no such table: t1_segdir +==== fts3d-3.matches + + SELECT OFFSETS(t1) FROM t1 + WHERE t1 MATCH 'this OR that OR was OR a OR is OR test' ORDER BY docid; +---- +stmt 0 err 1 -1 108 no such table: t1 +==== fts3d-4.segments + + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 58 no such table: t1_segdir +==== fts3d-4.matches + + SELECT OFFSETS(t1) FROM t1 + WHERE t1 MATCH 'this OR that OR was OR a OR is OR test' ORDER BY docid; +---- +stmt 0 err 1 -1 108 no such table: t1 +==== fts3d-4.5 + + SELECT OPTIMIZE(t1) FROM t1 LIMIT 1; + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 41 no such table: t1 +stmt 41 err 1 -1 99 no such table: t1_segdir +==== fts3d-4.5.matches + + SELECT OFFSETS(t1) FROM t1 + WHERE t1 MATCH 'this OR that OR was OR a OR is OR test' ORDER BY docid; +---- +stmt 0 err 1 -1 108 no such table: t1 +==== fts3d-5.0 + + SELECT OPTIMIZE(t1) FROM t1 LIMIT 1; + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 41 no such table: t1 +stmt 41 err 1 -1 99 no such table: t1_segdir +==== fts3d-5.1 + + UPDATE t1_segdir SET level = 2 WHERE level = 1 AND idx = 0; + SELECT OPTIMIZE(t1) FROM t1 LIMIT 1; + SELECT level, idx FROM t1_segdir ORDER BY level, idx; +---- +stmt 0 err 1 -1 64 no such table: t1_segdir +stmt 64 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 163 no such table: t1_segdir diff --git a/parser/testdata/fts3defer.metadata.json b/parser/testdata/fts3defer.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3defer.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3defer.test b/parser/testdata/fts3defer.test new file mode 100644 index 0000000..0463dca --- /dev/null +++ b/parser/testdata/fts3defer.test @@ -0,0 +1,160 @@ +==== 1.3 + + SELECT count(*) FROM t1_segments WHERE length(block)>10000; + UPDATE t1_segments + SET block = zeroblob(length(block)) + WHERE length(block)>10000; +---- +stmt 0 err 1 -1 62 no such table: t1_segments +stmt 62 err 1 -1 156 no such table: t1_segments +==== 1.5 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== 0 + + SELECT count(*) FROM t1_segments WHERE length(block)>10000 +---- +stmt 0 err 1 -1 65 no such table: t1_segments +==== 3.1 + + CREATE VIRTUAL TABLE x1 USING fts4(a, b); + INSERT INTO x1 VALUES('a b c', 'd e f'); + INSERT INTO x1 SELECT * FROM x1; + INSERT INTO x1 SELECT * FROM x1; + INSERT INTO x1 SELECT * FROM x1; + INSERT INTO x1 SELECT * FROM x1; +---- +stmt 0 ok +stmt 44 err 1 -1 87 no such table: x1 +stmt 87 err 1 -1 122 no such table: x1 +stmt 122 err 1 -1 157 no such table: x1 +stmt 157 err 1 -1 192 no such table: x1 +stmt 192 err 1 -1 227 no such table: x1 +==== 3.3 + + SELECT count(*) FROM x1 WHERE x1 MATCH '"d e f"' +---- +stmt 0 err 1 -1 52 no such table: x1 +==== 4.1 + + CREATE VIRTUAL TABLE x2 USING FTS4(x); + BEGIN; + INSERT INTO x2 VALUES('m m m m m m m m m m m m m m m m m m m m m m m m m m'); + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 SELECT * FROM x2; + INSERT INTO x2 VALUES('a b c d e f g h i j k l m n o p q r s t u v w x y m'); + COMMIT; +---- +stmt 0 ok +stmt 41 ok +stmt 50 err 1 -1 130 no such table: x2 +stmt 130 err 1 -1 165 no such table: x2 +stmt 165 err 1 -1 200 no such table: x2 +stmt 200 err 1 -1 235 no such table: x2 +stmt 235 err 1 -1 270 no such table: x2 +stmt 270 err 1 -1 305 no such table: x2 +stmt 305 err 1 -1 340 no such table: x2 +stmt 340 err 1 -1 375 no such table: x2 +stmt 375 err 1 -1 410 no such table: x2 +stmt 410 err 1 -1 445 no such table: x2 +stmt 445 err 1 -1 480 no such table: x2 +stmt 480 err 1 -1 515 no such table: x2 +stmt 515 err 1 -1 550 no such table: x2 +stmt 550 err 1 -1 585 no such table: x2 +stmt 585 err 1 -1 620 no such table: x2 +stmt 620 err 1 -1 655 no such table: x2 +stmt 655 err 1 -1 735 no such table: x2 +stmt 735 ok +==== 4.2 + + SELECT * FROM x2 WHERE x2 MATCH 'a b c d e f g h i j k l m n o p q r s'; +---- +stmt 0 err 1 -1 75 no such table: x2 +==== fts3defer-generated + + BEGIN; + INSERT INTO x3 VALUES('b b b b b b b b b b b', 'b b b b b b b b b b b b b'); + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 SELECT * FROM x3; + INSERT INTO x3 VALUES('a b c', NULL); + INSERT INTO x3 VALUES('a x c', NULL); + COMMIT; + + SELECT * FROM x3 WHERE x3 MATCH 'a b'; +---- +stmt 0 ok +stmt 11 err 1 -1 92 no such table: x3 +stmt 92 err 1 -1 129 no such table: x3 +stmt 129 err 1 -1 166 no such table: x3 +stmt 166 err 1 -1 203 no such table: x3 +stmt 203 err 1 -1 240 no such table: x3 +stmt 240 err 1 -1 277 no such table: x3 +stmt 277 err 1 -1 314 no such table: x3 +stmt 314 err 1 -1 351 no such table: x3 +stmt 351 err 1 -1 388 no such table: x3 +stmt 388 err 1 -1 425 no such table: x3 +stmt 425 err 1 -1 462 no such table: x3 +stmt 462 err 1 -1 499 no such table: x3 +stmt 499 err 1 -1 536 no such table: x3 +stmt 536 err 1 -1 573 no such table: x3 +stmt 573 err 1 -1 610 no such table: x3 +stmt 610 err 1 -1 647 no such table: x3 +stmt 647 err 1 -1 684 no such table: x3 +stmt 684 err 1 -1 726 no such table: x3 +stmt 726 err 1 -1 768 no such table: x3 +stmt 768 ok +stmt 780 err 1 -1 824 no such table: x3 +==== fts3defer-generated.dup1 + DROP TABLE x3 +---- +stmt 0 err 1 -1 15 no such table: x3 +==== 6.0 + + CREATE VIRTUAL TABLE ft USING fts4( + c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19 + ); +---- +stmt 0 ok +==== 6.1 + + BEGIN; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<20000 + ) + INSERT INTO ft(c0) SELECT 'common' FROM s; +---- +stmt 0 ok +stmt 9 err 1 -1 138 no such table: ft +==== 6.3 + + SELECT count(*) FROM ft WHERE ft MATCH '"common rare"'; +---- +stmt 0 err 1 -1 58 no such table: ft diff --git a/parser/testdata/fts3defer2.metadata.json b/parser/testdata/fts3defer2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3defer2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3defer2.test b/parser/testdata/fts3defer2.test new file mode 100644 index 0000000..87df761 --- /dev/null +++ b/parser/testdata/fts3defer2.test @@ -0,0 +1,141 @@ +==== 1.1.1 + + CREATE VIRTUAL TABLE t1 USING fts4; +---- +stmt 0 ok +==== 1.1.4 + + INSERT INTO t1 VALUES('a b c d e f a x y'); + INSERT INTO t1 VALUES(''); + INSERT INTO t1 VALUES(''); + INSERT INTO t1 VALUES(''); + INSERT INTO t1 VALUES(''); + INSERT INTO t1 VALUES(''); + INSERT INTO t1(t1) VALUES('optimize'); +---- +stmt 0 err 1 -1 46 no such table: t1 +stmt 46 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 133 no such table: t1 +stmt 133 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 191 no such table: t1 +stmt 191 err 1 -1 232 no such table: t1 +==== 1.1.4.dup1 + + SELECT count(*) FROM t1_segments WHERE length(block)>10000; + UPDATE t1_segments SET block = zeroblob(length(block)) WHERE length(block)>10000; +---- +stmt 0 err 1 -1 62 no such table: t1_segments +stmt 62 err 1 -1 146 no such table: t1_segments +==== 1.2.0 + + SELECT content FROM t1 WHERE t1 MATCH 'f (e a)'; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 1.2.1 + + SELECT content FROM t1 WHERE t1 MATCH 'f (e NEAR/2 a)'; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 1.3.1 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== 2.1.5 + + INSERT INTO t2 VALUES('a b c d e f g z'); + INSERT INTO t2 VALUES('a b c d e f g'); +---- +stmt 0 err 1 -1 44 no such table: t2 +stmt 44 err 1 -1 86 no such table: t2 +==== fts3defer2-generated + + SELECT mit(matchinfo(t2, 'pcxnal')) FROM t2 WHERE t2 MATCH 'a b'; +---- +stmt 0 err 1 -1 70 no such table: t2 +==== fts3defer2-generated.dup1 + + SELECT mit(matchinfo(t2, 'x')) FROM t2 WHERE t2 MATCH 'g z'; +---- +stmt 0 err 1 -1 65 no such table: t2 +==== fts3defer2-generated.dup2 + + SELECT mit(matchinfo(t2, 'x')) FROM t2 WHERE t2 MATCH 'g OR (g z)'; +---- +stmt 0 err 1 -1 72 no such table: t2 +==== fts3defer2-generated.dup3 + + SELECT mit(matchinfo(t2, 'x')) FROM t2 WHERE t2 MATCH 'e "g z"'; +---- +stmt 0 err 1 -1 69 no such table: t2 +==== 2.3.1 + + CREATE VIRTUAL TABLE t3 USING fts4; + INSERT INTO t3 VALUES('a b c d e f'); + INSERT INTO t3 VALUES('x b c d e f'); + INSERT INTO t3 VALUES('d e f a b c'); + INSERT INTO t3 VALUES('b c d e f'); + INSERT INTO t3 VALUES(''); + INSERT INTO t3 VALUES(''); + INSERT INTO t3 VALUES(''); + INSERT INTO t3 VALUES(''); + INSERT INTO t3 VALUES(''); + INSERT INTO t3 VALUES(''); +---- +stmt 0 ok +stmt 38 err 1 -1 78 no such table: t3 +stmt 78 err 1 -1 118 no such table: t3 +stmt 118 err 1 -1 158 no such table: t3 +stmt 158 err 1 -1 196 no such table: t3 +stmt 196 err 1 -1 225 no such table: t3 +stmt 225 err 1 -1 254 no such table: t3 +stmt 254 err 1 -1 283 no such table: t3 +stmt 283 err 1 -1 312 no such table: t3 +stmt 312 err 1 -1 341 no such table: t3 +stmt 341 err 1 -1 370 no such table: t3 +==== fts3defer2-generated.dup4 + + SELECT docid, mit(matchinfo(t3, 'pcxnal')) FROM t3 WHERE t3 MATCH '"a b c"'; +---- +stmt 0 err 1 -1 81 no such table: t3 +==== 2.5 + + INSERT INTO t3(t3) VALUES('rebuild'); +---- +stmt 0 err 1 -1 40 no such table: t3 +==== 2.6 + + SELECT rowid, length(offsets(t3)) FROM t3 WHERE t3 MATCH '(a NEAR a)'; +---- +stmt 0 err 1 -1 73 no such table: t3 +==== 2.7 + + SELECT rowid, length(offsets(t3)) FROM t3 WHERE t3 MATCH '(a NEAR b NEAR a)'; +---- +stmt 0 err 1 -1 80 no such table: t3 +==== 2.8 + + SELECT rowid, length(offsets(t3)) FROM t3 WHERE t3 MATCH '(a NEAR b)'; +---- +stmt 0 err 1 -1 73 no such table: t3 +==== 2.9 + + SELECT rowid, length(matchinfo(t3)) FROM t3 WHERE t3 MATCH '(a NEAR a)'; +---- +stmt 0 err 1 -1 75 no such table: t3 +==== 2.10 + + SELECT rowid, length(matchinfo(t3)) FROM t3 WHERE t3 MATCH '(a NEAR b NEAR a)' +---- +stmt 0 err 1 -1 82 no such table: t3 +==== 2.11 + + SELECT rowid, length(matchinfo(t3)) FROM t3 WHERE t3 MATCH '(a NEAR b)'; +---- +stmt 0 err 1 -1 75 no such table: t3 +==== 2.12 + + SELECT rowid, length(matchinfo(t3)) FROM t3 + WHERE t3 MATCH '(a NEAR b NEAR a NEAR b NEAR a)' +---- +stmt 0 err 1 -1 99 no such table: t3 diff --git a/parser/testdata/fts3defer3.metadata.json b/parser/testdata/fts3defer3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3defer3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3defer3.test b/parser/testdata/fts3defer3.test new file mode 100644 index 0000000..30ed537 --- /dev/null +++ b/parser/testdata/fts3defer3.test @@ -0,0 +1,25 @@ +==== 1.2 + + SELECT blockid, length(block) FROM t1_segments; +---- +stmt 0 err 1 -1 50 no such table: t1_segments +==== 1.3 + + SELECT docid, content FROM t1 WHERE t1 MATCH 'a b'; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 1.5 + + SELECT docid, content FROM t1 WHERE t1 MATCH 'a b'; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 1.6 + + SELECT count(*) FROM t1 WHERE t1 MATCH 'a b'; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 1.7 + + SELECT count(*) FROM t1 WHERE t1 MATCH 'b'; +---- +stmt 0 err 1 -1 46 no such table: t1 diff --git a/parser/testdata/fts3drop.metadata.json b/parser/testdata/fts3drop.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3drop.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3drop.test b/parser/testdata/fts3drop.test new file mode 100644 index 0000000..f2dfb76 --- /dev/null +++ b/parser/testdata/fts3drop.test @@ -0,0 +1,51 @@ +==== 1.1 + + CREATE VIRTUAL TABLE f1 USING fts3; + INSERT INTO f1 VALUES('a b c'); +---- +stmt 0 ok +stmt 38 err 1 -1 72 no such table: f1 +==== 1.2 + + BEGIN; + INSERT INTO f1 VALUES('d e f'); + SAVEPOINT one; + INSERT INTO f1 VALUES('g h i'); + DROP TABLE f1; + ROLLBACK TO one; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 45 no such table: f1 +stmt 45 ok +stmt 64 err 1 -1 102 no such table: f1 +stmt 102 err 1 -1 123 no such table: f1 +stmt 123 ok +stmt 144 ok +==== 1.3 + + SELECT * FROM f1; +---- +stmt 0 err 1 -1 20 no such table: f1 +==== 1.4 + + BEGIN; + INSERT INTO f1 VALUES('g h i'); + SAVEPOINT one; + INSERT INTO f1 VALUES('j k l'); + DROP TABLE f1; + RELEASE one; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 45 no such table: f1 +stmt 45 ok +stmt 64 err 1 -1 102 no such table: f1 +stmt 102 err 1 -1 123 no such table: f1 +stmt 123 ok +stmt 140 ok +==== 1.5 + + SELECT * FROM f1; +---- +stmt 0 err 1 -1 20 no such table: f1 diff --git a/parser/testdata/fts3dropmod.metadata.json b/parser/testdata/fts3dropmod.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3dropmod.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3dropmod.test b/parser/testdata/fts3dropmod.test new file mode 100644 index 0000000..f0d0675 --- /dev/null +++ b/parser/testdata/fts3dropmod.test @@ -0,0 +1,20 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts3(x); +---- +stmt 0 ok +==== 1.1 + + CREATE VIRTUAL TABLE t2 USING fts4(x); +---- +stmt 0 ok +==== 2.0 + + CREATE VIRTUAL TABLE t1 USING fts4(x); +---- +stmt 0 ok +==== 2.1 + + CREATE VIRTUAL TABLE t2 USING fts3(x); +---- +stmt 0 ok diff --git a/parser/testdata/fts3e.metadata.json b/parser/testdata/fts3e.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3e.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3e.test b/parser/testdata/fts3e.test new file mode 100644 index 0000000..f780f97 --- /dev/null +++ b/parser/testdata/fts3e.test @@ -0,0 +1,49 @@ +==== fts3e-1.1 + + SELECT docid FROM t1 ORDER BY docid; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== fts3e-1.2 + + SELECT docid FROM t1 WHERE c LIKE '%test' ORDER BY docid; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== fts3e-1.3 + + SELECT docid FROM t1 WHERE c LIKE 'That%' ORDER BY docid; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== fts3e-2.1 + + SELECT docid FROM t1 WHERE docid in (1, 2, 10); + SELECT rowid FROM t1 WHERE rowid in (1, 2, 10); +---- +stmt 0 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 104 no such table: t1 +==== fts3e-2.2 + + SELECT docid, weight FROM t1, t2 WHERE t2.id = t1.docid ORDER BY weight; + SELECT t1.rowid, weight FROM t1, t2 WHERE t2.id = t1.rowid ORDER BY weight; +---- +stmt 0 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 157 no such table: t1 +==== fts3e-2.3 + + SELECT docid, weight FROM t1, t2 + WHERE t2.weight>5 AND t2.id = t1.docid ORDER BY weight; + SELECT t1.rowid, weight FROM t1, t2 + WHERE t2.weight>5 AND t2.id = t1.rowid ORDER BY weight; +---- +stmt 0 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 211 no such table: t1 +==== fts3e-3.1 + + SELECT docid FROM t1 WHERE t1 MATCH 'this' ORDER BY docid; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== fts3e-3.2 + + SELECT docid, weight FROM t1, t2 + WHERE t1 MATCH 'this' AND t1.docid = t2.id ORDER BY weight; +---- +stmt 0 err 1 -1 102 no such table: t1 diff --git a/parser/testdata/fts3expr.metadata.json b/parser/testdata/fts3expr.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3expr.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3expr.test b/parser/testdata/fts3expr.test new file mode 100644 index 0000000..8d805c9 --- /dev/null +++ b/parser/testdata/fts3expr.test @@ -0,0 +1,81 @@ +==== fts3expr-4.1 + CREATE VIRTUAL TABLE t1 USING fts3(a, b, c) +---- +stmt 0 ok +==== fts3expr-4.2.1 + SELECT * FROM t1 WHERE t1 MATCH 'example AND (hello OR world))' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts3expr-4.2.2 + SELECT * FROM t1 WHERE t1 MATCH 'example AND (hello OR world' +---- +stmt 0 err 1 -1 63 no such table: t1 +==== fts3expr-4.2.3 + SELECT * FROM t1 WHERE t1 MATCH '(hello' +---- +stmt 0 err 1 -1 42 no such table: t1 +==== fts3expr-4.2.4 + SELECT * FROM t1 WHERE t1 MATCH '(' +---- +stmt 0 err 1 -1 37 no such table: t1 +==== fts3expr-4.2.5 + SELECT * FROM t1 WHERE t1 MATCH ')' +---- +stmt 0 err 1 -1 37 no such table: t1 +==== fts3expr-4.2.6 + SELECT * FROM t1 WHERE t1 MATCH 'example (hello world' +---- +stmt 0 err 1 -1 56 no such table: t1 +==== fts3expr-4.3.1 + SELECT * FROM t1 WHERE t1 MATCH 'example OR "hello world' +---- +stmt 0 err 1 -1 59 no such table: t1 +==== fts3expr-4.3.2 + SELECT * FROM t1 WHERE t1 MATCH 'example OR hello world"' +---- +stmt 0 err 1 -1 59 no such table: t1 +==== fts3expr-4.4.1 + SELECT * FROM t1 WHERE t1 MATCH 'OR hello world' +---- +stmt 0 err 1 -1 50 no such table: t1 +==== fts3expr-4.4.2 + SELECT * FROM t1 WHERE t1 MATCH 'hello world OR' +---- +stmt 0 err 1 -1 50 no such table: t1 +==== fts3expr-4.4.3 + SELECT * FROM t1 WHERE t1 MATCH 'one (hello world OR) two' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3expr-4.4.4 + SELECT * FROM t1 WHERE t1 MATCH 'one (OR hello world) two' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3expr-4.5.1 + SELECT * FROM t1 WHERE t1 MATCH '(hello OR world) NEAR one' +---- +stmt 0 err 1 -1 61 no such table: t1 +==== fts3expr-4.5.2 + SELECT * FROM t1 WHERE t1 MATCH 'one NEAR (hello OR world)' +---- +stmt 0 err 1 -1 61 no such table: t1 +==== fts3expr-5.1 + SELECT fts3_exprtest('simple', 'a b') +---- +stmt 0 err 1 8 39 no such function: fts3_exprtest +==== fts3expr-5.2 + SELECT fts3_exprtest('doesnotexist', 'a b', 'c') +---- +stmt 0 err 1 8 50 no such function: fts3_exprtest +==== fts3expr-5.3 + SELECT fts3_exprtest('simple', 'a b OR', 'c') +---- +stmt 0 err 1 8 47 no such function: fts3_exprtest +==== fts3expr-7.1 + + CREATE VIRTUAL TABLE test USING fts3 (keyword); + INSERT INTO test VALUES ('abc'); + SELECT * FROM test WHERE keyword MATCH '""'; +---- +stmt 0 ok +stmt 52 err 1 -1 89 no such table: test +stmt 89 err 1 -1 138 no such table: test diff --git a/parser/testdata/fts3expr5.metadata.json b/parser/testdata/fts3expr5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3expr5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3expr5.test b/parser/testdata/fts3expr5.test new file mode 100644 index 0000000..7a307a2 --- /dev/null +++ b/parser/testdata/fts3expr5.test @@ -0,0 +1,32 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t0 USING fts3(x); + SELECT rowid FROM t0 WHERE x MATCH ''; +---- +stmt 0 ok +stmt 41 err 1 -1 82 no such table: t0 +==== 1.1 + + SELECT rowid FROM t0 WHERE x MATCH '""'; +---- +stmt 0 err 1 -1 43 no such table: t0 +==== 1.2 + + SELECT rowid FROM t0 WHERE x MATCH '"" ""'; +---- +stmt 0 err 1 -1 46 no such table: t0 +==== 1.3 + + SELECT rowid FROM t0 WHERE x MATCH '"" OR ""'; +---- +stmt 0 err 1 -1 49 no such table: t0 +==== 1.4 + + SELECT rowid FROM t0 WHERE x MATCH '"" NOT ""'; +---- +stmt 0 err 1 -1 50 no such table: t0 +==== 1.5 + + SELECT rowid FROM t0 WHERE x MATCH '""""'; +---- +stmt 0 err 1 -1 45 no such table: t0 diff --git a/parser/testdata/fts3f.metadata.json b/parser/testdata/fts3f.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3f.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3f.test b/parser/testdata/fts3f.test new file mode 100644 index 0000000..73d27ad --- /dev/null +++ b/parser/testdata/fts3f.test @@ -0,0 +1,21 @@ +==== 1.0 + + CREATE VIRTUAL TABLE ft USING fts3(x); + BEGIN; + INSERT INTO ft VALUES('a one'), ('b one'), ('c one'); +---- +stmt 0 ok +stmt 41 ok +stmt 50 err 1 -1 108 no such table: ft +==== 1.2 + + BEGIN; + INSERT INTO ft VALUES('a one'), ('b one'), ('c one'); +---- +stmt 0 ok +stmt 9 err 1 -1 67 no such table: ft +==== 1.3 + + SELECT docid, optimize(ft) FROM ft WHERE ft MATCH 'one' +---- +stmt 0 err 1 -1 59 no such table: ft diff --git a/parser/testdata/fts3fault.metadata.json b/parser/testdata/fts3fault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3fault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3fault.test b/parser/testdata/fts3fault.test new file mode 100644 index 0000000..be8344b --- /dev/null +++ b/parser/testdata/fts3fault.test @@ -0,0 +1,14 @@ +==== 2.0 + + CREATE VIRTUAL TABLE t1 USING fts3; + INSERT INTO t1 VALUES('test renaming the table'); + INSERT INTO t1 VALUES(' after it has been written'); +---- +stmt 0 ok +stmt 38 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 145 no such table: t1 +==== 11.0 + + CREATE VIRTUAL TABLE t1 USING fts3(a, b); +---- +stmt 0 ok diff --git a/parser/testdata/fts3fault2.metadata.json b/parser/testdata/fts3fault2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3fault2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3fault2.test b/parser/testdata/fts3fault2.test new file mode 100644 index 0000000..a6d0d0e --- /dev/null +++ b/parser/testdata/fts3fault2.test @@ -0,0 +1,38 @@ +==== 7.0 + + CREATE VIRTUAL TABLE t7 USING fts4(x,prefix=2); + INSERT INTO t7 VALUES('the quick brown fox'); + INSERT INTO t7 VALUES('jumped over the'); + INSERT INTO t7 VALUES('lazy dog'); +---- +stmt 0 ok +stmt 50 err 1 -1 98 no such table: t7 +stmt 98 err 1 -1 142 no such table: t7 +stmt 142 err 1 -1 179 no such table: t7 +==== 8.0 + + CREATE VIRTUAL TABLE t8 USING fts3; + INSERT INTO t8 VALUES('the quick brown fox'); + INSERT INTO t8 VALUES('jumped over the'); + INSERT INTO t8 VALUES('lazy dog'); + INSERT INTO t8(t8) VALUES('automerge=8'); + SELECT name FROM sqlite_master WHERE name LIKE 't8%'; +---- +stmt 0 ok +stmt 38 err 1 -1 86 no such table: t8 +stmt 86 err 1 -1 130 no such table: t8 +stmt 130 err 1 -1 167 no such table: t8 +stmt 167 err 1 -1 211 no such table: t8 +stmt 211 ok +==== 9.0 + + PRAGMA page_size = 512; + CREATE VIRTUAL TABLE t9 USING fts3; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<50 + ) + INSERT INTO t9 SELECT 'one two three' FROM s; +---- +stmt 0 ok +stmt 26 ok +stmt 64 err 1 -1 185 no such table: t9 diff --git a/parser/testdata/fts3fault3.metadata.json b/parser/testdata/fts3fault3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3fault3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3fault3.test b/parser/testdata/fts3fault3.test new file mode 100644 index 0000000..556eda2 --- /dev/null +++ b/parser/testdata/fts3fault3.test @@ -0,0 +1,25 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts3(a); + INSERT INTO t1 VALUES('test renaming the table'); + INSERT INTO t1 VALUES(' after it has been written'); + INSERT INTO t1 VALUES(' actually other stuff instead'); +---- +stmt 0 ok +stmt 41 err 1 -1 93 no such table: t1 +stmt 93 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 206 no such table: t1 +==== 2.0 + + BEGIN; + CREATE VIRTUAL TABLE t1 USING fts3(a); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<50 + ) + INSERT INTO t1 SELECT 'abc def ghi jkl mno pqr' FROM s; + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 50 err 1 -1 183 no such table: t1 +stmt 183 ok diff --git a/parser/testdata/fts3first.metadata.json b/parser/testdata/fts3first.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3first.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3first.test b/parser/testdata/fts3first.test new file mode 100644 index 0000000..286419a --- /dev/null +++ b/parser/testdata/fts3first.test @@ -0,0 +1,76 @@ +==== 1.0 + + CREATE VIRTUAL TABLE x1 USING FTS4(a, b, c); + INSERT INTO x1(docid,a,b,c) VALUES(0, 'K H D S T', 'V M N Y K', 'S Z N Q S'); + INSERT INTO x1(docid,a,b,c) VALUES(1, 'K N J L W', 'S Z W J Q', 'D U W S E'); + INSERT INTO x1(docid,a,b,c) VALUES(2, 'B P M O I', 'R P H W S', 'R J L L E'); + INSERT INTO x1(docid,a,b,c) VALUES(3, 'U R Q M L', 'M J K A V', 'Q W J T J'); + INSERT INTO x1(docid,a,b,c) VALUES(4, 'N J C Y N', 'R U D X V', 'B O U A Q'); + INSERT INTO x1(docid,a,b,c) VALUES(5, 'Q L X L U', 'I F N X S', 'U Q A N Y'); + INSERT INTO x1(docid,a,b,c) VALUES(6, 'M R G U T', 'U V I Q P', 'X Y D L S'); + INSERT INTO x1(docid,a,b,c) VALUES(7, 'D Y P O I', 'X J P K R', 'V O T H V'); + INSERT INTO x1(docid,a,b,c) VALUES(8, 'R Y D L R', 'U U E S J', 'N W L M R'); + INSERT INTO x1(docid,a,b,c) VALUES(9, 'Z P F N P', 'W A X D U', 'V A E Q A'); + INSERT INTO x1(docid,a,b,c) VALUES(10, 'Q I A Q M', 'N D K H C', 'A H T Q Z'); + INSERT INTO x1(docid,a,b,c) VALUES(11, 'T E R Q B', 'C I B C B', 'F Z U W R'); + INSERT INTO x1(docid,a,b,c) VALUES(12, 'E S V U W', 'T P F W H', 'A M D J Q'); + INSERT INTO x1(docid,a,b,c) VALUES(13, 'X S B X Y', 'U D N D P', 'X Z Y G F'); + INSERT INTO x1(docid,a,b,c) VALUES(14, 'K H A B L', 'S R C C Z', 'D W E H J'); + INSERT INTO x1(docid,a,b,c) VALUES(15, 'C E U C C', 'W F M N M', 'T Z U X T'); + INSERT INTO x1(docid,a,b,c) VALUES(16, 'Q G C G H', 'H N N B H', 'B Q I H Y'); + INSERT INTO x1(docid,a,b,c) VALUES(17, 'Q T S K B', 'W B D Y N', 'V J P E C'); + INSERT INTO x1(docid,a,b,c) VALUES(18, 'A J M O Q', 'L G Y Y A', 'G N M R N'); + INSERT INTO x1(docid,a,b,c) VALUES(19, 'T R Y P Y', 'N V Y B X', 'L Z T N T'); + + CREATE VIRTUAL TABLE x2 USING FTS4(a, b, c, order=DESC); + INSERT INTO x2(docid, a, b, c) SELECT docid, a, b, c FROM x1; +---- +stmt 0 ok +stmt 47 err 1 -1 127 no such table: x1 +stmt 127 err 1 -1 207 no such table: x1 +stmt 207 err 1 -1 287 no such table: x1 +stmt 287 err 1 -1 367 no such table: x1 +stmt 367 err 1 -1 447 no such table: x1 +stmt 447 err 1 -1 527 no such table: x1 +stmt 527 err 1 -1 607 no such table: x1 +stmt 607 err 1 -1 687 no such table: x1 +stmt 687 err 1 -1 767 no such table: x1 +stmt 767 err 1 -1 847 no such table: x1 +stmt 847 err 1 -1 928 no such table: x1 +stmt 928 err 1 -1 1009 no such table: x1 +stmt 1009 err 1 -1 1090 no such table: x1 +stmt 1090 err 1 -1 1171 no such table: x1 +stmt 1171 err 1 -1 1252 no such table: x1 +stmt 1252 err 1 -1 1333 no such table: x1 +stmt 1333 err 1 -1 1414 no such table: x1 +stmt 1414 err 1 -1 1495 no such table: x1 +stmt 1495 err 1 -1 1576 no such table: x1 +stmt 1576 err 1 -1 1657 no such table: x1 +stmt 1657 ok +stmt 1717 err 1 -1 1781 no such table: x2 +==== 2.1 + + CREATE VIRTUAL TABLE x3 USING fts3; + INSERT INTO x3 VALUES('A B C'); + INSERT INTO x3 VALUES('B A C'); + + CREATE VIRTUAL TABLE x4 USING fts4; + INSERT INTO x4 VALUES('A B C'); + INSERT INTO x4 VALUES('B A C'); +---- +stmt 0 ok +stmt 38 err 1 -1 72 no such table: x3 +stmt 72 err 1 -1 106 no such table: x3 +stmt 106 ok +stmt 145 err 1 -1 179 no such table: x4 +stmt 179 err 1 -1 213 no such table: x4 +==== 2.2.1 + + SELECT * FROM x3 WHERE x3 MATCH '^A'; +---- +stmt 0 err 1 -1 40 no such table: x3 +==== 2.2.2 + + SELECT * FROM x4 WHERE x4 MATCH '^A'; +---- +stmt 0 err 1 -1 40 no such table: x4 diff --git a/parser/testdata/fts3fuzz001.metadata.json b/parser/testdata/fts3fuzz001.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3fuzz001.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3fuzz001.test b/parser/testdata/fts3fuzz001.test new file mode 100644 index 0000000..30f8332 --- /dev/null +++ b/parser/testdata/fts3fuzz001.test @@ -0,0 +1,46 @@ +==== fts3fuzz001-110 + + INSERT INTO t1(t1) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== fts3fuzz001-120 + + INSERT INTO t1(t1) VALUES('optimize'); +---- +stmt 0 err 1 -1 43 no such table: t1 +==== fts3fuzz001-121 + + INSERT INTO t1(t1) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 200 + + CREATE VIRTUAL TABLE x1 USING fts3(x); + + INSERT INTO x1 VALUES('braes brag bragged bragger bragging'); + INSERT INTO x1 VALUES('brags braid braided braiding braids'); + INSERT INTO x1 VALUES('brain brainchild brained braining brains'); + INSERT INTO x1 VALUES('brainstem brainstems brainstorm brainstorms'); + INSERT INTO x1(x1) VALUES('nodesize=24'); +---- +stmt 0 ok +stmt 41 err 1 -1 106 no such table: x1 +stmt 106 err 1 -1 170 no such table: x1 +stmt 170 err 1 -1 239 no such table: x1 +stmt 239 err 1 -1 311 no such table: x1 +stmt 311 err 1 -1 355 no such table: x1 +==== 210 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 220 + + INSERT INTO x1(x1) VALUES('merge=10,2') +---- +stmt 0 err 1 -1 43 no such table: x1 +==== 220.dup1 + + PRAGMA integrity_check; +---- +stmt 0 ok diff --git a/parser/testdata/fts3integrity.metadata.json b/parser/testdata/fts3integrity.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3integrity.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3integrity.test b/parser/testdata/fts3integrity.test new file mode 100644 index 0000000..a3ae99d --- /dev/null +++ b/parser/testdata/fts3integrity.test @@ -0,0 +1,21 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts3(x); + INSERT INTO t1 VALUES('first row'); + INSERT INTO t1 VALUES('second row'); + + CREATE TABLE t2(x PRIMARY KEY); + INSERT INTO t2 VALUES('first row'); + INSERT INTO t2 VALUES('second row'); +---- +stmt 0 ok +stmt 41 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 118 no such table: t1 +stmt 118 ok +stmt 153 err 1 -1 191 no such table: t2 +stmt 191 err 1 -1 230 no such table: t2 +==== 1.2 + + PRAGMA integrity_check; +---- +stmt 0 ok diff --git a/parser/testdata/fts3join.metadata.json b/parser/testdata/fts3join.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3join.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3join.test b/parser/testdata/fts3join.test new file mode 100644 index 0000000..623c79a --- /dev/null +++ b/parser/testdata/fts3join.test @@ -0,0 +1,102 @@ +==== 1.0 + + CREATE VIRTUAL TABLE ft1 USING fts4(x); + INSERT INTO ft1 VALUES('aaa aaa'); + INSERT INTO ft1 VALUES('aaa bbb'); + INSERT INTO ft1 VALUES('bbb aaa'); + INSERT INTO ft1 VALUES('bbb bbb'); + + CREATE TABLE t1(id, y); + INSERT INTO t1 VALUES(1, 'aaa'); + INSERT INTO t1 VALUES(2, 'bbb'); +---- +stmt 0 ok +stmt 42 err 1 -1 79 no such table: ft1 +stmt 79 err 1 -1 116 no such table: ft1 +stmt 116 err 1 -1 153 no such table: ft1 +stmt 153 err 1 -1 190 no such table: ft1 +stmt 190 ok +stmt 217 err 1 -1 252 no such table: t1 +stmt 252 err 1 -1 287 no such table: t1 +==== 1.1 + + SELECT docid FROM ft1, t1 WHERE ft1 MATCH y AND id=1; +---- +stmt 0 err 1 -1 56 no such table: ft1 +==== 1.2 + + SELECT docid FROM ft1, t1 WHERE ft1 MATCH y AND id=1 ORDER BY docid; +---- +stmt 0 err 1 -1 71 no such table: ft1 +==== 2.0 + + CREATE VIRTUAL TABLE ft2 USING fts4(x); + CREATE VIRTUAL TABLE ft3 USING fts4(y); + + INSERT INTO ft2 VALUES('abc'); + INSERT INTO ft2 VALUES('def'); + INSERT INTO ft3 VALUES('ghi'); + INSERT INTO ft3 VALUES('abc'); +---- +stmt 0 ok +stmt 42 ok +stmt 84 err 1 -1 118 no such table: ft2 +stmt 118 err 1 -1 151 no such table: ft2 +stmt 151 err 1 -1 184 no such table: ft3 +stmt 184 err 1 -1 217 no such table: ft3 +==== 2.1 + SELECT * FROM ft2, ft3 WHERE x MATCH y; +---- +stmt 0 err 1 -1 40 no such table: ft2 +==== 2.2 + SELECT * FROM ft2, ft3 WHERE y MATCH x; +---- +stmt 0 err 1 -1 40 no such table: ft2 +==== 2.3 + SELECT * FROM ft3, ft2 WHERE x MATCH y; +---- +stmt 0 err 1 -1 40 no such table: ft3 +==== 2.4 + SELECT * FROM ft3, ft2 WHERE y MATCH x; +---- +stmt 0 err 1 -1 40 no such table: ft3 +==== 2.5 + + SELECT * FROM ft3, ft2 WHERE y MATCH x AND x MATCH y; +---- +stmt 0 err 1 -1 57 no such table: ft3 +==== 3.0 + + CREATE VIRTUAL TABLE vt USING fts3(x); + INSERT INTO vt VALUES('abc'); + INSERT INTO vt VALUES('xyz'); + + CREATE TABLE tt(a INTEGER PRIMARY KEY); + INSERT INTO tt VALUES(1), (2); +---- +stmt 0 ok +stmt 41 err 1 -1 73 no such table: vt +stmt 73 err 1 -1 105 no such table: vt +stmt 105 ok +stmt 148 err 1 -1 181 no such table: tt +==== 3.1 + + SELECT * FROM tt LEFT JOIN ( + SELECT rowid AS rrr, * FROM vt WHERE vt MATCH 'abc' + ) ON tt.a = rrr +---- +stmt 0 err 1 -1 106 no such table: tt +==== 3.2 + + SELECT * FROM tt LEFT JOIN vt ON (vt MATCH 'abc') +---- +stmt 0 err 1 -1 53 no such table: tt +==== 4.1 + + CREATE VIRTUAL TABLE ft4 USING fts3(x); + CREATE TABLE t4(y, z); + CREATE INDEX t4y ON t1(y); +---- +stmt 0 ok +stmt 42 ok +stmt 67 err 1 -1 96 no such table: main.t1 diff --git a/parser/testdata/fts3malloc.metadata.json b/parser/testdata/fts3malloc.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3malloc.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3malloc.test b/parser/testdata/fts3malloc.test new file mode 100644 index 0000000..89cad60 --- /dev/null +++ b/parser/testdata/fts3malloc.test @@ -0,0 +1,12 @@ +==== fts3_malloc-4.0 + DELETE FROM ft WHERE docid>=32 +---- +stmt 0 err 1 -1 32 no such table: ft +==== fts3_malloc-4.2 + SELECT a FROM ft +---- +stmt 0 err 1 -1 18 no such table: ft +==== fts3_malloc-5.2 + CREATE VIRTUAL TABLE ft8 USING fts3(x, tokenize porter) +---- +stmt 0 ok diff --git a/parser/testdata/fts3matchinfo.metadata.json b/parser/testdata/fts3matchinfo.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3matchinfo.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3matchinfo.test b/parser/testdata/fts3matchinfo.test new file mode 100644 index 0000000..718d96d --- /dev/null +++ b/parser/testdata/fts3matchinfo.test @@ -0,0 +1,302 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts4(matchinfo=fts3); + SELECT name FROM sqlite_master WHERE type = 'table'; +---- +stmt 0 ok +stmt 54 ok +==== 1.1 + + INSERT INTO t1(content) VALUES('I wandered lonely as a cloud'); + INSERT INTO t1(content) VALUES('That floats on high o''er vales and hills,'); + INSERT INTO t1(content) VALUES('When all at once I saw a crowd,'); + INSERT INTO t1(content) VALUES('A host, of golden daffodils,'); + SELECT mit(matchinfo(t1)) FROM t1 WHERE t1 MATCH 'I'; +---- +stmt 0 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 215 no such table: t1 +stmt 215 err 1 -1 281 no such table: t1 +stmt 281 err 1 -1 337 no such table: t1 +==== 1.2 + + CREATE VIRTUAL TABLE t2 USING fts4; + INSERT INTO t2 SELECT * FROM t1; + SELECT mit(matchinfo(t2)) FROM t2 WHERE t2 MATCH 'I'; +---- +stmt 0 ok +stmt 38 err 1 -1 73 no such table: t2 +stmt 73 err 1 -1 129 no such table: t2 +==== 2.0 + + CREATE VIRTUAL TABLE x1 USING fts4(matchinfo=fs3); +---- +stmt 0 ok +==== 2.1 + + CREATE VIRTUAL TABLE x2 USING fts4(mtchinfo=fts3); +---- +stmt 0 ok +==== 2.2 + + CREATE VIRTUAL TABLE x2 USING fts4(matchinfo=fts5); +---- +stmt 0 ok +==== 3.1 + + CREATE VIRTUAL TABLE t3 USING fts3(mtchinfo=fts3); + INSERT INTO t3(mtchinfo) VALUES('Beside the lake, beneath the trees'); + SELECT mtchinfo FROM t3; +---- +stmt 0 ok +stmt 53 err 1 -1 126 no such table: t3 +stmt 126 err 1 -1 153 no such table: t3 +==== 3.2 + + CREATE VIRTUAL TABLE xx USING FTS4; +---- +stmt 0 ok +==== 3.3 + + SELECT * FROM xx WHERE xx MATCH 'abc'; +---- +stmt 0 err 1 -1 41 no such table: xx +==== 3.4 + + SELECT * FROM xx WHERE xx MATCH 'a b c'; +---- +stmt 0 err 1 -1 43 no such table: xx +==== 4.1.0 + + CREATE VIRTUAL TABLE t4 USING fts4(x, y); + INSERT INTO t4 VALUES('a b c d e', 'f g h i j'); + INSERT INTO t4 VALUES('f g h i j', 'a b c d e'); +---- +stmt 0 ok +stmt 44 err 1 -1 95 no such table: t4 +stmt 95 err 1 -1 146 no such table: t4 +==== 4.2.0 + + CREATE VIRTUAL TABLE t5 USING fts4; + INSERT INTO t5 VALUES('a a a a a'); + INSERT INTO t5 VALUES('a b a b a'); + INSERT INTO t5 VALUES('c b c b c'); + INSERT INTO t5 VALUES('x x x x x'); +---- +stmt 0 ok +stmt 38 err 1 -1 76 no such table: t5 +stmt 76 err 1 -1 114 no such table: t5 +stmt 114 err 1 -1 152 no such table: t5 +stmt 152 err 1 -1 190 no such table: t5 +==== 4.4.0.1 + INSERT INTO t5(t5) VALUES('optimize') +---- +stmt 0 err 1 -1 39 no such table: t5 +==== 4.4.0.2 + + UPDATE t5_segments + SET block = zeroblob(length(block)) + WHERE length(block)>10000; +---- +stmt 0 err 1 -1 96 no such table: t5_segments +==== 4.5.0 + + CREATE VIRTUAL TABLE t6 USING fts4(a, b, c); + INSERT INTO t6 VALUES('a', 'b', 'c'); +---- +stmt 0 ok +stmt 47 err 1 -1 87 no such table: t6 +==== 5.1 + + CREATE VIRTUAL TABLE t7 USING fts3(a, b); + INSERT INTO t7 VALUES('u v w', 'x y z'); + + CREATE VIRTUAL TABLE t8 USING fts4(a, b, matchinfo=fts3); + INSERT INTO t8 VALUES('u v w', 'x y z'); +---- +stmt 0 ok +stmt 44 err 1 -1 87 no such table: t7 +stmt 87 ok +stmt 148 err 1 -1 191 no such table: t8 +==== 5.2.1 + + SELECT matchinfo(t7, 'a') FROM t7 WHERE t7 MATCH 'x y' +---- +stmt 0 err 1 -1 59 no such table: t7 +==== 5.2.2 + + SELECT matchinfo(t7, 'l') FROM t7 WHERE t7 MATCH 'x y' +---- +stmt 0 err 1 -1 59 no such table: t7 +==== 5.2.3 + + SELECT matchinfo(t7, 'n') FROM t7 WHERE t7 MATCH 'x y' +---- +stmt 0 err 1 -1 59 no such table: t7 +==== 5.3.1 + + SELECT matchinfo(t8, 'l') FROM t8 WHERE t8 MATCH 'x y' +---- +stmt 0 err 1 -1 59 no such table: t8 +==== 6.1 + + CREATE VIRTUAL TABLE t9 USING fts4; + INSERT INTO t9 VALUES( + 'this record is used to try to dectect corruption' + ); + SELECT offsets(t9) FROM t9 WHERE t9 MATCH 'to'; +---- +stmt 0 ok +stmt 38 err 1 -1 123 no such table: t9 +stmt 123 err 1 -1 173 no such table: t9 +==== 6.2 + + UPDATE t9_content SET c0content = 'this record is used to'; + SELECT offsets(t9) FROM t9 WHERE t9 MATCH 'to'; +---- +stmt 0 err 1 -1 62 no such table: t9_content +stmt 62 err 1 -1 113 no such table: t9 +==== 7.1 + + CREATE VIRTUAL TABLE t10 USING fts4; + INSERT INTO t10 VALUES('first record'); + INSERT INTO t10 VALUES('second record'); +---- +stmt 0 ok +stmt 39 err 1 -1 81 no such table: t10 +stmt 81 err 1 -1 124 no such table: t10 +==== 7.2 + + SELECT typeof(matchinfo(t10)), length(matchinfo(t10)) FROM t10; +---- +stmt 0 err 1 -1 66 no such table: t10 +==== 7.3 + + SELECT typeof(matchinfo(t10)), length(matchinfo(t10)) FROM t10 WHERE docid=1; +---- +stmt 0 err 1 -1 80 no such table: t10 +==== 7.4 + + SELECT typeof(matchinfo(t10)), length(matchinfo(t10)) + FROM t10 WHERE t10 MATCH 'record' +---- +stmt 0 err 1 -1 94 no such table: t10 +==== 8.1 + + CREATE VIRTUAL TABLE t11 USING fts4; + INSERT INTO t11(t11) VALUES('nodesize=24'); + INSERT INTO t11 VALUES('quitealongstringoftext'); + INSERT INTO t11 VALUES('anotherquitealongstringoftext'); + INSERT INTO t11 VALUES('athirdlongstringoftext'); + INSERT INTO t11 VALUES('andonemoreforgoodluck'); +---- +stmt 0 ok +stmt 39 err 1 -1 85 no such table: t11 +stmt 85 err 1 -1 137 no such table: t11 +stmt 137 err 1 -1 196 no such table: t11 +stmt 196 err 1 -1 248 no such table: t11 +stmt 248 err 1 -1 299 no such table: t11 +==== 8.3 + + SELECT mit(matchinfo(t11, 'nxa')) FROM t11 WHERE t11 MATCH 'a*' +---- +stmt 0 err 1 -1 67 no such table: t11 +==== 8.4.1.1 + UPDATE t11_stat SET value = X'0000'; +---- +stmt 0 err 1 -1 37 no such table: t11_stat +==== 8.5.1.2 + + SELECT mit(matchinfo(t11, 'nxa')) FROM t11 WHERE t11 MATCH 'a*' +---- +stmt 0 err 1 -1 67 no such table: t11 +==== 8.4.2.1 + UPDATE t11_stat SET value = X'00'; +---- +stmt 0 err 1 -1 35 no such table: t11_stat +==== 8.5.2.2 + + SELECT mit(matchinfo(t11, 'nxa')) FROM t11 WHERE t11 MATCH 'a*' +---- +stmt 0 err 1 -1 67 no such table: t11 +==== 8.4.3.1 + UPDATE t11_stat SET value = NULL; +---- +stmt 0 err 1 -1 34 no such table: t11_stat +==== 8.5.3.2 + + SELECT mit(matchinfo(t11, 'nxa')) FROM t11 WHERE t11 MATCH 'a*' +---- +stmt 0 err 1 -1 67 no such table: t11 +==== 8.1.dup1 + + CREATE VIRTUAL TABLE t12 USING fts4; + INSERT INTO t12 VALUES('a b c d'); + SELECT mit(matchinfo(t12, 'x')) FROM t12 WHERE t12 MATCH 'a NEAR/1 d OR a'; +---- +stmt 0 ok +stmt 39 err 1 -1 76 no such table: t12 +stmt 76 err 1 -1 154 no such table: t12 +==== 8.2 + + INSERT INTO t12 VALUES('a d c d'); + SELECT mit(matchinfo(t12, 'x')) FROM t12 WHERE t12 MATCH 'a NEAR/1 d OR a'; +---- +stmt 0 err 1 -1 37 no such table: t12 +stmt 37 err 1 -1 115 no such table: t12 +==== 8.3.dup1 + + INSERT INTO t12 VALUES('a d d a'); + SELECT mit(matchinfo(t12, 'x')) FROM t12 WHERE t12 MATCH 'a NEAR/1 d OR a'; +---- +stmt 0 err 1 -1 37 no such table: t12 +stmt 37 err 1 -1 115 no such table: t12 +==== 10.1 + + DROP TABLE t10; + CREATE VIRTUAL TABLE t10 USING fts4(idx, value); + INSERT INTO t10 values (1, 'one'),(2, 'two'),(3, 'three'); + SELECT docId, t10.* + FROM t10 + JOIN (SELECT 1 AS idx UNION SELECT 2 UNION SELECT 3) AS x + WHERE t10 MATCH x.idx + AND matchinfo(t10) not null + GROUP BY docId + ORDER BY 1; +---- +stmt 0 err 1 -1 18 no such table: t10 +stmt 18 ok +stmt 69 err 1 -1 130 no such table: t10 +stmt 130 err 1 -1 318 no such table: t10 +==== 11.0 + + CREATE VIRTUAL TABLE tt USING fts3(x, y); + INSERT INTO tt VALUES('c d a c d d', 'e a g b d a'); -- 1 + INSERT INTO tt VALUES('c c g a e b', 'c g d g e c'); -- 2 + INSERT INTO tt VALUES('b e f d e g', 'b a c b c g'); -- 3 + INSERT INTO tt VALUES('a c f f g d', 'd b f d e g'); -- 4 + INSERT INTO tt VALUES('g a c f c f', 'd g g b c c'); -- 5 + INSERT INTO tt VALUES('g a c e b b', 'd b f b g g'); -- 6 + INSERT INTO tt VALUES('f d a a f c', 'e e a d c f'); -- 7 + INSERT INTO tt VALUES('a c b b g f', 'a b a e d f'); -- 8 + INSERT INTO tt VALUES('b a f e c c', 'f d b b a b'); -- 9 + INSERT INTO tt VALUES('f d c e a c', 'f a f a a f'); -- 10 +---- +stmt 0 ok +stmt 44 err 1 -1 99 no such table: tt +stmt 99 err 1 -1 161 no such table: tt +stmt 161 err 1 -1 223 no such table: tt +stmt 223 err 1 -1 285 no such table: tt +stmt 285 err 1 -1 347 no such table: tt +stmt 347 err 1 -1 409 no such table: tt +stmt 409 err 1 -1 471 no such table: tt +stmt 471 err 1 -1 533 no such table: tt +stmt 533 err 1 -1 595 no such table: tt +stmt 595 err 1 -1 657 no such table: tt +==== 12.1 + + INSERT INTO tt (rowid, c4, c45) VALUES(1, 'abc', 'abc'); + SELECT mit(matchinfo(tt, 'b')) FROM tt WHERE tt MATCH 'abc'; +---- +stmt 0 err 1 -1 59 no such table: tt +stmt 59 err 1 -1 122 no such table: tt diff --git a/parser/testdata/fts3matchinfo2.metadata.json b/parser/testdata/fts3matchinfo2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3matchinfo2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3matchinfo2.test b/parser/testdata/fts3matchinfo2.test new file mode 100644 index 0000000..c8b43ac --- /dev/null +++ b/parser/testdata/fts3matchinfo2.test @@ -0,0 +1,11 @@ +==== 1.0 + + CREATE TABLE t_content(col0 INTEGER); + CREATE VIRTUAL TABLE t0 USING fts3(col0 INTEGER PRIMARY KEY,col1 VARCHAR(8),col2 BINARY,col3 BINARY); + INSERT INTO t0 VALUES (1, '1234','aaaa','bbbb'); + SELECT hex(matchinfo(t0,'yxy')) FROM t0 WHERE t0 MATCH x'2b0a312b0a312a312a2a0b5d0a0b0b0a312a0a0b0b0a312a0b310a392a0b0a27312a2a0b5d0a312a0b310a31315d0b310a312a316d2a0b313b15bceaa50a312a0b0a27312a2a0b5d0a312a0b310a312b0b2a310a312a0b2a0b2a0b2e5d0a0bff313336e34a2a312a0b0a3c310b0a0b4b4b0b4b2a4bec40322b2a0b310a0a312a0a0a0a0a0a0a0a0a0b310a312a2a2a0b5d0a0b0b0a312a0b310a312a0b0a4e4541530b310a5df5ced70a0a0a0a0a4f520a0a0a0a0a0a0a312a0b0a4e4541520b310a5d616161610a0a0a0a4f520a0a0a0a0a0a312b0a312a312a0a0a0a0a0a0a004a0b0a310b220a0b0a310a4a22310a0b0a7e6fe0e0e030e0e0e0e0e01176e02000e0e0e0e0e01131320226310a0b0a310a4a22310a0b0a310a766f8b8b4ee0e0300ae0090909090909090909090909090909090909090909090909090909090909090947aaaa540b09090909090909090909090909090909090909090909090909090909090909fae0e0f2f22164e0e0f273e07fefefef7d6dfafafafa6d6d6d6d'; +---- +stmt 0 ok +stmt 40 ok +stmt 144 err 1 -1 195 no such table: t0 +stmt 195 err 1 -1 1031 no such table: t0 diff --git a/parser/testdata/fts3misc.metadata.json b/parser/testdata/fts3misc.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3misc.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3misc.test b/parser/testdata/fts3misc.test new file mode 100644 index 0000000..8eaeefe --- /dev/null +++ b/parser/testdata/fts3misc.test @@ -0,0 +1,319 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts3(a, b); + INSERT INTO t1 VALUES('one', 'i'); + INSERT INTO t1 VALUES('one', 'ii'); + INSERT INTO t1 VALUES('two', 'i'); + INSERT INTO t1 VALUES('two', 'ii'); +---- +stmt 0 ok +stmt 44 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 119 no such table: t1 +stmt 119 err 1 -1 156 no such table: t1 +stmt 156 err 1 -1 194 no such table: t1 +==== 1.1 + + SELECT a.a, b.b FROM t1 a, t1 b WHERE a.t1 MATCH 'two' AND b.t1 MATCH 'i' +---- +stmt 0 err 1 -1 77 no such table: t1 +==== 2.1 + + SELECT rowid FROM t2 WHERE t2 MATCH '"a b c"' +---- +stmt 0 err 1 -1 49 no such table: t2 +==== 2.2 + + SELECT rowid FROM t2 WHERE t2 MATCH '"g h i"' +---- +stmt 0 err 1 -1 49 no such table: t2 +==== 2.3 + + SELECT rowid FROM t2 WHERE t2 MATCH '"i h"' +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 2.4 + + SELECT rowid FROM t2 WHERE t2 MATCH '"f e"' +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 2.5 + + SELECT rowid FROM t2 WHERE t2 MATCH '"e f"' +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 2.6 + + SELECT rowid FROM t2 WHERE t2 MATCH 'e' AND rowid BETWEEN NULL AND 45; +---- +stmt 0 err 1 -1 73 no such table: t2 +==== 2.7 + + SELECT rowid FROM t2 WHERE t2 MATCH 'e' AND rowid BETWEEN 11.5 AND 48.2; +---- +stmt 0 err 1 -1 75 no such table: t2 +==== 2.8 + + SELECT rowid FROM t2 WHERE t2 MATCH 'e' AND rowid BETWEEN '11.5' AND '48.2'; +---- +stmt 0 err 1 -1 79 no such table: t2 +==== 3.1.1 + + CREATE VIRTUAL TABLE t3 USING fts3; + INSERT INTO t3 VALUES('a b c'); + INSERT INTO t3 VALUES('d e f'); + INSERT INTO t3 VALUES('a b d'); + INSERT INTO t3 VALUES('1 2 3 4 5 6 7 8 9 10 11'); +---- +stmt 0 ok +stmt 38 err 1 -1 72 no such table: t3 +stmt 72 err 1 -1 106 no such table: t3 +stmt 106 err 1 -1 140 no such table: t3 +stmt 140 err 1 -1 192 no such table: t3 +==== 3.1.2 + + SELECT * FROM t3 WHERE t3 MATCH '"a b x y"' ORDER BY docid DESC +---- +stmt 0 err 1 -1 67 no such table: t3 +==== 3.1.3 + + SELECT * FROM t3 WHERE t3 MATCH '"a b c" OR "a b x y"' ORDER BY docid DESC +---- +stmt 0 err 1 -1 78 no such table: t3 +==== 3.1.4 + + SELECT * FROM t3 WHERE t3 MATCH '"a* b* x* a*"' +---- +stmt 0 err 1 -1 51 no such table: t3 +==== 3.1.5 + + SELECT rowid FROM t3 WHERE t3 MATCH '"2 3 4 5 6 7 8 9"' +---- +stmt 0 err 1 -1 59 no such table: t3 +==== 4.0 + + PRAGMA page_size = 512; + CREATE VIRTUAL TABLE t4 USING fts4; + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<8000 ) + INSERT INTO t4 SELECT 'a b c a b c a b c' FROM s; +---- +stmt 0 ok +stmt 28 ok +stmt 68 err 1 -1 193 no such table: t4 +==== 4.1 + + SELECT count(*) FROM t4 WHERE t4 MATCH '"a b c" OR "c a b"' +---- +stmt 0 err 1 -1 65 no such table: t4 +==== 4.2 + + SELECT quote(value) from t4_stat where id=0 +---- +stmt 0 err 1 -1 49 no such table: t4_stat +==== 4.3 + + UPDATE t4_stat SET value = X'C03EC0B204C0A60800' WHERE id=0; +---- +stmt 0 err 1 -1 65 no such table: t4_stat +==== 4.4 + + SELECT count(*) FROM t4 WHERE t4 MATCH '"a b c" OR "c a b"' +---- +stmt 0 err 1 -1 65 no such table: t4 +==== 4.5 + + UPDATE t4_stat SET value = X'00C03EC0B204C0A608' WHERE id=0; +---- +stmt 0 err 1 -1 65 no such table: t4_stat +==== 4.6 + + SELECT count(*) FROM t4 WHERE t4 MATCH '"a b c" OR "c a b"' +---- +stmt 0 err 1 -1 65 no such table: t4 +==== 5.0 + + CREATE VIRTUAL TABLE t5 USING fts4; + INSERT INTO t5 VALUES('a x x x x b x x x x c'); + INSERT INTO t5 VALUES('a x x x x b x x x x c'); + INSERT INTO t5 VALUES('a x x x x b x x x x c'); +---- +stmt 0 ok +stmt 38 err 1 -1 88 no such table: t5 +stmt 88 err 1 -1 138 no such table: t5 +stmt 138 err 1 -1 188 no such table: t5 +==== 5.1 + + SELECT rowid FROM t5 WHERE t5 MATCH 'a NEAR/4 b NEAR/4 c' +---- +stmt 0 err 1 -1 61 no such table: t5 +==== 5.2 + + SELECT rowid FROM t5 WHERE t5 MATCH 'a NEAR/3 b NEAR/4 c' +---- +stmt 0 err 1 -1 61 no such table: t5 +==== 5.3 + + SELECT rowid FROM t5 WHERE t5 MATCH 'a NEAR/4 b NEAR/3 c' +---- +stmt 0 err 1 -1 61 no such table: t5 +==== 5.4 + + SELECT rowid FROM t5 WHERE t5 MATCH 'y NEAR/4 b NEAR/4 c' +---- +stmt 0 err 1 -1 61 no such table: t5 +==== 5.5 + + SELECT rowid FROM t5 WHERE t5 MATCH 'x OR a NEAR/3 b NEAR/3 c' +---- +stmt 0 err 1 -1 66 no such table: t5 +==== 5.5.dup1 + + SELECT rowid FROM t5 WHERE t5 MATCH 'x OR y NEAR/3 b NEAR/3 c' +---- +stmt 0 err 1 -1 66 no such table: t5 +==== 6.0 + + CREATE VIRTUAL TABLE t6 USING fts4; + + BEGIN; + WITH s(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<50000) + INSERT INTO t6 SELECT 'x x x x x x x x x x x' FROM s; + + INSERT INTO t6 VALUES('x x x x x x x x x x x A'); + INSERT INTO t6 VALUES('x x x x x x x x x x x B'); + INSERT INTO t6 VALUES('x x x x x x x x x x x A'); + INSERT INTO t6 VALUES('x x x x x x x x x x x B'); + + WITH s(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<50000) + INSERT INTO t6 SELECT 'x x x x x x x x x x x' FROM s; + COMMIT; +---- +stmt 0 ok +stmt 38 ok +stmt 48 err 1 -1 174 no such table: t6 +stmt 174 err 1 -1 227 no such table: t6 +stmt 227 err 1 -1 279 no such table: t6 +stmt 279 err 1 -1 331 no such table: t6 +stmt 331 err 1 -1 383 no such table: t6 +stmt 383 err 1 -1 510 no such table: t6 +stmt 510 ok +==== 6.1 + + SELECT rowid FROM t6 WHERE t6 MATCH 'b OR "x a"' +---- +stmt 0 err 1 -1 52 no such table: t6 +==== 7.0 + + CREATE VIRTUAL TABLE vt0 USING fts3(c0); + INSERT INTO vt0 VALUES (x'00'); +---- +stmt 0 ok +stmt 43 err 1 -1 77 no such table: vt0 +==== 7.1 + + INSERT INTO vt0(vt0) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 50 no such table: vt0 +==== 7.0.1 + + CREATE VIRTUAL TABLE vt0 USING fts4(c0, order=DESC); + INSERT INTO vt0(c0) VALUES (0), (0); +---- +stmt 0 ok +stmt 55 err 1 -1 94 no such table: vt0 +==== 7.0.2 + + INSERT INTO vt0(vt0) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 50 no such table: vt0 +==== 7.1.1 + + CREATE VIRTUAL TABLE vt0 USING fts4(c0, order=ASC); + INSERT INTO vt0(c0) VALUES (0), (0); +---- +stmt 0 ok +stmt 54 err 1 -1 93 no such table: vt0 +==== 7.1.2 + + INSERT INTO vt0(vt0) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 50 no such table: vt0 +==== 7.2.1 + + CREATE VIRTUAL TABLE ft USING fts4(c0, c1, order=DESC, prefix=1); + INSERT INTO ft VALUES('a b c d', 'hello world'); + INSERT INTO ft VALUES('negative', 'positive'); + INSERT INTO ft VALUES('hello world', 'a b c d'); +---- +stmt 0 ok +stmt 68 err 1 -1 119 no such table: ft +stmt 119 err 1 -1 168 no such table: ft +stmt 168 err 1 -1 219 no such table: ft +==== 7.2.2 + + INSERT INTO vt0(vt0) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 50 no such table: vt0 +==== 8.1 + + CREATE VIRTUAL TABLE vt0 USING fts4(c0, prefix=1); +---- +stmt 0 ok +==== 8.2 + + BEGIN; + INSERT INTO vt0 VALUES (0); + INSERT INTO vt0(vt0) VALUES('optimize'); + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 41 no such table: vt0 +stmt 41 err 1 -1 86 no such table: vt0 +stmt 86 ok +==== 8.3 + + INSERT INTO vt0(vt0) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 50 no such table: vt0 +==== 9.0 + + CREATE VIRTUAL TABLE t1 using fts4(mailcontent); + insert into t1(rowid, mailcontent) values + (-4764623217061966105, 'we are going to upgrade'), + (8324454597464624651, 'we are going to upgrade'); +---- +stmt 0 ok +stmt 51 err 1 -1 208 no such table: t1 +==== 9.1 + + INSERT INTO t1(t1) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 9.2 + + SELECT rowid FROM t1 WHERE t1 MATCH 'upgrade'; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 10.0 + + CREATE VIRTUAL TABLE f USING fts3(a,b); + CREATE TABLE 'f_stat'(id INTEGER PRIMARY KEY, value BLOB); + INSERT INTO f_stat VALUES (1,x'3b3b3b3b3b3b3b28ffffffffffffffffff1807f9073481f1d43bc93b3b3b3b3b3b3b3b3b3b18073b3b3b3b3b3b3b9b003b'); +---- +stmt 0 ok +stmt 42 ok +stmt 103 err 1 -1 238 no such table: f_stat +==== 10.1 + + INSERT INTO f(f) VALUES ('merge=69,59'); +---- +stmt 0 err 1 -1 43 no such table: f +==== 11.0 + + CREATE VIRTUAL TABLE xyz USING fts3(); +---- +stmt 0 ok +==== 11.1 + + SELECT * FROM xyz WHERE xyz MATCH 'a NEAR/4294836224 a'; +---- +stmt 0 err 1 -1 59 no such table: xyz diff --git a/parser/testdata/fts3near.metadata.json b/parser/testdata/fts3near.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3near.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3near.test b/parser/testdata/fts3near.test new file mode 100644 index 0000000..5593252 --- /dev/null +++ b/parser/testdata/fts3near.test @@ -0,0 +1,219 @@ +==== fts3near-1.1 +SELECT docid FROM t1 WHERE content MATCH 'one NEAR/0 three' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3near-1.2 +SELECT docid FROM t1 WHERE content MATCH 'one NEAR/1 two' +---- +stmt 0 err 1 -1 58 no such table: t1 +==== fts3near-1.3 +SELECT docid FROM t1 WHERE content MATCH 'one NEAR/1 three' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3near-1.4 +SELECT docid FROM t1 WHERE content MATCH 'three NEAR/1 one' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== fts3near-1.5 +SELECT docid FROM t1 WHERE content MATCH '"one two" NEAR/1 five' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts3near-1.6 +SELECT docid FROM t1 WHERE content MATCH '"one two" NEAR/2 five' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts3near-1.7 +SELECT docid FROM t1 WHERE content MATCH 'one NEAR four' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3near-1.8 +SELECT docid FROM t1 WHERE content MATCH 'four NEAR three' +---- +stmt 0 err 1 -1 59 no such table: t1 +==== fts3near-1.9 +SELECT docid FROM t1 WHERE content MATCH '"four five" NEAR/0 three' +---- +stmt 0 err 1 -1 68 no such table: t1 +==== fts3near-1.10 +SELECT docid FROM t1 WHERE content MATCH '"four five" NEAR/2 one' +---- +stmt 0 err 1 -1 66 no such table: t1 +==== fts3near-1.11 +SELECT docid FROM t1 WHERE content MATCH '"four five" NEAR/1 one' +---- +stmt 0 err 1 -1 66 no such table: t1 +==== fts3near-1.12 +SELECT docid FROM t1 WHERE content MATCH 'five NEAR/1 "two three"' +---- +stmt 0 err 1 -1 67 no such table: t1 +==== fts3near-1.13 +SELECT docid FROM t1 WHERE content MATCH 'one NEAR five' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== fts3near-1.14 +SELECT docid FROM t1 WHERE content MATCH 'four NEAR four' +---- +stmt 0 err 1 -1 58 no such table: t1 +==== fts3near-1.15 +SELECT docid FROM t1 WHERE content MATCH 'one NEAR two NEAR one' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts3near-1.16 + + SELECT docid FROM t1 WHERE content MATCH '"one three" NEAR/0 "four five"' +---- +stmt 0 err 1 -1 79 no such table: t1 +==== fts3near-1.17 + + SELECT docid FROM t1 WHERE content MATCH '"four five" NEAR/0 "one three"' +---- +stmt 0 err 1 -1 79 no such table: t1 +==== fts3near-2.1 + + SELECT offsets(t1) FROM t1 WHERE content MATCH 'A NEAR/0 B' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts3near-2.2 + + SELECT offsets(t1) FROM t1 WHERE content MATCH 'B NEAR/0 A' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts3near-2.3 + + SELECT offsets(t1) FROM t1 WHERE content MATCH '"C D" NEAR/0 A' +---- +stmt 0 err 1 -1 69 no such table: t1 +==== fts3near-2.4 + + SELECT offsets(t1) FROM t1 WHERE content MATCH 'A NEAR/0 "C D"' +---- +stmt 0 err 1 -1 69 no such table: t1 +==== fts3near-2.5 + + SELECT offsets(t1) FROM t1 WHERE content MATCH 'A NEAR A' +---- +stmt 0 err 1 -1 63 no such table: t1 +==== fts3near-2.6 + + INSERT INTO t1 VALUES('A A A'); + SELECT offsets(t1) FROM t1 WHERE content MATCH 'A NEAR/2 A'; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 101 no such table: t1 +==== fts3near-2.7 + + DELETE FROM t1; + INSERT INTO t1 VALUES('A A A A'); + SELECT offsets(t1) FROM t1 WHERE content MATCH 'A NEAR A NEAR A'; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 128 no such table: t1 +==== fts3near-3.1 +SELECT offsets(t1) FROM t1 WHERE content MATCH 'three NEAR/1 one' +---- +stmt 0 err 1 -1 66 no such table: t1 +==== fts3near-3.2 +SELECT offsets(t1) FROM t1 WHERE content MATCH 'one NEAR/1 three' +---- +stmt 0 err 1 -1 66 no such table: t1 +==== fts3near-3.3 +SELECT offsets(t1) FROM t1 WHERE content MATCH 'three NEAR/1 two' +---- +stmt 0 err 1 -1 66 no such table: t1 +==== fts3near-3.4 +SELECT offsets(t1) FROM t1 WHERE content MATCH 'three NEAR/2 two' +---- +stmt 0 err 1 -1 66 no such table: t1 +==== fts3near-3.5 +SELECT offsets(t1) FROM t1 WHERE content MATCH 'two NEAR/2 three' +---- +stmt 0 err 1 -1 66 no such table: t1 +==== fts3near-3.6 + + SELECT offsets(t1) FROM t1 WHERE content MATCH 'three NEAR/0 "two four"' +---- +stmt 0 err 1 -1 78 no such table: t1 +==== fts3near-3.7 + + SELECT offsets(t1) FROM t1 WHERE content MATCH '"two four" NEAR/0 three' +---- +stmt 0 err 1 -1 78 no such table: t1 +==== fts3near-4.1 + + SELECT snippet(t1) FROM t1 WHERE content MATCH 'specification NEAR supports' +---- +stmt 0 err 1 -1 82 no such table: t1 +==== fts3near-5.1 + + SELECT docid FROM t1 WHERE content MATCH 'specification attach' +---- +stmt 0 err 1 -1 69 no such table: t1 +==== fts3near-5.2 + + SELECT docid FROM t1 WHERE content MATCH 'specification NEAR attach' +---- +stmt 0 err 1 -1 74 no such table: t1 +==== fts3near-5.3 + + SELECT docid FROM t1 WHERE content MATCH 'specification NEAR/18 attach' +---- +stmt 0 err 1 -1 77 no such table: t1 +==== fts3near-5.4 + + SELECT docid FROM t1 WHERE content MATCH 'specification NEAR/19 attach' +---- +stmt 0 err 1 -1 77 no such table: t1 +==== fts3near-5.5 + + SELECT docid FROM t1 WHERE content MATCH 'specification NEAR/000018 attach' +---- +stmt 0 err 1 -1 81 no such table: t1 +==== fts3near-5.6 + + SELECT docid FROM t1 WHERE content MATCH 'specification NEAR/000019 attach' +---- +stmt 0 err 1 -1 81 no such table: t1 +==== fts3near-6.1 + + SELECT docid FROM t1 WHERE content MATCH 'abbrev zygosis' +---- +stmt 0 err 1 -1 63 no such table: t1 +==== fts3near-6.2 + + SELECT docid FROM t1 WHERE content MATCH 'abbrev NEAR zygosis' +---- +stmt 0 err 1 -1 68 no such table: t1 +==== fts3near-6.3 + + SELECT docid FROM t1 WHERE content MATCH 'abbrev NEAR/100 zygosis' +---- +stmt 0 err 1 -1 72 no such table: t1 +==== fts3near-6.4 + + SELECT docid FROM t1 WHERE content MATCH 'abbrev NEAR/1000 zygosis' +---- +stmt 0 err 1 -1 73 no such table: t1 +==== fts3near-6.5 + + SELECT docid FROM t1 WHERE content MATCH 'abbrev NEAR/10000 zygosis' +---- +stmt 0 err 1 -1 74 no such table: t1 +==== fts3near-7.1 + + CREATE VIRTUAL TABLE x USING fts4(y,z); + INSERT INTO x VALUES('aaa bbb ccc ddd', 'bbb ddd aaa ccc'); + SELECT * FROM x where y MATCH 'bbb NEAR/6 aaa'; +---- +stmt 0 ok +stmt 42 err 1 -1 104 no such table: x +stmt 104 err 1 -1 154 no such table: x +==== fts3near-7.2 + + CREATE VIRTUAL TABLE t2 USING fts4(a, b); + INSERT INTO t2 VALUES('A B C', 'A D E'); + SELECT * FROM t2 where t2 MATCH 'a:A NEAR E' +---- +stmt 0 ok +stmt 44 err 1 -1 87 no such table: t2 +stmt 87 err 1 -1 135 no such table: t2 diff --git a/parser/testdata/fts3offsets.metadata.json b/parser/testdata/fts3offsets.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3offsets.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3offsets.test b/parser/testdata/fts3offsets.test new file mode 100644 index 0000000..25123d2 --- /dev/null +++ b/parser/testdata/fts3offsets.test @@ -0,0 +1,95 @@ +==== 1.1.0 + + CREATE VIRTUAL TABLE xx USING fts3(x); + INSERT INTO xx VALUES('A x x x B C x x'); + INSERT INTO xx VALUES('A B C x B x x C'); + INSERT INTO xx VALUES('A x x B C x x x'); +---- +stmt 0 ok +stmt 41 err 1 -1 85 no such table: xx +stmt 85 err 1 -1 129 no such table: xx +stmt 129 err 1 -1 173 no such table: xx +==== 1.1.1 + + SELECT oid,extract(offsets(xx), x) FROM xx WHERE xx MATCH 'a OR (b NEAR/1 c)'; +---- +stmt 0 err 1 -1 81 no such table: xx +==== 1.2 + + DELETE FROM xx; + INSERT INTO xx VALUES('A x x x B C x x'); + INSERT INTO xx VALUES('A x x C x x x C'); + INSERT INTO xx VALUES('A x x B C x x x'); +---- +stmt 0 err 1 -1 18 no such table: xx +stmt 18 err 1 -1 62 no such table: xx +stmt 62 err 1 -1 106 no such table: xx +stmt 106 err 1 -1 150 no such table: xx +==== 1.2.1 + + SELECT oid,extract(offsets(xx), x) FROM xx WHERE xx MATCH 'a OR (b NEAR/1 c)'; +---- +stmt 0 err 1 -1 81 no such table: xx +==== 1.3 + + DELETE FROM xx; + INSERT INTO xx(rowid, x) VALUES(1, 'A B C'); + INSERT INTO xx(rowid, x) VALUES(2, 'A x'); + INSERT INTO xx(rowid, x) VALUES(3, 'A B C'); + INSERT INTO xx(rowid, x) VALUES(4, 'A B C x x x x x x x B'); + INSERT INTO xx(rowid, x) VALUES(5, 'A x x x x x x x x x C'); + INSERT INTO xx(rowid, x) VALUES(6, 'A x x x x x x x x x x x B'); + INSERT INTO xx(rowid, x) VALUES(7, 'A B C'); +---- +stmt 0 err 1 -1 18 no such table: xx +stmt 18 err 1 -1 65 no such table: xx +stmt 65 err 1 -1 110 no such table: xx +stmt 110 err 1 -1 157 no such table: xx +stmt 157 err 1 -1 220 no such table: xx +stmt 220 err 1 -1 283 no such table: xx +stmt 283 err 1 -1 350 no such table: xx +stmt 350 err 1 -1 397 no such table: xx +==== 1.3.1 + + SELECT oid,extract(offsets(xx), x) FROM xx WHERE xx MATCH 'a OR (b NEAR/1 c)'; +---- +stmt 0 err 1 -1 81 no such table: xx +==== 1.4 + + DELETE FROM xx; + INSERT INTO xx(rowid, x) VALUES(7, 'A B C'); + INSERT INTO xx(rowid, x) VALUES(6, 'A x'); + INSERT INTO xx(rowid, x) VALUES(5, 'A B C'); + INSERT INTO xx(rowid, x) VALUES(4, 'A B C x x x x x x x B'); + INSERT INTO xx(rowid, x) VALUES(3, 'A x x x x x x x x x C'); + INSERT INTO xx(rowid, x) VALUES(2, 'A x x x x x x x x x x x B'); + INSERT INTO xx(rowid, x) VALUES(1, 'A B C'); +---- +stmt 0 err 1 -1 18 no such table: xx +stmt 18 err 1 -1 65 no such table: xx +stmt 65 err 1 -1 110 no such table: xx +stmt 110 err 1 -1 157 no such table: xx +stmt 157 err 1 -1 220 no such table: xx +stmt 220 err 1 -1 283 no such table: xx +stmt 283 err 1 -1 350 no such table: xx +stmt 350 err 1 -1 397 no such table: xx +==== 1.4.1 + + SELECT oid,extract(offsets(xx), x) FROM xx WHERE xx MATCH 'a OR (b NEAR/1 c)' + ORDER BY docid DESC; +---- +stmt 0 err 1 -1 103 no such table: xx +==== 1.5.0 + + CREATE VIRTUAL TABLE x1 USING fts3(x); + INSERT INTO x1 VALUES('A A A'); + INSERT INTO x1 VALUES('A A A'); +---- +stmt 0 ok +stmt 41 err 1 -1 75 no such table: x1 +stmt 75 err 1 -1 109 no such table: x1 +==== 1.5.1 + + SELECT offsets(x1) FROM x1 WHERE x1 MATCH 'a OR b AND c NEAR d' +---- +stmt 0 err 1 -1 67 no such table: x1 diff --git a/parser/testdata/fts3prefix.metadata.json b/parser/testdata/fts3prefix.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3prefix.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3prefix.test b/parser/testdata/fts3prefix.test new file mode 100644 index 0000000..255f0d4 --- /dev/null +++ b/parser/testdata/fts3prefix.test @@ -0,0 +1,290 @@ +==== 1.1 + + CREATE VIRTUAL TABLE t1 USING fts4(prefix='1,3,6'); + + CREATE VIRTUAL TABLE p1 USING fts4term(t1, 1); + CREATE VIRTUAL TABLE p2 USING fts4term(t1, 2); + CREATE VIRTUAL TABLE p3 USING fts4term(t1, 3); + CREATE VIRTUAL TABLE terms USING fts4term(t1); +---- +stmt 0 ok +stmt 54 ok +stmt 104 ok +stmt 153 ok +stmt 202 ok +==== 1.2 + + INSERT INTO t1 VALUES('sqlite mysql firebird'); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 1.3.1 + SELECT term FROM p1 +---- +stmt 0 err 1 -1 21 no such table: p1 +==== 1.3.2 + SELECT term FROM p2 +---- +stmt 0 err 1 -1 21 no such table: p2 +==== 1.3.3 + SELECT term FROM p3 +---- +stmt 0 err 1 -1 21 no such table: p3 +==== 1.4 + + SELECT term FROM terms; +---- +stmt 0 err 1 -1 26 no such table: terms +==== 2.1 + + INSERT INTO t1 VALUES('FTS3 and FTS4 are an SQLite virtual table modules'); + INSERT INTO t1 VALUES('that allows users to perform full-text searches on'); + INSERT INTO t1 VALUES('a set of documents. The most common (and'); + INSERT INTO t1 VALUES('effective) way to describe full-text searches is'); + INSERT INTO t1 VALUES('"what Google, Yahoo and Altavista do with'); + INSERT INTO t1 VALUES('documents placed on the World Wide Web". Users'); + INSERT INTO t1 VALUES('input a term, or series of terms, perhaps'); + INSERT INTO t1 VALUES('connected by a binary operator or grouped together'); + INSERT INTO t1 VALUES('into a phrase, and the full-text query system'); + INSERT INTO t1 VALUES('finds the set of documents that best matches those'); + INSERT INTO t1 VALUES('terms considering the operators and groupings the'); + INSERT INTO t1 VALUES('user has specified. This article describes the'); + INSERT INTO t1 VALUES('deployment and usage of FTS3 and FTS4.'); + INSERT INTO t1 VALUES('FTS1 and FTS2 are obsolete full-text search'); + INSERT INTO t1 VALUES('modules for SQLite. There are known issues with'); + INSERT INTO t1 VALUES('these older modules and their use should be'); + INSERT INTO t1 VALUES('avoided. Portions of the original FTS3 code were'); + INSERT INTO t1 VALUES('contributed to the SQLite project by Scott Hess of'); + INSERT INTO t1 VALUES('Google. It is now developed and maintained as part'); + INSERT INTO t1 VALUES('of SQLite. '); +---- +stmt 0 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 226 no such table: t1 +stmt 226 err 1 -1 303 no such table: t1 +stmt 303 err 1 -1 373 no such table: t1 +stmt 373 err 1 -1 448 no such table: t1 +stmt 448 err 1 -1 518 no such table: t1 +stmt 518 err 1 -1 597 no such table: t1 +stmt 597 err 1 -1 671 no such table: t1 +stmt 671 err 1 -1 750 no such table: t1 +stmt 750 err 1 -1 828 no such table: t1 +stmt 828 err 1 -1 903 no such table: t1 +stmt 903 err 1 -1 970 no such table: t1 +stmt 970 err 1 -1 1042 no such table: t1 +stmt 1042 err 1 -1 1118 no such table: t1 +stmt 1118 err 1 -1 1190 no such table: t1 +stmt 1190 err 1 -1 1267 no such table: t1 +stmt 1267 err 1 -1 1346 no such table: t1 +stmt 1346 err 1 -1 1425 no such table: t1 +stmt 1425 err 1 -1 1465 no such table: t1 +==== 2.3 + DELETE FROM t1 WHERE docid%2; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== 2.5 + INSERT INTO t1(t1) VALUES('optimize') +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 3.1 + + CREATE VIRTUAL TABLE t2 USING fts4(prefix='1,2,3'); + INSERT INTO t2 VALUES('On 12 September the wind direction turned and'); + INSERT INTO t2 VALUES('William''s fleet sailed. A storm blew up and the'); + INSERT INTO t2 VALUES('fleet was forced to take shelter at'); + INSERT INTO t2 VALUES('Saint-Valery-sur-Somme and again wait for the wind'); + INSERT INTO t2 VALUES('to change. On 27 September the Norman fleet'); + INSERT INTO t2 VALUES('finally set sail, landing in England at Pevensey'); + INSERT INTO t2 VALUES('Bay (Sussex) on 28 September. William then moved'); + INSERT INTO t2 VALUES('to Hastings, a few miles to the east, where he'); + INSERT INTO t2 VALUES('built a prefabricated wooden castle for a base of'); + INSERT INTO t2 VALUES('operations. From there, he ravaged the hinterland'); + INSERT INTO t2 VALUES('and waited for Harold''s return from the north.'); + INSERT INTO t2 VALUES('On 12 September the wind direction turned and'); + INSERT INTO t2 VALUES('William''s fleet sailed. A storm blew up and the'); + INSERT INTO t2 VALUES('fleet was forced to take shelter at'); + INSERT INTO t2 VALUES('Saint-Valery-sur-Somme and again wait for the wind'); + INSERT INTO t2 VALUES('to change. On 27 September the Norman fleet'); + INSERT INTO t2 VALUES('finally set sail, landing in England at Pevensey'); + INSERT INTO t2 VALUES('Bay (Sussex) on 28 September. William then moved'); + INSERT INTO t2 VALUES('to Hastings, a few miles to the east, where he'); + INSERT INTO t2 VALUES('built a prefabricated wooden castle for a base of'); + INSERT INTO t2 VALUES('operations. From there, he ravaged the hinterland'); + INSERT INTO t2 VALUES('and waited for Harold''s return from the north.'); +---- +stmt 0 ok +stmt 54 err 1 -1 128 no such table: t2 +stmt 128 err 1 -1 205 no such table: t2 +stmt 205 err 1 -1 269 no such table: t2 +stmt 269 err 1 -1 348 no such table: t2 +stmt 348 err 1 -1 420 no such table: t2 +stmt 420 err 1 -1 497 no such table: t2 +stmt 497 err 1 -1 574 no such table: t2 +stmt 574 err 1 -1 649 no such table: t2 +stmt 649 err 1 -1 727 no such table: t2 +stmt 727 err 1 -1 805 no such table: t2 +stmt 805 err 1 -1 881 no such table: t2 +stmt 881 err 1 -1 955 no such table: t2 +stmt 955 err 1 -1 1032 no such table: t2 +stmt 1032 err 1 -1 1096 no such table: t2 +stmt 1096 err 1 -1 1175 no such table: t2 +stmt 1175 err 1 -1 1247 no such table: t2 +stmt 1247 err 1 -1 1324 no such table: t2 +stmt 1324 err 1 -1 1401 no such table: t2 +stmt 1401 err 1 -1 1476 no such table: t2 +stmt 1476 err 1 -1 1554 no such table: t2 +stmt 1554 err 1 -1 1632 no such table: t2 +stmt 1632 err 1 -1 1708 no such table: t2 +==== 3.3 + SELECT optimize(t2) FROM t2 LIMIT 1 +---- +stmt 0 err 1 -1 37 no such table: t2 +==== 4.1 + + CREATE VIRTUAL TABLE t3 USING fts4(prefix="1,4"); + INSERT INTO t3 VALUES('one two three'); + INSERT INTO t3 VALUES('four five six'); + INSERT INTO t3 VALUES('seven eight nine'); +---- +stmt 0 ok +stmt 52 err 1 -1 94 no such table: t3 +stmt 94 err 1 -1 136 no such table: t3 +stmt 136 err 1 -1 181 no such table: t3 +==== 4.2 + + SELECT * FROM t3 WHERE t3 MATCH 'f*' +---- +stmt 0 err 1 -1 40 no such table: t3 +==== 4.3 + + SELECT * FROM t3 WHERE t3 MATCH 'four*' +---- +stmt 0 err 1 -1 43 no such table: t3 +==== 4.4 + + SELECT * FROM t3 WHERE t3 MATCH 's*' +---- +stmt 0 err 1 -1 40 no such table: t3 +==== 4.5 + + SELECT * FROM t3 WHERE t3 MATCH 'sev*' +---- +stmt 0 err 1 -1 42 no such table: t3 +==== 4.6 + + SELECT * FROM t3 WHERE t3 MATCH 'one*' +---- +stmt 0 err 1 -1 42 no such table: t3 +==== 5.1 + + CREATE VIRTUAL TABLE t4 USING fts4(prefix="abc"); +---- +stmt 0 ok +==== 5.2 + + CREATE VIRTUAL TABLE t4 USING fts4(prefix=""); +---- +stmt 0 ok +==== 5.3 + + CREATE VIRTUAL TABLE t5 USING fts4(prefix="-1"); +---- +stmt 0 ok +==== 6.1.1 + + CREATE VIRTUAL TABLE t1 USING fts4(prefix=0); + CREATE VIRTUAL TABLE t2 USING fts4; + INSERT INTO t1 VALUES('Twas Mulga Bill, from Eaglehawk, '); + INSERT INTO t2 VALUES('Twas Mulga Bill, from Eaglehawk, '); +---- +stmt 0 ok +stmt 48 ok +stmt 86 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 210 no such table: t2 +==== 6.1.2 + + SELECT md5sum(quote(root)) FROM t1_segdir; +---- +stmt 0 err 1 -1 45 no such table: t1_segdir +==== 6.2.1 + + CREATE VIRTUAL TABLE t1 USING fts4(prefix="1,0,2"); + CREATE VIRTUAL TABLE t2 USING fts4(prefix="1,2"); + INSERT INTO t1 VALUES('that caught the cycling craze;'); + INSERT INTO t2 VALUES('that caught the cycling craze;'); +---- +stmt 0 ok +stmt 54 ok +stmt 106 err 1 -1 165 no such table: t1 +stmt 165 err 1 -1 224 no such table: t2 +==== 6.2.2 + + SELECT md5sum(quote(root)) FROM t1_segdir; +---- +stmt 0 err 1 -1 45 no such table: t1_segdir +==== 6.3.1 + + CREATE VIRTUAL TABLE t1 USING fts4(prefix="1,3,2"); + CREATE VIRTUAL TABLE t2 USING fts4(prefix="1,2"); + INSERT INTO t1 VALUES('He turned away the good old horse'); + INSERT INTO t2 VALUES('He turned away the good old horse'); +---- +stmt 0 ok +stmt 54 ok +stmt 106 err 1 -1 168 no such table: t1 +stmt 168 err 1 -1 230 no such table: t2 +==== 6.4.1 + + CREATE VIRTUAL TABLE t1 USING fts4(prefix="1,600,2"); + CREATE VIRTUAL TABLE t2 USING fts4(prefix="1,2"); + INSERT INTO t1 VALUES('that served him many days;'); + INSERT INTO t2 VALUES('that served him many days;'); +---- +stmt 0 ok +stmt 56 ok +stmt 108 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 218 no such table: t2 +==== 6.4.2 + + SELECT md5sum(quote(root)) FROM t1_segdir; +---- +stmt 0 err 1 -1 45 no such table: t1_segdir +==== 6.5.1 + + CREATE VIRTUAL TABLE t1 USING fts4(prefix="2147483647,2147483648,2147483649"); + CREATE VIRTUAL TABLE t2 USING fts4(prefix=); + INSERT INTO t1 VALUES('He dressed himself in cycling clothes'); + INSERT INTO t2 VALUES('He dressed himself in cycling clothes'); +---- +stmt 0 ok +stmt 81 ok +stmt 128 err 1 -1 194 no such table: t1 +stmt 194 err 1 -1 260 no such table: t2 +==== 6.5.2 + + SELECT md5sum(quote(root)) FROM t1_segdir; +---- +stmt 0 err 1 -1 45 no such table: t1_segdir +==== 7.0 + + CREATE VIRTUAL TABLE t6 USING fts4(x,order=DESC); + INSERT INTO t6(docid, x) VALUES(-1,'a b'); + INSERT INTO t6(docid, x) VALUES(1, 'b'); +---- +stmt 0 ok +stmt 52 err 1 -1 97 no such table: t6 +stmt 97 err 1 -1 140 no such table: t6 +==== 7.1 + + SELECT docid FROM t6 WHERE t6 MATCH '"a* b"'; +---- +stmt 0 err 1 -1 48 no such table: t6 +==== 7.2 + + SELECT docid FROM t6 WHERE t6 MATCH 'a*'; +---- +stmt 0 err 1 -1 44 no such table: t6 +==== 7.3 + + SELECT docid FROM t6 WHERE t6 MATCH 'a* b'; +---- +stmt 0 err 1 -1 46 no such table: t6 diff --git a/parser/testdata/fts3prefix2.metadata.json b/parser/testdata/fts3prefix2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3prefix2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3prefix2.test b/parser/testdata/fts3prefix2.test new file mode 100644 index 0000000..6e0edb1 --- /dev/null +++ b/parser/testdata/fts3prefix2.test @@ -0,0 +1,54 @@ +==== 1.0 + PRAGMA page_size = 512 +---- +stmt 0 ok +==== 1.1 + + CREATE VIRTUAL TABLE t1 USING fts4(x, prefix="2,3"); + + BEGIN; + INSERT INTO t1 VALUES('T TX T TX T TX T TX T TX'); + INSERT INTO t1 SELECT * FROM t1; -- 2 + INSERT INTO t1 SELECT * FROM t1; -- 4 + INSERT INTO t1 SELECT * FROM t1; -- 8 + INSERT INTO t1 SELECT * FROM t1; -- 16 + INSERT INTO t1 SELECT * FROM t1; -- 32 + INSERT INTO t1 SELECT * FROM t1; -- 64 + INSERT INTO t1 SELECT * FROM t1; -- 128 + INSERT INTO t1 SELECT * FROM t1; -- 256 + INSERT INTO t1 SELECT * FROM t1; -- 512 + INSERT INTO t1 SELECT * FROM t1; -- 1024 + INSERT INTO t1 SELECT * FROM t1; -- 2048 + COMMIT; +---- +stmt 0 ok +stmt 56 ok +stmt 66 err 1 -1 121 no such table: t1 +stmt 121 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 222 no such table: t1 +stmt 222 err 1 -1 286 no such table: t1 +stmt 286 err 1 -1 350 no such table: t1 +stmt 350 err 1 -1 415 no such table: t1 +stmt 415 err 1 -1 480 no such table: t1 +stmt 480 err 1 -1 545 no such table: t1 +stmt 545 err 1 -1 611 no such table: t1 +stmt 611 err 1 -1 677 no such table: t1 +stmt 677 err 1 -1 743 no such table: t1 +stmt 743 err 1 -1 810 no such table: t1 +stmt 810 ok +==== 1.2 + + INSERT INTO t1 SELECT * FROM t1 LIMIT 10; + INSERT INTO t1 SELECT * FROM t1 LIMIT 10; + INSERT INTO t1 SELECT * FROM t1 LIMIT 10; + DELETE FROM t1 WHERE docid > 5; +---- +stmt 0 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 132 no such table: t1 +stmt 132 err 1 -1 166 no such table: t1 +==== 1.3 + + SELECT * FROM t1 WHERE t1 MATCH 'T*'; +---- +stmt 0 err 1 -1 40 no such table: t1 diff --git a/parser/testdata/fts3query.metadata.json b/parser/testdata/fts3query.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3query.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3query.test b/parser/testdata/fts3query.test new file mode 100644 index 0000000..5531e53 --- /dev/null +++ b/parser/testdata/fts3query.test @@ -0,0 +1,103 @@ +==== fts3query-1.1 + + CREATE VIRTUAL TABLE t1 USING fts3(x); + BEGIN; + INSERT INTO t1 VALUES('The source code for SQLite is in the public'); +---- +stmt 0 ok +stmt 43 ok +stmt 54 err 1 -1 130 no such table: t1 +==== fts3query-1.4 +COMMIT +---- +stmt 0 ok +==== fts3query-2.1 + + CREATE VIRTUAL TABLE zoink USING fts3; + INSERT INTO zoink VALUES('The apple falls far from the tree'); +---- +stmt 0 ok +stmt 43 err 1 -1 110 no such table: zoink +==== fts3query-2.2 + + SELECT docid FROM zoink WHERE zoink MATCH '(apple oranges) AND apple' +---- +stmt 0 err 1 -1 75 no such table: zoink +==== fts3query-2.3 + + SELECT docid FROM zoink WHERE zoink MATCH 'apple AND (oranges apple)' +---- +stmt 0 err 1 -1 75 no such table: zoink +==== fts3query-3.1 + + CREATE VIRTUAL TABLE foobar using FTS3(description, tokenize porter); + INSERT INTO foobar (description) values (' + Filed under: Emerging Technologies, EV/Plug-in, Hybrid, Chevrolet, GM, + ZENN 2011 Chevy Volt - Click above for high-res image gallery There are + 16 days left in the month of December. Besides being time for most + Americans to kick their Christmas shopping sessions into high gear and + start planning their resolutions for 2010, it also means that there''s + precious little time for EEStor to "deliver functional technology" to + Zenn Motors as promised. Still, the promises held out by the secretive + company are too great for us to forget about entirely. We''d love for + EEStor''s claims to be independently verified and proven accurate, as + would just about anyone else looking to break free of petroleum in fav + '); +---- +stmt 0 ok +stmt 74 err 1 -1 896 no such table: foobar +==== fts3query-3.2 + SELECT docid FROM foobar WHERE description MATCH '"high sp d"' +---- +stmt 0 err 1 -1 64 no such table: foobar +==== fts3query-3.3 + SELECT mit(matchinfo(foobar)) FROM foobar WHERE foobar MATCH 'the' +---- +stmt 0 err 1 -1 68 no such table: foobar +==== fts3query-4.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(number INTEGER PRIMARY KEY, date); + CREATE INDEX i1 ON t1(date); + CREATE VIRTUAL TABLE ft USING fts3(title); + CREATE TABLE bt(title); +---- +stmt 0 ok +stmt 29 ok +stmt 84 err 1 -1 117 no such table: main.t1 +stmt 117 ok +stmt 164 ok +==== 5.1 + + CREATE VIRTUAL TABLE t2 USING FTS4; + INSERT INTO t2 VALUES('it was the first time in history'); +---- +stmt 0 ok +stmt 38 err 1 -1 99 no such table: t2 +==== 5.4.0 + UPDATE t2_content SET c0content = X'1234' +---- +stmt 0 err 1 -1 43 no such table: t2_content +==== 5.5.1 + + SELECT matchinfo(t2, 'abcd') FROM t2 WHERE t2 MATCH 'history' +---- +stmt 0 err 1 -1 65 no such table: t2 +==== 5.5 + DROP TABLE t2 +---- +stmt 0 err 1 -1 15 no such table: t2 +==== 6.1 + + CREATE VIRTUAL TABLE t3 USING FTS4(a, b); + INSERT INTO t3 VALUES('no gestures', 'another intriguing discovery by observing the hand gestures (called beats) people make while speaking. Research has shown that such gestures do more than add visual emphasis to our words (many people gesture while they''re on the telephone, for example); it seems they actually help our brains find words'); +---- +stmt 0 ok +stmt 44 err 1 -1 392 no such table: t3 +==== 7.1 + + CREATE VIRTUAL TABLE ft4 USING fts4(x); + CREATE TABLE t4(x); +---- +stmt 0 ok +stmt 42 ok diff --git a/parser/testdata/fts3rank.metadata.json b/parser/testdata/fts3rank.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3rank.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3rank.test b/parser/testdata/fts3rank.test new file mode 100644 index 0000000..062a957 --- /dev/null +++ b/parser/testdata/fts3rank.test @@ -0,0 +1,43 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts3(a, b); + INSERT INTO t1 VALUES('one two', 'one'); + INSERT INTO t1 VALUES('one two', 'three'); + INSERT INTO t1 VALUES('one two', 'two'); +---- +stmt 0 ok +stmt 44 err 1 -1 87 no such table: t1 +stmt 87 err 1 -1 132 no such table: t1 +stmt 132 err 1 -1 175 no such table: t1 +==== 1.1 + + SELECT * FROM t1 WHERE t1 MATCH 'one' + ORDER BY rank(matchinfo(t1), 1.0, 1.0) DESC, rowid +---- +stmt 0 err 1 -1 95 no such table: t1 +==== 1.2 + + SELECT * FROM t1 WHERE t1 MATCH 'two' + ORDER BY rank(matchinfo(t1), 1.0, 1.0) DESC, rowid +---- +stmt 0 err 1 -1 95 no such table: t1 +==== 1.3 + + SELECT * FROM t1 ORDER BY rank(matchinfo(t1), 1.0, 1.0) DESC, rowid +---- +stmt 0 err 1 -1 71 no such table: t1 +==== 1.4 + + SELECT * FROM t1 ORDER BY rank(x'0000000000000000') DESC, rowid +---- +stmt 0 err 1 -1 67 no such table: t1 +==== 1.5le + + SELECT * FROM t1 ORDER BY rank(x'0100000001000000') DESC, rowid +---- +stmt 0 err 1 -1 69 no such table: t1 +==== 1.5be + + SELECT * FROM t1 ORDER BY rank(x'0000000100000001') DESC, rowid +---- +stmt 0 err 1 -1 69 no such table: t1 diff --git a/parser/testdata/fts3shared.metadata.json b/parser/testdata/fts3shared.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3shared.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3shared.test b/parser/testdata/fts3shared.test new file mode 100644 index 0000000..49a064c --- /dev/null +++ b/parser/testdata/fts3shared.test @@ -0,0 +1,28 @@ +==== fts3shared-1.1 + + CREATE VIRTUAL TABLE t1 USING fts3(x); + BEGIN; + INSERT INTO t1 VALUES('We listened and looked sideways up!'); + INSERT INTO t1 VALUES('Fear at my heart, as at a cup,'); + INSERT INTO t1 VALUES('My life-blood seemed to sip!'); + INSERT INTO t1 VALUES('The stars were dim, and thick the night'); + COMMIT; +---- +stmt 0 ok +stmt 41 ok +stmt 50 err 1 -1 114 no such table: t1 +stmt 114 err 1 -1 173 no such table: t1 +stmt 173 err 1 -1 230 no such table: t1 +stmt 230 err 1 -1 298 no such table: t1 +stmt 298 ok +==== fts3shared-1.2 + + BEGIN; + INSERT INTO t1 VALUES('The steersman''s face by his lamp gleamed white;'); +---- +stmt 0 ok +stmt 9 err 1 -1 88 no such table: t1 +==== fts3shared-1.5 + COMMIT +---- +stmt 0 ok diff --git a/parser/testdata/fts3snippet.metadata.json b/parser/testdata/fts3snippet.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3snippet.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3snippet.test b/parser/testdata/fts3snippet.test new file mode 100644 index 0000000..c79fee9 --- /dev/null +++ b/parser/testdata/fts3snippet.test @@ -0,0 +1,98 @@ +==== fts3snippet-generated + + CREATE VIRTUAL TABLE ft USING fts3; + INSERT INTO ft VALUES('xxx xxx xxx xxx'); +---- +stmt 0 ok +stmt 42 err 1 -1 90 no such table: ft +==== fts3snippet-generated.dup1 + + DROP TABLE IF EXISTS ft; + CREATE VIRTUAL TABLE ft USING fts3; + INSERT INTO ft VALUES('one two three four five six seven eight nine ten'); +---- +stmt 0 ok +stmt 31 ok +stmt 73 err 1 -1 154 no such table: ft +==== fts3snippet-generated.dup2 + + INSERT INTO ft VALUES( + 'one two three four five ' + || 'six seven eight nine ten ' + || 'eleven twelve thirteen fourteen fifteen ' + || 'sixteen seventeen eighteen nineteen twenty ' + || 'one two three four five ' + || 'six seven eight nine ten ' + || 'eleven twelve thirteen fourteen fifteen ' + || 'sixteen seventeen eighteen nineteen twenty' + ); +---- +stmt 0 err 1 -1 413 no such table: ft +==== fts3snippet-generated.dup3 + + DROP TABLE IF EXISTS ft; + CREATE VIRTUAL TABLE ft USING fts3(a, b, c); + INSERT INTO ft VALUES( + 'one two three four five', + 'four five six seven eight', + 'seven eight nine ten eleven' + ); +---- +stmt 0 ok +stmt 31 ok +stmt 82 err 1 -1 232 no such table: ft +==== fts3snippet-generated.dup4 + UPDATE ft SET b = NULL +---- +stmt 0 err 1 -1 24 no such table: ft +==== 2.1 + + CREATE VIRTUAL TABLE t2 USING fts4; + INSERT INTO t2 VALUES('one two three four five'); + INSERT INTO t2 VALUES('two three four five one'); + INSERT INTO t2 VALUES('three four five one two'); + INSERT INTO t2 VALUES('four five one two three'); + INSERT INTO t2 VALUES('five one two three four'); +---- +stmt 0 ok +stmt 38 err 1 -1 90 no such table: t2 +stmt 90 err 1 -1 142 no such table: t2 +stmt 142 err 1 -1 194 no such table: t2 +stmt 194 err 1 -1 246 no such table: t2 +stmt 246 err 1 -1 298 no such table: t2 +==== 2.4 + + INSERT INTO t2 VALUES('six'); +---- +stmt 0 err 1 -1 32 no such table: t2 +==== 3.1 + + SELECT snippet(t3) FROM t3 WHERE t3 MATCH 'one'; +---- +stmt 0 err 1 -1 51 no such table: t3 +==== 3.2 + + SELECT snippet(t3) FROM t3 WHERE t3 MATCH 'two'; +---- +stmt 0 err 1 -1 51 no such table: t3 +==== 3.3 + + SELECT snippet(t3) FROM t3 WHERE t3 MATCH 'three'; +---- +stmt 0 err 1 -1 53 no such table: t3 +==== 3.4 + + SELECT snippet(t3) FROM t3 WHERE t3 MATCH 'one OR two OR three'; +---- +stmt 0 err 1 -1 67 no such table: t3 +==== 5.0 + + CREATE VIRTUAL TABLE t5 USING fts3(x); + INSERT INTO t5 VALUES('a1 a2 a3'); + INSERT INTO t5 VALUES('a4 a5 a6'); + INSERT INTO t5 VALUES('a70 a71 a72'); +---- +stmt 0 ok +stmt 41 err 1 -1 78 no such table: t5 +stmt 78 err 1 -1 115 no such table: t5 +stmt 115 err 1 -1 155 no such table: t5 diff --git a/parser/testdata/fts3snippet2.metadata.json b/parser/testdata/fts3snippet2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3snippet2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3snippet2.test b/parser/testdata/fts3snippet2.test new file mode 100644 index 0000000..95545df --- /dev/null +++ b/parser/testdata/fts3snippet2.test @@ -0,0 +1,48 @@ +==== 1.0 + + CREATE VIRTUAL TABLE f USING fts3(b); + INSERT INTO f VALUES ( x'746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218'); +---- +stmt 0 ok +stmt 40 err 1 -1 145 no such table: f +==== 1.1 + + SELECT length(snippet(f))>0 FROM f WHERE b MATCH x'1065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a010f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c2a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e082a011065616e656d655a616c702a2f65732e0f42014001380230018218021001081e0a3d746e6e6d64612e0f42'; +---- +stmt 0 err 1 -1 922 no such table: f +==== 2.0 + + CREATE VIRTUAL TABLE t0 USING fts3(col0 INTEGER PRIMARY KEY,col1 VARCHAR(8),col2 BINARY,col3 BINARY); + INSERT INTO t0 VALUES (1, '1234','aaaa','bbbb'); + SELECT snippet(t0) FROM t0 WHERE t0 MATCH x'0a4d4d4d4d320a4f52d70a310a310a4e4541520a0a31f6ce0a4f520a0a310a310a310a4f520a75fc2a242424' ; +---- +stmt 0 ok +stmt 104 err 1 -1 155 no such table: t0 +stmt 155 err 1 -1 294 no such table: t0 +==== 2.1 + + CREATE VIRTUAL TABLE t0 USING fts3( + col0 INTEGER PRIMARY KEY,col1 VARCHAR(8),col2 BINARY,col3 BINARY + ); + INSERT INTO t0 VALUES ('one', '1234','aaaa','bbbb'); +---- +stmt 0 ok +stmt 114 err 1 -1 169 no such table: t0 +==== 2.2 + + SELECT snippet(t0) FROM t0 WHERE t0 MATCH + '(def AND (one NEAR abc)) OR one' +---- +stmt 0 err 1 -1 83 no such table: t0 +==== 3.0 + +CREATE VIRTUAL TABLE f USING fts3(a,b); +INSERT INTO f VALUES (101,x'056522650565056505650d051e056505650565286505650565056505056505650565056505650565056505650565056505650565056505656505650565056505650d05650505656505650565ef65056505844c746e65650565056505650565056505650565056505650565058405800565056505650565056505651e650565056505650565056505650d056505056565056505650565056505840580056505650565056f05650565056505650565056505650565050565056505640565056505650565056505651e05650565056505650565056505650505656565056505650565056505651e0565056505650565056505650565052265056505650569056505650565056505650565056505650565056505650500406505650565056505650565056505000101e5c501014b010101c501c5c501010101f5010201010101014101017373737373737373737373737373737373737373737373737373737330737373737373737373737373737365056505650d051e05650565056528056505650d05650505656505650565650565056505650565056505e505650565056505656505650565056505650d05650505656505650565ef65056505844c746e65650565056505650565056505650565056505650565058405800565056505650565056505651e650565056505650565056505650d056505056565056505650565056505840580056505650565286505c705650565050565059494949494949494949494949494949494949494949494949494949494949494949494650565056505650565056505650565056505650565056505656505650565056505650d05650505656505650565ef650565058405056505650565056505650565056505650565056505650565058405800565056505650565056505651e650565056505650565056505650d056505056565056505650565056505840580056505650565056505650565056505650505650565056505650565056505650565056500000000000000000000000000000000000000000000000000000000000000000565056505656505650565056505650d056500000000000000000000000000000000000000000000000000000000000000000100000000000000ed0000000000ffffffffffffffffffffff0007ffffff0001c5c50001c5c50001c5c50001c5c50001c5c50001c5c50001e5c50001c5c50001c5c50001c5c50001c5c50001c5c5000100000014720000000000000016dac5c50001c5c50001c5c50001c5c50001c5c50001c5c50d0505656505650565ef650565058405056505650565056505650565056505650565056505650565058405800465056505650565056505651e650565056505650565056505650d05650505656505650565050565650584058005650565056505650565056505650565056522650565056505650d051e056505650561286505c70565056505056505650565056505650565056505650565056505650565056505656505650565056505650d05650505656505650565ef650565058405056505650565056505650565056505650565056505650565058405800565056505650565056505651e650565056505650565056505650d056505056565056505650565056505840580056505650565056505650565056505650565226505737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373733a73737373737373737373737373737373737373737373737373737373737373737373737373737373737c7373737365056505650d051e05650565056528650565056505650505650565056505650565056505650565056505e505650565056505656505650565056505650d05650505656505650565ef65056505'); +---- +stmt 0 ok +stmt 40 err 1 -1 2834 no such table: f +==== 3.1 + + SELECT length(snippet(f)) FROM f WHERE b MATCH x'0565056505650565056505650565056505650565058405800565056505650565056505651e650565056505650565056505650d056505056565056505650565056505840580056505650565056505650565056505650565056505650565050565056505640565056505650565056505651e05650565056522650565056505650d051e056505650565286505650565056505056505650565056505650565056505650565056505650565056505656505650565056505650d05650505656505650565ef65056505844c746e65650565056505650565056505650565056505650565058405800565056505650565056505651e650565056505650565056505650d056505056565056505650565056505840580056505650565056f05650565056505650565056505650565050565056505640565056505650565056505651e05650565056505650565056505650505656565056505650565056505651e0565056505650565056505650565052265056505650569056505650565056505650565056505650565056505650500406505650565056505650565056505000101e5c501014b010101c501c5c501010101f50102010101010141010141010001017bf15905000000000017'; +---- +stmt 0 err 1 -1 964 no such table: f diff --git a/parser/testdata/fts3sort.metadata.json b/parser/testdata/fts3sort.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3sort.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3sort.test b/parser/testdata/fts3sort.test new file mode 100644 index 0000000..faf5fc3 --- /dev/null +++ b/parser/testdata/fts3sort.test @@ -0,0 +1,49 @@ +==== 2.2 + + BEGIN; + CREATE VIRTUAL TABLE t2 USING fts4(order=desc); + INSERT INTO t2 VALUES('aa bb'); + INSERT INTO t2 VALUES('bb cc'); + INSERT INTO t2 VALUES('cc aa'); + SELECT docid FROM t2 WHERE t2 MATCH 'aa'; + END; +---- +stmt 0 ok +stmt 9 ok +stmt 61 err 1 -1 97 no such table: t2 +stmt 97 err 1 -1 133 no such table: t2 +stmt 133 err 1 -1 169 no such table: t2 +stmt 169 err 1 -1 215 no such table: t2 +stmt 215 ok +==== 2.3 + + SELECT docid FROM t2 WHERE t2 MATCH 'aa'; +---- +stmt 0 err 1 -1 44 no such table: t2 +==== 2.4 + + SELECT docid FROM t2 WHERE t2 MATCH 'aa' ORDER BY content; +---- +stmt 0 err 1 -1 61 no such table: t2 +==== 3.1 + + CREATE VIRTUAL TABLE t3 USING fts4(x, order=DESC); + INSERT INTO t3(docid, x) VALUES(113382409004785664, 'aa'); + INSERT INTO t3(docid, x) VALUES(1, 'ab'); + SELECT rowid FROM t3 WHERE x MATCH 'a*' ORDER BY docid DESC; +---- +stmt 0 ok +stmt 53 err 1 -1 114 no such table: t3 +stmt 114 err 1 -1 158 no such table: t3 +stmt 158 err 1 -1 221 no such table: t3 +==== 3.2 + + CREATE VIRTUAL TABLE t4 USING fts4(x); + INSERT INTO t4(docid, x) VALUES(-113382409004785664, 'aa'); + INSERT INTO t4(docid, x) VALUES(1, 'ab'); + SELECT rowid FROM t4 WHERE x MATCH 'a*'; +---- +stmt 0 ok +stmt 41 err 1 -1 103 no such table: t4 +stmt 103 err 1 -1 147 no such table: t4 +stmt 147 err 1 -1 190 no such table: t4 diff --git a/parser/testdata/fts3tok1.metadata.json b/parser/testdata/fts3tok1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts3tok1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts3tok1.test b/parser/testdata/fts3tok1.test new file mode 100644 index 0000000..05e0868 --- /dev/null +++ b/parser/testdata/fts3tok1.test @@ -0,0 +1,90 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts3tokenize(simple); + CREATE VIRTUAL TABLE t2 USING fts3tokenize(); + CREATE VIRTUAL TABLE t3 USING fts3tokenize(simple, '', 'xyz '); +---- +stmt 0 ok +stmt 54 ok +stmt 102 ok +==== 1.4 + + SELECT token FROM t3 WHERE input = '1x2x3x' +---- +stmt 0 err 1 -1 47 no such table: t3 +==== 1.5 + + SELECT token FROM t1 WHERE input = '1x2x3x' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 1.6 + + SELECT token FROM t3 WHERE input = '1''2x3x' +---- +stmt 0 err 1 -1 48 no such table: t3 +==== 1.7 + + SELECT token FROM t3 WHERE input = '' +---- +stmt 0 err 1 -1 41 no such table: t3 +==== 1.8 + + SELECT token FROM t3 WHERE input = NULL +---- +stmt 0 err 1 -1 43 no such table: t3 +==== 1.9 + + SELECT * FROM t3 WHERE input = 123 +---- +stmt 0 err 1 -1 38 no such table: t3 +==== 1.10 + + SELECT * FROM t1 WHERE input = 'a b c' AND token = 'b'; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 1.11 + + SELECT * FROM t1 WHERE token = 'b' AND input = 'a b c'; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 1.12 + + SELECT * FROM t1 WHERE input < 'b' AND input = 'a b c'; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 1.13.1 + + CREATE TABLE c1(x); + INSERT INTO c1(x) VALUES('a b c'); + INSERT INTO c1(x) VALUES('d e f'); +---- +stmt 0 ok +stmt 22 err 1 -1 59 no such table: c1 +stmt 59 err 1 -1 96 no such table: c1 +==== 1.13.2 + + SELECT * FROM c1, t1 WHERE input = x AND c1.rowid=t1.rowid; +---- +stmt 0 err 1 -1 62 no such table: c1 +==== 2.0 + + CREATE VIRTUAL TABLE tX USING fts3tokenize(nosuchtokenizer); +---- +stmt 0 ok +==== 2.1 + + CREATE VIRTUAL TABLE t4 USING fts3tokenize; + SELECT * FROM t4; +---- +stmt 0 ok +stmt 46 err 1 -1 66 no such table: t4 +==== 2.2 + + CREATE VIRTUAL TABLE t USING fts4(tokenize=simple""); +---- +stmt 0 ok +==== 2.3 + + CREATE VIRTUAL TABLE u USING fts4(tokenize=unicode61""); +---- +stmt 0 ok diff --git a/parser/testdata/fts4aa.metadata.json b/parser/testdata/fts4aa.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4aa.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4aa.test b/parser/testdata/fts4aa.test new file mode 100644 index 0000000..d058c84 --- /dev/null +++ b/parser/testdata/fts4aa.test @@ -0,0 +1,76 @@ +==== fts4aa-5.10 + + CREATE VIRTUAL TABLE t1 USING fts4(a, b, c, d, e,f,g,h,i,j,k,l,m,n,o,p,q,r); + INSERT INTO t1 VALUES('X Y', '2', '3', '4', '5', '6', '7', '8', '9', '0', + 'a','b','c','d','e','f','g','h'); + UPDATE t1_docsize SET size=x'88' WHERE docid=1; +---- +stmt 0 ok +stmt 79 err 1 -1 213 no such table: t1 +stmt 213 err 1 -1 263 no such table: t1_docsize +==== fts4aa-5.20 + + SELECT quote(matchinfo(t1, 'l')) FROM t1 WHERE t1 MATCH 'X Y'; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== fts4aa-5.30 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts4(a,b,c,d); + INSERT INTO t1 VALUES('one two','three four','five six','seven eight'); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 64 err 1 -1 138 no such table: t1 +==== fts4aa-5.40 + + UPDATE t1_stat SET value=x'01010101' WHERE id=0; + SELECT quote(matchinfo(t1,'a')) FROM t1 WHERE t1 MATCH 'one two'; +---- +stmt 0 err 1 -1 51 no such table: t1_stat +stmt 51 err 1 -1 119 no such table: t1 +==== fts4aa-5.50 + + UPDATE t1_stat SET value=x'010101' WHERE id=0; + SELECT quote(matchinfo(t1,'a')) FROM t1 WHERE t1 MATCH 'one two'; +---- +stmt 0 err 1 -1 49 no such table: t1_stat +stmt 49 err 1 -1 117 no such table: t1 +==== fts4aa-5.60 + + UPDATE t1_stat SET value=x'01' WHERE id=0; + SELECT quote(matchinfo(t1,'a')) FROM t1 WHERE t1 MATCH 'one two'; +---- +stmt 0 err 1 -1 45 no such table: t1_stat +stmt 45 err 1 -1 113 no such table: t1 +==== fts4aa-5.70 + + UPDATE t1_stat SET value=x'' WHERE id=0; + SELECT quote(matchinfo(t1,'a')) FROM t1 WHERE t1 MATCH 'one two'; +---- +stmt 0 err 1 -1 43 no such table: t1_stat +stmt 43 err 1 -1 111 no such table: t1 +==== fts4aa-6.10 + + CREATE VIRTUAL TABLE f USING fts4(); + INSERT INTO f_segdir VALUES (77,91,0,0,'255 77',x'0001308000004d5c4ddddddd4d4d7b4d4d4d614d8019ff4d05000001204d4d2e4d6e4d4d4d4b4d6c4d004d4d4d4d4d4d3d000000004d5d4d4d645d4d004d4d4d4d4d4d4d4d4d454d6910004d05ffff054d646c4d004d5d4d4d4d4d3d000000004d4d4d4d4d4d4d4d4d4d4d69624d4d4d04004d4d4d4d4d604d4ce1404d554d45'); + INSERT INTO f_segdir VALUES (77,108,0,0,'255 77',x'0001310000fa64004d4d4d3c5d4d654d4d4d614d8000ff4d05000001204d4d2e4d6e4d4d4dff4d4d4d4d4d4d00104d4d4d4d000000004d4d4d0400311d4d4d4d4d4d4d4d4d4d684d6910004d05ffff054d4d6c4d004d4d4d4d4d4d3d000000004d4d4d4d644d4d4d4d4d4d69624d4d4d03ed4d4d4d4d4d604d4ce1404d550080'); + INSERT INTO f_stat VALUES (0,x'80808080100000000064004d4d4d3c4d4d654d4d4d614d8000ff4df6ff1a00204d4d2e4d6e4d4d4d104d4d4d4d4d4d00104d4d4d4d4d4d69574d4d4d000031044d4d4d3e4d4d4c4d05004d6910'); + SELECT quote(matchinfo(f,'pnax')) from f where f match '0 1'; +---- +stmt 0 ok +stmt 39 err 1 -1 351 no such table: f_segdir +stmt 351 err 1 -1 664 no such table: f_segdir +stmt 664 err 1 -1 855 no such table: f_stat +stmt 855 err 1 -1 919 no such table: f +==== fts4aa-7.10 + + CREATE VIRTUAL TABLE f USING fts4(); + INSERT INTO f_segdir VALUES (63,60,60,60,'60 60',x'3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c483c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c20003c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c283c3c3c3c3c3c3c3c3c3c3c223c3c3c3c3c3c3c3c3c'); + INSERT INTO f_segments VALUES (60,x'3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c5a3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2a3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c5e3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c803c3c3c3c3c3c233c3c3c3c1c3c3c3c3c3c3c3c3c3c3c3c1b3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c273c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1a3c3c3c3c3c3c000200003c3c3c3c3c3c3c3c3c3c3c3c3c383c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d898d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d3c3c3c3c3c3c3c3c3c3cba3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c00023c3c3c3c3c3c383c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3cbc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2c3c3c3c403c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c16161616161616163c3c3c3c3c3c3c3c3c3c3c3c3c583c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2b3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1c013c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c20003c3c3c3c3c3c3c3c3c3c3c800000003c3c3c3c3c3c3c2c3c3c3c3c3c3c353c08080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808f4080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808083c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c323c3c3c3c3c3c3c3c3c3c3c4f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3cfcfcfcfcfcfcfcfcfcfcfc10fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfd02fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc03e8fcfcfcfc3c3c3c3c3c3c8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c553c3c3c3c3c3c3c3c3c3c3c3c3c573c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c000000803c3c4dd5d5a6d52cf3d5d5d5d5d5d5d5d5d5d5d5d5d5d53c3c3c3c3f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c013c3c3c3c00643c3c3c3ce93c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c263c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c363c3c3c3c3c3c3c3c3c3c3c3c3c3c543c3c3c3c3c3c3c3c3c3c273c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c330000003c3c3c3c3c3c3c3c3c3c3c3c3c3c4d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c000010003c3c3c3c3c3c413c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c403c3c3c3c3c3c3c3c3c3c3c3cec0000fa3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c4c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c5e3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1b3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c593c3c3c3c3c3c243c3c373c3c3c3c3cff3c3c3c3c3c3c3c3c3c3c3c3c3c000080003c3c3c3c3c3c3c3c3c3c353c3c3c3c3c3d3c3c3c3c3c3c3c3c3c3c3c3c4d3c3c3c3c3c3c3c3c3c3c3c3c3c40003c3c3c3c3c293c3c3c3c3c3c3c3c3c3d3c3c3c3c3c3c3c3c353c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c4f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3cff7f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3ca43c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3cbf3c3c3c3c3c3c3c3c3c008000003c3c3c3c3c3c3c3c343c3c373c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c593c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c'); + SELECT * from f where f match '0'; +---- +stmt 0 ok +stmt 39 err 1 -1 352 no such table: f_segdir +stmt 352 err 1 -1 6052 no such table: f_segments +stmt 6052 err 1 -1 6089 no such table: f diff --git a/parser/testdata/fts4check.metadata.json b/parser/testdata/fts4check.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4check.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4check.test b/parser/testdata/fts4check.test new file mode 100644 index 0000000..9671a5a --- /dev/null +++ b/parser/testdata/fts4check.test @@ -0,0 +1,72 @@ +==== fts4check-generated + + INSERT INTO t1 (t1) VALUES('integrity-check') +---- +stmt 0 err 1 -1 51 no such table: t1 +==== fts4check-generated.dup1 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== fts4check-generated.dup2 + + INSERT INTO t2 (t2) VALUES('integrity-check') +---- +stmt 0 err 1 -1 51 no such table: t2 +==== fts4check-generated.dup3 + + INSERT INTO t3 (t3) VALUES('integrity-check') +---- +stmt 0 err 1 -1 51 no such table: t3 +==== 4.0 + + CREATE VIRTUAL TABLE t4 USING fts4(a, b, c, notindexed=b); + INSERT INTO t4 VALUES('text one', 'text two', 'text three'); + INSERT INTO t4(t4) VALUES('integrity-check'); +---- +stmt 0 ok +stmt 61 err 1 -1 124 no such table: t4 +stmt 124 err 1 -1 172 no such table: t4 +==== 4.1 + + PRAGMA writable_schema = 1; + UPDATE sqlite_master + SET sql = 'CREATE VIRTUAL TABLE t4 USING fts4(a, b, c)' + WHERE name = 't4'; +---- +stmt 0 ok +stmt 30 ok +==== 5.0 + + BEGIN; + CREATE VIRTUAL TABLE t5 USING fts4(a, prefix="1,2,3"); + INSERT INTO t5 VALUES('And down by Kosiosko, where the reed-banks sweep'); + INSERT INTO t5 VALUES('and sway, and the rolling plains are wide, the'); + INSERT INTO t5 VALUES('man from snowy river is a household name today,'); + INSERT INTO t5 VALUES('and the stockmen tell the story of his ride'); +---- +stmt 0 ok +stmt 9 ok +stmt 66 err 1 -1 143 no such table: t5 +stmt 143 err 1 -1 218 no such table: t5 +stmt 218 err 1 -1 294 no such table: t5 +stmt 294 err 1 -1 366 no such table: t5 +==== 5.1 + + INSERT INTO t5(t5) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 48 no such table: t5 +==== 5.2 + + INSERT INTO t5_content VALUES(5, 'his hardy mountain pony'); + INSERT INTO t5(t5) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 63 no such table: t5_content +stmt 63 err 1 -1 111 no such table: t5 +==== 5.4 + + CREATE VIRTUAL TABLE t5 USING fts4(a, prefix="1,2,3"); + INSERT INTO t5(t5) VALUES('integrity-check'); +---- +stmt 0 ok +stmt 57 err 1 -1 105 no such table: t5 diff --git a/parser/testdata/fts4content.metadata.json b/parser/testdata/fts4content.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4content.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4content.test b/parser/testdata/fts4content.test new file mode 100644 index 0000000..56b6765 --- /dev/null +++ b/parser/testdata/fts4content.test @@ -0,0 +1,677 @@ +==== 1.1.1 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES('w x', 'x y', 'y z'); + CREATE VIRTUAL TABLE ft1 USING fts4(content=t1); +---- +stmt 0 ok +stmt 28 err 1 -1 74 no such table: t1 +stmt 74 ok +==== 1.1.2 + + PRAGMA table_info(ft1); +---- +stmt 0 ok +==== 1.1.3 + SELECT *, rowid FROM ft1 +---- +stmt 0 err 1 -1 26 no such table: ft1 +==== 1.1.4 + SELECT a, c FROM ft1 WHERE rowid=1 +---- +stmt 0 err 1 -1 36 no such table: ft1 +==== 1.1.5 + INSERT INTO ft1(ft1) VALUES('rebuild') +---- +stmt 0 err 1 -1 40 no such table: ft1 +==== 1.1.6 + SELECT rowid FROM ft1 WHERE ft1 MATCH 'x' +---- +stmt 0 err 1 -1 43 no such table: ft1 +==== 1.1.7 + SELECT rowid FROM ft1 WHERE ft1 MATCH 'a' +---- +stmt 0 err 1 -1 43 no such table: ft1 +==== 1.2.1 + + DROP TABLE ft1; + CREATE VIRTUAL TABLE ft1 USING fts4(content=t1, b); + PRAGMA table_info(ft1); +---- +stmt 0 err 1 -1 18 no such table: ft1 +stmt 18 ok +stmt 72 ok +==== 1.2.2 + + SELECT *, rowid FROM ft1 +---- +stmt 0 err 1 -1 29 no such table: ft1 +==== 2.0 + + CREATE TABLE t2(x); + INSERT INTO t2 VALUES('O S W W F U C R Q I C N P Z Y Y E Y Y E'); -- 1 + INSERT INTO t2 VALUES('Y X U V L B E H Y J C Y A I A P V F V K'); -- 2 + INSERT INTO t2 VALUES('P W I N J H I I N I F B K D U Q B Z S F'); -- 3 + INSERT INTO t2 VALUES('N R O R H J R H G M D I U U B O M P A U'); -- 4 + INSERT INTO t2 VALUES('Y O V O G T P N G T N F I V B U M J M G'); -- 5 + INSERT INTO t2 VALUES('J O B N K N E C H Z R K J O U G M K L S'); -- 6 + INSERT INTO t2 VALUES('S Z S R I Q U A P W R X H K C Z U L S P'); -- 7 + INSERT INTO t2 VALUES('J C H N R C K R V N M O F Z M Z A I H W'); -- 8 + INSERT INTO t2 VALUES('O Y G I S J U U W O D Z F J K N R P R L'); -- 9 + INSERT INTO t2 VALUES('B G L K U R U P V X Z I H V R W C Q A S'); -- 10 + INSERT INTO t2 VALUES('T F T J F F Y V F W N X K Q A Y L X W G'); -- 11 + INSERT INTO t2 VALUES('C J U H B Q X L C M M Y E G V F W V Z C'); -- 12 + INSERT INTO t2 VALUES('B W L T F S G X D P H N G M R I O A X I'); -- 13 + INSERT INTO t2 VALUES('N G Y O K Q K Z N M H U J E D H U W R K'); -- 14 + INSERT INTO t2 VALUES('U D T R U Y F J D S J X E H Q G V A S Z'); -- 15 + INSERT INTO t2 VALUES('M I W P J S H R J D Q I C G P C T P H R'); -- 16 + INSERT INTO t2 VALUES('J M N I S L X Q C A B F C B Y D H V R J'); -- 17 + INSERT INTO t2 VALUES('F V Z W J Q L P X Y E W B U Q N H X K T'); -- 18 + INSERT INTO t2 VALUES('R F S R Y O F Q E I E G H C B H R X Y N'); -- 19 + INSERT INTO t2 VALUES('U Q Q Q T E P D M F X P J G H X C Q D L'); -- 20 +---- +stmt 0 ok +stmt 22 err 1 -1 90 no such table: t2 +stmt 90 err 1 -1 164 no such table: t2 +stmt 164 err 1 -1 238 no such table: t2 +stmt 238 err 1 -1 312 no such table: t2 +stmt 312 err 1 -1 386 no such table: t2 +stmt 386 err 1 -1 460 no such table: t2 +stmt 460 err 1 -1 534 no such table: t2 +stmt 534 err 1 -1 608 no such table: t2 +stmt 608 err 1 -1 682 no such table: t2 +stmt 682 err 1 -1 756 no such table: t2 +stmt 756 err 1 -1 831 no such table: t2 +stmt 831 err 1 -1 906 no such table: t2 +stmt 906 err 1 -1 981 no such table: t2 +stmt 981 err 1 -1 1056 no such table: t2 +stmt 1056 err 1 -1 1131 no such table: t2 +stmt 1131 err 1 -1 1206 no such table: t2 +stmt 1206 err 1 -1 1281 no such table: t2 +stmt 1281 err 1 -1 1356 no such table: t2 +stmt 1356 err 1 -1 1431 no such table: t2 +stmt 1431 err 1 -1 1506 no such table: t2 +==== 2.1 + + CREATE VIRTUAL TABLE ft2 USING fts4(content=t2); + INSERT INTO ft2(ft2) VALUES('rebuild'); + + -- Modify the backing table a bit: Row 17 is missing and the contents + -- of row 20 do not match the FTS index contents. + DELETE FROM t2 WHERE rowid = 17; + UPDATE t2 SET x = 'a b c d e f g h i j' WHERE rowid = 20; +---- +stmt 0 ok +stmt 51 err 1 -1 93 no such table: ft2 +stmt 93 err 1 -1 255 no such table: t2 +stmt 255 err 1 -1 315 no such table: t2 +==== 3.1 + + CREATE TABLE t3(x, y); + CREATE VIRTUAL TABLE ft3 USING fts4(content=t3); +---- +stmt 0 ok +stmt 25 ok +==== 3.1.1 + + INSERT INTO ft3 VALUES('a b c', 'd e f'); +---- +stmt 0 err 1 -1 44 no such table: ft3 +==== 3.1.2 + + INSERT INTO ft3(docid, x, y) VALUES(21, 'a b c', 'd e f'); + SELECT rowid FROM ft3 WHERE ft3 MATCH '"a b c"'; +---- +stmt 0 err 1 -1 61 no such table: ft3 +stmt 61 err 1 -1 112 no such table: ft3 +==== 3.1.3 + SELECT * FROM t3 +---- +stmt 0 err 1 -1 18 no such table: t3 +==== 3.1.4 + + DELETE FROM ft3; + SELECT rowid FROM ft3 WHERE ft3 MATCH '"a b c"'; +---- +stmt 0 err 1 -1 20 no such table: ft3 +stmt 20 err 1 -1 71 no such table: ft3 +==== 3.1.5 + + INSERT INTO t3(rowid, x, y) VALUES(21, 'a b c', 'd e f'); + DELETE FROM ft3; + SELECT rowid FROM ft3 WHERE ft3 MATCH '"a b c"'; +---- +stmt 0 err 1 -1 60 no such table: t3 +stmt 60 err 1 -1 79 no such table: ft3 +stmt 79 err 1 -1 130 no such table: ft3 +==== 3.1.6 + SELECT rowid FROM t3 +---- +stmt 0 err 1 -1 22 no such table: t3 +==== 3.2.1 + + INSERT INTO ft3(rowid, x, y) VALUES(0, 'R T M S M', 'A F O K H'); + INSERT INTO ft3(rowid, x, y) VALUES(1, 'C Z J O X', 'U S Q D K'); + INSERT INTO ft3(rowid, x, y) VALUES(2, 'N G H P O', 'N O P O C'); + INSERT INTO ft3(rowid, x, y) VALUES(3, 'V H S D R', 'K N G E C'); + INSERT INTO ft3(rowid, x, y) VALUES(4, 'J T R V U', 'U X S L C'); + INSERT INTO ft3(rowid, x, y) VALUES(5, 'N A Y N G', 'X D G P Y'); + INSERT INTO ft3(rowid, x, y) VALUES(6, 'I Q I S P', 'D R O Q B'); + INSERT INTO ft3(rowid, x, y) VALUES(7, 'T K T Z J', 'B W D G O'); + INSERT INTO ft3(rowid, x, y) VALUES(8, 'Y K F X T', 'D F G V G'); + INSERT INTO ft3(rowid, x, y) VALUES(9, 'E L E T L', 'P W N F Z'); + INSERT INTO ft3(rowid, x, y) VALUES(10, 'O G J G X', 'G J F E P'); + INSERT INTO ft3(rowid, x, y) VALUES(11, 'O L N N Z', 'K E Z F D'); + INSERT INTO ft3(rowid, x, y) VALUES(12, 'R Z M R J', 'X G I M Z'); + INSERT INTO ft3(rowid, x, y) VALUES(13, 'L X N N X', 'R R N S T'); + INSERT INTO ft3(rowid, x, y) VALUES(14, 'F L B J H', 'K W F L C'); + INSERT INTO ft3(rowid, x, y) VALUES(15, 'P E B M V', 'E A A B U'); + INSERT INTO ft3(rowid, x, y) VALUES(16, 'V E C F P', 'L U T V K'); + INSERT INTO ft3(rowid, x, y) VALUES(17, 'T N O Z N', 'T P Q X N'); + INSERT INTO ft3(rowid, x, y) VALUES(18, 'V W U W R', 'H O A A V'); + INSERT INTO ft3(rowid, x, y) VALUES(19, 'A H N L F', 'I G H B O'); +---- +stmt 0 err 1 -1 68 no such table: ft3 +stmt 68 err 1 -1 136 no such table: ft3 +stmt 136 err 1 -1 204 no such table: ft3 +stmt 204 err 1 -1 272 no such table: ft3 +stmt 272 err 1 -1 340 no such table: ft3 +stmt 340 err 1 -1 408 no such table: ft3 +stmt 408 err 1 -1 476 no such table: ft3 +stmt 476 err 1 -1 544 no such table: ft3 +stmt 544 err 1 -1 612 no such table: ft3 +stmt 612 err 1 -1 680 no such table: ft3 +stmt 680 err 1 -1 749 no such table: ft3 +stmt 749 err 1 -1 818 no such table: ft3 +stmt 818 err 1 -1 887 no such table: ft3 +stmt 887 err 1 -1 956 no such table: ft3 +stmt 956 err 1 -1 1025 no such table: ft3 +stmt 1025 err 1 -1 1094 no such table: ft3 +stmt 1094 err 1 -1 1163 no such table: ft3 +stmt 1163 err 1 -1 1232 no such table: ft3 +stmt 1232 err 1 -1 1301 no such table: ft3 +stmt 1301 err 1 -1 1370 no such table: ft3 +==== 3.3.1 + + INSERT INTO t3(rowid, x, y) VALUES(0, 'R T M S M', 'A F O K H'); + INSERT INTO t3(rowid, x, y) VALUES(1, 'C Z J O X', 'U S Q D K'); + INSERT INTO t3(rowid, x, y) VALUES(2, 'N G H P O', 'N O P O C'); + INSERT INTO t3(rowid, x, y) VALUES(3, 'V H S D R', 'K N G E C'); + INSERT INTO t3(rowid, x, y) VALUES(4, 'J T R V U', 'U X S L C'); + INSERT INTO t3(rowid, x, y) VALUES(5, 'N A Y N G', 'X D G P Y'); + UPDATE ft3 SET x = y, y = x; + DELETE FROM t3; +---- +stmt 0 err 1 -1 67 no such table: t3 +stmt 67 err 1 -1 134 no such table: t3 +stmt 134 err 1 -1 201 no such table: t3 +stmt 201 err 1 -1 268 no such table: t3 +stmt 268 err 1 -1 335 no such table: t3 +stmt 335 err 1 -1 402 no such table: t3 +stmt 402 err 1 -1 433 no such table: ft3 +stmt 433 err 1 -1 451 no such table: t3 +==== 3.3.1.dup1 + + INSERT INTO t3(rowid, x, y) VALUES(15, 'P E B M V', 'E A A B U'); + INSERT INTO t3(rowid, x, y) VALUES(16, 'V E C F P', 'L U T V K'); + INSERT INTO t3(rowid, x, y) VALUES(17, 'T N O Z N', 'T P Q X N'); + INSERT INTO t3(rowid, x, y) VALUES(18, 'V W U W R', 'H O A A V'); + INSERT INTO t3(rowid, x, y) VALUES(19, 'A H N L F', 'I G H B O'); + DELETE FROM ft3; +---- +stmt 0 err 1 -1 68 no such table: t3 +stmt 68 err 1 -1 136 no such table: t3 +stmt 136 err 1 -1 204 no such table: t3 +stmt 204 err 1 -1 272 no such table: t3 +stmt 272 err 1 -1 340 no such table: t3 +stmt 340 err 1 -1 359 no such table: ft3 +==== 4.0 + + CREATE TABLE t4(x); + CREATE VIRTUAL TABLE ft4 USING fts4(content=t4); + CREATE VIRTUAL TABLE ft4x USING fts4(x); +---- +stmt 0 ok +stmt 22 ok +stmt 73 ok +==== 4.1.1 + + INSERT INTO ft4x(ft4x) VALUES('rebuild'); + INSERT INTO ft4(ft4) VALUES('rebuild'); +---- +stmt 0 err 1 -1 44 no such table: ft4x +stmt 44 err 1 -1 86 no such table: ft4 +==== 4.1.2 + + SELECT id, quote(value) FROM ft4_stat +---- +stmt 0 err 1 -1 41 no such table: ft4_stat +==== 4.1.3 + + SELECT id, quote(value) FROM ft4x_stat +---- +stmt 0 err 1 -1 42 no such table: ft4x_stat +==== 4.2.1 + + INSERT INTO ft4x VALUES('M G M F T'); + INSERT INTO ft4x VALUES('Z Q C A U'); + INSERT INTO ft4x VALUES('N L L V'); + INSERT INTO ft4x VALUES('T F D X D'); + INSERT INTO ft4x VALUES('Z H I S D'); + + SELECT id, quote(value) FROM ft4x_stat +---- +stmt 0 err 1 -1 40 no such table: ft4x +stmt 40 err 1 -1 80 no such table: ft4x +stmt 80 err 1 -1 118 no such table: ft4x +stmt 118 err 1 -1 158 no such table: ft4x +stmt 158 err 1 -1 198 no such table: ft4x +stmt 198 err 1 -1 241 no such table: ft4x_stat +==== 4.2.2 + + INSERT INTO ft4(rowid, x) SELECT rowid, * FROM ft4x; + SELECT id, quote(value) FROM ft4_stat +---- +stmt 0 err 1 -1 55 no such table: ft4 +stmt 55 err 1 -1 96 no such table: ft4_stat +==== 4.2.3 + + SELECT docid, quote(size) FROM ft4_docsize +---- +stmt 0 err 1 -1 46 no such table: ft4_docsize +==== 4.2.4 + + INSERT INTO ft4x(ft4x) VALUES('rebuild'); + SELECT id, quote(value) FROM ft4x_stat; + SELECT docid, quote(size) FROM ft4x_docsize +---- +stmt 0 err 1 -1 44 no such table: ft4x +stmt 44 err 1 -1 86 no such table: ft4x_stat +stmt 86 err 1 -1 133 no such table: ft4x_docsize +==== 4.2.5 + + INSERT INTO ft4(ft4) VALUES('rebuild'); + SELECT id, quote(value) FROM ft4_stat; + SELECT docid, quote(size) FROM ft4_docsize +---- +stmt 0 err 1 -1 42 no such table: ft4 +stmt 42 err 1 -1 83 no such table: ft4_stat +stmt 83 err 1 -1 129 no such table: ft4_docsize +==== 4.2.6 + + INSERT INTO t4(rowid, x) SELECT rowid, x FROM ft4x; + INSERT INTO ft4(ft4) VALUES('rebuild'); + SELECT id, quote(value) FROM ft4_stat; + SELECT docid, quote(size) FROM ft4_docsize +---- +stmt 0 err 1 -1 54 no such table: t4 +stmt 54 err 1 -1 96 no such table: ft4 +stmt 96 err 1 -1 137 no such table: ft4_stat +stmt 137 err 1 -1 183 no such table: ft4_docsize +==== 5.1.1 + + CREATE TABLE t5(a, b, c, d); + CREATE VIRTUAL TABLE ft5 USING fts4(content=t5); + SELECT name FROM sqlite_master WHERE name LIKE '%t5%'; +---- +stmt 0 ok +stmt 31 ok +stmt 82 ok +==== 5.1.2 + + ALTER TABLE ft5 RENAME TO ft6; + SELECT name FROM sqlite_master WHERE name LIKE '%t5%'; +---- +stmt 0 err 1 -1 33 no such table: ft5 +stmt 33 ok +==== 5.1.3 + + SELECT name FROM sqlite_master WHERE name LIKE '%t6%'; +---- +stmt 0 ok +==== 5.1.4 + + INSERT INTO t5 VALUES('a', 'b', 'c', 'd'); + INSERT INTO ft6(ft6) VALUES('rebuild'); + SELECT rowid FROM ft6 WHERE ft6 MATCH 'b'; +---- +stmt 0 err 1 -1 45 no such table: t5 +stmt 45 err 1 -1 87 no such table: ft6 +stmt 87 err 1 -1 132 no such table: ft6 +==== 5.1.5 + + DROP TABLE ft6; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 18 no such table: ft6 +stmt 18 err 1 -1 38 no such table: t5 +==== 5.1.6 + + SELECT name FROM sqlite_master WHERE name LIKE '%t6%'; +---- +stmt 0 ok +==== 5.1.7 + + CREATE VIRTUAL TABLE ft5 USING fts4(content=t5); + CREATE TABLE t5_content(a, b); + DROP TABLE ft5; + SELECT name FROM sqlite_master WHERE name LIKE '%t5%'; +---- +stmt 0 ok +stmt 51 ok +stmt 84 err 1 -1 102 no such table: ft5 +stmt 102 ok +==== 6.1.1 + + CREATE VIRTUAL TABLE ft7 USING fts4(content=t7); +---- +stmt 0 ok +==== 6.2.1 + + CREATE TABLE t7(one, two); + CREATE VIRTUAL TABLE ft7 USING fts4(content=t7); + INSERT INTO t7 VALUES('A B', 'B A'); + INSERT INTO t7 VALUES('C D', 'A A'); + SELECT * FROM ft7; +---- +stmt 0 ok +stmt 29 ok +stmt 80 err 1 -1 119 no such table: t7 +stmt 119 err 1 -1 158 no such table: t7 +stmt 158 err 1 -1 179 no such table: ft7 +==== 6.2.2 + + DROP TABLE t7; + SELECT * FROM ft7; +---- +stmt 0 err 1 -1 17 no such table: t7 +stmt 17 err 1 -1 38 no such table: ft7 +==== 6.2.3 + + SELECT name FROM sqlite_master WHERE name LIKE '%t7%' +---- +stmt 0 ok +==== 6.2.4 + + SELECT * FROM ft7; +---- +stmt 0 err 1 -1 21 no such table: ft7 +==== 6.2.5 + + CREATE TABLE t7(x, y); + INSERT INTO t7 VALUES('A B', 'B A'); + INSERT INTO t7 VALUES('C D', 'A A'); + SELECT * FROM ft7; +---- +stmt 0 ok +stmt 25 err 1 -1 64 no such table: t7 +stmt 64 err 1 -1 103 no such table: t7 +stmt 103 err 1 -1 124 no such table: ft7 +==== 6.2.6 + + INSERT INTO ft7(ft7) VALUES('rebuild'); + SELECT rowid FROM ft7 WHERE ft7 MATCH '"A A"'; +---- +stmt 0 err 1 -1 42 no such table: ft7 +stmt 42 err 1 -1 91 no such table: ft7 +==== 6.2.7 + + DROP TABLE t7; + CREATE TABLE t7(x); +---- +stmt 0 err 1 -1 17 no such table: t7 +stmt 17 ok +==== 6.2.8 + + SELECT * FROM ft7 WHERE ft7 MATCH '"A A"'; +---- +stmt 0 err 1 -1 45 no such table: ft7 +==== 6.2.9 + + SELECT * FROM ft7 WHERE ft7 MATCH '"A A"'; +---- +stmt 0 err 1 -1 45 no such table: ft7 +==== 6.2.10 + + SELECT rowid FROM ft7 WHERE ft7 MATCH '"A A"'; +---- +stmt 0 err 1 -1 49 no such table: ft7 +==== 6.2.11 + + SELECT rowid, * FROM ft7 WHERE ft7 MATCH '"A A"'; +---- +stmt 0 err 1 -1 52 no such table: ft7 +==== 7.1.1 + + CREATE VIRTUAL TABLE ft8 USING fts4(content=nosuchtable, x); + INSERT INTO ft8(docid, x) VALUES(13, 'U O N X G'); + INSERT INTO ft8(docid, x) VALUES(14, 'C J J U B'); + INSERT INTO ft8(docid, x) VALUES(15, 'N J Y G X'); + INSERT INTO ft8(docid, x) VALUES(16, 'R Y D O R'); + INSERT INTO ft8(docid, x) VALUES(17, 'I Y T Q O'); +---- +stmt 0 ok +stmt 63 err 1 -1 116 no such table: ft8 +stmt 116 err 1 -1 169 no such table: ft8 +stmt 169 err 1 -1 222 no such table: ft8 +stmt 222 err 1 -1 275 no such table: ft8 +stmt 275 err 1 -1 328 no such table: ft8 +==== 7.1.2 + + SELECT docid FROM ft8 WHERE ft8 MATCH 'N'; +---- +stmt 0 err 1 -1 45 no such table: ft8 +==== 7.2.1 + + CREATE VIRTUAL TABLE ft9 USING fts4(content=, x); + INSERT INTO ft9(docid, x) VALUES(13, 'U O N X G'); + INSERT INTO ft9(docid, x) VALUES(14, 'C J J U B'); + INSERT INTO ft9(docid, x) VALUES(15, 'N J Y G X'); + INSERT INTO ft9(docid, x) VALUES(16, 'R Y D O R'); + INSERT INTO ft9(docid, x) VALUES(17, 'I Y T Q O'); +---- +stmt 0 ok +stmt 52 err 1 -1 105 no such table: ft9 +stmt 105 err 1 -1 158 no such table: ft9 +stmt 158 err 1 -1 211 no such table: ft9 +stmt 211 err 1 -1 264 no such table: ft9 +stmt 264 err 1 -1 317 no such table: ft9 +==== 7.2.2 + + SELECT docid FROM ft9 WHERE ft9 MATCH 'N'; +---- +stmt 0 err 1 -1 45 no such table: ft9 +==== 7.2.3 + + SELECT name FROM sqlite_master WHERE name LIKE 'ft9_%'; +---- +stmt 0 ok +==== 7.2.4 + + SELECT * FROM ft9 WHERE ft9 MATCH 'N'; +---- +stmt 0 err 1 -1 41 no such table: ft9 +==== 8.1 + + CREATE TABLE t10(a, b); + INSERT INTO t10 VALUES( + 'abasia abasic abask', 'Abassin abastardize abatable'); + INSERT INTO t10 VALUES( + 'abate abatement abater', 'abatis abatised abaton'); + INSERT INTO t10 VALUES( + 'abator abattoir Abatua', 'abature abave abaxial'); + + CREATE VIRTUAL TABLE ft10 USING fts4(content=t10, prefix="2,4", a, b); +---- +stmt 0 ok +stmt 26 err 1 -1 114 no such table: t10 +stmt 114 err 1 -1 199 no such table: t10 +stmt 199 err 1 -1 283 no such table: t10 +stmt 283 ok +==== 8.2 + SELECT * FROM ft10 WHERE a MATCH 'ab*'; +---- +stmt 0 err 1 -1 40 no such table: ft10 +==== 8.3 + INSERT INTO ft10(ft10) VALUES('rebuild'); +---- +stmt 0 err 1 -1 42 no such table: ft10 +==== 8.4 + SELECT rowid FROM ft10 WHERE a MATCH 'ab*'; +---- +stmt 0 err 1 -1 44 no such table: ft10 +==== 8.5 + SELECT rowid FROM ft10 WHERE b MATCH 'abav*'; +---- +stmt 0 err 1 -1 46 no such table: ft10 +==== 8.6 + SELECT rowid FROM ft10 WHERE ft10 MATCH 'abas*'; +---- +stmt 0 err 1 -1 49 no such table: ft10 +==== 9.1 + + CREATE TABLE tbl1(a, b); + INSERT INTO tbl1 VALUES('a b', 'c d'); + INSERT INTO tbl1 VALUES('e f', 'a b'); + CREATE VIRTUAL TABLE e1 USING echo(tbl1); + CREATE VIRTUAL TABLE ft1 USING fts4(content=e1); + INSERT INTO ft1(ft1) VALUES('rebuild'); +---- +stmt 0 ok +stmt 27 err 1 -1 68 no such table: tbl1 +stmt 68 err 1 -1 109 no such table: tbl1 +stmt 109 ok +stmt 153 ok +stmt 204 err 1 -1 246 no such table: ft1 +==== 9.2 + + SELECT rowid, * FROM ft1 WHERE ft1 MATCH 'e' +---- +stmt 0 err 1 -1 48 no such table: ft1 +==== 9.3 + + SELECT rowid, * FROM ft1 WHERE ft1 MATCH 'a' +---- +stmt 0 err 1 -1 48 no such table: ft1 +==== 9.4 + + DELETE FROM ft1 WHERE docid=1; +---- +stmt 0 err 1 -1 34 no such table: ft1 +==== 9.5 + + SELECT rowid, * FROM ft1 WHERE ft1 MATCH 'a' +---- +stmt 0 err 1 -1 48 no such table: ft1 +==== 9.6 + + INSERT INTO ft1(ft1) VALUES('rebuild'); + SELECT rowid, * FROM ft1 WHERE ft1 MATCH 'a' +---- +stmt 0 err 1 -1 42 no such table: ft1 +stmt 42 err 1 -1 90 no such table: ft1 +==== 10.1 + + CREATE TABLE idx(id INTEGER PRIMARY KEY, path TEXT); + INSERT INTO idx VALUES (1, 't1.txt'); + INSERT INTO idx VALUES (2, 't2.txt'); + INSERT INTO idx VALUES (3, 't3.txt'); + + CREATE VIRTUAL TABLE vt USING fs(idx); + SELECT path, data FROM vt; +---- +stmt 0 ok +stmt 55 err 1 -1 95 no such table: idx +stmt 95 err 1 -1 135 no such table: idx +stmt 135 err 1 -1 175 no such table: idx +stmt 175 ok +stmt 217 err 1 -1 246 no such table: vt +==== 10.2 + + SELECT path, data FROM vt WHERE rowid = 2; +---- +stmt 0 err 1 -1 45 no such table: vt +==== 10.3 + + CREATE VIRTUAL TABLE ft USING fts4(content=vt); + INSERT INTO ft(ft) VALUES('rebuild'); +---- +stmt 0 ok +stmt 50 err 1 -1 90 no such table: ft +==== 10.6 + DELETE FROM ft WHERE docid=2 +---- +stmt 0 err 1 -1 30 no such table: ft +==== 11.1 + + CREATE VIRTUAL TABLE x1 USING fts4(content=x1); +---- +stmt 0 ok +==== 12.1.1 + + CREATE VIRTUAL TABLE t1 USING fts4(a, content=t1 ); + INSERT INTO t1(rowid, a) VALUES(1, 'abc'); +---- +stmt 0 ok +stmt 54 err 1 -1 99 no such table: t1 +==== 12.1.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 21 no such table: t1 +==== 12.1.3 + + SELECT * FROM t1('abc'); +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 12.1.4 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 12.2.1 + + CREATE VIRTUAL TABLE t1 USING fts4(a, content=t2 ); + CREATE VIRTUAL TABLE t2 USING fts4(a, content=t1 ); + INSERT INTO t1(rowid, a) VALUES(1, 'abc'); +---- +stmt 0 ok +stmt 54 ok +stmt 108 err 1 -1 153 no such table: t1 +==== 12.2.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 21 no such table: t1 +==== 12.2.3 + + SELECT * FROM t1('abc'); +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 12.2.4 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 13.0 + + PRAGMA trusted_schema = off; + CREATE VIRTUAL TABLE t1 USING fts4(data, content=sqlite_dbpage); +---- +stmt 0 ok +stmt 31 ok +==== 13.1 + + INSERT INTO t1(t1) VALUES('rebuild'); +---- +stmt 0 err 1 -1 40 no such table: t1 +==== 13.2.0 + + CREATE VIRTUAL TABLE aa USING tcl(vtab_command); +---- +stmt 0 ok +==== 13.2.1 + + INSERT INTO aa VALUES('one two three'); +---- +stmt 0 err 1 -1 42 no such table: aa diff --git a/parser/testdata/fts4docid.metadata.json b/parser/testdata/fts4docid.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4docid.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4docid.test b/parser/testdata/fts4docid.test new file mode 100644 index 0000000..ed102a7 --- /dev/null +++ b/parser/testdata/fts4docid.test @@ -0,0 +1,52 @@ +==== 1.0 + CREATE VIRTUAL TABLE t1 USING fts4; +---- +stmt 0 ok +==== 2.1.1 + SELECT docid FROM t1 WHERE docid = 5 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== 2.1.2 + SELECT docid FROM t1 WHERE docid = '5' +---- +stmt 0 err 1 -1 40 no such table: t1 +==== 2.1.3 + SELECT docid FROM t1 WHERE docid = +5 +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 2.1.4 + SELECT docid FROM t1 WHERE docid = +'5' +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 2.1.5 + SELECT docid FROM t1 WHERE docid < 5 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== 2.1.6 + SELECT docid FROM t1 WHERE docid < '5' +---- +stmt 0 err 1 -1 40 no such table: t1 +==== 2.2.1 + SELECT rowid FROM t1 WHERE rowid = 5 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== 2.2.2 + SELECT rowid FROM t1 WHERE rowid = '5' +---- +stmt 0 err 1 -1 40 no such table: t1 +==== 2.2.3 + SELECT rowid FROM t1 WHERE rowid = +5 +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 2.2.4 + SELECT rowid FROM t1 WHERE rowid = +'5' +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 2.2.5 + SELECT rowid FROM t1 WHERE rowid < 5 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== 2.2.6 + SELECT rowid FROM t1 WHERE rowid < '5' +---- +stmt 0 err 1 -1 40 no such table: t1 diff --git a/parser/testdata/fts4growth.metadata.json b/parser/testdata/fts4growth.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4growth.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4growth.test b/parser/testdata/fts4growth.test new file mode 100644 index 0000000..1451850 --- /dev/null +++ b/parser/testdata/fts4growth.test @@ -0,0 +1,255 @@ +==== 1.1 + CREATE VIRTUAL TABLE x1 USING fts3; +---- +stmt 0 ok +==== 1.3 + + INSERT INTO x1(x1) VALUES('optimize'); + SELECT level, end_block, length(root) FROM x1_segdir; +---- +stmt 0 err 1 -1 41 no such table: x1 +stmt 41 err 1 -1 97 no such table: x1_segdir +==== 1.5 + + SELECT length(block) FROM x1_segments; +---- +stmt 0 err 1 -1 41 no such table: x1_segments +==== 1.7 + + SELECT sum(length(block)) FROM x1_segments WHERE blockid IN (224,225,226) +---- +stmt 0 err 1 -1 77 no such table: x1_segments +==== 2.1 + + CREATE TABLE t1(docid, words); + CREATE VIRTUAL TABLE x2 USING fts4; +---- +stmt 0 ok +stmt 34 ok +==== 2.3 + + SELECT count(*) FROM x2_segdir WHERE level=2; + SELECT count(*) FROM x2_segdir WHERE level=3; +---- +stmt 0 err 1 -1 49 no such table: x2_segdir +stmt 49 err 1 -1 97 no such table: x2_segdir +==== 2.4 + + INSERT INTO x2(x2) VALUES('merge=4,4'); + SELECT count(*) FROM x2_segdir WHERE level=2; + SELECT count(*) FROM x2_segdir WHERE level=3; +---- +stmt 0 err 1 -1 43 no such table: x2 +stmt 43 err 1 -1 91 no such table: x2_segdir +stmt 91 err 1 -1 139 no such table: x2_segdir +==== 2.5 + + SELECT end_block FROM x2_segdir WHERE level=3; + INSERT INTO x2(x2) VALUES('merge=4,4'); + SELECT end_block FROM x2_segdir WHERE level=3; + INSERT INTO x2(x2) VALUES('merge=4,4'); + SELECT end_block FROM x2_segdir WHERE level=3; +---- +stmt 0 err 1 -1 50 no such table: x2_segdir +stmt 50 err 1 -1 92 no such table: x2 +stmt 92 err 1 -1 141 no such table: x2_segdir +stmt 141 err 1 -1 183 no such table: x2 +stmt 183 err 1 -1 232 no such table: x2_segdir +==== 2.6 + + SELECT sum(length(block)) FROM x2_segdir, x2_segments WHERE + blockid BETWEEN start_block AND leaves_end_block + AND level=3 +---- +stmt 0 err 1 -1 133 no such table: x2_segdir +==== 2.7 + + INSERT INTO x2(x2) VALUES('merge=1000,4'); + SELECT end_block FROM x2_segdir WHERE level=3; +---- +stmt 0 err 1 -1 46 no such table: x2 +stmt 46 err 1 -1 95 no such table: x2_segdir +==== 2.8 + + SELECT sum(length(block)) FROM x2_segdir, x2_segments WHERE + blockid BETWEEN start_block AND leaves_end_block + AND level=3 +---- +stmt 0 err 1 -1 133 no such table: x2_segdir +==== 3.0 + CREATE VIRTUAL TABLE x3 USING fts4 +---- +stmt 0 ok +==== 4.1 + + DROP TABLE IF EXISTS x4; + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(docid, words); + CREATE VIRTUAL TABLE x4 USING fts4(words); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 87 ok +==== 4.3 + + SELECT level, idx, second(end_block) FROM x4_segdir +---- +stmt 0 err 1 -1 55 no such table: x4_segdir +==== 4.4 + + INSERT INTO x4(x4) VALUES('merge=10,2'); + SELECT count(*) FROM x4_segdir; +---- +stmt 0 err 1 -1 43 no such table: x4 +stmt 43 err 1 -1 77 no such table: x4_segdir +==== 4.5 + + INSERT INTO x4(x4) VALUES('merge=10,2'); + SELECT count(*) FROM x4_segdir; +---- +stmt 0 err 1 -1 43 no such table: x4 +stmt 43 err 1 -1 77 no such table: x4_segdir +==== 4.6 + + INSERT INTO x4(x4) VALUES('merge=1000,2'); + SELECT count(*) FROM x4_segdir; +---- +stmt 0 err 1 -1 45 no such table: x4 +stmt 45 err 1 -1 79 no such table: x4_segdir +==== 5.1 + + DROP TABLE IF EXISTS x2; + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(docid, words); + CREATE VIRTUAL TABLE x2 USING fts4; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 87 ok +==== 5.3 + + UPDATE x2_segdir SET end_block = CAST( first(end_block) AS INTEGER ); + SELECT end_block, typeof(end_block) FROM x2_segdir; +---- +stmt 0 err 1 -1 72 no such table: x2_segdir +stmt 72 err 1 -1 126 no such table: x2_segdir +==== 5.4 + + INSERT INTO x2 SELECT words FROM t1 LIMIT 50; + SELECT level, idx, end_block FROM x2_segdir +---- +stmt 0 err 1 -1 48 no such table: x2 +stmt 48 err 1 -1 95 no such table: x2_segdir +==== 5.5 + + UPDATE x2_segdir SET end_block = end_block || ' 1926' WHERE level=2; + INSERT INTO x2 SELECT words FROM t1 LIMIT 40; + SELECT level, idx, end_block FROM x2_segdir +---- +stmt 0 err 1 -1 71 no such table: x2_segdir +stmt 71 err 1 -1 119 no such table: x2 +stmt 119 err 1 -1 166 no such table: x2_segdir +==== 6.1 + + CREATE VIRTUAL TABLE x5 USING fts4; + INSERT INTO x5 SELECT words FROM t1 LIMIT 100 OFFSET 0; + INSERT INTO x5 SELECT words FROM t1 LIMIT 100 OFFSET 25; + INSERT INTO x5 SELECT words FROM t1 LIMIT 100 OFFSET 50; + INSERT INTO x5 SELECT words FROM t1 LIMIT 100 OFFSET 75; + SELECT count(*) FROM x5_segdir +---- +stmt 0 ok +stmt 38 err 1 -1 96 no such table: x5 +stmt 96 err 1 -1 155 no such table: x5 +stmt 155 err 1 -1 214 no such table: x5 +stmt 214 err 1 -1 273 no such table: x5 +stmt 273 err 1 -1 307 no such table: x5_segdir +==== 6.2 + + INSERT INTO x5(x5) VALUES('merge=2,4'); + SELECT level, idx, end_block FROM x5_segdir; +---- +stmt 0 err 1 -1 42 no such table: x5 +stmt 42 err 1 -1 89 no such table: x5_segdir +==== 6.3 + + INSERT INTO x5 SELECT words FROM t1 LIMIT 100 OFFSET 100; + SELECT level, idx, end_block FROM x5_segdir; +---- +stmt 0 err 1 -1 60 no such table: x5 +stmt 60 err 1 -1 107 no such table: x5_segdir +==== 6.4 + + INSERT INTO x5(x5) VALUES('merge=200,4'); + SELECT level, idx, end_block FROM x5_segdir; +---- +stmt 0 err 1 -1 44 no such table: x5 +stmt 44 err 1 -1 91 no such table: x5_segdir +==== 6.5 + + INSERT INTO x5 SELECT words FROM t1; + SELECT level, idx, end_block FROM x5_segdir; +---- +stmt 0 err 1 -1 39 no such table: x5 +stmt 39 err 1 -1 86 no such table: x5_segdir +==== 7.1 + + CREATE VIRTUAL TABLE x6 USING fts4; + INSERT INTO x6 SELECT words FROM t1; + INSERT INTO x6 SELECT words FROM t1; + INSERT INTO x6 SELECT words FROM t1; + INSERT INTO x6 SELECT words FROM t1; + INSERT INTO x6 SELECT words FROM t1; + INSERT INTO x6 SELECT words FROM t1; + SELECT level, idx, end_block FROM x6_segdir; +---- +stmt 0 ok +stmt 38 err 1 -1 77 no such table: x6 +stmt 77 err 1 -1 116 no such table: x6 +stmt 116 err 1 -1 155 no such table: x6 +stmt 155 err 1 -1 194 no such table: x6 +stmt 194 err 1 -1 233 no such table: x6 +stmt 233 err 1 -1 272 no such table: x6 +stmt 272 err 1 -1 319 no such table: x6_segdir +==== 7.2 + + INSERT INTO x6(x6) VALUES('merge=25,4'); + SELECT level, idx, end_block FROM x6_segdir; +---- +stmt 0 err 1 -1 43 no such table: x6 +stmt 43 err 1 -1 90 no such table: x6_segdir +==== 7.3 + + UPDATE x6_segdir SET end_block = first(end_block) WHERE level=1; + SELECT level, idx, end_block FROM x6_segdir; +---- +stmt 0 err 1 -1 67 no such table: x6_segdir +stmt 67 err 1 -1 114 no such table: x6_segdir +==== 7.4 + + INSERT INTO x6(x6) VALUES('merge=25,4'); + SELECT level, idx, end_block FROM x6_segdir; +---- +stmt 0 err 1 -1 43 no such table: x6 +stmt 43 err 1 -1 90 no such table: x6_segdir +==== 7.5 + + INSERT INTO x6(x6) VALUES('merge=2500,4'); + SELECT level, idx, start_block, leaves_end_block, end_block FROM x6_segdir; +---- +stmt 0 err 1 -1 45 no such table: x6 +stmt 45 err 1 -1 123 no such table: x6_segdir +==== 7.6 + + INSERT INTO x6(x6) VALUES('merge=2500,2'); + SELECT level, idx, start_block, leaves_end_block, end_block FROM x6_segdir; +---- +stmt 0 err 1 -1 45 no such table: x6 +stmt 45 err 1 -1 123 no such table: x6_segdir +==== 7.7 + + SELECT sum(length(block)) FROM x6_segments +---- +stmt 0 err 1 -1 46 no such table: x6_segments diff --git a/parser/testdata/fts4growth2.metadata.json b/parser/testdata/fts4growth2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4growth2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4growth2.test b/parser/testdata/fts4growth2.test new file mode 100644 index 0000000..cf6ad2b --- /dev/null +++ b/parser/testdata/fts4growth2.test @@ -0,0 +1,20 @@ +==== 1.0 + CREATE TABLE t1(docid, words); +---- +stmt 0 ok +==== 1.1 + + CREATE VIRTUAL TABLE x1 USING fts4; + INSERT INTO x1(x1) VALUES('automerge=2'); +---- +stmt 0 ok +stmt 38 err 1 -1 82 no such table: x1 +==== 2.1 + + DELETE FROM t1 WHERE rowid>16; + DROP TABLE IF EXISTS x1; + CREATE VIRTUAL TABLE x1 USING fts4; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 ok +stmt 60 ok diff --git a/parser/testdata/fts4incr.metadata.json b/parser/testdata/fts4incr.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4incr.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4incr.test b/parser/testdata/fts4incr.test new file mode 100644 index 0000000..e92a3ed --- /dev/null +++ b/parser/testdata/fts4incr.test @@ -0,0 +1,15 @@ +==== 1.1 + + SELECT min(docid), max(docid) FROM t1; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 2.2 + + SELECT count(*) FROM t2 WHERE t2 MATCH '"never zero"' +---- +stmt 0 err 1 -1 57 no such table: t2 +==== 2.3 + + SELECT count(*) FROM t2 WHERE t2 MATCH '"two zero"' +---- +stmt 0 err 1 -1 55 no such table: t2 diff --git a/parser/testdata/fts4intck1.metadata.json b/parser/testdata/fts4intck1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4intck1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4intck1.test b/parser/testdata/fts4intck1.test new file mode 100644 index 0000000..9cab5c4 --- /dev/null +++ b/parser/testdata/fts4intck1.test @@ -0,0 +1,52 @@ +==== 1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT AS (slang(b))); + INSERT INTO t1(b) VALUES('the quick fox jumps over the lazy brown dog'); + SELECT c FROM t1; +---- +stmt 0 err 1 61 72 no such function: slang +stmt 72 err 1 -1 147 no such table: t1 +stmt 147 err 1 -1 167 no such table: t1 +==== 1.1 + + CREATE VIRTUAL TABLE t2 USING fts4(content="t1", c); + INSERT INTO t2(t2) VALUES('rebuild'); + SELECT docid FROM t2 WHERE t2 MATCH 'deh'; +---- +stmt 0 ok +stmt 55 err 1 -1 95 no such table: t2 +stmt 95 err 1 -1 140 no such table: t2 +==== 1.2 + + PRAGMA integrity_check(t2); +---- +stmt 0 err 1 -1 30 no such table: t2 +==== 2.1 + + PRAGMA integrity_check(t2); +---- +stmt 0 err 1 -1 30 no such table: t2 +==== 2.2 + + PRAGMA integrity_check(t2); +---- +stmt 0 err 1 -1 30 no such table: t2 +==== 2.3 + + PRAGMA integrity_check(t2); +---- +stmt 0 err 1 -1 30 no such table: t2 +==== 3.0 + + CREATE VIRTUAL TABLE x1 USING fts4(a, b); + INSERT INTO x1 VALUES('one', 'two'); + INSERT INTO x1 VALUES('three', 'four'); +---- +stmt 0 ok +stmt 44 err 1 -1 83 no such table: x1 +stmt 83 err 1 -1 125 no such table: x1 +==== 3.1 + + PRAGMA integrity_check; +---- +stmt 0 ok diff --git a/parser/testdata/fts4langid.metadata.json b/parser/testdata/fts4langid.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4langid.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4langid.test b/parser/testdata/fts4langid.test new file mode 100644 index 0000000..c956154 --- /dev/null +++ b/parser/testdata/fts4langid.test @@ -0,0 +1,265 @@ +==== 1.1 + + CREATE VIRTUAL TABLE t1 USING fts4(a, b, languageid=lang_id); +---- +stmt 0 ok +==== 1.2 + + SELECT sql FROM sqlite_master WHERE name = 't1_content'; +---- +stmt 0 ok +==== 1.3 +SELECT docid FROM t1 +---- +stmt 0 err 1 -1 21 no such table: t1 +==== 1.4 +SELECT lang_id FROM t1 +---- +stmt 0 err 1 -1 23 no such table: t1 +==== 1.5 +INSERT INTO t1(a, b) VALUES('aaa', 'bbb') +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 1.6 +SELECT lang_id FROM t1 +---- +stmt 0 err 1 -1 23 no such table: t1 +==== 1.7 +INSERT INTO t1(a, b, lang_id) VALUES('aaa', 'bbb', 4) +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 1.8 +SELECT lang_id FROM t1 +---- +stmt 0 err 1 -1 23 no such table: t1 +==== 1.9 +INSERT INTO t1(a, b, lang_id) VALUES('aaa', 'bbb', 'xyz') +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 1.10 +SELECT lang_id FROM t1 +---- +stmt 0 err 1 -1 23 no such table: t1 +==== 1.11 + + CREATE VIRTUAL TABLE t2 USING fts4; + INSERT INTO t2 VALUES('abc'); +---- +stmt 0 ok +stmt 38 err 1 -1 70 no such table: t2 +==== 1.12 + SELECT rowid FROM t2 WHERE content MATCH 'abc' +---- +stmt 0 err 1 -1 48 no such table: t2 +==== 1.13 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts4(languageid=lang_id); + INSERT INTO t1(content) VALUES('a b c'); + INSERT INTO t1(content, lang_id) VALUES('a b c', 1); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 75 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 182 no such table: t1 +==== 1.14 + + SELECT rowid FROM t1 WHERE t1 MATCH 'b'; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== 1.15 + + SELECT rowid FROM t1 WHERE t1 MATCH 'b' AND lang_id = 0; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 1.16 + + SELECT rowid FROM t1 WHERE t1 MATCH 'b' AND lang_id = 1; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 1.17 + + INSERT INTO t1(content, lang_id) VALUES('123', -1); +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 1.18 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts4(languageid=lang_id); + INSERT INTO t1(content, lang_id) VALUES('A', 13); + INSERT INTO t1(content, lang_id) VALUES('B', 13); + INSERT INTO t1(content, lang_id) VALUES('C', 13); + INSERT INTO t1(content, lang_id) VALUES('D', 13); + INSERT INTO t1(content, lang_id) VALUES('E', 13); + INSERT INTO t1(content, lang_id) VALUES('F', 13); + INSERT INTO t1(content, lang_id) VALUES('G', 13); + INSERT INTO t1(content, lang_id) VALUES('H', 13); + INSERT INTO t1(content, lang_id) VALUES('I', 13); + INSERT INTO t1(content, lang_id) VALUES('J', 13); + INSERT INTO t1(content, lang_id) VALUES('K', 13); + INSERT INTO t1(content, lang_id) VALUES('L', 13); + INSERT INTO t1(content, lang_id) VALUES('M', 13); + INSERT INTO t1(content, lang_id) VALUES('N', 13); + INSERT INTO t1(content, lang_id) VALUES('O', 13); + INSERT INTO t1(content, lang_id) VALUES('P', 13); + INSERT INTO t1(content, lang_id) VALUES('Q', 13); + INSERT INTO t1(content, lang_id) VALUES('R', 13); + INSERT INTO t1(content, lang_id) VALUES('S', 13); + SELECT rowid FROM t1 WHERE t1 MATCH 'A'; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 75 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 179 no such table: t1 +stmt 179 err 1 -1 231 no such table: t1 +stmt 231 err 1 -1 283 no such table: t1 +stmt 283 err 1 -1 335 no such table: t1 +stmt 335 err 1 -1 387 no such table: t1 +stmt 387 err 1 -1 439 no such table: t1 +stmt 439 err 1 -1 491 no such table: t1 +stmt 491 err 1 -1 543 no such table: t1 +stmt 543 err 1 -1 595 no such table: t1 +stmt 595 err 1 -1 647 no such table: t1 +stmt 647 err 1 -1 699 no such table: t1 +stmt 699 err 1 -1 751 no such table: t1 +stmt 751 err 1 -1 803 no such table: t1 +stmt 803 err 1 -1 855 no such table: t1 +stmt 855 err 1 -1 907 no such table: t1 +stmt 907 err 1 -1 959 no such table: t1 +stmt 959 err 1 -1 1011 no such table: t1 +stmt 1011 err 1 -1 1063 no such table: t1 +stmt 1063 err 1 -1 1106 no such table: t1 +==== 2.2 + + INSERT INTO t2(t2) VALUES('optimize'); + SELECT count(*) FROM t2_segdir; +---- +stmt 0 err 1 -1 41 no such table: t2 +stmt 41 err 1 -1 75 no such table: t2_segdir +==== 3.1 + + CREATE VIRTUAL TABLE t2 USING fts4(content=t3_data, languageid=l); + INSERT INTO t2(t2) VALUES('rebuild'); +---- +stmt 0 ok +stmt 69 err 1 -1 109 no such table: t2 +==== 3.2.1 + + DROP TABLE t2; + CREATE VIRTUAL TABLE t2 USING fts4(x, y, languageid=l, content=nosuchtable); +---- +stmt 0 err 1 -1 17 no such table: t2 +stmt 17 ok +==== 3.2.2 + + INSERT INTO t2(docid, x, y, l) SELECT rowid, x, y, l FROM t3_data; +---- +stmt 0 err 1 -1 69 no such table: t2 +==== 3.2.3 + + DROP TABLE t3_data; +---- +stmt 0 err 1 -1 22 no such table: t3_data +==== 3.4 + + CREATE TABLE t8c(a, b); + CREATE VIRTUAL TABLE t8 USING fts4(content=t8c, languageid=langid); + INSERT INTO t8(docid, a, b) VALUES(-1, 'one two three', 'x y z'); + SELECT docid FROM t8 WHERE t8 MATCH 'one x' AND langid=0 +---- +stmt 0 ok +stmt 26 ok +stmt 96 err 1 -1 164 no such table: t8 +stmt 164 err 1 -1 224 no such table: t8 +==== 4.1.1 + + SELECT docid FROM t4 WHERE t4 MATCH 'quick'; +---- +stmt 0 err 1 -1 47 no such table: t4 +==== 4.1.2 + + SELECT docid FROM t4 WHERE t4 MATCH 'quick' AND lid=1; +---- +stmt 0 err 1 -1 57 no such table: t4 +==== 4.1.3 + + SELECT docid FROM t4 WHERE t4 MATCH 'Quick' AND lid=1; +---- +stmt 0 err 1 -1 57 no such table: t4 +==== 4.1.5 + + INSERT INTO t4(content, lid) VALUES('hello world', 101) +---- +stmt 0 err 1 -1 59 no such table: t4 +==== 5.1.1 + + SELECT level FROM t5_segdir; +---- +stmt 0 err 1 -1 31 no such table: t5_segdir +==== 5.1.2 +SELECT docid FROM t5 WHERE t5 MATCH 'language' +---- +stmt 0 err 1 -1 47 no such table: t5 +==== 5.3.1 + + CREATE VIRTUAL TABLE t6 USING fts4(languageid=lid); + INSERT INTO t6 VALUES('I belong to language 0!'); +---- +stmt 0 ok +stmt 54 err 1 -1 106 no such table: t6 +==== 5.3.4 + INSERT INTO t6(t6) VALUES('optimize') +---- +stmt 0 err 1 -1 39 no such table: t6 +==== 5.3.5 + SELECT docid FROM t6 WHERE t6 MATCH 'belong' +---- +stmt 0 err 1 -1 46 no such table: t6 +==== fts4langid-generated + + DELETE FROM t6; + SELECT count(*) FROM t6_segdir; + SELECT count(*) FROM t6_segments; +---- +stmt 0 err 1 -1 20 no such table: t6 +stmt 20 err 1 -1 56 no such table: t6_segdir +stmt 56 err 1 -1 94 no such table: t6_segments +==== fts4langid-generated.dup1 + + SELECT count(*) FROM t6_segdir; + SELECT count(*) FROM t6_segments; +---- +stmt 0 err 1 -1 36 no such table: t6_segdir +stmt 36 err 1 -1 74 no such table: t6_segments +==== fts4langid-generated.dup2 + + SELECT count(*) FROM t6_segdir; + SELECT count(*) FROM t6_segments; +---- +stmt 0 err 1 -1 36 no such table: t6_segdir +stmt 36 err 1 -1 74 no such table: t6_segments +==== 6.0 + + CREATE VIRTUAL TABLE vt0 USING fts4(c0, languageid="lid"); + INSERT INTO vt0 VALUES ('a'), ('b'); + BEGIN; + UPDATE vt0 SET lid = 1 WHERE lid=0; +---- +stmt 0 ok +stmt 61 err 1 -1 100 no such table: vt0 +stmt 100 ok +stmt 109 err 1 -1 149 no such table: vt0 +==== 6.1 + + INSERT INTO vt0(vt0) VALUES('integrity-check'); + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 50 no such table: vt0 +stmt 50 ok +==== 6.2 + + COMMIT; + INSERT INTO vt0(vt0) VALUES('integrity-check'); +---- +stmt 0 ok +stmt 10 err 1 -1 60 no such table: vt0 diff --git a/parser/testdata/fts4lastrowid.metadata.json b/parser/testdata/fts4lastrowid.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4lastrowid.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4lastrowid.test b/parser/testdata/fts4lastrowid.test new file mode 100644 index 0000000..6a46934 --- /dev/null +++ b/parser/testdata/fts4lastrowid.test @@ -0,0 +1,73 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts4(str); +---- +stmt 0 ok +==== 1.1 + + INSERT INTO t1 VALUES('one string'); + INSERT INTO t1 VALUES('two string'); + INSERT INTO t1 VALUES('three string'); + SELECT last_insert_rowid(); +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 119 no such table: t1 +stmt 119 ok +==== 1.2 + + BEGIN; + INSERT INTO t1 VALUES('one string'); + INSERT INTO t1 VALUES('two string'); + INSERT INTO t1 VALUES('three string'); + COMMIT; + SELECT last_insert_rowid(); +---- +stmt 0 ok +stmt 9 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 134 no such table: t1 +stmt 134 ok +stmt 144 ok +==== 1.3 + + INSERT INTO t1(rowid, str) VALUES(-22, 'some more text'); + SELECT last_insert_rowid(); +---- +stmt 0 err 1 -1 60 no such table: t1 +stmt 60 ok +==== 1.4 + + BEGIN; + INSERT INTO t1(rowid, str) VALUES(45, 'some more text'); + INSERT INTO t1(rowid, str) VALUES(46, 'some more text'); + INSERT INTO t1(rowid, str) VALUES(222, 'some more text'); + SELECT last_insert_rowid(); + COMMIT; + SELECT last_insert_rowid(); +---- +stmt 0 ok +stmt 9 err 1 -1 70 no such table: t1 +stmt 70 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 193 no such table: t1 +stmt 193 ok +stmt 225 ok +stmt 235 ok +==== 1.5 + + CREATE TABLE x1(x); + INSERT INTO x1 VALUES('john'), ('paul'), ('george'), ('ringo'); + INSERT INTO t1 SELECT x FROM x1; + SELECT last_insert_rowid(); +---- +stmt 0 ok +stmt 22 err 1 -1 88 no such table: x1 +stmt 88 err 1 -1 123 no such table: t1 +stmt 123 ok +==== 1.6 + + INSERT INTO t1(rowid, str) SELECT rowid+10, x FROM x1; + SELECT last_insert_rowid(); +---- +stmt 0 err 1 -1 57 no such table: t1 +stmt 57 ok diff --git a/parser/testdata/fts4merge.metadata.json b/parser/testdata/fts4merge.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4merge.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4merge.test b/parser/testdata/fts4merge.test new file mode 100644 index 0000000..278ee8f --- /dev/null +++ b/parser/testdata/fts4merge.test @@ -0,0 +1,143 @@ +==== 1.1 + + SELECT level, string_agg(idx, ' ') FROM t1_segdir GROUP BY level +---- +stmt 0 err 1 -1 71 no such table: t1_segdir +==== fts4merge-generated + INSERT INTO t1(t1) VALUES('merge=1') +---- +stmt 0 err 1 -1 38 no such table: t1 +==== fts4merge-generated.dup1 + + SELECT docid FROM t1 WHERE t1 MATCH 'zero one two three' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== 1.3 + + SELECT level, group_concat(idx, ' ') FROM t1_segdir GROUP BY level +---- +stmt 0 err 1 -1 73 no such table: t1_segdir +==== fts4merge-generated.dup2 + INSERT INTO t1(t1) VALUES('merge=1,4') +---- +stmt 0 err 1 -1 40 no such table: t1 +==== fts4merge-generated.dup3 + + SELECT docid FROM t1 WHERE t1 MATCH 'zero one two three' +---- +stmt 0 err 1 -1 65 no such table: t1 +==== 1.5 + + SELECT level, string_agg(idx, ' ') FROM t1_segdir GROUP BY level +---- +stmt 0 err 1 -1 71 no such table: t1_segdir +==== 3.2 + + SELECT level, string_agg(idx, ' ') FROM t2_segdir GROUP BY level +---- +stmt 0 err 1 -1 71 no such table: t2_segdir +==== 3.3 + + INSERT INTO t2(t2) VALUES('merge=1000000,2'); + SELECT level, group_concat(idx, ' ') FROM t2_segdir GROUP BY level +---- +stmt 0 err 1 -1 51 no such table: t2 +stmt 51 err 1 -1 123 no such table: t2_segdir +==== fts4merge-generated.dup4 + + INSERT INTO t4(t4) VALUES('merge=1,16'); + SELECT level, group_concat(idx, ' ') FROM t4_segdir GROUP BY level; +---- +stmt 0 err 1 -1 47 no such table: t4 +stmt 47 err 1 -1 121 no such table: t4_segdir +==== 4.4.1 + + SELECT quote(value) FROM t4_stat WHERE rowid=1 +---- +stmt 0 err 1 -1 52 no such table: t4_stat +==== 4.4.2 + + DELETE FROM t4_stat WHERE rowid=1; + INSERT INTO t4(t4) VALUES('merge=1,12'); + SELECT level, string_agg(idx, ' ') FROM t4_segdir GROUP BY level; +---- +stmt 0 err 1 -1 39 no such table: t4_stat +stmt 39 err 1 -1 84 no such table: t4 +stmt 84 err 1 -1 154 no such table: t4_segdir +==== 5.2 + + SELECT level, group_concat(idx, ' ') FROM t1_segdir GROUP BY level; +---- +stmt 0 err 1 -1 72 no such table: t1_segdir +==== 5.3 + + INSERT INTO t1(t1) VALUES('merge=1,5'); + INSERT INTO t1(t1) VALUES('merge=1,5'); + SELECT level, string_agg(idx, ' ') FROM t1_segdir GROUP BY level; +---- +stmt 0 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 158 no such table: t1_segdir +==== 5.4 +SELECT quote(value) from t1_stat WHERE rowid=1 +---- +stmt 0 err 1 -1 47 no such table: t1_stat +==== 5.6 +SELECT quote(value) from t1_stat WHERE rowid=1 +---- +stmt 0 err 1 -1 47 no such table: t1_stat +==== 5.7 + + SELECT level, group_concat(idx, ' ') FROM t1_segdir GROUP BY level; + SELECT quote(value) from t1_stat WHERE rowid=1; +---- +stmt 0 err 1 -1 72 no such table: t1_segdir +stmt 72 err 1 -1 124 no such table: t1_stat +==== 5.8 + + INSERT INTO t1(t1) VALUES('merge=1,6'); + INSERT INTO t1(t1) VALUES('merge=1,6'); + SELECT level, group_concat(idx, ' ') FROM t1_segdir GROUP BY level; + SELECT quote(value) from t1_stat WHERE rowid=1; +---- +stmt 0 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 160 no such table: t1_segdir +stmt 160 err 1 -1 212 no such table: t1_stat +==== 5.10 + + SELECT level, group_concat(idx, ' ') FROM t1_segdir GROUP BY level; + SELECT quote(value) from t1_stat WHERE rowid=1; +---- +stmt 0 err 1 -1 72 no such table: t1_segdir +stmt 72 err 1 -1 124 no such table: t1_stat +==== 5.11 + + INSERT INTO t1(t1) VALUES('merge=1,6'); + SELECT level, string_agg(idx, ' ') FROM t1_segdir GROUP BY level; + SELECT quote(value) from t1_stat WHERE rowid=1; +---- +stmt 0 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 114 no such table: t1_segdir +stmt 114 err 1 -1 166 no such table: t1_stat +==== 7.1 + + SELECT level, group_concat(idx, ' ') FROM t1_segdir GROUP BY level +---- +stmt 0 err 1 -1 72 no such table: t1_segdir +==== 8.0 + + CREATE VIRTUAL TABLE t1 USING fts4(a, order=DESC); + INSERT INTO t1(a) VALUES (0); + INSERT INTO t1(a) VALUES (0); + UPDATE t1 SET a = NULL; +---- +stmt 0 ok +stmt 53 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 117 no such table: t1 +stmt 117 err 1 -1 143 no such table: t1 +==== 8.1 + + INSERT INTO t1(t1) VALUES('merge=1,4'); +---- +stmt 0 err 1 -1 42 no such table: t1 diff --git a/parser/testdata/fts4merge4.metadata.json b/parser/testdata/fts4merge4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4merge4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4merge4.test b/parser/testdata/fts4merge4.test new file mode 100644 index 0000000..7836fa8 --- /dev/null +++ b/parser/testdata/fts4merge4.test @@ -0,0 +1,24 @@ +==== 1.1 + CREATE VIRTUAL TABLE t1 USING fts4 +---- +stmt 0 ok +==== 2.0 + CREATE VIRTUAL TABLE t1 USING fts4 +---- +stmt 0 ok +==== 2.2 + SELECT count(*) FROM t1_segdir; +---- +stmt 0 err 1 -1 32 no such table: t1_segdir +==== 2.3 + INSERT INTO t1(t1) VALUES('optimize') +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 2.4 + SELECT count(*) FROM t1_segdir; +---- +stmt 0 err 1 -1 32 no such table: t1_segdir +==== 2.1 + CREATE VIRTUAL TABLE t2 USING fts4; +---- +stmt 0 ok diff --git a/parser/testdata/fts4merge5.metadata.json b/parser/testdata/fts4merge5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4merge5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4merge5.test b/parser/testdata/fts4merge5.test new file mode 100644 index 0000000..1283f44 --- /dev/null +++ b/parser/testdata/fts4merge5.test @@ -0,0 +1,34 @@ +==== 1.1 + + CREATE TABLE t1(docid, words); +---- +stmt 0 ok +==== 1.2 + + CREATE VIRTUAL TABLE x1 USING fts3; + INSERT INTO x1(x1) VALUES('nodesize=64'); + INSERT INTO x1(x1) VALUES('maxpending=64'); +---- +stmt 0 ok +stmt 38 err 1 -1 83 no such table: x1 +stmt 83 err 1 -1 129 no such table: x1 +==== 1.3 + + INSERT INTO x1(docid, content) SELECT * FROM t1; +---- +stmt 0 err 1 -1 51 no such table: x1 +==== fts4merge5-generated + + INSERT INTO x1(x1) VALUES('merge=1,2'); +---- +stmt 0 err 1 -1 44 no such table: x1 +==== fts4merge5-generated.dup1 + + INSERT INTO x1(x1) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 50 no such table: x1 +==== 1.5 + + INSERT INTO x1(x1) VALUES('maxpendinAB64'); +---- +stmt 0 err 1 -1 46 no such table: x1 diff --git a/parser/testdata/fts4min.metadata.json b/parser/testdata/fts4min.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4min.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4min.test b/parser/testdata/fts4min.test new file mode 100644 index 0000000..d63cb35 --- /dev/null +++ b/parser/testdata/fts4min.test @@ -0,0 +1,28 @@ +==== 0.0 + + CREATE TABLE t1(a NOT NULL, b); + CREATE INDEX i1 ON t1(a); +---- +stmt 0 ok +stmt 34 err 1 -1 62 no such table: main.t1 +==== 1.0 + + CREATE VIRTUAL TABLE ft USING fts3(c); + INSERT INTO ft(docid, c) VALUES(22, 'hello world'); + INSERT INTO ft(docid, c) VALUES(44, 'hello world'); + INSERT INTO ft(docid, c) VALUES(11, 'hello world'); +---- +stmt 0 ok +stmt 41 err 1 -1 95 no such table: ft +stmt 95 err 1 -1 149 no such table: ft +stmt 149 err 1 -1 203 no such table: ft +==== 1.2.1 + + SELECT max(rowid) FROM ft +---- +stmt 0 err 1 -1 29 no such table: ft +==== 1.2.2 + + SELECT min(rowid) FROM ft +---- +stmt 0 err 1 -1 29 no such table: ft diff --git a/parser/testdata/fts4noti.metadata.json b/parser/testdata/fts4noti.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4noti.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4noti.test b/parser/testdata/fts4noti.test new file mode 100644 index 0000000..144f3d1 --- /dev/null +++ b/parser/testdata/fts4noti.test @@ -0,0 +1,255 @@ +==== 1.0 + + CREATE TABLE cc(a, b, c); +---- +stmt 0 ok +==== 1.x + SELECT name FROM sqlite_master +---- +stmt 0 ok +==== fts4noti-generated + + INSERT INTO t1(docid,a,b,c) VALUES(1, 'one two', 'three four', 'five six'); + INSERT INTO t1(docid,a,b,c) VALUES(2, 'three four', 'five six', 'one two'); +---- +stmt 0 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 160 no such table: t1 +==== fts4noti-generated.dup1 + SELECT docid FROM t1 WHERE t1 MATCH 'one' +---- +stmt 0 err 1 -1 43 no such table: t1 +==== fts4noti-generated.dup2 + SELECT docid FROM t1 WHERE t1 MATCH 'three' +---- +stmt 0 err 1 -1 45 no such table: t1 +==== fts4noti-generated.dup3 + SELECT docid FROM t1 WHERE t1 MATCH 'five' +---- +stmt 0 err 1 -1 44 no such table: t1 +==== fts4noti-generated.dup4 + INSERT INTO t1(t1) VALUES('optimize') +---- +stmt 0 err 1 -1 39 no such table: t1 +==== fts4noti-generated.dup5 + SELECT docid FROM t1 WHERE t1 MATCH 'one' +---- +stmt 0 err 1 -1 43 no such table: t1 +==== fts4noti-generated.dup6 + SELECT docid FROM t1 WHERE t1 MATCH 'three' +---- +stmt 0 err 1 -1 45 no such table: t1 +==== fts4noti-generated.dup7 + SELECT docid FROM t1 WHERE t1 MATCH 'five' +---- +stmt 0 err 1 -1 44 no such table: t1 +==== fts4noti-generated.dup8 + INSERT INTO t1(t1) VALUES('rebuild') +---- +stmt 0 err 1 -1 38 no such table: t1 +==== fts4noti-generated.dup9 + SELECT docid FROM t1 WHERE t1 MATCH 'one' +---- +stmt 0 err 1 -1 43 no such table: t1 +==== fts4noti-generated.dup10 + SELECT docid FROM t1 WHERE t1 MATCH 'three' +---- +stmt 0 err 1 -1 45 no such table: t1 +==== fts4noti-generated.dup11 + SELECT docid FROM t1 WHERE t1 MATCH 'five' +---- +stmt 0 err 1 -1 44 no such table: t1 +==== fts4noti-generated.dup12 + + SELECT a,b,c FROM t1 WHERE docid=1 +---- +stmt 0 err 1 -1 43 no such table: t1 +==== fts4noti-generated.dup13 + + SELECT a,b,c FROM t1 WHERE docid=2 +---- +stmt 0 err 1 -1 43 no such table: t1 +==== 2.x + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== 3.1 + + CREATE VIRTUAL TABLE t2 USING fts4(x, y, notindexed=x); +---- +stmt 0 ok +==== 3.3 + SELECT x FROM t2 WHERE t2 MATCH '2' +---- +stmt 0 err 1 -1 37 no such table: t2 +==== 3.4 + SELECT x FROM t2 WHERE t2 MATCH '1' +---- +stmt 0 err 1 -1 37 no such table: t2 +==== 3.5 + SELECT x FROM t2 WHERE t2 MATCH 'x' +---- +stmt 0 err 1 -1 37 no such table: t2 +==== 3.6 + SELECT x FROM t2 WHERE t2 MATCH 'x 1' +---- +stmt 0 err 1 -1 39 no such table: t2 +==== 3.x + DROP TABLE t2 +---- +stmt 0 err 1 -1 15 no such table: t2 +==== 4.1 + + CREATE VIRTUAL TABLE t2 USING fts4(poi, addr, notindexed=poi); + INSERT INTO t2 VALUES(114, 'x x x'); + INSERT INTO t2 VALUES(X'1234', 'y y y'); + INSERT INTO t2 VALUES(NULL, 'z z z'); + INSERT INTO t2 VALUES(113.2, 'w w w'); + INSERT INTO t2 VALUES('poi', 'v v v'); +---- +stmt 0 ok +stmt 65 err 1 -1 104 no such table: t2 +stmt 104 err 1 -1 147 no such table: t2 +stmt 147 err 1 -1 187 no such table: t2 +stmt 187 err 1 -1 228 no such table: t2 +stmt 228 err 1 -1 269 no such table: t2 +==== 4.2 + SELECT typeof(poi) FROM t2 WHERE t2 MATCH 'x' +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 4.3 + SELECT typeof(poi) FROM t2 WHERE t2 MATCH 'y' +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 4.4 + SELECT typeof(poi) FROM t2 WHERE t2 MATCH 'z' +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 4.5 + SELECT typeof(poi) FROM t2 WHERE t2 MATCH 'w' +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 4.6 + SELECT typeof(poi) FROM t2 WHERE t2 MATCH 'v' +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 4.x + DROP TABLE t2 +---- +stmt 0 err 1 -1 15 no such table: t2 +==== 5.1 + + CREATE VIRTUAL TABLE t2 USING fts4( + notindexed="three", one, two, three, notindexed="one", + ); + INSERT INTO t2 VALUES('a', 'b', 'c'); + INSERT INTO t2 VALUES('c', 'a', 'b'); + INSERT INTO t2 VALUES('b', 'c', 'a'); +---- +stmt 0 ok +stmt 104 err 1 -1 144 no such table: t2 +stmt 144 err 1 -1 184 no such table: t2 +stmt 184 err 1 -1 224 no such table: t2 +==== 5.2 + SELECT docid FROM t2 WHERE t2 MATCH 'a' +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 5.3 + SELECT docid FROM t2 WHERE t2 MATCH 'b' +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 5.4 + SELECT docid FROM t2 WHERE t2 MATCH 'c' +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 5.x + DROP TABLE t2 +---- +stmt 0 err 1 -1 15 no such table: t2 +==== 6.1.1 + + CREATE VIRTUAL TABLE t1 USING fts4( + poiCategory, poiCategoryId, notindexed=poiCategoryId + ); + INSERT INTO t1(poiCategory, poiCategoryId) values ('Restaurant', 6021); +---- +stmt 0 ok +stmt 100 err 1 -1 174 no such table: t1 +==== 6.1.2 + + SELECT * FROM t1 WHERE t1 MATCH 'restaurant'; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 6.1.3 + + SELECT * FROM t1 WHERE t1 MATCH 're*'; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 6.1.4 + + SELECT * FROM t1 WHERE t1 MATCH '6021'; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 6.1.5 + + SELECT * FROM t1 WHERE t1 MATCH '60*'; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 6.2.1 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts4( + poiCategory, poiCategoryId, notindexed=poiCategory + ); + INSERT INTO t1(poiCategory, poiCategoryId) values ('Restaurant', 6021); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 115 err 1 -1 189 no such table: t1 +==== 6.2.2 + + SELECT * FROM t1 WHERE t1 MATCH 'restaurant'; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 6.2.3 + + SELECT * FROM t1 WHERE t1 MATCH 're*'; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 6.2.4 + + SELECT * FROM t1 WHERE t1 MATCH '6021'; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 6.2.5 + + SELECT * FROM t1 WHERE t1 MATCH '60*'; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 6.3.1 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts4(abc, ab, a, notindexed=abc); + CREATE VIRTUAL TABLE t2 USING fts4(a, ab, abc, notindexed=abc); + + INSERT INTO t1 VALUES('no', 'yes', 'yep'); + INSERT INTO t2 VALUES('yep', 'yes', 'no'); + + SELECT count(*) FROM t1 WHERE t1 MATCH 'no'; + SELECT count(*) FROM t1 WHERE t1 MATCH 'yes'; + SELECT count(*) FROM t1 WHERE t1 MATCH 'yep'; + + SELECT count(*) FROM t2 WHERE t2 MATCH 'no'; + SELECT count(*) FROM t2 WHERE t2 MATCH 'yes'; + SELECT count(*) FROM t2 WHERE t2 MATCH 'yep'; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 83 ok +stmt 149 err 1 -1 195 no such table: t1 +stmt 195 err 1 -1 240 no such table: t2 +stmt 240 err 1 -1 288 no such table: t1 +stmt 288 err 1 -1 336 no such table: t1 +stmt 336 err 1 -1 384 no such table: t1 +stmt 384 err 1 -1 432 no such table: t2 +stmt 432 err 1 -1 480 no such table: t2 +stmt 480 err 1 -1 528 no such table: t2 diff --git a/parser/testdata/fts4onepass.metadata.json b/parser/testdata/fts4onepass.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4onepass.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4onepass.test b/parser/testdata/fts4onepass.test new file mode 100644 index 0000000..e597018 --- /dev/null +++ b/parser/testdata/fts4onepass.test @@ -0,0 +1,74 @@ +==== 1.0 + + CREATE VIRTUAL TABLE ft USING fts3; + INSERT INTO ft(rowid, content) VALUES(1, '1 2 3'); + INSERT INTO ft(rowid, content) VALUES(2, '4 5 6'); + INSERT INTO ft(rowid, content) VALUES(3, '7 8 9'); +---- +stmt 0 ok +stmt 38 err 1 -1 91 no such table: ft +stmt 91 err 1 -1 144 no such table: ft +stmt 144 err 1 -1 197 no such table: ft +==== 2.0 + + CREATE TABLE t1(x); + + CREATE TRIGGER t1_ai AFTER INSERT ON t1 BEGIN + DELETE FROM ft WHERE rowid=new.x; + END; + + CREATE TRIGGER t1_ad AFTER DELETE ON t1 BEGIN + UPDATE ft SET content = 'a b c' WHERE rowid=old.x; + END; + + CREATE TRIGGER t1_bu BEFORE UPDATE ON t1 BEGIN + DELETE FROM ft WHERE rowid=old.x; + END; +---- +stmt 0 ok +stmt 22 err 1 -1 71 no such table: main.t1 +stmt 116 err 1 -1 165 no such table: main.t1 +stmt 227 err 1 -1 277 no such table: main.t1 +==== fts4onepass-generated + + DROP TABLE IF EXISTS ft2; + CREATE VIRTUAL TABLE ft2 USING fts4; + INSERT INTO ft2(rowid, content) VALUES(1, 'a b c'); + INSERT INTO ft2(rowid, content) VALUES(2, 'a b d'); + INSERT INTO ft2(rowid, content) VALUES(3, 'a b e'); +---- +stmt 0 ok +stmt 30 ok +stmt 71 err 1 -1 127 no such table: ft2 +stmt 127 err 1 -1 183 no such table: ft2 +stmt 183 err 1 -1 239 no such table: ft2 +==== fts4onepass-generated.dup1 + SELECT rowid, content FROM ft2 +---- +stmt 0 err 1 -1 32 no such table: ft2 +==== fts4onepass-generated.dup2 + + INSERT INTO ft2(ft2) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 55 no such table: ft2 +==== 4.0 + + CREATE VIRTUAL TABLE zt USING fts4(a, b); + INSERT INTO zt(rowid, a, b) VALUES(1, 'unus duo', NULL); + INSERT INTO zt(rowid, a, b) VALUES(2, NULL, NULL); + + BEGIN; + UPDATE zt SET b='septum' WHERE rowid = 1; + UPDATE zt SET b='octo' WHERE rowid = 1; + COMMIT; + + SELECT count(*) FROM zt_segdir; +---- +stmt 0 ok +stmt 44 err 1 -1 103 no such table: zt +stmt 103 err 1 -1 156 no such table: zt +stmt 156 ok +stmt 166 err 1 -1 212 no such table: zt +stmt 212 err 1 -1 256 no such table: zt +stmt 256 ok +stmt 266 err 1 -1 301 no such table: zt_segdir diff --git a/parser/testdata/fts4opt.metadata.json b/parser/testdata/fts4opt.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4opt.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4opt.test b/parser/testdata/fts4opt.test new file mode 100644 index 0000000..f82ed0b --- /dev/null +++ b/parser/testdata/fts4opt.test @@ -0,0 +1,108 @@ +==== 1.0 + CREATE TABLE t1(docid, words) +---- +stmt 0 ok +==== 1.2 + + SELECT level, count(*) FROM t2_segdir GROUP BY level +---- +stmt 0 err 1 -1 56 no such table: t2_segdir +==== 1.3 + INSERT INTO t2(t2) VALUES('integrity-check') +---- +stmt 0 err 1 -1 46 no such table: t2 +==== 1.4 + INSERT INTO t2(t2) VALUES('integrity-check') +---- +stmt 0 err 1 -1 46 no such table: t2 +==== 1.5 + + SELECT level, count(*) FROM t2_segdir GROUP BY level +---- +stmt 0 err 1 -1 56 no such table: t2_segdir +==== 1.7 + INSERT INTO t2(t2) VALUES('integrity-check') +---- +stmt 0 err 1 -1 46 no such table: t2 +==== 1.8 + + INSERT INTO t2(words) SELECT words FROM t1; + SELECT level, count(*) FROM t2_segdir GROUP BY level; +---- +stmt 0 err 1 -1 46 no such table: t2 +stmt 46 err 1 -1 102 no such table: t2_segdir +==== 2.0 + + DELETE FROM t2; +---- +stmt 0 err 1 -1 18 no such table: t2 +==== 2.2 + + SELECT level, count(*) FROM t2_segdir GROUP BY level +---- +stmt 0 err 1 -1 56 no such table: t2_segdir +==== 2.3 + INSERT INTO t2(t2) VALUES('integrity-check') +---- +stmt 0 err 1 -1 46 no such table: t2 +==== 2.4 + INSERT INTO t2(t2) VALUES('integrity-check') +---- +stmt 0 err 1 -1 46 no such table: t2 +==== 2.5 + + SELECT level, count(*) FROM t2_segdir GROUP BY level +---- +stmt 0 err 1 -1 56 no such table: t2_segdir +==== 2.7 + INSERT INTO t2(t2) VALUES('integrity-check') +---- +stmt 0 err 1 -1 46 no such table: t2 +==== 2.8 + + INSERT INTO t2(words) SELECT words FROM t1; + SELECT level, count(*) FROM t2_segdir GROUP BY level; +---- +stmt 0 err 1 -1 46 no such table: t2 +stmt 46 err 1 -1 102 no such table: t2_segdir +==== 3.1 + + CREATE VIRTUAL TABLE fts USING fts4 (t); + INSERT INTO fts (fts) VALUES ('optimize'); +---- +stmt 0 ok +stmt 43 err 1 -1 88 no such table: fts +==== 3.2 + + INSERT INTO fts(fts) VALUES('integrity-check'); + SELECT count(*) FROM fts_segdir; +---- +stmt 0 err 1 -1 50 no such table: fts +stmt 50 err 1 -1 85 no such table: fts_segdir +==== 3.3 + + BEGIN; + INSERT INTO fts (rowid, t) VALUES (2, 'test'); + INSERT INTO fts (fts) VALUES ('optimize'); + COMMIT; + SELECT level, idx FROM fts_segdir; +---- +stmt 0 ok +stmt 9 err 1 -1 58 no such table: fts +stmt 58 err 1 -1 103 no such table: fts +stmt 103 ok +stmt 113 err 1 -1 150 no such table: fts_segdir +==== 3.4 + + INSERT INTO fts(fts) VALUES('integrity-check'); + SELECT rowid FROM fts WHERE fts MATCH 'test'; +---- +stmt 0 err 1 -1 50 no such table: fts +stmt 50 err 1 -1 98 no such table: fts +==== 3.5 + + INSERT INTO fts (fts) VALUES ('optimize'); + INSERT INTO fts(fts) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 45 no such table: fts +stmt 45 err 1 -1 95 no such table: fts diff --git a/parser/testdata/fts4record.metadata.json b/parser/testdata/fts4record.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4record.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4record.test b/parser/testdata/fts4record.test new file mode 100644 index 0000000..bfdd459 --- /dev/null +++ b/parser/testdata/fts4record.test @@ -0,0 +1,94 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts4(x); + INSERT INTO t1 VALUES('terma terma terma termb'); +---- +stmt 0 ok +stmt 41 err 1 -1 93 no such table: t1 +==== 1.1 + + SELECT quote(root) FROM t1_segdir +---- +stmt 0 err 1 -1 37 no such table: t1_segdir +==== 1.2 + + select quote( + record(0, 5, 'terma', 5, 1, 2, 3, 3, 0, + 4, 1, 'b' , 3, 1, 5, 0 + ) ); +---- +stmt 0 err 1 22 112 no such function: record +==== 1.3.1 + + UPDATE t1_segdir SET root = + record(0, 5, 'terma', 5, 1, 2, 3, 3, 0, + 4, 1, 'b' , 3, 1, 5, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 + ); +---- +stmt 0 err 1 -1 346 no such table: t1_segdir +==== 1.3.2 + + SELECT snippet(t1) FROM t1 WHERE t1 MATCH 'term*' +---- +stmt 0 err 1 -1 53 no such table: t1 +==== 1.4.1 + + UPDATE t1_segdir SET root = + record(0, 5, 'terma', 5, 1, 2, 3, 3, 0, + 4, 1, 'b' , 4, 1, 5, + 256, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 + ); +---- +stmt 0 err 1 -1 348 no such table: t1_segdir +==== 1.4.2 + + SELECT snippet(t1) FROM t1 WHERE t1 MATCH 'term*' +---- +stmt 0 err 1 -1 53 no such table: t1 +==== 1.4.3 + + SELECT quote(root) FROM t1_segdir +---- +stmt 0 err 1 -1 37 no such table: t1_segdir +==== 1.5.1 + + UPDATE t1_segdir SET root = + record(0, 5, 'terma', 5, 1, 2, 3, 3, 0, + 4, 1, 'b' , 4, 1, 5, + 256, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 + ); +---- +stmt 0 err 1 -1 348 no such table: t1_segdir +==== 1.4.2.dup1 + + SELECT snippet(t1) FROM t1 WHERE t1 MATCH 'term*' +---- +stmt 0 err 1 -1 53 no such table: t1 +==== 1.4.3.dup1 + + SELECT quote(root) FROM t1_segdir +---- +stmt 0 err 1 -1 37 no such table: t1_segdir +==== 1.5.1.dup1 + + UPDATE t1_segdir SET root = + X'00057465726D61050102030300040162040105FF00010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100' +---- +stmt 0 err 1 -1 194 no such table: t1_segdir +==== 1.5.2 + + SELECT snippet(t1) FROM t1 WHERE t1 MATCH 'term*' +---- +stmt 0 err 1 -1 53 no such table: t1 +==== 1.5.3 + + INSERT INTO t1(t1) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 48 no such table: t1 diff --git a/parser/testdata/fts4rename.metadata.json b/parser/testdata/fts4rename.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4rename.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4rename.test b/parser/testdata/fts4rename.test new file mode 100644 index 0000000..f4d7f55 --- /dev/null +++ b/parser/testdata/fts4rename.test @@ -0,0 +1,26 @@ +==== 1.0 + + CREATE VIRTUAL TABLE temp.t1 USING fts3(a); + BEGIN; + CREATE TABLE t2(x); +---- +stmt 0 ok +stmt 46 ok +stmt 55 ok +==== 1.1 + + ALTER TABLE t1_content RENAME c0a TO docid; +---- +stmt 0 err 1 -1 46 no such table: t1_content +==== 1.2 + + UPDATE t1 SET Col0 = 1 ; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== 1.3 + + ROLLBACK; + DROP TABLE t1; +---- +stmt 0 ok +stmt 12 err 1 -1 29 no such table: t1 diff --git a/parser/testdata/fts4umlaut.metadata.json b/parser/testdata/fts4umlaut.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4umlaut.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4umlaut.test b/parser/testdata/fts4umlaut.test new file mode 100644 index 0000000..b141c1f --- /dev/null +++ b/parser/testdata/fts4umlaut.test @@ -0,0 +1,10 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts4(x, tokenize=unicode61); + CREATE VIRTUAL TABLE t2 USING fts4( + x, + tokenize=unicode61 "remove_diacritics=2" + ); +---- +stmt 0 ok +stmt 61 ok diff --git a/parser/testdata/fts4unicode.metadata.json b/parser/testdata/fts4unicode.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4unicode.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4unicode.test b/parser/testdata/fts4unicode.test new file mode 100644 index 0000000..600c784 --- /dev/null +++ b/parser/testdata/fts4unicode.test @@ -0,0 +1,179 @@ +==== 3.1 + + CREATE VIRTUAL TABLE t1 USING fts4(tokenize=unicode61, x, y); + INSERT INTO t1 VALUES(NULL, 'a b c'); +---- +stmt 0 ok +stmt 64 err 1 -1 104 no such table: t1 +==== 3.3 + + BEGIN; + DELETE FROM t1; + INSERT INTO t1 VALUES('b b b b b b b b b b b', 'b b b b b b b b b b b b b'); + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 VALUES('a b c', NULL); + INSERT INTO t1 VALUES('a x c', NULL); + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 27 no such table: t1 +stmt 27 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 176 no such table: t1 +stmt 176 err 1 -1 211 no such table: t1 +stmt 211 err 1 -1 246 no such table: t1 +stmt 246 err 1 -1 281 no such table: t1 +stmt 281 err 1 -1 316 no such table: t1 +stmt 316 err 1 -1 351 no such table: t1 +stmt 351 err 1 -1 386 no such table: t1 +stmt 386 err 1 -1 421 no such table: t1 +stmt 421 err 1 -1 456 no such table: t1 +stmt 456 err 1 -1 491 no such table: t1 +stmt 491 err 1 -1 526 no such table: t1 +stmt 526 err 1 -1 561 no such table: t1 +stmt 561 err 1 -1 596 no such table: t1 +stmt 596 err 1 -1 631 no such table: t1 +stmt 631 err 1 -1 666 no such table: t1 +stmt 666 err 1 -1 706 no such table: t1 +stmt 706 err 1 -1 746 no such table: t1 +stmt 746 ok +==== 3.4 + + SELECT * FROM t1 WHERE t1 MATCH 'a b'; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 8.1.2 + + SELECT rowid FROM t3 WHERE t3 MATCH 'o'; +---- +stmt 0 err 1 -1 43 no such table: t3 +==== 8.1.3 + + SELECT rowid FROM t3 WHERE t3 MATCH 'a'; +---- +stmt 0 err 1 -1 43 no such table: t3 +==== 8.2.1 + + CREATE VIRTUAL TABLE t4 USING fts4(tokenize=unicode61 "remove_diacritics=0"); + INSERT INTO t4 SELECT * FROM t3; +---- +stmt 0 ok +stmt 80 err 1 -1 115 no such table: t4 +==== 8.2.2 + + SELECT rowid FROM t4 WHERE t4 MATCH 'o'; +---- +stmt 0 err 1 -1 43 no such table: t4 +==== 8.2.3 + + SELECT rowid FROM t4 WHERE t4 MATCH 'a'; +---- +stmt 0 err 1 -1 43 no such table: t4 +==== fts4unicode-generated + + DROP TABLE IF EXISTS t5; + DROP TABLE IF EXISTS t5aux; + DROP TABLE IF EXISTS t6; + DROP TABLE IF EXISTS t6aux; + DROP TABLE IF EXISTS t7; + DROP TABLE IF EXISTS t7aux; +---- +stmt 0 ok +stmt 30 ok +stmt 62 ok +stmt 91 ok +stmt 123 ok +stmt 152 ok +==== fts4unicode-generated.dup1 + + CREATE VIRTUAL TABLE t5aux USING fts4aux(t5); + INSERT INTO t5 VALUES('one two three/four.five.six'); + SELECT * FROM t5aux; +---- +stmt 0 ok +stmt 50 err 1 -1 108 no such table: t5 +stmt 108 err 1 -1 133 no such table: t5aux +==== 10.1 + + DROP TABLE IF EXISTS t1; + CREATE VIRTUAL TABLE t1 USING fts4(tokenize=unicode61 + "tokenchars=xyz" "tokenchars=.=" "separators=.=" "separators=xy" + "separators=a" "separators=a" "tokenchars=a" "tokenchars=a" + ); + + INSERT INTO t1 VALUES('oneatwoxthreeyfour'); + INSERT INTO t1 VALUES('a.single=word'); + CREATE VIRTUAL TABLE t1aux USING fts4aux(t1); + SELECT * FROM t1aux; +---- +stmt 0 ok +stmt 27 ok +stmt 221 err 1 -1 269 no such table: t1 +stmt 269 err 1 -1 311 no such table: t1 +stmt 311 ok +stmt 359 err 1 -1 382 no such table: t1aux +==== 10.2 + + DROP TABLE IF EXISTS t2; + CREATE VIRTUAL TABLE t2 USING fts4(tokenize=unicode61 "separators=aB"); + INSERT INTO t2 VALUES('oneatwoBthree'); + INSERT INTO t2 VALUES('onebtwoAthree'); + CREATE VIRTUAL TABLE t2aux USING fts4aux(t2); + SELECT * FROM t2aux; +---- +stmt 0 ok +stmt 27 ok +stmt 101 err 1 -1 143 no such table: t2 +stmt 143 err 1 -1 185 no such table: t2 +stmt 185 ok +stmt 233 err 1 -1 256 no such table: t2aux +==== 11.1 + + CREATE VIRTUAL TABLE ft1 USING fts3tokenize( + "unicode61", "tokenchars=@.", "separators=1234567890" + ); + SELECT token FROM ft1 WHERE input = 'berlin@street123sydney.road'; +---- +stmt 0 ok +stmt 110 err 1 -1 179 no such table: ft1 +==== 12.0 + + CREATE VIRTUAL TABLE t12 USING fts4(tokenize=unicode61); + INSERT INTO t12 VALUES('abc' || char(0) || 'def'); + SELECT hex(CAST(content AS blob)) FROM t12; +---- +stmt 0 ok +stmt 59 err 1 -1 112 no such table: t12 +stmt 112 err 1 -1 158 no such table: t12 +==== 12.1 + + INSERT INTO t12(t12) VALUES('integrity-check'); +---- +stmt 0 err 1 -1 50 no such table: t12 +==== 12.2 + + CREATE VIRTUAL TABLE t12aux USING fts4aux(t12); + SELECT * FROM t12aux; +---- +stmt 0 ok +stmt 51 err 1 -1 75 no such table: t12aux +==== 12.3 + + SELECT hex(CAST(content AS blob)) FROM t12 WHERE t12 MATCH 'abc' +---- +stmt 0 err 1 -1 69 no such table: t12 diff --git a/parser/testdata/fts4upfrom.metadata.json b/parser/testdata/fts4upfrom.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fts4upfrom.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fts4upfrom.test b/parser/testdata/fts4upfrom.test new file mode 100644 index 0000000..a58e9aa --- /dev/null +++ b/parser/testdata/fts4upfrom.test @@ -0,0 +1,51 @@ +==== fts4upfrom-generated + + INSERT INTO ft(a, b, c) VALUES('a', NULL, 'apple'); + INSERT INTO ft(a, b, c) VALUES('b', NULL, 'banana'); + INSERT INTO ft(a, b, c) VALUES('c', NULL, 'cherry'); + INSERT INTO ft(a, b, c) VALUES('d', NULL, 'damson plum'); +---- +stmt 0 err 1 -1 56 no such table: ft +stmt 56 err 1 -1 113 no such table: ft +stmt 113 err 1 -1 170 no such table: ft +stmt 170 err 1 -1 232 no such table: ft +==== fts4upfrom-generated.dup1 + + SELECT a, b, c FROM ft ORDER BY rowid; +---- +stmt 0 err 1 -1 43 no such table: ft +==== fts4upfrom-generated.dup2 + + UPDATE ft SET b=o.c FROM ft AS o WHERE (ft.a == char(unicode(o.a)+1)) +---- +stmt 0 err 1 -1 75 no such table: ft +==== fts4upfrom-generated.dup3 + + SELECT a, b, c FROM ft ORDER BY rowid; +---- +stmt 0 err 1 -1 43 no such table: ft +==== fts4upfrom-generated.dup4 + + UPDATE ft SET c=v FROM changes WHERE a=k; +---- +stmt 0 err 1 -1 46 no such table: ft +==== fts4upfrom-generated.dup5 + + create view changes(k, v) AS + VALUES( 'd', 'dewberry' ) UNION ALL + VALUES( 'c', 'clementine' ) UNION ALL + VALUES( 'b', 'blueberry' ) UNION ALL + VALUES( 'a', 'apricot' ) + ; +---- +stmt 0 ok +==== fts4upfrom-generated.dup6 + + UPDATE ft SET c=v FROM changes WHERE a=k; +---- +stmt 0 err 1 -1 46 no such table: ft +==== fts4upfrom-generated.dup7 + + SELECT rowid, a, b, c FROM ft ORDER BY rowid; +---- +stmt 0 err 1 -1 50 no such table: ft diff --git a/parser/testdata/func.metadata.json b/parser/testdata/func.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/func.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/func.test b/parser/testdata/func.test new file mode 100644 index 0000000..7d3d5a6 --- /dev/null +++ b/parser/testdata/func.test @@ -0,0 +1,1160 @@ +==== func-0.1 + + CREATE TABLE t2(a); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(NULL); + INSERT INTO t2 VALUES(345); + INSERT INTO t2 VALUES(NULL); + INSERT INTO t2 VALUES(67890); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t2 +stmt 56 err 1 -1 90 no such table: t2 +stmt 90 err 1 -1 123 no such table: t2 +stmt 123 err 1 -1 157 no such table: t2 +stmt 157 err 1 -1 192 no such table: t2 +stmt 192 err 1 -1 215 no such table: t2 +==== func-1.0 +SELECT length(t1) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 40 no such table: tbl1 +==== func-1.0b + + SELECT octet_length(t1) FROM tbl1 ORDER BY t1; +---- +stmt 0 err 1 -1 49 no such table: tbl1 +==== func-1.3 +SELECT length(t1), count(*) FROM tbl1 GROUP BY length(t1) + ORDER BY length(t1) +---- +stmt 0 err 1 -1 89 no such table: tbl1 +==== func-1.4 +SELECT coalesce(length(a),-1) FROM t2 +---- +stmt 0 err 1 -1 38 no such table: t2 +==== func-1.5 + + SELECT octet_length(12345); +---- +stmt 0 ok +==== func-1.6 + + SELECT octet_length(NULL); +---- +stmt 0 ok +==== func-1.7 + + SELECT octet_length(7.5); +---- +stmt 0 ok +==== func-1.8 + + SELECT octet_length(x'30313233'); +---- +stmt 0 ok +==== func-1.9 + + WITH c(x) AS (VALUES(char(350,351,352,353,354))) + SELECT length(x), octet_length(x) FROM c; +---- +stmt 0 ok +==== func-2.0 +SELECT substr(t1,1,2) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-2.1 +SELECT substr(t1,2,1) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-2.2 +SELECT substr(t1,3,3) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-2.3 +SELECT substr(t1,-1,1) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 45 no such table: tbl1 +==== func-2.4 +SELECT substr(t1,-1,2) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 45 no such table: tbl1 +==== func-2.5 +SELECT substr(t1,-2,1) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 45 no such table: tbl1 +==== func-2.6 +SELECT substr(t1,-2,2) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 45 no such table: tbl1 +==== func-2.7 +SELECT substr(t1,-4,2) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 45 no such table: tbl1 +==== func-2.8 +SELECT t1 FROM tbl1 ORDER BY substr(t1,2,20) +---- +stmt 0 err 1 -1 45 no such table: tbl1 +==== func-2.9 +SELECT substr(a,1,1) FROM t2 +---- +stmt 0 err 1 -1 29 no such table: t2 +==== func-2.10 +SELECT substr(a,2,2) FROM t2 +---- +stmt 0 err 1 -1 29 no such table: t2 +==== func-2.11 +SELECT substr('abcdefg',0x100000001,2) +---- +stmt 0 ok +==== func-2.12 +SELECT substr('abcdefg',1,0x100000002) +---- +stmt 0 ok +==== func-2.13 +SELECT quote(substr(x'313233343536373839',0x7ffffffffffffffe,5)) +---- +stmt 0 ok +==== func-3.1 +SELECT length(t1) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 40 no such table: tbl1 +==== func-3.2 +SELECT substr(t1,1,2) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-3.3 +SELECT substr(t1,1,3) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-3.4 +SELECT substr(t1,2,2) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-3.5 +SELECT substr(t1,2,3) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-3.6 +SELECT substr(t1,3,2) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-3.7 +SELECT substr(t1,4,2) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-3.8 +SELECT substr(t1,-1,1) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 45 no such table: tbl1 +==== func-3.9 +SELECT substr(t1,-3,2) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 45 no such table: tbl1 +==== func-3.10 +SELECT substr(t1,-4,3) FROM tbl1 ORDER BY t1 +---- +stmt 0 err 1 -1 45 no such table: tbl1 +==== func-4.2 +SELECT abs() FROM t1 +---- +stmt 0 err 1 -1 21 no such table: t1 +==== func-4.3 +SELECT abs(b) FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 33 no such table: t1 +==== func-4.4 +SELECT abs(c) FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 33 no such table: t1 +==== func-4.3.dup1 +SELECT abs(b) FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 33 no such table: t1 +==== func-4.4.dup1 +SELECT abs(c) FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 33 no such table: t1 +==== func-4.4.1 +SELECT abs(a) FROM t2 +---- +stmt 0 err 1 -1 22 no such table: t2 +==== func-4.4.2 +SELECT abs(t1) FROM tbl1 +---- +stmt 0 err 1 -1 25 no such table: tbl1 +==== func-4.5 +SELECT round(a,b,c) FROM t1 +---- +stmt 0 err 1 -1 28 no such table: t1 +==== func-4.6 +SELECT round(b,2) FROM t1 ORDER BY b +---- +stmt 0 err 1 -1 37 no such table: t1 +==== func-4.7 +SELECT round(b,0) FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 37 no such table: t1 +==== func-4.8 +SELECT round(c) FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 35 no such table: t1 +==== func-4.9 +SELECT round(c,a) FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 37 no such table: t1 +==== func-4.10 +SELECT 'x' || round(c,a) || 'y' FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 51 no such table: t1 +==== func-4.11 +SELECT round() FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 34 no such table: t1 +==== func-4.12 +SELECT coalesce(round(a,2),'nil') FROM t2 +---- +stmt 0 err 1 -1 42 no such table: t2 +==== func-4.13 +SELECT round(t1,2) FROM tbl1 +---- +stmt 0 err 1 -1 29 no such table: tbl1 +==== func-4.14 +SELECT typeof(round(5.1,1)); +---- +stmt 0 ok +==== func-4.15 +SELECT typeof(round(5.1)); +---- +stmt 0 ok +==== func-4.16 +SELECT round(b,2.0) FROM t1 ORDER BY b +---- +stmt 0 err 1 -1 39 no such table: t1 +==== func-4.20 +SELECT round(40223.4999999999); +---- +stmt 0 ok +==== func-4.21 +SELECT round(40224.4999999999); +---- +stmt 0 ok +==== func-4.22 +SELECT round(40225.4999999999); +---- +stmt 0 ok +==== func-4.29 +SELECT round(1234567890.5); +---- +stmt 0 ok +==== func-4.30 +SELECT round(12345678901.5); +---- +stmt 0 ok +==== func-4.31 +SELECT round(123456789012.5); +---- +stmt 0 ok +==== func-4.32 +SELECT round(1234567890123.5); +---- +stmt 0 ok +==== func-4.33 +SELECT round(12345678901234.5); +---- +stmt 0 ok +==== func-4.34 +SELECT round(1234567890123.35,1); +---- +stmt 0 ok +==== func-4.35 +SELECT round(1234567890123.445,2); +---- +stmt 0 ok +==== func-4.36 +SELECT round(99999999999994.5); +---- +stmt 0 ok +==== func-4.37 +SELECT round(9999999999999.55,1); +---- +stmt 0 ok +==== func-4.38 +SELECT round(9999999999999.556,2); +---- +stmt 0 ok +==== func-4.40 + + SELECT round(123.456 , 4294967297); +---- +stmt 0 ok +==== func-5.1 +SELECT upper(t1) FROM tbl1 +---- +stmt 0 err 1 -1 27 no such table: tbl1 +==== func-5.2 +SELECT lower(upper(t1)) FROM tbl1 +---- +stmt 0 err 1 -1 34 no such table: tbl1 +==== func-5.3 +SELECT upper(a), lower(a) FROM t2 +---- +stmt 0 err 1 -1 34 no such table: t2 +==== func-5.4 +SELECT upper(a,5) FROM t2 +---- +stmt 0 err 1 -1 26 no such table: t2 +==== func-5.5 +SELECT upper(*) FROM t2 +---- +stmt 0 err 1 -1 24 no such table: t2 +==== func-6.1 +SELECT coalesce(a,'xyz') FROM t2 +---- +stmt 0 err 1 -1 33 no such table: t2 +==== func-6.2 +SELECT coalesce(upper(a),'nil') FROM t2 +---- +stmt 0 err 1 -1 40 no such table: t2 +==== func-6.3 +SELECT coalesce(nullif(1,1),'nil') +---- +stmt 0 ok +==== func-6.4 +SELECT coalesce(nullif(1,2),'nil') +---- +stmt 0 ok +==== func-6.5 +SELECT coalesce(nullif(1,NULL),'nil') +---- +stmt 0 ok +==== func-7.1 +SELECT last_insert_rowid() +---- +stmt 0 ok +==== func-8.2 + + SELECT max('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t2; +---- +stmt 0 err 1 -1 79 no such table: t2 +==== func-8.3 + + CREATE TEMP TABLE t3 AS SELECT a FROM t2 ORDER BY a DESC; + SELECT min('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t3; +---- +stmt 0 err 1 -1 64 no such table: t2 +stmt 64 err 1 -1 145 no such table: t3 +==== func-8.3.dup1 + + CREATE TABLE t3 AS SELECT a FROM t2 ORDER BY a DESC; + SELECT min('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t3; +---- +stmt 0 err 1 -1 59 no such table: t2 +stmt 59 err 1 -1 140 no such table: t3 +==== func-8.4 + + SELECT max('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t3; +---- +stmt 0 err 1 -1 79 no such table: t3 +==== func-8.5 + + SELECT sum(x) FROM (SELECT '9223372036' || '854775807' AS x + UNION ALL SELECT -9223372036854775807) +---- +stmt 0 ok +==== func-8.6 + + SELECT typeof(sum(x)) FROM (SELECT '9223372036' || '854775807' AS x + UNION ALL SELECT -9223372036854775807) +---- +stmt 0 ok +==== func-8.7 + + SELECT typeof(sum(x)) FROM (SELECT '9223372036' || '854775808' AS x + UNION ALL SELECT -9223372036854775807) +---- +stmt 0 ok +==== func-8.8 + + SELECT sum(x)>0.0 FROM (SELECT '9223372036' || '854775808' AS x + UNION ALL SELECT -9223372036850000000) +---- +stmt 0 ok +==== func-8.8.dup1 + + SELECT sum(x)>0 FROM (SELECT '9223372036' || '854775808' AS x + UNION ALL SELECT -9223372036850000000) +---- +stmt 0 ok +==== func-9.1 + + SELECT random() is not null; +---- +stmt 0 ok +==== func-9.2 + + SELECT typeof(random()); +---- +stmt 0 ok +==== func-9.3 + + SELECT randomblob(32) is not null; +---- +stmt 0 ok +==== func-9.4 + + SELECT typeof(randomblob(32)); +---- +stmt 0 ok +==== func-9.5 + + SELECT length(randomblob(32)), length(randomblob(-5)), + length(randomblob(2000)) +---- +stmt 0 ok +==== func-9.10 +SELECT hex(x'00112233445566778899aAbBcCdDeEfF') +---- +stmt 0 ok +==== func-9.11-utf16le +SELECT hex(replace('abcdefg','ef','12')) +---- +stmt 0 ok +==== func-9.12-utf16le +SELECT hex(replace('abcdefg','','12')) +---- +stmt 0 ok +==== func-9.13-utf16le +SELECT hex(replace('aabcdefg','a','aaa')) +---- +stmt 0 ok +==== func-9.11-utf8 +SELECT hex(replace('abcdefg','ef','12')) +---- +stmt 0 ok +==== func-9.12-utf8 +SELECT hex(replace('abcdefg','','12')) +---- +stmt 0 ok +==== func-9.13-utf8 +SELECT hex(replace('aabcdefg','a','aaa')) +---- +stmt 0 ok +==== func-9.14 + + WITH RECURSIVE c(x) AS ( + VALUES(1) + UNION ALL + SELECT x+1 FROM c WHERE x<1040 + ) + SELECT + count(*), + sum(length(replace(printf('abc%.*cxyz',x,'m'),'m','nnnn'))-(6+x*4)) + FROM c; +---- +stmt 0 ok +==== func-10.1 + + SELECT testfunc(NULL,NULL); +---- +stmt 0 err 1 12 32 no such function: testfunc +==== func-10.2 + + SELECT testfunc( + 'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'int', 1234 + ); +---- +stmt 0 err 1 12 116 no such function: testfunc +==== func-10.3 + + SELECT testfunc( + 'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'string', NULL + ); +---- +stmt 0 err 1 12 119 no such function: testfunc +==== func-10.4 + + SELECT testfunc( + 'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'double', 1.234 + ); +---- +stmt 0 err 1 14 128 no such function: testfunc +==== func-10.5 + + SELECT testfunc( + 'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'int', 1234, + 'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'string', NULL, + 'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'double', 1.234, + 'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'int', 1234, + 'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'string', NULL, + 'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'double', 1.234 + ); +---- +stmt 0 err 1 14 603 no such function: testfunc +==== func-11.1 + + SELECT sqlite_version(*); +---- +stmt 0 ok +==== func-12.1-utf8 + + SELECT test_destructor('hello world'), test_destructor_count(); +---- +stmt 0 err 1 14 70 no such function: test_destructor +==== func-12.1-utf16 + + SELECT test_destructor16('hello world'), test_destructor_count(); +---- +stmt 0 err 1 18 76 no such function: test_destructor16 +==== func-12.2 + + SELECT test_destructor_count(); +---- +stmt 0 err 1 12 36 no such function: test_destructor_count +==== func-12.3 + + SELECT test_destructor('hello')||' world' +---- +stmt 0 err 1 12 47 no such function: test_destructor +==== func-12.4 + + SELECT test_destructor_count(); +---- +stmt 0 err 1 12 36 no such function: test_destructor_count +==== func-12.5 + + CREATE TABLE t4(x); + INSERT INTO t4 VALUES(test_destructor('hello')); + INSERT INTO t4 VALUES(test_destructor('world')); + SELECT min(test_destructor(x)), max(test_destructor(x)) FROM t4; +---- +stmt 0 ok +stmt 24 err 1 -1 77 no such table: t4 +stmt 77 err 1 -1 130 no such table: t4 +stmt 130 err 1 -1 199 no such table: t4 +==== func-12.6 + + SELECT test_destructor_count(); +---- +stmt 0 err 1 12 36 no such function: test_destructor_count +==== func-12.7 + + DROP TABLE t4; +---- +stmt 0 err 1 -1 19 no such table: t4 +==== func-13.1 + + SELECT test_auxdata('hello world'); +---- +stmt 0 err 1 12 40 no such function: test_auxdata +==== func-13.2 + + CREATE TABLE t4(a, b); + INSERT INTO t4 VALUES('abc', 'def'); + INSERT INTO t4 VALUES('ghi', 'jkl'); +---- +stmt 0 ok +stmt 27 err 1 -1 68 no such table: t4 +stmt 68 err 1 -1 109 no such table: t4 +==== func-13.3 + + SELECT test_auxdata('hello world') FROM t4; +---- +stmt 0 err 1 -1 48 no such table: t4 +==== func-13.4 + + SELECT test_auxdata('hello world', 123) FROM t4; +---- +stmt 0 err 1 -1 53 no such table: t4 +==== func-13.5 + + SELECT test_auxdata('hello world', a) FROM t4; +---- +stmt 0 err 1 -1 51 no such table: t4 +==== func-13.6 + + SELECT test_auxdata('hello'||'world', a) FROM t4; +---- +stmt 0 err 1 -1 54 no such table: t4 +==== 13.8.1 + + SELECT test_auxdata('constant') FROM t4; +---- +stmt 0 err 1 -1 43 no such table: t4 +==== 13.8.2 + + SELECT test_auxdata('constant') FROM t4; +---- +stmt 0 err 1 -1 43 no such table: t4 +==== 13.8.3 + + SELECT test_auxdata('constant') FROM t4; +---- +stmt 0 err 1 -1 43 no such table: t4 +==== func-15.1 +select test_error(NULL) +---- +stmt 0 err 1 7 24 no such function: test_error +==== func-15.2 +select test_error('this is the error message') +---- +stmt 0 err 1 7 47 no such function: test_error +==== func-15.3 +select test_error('this is the error message',12) +---- +stmt 0 err 1 7 50 no such function: test_error +==== func-16.2 + + SELECT quote(4.2e+859), quote(-7.8e+904); +---- +stmt 0 ok +==== func-18.1 + + CREATE TABLE t5(x); + INSERT INTO t5 VALUES(1); + INSERT INTO t5 VALUES(-99); + INSERT INTO t5 VALUES(10000); + SELECT sum(x) FROM t5; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t5 +stmt 54 err 1 -1 86 no such table: t5 +stmt 86 err 1 -1 120 no such table: t5 +stmt 120 err 1 -1 147 no such table: t5 +==== func-18.2 + + INSERT INTO t5 VALUES(0.0); + SELECT sum(x) FROM t5; +---- +stmt 0 err 1 -1 34 no such table: t5 +stmt 34 err 1 -1 63 no such table: t5 +==== func-18.3 + + DELETE FROM t5; + SELECT sum(x), total(x) FROM t5; +---- +stmt 0 err 1 -1 20 no such table: t5 +stmt 20 err 1 -1 57 no such table: t5 +==== func-18.4 + + INSERT INTO t5 VALUES(NULL); + SELECT sum(x), total(x) FROM t5 +---- +stmt 0 err 1 -1 33 no such table: t5 +stmt 33 err 1 -1 70 no such table: t5 +==== func-18.5 + + INSERT INTO t5 VALUES(NULL); + SELECT sum(x), total(x) FROM t5 +---- +stmt 0 err 1 -1 33 no such table: t5 +stmt 33 err 1 -1 70 no such table: t5 +==== func-18.6 + + INSERT INTO t5 VALUES(123); + SELECT sum(x), total(x) FROM t5 +---- +stmt 0 err 1 -1 32 no such table: t5 +stmt 32 err 1 -1 69 no such table: t5 +==== func-18.10 + + CREATE TABLE t6(x INTEGER); + INSERT INTO t6 VALUES(1); + INSERT INTO t6 VALUES(1<<62); + SELECT sum(x) - ((1<<62)+1) from t6; +---- +stmt 0 ok +stmt 32 err 1 -1 62 no such table: t6 +stmt 62 err 1 -1 96 no such table: t6 +stmt 96 err 1 -1 137 no such table: t6 +==== func-18.11 + + SELECT typeof(sum(x)) FROM t6 +---- +stmt 0 err 1 -1 35 no such table: t6 +==== func-18.12 + + INSERT INTO t6 VALUES(1<<62); + SELECT sum(x) - ((1<<62)*2.0+1) from t6; +---- +stmt 0 err 1 -1 34 no such table: t6 +stmt 34 err 1 -1 79 no such table: t6 +==== func-18.13 + + SELECT total(x) - ((1<<62)*2.0+1) FROM t6 +---- +stmt 0 err 1 -1 47 no such table: t6 +==== func-18.14 + + SELECT sum(-9223372036854775805); +---- +stmt 0 ok +==== func-18.15 + + SELECT sum(x) FROM + (SELECT 9223372036854775807 AS x UNION ALL + SELECT 10 AS x); +---- +stmt 0 ok +==== func-18.16 + + SELECT sum(x) FROM + (SELECT 9223372036854775807 AS x UNION ALL + SELECT -10 AS x); +---- +stmt 0 ok +==== func-18.17 + + SELECT sum(x) FROM + (SELECT -9223372036854775807 AS x UNION ALL + SELECT 10 AS x); +---- +stmt 0 ok +==== func-18.18 + + SELECT sum(x) FROM + (SELECT -9223372036854775807 AS x UNION ALL + SELECT -10 AS x); +---- +stmt 0 ok +==== func-18.19 + + SELECT sum(x) FROM (SELECT 9 AS x UNION ALL SELECT -10 AS x); +---- +stmt 0 ok +==== func-18.20 + + SELECT sum(x) FROM (SELECT -9 AS x UNION ALL SELECT 10 AS x); +---- +stmt 0 ok +==== func-18.21 + + SELECT sum(x) FROM (SELECT -10 AS x UNION ALL SELECT 9 AS x); +---- +stmt 0 ok +==== func-18.22 + + SELECT sum(x) FROM (SELECT 10 AS x UNION ALL SELECT -9 AS x); +---- +stmt 0 ok +==== func-18.31 + + SELECT abs(-9223372036854775807); +---- +stmt 0 ok +==== func-18.32 + + SELECT abs(-9223372036854775807-1); +---- +stmt 0 ok +==== func-19.1 + + SELECT match(a,b) FROM t1 WHERE 0; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== func-19.2 + + SELECT 'abc' MATCH 'xyz'; +---- +stmt 0 ok +==== func-19.3 + + SELECT 'abc' NOT MATCH 'xyz'; +---- +stmt 0 ok +==== func-19.4 + + SELECT match(1,2,3); +---- +stmt 0 err 1 12 25 wrong number of arguments to function match() +==== func-21.1 + + SELECT replace(1,2); +---- +stmt 0 err 1 12 25 wrong number of arguments to function replace() +==== func-21.2 + + SELECT replace(1,2,3,4); +---- +stmt 0 err 1 12 29 wrong number of arguments to function replace() +==== func-21.3 + + SELECT typeof(replace('This is the main test string', NULL, 'ALT')); +---- +stmt 0 ok +==== func-21.4 + + SELECT typeof(replace(NULL, 'main', 'ALT')); +---- +stmt 0 ok +==== func-21.5 + + SELECT typeof(replace('This is the main test string', 'main', NULL)); +---- +stmt 0 ok +==== func-21.6 + + SELECT replace('This is the main test string', 'main', 'ALT'); +---- +stmt 0 ok +==== func-21.7 + + SELECT replace('This is the main test string', 'main', 'larger-main'); +---- +stmt 0 ok +==== func-21.8 + + SELECT replace('aaaaaaa', 'a', '0123456789'); +---- +stmt 0 ok +==== func-21.9 + + SELECT typeof(replace(1,'',0)); +---- +stmt 0 ok +==== func-22.1 +SELECT trim(1,2,3) +---- +stmt 0 err 1 7 19 wrong number of arguments to function trim() +==== func-22.2 +SELECT ltrim(1,2,3) +---- +stmt 0 err 1 7 20 wrong number of arguments to function ltrim() +==== func-22.3 +SELECT rtrim(1,2,3) +---- +stmt 0 err 1 7 20 wrong number of arguments to function rtrim() +==== func-22.4 +SELECT trim(' hi '); +---- +stmt 0 ok +==== func-22.5 +SELECT ltrim(' hi '); +---- +stmt 0 ok +==== func-22.6 +SELECT rtrim(' hi '); +---- +stmt 0 ok +==== func-22.7 +SELECT trim(' hi ','xyz'); +---- +stmt 0 ok +==== func-22.8 +SELECT ltrim(' hi ','xyz'); +---- +stmt 0 ok +==== func-22.9 +SELECT rtrim(' hi ','xyz'); +---- +stmt 0 ok +==== func-22.10 +SELECT trim('xyxzy hi zzzy','xyz'); +---- +stmt 0 ok +==== func-22.11 +SELECT ltrim('xyxzy hi zzzy','xyz'); +---- +stmt 0 ok +==== func-22.12 +SELECT rtrim('xyxzy hi zzzy','xyz'); +---- +stmt 0 ok +==== func-22.13 +SELECT trim(' hi ',''); +---- +stmt 0 ok +==== func-22.14 +SELECT hex(trim(x'c280e1bfbff48fbfbf6869',x'6162e1bfbfc280')) +---- +stmt 0 ok +==== func-22.15 +SELECT hex(trim(x'6869c280e1bfbff48fbfbf61', + x'6162e1bfbfc280f48fbfbf')) +---- +stmt 0 ok +==== func-22.16 +SELECT hex(trim(x'ceb1ceb2ceb3',x'ceb1')); +---- +stmt 0 ok +==== func-22.20 +SELECT typeof(trim(NULL)); +---- +stmt 0 ok +==== func-22.21 +SELECT typeof(trim(NULL,'xyz')); +---- +stmt 0 ok +==== func-22.22 +SELECT typeof(trim('hello',NULL)); +---- +stmt 0 ok +==== func-22.23 + + SELECT trim('xyzzy',x'c0808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080'); +---- +stmt 0 ok +==== func-24.1 + + SELECT group_concat(t1), string_agg(t1,',') FROM tbl1 +---- +stmt 0 err 1 -1 59 no such table: tbl1 +==== func-24.2 + + SELECT group_concat(t1,' '), string_agg(t1,' ') FROM tbl1 +---- +stmt 0 err 1 -1 63 no such table: tbl1 +==== func-24.3 + + SELECT group_concat(t1,' ' || rowid || ' ') FROM tbl1 +---- +stmt 0 err 1 -1 59 no such table: tbl1 +==== func-24.4 + + SELECT group_concat(NULL,t1) FROM tbl1 +---- +stmt 0 err 1 -1 44 no such table: tbl1 +==== func-24.5 + + SELECT group_concat(t1,NULL), string_agg(t1,NULL) FROM tbl1 +---- +stmt 0 err 1 -1 65 no such table: tbl1 +==== func-24.6 + + SELECT 'BEGIN-'||group_concat(t1) FROM tbl1 +---- +stmt 0 err 1 -1 49 no such table: tbl1 +==== func-24.8 + + SELECT group_concat(CASE t1 WHEN 'this' THEN '' ELSE t1 END) FROM tbl1 +---- +stmt 0 err 1 -1 76 no such table: tbl1 +==== func-24.9 + + SELECT group_concat(CASE WHEN t1!='software' THEN '' ELSE t1 END) FROM tbl1 +---- +stmt 0 err 1 -1 81 no such table: tbl1 +==== func-24.10 + + SELECT group_concat(CASE t1 WHEN 'this' THEN null ELSE t1 END) FROM tbl1 +---- +stmt 0 err 1 -1 78 no such table: tbl1 +==== func-24.11 + + SELECT group_concat(CASE WHEN t1!='software' THEN null ELSE t1 END) FROM tbl1 +---- +stmt 0 err 1 -1 82 no such table: tbl1 +==== func-24.12 + + SELECT group_concat(CASE t1 WHEN 'this' THEN '' + WHEN 'program' THEN null ELSE t1 END) FROM tbl1 +---- +stmt 0 err 1 -1 127 no such table: tbl1 +==== func-24.13 + + SELECT typeof(group_concat(x)) FROM (SELECT '' AS x); +---- +stmt 0 ok +==== func-24.14 + + SELECT typeof(group_concat(x,'')) + FROM (SELECT '' AS x UNION ALL SELECT ''); +---- +stmt 0 ok +==== func-25.1 +SELECT test_isolation(t1,t1) FROM tbl1 +---- +stmt 0 err 1 -1 39 no such table: tbl1 +==== func-27.1 +SELECT coalesce() +---- +stmt 0 err 1 7 18 wrong number of arguments to function coalesce() +==== func-27.2 +SELECT coalesce(1) +---- +stmt 0 err 1 7 19 wrong number of arguments to function coalesce() +==== func-27.3 +SELECT coalesce(1,2) +---- +stmt 0 ok +==== func-29.10 + + CREATE TABLE t29b(a,b,c,d,e,f,g,h,i); + INSERT INTO t29b + VALUES(1, hex(randomblob(2000)), null, 0, 1, '', zeroblob(0),'x',x'01'); + SELECT typeof(c), typeof(d), typeof(e), typeof(f), + typeof(g), typeof(h), typeof(i) FROM t29b; +---- +stmt 0 ok +stmt 40 err 1 -1 136 no such table: t29b +stmt 136 err 1 -1 241 no such table: t29b +==== func-29.11 + + SELECT length(f), length(g), length(h), length(i) FROM t29b; +---- +stmt 0 err 1 -1 63 no such table: t29b +==== func-29.12 + + SELECT quote(f), quote(g), quote(h), quote(i) FROM t29b; +---- +stmt 0 err 1 -1 59 no such table: t29b +==== func-30.4 +SELECT char(36,162,8364); +---- +stmt 0 ok +==== func-31.1 + + SELECT char(), length(char()), typeof(char()) +---- +stmt 0 ok +==== func-32.100 + + SELECT test_frombind(1,2,3,4); +---- +stmt 0 err 1 10 33 no such function: test_frombind +==== func-32.110 + + SELECT test_frombind(1,2,?,4); +---- +stmt 0 err 1 10 33 no such function: test_frombind +==== func-32.120 + + SELECT test_frombind(1,(?),4,?+7); +---- +stmt 0 err 1 10 37 no such function: test_frombind +==== func-33.2 + + CREATE VIEW v33(y) AS SELECT testdirectonly(15); + SELECT * FROM v33; +---- +stmt 0 ok +stmt 51 err 1 -1 72 no such table: v33 +==== func-33.3 + + SELECT * FROM (SELECT testdirectonly(15)) AS v33; +---- +stmt 0 err 1 25 52 no such function: testdirectonly +==== func-33.4 + + WITH c(x) AS (SELECT testdirectonly(15)) + SELECT * FROM c; +---- +stmt 0 err 1 24 62 no such function: testdirectonly +==== func-33.5 + + WITH c(x) AS (SELECT * FROM v33) + SELECT * FROM c; +---- +stmt 0 err 1 -1 54 no such table: v33 +==== func-33.10 + + CREATE TABLE t33a(a,b); + CREATE TABLE t33b(x,y); + CREATE TRIGGER r1 AFTER INSERT ON t33a BEGIN + INSERT INTO t33b(x,y) VALUES(testdirectonly(new.a),new.b); + END; +---- +stmt 0 ok +stmt 26 ok +stmt 52 err 1 -1 99 no such table: main.t33a +==== func-33.11 + + INSERT INTO t33a VALUES(1,2); +---- +stmt 0 err 1 -1 32 no such table: t33a +==== func-33.20 + + ALTER TABLE t33a RENAME COLUMN a TO aaa; + SELECT sql FROM sqlite_master WHERE name='r1'; +---- +stmt 0 err 1 -1 43 no such table: t33a +stmt 43 ok +==== func-34.10 + + CREATE TABLE t1(a INT CHECK( + datetime( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,39, + 40,41,42,43,44,45,46,47,48,a) + ) + ); + INSERT INTO t1(a) VALUES(1),(2); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 265 err 1 -1 300 no such table: t1 +stmt 300 err 1 -1 320 no such table: t1 +==== func-35.100 + + CREATE TABLE t1(x); + SELECT coalesce(x, abs(-9223372036854775808)) FROM t1; +---- +stmt 0 ok +stmt 22 err 1 -1 79 no such table: t1 +==== func-35.110 + + SELECT coalesce(x, 'xyz' LIKE printf('%.1000000c','y')) FROM t1; +---- +stmt 0 err 1 -1 67 no such table: t1 +==== func-35.200 + + CREATE TABLE t0(c0 CHECK(ABS(-9223372036854775808))); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 56 ok +==== func-36.100 + + SELECT 123 -> 456 +---- +stmt 0 ok +==== func-36.110 + + SELECT 123 ->> 456 +---- +stmt 0 ok +==== func-37.100 + + WITH c(x) AS (VALUES(9223372036854775807),(9223372036854775807), + (123),(-9223372036854775807),(-9223372036854775807)) + SELECT sum(x) FROM c; +---- +stmt 0 ok +==== func-37.110 + + WITH c(x) AS (VALUES(9223372036854775807),(1)) + SELECT sum(x) FROM c; +---- +stmt 0 ok +==== func-37.120 + + WITH c(x) AS (VALUES(9223372036854775807),(10000),(-10010)) + SELECT sum(x) FROM c; +---- +stmt 0 ok +==== func-38.100 + + WITH t1(x) AS (VALUES(9e+999)) SELECT sum(x), avg(x), total(x) FROM t1; + WITH t1(x) AS (VALUES(-9e+999)) SELECT sum(x), avg(x), total(x) FROM t1; +---- +stmt 0 ok +stmt 74 ok +==== func-39.101 + + WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<1) + SELECT sum(1.7976931348623157e308), + avg(1.7976931348623157e308), + total(1.7976931348623157e308) + FROM c; +---- +stmt 0 ok diff --git a/parser/testdata/func2.metadata.json b/parser/testdata/func2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/func2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/func2.test b/parser/testdata/func2.test new file mode 100644 index 0000000..46a9152 --- /dev/null +++ b/parser/testdata/func2.test @@ -0,0 +1,256 @@ +==== func2-1.1 +SELECT 'Supercalifragilisticexpialidocious' +---- +stmt 0 ok +==== func2-1.2.1 +SELECT SUBSTR() +---- +stmt 0 err 1 7 16 wrong number of arguments to function SUBSTR() +==== func2-1.2.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious') +---- +stmt 0 err 1 7 52 wrong number of arguments to function SUBSTR() +==== func2-1.2.3 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 1,1,1) +---- +stmt 0 err 1 7 59 wrong number of arguments to function SUBSTR() +==== func2-1.3 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 0) +---- +stmt 0 ok +==== func2-1.4 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 1) +---- +stmt 0 ok +==== func2-1.5 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 2) +---- +stmt 0 ok +==== func2-1.6 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 30) +---- +stmt 0 ok +==== func2-1.7 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 34) +---- +stmt 0 ok +==== func2-1.8 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 35) +---- +stmt 0 ok +==== func2-1.9 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 36) +---- +stmt 0 ok +==== func2-1.10 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -0) +---- +stmt 0 ok +==== func2-1.11 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -1) +---- +stmt 0 ok +==== func2-1.12 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -2) +---- +stmt 0 ok +==== func2-1.13 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -30) +---- +stmt 0 ok +==== func2-1.14 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -34) +---- +stmt 0 ok +==== func2-1.15 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -35) +---- +stmt 0 ok +==== func2-1.16 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -36) +---- +stmt 0 ok +==== func2-1.17.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 1) +---- +stmt 0 ok +==== func2-1.17.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 2) +---- +stmt 0 ok +==== func2-1.18 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 1) +---- +stmt 0 ok +==== func2-1.19.0 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0) +---- +stmt 0 ok +==== func2-1.19.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 1) +---- +stmt 0 ok +==== func2-1.19.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 2) +---- +stmt 0 ok +==== func2-1.20 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, 1) +---- +stmt 0 ok +==== func2-1.21 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, 1) +---- +stmt 0 ok +==== func2-1.22 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, 1) +---- +stmt 0 ok +==== func2-1.23 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 1) +---- +stmt 0 ok +==== func2-1.24 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -0, 1) +---- +stmt 0 ok +==== func2-1.25.0 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 0) +---- +stmt 0 ok +==== func2-1.25.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 1) +---- +stmt 0 ok +==== func2-1.25.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 2) +---- +stmt 0 ok +==== func2-1.26 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -2, 1) +---- +stmt 0 ok +==== func2-1.27 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -30, 1) +---- +stmt 0 ok +==== func2-1.28.0 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 0) +---- +stmt 0 ok +==== func2-1.28.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 1) +---- +stmt 0 ok +==== func2-1.28.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 2) +---- +stmt 0 ok +==== func2-1.29.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 1) +---- +stmt 0 ok +==== func2-1.29.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 2) +---- +stmt 0 ok +==== func2-1.30.0 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 0) +---- +stmt 0 ok +==== func2-1.30.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 1) +---- +stmt 0 ok +==== func2-1.30.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 2) +---- +stmt 0 ok +==== func2-1.30.3 +SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 3) +---- +stmt 0 ok +==== func2-1.31.0 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 0) +---- +stmt 0 ok +==== func2-1.31.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -1) +---- +stmt 0 ok +==== func2-1.31.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -2) +---- +stmt 0 ok +==== func2-1.32.0 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 0) +---- +stmt 0 ok +==== func2-1.32.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, -1) +---- +stmt 0 ok +==== func2-1.33.0 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0) +---- +stmt 0 ok +==== func2-1.33.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -1) +---- +stmt 0 ok +==== func2-1.33.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -2) +---- +stmt 0 ok +==== func2-1.34.0 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, 0) +---- +stmt 0 ok +==== func2-1.34.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -1) +---- +stmt 0 ok +==== func2-1.34.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -2) +---- +stmt 0 ok +==== func2-1.35.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -1) +---- +stmt 0 ok +==== func2-1.35.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -2) +---- +stmt 0 ok +==== func2-1.36 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, -1) +---- +stmt 0 ok +==== func2-1.37 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, -1) +---- +stmt 0 ok +==== func2-1.38.0 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 0) +---- +stmt 0 ok +==== func2-1.38.1 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -1) +---- +stmt 0 ok +==== func2-1.38.2 +SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -2) +---- +stmt 0 ok +==== func2-3.1.2 +SELECT SUBSTR() +---- +stmt 0 err 1 7 16 wrong number of arguments to function SUBSTR() +==== func2-3.1.3 +SELECT SUBSTR(x'1234') +---- +stmt 0 err 1 7 23 wrong number of arguments to function SUBSTR() +==== func2-3.1.4 +SELECT SUBSTR(x'1234', 1,1,1) +---- +stmt 0 err 1 7 30 wrong number of arguments to function SUBSTR() diff --git a/parser/testdata/func3.metadata.json b/parser/testdata/func3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/func3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/func3.test b/parser/testdata/func3.test new file mode 100644 index 0000000..5dd13ab --- /dev/null +++ b/parser/testdata/func3.test @@ -0,0 +1,125 @@ +==== func3-5.1 + + SELECT likelihood(9223372036854775807, 0.5); +---- +stmt 0 ok +==== func3-5.2 + + SELECT likelihood(-9223372036854775808, 0.5); +---- +stmt 0 ok +==== func3-5.3 + + SELECT likelihood(14.125, 0.5); +---- +stmt 0 ok +==== func3-5.4 + + SELECT likelihood(NULL, 0.5); +---- +stmt 0 ok +==== func3-5.5 + + SELECT likelihood('test-string', 0.5); +---- +stmt 0 ok +==== func3-5.6 + + SELECT quote(likelihood(x'010203000405', 0.5)); +---- +stmt 0 ok +==== func3-5.7 + + SELECT likelihood(123, 1.0), likelihood(456, 0.0); +---- +stmt 0 ok +==== func3-5.8 + + SELECT likelihood(123, 1.000001); +---- +stmt 0 err 1 12 38 second argument to likelihood() must be a constant between 0.0 and 1.0 +==== func3-5.9 + + SELECT likelihood(123, -0.000001); +---- +stmt 0 err 1 12 39 second argument to likelihood() must be a constant between 0.0 and 1.0 +==== func3-5.10 + + SELECT likelihood(123, 0.5+0.3); +---- +stmt 0 err 1 12 37 second argument to likelihood() must be a constant between 0.0 and 1.0 +==== func3-5.30 + + SELECT unlikely(9223372036854775807); +---- +stmt 0 ok +==== func3-5.31 + + SELECT unlikely(-9223372036854775808); +---- +stmt 0 ok +==== func3-5.32 + + SELECT unlikely(14.125); +---- +stmt 0 ok +==== func3-5.33 + + SELECT unlikely(NULL); +---- +stmt 0 ok +==== func3-5.34 + + SELECT unlikely('test-string'); +---- +stmt 0 ok +==== func3-5.35 + + SELECT quote(unlikely(x'010203000405')); +---- +stmt 0 ok +==== func3-5.40 + + SELECT likely(CAST(1 AS INT))=='1'; +---- +stmt 0 ok +==== func3-5.41 + + SELECT unlikely(CAST(1 AS INT))=='1'; +---- +stmt 0 ok +==== func3-5.41.dup1 + + SELECT likelihood(CAST(1 AS INT),0.5)=='1'; +---- +stmt 0 ok +==== func3-5.50 + + SELECT likely(9223372036854775807); +---- +stmt 0 ok +==== func3-5.51 + + SELECT likely(-9223372036854775808); +---- +stmt 0 ok +==== func3-5.52 + + SELECT likely(14.125); +---- +stmt 0 ok +==== func3-5.53 + + SELECT likely(NULL); +---- +stmt 0 ok +==== func3-5.54 + + SELECT likely('test-string'); +---- +stmt 0 ok +==== func3-5.55 + + SELECT quote(likely(x'010203000405')); +---- +stmt 0 ok diff --git a/parser/testdata/func4.metadata.json b/parser/testdata/func4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/func4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/func4.test b/parser/testdata/func4.test new file mode 100644 index 0000000..ad1b5d4 --- /dev/null +++ b/parser/testdata/func4.test @@ -0,0 +1,1019 @@ +==== func4-1.1 + + SELECT tointeger(NULL); +---- +stmt 0 err 1 10 26 no such function: tointeger +==== func4-1.2 + + SELECT tointeger(''); +---- +stmt 0 err 1 10 24 no such function: tointeger +==== func4-1.3 + + SELECT tointeger(' '); +---- +stmt 0 err 1 10 27 no such function: tointeger +==== func4-1.4 + + SELECT tointeger('1234'); +---- +stmt 0 err 1 10 28 no such function: tointeger +==== func4-1.5 + + SELECT tointeger(' 1234'); +---- +stmt 0 err 1 10 31 no such function: tointeger +==== func4-1.6 + + SELECT tointeger('bad'); +---- +stmt 0 err 1 10 27 no such function: tointeger +==== func4-1.7 + + SELECT tointeger('0xBAD'); +---- +stmt 0 err 1 10 29 no such function: tointeger +==== func4-1.8 + + SELECT tointeger('123BAD'); +---- +stmt 0 err 1 10 30 no such function: tointeger +==== func4-1.9 + + SELECT tointeger('0x123BAD'); +---- +stmt 0 err 1 10 32 no such function: tointeger +==== func4-1.10 + + SELECT tointeger('123NO'); +---- +stmt 0 err 1 10 29 no such function: tointeger +==== func4-1.11 + + SELECT tointeger('0x123NO'); +---- +stmt 0 err 1 10 31 no such function: tointeger +==== func4-1.12 + + SELECT tointeger('-0x1'); +---- +stmt 0 err 1 10 28 no such function: tointeger +==== func4-1.13 + + SELECT tointeger('-0x0'); +---- +stmt 0 err 1 10 28 no such function: tointeger +==== func4-1.14 + + SELECT tointeger('0x0'); +---- +stmt 0 err 1 10 27 no such function: tointeger +==== func4-1.15 + + SELECT tointeger('0x1'); +---- +stmt 0 err 1 10 27 no such function: tointeger +==== func4-1.16 + + SELECT tointeger(-1); +---- +stmt 0 err 1 10 24 no such function: tointeger +==== func4-1.17 + + SELECT tointeger(-0); +---- +stmt 0 err 1 10 24 no such function: tointeger +==== func4-1.18 + + SELECT tointeger(0); +---- +stmt 0 err 1 10 23 no such function: tointeger +==== func4-1.19 + + SELECT tointeger(1); +---- +stmt 0 err 1 10 23 no such function: tointeger +==== func4-1.20 + + SELECT tointeger(-1.79769313486232e308 - 1); +---- +stmt 0 err 1 10 47 no such function: tointeger +==== func4-1.21 + + SELECT tointeger(-1.79769313486232e308); +---- +stmt 0 err 1 10 43 no such function: tointeger +==== func4-1.22 + + SELECT tointeger(-1.79769313486232e308 + 1); +---- +stmt 0 err 1 10 47 no such function: tointeger +==== func4-1.23 + + SELECT tointeger(-9223372036854775808 - 1); +---- +stmt 0 err 1 10 46 no such function: tointeger +==== func4-1.24 + + SELECT tointeger(-9223372036854775808); +---- +stmt 0 err 1 10 42 no such function: tointeger +==== func4-1.25 + + SELECT tointeger(-9223372036854775808 + 1); +---- +stmt 0 err 1 10 46 no such function: tointeger +==== func4-1.26 + + SELECT tointeger(-9223372036854775807 - 1); +---- +stmt 0 err 1 10 46 no such function: tointeger +==== func4-1.27 + + SELECT tointeger(-9223372036854775807); +---- +stmt 0 err 1 10 42 no such function: tointeger +==== func4-1.28 + + SELECT tointeger(-9223372036854775807 + 1); +---- +stmt 0 err 1 10 46 no such function: tointeger +==== func4-1.29 + + SELECT tointeger(-2147483648 - 1); +---- +stmt 0 err 1 10 37 no such function: tointeger +==== func4-1.30 + + SELECT tointeger(-2147483648); +---- +stmt 0 err 1 10 33 no such function: tointeger +==== func4-1.31 + + SELECT tointeger(-2147483648 + 1); +---- +stmt 0 err 1 10 37 no such function: tointeger +==== func4-1.32 + + SELECT tointeger(2147483647 - 1); +---- +stmt 0 err 1 10 36 no such function: tointeger +==== func4-1.33 + + SELECT tointeger(2147483647); +---- +stmt 0 err 1 10 32 no such function: tointeger +==== func4-1.34 + + SELECT tointeger(2147483647 + 1); +---- +stmt 0 err 1 10 36 no such function: tointeger +==== func4-1.35 + + SELECT tointeger(9223372036854775807 - 1); +---- +stmt 0 err 1 10 45 no such function: tointeger +==== func4-1.36 + + SELECT tointeger(9223372036854775807); +---- +stmt 0 err 1 10 41 no such function: tointeger +==== func4-1.37 + + SELECT tointeger(9223372036854775807 + 1); +---- +stmt 0 err 1 12 47 no such function: tointeger +==== func4-1.38 + + SELECT tointeger(1.79769313486232e308 - 1); +---- +stmt 0 err 1 10 46 no such function: tointeger +==== func4-1.39 + + SELECT tointeger(1.79769313486232e308); +---- +stmt 0 err 1 10 42 no such function: tointeger +==== func4-1.40 + + SELECT tointeger(1.79769313486232e308 + 1); +---- +stmt 0 err 1 10 46 no such function: tointeger +==== func4-1.41 + + SELECT tointeger(4503599627370496 - 1); +---- +stmt 0 err 1 10 42 no such function: tointeger +==== func4-1.42 + + SELECT tointeger(4503599627370496); +---- +stmt 0 err 1 10 38 no such function: tointeger +==== func4-1.43 + + SELECT tointeger(4503599627370496 + 1); +---- +stmt 0 err 1 10 42 no such function: tointeger +==== func4-1.44 + + SELECT tointeger(9007199254740992 - 1); +---- +stmt 0 err 1 10 42 no such function: tointeger +==== func4-1.45 + + SELECT tointeger(9007199254740992); +---- +stmt 0 err 1 10 38 no such function: tointeger +==== func4-1.46 + + SELECT tointeger(9007199254740992 + 1); +---- +stmt 0 err 1 10 42 no such function: tointeger +==== func4-1.47 + + SELECT tointeger(9223372036854775807 - 1); +---- +stmt 0 err 1 10 45 no such function: tointeger +==== func4-1.48 + + SELECT tointeger(9223372036854775807); +---- +stmt 0 err 1 10 41 no such function: tointeger +==== func4-1.49 + + SELECT tointeger(9223372036854775807 + 1); +---- +stmt 0 err 1 12 47 no such function: tointeger +==== func4-1.50 + + SELECT tointeger(9223372036854775808 - 1); +---- +stmt 0 err 1 12 47 no such function: tointeger +==== func4-1.51 + + SELECT tointeger(9223372036854775808); +---- +stmt 0 err 1 12 43 no such function: tointeger +==== func4-1.52 + + SELECT tointeger(9223372036854775808 + 1); +---- +stmt 0 err 1 12 47 no such function: tointeger +==== func4-1.53 + + SELECT tointeger(18446744073709551616 - 1); +---- +stmt 0 err 1 10 46 no such function: tointeger +==== func4-1.54 + + SELECT tointeger(18446744073709551616); +---- +stmt 0 err 1 10 42 no such function: tointeger +==== func4-1.55 + + SELECT tointeger(18446744073709551616 + 1); +---- +stmt 0 err 1 10 46 no such function: tointeger +==== func4-2.1 + + SELECT toreal(NULL); +---- +stmt 0 err 1 12 25 no such function: toreal +==== func4-2.2 + + SELECT toreal(''); +---- +stmt 0 err 1 12 23 no such function: toreal +==== func4-2.3 + + SELECT toreal(' '); +---- +stmt 0 err 1 12 26 no such function: toreal +==== func4-2.4 + + SELECT toreal('1234'); +---- +stmt 0 err 1 12 27 no such function: toreal +==== func4-2.5 + + SELECT toreal(' 1234'); +---- +stmt 0 err 1 12 30 no such function: toreal +==== func4-2.6 + + SELECT toreal('bad'); +---- +stmt 0 err 1 12 26 no such function: toreal +==== func4-2.7 + + SELECT toreal('0xBAD'); +---- +stmt 0 err 1 12 28 no such function: toreal +==== func4-2.8 + + SELECT toreal('123BAD'); +---- +stmt 0 err 1 12 29 no such function: toreal +==== func4-2.9 + + SELECT toreal('0x123BAD'); +---- +stmt 0 err 1 12 31 no such function: toreal +==== func4-2.10 + + SELECT toreal('123NO'); +---- +stmt 0 err 1 12 28 no such function: toreal +==== func4-2.11 + + SELECT toreal('0x123NO'); +---- +stmt 0 err 1 12 30 no such function: toreal +==== func4-2.12 + + SELECT toreal('-0x1'); +---- +stmt 0 err 1 12 27 no such function: toreal +==== func4-2.13 + + SELECT toreal('-0x0'); +---- +stmt 0 err 1 12 27 no such function: toreal +==== func4-2.14 + + SELECT toreal('0x0'); +---- +stmt 0 err 1 12 26 no such function: toreal +==== func4-2.15 + + SELECT toreal('0x1'); +---- +stmt 0 err 1 12 26 no such function: toreal +==== func4-2.16 + + SELECT toreal(-1); +---- +stmt 0 err 1 12 23 no such function: toreal +==== func4-2.17 + + SELECT toreal(-0); +---- +stmt 0 err 1 12 23 no such function: toreal +==== func4-2.18 + + SELECT toreal(0); +---- +stmt 0 err 1 12 22 no such function: toreal +==== func4-2.19 + + SELECT toreal(1); +---- +stmt 0 err 1 12 22 no such function: toreal +==== func4-2.20 + + SELECT toreal(-1.79769313486232e308 - 1); +---- +stmt 0 err 1 12 46 no such function: toreal +==== func4-2.21 + + SELECT toreal(-1.79769313486232e308); +---- +stmt 0 err 1 12 42 no such function: toreal +==== func4-2.22 + + SELECT toreal(-1.79769313486232e308 + 1); +---- +stmt 0 err 1 12 46 no such function: toreal +==== func4-2.23 + + SELECT toreal(-9223372036854775808 - 1); +---- +stmt 0 err 1 12 45 no such function: toreal +==== func4-2.24 + + SELECT toreal(-9223372036854775808); +---- +stmt 0 err 1 12 41 no such function: toreal +==== func4-2.25 + + SELECT toreal(-9223372036854775808 + 1); +---- +stmt 0 err 1 14 47 no such function: toreal +==== func4-2.26 + + SELECT toreal(-9223372036854775807 - 1); +---- +stmt 0 err 1 12 45 no such function: toreal +==== func4-2.27 + + SELECT toreal(-9223372036854775807); +---- +stmt 0 err 1 14 43 no such function: toreal +==== func4-2.28 + + SELECT toreal(-9223372036854775807 + 1); +---- +stmt 0 err 1 14 47 no such function: toreal +==== func4-2.29 + + SELECT toreal(-2147483648 - 1); +---- +stmt 0 err 1 12 36 no such function: toreal +==== func4-2.30 + + SELECT toreal(-2147483648); +---- +stmt 0 err 1 12 32 no such function: toreal +==== func4-2.31 + + SELECT toreal(-2147483648 + 1); +---- +stmt 0 err 1 12 36 no such function: toreal +==== func4-2.32 + + SELECT toreal(2147483647 - 1); +---- +stmt 0 err 1 12 35 no such function: toreal +==== func4-2.33 + + SELECT toreal(2147483647); +---- +stmt 0 err 1 12 31 no such function: toreal +==== func4-2.34 + + SELECT toreal(2147483647 + 1); +---- +stmt 0 err 1 12 35 no such function: toreal +==== func4-2.35 + + SELECT toreal(9223372036854775807 - 1); +---- +stmt 0 err 1 14 46 no such function: toreal +==== func4-2.36 + + SELECT toreal(9223372036854775807); +---- +stmt 0 err 1 16 44 no such function: toreal +==== func4-2.37 + + SELECT toreal(9223372036854775807 + 1); +---- +stmt 0 err 1 12 44 no such function: toreal +==== func4-2.38 + + SELECT toreal(1.79769313486232e308 - 1); +---- +stmt 0 err 1 12 45 no such function: toreal +==== func4-2.39 + + SELECT toreal(1.79769313486232e308); +---- +stmt 0 err 1 12 41 no such function: toreal +==== func4-2.40 + + SELECT toreal(1.79769313486232e308 + 1); +---- +stmt 0 err 1 12 45 no such function: toreal +==== func4-2.41 + + SELECT toreal(4503599627370496 - 1); +---- +stmt 0 err 1 12 41 no such function: toreal +==== func4-2.42 + + SELECT toreal(4503599627370496); +---- +stmt 0 err 1 12 37 no such function: toreal +==== func4-2.43 + + SELECT toreal(4503599627370496 + 1); +---- +stmt 0 err 1 12 41 no such function: toreal +==== func4-2.44 + + SELECT toreal(9007199254740992 - 1); +---- +stmt 0 err 1 12 41 no such function: toreal +==== func4-2.45 + + SELECT toreal(9007199254740992); +---- +stmt 0 err 1 12 37 no such function: toreal +==== func4-2.46 + + SELECT toreal(9007199254740992 + 1); +---- +stmt 0 err 1 14 43 no such function: toreal +==== func4-2.46.dup1 + + SELECT toreal(9007199254740992 + 1); +---- +stmt 0 err 1 14 43 no such function: toreal +==== func4-2.47 + + SELECT toreal(9007199254740992 + 2); +---- +stmt 0 err 1 12 41 no such function: toreal +==== func4-2.48 + + SELECT toreal(tointeger(9223372036854775808) - 1); +---- +stmt 0 err 1 12 55 no such function: toreal +==== func4-2.49 + + SELECT toreal(tointeger(9223372036854775808)); +---- +stmt 0 err 1 21 53 no such function: tointeger +==== func4-2.50 + + SELECT toreal(tointeger(9223372036854775808) + 1); +---- +stmt 0 err 1 14 57 no such function: toreal +==== func4-2.51 + + SELECT toreal(tointeger(18446744073709551616) - 1); +---- +stmt 0 err 1 12 56 no such function: toreal +==== func4-2.52 + + SELECT toreal(tointeger(18446744073709551616)); +---- +stmt 0 err 1 19 52 no such function: tointeger +==== func4-2.53 + + SELECT toreal(tointeger(18446744073709551616) + 1); +---- +stmt 0 err 1 12 56 no such function: toreal +==== func4-3.1 + + CREATE TABLE t1( + x INTEGER CHECK(tointeger(x) IS NOT NULL) + ); +---- +stmt 0 err 1 44 76 no such function: tointeger +==== func4-3.2 + + INSERT INTO t1 (x) VALUES (NULL); +---- +stmt 0 err 1 -1 40 no such table: t1 +==== func4-3.3 + + INSERT INTO t1 (x) VALUES (NULL); +---- +stmt 0 err 1 -1 40 no such table: t1 +==== func4-3.4 + + INSERT INTO t1 (x) VALUES (''); +---- +stmt 0 err 1 -1 38 no such table: t1 +==== func4-3.5 + + INSERT INTO t1 (x) VALUES ('bad'); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== func4-3.6 + + INSERT INTO t1 (x) VALUES ('1234bad'); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== func4-3.7 + + INSERT INTO t1 (x) VALUES ('1234.56bad'); +---- +stmt 0 err 1 -1 48 no such table: t1 +==== func4-3.8 + + INSERT INTO t1 (x) VALUES (1234); +---- +stmt 0 err 1 -1 40 no such table: t1 +==== func4-3.9 + + INSERT INTO t1 (x) VALUES (1234.56); +---- +stmt 0 err 1 -1 43 no such table: t1 +==== func4-3.10 + + INSERT INTO t1 (x) VALUES ('1234'); +---- +stmt 0 err 1 -1 42 no such table: t1 +==== func4-3.11 + + INSERT INTO t1 (x) VALUES ('1234.56'); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== func4-3.12 + + INSERT INTO t1 (x) VALUES (ZEROBLOB(4)); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== func4-3.13 + + INSERT INTO t1 (x) VALUES (X''); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== func4-3.14 + + INSERT INTO t1 (x) VALUES (X'1234'); +---- +stmt 0 err 1 -1 43 no such table: t1 +==== func4-3.15 + + INSERT INTO t1 (x) VALUES (X'12345678'); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== func4-3.16 + + INSERT INTO t1 (x) VALUES ('1234.00'); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== func4-3.17 + + INSERT INTO t1 (x) VALUES (1234.00); +---- +stmt 0 err 1 -1 43 no such table: t1 +==== func4-3.18 + + INSERT INTO t1 (x) VALUES ('-9223372036854775809'); +---- +stmt 0 err 1 -1 58 no such table: t1 +==== func4-3.19 + + INSERT INTO t1 (x) VALUES (9223372036854775808); +---- +stmt 0 err 1 -1 57 no such table: t1 +==== func4-3.20 + + SELECT x FROM t1 WHERE x>0 ORDER BY x; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== func4-4.1 + + CREATE TABLE t2( + x REAL CHECK(toreal(x) IS NOT NULL) + ); +---- +stmt 0 err 1 45 76 no such function: toreal +==== func4-4.2 + + INSERT INTO t2 (x) VALUES (NULL); +---- +stmt 0 err 1 -1 42 no such table: t2 +==== func4-4.3 + + INSERT INTO t2 (x) VALUES (NULL); +---- +stmt 0 err 1 -1 42 no such table: t2 +==== func4-4.4 + + INSERT INTO t2 (x) VALUES (''); +---- +stmt 0 err 1 -1 40 no such table: t2 +==== func4-4.5 + + INSERT INTO t2 (x) VALUES ('bad'); +---- +stmt 0 err 1 -1 43 no such table: t2 +==== func4-4.6 + + INSERT INTO t2 (x) VALUES ('1234bad'); +---- +stmt 0 err 1 -1 47 no such table: t2 +==== func4-4.7 + + INSERT INTO t2 (x) VALUES ('1234.56bad'); +---- +stmt 0 err 1 -1 50 no such table: t2 +==== func4-4.8 + + INSERT INTO t2 (x) VALUES (1234); +---- +stmt 0 err 1 -1 42 no such table: t2 +==== func4-4.9 + + INSERT INTO t2 (x) VALUES (1234.56); +---- +stmt 0 err 1 -1 45 no such table: t2 +==== func4-4.10 + + INSERT INTO t2 (x) VALUES ('1234'); +---- +stmt 0 err 1 -1 44 no such table: t2 +==== func4-4.11 + + INSERT INTO t2 (x) VALUES ('1234.56'); +---- +stmt 0 err 1 -1 47 no such table: t2 +==== func4-4.12 + + INSERT INTO t2 (x) VALUES (ZEROBLOB(4)); +---- +stmt 0 err 1 -1 49 no such table: t2 +==== func4-4.13 + + INSERT INTO t2 (x) VALUES (X''); +---- +stmt 0 err 1 -1 41 no such table: t2 +==== func4-4.14 + + INSERT INTO t2 (x) VALUES (X'1234'); +---- +stmt 0 err 1 -1 45 no such table: t2 +==== func4-4.15 + + INSERT INTO t2 (x) VALUES (X'12345678'); +---- +stmt 0 err 1 -1 49 no such table: t2 +==== func4-4.16 + + SELECT x FROM t2 ORDER BY x; +---- +stmt 0 err 1 -1 35 no such table: t2 +==== func4-5.1 + + SELECT tointeger(toreal('1234')); +---- +stmt 0 err 1 22 38 no such function: toreal +==== func4-5.2 + + SELECT tointeger(toreal(-1)); +---- +stmt 0 err 1 22 34 no such function: toreal +==== func4-5.3 + + SELECT tointeger(toreal(-0)); +---- +stmt 0 err 1 22 34 no such function: toreal +==== func4-5.4 + + SELECT tointeger(toreal(0)); +---- +stmt 0 err 1 22 33 no such function: toreal +==== func4-5.5 + + SELECT tointeger(toreal(1)); +---- +stmt 0 err 1 22 33 no such function: toreal +==== func4-5.6 + + SELECT tointeger(toreal(-9223372036854775808 - 1)); +---- +stmt 0 err 1 22 56 no such function: toreal +==== func4-5.7 + + SELECT tointeger(toreal(-9223372036854775808)); +---- +stmt 0 err 1 22 52 no such function: toreal +==== func4-5.8 + + SELECT tointeger(toreal(-9223372036854775808 + 1)); +---- +stmt 0 err 1 24 58 no such function: toreal +==== func4-5.9 + + SELECT tointeger(toreal(-2147483648 - 1)); +---- +stmt 0 err 1 22 47 no such function: toreal +==== func4-5.10 + + SELECT tointeger(toreal(-2147483648)); +---- +stmt 0 err 1 22 43 no such function: toreal +==== func4-5.11 + + SELECT tointeger(toreal(-2147483648 + 1)); +---- +stmt 0 err 1 22 47 no such function: toreal +==== func4-5.12 + + SELECT tointeger(toreal(2147483647 - 1)); +---- +stmt 0 err 1 22 46 no such function: toreal +==== func4-5.13 + + SELECT tointeger(toreal(2147483647)); +---- +stmt 0 err 1 22 42 no such function: toreal +==== func4-5.14 + + SELECT tointeger(toreal(2147483647 + 1)); +---- +stmt 0 err 1 22 46 no such function: toreal +==== func4-5.15 + + SELECT tointeger(toreal(9223372036854775807 - 1)); +---- +stmt 0 err 1 22 55 no such function: toreal +==== func4-5.16 + + SELECT tointeger(toreal(9223372036854775807)); +---- +stmt 0 err 1 24 53 no such function: toreal +==== func4-5.17 + + SELECT tointeger(toreal(9223372036854775807 + 1)); +---- +stmt 0 err 1 24 57 no such function: toreal +==== func4-5.18 + + SELECT tointeger(toreal(4503599627370496 - 1)); +---- +stmt 0 err 1 22 52 no such function: toreal +==== func4-5.19 + + SELECT tointeger(toreal(4503599627370496)); +---- +stmt 0 err 1 22 48 no such function: toreal +==== func4-5.20 + + SELECT tointeger(toreal(4503599627370496 + 1)); +---- +stmt 0 err 1 22 52 no such function: toreal +==== func4-5.21 + + SELECT tointeger(toreal(9007199254740992 - 1)); +---- +stmt 0 err 1 22 52 no such function: toreal +==== func4-5.22 + + SELECT tointeger(toreal(9007199254740992)); +---- +stmt 0 err 1 22 48 no such function: toreal +==== func4-5.23 + + SELECT tointeger(toreal(9007199254740992 + 1)); +---- +stmt 0 err 1 24 54 no such function: toreal +==== func4-5.23.dup1 + + SELECT tointeger(toreal(9007199254740992 + 1)); +---- +stmt 0 err 1 24 54 no such function: toreal +==== func4-5.24 + + SELECT tointeger(toreal(9007199254740992 + 2)); +---- +stmt 0 err 1 22 52 no such function: toreal +==== func4-5.25 + + SELECT tointeger(toreal(9223372036854775808 - 1)); +---- +stmt 0 err 1 24 57 no such function: toreal +==== func4-5.26 + + SELECT tointeger(toreal(9223372036854775808)); +---- +stmt 0 err 1 24 53 no such function: toreal +==== func4-5.27 + + SELECT tointeger(toreal(9223372036854775808 + 1)); +---- +stmt 0 err 1 24 57 no such function: toreal +==== func4-5.28 + + SELECT tointeger(toreal(18446744073709551616 - 1)); +---- +stmt 0 err 1 22 56 no such function: toreal +==== func4-5.29 + + SELECT tointeger(toreal(18446744073709551616)); +---- +stmt 0 err 1 22 52 no such function: toreal +==== func4-5.30 + + SELECT tointeger(toreal(18446744073709551616 + 1)); +---- +stmt 0 err 1 22 56 no such function: toreal +==== func4-6.2.1 + + SELECT tointeger(x'0102030405060708'); +---- +stmt 0 err 1 10 41 no such function: tointeger +==== func4-6.2.2 + + SELECT tointeger(x'0807060504030201'); +---- +stmt 0 err 1 10 41 no such function: tointeger +==== func4-6.3.1 + + SELECT toreal(x'ffefffffffffffff'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.2 + + SELECT toreal(x'8010000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.3 + + SELECT toreal(x'c000000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.4 + + SELECT toreal(x'bff0000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.5 + + SELECT toreal(x'8000000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.6 + + SELECT toreal(x'0000000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.7 + + SELECT toreal(x'3ff0000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.8 + + SELECT toreal(x'4000000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.9 + + SELECT toreal(x'0010000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.10 + + SELECT toreal(x'7fefffffffffffff'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.11 + + SELECT toreal(x'8000000000000001'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.12 + + SELECT toreal(x'800fffffffffffff'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.13 + + SELECT toreal(x'0000000000000001'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.14 + + SELECT toreal(x'000fffffffffffff'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.15 + + SELECT toreal(x'fff0000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.16 + + SELECT toreal(x'7ff0000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.17 + + SELECT toreal(x'fff8000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.18 + + SELECT toreal(x'fff0000000000001'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.19 + + SELECT toreal(x'fff7ffffffffffff'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.20 + + SELECT toreal(x'7ff0000000000001'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.21 + + SELECT toreal(x'7ff7ffffffffffff'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.22 + + SELECT toreal(x'fff8000000000001'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.23 + + SELECT toreal(x'ffffffffffffffff'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.24 + + SELECT toreal(x'7ff8000000000000'); +---- +stmt 0 err 1 12 40 no such function: toreal +==== func4-6.3.25 + + SELECT toreal(x'7fffffffffffffff'); +---- +stmt 0 err 1 12 40 no such function: toreal diff --git a/parser/testdata/func5.metadata.json b/parser/testdata/func5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/func5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/func5.test b/parser/testdata/func5.test new file mode 100644 index 0000000..dad3165 --- /dev/null +++ b/parser/testdata/func5.test @@ -0,0 +1,40 @@ +==== func5-1.1 + + PRAGMA encoding=UTF16le; + CREATE TABLE t1(x,a,b,c); + INSERT INTO t1 VALUES(1,'ab','cd',1); + INSERT INTO t1 VALUES(2,'gh','ef',5); + INSERT INTO t1 VALUES(3,'pqr','fuzzy',99); + INSERT INTO t1 VALUES(4,'abcdefg','xy',22); + INSERT INTO t1 VALUES(5,'shoe','mayer',2953); + SELECT x FROM t1 WHERE c=instr('abcdefg',b) OR a='abcdefg' ORDER BY +x; +---- +stmt 0 ok +stmt 27 ok +stmt 55 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 135 no such table: t1 +stmt 135 err 1 -1 180 no such table: t1 +stmt 180 err 1 -1 226 no such table: t1 +stmt 226 err 1 -1 274 no such table: t1 +stmt 274 err 1 -1 348 no such table: t1 +==== func5-1.2 + + SELECT x FROM t1 WHERE a='abcdefg' OR c=instr('abcdefg',b) ORDER BY +x; +---- +stmt 0 err 1 -1 74 no such table: t1 +==== func5-2.1 + + CREATE TABLE t2(x,y); + INSERT INTO t2 VALUES(1,2),(3,4),(5,6),(7,8); + SELECT x, y FROM t2 WHERE x+5=5+x ORDER BY +x; +---- +stmt 0 ok +stmt 24 err 1 -1 72 no such table: t2 +stmt 72 err 1 -1 121 no such table: t2 +==== func5-2.2 + + SELECT x, y FROM t2 + WHERE x+counter1('hello')=counter1('hello')+x + ORDER BY +x; +---- +stmt 0 err 1 -1 87 no such table: t2 diff --git a/parser/testdata/func6.metadata.json b/parser/testdata/func6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/func6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/func6.test b/parser/testdata/func6.test new file mode 100644 index 0000000..6c58b61 --- /dev/null +++ b/parser/testdata/func6.test @@ -0,0 +1,78 @@ +==== func6-100 + + PRAGMA page_size=4096; + PRAGMA auto_vacuum=NONE; + CREATE TABLE t1(a,b,c,d); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b,c,d) SELECT printf('abc%03x',x), x, 1000-x, NULL FROM c; + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1bc ON t1(b,c); + CREATE TABLE t2(x TEXT PRIMARY KEY, y) WITHOUT ROWID; + INSERT INTO t2(x,y) SELECT a, b FROM t1; +---- +stmt 0 ok +stmt 25 ok +stmt 52 ok +stmt 80 err 1 -1 236 no such table: t1 +stmt 236 err 1 -1 265 no such table: main.t1 +stmt 265 err 1 -1 297 no such table: main.t1 +stmt 297 ok +stmt 353 err 1 -1 396 no such table: t2 +==== func6-105 + + SELECT sqlite_offset(d) FROM t1 ORDER BY rowid LIMIT 1; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== func6-110 + + SELECT offrec(sqlite_offset(d), a, b, c, d) FROM t1 ORDER BY rowid +---- +stmt 0 err 1 -1 70 no such table: t1 +==== func6-120 + + SELECT a, typeof(sqlite_offset(+a)) FROM t1 + ORDER BY rowid LIMIT 2; +---- +stmt 0 err 1 -1 73 no such table: t1 +==== func6-130 + + SELECT offrec(sqlite_offset(a), a, rowid) FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 64 no such table: t1 +==== func6-140 + + SELECT offrec(sqlite_offset(d), a, b, c, d) FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 66 no such table: t1 +==== func6-150 + + SELECT offrec(sqlite_offset(a), a, rowid), + offrec(sqlite_offset(d), a, b, c, d) + FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 113 no such table: t1 +==== func6-160 + + SELECT offrec(sqlite_offset(b), b, c, rowid), + offrec(sqlite_offset(c), b, c, rowid), + offrec(sqlite_offset(d), a, b, c, d) + FROM t1 + ORDER BY b +---- +stmt 0 err 1 -1 166 no such table: t1 +==== func6-200 + + SELECT offrec( sqlite_offset(y), x, y ) FROM t2 ORDER BY x +---- +stmt 0 err 1 -1 62 no such table: t2 +==== func6-300 + + CREATE TABLE t2(a INT, b INT PRIMARY KEY) WITHOUT ROWID; + CREATE INDEX x3 ON t2(b); + CREATE TABLE t1(a INT PRIMARY KEY, b TEXT); + SELECT * FROM t1 WHERE a IN (SELECT sqlite_offset(b) FROM t2); +---- +stmt 0 ok +stmt 59 err 1 -1 87 no such table: main.t2 +stmt 87 ok +stmt 133 err 1 -1 198 no such table: t1 diff --git a/parser/testdata/func7.metadata.json b/parser/testdata/func7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/func7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/func7.test b/parser/testdata/func7.test new file mode 100644 index 0000000..ed244bf --- /dev/null +++ b/parser/testdata/func7.test @@ -0,0 +1,360 @@ +==== func7-100 + + SELECT ceil(99.9), ceiling(-99.01), floor(17), floor(-17.99); +---- +stmt 0 err 1 10 64 no such function: ceil +==== func7-110 + + SELECT quote(ceil(NULL)), ceil('-99.99'); +---- +stmt 0 err 1 16 44 no such function: ceil +==== func7-200 + + SELECT round(ln(5),2), log(100.0), log(100), log(2,'256'); +---- +stmt 0 err 1 16 61 no such function: ln +==== func7-210 + + SELECT ln(-5), log(-5,100.0); +---- +stmt 0 err 1 10 32 no such function: ln +==== func7-pg-100 + + SELECT abs(-17.4) +---- +stmt 0 ok +==== func7-pg-110 + + SELECT ceil(42.2) +---- +stmt 0 err 1 10 21 no such function: ceil +==== func7-pg-120 + + SELECT ceil(-42.2) +---- +stmt 0 err 1 10 22 no such function: ceil +==== func7-pg-130 + + SELECT round(exp(1.0),7) +---- +stmt 0 err 1 16 28 no such function: exp +==== func7-pg-140 + + SELECT floor(42.8) +---- +stmt 0 err 1 10 22 no such function: floor +==== func7-pg-150 + + SELECT floor(-42.8) +---- +stmt 0 err 1 10 23 no such function: floor +==== func7-pg-160 + + SELECT round(ln(2.0),7) +---- +stmt 0 err 1 16 27 no such function: ln +==== func7-pg-170 + + SELECT log(100.0) +---- +stmt 0 err 1 10 21 no such function: log +==== func7-pg-180 + + SELECT log10(1000.0) +---- +stmt 0 err 1 10 24 no such function: log10 +==== func7-pg-181 + + SELECT format('%.30f', log10(100.0) ); +---- +stmt 0 err 1 26 41 no such function: log10 +==== func7-pg-182 + + SELECT format('%.30f', ln(exp(2.0)) ); +---- +stmt 0 err 1 29 41 no such function: exp +==== func7-pg-190 + + SELECT log(2.0, 64.0) +---- +stmt 0 err 1 10 25 no such function: log +==== func7-pg-200 + + SELECT mod(9,4); +---- +stmt 0 err 1 11 20 no such function: mod +==== func7-pg-210 + + SELECT round(pi(),7); +---- +stmt 0 err 1 17 25 no such function: pi +==== func7-pg-220 + + SELECT power(9,3); +---- +stmt 0 err 1 11 22 no such function: power +==== func7-pg-230 + + SELECT round(radians(45.0),7); +---- +stmt 0 err 1 17 34 no such function: radians +==== func7-pg-240 + + SELECT round(42.4); +---- +stmt 0 ok +==== func7-pg-250 + + SELECT round(42.4382,2); +---- +stmt 0 ok +==== func7-pg-260 + + SELECT sign(-8.4); +---- +stmt 0 ok +==== func7-pg-270 + + SELECT round( sqrt(2), 7); +---- +stmt 0 err 1 18 30 no such function: sqrt +==== func7-pg-280 + + SELECT trunc(42.8), trunc(-42.8); +---- +stmt 0 err 1 11 37 no such function: trunc +==== func7-pg-300 + + SELECT acos(1); +---- +stmt 0 err 1 11 19 no such function: acos +==== func7-pg-301 + + SELECT format('%f',degrees(acos(0.5))); +---- +stmt 0 err 1 31 43 no such function: acos +==== func7-pg-310 + + SELECT round( asin(1), 7); +---- +stmt 0 err 1 18 30 no such function: asin +==== func7-pg-311 + + SELECT format('%f',degrees( asin(0.5) )); +---- +stmt 0 err 1 32 45 no such function: asin +==== func7-pg-320 + + SELECT round( atan(1), 7); +---- +stmt 0 err 1 18 30 no such function: atan +==== func7-pg-321 + + SELECT degrees( atan(1) ); +---- +stmt 0 err 1 20 30 no such function: atan +==== func7-pg-330 + + SELECT round( atan2(1,0), 7); +---- +stmt 0 err 1 18 33 no such function: atan2 +==== func7-pg-331 + + SELECT degrees( atan2(1,0) ); +---- +stmt 0 err 1 20 33 no such function: atan2 +==== func7-pg-400 + + SELECT cos(0); +---- +stmt 0 err 1 11 18 no such function: cos +==== func7-pg-401 + + SELECT cos( radians(60.0) ); +---- +stmt 0 err 1 16 32 no such function: radians +==== func7-pg-400.dup1 + + SELECT cos(0); +---- +stmt 0 err 1 11 18 no such function: cos +==== func7-pg-410 + + SELECT round( sin(1), 7); +---- +stmt 0 err 1 18 29 no such function: sin +==== func7-pg-411 + + SELECT sin( radians(30) ); +---- +stmt 0 err 1 16 30 no such function: radians +==== func7-pg-420 + + SELECT round( tan(1), 7); +---- +stmt 0 err 1 18 29 no such function: tan +==== func7-pg-421 + + SELECT round(tan( radians(45) ),10); +---- +stmt 0 err 1 22 40 no such function: radians +==== func7-pg-500 + + SELECT round( sinh(1), 7); +---- +stmt 0 err 1 18 30 no such function: sinh +==== func7-pg-510 + + SELECT round( cosh(0), 7); +---- +stmt 0 err 1 18 30 no such function: cosh +==== func7-pg-520 + + SELECT round( tanh(1), 7); +---- +stmt 0 err 1 18 30 no such function: tanh +==== func7-pg-530 + + SELECT round( asinh(1), 7); +---- +stmt 0 err 1 18 31 no such function: asinh +==== func7-pg-540 + + SELECT round( acosh(1), 7); +---- +stmt 0 err 1 18 31 no such function: acosh +==== func7-pg-550 + + SELECT round( atanh(0.5), 7); +---- +stmt 0 err 1 18 33 no such function: atanh +==== func7-mysql-100 + + SELECT acos(1); +---- +stmt 0 err 1 11 19 no such function: acos +==== func7-mysql-110 + + SELECT acos(1.0001); +---- +stmt 0 err 1 11 24 no such function: acos +==== func7-mysql-120 + + SELECT round( acos(0.0), 7); +---- +stmt 0 err 1 18 32 no such function: acos +==== func7-mysql-130 + + SELECT round( asin(0.2), 7); +---- +stmt 0 err 1 18 32 no such function: asin +==== func7-mysql-140 + + SELECT asin('foo'); +---- +stmt 0 err 1 11 23 no such function: asin +==== func7-mysql-150 + + SELECT round( atan(2), 7), round( atan(-2), 7); +---- +stmt 0 err 1 18 51 no such function: atan +==== func7-mysql-160 + + SELECT round( atan2(-2,2), 7), round( atan2(pi(),0), 7); +---- +stmt 0 err 1 18 60 no such function: atan2 +==== func7-mysql-170 + + SELECT ceiling(1.23), ceiling(-1.23); +---- +stmt 0 err 1 11 41 no such function: ceiling +==== func7-mysql-180 + + SELECT cos(pi()); +---- +stmt 0 err 1 15 21 no such function: pi +==== func7-mysql-190 + + SELECT degrees(pi()), degrees(pi()/2); +---- +stmt 0 err 1 19 42 no such function: pi +==== func7-mysql-190.dup1 + + SELECT round( exp(2), 7), round( exp(-2), 7), exp(0); +---- +stmt 0 err 1 18 57 no such function: exp +==== func7-mysql-200 + + SELECT floor(1.23), floor(-1.23); +---- +stmt 0 err 1 11 37 no such function: floor +==== func7-mysql-210 + + SELECT round(ln(2),7), quote(ln(-2)); +---- +stmt 0 err 1 17 41 no such function: ln +==== func7-mysql-230 + + SELECT log(2,65536), log(10,100), quote(log(1,100)), quote(log(0,100)); +---- +stmt 0 err 1 11 75 no such function: log +==== func7-mysql-240 + + SELECT log2(65536), quote(log2(-100)), quote(log2(0)); +---- +stmt 0 err 1 11 58 no such function: log2 +==== func7-mysql-250 + + SELECT round(log10(2),7), log10(100), quote(log10(-100)); +---- +stmt 0 err 1 17 61 no such function: log10 +==== func7-mysql-260 + + SELECT mod(234,10), 253%7, mod(29,9), 29%9; +---- +stmt 0 err 1 11 47 no such function: mod +==== func7-mysql-270 + + SELECT mod(34.5,3); +---- +stmt 0 err 1 11 23 no such function: mod +==== func7-mysql-280 + + SELECT pow(2,2), pow(2,-2); +---- +stmt 0 err 1 11 31 no such function: pow +==== func7-mysql-281 + + SELECT power(2,2), power(2,-2); +---- +stmt 0 err 1 11 35 no such function: power +==== func7-mysql-290 + + SELECT round(radians(90),7); +---- +stmt 0 err 1 17 32 no such function: radians +==== func7-mysql-300 + + SELECT sign(-32), sign(0), sign(234); +---- +stmt 0 ok +==== func7-mysql-310 + + SELECT sin(pi()) BETWEEN -1.0e-15 AND 1.0e-15; +---- +stmt 0 err 1 15 50 no such function: pi +==== func7-mysql-320 + + SELECT sqrt(4), round(sqrt(20),7), quote(sqrt(-16)); +---- +stmt 0 err 1 11 56 no such function: sqrt +==== func7-mysql-330 + + SELECT tan(pi()) BETWEEN -1.0e-15 AND 1.0e-15; +---- +stmt 0 err 1 15 50 no such function: pi +==== func7-mysql-331 + + SELECT round(tan(pi()+1),7); +---- +stmt 0 err 1 17 32 no such function: tan diff --git a/parser/testdata/func8.metadata.json b/parser/testdata/func8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/func8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/func8.test b/parser/testdata/func8.test new file mode 100644 index 0000000..84f3c4a --- /dev/null +++ b/parser/testdata/func8.test @@ -0,0 +1,66 @@ +==== func8-100 + + CREATE TABLE cross(cross,full,inner,left,natural,outer,right); + CREATE TABLE full(cross,full,inner,left,natural,outer,right); + CREATE TABLE inner(cross,full,inner,left,natural,outer,right); + CREATE TABLE left(cross,full,inner,left,natural,outer,right); + CREATE TABLE natural(cross,full,inner,left,natural,outer,right); + CREATE TABLE outer(cross,full,inner,left,natural,outer,right); + CREATE TABLE right(cross,full,inner,left,natural,outer,right); + INSERT INTO cross VALUES(1,2,3,4,5,6,7); + INSERT INTO full VALUES(1,2,3,4,5,6,7); + INSERT INTO inner VALUES(1,2,3,4,5,6,7); + INSERT INTO left VALUES(1,2,3,4,5,6,7); + INSERT INTO natural VALUES(1,2,3,4,5,6,7); + INSERT INTO outer VALUES(1,2,3,4,5,6,7); + INSERT INTO right VALUES(1,2,3,4,5,6,7); +---- +stmt 0 ok +stmt 65 ok +stmt 129 ok +stmt 194 ok +stmt 258 ok +stmt 325 ok +stmt 390 ok +stmt 455 err 1 -1 498 no such table: cross +stmt 498 err 1 -1 540 no such table: full +stmt 540 err 1 -1 583 no such table: inner +stmt 583 err 1 -1 625 no such table: left +stmt 625 err 1 -1 670 no such table: natural +stmt 670 err 1 -1 713 no such table: outer +stmt 713 err 1 -1 756 no such table: right +==== func8-110 + + SELECT cross(cross,full,inner,left,natural,outer,right) FROM cross; +---- +stmt 0 err 1 -1 70 no such table: cross +==== func8-120 + + SELECT full(cross,full,inner,left,natural,outer,right) FROM full; +---- +stmt 0 err 1 -1 68 no such table: full +==== func8-130 + + SELECT inner(cross,full,inner,left,natural,outer,right) FROM inner; +---- +stmt 0 err 1 -1 70 no such table: inner +==== func8-140 + + SELECT left(cross,full,inner,left,natural,outer,right) FROM left; +---- +stmt 0 err 1 -1 68 no such table: left +==== func8-150 + + SELECT natural(cross,full,inner,left,natural,outer,right) FROM natural; +---- +stmt 0 err 1 -1 74 no such table: natural +==== func8-160 + + SELECT outer(cross,full,inner,left,natural,outer,right) FROM outer; +---- +stmt 0 err 1 -1 70 no such table: outer +==== func8-170 + + SELECT right(cross,full,inner,left,natural,outer,right) FROM right; +---- +stmt 0 err 1 -1 70 no such table: right diff --git a/parser/testdata/func9.metadata.json b/parser/testdata/func9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/func9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/func9.test b/parser/testdata/func9.test new file mode 100644 index 0000000..22f6c5e --- /dev/null +++ b/parser/testdata/func9.test @@ -0,0 +1,55 @@ +==== func9-100 + + SELECT concat('abc',123,null,'xyz'); +---- +stmt 0 ok +==== func9-110 + + SELECT typeof(concat(null)); +---- +stmt 0 ok +==== func9-120 + + SELECT concat(); +---- +stmt 0 err 1 10 19 wrong number of arguments to function concat() +==== func9-130 + + SELECT concat_ws(',',1,2,3,4,5,6,7,8,NULL,9,10,11,12); +---- +stmt 0 ok +==== func9-131 + + SELECT concat_ws(',',1,2,3,4,'',6,7,8,NULL,9,10,11,12); +---- +stmt 0 ok +==== func9-132 + + SELECT concat_ws(',','',2,3,4,'',6,7,8,NULL,9,10,11,12); +---- +stmt 0 ok +==== func9-133 + + SELECT concat_ws(',',NULL,'',3,4,'',6,7,8,NULL,9,10,11,12); +---- +stmt 0 ok +==== func9-134 + + SELECT concat_ws(',',NULL,NULL,NULL,'',3,4,'',6,7,8,NULL,9,10,11,12); +---- +stmt 0 ok +==== func9-140 + + SELECT concat_ws(NULL,1,2,3,4,5,6,7,8,NULL,9,10,11,12); +---- +stmt 0 ok +==== func9-150 + + SELECT concat_ws(); +---- +stmt 0 err 1 10 22 wrong number of arguments to function concat_ws() +==== func9-160 + + SELECT concat_ws(','); +---- +stmt 0 err 1 10 25 wrong number of arguments to function concat_ws() diff --git a/parser/testdata/fuzz-oss1.metadata.json b/parser/testdata/fuzz-oss1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fuzz-oss1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fuzz-oss1.test b/parser/testdata/fuzz-oss1.test new file mode 100644 index 0000000..a6f7671 --- /dev/null +++ b/parser/testdata/fuzz-oss1.test @@ -0,0 +1,5 @@ +==== fuzz-oss1-detach + + DETACH x IS #1; +---- +stmt 0 err 1 -1 18 near "#1": syntax error diff --git a/parser/testdata/fuzz.metadata.json b/parser/testdata/fuzz.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fuzz.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fuzz.test b/parser/testdata/fuzz.test new file mode 100644 index 0000000..c0ca8d4 --- /dev/null +++ b/parser/testdata/fuzz.test @@ -0,0 +1,195 @@ +==== fuzz-1.1 + + SELECT 'abc' LIKE X'ABCD'; +---- +stmt 0 ok +==== fuzz-1.2 + + SELECT 'abc' LIKE zeroblob(10); +---- +stmt 0 ok +==== fuzz-1.3 + + SELECT zeroblob(10) LIKE 'abc'; +---- +stmt 0 ok +==== fuzz-1.4 + + SELECT (- -21) % NOT (456 LIKE zeroblob(10)); +---- +stmt 0 ok +==== fuzz-1.5 + + SELECT (SELECT ( + SELECT (SELECT -2147483648) FROM (SELECT 1) ORDER BY 1 + )) +---- +stmt 0 ok +==== fuzz-1.6 + + SELECT 'abc', zeroblob(1) FROM (SELECT 1) ORDER BY 1 +---- +stmt 0 ok +==== fuzz-1.7 + + SELECT ( SELECT zeroblob(1000) FROM ( + SELECT * FROM (SELECT 'first') ORDER BY NOT 'in') + ) +---- +stmt 0 ok +==== fuzz-1.14.2 + + DROP TABLE abc; +---- +stmt 0 err 1 -1 20 no such table: abc +==== fuzz-1.15 + + SELECT hex(CAST(zeroblob(1000) AS integer)) +---- +stmt 0 ok +==== fuzz-1.16.1 + + CREATE TABLE abc(a, b, c); + CREATE TABLE def(a, b, c); + CREATE TABLE ghi(a, b, c); +---- +stmt 0 ok +stmt 31 ok +stmt 62 ok +==== fuzz-1.16.2 + + SELECT DISTINCT EXISTS( + SELECT 1 + FROM ( + SELECT C FROM (SELECT 1) + ) + WHERE (SELECT c) + ) + FROM abc +---- +stmt 0 err 1 -1 145 no such table: abc +==== fuzz-1.16.3 + + SELECT DISTINCT substr(-456 ISNULL,zeroblob(1000), EXISTS( + SELECT DISTINCT EXISTS( + SELECT DISTINCT b FROM abc + ORDER BY EXISTS ( + SELECT DISTINCT 2147483647 UNION ALL SELECT -2147483648 + ) ASC + ) + FROM ( + SELECT c, c FROM ( + SELECT 456, 'injection' ORDER BY 56.1 ASC, -56.1 DESC + ) + ) + GROUP BY (SELECT ALL (SELECT DISTINCT 'hardware')) + HAVING ( + SELECT DISTINCT c + FROM ( + SELECT ALL -2147483648, 'experiments' + ORDER BY -56.1 ASC, -56.1 DESC + ) + GROUP BY (SELECT DISTINCT 456) IN + (SELECT DISTINCT 'injection') NOT IN (SELECT ALL -456) + HAVING EXISTS ( + SELECT ALL 'injection' + ) + ) + UNION ALL + SELECT a IN ( + SELECT -2147483647 + UNION ALL + SELECT ALL 'injection' + ) + FROM sqlite_master + ) -- end EXISTS + ) /* end SUBSTR() */, c NOTNULL ISNULL + FROM abc + ORDER BY CAST(-56.1 AS blob) ASC +---- +stmt 0 err 1 -1 1121 no such table: abc +==== fuzz-1.16.4 + + DROP TABLE abc; DROP TABLE def; DROP TABLE ghi; +---- +stmt 0 err 1 -1 20 no such table: abc +stmt 20 err 1 -1 36 no such table: def +stmt 36 err 1 -1 52 no such table: ghi +==== fuzz-1.17 + + SELECT 'hardware', 56.1 NOTNULL, random()&0 + FROM ( + SELECT ALL lower(~ EXISTS ( + SELECT 1 NOT IN (SELECT ALL 1) + )), CAST(456 AS integer), -2147483647 + FROM ( + SELECT DISTINCT -456, CAST(1 AS integer) ISNULL + FROM (SELECT ALL 2147483647, typeof(2147483649)) + ) + ) + GROUP BY CAST(CAST('experiments' AS blob) AS blob) + HAVING random() +---- +stmt 0 ok +==== fuzz-1.18 + + SELECT -2147483649 << upper('fault' NOT IN ( + SELECT ALL ( + SELECT ALL -1 + ORDER BY -2147483649 + LIMIT ( + SELECT ALL ( + SELECT 0 EXCEPT SELECT DISTINCT 'experiments' ORDER BY 1 ASC + ) + ) + OFFSET EXISTS ( + SELECT ALL + (SELECT ALL -2147483648) NOT IN ( + SELECT ALL 123456789.1234567899 + ) IN (SELECT 2147483649) + FROM sqlite_master + ) NOT IN (SELECT ALL 'The') + ) + )) +---- +stmt 0 ok +==== fuzz-1.20 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== fuzz-3.1 + + CREATE TABLE abc(a, b, c); + CREATE TABLE def(a, b, c); + CREATE TABLE ghi(a, b, c); +---- +stmt 0 ok +stmt 31 ok +stmt 62 ok +==== fuzz-4.1 + + INSERT INTO abc VALUES(1, 2, 3); + INSERT INTO abc VALUES(4, 5, 6); + INSERT INTO abc VALUES(7, 8, 9); + INSERT INTO def VALUES(1, 2, 3); + INSERT INTO def VALUES(4, 5, 6); + INSERT INTO def VALUES(7, 8, 9); + INSERT INTO ghi VALUES(1, 2, 3); + INSERT INTO ghi VALUES(4, 5, 6); + INSERT INTO ghi VALUES(7, 8, 9); + CREATE INDEX abc_i ON abc(a, b, c); + CREATE INDEX def_i ON def(c, a, b); + CREATE INDEX ghi_i ON ghi(b, c, a); +---- +stmt 0 err 1 -1 37 no such table: abc +stmt 37 err 1 -1 74 no such table: abc +stmt 74 err 1 -1 111 no such table: abc +stmt 111 err 1 -1 148 no such table: def +stmt 148 err 1 -1 185 no such table: def +stmt 185 err 1 -1 222 no such table: def +stmt 222 err 1 -1 259 no such table: ghi +stmt 259 err 1 -1 296 no such table: ghi +stmt 296 err 1 -1 333 no such table: ghi +stmt 333 err 1 -1 373 no such table: main.abc +stmt 373 err 1 -1 413 no such table: main.def +stmt 413 err 1 -1 453 no such table: main.ghi diff --git a/parser/testdata/fuzz2.metadata.json b/parser/testdata/fuzz2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fuzz2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fuzz2.test b/parser/testdata/fuzz2.test new file mode 100644 index 0000000..c903810 --- /dev/null +++ b/parser/testdata/fuzz2.test @@ -0,0 +1,20 @@ +==== fuzz2-6.1 +SELECT n()AND+#0; +---- +stmt 0 err 1 -1 17 near "#0": syntax error +==== fuzz2-6.2 +SELECT strftime() +---- +stmt 0 ok +==== fuzz2-6.3 +DETACH(SELECT group_concat(q)); +---- +stmt 0 err 1 27 31 no such column: q +==== fuzz2-7.1 +select e.*,0 from(s,(L))e; +---- +stmt 0 err 1 -1 26 no such table: s +==== fuzz2-7.2 +SELECT c.* FROM (a,b) AS c +---- +stmt 0 err 1 -1 27 no such table: a diff --git a/parser/testdata/fuzz4.metadata.json b/parser/testdata/fuzz4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fuzz4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fuzz4.test b/parser/testdata/fuzz4.test new file mode 100644 index 0000000..afbfb97 --- /dev/null +++ b/parser/testdata/fuzz4.test @@ -0,0 +1,89 @@ +==== fuzz4-100 + + CREATE TABLE Table0 (Col0 NOT NULL DEFAULT (CURRENT_TIME IS 1 > 1)); + INSERT OR REPLACE INTO Table0 DEFAULT VALUES ; + SELECT * FROM Table0; +---- +stmt 0 ok +stmt 72 err 1 -1 121 no such table: Table0 +stmt 121 err 1 -1 145 no such table: Table0 +==== fuzz4-110 + + CREATE TABLE Table1( + Col0 TEXT DEFAULT (CASE WHEN 1 IS 3530822107858468864 + THEN 1 ELSE quote(1) IS 3530822107858468864 END) + ); + INSERT INTO Table1 DEFAULT VALUES; + SELECT * FROM Table1; +---- +stmt 0 ok +stmt 164 err 1 -1 201 no such table: Table1 +stmt 201 err 1 -1 225 no such table: Table1 +==== fuzz4-200 + + CREATE TABLE Table2a( + Col0 NOT NULL DEFAULT (CURRENT_TIME IS 1 IS NOT 1 > 1) + ); + INSERT OR REPLACE INTO Table2a DEFAULT VALUES; + SELECT * FROM Table2a; +---- +stmt 0 ok +stmt 94 err 1 -1 143 no such table: Table2a +stmt 143 err 1 -1 168 no such table: Table2a +==== fuzz4-210 + + CREATE TABLE Table2b (Col0 NOT NULL DEFAULT (CURRENT_TIME IS NOT FALSE)) ; + INSERT OR REPLACE INTO Table2b DEFAULT VALUES ; + SELECT * FROM Table2b; +---- +stmt 0 ok +stmt 80 err 1 -1 130 no such table: Table2b +stmt 130 err 1 -1 155 no such table: Table2b +==== fuzz4-300 + + CREATE TABLE Table3 (Col0 DEFAULT (CURRENT_TIMESTAMP BETWEEN 1 AND 1)); + INSERT INTO Table3 DEFAULT VALUES; + SELECT * FROM Table3; +---- +stmt 0 ok +stmt 74 err 1 -1 111 no such table: Table3 +stmt 111 err 1 -1 135 no such table: Table3 +==== fuzz4-400 + + CREATE TABLE Table4 (Col0 DEFAULT (1 BETWEEN CURRENT_TIMESTAMP AND 1)); + INSERT INTO Table4 DEFAULT VALUES; + SELECT * FROM Table4; +---- +stmt 0 ok +stmt 74 err 1 -1 111 no such table: Table4 +stmt 111 err 1 -1 135 no such table: Table4 +==== fuzz4-500 + + CREATE TABLE Table5 (Col0 DEFAULT (1 BETWEEN 1 AND CURRENT_TIMESTAMP)); + INSERT INTO Table5 DEFAULT VALUES; + SELECT * FROM Table5; +---- +stmt 0 ok +stmt 74 err 1 -1 111 no such table: Table5 +stmt 111 err 1 -1 135 no such table: Table5 +==== fuzz4-600 + + CREATE TEMPORARY TABLE Table6( + Col0 DEFAULT (CASE x'5d' WHEN 1 THEN + CASE CURRENT_TIMESTAMP WHEN 1 THEN 1 ELSE 1 END + ELSE CASE WHEN 1 THEN FALSE END END ) + ); + INSERT INTO temp.Table6 DEFAULT VALUES ; + SELECT * FROM Table6; +---- +stmt 0 ok +stmt 182 err 1 -1 225 no such table: temp.Table6 +stmt 225 err 1 -1 249 no such table: Table6 +==== fuzz4-610 + + WITH TableX AS (SELECT DISTINCT * ORDER BY 1 , 1 COLLATE RTRIM) + DELETE FROM Table6 WHERE Col0 || +8388608 ; + SELECT * FROM Table6; +---- +stmt 0 err 1 -1 119 no such table: Table6 +stmt 119 err 1 -1 143 no such table: Table6 diff --git a/parser/testdata/fuzzer1.metadata.json b/parser/testdata/fuzzer1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fuzzer1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fuzzer1.test b/parser/testdata/fuzzer1.test new file mode 100644 index 0000000..6166fd2 --- /dev/null +++ b/parser/testdata/fuzzer1.test @@ -0,0 +1,2999 @@ +==== fuzzer1-1.1 + + CREATE VIRTUAL TABLE f USING fuzzer; +---- +stmt 0 ok +==== fuzzer1-1.2 + + CREATE VIRTUAL TABLE f USING fuzzer(one, two); +---- +stmt 0 ok +==== fuzzer1-1.3 + + CREATE VIRTUAL TABLE f USING fuzzer(nosuchtable); +---- +stmt 0 ok +==== fuzzer1-1.4 + + CREATE TEMP TABLE nosuchtable(a, b, c, d); + CREATE VIRTUAL TABLE f USING fuzzer(nosuchtable); +---- +stmt 0 ok +stmt 45 ok +==== fuzzer1-1.5 + + DROP TABLE temp.nosuchtable; + CREATE TABLE nosuchtable(a, b, c, d); + CREATE VIRTUAL TABLE temp.f USING fuzzer(nosuchtable); +---- +stmt 0 err 1 -1 31 no such table: temp.nosuchtable +stmt 31 ok +stmt 71 ok +==== fuzzer1-1.6 + + DROP TABLE IF EXISTS f_rules; + CREATE TABLE f_rules(a, b, c); + CREATE VIRTUAL TABLE f USING fuzzer(f_rules); +---- +stmt 0 ok +stmt 32 ok +stmt 65 ok +==== fuzzer1-1.7 + + DROP TABLE IF EXISTS f_rules; + CREATE TABLE f_rules(a, b, c, d, e); + CREATE VIRTUAL TABLE f USING fuzzer(f_rules); +---- +stmt 0 ok +stmt 32 ok +stmt 71 ok +==== fuzzer1-2.1 + + CREATE TABLE f1_rules(ruleset DEFAULT 0, cfrom, cto, cost); + INSERT INTO f1_rules(cfrom, cto, cost) VALUES('e','a',1); + INSERT INTO f1_rules(cfrom, cto, cost) VALUES('a','e',10); + INSERT INTO f1_rules(cfrom, cto, cost) VALUES('e','o',100); + + CREATE VIRTUAL TABLE f1 USING fuzzer(f1_rules); +---- +stmt 0 ok +stmt 62 err 1 -1 122 no such table: f1_rules +stmt 122 err 1 -1 183 no such table: f1_rules +stmt 183 err 1 -1 245 no such table: f1_rules +stmt 245 ok +==== fuzzer1-2.1.dup1 + + SELECT word, distance FROM f1 WHERE word MATCH 'abcde' +---- +stmt 0 err 1 -1 60 no such table: f1 +==== fuzzer1-2.4 + + INSERT INTO f1_rules(ruleset, cfrom, cto, cost) VALUES(1,'b','x',1); + INSERT INTO f1_rules(ruleset, cfrom, cto, cost) VALUES(1,'d','y',10); + INSERT INTO f1_rules(ruleset, cfrom, cto, cost) VALUES(1,'y','z',100); + + DROP TABLE f1; + CREATE VIRTUAL TABLE f1 USING fuzzer(f1_rules); +---- +stmt 0 err 1 -1 71 no such table: f1_rules +stmt 71 err 1 -1 143 no such table: f1_rules +stmt 143 err 1 -1 216 no such table: f1_rules +stmt 216 err 1 -1 234 no such table: f1 +stmt 234 ok +==== fuzzer1-2.5 + + SELECT word, distance FROM f1 WHERE word MATCH 'abcde' +---- +stmt 0 err 1 -1 58 no such table: f1 +==== fuzzer1-2.6 + + SELECT word, distance FROM f1 WHERE word MATCH 'abcde' AND ruleset=0 +---- +stmt 0 err 1 -1 72 no such table: f1 +==== fuzzer1-2.7 + + SELECT word, distance FROM f1 WHERE word MATCH 'abcde' AND ruleset=1 +---- +stmt 0 err 1 -1 72 no such table: f1 +==== fuzzer1-1.14 +INSERT INTO f1 VALUES(1) +---- +stmt 0 err 1 -1 25 no such table: f1 +==== fuzzer1-1.15 +DELETE FROM f1 +---- +stmt 0 err 1 -1 15 no such table: f1 +==== fuzzer1-1.16 +UPDATE f1 SET rowid=rowid+10000 +---- +stmt 0 err 1 -1 32 no such table: f1 +==== fuzzer1-2.0 + + -- costs based on English letter frequencies + CREATE TEMP TABLE f2_rules(ruleset DEFAULT 0, cFrom, cTo, cost); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('a','e',24); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('a','o',47); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('a','u',50); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('e','a',23); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('e','i',33); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('e','o',37); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('i','e',33); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('i','y',33); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('o','a',41); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('o','e',46); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('o','u',57); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('u','o',58); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('y','i',33); + + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('t','th',70); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('th','t',66); + + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('a','',84); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','b',106); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('b','',106); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','c',94); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('c','',94); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','d',89); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('d','',89); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','e',83); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('e','',83); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','f',97); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('f','',97); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','g',99); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('g','',99); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','h',86); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('h','',86); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','i',85); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('i','',85); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','j',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('j','',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','k',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('k','',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','l',89); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('l','',89); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','m',96); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('m','',96); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','n',85); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('n','',85); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','o',85); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('o','',85); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','p',100); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('p','',100); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','q',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('q','',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','r',86); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('r','',86); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','s',86); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('s','',86); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','t',84); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('t','',84); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','u',94); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('u','',94); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','v',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('v','',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','w',96); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('w','',96); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','x',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('x','',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','y',100); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('y','',100); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('','z',120); + INSERT INTO f2_rules(cFrom,cTo,cost) VALUES('z','',120); + INSERT INTO f2_rules(ruleset,cFrom,cTo,cost) + SELECT 1, cFrom, cTo, 100 FROM f2_rules WHERE ruleset=0; + INSERT INTO f2_rules(ruleset,cFrom,cTo,cost) + SELECT 2, cFrom, cTo, 200-cost FROM f2_rules WHERE ruleset=0; + INSERT INTO f2_rules(ruleset,cFrom,cTo,cost) + SELECT 3, cFrom, cTo, cost FROM f2_rules WHERE ruleset=0; + INSERT INTO f2_rules(ruleset,cFrom,cTo,cost) + VALUES(3, 'mallard','duck',50), + (3, 'duck', 'mallard', 50), + (3, 'rock', 'stone', 50), + (3, 'stone', 'rock', 50); + + + CREATE VIRTUAL TABLE temp.f2 USING fuzzer(f2_rules); + + -- Street names for the 28269 ZIPCODE. + -- + CREATE TEMP TABLE streetname(n TEXT UNIQUE); + INSERT INTO streetname VALUES('abbotsinch'); + INSERT INTO streetname VALUES('abbottsgate'); + INSERT INTO streetname VALUES('abbywood'); + INSERT INTO streetname VALUES('abner'); + INSERT INTO streetname VALUES('acacia ridge'); + INSERT INTO streetname VALUES('acorn creek'); + INSERT INTO streetname VALUES('acorn forest'); + INSERT INTO streetname VALUES('adel'); + INSERT INTO streetname VALUES('ainslie'); + INSERT INTO streetname VALUES('airways'); + INSERT INTO streetname VALUES('alabaster'); + INSERT INTO streetname VALUES('alba'); + INSERT INTO streetname VALUES('albertine'); + INSERT INTO streetname VALUES('alden glen'); + INSERT INTO streetname VALUES('alderson'); + INSERT INTO streetname VALUES('allen'); + INSERT INTO streetname VALUES('allen a brown'); + INSERT INTO streetname VALUES('allness glen'); + INSERT INTO streetname VALUES('aloysia'); + INSERT INTO streetname VALUES('alpine'); + INSERT INTO streetname VALUES('alwyn'); + INSERT INTO streetname VALUES('amaranthus'); + INSERT INTO streetname VALUES('amber glen'); + INSERT INTO streetname VALUES('amber leigh way'); + INSERT INTO streetname VALUES('amber meadows'); + INSERT INTO streetname VALUES('amberway'); + INSERT INTO streetname VALUES('ame'); + INSERT INTO streetname VALUES('amesbury hill'); + INSERT INTO streetname VALUES('anderson'); + INSERT INTO streetname VALUES('andrew thomas'); + INSERT INTO streetname VALUES('anduin falls'); + INSERT INTO streetname VALUES('ankeny'); + INSERT INTO streetname VALUES('annandale'); + INSERT INTO streetname VALUES('annbick'); + INSERT INTO streetname VALUES('antelope'); + INSERT INTO streetname VALUES('anzack'); + INSERT INTO streetname VALUES('apple glen'); + INSERT INTO streetname VALUES('applevalley'); + INSERT INTO streetname VALUES('appley mead'); + INSERT INTO streetname VALUES('aragorn'); + INSERT INTO streetname VALUES('arbor creek'); + INSERT INTO streetname VALUES('arbor day'); + INSERT INTO streetname VALUES('arbor meadows'); + INSERT INTO streetname VALUES('arbor spring'); + INSERT INTO streetname VALUES('arborview'); + INSERT INTO streetname VALUES('arklow'); + INSERT INTO streetname VALUES('armitage'); + INSERT INTO streetname VALUES('arvin'); + INSERT INTO streetname VALUES('ash cove'); + INSERT INTO streetname VALUES('ashford leigh'); + INSERT INTO streetname VALUES('ashmont'); + INSERT INTO streetname VALUES('atlas'); + INSERT INTO streetname VALUES('atwater'); + INSERT INTO streetname VALUES('auburn hill'); + INSERT INTO streetname VALUES('aulton link'); + INSERT INTO streetname VALUES('austin dekota'); + INSERT INTO streetname VALUES('austin knoll'); + INSERT INTO streetname VALUES('auten'); + INSERT INTO streetname VALUES('autumn harvest'); + INSERT INTO streetname VALUES('autumn oak'); + INSERT INTO streetname VALUES('autumn ridge'); + INSERT INTO streetname VALUES('avalon forest'); + INSERT INTO streetname VALUES('avalon loop'); + INSERT INTO streetname VALUES('avon farm'); + INSERT INTO streetname VALUES('avonhurst'); + INSERT INTO streetname VALUES('avonlea'); + INSERT INTO streetname VALUES('aynrand'); + INSERT INTO streetname VALUES('azure valley'); + INSERT INTO streetname VALUES('baberton'); + INSERT INTO streetname VALUES('baffin'); + INSERT INTO streetname VALUES('baggins'); + INSERT INTO streetname VALUES('balata'); + INSERT INTO streetname VALUES('ballantray'); + INSERT INTO streetname VALUES('ballston'); + INSERT INTO streetname VALUES('balsam tree'); + INSERT INTO streetname VALUES('bambi'); + INSERT INTO streetname VALUES('banwell'); + INSERT INTO streetname VALUES('barbee'); + INSERT INTO streetname VALUES('barefoot forest'); + INSERT INTO streetname VALUES('barnview'); + INSERT INTO streetname VALUES('baroda'); + INSERT INTO streetname VALUES('barson'); + INSERT INTO streetname VALUES('baskerville'); + INSERT INTO streetname VALUES('battle creek'); + INSERT INTO streetname VALUES('baucom'); + INSERT INTO streetname VALUES('bay pines'); + INSERT INTO streetname VALUES('beaker'); + INSERT INTO streetname VALUES('beard'); + INSERT INTO streetname VALUES('beardsley'); + INSERT INTO streetname VALUES('bearoak'); + INSERT INTO streetname VALUES('beauvista'); + INSERT INTO streetname VALUES('beaver creek'); + INSERT INTO streetname VALUES('beaver hollow'); + INSERT INTO streetname VALUES('bedlington'); + INSERT INTO streetname VALUES('beech cove'); + INSERT INTO streetname VALUES('beech crest'); + INSERT INTO streetname VALUES('beith'); + INSERT INTO streetname VALUES('bell glen'); + INSERT INTO streetname VALUES('bellmore'); + INSERT INTO streetname VALUES('bells mill'); + INSERT INTO streetname VALUES('bellville'); + INSERT INTO streetname VALUES('belmar place'); + INSERT INTO streetname VALUES('bembridge'); + INSERT INTO streetname VALUES('bennett neely'); + INSERT INTO streetname VALUES('bentgrass run'); + INSERT INTO streetname VALUES('benthaven'); + INSERT INTO streetname VALUES('bernardy'); + INSERT INTO streetname VALUES('bernbrook shadow'); + INSERT INTO streetname VALUES('berrybrook'); + INSERT INTO streetname VALUES('berrybush'); + INSERT INTO streetname VALUES('berwick'); + INSERT INTO streetname VALUES('betterton'); + INSERT INTO streetname VALUES('bickham'); + INSERT INTO streetname VALUES('billingham'); + INSERT INTO streetname VALUES('birchcroft'); + INSERT INTO streetname VALUES('birchstone'); + INSERT INTO streetname VALUES('birdwell'); + INSERT INTO streetname VALUES('bisaner'); + INSERT INTO streetname VALUES('bitterbush'); + INSERT INTO streetname VALUES('bitterroot'); + INSERT INTO streetname VALUES('black fox'); + INSERT INTO streetname VALUES('black maple'); + INSERT INTO streetname VALUES('black trail'); + INSERT INTO streetname VALUES('blackbird'); + INSERT INTO streetname VALUES('blake a dare'); + INSERT INTO streetname VALUES('blasdell'); + INSERT INTO streetname VALUES('blue aster'); + INSERT INTO streetname VALUES('blue finch'); + INSERT INTO streetname VALUES('blue lilac'); + INSERT INTO streetname VALUES('blue sky'); + INSERT INTO streetname VALUES('blue tick'); + INSERT INTO streetname VALUES('bob beatty'); + INSERT INTO streetname VALUES('bobcat'); + INSERT INTO streetname VALUES('bolton'); + INSERT INTO streetname VALUES('boomerang'); + INSERT INTO streetname VALUES('boulder'); + INSERT INTO streetname VALUES('boxer'); + INSERT INTO streetname VALUES('boxmeer'); + INSERT INTO streetname VALUES('brachnell view'); + INSERT INTO streetname VALUES('bradford lake'); + INSERT INTO streetname VALUES('bradwell'); + INSERT INTO streetname VALUES('brady'); + INSERT INTO streetname VALUES('braids bend'); + INSERT INTO streetname VALUES('bralers'); + INSERT INTO streetname VALUES('brandie glen'); + INSERT INTO streetname VALUES('brandy ridge'); + INSERT INTO streetname VALUES('brandybuck'); + INSERT INTO streetname VALUES('branthurst'); + INSERT INTO streetname VALUES('brassy creek'); + INSERT INTO streetname VALUES('brathay'); + INSERT INTO streetname VALUES('brawer farm'); + INSERT INTO streetname VALUES('breezy morn'); + INSERT INTO streetname VALUES('brenda'); + INSERT INTO streetname VALUES('brenly'); + INSERT INTO streetname VALUES('brenock'); + INSERT INTO streetname VALUES('brianwood'); + INSERT INTO streetname VALUES('briar rose'); + INSERT INTO streetname VALUES('briarcrest'); + INSERT INTO streetname VALUES('briarthorne'); + INSERT INTO streetname VALUES('brick dust'); + INSERT INTO streetname VALUES('bridgepath'); + INSERT INTO streetname VALUES('bridle ridge'); + INSERT INTO streetname VALUES('briggs'); + INSERT INTO streetname VALUES('brightleaf'); + INSERT INTO streetname VALUES('brigstock'); + INSERT INTO streetname VALUES('broad ridge'); + INSERT INTO streetname VALUES('brock'); + INSERT INTO streetname VALUES('brockhampton'); + INSERT INTO streetname VALUES('broken pine'); + INSERT INTO streetname VALUES('brompton'); + INSERT INTO streetname VALUES('brook falls'); + INSERT INTO streetname VALUES('brookings'); + INSERT INTO streetname VALUES('browne'); + INSERT INTO streetname VALUES('brownes creek'); + INSERT INTO streetname VALUES('brownes ferry'); + INSERT INTO streetname VALUES('brownestone view'); + INSERT INTO streetname VALUES('brumit'); + INSERT INTO streetname VALUES('bryn athyn'); + INSERT INTO streetname VALUES('buck'); + INSERT INTO streetname VALUES('bucklebury'); + INSERT INTO streetname VALUES('buckminister'); + INSERT INTO streetname VALUES('buckspring'); + INSERT INTO streetname VALUES('burch'); + INSERT INTO streetname VALUES('burch shire'); + INSERT INTO streetname VALUES('burkston'); + INSERT INTO streetname VALUES('burmith'); + INSERT INTO streetname VALUES('burnaby'); + INSERT INTO streetname VALUES('butterfly'); + INSERT INTO streetname VALUES('cabin creek'); + INSERT INTO streetname VALUES('cairns mill'); + INSERT INTO streetname VALUES('callender'); + INSERT INTO streetname VALUES('cambellton'); + INSERT INTO streetname VALUES('cambridge bay'); + INSERT INTO streetname VALUES('canary'); + INSERT INTO streetname VALUES('canbury'); + INSERT INTO streetname VALUES('candle leaf'); + INSERT INTO streetname VALUES('canipe'); + INSERT INTO streetname VALUES('canipe farm'); + INSERT INTO streetname VALUES('cannon'); + INSERT INTO streetname VALUES('canopy'); + INSERT INTO streetname VALUES('canso'); + INSERT INTO streetname VALUES('canterbrook'); + INSERT INTO streetname VALUES('cardinal glen'); + INSERT INTO streetname VALUES('cardinal point'); + INSERT INTO streetname VALUES('cardinals nest'); + INSERT INTO streetname VALUES('carlota'); + INSERT INTO streetname VALUES('carmathen'); + INSERT INTO streetname VALUES('carver'); + INSERT INTO streetname VALUES('carver pond'); + INSERT INTO streetname VALUES('casa loma'); + INSERT INTO streetname VALUES('caselton'); + INSERT INTO streetname VALUES('castello'); + INSERT INTO streetname VALUES('castle ridge'); + INSERT INTO streetname VALUES('castleglen'); + INSERT INTO streetname VALUES('castlemaine'); + INSERT INTO streetname VALUES('cavett'); + INSERT INTO streetname VALUES('caymus'); + INSERT INTO streetname VALUES('cedardale ridge'); + INSERT INTO streetname VALUES('cedarhurst'); + INSERT INTO streetname VALUES('cemkey way'); + INSERT INTO streetname VALUES('cerise'); + INSERT INTO streetname VALUES('chaceview'); + INSERT INTO streetname VALUES('chadsworth'); + INSERT INTO streetname VALUES('chadwell'); + INSERT INTO streetname VALUES('champions crest'); + INSERT INTO streetname VALUES('chandler haven'); + INSERT INTO streetname VALUES('chapel crossing'); + INSERT INTO streetname VALUES('chapel ridge'); + INSERT INTO streetname VALUES('charles crawford'); + INSERT INTO streetname VALUES('charminster'); + INSERT INTO streetname VALUES('chasewind'); + INSERT INTO streetname VALUES('chavel'); + INSERT INTO streetname VALUES('chelsea jade'); + INSERT INTO streetname VALUES('chestnut knoll'); + INSERT INTO streetname VALUES('cheviot'); + INSERT INTO streetname VALUES('chickadee'); + INSERT INTO streetname VALUES('chidley'); + INSERT INTO streetname VALUES('chimney ridge'); + INSERT INTO streetname VALUES('chimney springs'); + INSERT INTO streetname VALUES('chinaberry'); + INSERT INTO streetname VALUES('chinemist'); + INSERT INTO streetname VALUES('chinquapin'); + INSERT INTO streetname VALUES('chiswell'); + INSERT INTO streetname VALUES('christenbury'); + INSERT INTO streetname VALUES('christenbury hills'); + INSERT INTO streetname VALUES('churchill'); + INSERT INTO streetname VALUES('cindy'); + INSERT INTO streetname VALUES('cinnamon teal'); + INSERT INTO streetname VALUES('citadel'); + INSERT INTO streetname VALUES('clare olivia'); + INSERT INTO streetname VALUES('clarke creek'); + INSERT INTO streetname VALUES('clarke ridge'); + INSERT INTO streetname VALUES('clear day'); + INSERT INTO streetname VALUES('clear stream'); + INSERT INTO streetname VALUES('cleve brown'); + INSERT INTO streetname VALUES('cliff cameron'); + INSERT INTO streetname VALUES('cliffvale'); + INSERT INTO streetname VALUES('cloverside'); + INSERT INTO streetname VALUES('clymer'); + INSERT INTO streetname VALUES('coatbridge'); + INSERT INTO streetname VALUES('cobble glen'); + INSERT INTO streetname VALUES('cochran farm'); + INSERT INTO streetname VALUES('cochrane'); + INSERT INTO streetname VALUES('coleridge'); + INSERT INTO streetname VALUES('coleshire'); + INSERT INTO streetname VALUES('collins'); + INSERT INTO streetname VALUES('colvard'); + INSERT INTO streetname VALUES('colvard park'); + INSERT INTO streetname VALUES('condor'); + INSERT INTO streetname VALUES('conner ridge'); + INSERT INTO streetname VALUES('connery'); + INSERT INTO streetname VALUES('cooper run'); + INSERT INTO streetname VALUES('coopers ridge'); + INSERT INTO streetname VALUES('copper hill'); + INSERT INTO streetname VALUES('coppermine'); + INSERT INTO streetname VALUES('cornelia'); + INSERT INTO streetname VALUES('corner'); + INSERT INTO streetname VALUES('cornerstone'); + INSERT INTO streetname VALUES('cottage oaks'); + INSERT INTO streetname VALUES('cougar'); + INSERT INTO streetname VALUES('coves end'); + INSERT INTO streetname VALUES('cragland'); + INSERT INTO streetname VALUES('crail'); + INSERT INTO streetname VALUES('cranberry nook'); + INSERT INTO streetname VALUES('crawford brook'); + INSERT INTO streetname VALUES('crayton'); + INSERT INTO streetname VALUES('creek breeze'); + INSERT INTO streetname VALUES('crescent ridge'); + INSERT INTO streetname VALUES('crescent view'); + INSERT INTO streetname VALUES('cresta'); + INSERT INTO streetname VALUES('crestfield'); + INSERT INTO streetname VALUES('crestland'); + INSERT INTO streetname VALUES('crestwick'); + INSERT INTO streetname VALUES('crisfield'); + INSERT INTO streetname VALUES('crisp wood'); + INSERT INTO streetname VALUES('croft haven'); + INSERT INTO streetname VALUES('crofton springs'); + INSERT INTO streetname VALUES('cross'); + INSERT INTO streetname VALUES('crosspoint center'); + INSERT INTO streetname VALUES('crownvista'); + INSERT INTO streetname VALUES('crystal arms'); + INSERT INTO streetname VALUES('crystal crest'); + INSERT INTO streetname VALUES('crystal leaf'); + INSERT INTO streetname VALUES('cunningham park'); + INSERT INTO streetname VALUES('cypress pond'); + INSERT INTO streetname VALUES('daffodil'); + INSERT INTO streetname VALUES('daisyfield'); + INSERT INTO streetname VALUES('dalecrest'); + INSERT INTO streetname VALUES('dannelly park'); + INSERT INTO streetname VALUES('daphne'); + INSERT INTO streetname VALUES('daria'); + INSERT INTO streetname VALUES('dartmouth'); + INSERT INTO streetname VALUES('datha'); + INSERT INTO streetname VALUES('david cox'); + INSERT INTO streetname VALUES('davis'); + INSERT INTO streetname VALUES('davis crossing'); + INSERT INTO streetname VALUES('davis lake'); + INSERT INTO streetname VALUES('davis ridge'); + INSERT INTO streetname VALUES('dawnmist'); + INSERT INTO streetname VALUES('daybreak'); + INSERT INTO streetname VALUES('dearmon'); + INSERT INTO streetname VALUES('dearview'); + INSERT INTO streetname VALUES('deaton hill'); + INSERT INTO streetname VALUES('deer cross'); + INSERT INTO streetname VALUES('deerton'); + INSERT INTO streetname VALUES('degrasse'); + INSERT INTO streetname VALUES('delamere'); + INSERT INTO streetname VALUES('dellfield'); + INSERT INTO streetname VALUES('dellinger'); + INSERT INTO streetname VALUES('demington'); + INSERT INTO streetname VALUES('denmeade'); + INSERT INTO streetname VALUES('derita'); + INSERT INTO streetname VALUES('derita woods'); + INSERT INTO streetname VALUES('deruyter'); + INSERT INTO streetname VALUES('dervish'); + INSERT INTO streetname VALUES('devas'); + INSERT INTO streetname VALUES('devon croft'); + INSERT INTO streetname VALUES('devonbridge'); + INSERT INTO streetname VALUES('devongate'); + INSERT INTO streetname VALUES('devonhill'); + INSERT INTO streetname VALUES('dewmorn'); + INSERT INTO streetname VALUES('distribution center'); + INSERT INTO streetname VALUES('dominion crest'); + INSERT INTO streetname VALUES('dominion green'); + INSERT INTO streetname VALUES('dominion village'); + INSERT INTO streetname VALUES('dorshire'); + INSERT INTO streetname VALUES('double creek crossing'); + INSERT INTO streetname VALUES('dow'); + INSERT INTO streetname VALUES('downfield wood'); + INSERT INTO streetname VALUES('downing creek'); + INSERT INTO streetname VALUES('driscol'); + INSERT INTO streetname VALUES('driwood'); + INSERT INTO streetname VALUES('dry brook'); + INSERT INTO streetname VALUES('dumont'); + INSERT INTO streetname VALUES('dunblane'); + INSERT INTO streetname VALUES('dunfield'); + INSERT INTO streetname VALUES('dunoon'); + INSERT INTO streetname VALUES('dunslow'); + INSERT INTO streetname VALUES('dunstaff'); + INSERT INTO streetname VALUES('durham'); + INSERT INTO streetname VALUES('durston'); + INSERT INTO streetname VALUES('dusty cedar'); + INSERT INTO streetname VALUES('dusty trail'); + INSERT INTO streetname VALUES('dutchess'); + INSERT INTO streetname VALUES('duxford'); + INSERT INTO streetname VALUES('eagle creek'); + INSERT INTO streetname VALUES('eagles field'); + INSERT INTO streetname VALUES('eargle'); + INSERT INTO streetname VALUES('earlswood'); + INSERT INTO streetname VALUES('early mist'); + INSERT INTO streetname VALUES('earthenware'); + INSERT INTO streetname VALUES('eastfield park'); + INSERT INTO streetname VALUES('eastfield village'); + INSERT INTO streetname VALUES('easy'); + INSERT INTO streetname VALUES('eben'); + INSERT INTO streetname VALUES('edgepine'); + INSERT INTO streetname VALUES('edgewier'); + INSERT INTO streetname VALUES('edinburgh'); + INSERT INTO streetname VALUES('edinmeadow'); + INSERT INTO streetname VALUES('edmonton'); + INSERT INTO streetname VALUES('edwin jones'); + INSERT INTO streetname VALUES('elberon'); + INSERT INTO streetname VALUES('elderslie'); + INSERT INTO streetname VALUES('elementary view'); + INSERT INTO streetname VALUES('elendil'); + INSERT INTO streetname VALUES('elizabeth'); + INSERT INTO streetname VALUES('elm cove'); + INSERT INTO streetname VALUES('elrond'); + INSERT INTO streetname VALUES('elsenham'); + INSERT INTO streetname VALUES('elven'); + INSERT INTO streetname VALUES('emma lynn'); + INSERT INTO streetname VALUES('english setter'); + INSERT INTO streetname VALUES('enoch'); + INSERT INTO streetname VALUES('equipment'); + INSERT INTO streetname VALUES('ernest russell'); + INSERT INTO streetname VALUES('ernie'); + INSERT INTO streetname VALUES('esmeralda'); + INSERT INTO streetname VALUES('evergreen hollow'); + INSERT INTO streetname VALUES('eversfield'); + INSERT INTO streetname VALUES('ewen'); + INSERT INTO streetname VALUES('ewert cut'); + INSERT INTO streetname VALUES('exbury'); + INSERT INTO streetname VALUES('fair grounds park'); + INSERT INTO streetname VALUES('fairbourne'); + INSERT INTO streetname VALUES('fairchase'); + INSERT INTO streetname VALUES('faircreek'); + INSERT INTO streetname VALUES('fairglen'); + INSERT INTO streetname VALUES('fairlea'); + INSERT INTO streetname VALUES('fairmead'); + INSERT INTO streetname VALUES('fairmeadows'); + INSERT INTO streetname VALUES('fairstone'); + INSERT INTO streetname VALUES('fairvista'); + INSERT INTO streetname VALUES('fairway point'); + INSERT INTO streetname VALUES('falconcrest'); + INSERT INTO streetname VALUES('falls ridge'); + INSERT INTO streetname VALUES('falmouth'); + INSERT INTO streetname VALUES('far west'); + INSERT INTO streetname VALUES('farlow'); + INSERT INTO streetname VALUES('farris wheel'); + INSERT INTO streetname VALUES('fawndale'); + INSERT INTO streetname VALUES('feather bend'); + INSERT INTO streetname VALUES('fernledge'); + INSERT INTO streetname VALUES('fernmoss'); + INSERT INTO streetname VALUES('ferrell commons'); + INSERT INTO streetname VALUES('fieldstone'); + INSERT INTO streetname VALUES('fillian'); + INSERT INTO streetname VALUES('fincher'); + INSERT INTO streetname VALUES('foggy meadow'); + INSERT INTO streetname VALUES('fordyce'); + INSERT INTO streetname VALUES('forest grove'); + INSERT INTO streetname VALUES('forest path'); + INSERT INTO streetname VALUES('forestridge commons'); + INSERT INTO streetname VALUES('forestrock'); + INSERT INTO streetname VALUES('fortunes ridge'); + INSERT INTO streetname VALUES('founders club'); + INSERT INTO streetname VALUES('fountaingrass'); + INSERT INTO streetname VALUES('fox chase'); + INSERT INTO streetname VALUES('fox glen'); + INSERT INTO streetname VALUES('fox hill'); + INSERT INTO streetname VALUES('fox point'); + INSERT INTO streetname VALUES('fox trot'); + INSERT INTO streetname VALUES('foxbriar'); + INSERT INTO streetname VALUES('frank little'); + INSERT INTO streetname VALUES('franzia'); + INSERT INTO streetname VALUES('french woods'); + INSERT INTO streetname VALUES('frostmoor'); + INSERT INTO streetname VALUES('frye'); + INSERT INTO streetname VALUES('furlong'); + INSERT INTO streetname VALUES('galena view'); + INSERT INTO streetname VALUES('gallery pointe'); + INSERT INTO streetname VALUES('gammon'); + INSERT INTO streetname VALUES('garden grove'); + INSERT INTO streetname VALUES('gardendale'); + INSERT INTO streetname VALUES('garganey'); + INSERT INTO streetname VALUES('garnet field'); + INSERT INTO streetname VALUES('garrison'); + INSERT INTO streetname VALUES('garvin'); + INSERT INTO streetname VALUES('garvis'); + INSERT INTO streetname VALUES('gaskill'); + INSERT INTO streetname VALUES('gemstone'); + INSERT INTO streetname VALUES('gibbon'); + INSERT INTO streetname VALUES('gibbon terrace'); + INSERT INTO streetname VALUES('gibbons link'); + INSERT INTO streetname VALUES('gillman'); + INSERT INTO streetname VALUES('gladwood'); + INSERT INTO streetname VALUES('gladwyne'); + INSERT INTO streetname VALUES('glamorgan'); + INSERT INTO streetname VALUES('glaze'); + INSERT INTO streetname VALUES('glen brook'); + INSERT INTO streetname VALUES('glen cove'); + INSERT INTO streetname VALUES('glen hope'); + INSERT INTO streetname VALUES('glen manor'); + INSERT INTO streetname VALUES('glen olden'); + INSERT INTO streetname VALUES('glencairn'); + INSERT INTO streetname VALUES('glendock'); + INSERT INTO streetname VALUES('glenolden'); + INSERT INTO streetname VALUES('glenover'); + INSERT INTO streetname VALUES('glenshire'); + INSERT INTO streetname VALUES('glenstone'); + INSERT INTO streetname VALUES('gold dust'); + INSERT INTO streetname VALUES('golden pond'); + INSERT INTO streetname VALUES('goldenblush'); + INSERT INTO streetname VALUES('goldenfield'); + INSERT INTO streetname VALUES('goose landing'); + INSERT INTO streetname VALUES('gorham gate'); + INSERT INTO streetname VALUES('grabill'); + INSERT INTO streetname VALUES('graburns ford'); + INSERT INTO streetname VALUES('graham'); + INSERT INTO streetname VALUES('grahamson'); + INSERT INTO streetname VALUES('granard'); + INSERT INTO streetname VALUES('grand teton'); + INSERT INTO streetname VALUES('grande heights'); + INSERT INTO streetname VALUES('grandeur'); + INSERT INTO streetname VALUES('granite creek'); + INSERT INTO streetname VALUES('grasset'); + INSERT INTO streetname VALUES('graypark'); + INSERT INTO streetname VALUES('grays ridge'); + INSERT INTO streetname VALUES('great bear'); + INSERT INTO streetname VALUES('green clover'); + INSERT INTO streetname VALUES('green hedge'); + INSERT INTO streetname VALUES('green meadow'); + INSERT INTO streetname VALUES('green pasture'); + INSERT INTO streetname VALUES('greene'); + INSERT INTO streetname VALUES('greenloch'); + INSERT INTO streetname VALUES('greenock ridge'); + INSERT INTO streetname VALUES('greenware'); + INSERT INTO streetname VALUES('greenway village'); + INSERT INTO streetname VALUES('grenelefe village'); + INSERT INTO streetname VALUES('grey dogwood'); + INSERT INTO streetname VALUES('greyhound'); + INSERT INTO streetname VALUES('greylock ridge'); + INSERT INTO streetname VALUES('grosbeak'); + INSERT INTO streetname VALUES('grove'); + INSERT INTO streetname VALUES('groveton'); + INSERT INTO streetname VALUES('groveview'); + INSERT INTO streetname VALUES('hackberry creek'); + INSERT INTO streetname VALUES('hackberry grove'); + INSERT INTO streetname VALUES('hackett'); + INSERT INTO streetname VALUES('haddington'); + INSERT INTO streetname VALUES('hagler'); + INSERT INTO streetname VALUES('halcott'); + INSERT INTO streetname VALUES('half dome'); + INSERT INTO streetname VALUES('hallam'); + INSERT INTO streetname VALUES('hamilton russell'); + INSERT INTO streetname VALUES('hampton place'); + INSERT INTO streetname VALUES('hankins'); + INSERT INTO streetname VALUES('harburn forest'); + INSERT INTO streetname VALUES('harringham'); + INSERT INTO streetname VALUES('harrington woods'); + INSERT INTO streetname VALUES('harris corners'); + INSERT INTO streetname VALUES('harris cove'); + INSERT INTO streetname VALUES('harris glen'); + INSERT INTO streetname VALUES('harris hill'); + INSERT INTO streetname VALUES('harris oak'); + INSERT INTO streetname VALUES('harris pointe'); + INSERT INTO streetname VALUES('harris pond'); + INSERT INTO streetname VALUES('harris ridge'); + INSERT INTO streetname VALUES('harris technology'); + INSERT INTO streetname VALUES('harris woods'); + INSERT INTO streetname VALUES('hartfield downs'); + INSERT INTO streetname VALUES('hattie little'); + INSERT INTO streetname VALUES('hatwynn'); + INSERT INTO streetname VALUES('hawkins'); + INSERT INTO streetname VALUES('hawksnest'); + INSERT INTO streetname VALUES('haybridge'); + INSERT INTO streetname VALUES('hayden'); + INSERT INTO streetname VALUES('hazelcroft'); + INSERT INTO streetname VALUES('hazlitt'); + INSERT INTO streetname VALUES('hazy valley'); + INSERT INTO streetname VALUES('hearst'); + INSERT INTO streetname VALUES('heathcrest'); + INSERT INTO streetname VALUES('heathcroft'); + INSERT INTO streetname VALUES('hedge maple'); + INSERT INTO streetname VALUES('hedgecrest'); + INSERT INTO streetname VALUES('hedingham'); + INSERT INTO streetname VALUES('heman'); + INSERT INTO streetname VALUES('henderson'); + INSERT INTO streetname VALUES('henderson oaks'); + INSERT INTO streetname VALUES('henderson valley'); + INSERT INTO streetname VALUES('hendry'); + INSERT INTO streetname VALUES('heritage hills'); + INSERT INTO streetname VALUES('heritage woods'); + INSERT INTO streetname VALUES('heron cove'); + INSERT INTO streetname VALUES('heron glen'); + INSERT INTO streetname VALUES('hewitt'); + INSERT INTO streetname VALUES('hey rock'); + INSERT INTO streetname VALUES('heysham'); + INSERT INTO streetname VALUES('hickory cove'); + INSERT INTO streetname VALUES('hidden meadow'); + INSERT INTO streetname VALUES('high glen'); + INSERT INTO streetname VALUES('high laurel'); + INSERT INTO streetname VALUES('high valley'); + INSERT INTO streetname VALUES('highcroft'); + INSERT INTO streetname VALUES('highland'); + INSERT INTO streetname VALUES('highland commons'); + INSERT INTO streetname VALUES('highland creek'); + INSERT INTO streetname VALUES('highland glen'); + INSERT INTO streetname VALUES('highland park'); + INSERT INTO streetname VALUES('highlander'); + INSERT INTO streetname VALUES('highstream'); + INSERT INTO streetname VALUES('hilltop'); + INSERT INTO streetname VALUES('hobbitshire'); + INSERT INTO streetname VALUES('hoffman'); + INSERT INTO streetname VALUES('hogans way'); + INSERT INTO streetname VALUES('holbert'); + INSERT INTO streetname VALUES('hollow ridge'); + INSERT INTO streetname VALUES('holly vista'); + INSERT INTO streetname VALUES('hollywood'); + INSERT INTO streetname VALUES('hoover'); + INSERT INTO streetname VALUES('hopkins'); + INSERT INTO streetname VALUES('horace mann'); + INSERT INTO streetname VALUES('hornbeam'); + INSERT INTO streetname VALUES('horse pasture'); + INSERT INTO streetname VALUES('hosta'); + INSERT INTO streetname VALUES('howard'); + INSERT INTO streetname VALUES('hubbard'); + INSERT INTO streetname VALUES('hubbard falls'); + INSERT INTO streetname VALUES('hubbard woods'); + INSERT INTO streetname VALUES('hucks'); + INSERT INTO streetname VALUES('hunters creek'); + INSERT INTO streetname VALUES('hunters pointe'); + INSERT INTO streetname VALUES('hunters spring'); + INSERT INTO streetname VALUES('hunters whip'); + INSERT INTO streetname VALUES('huntmeadow'); + INSERT INTO streetname VALUES('hutchison mcdonald'); + INSERT INTO streetname VALUES('ingleton'); + INSERT INTO streetname VALUES('insdale'); + INSERT INTO streetname VALUES('interstate 85 service'); + INSERT INTO streetname VALUES('iola'); + INSERT INTO streetname VALUES('iredell'); + INSERT INTO streetname VALUES('iron brigade'); + INSERT INTO streetname VALUES('irwin valley'); + INSERT INTO streetname VALUES('irwin wood'); + INSERT INTO streetname VALUES('ivy brook'); + INSERT INTO streetname VALUES('ivy ridge'); + INSERT INTO streetname VALUES('jack russell'); + INSERT INTO streetname VALUES('jackson'); + INSERT INTO streetname VALUES('jacob martin'); + INSERT INTO streetname VALUES('jamison'); + INSERT INTO streetname VALUES('jane'); + INSERT INTO streetname VALUES('jaspar crest'); + INSERT INTO streetname VALUES('jessica'); + INSERT INTO streetname VALUES('jimmy oehler'); + INSERT INTO streetname VALUES('jocelyn'); + INSERT INTO streetname VALUES('johnston mill'); + INSERT INTO streetname VALUES('johnston oehler'); + INSERT INTO streetname VALUES('judal'); + INSERT INTO streetname VALUES('junipeous'); + INSERT INTO streetname VALUES('juniper'); + INSERT INTO streetname VALUES('juniperus'); + INSERT INTO streetname VALUES('kalispell'); + INSERT INTO streetname VALUES('karylsturn'); + INSERT INTO streetname VALUES('katelyn'); + INSERT INTO streetname VALUES('kayron'); + INSERT INTO streetname VALUES('keaton'); + INSERT INTO streetname VALUES('keble'); + INSERT INTO streetname VALUES('keels'); + INSERT INTO streetname VALUES('keith'); + INSERT INTO streetname VALUES('keithwood'); + INSERT INTO streetname VALUES('kelden walker'); + INSERT INTO streetname VALUES('kelsey emma'); + INSERT INTO streetname VALUES('kendrick'); + INSERT INTO streetname VALUES('kenmont'); + INSERT INTO streetname VALUES('kennerly cove'); + INSERT INTO streetname VALUES('kenninghall'); + INSERT INTO streetname VALUES('kent village'); + INSERT INTO streetname VALUES('kestral ridge'); + INSERT INTO streetname VALUES('kestrel'); + INSERT INTO streetname VALUES('kilmartin'); + INSERT INTO streetname VALUES('kilty'); + INSERT INTO streetname VALUES('kinglet'); + INSERT INTO streetname VALUES('kingsland'); + INSERT INTO streetname VALUES('kingsnorth'); + INSERT INTO streetname VALUES('kinsmore'); + INSERT INTO streetname VALUES('kirkgard'); + INSERT INTO streetname VALUES('kirkmont'); + INSERT INTO streetname VALUES('knightsgate'); + INSERT INTO streetname VALUES('kobuk'); + INSERT INTO streetname VALUES('kotlik'); + INSERT INTO streetname VALUES('kotz'); + INSERT INTO streetname VALUES('kyndall walk'); + INSERT INTO streetname VALUES('laborde'); + INSERT INTO streetname VALUES('lady bank'); + INSERT INTO streetname VALUES('lagrande'); + INSERT INTO streetname VALUES('lake'); + INSERT INTO streetname VALUES('lakeridge commons'); + INSERT INTO streetname VALUES('lakeview'); + INSERT INTO streetname VALUES('lakewood edge'); + INSERT INTO streetname VALUES('lakota'); + INSERT INTO streetname VALUES('lambrook'); + INSERT INTO streetname VALUES('lampkin'); + INSERT INTO streetname VALUES('lampkin park'); + INSERT INTO streetname VALUES('langham'); + INSERT INTO streetname VALUES('lanzerac manor'); + INSERT INTO streetname VALUES('larkmead forest'); + INSERT INTO streetname VALUES('lattice'); + INSERT INTO streetname VALUES('laurel crest'); + INSERT INTO streetname VALUES('laurel ridge'); + INSERT INTO streetname VALUES('laurel run'); + INSERT INTO streetname VALUES('laurenfield'); + INSERT INTO streetname VALUES('laveta'); + INSERT INTO streetname VALUES('lazy day'); + INSERT INTO streetname VALUES('leawood run'); + INSERT INTO streetname VALUES('lee marie'); + INSERT INTO streetname VALUES('legacy lake'); + INSERT INTO streetname VALUES('legacy park'); + INSERT INTO streetname VALUES('legato'); + INSERT INTO streetname VALUES('legolas'); + INSERT INTO streetname VALUES('leigh glen'); + INSERT INTO streetname VALUES('lence'); + INSERT INTO streetname VALUES('lenox hill'); + INSERT INTO streetname VALUES('leonine'); + INSERT INTO streetname VALUES('leslie'); + INSERT INTO streetname VALUES('lester hill'); + INSERT INTO streetname VALUES('levisey'); + INSERT INTO streetname VALUES('liberty bell'); + INSERT INTO streetname VALUES('linden berry'); + INSERT INTO streetname VALUES('lisbon'); + INSERT INTO streetname VALUES('little stoney'); + INSERT INTO streetname VALUES('livengood'); + INSERT INTO streetname VALUES('lochway'); + INSERT INTO streetname VALUES('lockman'); + INSERT INTO streetname VALUES('loganville'); + INSERT INTO streetname VALUES('lone tree'); + INSERT INTO streetname VALUES('long creek park'); + INSERT INTO streetname VALUES('long forest'); + INSERT INTO streetname VALUES('looking glass'); + INSERT INTO streetname VALUES('lookout point'); + INSERT INTO streetname VALUES('lowen'); + INSERT INTO streetname VALUES('lusby'); + INSERT INTO streetname VALUES('lyleton'); + INSERT INTO streetname VALUES('lynn lee'); + INSERT INTO streetname VALUES('lynnewood glen'); + INSERT INTO streetname VALUES('machrie'); + INSERT INTO streetname VALUES('mackinac'); + INSERT INTO streetname VALUES('maddox'); + INSERT INTO streetname VALUES('madison park'); + INSERT INTO streetname VALUES('mallard'); + INSERT INTO streetname VALUES('mallard cove'); + INSERT INTO streetname VALUES('mallard forest'); + INSERT INTO streetname VALUES('mallard grove'); + INSERT INTO streetname VALUES('mallard hill'); + INSERT INTO streetname VALUES('mallard park'); + INSERT INTO streetname VALUES('mallard ridge'); + INSERT INTO streetname VALUES('mallard view'); + INSERT INTO streetname VALUES('manbey'); + INSERT INTO streetname VALUES('manning'); + INSERT INTO streetname VALUES('mantario'); + INSERT INTO streetname VALUES('maple'); + INSERT INTO streetname VALUES('maple cove'); + INSERT INTO streetname VALUES('maple park'); + INSERT INTO streetname VALUES('marathon hill'); + INSERT INTO streetname VALUES('marbury'); + INSERT INTO streetname VALUES('marett'); + INSERT INTO streetname VALUES('marigold'); + INSERT INTO streetname VALUES('marionwood'); + INSERT INTO streetname VALUES('marshbank'); + INSERT INTO streetname VALUES('mason'); + INSERT INTO streetname VALUES('mayapple'); + INSERT INTO streetname VALUES('maylandia'); + INSERT INTO streetname VALUES('mayspring'); + INSERT INTO streetname VALUES('mcadam'); + INSERT INTO streetname VALUES('mcchesney'); + INSERT INTO streetname VALUES('mccurdy'); + INSERT INTO streetname VALUES('mcgrath'); + INSERT INTO streetname VALUES('mckendree'); + INSERT INTO streetname VALUES('mclaughlin'); + INSERT INTO streetname VALUES('mctaggart'); + INSERT INTO streetname VALUES('meadow green'); + INSERT INTO streetname VALUES('meadow knoll'); + INSERT INTO streetname VALUES('meadow post'); + INSERT INTO streetname VALUES('meadowmont'); + INSERT INTO streetname VALUES('meadowmont view'); + INSERT INTO streetname VALUES('meadowview hills'); + INSERT INTO streetname VALUES('melshire'); + INSERT INTO streetname VALUES('melstrand'); + INSERT INTO streetname VALUES('mentone'); + INSERT INTO streetname VALUES('meridale crossing'); + INSERT INTO streetname VALUES('merion hills'); + INSERT INTO streetname VALUES('merlot'); + INSERT INTO streetname VALUES('mersham'); + INSERT INTO streetname VALUES('metromont'); + INSERT INTO streetname VALUES('metromont industrial'); + INSERT INTO streetname VALUES('michaw'); + INSERT INTO streetname VALUES('milhaven'); + INSERT INTO streetname VALUES('milhof'); + INSERT INTO streetname VALUES('millstream ridge'); + INSERT INTO streetname VALUES('mineral ridge'); + INSERT INTO streetname VALUES('mint thistle'); + INSERT INTO streetname VALUES('mintleaf'); + INSERT INTO streetname VALUES('mintvale'); + INSERT INTO streetname VALUES('misty'); + INSERT INTO streetname VALUES('misty arbor'); + INSERT INTO streetname VALUES('misty creek'); + INSERT INTO streetname VALUES('misty oaks'); + INSERT INTO streetname VALUES('misty wood'); + INSERT INTO streetname VALUES('mitzi deborah'); + INSERT INTO streetname VALUES('mobile'); + INSERT INTO streetname VALUES('molly elizabeth'); + INSERT INTO streetname VALUES('monmouth'); + INSERT INTO streetname VALUES('montrose'); + INSERT INTO streetname VALUES('moonlight'); + INSERT INTO streetname VALUES('moose'); + INSERT INTO streetname VALUES('morning dew'); + INSERT INTO streetname VALUES('morningsong'); + INSERT INTO streetname VALUES('morningview'); + INSERT INTO streetname VALUES('morsey'); + INSERT INTO streetname VALUES('moss glen'); + INSERT INTO streetname VALUES('mossy bank'); + INSERT INTO streetname VALUES('motor sport'); + INSERT INTO streetname VALUES('mountain laurel'); + INSERT INTO streetname VALUES('mourning dove'); + INSERT INTO streetname VALUES('mozart'); + INSERT INTO streetname VALUES('munsing'); + INSERT INTO streetname VALUES('murray'); + INSERT INTO streetname VALUES('nathan'); + INSERT INTO streetname VALUES('netherhall'); + INSERT INTO streetname VALUES('netherton'); + INSERT INTO streetname VALUES('neuhoff'); + INSERT INTO streetname VALUES('nevin'); + INSERT INTO streetname VALUES('nevin brook'); + INSERT INTO streetname VALUES('nevin glen'); + INSERT INTO streetname VALUES('nevin place'); + INSERT INTO streetname VALUES('new england'); + INSERT INTO streetname VALUES('new house'); + INSERT INTO streetname VALUES('newbary'); + INSERT INTO streetname VALUES('newchurch'); + INSERT INTO streetname VALUES('newfane'); + INSERT INTO streetname VALUES('newgard'); + INSERT INTO streetname VALUES('nicholas'); + INSERT INTO streetname VALUES('nicole'); + INSERT INTO streetname VALUES('nobility'); + INSERT INTO streetname VALUES('norcroft'); + INSERT INTO streetname VALUES('northridge'); + INSERT INTO streetname VALUES('northside'); + INSERT INTO streetname VALUES('northwoods business'); + INSERT INTO streetname VALUES('norway'); + INSERT INTO streetname VALUES('nottinghill'); + INSERT INTO streetname VALUES('numenore'); + INSERT INTO streetname VALUES('nyewood'); + INSERT INTO streetname VALUES('oak'); + INSERT INTO streetname VALUES('oak cove'); + INSERT INTO streetname VALUES('oak pasture'); + INSERT INTO streetname VALUES('oakburn'); + INSERT INTO streetname VALUES('oakwinds'); + INSERT INTO streetname VALUES('oakwood'); + INSERT INTO streetname VALUES('obrien'); + INSERT INTO streetname VALUES('ocala'); + INSERT INTO streetname VALUES('old bridge'); + INSERT INTO streetname VALUES('old fox'); + INSERT INTO streetname VALUES('old potters'); + INSERT INTO streetname VALUES('old statesville'); + INSERT INTO streetname VALUES('old steine'); + INSERT INTO streetname VALUES('old stoney creek'); + INSERT INTO streetname VALUES('old sugar creek'); + INSERT INTO streetname VALUES('old timber'); + INSERT INTO streetname VALUES('old wagon'); + INSERT INTO streetname VALUES('old willow'); + INSERT INTO streetname VALUES('oldenway'); + INSERT INTO streetname VALUES('oneida'); + INSERT INTO streetname VALUES('ontario'); + INSERT INTO streetname VALUES('oriole'); + INSERT INTO streetname VALUES('orofino'); + INSERT INTO streetname VALUES('orr'); + INSERT INTO streetname VALUES('osage'); + INSERT INTO streetname VALUES('osceola'); + INSERT INTO streetname VALUES('osprey knoll'); + INSERT INTO streetname VALUES('oxford hill'); + INSERT INTO streetname VALUES('painted fern'); + INSERT INTO streetname VALUES('painted pony'); + INSERT INTO streetname VALUES('paisley'); + INSERT INTO streetname VALUES('pale moss'); + INSERT INTO streetname VALUES('palladium'); + INSERT INTO streetname VALUES('palmutum'); + INSERT INTO streetname VALUES('palustris'); + INSERT INTO streetname VALUES('panglemont'); + INSERT INTO streetname VALUES('panther'); + INSERT INTO streetname VALUES('panthersville'); + INSERT INTO streetname VALUES('paper whites'); + INSERT INTO streetname VALUES('park'); + INSERT INTO streetname VALUES('parker green'); + INSERT INTO streetname VALUES('parkhouse'); + INSERT INTO streetname VALUES('passour ridge'); + INSERT INTO streetname VALUES('pasture view'); + INSERT INTO streetname VALUES('patricia ann'); + INSERT INTO streetname VALUES('patton'); + INSERT INTO streetname VALUES('patton ridge'); + INSERT INTO streetname VALUES('pawpaw'); + INSERT INTO streetname VALUES('peach'); + INSERT INTO streetname VALUES('peakwood'); + INSERT INTO streetname VALUES('pebble creek'); + INSERT INTO streetname VALUES('pecan cove'); + INSERT INTO streetname VALUES('pedigree'); + INSERT INTO streetname VALUES('pelorus'); + INSERT INTO streetname VALUES('penmore'); + INSERT INTO streetname VALUES('pensfold'); + INSERT INTO streetname VALUES('pepperstone'); + INSERT INTO streetname VALUES('peregrine'); + INSERT INTO streetname VALUES('periwinkle'); + INSERT INTO streetname VALUES('perkins'); + INSERT INTO streetname VALUES('pete brown'); + INSERT INTO streetname VALUES('phillips'); + INSERT INTO streetname VALUES('pickway'); + INSERT INTO streetname VALUES('piercy woods'); + INSERT INTO streetname VALUES('pierpoint'); + INSERT INTO streetname VALUES('pine'); + INSERT INTO streetname VALUES('pine branch'); + INSERT INTO streetname VALUES('pine meadow'); + INSERT INTO streetname VALUES('pineleaf'); + INSERT INTO streetname VALUES('pinewood'); + INSERT INTO streetname VALUES('pintail'); + INSERT INTO streetname VALUES('pipestone'); + INSERT INTO streetname VALUES('placer maple'); + INSERT INTO streetname VALUES('plover'); + INSERT INTO streetname VALUES('plum'); + INSERT INTO streetname VALUES('po box'); + INSERT INTO streetname VALUES('pochard'); + INSERT INTO streetname VALUES('pointview'); + INSERT INTO streetname VALUES('polk and white'); + INSERT INTO streetname VALUES('pond valley'); + INSERT INTO streetname VALUES('pondridge'); + INSERT INTO streetname VALUES('pope farm'); + INSERT INTO streetname VALUES('poplar grove'); + INSERT INTO streetname VALUES('poplar springs'); + INSERT INTO streetname VALUES('portola'); + INSERT INTO streetname VALUES('potters glen'); + INSERT INTO streetname VALUES('powatan'); + INSERT INTO streetname VALUES('prairie valley'); + INSERT INTO streetname VALUES('prescott'); + INSERT INTO streetname VALUES('presmann'); + INSERT INTO streetname VALUES('prestigious'); + INSERT INTO streetname VALUES('princess'); + INSERT INTO streetname VALUES('prosperity'); + INSERT INTO streetname VALUES('prosperity church'); + INSERT INTO streetname VALUES('prosperity commons'); + INSERT INTO streetname VALUES('prosperity park'); + INSERT INTO streetname VALUES('prosperity point'); + INSERT INTO streetname VALUES('prosperity ridge'); + INSERT INTO streetname VALUES('prosperity view'); + INSERT INTO streetname VALUES('purple finch'); + INSERT INTO streetname VALUES('quail'); + INSERT INTO streetname VALUES('queensbury'); + INSERT INTO streetname VALUES('quinn'); + INSERT INTO streetname VALUES('racine'); + INSERT INTO streetname VALUES('radbourne'); + INSERT INTO streetname VALUES('raddington'); + INSERT INTO streetname VALUES('raku'); + INSERT INTO streetname VALUES('rancliffe'); + INSERT INTO streetname VALUES('ravencrest'); + INSERT INTO streetname VALUES('reames'); + INSERT INTO streetname VALUES('rebecca run'); + INSERT INTO streetname VALUES('red bluff'); + INSERT INTO streetname VALUES('red clay'); + INSERT INTO streetname VALUES('red clover'); + INSERT INTO streetname VALUES('red rose'); + INSERT INTO streetname VALUES('red shed'); + INSERT INTO streetname VALUES('red tail'); + INSERT INTO streetname VALUES('redbridge'); + INSERT INTO streetname VALUES('redstart'); + INSERT INTO streetname VALUES('redstone view'); + INSERT INTO streetname VALUES('reedmont'); + INSERT INTO streetname VALUES('reeves'); + INSERT INTO streetname VALUES('regal'); + INSERT INTO streetname VALUES('reinbeck'); + INSERT INTO streetname VALUES('retriever'); + INSERT INTO streetname VALUES('ribbonwalk'); + INSERT INTO streetname VALUES('richardson park'); + INSERT INTO streetname VALUES('richfield'); + INSERT INTO streetname VALUES('riddings'); + INSERT INTO streetname VALUES('ridge'); + INSERT INTO streetname VALUES('ridge cliff'); + INSERT INTO streetname VALUES('ridge path'); + INSERT INTO streetname VALUES('ridge peak'); + INSERT INTO streetname VALUES('ridgefield'); + INSERT INTO streetname VALUES('ridgeline'); + INSERT INTO streetname VALUES('ridgeview commons'); + INSERT INTO streetname VALUES('riley'); + INSERT INTO streetname VALUES('riley woods'); + INSERT INTO streetname VALUES('rillet'); + INSERT INTO streetname VALUES('rindle'); + INSERT INTO streetname VALUES('rivendell'); + INSERT INTO streetname VALUES('robin'); + INSERT INTO streetname VALUES('robins nest'); + INSERT INTO streetname VALUES('robur'); + INSERT INTO streetname VALUES('robyns glen'); + INSERT INTO streetname VALUES('rock stream'); + INSERT INTO streetname VALUES('rockwell'); + INSERT INTO streetname VALUES('rockwell church'); + INSERT INTO streetname VALUES('rocky brook'); + INSERT INTO streetname VALUES('rocky ford club'); + INSERT INTO streetname VALUES('rotary'); + INSERT INTO streetname VALUES('rouda'); + INSERT INTO streetname VALUES('royal bluff'); + INSERT INTO streetname VALUES('royal celadon'); + INSERT INTO streetname VALUES('rubin lura'); + INSERT INTO streetname VALUES('runswyck'); + INSERT INTO streetname VALUES('ruth ferrell'); + INSERT INTO streetname VALUES('ruth polk'); + INSERT INTO streetname VALUES('ryan jay'); + INSERT INTO streetname VALUES('sackett'); + INSERT INTO streetname VALUES('saddle pace'); + INSERT INTO streetname VALUES('saddle run'); + INSERT INTO streetname VALUES('saddle trail'); + INSERT INTO streetname VALUES('saguaro'); + INSERT INTO streetname VALUES('saint audrey'); + INSERT INTO streetname VALUES('saint bernard'); + INSERT INTO streetname VALUES('saint frances'); + INSERT INTO streetname VALUES('sam roper'); + INSERT INTO streetname VALUES('samara'); + INSERT INTO streetname VALUES('sanders creek'); + INSERT INTO streetname VALUES('saquache'); + INSERT INTO streetname VALUES('sarnia'); + INSERT INTO streetname VALUES('savannah springs'); + INSERT INTO streetname VALUES('sawgrass ridge'); + INSERT INTO streetname VALUES('saxonbury'); + INSERT INTO streetname VALUES('scotch moss'); + INSERT INTO streetname VALUES('seasons'); + INSERT INTO streetname VALUES('serenity'); + INSERT INTO streetname VALUES('seths'); + INSERT INTO streetname VALUES('shadow lawn'); + INSERT INTO streetname VALUES('shadow oaks'); + INSERT INTO streetname VALUES('shadow pine'); + INSERT INTO streetname VALUES('shadyside'); + INSERT INTO streetname VALUES('shallow oak'); + INSERT INTO streetname VALUES('shelley'); + INSERT INTO streetname VALUES('shining oak'); + INSERT INTO streetname VALUES('ship'); + INSERT INTO streetname VALUES('shore haven'); + INSERT INTO streetname VALUES('shuman'); + INSERT INTO streetname VALUES('sidney'); + INSERT INTO streetname VALUES('silver birch'); + INSERT INTO streetname VALUES('silvermere'); + INSERT INTO streetname VALUES('simonton'); + INSERT INTO streetname VALUES('singing hills'); + INSERT INTO streetname VALUES('singing oak'); + INSERT INTO streetname VALUES('sipes'); + INSERT INTO streetname VALUES('six point'); + INSERT INTO streetname VALUES('skycrest'); + INSERT INTO streetname VALUES('skyline'); + INSERT INTO streetname VALUES('small'); + INSERT INTO streetname VALUES('smith corners'); + INSERT INTO streetname VALUES('smithwood'); + INSERT INTO streetname VALUES('snow hill'); + INSERT INTO streetname VALUES('soapstone'); + INSERT INTO streetname VALUES('sobeck'); + INSERT INTO streetname VALUES('socata'); + INSERT INTO streetname VALUES('solace'); + INSERT INTO streetname VALUES('solway'); + INSERT INTO streetname VALUES('song sparrow'); + INSERT INTO streetname VALUES('sorrento'); + INSERT INTO streetname VALUES('spector'); + INSERT INTO streetname VALUES('spin drift'); + INSERT INTO streetname VALUES('spring crest'); + INSERT INTO streetname VALUES('spring lee'); + INSERT INTO streetname VALUES('spring park'); + INSERT INTO streetname VALUES('spring terrace'); + INSERT INTO streetname VALUES('spring trace'); + INSERT INTO streetname VALUES('springhaven'); + INSERT INTO streetname VALUES('squirrel trail'); + INSERT INTO streetname VALUES('stardust'); + INSERT INTO streetname VALUES('stargaze'); + INSERT INTO streetname VALUES('starita'); + INSERT INTO streetname VALUES('starmount'); + INSERT INTO streetname VALUES('statesville'); + INSERT INTO streetname VALUES('steed'); + INSERT INTO streetname VALUES('steelewood'); + INSERT INTO streetname VALUES('steepleglen'); + INSERT INTO streetname VALUES('stephens farm'); + INSERT INTO streetname VALUES('stewarton'); + INSERT INTO streetname VALUES('stone park'); + INSERT INTO streetname VALUES('stonebrook'); + INSERT INTO streetname VALUES('stonefield'); + INSERT INTO streetname VALUES('stoneglen'); + INSERT INTO streetname VALUES('stonemarsh'); + INSERT INTO streetname VALUES('stoney garden'); + INSERT INTO streetname VALUES('stoney run'); + INSERT INTO streetname VALUES('stoney valley'); + INSERT INTO streetname VALUES('stoneykirk'); + INSERT INTO streetname VALUES('stream bank'); + INSERT INTO streetname VALUES('stream ridge'); + INSERT INTO streetname VALUES('suburban'); + INSERT INTO streetname VALUES('suffield'); + INSERT INTO streetname VALUES('sugar creek'); + INSERT INTO streetname VALUES('sugarberry'); + INSERT INTO streetname VALUES('sugarstone'); + INSERT INTO streetname VALUES('summer creek'); + INSERT INTO streetname VALUES('summer valley'); + INSERT INTO streetname VALUES('summercrest'); + INSERT INTO streetname VALUES('summercroft'); + INSERT INTO streetname VALUES('summerford'); + INSERT INTO streetname VALUES('summergold'); + INSERT INTO streetname VALUES('sunbeam'); + INSERT INTO streetname VALUES('sunbridge'); + INSERT INTO streetname VALUES('sunpath'); + INSERT INTO streetname VALUES('sunset'); + INSERT INTO streetname VALUES('sunset ridge'); + INSERT INTO streetname VALUES('sunstone'); + INSERT INTO streetname VALUES('suntrace'); + INSERT INTO streetname VALUES('sunwalk'); + INSERT INTO streetname VALUES('sutters hill'); + INSERT INTO streetname VALUES('suttonview'); + INSERT INTO streetname VALUES('swallow tail'); + INSERT INTO streetname VALUES('swanston'); + INSERT INTO streetname VALUES('sweet grove'); + INSERT INTO streetname VALUES('sweet rose'); + INSERT INTO streetname VALUES('sweetbriar ridge'); + INSERT INTO streetname VALUES('sweetfield'); + INSERT INTO streetname VALUES('sydney overlook'); + INSERT INTO streetname VALUES('sylvan'); + INSERT INTO streetname VALUES('symphony woods'); + INSERT INTO streetname VALUES('tallia'); + INSERT INTO streetname VALUES('tallu'); + INSERT INTO streetname VALUES('talwyn'); + INSERT INTO streetname VALUES('tanager'); + INSERT INTO streetname VALUES('tanager park'); + INSERT INTO streetname VALUES('tangley'); + INSERT INTO streetname VALUES('taranasay'); + INSERT INTO streetname VALUES('tarby'); + INSERT INTO streetname VALUES('tarland'); + INSERT INTO streetname VALUES('tarpway'); + INSERT INTO streetname VALUES('tauten'); + INSERT INTO streetname VALUES('taymouth'); + INSERT INTO streetname VALUES('ten trees'); + INSERT INTO streetname VALUES('terrace view'); + INSERT INTO streetname VALUES('terrier'); + INSERT INTO streetname VALUES('tesh'); + INSERT INTO streetname VALUES('teton'); + INSERT INTO streetname VALUES('tewkesbury'); + INSERT INTO streetname VALUES('thelema'); + INSERT INTO streetname VALUES('thistle bloom'); + INSERT INTO streetname VALUES('thistledown'); + INSERT INTO streetname VALUES('thomas ridge'); + INSERT INTO streetname VALUES('thornbrook'); + INSERT INTO streetname VALUES('tifton grass'); + INSERT INTO streetname VALUES('tigerton'); + INSERT INTO streetname VALUES('tomsie efird'); + INSERT INTO streetname VALUES('tor'); + INSERT INTO streetname VALUES('torphin'); + INSERT INTO streetname VALUES('torrence'); + INSERT INTO streetname VALUES('towering pine'); + INSERT INTO streetname VALUES('towhee'); + INSERT INTO streetname VALUES('toxaway'); + INSERT INTO streetname VALUES('tracy glenn'); + INSERT INTO streetname VALUES('tradition view'); + INSERT INTO streetname VALUES('trailer'); + INSERT INTO streetname VALUES('transport'); + INSERT INTO streetname VALUES('trehurst'); + INSERT INTO streetname VALUES('trexler'); + INSERT INTO streetname VALUES('trillium fields'); + INSERT INTO streetname VALUES('trimbach'); + INSERT INTO streetname VALUES('tucker'); + INSERT INTO streetname VALUES('tullamore'); + INSERT INTO streetname VALUES('tullock creek'); + INSERT INTO streetname VALUES('tunston'); + INSERT INTO streetname VALUES('tupelo'); + INSERT INTO streetname VALUES('turnabout'); + INSERT INTO streetname VALUES('turney'); + INSERT INTO streetname VALUES('turtle cross'); + INSERT INTO streetname VALUES('turtleback'); + INSERT INTO streetname VALUES('twelvestone'); + INSERT INTO streetname VALUES('twin'); + INSERT INTO streetname VALUES('twin brook'); + INSERT INTO streetname VALUES('twin lakes'); + INSERT INTO streetname VALUES('twisted pine'); + INSERT INTO streetname VALUES('tyler finley'); + INSERT INTO streetname VALUES('university station'); + INSERT INTO streetname VALUES('uphill'); + INSERT INTO streetname VALUES('valeview'); + INSERT INTO streetname VALUES('valhalla'); + INSERT INTO streetname VALUES('van'); + INSERT INTO streetname VALUES('vance davis'); + INSERT INTO streetname VALUES('vanhoy'); + INSERT INTO streetname VALUES('veckman'); + INSERT INTO streetname VALUES('victoria'); + INSERT INTO streetname VALUES('victory'); + INSERT INTO streetname VALUES('village glen'); + INSERT INTO streetname VALUES('vireo'); + INSERT INTO streetname VALUES('viscount'); + INSERT INTO streetname VALUES('voeltz'); + INSERT INTO streetname VALUES('wade e morgan'); + INSERT INTO streetname VALUES('wake'); + INSERT INTO streetname VALUES('wales'); + INSERT INTO streetname VALUES('wallace ridge'); + INSERT INTO streetname VALUES('waltham'); + INSERT INTO streetname VALUES('wanamassa'); + INSERT INTO streetname VALUES('warbler wood'); + INSERT INTO streetname VALUES('washington'); + INSERT INTO streetname VALUES('water'); + INSERT INTO streetname VALUES('waterelm'); + INSERT INTO streetname VALUES('waterford hills'); + INSERT INTO streetname VALUES('waterford valley'); + INSERT INTO streetname VALUES('waterloo'); + INSERT INTO streetname VALUES('waterton leas'); + INSERT INTO streetname VALUES('waverly lynn'); + INSERT INTO streetname VALUES('waverlyglen'); + INSERT INTO streetname VALUES('wayside'); + INSERT INTO streetname VALUES('westbury lake'); + INSERT INTO streetname VALUES('westray'); + INSERT INTO streetname VALUES('whistlers chase'); + INSERT INTO streetname VALUES('whistley green'); + INSERT INTO streetname VALUES('whistling oak'); + INSERT INTO streetname VALUES('whitcomb'); + INSERT INTO streetname VALUES('white aspen'); + INSERT INTO streetname VALUES('white cascade'); + INSERT INTO streetname VALUES('white mist'); + INSERT INTO streetname VALUES('white rock'); + INSERT INTO streetname VALUES('white stag'); + INSERT INTO streetname VALUES('whitegate'); + INSERT INTO streetname VALUES('whitehill'); + INSERT INTO streetname VALUES('whitetail'); + INSERT INTO streetname VALUES('whitewood'); + INSERT INTO streetname VALUES('wilburn park'); + INSERT INTO streetname VALUES('wild garden'); + INSERT INTO streetname VALUES('wild rose'); + INSERT INTO streetname VALUES('wilkins terrace'); + INSERT INTO streetname VALUES('william ficklen'); + INSERT INTO streetname VALUES('wiltshire ridge'); + INSERT INTO streetname VALUES('windchase'); + INSERT INTO streetname VALUES('winding jordan'); + INSERT INTO streetname VALUES('windy meadow'); + INSERT INTO streetname VALUES('winghaven'); + INSERT INTO streetname VALUES('wingmont'); + INSERT INTO streetname VALUES('winslow'); + INSERT INTO streetname VALUES('winter pine'); + INSERT INTO streetname VALUES('winter view'); + INSERT INTO streetname VALUES('wolf creek'); + INSERT INTO streetname VALUES('wondering oak'); + INSERT INTO streetname VALUES('woodard'); + INSERT INTO streetname VALUES('woodfire'); + INSERT INTO streetname VALUES('woodland commons'); + INSERT INTO streetname VALUES('woodland hills'); + INSERT INTO streetname VALUES('woodnotch'); + INSERT INTO streetname VALUES('woodstone'); + INSERT INTO streetname VALUES('worsley'); + INSERT INTO streetname VALUES('wren creek'); + INSERT INTO streetname VALUES('wrens nest'); + INSERT INTO streetname VALUES('wrexham'); + INSERT INTO streetname VALUES('wt harris'); + INSERT INTO streetname VALUES('wylie meadow'); + INSERT INTO streetname VALUES('wynborough'); + INSERT INTO streetname VALUES('wynbrook'); + INSERT INTO streetname VALUES('wyndham hill'); + INSERT INTO streetname VALUES('yandem'); + INSERT INTO streetname VALUES('yellow rose'); + INSERT INTO streetname VALUES('yellow spaniel'); + INSERT INTO streetname VALUES('yorkford'); + INSERT INTO streetname VALUES('ziegler'); + INSERT INTO streetname VALUES('zion renaissance'); + + SELECT count(*) FROM streetname; +---- +stmt 0 ok +stmt 118 err 1 -1 179 no such table: f2_rules +stmt 179 err 1 -1 240 no such table: f2_rules +stmt 240 err 1 -1 301 no such table: f2_rules +stmt 301 err 1 -1 362 no such table: f2_rules +stmt 362 err 1 -1 423 no such table: f2_rules +stmt 423 err 1 -1 484 no such table: f2_rules +stmt 484 err 1 -1 545 no such table: f2_rules +stmt 545 err 1 -1 606 no such table: f2_rules +stmt 606 err 1 -1 667 no such table: f2_rules +stmt 667 err 1 -1 728 no such table: f2_rules +stmt 728 err 1 -1 789 no such table: f2_rules +stmt 789 err 1 -1 850 no such table: f2_rules +stmt 850 err 1 -1 911 no such table: f2_rules +stmt 911 err 1 -1 974 no such table: f2_rules +stmt 974 err 1 -1 1036 no such table: f2_rules +stmt 1036 err 1 -1 1098 no such table: f2_rules +stmt 1098 err 1 -1 1159 no such table: f2_rules +stmt 1159 err 1 -1 1220 no such table: f2_rules +stmt 1220 err 1 -1 1280 no such table: f2_rules +stmt 1280 err 1 -1 1340 no such table: f2_rules +stmt 1340 err 1 -1 1400 no such table: f2_rules +stmt 1400 err 1 -1 1460 no such table: f2_rules +stmt 1460 err 1 -1 1520 no such table: f2_rules +stmt 1520 err 1 -1 1580 no such table: f2_rules +stmt 1580 err 1 -1 1640 no such table: f2_rules +stmt 1640 err 1 -1 1700 no such table: f2_rules +stmt 1700 err 1 -1 1760 no such table: f2_rules +stmt 1760 err 1 -1 1820 no such table: f2_rules +stmt 1820 err 1 -1 1880 no such table: f2_rules +stmt 1880 err 1 -1 1940 no such table: f2_rules +stmt 1940 err 1 -1 2000 no such table: f2_rules +stmt 2000 err 1 -1 2060 no such table: f2_rules +stmt 2060 err 1 -1 2121 no such table: f2_rules +stmt 2121 err 1 -1 2182 no such table: f2_rules +stmt 2182 err 1 -1 2243 no such table: f2_rules +stmt 2243 err 1 -1 2304 no such table: f2_rules +stmt 2304 err 1 -1 2364 no such table: f2_rules +stmt 2364 err 1 -1 2424 no such table: f2_rules +stmt 2424 err 1 -1 2484 no such table: f2_rules +stmt 2484 err 1 -1 2544 no such table: f2_rules +stmt 2544 err 1 -1 2604 no such table: f2_rules +stmt 2604 err 1 -1 2664 no such table: f2_rules +stmt 2664 err 1 -1 2724 no such table: f2_rules +stmt 2724 err 1 -1 2784 no such table: f2_rules +stmt 2784 err 1 -1 2845 no such table: f2_rules +stmt 2845 err 1 -1 2906 no such table: f2_rules +stmt 2906 err 1 -1 2967 no such table: f2_rules +stmt 2967 err 1 -1 3028 no such table: f2_rules +stmt 3028 err 1 -1 3088 no such table: f2_rules +stmt 3088 err 1 -1 3148 no such table: f2_rules +stmt 3148 err 1 -1 3208 no such table: f2_rules +stmt 3208 err 1 -1 3268 no such table: f2_rules +stmt 3268 err 1 -1 3328 no such table: f2_rules +stmt 3328 err 1 -1 3388 no such table: f2_rules +stmt 3388 err 1 -1 3448 no such table: f2_rules +stmt 3448 err 1 -1 3508 no such table: f2_rules +stmt 3508 err 1 -1 3569 no such table: f2_rules +stmt 3569 err 1 -1 3630 no such table: f2_rules +stmt 3630 err 1 -1 3690 no such table: f2_rules +stmt 3690 err 1 -1 3750 no such table: f2_rules +stmt 3750 err 1 -1 3811 no such table: f2_rules +stmt 3811 err 1 -1 3872 no such table: f2_rules +stmt 3872 err 1 -1 3933 no such table: f2_rules +stmt 3933 err 1 -1 3994 no such table: f2_rules +stmt 3994 err 1 -1 4055 no such table: f2_rules +stmt 4055 err 1 -1 4116 no such table: f2_rules +stmt 4116 err 1 -1 4228 no such table: f2_rules +stmt 4228 err 1 -1 4345 no such table: f2_rules +stmt 4345 err 1 -1 4458 no such table: f2_rules +stmt 4458 err 1 -1 4661 no such table: f2_rules +stmt 4661 ok +stmt 4720 ok +stmt 4820 err 1 -1 4869 no such table: streetname +stmt 4869 err 1 -1 4919 no such table: streetname +stmt 4919 err 1 -1 4966 no such table: streetname +stmt 4966 err 1 -1 5010 no such table: streetname +stmt 5010 err 1 -1 5061 no such table: streetname +stmt 5061 err 1 -1 5111 no such table: streetname +stmt 5111 err 1 -1 5162 no such table: streetname +stmt 5162 err 1 -1 5205 no such table: streetname +stmt 5205 err 1 -1 5251 no such table: streetname +stmt 5251 err 1 -1 5297 no such table: streetname +stmt 5297 err 1 -1 5345 no such table: streetname +stmt 5345 err 1 -1 5388 no such table: streetname +stmt 5388 err 1 -1 5436 no such table: streetname +stmt 5436 err 1 -1 5485 no such table: streetname +stmt 5485 err 1 -1 5532 no such table: streetname +stmt 5532 err 1 -1 5576 no such table: streetname +stmt 5576 err 1 -1 5628 no such table: streetname +stmt 5628 err 1 -1 5679 no such table: streetname +stmt 5679 err 1 -1 5725 no such table: streetname +stmt 5725 err 1 -1 5770 no such table: streetname +stmt 5770 err 1 -1 5814 no such table: streetname +stmt 5814 err 1 -1 5863 no such table: streetname +stmt 5863 err 1 -1 5912 no such table: streetname +stmt 5912 err 1 -1 5966 no such table: streetname +stmt 5966 err 1 -1 6018 no such table: streetname +stmt 6018 err 1 -1 6065 no such table: streetname +stmt 6065 err 1 -1 6107 no such table: streetname +stmt 6107 err 1 -1 6159 no such table: streetname +stmt 6159 err 1 -1 6206 no such table: streetname +stmt 6206 err 1 -1 6258 no such table: streetname +stmt 6258 err 1 -1 6309 no such table: streetname +stmt 6309 err 1 -1 6354 no such table: streetname +stmt 6354 err 1 -1 6402 no such table: streetname +stmt 6402 err 1 -1 6448 no such table: streetname +stmt 6448 err 1 -1 6495 no such table: streetname +stmt 6495 err 1 -1 6540 no such table: streetname +stmt 6540 err 1 -1 6589 no such table: streetname +stmt 6589 err 1 -1 6639 no such table: streetname +stmt 6639 err 1 -1 6689 no such table: streetname +stmt 6689 err 1 -1 6735 no such table: streetname +stmt 6735 err 1 -1 6785 no such table: streetname +stmt 6785 err 1 -1 6833 no such table: streetname +stmt 6833 err 1 -1 6885 no such table: streetname +stmt 6885 err 1 -1 6936 no such table: streetname +stmt 6936 err 1 -1 6984 no such table: streetname +stmt 6984 err 1 -1 7029 no such table: streetname +stmt 7029 err 1 -1 7076 no such table: streetname +stmt 7076 err 1 -1 7120 no such table: streetname +stmt 7120 err 1 -1 7167 no such table: streetname +stmt 7167 err 1 -1 7219 no such table: streetname +stmt 7219 err 1 -1 7265 no such table: streetname +stmt 7265 err 1 -1 7309 no such table: streetname +stmt 7309 err 1 -1 7355 no such table: streetname +stmt 7355 err 1 -1 7405 no such table: streetname +stmt 7405 err 1 -1 7455 no such table: streetname +stmt 7455 err 1 -1 7507 no such table: streetname +stmt 7507 err 1 -1 7558 no such table: streetname +stmt 7558 err 1 -1 7602 no such table: streetname +stmt 7602 err 1 -1 7655 no such table: streetname +stmt 7655 err 1 -1 7704 no such table: streetname +stmt 7704 err 1 -1 7755 no such table: streetname +stmt 7755 err 1 -1 7807 no such table: streetname +stmt 7807 err 1 -1 7857 no such table: streetname +stmt 7857 err 1 -1 7905 no such table: streetname +stmt 7905 err 1 -1 7953 no such table: streetname +stmt 7953 err 1 -1 7999 no such table: streetname +stmt 7999 err 1 -1 8045 no such table: streetname +stmt 8045 err 1 -1 8096 no such table: streetname +stmt 8096 err 1 -1 8143 no such table: streetname +stmt 8143 err 1 -1 8188 no such table: streetname +stmt 8188 err 1 -1 8234 no such table: streetname +stmt 8234 err 1 -1 8279 no such table: streetname +stmt 8279 err 1 -1 8328 no such table: streetname +stmt 8328 err 1 -1 8375 no such table: streetname +stmt 8375 err 1 -1 8425 no such table: streetname +stmt 8425 err 1 -1 8469 no such table: streetname +stmt 8469 err 1 -1 8515 no such table: streetname +stmt 8515 err 1 -1 8560 no such table: streetname +stmt 8560 err 1 -1 8614 no such table: streetname +stmt 8614 err 1 -1 8661 no such table: streetname +stmt 8661 err 1 -1 8706 no such table: streetname +stmt 8706 err 1 -1 8751 no such table: streetname +stmt 8751 err 1 -1 8801 no such table: streetname +stmt 8801 err 1 -1 8852 no such table: streetname +stmt 8852 err 1 -1 8897 no such table: streetname +stmt 8897 err 1 -1 8945 no such table: streetname +stmt 8945 err 1 -1 8990 no such table: streetname +stmt 8990 err 1 -1 9034 no such table: streetname +stmt 9034 err 1 -1 9082 no such table: streetname +stmt 9082 err 1 -1 9128 no such table: streetname +stmt 9128 err 1 -1 9176 no such table: streetname +stmt 9176 err 1 -1 9227 no such table: streetname +stmt 9227 err 1 -1 9279 no such table: streetname +stmt 9279 err 1 -1 9328 no such table: streetname +stmt 9328 err 1 -1 9377 no such table: streetname +stmt 9377 err 1 -1 9427 no such table: streetname +stmt 9427 err 1 -1 9471 no such table: streetname +stmt 9471 err 1 -1 9519 no such table: streetname +stmt 9519 err 1 -1 9566 no such table: streetname +stmt 9566 err 1 -1 9615 no such table: streetname +stmt 9615 err 1 -1 9663 no such table: streetname +stmt 9663 err 1 -1 9714 no such table: streetname +stmt 9714 err 1 -1 9762 no such table: streetname +stmt 9762 err 1 -1 9814 no such table: streetname +stmt 9814 err 1 -1 9866 no such table: streetname +stmt 9866 err 1 -1 9914 no such table: streetname +stmt 9914 err 1 -1 9961 no such table: streetname +stmt 9961 err 1 -1 10016 no such table: streetname +stmt 10016 err 1 -1 10065 no such table: streetname +stmt 10065 err 1 -1 10113 no such table: streetname +stmt 10113 err 1 -1 10159 no such table: streetname +stmt 10159 err 1 -1 10207 no such table: streetname +stmt 10207 err 1 -1 10253 no such table: streetname +stmt 10253 err 1 -1 10302 no such table: streetname +stmt 10302 err 1 -1 10351 no such table: streetname +stmt 10351 err 1 -1 10400 no such table: streetname +stmt 10400 err 1 -1 10447 no such table: streetname +stmt 10447 err 1 -1 10493 no such table: streetname +stmt 10493 err 1 -1 10542 no such table: streetname +stmt 10542 err 1 -1 10591 no such table: streetname +stmt 10591 err 1 -1 10639 no such table: streetname +stmt 10639 err 1 -1 10689 no such table: streetname +stmt 10689 err 1 -1 10739 no such table: streetname +stmt 10739 err 1 -1 10787 no such table: streetname +stmt 10787 err 1 -1 10838 no such table: streetname +stmt 10838 err 1 -1 10885 no such table: streetname +stmt 10885 err 1 -1 10934 no such table: streetname +stmt 10934 err 1 -1 10983 no such table: streetname +stmt 10983 err 1 -1 11032 no such table: streetname +stmt 11032 err 1 -1 11079 no such table: streetname +stmt 11079 err 1 -1 11127 no such table: streetname +stmt 11127 err 1 -1 11176 no such table: streetname +stmt 11176 err 1 -1 11221 no such table: streetname +stmt 11221 err 1 -1 11266 no such table: streetname +stmt 11266 err 1 -1 11314 no such table: streetname +stmt 11314 err 1 -1 11360 no such table: streetname +stmt 11360 err 1 -1 11404 no such table: streetname +stmt 11404 err 1 -1 11450 no such table: streetname +stmt 11450 err 1 -1 11503 no such table: streetname +stmt 11503 err 1 -1 11555 no such table: streetname +stmt 11555 err 1 -1 11602 no such table: streetname +stmt 11602 err 1 -1 11646 no such table: streetname +stmt 11646 err 1 -1 11696 no such table: streetname +stmt 11696 err 1 -1 11742 no such table: streetname +stmt 11742 err 1 -1 11793 no such table: streetname +stmt 11793 err 1 -1 11844 no such table: streetname +stmt 11844 err 1 -1 11893 no such table: streetname +stmt 11893 err 1 -1 11942 no such table: streetname +stmt 11942 err 1 -1 11993 no such table: streetname +stmt 11993 err 1 -1 12039 no such table: streetname +stmt 12039 err 1 -1 12089 no such table: streetname +stmt 12089 err 1 -1 12139 no such table: streetname +stmt 12139 err 1 -1 12184 no such table: streetname +stmt 12184 err 1 -1 12229 no such table: streetname +stmt 12229 err 1 -1 12275 no such table: streetname +stmt 12275 err 1 -1 12323 no such table: streetname +stmt 12323 err 1 -1 12372 no such table: streetname +stmt 12372 err 1 -1 12421 no such table: streetname +stmt 12421 err 1 -1 12471 no such table: streetname +stmt 12471 err 1 -1 12520 no such table: streetname +stmt 12520 err 1 -1 12569 no such table: streetname +stmt 12569 err 1 -1 12620 no such table: streetname +stmt 12620 err 1 -1 12665 no such table: streetname +stmt 12665 err 1 -1 12714 no such table: streetname +stmt 12714 err 1 -1 12762 no such table: streetname +stmt 12762 err 1 -1 12812 no such table: streetname +stmt 12812 err 1 -1 12856 no such table: streetname +stmt 12856 err 1 -1 12907 no such table: streetname +stmt 12907 err 1 -1 12957 no such table: streetname +stmt 12957 err 1 -1 13004 no such table: streetname +stmt 13004 err 1 -1 13054 no such table: streetname +stmt 13054 err 1 -1 13102 no such table: streetname +stmt 13102 err 1 -1 13147 no such table: streetname +stmt 13147 err 1 -1 13199 no such table: streetname +stmt 13199 err 1 -1 13251 no such table: streetname +stmt 13251 err 1 -1 13306 no such table: streetname +stmt 13306 err 1 -1 13351 no such table: streetname +stmt 13351 err 1 -1 13400 no such table: streetname +stmt 13400 err 1 -1 13443 no such table: streetname +stmt 13443 err 1 -1 13492 no such table: streetname +stmt 13492 err 1 -1 13543 no such table: streetname +stmt 13543 err 1 -1 13592 no such table: streetname +stmt 13592 err 1 -1 13636 no such table: streetname +stmt 13636 err 1 -1 13686 no such table: streetname +stmt 13686 err 1 -1 13733 no such table: streetname +stmt 13733 err 1 -1 13779 no such table: streetname +stmt 13779 err 1 -1 13825 no such table: streetname +stmt 13825 err 1 -1 13873 no such table: streetname +stmt 13873 err 1 -1 13923 no such table: streetname +stmt 13923 err 1 -1 13973 no such table: streetname +stmt 13973 err 1 -1 14021 no such table: streetname +stmt 14021 err 1 -1 14070 no such table: streetname +stmt 14070 err 1 -1 14122 no such table: streetname +stmt 14122 err 1 -1 14167 no such table: streetname +stmt 14167 err 1 -1 14213 no such table: streetname +stmt 14213 err 1 -1 14263 no such table: streetname +stmt 14263 err 1 -1 14308 no such table: streetname +stmt 14308 err 1 -1 14358 no such table: streetname +stmt 14358 err 1 -1 14403 no such table: streetname +stmt 14403 err 1 -1 14448 no such table: streetname +stmt 14448 err 1 -1 14492 no such table: streetname +stmt 14492 err 1 -1 14542 no such table: streetname +stmt 14542 err 1 -1 14594 no such table: streetname +stmt 14594 err 1 -1 14647 no such table: streetname +stmt 14647 err 1 -1 14700 no such table: streetname +stmt 14700 err 1 -1 14746 no such table: streetname +stmt 14746 err 1 -1 14794 no such table: streetname +stmt 14794 err 1 -1 14839 no such table: streetname +stmt 14839 err 1 -1 14889 no such table: streetname +stmt 14889 err 1 -1 14937 no such table: streetname +stmt 14937 err 1 -1 14984 no such table: streetname +stmt 14984 err 1 -1 15031 no such table: streetname +stmt 15031 err 1 -1 15082 no such table: streetname +stmt 15082 err 1 -1 15131 no such table: streetname +stmt 15131 err 1 -1 15181 no such table: streetname +stmt 15181 err 1 -1 15226 no such table: streetname +stmt 15226 err 1 -1 15271 no such table: streetname +stmt 15271 err 1 -1 15325 no such table: streetname +stmt 15325 err 1 -1 15374 no such table: streetname +stmt 15374 err 1 -1 15423 no such table: streetname +stmt 15423 err 1 -1 15468 no such table: streetname +stmt 15468 err 1 -1 15516 no such table: streetname +stmt 15516 err 1 -1 15565 no such table: streetname +stmt 15565 err 1 -1 15612 no such table: streetname +stmt 15612 err 1 -1 15666 no such table: streetname +stmt 15666 err 1 -1 15719 no such table: streetname +stmt 15719 err 1 -1 15773 no such table: streetname +stmt 15773 err 1 -1 15824 no such table: streetname +stmt 15824 err 1 -1 15879 no such table: streetname +stmt 15879 err 1 -1 15929 no such table: streetname +stmt 15929 err 1 -1 15977 no such table: streetname +stmt 15977 err 1 -1 16022 no such table: streetname +stmt 16022 err 1 -1 16073 no such table: streetname +stmt 16073 err 1 -1 16126 no such table: streetname +stmt 16126 err 1 -1 16172 no such table: streetname +stmt 16172 err 1 -1 16220 no such table: streetname +stmt 16220 err 1 -1 16266 no such table: streetname +stmt 16266 err 1 -1 16318 no such table: streetname +stmt 16318 err 1 -1 16372 no such table: streetname +stmt 16372 err 1 -1 16421 no such table: streetname +stmt 16421 err 1 -1 16469 no such table: streetname +stmt 16469 err 1 -1 16518 no such table: streetname +stmt 16518 err 1 -1 16565 no such table: streetname +stmt 16565 err 1 -1 16616 no such table: streetname +stmt 16616 err 1 -1 16673 no such table: streetname +stmt 16673 err 1 -1 16721 no such table: streetname +stmt 16721 err 1 -1 16765 no such table: streetname +stmt 16765 err 1 -1 16817 no such table: streetname +stmt 16817 err 1 -1 16863 no such table: streetname +stmt 16863 err 1 -1 16914 no such table: streetname +stmt 16914 err 1 -1 16965 no such table: streetname +stmt 16965 err 1 -1 17016 no such table: streetname +stmt 17016 err 1 -1 17064 no such table: streetname +stmt 17064 err 1 -1 17115 no such table: streetname +stmt 17115 err 1 -1 17165 no such table: streetname +stmt 17165 err 1 -1 17217 no such table: streetname +stmt 17217 err 1 -1 17265 no such table: streetname +stmt 17265 err 1 -1 17314 no such table: streetname +stmt 17314 err 1 -1 17359 no such table: streetname +stmt 17359 err 1 -1 17408 no such table: streetname +stmt 17408 err 1 -1 17458 no such table: streetname +stmt 17458 err 1 -1 17509 no such table: streetname +stmt 17509 err 1 -1 17556 no such table: streetname +stmt 17556 err 1 -1 17604 no such table: streetname +stmt 17604 err 1 -1 17652 no such table: streetname +stmt 17652 err 1 -1 17698 no such table: streetname +stmt 17698 err 1 -1 17744 no such table: streetname +stmt 17744 err 1 -1 17795 no such table: streetname +stmt 17795 err 1 -1 17840 no such table: streetname +stmt 17840 err 1 -1 17891 no such table: streetname +stmt 17891 err 1 -1 17937 no such table: streetname +stmt 17937 err 1 -1 17986 no such table: streetname +stmt 17986 err 1 -1 18038 no such table: streetname +stmt 18038 err 1 -1 18088 no such table: streetname +stmt 18088 err 1 -1 18137 no such table: streetname +stmt 18137 err 1 -1 18184 no such table: streetname +stmt 18184 err 1 -1 18229 no such table: streetname +stmt 18229 err 1 -1 18279 no such table: streetname +stmt 18279 err 1 -1 18330 no such table: streetname +stmt 18330 err 1 -1 18375 no such table: streetname +stmt 18375 err 1 -1 18423 no such table: streetname +stmt 18423 err 1 -1 18470 no such table: streetname +stmt 18470 err 1 -1 18514 no such table: streetname +stmt 18514 err 1 -1 18567 no such table: streetname +stmt 18567 err 1 -1 18620 no such table: streetname +stmt 18620 err 1 -1 18666 no such table: streetname +stmt 18666 err 1 -1 18717 no such table: streetname +stmt 18717 err 1 -1 18770 no such table: streetname +stmt 18770 err 1 -1 18822 no such table: streetname +stmt 18822 err 1 -1 18867 no such table: streetname +stmt 18867 err 1 -1 18916 no such table: streetname +stmt 18916 err 1 -1 18964 no such table: streetname +stmt 18964 err 1 -1 19012 no such table: streetname +stmt 19012 err 1 -1 19060 no such table: streetname +stmt 19060 err 1 -1 19109 no such table: streetname +stmt 19109 err 1 -1 19159 no such table: streetname +stmt 19159 err 1 -1 19213 no such table: streetname +stmt 19213 err 1 -1 19257 no such table: streetname +stmt 19257 err 1 -1 19313 no such table: streetname +stmt 19313 err 1 -1 19362 no such table: streetname +stmt 19362 err 1 -1 19413 no such table: streetname +stmt 19413 err 1 -1 19465 no such table: streetname +stmt 19465 err 1 -1 19516 no such table: streetname +stmt 19516 err 1 -1 19570 no such table: streetname +stmt 19570 err 1 -1 19621 no such table: streetname +stmt 19621 err 1 -1 19668 no such table: streetname +stmt 19668 err 1 -1 19717 no such table: streetname +stmt 19717 err 1 -1 19765 no such table: streetname +stmt 19765 err 1 -1 19817 no such table: streetname +stmt 19817 err 1 -1 19862 no such table: streetname +stmt 19862 err 1 -1 19906 no such table: streetname +stmt 19906 err 1 -1 19954 no such table: streetname +stmt 19954 err 1 -1 19998 no such table: streetname +stmt 19998 err 1 -1 20046 no such table: streetname +stmt 20046 err 1 -1 20090 no such table: streetname +stmt 20090 err 1 -1 20143 no such table: streetname +stmt 20143 err 1 -1 20192 no such table: streetname +stmt 20192 err 1 -1 20242 no such table: streetname +stmt 20242 err 1 -1 20289 no such table: streetname +stmt 20289 err 1 -1 20336 no such table: streetname +stmt 20336 err 1 -1 20382 no such table: streetname +stmt 20382 err 1 -1 20429 no such table: streetname +stmt 20429 err 1 -1 20479 no such table: streetname +stmt 20479 err 1 -1 20528 no such table: streetname +stmt 20528 err 1 -1 20574 no such table: streetname +stmt 20574 err 1 -1 20621 no such table: streetname +stmt 20621 err 1 -1 20668 no such table: streetname +stmt 20668 err 1 -1 20716 no such table: streetname +stmt 20716 err 1 -1 20764 no such table: streetname +stmt 20764 err 1 -1 20812 no such table: streetname +stmt 20812 err 1 -1 20859 no such table: streetname +stmt 20859 err 1 -1 20904 no such table: streetname +stmt 20904 err 1 -1 20955 no such table: streetname +stmt 20955 err 1 -1 21002 no such table: streetname +stmt 21002 err 1 -1 21048 no such table: streetname +stmt 21048 err 1 -1 21092 no such table: streetname +stmt 21092 err 1 -1 21142 no such table: streetname +stmt 21142 err 1 -1 21192 no such table: streetname +stmt 21192 err 1 -1 21240 no such table: streetname +stmt 21240 err 1 -1 21288 no such table: streetname +stmt 21288 err 1 -1 21334 no such table: streetname +stmt 21334 err 1 -1 21392 no such table: streetname +stmt 21392 err 1 -1 21445 no such table: streetname +stmt 21445 err 1 -1 21498 no such table: streetname +stmt 21498 err 1 -1 21553 no such table: streetname +stmt 21553 err 1 -1 21600 no such table: streetname +stmt 21600 err 1 -1 21660 no such table: streetname +stmt 21660 err 1 -1 21702 no such table: streetname +stmt 21702 err 1 -1 21755 no such table: streetname +stmt 21755 err 1 -1 21807 no such table: streetname +stmt 21807 err 1 -1 21853 no such table: streetname +stmt 21853 err 1 -1 21899 no such table: streetname +stmt 21899 err 1 -1 21947 no such table: streetname +stmt 21947 err 1 -1 21992 no such table: streetname +stmt 21992 err 1 -1 22039 no such table: streetname +stmt 22039 err 1 -1 22086 no such table: streetname +stmt 22086 err 1 -1 22131 no such table: streetname +stmt 22131 err 1 -1 22177 no such table: streetname +stmt 22177 err 1 -1 22224 no such table: streetname +stmt 22224 err 1 -1 22269 no such table: streetname +stmt 22269 err 1 -1 22315 no such table: streetname +stmt 22315 err 1 -1 22365 no such table: streetname +stmt 22365 err 1 -1 22415 no such table: streetname +stmt 22415 err 1 -1 22462 no such table: streetname +stmt 22462 err 1 -1 22508 no such table: streetname +stmt 22508 err 1 -1 22558 no such table: streetname +stmt 22558 err 1 -1 22609 no such table: streetname +stmt 22609 err 1 -1 22654 no such table: streetname +stmt 22654 err 1 -1 22702 no such table: streetname +stmt 22702 err 1 -1 22751 no such table: streetname +stmt 22751 err 1 -1 22801 no such table: streetname +stmt 22801 err 1 -1 22854 no such table: streetname +stmt 22854 err 1 -1 22910 no such table: streetname +stmt 22910 err 1 -1 22953 no such table: streetname +stmt 22953 err 1 -1 22996 no such table: streetname +stmt 22996 err 1 -1 23043 no such table: streetname +stmt 23043 err 1 -1 23090 no such table: streetname +stmt 23090 err 1 -1 23138 no such table: streetname +stmt 23138 err 1 -1 23187 no such table: streetname +stmt 23187 err 1 -1 23234 no such table: streetname +stmt 23234 err 1 -1 23284 no such table: streetname +stmt 23284 err 1 -1 23330 no such table: streetname +stmt 23330 err 1 -1 23378 no such table: streetname +stmt 23378 err 1 -1 23432 no such table: streetname +stmt 23432 err 1 -1 23478 no such table: streetname +stmt 23478 err 1 -1 23526 no such table: streetname +stmt 23526 err 1 -1 23573 no such table: streetname +stmt 23573 err 1 -1 23618 no such table: streetname +stmt 23618 err 1 -1 23665 no such table: streetname +stmt 23665 err 1 -1 23709 no such table: streetname +stmt 23709 err 1 -1 23757 no such table: streetname +stmt 23757 err 1 -1 23810 no such table: streetname +stmt 23810 err 1 -1 23854 no such table: streetname +stmt 23854 err 1 -1 23902 no such table: streetname +stmt 23902 err 1 -1 23955 no such table: streetname +stmt 23955 err 1 -1 23999 no such table: streetname +stmt 23999 err 1 -1 24047 no such table: streetname +stmt 24047 err 1 -1 24102 no such table: streetname +stmt 24102 err 1 -1 24151 no such table: streetname +stmt 24151 err 1 -1 24194 no such table: streetname +stmt 24194 err 1 -1 24242 no such table: streetname +stmt 24242 err 1 -1 24287 no such table: streetname +stmt 24287 err 1 -1 24343 no such table: streetname +stmt 24343 err 1 -1 24392 no such table: streetname +stmt 24392 err 1 -1 24440 no such table: streetname +stmt 24440 err 1 -1 24488 no such table: streetname +stmt 24488 err 1 -1 24535 no such table: streetname +stmt 24535 err 1 -1 24581 no such table: streetname +stmt 24581 err 1 -1 24628 no such table: streetname +stmt 24628 err 1 -1 24678 no such table: streetname +stmt 24678 err 1 -1 24726 no such table: streetname +stmt 24726 err 1 -1 24774 no such table: streetname +stmt 24774 err 1 -1 24826 no such table: streetname +stmt 24826 err 1 -1 24876 no such table: streetname +stmt 24876 err 1 -1 24926 no such table: streetname +stmt 24926 err 1 -1 24973 no such table: streetname +stmt 24973 err 1 -1 25020 no such table: streetname +stmt 25020 err 1 -1 25065 no such table: streetname +stmt 25065 err 1 -1 25116 no such table: streetname +stmt 25116 err 1 -1 25163 no such table: streetname +stmt 25163 err 1 -1 25214 no such table: streetname +stmt 25214 err 1 -1 25262 no such table: streetname +stmt 25262 err 1 -1 25309 no such table: streetname +stmt 25309 err 1 -1 25363 no such table: streetname +stmt 25363 err 1 -1 25412 no such table: streetname +stmt 25412 err 1 -1 25458 no such table: streetname +stmt 25458 err 1 -1 25504 no such table: streetname +stmt 25504 err 1 -1 25555 no such table: streetname +stmt 25555 err 1 -1 25601 no such table: streetname +stmt 25601 err 1 -1 25652 no such table: streetname +stmt 25652 err 1 -1 25702 no such table: streetname +stmt 25702 err 1 -1 25760 no such table: streetname +stmt 25760 err 1 -1 25809 no such table: streetname +stmt 25809 err 1 -1 25862 no such table: streetname +stmt 25862 err 1 -1 25914 no such table: streetname +stmt 25914 err 1 -1 25966 no such table: streetname +stmt 25966 err 1 -1 26014 no such table: streetname +stmt 26014 err 1 -1 26061 no such table: streetname +stmt 26061 err 1 -1 26108 no such table: streetname +stmt 26108 err 1 -1 26156 no such table: streetname +stmt 26156 err 1 -1 26203 no such table: streetname +stmt 26203 err 1 -1 26250 no such table: streetname +stmt 26250 err 1 -1 26301 no such table: streetname +stmt 26301 err 1 -1 26347 no such table: streetname +stmt 26347 err 1 -1 26398 no such table: streetname +stmt 26398 err 1 -1 26446 no such table: streetname +stmt 26446 err 1 -1 26489 no such table: streetname +stmt 26489 err 1 -1 26535 no such table: streetname +stmt 26535 err 1 -1 26585 no such table: streetname +stmt 26585 err 1 -1 26638 no such table: streetname +stmt 26638 err 1 -1 26683 no such table: streetname +stmt 26683 err 1 -1 26734 no such table: streetname +stmt 26734 err 1 -1 26783 no such table: streetname +stmt 26783 err 1 -1 26830 no such table: streetname +stmt 26830 err 1 -1 26881 no such table: streetname +stmt 26881 err 1 -1 26928 no such table: streetname +stmt 26928 err 1 -1 26973 no such table: streetname +stmt 26973 err 1 -1 27018 no such table: streetname +stmt 27018 err 1 -1 27064 no such table: streetname +stmt 27064 err 1 -1 27111 no such table: streetname +stmt 27111 err 1 -1 27156 no such table: streetname +stmt 27156 err 1 -1 27209 no such table: streetname +stmt 27209 err 1 -1 27260 no such table: streetname +stmt 27260 err 1 -1 27306 no such table: streetname +stmt 27306 err 1 -1 27353 no such table: streetname +stmt 27353 err 1 -1 27400 no such table: streetname +stmt 27400 err 1 -1 27448 no such table: streetname +stmt 27448 err 1 -1 27492 no such table: streetname +stmt 27492 err 1 -1 27541 no such table: streetname +stmt 27541 err 1 -1 27589 no such table: streetname +stmt 27589 err 1 -1 27637 no such table: streetname +stmt 27637 err 1 -1 27686 no such table: streetname +stmt 27686 err 1 -1 27735 no such table: streetname +stmt 27735 err 1 -1 27783 no such table: streetname +stmt 27783 err 1 -1 27830 no such table: streetname +stmt 27830 err 1 -1 27878 no such table: streetname +stmt 27878 err 1 -1 27925 no such table: streetname +stmt 27925 err 1 -1 27973 no such table: streetname +stmt 27973 err 1 -1 28021 no such table: streetname +stmt 28021 err 1 -1 28069 no such table: streetname +stmt 28069 err 1 -1 28119 no such table: streetname +stmt 28119 err 1 -1 28169 no such table: streetname +stmt 28169 err 1 -1 28219 no such table: streetname +stmt 28219 err 1 -1 28271 no such table: streetname +stmt 28271 err 1 -1 28321 no such table: streetname +stmt 28321 err 1 -1 28367 no such table: streetname +stmt 28367 err 1 -1 28419 no such table: streetname +stmt 28419 err 1 -1 28464 no such table: streetname +stmt 28464 err 1 -1 28512 no such table: streetname +stmt 28512 err 1 -1 28558 no such table: streetname +stmt 28558 err 1 -1 28608 no such table: streetname +stmt 28608 err 1 -1 28661 no such table: streetname +stmt 28661 err 1 -1 28708 no such table: streetname +stmt 28708 err 1 -1 28760 no such table: streetname +stmt 28760 err 1 -1 28806 no such table: streetname +stmt 28806 err 1 -1 28853 no such table: streetname +stmt 28853 err 1 -1 28903 no such table: streetname +stmt 28903 err 1 -1 28952 no such table: streetname +stmt 28952 err 1 -1 29003 no such table: streetname +stmt 29003 err 1 -1 29053 no such table: streetname +stmt 29053 err 1 -1 29104 no such table: streetname +stmt 29104 err 1 -1 29156 no such table: streetname +stmt 29156 err 1 -1 29201 no such table: streetname +stmt 29201 err 1 -1 29249 no such table: streetname +stmt 29249 err 1 -1 29302 no such table: streetname +stmt 29302 err 1 -1 29350 no such table: streetname +stmt 29350 err 1 -1 29405 no such table: streetname +stmt 29405 err 1 -1 29461 no such table: streetname +stmt 29461 err 1 -1 29512 no such table: streetname +stmt 29512 err 1 -1 29560 no such table: streetname +stmt 29560 err 1 -1 29613 no such table: streetname +stmt 29613 err 1 -1 29660 no such table: streetname +stmt 29660 err 1 -1 29704 no such table: streetname +stmt 29704 err 1 -1 29751 no such table: streetname +stmt 29751 err 1 -1 29799 no such table: streetname +stmt 29799 err 1 -1 29853 no such table: streetname +stmt 29853 err 1 -1 29907 no such table: streetname +stmt 29907 err 1 -1 29953 no such table: streetname +stmt 29953 err 1 -1 30002 no such table: streetname +stmt 30002 err 1 -1 30047 no such table: streetname +stmt 30047 err 1 -1 30093 no such table: streetname +stmt 30093 err 1 -1 30141 no such table: streetname +stmt 30141 err 1 -1 30186 no such table: streetname +stmt 30186 err 1 -1 30241 no such table: streetname +stmt 30241 err 1 -1 30293 no such table: streetname +stmt 30293 err 1 -1 30339 no such table: streetname +stmt 30339 err 1 -1 30392 no such table: streetname +stmt 30392 err 1 -1 30441 no such table: streetname +stmt 30441 err 1 -1 30496 no such table: streetname +stmt 30496 err 1 -1 30549 no such table: streetname +stmt 30549 err 1 -1 30599 no such table: streetname +stmt 30599 err 1 -1 30649 no such table: streetname +stmt 30649 err 1 -1 30699 no such table: streetname +stmt 30699 err 1 -1 30748 no such table: streetname +stmt 30748 err 1 -1 30800 no such table: streetname +stmt 30800 err 1 -1 30850 no such table: streetname +stmt 30850 err 1 -1 30901 no such table: streetname +stmt 30901 err 1 -1 30957 no such table: streetname +stmt 30957 err 1 -1 31008 no such table: streetname +stmt 31008 err 1 -1 31062 no such table: streetname +stmt 31062 err 1 -1 31114 no such table: streetname +stmt 31114 err 1 -1 31160 no such table: streetname +stmt 31160 err 1 -1 31206 no such table: streetname +stmt 31206 err 1 -1 31254 no such table: streetname +stmt 31254 err 1 -1 31302 no such table: streetname +stmt 31302 err 1 -1 31347 no such table: streetname +stmt 31347 err 1 -1 31396 no such table: streetname +stmt 31396 err 1 -1 31442 no such table: streetname +stmt 31442 err 1 -1 31492 no such table: streetname +stmt 31492 err 1 -1 31537 no such table: streetname +stmt 31537 err 1 -1 31586 no such table: streetname +stmt 31586 err 1 -1 31635 no such table: streetname +stmt 31635 err 1 -1 31685 no such table: streetname +stmt 31685 err 1 -1 31734 no such table: streetname +stmt 31734 err 1 -1 31782 no such table: streetname +stmt 31782 err 1 -1 31826 no such table: streetname +stmt 31826 err 1 -1 31874 no such table: streetname +stmt 31874 err 1 -1 31927 no such table: streetname +stmt 31927 err 1 -1 31982 no such table: streetname +stmt 31982 err 1 -1 32027 no such table: streetname +stmt 32027 err 1 -1 32080 no such table: streetname +stmt 32080 err 1 -1 32133 no such table: streetname +stmt 32133 err 1 -1 32182 no such table: streetname +stmt 32182 err 1 -1 32231 no such table: streetname +stmt 32231 err 1 -1 32276 no such table: streetname +stmt 32276 err 1 -1 32323 no such table: streetname +stmt 32323 err 1 -1 32369 no such table: streetname +stmt 32369 err 1 -1 32420 no such table: streetname +stmt 32420 err 1 -1 32472 no such table: streetname +stmt 32472 err 1 -1 32520 no such table: streetname +stmt 32520 err 1 -1 32570 no such table: streetname +stmt 32570 err 1 -1 32620 no such table: streetname +stmt 32620 err 1 -1 32668 no such table: streetname +stmt 32668 err 1 -1 32715 no such table: streetname +stmt 32715 err 1 -1 32770 no such table: streetname +stmt 32770 err 1 -1 32823 no such table: streetname +stmt 32823 err 1 -1 32875 no such table: streetname +stmt 32875 err 1 -1 32927 no such table: streetname +stmt 32927 err 1 -1 32976 no such table: streetname +stmt 32976 err 1 -1 33025 no such table: streetname +stmt 33025 err 1 -1 33071 no such table: streetname +stmt 33071 err 1 -1 33121 no such table: streetname +stmt 33121 err 1 -1 33167 no such table: streetname +stmt 33167 err 1 -1 33216 no such table: streetname +stmt 33216 err 1 -1 33262 no such table: streetname +stmt 33262 err 1 -1 33313 no such table: streetname +stmt 33313 err 1 -1 33363 no such table: streetname +stmt 33363 err 1 -1 33411 no such table: streetname +stmt 33411 err 1 -1 33456 no such table: streetname +stmt 33456 err 1 -1 33502 no such table: streetname +stmt 33502 err 1 -1 33552 no such table: streetname +stmt 33552 err 1 -1 33599 no such table: streetname +stmt 33599 err 1 -1 33651 no such table: streetname +stmt 33651 err 1 -1 33695 no such table: streetname +stmt 33695 err 1 -1 33740 no such table: streetname +stmt 33740 err 1 -1 33786 no such table: streetname +stmt 33786 err 1 -1 33838 no such table: streetname +stmt 33838 err 1 -1 33890 no such table: streetname +stmt 33890 err 1 -1 33934 no such table: streetname +stmt 33934 err 1 -1 33986 no such table: streetname +stmt 33986 err 1 -1 34039 no such table: streetname +stmt 34039 err 1 -1 34092 no such table: streetname +stmt 34092 err 1 -1 34143 no such table: streetname +stmt 34143 err 1 -1 34192 no such table: streetname +stmt 34192 err 1 -1 34249 no such table: streetname +stmt 34249 err 1 -1 34296 no such table: streetname +stmt 34296 err 1 -1 34342 no such table: streetname +stmt 34342 err 1 -1 34402 no such table: streetname +stmt 34402 err 1 -1 34445 no such table: streetname +stmt 34445 err 1 -1 34491 no such table: streetname +stmt 34491 err 1 -1 34542 no such table: streetname +stmt 34542 err 1 -1 34593 no such table: streetname +stmt 34593 err 1 -1 34642 no such table: streetname +stmt 34642 err 1 -1 34690 no such table: streetname +stmt 34690 err 1 -1 34738 no such table: streetname +stmt 34738 err 1 -1 34789 no such table: streetname +stmt 34789 err 1 -1 34835 no such table: streetname +stmt 34835 err 1 -1 34886 no such table: streetname +stmt 34886 err 1 -1 34932 no such table: streetname +stmt 34932 err 1 -1 34975 no such table: streetname +stmt 34975 err 1 -1 35026 no such table: streetname +stmt 35026 err 1 -1 35072 no such table: streetname +stmt 35072 err 1 -1 35123 no such table: streetname +stmt 35123 err 1 -1 35169 no such table: streetname +stmt 35169 err 1 -1 35221 no such table: streetname +stmt 35221 err 1 -1 35275 no such table: streetname +stmt 35275 err 1 -1 35319 no such table: streetname +stmt 35319 err 1 -1 35367 no such table: streetname +stmt 35367 err 1 -1 35413 no such table: streetname +stmt 35413 err 1 -1 35461 no such table: streetname +stmt 35461 err 1 -1 35509 no such table: streetname +stmt 35509 err 1 -1 35558 no such table: streetname +stmt 35558 err 1 -1 35604 no such table: streetname +stmt 35604 err 1 -1 35649 no such table: streetname +stmt 35649 err 1 -1 35694 no such table: streetname +stmt 35694 err 1 -1 35738 no such table: streetname +stmt 35738 err 1 -1 35782 no such table: streetname +stmt 35782 err 1 -1 35826 no such table: streetname +stmt 35826 err 1 -1 35874 no such table: streetname +stmt 35874 err 1 -1 35926 no such table: streetname +stmt 35926 err 1 -1 35976 no such table: streetname +stmt 35976 err 1 -1 36023 no such table: streetname +stmt 36023 err 1 -1 36069 no such table: streetname +stmt 36069 err 1 -1 36121 no such table: streetname +stmt 36121 err 1 -1 36171 no such table: streetname +stmt 36171 err 1 -1 36222 no such table: streetname +stmt 36222 err 1 -1 36274 no such table: streetname +stmt 36274 err 1 -1 36320 no such table: streetname +stmt 36320 err 1 -1 36368 no such table: streetname +stmt 36368 err 1 -1 36412 no such table: streetname +stmt 36412 err 1 -1 36458 no such table: streetname +stmt 36458 err 1 -1 36506 no such table: streetname +stmt 36506 err 1 -1 36555 no such table: streetname +stmt 36555 err 1 -1 36602 no such table: streetname +stmt 36602 err 1 -1 36649 no such table: streetname +stmt 36649 err 1 -1 36696 no such table: streetname +stmt 36696 err 1 -1 36746 no such table: streetname +stmt 36746 err 1 -1 36790 no such table: streetname +stmt 36790 err 1 -1 36835 no such table: streetname +stmt 36835 err 1 -1 36878 no such table: streetname +stmt 36878 err 1 -1 36929 no such table: streetname +stmt 36929 err 1 -1 36975 no such table: streetname +stmt 36975 err 1 -1 37023 no such table: streetname +stmt 37023 err 1 -1 37070 no such table: streetname +stmt 37070 err 1 -1 37113 no such table: streetname +stmt 37113 err 1 -1 37169 no such table: streetname +stmt 37169 err 1 -1 37216 no such table: streetname +stmt 37216 err 1 -1 37268 no such table: streetname +stmt 37268 err 1 -1 37313 no such table: streetname +stmt 37313 err 1 -1 37360 no such table: streetname +stmt 37360 err 1 -1 37406 no such table: streetname +stmt 37406 err 1 -1 37457 no such table: streetname +stmt 37457 err 1 -1 37503 no such table: streetname +stmt 37503 err 1 -1 37556 no such table: streetname +stmt 37556 err 1 -1 37610 no such table: streetname +stmt 37610 err 1 -1 37656 no such table: streetname +stmt 37656 err 1 -1 37707 no such table: streetname +stmt 37707 err 1 -1 37758 no such table: streetname +stmt 37758 err 1 -1 37807 no such table: streetname +stmt 37807 err 1 -1 37857 no such table: streetname +stmt 37857 err 1 -1 37902 no such table: streetname +stmt 37902 err 1 -1 37949 no such table: streetname +stmt 37949 err 1 -1 37999 no such table: streetname +stmt 37999 err 1 -1 38047 no such table: streetname +stmt 38047 err 1 -1 38097 no such table: streetname +stmt 38097 err 1 -1 38147 no such table: streetname +stmt 38147 err 1 -1 38192 no such table: streetname +stmt 38192 err 1 -1 38238 no such table: streetname +stmt 38238 err 1 -1 38287 no such table: streetname +stmt 38287 err 1 -1 38331 no such table: streetname +stmt 38331 err 1 -1 38380 no such table: streetname +stmt 38380 err 1 -1 38426 no such table: streetname +stmt 38426 err 1 -1 38471 no such table: streetname +stmt 38471 err 1 -1 38521 no such table: streetname +stmt 38521 err 1 -1 38567 no such table: streetname +stmt 38567 err 1 -1 38618 no such table: streetname +stmt 38618 err 1 -1 38669 no such table: streetname +stmt 38669 err 1 -1 38714 no such table: streetname +stmt 38714 err 1 -1 38766 no such table: streetname +stmt 38766 err 1 -1 38814 no such table: streetname +stmt 38814 err 1 -1 38860 no such table: streetname +stmt 38860 err 1 -1 38906 no such table: streetname +stmt 38906 err 1 -1 38955 no such table: streetname +stmt 38955 err 1 -1 39003 no such table: streetname +stmt 39003 err 1 -1 39057 no such table: streetname +stmt 39057 err 1 -1 39107 no such table: streetname +stmt 39107 err 1 -1 39159 no such table: streetname +stmt 39159 err 1 -1 39211 no such table: streetname +stmt 39211 err 1 -1 39255 no such table: streetname +stmt 39255 err 1 -1 39299 no such table: streetname +stmt 39299 err 1 -1 39345 no such table: streetname +stmt 39345 err 1 -1 39392 no such table: streetname +stmt 39392 err 1 -1 39445 no such table: streetname +stmt 39445 err 1 -1 39491 no such table: streetname +stmt 39491 err 1 -1 39538 no such table: streetname +stmt 39538 err 1 -1 39583 no such table: streetname +stmt 39583 err 1 -1 39634 no such table: streetname +stmt 39634 err 1 -1 39680 no such table: streetname +stmt 39680 err 1 -1 39731 no such table: streetname +stmt 39731 err 1 -1 39784 no such table: streetname +stmt 39784 err 1 -1 39836 no such table: streetname +stmt 39836 err 1 -1 39887 no such table: streetname +stmt 39887 err 1 -1 39938 no such table: streetname +stmt 39938 err 1 -1 39990 no such table: streetname +stmt 39990 err 1 -1 40041 no such table: streetname +stmt 40041 err 1 -1 40086 no such table: streetname +stmt 40086 err 1 -1 40132 no such table: streetname +stmt 40132 err 1 -1 40179 no such table: streetname +stmt 40179 err 1 -1 40223 no such table: streetname +stmt 40223 err 1 -1 40272 no such table: streetname +stmt 40272 err 1 -1 40321 no such table: streetname +stmt 40321 err 1 -1 40373 no such table: streetname +stmt 40373 err 1 -1 40419 no such table: streetname +stmt 40419 err 1 -1 40464 no such table: streetname +stmt 40464 err 1 -1 40511 no such table: streetname +stmt 40511 err 1 -1 40560 no such table: streetname +stmt 40560 err 1 -1 40608 no such table: streetname +stmt 40608 err 1 -1 40652 no such table: streetname +stmt 40652 err 1 -1 40699 no such table: streetname +stmt 40699 err 1 -1 40747 no such table: streetname +stmt 40747 err 1 -1 40795 no such table: streetname +stmt 40795 err 1 -1 40840 no such table: streetname +stmt 40840 err 1 -1 40888 no such table: streetname +stmt 40888 err 1 -1 40934 no such table: streetname +stmt 40934 err 1 -1 40980 no such table: streetname +stmt 40980 err 1 -1 41028 no such table: streetname +stmt 41028 err 1 -1 41077 no such table: streetname +stmt 41077 err 1 -1 41125 no such table: streetname +stmt 41125 err 1 -1 41176 no such table: streetname +stmt 41176 err 1 -1 41227 no such table: streetname +stmt 41227 err 1 -1 41277 no such table: streetname +stmt 41277 err 1 -1 41326 no such table: streetname +stmt 41326 err 1 -1 41380 no such table: streetname +stmt 41380 err 1 -1 41435 no such table: streetname +stmt 41435 err 1 -1 41482 no such table: streetname +stmt 41482 err 1 -1 41530 no such table: streetname +stmt 41530 err 1 -1 41576 no such table: streetname +stmt 41576 err 1 -1 41632 no such table: streetname +stmt 41632 err 1 -1 41683 no such table: streetname +stmt 41683 err 1 -1 41728 no such table: streetname +stmt 41728 err 1 -1 41774 no such table: streetname +stmt 41774 err 1 -1 41822 no such table: streetname +stmt 41822 err 1 -1 41881 no such table: streetname +stmt 41881 err 1 -1 41926 no such table: streetname +stmt 41926 err 1 -1 41973 no such table: streetname +stmt 41973 err 1 -1 42018 no such table: streetname +stmt 42018 err 1 -1 42073 no such table: streetname +stmt 42073 err 1 -1 42125 no such table: streetname +stmt 42125 err 1 -1 42176 no such table: streetname +stmt 42176 err 1 -1 42223 no such table: streetname +stmt 42223 err 1 -1 42270 no such table: streetname +stmt 42270 err 1 -1 42314 no such table: streetname +stmt 42314 err 1 -1 42364 no such table: streetname +stmt 42364 err 1 -1 42414 no such table: streetname +stmt 42414 err 1 -1 42463 no such table: streetname +stmt 42463 err 1 -1 42512 no such table: streetname +stmt 42512 err 1 -1 42564 no such table: streetname +stmt 42564 err 1 -1 42609 no such table: streetname +stmt 42609 err 1 -1 42663 no such table: streetname +stmt 42663 err 1 -1 42710 no such table: streetname +stmt 42710 err 1 -1 42757 no such table: streetname +stmt 42757 err 1 -1 42805 no such table: streetname +stmt 42805 err 1 -1 42849 no such table: streetname +stmt 42849 err 1 -1 42899 no such table: streetname +stmt 42899 err 1 -1 42949 no such table: streetname +stmt 42949 err 1 -1 42999 no such table: streetname +stmt 42999 err 1 -1 43044 no such table: streetname +stmt 43044 err 1 -1 43092 no such table: streetname +stmt 43092 err 1 -1 43141 no such table: streetname +stmt 43141 err 1 -1 43191 no such table: streetname +stmt 43191 err 1 -1 43245 no such table: streetname +stmt 43245 err 1 -1 43297 no such table: streetname +stmt 43297 err 1 -1 43342 no such table: streetname +stmt 43342 err 1 -1 43388 no such table: streetname +stmt 43388 err 1 -1 43433 no such table: streetname +stmt 43433 err 1 -1 43478 no such table: streetname +stmt 43478 err 1 -1 43527 no such table: streetname +stmt 43527 err 1 -1 43575 no such table: streetname +stmt 43575 err 1 -1 43621 no such table: streetname +stmt 43621 err 1 -1 43665 no such table: streetname +stmt 43665 err 1 -1 43715 no such table: streetname +stmt 43715 err 1 -1 43764 no such table: streetname +stmt 43764 err 1 -1 43814 no such table: streetname +stmt 43814 err 1 -1 43864 no such table: streetname +stmt 43864 err 1 -1 43912 no such table: streetname +stmt 43912 err 1 -1 43958 no such table: streetname +stmt 43958 err 1 -1 44006 no such table: streetname +stmt 44006 err 1 -1 44052 no such table: streetname +stmt 44052 err 1 -1 44098 no such table: streetname +stmt 44098 err 1 -1 44145 no such table: streetname +stmt 44145 err 1 -1 44190 no such table: streetname +stmt 44190 err 1 -1 44237 no such table: streetname +stmt 44237 err 1 -1 44284 no such table: streetname +stmt 44284 err 1 -1 44333 no such table: streetname +stmt 44333 err 1 -1 44381 no such table: streetname +stmt 44381 err 1 -1 44439 no such table: streetname +stmt 44439 err 1 -1 44484 no such table: streetname +stmt 44484 err 1 -1 44534 no such table: streetname +stmt 44534 err 1 -1 44581 no such table: streetname +stmt 44581 err 1 -1 44627 no such table: streetname +stmt 44627 err 1 -1 44669 no such table: streetname +stmt 44669 err 1 -1 44716 no such table: streetname +stmt 44716 err 1 -1 44766 no such table: streetname +stmt 44766 err 1 -1 44812 no such table: streetname +stmt 44812 err 1 -1 44859 no such table: streetname +stmt 44859 err 1 -1 44905 no such table: streetname +stmt 44905 err 1 -1 44950 no such table: streetname +stmt 44950 err 1 -1 44994 no such table: streetname +stmt 44994 err 1 -1 45043 no such table: streetname +stmt 45043 err 1 -1 45089 no such table: streetname +stmt 45089 err 1 -1 45139 no such table: streetname +stmt 45139 err 1 -1 45193 no such table: streetname +stmt 45193 err 1 -1 45242 no such table: streetname +stmt 45242 err 1 -1 45297 no such table: streetname +stmt 45297 err 1 -1 45351 no such table: streetname +stmt 45351 err 1 -1 45400 no such table: streetname +stmt 45400 err 1 -1 45448 no such table: streetname +stmt 45448 err 1 -1 45497 no such table: streetname +stmt 45497 err 1 -1 45544 no such table: streetname +stmt 45544 err 1 -1 45589 no such table: streetname +stmt 45589 err 1 -1 45635 no such table: streetname +stmt 45635 err 1 -1 45680 no such table: streetname +stmt 45680 err 1 -1 45726 no such table: streetname +stmt 45726 err 1 -1 45768 no such table: streetname +stmt 45768 err 1 -1 45812 no such table: streetname +stmt 45812 err 1 -1 45858 no such table: streetname +stmt 45858 err 1 -1 45909 no such table: streetname +stmt 45909 err 1 -1 45959 no such table: streetname +stmt 45959 err 1 -1 46010 no such table: streetname +stmt 46010 err 1 -1 46061 no such table: streetname +stmt 46061 err 1 -1 46107 no such table: streetname +stmt 46107 err 1 -1 46155 no such table: streetname +stmt 46155 err 1 -1 46203 no such table: streetname +stmt 46203 err 1 -1 46250 no such table: streetname +stmt 46250 err 1 -1 46298 no such table: streetname +stmt 46298 err 1 -1 46347 no such table: streetname +stmt 46347 err 1 -1 46393 no such table: streetname +stmt 46393 err 1 -1 46445 no such table: streetname +stmt 46445 err 1 -1 46496 no such table: streetname +stmt 46496 err 1 -1 46539 no such table: streetname +stmt 46539 err 1 -1 46590 no such table: streetname +stmt 46590 err 1 -1 46638 no such table: streetname +stmt 46638 err 1 -1 46690 no such table: streetname +stmt 46690 err 1 -1 46741 no such table: streetname +stmt 46741 err 1 -1 46792 no such table: streetname +stmt 46792 err 1 -1 46837 no such table: streetname +stmt 46837 err 1 -1 46888 no such table: streetname +stmt 46888 err 1 -1 46933 no such table: streetname +stmt 46933 err 1 -1 46977 no such table: streetname +stmt 46977 err 1 -1 47024 no such table: streetname +stmt 47024 err 1 -1 47075 no such table: streetname +stmt 47075 err 1 -1 47124 no such table: streetname +stmt 47124 err 1 -1 47171 no such table: streetname +stmt 47171 err 1 -1 47217 no such table: streetname +stmt 47217 err 1 -1 47263 no such table: streetname +stmt 47263 err 1 -1 47310 no such table: streetname +stmt 47310 err 1 -1 47360 no such table: streetname +stmt 47360 err 1 -1 47408 no such table: streetname +stmt 47408 err 1 -1 47457 no such table: streetname +stmt 47457 err 1 -1 47503 no such table: streetname +stmt 47503 err 1 -1 47552 no such table: streetname +stmt 47552 err 1 -1 47599 no such table: streetname +stmt 47599 err 1 -1 47645 no such table: streetname +stmt 47645 err 1 -1 47696 no such table: streetname +stmt 47696 err 1 -1 47744 no such table: streetname +stmt 47744 err 1 -1 47787 no such table: streetname +stmt 47787 err 1 -1 47837 no such table: streetname +stmt 47837 err 1 -1 47887 no such table: streetname +stmt 47887 err 1 -1 47934 no such table: streetname +stmt 47934 err 1 -1 47981 no such table: streetname +stmt 47981 err 1 -1 48027 no such table: streetname +stmt 48027 err 1 -1 48075 no such table: streetname +stmt 48075 err 1 -1 48126 no such table: streetname +stmt 48126 err 1 -1 48171 no such table: streetname +stmt 48171 err 1 -1 48214 no such table: streetname +stmt 48214 err 1 -1 48259 no such table: streetname +stmt 48259 err 1 -1 48305 no such table: streetname +stmt 48305 err 1 -1 48353 no such table: streetname +stmt 48353 err 1 -1 48406 no such table: streetname +stmt 48406 err 1 -1 48456 no such table: streetname +stmt 48456 err 1 -1 48504 no such table: streetname +stmt 48504 err 1 -1 48552 no such table: streetname +stmt 48552 err 1 -1 48603 no such table: streetname +stmt 48603 err 1 -1 48656 no such table: streetname +stmt 48656 err 1 -1 48702 no such table: streetname +stmt 48702 err 1 -1 48753 no such table: streetname +stmt 48753 err 1 -1 48799 no such table: streetname +stmt 48799 err 1 -1 48852 no such table: streetname +stmt 48852 err 1 -1 48899 no such table: streetname +stmt 48899 err 1 -1 48946 no such table: streetname +stmt 48946 err 1 -1 48996 no such table: streetname +stmt 48996 err 1 -1 49043 no such table: streetname +stmt 49043 err 1 -1 49092 no such table: streetname +stmt 49092 err 1 -1 49148 no such table: streetname +stmt 49148 err 1 -1 49205 no such table: streetname +stmt 49205 err 1 -1 49259 no such table: streetname +stmt 49259 err 1 -1 49314 no such table: streetname +stmt 49314 err 1 -1 49369 no such table: streetname +stmt 49369 err 1 -1 49423 no such table: streetname +stmt 49423 err 1 -1 49474 no such table: streetname +stmt 49474 err 1 -1 49518 no such table: streetname +stmt 49518 err 1 -1 49567 no such table: streetname +stmt 49567 err 1 -1 49611 no such table: streetname +stmt 49611 err 1 -1 49656 no such table: streetname +stmt 49656 err 1 -1 49704 no such table: streetname +stmt 49704 err 1 -1 49753 no such table: streetname +stmt 49753 err 1 -1 49796 no such table: streetname +stmt 49796 err 1 -1 49844 no such table: streetname +stmt 49844 err 1 -1 49893 no such table: streetname +stmt 49893 err 1 -1 49938 no such table: streetname +stmt 49938 err 1 -1 49988 no such table: streetname +stmt 49988 err 1 -1 50036 no such table: streetname +stmt 50036 err 1 -1 50083 no such table: streetname +stmt 50083 err 1 -1 50132 no such table: streetname +stmt 50132 err 1 -1 50179 no such table: streetname +stmt 50179 err 1 -1 50226 no such table: streetname +stmt 50226 err 1 -1 50273 no such table: streetname +stmt 50273 err 1 -1 50321 no such table: streetname +stmt 50321 err 1 -1 50368 no such table: streetname +stmt 50368 err 1 -1 50420 no such table: streetname +stmt 50420 err 1 -1 50467 no such table: streetname +stmt 50467 err 1 -1 50512 no such table: streetname +stmt 50512 err 1 -1 50556 no such table: streetname +stmt 50556 err 1 -1 50603 no such table: streetname +stmt 50603 err 1 -1 50651 no such table: streetname +stmt 50651 err 1 -1 50700 no such table: streetname +stmt 50700 err 1 -1 50754 no such table: streetname +stmt 50754 err 1 -1 50802 no such table: streetname +stmt 50802 err 1 -1 50849 no such table: streetname +stmt 50849 err 1 -1 50893 no such table: streetname +stmt 50893 err 1 -1 50943 no such table: streetname +stmt 50943 err 1 -1 50992 no such table: streetname +stmt 50992 err 1 -1 51041 no such table: streetname +stmt 51041 err 1 -1 51090 no such table: streetname +stmt 51090 err 1 -1 51138 no such table: streetname +stmt 51138 err 1 -1 51194 no such table: streetname +stmt 51194 err 1 -1 51238 no such table: streetname +stmt 51238 err 1 -1 51288 no such table: streetname +stmt 51288 err 1 -1 51333 no such table: streetname +stmt 51333 err 1 -1 51378 no such table: streetname +stmt 51378 err 1 -1 51426 no such table: streetname +stmt 51426 err 1 -1 51470 no such table: streetname +stmt 51470 err 1 -1 51520 no such table: streetname +stmt 51520 err 1 -1 51564 no such table: streetname +stmt 51564 err 1 -1 51614 no such table: streetname +stmt 51614 err 1 -1 51664 no such table: streetname +stmt 51664 err 1 -1 51711 no such table: streetname +stmt 51711 err 1 -1 51765 no such table: streetname +stmt 51765 err 1 -1 51815 no such table: streetname +stmt 51815 err 1 -1 51869 no such table: streetname +stmt 51869 err 1 -1 51914 no such table: streetname +stmt 51914 err 1 -1 51958 no such table: streetname +stmt 51958 err 1 -1 52008 no such table: streetname +stmt 52008 err 1 -1 52060 no such table: streetname +stmt 52060 err 1 -1 52109 no such table: streetname +stmt 52109 err 1 -1 52156 no such table: streetname +stmt 52156 err 1 -1 52207 no such table: streetname +stmt 52207 err 1 -1 52255 no such table: streetname +stmt 52255 err 1 -1 52302 no such table: streetname +stmt 52302 err 1 -1 52348 no such table: streetname +stmt 52348 err 1 -1 52398 no such table: streetname +stmt 52398 err 1 -1 52447 no such table: streetname +stmt 52447 err 1 -1 52498 no such table: streetname +stmt 52498 err 1 -1 52544 no such table: streetname +stmt 52544 err 1 -1 52595 no such table: streetname +stmt 52595 err 1 -1 52647 no such table: streetname +stmt 52647 err 1 -1 52699 no such table: streetname +stmt 52699 err 1 -1 52747 no such table: streetname +stmt 52747 err 1 -1 52792 no such table: streetname +stmt 52792 err 1 -1 52844 no such table: streetname +stmt 52844 err 1 -1 52891 no such table: streetname +stmt 52891 err 1 -1 52936 no such table: streetname +stmt 52936 err 1 -1 52991 no such table: streetname +stmt 52991 err 1 -1 53044 no such table: streetname +stmt 53044 err 1 -1 53092 no such table: streetname +stmt 53092 err 1 -1 53142 no such table: streetname +stmt 53142 err 1 -1 53188 no such table: streetname +stmt 53188 err 1 -1 53235 no such table: streetname +stmt 53235 err 1 -1 53279 no such table: streetname +stmt 53279 err 1 -1 53329 no such table: streetname +stmt 53329 err 1 -1 53379 no such table: streetname +stmt 53379 err 1 -1 53429 no such table: streetname +stmt 53429 err 1 -1 53477 no such table: streetname +stmt 53477 err 1 -1 53527 no such table: streetname +stmt 53527 err 1 -1 53573 no such table: streetname +stmt 53573 err 1 -1 53623 no such table: streetname +stmt 53623 err 1 -1 53666 no such table: streetname +stmt 53666 err 1 -1 53716 no such table: streetname +stmt 53716 err 1 -1 53761 no such table: streetname +stmt 53761 err 1 -1 53806 no such table: streetname +stmt 53806 err 1 -1 53857 no such table: streetname +stmt 53857 err 1 -1 53906 no such table: streetname +stmt 53906 err 1 -1 53953 no such table: streetname +stmt 53953 err 1 -1 54005 no such table: streetname +stmt 54005 err 1 -1 54055 no such table: streetname +stmt 54055 err 1 -1 54099 no such table: streetname +stmt 54099 err 1 -1 54147 no such table: streetname +stmt 54147 err 1 -1 54194 no such table: streetname +stmt 54194 err 1 -1 54240 no such table: streetname +stmt 54240 err 1 -1 54284 no such table: streetname +stmt 54284 err 1 -1 54336 no such table: streetname +stmt 54336 err 1 -1 54384 no such table: streetname +stmt 54384 err 1 -1 54432 no such table: streetname +stmt 54432 err 1 -1 54480 no such table: streetname +stmt 54480 err 1 -1 54525 no such table: streetname +stmt 54525 err 1 -1 54570 no such table: streetname +stmt 54570 err 1 -1 54615 no such table: streetname +stmt 54615 err 1 -1 54660 no such table: streetname +stmt 54660 err 1 -1 54711 no such table: streetname +stmt 54711 err 1 -1 54758 no such table: streetname +stmt 54758 err 1 -1 54804 no such table: streetname +stmt 54804 err 1 -1 54853 no such table: streetname +stmt 54853 err 1 -1 54904 no such table: streetname +stmt 54904 err 1 -1 54953 no such table: streetname +stmt 54953 err 1 -1 55003 no such table: streetname +stmt 55003 err 1 -1 55056 no such table: streetname +stmt 55056 err 1 -1 55107 no such table: streetname +stmt 55107 err 1 -1 55157 no such table: streetname +stmt 55157 err 1 -1 55210 no such table: streetname +stmt 55210 err 1 -1 55257 no such table: streetname +stmt 55257 err 1 -1 55304 no such table: streetname +stmt 55304 err 1 -1 55350 no such table: streetname +stmt 55350 err 1 -1 55398 no such table: streetname +stmt 55398 err 1 -1 55448 no such table: streetname +stmt 55448 err 1 -1 55492 no such table: streetname +stmt 55492 err 1 -1 55541 no such table: streetname +stmt 55541 err 1 -1 55591 no such table: streetname +stmt 55591 err 1 -1 55643 no such table: streetname +stmt 55643 err 1 -1 55691 no such table: streetname +stmt 55691 err 1 -1 55740 no such table: streetname +stmt 55740 err 1 -1 55789 no such table: streetname +stmt 55789 err 1 -1 55838 no such table: streetname +stmt 55838 err 1 -1 55886 no such table: streetname +stmt 55886 err 1 -1 55935 no such table: streetname +stmt 55935 err 1 -1 55987 no such table: streetname +stmt 55987 err 1 -1 56036 no such table: streetname +stmt 56036 err 1 -1 56088 no such table: streetname +stmt 56088 err 1 -1 56137 no such table: streetname +stmt 56137 err 1 -1 56187 no such table: streetname +stmt 56187 err 1 -1 56238 no such table: streetname +stmt 56238 err 1 -1 56285 no such table: streetname +stmt 56285 err 1 -1 56332 no such table: streetname +stmt 56332 err 1 -1 56382 no such table: streetname +stmt 56382 err 1 -1 56431 no such table: streetname +stmt 56431 err 1 -1 56480 no such table: streetname +stmt 56480 err 1 -1 56531 no such table: streetname +stmt 56531 err 1 -1 56583 no such table: streetname +stmt 56583 err 1 -1 56633 no such table: streetname +stmt 56633 err 1 -1 56683 no such table: streetname +stmt 56683 err 1 -1 56732 no such table: streetname +stmt 56732 err 1 -1 56781 no such table: streetname +stmt 56781 err 1 -1 56827 no such table: streetname +stmt 56827 err 1 -1 56875 no such table: streetname +stmt 56875 err 1 -1 56921 no such table: streetname +stmt 56921 err 1 -1 56966 no such table: streetname +stmt 56966 err 1 -1 57017 no such table: streetname +stmt 57017 err 1 -1 57064 no such table: streetname +stmt 57064 err 1 -1 57111 no such table: streetname +stmt 57111 err 1 -1 57157 no such table: streetname +stmt 57157 err 1 -1 57208 no such table: streetname +stmt 57208 err 1 -1 57257 no such table: streetname +stmt 57257 err 1 -1 57308 no such table: streetname +stmt 57308 err 1 -1 57355 no such table: streetname +stmt 57355 err 1 -1 57405 no such table: streetname +stmt 57405 err 1 -1 57454 no such table: streetname +stmt 57454 err 1 -1 57509 no such table: streetname +stmt 57509 err 1 -1 57558 no such table: streetname +stmt 57558 err 1 -1 57612 no such table: streetname +stmt 57612 err 1 -1 57657 no such table: streetname +stmt 57657 err 1 -1 57710 no such table: streetname +stmt 57710 err 1 -1 57755 no such table: streetname +stmt 57755 err 1 -1 57799 no such table: streetname +stmt 57799 err 1 -1 57844 no such table: streetname +stmt 57844 err 1 -1 57890 no such table: streetname +stmt 57890 err 1 -1 57941 no such table: streetname +stmt 57941 err 1 -1 57987 no such table: streetname +stmt 57987 err 1 -1 58035 no such table: streetname +stmt 58035 err 1 -1 58079 no such table: streetname +stmt 58079 err 1 -1 58125 no such table: streetname +stmt 58125 err 1 -1 58171 no such table: streetname +stmt 58171 err 1 -1 58216 no such table: streetname +stmt 58216 err 1 -1 58263 no such table: streetname +stmt 58263 err 1 -1 58311 no such table: streetname +stmt 58311 err 1 -1 58362 no such table: streetname +stmt 58362 err 1 -1 58408 no such table: streetname +stmt 58408 err 1 -1 58451 no such table: streetname +stmt 58451 err 1 -1 58495 no such table: streetname +stmt 58495 err 1 -1 58544 no such table: streetname +stmt 58544 err 1 -1 58590 no such table: streetname +stmt 58590 err 1 -1 58642 no such table: streetname +stmt 58642 err 1 -1 58692 no such table: streetname +stmt 58692 err 1 -1 58743 no such table: streetname +stmt 58743 err 1 -1 58792 no such table: streetname +stmt 58792 err 1 -1 58843 no such table: streetname +stmt 58843 err 1 -1 58890 no such table: streetname +stmt 58890 err 1 -1 58941 no such table: streetname +stmt 58941 err 1 -1 58983 no such table: streetname +stmt 58983 err 1 -1 59029 no such table: streetname +stmt 59029 err 1 -1 59076 no such table: streetname +stmt 59076 err 1 -1 59128 no such table: streetname +stmt 59128 err 1 -1 59173 no such table: streetname +stmt 59173 err 1 -1 59219 no such table: streetname +stmt 59219 err 1 -1 59269 no such table: streetname +stmt 59269 err 1 -1 59322 no such table: streetname +stmt 59322 err 1 -1 59368 no such table: streetname +stmt 59368 err 1 -1 59416 no such table: streetname +stmt 59416 err 1 -1 59463 no such table: streetname +stmt 59463 err 1 -1 59509 no such table: streetname +stmt 59509 err 1 -1 59563 no such table: streetname +stmt 59563 err 1 -1 59610 no such table: streetname +stmt 59610 err 1 -1 59655 no such table: streetname +stmt 59655 err 1 -1 59703 no such table: streetname +stmt 59703 err 1 -1 59755 no such table: streetname +stmt 59755 err 1 -1 59801 no such table: streetname +stmt 59801 err 1 -1 59846 no such table: streetname +stmt 59846 err 1 -1 59894 no such table: streetname +stmt 59894 err 1 -1 59939 no such table: streetname +stmt 59939 err 1 -1 59990 no such table: streetname +stmt 59990 err 1 -1 60039 no such table: streetname +stmt 60039 err 1 -1 60089 no such table: streetname +stmt 60089 err 1 -1 60132 no such table: streetname +stmt 60132 err 1 -1 60181 no such table: streetname +stmt 60181 err 1 -1 60230 no such table: streetname +stmt 60230 err 1 -1 60281 no such table: streetname +stmt 60281 err 1 -1 60332 no such table: streetname +stmt 60332 err 1 -1 60389 no such table: streetname +stmt 60389 err 1 -1 60434 no such table: streetname +stmt 60434 err 1 -1 60481 no such table: streetname +stmt 60481 err 1 -1 60528 no such table: streetname +stmt 60528 err 1 -1 60570 no such table: streetname +stmt 60570 err 1 -1 60620 no such table: streetname +stmt 60620 err 1 -1 60665 no such table: streetname +stmt 60665 err 1 -1 60711 no such table: streetname +stmt 60711 err 1 -1 60758 no such table: streetname +stmt 60758 err 1 -1 60804 no such table: streetname +stmt 60804 err 1 -1 60855 no such table: streetname +stmt 60855 err 1 -1 60899 no such table: streetname +stmt 60899 err 1 -1 60946 no such table: streetname +stmt 60946 err 1 -1 60991 no such table: streetname +stmt 60991 err 1 -1 61043 no such table: streetname +stmt 61043 err 1 -1 61086 no such table: streetname +stmt 61086 err 1 -1 61130 no such table: streetname +stmt 61130 err 1 -1 61182 no such table: streetname +stmt 61182 err 1 -1 61228 no such table: streetname +stmt 61228 err 1 -1 61276 no such table: streetname +stmt 61276 err 1 -1 61327 no such table: streetname +stmt 61327 err 1 -1 61376 no such table: streetname +stmt 61376 err 1 -1 61420 no such table: streetname +stmt 61420 err 1 -1 61467 no such table: streetname +stmt 61467 err 1 -1 61521 no such table: streetname +stmt 61521 err 1 -1 61576 no such table: streetname +stmt 61576 err 1 -1 61623 no such table: streetname +stmt 61623 err 1 -1 61675 no such table: streetname +stmt 61675 err 1 -1 61726 no such table: streetname +stmt 61726 err 1 -1 61776 no such table: streetname +stmt 61776 err 1 -1 61822 no such table: streetname +stmt 61822 err 1 -1 61874 no such table: streetname +stmt 61874 err 1 -1 61920 no such table: streetname +stmt 61920 err 1 -1 61974 no such table: streetname +stmt 61974 err 1 -1 62027 no such table: streetname +stmt 62027 err 1 -1 62079 no such table: streetname +stmt 62079 err 1 -1 62126 no such table: streetname +stmt 62126 err 1 -1 62176 no such table: streetname +stmt 62176 err 1 -1 62228 no such table: streetname +stmt 62228 err 1 -1 62277 no such table: streetname +stmt 62277 err 1 -1 62326 no such table: streetname +stmt 62326 err 1 -1 62375 no such table: streetname +stmt 62375 err 1 -1 62423 no such table: streetname +stmt 62423 err 1 -1 62471 no such table: streetname +stmt 62471 err 1 -1 62519 no such table: streetname +stmt 62519 err 1 -1 62567 no such table: streetname +stmt 62567 err 1 -1 62618 no such table: streetname +stmt 62618 err 1 -1 62668 no such table: streetname +stmt 62668 err 1 -1 62716 no such table: streetname +stmt 62716 err 1 -1 62770 no such table: streetname +stmt 62770 err 1 -1 62824 no such table: streetname +stmt 62824 err 1 -1 62878 no such table: streetname +stmt 62878 err 1 -1 62926 no such table: streetname +stmt 62926 err 1 -1 62979 no such table: streetname +stmt 62979 err 1 -1 63030 no such table: streetname +stmt 63030 err 1 -1 63078 no such table: streetname +stmt 63078 err 1 -1 63125 no such table: streetname +stmt 63125 err 1 -1 63171 no such table: streetname +stmt 63171 err 1 -1 63221 no such table: streetname +stmt 63221 err 1 -1 63271 no such table: streetname +stmt 63271 err 1 -1 63320 no such table: streetname +stmt 63320 err 1 -1 63372 no such table: streetname +stmt 63372 err 1 -1 63418 no such table: streetname +stmt 63418 err 1 -1 63465 no such table: streetname +stmt 63465 err 1 -1 63520 no such table: streetname +stmt 63520 err 1 -1 63573 no such table: streetname +stmt 63573 err 1 -1 63621 no such table: streetname +stmt 63621 err 1 -1 63669 no such table: streetname +stmt 63669 err 1 -1 63715 no such table: streetname +stmt 63715 err 1 -1 63764 no such table: streetname +stmt 63764 err 1 -1 63813 no such table: streetname +stmt 63813 err 1 -1 63859 no such table: streetname +stmt 63859 err 1 -1 63907 no such table: streetname +stmt 63907 err 1 -1 63958 no such table: streetname +stmt 63958 err 1 -1 64007 no such table: streetname +stmt 64007 err 1 -1 64054 no such table: streetname +stmt 64054 err 1 -1 64105 no such table: streetname +stmt 64105 err 1 -1 64150 no such table: streetname +stmt 64150 err 1 -1 64200 no such table: streetname +stmt 64200 err 1 -1 64253 no such table: streetname +stmt 64253 err 1 -1 64300 no such table: streetname +stmt 64300 err 1 -1 64346 no such table: streetname +stmt 64346 err 1 -1 64401 no such table: streetname +stmt 64401 err 1 -1 64439 no such table: streetname +==== fuzzer1-2.1.dup2 + + SELECT n, distance FROM f2, streetname + WHERE f2.word MATCH 'wersley' + AND f2.distance<=150 + AND f2.word=streetname.n +---- +stmt 0 err 1 -1 139 no such table: f2 +==== fuzzer1-2.2 + + SELECT n, distance FROM f2, streetname + WHERE f2.word MATCH 'testledown' + AND f2.distance<=150 + AND f2.word=streetname.n +---- +stmt 0 err 1 -1 142 no such table: f2 +==== fuzzer1-2.3 + + SELECT DISTINCT streetname.n FROM f2, streetname + WHERE f2.word MATCH 'tayle' + AND f2.distance<=200 + AND streetname.n>=f2.word AND streetname.n<=(f2.word || x'F7BFBFBF') +---- +stmt 0 err 1 -1 191 no such table: f2 +==== fuzzer1-2.4.dup1 + + SELECT DISTINCT streetname.n + FROM f2 JOIN streetname + ON (streetname.n>=f2.word AND streetname.n<=(f2.word || 'zzzzzz')) + WHERE f2.word MATCH 'duck' + AND f2.distance<150 + AND f2.ruleset=3 + ORDER BY 1 +---- +stmt 0 err 1 -1 238 no such table: f2 +==== fuzzer1-2.5.dup1 + + SELECT DISTINCT streetname.n + FROM f2 JOIN streetname + ON (streetname.n>=f2.word AND streetname.n<=(f2.word || 'zzzzzz')) + WHERE f2.word MATCH 'duck' + AND f2.distance<150 + AND f2.ruleset=2 + ORDER BY 1 +---- +stmt 0 err 1 -1 238 no such table: f2 +==== fuzzer1-4.1 + + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.f3_rules(ruleset, cfrom, cto, cost); + INSERT INTO f3_rules(ruleset, cfrom, cto, cost) VALUES(0, 'x','y', 10); + INSERT INTO f3_rules(ruleset, cfrom, cto, cost) VALUES(1, 'a','b', 10); + CREATE VIRTUAL TABLE aux.f3 USING fuzzer(f3_rules); + SELECT word FROM f3 WHERE word MATCH 'ax' +---- +stmt 0 ok +stmt 28 err 1 44 57 unknown database aux +stmt 84 err 1 -1 158 no such table: f3_rules +stmt 158 err 1 -1 232 no such table: f3_rules +stmt 232 err 1 256 276 unknown database aux +stmt 286 err 1 -1 331 no such table: f3 +==== fuzzer1-generated + DROP TABLE IF EXISTS x2 +---- +stmt 0 ok +==== fuzzer1-generated.dup1 + + SELECT word FROM x2 WHERE word MATCH 'aaa' +---- +stmt 0 err 1 -1 49 no such table: x2 +==== 8.1 + + CREATE TABLE x3_rules(rule_set, cFrom, cTo, cost); + INSERT INTO x3_rules VALUES(2, 'a', 'x', 10); + INSERT INTO x3_rules VALUES(2, 'a', 'y', 9); + INSERT INTO x3_rules VALUES(2, 'a', 'z', 8); + CREATE VIRTUAL TABLE x3 USING fuzzer(x3_rules); +---- +stmt 0 ok +stmt 53 err 1 -1 101 no such table: x3_rules +stmt 101 err 1 -1 149 no such table: x3_rules +stmt 149 err 1 -1 197 no such table: x3_rules +stmt 197 ok +==== 8.2.1 + + SELECT cFrom, cTo, word + FROM x3_rules CROSS JOIN x3 + WHERE word MATCH 'a' AND cost=distance AND ruleset=2 + ORDER BY +cTo; +---- +stmt 0 err 1 -1 136 no such table: x3_rules +==== 8.2.2 + + SELECT cFrom, cTo, word + FROM x3 CROSS JOIN x3_rules + WHERE word MATCH 'a' AND cost=distance AND ruleset=2 + ORDER BY +cTo DESC +---- +stmt 0 err 1 -1 140 no such table: x3 +==== 8.2.3 + + SELECT cFrom, cTo, word + FROM x3_rules, x3 + WHERE word MATCH 'a' AND cost=distance AND ruleset=2 + ORDER BY +cTo DESC; +---- +stmt 0 err 1 -1 131 no such table: x3_rules +==== 8.2.4 + + SELECT cFrom, cTo, word + FROM x3, x3_rules + WHERE word MATCH 'a' AND cost=distance AND ruleset=2 + ORDER BY +cTo DESC; +---- +stmt 0 err 1 -1 130 no such table: x3 +==== 8.2.5 + + CREATE INDEX i1 ON x3_rules(cost); + SELECT cFrom, cTo, word + FROM x3_rules, x3 + WHERE word MATCH 'a' AND cost=distance AND ruleset=2 + ORDER BY +cTo DESC; +---- +stmt 0 err 1 -1 37 no such table: main.x3_rules +stmt 37 err 1 -1 168 no such table: x3_rules +==== 8.2.5.dup1 + + SELECT word FROM x3_rules, x3 WHERE word MATCH x3_rules.cFrom AND ruleset=2 +---- +stmt 0 err 1 -1 79 no such table: x3_rules +==== 8.2.6 + + SELECT word FROM x3_rules, x3 + WHERE word MATCH x3_rules.cFrom + AND ruleset=2 + AND x3_rules.cost=8; +---- +stmt 0 err 1 -1 112 no such table: x3_rules +==== 8.2.7 + + CREATE TABLE t1(a, b); + CREATE INDEX i2 ON t1(b); + SELECT word, distance FROM x3, t1 + WHERE x3.word MATCH t1.a AND ruleset=2 AND distance=t1.b; +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 152 no such table: x3 +==== 8.2.8 + + INSERT INTO x3_rules VALUES(1, 'a', 't', 5); + INSERT INTO x3_rules VALUES(1, 'a', 'u', 4); + INSERT INTO x3_rules VALUES(1, 'a', 'v', 3); + DROP TABLE x3; + CREATE VIRTUAL TABLE x3 USING fuzzer(x3_rules); + SELECT * FROM x3_rules; +---- +stmt 0 err 1 -1 48 no such table: x3_rules +stmt 48 err 1 -1 96 no such table: x3_rules +stmt 96 err 1 -1 144 no such table: x3_rules +stmt 144 err 1 -1 161 no such table: x3 +stmt 161 ok +stmt 211 err 1 -1 237 no such table: x3_rules +==== 8.2.9 + + SELECT word FROM x3 WHERE ruleset=2 AND word MATCH 'a' AND WORD MATCH 'b'; +---- +stmt 0 err 1 -1 77 no such table: x3 +==== 8.2.10 + + SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a' +---- +stmt 0 err 1 -1 58 no such table: x3 +==== 8.2.11 + + SELECT word FROM x3 WHERE ruleset<=1 AND word MATCH 'a' +---- +stmt 0 err 1 -1 59 no such table: x3 +==== 8.2.12 + + SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a' ORDER BY distance ASC; +---- +stmt 0 err 1 -1 80 no such table: x3 +==== 8.2.13 + + SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a' ORDER BY distance DESC; +---- +stmt 0 err 1 -1 81 no such table: x3 +==== 8.2.13.dup1 + + SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a' ORDER BY word ASC; +---- +stmt 0 err 1 -1 76 no such table: x3 +==== 8.2.14 + + SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a' ORDER BY word DESC; +---- +stmt 0 err 1 -1 77 no such table: x3 +==== 9.1 + + CREATE TABLE x4_rules(a, b, c, d); + INSERT INTO x4_rules VALUES(0, 'a', 'b', 10); + INSERT INTO x4_rules VALUES(0, 'a', 'c', 11); + INSERT INTO x4_rules VALUES(0, 'bx', 'zz', 20); + INSERT INTO x4_rules VALUES(0, 'cx', 'yy', 15); + INSERT INTO x4_rules VALUES(0, 'zz', '!!', 50); + CREATE VIRTUAL TABLE x4 USING fuzzer(x4_rules); +---- +stmt 0 ok +stmt 37 err 1 -1 85 no such table: x4_rules +stmt 85 err 1 -1 133 no such table: x4_rules +stmt 133 err 1 -1 183 no such table: x4_rules +stmt 183 err 1 -1 233 no such table: x4_rules +stmt 233 err 1 -1 283 no such table: x4_rules +stmt 283 ok +==== 9.2 + + SELECT word, distance FROM x4 WHERE word MATCH 'ax'; +---- +stmt 0 err 1 -1 55 no such table: x4 +==== 10.1 + + CREATE TABLE x5_rules(a, b, c, d); + CREATE VIRTUAL TABLE x5 USING fuzzer(x5_rules); +---- +stmt 0 ok +stmt 37 ok +==== 10.2 + + SELECT word, distance FROM x5 WHERE word MATCH + 'aaaaaaaaaXaaaaaaaaaXaaaaaaaaaXaaaaaaaaaXaaaaaaaaa' || + 'aaaaaaaaaXaaaaaaaaaXaaaaaaaaaXaaaaaaaaaXaaaaaaaaa' || + 'aaaaaaaaaXaaaaaaaaaXaaaaaaaaaXaaaaaaaaaXaaaaaaaaa' +---- +stmt 0 err 1 -1 227 no such table: x5 +==== 10.3 + + INSERT INTO x5_rules VALUES(0, 'a', '0.1.2.3.4.5.6.7.8.9.a', 1); + DROP TABLE x5; + CREATE VIRTUAL TABLE x5 USING fuzzer(x5_rules); + SELECT length(word) FROM x5 WHERE word MATCH 'a' LIMIT 50; +---- +stmt 0 err 1 -1 67 no such table: x5_rules +stmt 67 err 1 -1 84 no such table: x5 +stmt 84 ok +stmt 134 err 1 -1 195 no such table: x5 +==== 11.1 + + DROP TABLE IF EXISTS f1; + CREATE VIRTUAL TABLE f1 USING fuzzer('aaaaaaaaaaaaaaaa'bbbbbbbbbbbbbbbb); +---- +stmt 0 ok +stmt 27 ok +==== 11.2 + + DROP TABLE IF EXISTS f2; + CREATE VIRTUAL TABLE f2 USING fuzzer("xxxxxxxxxxxxxxxx"yyyyyyyyyyyyyyyy); +---- +stmt 0 ok +stmt 27 ok +==== 11.4 + + DROP TABLE IF EXISTS f4; + CREATE VIRTUAL TABLE f4 USING fuzzer('a'b); +---- +stmt 0 ok +stmt 27 ok diff --git a/parser/testdata/fuzzer2.metadata.json b/parser/testdata/fuzzer2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fuzzer2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fuzzer2.test b/parser/testdata/fuzzer2.test new file mode 100644 index 0000000..cc25d6f --- /dev/null +++ b/parser/testdata/fuzzer2.test @@ -0,0 +1,27 @@ +==== 1.1.1 + + DROP TABLE IF EXISTS x1; + DROP TABLE IF EXISTS x1_rules; + CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost); +---- +stmt 0 ok +stmt 27 ok +stmt 60 ok +==== 1.2 + + SELECT count(*) FROM x1_rules WHERE cTo!=cFrom; +---- +stmt 0 err 1 -1 50 no such table: x1_rules +==== 1.2.1 + + CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules); + SELECT word FROM x1 WHERE word MATCH 'xx' LIMIT 10; +---- +stmt 0 ok +stmt 50 err 1 -1 104 no such table: x1 +==== 1.2.2 + + SELECT cTo FROM x1_rules WHERE cFrom='xx' + ORDER BY cost asc, rowid asc LIMIT 9; +---- +stmt 0 err 1 -1 85 no such table: x1_rules diff --git a/parser/testdata/fuzzerfault.metadata.json b/parser/testdata/fuzzerfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/fuzzerfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/fuzzerfault.test b/parser/testdata/fuzzerfault.test new file mode 100644 index 0000000..4346279 --- /dev/null +++ b/parser/testdata/fuzzerfault.test @@ -0,0 +1,11 @@ +==== 4.0 + + CREATE TABLE t1_a(a INTEFDR PRIMARY KEY, b TEXT); + CREATE TABLE t3_a(k FnTEGER PRIMARY KEY, v TEXT); + CREATE TABLE t3_b(k INTEÀ5R PRIMARY KEY, v TEXT); + CREATE VIEW t3 AS SELECT * FROM t3_a UNION ALL SELECT * FROM t3_b; +---- +stmt 0 ok +stmt 52 ok +stmt 104 ok +stmt 157 ok diff --git a/parser/testdata/gcfault.metadata.json b/parser/testdata/gcfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/gcfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/gcfault.test b/parser/testdata/gcfault.test new file mode 100644 index 0000000..44adef2 --- /dev/null +++ b/parser/testdata/gcfault.test @@ -0,0 +1,14 @@ +==== gcfault-generated + + CREATE TABLE s(i, s); + INSERT INTO s VALUES(1, ',0123456789,'); + INSERT INTO s VALUES(2, X'2c303132333435363738392c'); + + CREATE TABLE e(e); + INSERT INTO e VALUES('v1'), ('v2'); +---- +stmt 0 ok +stmt 26 err 1 -1 71 no such table: s +stmt 71 err 1 -1 129 no such table: s +stmt 129 ok +stmt 153 err 1 -1 193 no such table: e diff --git a/parser/testdata/gencol1.metadata.json b/parser/testdata/gencol1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/gencol1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/gencol1.test b/parser/testdata/gencol1.test new file mode 100644 index 0000000..8afdcdd --- /dev/null +++ b/parser/testdata/gencol1.test @@ -0,0 +1,665 @@ +==== gencol1-100 + + CREATE TABLE t0(c0 AS(TYPEOF(c1)), c1); + INSERT INTO t0(c1) VALUES(0); + CREATE TABLE t1(x AS (typeof(y)), y); + INSERT INTO t1 SELECT * FROM t0; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 42 err 1 -1 74 no such table: t0 +stmt 74 ok +stmt 114 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 169 no such table: t1 +==== gencol1-generated + + INSERT INTO t1(a,b,c) VALUES(1,'abcdef',5.5),(3,'cantaloupe',NULL); + SELECT w, x, y, '|' FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 116 no such table: t1 +==== gencol1-generated.dup1 + + SELECT w, x, y, '|' FROM t1 ORDER BY w; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== gencol1-generated.dup2 + + SELECT a FROM t1 WHERE w=30; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== gencol1-generated.dup3 + + SELECT a FROM t1 WHERE x='real'; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== gencol1-generated.dup4 + + SELECT a FROM t1 WHERE y LIKE '%tal%' OR x='real' ORDER BY b; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== gencol1-generated.dup5 + + CREATE INDEX t1w ON t1(w); + SELECT a FROM t1 WHERE w=10; +---- +stmt 0 err 1 -1 31 no such table: main.t1 +stmt 31 err 1 -1 64 no such table: t1 +==== gencol1-generated.dup6 + + CREATE INDEX t1x ON t1(x) WHERE w BETWEEN 20 AND 40; + SELECT a FROM t1 WHERE x='null' AND w BETWEEN 20 AND 40; +---- +stmt 0 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 118 no such table: t1 +==== gencol1-generated.dup7 + + SELECT a FROM t1 WHERE x='real'; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== gencol1-generated.dup8 + + VACUUM; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 12 ok +==== gencol1-generated.dup9 + + UPDATE t1 SET a=a+100 WHERE w<20; + SELECT a, w, '|' FROM t1 ORDER BY w; +---- +stmt 0 err 1 -1 38 no such table: t1 +stmt 38 err 1 -1 79 no such table: t1 +==== gencol1-generated.dup10 + + INSERT INTO t1 VALUES(4,'jambalaya','Chef John'),(15,87719874135,0); + SELECT w, x, y, '|' FROM t1 ORDER BY w; +---- +stmt 0 err 1 -1 73 no such table: t1 +stmt 73 err 1 -1 117 no such table: t1 +==== gencol1-3.100 + + PRAGMA foreign_keys = true; + CREATE TABLE t0(c0 PRIMARY KEY, c1, c2 AS (c0+c1-c3) REFERENCES t0, c3); + INSERT INTO t0 VALUES (0, 0, 0), (11, 5, 5); + UPDATE t0 SET c1 = c0, c3 = c0; + SELECT *, '|' FROM t0 ORDER BY +c0; +---- +stmt 0 ok +stmt 30 ok +stmt 105 err 1 -1 152 no such table: t0 +stmt 152 err 1 -1 186 no such table: t0 +stmt 186 err 1 -1 224 no such table: t0 +==== gencol1-3.110 + + UPDATE t0 SET c1 = c0, c3 = c0+1; +---- +stmt 0 err 1 -1 36 no such table: t0 +==== gencol1-4.100 + + CREATE TABLE t0 ( + c0, + c1 a UNIQUE AS (1), + c2, + c3 REFERENCES t0(c1) + ); + PRAGMA foreign_keys = true; + INSERT INTO t0(c0,c2,c3) VALUES(0,0,1); +---- +stmt 0 ok +stmt 90 ok +stmt 120 err 1 -1 162 no such table: t0 +==== gencol1-4.110 + + REPLACE INTO t0(c0,c2,c3) VALUES(0,0,0),(0,0,0); +---- +stmt 0 err 1 -1 51 no such table: t0 +==== gencol1-5.100 + + PRAGMA foreign_keys=ON; + CREATE TABLE t1( + gcb AS (b*1), + a INTEGER PRIMARY KEY, + gcc AS (c+0), + b UNIQUE, + gca AS (1*a+0), + c UNIQUE + ) WITHOUT ROWID; + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t1 VALUES(4,5,6); + INSERT INTO t1 VALUES(7,8,9); + CREATE TABLE t1a( + gcx AS (x+0) REFERENCES t1(a) ON DELETE CASCADE, + id, + x, + gcid AS (1*id) + ); + INSERT INTO t1a VALUES(1, 1); + INSERT INTO t1a VALUES(2, 4); + INSERT INTO t1a VALUES(3, 7); + DELETE FROM t1 WHERE b=5; + SELECT id,x,'|' FROM t1a ORDER BY id; +---- +stmt 0 ok +stmt 26 ok +stmt 174 err 1 -1 206 no such table: t1 +stmt 206 err 1 -1 238 no such table: t1 +stmt 238 err 1 -1 270 no such table: t1 +stmt 270 ok +stmt 382 err 1 -1 414 no such table: t1a +stmt 414 err 1 -1 446 no such table: t1a +stmt 446 err 1 -1 478 no such table: t1a +stmt 478 err 1 -1 506 no such table: t1 +stmt 506 err 1 -1 546 no such table: t1a +==== gencol1-6.10 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 NOT NULL AS(c1), c1); + REPLACE INTO t0(c1) VALUES(NULL); +---- +stmt 0 ok +stmt 27 ok +stmt 70 err 1 -1 106 no such table: t0 +==== gencol1-7.10 + + CREATE TABLE t0 (c0 GENERATED ALWAYS AS (1), c1 UNIQUE, c2 UNIQUE); + INSERT INTO t0(c1) VALUES (1); + SELECT quote(0 = t0.c2 OR t0.c1 BETWEEN t0.c2 AND 1) FROM t0; +---- +stmt 0 ok +stmt 70 err 1 -1 103 no such table: t0 +stmt 103 err 1 -1 167 no such table: t0 +==== gencol1-7.11 + + DROP TABLE t0; + CREATE TABLE t0(c0 NOT NULL DEFAULT 'xyz', c1 AS(c0) NOT NULL); + REPLACE INTO t0(c0) VALUES(NULL); + SELECT * FROM t0; +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +stmt 83 err 1 -1 119 no such table: t0 +stmt 119 err 1 -1 139 no such table: t0 +==== gencol1-7.12 + + DROP TABLE t0; + CREATE TABLE t0(c0 NOT NULL DEFAULT 'xyz', c1 AS(c0) STORED NOT NULL); + REPLACE INTO t0(c0) VALUES(NULL); + SELECT * FROM t0; +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +stmt 90 err 1 -1 126 no such table: t0 +stmt 126 err 1 -1 146 no such table: t0 +==== gencol1-7.20 + + CREATE TABLE t1( + a NOT NULL DEFAULT 'aaa', + b AS(c) NOT NULL, + c NOT NULL DEFAULT 'ccc'); + REPLACE INTO t1(a,c) VALUES(NULL,NULL); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 99 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 161 no such table: t1 +==== gencol1-7.21 + + DROP TABLE t1; + CREATE TABLE t1( + a NOT NULL DEFAULT 'aaa', + b AS(c) STORED NOT NULL, + c NOT NULL DEFAULT 'ccc'); + REPLACE INTO t1(a,c) VALUES(NULL,NULL); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 123 err 1 -1 165 no such table: t1 +stmt 165 err 1 -1 185 no such table: t1 +==== gencol1-7.30 + + CREATE TABLE t2( + a NOT NULL DEFAULT 'aaa', + b AS(a) NOT NULL, + c NOT NULL DEFAULT 'ccc'); + REPLACE INTO t2(a,c) VALUES(NULL,NULL); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 99 err 1 -1 141 no such table: t2 +stmt 141 err 1 -1 161 no such table: t2 +==== gencol1-7.31 + + DROP TABLE t2; + CREATE TABLE t2( + a NOT NULL DEFAULT 'aaa', + b AS(a) STORED NOT NULL, + c NOT NULL DEFAULT 'ccc'); + REPLACE INTO t2(a,c) VALUES(NULL,NULL); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 17 no such table: t2 +stmt 17 ok +stmt 123 err 1 -1 165 no such table: t2 +stmt 165 err 1 -1 185 no such table: t2 +==== gencol1-7.40 + + CREATE TABLE t3(a NOT NULL DEFAULT 123, b AS(a) UNIQUE); + REPLACE INTO t3 VALUES(NULL); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 59 err 1 -1 91 no such table: t3 +stmt 91 err 1 -1 111 no such table: t3 +==== gencol1-7.41 + + SELECT * FROM t3 WHERE b=123; +---- +stmt 0 err 1 -1 32 no such table: t3 +==== gencol1-7.50 + + CREATE TABLE t4(a NOT NULL DEFAULT 123, b AS(a*10+4) STORED UNIQUE); + REPLACE INTO t4 VALUES(NULL); + SELECT * FROM t4; +---- +stmt 0 ok +stmt 71 err 1 -1 103 no such table: t4 +stmt 103 err 1 -1 123 no such table: t4 +==== gencol1-7.51 + + SELECT * FROM t4 WHERE b=1234; +---- +stmt 0 err 1 -1 33 no such table: t4 +==== gencol1-8.10 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0( + c0 AS (('a', 9) < ('b', c1)), + c1 AS (1), + c2 CHECK (1 = c1) + ); + INSERT INTO t0 VALUES (0),(99); + SELECT * FROM t0; +---- +stmt 0 ok +stmt 27 ok +stmt 122 err 1 -1 156 no such table: t0 +stmt 156 err 1 -1 176 no such table: t0 +==== gencol1-8.20 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0( + c0, + c1 AS(c0 + c2), + c2 AS(c1) CHECK(c2) + ); + UPDATE t0 SET c0 = NULL; +---- +stmt 0 ok +stmt 27 ok +stmt 103 err 1 -1 130 no such table: t0 +==== gencol1-9.10 + + PRAGMA foreign_keys=OFF; + CREATE TABLE t1(aa , bb AS (17) UNIQUE); + INSERT INTO t1 VALUES(17); + CREATE TABLE t2(cc); + INSERT INTO t2 VALUES(41); + SELECT * FROM t2 JOIN t1 WHERE t1.bb=t1.aa AND t1.bb=17; +---- +stmt 0 ok +stmt 27 ok +stmt 70 err 1 -1 99 no such table: t1 +stmt 99 ok +stmt 122 err 1 -1 151 no such table: t2 +stmt 151 err 1 -1 210 no such table: t2 +==== gencol1-9.20 + + CREATE TABLE t3(aa INT PRIMARY KEY, bb UNIQUE AS(aa)); + INSERT INTO t3 VALUES(1); + SELECT 100, * FROM t3; + DELETE FROM t3 WHERE (SELECT bb FROM t3); + SELECT 200, * FROM t3; +---- +stmt 0 ok +stmt 57 err 1 -1 85 no such table: t3 +stmt 85 err 1 -1 110 no such table: t3 +stmt 110 err 1 -1 154 no such table: t3 +stmt 154 err 1 -1 179 no such table: t3 +==== gencol1-10.10 + + CREATE TABLE t1(aa,bb); + CREATE TABLE IF NOT EXISTS t1(aa, bb AS (aa+1)); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 26 ok +stmt 77 ok +==== gencol1-11.10 + + PRAGMA foreign_keys = true; + CREATE TABLE t0( + c0, + c1 INTEGER PRIMARY KEY, + c2 BLOB UNIQUE DEFAULT x'00', + c3 BLOB GENERATED ALWAYS AS (1), + FOREIGN KEY(c1) REFERENCES t0(c2) + ); +---- +stmt 0 ok +stmt 30 ok +==== gencol1-11.20 + + INSERT OR REPLACE INTO t0(c0, c1) VALUES (2, 1), (1, 0) +---- +stmt 0 err 1 -1 59 no such table: t0 +==== gencol1-11.30 + + DROP TABLE t0; + CREATE TABLE t0( + c0, + c1 INTEGER PRIMARY KEY, + c3 BLOB GENERATED ALWAYS AS (1), + c2 BLOB UNIQUE DEFAULT x'00', + FOREIGN KEY(c1) REFERENCES t0(c2) + ); +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +==== gencol1-11.40 + + INSERT OR REPLACE INTO t0(c0, c1) VALUES (2, 1), (1, 0) +---- +stmt 0 err 1 -1 59 no such table: t0 +==== gencol1-11.50 + + DROP TABLE t0; + CREATE TABLE t0( + c0, + c3 BLOB GENERATED ALWAYS AS (1), + c1 INTEGER PRIMARY KEY, + c2 BLOB UNIQUE DEFAULT x'00', + FOREIGN KEY(c1) REFERENCES t0(c2) + ); +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +==== gencol1-11.60 + + INSERT OR REPLACE INTO t0(c0, c1) VALUES (2, 1), (1, 0) +---- +stmt 0 err 1 -1 59 no such table: t0 +==== gencol1-11.70 + + DROP TABLE t0; + CREATE TABLE t0( + c3 BLOB GENERATED ALWAYS AS (1), + c0, + c1 INTEGER PRIMARY KEY, + c2 BLOB UNIQUE DEFAULT x'00', + FOREIGN KEY(c1) REFERENCES t0(c2) + ); +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +==== gencol1-11.80 + + INSERT OR REPLACE INTO t0(c0, c1) VALUES (2, 1), (1, 0) +---- +stmt 0 err 1 -1 59 no such table: t0 +==== gencol1-12.10 + + CREATE TABLE t0 (c0, c1 NOT NULL AS (c0==0)); + INSERT INTO t0(c0) VALUES (0); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 48 err 1 -1 81 no such table: t0 +stmt 81 ok +==== gencol1-13.10 + + CREATE TABLE t1(x, y AS(x+1)); + INSERT INTO t1 VALUES(10); + SELECT y FROM t1 JOIN t1 USING (y,y); +---- +stmt 0 ok +stmt 33 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 102 no such table: t1 +==== gencol1-13.11 + + SELECT 123 FROM t1 JOIN t1 USING (x); +---- +stmt 0 err 1 -1 40 no such table: t1 +==== gencol1-13.11.dup1 + + SELECT 456 FROM t1 JOIN t1 USING (x,x); +---- +stmt 0 err 1 -1 42 no such table: t1 +==== gencol1-13.20 + + CREATE INDEX t1y ON t1(y); + SELECT y FROM t1 JOIN t1 USING (y,y); +---- +stmt 0 err 1 -1 29 no such table: main.t1 +stmt 29 err 1 -1 69 no such table: t1 +==== gencol1-13.21 + + CREATE INDEX t1x ON t1(x); + SELECT 123 FROM t1 JOIN t1 USING (x); +---- +stmt 0 err 1 -1 29 no such table: main.t1 +stmt 29 err 1 -1 69 no such table: t1 +==== gencol1-13.22 + + SELECT 456 FROM t1 JOIN t1 USING (x,x); +---- +stmt 0 err 1 -1 42 no such table: t1 +==== gencol1-14.10 + + CREATE TABLE t0(c0 AS(1 >= 1), c1 UNIQUE AS(TYPEOF(c0)), c2); + INSERT INTO t0 VALUES(0); + REINDEX; + SELECT * FROM t0; +---- +stmt 0 ok +stmt 64 err 1 -1 92 no such table: t0 +stmt 92 ok +stmt 103 err 1 -1 123 no such table: t0 +==== gencol1-14.10.dup1 + + INSERT INTO t0 VALUES(2); +---- +stmt 0 err 1 -1 28 no such table: t0 +==== gencol1-15.20 + + PRAGMA writable_schema=ON; + REPLACE INTO t1 VALUES(9); + SELECT a, quote(b) FROM t1 +---- +stmt 0 ok +stmt 29 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 88 no such table: t1 +==== gencol1-16.10 + + CREATE TABLE t0(c0); + CREATE TABLE t1(c1, c2 AS(1)); + INSERT INTO t0 VALUES(0); + SELECT c0, c1, c2 FROM t0 LEFT JOIN t1; +---- +stmt 0 ok +stmt 23 ok +stmt 56 err 1 -1 84 no such table: t0 +stmt 84 err 1 -1 126 no such table: t0 +==== gencol1-16.20 + + DROP TABLE t1; + CREATE TABLE t1(c1, c2 AS (c1 ISNULL)); + SELECT c0, c1, c2 FROM t0 LEFT JOIN t1; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 59 err 1 -1 101 no such table: t0 +==== gencol1-16.30 + + INSERT INTO t1(c1) VALUES(1),(NULL); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 59 no such table: t1 +==== gencol1-16.40 + + SELECT c0, c1, c2 FROM t0 LEFT JOIN t1 ON c0=c1; +---- +stmt 0 err 1 -1 51 no such table: t0 +==== gencol1-17.10 + + CREATE TABLE t0(c0 REAL AS(1) UNIQUE, c1 INT); + INSERT INTO t0 VALUES(''); + SELECT quote(c0), quote(c1) from t0; +---- +stmt 0 ok +stmt 49 err 1 -1 78 no such table: t0 +stmt 78 err 1 -1 117 no such table: t0 +==== gencol1-17.20 + + SELECT *, (1 BETWEEN CAST(t0.c0 AS TEXT) AND t0.c0) FROM t0; +---- +stmt 0 err 1 -1 63 no such table: t0 +==== gencol1-17.30 + + SELECT * FROM t0 WHERE (1 BETWEEN CAST(t0.c0 AS TEXT) AND t0.c0); +---- +stmt 0 err 1 -1 68 no such table: t0 +==== gencol1-17.40 + + CREATE TABLE t1(a TEXT AS(b) COLLATE nocase, b TEXT, c INT, d DEFAULT 1); + INSERT INTO t1(b,c) VALUES('abc',11),('DEF',22),('ghi',33); + SELECT a FROM t1 WHERE b='DEF' AND a='def'; +---- +stmt 0 ok +stmt 76 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 184 no such table: t1 +==== gencol1-17.50 + + CREATE INDEX t1bca ON t1(b,c,a); + SELECT a FROM t1 WHERE b='DEF' AND a='def'; +---- +stmt 0 err 1 -1 35 no such table: main.t1 +stmt 35 err 1 -1 81 no such table: t1 +==== gencol1-18.10 + + CREATE TABLE t0(c0 UNIQUE AS(0), c1, c2); + INSERT INTO t0(c1) VALUES(0); + SELECT * FROM t0; +---- +stmt 0 ok +stmt 44 err 1 -1 76 no such table: t0 +stmt 76 err 1 -1 96 no such table: t0 +==== gencol1-18.20 + + UPDATE t0 SET c1=0, c2=0 WHERE c0>=0; + SELECT * FROM t0; +---- +stmt 0 err 1 -1 40 no such table: t0 +stmt 40 err 1 -1 60 no such table: t0 +==== gencol1-19.10 + + CREATE TABLE t0( + c0 INT AS(2) UNIQUE, + c1 TEXT UNIQUE, + FOREIGN KEY(c0) REFERENCES t0(c1) + ); + INSERT INTO t0(c1) VALUES(0.16334143182538696), (0); +---- +stmt 0 ok +stmt 107 err 1 -1 162 no such table: t0 +==== gencol1-20.1 + + CREATE TEMPORARY TABLE tab ( + prim DATE PRIMARY KEY, + a INTEGER, + comp INTEGER AS (a), + b INTEGER, + x INTEGER + ); + -- Add some data + INSERT INTO tab (prim, a, b) VALUES ('2001-01-01', 0, 0); + -- Check that each column is 0 like I expect + SELECT * FROM tab; +---- +stmt 0 ok +stmt 132 err 1 -1 211 no such table: tab +stmt 211 err 1 -1 279 no such table: tab +==== gencol1-20.2 + + -- Do an UPSERT on the b column + INSERT INTO tab (prim, b) + VALUES ('2001-01-01',5) + ON CONFLICT(prim) DO UPDATE SET b=excluded.b; + -- Now b is NULL rather than 5 + SELECT * FROM tab; +---- +stmt 0 err 1 -1 141 no such table: tab +stmt 141 err 1 -1 195 no such table: tab +==== gencol1-21.1 + + CREATE TABLE t1( + a integer primary key, + b int generated always as (a+5), + c text GENERATED ALWAYS as (printf('%08x',a)), + d Generated + Always + AS ('xyzzy'), + e int Always default(5) + ); + INSERT INTO t1(a) VALUES(5); + SELECT name, type FROM pragma_table_xinfo('t1'); +---- +stmt 0 ok +stmt 263 err 1 -1 296 no such table: t1 +stmt 296 ok +==== gencol1-22.1 + + CREATE TABLE t0(a PRIMARY KEY,b TEXT AS ('2') UNIQUE); + INSERT INTO t0(a) VALUES(2); + SELECT * FROM t0 AS x JOIN t0 AS y + WHERE x.b='2' + AND (y.a=2 OR (x.b LIKE '2*' AND y.a=x.b)); +---- +stmt 0 ok +stmt 57 err 1 -1 88 no such table: t0 +stmt 88 err 1 -1 191 no such table: t0 +==== gencol1-23.2 + + DROP TABLE t1; + CREATE TABLE t1( + x, + a INT AS (x) VIRTUAL, + b BLOB AS (x) VIRTUAL + ); + CREATE INDEX x2 ON t1(a); + INSERT INTO t1(x) VALUES(NULL),('1'),('xyz'),(2),(3.5); + SELECT quote(a) FROM t1 INDEXED BY x2; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 100 err 1 -1 128 no such table: main.t1 +stmt 128 err 1 -1 186 no such table: t1 +stmt 186 err 1 -1 227 no such table: t1 +==== gencol1-23.3 + + EXPLAIN SELECT a FROM t1 INDEXED BY x2; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== gencol1-23.4 + + EXPLAIN SELECT b FROM t1 INDEXED BY x2; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== gencol1-23.5 + + CREATE TABLE v0(c1 INT, c2 AS (RAISE(IGNORE))); +---- +stmt 0 ok diff --git a/parser/testdata/having.metadata.json b/parser/testdata/having.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/having.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/having.test b/parser/testdata/having.test new file mode 100644 index 0000000..303f635 --- /dev/null +++ b/parser/testdata/having.test @@ -0,0 +1,92 @@ +==== 1.0 + + CREATE TABLE t2(c, d); + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 1); + INSERT INTO t1 VALUES(2, 2); + INSERT INTO t1 VALUES(1, 3); + INSERT INTO t1 VALUES(2, 4); + INSERT INTO t1 VALUES(1, 5); + INSERT INTO t1 VALUES(2, 6); +---- +stmt 0 ok +stmt 25 ok +stmt 51 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 175 no such table: t1 +stmt 175 err 1 -1 206 no such table: t1 +stmt 206 err 1 -1 237 no such table: t1 +==== 2.4a + + SELECT x,y FROM ( + SELECT a AS x, sum(b) AS y FROM t1 + GROUP BY a + ) WHERE x BETWEEN 2 AND 9999 +---- +stmt 0 err 1 -1 107 no such table: t1 +==== 2.4b + + SELECT x,y FROM ( + SELECT a AS x, sum(b) AS y FROM t1 + WHERE x BETWEEN 2 AND 9999 + GROUP BY a + ) +---- +stmt 0 err 1 -1 112 no such table: t1 +==== 4.1 + + CREATE TABLE t3(a, b); + INSERT INTO t3 VALUES(1, 1); + INSERT INTO t3 VALUES(1, 2); + INSERT INTO t3 VALUES(1, 3); + INSERT INTO t3 VALUES(2, 1); + INSERT INTO t3 VALUES(2, 2); + INSERT INTO t3 VALUES(2, 3); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t3 +stmt 56 err 1 -1 87 no such table: t3 +stmt 87 err 1 -1 118 no such table: t3 +stmt 118 err 1 -1 149 no such table: t3 +stmt 149 err 1 -1 180 no such table: t3 +stmt 180 err 1 -1 211 no such table: t3 +==== 4.2 + + SELECT a, sum(b) FROM t3 GROUP BY a HAVING nondeter(a) +---- +stmt 0 err 1 -1 58 no such table: t3 +==== 4.3 + + SELECT a, sum(b) FROM t3 WHERE nondeter(a) GROUP BY a +---- +stmt 0 err 1 -1 57 no such table: t3 +==== 5.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(x, y); + INSERT INTO t1 VALUES('a', 'b'); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 85 no such table: t1 +==== 5.1 + + SELECT min(b), ( + SELECT x FROM t2 WHERE a=2 GROUP BY y HAVING 0 + ) FROM t1; +---- +stmt 0 err 1 -1 83 no such table: t1 +==== 5.2 + + SELECT EXISTS ( + SELECT * FROM ( + SELECT * FROM ( + SELECT 1 + ) WHERE Col0 = 1 GROUP BY 1 + ) WHERE 0 + ) + FROM (SELECT 1 Col0) GROUP BY 1 +---- +stmt 0 ok diff --git a/parser/testdata/hexlit.metadata.json b/parser/testdata/hexlit.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/hexlit.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/hexlit.test b/parser/testdata/hexlit.test new file mode 100644 index 0000000..d977760 --- /dev/null +++ b/parser/testdata/hexlit.test @@ -0,0 +1,38 @@ +==== hexlit-300 + + CREATE TABLE t1(x INT, y REAL); + INSERT INTO t1 VALUES('1234','4567'),('0x1234','0x4567'); + SELECT typeof(x), x, typeof(y), y, '#' FROM t1 ORDER BY rowid; +---- +stmt 0 ok +stmt 34 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 159 no such table: t1 +==== hexlit-301 + + SELECT CAST('0x1234' AS INTEGER); +---- +stmt 0 ok +==== hexlist-400 + + SELECT 0x10000000000000000; +---- +stmt 0 err 1 10 30 hex literal too big: 0x10000000000000000 +==== hexlist-401 + + SELECT DISTINCT 0x10000000000000000; +---- +stmt 0 err 1 19 39 hex literal too big: 0x10000000000000000 +==== hexlist-402 + + SELECT DISTINCT -0x08000000000000000; +---- +stmt 0 err 1 20 40 hex literal too big: -0x08000000000000000 +==== hexlist-410 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1+0x10000000000000000); +---- +stmt 0 ok +stmt 27 ok +stmt 49 err 1 -1 97 no such table: t1 diff --git a/parser/testdata/hidden.metadata.json b/parser/testdata/hidden.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/hidden.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/hidden.test b/parser/testdata/hidden.test new file mode 100644 index 0000000..d65e6e3 --- /dev/null +++ b/parser/testdata/hidden.test @@ -0,0 +1,163 @@ +==== 1.1 + + CREATE TABLE t1(__hidden__a, b); + INSERT INTO t1 VALUES('1'); + INSERT INTO t1(__hidden__a, b) VALUES('x', 'y'); +---- +stmt 0 ok +stmt 35 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 116 no such table: t1 +==== 1.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 1.3 + + SELECT __hidden__a, * FROM t1; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== hidden-generated + + DROP TABLE IF EXISTS x1; + CREATE TABLE x1(a, b, c); + INSERT INTO x1 VALUES(1, 2, 3); +---- +stmt 0 ok +stmt 29 ok +stmt 59 err 1 -1 95 no such table: x1 +==== hidden-generated.dup1 + + SELECT a, b, __hidden__c FROM v1; +---- +stmt 0 err 1 -1 38 no such table: v1 +==== hidden-generated.dup2 + + SELECT * FROM v1; +---- +stmt 0 err 1 -1 22 no such table: v1 +==== hidden-generated.dup3 + + CREATE TRIGGER tr1 INSTEAD OF INSERT ON v1 BEGIN + INSERT INTO x1 VALUES(new.a, new.b, new.__hidden__c); + END; + + INSERT INTO v1 VALUES(4, 5); + SELECT * FROM x1; +---- +stmt 0 err 1 -1 53 no such table: main.v1 +stmt 122 err 1 -1 158 no such table: v1 +stmt 158 err 1 -1 180 no such table: x1 +==== hidden-generated.dup4 + + INSERT INTO v1(a, b, __hidden__c) VALUES(7, 8, 9); + SELECT * FROM x1; +---- +stmt 0 err 1 -1 55 no such table: v1 +stmt 55 err 1 -1 77 no such table: x1 +==== 3.1 + + CREATE TABLE t4(a, __hidden__b, c); + INSERT INTO t4 SELECT 1, 2; + SELECT a, __hidden__b, c FROM t4; +---- +stmt 0 ok +stmt 38 err 1 -1 68 no such table: t4 +stmt 68 err 1 -1 104 no such table: t4 +==== 3.2.1 + + CREATE TABLE t5(__hidden__a, b, c); + CREATE TABLE t6(__hidden__a, b, c); + INSERT INTO t6(__hidden__a, b, c) VALUES(1, 2, 3); + INSERT INTO t6(__hidden__a, b, c) VALUES(4, 5, 6); + INSERT INTO t6(__hidden__a, b, c) VALUES(7, 8, 9); +---- +stmt 0 ok +stmt 38 ok +stmt 76 err 1 -1 129 no such table: t6 +stmt 129 err 1 -1 182 no such table: t6 +stmt 182 err 1 -1 235 no such table: t6 +==== 3.2.2 + + INSERT INTO t5 SELECT * FROM t6; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 35 no such table: t5 +stmt 35 err 1 -1 55 no such table: t5 +==== 3.2.3 + + SELECT __hidden__a FROM t5; +---- +stmt 0 err 1 -1 30 no such table: t5 +==== 3.3.1 + + CREATE TABLE t5a(a, b, __hidden__c); + CREATE TABLE t6a(a, b, __hidden__c); + INSERT INTO t6a(a, b, __hidden__c) VALUES(1, 2, 3); + INSERT INTO t6a(a, b, __hidden__c) VALUES(4, 5, 6); + INSERT INTO t6a(a, b, __hidden__c) VALUES(7, 8, 9); +---- +stmt 0 ok +stmt 39 ok +stmt 78 err 1 -1 132 no such table: t6a +stmt 132 err 1 -1 186 no such table: t6a +stmt 186 err 1 -1 240 no such table: t6a +==== 3.3.2 + + INSERT INTO t5a SELECT * FROM t6a; + SELECT * FROM t5a; +---- +stmt 0 err 1 -1 37 no such table: t5a +stmt 37 err 1 -1 58 no such table: t5a +==== 3.3.3 + + SELECT __hidden__c FROM t5a; +---- +stmt 0 err 1 -1 31 no such table: t5a +==== 3.4.1 + + CREATE TABLE t5b(a, __hidden__b, c); + CREATE TABLE t6b(a, b, __hidden__c); + INSERT INTO t6b(a, b, __hidden__c) VALUES(1, 2, 3); + INSERT INTO t6b(a, b, __hidden__c) VALUES(4, 5, 6); + INSERT INTO t6b(a, b, __hidden__c) VALUES(7, 8, 9); +---- +stmt 0 ok +stmt 39 ok +stmt 78 err 1 -1 132 no such table: t6b +stmt 132 err 1 -1 186 no such table: t6b +stmt 186 err 1 -1 240 no such table: t6b +==== 3.4.2 + + INSERT INTO t5b SELECT * FROM t6b; + SELECT * FROM t5b; +---- +stmt 0 err 1 -1 37 no such table: t5b +stmt 37 err 1 -1 58 no such table: t5b +==== 3.4.3 + + SELECT __hidden__b FROM t5b; +---- +stmt 0 err 1 -1 31 no such table: t5b +==== 4.1 + + CREATE TABLE t1(a, __hidden__b, c UNIQUE); + INSERT INTO t1(a, __hidden__b, c) VALUES(1, 2, 3); + INSERT INTO t1(a, __hidden__b, c) VALUES(4, 5, 6); + INSERT INTO t1(a, __hidden__b, c) VALUES(7, 8, 9); + DELETE FROM t1 WHERE __hidden__b = 5; + SELECT rowid, a, __hidden__b, c FROM t1; +---- +stmt 0 ok +stmt 45 err 1 -1 98 no such table: t1 +stmt 98 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 204 no such table: t1 +stmt 204 err 1 -1 244 no such table: t1 +stmt 244 err 1 -1 287 no such table: t1 +==== 4.2 + + VACUUM; + SELECT rowid, a, __hidden__b, c FROM t1; +---- +stmt 0 ok +stmt 10 err 1 -1 53 no such table: t1 diff --git a/parser/testdata/hook.metadata.json b/parser/testdata/hook.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/hook.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/hook.test b/parser/testdata/hook.test new file mode 100644 index 0000000..9d8cb41 --- /dev/null +++ b/parser/testdata/hook.test @@ -0,0 +1,315 @@ +==== hook-3.8 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== hook-4.1.1b + + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(3, 'three'); + INSERT INTO t1w SELECT * FROM t1; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 151 no such table: t1w +==== hook-4.4.1 + + SELECT * FROM t4 ORDER BY a; +---- +stmt 0 err 1 -1 31 no such table: t4 +==== hook-4.4.3 + + SELECT * FROM t4 ORDER BY a; +---- +stmt 0 err 1 -1 31 no such table: t4 +==== 7.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(x, y); + CREATE TABLE t3(i, j, UNIQUE(i)); + + INSERT INTO t2 VALUES('a', 'b'); + INSERT INTO t2 VALUES('c', 'd'); + + INSERT INTO t3 VALUES(4, 16); + INSERT INTO t3 VALUES(5, 25); + INSERT INTO t3 VALUES(6, 36); +---- +stmt 0 ok +stmt 26 ok +stmt 52 ok +stmt 89 err 1 -1 125 no such table: t2 +stmt 125 err 1 -1 160 no such table: t2 +stmt 160 err 1 -1 193 no such table: t3 +stmt 193 err 1 -1 225 no such table: t3 +stmt 225 err 1 -1 257 no such table: t3 +==== 7.2.0 + SELECT rowid FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== 7.3.0 + + DELETE FROM t1; + DELETE FROM t2; + DELETE FROM t3; + + INSERT INTO t2 VALUES('a', 'b'); + INSERT INTO t2 VALUES('c', 'd'); + + INSERT INTO t3 VALUES(4, 16); + INSERT INTO t3 VALUES(5, 25); + INSERT INTO t3 VALUES(6, 36); +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 37 no such table: t2 +stmt 37 err 1 -1 55 no such table: t3 +stmt 55 err 1 -1 91 no such table: t2 +stmt 91 err 1 -1 126 no such table: t2 +stmt 126 err 1 -1 159 no such table: t3 +stmt 159 err 1 -1 191 no such table: t3 +stmt 191 err 1 -1 223 no such table: t3 +==== 7.3.4.2 + + INSERT INTO t3 VALUES(10, 100); + SELECT rowid, * FROM t3; +---- +stmt 0 err 1 -1 34 no such table: t3 +stmt 34 err 1 -1 61 no such table: t3 +==== 7.4.1.0 + + CREATE TABLE t4(a, b); + INSERT INTO t4 VALUES('a', 1); + INSERT INTO t4 VALUES('b', 2); + INSERT INTO t4 VALUES('c', 3); + + CREATE TRIGGER t4t BEFORE DELETE ON t4 BEGIN + DELETE FROM t4 WHERE b = 1; + END; +---- +stmt 0 ok +stmt 25 err 1 -1 58 no such table: t4 +stmt 58 err 1 -1 91 no such table: t4 +stmt 91 err 1 -1 124 no such table: t4 +stmt 124 err 1 -1 172 no such table: main.t4 +==== 7.4.1.2 + + INSERT INTO t4(rowid, a, b) VALUES(1, 'a', 1); + INSERT INTO t4(rowid, a, b) VALUES(3, 'c', 3); +---- +stmt 0 err 1 -1 49 no such table: t4 +stmt 49 err 1 -1 98 no such table: t4 +==== 7.4.2.0 + + CREATE TABLE t5(a, b); + INSERT INTO t5 VALUES('a', 1); + INSERT INTO t5 VALUES('b', 2); + INSERT INTO t5 VALUES('c', 3); + + CREATE TRIGGER t5t BEFORE UPDATE ON t5 BEGIN + DELETE FROM t5 WHERE b = 1; + END; +---- +stmt 0 ok +stmt 25 err 1 -1 58 no such table: t5 +stmt 58 err 1 -1 91 no such table: t5 +stmt 91 err 1 -1 124 no such table: t5 +stmt 124 err 1 -1 172 no such table: main.t5 +==== 7.4.2.2 + + INSERT INTO t5(rowid, a, b) VALUES(1, 'a', 1); +---- +stmt 0 err 1 -1 49 no such table: t5 +==== 7.5.1.0 + + CREATE TABLE t7(a, b); + INSERT INTO t7 VALUES('one', 'two'); + INSERT INTO t7 VALUES('three', 'four'); + ALTER TABLE t7 ADD COLUMN c DEFAULT NULL; +---- +stmt 0 ok +stmt 27 err 1 -1 68 no such table: t7 +stmt 68 err 1 -1 112 no such table: t7 +stmt 112 err 1 -1 152 no such table: t7 +==== 7.5.2.0 + + CREATE TABLE t8(a, b); + INSERT INTO t8 VALUES('one', 'two'); + INSERT INTO t8 VALUES('three', 'four'); + ALTER TABLE t8 ADD COLUMN c DEFAULT 'xxx'; +---- +stmt 0 ok +stmt 27 err 1 -1 68 no such table: t8 +stmt 68 err 1 -1 112 no such table: t8 +stmt 112 err 1 -1 152 no such table: t8 +==== 7.6.1 + CREATE TABLE t9(a, b INTEGER PRIMARY KEY, c) +---- +stmt 0 ok +==== 7.6.1.dup1 + + CREATE TABLE t1(x PRIMARY KEY); + CREATE TABLE t2(x PRIMARY KEY); + CREATE TABLE t3(x PRIMARY KEY); + CREATE TABLE t4(x PRIMARY KEY); + + CREATE TRIGGER a AFTER INSERT ON t1 BEGIN INSERT INTO t2 VALUES(new.x); END; + CREATE TRIGGER b AFTER INSERT ON t2 BEGIN INSERT INTO t3 VALUES(new.x); END; + CREATE TRIGGER c AFTER INSERT ON t3 BEGIN INSERT INTO t4 VALUES(new.x); END; + + CREATE TRIGGER d AFTER UPDATE ON t1 BEGIN UPDATE t2 SET x = new.x; END; + CREATE TRIGGER e AFTER UPDATE ON t2 BEGIN UPDATE t3 SET x = new.x; END; + CREATE TRIGGER f AFTER UPDATE ON t3 BEGIN UPDATE t4 SET x = new.x; END; + + CREATE TRIGGER g AFTER DELETE ON t1 BEGIN DELETE FROM t2 WHERE 1; END; + CREATE TRIGGER h AFTER DELETE ON t2 BEGIN DELETE FROM t3 WHERE 1; END; + CREATE TRIGGER i AFTER DELETE ON t3 BEGIN DELETE FROM t4 WHERE 1; END; +---- +stmt 0 ok +stmt 35 ok +stmt 69 ok +stmt 103 ok +stmt 137 err 1 -1 182 no such table: main.t1 +stmt 217 err 1 -1 261 no such table: main.t2 +stmt 296 err 1 -1 340 no such table: main.t3 +stmt 375 err 1 -1 420 no such table: main.t1 +stmt 450 err 1 -1 494 no such table: main.t2 +stmt 524 err 1 -1 568 no such table: main.t3 +stmt 598 err 1 -1 643 no such table: main.t1 +stmt 672 err 1 -1 716 no such table: main.t2 +stmt 745 err 1 -1 789 no such table: main.t3 +==== 7.6.5 + + DROP TRIGGER a; DROP TRIGGER b; DROP TRIGGER c; + DROP TRIGGER d; DROP TRIGGER e; DROP TRIGGER f; + DROP TRIGGER g; DROP TRIGGER h; DROP TRIGGER i; + + CREATE TRIGGER a BEFORE INSERT ON t1 BEGIN INSERT INTO t2 VALUES(new.x); END; + CREATE TRIGGER b BEFORE INSERT ON t2 BEGIN INSERT INTO t3 VALUES(new.x); END; + CREATE TRIGGER c BEFORE INSERT ON t3 BEGIN INSERT INTO t4 VALUES(new.x); END; + + CREATE TRIGGER d BEFORE UPDATE ON t1 BEGIN UPDATE t2 SET x = new.x; END; + CREATE TRIGGER e BEFORE UPDATE ON t2 BEGIN UPDATE t3 SET x = new.x; END; + CREATE TRIGGER f BEFORE UPDATE ON t3 BEGIN UPDATE t4 SET x = new.x; END; + + CREATE TRIGGER g BEFORE DELETE ON t1 BEGIN DELETE FROM t2 WHERE 1; END; + CREATE TRIGGER h BEFORE DELETE ON t2 BEGIN DELETE FROM t3 WHERE 1; END; + CREATE TRIGGER i BEFORE DELETE ON t3 BEGIN DELETE FROM t4 WHERE 1; END; +---- +stmt 0 err 1 -1 19 no such trigger: a +stmt 19 err 1 -1 35 no such trigger: b +stmt 35 err 1 -1 51 no such trigger: c +stmt 51 err 1 -1 69 no such trigger: d +stmt 69 err 1 -1 85 no such trigger: e +stmt 85 err 1 -1 101 no such trigger: f +stmt 101 err 1 -1 119 no such trigger: g +stmt 119 err 1 -1 135 no such trigger: h +stmt 135 err 1 -1 151 no such trigger: i +stmt 151 err 1 -1 197 no such table: main.t1 +stmt 232 err 1 -1 277 no such table: main.t2 +stmt 312 err 1 -1 357 no such table: main.t3 +stmt 392 err 1 -1 438 no such table: main.t1 +stmt 468 err 1 -1 513 no such table: main.t2 +stmt 543 err 1 -1 588 no such table: main.t3 +stmt 618 err 1 -1 664 no such table: main.t1 +stmt 693 err 1 -1 738 no such table: main.t2 +stmt 767 err 1 -1 812 no such table: main.t3 +==== 9.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + CREATE TABLE t2(a, b INTEGER PRIMARY KEY); +---- +stmt 0 ok +stmt 50 ok +==== 9.2 + + ALTER TABLE t1 ADD COLUMN d; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 10.0 + + CREATE TABLE t3(a, b INTEGER PRIMARY KEY); +---- +stmt 0 ok +==== 10.2 + SELECT * FROM t3 +---- +stmt 0 err 1 -1 18 no such table: t3 +==== 11.1 + + CREATE TABLE t1(a, b); + CREATE INDEX idx1 ON t1(a); + CREATE INDEX idx2 ON t1(b); + + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + INSERT INTO t1 VALUES(7, 8); +---- +stmt 0 ok +stmt 27 err 1 -1 59 no such table: main.t1 +stmt 59 err 1 -1 91 no such table: main.t1 +stmt 91 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 191 no such table: t1 +stmt 191 err 1 -1 224 no such table: t1 +==== 11.3 + + INSERT INTO t1 VALUES(9, 10); + INSERT INTO t1 VALUES(11, 12); + INSERT INTO t1 VALUES(13, 14); + INSERT INTO t1 VALUES(15, 16); +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 69 no such table: t1 +stmt 69 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 139 no such table: t1 +==== 12.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + CREATE TABLE t2(a INTEGER PRIMARY KEY, b) WITHOUT ROWID; + + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t2 VALUES(5, 6); + INSERT INTO t2 VALUES(7, 8); + + CREATE TABLE t3 (a INTEGER PRIMARY KEY, b) WITHOUT ROWID; +---- +stmt 0 ok +stmt 45 ok +stmt 104 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 167 no such table: t1 +stmt 167 err 1 -1 198 no such table: t2 +stmt 198 err 1 -1 229 no such table: t2 +stmt 229 ok +==== 12.5 + + CREATE TABLE t4(a COLLATE nocase PRIMARY KEY, b) WITHOUT ROWID; + INSERT INTO t4 VALUES('abc', 1); + INSERT INTO t4 VALUES('DEF', 2); +---- +stmt 0 ok +stmt 66 err 1 -1 101 no such table: t4 +stmt 101 err 1 -1 136 no such table: t4 +==== 12.6 + + INSERT INTO t4 VALUES('def', 3); +---- +stmt 0 err 1 -1 35 no such table: t4 +==== 13.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(100), (200), (300), (400); +---- +stmt 0 ok +stmt 42 err 1 -1 93 no such table: t1 +==== 13.1 + + ALTER TABLE t1 ADD COLUMN b DEFAULT 1234; + ALTER TABLE t1 ADD COLUMN c DEFAULT 'abcdef'; + ALTER TABLE t1 ADD COLUMN d DEFAULT NULL; +---- +stmt 0 err 1 -1 38 no such table: t1 +stmt 44 err 1 -1 82 no such table: t1 +stmt 92 err 1 -1 130 no such table: t1 diff --git a/parser/testdata/hook2.metadata.json b/parser/testdata/hook2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/hook2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/hook2.test b/parser/testdata/hook2.test new file mode 100644 index 0000000..d53c5c7 --- /dev/null +++ b/parser/testdata/hook2.test @@ -0,0 +1,49 @@ +==== 1.0 + + CREATE TABLE t1(a PRIMARY KEY, b) WITHOUT ROWID; +---- +stmt 0 ok +==== 2.0 + + CREATE TABLE t2(a DEFAULT 4, b, c, PRIMARY KEY(b, c)) WITHOUT ROWID; + CREATE UNIQUE INDEX t2a ON t2(a); +---- +stmt 0 ok +stmt 71 err 1 -1 107 no such table: main.t2 +==== 2.1.2.0 + + CREATE TABLE d1(a DEFAULT 4, b, c, PRIMARY KEY(b, c)) WITHOUT ROWID; + CREATE UNIQUE INDEX d1a ON d1(a); + INSERT INTO d1 VALUES(1, 2, 3); + INSERT INTO d1 VALUES(11, 12, 13); +---- +stmt 0 ok +stmt 71 err 1 -1 107 no such table: main.d1 +stmt 107 err 1 -1 141 no such table: d1 +stmt 141 err 1 -1 178 no such table: d1 +==== 2.1.2.3 + + SELECT * FROM t2 ORDER BY b, c; +---- +stmt 0 err 1 -1 34 no such table: t2 +==== 2.2.0 + + SELECT * FROM t2 ORDER BY b,c; +---- +stmt 0 err 1 -1 33 no such table: t2 +==== 2.3.0 + + CREATE TABLE t3(x, y PRIMARY KEY, z UNIQUE) WITHOUT ROWID; + INSERT INTO t3 VALUES('a', 'b', 'c'); + INSERT INTO t3 VALUES('d', 'e', 'f'); + + INSERT INTO t3 VALUES(1, 1, 1); + INSERT INTO t3 VALUES(2, 2, 2); + INSERT INTO t3 VALUES(3, 3, 3); +---- +stmt 0 ok +stmt 61 err 1 -1 101 no such table: t3 +stmt 101 err 1 -1 141 no such table: t3 +stmt 141 err 1 -1 176 no such table: t3 +stmt 176 err 1 -1 210 no such table: t3 +stmt 210 err 1 -1 244 no such table: t3 diff --git a/parser/testdata/icu.metadata.json b/parser/testdata/icu.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/icu.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/icu.test b/parser/testdata/icu.test new file mode 100644 index 0000000..9760f8f --- /dev/null +++ b/parser/testdata/icu.test @@ -0,0 +1,72 @@ +==== icu-2.9 + + SELECT upper(char(0xfb04,0xfb04,0xfb04,0xfb04)); +---- +stmt 0 ok +==== icu-4.1 + + CREATE TABLE fruit(name); + INSERT INTO fruit VALUES('plum'); + INSERT INTO fruit VALUES('cherry'); + INSERT INTO fruit VALUES('apricot'); + INSERT INTO fruit VALUES('peach'); + INSERT INTO fruit VALUES('chokecherry'); + INSERT INTO fruit VALUES('yamot'); +---- +stmt 0 ok +stmt 30 err 1 -1 68 no such table: fruit +stmt 68 err 1 -1 108 no such table: fruit +stmt 108 err 1 -1 149 no such table: fruit +stmt 149 err 1 -1 188 no such table: fruit +stmt 188 err 1 -1 233 no such table: fruit +stmt 233 err 1 -1 272 no such table: fruit +==== icu-4.3 + + SELECT name FROM fruit ORDER BY name COLLATE Lithuanian ASC; +---- +stmt 0 err 1 -1 65 no such table: fruit +==== icu-5.5 +SELECT 'abc' REGEXP +---- +stmt 0 err 1 -1 20 incomplete input +==== icu-5.6 +SELECT 'abc' REGEXP, 1 +---- +stmt 0 err 1 19 20 near ",": syntax error +==== icu-6.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(id INTEGER PRIMARY KEY, x TEXT); + INSERT INTO t1 VALUES + (1,'abcde'), + (2,'abc_'), + (3,'abc__'), + (4,'abc%'), + (5,'abc%%'); + SELECT id FROM t1 WHERE x LIKE 'abc%%' ESCAPE '%'; +---- +stmt 0 ok +stmt 27 ok +stmt 78 err 1 -1 185 no such table: t1 +stmt 185 err 1 -1 238 no such table: t1 +==== icu-6.1 + + SELECT id FROM t1 WHERE x LIKE 'abc__' ESCAPE '_'; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== icu-7.1 + + SELECT icu_load_collation('en_US','error','xyzzy'); +---- +stmt 0 err 1 10 54 no such function: icu_load_collation +==== icu-7.2 + + SELECT icu_load_collation('en_US','prim','PRIMARY'), + icu_load_collation('en_US','dflt','DEFAULT'); +---- +stmt 0 err 1 10 110 no such function: icu_load_collation +==== icu-7.3 + + SELECT char(0x100)=='a', char(0x100)=='a' COLLATE dflt, char(0x100)=='a' COLLATE prim; +---- +stmt 0 err 1 -1 89 no such collation sequence: dflt diff --git a/parser/testdata/ieee754.metadata.json b/parser/testdata/ieee754.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/ieee754.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/ieee754.test b/parser/testdata/ieee754.test new file mode 100644 index 0000000..04ef9b4 --- /dev/null +++ b/parser/testdata/ieee754.test @@ -0,0 +1,15 @@ +==== ieee754-112 + + SELECT ieee754(4503599627370495,973) is null; +---- +stmt 0 err 1 10 48 no such function: ieee754 +==== ieee754-200 + + SELECT ieee754(0.0), hex(ieee754_to_blob(ieee754(0,-1075))); +---- +stmt 0 err 1 10 63 no such function: ieee754 +==== ieee754-201 + + SELECT ieee754(-0.0), hex(ieee754_to_blob(ieee754(-1,-3071))); +---- +stmt 0 err 1 10 65 no such function: ieee754 diff --git a/parser/testdata/imposter1.metadata.json b/parser/testdata/imposter1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/imposter1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/imposter1.test b/parser/testdata/imposter1.test new file mode 100644 index 0000000..e397e51 --- /dev/null +++ b/parser/testdata/imposter1.test @@ -0,0 +1,69 @@ +==== imposter-1.1 + + SELECT rowid FROM xt1 WHERE a IS NOT NULL; +---- +stmt 0 err 1 -1 45 no such table: xt1 +==== imposter-1.2 + + SELECT a,b,c,d FROM t1 EXCEPT SELECT rowid,b,c,d FROM xt1; + SELECT rowid,b,c,d FROM xt1 EXCEPT SELECT a,b,c,d FROM t1; +---- +stmt 0 err 1 -1 61 no such table: xt1 +stmt 61 err 1 -1 122 no such table: t1 +==== imposter-1.3 + + PRAGMA writable_schema=on; + DELETE FROM xt1 WHERE rowid=5; + INSERT INTO xt1(rowid,a,b,c,d) VALUES(99,'hello',1099,2022,NULL); + SELECT * FROM chnglog ORDER BY rowid; +---- +stmt 0 ok +stmt 29 err 1 -1 62 no such table: xt1 +stmt 62 err 1 -1 130 no such table: xt1 +stmt 130 err 1 -1 170 no such table: chnglog +==== imposter-1.4a + + PRAGMA integrity_check; +---- +stmt 0 ok +==== imposter-1.4b + + PRAGMA integrity_check; +---- +stmt 0 ok +==== imposter-1.4c + + PRAGMA integrity_check; +---- +stmt 0 ok +==== imposter-2.0 + + DELETE FROM t1; + WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<10) + INSERT INTO t1(a,b,c,d) SELECT i,i,i,i FROM c; + UPDATE xt1c SET c=NULL WHERE rowid=5; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 184 no such table: xt1c +stmt 184 ok +==== imposter-2.1 + + DELETE FROM t1; + WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<10) + INSERT INTO t1(a,b,c,d) SELECT i,i,i,i FROM c; + UPDATE xt1c SET c=99 WHERE rowid IN (5,7,9); + SELECT c FROM t1 ORDER BY c; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 191 no such table: xt1c +stmt 191 err 1 -1 222 no such table: t1 +==== imposter-2.2 + + UPDATE xt1 SET c=99 WHERE rowid IN (5,7,9); + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 46 no such table: xt1 +stmt 46 ok diff --git a/parser/testdata/in6.metadata.json b/parser/testdata/in6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/in6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/in6.test b/parser/testdata/in6.test new file mode 100644 index 0000000..7246a22 --- /dev/null +++ b/parser/testdata/in6.test @@ -0,0 +1,69 @@ +==== in6-1.4 + + SELECT d FROM t1 + WHERE a=100 + AND b IN (200,201,202,204) + AND c IN (300,302,301,305) + ORDER BY +d; +---- +stmt 0 err 1 -1 109 no such table: t1 +==== in6-2.1 + + CREATE TABLE t2(e INT UNIQUE, f TEXT); + SELECT d, f FROM t1 LEFT JOIN t2 ON (e=d) + WHERE a=100 + AND b IN (200,201,202,204) + AND c IN (300,302,301,305) + ORDER BY +d; +---- +stmt 0 ok +stmt 41 err 1 -1 176 no such table: t1 +==== in6-3.100 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(0); + CREATE TABLE t2(b, c, d); + INSERT INTO t2(b,c,d) VALUES(4,5,3),(4,5,4),(4,5,8); + CREATE INDEX t2bcd ON t2(b, c, d); + SELECT * FROM t1 LEFT JOIN t2 ON b=NULL AND c=5 AND d IN (2,3,4); +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: t1 +stmt 50 ok +stmt 78 err 1 -1 133 no such table: t2 +stmt 133 err 1 -1 170 no such table: main.t2 +stmt 170 err 1 -1 238 no such table: t1 +==== in6-3.110 + + CREATE TABLE v0(v1); + CREATE TABLE v3(v5, v4); + INSERT INTO v0 VALUES(0); + CREATE INDEX v9 ON v3(v4, v4, v5); + SELECT quote(v5) FROM v0 LEFT JOIN v3 ON v4 = NULL AND v5 IN(0); +---- +stmt 0 ok +stmt 23 ok +stmt 50 err 1 -1 78 no such table: v0 +stmt 78 err 1 -1 115 no such table: main.v3 +stmt 115 err 1 -1 182 no such table: v0 +==== in6-3.120 + + CREATE TABLE t1(a TEXT, b TEXT); + INSERT INTO t1 VALUES(null,10),(0,10),(10,10); + CREATE INDEX t1ab ON t1(a,b); + SELECT quote(a), quote(b), '|' FROM t1 WHERE b in (SELECT a FROM t1) AND a=0; +---- +stmt 0 ok +stmt 35 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 116 no such table: main.t1 +stmt 116 err 1 -1 196 no such table: t1 +==== in6-3.130 + + CREATE TABLE t2(x TEXT); + INSERT INTO t2(x) VALUES(NULL),(0),(10); + SELECT quote(x), quote(a), quote(b), 'x' + FROM t2 LEFT JOIN t1 ON a=x AND b in (null,0,10); +---- +stmt 0 ok +stmt 27 err 1 -1 70 no such table: t2 +stmt 70 err 1 -1 167 no such table: t2 diff --git a/parser/testdata/in7.metadata.json b/parser/testdata/in7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/in7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/in7.test b/parser/testdata/in7.test new file mode 100644 index 0000000..b5a2fea --- /dev/null +++ b/parser/testdata/in7.test @@ -0,0 +1,139 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c PRIMARY KEY); + CREATE TABLE t2(x, y, z); +---- +stmt 0 ok +stmt 40 ok +==== 2.0 + + CREATE TABLE t1(a TEXT PRIMARY KEY, b TEXT) WITHOUT ROWID; + INSERT INTO t1 VALUES('1', 'one'); + INSERT INTO t1 VALUES('2', NULL); + INSERT INTO t1 VALUES('3', 'three'); +---- +stmt 0 ok +stmt 61 err 1 -1 98 no such table: t1 +stmt 98 err 1 -1 134 no such table: t1 +stmt 134 err 1 -1 173 no such table: t1 +==== 2.1 + + SELECT b FROM t1 WHERE a IN (1,2,3) ORDER BY b ASC NULLS LAST; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== 3.0 + + CREATE TABLE x1(a); + INSERT INTO x1 VALUES(1), (2), (3); + + CREATE TABLE x2(b); + INSERT INTO x2 VALUES(4), (5), (6); + + CREATE TABLE t1(u); + INSERT INTO t1 VALUES(1), (2), (3), (4), (5), (6); + + CREATE VIEW v1 AS SELECT u FROM t1 WHERE u IN ( + SELECT a FROM x1 + ); + CREATE VIEW v2 AS SELECT u FROM t1 WHERE u IN ( + SELECT b FROM x2 + ); +---- +stmt 0 ok +stmt 22 err 1 -1 60 no such table: x1 +stmt 60 ok +stmt 83 err 1 -1 121 no such table: x2 +stmt 121 ok +stmt 144 err 1 -1 197 no such table: t1 +stmt 197 ok +stmt 274 ok +==== 3.1 + + SELECT * FROM v1 +---- +stmt 0 err 1 -1 20 no such table: v1 +==== 3.2 + + SELECT * FROM v2 +---- +stmt 0 err 1 -1 20 no such table: v2 +==== 3.3 + + SELECT * FROM v2 + UNION ALL + SELECT * FROM v1 +---- +stmt 0 err 1 -1 51 no such table: v1 +==== 3.4 + + WITH w1 AS ( + SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 + ), + w2 AS ( + SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 + ) + SELECT * FROM v1 WHERE u IN w1 + UNION ALL + SELECT * FROM v2 WHERE u IN w2 +---- +stmt 0 err 1 -1 215 no such table: v2 +==== 3.5 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1 (a int UNIQUE); + CREATE TABLE t2 (b int UNIQUE); + INSERT INTO t1 VALUES (1); + INSERT INTO t2 VALUES (1), (2); + SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) = (1, 1); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 88 ok +stmt 122 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 185 no such table: t2 +stmt 185 err 1 -1 246 no such table: t1 +==== 3.6 + + SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) IN ((1, 1)); +---- +stmt 0 err 1 -1 64 no such table: t1 +==== 3.7 + + SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) = (1, 2); +---- +stmt 0 err 1 -1 61 no such table: t1 +==== 3.8 + + SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) IN ((1, 2)); +---- +stmt 0 err 1 -1 64 no such table: t1 +==== 4.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1,x'1111'); + CREATE TABLE t2(c); + CREATE TABLE t3(d); + CREATE TRIGGER t1tr UPDATE ON t1 BEGIN + UPDATE t1 SET b=x'2222' FROM t2; + UPDATE t1 + SET b = (SELECT a IN (SELECT a + FROM t1 + WHERE (b,a) IN (SELECT rowid, d + FROM t3 + ) + ) + FROM t1 NATURAL RIGHT JOIN t1 + ); + END; + UPDATE t1 SET b=x'3333'; + SELECT quote(b) FROM t1; +---- +stmt 0 ok +stmt 45 err 1 -1 81 no such table: t1 +stmt 81 ok +stmt 103 ok +stmt 125 err 1 -1 166 no such table: main.t1 +stmt 562 err 1 -1 589 no such table: t1 +stmt 589 err 1 -1 616 no such table: t1 diff --git a/parser/testdata/incrblob.metadata.json b/parser/testdata/incrblob.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/incrblob.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/incrblob.test b/parser/testdata/incrblob.test new file mode 100644 index 0000000..d4ab08c --- /dev/null +++ b/parser/testdata/incrblob.test @@ -0,0 +1,70 @@ +==== incrblob-1.1 + + CREATE TABLE blobs(k PRIMARY KEY, v BLOB); + INSERT INTO blobs VALUES('one', X'0102030405060708090A'); + INSERT INTO blobs VALUES('two', X'0A090807060504030201'); +---- +stmt 0 ok +stmt 47 err 1 -1 109 no such table: blobs +stmt 109 err 1 -1 171 no such table: blobs +==== incrblob-1.2.6 + + SELECT v FROM blobs WHERE rowid = 1; +---- +stmt 0 err 1 -1 41 no such table: blobs +==== incrblob-generated + + PRAGMA auto_vacuum; +---- +stmt 0 ok +==== incrblob-6.2 + + SELECT rowid FROM blobs ORDER BY rowid +---- +stmt 0 err 1 -1 46 no such table: blobs +==== incrblob-6.12 + + SELECT * FROM blobs WHERE rowid = 4; +---- +stmt 0 err 1 -1 43 no such table: blobs +==== incrblob-6.15 + + SELECT * FROM blobs WHERE rowid = 4; +---- +stmt 0 err 1 -1 43 no such table: blobs +==== incrblob-7.1.0 + + BEGIN; + DROP TABLE blobs; + CREATE TABLE t1 (a, b, c, d BLOB); + INSERT INTO t1(a, b, c, d) VALUES(1, 2, 3, 4); + COMMIT; +---- +stmt 0 ok +stmt 11 err 1 -1 33 no such table: blobs +stmt 33 ok +stmt 72 err 1 -1 123 no such table: t1 +stmt 123 ok +==== incrblob-generated.dup1 + + UPDATE t1 SET d = 15; +---- +stmt 0 err 1 -1 28 no such table: t1 +==== incrblob-generated.dup2 + + SELECT d FROM t1; +---- +stmt 0 err 1 -1 24 no such table: t1 +==== incrblob-generated.dup3 + + SELECT d FROM t1; +---- +stmt 0 err 1 -1 24 no such table: t1 +==== incrblob-8.5 +SELECT b FROM t1 WHERE a = 314159 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== incrblob-8.7 +SELECT b FROM t1 WHERE a = 314159 +---- +stmt 0 err 1 -1 34 no such table: t1 diff --git a/parser/testdata/incrblob2.metadata.json b/parser/testdata/incrblob2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/incrblob2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/incrblob2.test b/parser/testdata/incrblob2.test new file mode 100644 index 0000000..68f86c4 --- /dev/null +++ b/parser/testdata/incrblob2.test @@ -0,0 +1,45 @@ +==== incrblob2-1.0 + + CREATE TABLE blobs(id INTEGER PRIMARY KEY, data BLOB); + INSERT INTO blobs VALUES(NULL, zeroblob(5000)); + INSERT INTO blobs VALUES(NULL, zeroblob(5000)); + INSERT INTO blobs VALUES(NULL, zeroblob(5000)); + INSERT INTO blobs VALUES(NULL, zeroblob(5000)); +---- +stmt 0 ok +stmt 59 err 1 -1 111 no such table: blobs +stmt 111 err 1 -1 163 no such table: blobs +stmt 163 err 1 -1 215 no such table: blobs +stmt 215 err 1 -1 267 no such table: blobs +==== incrblob2-3.2 + + INSERT INTO blobs VALUES(5, zeroblob(10240)); +---- +stmt 0 err 1 -1 50 no such table: blobs +==== incrblob2-8.3 + + CREATE TABLE t3(a INTEGER UNIQUE, b TEXT); + INSERT INTO t3 VALUES(1, 'aaaaaaaaaaaaaaaaaaaa'); + INSERT INTO t3 VALUES(2, 'bbbbbbbbbbbbbbbbbbbb'); + INSERT INTO t3 VALUES(3, 'cccccccccccccccccccc'); + INSERT INTO t3 VALUES(4, 'dddddddddddddddddddd'); + INSERT INTO t3 VALUES(5, 'eeeeeeeeeeeeeeeeeeee'); +---- +stmt 0 ok +stmt 47 err 1 -1 101 no such table: t3 +stmt 101 err 1 -1 155 no such table: t3 +stmt 155 err 1 -1 209 no such table: t3 +stmt 209 err 1 -1 263 no such table: t3 +stmt 263 err 1 -1 317 no such table: t3 +==== incrblob2-8.5 +UPDATE t3 SET a = 6 WHERE a > 3 +---- +stmt 0 err 1 -1 32 no such table: t3 +==== incrblob2-8.6 +UPDATE t3 SET a = 6 WHERE a > 3 +---- +stmt 0 err 1 -1 32 no such table: t3 +==== incrblob2-8.8 +UPDATE t3 SET a = 6 WHERE a = 3 OR a = 5 +---- +stmt 0 err 1 -1 41 no such table: t3 diff --git a/parser/testdata/incrblob3.metadata.json b/parser/testdata/incrblob3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/incrblob3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/incrblob3.test b/parser/testdata/incrblob3.test new file mode 100644 index 0000000..6ee5b43 --- /dev/null +++ b/parser/testdata/incrblob3.test @@ -0,0 +1,32 @@ +==== incrblob3-1.1 + + CREATE TABLE blobs(k INTEGER PRIMARY KEY, v BLOB); + INSERT INTO blobs VALUES(1, zeroblob(100)); + INSERT INTO blobs VALUES(2, zeroblob(100)); +---- +stmt 0 ok +stmt 53 err 1 -1 99 no such table: blobs +stmt 99 err 1 -1 145 no such table: blobs +==== incrblob3-2.2.1 + + INSERT INTO blobs VALUES(3, 42); + INSERT INTO blobs VALUES(4, 54.4); + INSERT INTO blobs VALUES(5, NULL); +---- +stmt 0 err 1 -1 35 no such table: blobs +stmt 35 err 1 -1 72 no such table: blobs +stmt 72 err 1 -1 109 no such table: blobs +==== 8.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t1(a INTEGER PRIMARY KEY, b); + + INSERT INTO t1 VALUES(4, 'hello'); + INSERT INTO aux.t1 VALUES(4, 'world'); +---- +stmt 0 ok +stmt 45 ok +stmt 73 err 1 89 96 unknown database aux +stmt 122 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 201 no such table: aux.t1 diff --git a/parser/testdata/incrblob4.metadata.json b/parser/testdata/incrblob4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/incrblob4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/incrblob4.test b/parser/testdata/incrblob4.test new file mode 100644 index 0000000..7d73f85 --- /dev/null +++ b/parser/testdata/incrblob4.test @@ -0,0 +1,23 @@ +==== 4.1 + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b); + INSERT INTO t2 VALUES(456, '0123456789'); +---- +stmt 0 ok +stmt 45 err 1 -1 89 no such table: t2 +==== 4.3 + + DROP TABLE t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== 5.1 + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b); + INSERT INTO t2 VALUES(1000, 'abcdefghijklmnopqrstuvwxyz'); + INSERT INTO t2 VALUES(2000, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'); + INSERT INTO t2 VALUES(3000, 'abcdefghijklmnopqrstuvwxyz'); +---- +stmt 0 ok +stmt 45 err 1 -1 106 no such table: t2 +stmt 106 err 1 -1 167 no such table: t2 +stmt 167 err 1 -1 228 no such table: t2 diff --git a/parser/testdata/incrblobfault.metadata.json b/parser/testdata/incrblobfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/incrblobfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/incrblobfault.test b/parser/testdata/incrblobfault.test new file mode 100644 index 0000000..920dbc0 --- /dev/null +++ b/parser/testdata/incrblobfault.test @@ -0,0 +1,29 @@ +==== 1.0 + + CREATE TABLE blob(x INTEGER PRIMARY KEY, v BLOB); + INSERT INTO blob VALUES(1, 'hello world'); + INSERT INTO blob VALUES(2, 'world hello'); + INSERT INTO blob SELECT NULL, v FROM blob; + INSERT INTO blob SELECT NULL, v FROM blob; + INSERT INTO blob SELECT NULL, v FROM blob; + INSERT INTO blob SELECT NULL, v FROM blob; + INSERT INTO blob SELECT NULL, v FROM blob; + INSERT INTO blob SELECT NULL, v FROM blob; + INSERT INTO blob SELECT NULL, v FROM blob; + INSERT INTO blob SELECT NULL, v FROM blob; + INSERT INTO blob SELECT NULL, v FROM blob; + INSERT INTO blob SELECT NULL, v FROM blob; +---- +stmt 0 ok +stmt 52 err 1 -1 97 no such table: blob +stmt 97 err 1 -1 142 no such table: blob +stmt 142 err 1 -1 187 no such table: blob +stmt 187 err 1 -1 232 no such table: blob +stmt 232 err 1 -1 277 no such table: blob +stmt 277 err 1 -1 322 no such table: blob +stmt 322 err 1 -1 367 no such table: blob +stmt 367 err 1 -1 412 no such table: blob +stmt 412 err 1 -1 457 no such table: blob +stmt 457 err 1 -1 502 no such table: blob +stmt 502 err 1 -1 547 no such table: blob +stmt 547 err 1 -1 592 no such table: blob diff --git a/parser/testdata/incrcorrupt.metadata.json b/parser/testdata/incrcorrupt.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/incrcorrupt.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/incrcorrupt.test b/parser/testdata/incrcorrupt.test new file mode 100644 index 0000000..72d572a --- /dev/null +++ b/parser/testdata/incrcorrupt.test @@ -0,0 +1,34 @@ +==== 1.0 + + PRAGMA auto_vacuum = 2; + CREATE TABLE t1(a PRIMARY KEY, b); + + WITH data(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM data + ) + INSERT INTO t1 SELECT i, randomblob(600) FROM data LIMIT 20; + PRAGMA page_count; +---- +stmt 0 ok +stmt 26 ok +stmt 63 err 1 -1 195 no such table: t1 +stmt 195 ok +==== 1.1 + + PRAGMA incremental_vacuum; +---- +stmt 0 ok +==== 2.1 + + PRAGMA auto_vacuum = 1; + CREATE TABLE t1(a PRIMARY KEY, b); + WITH data(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM data + ) + INSERT INTO t1 SELECT i, randomblob(600) FROM data LIMIT 20; + PRAGMA page_count; +---- +stmt 0 ok +stmt 26 ok +stmt 63 err 1 -1 194 no such table: t1 +stmt 194 ok diff --git a/parser/testdata/incrvacuum.metadata.json b/parser/testdata/incrvacuum.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/incrvacuum.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/incrvacuum.test b/parser/testdata/incrvacuum.test new file mode 100644 index 0000000..ce76f59 --- /dev/null +++ b/parser/testdata/incrvacuum.test @@ -0,0 +1,173 @@ +==== incrvacuum-1.1 + + pragma auto_vacuum; +---- +stmt 0 ok +==== incrvacuum-1.3 + + pragma auto_vacuum = 'incremental'; + pragma auto_vacuum; +---- +stmt 0 ok +stmt 40 ok +==== incrvacuum-1.5 + + pragma auto_vacuum = 1; + pragma auto_vacuum; +---- +stmt 0 ok +stmt 28 ok +==== incrvacuum-1.6 + + pragma auto_vacuum = '2'; + pragma auto_vacuum; +---- +stmt 0 ok +stmt 30 ok +==== incrvacuum-2.1 + + pragma auto_vacuum = 1; + CREATE TABLE abc(a, b, c); +---- +stmt 0 ok +stmt 28 ok +==== incrvacuum-2.2 + + pragma auto_vacuum = 'none'; + pragma auto_vacuum; +---- +stmt 0 ok +stmt 33 ok +==== incrvacuum-2.3 + + pragma auto_vacuum = 'incremental'; + pragma auto_vacuum; +---- +stmt 0 ok +stmt 40 ok +==== incrvacuum-2.4 + + pragma auto_vacuum = 'full'; + pragma auto_vacuum; +---- +stmt 0 ok +stmt 33 ok +==== incrvacuum-3.1 + + pragma auto_vacuum; +---- +stmt 0 ok +==== incrvacuum-5.2.4 + + SELECT * FROM tbl2; +---- +stmt 0 err 1 -1 24 no such table: tbl2 +==== incrvacuum-generated + + SELECT * FROM tbl1; +---- +stmt 0 err 1 -1 26 no such table: tbl1 +==== incrvacuum-9.2 + + PRAGMA synchronous = 'OFF'; + BEGIN; + UPDATE t1 SET a = a, b = b, c = c; + DROP TABLE t2; + PRAGMA incremental_vacuum(10); + ROLLBACK; +---- +stmt 0 ok +stmt 32 ok +stmt 43 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 101 no such table: t2 +stmt 101 ok +stmt 136 ok +==== incrvacuum-9.3 + + PRAGMA cache_size = 10; + BEGIN; + UPDATE t1 SET a = a, b = b, c = c; + DROP TABLE t2; + PRAGMA incremental_vacuum(10); + ROLLBACK; +---- +stmt 0 ok +stmt 28 ok +stmt 39 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 97 no such table: t2 +stmt 97 ok +stmt 132 ok +==== incrvacuum-11.1-av-dflt-on + + PRAGMA auto_vacuum; +---- +stmt 0 ok +==== incrvacuum-11.1-av-dflt-off + + PRAGMA auto_vacuum; +---- +stmt 0 ok +==== incrvacuum-11.2 + + PRAGMA auto_vacuum = incremental; +---- +stmt 0 ok +==== incrvacuum-11.3 + + PRAGMA auto_vacuum; +---- +stmt 0 ok +==== incrvacuum-11.6 + + PRAGMA auto_vacuum = 'full'; + PRAGMA auto_vacuum; +---- +stmt 0 ok +stmt 33 ok +==== incrvacuum-13.5 + + PRAGMA auto_vacuum; +---- +stmt 0 ok +==== incrvacuum-16.0 + + PRAGMA auto_vacuum = 2; + CREATE TABLE t3(a); + INSERT INTO t3 VALUES(1), (2), (3), (4); + + CREATE TABLE t2(x); + INSERT INTO t2 VALUES( randomblob(1000) ); + INSERT INTO t2 VALUES( randomblob(1000) ); + INSERT INTO t2 VALUES( randomblob(1000) ); + INSERT INTO t2 VALUES( randomblob(1000) ); + INSERT INTO t2 VALUES( randomblob(1000) ); + INSERT INTO t2 VALUES( randomblob(1000) ); +---- +stmt 0 ok +stmt 28 ok +stmt 52 err 1 -1 97 no such table: t3 +stmt 97 ok +stmt 124 err 1 -1 171 no such table: t2 +stmt 171 err 1 -1 218 no such table: t2 +stmt 218 err 1 -1 265 no such table: t2 +stmt 265 err 1 -1 312 no such table: t2 +stmt 312 err 1 -1 359 no such table: t2 +stmt 359 err 1 -1 406 no such table: t2 +==== incrvacuum-16.1 + + PRAGMA mmap_size = 1000000; + BEGIN; + DELETE FROM t2; + PRAGMA incremental_vacuum = 1000; +---- +stmt 0 ok +stmt 32 ok +stmt 43 err 1 -1 63 no such table: t2 +stmt 63 ok +==== incrvacuum-17.1 + + PRAGMA writable_schema=ON; + PRAGMA incremental_vacuum(10); +---- +stmt 0 ok +stmt 29 ok diff --git a/parser/testdata/incrvacuum2.metadata.json b/parser/testdata/incrvacuum2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/incrvacuum2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/incrvacuum2.test b/parser/testdata/incrvacuum2.test new file mode 100644 index 0000000..d824e95 --- /dev/null +++ b/parser/testdata/incrvacuum2.test @@ -0,0 +1,70 @@ +==== incrvacuum2-3.1 + + PRAGMA auto_vacuum = 'full'; + BEGIN; + CREATE TABLE abc(a); + INSERT INTO abc VALUES(randstr(1500,1500)); + COMMIT; +---- +stmt 0 ok +stmt 33 ok +stmt 44 ok +stmt 69 err 1 -1 117 no such table: abc +stmt 117 ok +==== incrvacuum2-3.2 + + BEGIN; + DELETE FROM abc; + PRAGMA incremental_vacuum; + COMMIT; +---- +stmt 0 ok +stmt 11 err 1 -1 32 no such table: abc +stmt 32 ok +stmt 63 ok +==== 4.1 + + PRAGMA page_size = 512; + PRAGMA auto_vacuum = 2; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randomblob(400)); + INSERT INTO t1 SELECT * FROM t1; -- 2 + INSERT INTO t1 SELECT * FROM t1; -- 4 + INSERT INTO t1 SELECT * FROM t1; -- 8 + INSERT INTO t1 SELECT * FROM t1; -- 16 + INSERT INTO t1 SELECT * FROM t1; -- 32 + INSERT INTO t1 SELECT * FROM t1; -- 128 + INSERT INTO t1 SELECT * FROM t1; -- 256 + INSERT INTO t1 SELECT * FROM t1; -- 512 + INSERT INTO t1 SELECT * FROM t1; -- 1024 + INSERT INTO t1 SELECT * FROM t1; -- 2048 + INSERT INTO t1 SELECT * FROM t1; -- 4096 + INSERT INTO t1 SELECT * FROM t1; -- 8192 + DELETE FROM t1 WHERE oid>512; + DELETE FROM t1; +---- +stmt 0 ok +stmt 28 ok +stmt 56 ok +stmt 80 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 217 no such table: t1 +stmt 217 err 1 -1 273 no such table: t1 +stmt 273 err 1 -1 329 no such table: t1 +stmt 329 err 1 -1 385 no such table: t1 +stmt 385 err 1 -1 441 no such table: t1 +stmt 441 err 1 -1 497 no such table: t1 +stmt 497 err 1 -1 553 no such table: t1 +stmt 553 err 1 -1 609 no such table: t1 +stmt 609 err 1 -1 665 no such table: t1 +stmt 665 err 1 -1 721 no such table: t1 +stmt 721 err 1 -1 777 no such table: t1 +stmt 777 err 1 -1 830 no such table: t1 +stmt 830 err 1 -1 850 no such table: t1 +==== 4.2 + + PRAGMA journal_mode = WAL; + PRAGMA incremental_vacuum(1); +---- +stmt 0 ok +stmt 34 ok diff --git a/parser/testdata/incrvacuum3.metadata.json b/parser/testdata/incrvacuum3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/incrvacuum3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/incrvacuum3.test b/parser/testdata/incrvacuum3.test new file mode 100644 index 0000000..04144a8 --- /dev/null +++ b/parser/testdata/incrvacuum3.test @@ -0,0 +1,12 @@ +==== incrvacuum3-generated +PRAGMA integrity_check +---- +stmt 0 ok +==== incrvacuum3-generated.dup1 + PRAGMA freelist_count +---- +stmt 0 ok +==== incrvacuum3-generated.dup2 + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 diff --git a/parser/testdata/index.metadata.json b/parser/testdata/index.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/index.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/index.test b/parser/testdata/index.test new file mode 100644 index 0000000..9bfd49e --- /dev/null +++ b/parser/testdata/index.test @@ -0,0 +1,563 @@ +==== index-1.1b +SELECT name, sql, tbl_name, type FROM sqlite_master + WHERE name='index1' +---- +stmt 0 ok +==== index-4.2 +SELECT cnt FROM test1 WHERE power=4 +---- +stmt 0 err 1 -1 36 no such table: test1 +==== index-4.3 +SELECT cnt FROM test1 WHERE power=1024 +---- +stmt 0 err 1 -1 39 no such table: test1 +==== index-4.4 +SELECT power FROM test1 WHERE cnt=6 +---- +stmt 0 err 1 -1 36 no such table: test1 +==== index-4.6 +SELECT cnt FROM test1 WHERE power=1024 +---- +stmt 0 err 1 -1 39 no such table: test1 +==== index-4.8 +SELECT cnt FROM test1 WHERE power=1024 +---- +stmt 0 err 1 -1 39 no such table: test1 +==== index-4.10 +SELECT cnt FROM test1 WHERE power=1024 +---- +stmt 0 err 1 -1 39 no such table: test1 +==== index-4.12 +SELECT cnt FROM test1 WHERE power=1024 +---- +stmt 0 err 1 -1 39 no such table: test1 +==== index-5.2 +SELECT name FROM sqlite_master WHERE type!='meta' +---- +stmt 0 ok +==== index-6.1b +SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name +---- +stmt 0 ok +==== index-6.1c +CREATE INDEX IF NOT EXISTS index1 ON test1(f1) +---- +stmt 0 err 1 -1 47 no such table: main.test1 +==== index-6.2b +SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name +---- +stmt 0 ok +==== index-6.4 + + CREATE TABLE test1(a,b); + CREATE INDEX index1 ON test1(a); + CREATE INDEX index2 ON test1(b); + CREATE INDEX index3 ON test1(a,b); + DROP TABLE test1; + SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name; +---- +stmt 0 ok +stmt 29 err 1 -1 66 no such table: main.test1 +stmt 66 err 1 -1 103 no such table: main.test1 +stmt 103 err 1 -1 142 no such table: main.test1 +stmt 142 err 1 -1 164 no such table: test1 +stmt 164 ok +==== index-7.2 +SELECT f1 FROM test1 WHERE f2=65536 +---- +stmt 0 err 1 -1 36 no such table: test1 +==== index-7.3 + + SELECT name FROM sqlite_master + WHERE type='index' AND tbl_name='test1' +---- +stmt 0 ok +==== index-10.0 + + CREATE TABLE t1(a int, b int); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(2,4); + INSERT INTO t1 VALUES(3,8); + INSERT INTO t1 VALUES(1,12); + SELECT b FROM t1 WHERE a=1 ORDER BY b; +---- +stmt 0 ok +stmt 35 err 1 -1 65 no such table: main.t1 +stmt 65 err 1 -1 97 no such table: t1 +stmt 97 err 1 -1 129 no such table: t1 +stmt 129 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 194 no such table: t1 +stmt 194 err 1 -1 237 no such table: t1 +==== index-10.1 + + SELECT b FROM t1 WHERE a=2 ORDER BY b; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== index-10.2 + + DELETE FROM t1 WHERE b=12; + SELECT b FROM t1 WHERE a=1 ORDER BY b; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 74 no such table: t1 +==== index-10.3 + + DELETE FROM t1 WHERE b=2; + SELECT b FROM t1 WHERE a=1 ORDER BY b; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 73 no such table: t1 +==== index-10.4 + + DELETE FROM t1; + INSERT INTO t1 VALUES (1,1); + INSERT INTO t1 VALUES (1,2); + INSERT INTO t1 VALUES (1,3); + INSERT INTO t1 VALUES (1,4); + INSERT INTO t1 VALUES (1,5); + INSERT INTO t1 VALUES (1,6); + INSERT INTO t1 VALUES (1,7); + INSERT INTO t1 VALUES (1,8); + INSERT INTO t1 VALUES (1,9); + INSERT INTO t1 VALUES (2,0); + SELECT b FROM t1 WHERE a=1 ORDER BY b; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 53 no such table: t1 +stmt 53 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 119 no such table: t1 +stmt 119 err 1 -1 152 no such table: t1 +stmt 152 err 1 -1 185 no such table: t1 +stmt 185 err 1 -1 218 no such table: t1 +stmt 218 err 1 -1 251 no such table: t1 +stmt 251 err 1 -1 284 no such table: t1 +stmt 284 err 1 -1 317 no such table: t1 +stmt 317 err 1 -1 350 no such table: t1 +stmt 350 err 1 -1 393 no such table: t1 +==== index-10.6 + + DELETE FROM t1 WHERE b>2; + SELECT b FROM t1 WHERE a=1 ORDER BY b; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 73 no such table: t1 +==== index-10.7 + + DELETE FROM t1 WHERE b=1; + SELECT b FROM t1 WHERE a=1 ORDER BY b; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 73 no such table: t1 +==== index-10.8 + + SELECT b FROM t1 ORDER BY b; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== index-12.1 + + CREATE TABLE t4(a NUM,b); + INSERT INTO t4 VALUES('0.0',1); + INSERT INTO t4 VALUES('0.00',2); + INSERT INTO t4 VALUES('abc',3); + INSERT INTO t4 VALUES('-1.0',4); + INSERT INTO t4 VALUES('+1.0',5); + INSERT INTO t4 VALUES('0',6); + INSERT INTO t4 VALUES('00000',7); + SELECT a FROM t4 ORDER BY b; +---- +stmt 0 ok +stmt 30 err 1 -1 66 no such table: t4 +stmt 66 err 1 -1 103 no such table: t4 +stmt 103 err 1 -1 139 no such table: t4 +stmt 139 err 1 -1 176 no such table: t4 +stmt 176 err 1 -1 213 no such table: t4 +stmt 213 err 1 -1 247 no such table: t4 +stmt 247 err 1 -1 285 no such table: t4 +stmt 285 err 1 -1 318 no such table: t4 +==== index-12.2 + + SELECT a FROM t4 WHERE a==0 ORDER BY b +---- +stmt 0 err 1 -1 44 no such table: t4 +==== index-12.3 + + SELECT a FROM t4 WHERE a<0.5 ORDER BY b +---- +stmt 0 err 1 -1 45 no such table: t4 +==== index-12.4 + + SELECT a FROM t4 WHERE a>-0.5 ORDER BY b +---- +stmt 0 err 1 -1 46 no such table: t4 +==== index-12.5 + + CREATE INDEX t4i1 ON t4(a); + SELECT a FROM t4 WHERE a==0 ORDER BY b +---- +stmt 0 err 1 -1 32 no such table: main.t4 +stmt 32 err 1 -1 76 no such table: t4 +==== index-12.6 + + SELECT a FROM t4 WHERE a<0.5 ORDER BY b +---- +stmt 0 err 1 -1 45 no such table: t4 +==== index-12.7 + + SELECT a FROM t4 WHERE a>-0.5 ORDER BY b +---- +stmt 0 err 1 -1 46 no such table: t4 +==== index-13.1 + + CREATE TABLE t5( + a int UNIQUE, + b float PRIMARY KEY, + c varchar(10), + UNIQUE(a,c) + ); + INSERT INTO t5 VALUES(1,2,3); + SELECT * FROM t5; +---- +stmt 0 ok +stmt 112 err 1 -1 145 no such table: t5 +stmt 145 err 1 -1 166 no such table: t5 +==== index-13.4 + + INSERT INTO t5 VALUES('a','b','c'); + SELECT * FROM t5; +---- +stmt 0 err 1 -1 40 no such table: t5 +stmt 40 err 1 -1 62 no such table: t5 +==== index-14.1 + + CREATE TABLE t6(a,b,c); + CREATE INDEX t6i1 ON t6(a,b); + INSERT INTO t6 VALUES('','',1); + INSERT INTO t6 VALUES('',NULL,2); + INSERT INTO t6 VALUES(NULL,'',3); + INSERT INTO t6 VALUES('abc',123,4); + INSERT INTO t6 VALUES(123,'abc',5); + SELECT c FROM t6 ORDER BY a,b; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: main.t6 +stmt 62 err 1 -1 98 no such table: t6 +stmt 98 err 1 -1 136 no such table: t6 +stmt 136 err 1 -1 174 no such table: t6 +stmt 174 err 1 -1 214 no such table: t6 +stmt 214 err 1 -1 254 no such table: t6 +stmt 254 err 1 -1 289 no such table: t6 +==== index-14.2 + + SELECT c FROM t6 WHERE a=''; +---- +stmt 0 err 1 -1 33 no such table: t6 +==== index-14.3 + + SELECT c FROM t6 WHERE b=''; +---- +stmt 0 err 1 -1 33 no such table: t6 +==== index-14.4 + + SELECT c FROM t6 WHERE a>''; +---- +stmt 0 err 1 -1 33 no such table: t6 +==== index-14.5 + + SELECT c FROM t6 WHERE a>=''; +---- +stmt 0 err 1 -1 34 no such table: t6 +==== index-14.6 + + SELECT c FROM t6 WHERE a>123; +---- +stmt 0 err 1 -1 34 no such table: t6 +==== index-14.7 + + SELECT c FROM t6 WHERE a>=123; +---- +stmt 0 err 1 -1 35 no such table: t6 +==== index-14.8 + + SELECT c FROM t6 WHERE a<'abc'; +---- +stmt 0 err 1 -1 36 no such table: t6 +==== index-14.9 + + SELECT c FROM t6 WHERE a<='abc'; +---- +stmt 0 err 1 -1 37 no such table: t6 +==== index-14.10 + + SELECT c FROM t6 WHERE a<=''; +---- +stmt 0 err 1 -1 34 no such table: t6 +==== index-14.11 + + SELECT c FROM t6 WHERE a<''; +---- +stmt 0 err 1 -1 33 no such table: t6 +==== index-15.1 + + DELETE FROM t1; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 42 no such table: t1 +==== index-15.2 + + INSERT INTO t1 VALUES('1.234e5',1); + INSERT INTO t1 VALUES('12.33e04',2); + INSERT INTO t1 VALUES('12.35E4',3); + INSERT INTO t1 VALUES('12.34e',4); + INSERT INTO t1 VALUES('12.32e+4',5); + INSERT INTO t1 VALUES('12.36E+04',6); + INSERT INTO t1 VALUES('12.36E+',7); + INSERT INTO t1 VALUES('+123.10000E+0003',8); + INSERT INTO t1 VALUES('+',9); + INSERT INTO t1 VALUES('+12347.E+02',10); + INSERT INTO t1 VALUES('+12347E+02',11); + INSERT INTO t1 VALUES('+.125E+04',12); + INSERT INTO t1 VALUES('-.125E+04',13); + INSERT INTO t1 VALUES('.125E+0',14); + INSERT INTO t1 VALUES('.125',15); + SELECT b FROM t1 ORDER BY a, b; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 121 no such table: t1 +stmt 121 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 201 no such table: t1 +stmt 201 err 1 -1 243 no such table: t1 +stmt 243 err 1 -1 283 no such table: t1 +stmt 283 err 1 -1 332 no such table: t1 +stmt 332 err 1 -1 366 no such table: t1 +stmt 366 err 1 -1 411 no such table: t1 +stmt 411 err 1 -1 455 no such table: t1 +stmt 455 err 1 -1 498 no such table: t1 +stmt 498 err 1 -1 541 no such table: t1 +stmt 541 err 1 -1 582 no such table: t1 +stmt 582 err 1 -1 620 no such table: t1 +stmt 620 err 1 -1 656 no such table: t1 +==== index-15.3 + + SELECT b FROM t1 WHERE typeof(a) IN ('integer','real') ORDER BY b; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== index-16.1 + + CREATE TABLE t7(c UNIQUE PRIMARY KEY); + SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; +---- +stmt 0 ok +stmt 43 ok +==== index-16.2 + + DROP TABLE t7; + CREATE TABLE t7(c UNIQUE PRIMARY KEY); + SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; +---- +stmt 0 err 1 -1 19 no such table: t7 +stmt 19 ok +stmt 62 ok +==== index-16.3 + + DROP TABLE t7; + CREATE TABLE t7(c PRIMARY KEY, UNIQUE(c) ); + SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; +---- +stmt 0 err 1 -1 19 no such table: t7 +stmt 19 ok +stmt 67 ok +==== index-16.4 + + DROP TABLE t7; + CREATE TABLE t7(c, d , UNIQUE(c, d), PRIMARY KEY(c, d) ); + SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; +---- +stmt 0 err 1 -1 19 no such table: t7 +stmt 19 ok +stmt 81 ok +==== index-16.5 + + DROP TABLE t7; + CREATE TABLE t7(c, d , UNIQUE(c), PRIMARY KEY(c, d) ); + SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; +---- +stmt 0 err 1 -1 19 no such table: t7 +stmt 19 ok +stmt 78 ok +==== index-17.1 + + DROP TABLE t7; + CREATE TABLE t7(c, d UNIQUE, UNIQUE(c), PRIMARY KEY(c, d) ); + SELECT name FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; +---- +stmt 0 err 1 -1 19 no such table: t7 +stmt 19 ok +stmt 84 ok +==== index-17.2 + + DROP INDEX sqlite_autoindex_t7_1; +---- +stmt 0 err 1 -1 38 no such index: sqlite_autoindex_t7_1 +==== index-17.3 + + DROP INDEX IF EXISTS sqlite_autoindex_t7_1; +---- +stmt 0 ok +==== index-17.4 + + DROP INDEX IF EXISTS no_such_index; +---- +stmt 0 ok +==== index-18.1 + + CREATE TABLE sqlite_t1(a, b, c); +---- +stmt 0 err 1 -1 28 object name reserved for internal use: sqlite_t1 +==== index-18.1.2 + + CREATE TABLE sqlite_t1(a, b, c); +---- +stmt 0 err 1 -1 28 object name reserved for internal use: sqlite_t1 +==== index-18.2 + + CREATE INDEX sqlite_i1 ON t7(c); +---- +stmt 0 err 1 -1 37 no such table: main.t7 +==== index-18.3 + + CREATE VIEW sqlite_v1 AS SELECT * FROM t7; +---- +stmt 0 err 1 -1 47 object name reserved for internal use: sqlite_v1 +==== index-18.4 + + CREATE TRIGGER sqlite_tr1 BEFORE INSERT ON t7 BEGIN SELECT 1; END; +---- +stmt 0 err 1 -1 58 no such table: main.t7 +==== index-18.5 + + DROP TABLE t7; +---- +stmt 0 err 1 -1 19 no such table: t7 +==== index-19.1 + + CREATE TABLE t7(a UNIQUE PRIMARY KEY); + CREATE TABLE t8(a UNIQUE PRIMARY KEY ON CONFLICT ROLLBACK); + INSERT INTO t7 VALUES(1); + INSERT INTO t8 VALUES(1); +---- +stmt 0 ok +stmt 45 ok +stmt 111 err 1 -1 143 no such table: t7 +stmt 143 err 1 -1 175 no such table: t8 +==== index-19.2 + + BEGIN; + INSERT INTO t7 VALUES(1); +---- +stmt 0 ok +stmt 13 err 1 -1 45 no such table: t7 +==== index-19.3 + + BEGIN; +---- +stmt 0 ok +==== index-19.4 + + INSERT INTO t8 VALUES(1); +---- +stmt 0 err 1 -1 32 no such table: t8 +==== index-19.5 + + BEGIN; + COMMIT; +---- +stmt 0 ok +stmt 13 ok +==== index-19.6 + + DROP TABLE t7; + DROP TABLE t8; + CREATE TABLE t7( + a PRIMARY KEY ON CONFLICT FAIL, + UNIQUE(a) ON CONFLICT IGNORE + ); +---- +stmt 0 err 1 -1 21 no such table: t7 +stmt 21 err 1 -1 42 no such table: t8 +stmt 42 err 1 -1 153 conflicting ON CONFLICT clauses specified +==== index-20.1 + + CREATE INDEX "t6i2" ON t6(c); + DROP INDEX "t6i2"; +---- +stmt 0 err 1 -1 34 no such table: main.t6 +stmt 34 err 1 -1 57 no such index: t6i2 +==== index-20.2 + + DROP INDEX "t6i1"; +---- +stmt 0 err 1 -1 23 no such index: t6i1 +==== index-21.1 + + CREATE INDEX temp.i21 ON t6(c); +---- +stmt 0 err 1 -1 37 no such table: t6 +==== index-21.2 + + CREATE TEMP TABLE t6(x); + INSERT INTO temp.t6 values(1),(5),(9); + CREATE INDEX temp.i21 ON t6(x); + SELECT x FROM t6 ORDER BY x DESC; +---- +stmt 0 ok +stmt 30 err 1 -1 74 no such table: temp.t6 +stmt 74 err 1 -1 111 no such table: t6 +stmt 111 err 1 -1 150 no such table: t6 +==== index-22.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a, b TEXT); + CREATE UNIQUE INDEX IF NOT EXISTS x1 ON t1(b==0); + CREATE INDEX IF NOT EXISTS x2 ON t1(a || 0) WHERE b; + INSERT INTO t1(a,b) VALUES('a',1),('a',0); + SELECT a, b, '|' FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 57 err 1 -1 109 no such table: main.t1 +stmt 109 err 1 -1 164 no such table: main.t1 +stmt 164 err 1 -1 209 no such table: t1 +stmt 209 err 1 -1 237 no such table: t1 +==== index-23.0 + + DROP TABLE t1; + CREATE TABLE t1(a TEXT, b REAL); + CREATE UNIQUE INDEX t1x1 ON t1(a GLOB b); + INSERT INTO t1(a,b) VALUES('0.0','1'),('1.0','1'); + SELECT * FROM t1; + REINDEX; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 52 err 1 -1 96 no such table: main.t1 +stmt 96 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 169 no such table: t1 +stmt 169 ok +==== index-23.1 + + DROP TABLE t1; + CREATE TABLE t1(a REAL); + CREATE UNIQUE INDEX index_0 ON t1(TYPEOF(a)); + INSERT OR IGNORE INTO t1(a) VALUES (0.1),(FALSE); + SELECT * FROM t1; + REINDEX; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 44 err 1 -1 92 no such table: main.t1 +stmt 92 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 164 no such table: t1 +stmt 164 ok diff --git a/parser/testdata/index2.metadata.json b/parser/testdata/index2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/index2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/index2.test b/parser/testdata/index2.test new file mode 100644 index 0000000..0e0733e --- /dev/null +++ b/parser/testdata/index2.test @@ -0,0 +1,8 @@ +==== index2-1.3 +SELECT c123 FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== index2-1.5 +SELECT round(sum(c1000)) FROM t1 +---- +stmt 0 err 1 -1 33 no such table: t1 diff --git a/parser/testdata/index3.metadata.json b/parser/testdata/index3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/index3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/index3.test b/parser/testdata/index3.test new file mode 100644 index 0000000..1d45a2b --- /dev/null +++ b/parser/testdata/index3.test @@ -0,0 +1,55 @@ +==== index3-1.1 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(1); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 106 no such table: t1 +==== index3-1.2 + + BEGIN; + CREATE UNIQUE INDEX i1 ON t1(a); +---- +stmt 0 ok +stmt 11 err 1 -1 48 no such table: main.t1 +==== index3-2.1 + + DROP TABLE t1; + CREATE TABLE t1(a, b, c, d, e, + PRIMARY KEY('a'), UNIQUE('b' COLLATE nocase DESC)); + CREATE INDEX t1c ON t1('c'); + CREATE INDEX t1d ON t1('d' COLLATE binary ASC); + WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<30) + INSERT INTO t1(a,b,c,d,e) + SELECT x, printf('ab%03xxy',x), x, x, x FROM c; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 121 err 1 -1 152 no such table: main.t1 +stmt 152 err 1 -1 202 no such table: main.t1 +stmt 202 err 1 -1 359 no such table: t1 +==== index3-2.2 + + SELECT a FROM t1 WHERE b='ab005xy' COLLATE nocase; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== index3-2.2eqp + + EXPLAIN QUERY PLAN + SELECT a FROM t1 WHERE b='ab005xy' COLLATE nocase; +---- +stmt 0 err 1 -1 74 no such table: t1 +==== index3-2.3 + + SELECT name FROM sqlite_master WHERE tbl_name='t1' ORDER BY name +---- +stmt 0 ok +==== index3-2.5 + + SELECT name FROM sqlite_master WHERE tbl_name LIKE 't2_' ORDER BY name +---- +stmt 0 ok diff --git a/parser/testdata/index4.metadata.json b/parser/testdata/index4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/index4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/index4.test b/parser/testdata/index4.test new file mode 100644 index 0000000..104cb6d --- /dev/null +++ b/parser/testdata/index4.test @@ -0,0 +1,162 @@ +==== 1.1 + + BEGIN; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randomblob(102)); + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 2 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 4 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 8 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 16 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 32 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 64 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 128 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 256 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 512 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 1024 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 2048 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 4096 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 8192 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 16384 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 32768 + INSERT INTO t1 SELECT randomblob(102) FROM t1; -- 65536 + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 33 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 256 no such table: t1 +stmt 256 err 1 -1 320 no such table: t1 +stmt 320 err 1 -1 384 no such table: t1 +stmt 384 err 1 -1 448 no such table: t1 +stmt 448 err 1 -1 512 no such table: t1 +stmt 512 err 1 -1 576 no such table: t1 +stmt 576 err 1 -1 640 no such table: t1 +stmt 640 err 1 -1 704 no such table: t1 +stmt 704 err 1 -1 768 no such table: t1 +stmt 768 err 1 -1 832 no such table: t1 +stmt 832 err 1 -1 896 no such table: t1 +stmt 896 err 1 -1 960 no such table: t1 +stmt 960 err 1 -1 1024 no such table: t1 +stmt 1024 err 1 -1 1088 no such table: t1 +stmt 1088 ok +==== 1.2 + + CREATE INDEX i1 ON t1(x); +---- +stmt 0 err 1 -1 28 no such table: main.t1 +==== 1.3 + + PRAGMA integrity_check +---- +stmt 0 ok +==== 1.4 + + PRAGMA cache_size = 10; + CREATE INDEX i2 ON t1(x); +---- +stmt 0 ok +stmt 28 err 1 -1 58 no such table: main.t1 +==== 1.5 + + PRAGMA integrity_check +---- +stmt 0 ok +==== 1.6 + + BEGIN; + DROP TABLE t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('a'); + INSERT INTO t1 VALUES('b'); + INSERT INTO t1 VALUES('c'); + INSERT INTO t1 VALUES('d'); + INSERT INTO t1 VALUES('e'); + INSERT INTO t1 VALUES('f'); + INSERT INTO t1 VALUES('g'); + INSERT INTO t1 VALUES(NULL); + INSERT INTO t1 SELECT randomblob(1202) FROM t1; -- 16 + INSERT INTO t1 SELECT randomblob(2202) FROM t1; -- 32 + INSERT INTO t1 SELECT randomblob(3202) FROM t1; -- 64 + INSERT INTO t1 SELECT randomblob(4202) FROM t1; -- 128 + INSERT INTO t1 SELECT randomblob(5202) FROM t1; -- 256 + COMMIT; + CREATE INDEX i1 ON t1(x); + PRAGMA integrity_check +---- +stmt 0 ok +stmt 9 err 1 -1 28 no such table: t1 +stmt 28 ok +stmt 52 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 116 no such table: t1 +stmt 116 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 180 no such table: t1 +stmt 180 err 1 -1 212 no such table: t1 +stmt 212 err 1 -1 244 no such table: t1 +stmt 244 err 1 -1 276 no such table: t1 +stmt 276 err 1 -1 309 no such table: t1 +stmt 309 err 1 -1 361 no such table: t1 +stmt 361 err 1 -1 426 no such table: t1 +stmt 426 err 1 -1 491 no such table: t1 +stmt 491 err 1 -1 556 no such table: t1 +stmt 556 err 1 -1 621 no such table: t1 +stmt 621 ok +stmt 644 err 1 -1 672 no such table: main.t1 +stmt 672 ok +==== 1.7 + + BEGIN; + DROP TABLE t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('a'); + COMMIT; + CREATE INDEX i1 ON t1(x); + PRAGMA integrity_check +---- +stmt 0 ok +stmt 9 err 1 -1 28 no such table: t1 +stmt 28 ok +stmt 52 err 1 -1 84 no such table: t1 +stmt 84 ok +stmt 94 err 1 -1 122 no such table: main.t1 +stmt 122 ok +==== 1.8 + + BEGIN; + DROP TABLE t1; + CREATE TABLE t1(x); + COMMIT; + CREATE INDEX i1 ON t1(x); + PRAGMA integrity_check +---- +stmt 0 ok +stmt 9 err 1 -1 28 no such table: t1 +stmt 28 ok +stmt 52 ok +stmt 62 err 1 -1 90 no such table: main.t1 +stmt 90 ok +==== 2.1 + + BEGIN; + CREATE TABLE t2(x); + INSERT INTO t2 VALUES(14); + INSERT INTO t2 VALUES(35); + INSERT INTO t2 VALUES(15); + INSERT INTO t2 VALUES(35); + INSERT INTO t2 VALUES(16); + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 33 err 1 -1 64 no such table: t2 +stmt 64 err 1 -1 95 no such table: t2 +stmt 95 err 1 -1 126 no such table: t2 +stmt 126 err 1 -1 157 no such table: t2 +stmt 157 err 1 -1 188 no such table: t2 +stmt 188 ok +==== 2.2 + + CREATE UNIQUE INDEX i3 ON t2(x); +---- +stmt 0 err 1 -1 35 no such table: main.t2 diff --git a/parser/testdata/index6.metadata.json b/parser/testdata/index6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/index6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/index6.test b/parser/testdata/index6.test new file mode 100644 index 0000000..1791aec --- /dev/null +++ b/parser/testdata/index6.test @@ -0,0 +1,585 @@ +==== index6-1.1.1 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== index6-1.2 + + CREATE INDEX bad1 ON t1(a,b) WHERE x IS NOT NULL; +---- +stmt 0 err 1 -1 54 no such table: main.t1 +==== index6-1.3 + + CREATE INDEX bad1 ON t1(a,b) WHERE EXISTS(SELECT * FROM t1); +---- +stmt 0 err 1 -1 65 no such table: main.t1 +==== index6-1.4 + + CREATE INDEX bad1 ON t1(a,b) WHERE a!=?1; +---- +stmt 0 err 1 -1 46 no such table: main.t1 +==== index6-1.5 + + CREATE INDEX bad1 ON t1(a,b) WHERE a!=random(); +---- +stmt 0 err 1 -1 52 no such table: main.t1 +==== index6-1.6 + + CREATE INDEX bad1 ON t1(a,b) WHERE a NOT LIKE 'abc%'; +---- +stmt 0 err 1 -1 58 no such table: main.t1 +==== index6-1.7 + + DROP INDEX IF EXISTS bad1; +---- +stmt 0 ok +==== index6-1.10 + + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 13 err 1 -1 66 no such table: sqlite_stat1 +stmt 66 ok +==== index6-1.11 + + UPDATE t1 SET a=b; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 23 no such table: t1 +stmt 23 ok +stmt 36 err 1 -1 89 no such table: sqlite_stat1 +stmt 89 ok +==== index6-1.11.dup1 + + UPDATE t1 SET a=NULL WHERE b%3!=0; + UPDATE t1 SET b=b+100; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 66 no such table: t1 +stmt 66 ok +stmt 79 err 1 -1 132 no such table: sqlite_stat1 +stmt 132 ok +==== index6-1.12 + + UPDATE t1 SET a=CASE WHEN b%3!=0 THEN b END; + UPDATE t1 SET b=b-100; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 49 no such table: t1 +stmt 49 err 1 -1 76 no such table: t1 +stmt 76 ok +stmt 89 err 1 -1 142 no such table: sqlite_stat1 +stmt 142 ok +==== index6-1.13 + + DELETE FROM t1 WHERE b BETWEEN 8 AND 12; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 45 no such table: t1 +stmt 45 ok +stmt 58 err 1 -1 111 no such table: sqlite_stat1 +stmt 111 ok +==== index6-1.14 + + REINDEX; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 13 ok +stmt 26 err 1 -1 79 no such table: sqlite_stat1 +stmt 79 ok +==== index6-1.15 + + CREATE INDEX t1c ON t1(c); + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 31 no such table: main.t1 +stmt 31 ok +stmt 44 err 1 -1 97 no such table: sqlite_stat1 +stmt 97 ok +==== index6-2.1 + + CREATE TABLE t2(a,b); + INSERT INTO t2(a,b) SELECT value, value FROM nums WHERE value<1000; + UPDATE t2 SET a=NULL WHERE b%2==0; + CREATE INDEX t2a1 ON t2(a) WHERE a IS NOT NULL; + SELECT count(*) FROM t2 WHERE a IS NOT NULL; +---- +stmt 0 ok +stmt 26 err 1 -1 98 no such table: t2 +stmt 98 err 1 -1 137 no such table: t2 +stmt 137 err 1 -1 189 no such table: main.t2 +stmt 189 err 1 -1 238 no such table: t2 +==== index6-2.2 + + EXPLAIN QUERY PLAN + SELECT * FROM t2 WHERE a=5; +---- +stmt 0 err 1 -1 55 no such table: t2 +==== index6-2.3stat4 + + EXPLAIN QUERY PLAN + SELECT * FROM t2 WHERE a IS NOT NULL; +---- +stmt 0 err 1 -1 69 no such table: t2 +==== index6-2.3stat4.dup1 + + EXPLAIN QUERY PLAN + SELECT * FROM t2 WHERE a IS NOT NULL AND a>0; +---- +stmt 0 err 1 -1 77 no such table: t2 +==== index6-2.4 + + EXPLAIN QUERY PLAN + SELECT * FROM t2 WHERE a IS NULL; +---- +stmt 0 err 1 -1 61 no such table: t2 +==== index6-2.101 + + DROP INDEX t2a1; + UPDATE t2 SET a=b, b=b+10000; + SELECT b FROM t2 WHERE a=15; +---- +stmt 0 err 1 -1 19 no such index: t2a1 +stmt 19 err 1 -1 51 no such table: t2 +stmt 51 err 1 -1 82 no such table: t2 +==== index6-2.102 + + CREATE INDEX t2a2 ON t2(a) WHERE a<100 OR a>200; + SELECT b FROM t2 WHERE a=15; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 51 no such table: main.t2 +stmt 51 err 1 -1 82 no such table: t2 +stmt 82 ok +==== index6-2.102eqp + + EXPLAIN QUERY PLAN + SELECT b FROM t2 WHERE a=15; +---- +stmt 0 err 1 -1 52 no such table: t2 +==== index6-2.103 + + SELECT b FROM t2 WHERE a=15 AND a<100; +---- +stmt 0 err 1 -1 41 no such table: t2 +==== index6-2.103eqp + + EXPLAIN QUERY PLAN + SELECT b FROM t2 WHERE a=15 AND a<100; +---- +stmt 0 err 1 -1 62 no such table: t2 +==== index6-2.104 + + SELECT b FROM t2 WHERE a=515 AND a>200; +---- +stmt 0 err 1 -1 42 no such table: t2 +==== index6-2.104eqp + + EXPLAIN QUERY PLAN + SELECT b FROM t2 WHERE a=515 AND a>200; +---- +stmt 0 err 1 -1 63 no such table: t2 +==== index6-3.1 + + CREATE TABLE t3(a,b); + INSERT INTO t3 SELECT value, value FROM nums WHERE value<200; + UPDATE t3 SET a=999 WHERE b%5!=0; + CREATE UNIQUE INDEX t3a ON t3(a) WHERE a<>999; +---- +stmt 0 ok +stmt 24 err 1 -1 88 no such table: t3 +stmt 88 err 1 -1 124 no such table: t3 +stmt 124 err 1 -1 173 no such table: main.t3 +==== index6-3.4 + + SELECT count(*) FROM t3 WHERE a=999; +---- +stmt 0 err 1 -1 39 no such table: t3 +==== index6-4.0 + + VACUUM; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 10 ok +==== index6-5.0 + + CREATE INDEX t3b ON t3(b) WHERE xyzzy.t3.b BETWEEN 5 AND 10; + /* ^^^^^-- ignored */ + ANALYZE; + SELECT count(*) FROM t3 WHERE t3.b BETWEEN 5 AND 10; + SELECT stat+0 FROM sqlite_stat1 WHERE idx='t3b'; +---- +stmt 0 err 1 -1 63 no such table: main.t3 +stmt 63 ok +stmt 127 err 1 -1 182 no such table: t3 +stmt 182 err 1 -1 233 no such table: sqlite_stat1 +==== index6-6.0 + + CREATE TABLE t6(a,b); + CREATE UNIQUE INDEX t6ab ON t1(a,b); + CREATE INDEX t6b ON t6(b) WHERE b=1; + INSERT INTO t6(a,b) VALUES(123,456); + SELECT * FROM t6; +---- +stmt 0 ok +stmt 24 err 1 -1 63 no such table: main.t1 +stmt 63 err 1 -1 102 no such table: main.t6 +stmt 102 err 1 -1 141 no such table: t6 +stmt 141 err 1 -1 161 no such table: t6 +==== index6-6.1 + + UPDATE OR REPLACE t6 SET b=789; + SELECT * FROM t6; +---- +stmt 0 err 1 -1 34 no such table: t6 +stmt 34 err 1 -1 54 no such table: t6 +==== index6-6.2 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== index6-7.0 + + CREATE TABLE t7a(x); + CREATE TABLE t7b(y); + INSERT INTO t7a(x) VALUES(1); + CREATE INDEX t7ax ON t7a(x) WHERE x=99; + PRAGMA automatic_index=OFF; + SELECT * FROM t7a LEFT JOIN t7b ON (x=99) ORDER BY x; +---- +stmt 0 ok +stmt 23 ok +stmt 46 err 1 -1 78 no such table: t7a +stmt 78 err 1 -1 120 no such table: main.t7a +stmt 120 ok +stmt 150 err 1 -1 206 no such table: t7a +==== index6-7.1 + + INSERT INTO t7b(y) VALUES(2); + SELECT * FROM t7a JOIN t7b ON (x=99) ORDER BY x; +---- +stmt 0 err 1 -1 32 no such table: t7b +stmt 32 err 1 -1 83 no such table: t7a +==== index6-7.2 + + INSERT INTO t7a(x) VALUES(99); + SELECT * FROM t7a LEFT JOIN t7b ON (x=99) ORDER BY x; +---- +stmt 0 err 1 -1 33 no such table: t7a +stmt 33 err 1 -1 89 no such table: t7a +==== index6-7.3 + + SELECT * FROM t7a JOIN t7b ON (x=99) ORDER BY x; +---- +stmt 0 err 1 -1 51 no such table: t7a +==== index6-7.4 + + EXPLAIN QUERY PLAN + SELECT * FROM t7a JOIN t7b ON (x=99) ORDER BY x; +---- +stmt 0 err 1 -1 72 no such table: t7a +==== index6-8.0 + + CREATE TABLE t8a(a,b); + CREATE TABLE t8b(x,y); + CREATE INDEX i8c ON t8b(y) WHERE x = 'value'; + + INSERT INTO t8a VALUES(1, 'one'); + INSERT INTO t8a VALUES(2, 'two'); + INSERT INTO t8a VALUES(3, 'three'); + + INSERT INTO t8b VALUES('value', 1); + INSERT INTO t8b VALUES('dummy', 2); + INSERT INTO t8b VALUES('value', 3); + INSERT INTO t8b VALUES('dummy', 4); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 98 no such table: main.t8b +stmt 98 err 1 -1 135 no such table: t8a +stmt 135 err 1 -1 171 no such table: t8a +stmt 171 err 1 -1 209 no such table: t8a +stmt 209 err 1 -1 248 no such table: t8b +stmt 248 err 1 -1 286 no such table: t8b +stmt 286 err 1 -1 324 no such table: t8b +stmt 324 err 1 -1 362 no such table: t8b +==== index6-8.2 + + SELECT * FROM t8a LEFT JOIN t8b ON (x = 'value' AND y = a) +---- +stmt 0 err 1 -1 62 no such table: t8a +==== index6-9.1 + + CREATE TABLE t9(a int, b int, c int); + CREATE INDEX t9ca ON t9(c,a) WHERE a in (10,12,20); + INSERT INTO t9 VALUES(1,1,9),(10,2,35),(11,15,82),(20,19,5),(NULL,7,3); + UPDATE t9 SET b=c WHERE a in (10,12,20); + SELECT a,b,c,'|' FROM t9 ORDER BY a; +---- +stmt 0 ok +stmt 40 err 1 -1 94 no such table: main.t9 +stmt 94 err 1 -1 168 no such table: t9 +stmt 168 err 1 -1 211 no such table: t9 +stmt 211 err 1 -1 250 no such table: t9 +==== index6-9.2 + + DROP TABLE t9; + CREATE TABLE t9(a int, b int, c int, PRIMARY KEY(a)) WITHOUT ROWID; + CREATE INDEX t9ca ON t9(c,a) WHERE a in (10,12,20); + INSERT INTO t9 VALUES(1,1,9),(10,2,35),(11,15,82),(20,19,5); + UPDATE t9 SET b=c WHERE a in (10,12,20); + SELECT a,b,c,'|' FROM t9 ORDER BY a; +---- +stmt 0 err 1 -1 17 no such table: t9 +stmt 17 ok +stmt 87 err 1 -1 141 no such table: main.t9 +stmt 141 err 1 -1 204 no such table: t9 +stmt 204 err 1 -1 247 no such table: t9 +stmt 247 err 1 -1 286 no such table: t9 +==== index6-10.1 + + CREATE TABLE t10(a,b,c,d,e INTEGER PRIMARY KEY); + INSERT INTO t10 VALUES + (1,2,3,4,5), + (2,3,4,5,6), + (3,4,5,6,7), + (1,2,3,8,9); + CREATE INDEX t10x ON t10(d) WHERE a=1 AND b=2 AND c=3; + SELECT e FROM t10 WHERE a=1 AND b=2 AND c=3 ORDER BY d; +---- +stmt 0 ok +stmt 51 err 1 -1 144 no such table: t10 +stmt 144 err 1 -1 201 no such table: main.t10 +stmt 201 err 1 -1 259 no such table: t10 +==== index6-10.1eqp + + EXPLAIN QUERY PLAN + SELECT e FROM t10 WHERE a=1 AND b=2 AND c=3 ORDER BY d; +---- +stmt 0 err 1 -1 79 no such table: t10 +==== index6-10.2 + + SELECT e FROM t10 WHERE c=3 AND 2=b AND a=1 ORDER BY d DESC; +---- +stmt 0 err 1 -1 63 no such table: t10 +==== index6-10.2eqp + + EXPLAIN QUERY PLAN + SELECT e FROM t10 WHERE c=3 AND 2=b AND a=1 ORDER BY d DESC; +---- +stmt 0 err 1 -1 84 no such table: t10 +==== index6-10.3 + + SELECT e FROM t10 WHERE a=1 AND b=2 ORDER BY d DESC; +---- +stmt 0 err 1 -1 55 no such table: t10 +==== index6-10.3eqp + + EXPLAIN QUERY PLAN + SELECT e FROM t10 WHERE a=1 AND b=2 ORDER BY d DESC; +---- +stmt 0 err 1 -1 76 no such table: t10 +==== index6-11.1 + + CREATE TABLE t11(a,b,c); + CREATE INDEX t11x ON t11(a) WHERE b<>99; + EXPLAIN QUERY PLAN SELECT a FROM t11 WHERE b<>99; +---- +stmt 0 ok +stmt 27 err 1 -1 70 no such table: main.t11 +stmt 70 err 1 -1 122 no such table: t11 +==== index6-11.2 + + EXPLAIN QUERY PLAN SELECT a FROM t11 WHERE b<>99 AND c<>98; +---- +stmt 0 err 1 -1 62 no such table: t11 +==== index6-12.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,1); + INSERT INTO t1 VALUES(2,2); + CREATE TABLE t2(x); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(2); + SELECT 'one', * FROM t2 WHERE x NOT IN (SELECT a FROM t1); + CREATE INDEX t1a ON t1(a) WHERE b=1; + SELECT 'two', * FROM t2 WHERE x NOT IN (SELECT a FROM t1); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 78 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 138 no such table: t1 +stmt 138 ok +stmt 160 err 1 -1 188 no such table: t2 +stmt 188 err 1 -1 216 no such table: t2 +stmt 216 err 1 -1 277 no such table: t2 +stmt 277 err 1 -1 316 no such table: main.t1 +stmt 316 err 1 -1 377 no such table: t2 +==== index6-12.2 + + SELECT x FROM t2 WHERE x IN (SELECT a FROM t1) ORDER BY +x; +---- +stmt 0 err 1 -1 62 no such table: t2 +==== index6-13.1 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0); + CREATE INDEX index_0 ON t0(c0) WHERE c0 NOT NULL; + INSERT INTO t0(c0) VALUES (NULL); + SELECT * FROM t0 WHERE c0 OR 1; +---- +stmt 0 ok +stmt 27 ok +stmt 50 err 1 -1 102 no such table: main.t0 +stmt 102 err 1 -1 138 no such table: t0 +stmt 138 err 1 -1 172 no such table: t0 +==== index6-14.1 + + CREATE TABLE IF NOT EXISTS t0 (c0, c1); + CREATE INDEX IF NOT EXISTS i0 ON t0(c0, c1) WHERE c0 NOT NULL; + INSERT INTO t0(c0, c1) VALUES(NULL, 'row'); + SELECT * FROM t0 WHERE t0.c0 IS NOT 1; +---- +stmt 0 ok +stmt 42 err 1 -1 107 no such table: main.t0 +stmt 107 err 1 -1 153 no such table: t0 +stmt 153 err 1 -1 194 no such table: t0 +==== index6-14.2 + + SELECT * FROM t0 WHERE CASE c0 WHEN 0 THEN 0 ELSE 1 END; +---- +stmt 0 err 1 -1 59 no such table: t0 +==== index6-15.1 + + DROP TABLE t0; + CREATE TABLE t0(c0); + INSERT INTO t0(c0) VALUES (NULL); + CREATE INDEX i0 ON t0(1) WHERE c0 NOT NULL; + SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) IS FALSE; +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +stmt 40 err 1 -1 76 no such table: t0 +stmt 76 err 1 -1 122 no such table: main.t0 +stmt 122 err 1 -1 174 no such table: t0 +==== index6-15.2 + + SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) BETWEEN FALSE AND TRUE; +---- +stmt 0 err 1 -1 66 no such table: t0 +==== index6-15.3 + + SELECT 1 FROM t0 WHERE TRUE BETWEEN (t0.c0 IS FALSE) AND TRUE; +---- +stmt 0 err 1 -1 65 no such table: t0 +==== index6-15.4 + + SELECT 1 FROM t0 WHERE FALSE BETWEEN FALSE AND (t0.c0 IS FALSE); +---- +stmt 0 err 1 -1 67 no such table: t0 +==== index6-15.5 + + SELECT 1 FROM t0 WHERE (c0 IS FALSE) IN (FALSE); +---- +stmt 0 err 1 -1 51 no such table: t0 +==== index6-16.1 + + DROP TABLE t0; + CREATE TABLE t0(c0 COLLATE NOCASE, c1); + CREATE INDEX i0 ON t0(0) WHERE c0 >= c1; + INSERT INTO t0 VALUES('a', 'B'); + SELECT c1 <= c0, c0 >= c1 FROM t0; +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +stmt 59 err 1 -1 102 no such table: main.t0 +stmt 102 err 1 -1 137 no such table: t0 +stmt 137 err 1 -1 174 no such table: t0 +==== index6-16.2 + + SELECT 2 FROM t0 WHERE c0 >= c1; +---- +stmt 0 err 1 -1 35 no such table: t0 +==== index6-16.3 + + SELECT 3 FROM t0 WHERE c1 <= c0; +---- +stmt 0 err 1 -1 35 no such table: t0 +==== index6-17.1 + + CREATE TABLE t0(c0); + CREATE INDEX i0 ON t0(0) WHERE c0 GLOB c0; + INSERT INTO t0 VALUES (0); + CREATE UNIQUE INDEX i1 ON t0(0); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 23 err 1 -1 68 no such table: main.t0 +stmt 68 err 1 -1 97 no such table: t0 +stmt 97 err 1 -1 132 no such table: main.t0 +stmt 132 ok +==== index6-17.2 + + CREATE UNIQUE INDEX i2 ON t0(0); + REPLACE INTO t0 VALUES(0); + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 35 no such table: main.t0 +stmt 35 err 1 -1 64 no such table: t0 +stmt 64 ok +==== index6-17.3 + + SELECT COUNT(*) FROM t0 WHERE t0.c0 GLOB t0.c0; +---- +stmt 0 err 1 -1 50 no such table: t0 +==== index6-18.1 + + CREATE TABLE t1(a INT, b INT); + INSERT INTO t1 VALUES(10,10); + CREATE UNIQUE INDEX t1b ON t1(b) WHERE a>NULL; + SELECT * FROM t1 WHERE a IS NOT NULL; +---- +stmt 0 ok +stmt 33 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 114 no such table: main.t1 +stmt 114 err 1 -1 154 no such table: t1 +==== index6-19.1 + + CREATE TABLE t1(a INT, b INT); + INSERT INTO t1(a) VALUES(2); + CREATE TABLE t2(c INT); + CREATE INDEX i0 ON t2(c) WHERE c=3; + CREATE TABLE t3(d INT); + INSERT INTO t3 VALUES(1); +---- +stmt 0 ok +stmt 33 err 1 -1 64 no such table: t1 +stmt 64 ok +stmt 90 err 1 -1 128 no such table: main.t2 +stmt 128 ok +stmt 154 err 1 -1 182 no such table: t3 +==== index6-19.2 + + SELECT * FROM t2 RIGHT JOIN t3 ON d<>0 LEFT JOIN t1 ON c=3 WHERE t1.a<>0; +---- +stmt 0 err 1 -1 76 no such table: t2 diff --git a/parser/testdata/index7.metadata.json b/parser/testdata/index7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/index7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/index7.test b/parser/testdata/index7.test new file mode 100644 index 0000000..66d677b --- /dev/null +++ b/parser/testdata/index7.test @@ -0,0 +1,313 @@ +==== index7-1.1.1 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== index7-1.2 + + CREATE INDEX bad1 ON t1(a,b) WHERE x IS NOT NULL; +---- +stmt 0 err 1 -1 54 no such table: main.t1 +==== index7-1.3 + + CREATE INDEX bad1 ON t1(a,b) WHERE EXISTS(SELECT * FROM t1); +---- +stmt 0 err 1 -1 65 no such table: main.t1 +==== index7-1.4 + + CREATE INDEX bad1 ON t1(a,b) WHERE a!=?1; +---- +stmt 0 err 1 -1 46 no such table: main.t1 +==== index7-1.5 + + CREATE INDEX bad1 ON t1(a,b) WHERE a!=random(); +---- +stmt 0 err 1 -1 52 no such table: main.t1 +==== index7-1.6 + + CREATE INDEX bad1 ON t1(a,b) WHERE a NOT LIKE 'abc%'; +---- +stmt 0 err 1 -1 58 no such table: main.t1 +==== index7-1.7 + + INSERT INTO t1(a,b,c) + VALUES('abcde',1,101),('abdef',2,102),('xyz',3,103),('abcz',4,104); + SELECT c FROM t1 WHERE a NOT LIKE 'abc%' AND a=7 ORDER BY +b; +---- +stmt 0 err 1 -1 97 no such table: t1 +stmt 97 err 1 -1 161 no such table: t1 +==== index7-1.7eqp + + EXPLAIN QUERY PLAN + SELECT b FROM t1 WHERE a NOT LIKE 'abc%' AND a=7 ORDER BY +b; +---- +stmt 0 err 1 -1 85 no such table: t1 +==== index7-1.8 + + DELETE FROM t1 WHERE c>=101; + DROP INDEX IF EXISTS bad1; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 ok +==== index7-1.10 + + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 13 err 1 -1 66 no such table: sqlite_stat1 +stmt 66 ok +==== index7-1.11 + + UPDATE t1 SET a=b; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 23 no such table: t1 +stmt 23 ok +stmt 36 err 1 -1 89 no such table: sqlite_stat1 +stmt 89 ok +==== index7-1.11b + + UPDATE t1 SET a=NULL WHERE b%3!=0; + UPDATE t1 SET b=b+100; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 66 no such table: t1 +stmt 66 ok +stmt 79 err 1 -1 132 no such table: sqlite_stat1 +stmt 132 ok +==== index7-1.12 + + UPDATE t1 SET a=CASE WHEN b%3!=0 THEN b END; + UPDATE t1 SET b=b-100; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 49 no such table: t1 +stmt 49 err 1 -1 76 no such table: t1 +stmt 76 ok +stmt 89 err 1 -1 142 no such table: sqlite_stat1 +stmt 142 ok +==== index7-1.13 + + DELETE FROM t1 WHERE b BETWEEN 8 AND 12; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 45 no such table: t1 +stmt 45 ok +stmt 58 err 1 -1 111 no such table: sqlite_stat1 +stmt 111 ok +==== index7-1.14 + + REINDEX; + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 13 ok +stmt 26 err 1 -1 79 no such table: sqlite_stat1 +stmt 79 ok +==== index7-1.15 + + CREATE INDEX t1c ON t1(c); + ANALYZE; + SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 31 no such table: main.t1 +stmt 31 ok +stmt 44 err 1 -1 97 no such table: sqlite_stat1 +stmt 97 ok +==== index7-2.1 + + CREATE TABLE t2(a,b PRIMARY KEY) without rowid; + INSERT INTO t2(a,b) SELECT value, value FROM nums WHERE value<1000; + UPDATE t2 SET a=NULL WHERE b%5==0; + CREATE INDEX t2a1 ON t2(a) WHERE a IS NOT NULL; + SELECT count(*) FROM t2 WHERE a IS NOT NULL; +---- +stmt 0 ok +stmt 52 err 1 -1 124 no such table: t2 +stmt 124 err 1 -1 163 no such table: t2 +stmt 163 err 1 -1 215 no such table: main.t2 +stmt 215 err 1 -1 264 no such table: t2 +==== index7-2.2 + + EXPLAIN QUERY PLAN + SELECT * FROM t2 WHERE a=5; +---- +stmt 0 err 1 -1 55 no such table: t2 +==== index7-2.3stat4 + + EXPLAIN QUERY PLAN + SELECT * FROM t2 WHERE a IS NOT NULL; +---- +stmt 0 err 1 -1 69 no such table: t2 +==== index7-2.3stat4.dup1 + + EXPLAIN QUERY PLAN + SELECT * FROM t2 WHERE a IS NOT NULL AND a>0; +---- +stmt 0 err 1 -1 77 no such table: t2 +==== index7-2.4 + + EXPLAIN QUERY PLAN + SELECT * FROM t2 WHERE a IS NULL; +---- +stmt 0 err 1 -1 61 no such table: t2 +==== index7-2.101 + + DROP INDEX t2a1; + UPDATE t2 SET a=b, b=b+10000; + SELECT b FROM t2 WHERE a=15; +---- +stmt 0 err 1 -1 19 no such index: t2a1 +stmt 19 err 1 -1 51 no such table: t2 +stmt 51 err 1 -1 82 no such table: t2 +==== index7-2.102 + + CREATE INDEX t2a2 ON t2(a) WHERE a<100 OR a>200; + SELECT b FROM t2 WHERE a=15; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 51 no such table: main.t2 +stmt 51 err 1 -1 82 no such table: t2 +stmt 82 ok +==== index7-2.102eqp + + EXPLAIN QUERY PLAN + SELECT b FROM t2 WHERE a=15; +---- +stmt 0 err 1 -1 52 no such table: t2 +==== index7-2.103 + + SELECT b FROM t2 WHERE a=15 AND a<100; +---- +stmt 0 err 1 -1 41 no such table: t2 +==== index7-2.103eqp + + EXPLAIN QUERY PLAN + SELECT b FROM t2 WHERE a=15 AND a<100; +---- +stmt 0 err 1 -1 62 no such table: t2 +==== index7-2.104 + + SELECT b FROM t2 WHERE a=515 AND a>200; +---- +stmt 0 err 1 -1 42 no such table: t2 +==== index7-2.104eqp + + EXPLAIN QUERY PLAN + SELECT b FROM t2 WHERE a=515 AND a>200; +---- +stmt 0 err 1 -1 63 no such table: t2 +==== index7-3.1 + + CREATE TABLE t3(a,b PRIMARY KEY) without rowid; + INSERT INTO t3 SELECT value, value FROM nums WHERE value<200; + UPDATE t3 SET a=999 WHERE b%5!=0; + CREATE UNIQUE INDEX t3a ON t3(a) WHERE a<>999; +---- +stmt 0 ok +stmt 50 err 1 -1 114 no such table: t3 +stmt 114 err 1 -1 150 no such table: t3 +stmt 150 err 1 -1 199 no such table: main.t3 +==== index7-3.4 + + SELECT count(*) FROM t3 WHERE a=999; +---- +stmt 0 err 1 -1 39 no such table: t3 +==== index7-4.0 + + VACUUM; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 10 ok +==== index7-5.0 + + CREATE INDEX t3b ON t3(b) WHERE xyzzy.t3.b BETWEEN 5 AND 10; + /* ^^^^^-- ignored */ + ANALYZE; + SELECT count(*) FROM t3 WHERE t3.b BETWEEN 5 AND 10; + SELECT stat+0 FROM sqlite_stat1 WHERE idx='t3b'; +---- +stmt 0 err 1 -1 63 no such table: main.t3 +stmt 63 ok +stmt 127 err 1 -1 182 no such table: t3 +stmt 182 err 1 -1 233 no such table: sqlite_stat1 +==== index7-6.1 + + CREATE TABLE t5(a, b); + CREATE TABLE t4(c, d); + INSERT INTO t5 VALUES(1, 'xyz'); + INSERT INTO t4 VALUES('abc', 'not xyz'); + SELECT * FROM (SELECT * FROM t5 WHERE a=1 AND b='xyz'), t4 WHERE c='abc'; +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 85 no such table: t5 +stmt 85 err 1 -1 128 no such table: t4 +stmt 128 err 1 -1 204 no such table: t5 +==== index7-6.2 + + CREATE INDEX i4 ON t4(c) WHERE d='xyz'; + SELECT * FROM (SELECT * FROM t5 WHERE a=1 AND b='xyz'), t4 WHERE c='abc'; +---- +stmt 0 err 1 -1 42 no such table: main.t4 +stmt 42 err 1 -1 118 no such table: t5 +==== index7-6.3 + + CREATE VIEW v4 AS SELECT * FROM t4; + INSERT INTO t4 VALUES('def', 'xyz'); + SELECT * FROM v4 WHERE d='xyz' AND c='def' +---- +stmt 0 ok +stmt 38 err 1 -1 77 no such table: t4 +stmt 77 err 1 -1 123 no such table: v4 +==== index7-6.5 + + CREATE INDEX t5a ON t5(a) WHERE a=#1; +---- +stmt 0 err 1 37 40 near "#1": syntax error +==== index7-7.0 + + CREATE TABLE t6(x, y); + INSERT INTO t6 VALUES(1, 1); + INSERT INTO t6 VALUES(0, 0); + SELECT * FROM t6 WHERE y IS TRUE ORDER BY x; +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t6 +stmt 56 err 1 -1 87 no such table: t6 +stmt 87 err 1 -1 134 no such table: t6 +==== index7-7.1 + + CREATE INDEX i6 ON t6(x) WHERE y IS NOT TRUE; + SELECT * FROM t6 WHERE y IS TRUE ORDER BY x; +---- +stmt 0 err 1 -1 48 no such table: main.t6 +stmt 48 err 1 -1 95 no such table: t6 +==== index7-8.1 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y); + CREATE INDEX t1y ON t1(y) WHERE y IS NOT NULL; + INSERT INTO t1(x) VALUES(1),(2); + ANALYZE; + EXPLAIN QUERY PLAN SELECT 1 FROM t1 WHERE y=5; +---- +stmt 0 ok +stmt 45 err 1 -1 94 no such table: main.t1 +stmt 94 err 1 -1 129 no such table: t1 +stmt 129 ok +stmt 140 err 1 -1 189 no such table: t1 diff --git a/parser/testdata/index8.metadata.json b/parser/testdata/index8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/index8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/index8.test b/parser/testdata/index8.test new file mode 100644 index 0000000..6566413 --- /dev/null +++ b/parser/testdata/index8.test @@ -0,0 +1,34 @@ +==== 1.0 + + CREATE TABLE t1(a,b,c,d); + WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b,c,d) + SELECT x/10, x%10, x%19, x FROM c; + CREATE INDEX t1abc ON t1(a,b,c); + SELECT * FROM t1 WHERE c=4 ORDER BY a, b LIMIT 2; +---- +stmt 0 ok +stmt 28 err 1 -1 171 no such table: t1 +stmt 171 err 1 -1 206 no such table: main.t1 +stmt 206 err 1 -1 258 no such table: t1 +==== 1.0eqp + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE c=4 ORDER BY a, b LIMIT 2; +---- +stmt 0 err 1 -1 73 no such table: t1 +==== 1.1 + + DROP INDEX t1abc; + CREATE INDEX t1abd ON t1(a,b,d); + SELECT * FROM t1 WHERE c=4 ORDER BY a, b LIMIT 2; +---- +stmt 0 err 1 -1 20 no such index: t1abc +stmt 20 err 1 -1 55 no such table: main.t1 +stmt 55 err 1 -1 107 no such table: t1 +==== 1.1eqp + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE c=4 ORDER BY a, b LIMIT 2; +---- +stmt 0 err 1 -1 73 no such table: t1 diff --git a/parser/testdata/index9.metadata.json b/parser/testdata/index9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/index9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/index9.test b/parser/testdata/index9.test new file mode 100644 index 0000000..829b507 --- /dev/null +++ b/parser/testdata/index9.test @@ -0,0 +1,22 @@ +==== 1.0 + + CREATE TABLE t1(x, y); + CREATE INDEX t1x ON t1(x) WHERE y=45; +---- +stmt 0 ok +stmt 25 err 1 -1 65 no such table: main.t1 +==== 2.0 + + CREATE INDEX t1x2 ON t1(x) WHERE y=-20111000111 +---- +stmt 0 err 1 -1 51 no such table: main.t1 +==== 3.0 + + CREATE INDEX t1x3 ON t1(x) WHERE y=9223372036854775807 +---- +stmt 0 err 1 -1 58 no such table: main.t1 +==== 4.0 + + CREATE INDEX t1x4 ON t1(x) WHERE y=-9223372036854775808 +---- +stmt 0 err 1 -1 59 no such table: main.t1 diff --git a/parser/testdata/indexA.metadata.json b/parser/testdata/indexA.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/indexA.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/indexA.test b/parser/testdata/indexA.test new file mode 100644 index 0000000..3d2dd48 --- /dev/null +++ b/parser/testdata/indexA.test @@ -0,0 +1,334 @@ +==== 1.0 + + CREATE TABLE t1(a TEXT, b, c); + CREATE INDEX i1 ON t1(b, c) WHERE a='abc'; + INSERT INTO t1 VALUES('abc', 1, 2); +---- +stmt 0 ok +stmt 33 err 1 -1 78 no such table: main.t1 +stmt 78 err 1 -1 116 no such table: t1 +==== 1.1 + + SELECT * FROM t1 WHERE a='abc' +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 1.3 + + CREATE INDEX i2 ON t1(b, c) WHERE a=5; + INSERT INTO t1 VALUES(5, 4, 3); + + SELECT a, typeof(a), b, c FROM t1 WHERE a=5; +---- +stmt 0 err 1 -1 41 no such table: main.t1 +stmt 41 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 123 no such table: t1 +==== 1.4 + + CREATE TABLE t2(x); + INSERT INTO t2 VALUES('v'); +---- +stmt 0 ok +stmt 22 err 1 -1 52 no such table: t2 +==== 1.5 + + SELECT x, a, b, c FROM t2 LEFT JOIN t1 ON (a=5 AND b=x) +---- +stmt 0 err 1 -1 59 no such table: t2 +==== 1.6 + + SELECT x, a, b, c FROM t2 RIGHT JOIN t1 ON (t1.a=5 AND t1.b=t2.x) +---- +stmt 0 err 1 -1 69 no such table: t2 +==== 2.0 + + CREATE TABLE x1(a TEXT, b, c); + INSERT INTO x1 VALUES('2', 'two', 'ii'); + INSERT INTO x1 VALUES('2.0', 'twopointoh', 'ii.0'); + + CREATE TABLE x2(a NUMERIC, b, c); + INSERT INTO x2 VALUES('2', 'two', 'ii'); + INSERT INTO x2 VALUES('2.0', 'twopointoh', 'ii.0'); + + CREATE TABLE x3(a REAL, b, c); + INSERT INTO x3 VALUES('2', 'two', 'ii'); + INSERT INTO x3 VALUES('2.0', 'twopointoh', 'ii.0'); +---- +stmt 0 ok +stmt 33 err 1 -1 76 no such table: x1 +stmt 76 err 1 -1 130 no such table: x1 +stmt 130 ok +stmt 167 err 1 -1 210 no such table: x2 +stmt 210 err 1 -1 264 no such table: x2 +stmt 264 ok +stmt 298 err 1 -1 341 no such table: x3 +stmt 341 err 1 -1 395 no such table: x3 +==== indexA-generated + + SELECT *, typeof(a) FROM x1 WHERE a=2 +---- +stmt 0 err 1 -1 43 no such table: x1 +==== indexA-generated.dup1 + + SELECT *, typeof(a) FROM x1 WHERE a=2.0 +---- +stmt 0 err 1 -1 45 no such table: x1 +==== indexA-generated.dup2 + + SELECT *, typeof(a) FROM x1 WHERE a='2' +---- +stmt 0 err 1 -1 45 no such table: x1 +==== indexA-generated.dup3 + + SELECT *, typeof(a) FROM x1 WHERE a='2.0' +---- +stmt 0 err 1 -1 47 no such table: x1 +==== indexA-generated.dup4 + + SELECT *, typeof(a) FROM x2 WHERE a=2 +---- +stmt 0 err 1 -1 43 no such table: x2 +==== indexA-generated.dup5 + + SELECT *, typeof(a) FROM x2 WHERE a=2.0 +---- +stmt 0 err 1 -1 45 no such table: x2 +==== indexA-generated.dup6 + + SELECT *, typeof(a) FROM x2 WHERE a='2' +---- +stmt 0 err 1 -1 45 no such table: x2 +==== indexA-generated.dup7 + + SELECT *, typeof(a) FROM x2 WHERE a='2.0' +---- +stmt 0 err 1 -1 47 no such table: x2 +==== indexA-generated.dup8 + + SELECT *, typeof(a) FROM x3 WHERE a=2 +---- +stmt 0 err 1 -1 43 no such table: x3 +==== indexA-generated.dup9 + + SELECT *, typeof(a) FROM x3 WHERE a=2.0 +---- +stmt 0 err 1 -1 45 no such table: x3 +==== indexA-generated.dup10 + + SELECT *, typeof(a) FROM x3 WHERE a='2' +---- +stmt 0 err 1 -1 45 no such table: x3 +==== indexA-generated.dup11 + + SELECT *, typeof(a) FROM x3 WHERE a='2.0' +---- +stmt 0 err 1 -1 47 no such table: x3 +==== 3.0 + + CREATE TABLE x1(a TEXT, d PRIMARY KEY, b, c) WITHOUT ROWID; + INSERT INTO x1 VALUES('2', 1, 'two', 'ii'); + INSERT INTO x1 VALUES('2.0', 2, 'twopointoh', 'ii.0'); + + CREATE TABLE x2(a NUMERIC, b, c, d PRIMARY KEY) WITHOUT ROWID; + INSERT INTO x2 VALUES('2', 'two', 'ii', 1); + INSERT INTO x2 VALUES('2.0', 'twopointoh', 'ii.0', 2); + + CREATE TABLE x3(d PRIMARY KEY, a REAL, b, c) WITHOUT ROWID; + INSERT INTO x3 VALUES(34, '2', 'two', 'ii'); + INSERT INTO x3 VALUES(35, '2.0', 'twopointoh', 'ii.0'); +---- +stmt 0 ok +stmt 62 err 1 -1 108 no such table: x1 +stmt 108 err 1 -1 165 no such table: x1 +stmt 165 ok +stmt 231 err 1 -1 277 no such table: x2 +stmt 277 err 1 -1 334 no such table: x2 +stmt 334 ok +stmt 397 err 1 -1 444 no such table: x3 +stmt 444 err 1 -1 502 no such table: x3 +==== indexA-generated.dup12 + + SELECT a, b, c, typeof(a) FROM x1 WHERE a=2 +---- +stmt 0 err 1 -1 49 no such table: x1 +==== indexA-generated.dup13 + + SELECT a, b, c, typeof(a) FROM x1 WHERE a=2.0 +---- +stmt 0 err 1 -1 51 no such table: x1 +==== indexA-generated.dup14 + + SELECT a, b, c, typeof(a) FROM x1 WHERE a='2' +---- +stmt 0 err 1 -1 51 no such table: x1 +==== indexA-generated.dup15 + + SELECT a, b, c, typeof(a) FROM x1 WHERE a='2.0' +---- +stmt 0 err 1 -1 53 no such table: x1 +==== indexA-generated.dup16 + + SELECT a, b, c, typeof(a) FROM x2 WHERE a=2 +---- +stmt 0 err 1 -1 49 no such table: x2 +==== indexA-generated.dup17 + + SELECT a, b, c, typeof(a) FROM x2 WHERE a=2.0 +---- +stmt 0 err 1 -1 51 no such table: x2 +==== indexA-generated.dup18 + + SELECT a, b, c, typeof(a) FROM x2 WHERE a='2' +---- +stmt 0 err 1 -1 51 no such table: x2 +==== indexA-generated.dup19 + + SELECT a, b, c, typeof(a) FROM x2 WHERE a='2.0' +---- +stmt 0 err 1 -1 53 no such table: x2 +==== indexA-generated.dup20 + + SELECT a, b, c, typeof(a) FROM x3 WHERE a=2 +---- +stmt 0 err 1 -1 49 no such table: x3 +==== indexA-generated.dup21 + + SELECT a, b, c, typeof(a) FROM x3 WHERE a=2.0 +---- +stmt 0 err 1 -1 51 no such table: x3 +==== indexA-generated.dup22 + + SELECT a, b, c, typeof(a) FROM x3 WHERE a='2' +---- +stmt 0 err 1 -1 51 no such table: x3 +==== indexA-generated.dup23 + + SELECT a, b, c, typeof(a) FROM x3 WHERE a='2.0' +---- +stmt 0 err 1 -1 53 no such table: x3 +==== 4.0 + + CREATE TABLE t2(a INTEGER, b TEXT); + INSERT INTO t2 VALUES(1, 'two'); + INSERT INTO t2 VALUES(2, 'two'); + INSERT INTO t2 VALUES(3, 'two'); + INSERT INTO t2 VALUES(1, 'three'); + INSERT INTO t2 VALUES(2, 'three'); + INSERT INTO t2 VALUES(3, 'three'); + + CREATE INDEX t2a_two ON t2(a) WHERE b='two'; +---- +stmt 0 ok +stmt 38 err 1 -1 73 no such table: t2 +stmt 73 err 1 -1 108 no such table: t2 +stmt 108 err 1 -1 143 no such table: t2 +stmt 143 err 1 -1 180 no such table: t2 +stmt 180 err 1 -1 217 no such table: t2 +stmt 217 err 1 -1 254 no such table: t2 +stmt 254 err 1 -1 302 no such table: main.t2 +==== 4.1.1 + + SELECT sum(a), b FROM t2 WHERE b='two' +---- +stmt 0 err 1 -1 42 no such table: t2 +==== 5.0 + + CREATE TABLE t1(a INTEGER PRIMQRY KEY, b, c); +---- +stmt 0 ok +==== 5.1 + + CREATE INDEX ex1 ON t1(c) WHERE b IS 'abc' COLLATE g; +---- +stmt 0 err 1 -1 56 no such table: main.t1 +==== 5.2 + + CREATE INDEX ex1 ON t1(c) WHERE b IS 'abc' COLLATE xyz; +---- +stmt 0 err 1 -1 58 no such table: main.t1 +==== 5.3 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 6.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + CREATE TABLE t2(x INTEGER PRIMARY KEY, y INTEGER, z INTEGER); + INSERT INTO t1 VALUES(1, 1, 1); + INSERT INTO t1 VALUES(2, 1, 2); + INSERT INTO t2 VALUES(1, 5, 1); + INSERT INTO t2 VALUES(2, 5, 2); + + CREATE INDEX t2z ON t2(z) WHERE y=5; +---- +stmt 0 ok +stmt 48 ok +stmt 112 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 180 no such table: t1 +stmt 180 err 1 -1 214 no such table: t2 +stmt 214 err 1 -1 248 no such table: t2 +stmt 248 err 1 -1 288 no such table: main.t2 +==== 6.1 + + ANALYZE; + UPDATE sqlite_stat1 SET stat = '50 1' WHERE idx='t2z'; + UPDATE sqlite_stat1 SET stat = '50' WHERE tbl='t2' AND idx IS NULL; + UPDATE sqlite_stat1 SET stat = '5000' WHERE tbl='t1' AND idx IS NULL; + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 11 err 1 -1 68 no such table: sqlite_stat1 +stmt 68 err 1 -1 138 no such table: sqlite_stat1 +stmt 138 err 1 -1 210 no such table: sqlite_stat1 +stmt 210 ok +==== 6.2 + + SELECT * FROM t1, t2 WHERE b=1 AND z=c AND y=5; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 6.4 + + SELECT * FROM t1 LEFT JOIN t2 ON (y=5) WHERE b=1 AND z IS c; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 6.6 + + CREATE INDEX t2yz ON t2(y, z) WHERE y=5; +---- +stmt 0 err 1 -1 43 no such table: main.t2 +==== 6.7 + + SELECT * FROM t1 LEFT JOIN t2 ON (y=5) WHERE b=1 AND z IS c; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 7.0 + + CREATE TABLE t1(i INTEGER PRIMARY KEY, b TEXT, c TEXT); + CREATE INDEX i1 ON t1(c) WHERE b='abc' AND i=5; + INSERT INTO t1 VALUES(5, 'abc', 'xyz'); + SELECT * FROM t1 INDEXED BY i1 WHERE b='abc' AND i=5 ORDER BY c; +---- +stmt 0 ok +stmt 58 err 1 -1 108 no such table: main.t1 +stmt 108 err 1 -1 150 no such table: t1 +stmt 150 err 1 -1 217 no such table: t1 +==== 8.0 + + CREATE TABLE t1(a, b, c); + CREATE INDEX ex2 ON t1(a, 4); + CREATE INDEX ex1 ON t1(a) WHERE 4=b; + INSERT INTO t1 VALUES(1, 4, 1); + INSERT INTO t1 VALUES(1, 5, 1); + INSERT INTO t1 VALUES(2, 4, 2); +---- +stmt 0 ok +stmt 28 err 1 -1 60 no such table: main.t1 +stmt 60 err 1 -1 99 no such table: main.t1 +stmt 99 err 1 -1 133 no such table: t1 +stmt 133 err 1 -1 167 no such table: t1 +stmt 167 err 1 -1 201 no such table: t1 +==== 8.1 + + SELECT * FROM t1 WHERE b=4; +---- +stmt 0 err 1 -1 30 no such table: t1 diff --git a/parser/testdata/indexedby.metadata.json b/parser/testdata/indexedby.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/indexedby.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/indexedby.test b/parser/testdata/indexedby.test new file mode 100644 index 0000000..76c3da0 --- /dev/null +++ b/parser/testdata/indexedby.test @@ -0,0 +1,257 @@ +==== indexedby-1.1 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); + + CREATE TABLE t2(c, d); + CREATE INDEX i3 ON t2(c); + CREATE INDEX i4 ON t2(d); + + CREATE TABLE t3(e PRIMARY KEY, f); + + CREATE VIEW v1 AS SELECT * FROM t1; +---- +stmt 0 ok +stmt 27 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 87 no such table: main.t1 +stmt 87 ok +stmt 115 err 1 -1 145 no such table: main.t2 +stmt 145 err 1 -1 175 no such table: main.t2 +stmt 175 ok +stmt 215 ok +==== indexedby-2.1 + SELECT * FROM t1 NOT INDEXED WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 60 no such table: t1 +==== indexedby-2.1b + SELECT * FROM main.t1 NOT INDEXED WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 65 no such table: main.t1 +==== indexedby-2.2 + SELECT * FROM t1 INDEXED BY i1 WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 62 no such table: t1 +==== indexedby-2.2b + SELECT * FROM main.t1 INDEXED BY i1 WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 67 no such table: main.t1 +==== indexedby-2.3 + SELECT * FROM t1 INDEXED BY i2 WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 62 no such table: t1 +==== indexedby-2.4 + SELECT * FROM t1 INDEXED BY i3 WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 62 no such table: t1 +==== indexedby-2.4.1 + SELECT b FROM t1 INDEXED BY i1 WHERE b = 'two' +---- +stmt 0 err 1 -1 48 no such table: t1 +==== indexedby-2.5 + SELECT * FROM t1 INDEXED BY i5 WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 62 no such table: t1 +==== indexedby-2.6 + SELECT * FROM t1 INDEXED BY WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 29 34 near "WHERE": syntax error +==== indexedby-2.7 + SELECT * FROM v1 INDEXED BY i1 WHERE a = 'one' +---- +stmt 0 err 1 -1 48 no such table: v1 +==== indexedby-3.4 + SELECT * FROM t1 INDEXED BY i2 WHERE a = 'one' +---- +stmt 0 err 1 -1 48 no such table: t1 +==== indexedby-3.5 + SELECT * FROM t1 INDEXED BY i2 ORDER BY a +---- +stmt 0 err 1 -1 43 no such table: t1 +==== indexedby-3.6 + SELECT * FROM t1 INDEXED BY i1 WHERE a = 'one' +---- +stmt 0 err 1 -1 48 no such table: t1 +==== indexedby-3.7 + SELECT * FROM t1 INDEXED BY i1 ORDER BY a +---- +stmt 0 err 1 -1 43 no such table: t1 +==== indexedby-3.10 + SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 WHERE f = 10 +---- +stmt 0 err 1 -1 64 no such table: t3 +==== indexedby-3.11 + SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_2 WHERE f = 10 +---- +stmt 0 err 1 -1 64 no such table: t3 +==== indexedby-4.3 + + SELECT * FROM t1 INDEXED BY i1, t2 INDEXED BY i3 WHERE a=c +---- +stmt 0 err 1 -1 64 no such table: t1 +==== indexedby-4.4 + + SELECT * FROM t2 INDEXED BY i3, t1 INDEXED BY i1 WHERE a=c +---- +stmt 0 err 1 -1 64 no such table: t2 +==== indexedby-5.1 + + CREATE VIEW v2 AS SELECT * FROM t1 INDEXED BY i1 WHERE a > 5; + EXPLAIN QUERY PLAN SELECT * FROM v2 +---- +stmt 0 ok +stmt 64 err 1 -1 103 no such table: v2 +==== indexedby-5.2 + + EXPLAIN QUERY PLAN SELECT * FROM v2 WHERE b = 10 +---- +stmt 0 err 1 -1 52 no such table: v2 +==== indexedby-7.6 + DELETE FROM t1 INDEXED BY i2 WHERE a = 5 +---- +stmt 0 err 1 -1 42 no such table: t1 +==== indexedby-8.6 + UPDATE t1 INDEXED BY i2 SET rowid=rowid+1 WHERE a = 5 +---- +stmt 0 err 1 -1 55 no such table: t1 +==== indexedby-9.1 + + CREATE TABLE maintable( id integer); + CREATE TABLE joinme(id_int integer, id_text text); + CREATE INDEX joinme_id_text_idx on joinme(id_text); + CREATE INDEX joinme_id_int_idx on joinme(id_int); +---- +stmt 0 ok +stmt 41 ok +stmt 96 err 1 -1 152 no such table: main.joinme +stmt 152 err 1 -1 206 no such table: main.joinme +==== indexedby-9.2 + + select * from maintable as m inner join + joinme as j indexed by joinme_id_text_idx + on ( m.id = j.id_int) +---- +stmt 0 err 1 -1 118 no such table: maintable +==== indexedby-9.3 + select * from maintable, joinme INDEXED by joinme_id_text_idx +---- +stmt 0 err 1 -1 63 no such table: maintable +==== indexedby-10.1 + + CREATE TABLE indexed(x,y); + INSERT INTO indexed VALUES(1,2); + SELECT * FROM indexed; +---- +stmt 0 ok +stmt 31 err 1 -1 68 no such table: indexed +stmt 68 err 1 -1 95 no such table: indexed +==== indexedby-10.2 + + CREATE INDEX i10 ON indexed(x); + SELECT * FROM indexed indexed by i10 where x>0; +---- +stmt 0 err 1 -1 36 no such table: main.indexed +stmt 36 err 1 -1 88 no such table: indexed +==== indexedby-10.3 + + DROP TABLE indexed; + CREATE TABLE t10(indexed INTEGER); + INSERT INTO t10 VALUES(1); + CREATE INDEX indexed ON t10(indexed); + SELECT * FROM t10 indexed by indexed WHERE indexed>0 +---- +stmt 0 err 1 -1 24 no such table: indexed +stmt 24 ok +stmt 63 err 1 -1 94 no such table: t10 +stmt 94 err 1 -1 136 no such table: main.t10 +stmt 136 err 1 -1 194 no such table: t10 +==== 11.1 + + CREATE TABLE x1(a, b TEXT); + CREATE INDEX x1i ON x1(a, b); + INSERT INTO x1 VALUES(1, 1); + INSERT INTO x1 VALUES(1, 1); + INSERT INTO x1 VALUES(1, 1); + INSERT INTO x1 VALUES(1, 1); +---- +stmt 0 ok +stmt 30 err 1 -1 62 no such table: main.x1 +stmt 62 err 1 -1 93 no such table: x1 +stmt 93 err 1 -1 124 no such table: x1 +stmt 124 err 1 -1 155 no such table: x1 +stmt 155 err 1 -1 186 no such table: x1 +==== 11.2 + + SELECT a,b,rowid FROM x1 INDEXED BY x1i WHERE a=1 AND b=1 AND rowid=3; +---- +stmt 0 err 1 -1 73 no such table: x1 +==== 11.3 + + SELECT a,b,rowid FROM x1 INDEXED BY x1i WHERE a=1 AND b=1 AND rowid='3'; +---- +stmt 0 err 1 -1 75 no such table: x1 +==== 11.4 + + SELECT a,b,rowid FROM x1 INDEXED BY x1i WHERE a=1 AND b=1 AND rowid='3.0'; +---- +stmt 0 err 1 -1 77 no such table: x1 +==== 11.6 + + CREATE TABLE x2(c INTEGER PRIMARY KEY, a, b TEXT); + CREATE INDEX x2i ON x2(a, b); + INSERT INTO x2 VALUES(1, 1, 1); + INSERT INTO x2 VALUES(2, 1, 1); + INSERT INTO x2 VALUES(3, 1, 1); + INSERT INTO x2 VALUES(4, 1, 1); +---- +stmt 0 ok +stmt 53 err 1 -1 85 no such table: main.x2 +stmt 85 err 1 -1 119 no such table: x2 +stmt 119 err 1 -1 153 no such table: x2 +stmt 153 err 1 -1 187 no such table: x2 +stmt 187 err 1 -1 221 no such table: x2 +==== 11.7 + + SELECT a,b,c FROM x2 INDEXED BY x2i WHERE a=1 AND b=1 AND c=3; +---- +stmt 0 err 1 -1 65 no such table: x2 +==== 11.8 + + SELECT a,b,c FROM x2 INDEXED BY x2i WHERE a=1 AND b=1 AND c='3'; +---- +stmt 0 err 1 -1 67 no such table: x2 +==== 11.9 + + SELECT a,b,c FROM x2 INDEXED BY x2i WHERE a=1 AND b=1 AND c='3.0'; +---- +stmt 0 err 1 -1 69 no such table: x2 +==== 12.1 + + CREATE TABLE o1(x INTEGER PRIMARY KEY, y, z); + CREATE INDEX p1 ON o1(z); + CREATE INDEX p2 ON o1(y) WHERE z=1; +---- +stmt 0 ok +stmt 48 err 1 -1 76 no such table: main.o1 +stmt 76 err 1 -1 114 no such table: main.o1 +==== 12.2 + + SELECT * FROM o1 INDEXED BY p2 ORDER BY 1; +---- +stmt 0 err 1 -1 45 no such table: o1 +==== 12.3 + + DROP INDEX p1; + DROP INDEX p2; + CREATE INDEX p2 ON o1(y) WHERE z=1; + CREATE INDEX p1 ON o1(z); +---- +stmt 0 err 1 -1 17 no such index: p1 +stmt 17 err 1 -1 34 no such index: p2 +stmt 34 err 1 -1 72 no such table: main.o1 +stmt 72 err 1 -1 100 no such table: main.o1 +==== 12.4 + + SELECT * FROM o1 INDEXED BY p2 ORDER BY 1; +---- +stmt 0 err 1 -1 45 no such table: o1 diff --git a/parser/testdata/indexexpr1.metadata.json b/parser/testdata/indexexpr1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/indexexpr1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/indexexpr1.test b/parser/testdata/indexexpr1.test new file mode 100644 index 0000000..f414b89 --- /dev/null +++ b/parser/testdata/indexexpr1.test @@ -0,0 +1,813 @@ +==== indexexpr1-100 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1(a,b,c) + /* 123456789 123456789 123456789 123456789 123456789 123456789 */ + VALUES('In_the_beginning_was_the_Word',1,1), + ('and_the_Word_was_with_God',1,2), + ('and_the_Word_was_God',1,3), + ('The_same_was_in_the_beginning_with_God',2,1), + ('All_things_were_made_by_him',3,1), + ('and_without_him_was_not_any_thing_made_that_was_made',3,2); + CREATE INDEX t1a1 ON t1(substr(a,1,12)); +---- +stmt 0 ok +stmt 26 err 1 -1 423 no such table: t1 +stmt 423 err 1 -1 466 no such table: main.t1 +==== indexexpr1-110 + + SELECT b, c, '|' FROM t1 WHERE substr(a,1,12)=='and_the_Word' ORDER BY b, c; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== indexexpr1-110eqp + + EXPLAIN QUERY PLAN + SELECT b, c, '|' FROM t1 WHERE substr(a,1,12)=='and_the_Word' ORDER BY b, c; +---- +stmt 0 err 1 -1 100 no such table: t1 +==== indexexpr1-120 + + SELECT b, c, '|' FROM t1 WHERE 'and_the_Word'==substr(a,1,12) ORDER BY b, c; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== indexexpr1-120eqp + + EXPLAIN QUERY PLAN + SELECT b, c, '|' FROM t1 WHERE 'and_the_Word'==substr(a,1,12) ORDER BY b, c; +---- +stmt 0 err 1 -1 100 no such table: t1 +==== indexexpr1-130 + + CREATE INDEX t1ba ON t1(b,substr(a,2,3),c); + SELECT c FROM t1 WHERE b=1 AND substr(a,2,3)='nd_' ORDER BY c; +---- +stmt 0 err 1 -1 46 no such table: main.t1 +stmt 46 err 1 -1 111 no such table: t1 +==== indexexpr1-130eqp + + EXPLAIN QUERY PLAN + SELECT c FROM t1 WHERE b=1 AND substr(a,2,3)='nd_' ORDER BY c; +---- +stmt 0 err 1 -1 86 no such table: t1 +==== indexexpr1-140 + + SELECT rowid, substr(a,b,3), '|' FROM t1 ORDER BY 2; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== indexexpr1-141 + + CREATE INDEX t1abx ON t1(substr(a,b,3)); + SELECT rowid FROM t1 WHERE substr(a,b,3)<='and' ORDER BY +rowid; +---- +stmt 0 err 1 -1 43 no such table: main.t1 +stmt 43 err 1 -1 110 no such table: t1 +==== indexexpr1-141eqp + + EXPLAIN QUERY PLAN + SELECT rowid FROM t1 WHERE substr(a,b,3)<='and' ORDER BY +rowid; +---- +stmt 0 err 1 -1 88 no such table: t1 +==== indexexpr1-142 + + SELECT rowid FROM t1 WHERE +substr(a,b,3)<='and' ORDER BY +rowid; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== indexexpr1-150 + + SELECT rowid FROM t1 WHERE substr(a,b,3) IN ('and','l_t','xyz') + ORDER BY +rowid; +---- +stmt 0 err 1 -1 86 no such table: t1 +==== indexexpr1-150eqp + + EXPLAIN QUERY PLAN + SELECT rowid FROM t1 WHERE substr(a,b,3) IN ('and','l_t','xyz') + ORDER BY +rowid; +---- +stmt 0 err 1 -1 107 no such table: t1 +==== indexexpr1-160 + + ALTER TABLE t1 ADD COLUMN d; + UPDATE t1 SET d=length(a); + CREATE INDEX t1a2 ON t1(SUBSTR(a, 27, 3)) WHERE d>=29; + SELECT rowid, b, c FROM t1 + WHERE substr(a,27,3)=='ord' AND d>=29; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 123 no such table: main.t1 +stmt 123 err 1 -1 199 no such table: t1 +==== indexexpr1-160eqp + + EXPLAIN QUERY PLAN + SELECT rowid, b, c FROM t1 + WHERE substr(a,27,3)=='ord' AND d>=29; +---- +stmt 0 err 1 -1 101 no such table: t1 +==== indexexpr1-170 + + CREATE INDEX t1alen ON t1(length(a)); + SELECT length(a) FROM t1 ORDER BY length(a); +---- +stmt 0 err 1 -1 40 no such table: main.t1 +stmt 40 err 1 -1 87 no such table: t1 +==== indexexpr1-170eqp + + EXPLAIN QUERY PLAN + SELECT length(a) FROM t1 ORDER BY length(a); +---- +stmt 0 err 1 -1 68 no such table: t1 +==== indexexpr1-171 + + SELECT length(a) FROM t1 ORDER BY length(a) DESC; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== indexexpr1-171eqp + + EXPLAIN QUERY PLAN + SELECT length(a) FROM t1 ORDER BY length(a) DESC; +---- +stmt 0 err 1 -1 73 no such table: t1 +==== indexexpr1-200 + + DROP TABLE t1; + CREATE TABLE t1(id ANY PRIMARY KEY, a,b,c) WITHOUT ROWID; + INSERT INTO t1(id,a,b,c) + VALUES(1,'In_the_beginning_was_the_Word',1,1), + (2,'and_the_Word_was_with_God',1,2), + (3,'and_the_Word_was_God',1,3), + (4,'The_same_was_in_the_beginning_with_God',2,1), + (5,'All_things_were_made_by_him',3,1), + (6,'and_without_him_was_not_any_thing_made_that_was_made',3,2); + CREATE INDEX t1a1 ON t1(substr(a,1,12)); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 77 err 1 -1 415 no such table: t1 +stmt 415 err 1 -1 458 no such table: main.t1 +==== indexexpr1-210 + + SELECT b, c, '|' FROM t1 WHERE substr(a,1,12)=='and_the_Word' ORDER BY b, c; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== indexexpr1-210eqp + + EXPLAIN QUERY PLAN + SELECT b, c, '|' FROM t1 WHERE substr(a,1,12)=='and_the_Word' ORDER BY b, c; +---- +stmt 0 err 1 -1 100 no such table: t1 +==== indexexpr1-220 + + SELECT b, c, '|' FROM t1 WHERE 'and_the_Word'==substr(a,1,12) ORDER BY b, c; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== indexexpr1-220eqp + + EXPLAIN QUERY PLAN + SELECT b, c, '|' FROM t1 WHERE 'and_the_Word'==substr(a,1,12) ORDER BY b, c; +---- +stmt 0 err 1 -1 100 no such table: t1 +==== indexexpr1-230 + + CREATE INDEX t1ba ON t1(b,substr(a,2,3),c); + SELECT c FROM t1 WHERE b=1 AND substr(a,2,3)='nd_' ORDER BY c; +---- +stmt 0 err 1 -1 46 no such table: main.t1 +stmt 46 err 1 -1 111 no such table: t1 +==== indexexpr1-230eqp + + EXPLAIN QUERY PLAN + SELECT c FROM t1 WHERE b=1 AND substr(a,2,3)='nd_' ORDER BY c; +---- +stmt 0 err 1 -1 86 no such table: t1 +==== indexexpr1-240 + + SELECT id, substr(a,b,3), '|' FROM t1 ORDER BY 2; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== indexexpr1-241 + + CREATE INDEX t1abx ON t1(substr(a,b,3)); + SELECT id FROM t1 WHERE substr(a,b,3)<='and' ORDER BY +id; +---- +stmt 0 err 1 -1 43 no such table: main.t1 +stmt 43 err 1 -1 104 no such table: t1 +==== indexexpr1-241eqp + + EXPLAIN QUERY PLAN + SELECT id FROM t1 WHERE substr(a,b,3)<='and' ORDER BY +id; +---- +stmt 0 err 1 -1 82 no such table: t1 +==== indexexpr1-242 + + SELECT id FROM t1 WHERE +substr(a,b,3)<='and' ORDER BY +id; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== indexexpr1-250 + + SELECT id FROM t1 WHERE substr(a,b,3) IN ('and','l_t','xyz') + ORDER BY +id; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== indexexpr1-250eqp + + EXPLAIN QUERY PLAN + SELECT id FROM t1 WHERE substr(a,b,3) IN ('and','l_t','xyz') + ORDER BY +id; +---- +stmt 0 err 1 -1 101 no such table: t1 +==== indexexpr1-260 + + ALTER TABLE t1 ADD COLUMN d; + UPDATE t1 SET d=length(a); + CREATE INDEX t1a2 ON t1(SUBSTR(a, 27, 3)) WHERE d>=29; + SELECT id, b, c FROM t1 + WHERE substr(a,27,3)=='ord' AND d>=29; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 123 no such table: main.t1 +stmt 123 err 1 -1 196 no such table: t1 +==== indexexpr1-260eqp + + EXPLAIN QUERY PLAN + SELECT id, b, c FROM t1 + WHERE substr(a,27,3)=='ord' AND d>=29; +---- +stmt 0 err 1 -1 98 no such table: t1 +==== indexexpr1-300 + + CREATE TABLE t2(a,b,c); INSERT INTO t2 VALUES(1,2,3); + CREATE INDEX t2x1 ON t2(a,b+random()); +---- +stmt 0 ok +stmt 26 err 1 -1 56 no such table: t2 +stmt 56 err 1 -1 97 no such table: main.t2 +==== indexexpr1-301 + + CREATE INDEX t2x1 ON t2(julianday('now',a)); +---- +stmt 0 err 1 -1 47 no such table: main.t2 +==== indexexpr1-310 + + CREATE INDEX t2x2 ON t2(a,b+(SELECT 15)); +---- +stmt 0 err 1 -1 44 no such table: main.t2 +==== indexexpr1-320 + + CREATE TABLE e1(x,y,UNIQUE(y,substr(x,1,5))); +---- +stmt 0 err 1 -1 47 expressions prohibited in PRIMARY KEY and UNIQUE constraints +==== indexexpr1-330 + + CREATE TABLE e1(x,y,PRIMARY KEY(y,substr(x,1,5))); +---- +stmt 0 err 1 -1 52 expressions prohibited in PRIMARY KEY and UNIQUE constraints +==== indexexpr1-331 + + CREATE TABLE e1(x,y,PRIMARY KEY(y,substr(x,1,5))) WITHOUT ROWID; +---- +stmt 0 err 1 -1 52 expressions prohibited in PRIMARY KEY and UNIQUE constraints +==== indexexpr1-340 + + CREATE TABLE e1(x,y,FOREIGN KEY(substr(y,1,5)) REFERENCES t1); +---- +stmt 0 err 1 41 42 near "(": syntax error +==== indexexpr1-400 + + CREATE TABLE t3(a,b,c); + WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<30) + INSERT INTO t3(a,b,c) + SELECT x, printf('ab%04xyz',x), random() FROM c; + CREATE UNIQUE INDEX t3abc ON t3(CAST(a AS text), b, substr(c,1,3)); + SELECT a FROM t3 WHERE CAST(a AS text)<='10' ORDER BY +a; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 26 err 1 -1 175 no such table: t3 +stmt 175 err 1 -1 245 no such table: main.t3 +stmt 245 err 1 -1 305 no such table: t3 +stmt 305 ok +==== indexexpr1-410 + + INSERT INTO t3 SELECT * FROM t3 WHERE rowid=10; +---- +stmt 0 err 1 -1 50 no such table: t3 +==== indexexpr1-500 + + CREATE TABLE t5(a); + CREATE TABLE cnt(x); + WITH RECURSIVE + c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + INSERT INTO cnt(x) SELECT x FROM c; + INSERT INTO t5(a) SELECT printf('abc%03dxyz',x) FROM cnt; + CREATE INDEX t5ax ON t5( substr(a,4,3) ); +---- +stmt 0 ok +stmt 22 ok +stmt 45 err 1 -1 162 no such table: cnt +stmt 162 err 1 -1 222 no such table: t5 +stmt 222 err 1 -1 266 no such table: main.t5 +==== indexexpr1-510 + + -- The use of the "k" alias in the WHERE clause is technically + -- illegal, but SQLite allows it for historical reasons. In this + -- test and the next, verify that "k" can be used by the t5ax index + SELECT substr(a,4,3) AS k FROM cnt, t5 WHERE k=printf('%03d',x); +---- +stmt 0 err 1 -1 270 no such table: cnt +==== indexexpr1-510eqp + + EXPLAIN QUERY PLAN + SELECT substr(a,4,3) AS k FROM cnt, t5 WHERE k=printf('%03d',x); +---- +stmt 0 err 1 -1 88 no such table: cnt +==== indexexpr1-600 + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(a,b,c,d,e,f,g,h,i); + CREATE INDEX t4all ON t4(a,b,c c0) WHERE (NULL NOT NULL); + SELECT * FROM t0 WHERE ((NULL IS FALSE) IS FALSE); +---- +stmt 0 ok +stmt 27 ok +stmt 50 err 1 -1 83 no such table: t0 +stmt 83 err 1 -1 141 no such table: main.t0 +stmt 141 err 1 -1 194 no such table: t0 +==== indexexpr1-1800 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 REAL, c1 TEXT); + CREATE INDEX i0 ON t0(+c0, c0); + INSERT INTO t0(c0) VALUES(0); + SELECT CAST(+ t0.c0 AS BLOB) LIKE 0 FROM t0; +---- +stmt 0 ok +stmt 29 ok +stmt 68 err 1 -1 104 no such table: main.t0 +stmt 104 err 1 -1 138 no such table: t0 +stmt 138 err 1 -1 187 no such table: t0 +==== indexexpr1-1810 + + SELECT CAST(+ t0.c0 AS BLOB) LIKE '0.0' FROM t0; +---- +stmt 0 err 1 -1 53 no such table: t0 +==== indexexpr1-1820 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x REAL); + CREATE INDEX t1x ON t1(x, +x); + INSERT INTO t1(x) VALUES(2); + SELECT +x FROM t1 WHERE x=2; +---- +stmt 0 ok +stmt 29 ok +stmt 58 err 1 -1 93 no such table: main.t1 +stmt 93 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 159 no such table: t1 +==== indexexpr1-1900 + + CREATE TABLE t1(x TEXT PRIMARY KEY, y TEXT, z INT); + INSERT INTO t1(x,y,z) VALUES('alpha','ALPHA',1),('bravo','charlie',1); + CREATE INDEX i1 ON t1(+y COLLATE NOCASE); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 54 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 171 no such table: main.t1 +stmt 171 err 1 -1 191 no such table: t1 +==== indexexpr1-1910 + + DELETE FROM t1 INDEXED BY i1 + WHERE x IS +y COLLATE NOCASE IN (SELECT z FROM t1) + RETURNING *; +---- +stmt 0 err 1 -1 101 no such table: t1 +==== indexexpr1-1920 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== indexexpr1-2000 + + CREATE TABLE t1(a INT, b TEXT); + INSERT INTO t1(a,b) VALUES + (10, '{"one":5,"two":6}'), + (10, '{"one":50,"two":60}'), + (10, '{"three":99}'), + (11, '{"one":100,"two":200}'); + CREATE INDEX t1_one ON t1(a, b->>'one'); + CREATE INDEX t1_two ON t1(a, b->>'two'); +---- +stmt 0 ok +stmt 34 err 1 -1 188 no such table: t1 +stmt 188 err 1 -1 231 no such table: main.t1 +stmt 231 err 1 -1 274 no such table: main.t1 +==== indexexpr1-2010 + + EXPLAIN QUERY PLAN + SELECT sum(b->>'one') FROM t1 WHERE a=10; /* Query AA */ +---- +stmt 0 err 1 -1 65 no such table: t1 +==== indexexpr1-2011 + + SELECT sum(b->>'one') FROM t1 WHERE a=10; /* Query AA */ +---- +stmt 0 err 1 -1 44 no such table: t1 +==== indexexpr1-2020 + + EXPLAIN QUERY PLAN + SELECT sum(b->>'two') FROM t1 WHERE a=10; /* Query BB */ +---- +stmt 0 err 1 -1 65 no such table: t1 +==== indexexpr1-2021 + + SELECT sum(b->>'two') FROM t1 WHERE a=10; /* Query BB */ +---- +stmt 0 err 1 -1 44 no such table: t1 +==== indexexpr1-2030 + + DROP TABLE t1; + CREATE TABLE t1(a INT, b TEXT, c INT, d INT); + INSERT INTO t1(a,b,c,d) VALUES + (1, '{"x":1}', 12, 3), + (1, '{"x":2}', 4, 5), + (1, '{"x":1}', 6, 11), + (2, '{"x":1}', 22, 3), + (2, '{"x":2}', 4, 5), + (3, '{"x":1}', 6, 7); + CREATE INDEX t1x ON t1(d, a, b->>'x', c); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 65 err 1 -1 266 no such table: t1 +stmt 266 err 1 -1 310 no such table: main.t1 +==== indexexpr1-2040 + + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1; +---- +stmt 0 err 1 -1 224 no such table: t1 +==== indexexpr1-2050 + + explain query plan + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1; +---- +stmt 0 err 1 -1 245 no such table: t1 +==== indexexpr1-2100 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); + INSERT INTO t1(a,b) VALUES(1,0); + CREATE INDEX x1 ON t1( "y" ); + CREATE INDEX x2 ON t1( +"y" ); + CREATE INDEX x3 ON t1( +'y' ); + CREATE INDEX x4 ON t1( "y*" ); +---- +stmt 0 ok +stmt 49 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 116 no such table: main.t1 +stmt 116 err 1 -1 149 no such table: main.t1 +stmt 149 err 1 -1 182 no such table: main.t1 +stmt 182 err 1 -1 215 no such table: main.t1 +==== indexexpr1-2110 + + UPDATE t1 SET b=100 WHERE (SELECT 'y') GLOB "y"; + SELECT b FROM t1; +---- +stmt 0 err 1 -1 51 no such table: t1 +stmt 51 err 1 -1 71 no such table: t1 +==== indexexpr1-2120 + + UPDATE t1 SET b=200 WHERE (SELECT 'y') GLOB +"y"; + SELECT b FROM t1; +---- +stmt 0 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 72 no such table: t1 +==== indexexpr1-2130 + + UPDATE t1 SET b=300 WHERE (SELECT 'y') GLOB +'y'; + SELECT b FROM t1; +---- +stmt 0 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 72 no such table: t1 +==== indexexpr1-2140 + + UPDATE t1 SET b=400 WHERE (SELECT 'y') GLOB "y*"; + SELECT b FROM t1; +---- +stmt 0 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 72 no such table: t1 +==== indexexpr1-2200 + + CREATE TABLE t1(id INTEGER PRIMARY KEY, tag INT); + INSERT INTO t1 VALUES (0, 7), (1, 8); + CREATE TABLE t2(type INT, t1_id INT, value INT); + INSERT INTO t2 VALUES (0, 0, 100), (0, 1, 101); + CREATE INDEX t1x ON t1(-tag); + SELECT u.tag, v.max_value + FROM (SELECT tag FROM t1 GROUP BY -tag) u + JOIN (SELECT t1.tag AS "tag", t2.type AS "type", + MAX(t2.value) AS "max_value" + FROM t1 + JOIN t2 ON t2.t1_id = t1.id + GROUP BY t2.type, t1.tag + ) v ON v.type = 0 AND v.tag = u.tag; +---- +stmt 0 ok +stmt 52 err 1 -1 92 no such table: t1 +stmt 92 ok +stmt 145 err 1 -1 195 no such table: t2 +stmt 195 err 1 -1 227 no such table: main.t1 +stmt 227 err 1 -1 547 no such table: t1 diff --git a/parser/testdata/indexexpr2.metadata.json b/parser/testdata/indexexpr2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/indexexpr2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/indexexpr2.test b/parser/testdata/indexexpr2.test new file mode 100644 index 0000000..e8d7766 --- /dev/null +++ b/parser/testdata/indexexpr2.test @@ -0,0 +1,338 @@ +==== 1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(3, 'three'); + + CREATE INDEX i1 ON t1(b || 'x'); +---- +stmt 0 ok +stmt 25 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 132 no such table: t1 +stmt 132 err 1 -1 168 no such table: main.t1 +==== 1.1 + + SELECT 'TWOX' == (b || 'x') FROM t1 WHERE (b || 'x')>'onex' +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 1.2 + + SELECT 'TWOX' == (b || 'x') COLLATE nocase FROM t1 WHERE (b || 'x')>'onex' +---- +stmt 0 err 1 -1 79 no such table: t1 +==== 2.0 + + CREATE INDEX i2 ON t1(a+1); +---- +stmt 0 err 1 -1 30 no such table: main.t1 +==== 2.1 + + SELECT a+1, quote(a+1) FROM t1 ORDER BY 1; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 3.1.0 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t1 +==== 3.2.0 + + CREATE TABLE t2(x); + + INSERT INTO t2 VALUES('.ABC'); + INSERT INTO t2 VALUES('.abcd'); + INSERT INTO t2 VALUES('.defg'); + INSERT INTO t2 VALUES('.DEF'); +---- +stmt 0 ok +stmt 22 err 1 -1 56 no such table: t2 +stmt 56 err 1 -1 90 no such table: t2 +stmt 90 err 1 -1 124 no such table: t2 +stmt 124 err 1 -1 157 no such table: t2 +==== 3.2.1 + + SELECT x FROM t2 ORDER BY substr(x, 2) COLLATE nocase; +---- +stmt 0 err 1 -1 57 no such table: t2 +==== 3.2.2 + + CREATE INDEX i2 ON t2( substr(x, 2) ); + SELECT x FROM t2 ORDER BY substr(x, 2) COLLATE nocase; +---- +stmt 0 err 1 -1 41 no such table: main.t2 +stmt 41 err 1 -1 98 no such table: t2 +==== 3.3.0 + + CREATE TABLE t3(x); +---- +stmt 0 ok +==== 3.4.0 + + CREATE TABLE t4(a, b); + INSERT INTO t4 VALUES('.ABC', 1); + INSERT INTO t4 VALUES('.abc', 2); + INSERT INTO t4 VALUES('.ABC', 3); + INSERT INTO t4 VALUES('.abc', 4); +---- +stmt 0 ok +stmt 25 err 1 -1 61 no such table: t4 +stmt 61 err 1 -1 97 no such table: t4 +stmt 97 err 1 -1 133 no such table: t4 +stmt 133 err 1 -1 169 no such table: t4 +==== 3.4.1 + + SELECT * FROM t4 + WHERE substr(a, 2) = 'abc' COLLATE NOCASE + ORDER BY substr(a, 2), b; +---- +stmt 0 err 1 -1 92 no such table: t4 +==== 3.4.2 + + CREATE INDEX i4 ON t4( substr(a, 2) COLLATE NOCASE, b ); + SELECT * FROM t4 + WHERE substr(a, 2) = 'abc' COLLATE NOCASE + ORDER BY substr(a, 2), b; +---- +stmt 0 err 1 -1 59 no such table: main.t4 +stmt 59 err 1 -1 151 no such table: t4 +==== 3.4.3 + + DROP INDEX i4; + UPDATE t4 SET a = printf('%s%d',a,b); + SELECT * FROM t4 ORDER BY Substr(a,-2) COLLATE nocase; +---- +stmt 0 err 1 -1 17 no such index: i4 +stmt 17 err 1 -1 57 no such table: t4 +stmt 57 err 1 -1 114 no such table: t4 +==== 3.4.4 + + SELECT * FROM t4 ORDER BY Substr(a,-2) COLLATE binary; +---- +stmt 0 err 1 -1 57 no such table: t4 +==== 3.4.5 + + CREATE INDEX i4 ON t4( Substr(a,-2) COLLATE nocase ); + SELECT * FROM t4 ORDER BY Substr(a,-2) COLLATE nocase; +---- +stmt 0 err 1 -1 56 no such table: main.t4 +stmt 56 err 1 -1 113 no such table: t4 +==== 3.4.5eqp + + EXPLAIN QUERY PLAN + SELECT * FROM t4 ORDER BY Substr(a,-2) COLLATE nocase; +---- +stmt 0 err 1 -1 78 no such table: t4 +==== 3.4.6 + + SELECT * FROM t4 ORDER BY Substr(a,-2) COLLATE binary; +---- +stmt 0 err 1 -1 57 no such table: t4 +==== 4.200 + + CREATE TABLE t2(a,b,c,d,e,f); + INSERT INTO t2 VALUES(2,3,4,5,6,7); + CREATE INDEX t2abc ON t2(a+b+c); + CREATE INDEX t2cd ON t2(c*d); + CREATE INDEX t2def ON t2(d,e+25*f); + SELECT sqlite_master.name + FROM sqlite_master, explain('UPDATE t2 SET b=b+1') + WHERE explain.opcode LIKE 'Open%' + AND sqlite_master.rootpage=explain.p2 + ORDER BY 1; +---- +stmt 0 ok +stmt 34 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 111 no such table: main.t2 +stmt 111 err 1 -1 145 no such table: main.t2 +stmt 145 err 1 -1 185 no such table: main.t2 +stmt 185 err 1 -1 374 no such table: explain +==== 4.210 + + SELECT sqlite_master.name + FROM sqlite_master, explain('UPDATE t2 SET c=c+1') + WHERE explain.opcode LIKE 'Open%' + AND sqlite_master.rootpage=explain.p2 + ORDER BY 1; +---- +stmt 0 err 1 -1 189 no such table: explain +==== 4.220 + + SELECT sqlite_master.name + FROM sqlite_master, explain('UPDATE t2 SET c=c+1, f=NULL') + WHERE explain.opcode LIKE 'Open%' + AND sqlite_master.rootpage=explain.p2 + ORDER BY 1; +---- +stmt 0 err 1 -1 197 no such table: explain +==== 5.0 + + CREATE TABLE t5(a INTEGER, b INTEGER); + INSERT INTO t5 VALUES(2, 4), (3, 9); +---- +stmt 0 ok +stmt 41 err 1 -1 80 no such table: t5 +==== 5.1 + + SELECT * FROM t5 WHERE abs(a)=2 or abs(b)=9; +---- +stmt 0 err 1 -1 47 no such table: t5 +==== 5.2 + + CREATE INDEX t5a ON t5( abs(a) ); + CREATE INDEX t5b ON t5( abs(b) ); +---- +stmt 0 err 1 -1 36 no such table: main.t5 +stmt 36 err 1 -1 72 no such table: main.t5 +==== 5.4 + + SELECT * FROM t5 WHERE abs(a)=2 or abs(b)=9; +---- +stmt 0 err 1 -1 47 no such table: t5 +==== 6.0 + + CREATE TABLE x1(a INTEGER PRIMARY KEY, b); + INSERT INTO x1 VALUES + (1, 123), (2, '123'), (3, '123abc'), (4, 123.0), (5, 1234); +---- +stmt 0 ok +stmt 45 err 1 -1 135 no such table: x1 +==== 6.1.1 + + SELECT a, b FROM x1 WHERE CAST(b AS INTEGER) = 123; +---- +stmt 0 err 1 -1 54 no such table: x1 +==== 6.1.2 + + CREATE INDEX x1i ON x1( CAST(b AS INTEGER) ); + SELECT a, b FROM x1 WHERE CAST(b AS INTEGER) = 123; +---- +stmt 0 err 1 -1 48 no such table: main.x1 +stmt 48 err 1 -1 102 no such table: x1 +==== 6.2.1 + + SELECT a, b FROM x1 WHERE CAST(b AS TEXT) = 123; +---- +stmt 0 err 1 -1 51 no such table: x1 +==== 6.2.2 + + CREATE INDEX x1i2 ON x1( CAST(b AS TEXT) ); + SELECT a, b FROM x1 WHERE CAST(b AS TEXT) = 123; +---- +stmt 0 err 1 -1 46 no such table: main.x1 +stmt 46 err 1 -1 97 no such table: x1 +==== 7.0 + + CREATE TABLE IF NOT EXISTS t0(c0); + INSERT INTO t0(c0) VALUES (-9223372036854775808); + BEGIN; +---- +stmt 0 ok +stmt 37 err 1 -1 89 no such table: t0 +stmt 89 ok +==== 7.1 + + CREATE INDEX i0 ON t0(ABS(c0)); +---- +stmt 0 err 1 -1 34 no such table: main.t0 +==== 7.2 + + COMMIT; + SELECT sql FROM sqlite_master WHERE tbl_name = 't0'; + CREATE INDEX i0 ON t0(c0); +---- +stmt 0 ok +stmt 10 ok +stmt 65 err 1 -1 94 no such table: main.t0 +==== 7.3 + + REINDEX; +---- +stmt 0 ok +==== 8.0 + + CREATE TABLE t0(c0); + CREATE INDEX i0 ON t0(c0) WHERE c0 NOT NULL; + INSERT INTO t0(c0) VALUES (NULL); +---- +stmt 0 ok +stmt 23 err 1 -1 70 no such table: main.t0 +stmt 70 err 1 -1 106 no such table: t0 +==== 8.1.1 + + SELECT * FROM t0 WHERE ~('' BETWEEN t0.c0 AND TRUE); +---- +stmt 0 err 1 -1 55 no such table: t0 +==== 8.1.2 + + SELECT ~('' BETWEEN t0.c0 AND TRUE) FROM t0; +---- +stmt 0 err 1 -1 47 no such table: t0 +==== 8.4 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2), (3, 4); + CREATE TABLE t2(x, y); +---- +stmt 0 ok +stmt 25 err 1 -1 64 no such table: t1 +stmt 64 ok +==== 9.0 + + CREATE TABLE t1(a INT, b INT); + CREATE INDEX t1x ON t1(a, abs(b)); + CREATE TABLE t2(c INT, d INT); + INSERT INTO t1(a,b) VALUES(4,4),(5,-5),(5,20),(6,6); + INSERT INTO t2(c,d) VALUES(100,1),(200,1),(300,2); + SELECT *, + (SELECT max(c+abs(b)) FROM t2 GROUP BY d ORDER BY d LIMIT 1) AS subq + FROM t1 WHERE a=5; +---- +stmt 0 ok +stmt 33 err 1 -1 70 no such table: main.t1 +stmt 70 ok +stmt 103 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 211 no such table: t2 +stmt 211 err 1 -1 318 no such table: t1 +==== 10.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + CREATE INDEX t1x ON t1 (b, +b COLLATE NOCASE); + INSERT INTO t1(a,b) VALUES(1,'abcde'); + SELECT * FROM t1 AS a0 + WHERE (SELECT count(a0.b=+a0.b COLLATE NOCASE IN (b)) FROM t1 GROUP BY 2.5) + ORDER BY a0.b; +---- +stmt 0 ok +stmt 50 err 1 -1 99 no such table: main.t1 +stmt 99 err 1 -1 140 no such table: t1 +stmt 140 err 1 -1 262 no such table: t1 +==== 10.1 + + CREATE TABLE t2(a TEXT); + INSERT INTO t2 VALUES('alice'),('bob'),('cindy'),('david'); + CREATE INDEX t2x ON t2 (+a COLLATE NOCASE); + SELECT count(+a COLLATE NOCASE IN (SELECT 1)) AS x + FROM t2 + GROUP BY SUBSTR(0,0); +---- +stmt 0 ok +stmt 27 err 1 -1 89 no such table: t2 +stmt 89 err 1 -1 135 no such table: main.t2 +stmt 135 err 1 -1 225 no such table: t2 +==== 11.0 + + CREATE TABLE t3 (a INT, b AS (-a)); + CREATE INDEX t3x ON t3(b, a); + INSERT INTO t3(a) VALUES(44); + SELECT * FROM t3 AS a0 + WHERE (SELECT sum(-a0.a=b) FROM t3 GROUP BY b) + GROUP BY b; +---- +stmt 0 ok +stmt 38 err 1 -1 70 no such table: main.t3 +stmt 70 err 1 -1 102 no such table: t3 +stmt 102 err 1 -1 192 no such table: t3 diff --git a/parser/testdata/indexfault.metadata.json b/parser/testdata/indexfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/indexfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/indexfault.test b/parser/testdata/indexfault.test new file mode 100644 index 0000000..1da7083 --- /dev/null +++ b/parser/testdata/indexfault.test @@ -0,0 +1,127 @@ +==== 1.0 + + BEGIN; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randomblob(202)); + INSERT INTO t1 SELECT randomblob(202) FROM t1; -- 2 + INSERT INTO t1 SELECT randomblob(202) FROM t1; -- 4 + INSERT INTO t1 SELECT randomblob(202) FROM t1; -- 8 + INSERT INTO t1 SELECT randomblob(202) FROM t1; -- 16 + INSERT INTO t1 SELECT randomblob(202) FROM t1; -- 32 + INSERT INTO t1 SELECT randomblob(202) FROM t1; -- 64 + INSERT INTO t1 SELECT randomblob(202) FROM t1; -- 128 + INSERT INTO t1 SELECT randomblob(202) FROM t1; -- 256 + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 33 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 256 no such table: t1 +stmt 256 err 1 -1 320 no such table: t1 +stmt 320 err 1 -1 384 no such table: t1 +stmt 384 err 1 -1 448 no such table: t1 +stmt 448 err 1 -1 512 no such table: t1 +stmt 512 err 1 -1 576 no such table: t1 +stmt 576 ok +==== 2.0 + + BEGIN; + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(t,u,v,w,x,y,z); + INSERT INTO t1 VALUES( + randomblob(30), randomblob(30), randomblob(30), randomblob(30), + randomblob(30), randomblob(30), randomblob(30) + ); + INSERT INTO t1 SELECT + randomblob(30), randomblob(30), randomblob(30), randomblob(30), + randomblob(30), randomblob(30), randomblob(30) FROM t1; -- 2 + INSERT INTO t1 SELECT + randomblob(30), randomblob(30), randomblob(30), randomblob(30), + randomblob(30), randomblob(30), randomblob(30) FROM t1; -- 4 + INSERT INTO t1 SELECT + randomblob(30), randomblob(30), randomblob(30), randomblob(30), + randomblob(30), randomblob(30), randomblob(30) FROM t1; -- 8 + INSERT INTO t1 SELECT + randomblob(30), randomblob(30), randomblob(30), randomblob(30), + randomblob(30), randomblob(30), randomblob(30) FROM t1; -- 16 + INSERT INTO t1 SELECT + randomblob(30), randomblob(30), randomblob(30), randomblob(30), + randomblob(30), randomblob(30), randomblob(30) FROM t1; -- 32 + INSERT INTO t1 SELECT + randomblob(30), randomblob(30), randomblob(30), randomblob(30), + randomblob(30), randomblob(30), randomblob(30) FROM t1; -- 64 + INSERT INTO t1 SELECT + randomblob(30), randomblob(30), randomblob(30), randomblob(30), + randomblob(30), randomblob(30), randomblob(30) FROM t1; -- 128 + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 38 ok +stmt 74 err 1 -1 231 no such table: t1 +stmt 231 err 1 -1 390 no such table: t1 +stmt 390 err 1 -1 562 no such table: t1 +stmt 562 err 1 -1 734 no such table: t1 +stmt 734 err 1 -1 906 no such table: t1 +stmt 906 err 1 -1 1079 no such table: t1 +stmt 1079 err 1 -1 1252 no such table: t1 +stmt 1252 err 1 -1 1425 no such table: t1 +stmt 1425 ok +==== 3.0 + + BEGIN; + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randomblob(11000)); + INSERT INTO t1 SELECT randomblob(11001) FROM t1; -- 2 + INSERT INTO t1 SELECT randomblob(11002) FROM t1; -- 4 + INSERT INTO t1 SELECT randomblob(11003) FROM t1; -- 8 + INSERT INTO t1 SELECT randomblob(11004) FROM t1; -- 16 + INSERT INTO t1 SELECT randomblob(11005) FROM t1; -- 32 + INSERT INTO t1 SELECT randomblob(11006) FROM t1; -- 64 + INSERT INTO t1 SELECT randomblob(11007) FROM t1; -- 128 + INSERT INTO t1 SELECT randomblob(11008) FROM t1; -- 256 + INSERT INTO t1 SELECT randomblob(11009) FROM t1; -- 512 + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 38 ok +stmt 62 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 227 no such table: t1 +stmt 227 err 1 -1 293 no such table: t1 +stmt 293 err 1 -1 359 no such table: t1 +stmt 359 err 1 -1 425 no such table: t1 +stmt 425 err 1 -1 491 no such table: t1 +stmt 491 err 1 -1 557 no such table: t1 +stmt 557 err 1 -1 623 no such table: t1 +stmt 623 err 1 -1 689 no such table: t1 +stmt 689 ok +==== 4.0 + + BEGIN; + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randomblob(11000)); + INSERT INTO t1 SELECT randomblob(11001) FROM t1; -- 2 + INSERT INTO t1 SELECT randomblob(11002) FROM t1; -- 4 + INSERT INTO t1 SELECT randomblob(11003) FROM t1; -- 8 + INSERT INTO t1 SELECT randomblob(11004) FROM t1; -- 16 + INSERT INTO t1 SELECT randomblob(11005) FROM t1; -- 32 + INSERT INTO t1 SELECT randomblob(11005) FROM t1; -- 64 + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 38 ok +stmt 62 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 227 no such table: t1 +stmt 227 err 1 -1 293 no such table: t1 +stmt 293 err 1 -1 359 no such table: t1 +stmt 359 err 1 -1 425 no such table: t1 +stmt 425 err 1 -1 491 no such table: t1 +stmt 491 ok diff --git a/parser/testdata/insert.metadata.json b/parser/testdata/insert.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/insert.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/insert.test b/parser/testdata/insert.test new file mode 100644 index 0000000..5efb3ec --- /dev/null +++ b/parser/testdata/insert.test @@ -0,0 +1,448 @@ +==== insert-3.1 + + DELETE FROM test2; + CREATE INDEX index9 ON test2(f1,f2); + CREATE INDEX indext ON test2(f4,f5); + SELECT * from test2; +---- +stmt 0 err 1 -1 23 no such table: test2 +stmt 23 err 1 -1 64 no such table: main.test2 +stmt 64 err 1 -1 105 no such table: main.test2 +stmt 105 err 1 -1 130 no such table: test2 +==== insert-3.4 +SELECT * FROM test2 WHERE f1=22 AND f2=-4.44 +---- +stmt 0 err 1 -1 45 no such table: test2 +==== insert-4.1 + + CREATE TABLE t3(a,b,c); + INSERT INTO t3 VALUES(1+2+3,4,5); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 28 err 1 -1 66 no such table: t3 +stmt 66 err 1 -1 88 no such table: t3 +==== insert-4.3 + + INSERT INTO t3 VALUES((SELECT max(a) FROM t3)+1,t3.a,6); + SELECT * FROM t3 ORDER BY a; +---- +stmt 0 err 1 -1 63 no such table: t3 +stmt 63 err 1 -1 98 no such table: t3 +==== insert-4.5 + + SELECT b,c FROM t3 WHERE a IS NULL; +---- +stmt 0 err 1 -1 40 no such table: t3 +==== insert-4.6 + + INSERT INTO t3 VALUES(notafunc(2,3),2,3); +---- +stmt 0 err 1 -1 46 no such table: t3 +==== insert-4.7 + + INSERT INTO t3 VALUES(min(1,2,3),max(1,2,3),99); + SELECT * FROM t3 WHERE c=99; +---- +stmt 0 err 1 -1 53 no such table: t3 +stmt 53 err 1 -1 86 no such table: t3 +==== insert-5.1 + + CREATE TEMP TABLE t4(x); + INSERT INTO t4 VALUES(1); + SELECT * FROM t4; +---- +stmt 0 ok +stmt 31 err 1 -1 63 no such table: t4 +stmt 63 err 1 -1 87 no such table: t4 +==== insert-5.2 + + INSERT INTO t4 SELECT x+1 FROM t4; + SELECT * FROM t4; +---- +stmt 0 err 1 -1 41 no such table: t4 +stmt 41 err 1 -1 65 no such table: t4 +==== insert-6.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(2,3); + SELECT b FROM t1 WHERE b=2; +---- +stmt 0 ok +stmt 56 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 158 no such table: t1 +==== insert-6.2 + + REPLACE INTO t1 VALUES(1,4); + SELECT b FROM t1 WHERE b=2; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 69 no such table: t1 +==== insert-6.3 + + UPDATE OR REPLACE t1 SET a=2 WHERE b=4; + SELECT * FROM t1 WHERE b=4; +---- +stmt 0 err 1 -1 46 no such table: t1 +stmt 46 err 1 -1 80 no such table: t1 +==== insert-6.4 + + SELECT * FROM t1 WHERE b=3; +---- +stmt 0 err 1 -1 34 no such table: t1 +==== insert-6.6 + + DROP TABLE t1; +---- +stmt 0 err 1 -1 21 no such table: t1 +==== insert-7.1 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + CREATE INDEX i1 ON t1(a); +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 114 no such table: main.t1 +==== insert-7.2 + + INSERT INTO t1 SELECT max(a) FROM t1; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== insert-7.3 + + SELECT a FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== insert-8.1 + + INSERT INTO t3 SELECT * FROM (SELECT * FROM t3 UNION ALL SELECT 1,2,3) +---- +stmt 0 err 1 -1 78 no such table: t3 +==== insert-9.1 + + CREATE TABLE t5(x); + INSERT INTO t5 VALUES(1); + INSERT INTO t5 VALUES(2); + INSERT INTO t5 VALUES(3); + INSERT INTO t5(rowid, x) SELECT nullif(x*2+10,14), x+100 FROM t5; + SELECT rowid, x FROM t5; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t5 +stmt 54 err 1 -1 84 no such table: t5 +stmt 84 err 1 -1 114 no such table: t5 +stmt 114 err 1 -1 184 no such table: t5 +stmt 184 err 1 -1 213 no such table: t5 +==== insert-9.2 + + CREATE TABLE t6(x INTEGER PRIMARY KEY, y); + INSERT INTO t6 VALUES(1,1); + INSERT INTO t6 VALUES(2,2); + INSERT INTO t6 VALUES(3,3); + INSERT INTO t6 SELECT nullif(y*2+10,14), y+100 FROM t6; + SELECT x, y FROM t6; +---- +stmt 0 ok +stmt 47 err 1 -1 79 no such table: t6 +stmt 79 err 1 -1 111 no such table: t6 +stmt 111 err 1 -1 143 no such table: t6 +stmt 143 err 1 -1 203 no such table: t6 +stmt 203 err 1 -1 228 no such table: t6 +==== insert-10.1 + + CREATE TABLE t10(a,b,c); + INSERT INTO t10 VALUES(1,2,3), (4,5,6), (7,8,9); + SELECT * FROM t10; +---- +stmt 0 ok +stmt 31 err 1 -1 86 no such table: t10 +stmt 86 err 1 -1 111 no such table: t10 +==== insert-10.2 + + INSERT INTO t10 VALUES(11,12,13), (14,15), (16,17,28); +---- +stmt 0 err 1 -1 49 all VALUES must have the same number of terms +==== insert-11.1 + + CREATE TABLE t11a AS SELECT '123456789' AS x; + CREATE TABLE t11b (a INTEGER PRIMARY KEY, b, c); + INSERT INTO t11b SELECT x, x, x FROM t11a; + SELECT quote(a), quote(b), quote(c) FROM t11b; +---- +stmt 0 ok +stmt 48 ok +stmt 99 err 1 -1 144 no such table: t11b +stmt 144 err 1 -1 193 no such table: t11b +==== insert-12.1 + + CREATE TABLE t12a(a,b,c,d,e,f,g); + INSERT INTO t12a VALUES(101,102,103,104,105,106,107); + CREATE TABLE t12b(x); + INSERT INTO t12b(x,rowid,x,x,x,x,x) SELECT * FROM t12a; + SELECT rowid, x FROM t12b; +---- +stmt 0 ok +stmt 36 err 1 -1 92 no such table: t12a +stmt 92 ok +stmt 116 err 1 -1 174 no such table: t12b +stmt 174 err 1 -1 203 no such table: t12b +==== insert-12.2 + + CREATE TABLE tab1( value INTEGER); + INSERT INTO tab1 (value, _rowid_) values( 11, 1); + INSERT INTO tab1 (value, _rowid_) SELECT 22,999; + SELECT * FROM tab1; +---- +stmt 0 ok +stmt 37 err 1 -1 89 no such table: tab1 +stmt 89 err 1 -1 140 no such table: tab1 +stmt 140 err 1 -1 162 no such table: tab1 +==== insert-12.3 + + CREATE TABLE t12c(a, b DEFAULT 'xyzzy', c); + INSERT INTO t12c(a, rowid, c) SELECT 'one', 999, 'two'; + SELECT * FROM t12c; +---- +stmt 0 ok +stmt 46 err 1 -1 104 no such table: t12c +stmt 104 err 1 -1 126 no such table: t12c +==== insert-13.1 + + DROP TABLE IF EXISTS t13; + CREATE TABLE t13(a INTEGER PRIMARY KEY,b UNIQUE); + CREATE INDEX t13x1 ON t13(-b=b); + INSERT INTO t13 VALUES(1,5),(6,2); + REPLACE INTO t13 SELECT b,0 FROM t13; + SELECT * FROM t13 ORDER BY +b; +---- +stmt 0 ok +stmt 28 ok +stmt 80 err 1 -1 115 no such table: main.t13 +stmt 115 err 1 -1 152 no such table: t13 +stmt 152 err 1 -1 192 no such table: t13 +stmt 192 err 1 -1 225 no such table: t13 +==== insert-14.1 + + DROP TABLE IF EXISTS t14; + CREATE TABLE t14(x INTEGER PRIMARY KEY); + INSERT INTO t14 VALUES(CASE WHEN 1 THEN null END); + SELECT x FROM t14; +---- +stmt 0 ok +stmt 28 ok +stmt 71 err 1 -1 124 no such table: t14 +stmt 124 err 1 -1 145 no such table: t14 +==== insert-15.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + CREATE INDEX i1 ON t1(b); + CREATE TABLE t2(a, b); + INSERT INTO t2 VALUES(4, randomblob(31000)); + INSERT INTO t2 VALUES(4, randomblob(32000)); + INSERT INTO t2 VALUES(4, randomblob(33000)); + REPLACE INTO t1 SELECT a, b FROM t2; + SELECT a, length(b) FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 104 err 1 -1 132 no such table: main.t1 +stmt 132 ok +stmt 157 err 1 -1 204 no such table: t2 +stmt 204 err 1 -1 251 no such table: t2 +stmt 251 err 1 -1 298 no such table: t2 +stmt 298 err 1 -1 337 no such table: t1 +stmt 337 err 1 -1 368 no such table: t1 +==== insert-16.1 + + PRAGMA recursive_triggers = true; + CREATE TABLE t0(c0,c1); + CREATE UNIQUE INDEX i0 ON t0(c0); + INSERT INTO t0(c0,c1) VALUES(123,1); + CREATE TRIGGER tr0 AFTER DELETE ON t0 + BEGIN + INSERT INTO t0 VALUES(123,2); + END; + REPLACE INTO t0(c0,c1) VALUES(123,3); +---- +stmt 0 ok +stmt 36 ok +stmt 62 err 1 -1 98 no such table: main.t0 +stmt 98 err 1 -1 137 no such table: t0 +stmt 137 err 1 -1 185 no such table: main.t0 +stmt 226 err 1 -1 266 no such table: t0 +==== insert-16.2 + + SELECT * FROM t0; +---- +stmt 0 err 1 -1 20 no such table: t0 +==== insert-16.4 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + CREATE INDEX t1b ON t1(b); + INSERT INTO t1 VALUES(1, 'one'); + CREATE TRIGGER tr3 AFTER DELETE ON t1 BEGIN + INSERT INTO t1 VALUES(1, 'three'); + END; + REPLACE INTO t1 VALUES(1, 'two'); +---- +stmt 0 ok +stmt 45 err 1 -1 74 no such table: main.t1 +stmt 74 err 1 -1 109 no such table: t1 +stmt 109 err 1 -1 155 no such table: main.t1 +stmt 201 err 1 -1 237 no such table: t1 +==== insert-16.6 + + PRAGMA foreign_keys = 1; + CREATE TABLE p1(a, b UNIQUE); + CREATE TABLE c1(c, d REFERENCES p1(b) ON DELETE CASCADE); + CREATE TRIGGER tr6 AFTER DELETE ON c1 BEGIN + INSERT INTO p1 VALUES(4, 1); + END; + INSERT INTO p1 VALUES(1, 1); + INSERT INTO c1 VALUES(2, 1); + REPLACE INTO p1 VALUES(3, 1);2 +---- +stmt 0 ok +stmt 27 ok +stmt 59 ok +stmt 119 err 1 -1 165 no such table: main.c1 +stmt 205 err 1 -1 236 no such table: p1 +stmt 236 err 1 -1 267 no such table: c1 +stmt 267 err 1 -1 299 no such table: p1 +stmt 299 err 1 299 300 near "2": syntax error +==== insert-17.1 + + PRAGMA temp.recursive_triggers = true; + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(aa, bb); + CREATE UNIQUE INDEX t0bb ON t0(bb); + CREATE TRIGGER "r17.1" BEFORE DELETE ON t0 + BEGIN INSERT INTO t0(aa,bb) VALUES(99,1); + END; + INSERT INTO t0(aa,bb) VALUES(10,20); + REPLACE INTO t0(aa,bb) VALUES(30,20); +---- +stmt 0 ok +stmt 41 ok +stmt 68 ok +stmt 95 err 1 -1 133 no such table: main.t0 +stmt 133 err 1 -1 188 no such table: main.t0 +stmt 231 err 1 -1 270 no such table: t0 +stmt 270 err 1 -1 310 no such table: t0 +==== insert-17.3 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a, b UNIQUE, c UNIQUE); + INSERT INTO t1(a,b,c) VALUES(1,1,1),(2,2,2),(3,3,3),(4,4,4); + CREATE TRIGGER "r17.3" AFTER DELETE ON t1 WHEN OLD.c<>3 BEGIN + INSERT INTO t1(rowid,a,b,c) VALUES(100,100,100,3); + END; + REPLACE INTO t1(rowid,a,b,c) VALUES(200,1,2,3); +---- +stmt 0 ok +stmt 27 ok +stmt 69 err 1 -1 132 no such table: t1 +stmt 132 err 1 -1 196 no such table: main.t1 +stmt 258 err 1 -1 308 no such table: t1 +==== insert-17.5 + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b); + CREATE UNIQUE INDEX t2b ON t2(b); + INSERT INTO t2(a,b) VALUES(1,1),(2,2),(3,3),(4,4); + CREATE TABLE fire(x); + CREATE TRIGGER t2r1 AFTER DELETE ON t2 BEGIN + INSERT INTO fire VALUES(old.a); + END; + UPDATE OR REPLACE t2 SET a=4, b=3 WHERE a=1; + SELECT *, 'x' FROM t2 ORDER BY a; +---- +stmt 0 ok +stmt 45 err 1 -1 81 no such table: main.t2 +stmt 81 err 1 -1 134 no such table: t2 +stmt 134 ok +stmt 158 err 1 -1 205 no such table: main.t2 +stmt 248 err 1 -1 295 no such table: t2 +stmt 295 err 1 -1 331 no such table: t2 +==== insert-17.6 + + SELECT x FROM fire ORDER BY x; +---- +stmt 0 err 1 -1 33 no such table: fire +==== insert-17.7 + + DELETE FROM t2; + DELETE FROM fire; + INSERT INTO t2(a,b) VALUES(1,1),(2,2),(3,3),(4,4); + UPDATE OR REPLACE t2 SET a=1, b=3 WHERE a=1; + SELECT *, 'x' FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 18 no such table: t2 +stmt 18 err 1 -1 38 no such table: fire +stmt 38 err 1 -1 91 no such table: t2 +stmt 91 err 1 -1 138 no such table: t2 +stmt 138 err 1 -1 174 no such table: t2 +==== insert-17.8 + + SELECT x FROM fire ORDER BY x; +---- +stmt 0 err 1 -1 33 no such table: fire +==== insert-17.10 + + CREATE TABLE t3(a INTEGER PRIMARY KEY, b INT, c INT, d INT); + CREATE UNIQUE INDEX t3bpi ON t3(b) WHERE c<=d; + CREATE UNIQUE INDEX t3d ON t3(d); + INSERT INTO t3(a,b,c,d) VALUES(1,1,1,1),(2,1,3,2),(3,4,5,6); + CREATE TRIGGER t3r1 AFTER DELETE ON t3 BEGIN + SELECT 'hi'; + END; + REPLACE INTO t3(a,b,c,d) VALUES(4,4,8,9); +---- +stmt 0 ok +stmt 63 err 1 -1 112 no such table: main.t3 +stmt 112 err 1 -1 148 no such table: main.t3 +stmt 148 err 1 -1 211 no such table: t3 +stmt 211 err 1 -1 258 no such table: main.t3 +stmt 282 err 1 -1 326 no such table: t3 +==== insert-17.11 + + SELECT *, 'x' FROM t3 ORDER BY a; +---- +stmt 0 err 1 -1 36 no such table: t3 +==== insert-17.12 + + REPLACE INTO t3(a,b,c,d) VALUES(5,1,11,2); + SELECT *, 'x' FROM t3 ORDER BY a; +---- +stmt 0 err 1 -1 45 no such table: t3 +stmt 45 err 1 -1 81 no such table: t3 +==== insert-17.13 + + DELETE FROM t3; + INSERT INTO t3(a,b,c,d) VALUES(1,1,1,1),(2,1,3,2),(3,4,5,6); + DROP TRIGGER t3r1; + CREATE TRIGGER t3r1 AFTER DELETE ON t3 BEGIN + INSERT INTO t3(b,c,d) VALUES(old.b,old.c,old.d); + END; +---- +stmt 0 err 1 -1 18 no such table: t3 +stmt 18 err 1 -1 81 no such table: t3 +stmt 81 err 1 -1 102 no such trigger: t3r1 +stmt 102 err 1 -1 149 no such table: main.t3 +==== insert-17.14 + + REPLACE INTO t3(a,b,c,d) VALUES(4,4,8,9); +---- +stmt 0 err 1 -1 44 no such table: t3 +==== insert-17.15 + + REPLACE INTO t3(a,b,c,d) VALUES(5,1,11,2); +---- +stmt 0 err 1 -1 45 no such table: t3 diff --git a/parser/testdata/insert2.metadata.json b/parser/testdata/insert2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/insert2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/insert2.test b/parser/testdata/insert2.test new file mode 100644 index 0000000..25ac400 --- /dev/null +++ b/parser/testdata/insert2.test @@ -0,0 +1,132 @@ +==== insert2-1.1.3 +SELECT * FROM t1 ORDER BY log +---- +stmt 0 err 1 -1 30 no such table: t1 +==== insert2-1.2.2 + + SELECT * FROM t1 ORDER BY log; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== insert2-1.3.2 + + SELECT * FROM t1 ORDER BY log; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== insert2-2.0 + + CREATE TABLE t3(a,b,c); + CREATE TABLE t4(x,y); + INSERT INTO t4 VALUES(1,2); + SELECT * FROM t4; +---- +stmt 0 ok +stmt 28 ok +stmt 54 err 1 -1 86 no such table: t4 +stmt 86 err 1 -1 108 no such table: t4 +==== insert2-2.1 + + INSERT INTO t3(a,c) SELECT * FROM t4; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 42 no such table: t3 +stmt 42 err 1 -1 64 no such table: t3 +==== insert2-2.2 + + DELETE FROM t3; + INSERT INTO t3(c,b) SELECT * FROM t4; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t3 +stmt 20 err 1 -1 62 no such table: t3 +stmt 62 err 1 -1 84 no such table: t3 +==== insert2-2.3 + + DELETE FROM t3; + INSERT INTO t3(c,a,b) SELECT x, 'hi', y FROM t4; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t3 +stmt 20 err 1 -1 73 no such table: t3 +stmt 73 err 1 -1 95 no such table: t3 +==== insert2-3.1 + + SELECT * from t4; +---- +stmt 0 err 1 -1 22 no such table: t4 +==== insert2-3.2.1 + + SELECT count(*) FROM t4; +---- +stmt 0 err 1 -1 29 no such table: t4 +==== insert2-3.4 + + BEGIN; + UPDATE t4 SET y='lots of data for the row where x=' || x + || ' and y=' || y || ' - even more data to fill space'; + COMMIT; + SELECT count(*) FROM t4; +---- +stmt 0 ok +stmt 11 err 1 -1 149 no such table: t4 +stmt 149 ok +stmt 161 err 1 -1 190 no such table: t4 +==== insert2-3.6 + + SELECT count(*) FROM t4; +---- +stmt 0 err 1 -1 29 no such table: t4 +==== insert2-3.7 + + BEGIN; + DELETE FROM t4 WHERE x!=123; + SELECT count(*) FROM t4; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 44 no such table: t4 +stmt 44 err 1 -1 73 no such table: t4 +stmt 73 ok +==== insert2-5.1 + + CREATE TABLE t2(a, b); + INSERT INTO t2 VALUES(1, 2); + CREATE INDEX t2i1 ON t2(a); + INSERT INTO t2 SELECT a, 3 FROM t2 WHERE a = 1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t2 +stmt 60 err 1 -1 92 no such table: main.t2 +stmt 92 err 1 -1 144 no such table: t2 +stmt 144 err 1 -1 166 no such table: t2 +==== insert2-5.2 + + INSERT INTO t2 SELECT (SELECT a FROM t2), 4; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 51 no such table: t2 +stmt 51 err 1 -1 75 no such table: t2 +==== 6.0 + + CREATE TABLE t5(a, b, c DEFAULT 'c', d); +---- +stmt 0 ok +==== 6.1 + + INSERT INTO t5(a) SELECT 456 UNION ALL SELECT 123 ORDER BY 1; + SELECT * FROM t5 ORDER BY rowid; +---- +stmt 0 err 1 -1 64 no such table: t5 +stmt 64 err 1 -1 99 no such table: t5 +==== 6.2 + + CREATE VIRTUAL TABLE t0 USING fts4(a); +---- +stmt 0 ok +==== 6.3 + + INSERT INTO t0 SELECT 0 UNION SELECT 0 AS 'x' ORDER BY x; + SELECT * FROM t0; +---- +stmt 0 err 1 -1 62 no such table: t0 +stmt 62 err 1 -1 84 no such table: t0 diff --git a/parser/testdata/insert3.metadata.json b/parser/testdata/insert3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/insert3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/insert3.test b/parser/testdata/insert3.test new file mode 100644 index 0000000..562b8e9 --- /dev/null +++ b/parser/testdata/insert3.test @@ -0,0 +1,172 @@ +==== insert3-1.0 + + CREATE TABLE t1(a,b); + CREATE TABLE log(x UNIQUE, y); + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN + UPDATE log SET y=y+1 WHERE x=new.a; + INSERT OR IGNORE INTO log VALUES(new.a, 1); + END; + INSERT INTO t1 VALUES('hello','world'); + INSERT INTO t1 VALUES(5,10); + SELECT * FROM log ORDER BY x; +---- +stmt 0 ok +stmt 26 ok +stmt 61 err 1 -1 108 no such table: main.t1 +stmt 209 err 1 -1 253 no such table: t1 +stmt 253 err 1 -1 286 no such table: t1 +stmt 286 err 1 -1 320 no such table: log +==== insert3-1.1 + + INSERT INTO t1 SELECT a, b+10 FROM t1; + SELECT * FROM log ORDER BY x; +---- +stmt 0 err 1 -1 43 no such table: t1 +stmt 43 err 1 -1 77 no such table: log +==== insert3-1.2 + + CREATE TABLE log2(x PRIMARY KEY,y); + CREATE TRIGGER r2 BEFORE INSERT ON t1 BEGIN + UPDATE log2 SET y=y+1 WHERE x=new.b; + INSERT OR IGNORE INTO log2 VALUES(new.b,1); + END; + INSERT INTO t1 VALUES(453,'hi'); + SELECT * FROM log ORDER BY x; +---- +stmt 0 ok +stmt 40 err 1 -1 88 no such table: main.t1 +stmt 190 err 1 -1 227 no such table: t1 +stmt 227 err 1 -1 261 no such table: log +==== insert3-1.3 + + SELECT * FROM log2 ORDER BY x; +---- +stmt 0 err 1 -1 35 no such table: log2 +==== insert3-1.4.1 + + INSERT INTO t1 SELECT * FROM t1; + SELECT 'a:', x, y FROM log UNION ALL + SELECT 'b:', x, y FROM log2 ORDER BY x; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 133 no such table: log2 +==== insert3-1.4.2 + + SELECT 'a:', x, y FROM log UNION ALL + SELECT 'b:', x, y FROM log2 ORDER BY x, y; +---- +stmt 0 err 1 -1 97 no such table: log2 +==== insert3-1.5 + + INSERT INTO t1(a) VALUES('xyz'); + SELECT * FROM log ORDER BY x; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 75 no such table: log +==== insert3-2.1 + + CREATE TABLE t2( + a INTEGER PRIMARY KEY, + b DEFAULT 'b', + c DEFAULT 'c' + ); + CREATE TABLE t2dup(a,b,c); + CREATE TRIGGER t2r1 BEFORE INSERT ON t2 BEGIN + INSERT INTO t2dup(a,b,c) VALUES(new.a,new.b,new.c); + END; + INSERT INTO t2(a) VALUES(123); + INSERT INTO t2(b) VALUES(234); + INSERT INTO t2(c) VALUES(345); + SELECT * FROM t2dup; +---- +stmt 0 ok +stmt 98 ok +stmt 129 err 1 -1 179 no such table: main.t2 +stmt 246 err 1 -1 281 no such table: t2 +stmt 281 err 1 -1 316 no such table: t2 +stmt 316 err 1 -1 351 no such table: t2 +stmt 351 err 1 -1 376 no such table: t2dup +==== insert3-2.2 + + DELETE FROM t2dup; + INSERT INTO t2(a) SELECT 1 FROM t1 LIMIT 1; + INSERT INTO t2(b) SELECT 987 FROM t1 LIMIT 1; + INSERT INTO t2(c) SELECT 876 FROM t1 LIMIT 1; + SELECT * FROM t2dup; +---- +stmt 0 err 1 -1 23 no such table: t2dup +stmt 23 err 1 -1 71 no such table: t2 +stmt 71 err 1 -1 121 no such table: t2 +stmt 121 err 1 -1 171 no such table: t2 +stmt 171 err 1 -1 196 no such table: t2dup +==== insert3-3.1 + + CREATE TABLE t3(a,b,c); + CREATE TRIGGER t3r1 BEFORE INSERT on t3 WHEN nosuchcol BEGIN + SELECT 'illegal WHEN clause'; + END; +---- +stmt 0 ok +stmt 28 err 1 -1 93 no such table: main.t3 +==== insert3-3.2 + + INSERT INTO t3 VALUES(1,2,3) +---- +stmt 0 err 1 -1 34 no such table: t3 +==== insert3-3.3 + + CREATE TABLE t4(a,b,c); + CREATE TRIGGER t4r1 AFTER INSERT on t4 WHEN nosuchcol BEGIN + SELECT 'illegal WHEN clause'; + END; +---- +stmt 0 ok +stmt 28 err 1 -1 92 no such table: main.t4 +==== insert3-3.4 + + INSERT INTO t4 VALUES(1,2,3) +---- +stmt 0 err 1 -1 34 no such table: t4 +==== insert3-3.5 + + CREATE TABLE t5( + a INTEGER PRIMARY KEY, + b DEFAULT 'xyz' + ); + INSERT INTO t5 DEFAULT VALUES; + SELECT * FROM t5; +---- +stmt 0 ok +stmt 79 err 1 -1 114 no such table: t5 +stmt 114 err 1 -1 136 no such table: t5 +==== insert3-3.6 + + INSERT INTO t5 DEFAULT VALUES; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 35 no such table: t5 +stmt 35 err 1 -1 57 no such table: t5 +==== insert3-3.7 + + CREATE TABLE t6(x,y DEFAULT 4.3, z DEFAULT x'6869'); + INSERT INTO t6 DEFAULT VALUES; + SELECT * FROM t6; +---- +stmt 0 ok +stmt 59 err 1 -1 96 no such table: t6 +stmt 96 err 1 -1 120 no such table: t6 +==== insert3-4.2 + + PRAGMA cache_size = 10; + BEGIN; + UPDATE t1 SET a = randstr(10,10) WHERE (rowid%4)==0; + DELETE FROM t1 WHERE rowid%2; + INSERT INTO t1 SELECT randstr(10,400), randstr(10,400), c FROM t1; + COMMIT; +---- +stmt 0 ok +stmt 28 ok +stmt 39 err 1 -1 98 no such table: t1 +stmt 98 err 1 -1 134 no such table: t1 +stmt 134 err 1 -1 207 no such table: t1 +stmt 207 ok diff --git a/parser/testdata/insert4.metadata.json b/parser/testdata/insert4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/insert4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/insert4.test b/parser/testdata/insert4.test new file mode 100644 index 0000000..8dc1b9d --- /dev/null +++ b/parser/testdata/insert4.test @@ -0,0 +1,332 @@ +==== insert4-1.3 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== insert4-2.1.1 + + DELETE FROM t1; + INSERT INTO t1 SELECT 4, 8; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 74 no such table: t1 +==== insert4-2.2.1 + + DELETE FROM t1; + INSERT INTO t1 SELECT * FROM v2; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 57 no such table: t1 +stmt 57 err 1 -1 79 no such table: t1 +==== insert4-2.3.1 + + DELETE FROM t2; + INSERT INTO t2 VALUES(9,1); + INSERT INTO t2 SELECT y, x FROM t2; + INSERT INTO t3 SELECT * FROM t2 LIMIT 1; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t2 +stmt 20 err 1 -1 52 no such table: t2 +stmt 52 err 1 -1 92 no such table: t2 +stmt 92 err 1 -1 137 no such table: t3 +stmt 137 err 1 -1 159 no such table: t3 +==== insert4-2.3.3 + + DELETE FROM t1; + INSERT INTO t1 SELECT * FROM t2 LIMIT 1; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 87 no such table: t1 +==== insert4-2.4.1 + + DELETE FROM t3; + INSERT INTO t3 SELECT DISTINCT * FROM t2; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t3 +stmt 20 err 1 -1 66 no such table: t3 +stmt 66 err 1 -1 88 no such table: t3 +==== insert4-2.4.3 + + DELETE FROM t1; + INSERT INTO t1 SELECT DISTINCT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 66 no such table: t1 +==== insert4-generated + + INSERT INTO dest SELECT * FROM src; + SELECT * FROM dest; +---- +stmt 0 err 1 -1 42 no such table: dest +stmt 42 err 1 -1 68 no such table: dest +==== insert4-4.1a +CREATE TABLE t4(a, b, UNIQUE(a,b)) +---- +stmt 0 ok +==== insert4-4.1b + + INSERT INTO t4 VALUES(NULL,0); + INSERT INTO t4 VALUES(NULL,1); + INSERT INTO t4 VALUES(NULL,1); + VACUUM; +---- +stmt 0 err 1 -1 37 no such table: t4 +stmt 37 err 1 -1 74 no such table: t4 +stmt 74 err 1 -1 111 no such table: t4 +stmt 111 ok +==== insert4-6.5 + + CREATE TABLE t6a(x CHECK( x<>'abc' )); + INSERT INTO t6a VALUES('ABC'); + SELECT * FROM t6a; +---- +stmt 0 ok +stmt 43 err 1 -1 78 no such table: t6a +stmt 78 err 1 -1 101 no such table: t6a +==== insert4-7.4 +SELECT * FROM t7b +---- +stmt 0 err 1 -1 18 no such table: t7b +==== insert4-8.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT REPLACE, b); + CREATE TABLE t2(x INTEGER PRIMARY KEY ON CONFLICT REPLACE, y); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t2 VALUES(1,3); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 125 ok +stmt 192 err 1 -1 224 no such table: t1 +stmt 224 err 1 -1 256 no such table: t2 +stmt 256 err 1 -1 293 no such table: t1 +stmt 293 err 1 -1 315 no such table: t1 +==== insert4-8.2 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT REPLACE, b); + CREATE TABLE t2(x, y); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t2 VALUES(1,3); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 125 ok +stmt 152 err 1 -1 184 no such table: t1 +stmt 184 err 1 -1 216 no such table: t2 +stmt 216 err 1 -1 253 no such table: t1 +stmt 253 err 1 -1 275 no such table: t1 +==== insert4-8.3 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT IGNORE, b); + CREATE TABLE t2(x INTEGER PRIMARY KEY ON CONFLICT IGNORE, y); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t2 VALUES(1,3); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 124 ok +stmt 190 err 1 -1 222 no such table: t1 +stmt 222 err 1 -1 254 no such table: t2 +stmt 254 err 1 -1 291 no such table: t1 +stmt 291 err 1 -1 313 no such table: t1 +==== insert4-8.4 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT IGNORE, b); + CREATE TABLE t2(x, y); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t2 VALUES(1,3); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 124 ok +stmt 151 err 1 -1 183 no such table: t1 +stmt 183 err 1 -1 215 no such table: t2 +stmt 215 err 1 -1 252 no such table: t1 +stmt 252 err 1 -1 274 no such table: t1 +==== insert4-8.6 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== insert4-8.8 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== insert4-8.10 +COMMIT +---- +stmt 0 ok +==== insert4-8.11 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== insert4-8.21 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT REPLACE, b); + CREATE TABLE t2(x INTEGER PRIMARY KEY ON CONFLICT REPLACE, y); + INSERT INTO t2 VALUES(1,3); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 125 ok +stmt 192 err 1 -1 224 no such table: t2 +stmt 224 err 1 -1 261 no such table: t1 +stmt 261 err 1 -1 283 no such table: t1 +==== insert4-8.22 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT IGNORE, b); + CREATE TABLE t2(x INTEGER PRIMARY KEY ON CONFLICT IGNORE, y); + INSERT INTO t2 VALUES(1,3); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 124 ok +stmt 190 err 1 -1 222 no such table: t2 +stmt 222 err 1 -1 259 no such table: t1 +stmt 259 err 1 -1 281 no such table: t1 +==== insert4-8.23 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT ABORT, b); + CREATE TABLE t2(x INTEGER PRIMARY KEY ON CONFLICT ABORT, y); + INSERT INTO t2 VALUES(1,3); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 123 ok +stmt 188 err 1 -1 220 no such table: t2 +stmt 220 err 1 -1 257 no such table: t1 +stmt 257 err 1 -1 279 no such table: t1 +==== insert4-8.24 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT FAIL, b); + CREATE TABLE t2(x INTEGER PRIMARY KEY ON CONFLICT FAIL, y); + INSERT INTO t2 VALUES(1,3); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 122 ok +stmt 186 err 1 -1 218 no such table: t2 +stmt 218 err 1 -1 255 no such table: t1 +stmt 255 err 1 -1 277 no such table: t1 +==== insert4-8.25 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT ROLLBACK, b); + CREATE TABLE t2(x INTEGER PRIMARY KEY ON CONFLICT ROLLBACK, y); + INSERT INTO t2 VALUES(1,3); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 126 ok +stmt 194 err 1 -1 226 no such table: t2 +stmt 226 err 1 -1 263 no such table: t1 +stmt 263 err 1 -1 285 no such table: t1 +==== insert4-9.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES(5 COLLATE xyzzy) UNION SELECT 0; +---- +stmt 0 ok +stmt 27 ok +stmt 49 err 1 -1 109 no such table: t1 +==== 10.1 + + CREATE TABLE t8( + rid INTEGER, + pid INTEGER, + mid INTEGER, + px INTEGER DEFAULT(0) CHECK(px IN(0, 1)) + ); + CREATE TEMP TABLE x( + rid INTEGER, + pid INTEGER, + mid INTEGER, + px INTEGER DEFAULT(0) CHECK(px IN(0, 1)) + ); +---- +stmt 0 ok +stmt 120 ok +==== 11.0 + + CREATE TABLE t9(a, b, c); + CREATE INDEX t9a ON t9(a); + CREATE INDEX t9b ON t9(b) WHERE c=0; + + INSERT INTO t9 VALUES(1, 1, 1); + INSERT INTO t9 VALUES(2, 2, 2); + INSERT INTO t9 VALUES(3, 3, 3); + + CREATE TABLE t10(a, b, c); + CREATE INDEX t10a ON t10(a); + CREATE INDEX t10b ON t10(b) WHERE c=0; + + INSERT INTO t10 SELECT * FROM t9; + SELECT * FROM t10; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 28 err 1 -1 57 no such table: main.t9 +stmt 57 err 1 -1 96 no such table: main.t9 +stmt 96 err 1 -1 131 no such table: t9 +stmt 131 err 1 -1 165 no such table: t9 +stmt 165 err 1 -1 199 no such table: t9 +stmt 199 ok +stmt 229 err 1 -1 260 no such table: main.t10 +stmt 260 err 1 -1 301 no such table: main.t10 +stmt 301 err 1 -1 338 no such table: t10 +stmt 338 err 1 -1 359 no such table: t10 +stmt 359 ok diff --git a/parser/testdata/insert5.metadata.json b/parser/testdata/insert5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/insert5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/insert5.test b/parser/testdata/insert5.test new file mode 100644 index 0000000..4e38458 --- /dev/null +++ b/parser/testdata/insert5.test @@ -0,0 +1,39 @@ +==== insert5-1.1 + + INSERT INTO B + SELECT * FROM B UNION ALL + SELECT * FROM MAIN WHERE exists (select * FROM B WHERE B.Id = MAIN.Id); + SELECT * FROM B; +---- +stmt 0 err 1 -1 136 no such table: B +stmt 136 err 1 -1 159 no such table: B +==== insert5-1.1.dup1 + + INSERT INTO B SELECT * FROM B; + INSERT INTO B + SELECT * FROM MAIN WHERE exists (select * FROM B WHERE B.Id = MAIN.Id); + SELECT * FROM B; +---- +stmt 0 err 1 -1 37 no such table: B +stmt 37 err 1 -1 137 no such table: B +stmt 137 err 1 -1 160 no such table: B +==== insert5-2.9 + + INSERT INTO b + SELECT * FROM main + WHERE id > 10 AND (SELECT count(*) FROM v2 GROUP BY main.id) +---- +stmt 0 err 1 -1 110 no such table: b +==== insert5-2.10 + + CREATE TABLE t1(a INT); + INSERT INTO t1 VALUES(2); + CREATE TABLE t2(c INT, d INT); + INSERT INTO t2 VALUES(3,4),(10,NULL); + SELECT (SELECT c FROM t2 ORDER BY coalesce(d,a) LIMIT 1) FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 54 no such table: t1 +stmt 54 ok +stmt 87 err 1 -1 127 no such table: t2 +stmt 127 err 1 -1 195 no such table: t1 diff --git a/parser/testdata/insertfault.metadata.json b/parser/testdata/insertfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/insertfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/insertfault.test b/parser/testdata/insertfault.test new file mode 100644 index 0000000..36c7b57 --- /dev/null +++ b/parser/testdata/insertfault.test @@ -0,0 +1,9 @@ +==== 1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, d DEFAULT true); + INSERT INTO t1 DEFAULT VALUES; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 64 err 1 -1 97 no such table: t1 +stmt 97 err 1 -1 117 no such table: t1 diff --git a/parser/testdata/instr.metadata.json b/parser/testdata/instr.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/instr.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/instr.test b/parser/testdata/instr.test new file mode 100644 index 0000000..80304f1 --- /dev/null +++ b/parser/testdata/instr.test @@ -0,0 +1,61 @@ +==== instr-1.60 + + SELECT coalesce(instr(NULL,'abc'), 999); +---- +stmt 0 ok +==== instr-1.61 + + SELECT coalesce(instr('abc',NULL), 999); +---- +stmt 0 ok +==== instr-1.62 + + SELECT coalesce(instr(NULL,NULL), 999); +---- +stmt 0 ok +==== instr-1.63 + + SELECT instr(X'', 'abc') +---- +stmt 0 ok +==== instr-1.64 + + CREATE TABLE x1(a, b); + INSERT INTO x1 VALUES(X'', 'abc'); + SELECT instr(a, b) FROM x1; +---- +stmt 0 ok +stmt 25 err 1 -1 62 no such table: x1 +stmt 62 err 1 -1 92 no such table: x1 +==== instr-2.0 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 PRIMARY KEY, c1); + INSERT INTO t0(c0) VALUES (x'bb'), (0); + SELECT COUNT(*) FROM t0 WHERE INSTR(x'aabb', t0.c0) ORDER BY t0.c0, t0.c1; +---- +stmt 0 ok +stmt 27 ok +stmt 66 err 1 -1 108 no such table: t0 +stmt 108 err 1 -1 185 no such table: t0 +==== instr-2.1 + + SELECT quote(c0) FROM t0 WHERE INSTR(x'aabb', t0.c0) ORDER BY t0.c0, t0.c1; +---- +stmt 0 err 1 -1 78 no such table: t0 +==== instr-2.2 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES('text'),(x'bb'); + SELECT quote(x) FROM t1 WHERE instr(x'aabb',x); +---- +stmt 0 ok +stmt 27 ok +stmt 49 err 1 -1 93 no such table: t1 +stmt 93 err 1 -1 143 no such table: t1 +==== instr-2.3 + + SELECT quote(x) FROM t1 WHERE x>'zzz' AND instr(x'aabb',x); +---- +stmt 0 err 1 -1 62 no such table: t1 diff --git a/parser/testdata/instrfault.metadata.json b/parser/testdata/instrfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/instrfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/instrfault.test b/parser/testdata/instrfault.test new file mode 100644 index 0000000..6cfa068 --- /dev/null +++ b/parser/testdata/instrfault.test @@ -0,0 +1,9 @@ +==== instrfault-generated + + CREATE TABLE h1(a, b); + INSERT INTO h1 VALUES('abcdefg%200hijkl', randomblob(200)); + INSERT INTO h1 SELECT b, a FROM h1; +---- +stmt 0 ok +stmt 27 err 1 -1 91 no such table: h1 +stmt 91 err 1 -1 131 no such table: h1 diff --git a/parser/testdata/interrupt.metadata.json b/parser/testdata/interrupt.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/interrupt.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/interrupt.test b/parser/testdata/interrupt.test new file mode 100644 index 0000000..a0d4454 --- /dev/null +++ b/parser/testdata/interrupt.test @@ -0,0 +1,63 @@ +==== interrupt-1.1 + + CREATE TABLE t1(a,b); + SELECT name FROM sqlite_master; +---- +stmt 0 ok +stmt 26 ok +==== interrupt-1.3 + + SELECT name FROM sqlite_master; +---- +stmt 0 ok +==== interrrupt-2.1 + + BEGIN; + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,randstr(300,400)); + INSERT INTO t1 SELECT a+1, randstr(300,400) FROM t1; + INSERT INTO t1 SELECT a+2, a || '-' || b FROM t1; + INSERT INTO t1 SELECT a+4, a || '-' || b FROM t1; + INSERT INTO t1 SELECT a+8, a || '-' || b FROM t1; + INSERT INTO t1 SELECT a+16, a || '-' || b FROM t1; + INSERT INTO t1 SELECT a+32, a || '-' || b FROM t1; + COMMIT; + UPDATE t1 SET b=substr(b,-5,5); + SELECT count(*) from t1; +---- +stmt 0 ok +stmt 11 ok +stmt 37 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 195 no such table: t1 +stmt 195 err 1 -1 249 no such table: t1 +stmt 249 err 1 -1 303 no such table: t1 +stmt 303 err 1 -1 358 no such table: t1 +stmt 358 err 1 -1 413 no such table: t1 +stmt 413 ok +stmt 425 err 1 -1 461 no such table: t1 +stmt 461 err 1 -1 490 no such table: t1 +==== interrupt-2.3 + + SELECT md5sum(a || b) FROM t1; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== interrupt-generated + + BEGIN; + CREATE TEMP TABLE t2(x,y); + SELECT name FROM sqlite_temp_master; +---- +stmt 0 ok +stmt 15 ok +stmt 50 ok +==== interrupt-generated.dup1 + + SELECT name FROM temp.sqlite_master; +---- +stmt 0 ok +==== interrupt-generated.dup2 + + ROLLBACK +---- +stmt 0 ok diff --git a/parser/testdata/interrupt2.metadata.json b/parser/testdata/interrupt2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/interrupt2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/interrupt2.test b/parser/testdata/interrupt2.test new file mode 100644 index 0000000..d8c0af5 --- /dev/null +++ b/parser/testdata/interrupt2.test @@ -0,0 +1,41 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1b ON t1(b); + PRAGMA journal_mode = wal; + + WITH ii(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM ii WHERE i<1000 ) + INSERT INTO t1 SELECT i, i FROM ii; +---- +stmt 0 ok +stmt 25 err 1 -1 54 no such table: main.t1 +stmt 54 err 1 -1 83 no such table: main.t1 +stmt 83 ok +stmt 112 err 1 -1 223 no such table: t1 +==== interrupt2-generated + PRAGMA wal_checkpoint; +---- +stmt 0 ok +==== interrupt2-generated.dup1 + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== interrupt2-generated.dup2 + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== 2.0 + + CREATE TEMP TABLE z1(a, b); + INSERT INTO z1 SELECT * FROM t1; +---- +stmt 0 ok +stmt 30 err 1 -1 65 no such table: z1 +==== 2.0.dup1 + + SELECT count(*) FROM t1 + UNION ALL + SELECT count(*) FROM z1 +---- +stmt 0 err 1 -1 65 no such table: z1 diff --git a/parser/testdata/intpkey.metadata.json b/parser/testdata/intpkey.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/intpkey.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/intpkey.test b/parser/testdata/intpkey.test new file mode 100644 index 0000000..cd03ebb --- /dev/null +++ b/parser/testdata/intpkey.test @@ -0,0 +1,414 @@ +==== intpkey-1.0 + + CREATE TABLE t1(a TEXT PRIMARY KEY, b, c); +---- +stmt 0 ok +==== intpkey-1.1 + + SELECT name FROM sqlite_master + WHERE type='index' AND tbl_name='t1'; +---- +stmt 0 ok +==== intpkey-1.2 + + DROP TABLE t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + SELECT name FROM sqlite_master + WHERE type='index' AND tbl_name='t1'; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 69 ok +==== intpkey-1.4 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== intpkey-1.5 + + SELECT rowid, * FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== intpkey-1.7 + + SELECT rowid, * FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== intpkey-1.9 + + SELECT rowid, * FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== intpkey-1.10 + + INSERT INTO t1(b,c) VALUES('one','two'); + SELECT b FROM t1 ORDER BY b; +---- +stmt 0 err 1 -1 45 no such table: t1 +stmt 45 err 1 -1 78 no such table: t1 +==== intpkey-1.11 + + UPDATE t1 SET a=4 WHERE b='one'; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 59 no such table: t1 +==== intpkey-1.12.1 + + SELECT * FROM t1 WHERE a==4; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== intpkey-1.12.2 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a==4; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== intpkey-1.16 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== intpkey-2.1 + + CREATE INDEX i1 ON t1(b); + SELECT * FROM t1 WHERE b=='y' +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 err 1 -1 65 no such table: t1 +==== intpkey-2.1.1 + + SELECT * FROM t1 WHERE b=='y' AND rowid<0 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== intpkey-2.1.2 + + SELECT * FROM t1 WHERE b=='y' AND rowid<0 AND rowid>=-20 +---- +stmt 0 err 1 -1 62 no such table: t1 +==== intpkey-2.1.3 + + SELECT * FROM t1 WHERE b>='y' +---- +stmt 0 err 1 -1 35 no such table: t1 +==== intpkey-2.1.4 + + SELECT * FROM t1 WHERE b>='y' AND rowid<10 +---- +stmt 0 err 1 -1 48 no such table: t1 +==== intpkey-2.2 + + UPDATE t1 SET a=8 WHERE b=='y'; + SELECT * FROM t1 WHERE b=='y'; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 71 no such table: t1 +==== intpkey-2.3 + + SELECT rowid, * FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== intpkey-2.4 + + SELECT rowid, * FROM t1 WHERE b<'second' +---- +stmt 0 err 1 -1 46 no such table: t1 +==== intpkey-2.4.1 + + SELECT rowid, * FROM t1 WHERE 'second'>b +---- +stmt 0 err 1 -1 46 no such table: t1 +==== intpkey-2.4.2 + + SELECT rowid, * FROM t1 WHERE 8>rowid AND 'second'>b +---- +stmt 0 err 1 -1 58 no such table: t1 +==== intpkey-2.4.3 + + SELECT rowid, * FROM t1 WHERE 8>rowid AND 'second'>b AND 0'a' +---- +stmt 0 err 1 -1 41 no such table: t1 +==== intpkey-2.6 + + DELETE FROM t1 WHERE rowid=4; + SELECT * FROM t1 WHERE b>'a'; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 68 no such table: t1 +==== intpkey-2.7 + + UPDATE t1 SET a=-4 WHERE rowid=8; + SELECT * FROM t1 WHERE b>'a'; +---- +stmt 0 err 1 -1 38 no such table: t1 +stmt 38 err 1 -1 72 no such table: t1 +==== intpkey-2.7.dup1 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== intpkey-3.1 + + CREATE INDEX i2 ON t1(a); +---- +stmt 0 err 1 -1 30 no such table: main.t1 +==== intpkey-3.5 + + CREATE INDEX i3 ON t1(c,a); +---- +stmt 0 err 1 -1 32 no such table: main.t1 +==== intpkey-5.2 + + SELECT rowid, a FROM t1 ORDER BY rowid +---- +stmt 0 err 1 -1 44 no such table: t1 +==== intpkey-6.1 + + BEGIN; + INSERT INTO t1 VALUES(20,'b-20','c-20'); + INSERT INTO t1 VALUES(21,'b-21','c-21'); + INSERT INTO t1 VALUES(22,'b-22','c-22'); + COMMIT; + SELECT * FROM t1 WHERE a>=20; +---- +stmt 0 ok +stmt 11 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 101 no such table: t1 +stmt 101 err 1 -1 146 no such table: t1 +stmt 146 ok +stmt 158 err 1 -1 192 no such table: t1 +==== intpkey-6.2 + + SELECT * FROM t1 WHERE b=='hello' +---- +stmt 0 err 1 -1 39 no such table: t1 +==== intpkey-6.3 + + DELETE FROM t1 WHERE b='b-21'; + SELECT * FROM t1 WHERE b=='b-21'; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 73 no such table: t1 +==== intpkey-6.4 + + SELECT * FROM t1 WHERE a>=20 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== intpkey-7.1 + + INSERT INTO t1(c,b,a) VALUES('row','new',30); + SELECT * FROM t1 WHERE rowid>=30; +---- +stmt 0 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 88 no such table: t1 +==== intpkey-7.2 + + SELECT * FROM t1 WHERE rowid>20; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== intpkey-8.1 + + CREATE TABLE t2(x INTEGER PRIMARY KEY, y, z); + INSERT INTO t2 SELECT * FROM t1; + SELECT rowid FROM t2; +---- +stmt 0 ok +stmt 50 err 1 -1 87 no such table: t2 +stmt 87 err 1 -1 113 no such table: t2 +==== intpkey-8.2 + + SELECT x FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== intpkey-9.1 + + UPDATE t1 SET c='www' WHERE c='world'; + SELECT rowid, a, c FROM t1 WHERE c=='www'; +---- +stmt 0 err 1 -1 43 no such table: t1 +stmt 43 err 1 -1 90 no such table: t1 +==== intpkey-10.1 + + DROP TABLE t2; + CREATE TABLE t2(x INTEGER PRIMARY KEY, y, z); + INSERT INTO t2 VALUES(NULL, 1, 2); + SELECT * from t2; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 ok +stmt 69 err 1 -1 108 no such table: t2 +stmt 108 err 1 -1 130 no such table: t2 +==== intpkey-10.2 + + INSERT INTO t2 VALUES(NULL, 2, 3); + SELECT * from t2 WHERE x=2; +---- +stmt 0 err 1 -1 39 no such table: t2 +stmt 39 err 1 -1 71 no such table: t2 +==== intpkey-10.3 + + INSERT INTO t2 SELECT NULL, z, y FROM t2; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 46 no such table: t2 +stmt 46 err 1 -1 68 no such table: t2 +==== intpkey-11.1 + + SELECT b FROM t1 WHERE a=2.0+3.0; +---- +stmt 0 err 1 -1 38 no such table: t1 +==== intpkey-11.1.dup1 + + SELECT b FROM t1 WHERE a=2.0+3.5; +---- +stmt 0 err 1 -1 38 no such table: t1 +==== intpkey-13.1 + + SELECT * FROM t1 WHERE a=1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== intpkey-13.2 + + INSERT INTO t1 VALUES('1.0',2,3); + SELECT * FROM t1 WHERE a=1; +---- +stmt 0 err 1 -1 38 no such table: t1 +stmt 38 err 1 -1 70 no such table: t1 +==== intpkey-13.3 + + INSERT INTO t1 VALUES('1.5',3,4); +---- +stmt 0 err 1 -1 38 no such table: t1 +==== intpkey-13.4 + + INSERT INTO t1 VALUES(x'123456',3,4); +---- +stmt 0 err 1 -1 44 no such table: t1 +==== intpkey-13.5 + + INSERT INTO t1 VALUES('+1234567890',3,4); +---- +stmt 0 err 1 -1 46 no such table: t1 +==== intpkey-14.1 + + CREATE TABLE t3(a INTEGER PRIMARY KEY, b INTEGER, c TEXT); + INSERT INTO t3 VALUES(1, 1, 'one'); + INSERT INTO t3 VALUES(2, 2, '2'); + INSERT INTO t3 VALUES(3, 3, 3); +---- +stmt 0 ok +stmt 63 err 1 -1 103 no such table: t3 +stmt 103 err 1 -1 141 no such table: t3 +stmt 141 err 1 -1 177 no such table: t3 +==== intpkey-14.2 + + SELECT * FROM t3 WHERE a>2; +---- +stmt 0 err 1 -1 32 no such table: t3 +==== intpkey-14.3 + + SELECT * FROM t3 WHERE a>'2'; +---- +stmt 0 err 1 -1 34 no such table: t3 +==== intpkey-14.4 + + SELECT * FROM t3 WHERE a<'2'; +---- +stmt 0 err 1 -1 34 no such table: t3 +==== intpkey-14.5 + + SELECT * FROM t3 WHERE a2147483648; +---- +stmt 0 err 1 -1 53 no such table: t1 +stmt 53 err 1 -1 94 no such table: t1 +==== intpkey-15.2 + + INSERT INTO t1 VALUES(NULL, 'big-2', 234); + SELECT b FROM t1 WHERE a>=2147483648; +---- +stmt 0 err 1 -1 47 no such table: t1 +stmt 47 err 1 -1 89 no such table: t1 +==== intpkey-15.3 + + SELECT b FROM t1 WHERE a>2147483648; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== intpkey-15.4 + + SELECT b FROM t1 WHERE a>=2147483647; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== intpkey-15.5 + + SELECT b FROM t1 WHERE a<2147483648; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== intpkey-15.6 + + SELECT b FROM t1 WHERE a<12345678901; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== intpkey-15.7 + + SELECT b FROM t1 WHERE a>12345678901; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== intpkey-16.1 + + PRAGMA table_info=t16a; +---- +stmt 0 ok +==== intpkey-17.0 + + CREATE TABLE t17(x INTEGER PRIMARY KEY, y TEXT); + INSERT INTO t17(x,y) VALUES(123,'elephant'),(248,'giraffe'); + CREATE INDEX t17x ON t17(x); + DELETE FROM t17 WHERE x=99 OR x<130; + SELECT * FROM t17; +---- +stmt 0 ok +stmt 51 err 1 -1 114 no such table: t17 +stmt 114 err 1 -1 145 no such table: main.t17 +stmt 145 err 1 -1 184 no such table: t17 +stmt 184 err 1 -1 205 no such table: t17 +==== intpkey-17.1 + + DROP INDEX t17x; + DELETE FROM t17; + INSERT INTO t17(x,y) VALUES(123,'elephant'),(248,'giraffe'); + CREATE UNIQUE INDEX t17x ON t17(abs(x)); + DELETE FROM t17 WHERE abs(x) IS NULL OR abs(x)<130; + SELECT * FROM t17; +---- +stmt 0 err 1 -1 19 no such index: t17x +stmt 19 err 1 -1 38 no such table: t17 +stmt 38 err 1 -1 101 no such table: t17 +stmt 101 err 1 -1 144 no such table: main.t17 +stmt 144 err 1 -1 198 no such table: t17 +stmt 198 err 1 -1 219 no such table: t17 +==== intpkey-17.2 + + DELETE FROM t17; + INSERT INTO t17(x,y) VALUES(123,'elephant'),(248,'giraffe'); + UPDATE t17 SET y='ostrich' WHERE abs(x)=248; + SELECT * FROM t17 ORDER BY +x; +---- +stmt 0 err 1 -1 19 no such table: t17 +stmt 19 err 1 -1 82 no such table: t17 +stmt 82 err 1 -1 129 no such table: t17 +stmt 129 err 1 -1 162 no such table: t17 diff --git a/parser/testdata/intreal.metadata.json b/parser/testdata/intreal.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/intreal.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/intreal.test b/parser/testdata/intreal.test new file mode 100644 index 0000000..0c5f7f0 --- /dev/null +++ b/parser/testdata/intreal.test @@ -0,0 +1,128 @@ +==== 100 + + SELECT intreal(5); +---- +stmt 0 err 1 10 21 no such function: intreal +==== 110 + + SELECT intreal(5)=5, 6=intreal(6); +---- +stmt 0 err 1 10 37 no such function: intreal +==== 120 + + SELECT intreal(7)=7.0, 8.0=intreal(8); +---- +stmt 0 err 1 10 41 no such function: intreal +==== 130 + + SELECT typeof(intreal(9)); +---- +stmt 0 err 1 17 29 no such function: intreal +==== 140 + + SELECT 'a'||intreal(11)||'z'; +---- +stmt 0 err 1 15 32 no such function: intreal +==== 150 + + SELECT max(1.0,intreal(2),3.0), max(1,intreal(2),3); +---- +stmt 0 err 1 18 55 no such function: intreal +==== 160 + + SELECT max(1.0,intreal(4),3.0), max(1,intreal(4),3); +---- +stmt 0 err 1 18 55 no such function: intreal +==== 170 + + SELECT max(1.0,intreal(2),intreal(3),4.0), + max(1,intreal(2),intreal(3),4); +---- +stmt 0 err 1 29 86 no such function: intreal +==== 180 + + SELECT max(1.0,intreal(5),intreal(3),4.0), + max(1,intreal(5),intreal(3),4); +---- +stmt 0 err 1 29 86 no such function: intreal +==== 2.1 + + CREATE TABLE t2(a REAL); + INSERT INTO t2 VALUES( 836627109860825358 ); + SELECT substr(a,1,4) FROM t2 WHERE a = CAST(836627109860825358 AS REAL); +---- +stmt 0 ok +stmt 27 err 1 -1 74 no such table: t2 +stmt 74 err 1 -1 149 no such table: t2 +==== 2.2 + + CREATE INDEX i2 ON t2(a); + SELECT substr(a,1,4) FROM t2 WHERE a = CAST(836627109860825358 AS REAL); +---- +stmt 0 err 1 -1 28 no such table: main.t2 +stmt 28 err 1 -1 103 no such table: t2 +==== 2.3 + + CREATE TABLE t0 (c0); + CREATE TABLE t1 (c1 REAL); + INSERT INTO t1(c1) VALUES (8366271098608253588); + INSERT INTO t0(c0) VALUES ('a'); +---- +stmt 0 ok +stmt 24 ok +stmt 53 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 139 no such table: t0 +==== 2.4 + + SELECT * FROM t1 WHERE (t1.c1 = CAST(8366271098608253588 AS REAL)); +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 2.5 + + SELECT * FROM t0, t1 WHERE (t1.c1 = CAST(8366271098608253588 AS REAL)); +---- +stmt 0 err 1 -1 74 no such table: t0 +==== 2.6 + + SELECT * FROM t0, t1 + WHERE ( + t1.c1 >= CAST(8366271098608253588 AS REAL) + AND t1.c1 <= CAST(8366271098608253588 AS REAL) + ); +---- +stmt 0 err 1 -1 142 no such table: t0 +==== 3.0 + + CREATE TABLE t0 (c0 REAL, c1); + CREATE UNIQUE INDEX i0 ON t0(c1, 0 | c0); + INSERT INTO t0(c0) VALUES (4750228396194493326), (0); + UPDATE OR REPLACE t0 SET c0 = 'a', c1 = ''; + SELECT * FROM t0 ORDER BY t0.c1; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 33 err 1 -1 77 no such table: main.t0 +stmt 77 err 1 -1 133 no such table: t0 +stmt 133 err 1 -1 179 no such table: t0 +stmt 179 err 1 -1 214 no such table: t0 +stmt 214 ok +==== 4.0 + + CREATE TABLE t1(a REAL, b AS ('expr') ); +---- +stmt 0 ok +==== 4.1 + + INSERT INTO t1 VALUES( REPLACE(0, '', 'expr') ); +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 4.2 + + INSERT INTO t1 SELECT REPLACE(4, '', 'expr'); +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 4.3 + + SELECT typeof(a), a FROM t1; +---- +stmt 0 err 1 -1 31 no such table: t1 diff --git a/parser/testdata/io.metadata.json b/parser/testdata/io.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/io.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/io.test b/parser/testdata/io.test new file mode 100644 index 0000000..e266d3a --- /dev/null +++ b/parser/testdata/io.test @@ -0,0 +1,60 @@ +==== io-2.1 + DELETE FROM abc; VACUUM; +---- +stmt 0 err 1 -1 17 no such table: abc +stmt 17 ok +==== io-2.6.4 + SELECT * FROM abc +---- +stmt 0 err 1 -1 19 no such table: abc +==== io-2.7.3 + SELECT * FROM abc UNION ALL SELECT * FROM abc2 +---- +stmt 0 err 1 -1 48 no such table: abc2 +==== io-2.7.6 + SELECT * FROM abc UNION ALL SELECT * FROM abc2 +---- +stmt 0 err 1 -1 48 no such table: abc2 +==== io-2.8.2 + SELECT * FROM abc +---- +stmt 0 err 1 -1 19 no such table: abc +==== io-2.8.3 + + ROLLBACK; + SELECT * FROM abc; +---- +stmt 0 ok +stmt 14 err 1 -1 37 no such table: abc +==== io-2.9.3 + COMMIT +---- +stmt 0 ok +==== io-2.10.3 + ROLLBACK +---- +stmt 0 ok +==== io-2.11.0 + + PRAGMA locking_mode = exclusive; + PRAGMA locking_mode; +---- +stmt 0 ok +stmt 38 ok +==== io-4.3.2 + + PRAGMA synchronous = full; + PRAGMA cache_size = 10; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 33 ok +stmt 63 ok +==== io-generated + PRAGMA integrity_check +---- +stmt 0 ok +==== io-generated.dup1 + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/ioerr2.metadata.json b/parser/testdata/ioerr2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/ioerr2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/ioerr2.test b/parser/testdata/ioerr2.test new file mode 100644 index 0000000..4d42ef3 --- /dev/null +++ b/parser/testdata/ioerr2.test @@ -0,0 +1,21 @@ +==== ioerr2-1.1 + + PRAGMA cache_size = 10; + PRAGMA default_cache_size = 10; + CREATE TABLE t1(a, b, PRIMARY KEY(a, b)); + INSERT INTO t1 VALUES(randstr(400,400),randstr(400,400)); + INSERT INTO t1 SELECT randstr(400,400), randstr(400,400) FROM t1; -- 2 + INSERT INTO t1 SELECT randstr(400,400), randstr(400,400) FROM t1; -- 4 + INSERT INTO t1 SELECT randstr(400,400), randstr(400,400) FROM t1; -- 8 + INSERT INTO t1 SELECT randstr(400,400), randstr(400,400) FROM t1; -- 16 + INSERT INTO t1 SELECT randstr(400,400), randstr(400,400) FROM t1; -- 32 +---- +stmt 0 ok +stmt 28 ok +stmt 64 ok +stmt 110 err 1 -1 172 no such table: t1 +stmt 172 err 1 -1 242 no such table: t1 +stmt 242 err 1 -1 317 no such table: t1 +stmt 317 err 1 -1 392 no such table: t1 +stmt 392 err 1 -1 467 no such table: t1 +stmt 467 err 1 -1 543 no such table: t1 diff --git a/parser/testdata/ioerr5.metadata.json b/parser/testdata/ioerr5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/ioerr5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/ioerr5.test b/parser/testdata/ioerr5.test new file mode 100644 index 0000000..bc7894e --- /dev/null +++ b/parser/testdata/ioerr5.test @@ -0,0 +1,18 @@ +==== ioerr5-generated + + BEGIN EXCLUSIVE; + INSERT INTO a VALUES(1, 'ABCDEFGHIJKLMNOP'); +---- +stmt 0 ok +stmt 25 err 1 -1 78 no such table: a +==== ioerr5-generated.dup1 + SELECT count(*) FROM a +---- +stmt 0 err 1 -1 24 no such table: a +==== ioerr5-generated.dup2 + + BEGIN EXCLUSIVE; + INSERT INTO a VALUES(1, 'ABCDEFGHIJKLMNOP'); +---- +stmt 0 ok +stmt 25 err 1 -1 78 no such table: a diff --git a/parser/testdata/ioerr6.metadata.json b/parser/testdata/ioerr6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/ioerr6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/ioerr6.test b/parser/testdata/ioerr6.test new file mode 100644 index 0000000..eb11a9b --- /dev/null +++ b/parser/testdata/ioerr6.test @@ -0,0 +1,4 @@ +==== 1.2 + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/istrue.metadata.json b/parser/testdata/istrue.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/istrue.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/istrue.test b/parser/testdata/istrue.test new file mode 100644 index 0000000..2f14dda --- /dev/null +++ b/parser/testdata/istrue.test @@ -0,0 +1,226 @@ +==== istrue-100 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y BOOLEAN); + INSERT INTO t1 VALUES(1, true),(2, false),(3, null); + SELECT x FROM t1 WHERE y IS TRUE; +---- +stmt 0 ok +stmt 53 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 144 no such table: t1 +==== istrue-110 + + SELECT x FROM t1 WHERE y IS FALSE; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== istrue-120 + + SELECT x FROM t1 WHERE y IS NULL; +---- +stmt 0 err 1 -1 36 no such table: t1 +==== istrue-130 + + SELECT x FROM t1 WHERE y IS NOT TRUE; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== istrue-140 + + SELECT x FROM t1 WHERE y IS NOT FALSE; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== istrue-150 + + SELECT x FROM t1 WHERE y IS NOT NULL; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== istrue-300 + + SELECT x, + y IS TRUE, y IS FALSE, y is NULL, + y IS NOT TRUE, y IS NOT FALSE, y IS NOT NULL, '|' + FROM t1 ORDER BY x; +---- +stmt 0 err 1 -1 138 no such table: t1 +==== istrue-400 + + SELECT x FROM t1 WHERE true; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== istrue-410 + + SELECT x FROM t1 WHERE false; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== istrue-500 + + CREATE TABLE t2( + a INTEGER PRIMARY KEY, + b BOOLEAN DEFAULT true, + c BOOLEAN DEFAULT(true), + d BOOLEAN DEFAULT false, + e BOOLEAN DEFAULT(false) + ); + INSERT INTO t2 DEFAULT VALUES; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 171 err 1 -1 204 no such table: t2 +stmt 204 err 1 -1 224 no such table: t2 +==== istrue-510 + + DROP TABLE t2; + CREATE TABLE t2( + a INTEGER PRIMARY KEY, + b BOOLEAN DEFAULT(not true), + c BOOLEAN DEFAULT(not false) + ); + INSERT INTO t2(a) VALUES(99); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 17 no such table: t2 +stmt 17 ok +stmt 137 err 1 -1 169 no such table: t2 +stmt 169 err 1 -1 189 no such table: t2 +==== istrue-520 + + DROP TABLE t2; + CREATE TABLE t2( + a INTEGER PRIMARY KEY, + b BOOLEAN CHECK(b IS TRUE), + c BOOLEAN CHECK(c IS FALSE), + d BOOLEAN CHECK(d IS NOT TRUE), + e BOOLEAN CHECK(e IS NOT FALSE) + ); + INSERT INTO t2 VALUES(1,true,false,null,null); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 17 no such table: t2 +stmt 17 ok +stmt 210 err 1 -1 259 no such table: t2 +stmt 259 err 1 -1 279 no such table: t2 +==== istrue-521 + + INSERT INTO t2 VALUES(2,false,false,null,null); +---- +stmt 0 err 1 -1 50 no such table: t2 +==== istrue-522 + + INSERT INTO t2 VALUES(2,true,true,null,null); +---- +stmt 0 err 1 -1 48 no such table: t2 +==== istrue-523 + + INSERT INTO t2 VALUES(2,true,false,true,null); +---- +stmt 0 err 1 -1 49 no such table: t2 +==== istrue-524 + + INSERT INTO t2 VALUES(2,true,false,null,false); +---- +stmt 0 err 1 -1 50 no such table: t2 +==== istrue-generated + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); +---- +stmt 0 ok +stmt 29 ok +==== istrue-generated.dup1 + + SELECT x IS TRUE FROM t1; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== istrue-generated.dup2 + + SELECT x IS FALSE FROM t1; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== istrue-700 + + CREATE TABLE t7( + a INTEGER PRIMARY KEY, + b BOOLEAN DEFAULT false, + c BOOLEAN DEFAULT true + ); + INSERT INTO t7(a) VALUES(1); + INSERT INTO t7(a,b,c) VALUES(2,true,false); + ALTER TABLE t7 ADD COLUMN d BOOLEAN DEFAULT false; + ALTER TABLE t7 ADD COLUMN e BOOLEAN DEFAULT true; + INSERT INTO t7(a,b,c) VALUES(3,true,false); + INSERT INTO t7 VALUES(4,false,true,true,false); + SELECT *,'x' FROM t7 ORDER BY a; +---- +stmt 0 ok +stmt 117 err 1 -1 150 no such table: t7 +stmt 150 err 1 -1 198 no such table: t7 +stmt 198 err 1 -1 246 no such table: t7 +stmt 253 err 1 -1 301 no such table: t7 +stmt 307 err 1 -1 355 no such table: t7 +stmt 355 err 1 -1 407 no such table: t7 +stmt 407 err 1 -1 444 no such table: t7 +==== istrue-710 + + SELECT 0.5 IS TRUE COLLATE NOCASE; + SELECT 0.5 IS TRUE COLLATE RTRIM; + SELECT 0.5 IS TRUE COLLATE BINARY; + + SELECT 0.5 IS TRUE; + SELECT 0.5 COLLATE NOCASE IS TRUE; + SELECT 0.0 IS FALSE; + + SELECT 0.0 IS FALSE COLLATE NOCASE; + SELECT 0.0 IS FALSE COLLATE RTRIM; + SELECT 0.0 IS FALSE COLLATE BINARY; +---- +stmt 0 ok +stmt 37 ok +stmt 73 ok +stmt 110 ok +stmt 133 ok +stmt 170 ok +stmt 193 ok +stmt 232 ok +stmt 269 ok +==== istrue-800 + + SELECT 9 IN (false.false); +---- +stmt 0 err 1 16 29 no such column: false.false +==== istrue-810 + + CREATE TABLE t8(a INT, true INT, false INT, d INT); + INSERT INTO t8(a,true,false,d) VALUES(5,6,7,8),(4,3,2,1),('a','b','c','d'); + SELECT * FROM t8 ORDER BY false; +---- +stmt 0 ok +stmt 54 err 1 -1 132 no such table: t8 +stmt 132 err 1 -1 167 no such table: t8 +==== istrue-820 + + SELECT 9 IN (false.false) FROM t8; +---- +stmt 0 err 1 -1 37 no such table: t8 +==== istrue-830 + + CREATE TABLE false(true INT, false INT, x INT CHECK (5 IN (false.false))); +---- +stmt 0 ok +==== istrue-840 + + INSERT INTO False VALUES(4,5,6); +---- +stmt 0 err 1 -1 35 no such table: False +==== istrue-841 + + INSERT INTO False VALUES(5,6,7); +---- +stmt 0 err 1 -1 35 no such table: False +==== istrue-850 + + SELECT 9 IN (false.false) FROM false; +---- +stmt 0 err 1 -1 40 no such table: false +==== istrue-851 + + SELECT 5 IN (false.false) FROM false; +---- +stmt 0 err 1 -1 40 no such table: false diff --git a/parser/testdata/join.metadata.json b/parser/testdata/join.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/join.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/join.test b/parser/testdata/join.test new file mode 100644 index 0000000..9873136 --- /dev/null +++ b/parser/testdata/join.test @@ -0,0 +1,1188 @@ +==== join-1.1 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t1 VALUES(2,3,4); + INSERT INTO t1 VALUES(3,4,5); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 152 no such table: t1 +==== join-1.2 + + CREATE TABLE t2(b,c,d); + INSERT INTO t2 VALUES(1,2,3); + INSERT INTO t2 VALUES(2,3,4); + INSERT INTO t2 VALUES(3,4,5); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t2 +stmt 62 err 1 -1 96 no such table: t2 +stmt 96 err 1 -1 130 no such table: t2 +stmt 130 err 1 -1 152 no such table: t2 +==== join-1.2.1 + + SELECT t1.rowid, t2.rowid, '|' FROM t1, t2 ON t1.a=t2.b; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== join-1.3.4 + + SELECT b FROM t1 NATURAL JOIN t2; +---- +stmt 0 err 1 -1 38 no such table: t1 +==== join-1.4.5 + + SELECT b FROM t1 JOIN t2 USING(b); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== join-1.8 + + SELECT * FROM t1 NATURAL CROSS JOIN t2; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== join-1.9 + + SELECT * FROM t1 CROSS JOIN t2 USING(b,c); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== join-1.10 + + SELECT * FROM t1 NATURAL INNER JOIN t2; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== join-1.11 + + SELECT * FROM t1 INNER JOIN t2 USING(b,c); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== join-1.12 + + SELECT * FROM t1 natural inner join t2; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== join-1.15 + + CREATE TABLE t3(c,d,e); + INSERT INTO t3 VALUES(2,3,4); + INSERT INTO t3 VALUES(3,4,5); + INSERT INTO t3 VALUES(4,5,6); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t3 +stmt 62 err 1 -1 96 no such table: t3 +stmt 96 err 1 -1 130 no such table: t3 +stmt 130 err 1 -1 152 no such table: t3 +==== join-1.16 + + SELECT * FROM t1 natural join t2 natural join t3; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== join-1.18 + + CREATE TABLE t4(d,e,f); + INSERT INTO t4 VALUES(2,3,4); + INSERT INTO t4 VALUES(3,4,5); + INSERT INTO t4 VALUES(4,5,6); + SELECT * FROM t4; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t4 +stmt 62 err 1 -1 96 no such table: t4 +stmt 96 err 1 -1 130 no such table: t4 +stmt 130 err 1 -1 152 no such table: t4 +==== join-1.19.1 + + SELECT * FROM t1 natural join t2 natural join t4; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== join-1.20 + + SELECT * FROM t1 natural join t2 natural join t3 WHERE t1.a=1 +---- +stmt 0 err 1 -1 67 no such table: t1 +==== join-2.1 + + SELECT * FROM t1 NATURAL LEFT JOIN t2; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== join-2.1b + + SELECT * FROM t1 OUTER LEFT NATURAL JOIN t2; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== join-2.1c + + SELECT * FROM t1 NATURAL LEFT OUTER JOIN t2; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== join-2.2 + + SELECT * FROM t2 NATURAL LEFT OUTER JOIN t1; +---- +stmt 0 err 1 -1 49 no such table: t2 +==== join-2.4 + + SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d +---- +stmt 0 err 1 -1 48 no such table: t1 +==== join-2.5 + + SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d WHERE t1.a>1 +---- +stmt 0 err 1 -1 61 no such table: t1 +==== join-2.6 + + SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d WHERE t2.b IS NULL OR t2.b>1 +---- +stmt 0 err 1 -1 77 no such table: t1 +==== join-3.1 + + SELECT * FROM t1 NATURAL JOIN t2 ON t1.a=t2.b; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== join-3.2 + + SELECT * FROM t1 NATURAL JOIN t2 USING(b); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== join-3.3 + + SELECT * FROM t1 JOIN t2 ON t1.a=t2.b USING(b); +---- +stmt 0 err 1 43 48 near "USING": syntax error +==== join-3.4.1 + + SELECT * FROM t1 JOIN t2 USING(a); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== join-3.4.2 + + SELECT * FROM t1 JOIN t2 USING(d); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== join-3.5 + SELECT * FROM t1 USING(a) +---- +stmt 0 err 1 -1 27 a JOIN clause is required before USING +==== join-3.6 + + SELECT * FROM t1 JOIN t2 ON t3.a=t2.b; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== join-3.7 + + SELECT * FROM t1 INNER OUTER JOIN t2; +---- +stmt 0 err 1 22 41 unknown join type: INNER OUTER +==== join-3.8 + + SELECT * FROM t1 INNER OUTER CROSS JOIN t2; +---- +stmt 0 err 1 22 47 unknown join type: INNER OUTER CROSS +==== join-3.9 + + SELECT * FROM t1 OUTER NATURAL INNER JOIN t2; +---- +stmt 0 err 1 22 49 unknown join type: OUTER NATURAL INNER +==== join-3.10 + + SELECT * FROM t1 LEFT BOGUS JOIN t2; +---- +stmt 0 err 1 22 40 unknown join type: LEFT BOGUS +==== join-3.11 + + SELECT * FROM t1 INNER BOGUS CROSS JOIN t2; +---- +stmt 0 err 1 22 47 unknown join type: INNER BOGUS CROSS +==== join-3.12 + + SELECT * FROM t1 NATURAL AWK SED JOIN t2; +---- +stmt 0 err 1 22 45 unknown join type: NATURAL AWK SED +==== join-4.2 + + SELECT * FROM t6, t5 WHERE t6.at5.a; +---- +stmt 0 err 1 -1 42 no such table: t6 +==== join-4.4 + + UPDATE t6 SET a='xyz'; + SELECT * FROM t6 NATURAL JOIN t5; +---- +stmt 0 err 1 -1 27 no such table: t6 +stmt 27 err 1 -1 65 no such table: t6 +==== join-4.6 + + SELECT * FROM t6, t5 WHERE t6.at5.a; +---- +stmt 0 err 1 -1 42 no such table: t6 +==== join-4.8 + + UPDATE t6 SET a=1; + SELECT * FROM t6 NATURAL JOIN t5; +---- +stmt 0 err 1 -1 23 no such table: t6 +stmt 23 err 1 -1 61 no such table: t6 +==== join-4.9 + + SELECT * FROM t6, t5 WHERE t6.at5.a; +---- +stmt 0 err 1 -1 42 no such table: t6 +==== join-5.1 + + BEGIN; + create table centros (id integer primary key, centro); + INSERT INTO centros VALUES(1,'xxx'); + create table usuarios (id integer primary key, nombre, apellidos, + idcentro integer); + INSERT INTO usuarios VALUES(1,'a','aa',1); + INSERT INTO usuarios VALUES(2,'b','bb',1); + INSERT INTO usuarios VALUES(3,'c','cc',NULL); + create index idcentro on usuarios (idcentro); + END; + select usuarios.id, usuarios.nombre, centros.centro from + usuarios left outer join centros on usuarios.idcentro = centros.id; +---- +stmt 0 ok +stmt 11 ok +stmt 70 err 1 -1 111 no such table: centros +stmt 111 ok +stmt 204 err 1 -1 251 no such table: usuarios +stmt 251 err 1 -1 298 no such table: usuarios +stmt 298 err 1 -1 348 no such table: usuarios +stmt 348 err 1 -1 398 no such table: main.usuarios +stmt 398 ok +stmt 407 err 1 -1 540 no such table: usuarios +==== join-8.1 + + BEGIN; + CREATE TABLE t9(a INTEGER PRIMARY KEY, b); + INSERT INTO t9 VALUES(1,11); + INSERT INTO t9 VALUES(2,22); + CREATE TABLE t10(x INTEGER PRIMARY KEY, y); + INSERT INTO t10 VALUES(1,2); + INSERT INTO t10 VALUES(3,3); + CREATE TABLE t11(p INTEGER PRIMARY KEY, q); + INSERT INTO t11 VALUES(2,111); + INSERT INTO t11 VALUES(3,333); + CREATE VIEW v10_11 AS SELECT x, q FROM t10, t11 WHERE t10.y=t11.p; + COMMIT; + SELECT * FROM t9 LEFT JOIN v10_11 ON( a=x ); +---- +stmt 0 ok +stmt 11 ok +stmt 58 err 1 -1 91 no such table: t9 +stmt 91 err 1 -1 124 no such table: t9 +stmt 124 ok +stmt 172 err 1 -1 205 no such table: t10 +stmt 205 err 1 -1 238 no such table: t10 +stmt 238 ok +stmt 290 err 1 -1 325 no such table: t11 +stmt 325 err 1 -1 360 no such table: t11 +stmt 360 ok +stmt 435 ok +stmt 447 err 1 -1 496 no such table: t9 +==== join-8.2 + + SELECT * FROM t9 LEFT JOIN (SELECT x, q FROM t10, t11 WHERE t10.y=t11.p) + ON( a=x); +---- +stmt 0 err 1 -1 100 no such table: t9 +==== join-8.3 + + SELECT * FROM v10_11 LEFT JOIN t9 ON( a=x ); +---- +stmt 0 err 1 -1 49 no such table: v10_11 +==== join-8.4 + + SELECT * FROM t9 LEFT JOIN (SELECT 44, p, q FROM t11) AS sub1 ON p=a +---- +stmt 0 err 1 -1 76 no such table: t9 +==== join-9.1 + + BEGIN; + CREATE TABLE t12(a,b); + INSERT INTO t12 VALUES(1,11); + INSERT INTO t12 VALUES(2,22); + CREATE TABLE t13(b,c); + INSERT INTO t13 VALUES(22,222); + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 38 err 1 -1 72 no such table: t12 +stmt 72 err 1 -1 106 no such table: t12 +stmt 106 ok +stmt 133 err 1 -1 169 no such table: t13 +stmt 169 ok +==== join-9.1.1 + + SELECT * FROM t12 NATURAL LEFT JOIN t13 + EXCEPT + SELECT * FROM t12 NATURAL LEFT JOIN (SELECT * FROM t13 WHERE b>0); +---- +stmt 0 err 1 -1 132 no such table: t12 +==== join-9.2 + + CREATE VIEW v13 AS SELECT * FROM t13 WHERE b>0; + SELECT * FROM t12 NATURAL LEFT JOIN t13 + EXCEPT + SELECT * FROM t12 NATURAL LEFT JOIN v13; +---- +stmt 0 ok +stmt 54 err 1 -1 164 no such table: t12 +==== join-10.1 + + CREATE TABLE t21(a,b,c); + CREATE TABLE t22(p,q); + CREATE INDEX i22 ON t22(q); + SELECT a FROM t21 LEFT JOIN t22 ON b=p WHERE q= + (SELECT max(m.q) FROM t22 m JOIN t21 n ON n.b=m.p WHERE n.c=1); +---- +stmt 0 ok +stmt 31 ok +stmt 60 err 1 -1 94 no such table: main.t22 +stmt 94 err 1 -1 221 no such table: t21 +==== join-10.3 + + SELECT * FROM t23 LEFT JOIN (SELECT * FROM t24); +---- +stmt 0 err 1 -1 55 no such table: t23 +==== join-11.2 + SELECT a FROM t1 JOIN t1 USING (a) +---- +stmt 0 err 1 -1 36 no such table: t1 +==== join-11.3 + SELECT a FROM t1 JOIN t1 AS t2 USING (a) +---- +stmt 0 err 1 -1 42 no such table: t1 +==== join-11.3.dup1 + SELECT * FROM t1 NATURAL JOIN t1 AS t2 +---- +stmt 0 err 1 -1 40 no such table: t1 +==== join-11.4 + SELECT * FROM t1 NATURAL JOIN t1 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== join-11.6 + SELECT * FROM t1 NATURAL JOIN t2 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== join-11.7 + SELECT * FROM t2 NATURAL JOIN t1 +---- +stmt 0 err 1 -1 34 no such table: t2 +==== join-11.9 + SELECT * FROM t1 NATURAL JOIN t2 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== join-11.10 + SELECT * FROM t2 NATURAL JOIN t1 +---- +stmt 0 err 1 -1 34 no such table: t2 +==== join-12.1 + + CREATE TABLE t14(x); + INSERT INTO t14 VALUES('abcdefghij'); +---- +stmt 0 ok +stmt 23 err 1 -1 63 no such table: t14 +==== join-13.0 + + CREATE TABLE aa(a); + CREATE TABLE bb(b); + CREATE TABLE cc(c); + + INSERT INTO aa VALUES(45); + INSERT INTO cc VALUES(45); + INSERT INTO cc VALUES(45); +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +stmt 66 err 1 -1 96 no such table: aa +stmt 96 err 1 -1 125 no such table: cc +stmt 125 err 1 -1 154 no such table: cc +==== join-13.1 + + SELECT * FROM aa LEFT JOIN bb, cc WHERE cc.c=aa.a; +---- +stmt 0 err 1 -1 53 no such table: aa +==== join-13.2 + + CREATE INDEX ccc ON cc(c); + SELECT * FROM aa LEFT JOIN bb, cc WHERE cc.c=aa.a; +---- +stmt 0 err 1 -1 29 no such table: main.cc +stmt 29 err 1 -1 82 no such table: aa +==== join-14.1 + + SELECT * + FROM (SELECT 1 a) AS x + LEFT JOIN (SELECT 1, * FROM (SELECT * FROM (SELECT 1))); +---- +stmt 0 ok +==== join-14.2 + + SELECT * + FROM (SELECT 1 a) AS x + LEFT JOIN (SELECT 1, * FROM (SELECT * FROM (SELECT * FROM (SELECT 1)))) AS y + JOIN (SELECT * FROM (SELECT 9)) AS z; +---- +stmt 0 ok +==== join-14.3 + + SELECT * + FROM (SELECT 111) + LEFT JOIN (SELECT cc+222, * FROM (SELECT * FROM (SELECT 333 cc))); +---- +stmt 0 ok +==== join-14.4 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(c PRIMARY KEY, a TEXT(10000), b TEXT(10000)); + SELECT * FROM (SELECT 111) LEFT JOIN (SELECT c+222 FROM t1) GROUP BY 1; +---- +stmt 0 ok +stmt 27 ok +stmt 91 err 1 -1 165 no such table: t1 +==== join-14.4b + + SELECT * FROM (SELECT 111) LEFT JOIN (SELECT c+222 FROM t1); +---- +stmt 0 err 1 -1 63 no such table: t1 +==== join-14.5 + + SELECT * FROM (SELECT 111 AS x UNION ALL SELECT 222) + LEFT JOIN (SELECT c+333 AS y FROM t1) ON x=y GROUP BY 1; +---- +stmt 0 err 1 -1 128 no such table: t1 +==== join-14.5b + + SELECT count(*) + FROM (SELECT 111 AS x UNION ALL SELECT 222) + LEFT JOIN (SELECT c+333 AS y FROM t1) ON x=y; +---- +stmt 0 err 1 -1 121 no such table: t1 +==== join-14.5c + + SELECT count(*) + FROM (SELECT c+333 AS y FROM t1) + RIGHT JOIN (SELECT 111 AS x UNION ALL SELECT 222) ON x=y; +---- +stmt 0 err 1 -1 122 no such table: t1 +==== join-14.6 + + SELECT * FROM (SELECT 111 AS x UNION ALL SELECT 111) + LEFT JOIN (SELECT c+333 AS y FROM t1) ON x=y GROUP BY 1; +---- +stmt 0 err 1 -1 128 no such table: t1 +==== join-14.7 + + SELECT * FROM (SELECT 111 AS x UNION ALL SELECT 111 UNION ALL SELECT 222) + LEFT JOIN (SELECT c+333 AS y FROM t1) ON x=y GROUP BY 1; +---- +stmt 0 err 1 -1 149 no such table: t1 +==== join-14.8 + + INSERT INTO t1(c) VALUES(-111); + SELECT * FROM (SELECT 111 AS x UNION ALL SELECT 111 UNION ALL SELECT 222) + LEFT JOIN (SELECT c+333 AS y FROM t1) ON x=y GROUP BY 1; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 183 no such table: t1 +==== join-14.9 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(c PRIMARY KEY) WITHOUT ROWID; + SELECT * FROM (SELECT 111) LEFT JOIN (SELECT c+222 FROM t1) GROUP BY 1; +---- +stmt 0 ok +stmt 27 ok +stmt 75 err 1 -1 149 no such table: t1 +==== join-14.10 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1),(2),(3); + CREATE VIEW v2 AS SELECT a, 1 AS b FROM t1; + CREATE TABLE t3(x); + INSERT INTO t3 VALUES(2),(4); + SELECT *, '|' FROM t3 LEFT JOIN v2 ON a=x WHERE b=1; +---- +stmt 0 ok +stmt 22 err 1 -1 58 no such table: t1 +stmt 58 ok +stmt 104 ok +stmt 126 err 1 -1 158 no such table: t3 +stmt 158 err 1 -1 213 no such table: t3 +==== join-14.11 + + SELECT *, '|' FROM t3 LEFT JOIN v2 ON a=x WHERE b+1=x; +---- +stmt 0 err 1 -1 57 no such table: t3 +==== join-14.12 + + SELECT *, '|' FROM t3 LEFT JOIN v2 ON a=x ORDER BY b; +---- +stmt 0 err 1 -1 56 no such table: t3 +==== join-14.20 + + CREATE TABLE t1(id INTEGER PRIMARY KEY); + CREATE TABLE t2(id INTEGER PRIMARY KEY, c2 INTEGER); + CREATE TABLE t3(id INTEGER PRIMARY KEY, c3 INTEGER); + INSERT INTO t1(id) VALUES(456); + INSERT INTO t3(id) VALUES(1),(2); + SELECT t1.id, x2.id, x3.id + FROM t1 + LEFT JOIN (SELECT * FROM t2) AS x2 ON t1.id=x2.c2 + LEFT JOIN t3 AS x3 ON x2.id=x3.c3; +---- +stmt 0 ok +stmt 43 ok +stmt 98 ok +stmt 153 err 1 -1 187 no such table: t1 +stmt 187 err 1 -1 223 no such table: t3 +stmt 223 err 1 -1 351 no such table: t1 +==== join-15.100 + + CREATE TABLE t1(a INT, b INT); + INSERT INTO t1 VALUES(1,2),(3,4); + CREATE TABLE t2(x INT, y INT); + SELECT *, 'x' + FROM t1 LEFT JOIN t2 + WHERE CASE WHEN FALSE THEN a=x ELSE 1 END; +---- +stmt 0 ok +stmt 33 err 1 -1 69 no such table: t1 +stmt 69 ok +stmt 102 err 1 -1 189 no such table: t1 +==== join-15.105 + + SELECT *, 'x' + FROM t1 LEFT JOIN t2 + WHERE a IN (1,3,x,y); +---- +stmt 0 err 1 -1 66 no such table: t1 +==== join-15.106a + + SELECT *, 'x' + FROM t1 LEFT JOIN t2 + WHERE NOT ( 'x'='y' AND t2.y=1 ); +---- +stmt 0 err 1 -1 80 no such table: t1 +==== join-15.106b + + SELECT *, 'x' + FROM t1 LEFT JOIN t2 + WHERE ~ ( 'x'='y' AND t2.y=1 ); +---- +stmt 0 err 1 -1 78 no such table: t1 +==== join-15.107 + + SELECT *, 'x' + FROM t1 LEFT JOIN t2 + WHERE t2.y IS NOT 'abc' +---- +stmt 0 err 1 -1 71 no such table: t1 +==== join-15.110 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER); + INSERT INTO t1(a,b) VALUES(1,0),(11,1),(12,1),(13,1),(121,12); + CREATE INDEX t1b ON t1(b); + CREATE TABLE t2(x INTEGER PRIMARY KEY); + INSERT INTO t2(x) VALUES(0),(1); + SELECT a1, a2, a3, a4, a5 + FROM (SELECT a AS a1 FROM t1 WHERE b=0) + JOIN (SELECT x AS x1 FROM t2) + LEFT JOIN (SELECT a AS a2, b AS b2 FROM t1) + ON x1 IS TRUE AND b2=a1 + JOIN (SELECT x AS x2 FROM t2) + ON x2<=CASE WHEN x1 THEN CASE WHEN a2 THEN 1 ELSE -1 END ELSE 0 END + LEFT JOIN (SELECT a AS a3, b AS b3 FROM t1) + ON x2 IS TRUE AND b3=a2 + JOIN (SELECT x AS x3 FROM t2) + ON x3<=CASE WHEN x2 THEN CASE WHEN a3 THEN 1 ELSE -1 END ELSE 0 END + LEFT JOIN (SELECT a AS a4, b AS b4 FROM t1) + ON x3 IS TRUE AND b4=a3 + JOIN (SELECT x AS x4 FROM t2) + ON x4<=CASE WHEN x3 THEN CASE WHEN a4 THEN 1 ELSE -1 END ELSE 0 END + LEFT JOIN (SELECT a AS a5, b AS b5 FROM t1) + ON x4 IS TRUE AND b5=a4 + ORDER BY a1, a2, a3, a4, a5; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 ok +stmt 87 err 1 -1 152 no such table: t1 +stmt 152 err 1 -1 181 no such table: main.t1 +stmt 181 ok +stmt 223 err 1 -1 258 no such table: t2 +stmt 258 err 1 -1 1092 no such table: t1 +==== join-16.100 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INT); + INSERT INTO t1(a) VALUES(1); + CREATE TABLE t2(b INT); + SELECT a, b + FROM t1 LEFT JOIN t2 ON 0 + WHERE (b IS NOT NULL)=0; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 80 err 1 -1 111 no such table: t1 +stmt 111 ok +stmt 137 err 1 -1 209 no such table: t1 +==== join-17.100 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES(0),(1); + SELECT * FROM t1 LEFT JOIN (SELECT abs(1) AS y FROM t1) ON x WHERE NOT(y='a'); +---- +stmt 0 ok +stmt 27 ok +stmt 49 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 165 no such table: t1 +==== join-17.110 + + SELECT * FROM t1 LEFT JOIN (SELECT abs(1)+2 AS y FROM t1) ON x + WHERE NOT(y='a'); +---- +stmt 0 err 1 -1 86 no such table: t1 +==== join-18.1 + + CREATE TABLE t0(a); + CREATE TABLE t1(b); + CREATE VIEW v0 AS SELECT a FROM t1 LEFT JOIN t0; + INSERT INTO t1 VALUES (1); +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +stmt 95 err 1 -1 124 no such table: t1 +==== join-18.2 + + SELECT * FROM v0 WHERE NOT(v0.a IS FALSE); +---- +stmt 0 err 1 -1 45 no such table: v0 +==== join-18.3 + + SELECT * FROM t1 LEFT JOIN t0 WHERE NOT(a IS FALSE); +---- +stmt 0 err 1 -1 55 no such table: t1 +==== join-18.4 + + SELECT NOT(v0.a IS FALSE) FROM v0 +---- +stmt 0 err 1 -1 37 no such table: v0 +==== join-19.0 + + CREATE TABLE t1(a); + CREATE TABLE t2(b); + INSERT INTO t1(a) VALUES(0); + CREATE VIEW v0(c) AS SELECT t2.b FROM t1 LEFT JOIN t2; +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 75 no such table: t1 +stmt 75 ok +==== join-19.1 + + SELECT * FROM v0 WHERE v0.c NOTNULL NOTNULL; +---- +stmt 0 err 1 -1 47 no such table: v0 +==== join-19.2 + + SELECT * FROM t1 LEFT JOIN t2 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== join-19.3 + + SELECT * FROM t1 LEFT JOIN t2 WHERE (b IS NOT NULL) IS NOT NULL; +---- +stmt 0 err 1 -1 67 no such table: t1 +==== join-19.4 + + SELECT (b IS NOT NULL) IS NOT NULL FROM t1 LEFT JOIN t2 +---- +stmt 0 err 1 -1 59 no such table: t1 +==== join-19.5 + + SELECT * FROM t1 LEFT JOIN t2 WHERE + (b IS NOT NULL AND b IS NOT NULL) IS NOT NULL; +---- +stmt 0 err 1 -1 90 no such table: t1 +==== join-20.1 + + CREATE TABLE t1(c1); + CREATE TABLE t0(c0); + INSERT INTO t0(c0) VALUES (0); + SELECT * FROM t0 LEFT JOIN t1 WHERE NULL IN (c1); +---- +stmt 0 ok +stmt 23 ok +stmt 46 err 1 -1 79 no such table: t0 +stmt 79 err 1 -1 131 no such table: t0 +==== join-20.2 + + CREATE INDEX t1x ON t1(0) WHERE NULL IN (c1); + SELECT * FROM t0 LEFT JOIN t1 WHERE NULL IN (c1); +---- +stmt 0 err 1 -1 48 no such table: main.t1 +stmt 48 err 1 -1 100 no such table: t0 +==== join-20.3 + + DROP TABLE t1; + CREATE TABLE t1(x INT); INSERT INTO t1(x) VALUES(1); + CREATE TABLE t2(y BOOLEAN); INSERT INTO t2(y) VALUES(false); + CREATE TABLE t3(z INT); INSERT INTO t3(z) VALUES(3); + CREATE INDEX t2y ON t2(y) WHERE y; + SELECT quote(z) FROM t1 RIGHT JOIN t2 ON y LEFT JOIN t3 ON y; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 43 err 1 -1 77 no such table: t1 +stmt 77 ok +stmt 107 err 1 -1 141 no such table: t2 +stmt 141 ok +stmt 167 err 1 -1 201 no such table: t3 +stmt 201 err 1 -1 238 no such table: main.t2 +stmt 238 err 1 -1 302 no such table: t1 +==== join-21.10 + + DROP TABLE t0; + DROP TABLE t1; + CREATE TABLE t0(aa); + CREATE TABLE t1(bb); + INSERT INTO t0(aa) VALUES (1); + INSERT INTO t1(bb) VALUES (1); + SELECT 11, * FROM t1 LEFT JOIN t0 WHERE aa ISNULL; + SELECT 12, * FROM t1 LEFT JOIN t0 WHERE +aa ISNULL; + SELECT 13, * FROM t1 LEFT JOIN t0 ON aa ISNULL; + SELECT 14, * FROM t1 LEFT JOIN t0 ON +aa ISNULL; + CREATE INDEX i0 ON t0(aa) WHERE aa ISNULL; + SELECT 21, * FROM t1 LEFT JOIN t0 WHERE aa ISNULL; + SELECT 22, * FROM t1 LEFT JOIN t0 WHERE +aa ISNULL; + SELECT 23, * FROM t1 LEFT JOIN t0 ON aa ISNULL; + SELECT 24, * FROM t1 LEFT JOIN t0 ON +aa ISNULL; +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 err 1 -1 34 no such table: t1 +stmt 34 ok +stmt 57 ok +stmt 80 err 1 -1 113 no such table: t0 +stmt 113 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 199 no such table: t1 +stmt 199 err 1 -1 253 no such table: t1 +stmt 253 err 1 -1 303 no such table: t1 +stmt 303 err 1 -1 354 no such table: t1 +stmt 354 err 1 -1 399 no such table: main.t0 +stmt 399 err 1 -1 452 no such table: t1 +stmt 452 err 1 -1 506 no such table: t1 +stmt 506 err 1 -1 556 no such table: t1 +stmt 556 err 1 -1 607 no such table: t1 +==== join-22.10 + + CREATE TABLE t0(a, b); + CREATE INDEX t0a ON t0(a); + INSERT INTO t0 VALUES(10,10),(10,11),(10,12); + SELECT DISTINCT c FROM t0 LEFT JOIN (SELECT a+1 AS c FROM t0) ORDER BY c ; +---- +stmt 0 ok +stmt 25 err 1 -1 54 no such table: main.t0 +stmt 54 err 1 -1 102 no such table: t0 +stmt 102 err 1 -1 179 no such table: t0 +==== join-23.10 + + CREATE TABLE t0(c0); + INSERT INTO t0(c0) VALUES(123); + CREATE VIEW v0(c0) AS SELECT 0 GROUP BY 1; + SELECT t0.c0, v0.c0, vt0.name + FROM v0, t0 LEFT JOIN pragma_table_info('t0') AS vt0 + ON vt0.name LIKE 'c0' + WHERE v0.c0 == 0; +---- +stmt 0 ok +stmt 25 err 1 -1 61 no such table: t0 +stmt 61 ok +stmt 108 err 1 -1 252 no such table: v0 +==== join-23.21 + + SELECT a.value, b.value FROM b LEFT JOIN a ON a.value = b.value; +---- +stmt 0 err 1 -1 69 no such table: b +==== join-24.1 + + CREATE TABLE t1(a PRIMARY KEY, x); + CREATE TABLE t2(b INT); + CREATE INDEX t1aa ON t1(a, a); + + INSERT INTO t1 VALUES('abc', 'def'); + INSERT INTO t2 VALUES(1); +---- +stmt 0 ok +stmt 37 ok +stmt 63 err 1 -1 96 no such table: main.t1 +stmt 96 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 164 no such table: t2 +==== join-24.2 + + SELECT * FROM t2 JOIN t1 WHERE a='abc' AND x='def'; +---- +stmt 0 err 1 -1 54 no such table: t2 +==== join-24.3 + + SELECT * FROM t2 JOIN t1 WHERE a='abc' AND x='abc'; +---- +stmt 0 err 1 -1 54 no such table: t2 +==== join-24.2.dup1 + + SELECT * FROM t2 LEFT JOIN t1 ON a=0 WHERE (x='x' OR x IS NULL); +---- +stmt 0 err 1 -1 67 no such table: t2 +==== join-25.1 + + CREATE TABLE t0(c0 INT); + CREATE VIEW v0 AS SELECT (NULL AND 5) as c0 FROM t0; + INSERT INTO t0(c0) VALUES (NULL); + SELECT count(*) FROM v0 LEFT JOIN t0 ON v0.c0; +---- +stmt 0 ok +stmt 27 ok +stmt 82 err 1 -1 118 no such table: t0 +stmt 118 err 1 -1 168 no such table: v0 +==== join-26.1 + + CREATE TABLE t4(a,b); + CREATE TABLE t5(a,c); + CREATE TABLE t6(a,d); + SELECT * FROM t5 JOIN ((t4 JOIN (t5 JOIN t6)) t7); +---- +stmt 0 ok +stmt 24 ok +stmt 48 ok +stmt 72 err 1 -1 125 no such table: t5 +==== join-27.1 + + CREATE TABLE t1(a INT,b INT,c INT); INSERT INTO t1 VALUES(NULL,NULL,NULL); + CREATE TABLE t2(d INT,e INT); INSERT INTO t2 VALUES(NULL,NULL); + CREATE INDEX x2 ON t1(c,b); + CREATE TABLE t3(x INT); INSERT INTO t3 VALUES(NULL); +---- +stmt 0 ok +stmt 38 err 1 -1 78 no such table: t1 +stmt 78 ok +stmt 110 err 1 -1 151 no such table: t2 +stmt 151 err 1 -1 181 no such table: main.t1 +stmt 181 ok +stmt 207 err 1 -1 249 no such table: t3 +==== join-27.2 + + WITH t99(b) AS MATERIALIZED ( + SELECT b FROM t2 LEFT JOIN t1 ON c IN (SELECT x FROM t3) + ) + SELECT 5 FROM t2 JOIN t99 ON b IN (1,2,3); +---- +stmt 0 err 1 -1 142 no such table: t2 +==== join-27.3 + + WITH t99(b) AS NOT MATERIALIZED ( + SELECT b FROM t2 LEFT JOIN t1 ON c IN (SELECT x FROM t3) + ) + SELECT 5 FROM t2 JOIN t99 ON b IN (1,2,3); +---- +stmt 0 err 1 -1 146 no such table: t2 +==== join-27.4 + + WITH t99(b) AS (SELECT b FROM t2 LEFT JOIN t1 ON c IN (SELECT x FROM t3)) + SELECT 5 FROM t2 JOIN t99 ON b IN (1,2,3); +---- +stmt 0 err 1 -1 121 no such table: t2 +==== join-27.5 + + SELECT 5 + FROM t2 JOIN ( + SELECT b FROM t2 LEFT JOIN t1 ON c IN (SELECT x FROM t3) + ) AS t99 ON b IN (1,2,3); +---- +stmt 0 err 1 -1 124 no such table: t2 +==== join-27.6 + + INSERT INTO t1 VALUES(3,4,NULL); + INSERT INTO t2 VALUES(1,2); + WITH t99(b) AS ( + SELECT coalesce(b,3) FROM t2 AS x LEFT JOIN t1 ON c IN (SELECT x FROM t3) + ) + SELECT d, e, b FROM t2 JOIN t99 ON b IN (1,2,3) ORDER BY +d; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 65 no such table: t2 +stmt 65 err 1 -1 229 no such table: t2 +==== join-27.7 + + SELECT d, e, b2 + FROM t2 + JOIN (SELECT coalesce(b,3) AS b2 FROM t2 AS x LEFT JOIN t1 + ON c IN (SELECT x FROM t3)) AS t99 + ON b2 IN (1,2,3) ORDER BY +d; +---- +stmt 0 err 1 -1 192 no such table: t2 +==== join-27.8 + + DELETE FROM t1; + DELETE FROM t2 WHERE d IS NOT NULL; + DELETE FROM t3; + SELECT * FROM t2 JOIN (SELECT b FROM t2 LEFT JOIN t1 + ON c IN (SELECT x FROM t3)) AS t99 ON b IN (1,2,3); +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 56 no such table: t2 +stmt 56 err 1 -1 74 no such table: t3 +stmt 74 err 1 -1 204 no such table: t2 +==== join-27.9 + + DELETE FROM t1; + DELETE FROM t2; + DELETE FROM t3; + INSERT INTO t1 VALUES(4,3,5); + INSERT INTO t2 VALUES(1,2); + INSERT INTO t3 VALUES(5); + SELECT * FROM t2 JOIN (SELECT b FROM t2 LEFT JOIN t1 + ON c IN (SELECT x FROM t3)) AS t99 ON b IS NULL; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 36 no such table: t2 +stmt 36 err 1 -1 54 no such table: t3 +stmt 54 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 116 no such table: t2 +stmt 116 err 1 -1 144 no such table: t3 +stmt 144 err 1 -1 271 no such table: t2 +==== join-27.10 + + WITH t99(b) AS ( + SELECT b FROM t2 AS x LEFT JOIN t1 ON c IN (SELECT x FROM t3) + ) + SELECT d, e, b FROM t2 JOIN t99 ON b IS NULL; +---- +stmt 0 err 1 -1 137 no such table: t2 +==== join-28.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT, c INT); + CREATE TABLE t2(d INTEGER PRIMARY KEY, e INT); + CREATE VIEW t3(a,b,c,d,e) AS SELECT * FROM t1 LEFT JOIN t2 ON d=c; + CREATE TABLE t4(x INT, y INT); + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t2 VALUES(1,5); + INSERT INTO t4 VALUES(1,4); + SELECT a, b, y FROM t4 JOIN t3 ON a=x; +---- +stmt 0 ok +stmt 56 ok +stmt 105 ok +stmt 174 ok +stmt 207 err 1 -1 239 no such table: t1 +stmt 239 err 1 -1 269 no such table: t2 +stmt 269 err 1 -1 299 no such table: t4 +stmt 299 err 1 -1 340 no such table: t4 +==== join-29.1 + + CREATE TABLE t0(a INT); INSERT INTO t0(a) VALUES (1); + CREATE TABLE t1(b INT); INSERT INTO t1(b) VALUES (2); + CREATE VIEW v2(c) AS SELECT 3 FROM t1; + SELECT * FROM t1 JOIN v2 ON 0 FULL OUTER JOIN t0 ON true; +---- +stmt 0 ok +stmt 26 err 1 -1 56 no such table: t0 +stmt 56 ok +stmt 82 err 1 -1 112 no such table: t1 +stmt 112 ok +stmt 153 err 1 -1 217 no such table: t1 +==== join-29.2 + + SELECT * FROM t1 JOIN v2 ON 1=0 FULL OUTER JOIN t0 ON true; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== join-29.3 + + SELECT * FROM t1 JOIN v2 ON false FULL OUTER JOIN t0 ON true; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== join-30.1 + + CREATE TABLE t0(z INT); INSERT INTO t0 VALUES(1),(2); + CREATE TABLE t1(a INT); INSERT INTO t1 VALUES(1); + CREATE TABLE t2(b INT); INSERT INTO t2 VALUES(2); + CREATE TABLE t3(c INT, d INT); INSERT INTO t3 VALUES(3,4); + CREATE TABLE t4(e INT); INSERT INTO t4 VALUES(5); + CREATE VIEW v5(x,y) AS SELECT c, d FROM t3 LEFT JOIN t4 ON false; +---- +stmt 0 ok +stmt 26 err 1 -1 64 no such table: t0 +stmt 64 ok +stmt 90 err 1 -1 124 no such table: t1 +stmt 124 ok +stmt 150 err 1 -1 184 no such table: t2 +stmt 184 ok +stmt 217 err 1 -1 246 no such table: t3 +stmt 246 ok +stmt 272 err 1 -1 306 no such table: t4 +stmt 306 ok +==== join-30.2 + + SELECT DISTINCT a, b + FROM t1 RIGHT JOIN t2 ON a=b LEFT JOIN v5 ON false + WHERE x <= y; +---- +stmt 0 err 1 -1 95 no such table: t1 +==== join-30.3 + + SELECT DISTINCT a, b + FROM t0 JOIN t1 ON z=a RIGHT JOIN t2 ON a=b LEFT JOIN v5 ON false + WHERE x <= y; +---- +stmt 0 err 1 -1 110 no such table: t0 +==== join-31.1 + + CREATE TABLE t1(c0 INT , c1 INT); INSERT INTO t1(c0, c1) VALUES(NULL,11); + CREATE TABLE t2(c0 INT NOT NULL); + CREATE TABLE t2n(c0 INT); + CREATE TABLE t3(x INT); INSERT INTO t3(x) VALUES(3); + CREATE TABLE t4(y INT); INSERT INTO t4(y) VALUES(4); + CREATE TABLE t5(c0 INT, x INT); INSERT INTO t5 VALUES(NULL, 5); +---- +stmt 0 ok +stmt 36 err 1 -1 76 no such table: t1 +stmt 76 ok +stmt 112 ok +stmt 140 ok +stmt 166 err 1 -1 205 no such table: t3 +stmt 205 ok +stmt 231 err 1 -1 270 no such table: t4 +stmt 270 ok +stmt 304 err 1 -1 338 no such table: t5 +==== join-31.2 + + SELECT * FROM t2 RIGHT JOIN t3 ON true LEFT JOIN t1 USING(c0); +---- +stmt 0 err 1 -1 65 no such table: t2 +==== join-31.3 + + SELECT * FROM t2 RIGHT JOIN t3 ON true NATURAL LEFT JOIN t1; +---- +stmt 0 err 1 -1 63 no such table: t2 +==== join-31.4 + + SELECT * FROM t2n RIGHT JOIN t3 ON true LEFT JOIN t1 USING(c0); +---- +stmt 0 err 1 -1 66 no such table: t2n +==== join-31.5 + + SELECT * FROM t5 LEFT JOIN t1 USING(c0); +---- +stmt 0 err 1 -1 43 no such table: t5 +==== join-31.6 + + SELECT * FROM t3 LEFT JOIN t2 ON true LEFT JOIN t1 USING(c0); +---- +stmt 0 err 1 -1 64 no such table: t3 +==== join-31.7 + + SELECT * FROM t3 LEFT JOIN t2 ON true NATURAL LEFT JOIN t1; +---- +stmt 0 err 1 -1 62 no such table: t3 +==== join-31.8 + + SELECT * FROM t3 LEFT JOIN t2 ON true JOIN t4 ON true NATURAL LEFT JOIN t1; +---- +stmt 0 err 1 -1 78 no such table: t3 +==== join-32.1 + + CREATE TABLE t0(w INT); + CREATE TABLE t1(x INT); + CREATE TABLE t2(y INT UNIQUE); + CREATE VIEW v0(z) AS SELECT CAST(x AS INT) FROM t1 LEFT JOIN t2 ON true; + INSERT INTO t1(x) VALUES(123); + INSERT INTO t2(y) VALUES(NULL); +---- +stmt 0 ok +stmt 26 ok +stmt 52 ok +stmt 85 ok +stmt 160 err 1 -1 193 no such table: t1 +stmt 193 err 1 -1 227 no such table: t2 +==== join-32.2 + + SELECT * + FROM t0 JOIN v0 ON w=z + RIGHT JOIN t1 ON true + INNER JOIN t2 ON y IS z; +---- +stmt 0 err 1 -1 103 no such table: t0 +==== join-32.3 + + SELECT * + FROM t0 JOIN v0 ON w=z + RIGHT JOIN t1 ON true + INNER JOIN t2 ON +y IS z; +---- +stmt 0 err 1 -1 104 no such table: t0 +==== join-33.1 + + CREATE TABLE t1(a1 INTEGER PRIMARY KEY, b1); + CREATE TABLE t2(a2 INTEGER PRIMARY KEY, b2); + CREATE TABLE t3(a3 INTEGER PRIMARY KEY, b3); + CREATE TABLE t4(a4 INTEGER PRIMARY KEY, b4); + INSERT INTO t1 VALUES(1,11),(2,12),(3,13), (5,15); + INSERT INTO t2 VALUES(1,21), (3,23),(4,24),(5,25); + INSERT INTO t3 VALUES (2,32),(3,33), (5,35); + INSERT INTO t4 VALUES(1,41),(2,42), (4,44),(5,45); + CREATE VIEW vchain AS + SELECT a1, b1, b2, b3, b4 + FROM t1 LEFT JOIN t2 ON a1=a2 + LEFT JOIN t3 ON a2=a3 + LEFT JOIN t4 ON a3=a4; +---- +stmt 0 ok +stmt 47 ok +stmt 94 ok +stmt 141 ok +stmt 188 err 1 -1 247 no such table: t1 +stmt 247 err 1 -1 306 no such table: t2 +stmt 306 err 1 -1 365 no such table: t3 +stmt 365 err 1 -1 424 no such table: t4 +stmt 424 ok +==== join-33.2 + + SELECT a1 FROM vchain ORDER BY a1; +---- +stmt 0 err 1 -1 37 no such table: vchain +==== join-33.3 + + SELECT a1, b2 FROM vchain ORDER BY a1; +---- +stmt 0 err 1 -1 41 no such table: vchain diff --git a/parser/testdata/join2.metadata.json b/parser/testdata/join2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/join2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/join2.test b/parser/testdata/join2.test new file mode 100644 index 0000000..3d77b21 --- /dev/null +++ b/parser/testdata/join2.test @@ -0,0 +1,440 @@ +==== join2-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,11); + INSERT INTO t1 VALUES(2,22); + INSERT INTO t1 VALUES(3,33); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 59 no such table: t1 +stmt 59 err 1 -1 92 no such table: t1 +stmt 92 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 147 no such table: t1 +==== join2-1.2 + + CREATE TABLE t2(b,c); + INSERT INTO t2 VALUES(11,111); + INSERT INTO t2 VALUES(33,333); + INSERT INTO t2 VALUES(44,444); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 26 err 1 -1 61 no such table: t2 +stmt 61 err 1 -1 96 no such table: t2 +stmt 96 err 1 -1 131 no such table: t2 +stmt 131 err 1 -1 153 no such table: t2 +==== join2-1.3 + + CREATE TABLE t3(c,d); + INSERT INTO t3 VALUES(111,1111); + INSERT INTO t3 VALUES(444,4444); + INSERT INTO t3 VALUES(555,5555); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 26 err 1 -1 63 no such table: t3 +stmt 63 err 1 -1 100 no such table: t3 +stmt 100 err 1 -1 137 no such table: t3 +stmt 137 err 1 -1 159 no such table: t3 +==== join2-1.4 + + SELECT * FROM + t1 NATURAL JOIN t2 NATURAL JOIN t3 +---- +stmt 0 err 1 -1 60 no such table: t1 +==== join2-1.5 + + SELECT * FROM + t1 NATURAL JOIN t2 NATURAL LEFT OUTER JOIN t3 +---- +stmt 0 err 1 -1 71 no such table: t1 +==== join2-1.6 + + SELECT * FROM + t1 NATURAL LEFT OUTER JOIN t2 NATURAL JOIN t3 +---- +stmt 0 err 1 -1 71 no such table: t1 +==== join2-1.6-rj + + SELECT * FROM + t2 NATURAL RIGHT OUTER JOIN t1 NATURAL JOIN t3 +---- +stmt 0 err 1 -1 72 no such table: t2 +==== join2-1.7 + + SELECT * FROM + t1 NATURAL LEFT OUTER JOIN (t2 NATURAL JOIN t3) +---- +stmt 0 err 1 -1 77 no such table: t1 +==== join2-1.7-rj + + SELECT a, b, c, d FROM + t2 NATURAL JOIN t3 NATURAL RIGHT JOIN t1 +---- +stmt 0 err 1 -1 79 no such table: t2 +==== 2.0 + + CREATE TABLE aa(a); + CREATE TABLE bb(b); + CREATE TABLE cc(c); + INSERT INTO aa VALUES('one'); + INSERT INTO bb VALUES('one'); + INSERT INTO cc VALUES('one'); +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +stmt 66 err 1 -1 98 no such table: aa +stmt 98 err 1 -1 130 no such table: bb +stmt 130 err 1 -1 162 no such table: cc +==== 2.1 + + SELECT * FROM aa LEFT JOIN cc ON (a=b) JOIN bb ON (b=coalesce(c,1)); +---- +stmt 0 err 1 -1 71 no such table: aa +==== 2.1b + + SELECT * FROM aa RIGHT JOIN cc ON (a=b) JOIN bb ON (b=coalesce(c,1)); +---- +stmt 0 err 1 -1 72 no such table: aa +==== 2.2 + + SELECT * FROM aa JOIN cc ON (a=b) JOIN bb ON (b=c); +---- +stmt 0 err 1 -1 54 no such table: aa +==== 3.0 + + CREATE TABLE t1(k1 INTEGER PRIMARY KEY, k2, k3); + CREATE TABLE t2(k2 INTEGER PRIMARY KEY, v2); + + -- Prior to this problem being fixed, table t3_2 would be omitted from + -- the join queries below, but if t3_1 were used in its place it would + -- not. + CREATE TABLE t3_1(k3 PRIMARY KEY, v3) WITHOUT ROWID; + CREATE TABLE t3_2(v3, k3 PRIMARY KEY) WITHOUT ROWID; +---- +stmt 0 ok +stmt 51 ok +stmt 98 ok +stmt 310 ok +==== 4.0 + + CREATE TABLE c1(k INTEGER PRIMARY KEY, v1); + CREATE TABLE c2(k INTEGER PRIMARY KEY, v2); + CREATE TABLE c3(k INTEGER PRIMARY KEY, v3); + + INSERT INTO c1 VALUES(1, 2); + INSERT INTO c2 VALUES(2, 3); + INSERT INTO c3 VALUES(3, 'v3'); + + INSERT INTO c1 VALUES(111, 1112); + INSERT INTO c2 VALUES(112, 1113); + INSERT INTO c3 VALUES(113, 'v1113'); +---- +stmt 0 ok +stmt 46 ok +stmt 92 ok +stmt 138 err 1 -1 170 no such table: c1 +stmt 170 err 1 -1 201 no such table: c2 +stmt 201 err 1 -1 235 no such table: c3 +stmt 235 err 1 -1 272 no such table: c1 +stmt 272 err 1 -1 308 no such table: c2 +stmt 308 err 1 -1 347 no such table: c3 +==== 4.1.1 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v2); +---- +stmt 0 err 1 -1 77 no such table: c1 +==== 4.1.2 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1); +---- +stmt 0 err 1 -1 79 no such table: c1 +==== 4.1.3 + + SELECT DISTINCT v1, v3 FROM c1 LEFT JOIN c2 LEFT JOIN c3 ON (c3.k=v1+1); +---- +stmt 0 err 1 -1 75 no such table: c1 +==== 4.1.4 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 LEFT JOIN c3 ON (c3.k=v1+1); +---- +stmt 0 err 1 -1 66 no such table: c1 +==== 4.2.0 + + DROP TABLE c1; + DROP TABLE c2; + DROP TABLE c3; + CREATE TABLE c1(k UNIQUE, v1); + CREATE TABLE c2(k UNIQUE, v2); + CREATE TABLE c3(k UNIQUE, v3); + + INSERT INTO c1 VALUES(1, 2); + INSERT INTO c2 VALUES(2, 3); + INSERT INTO c3 VALUES(3, 'v3'); + + INSERT INTO c1 VALUES(111, 1112); + INSERT INTO c2 VALUES(112, 1113); + INSERT INTO c3 VALUES(113, 'v1113'); +---- +stmt 0 err 1 -1 17 no such table: c1 +stmt 17 err 1 -1 34 no such table: c2 +stmt 34 err 1 -1 51 no such table: c3 +stmt 51 ok +stmt 84 ok +stmt 117 ok +stmt 150 err 1 -1 182 no such table: c1 +stmt 182 err 1 -1 213 no such table: c2 +stmt 213 err 1 -1 247 no such table: c3 +stmt 247 err 1 -1 284 no such table: c1 +stmt 284 err 1 -1 320 no such table: c2 +stmt 320 err 1 -1 359 no such table: c3 +==== 4.2.1 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v2); +---- +stmt 0 err 1 -1 77 no such table: c1 +==== 4.2.2 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1); +---- +stmt 0 err 1 -1 79 no such table: c1 +==== 4.2.3 + + SELECT DISTINCT v1, v3 FROM c1 LEFT JOIN c2 LEFT JOIN c3 ON (c3.k=v1+1); +---- +stmt 0 err 1 -1 75 no such table: c1 +==== 4.2.4 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 LEFT JOIN c3 ON (c3.k=v1+1); +---- +stmt 0 err 1 -1 66 no such table: c1 +==== 4.3.0 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(x PRIMARY KEY) WITHOUT ROWID; + CREATE TABLE t2(x); + SELECT a.x + FROM t1 AS a + LEFT JOIN t1 AS b ON (a.x=b.x) + LEFT JOIN t2 AS c ON (a.x=c.x); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 102 ok +stmt 124 err 1 -1 225 no such table: t1 +==== 4.3.1 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<10) + INSERT INTO t1(x) SELECT x FROM c; + INSERT INTO t2(x) SELECT x+9 FROM t1; + SELECT a.x, c.x + FROM t1 AS a + LEFT JOIN t1 AS b ON (a.x=b.x) + LEFT JOIN t2 AS c ON (a.x=c.x); +---- +stmt 0 err 1 -1 115 no such table: t1 +stmt 115 err 1 -1 155 no such table: t2 +stmt 155 err 1 -1 261 no such table: t1 +==== 5.0 + + CREATE TABLE s1 (a INTEGER PRIMARY KEY); + CREATE TABLE s2 (a INTEGER PRIMARY KEY); + CREATE TABLE s3 (a INTEGER); + CREATE UNIQUE INDEX ndx on s3(a); +---- +stmt 0 ok +stmt 43 ok +stmt 86 ok +stmt 117 err 1 -1 153 no such table: main.s3 +==== 6.0 + + CREATE TABLE u1(a INTEGER PRIMARY KEY, b, c); + CREATE TABLE u2(a INTEGER PRIMARY KEY, b, c); + CREATE INDEX u1ab ON u1(b, c); +---- +stmt 0 ok +stmt 48 ok +stmt 96 err 1 -1 129 no such table: main.u1 +==== 7.0 + + CREATE TABLE t1(a,b); INSERT INTO t1 VALUES(1,2),(3,4),(5,6); + CREATE TABLE t2(c,d); INSERT INTO t2 VALUES(2,4),(3,6); + CREATE TABLE t3(x); INSERT INTO t3 VALUES(9); + CREATE VIEW test AS + SELECT *, 'x' + FROM t1 LEFT JOIN (SELECT * FROM t2, t3) ON (c=b AND x=9) + WHERE c IS NULL; + SELECT * FROM test; +---- +stmt 0 ok +stmt 24 err 1 -1 65 no such table: t1 +stmt 65 ok +stmt 89 err 1 -1 124 no such table: t2 +stmt 124 ok +stmt 146 err 1 -1 175 no such table: t3 +stmt 175 ok +stmt 302 err 1 -1 324 no such table: test +==== 8.0 + + CREATE TABLE t0(c0); + CREATE TABLE t1(c0); +---- +stmt 0 ok +stmt 23 ok +==== 8.1 + + SELECT * FROM t0 LEFT JOIN t1 + WHERE (t1.c0 BETWEEN 0 AND 0) > ('' AND t0.c0); +---- +stmt 0 err 1 -1 83 no such table: t0 +==== 9.0 + + CREATE TABLE t0(c0 INT); + CREATE VIEW v0(c0) AS SELECT CAST(t0.c0 AS INTEGER) FROM t0; + INSERT INTO t0(c0) VALUES (0); +---- +stmt 0 ok +stmt 27 ok +stmt 90 err 1 -1 123 no such table: t0 +==== 9.1 + + SELECT typeof(c0), c0 FROM v0 WHERE c0>='0' +---- +stmt 0 err 1 -1 47 no such table: v0 +==== 9.2 + + SELECT * FROM t0, v0 WHERE v0.c0 >= '0'; +---- +stmt 0 err 1 -1 43 no such table: t0 +==== 9.3 + + SELECT * FROM t0 LEFT JOIN v0 WHERE v0.c0 >= '0'; +---- +stmt 0 err 1 -1 52 no such table: t0 +==== 9.4 + + SELECT * FROM t0 LEFT JOIN v0 ON v0.c0 >= '0'; +---- +stmt 0 err 1 -1 49 no such table: t0 +==== 9.5 + + SELECT * FROM t0 LEFT JOIN v0 ON v0.c0 >= '0' WHERE TRUE + UNION SELECT 0,0 WHERE 0; +---- +stmt 0 err 1 -1 88 no such table: t0 +==== 9.10 + + CREATE TABLE t1 (aaa); + INSERT INTO t1 VALUES(23456); + CREATE TABLE t2(bbb); + CREATE VIEW v2(ccc) AS SELECT bbb IS 1234 FROM t2; + SELECT ccc, ccc IS NULL AS ddd FROM t1 LEFT JOIN v2; +---- +stmt 0 ok +stmt 25 err 1 -1 57 no such table: t1 +stmt 57 ok +stmt 81 ok +stmt 134 err 1 -1 189 no such table: t1 +==== 9.11 + + SELECT ccc, ccc IS NULL AS ddd FROM t1 LEFT JOIN v2; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 10.1 + + CREATE TABLE t1 (x INTEGER); + INSERT INTO t1 VALUES(1); -- Some true value + CREATE TABLE t2 (z TEXT); + INSERT INTO t2 VALUES('some value'); + CREATE TABLE t3(w TEXT); + INSERT INTO t3 VALUES('some other value'); +---- +stmt 0 ok +stmt 31 err 1 -1 59 no such table: t1 +stmt 59 ok +stmt 108 err 1 -1 147 no such table: t2 +stmt 147 ok +stmt 174 err 1 -1 219 no such table: t3 +==== 10.2 + + SELECT ( + SELECT 1 FROM t2 LEFT JOIN (SELECT x AS v FROM t3) ON 500=v WHERE (v OR FALSE) + ) FROM t1; +---- +stmt 0 err 1 -1 107 no such table: t1 +==== 10.3 + + SELECT ( + SELECT 1 FROM t2 LEFT JOIN (SELECT x AS v FROM t3) ON 500=v WHERE (v) + ) FROM t1; +---- +stmt 0 err 1 -1 98 no such table: t1 +==== 10.4 + + SELECT ( + SELECT 1 FROM t2 LEFT JOIN (SELECT x AS v FROM t3) ON 500=v WHERE (v OR FALSE) + ) FROM t1; +---- +stmt 0 err 1 -1 107 no such table: t1 +==== 11.1 + + DROP TABLE t1; + DROP TABLE t2; + DROP TABLE t3; + CREATE TABLE t1(x TEXT, y INTEGER); + INSERT INTO t1(x,y) VALUES(NULL,-2),(NULL,1),('0',2); + CREATE TABLE t2(z INTEGER); + INSERT INTO t2(z) VALUES(2),(-2); + CREATE VIEW t3 AS SELECT z, (SELECT count(*) FROM t1) AS w FROM t2; + SELECT * FROM t1 LEFT JOIN t3 ON y=z; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 err 1 -1 51 no such table: t3 +stmt 51 ok +stmt 89 err 1 -1 145 no such table: t1 +stmt 145 ok +stmt 175 err 1 -1 211 no such table: t2 +stmt 211 ok +stmt 281 err 1 -1 321 no such table: t1 +==== 12.1 + + DROP TABLE t1; + DROP TABLE t2; + DROP VIEW t3; + CREATE TABLE t1(a INTEGER PRIMARY KEY); + WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<100) + INSERT INTO t1(a) SELECT n FROM c; + CREATE VIEW t2(b) AS SELECT a FROM t1; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 err 1 -1 50 no such view: t3 +stmt 50 ok +stmt 92 err 1 -1 208 no such table: t1 +stmt 208 ok +==== 13.0 + + CREATE TABLE t1(a1 INTEGER PRIMARY KEY, b1 INT); + CREATE TABLE t2(c2 INT, d2 INTEGER PRIMARY KEY); + CREATE TABLE t3(e3 INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(33,0); + INSERT INTO t2 VALUES(33,1),(33,2); +---- +stmt 0 ok +stmt 51 ok +stmt 102 ok +stmt 145 err 1 -1 176 no such table: t1 +stmt 176 err 1 -1 214 no such table: t2 +==== 13.1 + + SELECT t1.a1, t2.d2 + FROM (t1 LEFT JOIN t3 ON t3.e3=t1.b1) JOIN t2 ON t2.c2=t1.a1 + WHERE t1.a1=33 + ORDER BY t2.d2 DESC; +---- +stmt 0 err 1 -1 129 no such table: t1 diff --git a/parser/testdata/join4.metadata.json b/parser/testdata/join4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/join4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/join4.test b/parser/testdata/join4.test new file mode 100644 index 0000000..835df02 --- /dev/null +++ b/parser/testdata/join4.test @@ -0,0 +1,30 @@ +==== join4-1.2 + + select * from t1 left outer join t2 on t1.a=t2.x and t2.z='ok' +---- +stmt 0 err 1 -1 68 no such table: t1 +==== join4-1.4 + + select * from t1 left outer join t2 on t1.a=t2.x and t2.z='ok' +---- +stmt 0 err 1 -1 68 no such table: t1 +==== join4-1.5 + + select * from t1 left outer join t2 on t1.a=t2.x where t2.z>='ok' +---- +stmt 0 err 1 -1 71 no such table: t1 +==== join4-1.4.dup1 + + select * from t1 left outer join t2 on t1.a=t2.x and t2.z>='ok' +---- +stmt 0 err 1 -1 69 no such table: t1 +==== join4-1.6 + + select * from t1 left outer join t2 on t1.a=t2.x where t2.z IN ('ok') +---- +stmt 0 err 1 -1 77 no such table: t1 +==== join4-1.7 + + select * from t1 left outer join t2 on t1.a=t2.x and t2.z IN ('ok') +---- +stmt 0 err 1 -1 75 no such table: t1 diff --git a/parser/testdata/join5.metadata.json b/parser/testdata/join5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/join5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/join5.test b/parser/testdata/join5.test new file mode 100644 index 0000000..800ef93 --- /dev/null +++ b/parser/testdata/join5.test @@ -0,0 +1,482 @@ +==== join5-1.1 + + BEGIN; + CREATE TABLE t1(a integer primary key, b integer, c integer); + CREATE TABLE t2(x integer primary key, y); + CREATE TABLE t3(p integer primary key, q); + INSERT INTO t3 VALUES(11,'t3-11'); + INSERT INTO t3 VALUES(12,'t3-12'); + INSERT INTO t2 VALUES(11,'t2-11'); + INSERT INTO t2 VALUES(12,'t2-12'); + INSERT INTO t1 VALUES(1, 5, 0); + INSERT INTO t1 VALUES(2, 11, 2); + INSERT INTO t1 VALUES(3, 12, 1); + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 77 ok +stmt 124 ok +stmt 171 err 1 -1 210 no such table: t3 +stmt 210 err 1 -1 249 no such table: t3 +stmt 249 err 1 -1 288 no such table: t2 +stmt 288 err 1 -1 327 no such table: t2 +stmt 327 err 1 -1 363 no such table: t1 +stmt 363 err 1 -1 400 no such table: t1 +stmt 400 err 1 -1 437 no such table: t1 +stmt 437 ok +==== join5-1.2 + + select * from t1 left join t2 on t1.b=t2.x and t1.c=1 +---- +stmt 0 err 1 -1 59 no such table: t1 +==== join5-1.3 + + select * from t1 left join t2 on t1.b=t2.x where t1.c=1 +---- +stmt 0 err 1 -1 61 no such table: t1 +==== join5-1.4 + + select * from t1 left join t2 on t1.b=t2.x and t1.c=1 + left join t3 on t1.b=t3.p and t1.c=2 +---- +stmt 0 err 1 -1 117 no such table: t1 +==== join5-1.5 + + select * from t1 left join t2 on t1.b=t2.x and t1.c=1 + left join t3 on t1.b=t3.p where t1.c=2 +---- +stmt 0 err 1 -1 119 no such table: t1 +==== join5-2.2 +SELECT * FROM xy LEFT JOIN ab ON 1 +---- +stmt 0 err 1 -1 35 no such table: xy +==== join5-2.3 +SELECT * FROM xy LEFT JOIN ab ON NULL +---- +stmt 0 err 1 -1 38 no such table: xy +==== join5-2.4 +SELECT * FROM xy LEFT JOIN ab ON 0 WHERE 0 +---- +stmt 0 err 1 -1 43 no such table: xy +==== join5-2.5 +SELECT * FROM xy LEFT JOIN ab ON 1 WHERE 0 +---- +stmt 0 err 1 -1 43 no such table: xy +==== join5-2.6 +SELECT * FROM xy LEFT JOIN ab ON NULL WHERE 0 +---- +stmt 0 err 1 -1 46 no such table: xy +==== join5-2.7 +SELECT * FROM xy LEFT JOIN ab ON 0 WHERE 1 +---- +stmt 0 err 1 -1 43 no such table: xy +==== join5-2.8 +SELECT * FROM xy LEFT JOIN ab ON 1 WHERE 1 +---- +stmt 0 err 1 -1 43 no such table: xy +==== join5-2.9 +SELECT * FROM xy LEFT JOIN ab ON NULL WHERE 1 +---- +stmt 0 err 1 -1 46 no such table: xy +==== join5-2.10 +SELECT * FROM xy LEFT JOIN ab ON 0 WHERE NULL +---- +stmt 0 err 1 -1 46 no such table: xy +==== join5-2.11 +SELECT * FROM xy LEFT JOIN ab ON 1 WHERE NULL +---- +stmt 0 err 1 -1 46 no such table: xy +==== join5-2.12 +SELECT * FROM xy LEFT JOIN ab ON NULL WHERE NULL +---- +stmt 0 err 1 -1 49 no such table: xy +==== join5-3.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + DROP TABLE IF EXISTS t3; + CREATE TABLE x1(a); + INSERT INTO x1 VALUES(1); + CREATE TABLE x2(b NOT NULL); + CREATE TABLE x3(c, d); + INSERT INTO x3 VALUES('a', NULL); + INSERT INTO x3 VALUES('b', NULL); + INSERT INTO x3 VALUES('c', NULL); + SELECT * FROM x1 LEFT JOIN x2 LEFT JOIN x3 ON x3.d = x2.b; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 ok +stmt 103 err 1 -1 131 no such table: x1 +stmt 131 ok +stmt 162 ok +stmt 187 err 1 -1 223 no such table: x3 +stmt 223 err 1 -1 259 no such table: x3 +stmt 259 err 1 -1 295 no such table: x3 +stmt 295 err 1 -1 356 no such table: x1 +==== join5-3.2 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + DROP TABLE IF EXISTS t3; + DROP TABLE IF EXISTS t4; + DROP TABLE IF EXISTS t5; + CREATE TABLE t1(x text NOT NULL, y text); + CREATE TABLE t2(u text NOT NULL, x text NOT NULL); + CREATE TABLE t3(w text NOT NULL, v text); + CREATE TABLE t4(w text NOT NULL, z text NOT NULL); + CREATE TABLE t5(z text NOT NULL, m text); + INSERT INTO t1 VALUES('f6d7661f-4efe-4c90-87b5-858e61cd178b',NULL); + INSERT INTO t1 VALUES('f6ea82c3-2cad-45ce-ae8f-3ddca4fb2f48',NULL); + INSERT INTO t1 VALUES('f6f47499-ecb4-474b-9a02-35be73c235e5',NULL); + INSERT INTO t1 VALUES('56f47499-ecb4-474b-9a02-35be73c235e5',NULL); + INSERT INTO t3 VALUES('007f2033-cb20-494c-b135-a1e4eb66130c', + 'f6d7661f-4efe-4c90-87b5-858e61cd178b'); + SELECT * + FROM t3 + INNER JOIN t1 ON t1.x= t3.v AND t1.y IS NULL + LEFT JOIN t4 ON t4.w = t3.w + LEFT JOIN t5 ON t5.z = t4.z + LEFT JOIN t2 ON t2.u = t5.m + LEFT JOIN t1 xyz ON xyz.y = t2.x; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 ok +stmt 108 ok +stmt 135 ok +stmt 179 ok +stmt 232 ok +stmt 276 ok +stmt 329 ok +stmt 373 err 1 -1 443 no such table: t1 +stmt 443 err 1 -1 513 no such table: t1 +stmt 513 err 1 -1 583 no such table: t1 +stmt 583 err 1 -1 653 no such table: t1 +stmt 653 err 1 -1 782 no such table: t3 +stmt 782 err 1 -1 1016 no such table: t3 +==== join5-3.3 + + DROP TABLE IF EXISTS x1; + DROP TABLE IF EXISTS x2; + DROP TABLE IF EXISTS x3; + CREATE TABLE x1(a); + INSERT INTO x1 VALUES(1); + CREATE TABLE x2(b NOT NULL); + CREATE TABLE x3(c, d); + INSERT INTO x3 VALUES('a', NULL); + INSERT INTO x3 VALUES('b', NULL); + INSERT INTO x3 VALUES('c', NULL); + SELECT * FROM x1 LEFT JOIN x2 JOIN x3 WHERE x3.d = x2.b; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 ok +stmt 103 err 1 -1 131 no such table: x1 +stmt 131 ok +stmt 162 ok +stmt 187 err 1 -1 223 no such table: x3 +stmt 223 err 1 -1 259 no such table: x3 +stmt 259 err 1 -1 295 no such table: x3 +stmt 295 err 1 -1 354 no such table: x1 +==== join5-4.1 + + SELECT * + FROM ( + SELECT 'apple' fruit + UNION ALL SELECT 'banana' + ) a + JOIN ( + SELECT 'apple' fruit + UNION ALL SELECT 'banana' + ) b ON a.fruit=b.fruit + LEFT JOIN ( + SELECT 1 isyellow + ) c ON b.fruit='banana'; +---- +stmt 0 ok +==== join5-4.2 + + SELECT * + FROM (SELECT 'apple' fruit UNION ALL SELECT 'banana') + LEFT JOIN (SELECT 1) ON fruit='banana'; +---- +stmt 0 ok +==== 5.0 + + CREATE TABLE y1(x, y, z); + INSERT INTO y1 VALUES(0, 0, 1); + CREATE TABLE y2(a); +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: y1 +stmt 62 ok +==== 5.1 + + SELECT count(z) FROM y1 LEFT JOIN y2 ON x GROUP BY y; +---- +stmt 0 err 1 -1 56 no such table: y1 +==== 5.2 + + SELECT count(z) FROM ( SELECT * FROM y1 ) LEFT JOIN y2 ON x GROUP BY y; +---- +stmt 0 err 1 -1 74 no such table: y1 +==== 5.3 + + CREATE VIEW v1 AS SELECT x, y, z FROM y1; + SELECT count(z) FROM v1 LEFT JOIN y2 ON x GROUP BY y; +---- +stmt 0 ok +stmt 44 err 1 -1 100 no such table: v1 +==== 5.4 + + SELECT count(z) FROM ( SELECT * FROM y1 ) LEFT JOIN y2 ON x +---- +stmt 0 err 1 -1 63 no such table: y1 +==== 5.5 + + SELECT * FROM ( SELECT * FROM y1 ) LEFT JOIN y2 ON x +---- +stmt 0 err 1 -1 56 no such table: y1 +==== 6.1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1); + + CREATE TABLE t2(y INTEGER PRIMARY KEY,a,b); + INSERT INTO t2 VALUES(1,2,3); + CREATE INDEX t2a ON t2(a); + CREATE INDEX t2b ON t2(b); +---- +stmt 0 ok +stmt 22 err 1 -1 51 no such table: t1 +stmt 51 ok +stmt 98 err 1 -1 130 no such table: t2 +stmt 130 err 1 -1 159 no such table: main.t2 +stmt 159 err 1 -1 189 no such table: main.t2 +==== 6.2 + + SELECT * FROM t1 LEFT JOIN t2 ON a=2 OR b=3 WHERE y IS NULL; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 6.3.1 + + CREATE TABLE t3(x); + INSERT INTO t3 VALUES(1); + CREATE TABLE t4(y, z); + SELECT ifnull(z, '!!!') FROM t3 LEFT JOIN t4 ON (x=y); +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: t3 +stmt 50 ok +stmt 75 err 1 -1 132 no such table: t3 +==== 6.3.2 + + CREATE INDEX t4i ON t4(y, ifnull(z, '!!!')); + SELECT ifnull(z, '!!!') FROM t3 LEFT JOIN t4 ON (x=y); +---- +stmt 0 err 1 -1 47 no such table: main.t4 +stmt 47 err 1 -1 104 no such table: t3 +==== 6.100 + + CREATE TABLE t1(aa, bb); + CREATE INDEX t1x1 on t1(abs(aa), abs(bb)); + INSERT INTO t1 VALUES(-2,-3),(+2,-3),(-2,+3),(+2,+3); + SELECT * FROM (t1) + WHERE ((abs(aa)=1 AND 1=2) OR abs(aa)=2) + AND abs(bb)=3 + ORDER BY +1, +2; +---- +stmt 0 ok +stmt 27 err 1 -1 72 no such table: main.t1 +stmt 72 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 232 no such table: t1 +==== 7.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1); +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: t1 +==== 7.1 + + CREATE TABLE t2(x, y, z); + CREATE INDEX t2xy ON t2(x, y); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<50000 + ) + INSERT INTO t2 SELECT i/10, i, NULL FROM s; + ANALYZE; +---- +stmt 0 ok +stmt 28 err 1 -1 61 no such table: main.t2 +stmt 61 err 1 -1 183 no such table: t2 +stmt 183 ok +==== 7.3 + + CREATE TABLE t3(x); + INSERT INTO t3(x) VALUES(1); + CREATE INDEX t3x ON t3(x); + + CREATE TABLE t4(x, y, z); + CREATE INDEX t4xy ON t4(x, y); + CREATE INDEX t4xz ON t4(x, z); + + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<50000) + INSERT INTO t4 SELECT i/10, i, i FROM s; + + ANALYZE; + UPDATE sqlite_stat1 SET stat='1000000 10 1' WHERE idx='t3x'; + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 22 err 1 -1 53 no such table: t3 +stmt 53 err 1 -1 82 no such table: main.t3 +stmt 82 ok +stmt 111 err 1 -1 144 no such table: main.t4 +stmt 144 err 1 -1 177 no such table: main.t4 +stmt 177 err 1 -1 290 no such table: t4 +stmt 290 ok +stmt 302 err 1 -1 365 no such table: sqlite_stat1 +stmt 365 ok +==== 8.0 + + CREATE TABLE t0 (c0, c1, PRIMARY KEY (c0, c1)); + CREATE TABLE t1 (c0); + + INSERT INTO t1 VALUES (2); + + INSERT INTO t0 VALUES(0, 10); + INSERT INTO t0 VALUES(1, 10); + INSERT INTO t0 VALUES(2, 10); + INSERT INTO t0 VALUES(3, 10); +---- +stmt 0 ok +stmt 50 ok +stmt 74 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 137 no such table: t0 +stmt 137 err 1 -1 169 no such table: t0 +stmt 169 err 1 -1 201 no such table: t0 +stmt 201 err 1 -1 233 no such table: t0 +==== 8.1 + + SELECT * FROM t0, t1 + WHERE (t0.c1 >= 1 OR t0.c1 < 1) AND t0.c0 IN (1, t1.c0) ORDER BY 1; +---- +stmt 0 err 1 -1 94 no such table: t0 +==== 9.1 + + CREATE TABLE t1(a ,b FLOAT); + INSERT INTO t1 VALUES(1,1); + CREATE INDEX t1x1 ON t1(a,b,a,a,a,a,a,a,a,a,a,b); + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat1 VALUES('t1','t1x1','648 324 81 81 81 81 81 81 81081 81 81 81'); + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 31 err 1 -1 61 no such table: t1 +stmt 61 err 1 -1 113 no such table: main.t1 +stmt 113 ok +stmt 138 err 1 -1 229 no such table: sqlite_stat1 +stmt 229 ok +==== 9.2 + + SELECT a FROM + (SELECT a FROM t1 NATURAL LEFT JOIN t1) NATURAL LEFT JOIN t1 + WHERE (rowid,1)<=(5,0); +---- +stmt 0 err 1 -1 111 no such table: t1 +==== 10.1 + + CREATE TABLE t1(x INT); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<20) + INSERT INTO t1(x) SELECT 0 FROM c; + CREATE INDEX t1x1 ON t1(x BETWEEN 0 AND 10, x); + ANALYZE; + DELETE FROM t1; + INSERT INTO t1 VALUES(0),(0); + CREATE VIEW v1 AS SELECT * FROM t1 NATURAL JOIN t1 WHERE (x BETWEEN 0 AND 10) OR true; + CREATE VIEW v2 AS SELECT * FROM v1 NATURAL JOIN v1; + CREATE VIEW v3 AS SELECT * FROM v2, v1 USING (x) GROUP BY x; + SELECT x FROM v3; +---- +stmt 0 ok +stmt 26 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 191 no such table: main.t1 +stmt 191 ok +stmt 202 err 1 -1 220 no such table: t1 +stmt 220 err 1 -1 252 no such table: t1 +stmt 252 ok +stmt 341 ok +stmt 395 ok +stmt 458 err 1 -1 478 no such table: v3 +==== 11.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); + CREATE TABLE t2(c INTEGER PRIMARY KEY, d INT); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<8) + INSERT INTO t1(a,b) SELECT x, 10*x FROM c; + INSERT INTO t2(c,d) SELECT b*2, 100*a FROM t1; + ANALYZE; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES + ('t1',NULL,150105),('t2',NULL,98747); + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 49 ok +stmt 98 err 1 -1 218 no such table: t1 +stmt 218 err 1 -1 267 no such table: t2 +stmt 267 ok +stmt 278 err 1 -1 306 no such table: sqlite_stat1 +stmt 306 err 1 -1 396 no such table: sqlite_stat1 +stmt 396 ok +==== 11.2 + + SELECT count(*) FROM t1 LEFT JOIN t2 ON c=b WHERE d IS NULL; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 11.3 + + SELECT count(*) FROM t1 LEFT JOIN t2 ON c=b WHERE d=100; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 11.4 + + SELECT count(*) FROM t1 LEFT JOIN t2 ON c=b WHERE d>=300; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== 12.1 + + CREATE TABLE t1(a INT, b INT, c INT); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b,c) SELECT x, x*1000, x*1000000 FROM c; + CREATE TABLE t2(b INT, x INT); + INSERT INTO t2(b,x) SELECT b, a FROM t1 WHERE a%3==0; + CREATE INDEX t2b ON t2(b); + CREATE TABLE t3(c INT, y INT); + INSERT INTO t3(c,y) SELECT c, a FROM t1 WHERE a%4==0; + CREATE INDEX t3c ON t3(c); + INSERT INTO t1(a,b,c) VALUES(200, 200000, NULL); + ANALYZE; +---- +stmt 0 ok +stmt 40 err 1 -1 179 no such table: t1 +stmt 179 ok +stmt 212 err 1 -1 268 no such table: t2 +stmt 268 err 1 -1 297 no such table: main.t2 +stmt 297 ok +stmt 330 err 1 -1 386 no such table: t3 +stmt 386 err 1 -1 415 no such table: main.t3 +stmt 415 err 1 -1 466 no such table: t1 +stmt 466 ok +==== 12.2 + + SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3 WHERE x>0 AND y>0 + ORDER BY +a; +---- +stmt 0 err 1 -1 84 no such table: t1 diff --git a/parser/testdata/join6.metadata.json b/parser/testdata/join6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/join6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/join6.test b/parser/testdata/join6.test new file mode 100644 index 0000000..a8d9c55 --- /dev/null +++ b/parser/testdata/join6.test @@ -0,0 +1,168 @@ +==== join6-1.1 + + CREATE TABLE t1(a); + CREATE TABLE t2(a); + CREATE TABLE t3(a,b); + INSERT INTO t1 VALUES(1); + INSERT INTO t3 VALUES(1,2); + + SELECT * FROM t1 LEFT JOIN t2 USING(a) LEFT JOIN t3 USING(a); +---- +stmt 0 ok +stmt 24 ok +stmt 48 ok +stmt 74 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 136 no such table: t3 +stmt 136 err 1 -1 203 no such table: t1 +==== join6-1.2 + + SELECT t1.a, t3.b + FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.a=t3.a; +---- +stmt 0 err 1 -1 90 no such table: t1 +==== join6-1.3 + + SELECT t1.a, t3.b + FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t1.a=t3.a; +---- +stmt 0 err 1 -1 89 no such table: t1 +==== join6-2.1 + + DROP TABLE t1; + DROP TABLE t2; + DROP TABLE t3; + + CREATE TABLE t1(x,y); + CREATE TABLE t2(y,z); + CREATE TABLE t3(x,z); + + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(3,4); + + INSERT INTO t2 VALUES(2,3); + INSERT INTO t2 VALUES(4,5); + + INSERT INTO t3 VALUES(1,3); + INSERT INTO t3 VALUES(3,5); + + SELECT * FROM t1 JOIN t2 USING (y) JOIN t3 USING(x); +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 57 no such table: t3 +stmt 57 ok +stmt 84 ok +stmt 110 ok +stmt 136 err 1 -1 169 no such table: t1 +stmt 169 err 1 -1 201 no such table: t1 +stmt 201 err 1 -1 234 no such table: t2 +stmt 234 err 1 -1 266 no such table: t2 +stmt 266 err 1 -1 299 no such table: t3 +stmt 299 err 1 -1 331 no such table: t3 +stmt 331 err 1 -1 389 no such table: t1 +==== join6-2.2 + + SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== join6-3.1 + + DROP TABLE t1; + DROP TABLE t2; + DROP TABLE t3; + + CREATE TABLE t1(a,x,y); + INSERT INTO t1 VALUES(1,91,92); + INSERT INTO t1 VALUES(2,93,94); + + CREATE TABLE t2(b,y,z); + INSERT INTO t2 VALUES(3,92,93); + INSERT INTO t2 VALUES(4,94,95); + + CREATE TABLE t3(c,x,z); + INSERT INTO t3 VALUES(5,91,93); + INSERT INTO t3 VALUES(6,99,95); + + SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 57 no such table: t3 +stmt 57 ok +stmt 86 err 1 -1 122 no such table: t1 +stmt 122 err 1 -1 158 no such table: t1 +stmt 158 ok +stmt 191 err 1 -1 227 no such table: t2 +stmt 227 err 1 -1 263 no such table: t2 +stmt 263 ok +stmt 296 err 1 -1 332 no such table: t3 +stmt 332 err 1 -1 368 no such table: t3 +stmt 368 err 1 -1 427 no such table: t1 +==== join6-3.2 + + SELECT * FROM t1 JOIN t2 NATURAL JOIN t3; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== join6-3.3 + + SELECT * FROM t1 JOIN t2 USING(y) NATURAL JOIN t3; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== join6-3.4 + + SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(x,z); +---- +stmt 0 err 1 -1 57 no such table: t1 +==== join6-3.5 + + SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(x); +---- +stmt 0 err 1 -1 55 no such table: t1 +==== join6-3.6 + + SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(z); +---- +stmt 0 err 1 -1 55 no such table: t1 +==== join6-4.1 + + SELECT * FROM + (SELECT 1 AS a, 91 AS x, 92 AS y UNION SELECT 2, 93, 94) + NATURAL JOIN t2 NATURAL JOIN t3 +---- +stmt 0 err 1 -1 128 no such table: t2 +==== join6-4.2 + + SELECT * FROM t1 NATURAL JOIN + (SELECT 3 AS b, 92 AS y, 93 AS z UNION SELECT 4, 94, 95) + NATURAL JOIN t3 +---- +stmt 0 err 1 -1 128 no such table: t1 +==== join6-4.3 + + SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN + (SELECT 5 AS c, 91 AS x, 93 AS z UNION SELECT 6, 99, 95) +---- +stmt 0 err 1 -1 119 no such table: t1 +==== join6-5.1 + + CREATE TABLE tx(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o PRIMARY KEY) + WITHOUT ROWID; + INSERT INTO tx VALUES( + 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + ); +---- +stmt 0 ok +stmt 93 err 1 -1 163 no such table: tx +==== joint6-5.2 + + SELECT o FROM tx NATURAL JOIN tx; +---- +stmt 0 err 1 -1 36 no such table: tx +==== join6-5.3 + + CREATE TABLE ty(a,Ñ,x6,x7,x8,Q,I,v,x1,L,E,x2,x3,x4,x5,s,g PRIMARY KEY,b,c) + WITHOUT ROWID; + SELECT a FROM ty NATURAL JOIN ty; +---- +stmt 0 ok +stmt 95 err 1 -1 131 no such table: ty diff --git a/parser/testdata/join7.metadata.json b/parser/testdata/join7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/join7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/join7.test b/parser/testdata/join7.test new file mode 100644 index 0000000..8344e96 --- /dev/null +++ b/parser/testdata/join7.test @@ -0,0 +1,163 @@ +==== join7-generated + + SELECT b, d FROM t1 FULL OUTER JOIN t2 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== join7-generated.dup1 + + SELECT a, c FROM t1 FULL OUTER JOIN t2 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== join7-generated.dup2 + + SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== join7-generated.dup3 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 69 no such table: t2 +==== join7-generated.dup4 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c + WHERE b=c + ORDER BY +b; +---- +stmt 0 err 1 -1 89 no such table: t2 +==== join7-generated.dup5 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c + WHERE b>0 + ORDER BY +b; +---- +stmt 0 err 1 -1 89 no such table: t2 +==== join7-generated.dup6 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c + WHERE b>0 OR b IS NULL + ORDER BY +b; +---- +stmt 0 err 1 -1 102 no such table: t2 +==== join7-generated.dup7 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c AND b>3 AND c>4 + ORDER BY coalesce(b,c,0); +---- +stmt 0 err 1 -1 103 no such table: t2 +==== join7-generated.dup8 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c AND b>3 WHERE c>4 + ORDER BY coalesce(b,c,0); +---- +stmt 0 err 1 -1 105 no such table: t2 +==== join7-generated.dup9 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c WHERE b>3 AND c>4 + ORDER BY coalesce(b,c,0); +---- +stmt 0 err 1 -1 105 no such table: t2 +==== join7-generated.dup10 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c WHERE b>3 OR c>4 + ORDER BY coalesce(b,c,0); +---- +stmt 0 err 1 -1 104 no such table: t2 +==== join7-generated.dup11 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c AND (b>3 OR c>4) + ORDER BY coalesce(b,c,0); +---- +stmt 0 err 1 -1 104 no such table: t2 +==== join7-generated.dup12 + + SELECT * FROM t1 RIGHT OUTER JOIN t2 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 61 no such table: t1 +==== join7-generated.dup13 + + SELECT t1.*, t2.* FROM t2 LEFT OUTER JOIN t1 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 69 no such table: t2 +==== join7-generated.dup14 + + SELECT * FROM dual JOIN t1 ON true RIGHT OUTER JOIN t2 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 79 no such table: dual +==== join7-generated.dup15 + + SELECT t1.*, t2.* + FROM t2 LEFT JOIN (dual JOIN t1 ON true) ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 90 no such table: t2 +==== join7-generated.dup16 + + SELECT * FROM dual CROSS JOIN t1 RIGHT OUTER JOIN t2 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 77 no such table: dual +==== join7-generated.dup17 + + SELECT dual.*, t1.*, t2.* + FROM t1 CROSS JOIN dual RIGHT OUTER JOIN t2 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 100 no such table: t1 +==== join7-generated.dup18 + + SELECT * FROM t1 LEFT OUTER JOIN t2 ON b=c ORDER BY +b; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== join7-generated.dup19 + + SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c AND a=1 ORDER BY +b; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== join7-generated.dup20 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c AND a=1 ORDER BY +b; +---- +stmt 0 err 1 -1 77 no such table: t2 +==== join7-generated.dup21 + + SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c WHERE a=1 ORDER BY +b; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== join7-generated.dup22 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c WHERE a=1 ORDER BY +b; +---- +stmt 0 err 1 -1 79 no such table: t2 +==== join7-generated.dup23 + + SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c + WHERE a=1 OR a IS NULL ORDER BY +b; +---- +stmt 0 err 1 -1 88 no such table: t1 +==== join7-generated.dup24 + + SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c + WHERE a=1 OR a IS NULL ORDER BY +b; +---- +stmt 0 err 1 -1 97 no such table: t2 +==== join7-generated.dup25 + + SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c WHERE a IS NULL ORDER BY +d; +---- +stmt 0 err 1 -1 76 no such table: t1 +==== join7-generated.dup26 + + SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c AND d<=0 ORDER BY +b, +d; +---- +stmt 0 err 1 -1 73 no such table: t1 +==== join7-generated.dup27 + + SELECT a, b, c, d + FROM t2 FULL OUTER JOIN t1 ON b=c AND d<=0 ORDER BY +b, +d; +---- +stmt 0 err 1 -1 88 no such table: t2 +==== join7-generated.dup28 + + SELECT a, b, c, d + FROM t2 FULL OUTER JOIN t1 ON b=c AND d<=0 + ORDER BY +b, +d LIMIT 2 OFFSET 2 +---- +stmt 0 err 1 -1 110 no such table: t2 diff --git a/parser/testdata/join8.metadata.json b/parser/testdata/join8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/join8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/join8.test b/parser/testdata/join8.test new file mode 100644 index 0000000..f6b845d --- /dev/null +++ b/parser/testdata/join8.test @@ -0,0 +1,992 @@ +==== join8-10 + + CREATE TABLE t1(a,b,c); + CREATE TABLE t2(x,y); + CREATE INDEX t2x ON t2(x); + SELECT avg(DISTINCT b) FROM (SELECT * FROM t2 LEFT RIGHT JOIN t1 ON c); +---- +stmt 0 ok +stmt 26 ok +stmt 50 err 1 -1 79 no such table: main.t2 +stmt 79 err 1 -1 153 no such table: t2 +==== join8-1000 + + CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT,b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s); + CREATE INDEX t1x1 ON t1(g+h,j,k); + CREATE INDEX t1x2 ON t1(b); + INSERT INTO t1 DEFAULT VALUES; +---- +stmt 0 ok +stmt 90 err 1 -1 126 no such table: main.t1 +stmt 126 err 1 -1 156 no such table: main.t1 +stmt 156 err 1 -1 189 no such table: t1 +==== join8-1010 + + SELECT a + FROM ( + SELECT a + FROM ( + SELECT a + FROM ( + SELECT a FROM t1 NATURAL LEFT JOIN t1 + WHERE (b, 2 ) IS ( SELECT 2 IN(2,2),2) + ) + NATURAL LEFT FULL JOIN t1 + WHERE ( rowid , 1 )<=(CASE 5 WHEN 619 THEN 841 ELSE 3374391096 END,0) + ORDER BY a ASC + ) + NATURAL LEFT JOIN t1 + WHERE (b, 2 ) IS ( SELECT 3 IN(3,3),3) + ) + NATURAL LEFT FULL JOIN t1 + WHERE ( rowid , 1 )<=(CASE 5 WHEN 619 THEN 841 ELSE 3374391096 END,0) + ORDER BY a ASC; +---- +stmt 0 err 1 -1 675 no such table: t1 +==== join8-2000 + + CREATE TABLE t1(a int, b int, c int); + INSERT INTO t1 VALUES(1,2,3),(4,5,6); + CREATE TABLE t2(d int, e int); + INSERT INTO t2 VALUES(3,333),(4,444); + CREATE TABLE t3(f int, g int); + PRAGMA automatic_index=off; +---- +stmt 0 ok +stmt 40 err 1 -1 80 no such table: t1 +stmt 80 ok +stmt 113 err 1 -1 153 no such table: t2 +stmt 153 ok +stmt 186 ok +==== join8-2010 + + SELECT * FROM t1 RIGHT JOIN t2 ON c=d JOIN t3 ON f=e; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== join8-3000 + + CREATE TABLE t1(id INTEGER PRIMARY KEY, a INT); + CREATE TABLE t2(id INTEGER PRIMARY KEY, b INT); + CREATE TABLE t3(id INTEGER PRIMARY KEY, c INT); + CREATE TABLE t4(id INTEGER PRIMARY KEY, d INT); + CREATE TABLE t5(id INTEGER PRIMARY KEY, e INT); + CREATE TABLE t6(id INTEGER PRIMARY KEY, f INT); + CREATE TABLE t7(id INTEGER PRIMARY KEY, g INT); + CREATE TABLE t8(id INTEGER PRIMARY KEY, h INT); + INSERT INTO t1 SELECT value, 1 FROM generate_series(1,256) WHERE value & 1; + INSERT INTO t2 SELECT value, 1 FROM generate_series(1,256) WHERE value & 2; + INSERT INTO t3 SELECT value, 1 FROM generate_series(1,256) WHERE value & 4; + INSERT INTO t4 SELECT value, 1 FROM generate_series(1,256) WHERE value & 8; + INSERT INTO t5 SELECT value, 1 FROM generate_series(1,256) WHERE value & 16; + INSERT INTO t6 SELECT value, 1 FROM generate_series(1,256) WHERE value & 32; + INSERT INTO t7 SELECT value, 1 FROM generate_series(1,256) WHERE value & 64; + INSERT INTO t8 SELECT value, 1 FROM generate_series(1,256) WHERE value & 128; + CREATE TABLE t9 AS + SELECT id, h, g, f, e, d, c, b, a + FROM t1 + NATURAL FULL JOIN t2 + NATURAL FULL JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + NATURAL FULL JOIN t6 + NATURAL FULL JOIN t7 + NATURAL FULL JOIN t8; +---- +stmt 0 ok +stmt 50 ok +stmt 100 ok +stmt 150 ok +stmt 200 ok +stmt 250 ok +stmt 300 ok +stmt 350 ok +stmt 400 err 1 -1 478 no such table: t1 +stmt 478 err 1 -1 556 no such table: t2 +stmt 556 err 1 -1 634 no such table: t3 +stmt 634 err 1 -1 712 no such table: t4 +stmt 712 err 1 -1 791 no such table: t5 +stmt 791 err 1 -1 870 no such table: t6 +stmt 870 err 1 -1 949 no such table: t7 +stmt 949 err 1 -1 1029 no such table: t8 +stmt 1029 err 1 -1 1292 no such table: t1 +==== join8-3010 + + SELECT count(*) FROM t9; +---- +stmt 0 err 1 -1 27 no such table: t9 +==== join8-3020 + + SELECT id, count(*) FROM t9 GROUP BY id HAVING count(*)!=1; +---- +stmt 0 err 1 -1 62 no such table: t9 +==== join8-3030 + + UPDATE t9 SET a=0 WHERE a IS NULL; + UPDATE t9 SET b=0 WHERE b IS NULL; + UPDATE t9 SET c=0 WHERE c IS NULL; + UPDATE t9 SET d=0 WHERE d IS NULL; + UPDATE t9 SET e=0 WHERE e IS NULL; + UPDATE t9 SET f=0 WHERE f IS NULL; + UPDATE t9 SET g=0 WHERE g IS NULL; + UPDATE t9 SET h=0 WHERE h IS NULL; + SELECT count(*) FROM t9 WHERE id=128*h+64*g+32*f+16*e+8*d+4*c+2*b+a; +---- +stmt 0 err 1 -1 37 no such table: t9 +stmt 37 err 1 -1 74 no such table: t9 +stmt 74 err 1 -1 111 no such table: t9 +stmt 111 err 1 -1 148 no such table: t9 +stmt 148 err 1 -1 185 no such table: t9 +stmt 185 err 1 -1 222 no such table: t9 +stmt 222 err 1 -1 259 no such table: t9 +stmt 259 err 1 -1 296 no such table: t9 +stmt 296 err 1 -1 367 no such table: t9 +==== join8-3040 + + SELECT * FROM t9 WHERE id<>128*h+64*g+32*f+16*e+8*d+4*c+2*b+a; +---- +stmt 0 err 1 -1 65 no such table: t9 +==== join8-4000 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, a, b); + INSERT INTO t1 VALUES(1,5555,4); + CREATE INDEX i1a ON t1(a); + CREATE INDEX i1b ON t1(b); + SELECT a FROM t1 NATURAL RIGHT JOIN t1 WHERE a=5555 OR (1,b)==(SELECT 2 IN (2,2),4); +---- +stmt 0 ok +stmt 48 err 1 -1 83 no such table: t1 +stmt 83 err 1 -1 112 no such table: main.t1 +stmt 112 err 1 -1 141 no such table: main.t1 +stmt 141 err 1 -1 228 no such table: t1 +==== join8-5000 + + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES(NULL),(NULL); + CREATE TABLE t2(c, d); + INSERT INTO t2(c,d) SELECT x, x FROM t1; + CREATE INDEX t2dc ON t2(d, c); + SELECT (SELECT c FROM sqlite_temp_schema FULL JOIN t2 ON d IN (1,2,3) ORDER BY d) AS x FROM t1; +---- +stmt 0 ok +stmt 22 err 1 -1 63 no such table: t1 +stmt 63 ok +stmt 88 err 1 -1 131 no such table: t2 +stmt 131 err 1 -1 164 no such table: main.t2 +stmt 164 err 1 -1 262 no such table: t1 +==== join8-6000 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d REAL); + INSERT INTO t1 VALUES(1,'A','aa',2.5); + SELECT * FROM t1 AS t2 NATURAL RIGHT JOIN t1 AS t3 + WHERE (a,b) IN (SELECT rowid, b FROM t1); +---- +stmt 0 ok +stmt 66 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 205 no such table: t1 +==== join8-6010 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INT PRIMARY KEY, b TEXT, c TEXT, d INT) WITHOUT ROWID; + INSERT INTO t1 VALUES(15,'xray','baker',42); + SELECT value, t1.* FROM json_each('7') NATURAL RIGHT JOIN t1 + WHERE (a,b) IN (SELECT a, b FROM t1); +---- +stmt 0 ok +stmt 27 ok +stmt 102 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 253 no such table: t1 +==== join8-6020 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY,b); + INSERT INTO t1 VALUES(0,NULL),(1,2); + SELECT value, t1.* FROM json_each('17') NATURAL RIGHT JOIN t1 + WHERE (a,b) IN (SELECT rowid, b FROM t1); +---- +stmt 0 ok +stmt 27 ok +stmt 71 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 219 no such table: t1 +==== join8-6021 + + SELECT value, t1.* FROM json_each('null') NATURAL RIGHT JOIN t1 + WHERE (a,b) IN (SELECT rowid, b FROM t1); +---- +stmt 0 err 1 -1 111 no such table: t1 +==== join8-7000 + +CREATE TABLE t1(a INT, b INT, c INT, d INT); + WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<10) + INSERT INTO t1(a,b,c,d) SELECT x, x+100, x+200, x+300 FROM c; + CREATE TABLE t2(b INT, x INT); + INSERT INTO t2(b,x) SELECT b, a FROM t1 WHERE a%2=0; + CREATE INDEX t2b ON t2(b); + CREATE TABLE t3(c INT, y INT); + INSERT INTO t3(c,y) SELECT c, a FROM t1 WHERE a%3=0; + CREATE INDEX t3c ON t3(c); + CREATE TABLE t4(d INT, z INT); + INSERT INTO t4(d,z) SELECT d, a FROM t1 WHERE a%5=0; + CREATE INDEX t4d ON t4(d); + INSERT INTO t1(a,b,c,d) VALUES + (96,NULL,296,396), + (97,197,NULL,397), + (98,198,298,NULL), + (99,NULL,NULL,NULL); + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat1 VALUES('t4','t4d','20 1'); + INSERT INTO sqlite_stat1 VALUES('t3','t3c','32 1'); + INSERT INTO sqlite_stat1 VALUES('t2','t2b','48 1'); + INSERT INTO sqlite_stat1 VALUES('t1',NULL,'100'); + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 45 err 1 -1 187 no such table: t1 +stmt 187 ok +stmt 220 err 1 -1 275 no such table: t2 +stmt 275 err 1 -1 304 no such table: main.t2 +stmt 304 ok +stmt 337 err 1 -1 392 no such table: t3 +stmt 392 err 1 -1 421 no such table: main.t3 +stmt 421 ok +stmt 454 err 1 -1 509 no such table: t4 +stmt 509 err 1 -1 538 no such table: main.t4 +stmt 538 err 1 -1 665 no such table: t1 +stmt 665 ok +stmt 690 err 1 -1 744 no such table: sqlite_stat1 +stmt 744 err 1 -1 798 no such table: sqlite_stat1 +stmt 798 err 1 -1 852 no such table: sqlite_stat1 +stmt 852 err 1 -1 904 no such table: sqlite_stat1 +stmt 904 ok +==== join8-7010 + + WITH t0 AS MATERIALIZED ( + SELECT t1.*, t2.*, t3.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + ) + SELECT * FROM t0 FULL JOIN t4 ON t0.a=t4.d AND t4.z>0 + ORDER BY coalesce(t0.a, t0.y+200, t4.d); +---- +stmt 0 err 1 -1 258 no such table: t1 +==== join8-7011 + + WITH t0 AS MATERIALIZED ( + SELECT t1.*, t2.*, t3.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + ) + SELECT * FROM t0 LEFT RIGHT JOIN t4 ON t0.a=t4.d AND t4.z>0 + ORDER BY coalesce(t0.a, t0.y+200, t4.d); +---- +stmt 0 err 1 -1 264 no such table: t1 +==== join8-7020 + + EXPLAIN QUERY PLAN + WITH t0 AS MATERIALIZED ( + SELECT t1.*, t2.*, t3.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + ) + SELECT * FROM t0 FULL JOIN t4 ON t0.a=t4.d AND t4.z>0 + ORDER BY coalesce(t0.a, t0.y+200, t4.d); +---- +stmt 0 err 1 -1 279 no such table: t1 +==== join8-8000 + + CREATE TABLE t1(a INT, b INT); + CREATE TABLE t2(c INT, d INT); + CREATE TABLE t3(e INT, f INT); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t2 VALUES(3, 4); + INSERT INTO t3 VALUES(5, 6); +---- +stmt 0 ok +stmt 33 ok +stmt 66 ok +stmt 99 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 161 no such table: t2 +stmt 161 err 1 -1 192 no such table: t3 +==== join8-8010 + + SELECT * + FROM t3 LEFT JOIN t2 ON true + JOIN t1 ON (t3.e IS t2.c); +---- +stmt 0 err 1 -1 83 no such table: t3 +==== join8-8020 + + SELECT * + FROM t3 LEFT JOIN t2 ON true + JOIN t1 ON (t3.e IS NOT DISTINCT FROM t2.c); +---- +stmt 0 err 1 -1 101 no such table: t3 +==== join8-9000 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d REAL); + INSERT INTO t1 VALUES(1,'E','bb',NULL),(2,NULL,NULL,NULL); + SELECT * FROM t1 NATURAL RIGHT JOIN t1 AS t2 WHERE (a,b) IN (SELECT a+0, b FROM t1); +---- +stmt 0 ok +stmt 66 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 214 no such table: t1 +==== join8-10000 + + CREATE TABLE t1(c0 INT UNIQUE); + CREATE TABLE t2(c0); + CREATE TABLE t2i(c0 INT); + CREATE TABLE t3(c0 INT); + INSERT INTO t1 VALUES(1); + INSERT INTO t2 VALUES(2); + INSERT INTO t2i VALUES(2); + INSERT INTO t3 VALUES(3); +---- +stmt 0 ok +stmt 34 ok +stmt 57 ok +stmt 85 ok +stmt 112 err 1 -1 140 no such table: t1 +stmt 140 err 1 -1 168 no such table: t2 +stmt 168 err 1 -1 197 no such table: t2i +stmt 197 err 1 -1 225 no such table: t3 +==== join8-10010 + + SELECT DISTINCT t1.c0, t3.c0 + FROM t2 NATURAL JOIN t1 RIGHT JOIN t3 ON t1.c0; +---- +stmt 0 err 1 -1 83 no such table: t2 +==== join8-10020 + + SELECT t1.c0, t3.c0 + FROM t2 NATURAL JOIN t1 RIGHT JOIN t3 ON t1.c0; +---- +stmt 0 err 1 -1 74 no such table: t2 +==== join8-10030 + + SELECT DISTINCT t1.c0, t3.c0 + FROM t2 NATURAL CROSS JOIN t1 RIGHT JOIN t3 ON t1.c0; +---- +stmt 0 err 1 -1 89 no such table: t2 +==== join8-10040 + + SELECT t1.c0, t3.c0 + FROM t1 NATURAL CROSS JOIN t2 RIGHT JOIN t3 ON t1.c0; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== join8-10050 + + SELECT DISTINCT t1.c0, t3.c0 + FROM t2i NATURAL JOIN t1 RIGHT JOIN t3 ON t1.c0; +---- +stmt 0 err 1 -1 84 no such table: t2i +==== join8-10060 + + SELECT DISTINCT +t1.c0, t3.c0 + FROM t2 NATURAL JOIN t1 RIGHT JOIN t3 ON t1.c0; +---- +stmt 0 err 1 -1 84 no such table: t2 +==== join8-10070 + + SELECT DISTINCT +t1.c0, t3.c0 + FROM t1 NATURAL CROSS JOIN t2 RIGHT JOIN t3 ON t1.c0; +---- +stmt 0 err 1 -1 90 no such table: t1 +==== join8-10080 + + SELECT DISTINCT t1.c0, t3.c0 + FROM t2 NATURAL JOIN t1 RIGHT JOIN t3 ON t1.c0<>0; +---- +stmt 0 err 1 -1 86 no such table: t2 +==== join8-11000 + + CREATE TABLE t1(a); + CREATE TABLE t2(b); + INSERT INTO t2 VALUES(0),(1),(2); + SELECT * FROM t1 RIGHT JOIN t2 ON (a=b) WHERE 99+(b+1)!=99; +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 80 no such table: t2 +stmt 80 err 1 -1 142 no such table: t1 +==== join8-11010 + + CREATE INDEX t2b ON t2(b+1) WHERE b IS NOT NULL; + SELECT * FROM t1 RIGHT JOIN t2 ON (a=b) WHERE 99+(b+1)!=99; +---- +stmt 0 err 1 -1 51 no such table: main.t2 +stmt 51 err 1 -1 113 no such table: t1 +==== join8-11020 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(a); + CREATE TABLE t2(b, c, d); + INSERT INTO t2 VALUES(1, 3, 'not-4'); + SELECT b, d FROM t1 RIGHT JOIN t2 WHERE (b+0)=1 AND d!=4; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 ok +stmt 56 ok +stmt 84 err 1 -1 124 no such table: t2 +stmt 124 err 1 -1 184 no such table: t1 +==== join8-11030 + + CREATE INDEX i2 ON t2((b+0), d); + SELECT b, d FROM t1 RIGHT JOIN t2 WHERE (b+0)=1 AND d!=4; +---- +stmt 0 err 1 -1 35 no such table: main.t2 +stmt 35 err 1 -1 95 no such table: t1 +==== join8-11040 + + DROP INDEX i2; + CREATE INDEX i2 ON t2((b+0), d) WHERE d IS NOT NULL; + SELECT b, d FROM t1 RIGHT JOIN t2 WHERE (b+0)=1 AND d!=4; +---- +stmt 0 err 1 -1 17 no such index: i2 +stmt 17 err 1 -1 72 no such table: main.t2 +stmt 72 err 1 -1 132 no such table: t1 +==== join8-12000 + + CREATE TABLE t1(a INT); INSERT INTO t1 VALUES(0),(1); + CREATE TABLE t2(a INT); INSERT INTO t2 VALUES(0),(2); + CREATE TABLE t3(a INT); INSERT INTO t3 VALUES(0),(3); +---- +stmt 0 ok +stmt 26 err 1 -1 57 no such table: t1 +stmt 57 ok +stmt 83 err 1 -1 114 no such table: t2 +stmt 114 ok +stmt 140 err 1 -1 171 no such table: t3 +==== join8-12010 + + SELECT * FROM t1 RIGHT JOIN t2 ON t2.a<>0 NATURAL RIGHT JOIN t3; +---- +stmt 0 err 1 -1 67 no such table: t1 +==== join8-12020 + + SELECT * FROM t1 RIGHT JOIN t2 ON t2.a<>0 NATURAL LEFT JOIN t3; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== join8-12030 + + SELECT * FROM t1 LEFT JOIN t2 ON t2.a<>0 NATURAL RIGHT JOIN t3; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== join8-12040 + + SELECT * FROM t1 LEFT JOIN t2 ON t2.a<>0 NATURAL LEFT JOIN t3; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== join8-13000 + + CREATE TABLE t0(t TEXT, u TEXT); INSERT INTO t0 VALUES('t', 'u'); + CREATE TABLE t1(v TEXT, w TEXT); INSERT INTO t1 VALUES('v', 'w'); + CREATE TABLE t2(x TEXT, y TEXT); INSERT INTO t2 VALUES('x', 'y'); + SELECT * FROM t0 JOIN t1 ON (t2.x NOTNULL) LEFT JOIN t2 ON false; + SELECT * FROM t0 JOIN t1 ON (t2.x NOTNULL) LEFT JOIN t2 ON false + WHERE t2.y ISNULL; +---- +stmt 0 ok +stmt 35 err 1 -1 69 no such table: t0 +stmt 69 ok +stmt 104 err 1 -1 138 no such table: t1 +stmt 138 ok +stmt 173 err 1 -1 207 no such table: t2 +stmt 207 err 1 -1 275 no such table: t0 +stmt 275 err 1 -1 364 no such table: t0 +==== join8-14000 + + CREATE TABLE t0(a TEXT, b TEXT, c TEXT); + CREATE TABLE t1(a TEXT); + INSERT INTO t1 VALUES('1'); + CREATE VIEW v0 AS SELECT 'xyz' AS d; + SELECT * FROM v0 RIGHT JOIN t1 ON t1.a<>'' INNER JOIN t0 ON t0.c<>''; + SELECT * FROM v0 RIGHT JOIN t1 ON t1.a<>'' INNER JOIN t0 ON t0.c<>'' WHERE b ISNULL; +---- +stmt 0 ok +stmt 43 ok +stmt 70 err 1 -1 100 no such table: t1 +stmt 100 ok +stmt 139 err 1 -1 211 no such table: v0 +stmt 211 err 1 -1 298 no such table: v0 +==== join8-14010 + + CREATE TABLE y0(a INT); + CREATE TABLE y1(b INT); INSERT INTO y1 VALUES(1), (2); + CREATE TABLE y2(c INT); INSERT INTO y2 VALUES(3), (4); +---- +stmt 0 ok +stmt 26 ok +stmt 52 err 1 -1 83 no such table: y1 +stmt 83 ok +stmt 109 err 1 -1 140 no such table: y2 +==== join8-14020 + + SELECT * FROM y0 RIGHT JOIN y1 ON true INNER JOIN y2 ON true WHERE y2.c!=99 AND y2.c!=98; +---- +stmt 0 err 1 -1 92 no such table: y0 +==== join8-15000 + + CREATE TABLE t1(x INT); + CREATE TABLE t2(y INT); + CREATE TABLE t3(z INT); + INSERT INTO t1 VALUES(10); + INSERT INTO t3 VALUES(20),(30); +---- +stmt 0 ok +stmt 26 ok +stmt 52 ok +stmt 78 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 141 no such table: t3 +==== join8-15010 + + SELECT * FROM t1 LEFT JOIN t2 ON true JOIN t3 ON t2.y IS NOT NULL; +---- +stmt 0 err 1 -1 69 no such table: t1 +==== join8-15020 + + SELECT * FROM t1 LEFT JOIN t2 ON true JOIN t3 ON t2.y IS NOT NULL + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600); +---- +stmt 0 err 1 -1 118 no such table: t1 +==== join8-15100 + + PRAGMA automatic_index = 0; + CREATE TABLE t4(x TEXT); + CREATE TABLE t5(y TEXT); + CREATE TABLE t6(z TEXT); + INSERT INTO t4 VALUES('a'), ('b'); + INSERT INTO t5 VALUES('b'), ('c'); + INSERT INTO t6 VALUES('a'), ('d'); +---- +stmt 0 ok +stmt 30 ok +stmt 57 ok +stmt 84 ok +stmt 111 err 1 -1 148 no such table: t4 +stmt 148 err 1 -1 185 no such table: t5 +stmt 185 err 1 -1 222 no such table: t6 +==== join8-15110 + + SELECT * FROM t4 LEFT JOIN t5 ON x=y LEFT JOIN t6 ON (x=z) ORDER BY +x; +---- +stmt 0 err 1 -1 74 no such table: t4 +==== join8-15120 + + SELECT * FROM t4 LEFT JOIN t5 ON x=y LEFT JOIN t6 ON (x=z) + WHERE t5.y!='x' AND t4.x!='x'; +---- +stmt 0 err 1 -1 95 no such table: t4 +==== join8-16000 + + CREATE TABLE t1(a TEXT); + CREATE TABLE t2(b TEXT); + CREATE TABLE t3(c TEXT); + INSERT INTO t2(b) VALUES ('x'); + INSERT INTO t3(c) VALUES ('y'), ('z'); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 err 1 -1 115 no such table: t2 +stmt 115 err 1 -1 156 no such table: t3 +==== join8-16010 + + SELECT * FROM t1 RIGHT JOIN t2 ON true LEFT JOIN t3 ON a<>''; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== join8-16020 + + SELECT * FROM t1 RIGHT JOIN t2 ON true LEFT JOIN t3 ON a<>'' WHERE c IS NULL; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== join8-16020.dup1 + + SELECT * FROM t1 RIGHT JOIN t2 ON true JOIN t3 ON a<>'' WHERE c IS NULL; +---- +stmt 0 err 1 -1 75 no such table: t1 +==== join8-16030 + + SELECT * FROM t1 RIGHT JOIN t2 ON true JOIN t3 ON a<>''; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== join8-16040 + + SELECT * FROM t1 RIGHT JOIN t2 ON true LEFT JOIN t3 ON a<>'' WHERE c<>''; +---- +stmt 0 err 1 -1 76 no such table: t1 +==== join8-16050 + + SELECT * FROM t1 RIGHT JOIN t2 ON true LEFT JOIN t3 ON a<>'' WHERE c IS NOT NULL; +---- +stmt 0 err 1 -1 84 no such table: t1 +==== join8-16060 + + SELECT * FROM t1 RIGHT JOIN t2 ON true JOIN t3 ON a<>'' WHERE c<>''; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== join8-16070 + + SELECT * FROM t1 RIGHT JOIN t2 ON true JOIN t3 ON a<>'' WHERE c IS NOT NULL; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== join8-17000 + + CREATE TABLE t1(id INTEGER PRIMARY KEY, x INT, y INT); + CREATE TABLE t2(z INT); + INSERT INTO t1(id,x,y) VALUES(1, 0, 0); +---- +stmt 0 ok +stmt 57 ok +stmt 83 err 1 -1 125 no such table: t1 +==== join8-17010 + + SELECT * FROM t2 RIGHT JOIN t1 ON true; +---- +stmt 0 err 1 -1 42 no such table: t2 +==== join8-17020 + + SELECT 99=id AND 0=y AS "truth" FROM t2 RIGHT JOIN t1 ON true; +---- +stmt 0 err 1 -1 65 no such table: t2 +==== join8-17030 + + SELECT (99, 0)==(id, y) AS "truth" FROM t2 RIGHT JOIN t1; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== join8-17040 + + SELECT * FROM t2 RIGHT JOIN t1 WHERE 99=id AND 0=y; +---- +stmt 0 err 1 -1 54 no such table: t2 +==== join8-17041 + + SELECT * FROM t2 RIGHT JOIN t1 WHERE 99=+id AND 0=y; +---- +stmt 0 err 1 -1 55 no such table: t2 +==== join8-17050 + + SELECT * FROM t2 RIGHT JOIN t1 WHERE (99, 0)==(id,y); +---- +stmt 0 err 1 -1 56 no such table: t2 +==== join8-17051 + + SELECT * FROM t2 RIGHT JOIN t1 WHERE (99, 0)==(+id,y); +---- +stmt 0 err 1 -1 57 no such table: t2 +==== join8-17060 + + SELECT * FROM t2 RIGHT JOIN t1 WHERE 1=id AND 0=y; +---- +stmt 0 err 1 -1 53 no such table: t2 +==== join8-17061 + + SELECT * FROM t2 RIGHT JOIN t1 WHERE 1=+id AND 0=y; +---- +stmt 0 err 1 -1 54 no such table: t2 +==== join8-17070 + + SELECT * FROM t2 RIGHT JOIN t1 WHERE (1, 0)==(id,y); +---- +stmt 0 err 1 -1 55 no such table: t2 +==== join8-17071 + + SELECT * FROM t2 RIGHT JOIN t1 WHERE (1, 0)==(+id,y); +---- +stmt 0 err 1 -1 56 no such table: t2 +==== join8-17080 + + CREATE TABLE t3(a INTEGER PRIMARY KEY, b INT); + CREATE TABLE t4(x INT, y INT); + INSERT INTO t3(a,b) VALUES(1, 3); +---- +stmt 0 ok +stmt 49 ok +stmt 82 err 1 -1 118 no such table: t3 +==== join8-17090 + + SELECT t3.a FROM t4 RIGHT JOIN t3 ON (x=a) WHERE (b, 4)=(SELECT 3, 4); +---- +stmt 0 err 1 -1 73 no such table: t4 +==== join8-17091 + + SELECT t3.a FROM t4 RIGHT JOIN t3 ON (x=a) WHERE (b, 4) IS (SELECT 3, 4); +---- +stmt 0 err 1 -1 76 no such table: t4 +==== join8-18000 + + CREATE TABLE t1(a BOOLEAN); INSERT INTO t1 VALUES (false); + CREATE TABLE t2(x INT); INSERT INTO t2 VALUES (0); + SELECT *, x NOTNULL, (x NOTNULL)=a FROM t2 RIGHT JOIN t1 ON true WHERE (x NOTNULL)=a; +---- +stmt 0 ok +stmt 30 err 1 -1 61 no such table: t1 +stmt 61 ok +stmt 87 err 1 -1 118 no such table: t2 +stmt 118 err 1 -1 206 no such table: t2 +==== join8-18010 + + CREATE INDEX t1a ON t1(a); + SELECT *, x NOTNULL, (x NOTNULL)=a FROM t2 RIGHT JOIN t1 ON true WHERE (x NOTNULL)=a; +---- +stmt 0 err 1 -1 29 no such table: main.t1 +stmt 29 err 1 -1 117 no such table: t2 +==== join8-18020 + + CREATE TABLE t3(z); + INSERT INTO t3 VALUES('t3value'); + SELECT *, x NOTNULL, (x NOTNULL)=a FROM t2 RIGHT JOIN t1 ON true INNER JOIN t3 ON (x NOTNULL)=a; +---- +stmt 0 ok +stmt 22 err 1 -1 58 no such table: t3 +stmt 58 err 1 -1 157 no such table: t2 +==== join8-18030 + + CREATE VIRTUAL TABLE rtree1 USING rtree(a, x1, x2); + INSERT INTO rtree1 VALUES(0, 0, 0); +---- +stmt 0 ok +stmt 56 err 1 -1 96 no such table: rtree1 +==== join8-18040 + + SELECT *, x NOTNULL, (x NOTNULL)=a FROM t2 + RIGHT JOIN rtree1 ON true INNER JOIN t3 ON (x NOTNULL)=+a; +---- +stmt 0 err 1 -1 113 no such table: t2 +==== join8-18050 + + SELECT *, x NOTNULL, (x NOTNULL)=a FROM t2 + RIGHT JOIN rtree1 ON true INNER JOIN t3 ON (x NOTNULL)=a; +---- +stmt 0 err 1 -1 112 no such table: t2 +==== join8-19000 + + CREATE TABLE t1(a INT); + CREATE TABLE t2(b INT, c INT); + CREATE TABLE t3(d INT); + + INSERT INTO t1 VALUES(10); + INSERT INTO t2 VALUES(50,51); + INSERT INTO t3 VALUES(299); + + CREATE INDEX t2b ON t2( (b IS NOT NULL) ); +---- +stmt 0 ok +stmt 26 ok +stmt 59 ok +stmt 85 err 1 -1 115 no such table: t1 +stmt 115 err 1 -1 147 no such table: t2 +stmt 147 err 1 -1 177 no such table: t3 +stmt 177 err 1 -1 223 no such table: main.t2 +==== join8-19010 + + SELECT * FROM t1 LEFT JOIN t2 ON true INNER JOIN t3 ON (b IS NOT NULL)=0; +---- +stmt 0 err 1 -1 76 no such table: t1 +==== join8-20000 + + CREATE TABLE t1(x TEXT); + INSERT INTO t1(x) VALUES('aaa'); + CREATE VIEW v0(y) AS SELECT x FROM t1; + CREATE TABLE t2(z TEXT); +---- +stmt 0 ok +stmt 27 err 1 -1 62 no such table: t1 +stmt 62 ok +stmt 103 ok +==== join8-20010 + + SELECT * FROM t2 JOIN v0 ON z<>'bbb' RIGHT JOIN t1 ON z<>'ccc'; +---- +stmt 0 err 1 -1 66 no such table: t2 +==== join8-20020 + + SELECT * FROM t2 JOIN v0 ON z<>'bbb' RIGHT JOIN t1 ON z<>'ccc' ORDER BY z; +---- +stmt 0 err 1 -1 77 no such table: t2 +==== join8-20030 + + SELECT 99 as "m" FROM t2 JOIN v0 ON z<>'bbb' RIGHT JOIN t1 ON z<>'ccc'; +---- +stmt 0 err 1 -1 74 no such table: t2 +==== join8-20040 + + SELECT 99 as "m" FROM t2 JOIN v0 ON z<>'bbb' RIGHT JOIN t1 ON z<>'ccc' ORDER BY z; +---- +stmt 0 err 1 -1 85 no such table: t2 +==== join8-20050 + + SELECT count(*) + FROM (SELECT 99 as "m" FROM t2 JOIN v0 ON z<>'' RIGHT JOIN t1 ON z<>'') AS "t3"; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== join8-20060 + + SELECT count(*) + FROM (SELECT 99 as "m" FROM t2 JOIN v0 ON z<>'' RIGHT JOIN t1 ON z<>'' ORDER BY z) AS "t3"; +---- +stmt 0 err 1 -1 115 no such table: t2 +==== join8-21000 + + CREATE TABLE t1(a INT,b BOOLEAN); + CREATE TABLE t2(c INT); INSERT INTO t2 VALUES(NULL); + CREATE TABLE t3(d INT); +---- +stmt 0 ok +stmt 36 ok +stmt 62 err 1 -1 92 no such table: t2 +stmt 92 ok +==== join8-21010 + + SELECT (b IS TRUE) FROM t1 JOIN t3 ON (b=TRUE) RIGHT JOIN t2 ON TRUE; +---- +stmt 0 err 1 -1 72 no such table: t1 +==== join8-22020 + + SELECT * FROM t1 JOIN t3 ON (b=TRUE) RIGHT JOIN t2 ON TRUE WHERE (b IS TRUE); +---- +stmt 0 err 1 -1 80 no such table: t1 +==== join8-22030 + + DROP TABLE t1; + DROP TABLE t2; + DROP TABLE t3; + CREATE TABLE t1(a INT); + CREATE TABLE t2(b INT); + CREATE TABLE t3(c INTEGER PRIMARY KEY, d INT); + CREATE INDEX t3d ON t3(d); + INSERT INTO t3 VALUES(0, 0); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 err 1 -1 51 no such table: t3 +stmt 51 ok +stmt 77 ok +stmt 103 ok +stmt 152 err 1 -1 181 no such table: main.t3 +stmt 181 err 1 -1 212 no such table: t3 +==== join8-22031 + + SELECT * FROM t1 JOIN t2 ON d>b RIGHT JOIN t3 ON true WHERE +d = 0; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== join8-22040 + + SELECT * FROM t1 JOIN t2 ON d>b RIGHT JOIN t3 ON true WHERE d = 0; +---- +stmt 0 err 1 -1 69 no such table: t1 +==== join8-22000 + + CREATE TABLE t1(a INT); + CREATE TABLE t2(b INT); + CREATE TABLE t3(c TEXT); INSERT INTO t3 VALUES('x'); + CREATE TABLE t4(d TEXT); INSERT INTO t4 VALUES('y'); + SELECT 99 + FROM t1 + LEFT JOIN t2 ON true + RIGHT JOIN t3 ON true + RIGHT JOIN t4 ON true + WHERE a=b; +---- +stmt 0 ok +stmt 26 ok +stmt 52 ok +stmt 79 err 1 -1 108 no such table: t3 +stmt 108 ok +stmt 135 err 1 -1 164 no such table: t4 +stmt 164 err 1 -1 294 no such table: t1 +==== join8-23000 + + CREATE TABLE t1(a TEXT); + INSERT INTO t1 VALUES('c'); + CREATE TABLE t2(b TEXT, c TEXT NOT NULL); + INSERT INTO t2 VALUES('a', 'b'); + CREATE TABLE t3(d TEXT); + INSERT INTO t3 VALUES('x'); + CREATE TABLE t4(e TEXT); + INSERT INTO t4 VALUES('y'); +---- +stmt 0 ok +stmt 27 err 1 -1 57 no such table: t1 +stmt 57 ok +stmt 101 err 1 -1 136 no such table: t2 +stmt 136 ok +stmt 163 err 1 -1 193 no such table: t3 +stmt 193 ok +stmt 220 err 1 -1 250 no such table: t4 +==== join8-23010 + + SELECT * + FROM t1 + LEFT JOIN t2 ON TRUE + JOIN t3 ON c='' + RIGHT JOIN t4 ON b=''; +---- +stmt 0 err 1 -1 110 no such table: t1 +==== join8-23020 + + SELECT * + FROM t1 + LEFT JOIN t2 ON TRUE + JOIN t3 ON c='' + RIGHT JOIN t4 ON b='' + WHERE d ISNULL +---- +stmt 0 err 1 -1 128 no such table: t1 +==== join8-24000 + + CREATE TABLE t4(b INT, c INT); + CREATE TABLE t5(a INT, f INT); + INSERT INTO t5 VALUES(1,2); + WITH t7(x, y) AS (SELECT 100, 200 FROM t5) + SELECT * FROM t4 JOIN t7 ON true RIGHT JOIN (SELECT y AS z FROM t7) AS t6 ON (x=z); +---- +stmt 0 ok +stmt 33 ok +stmt 66 err 1 -1 96 no such table: t5 +stmt 96 err 1 -1 229 no such table: t4 +==== join8-25000 + + CREATE TABLE t1(a1 INT); + CREATE TABLE t2(b2 INT); + CREATE TABLE t3(c3 INT, d3 INT UNIQUE); + CREATE TABLE t4(e4 INT, f4 TEXT); + INSERT INTO t3(c3, d3) VALUES (2, 1); + INSERT INTO t4(f4) VALUES ('x'); + CREATE INDEX i0 ON t3(c3) WHERE d3 ISNULL; + ANALYZE main; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 96 ok +stmt 132 err 1 -1 172 no such table: t3 +stmt 172 err 1 -1 207 no such table: t4 +stmt 207 err 1 -1 252 no such table: main.t3 +stmt 252 ok +==== join8-25010 + + SELECT * FROM t1 LEFT JOIN t2 ON true JOIN t3 ON (b2 IN (a1)) FULL JOIN t4 ON true; +---- +stmt 0 err 1 -1 86 no such table: t1 +==== join8-25020 + + SELECT 1 FROM t1 LEFT JOIN t2 ON true JOIN t3 ON (b2 IN (a1)) FULL JOIN t4 ON true; +---- +stmt 0 err 1 -1 86 no such table: t1 +==== join8-26000 + + CREATE TABLE t1(a INT); + CREATE TABLE t2(b INT, c INT); + CREATE VIEW t3(d) AS SELECT NULL FROM t2 FULL OUTER JOIN t1 ON c=a UNION ALL SELECT b FROM t2; + INSERT INTO t1(a) VALUES (NULL); + INSERT INTO t2(b, c) VALUES (99, NULL); + SELECT DISTINCT b, c, d FROM t2, t3 WHERE b<>0 + UNION SELECT DISTINCT b, c, d FROM t2, t3 WHERE b ISNULL; +---- +stmt 0 ok +stmt 26 ok +stmt 59 ok +stmt 156 err 1 -1 191 no such table: t1 +stmt 191 err 1 -1 233 no such table: t2 +stmt 233 err 1 -1 343 no such table: t2 diff --git a/parser/testdata/join9.metadata.json b/parser/testdata/join9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/join9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/join9.test b/parser/testdata/join9.test new file mode 100644 index 0000000..0a4d840 --- /dev/null +++ b/parser/testdata/join9.test @@ -0,0 +1,244 @@ +==== join9-generated + + SELECT *, t4.id, t5.id, t6.id + FROM t4 NATURAL LEFT JOIN t5 NATURAL LEFT JOIN t6 + ORDER BY 1; +---- +stmt 0 err 1 -1 107 no such table: t4 +==== join9-generated.dup1 + + SELECT *, t4.id, t5.id, t6.id + FROM t4 NATURAL LEFT JOIN t5 NATURAL LEFT JOIN t6 + ORDER BY id; +---- +stmt 0 err 1 -1 108 no such table: t4 +==== join9-generated.dup2 + + SELECT *, t4.id, t5.id, t6.id + FROM t4 LEFT JOIN t5 USING(id) LEFT JOIN t6 USING(id) + ORDER BY id; +---- +stmt 0 err 1 -1 112 no such table: t4 +==== join9-generated.dup3 + + SELECT id, x, y, z, t4.id, t5.id, t6.id + FROM t5 NATURAL RIGHT JOIN t4 NATURAL LEFT JOIN t6 + ORDER BY 1; +---- +stmt 0 err 1 -1 118 no such table: t5 +==== join9-generated.dup4 + + SELECT id, x, y, z, t4.id, t5.id, t6.id + FROM t5 NATURAL RIGHT JOIN t4 NATURAL LEFT JOIN t6 + ORDER BY id; +---- +stmt 0 err 1 -1 119 no such table: t5 +==== join9-generated.dup5 + + SELECT *, t4.id, t5.id, t6.id + FROM t4 NATURAL RIGHT JOIN t5 NATURAL RIGHT JOIN t6 + ORDER BY 1; +---- +stmt 0 err 1 -1 109 no such table: t4 +==== join9-generated.dup6 + + SELECT *, t4.id, t5.id, t6.id + FROM t4 NATURAL RIGHT JOIN t5 NATURAL RIGHT JOIN t6 + ORDER BY id; +---- +stmt 0 err 1 -1 110 no such table: t4 +==== join9-generated.dup7 + + SELECT *, t4.id, t5.id, t6.id + FROM t4 NATURAL FULL JOIN t5 NATURAL FULL JOIN t6 + ORDER BY 1; +---- +stmt 0 err 1 -1 107 no such table: t4 +==== join9-generated.dup8 + + SELECT *, t4.id, t5.id, t6.id + FROM t4 NATURAL FULL JOIN t5 NATURAL FULL JOIN t6 + ORDER BY id; +---- +stmt 0 err 1 -1 108 no such table: t4 +==== join9-generated.dup9 + + SELECT id, x, y, z, t4.id, t5.id, t6.id + FROM t4 NATURAL FULL JOIN t6 NATURAL FULL JOIN t5 + ORDER BY id; +---- +stmt 0 err 1 -1 118 no such table: t4 +==== join9-generated.dup10 + + SELECT id, x, y, z, t4.id, t5.id, t6.id + FROM t5 NATURAL FULL JOIN t4 NATURAL FULL JOIN t6 + ORDER BY id; +---- +stmt 0 err 1 -1 118 no such table: t5 +==== join9-generated.dup11 + + SELECT id, x, y, z, t4.id, t5.id, t6.id + FROM t5 NATURAL FULL JOIN t6 NATURAL FULL JOIN t4 + ORDER BY id; +---- +stmt 0 err 1 -1 118 no such table: t5 +==== join9-generated.dup12 + + SELECT id, x, y, z, t4.id, t5.id, t6.id + FROM t6 NATURAL FULL JOIN t4 NATURAL FULL JOIN t5 + ORDER BY id; +---- +stmt 0 err 1 -1 118 no such table: t6 +==== join9-generated.dup13 + + SELECT id, x, y, z, t4.id, t5.id, t6.id + FROM t6 NATURAL FULL JOIN t5 NATURAL FULL JOIN t4 + ORDER BY id; +---- +stmt 0 err 1 -1 118 no such table: t6 +==== join9-generated.dup14 + + SELECT id, w, x, y, z + FROM t3 FULL JOIN t4 USING(id) + NATURAL FULL JOIN t5 + FULL JOIN t6 USING(id) + ORDER BY 1; +---- +stmt 0 err 1 -1 153 no such table: t3 +==== join9-generated.dup15 + + SELECT id, w, x, y, z + FROM t3 JOIN dual AS d1 ON true + FULL JOIN t4 USING(id) + JOIN dual AS d2 ON true + NATURAL FULL JOIN t5 + JOIN dual AS d3 ON true + FULL JOIN t6 USING(id) + CROSS JOIN dual AS d4 + ORDER BY 1; +---- +stmt 0 err 1 -1 310 no such table: t3 +==== join9-generated.dup16 + + SELECT id, w, x, y, z + FROM t3 JOIN dual AS d1 ON true + FULL JOIN t4 USING(id) + JOIN dual AS d2 ON true + NATURAL FULL JOIN t5 + JOIN dual AS d3 ON true + FULL JOIN t6 USING(id) + CROSS JOIN dual AS d4 + WHERE x<>'bob' OR x IS NULL + ORDER BY 1; +---- +stmt 0 err 1 -1 344 no such table: t3 +==== join9-generated.dup17 + + WITH t7(id,a) AS MATERIALIZED (SELECT * FROM t4 WHERE false) + SELECT * + FROM t7 + JOIN t7 AS t7b USING(id) + FULL JOIN t3 USING(id); +---- +stmt 0 err 1 -1 164 no such table: t4 +==== join9-generated.dup18 + + SELECT * + FROM (t3 NATURAL FULL JOIN t4) + NATURAL FULL JOIN + (t5 NATURAL FULL JOIN t6) + ORDER BY 1; +---- +stmt 0 err 1 -1 132 no such table: t3 +==== join9-generated.dup19 + + SELECT * + FROM t3 NATURAL FULL JOIN + (t4 NATURAL FULL JOIN + (t5 NATURAL FULL JOIN t6)) + ORDER BY 1; +---- +stmt 0 err 1 -1 134 no such table: t3 +==== join9-generated.dup20 + + SELECT * + FROM t3 FULL JOIN ( + t4 FULL JOIN ( + t5 FULL JOIN t6 USING (id) + ) USING(id) + ) USING(id) + ORDER BY 1; +---- +stmt 0 err 1 -1 184 no such table: t3 +==== join9-generated.dup21 + + SELECT * + FROM t3 FULL JOIN ( + t4 FULL JOIN ( + t5 FULL JOIN t6 USING (id) + ) USING(id) + ) USING(id) + ORDER BY 1; +---- +stmt 0 err 1 -1 184 no such table: t3 +==== join9-generated.dup22 + + SELECT * + FROM t3 FULL JOIN ( + t4 FULL JOIN ( + t5 FULL JOIN t6 USING(id) + ) USING(id) + ) AS j1 ON j1.id=t3.id + ORDER BY coalesce(t3.id,j1.id); +---- +stmt 0 err 1 -1 212 no such table: t3 +==== join9-generated.dup23 + + SELECT * + FROM t3 FULL JOIN ( + t4 RIGHT JOIN ( + t5 FULL JOIN t6 USING(id) + ) USING(id) + ) AS j1 ON j1.id=t3.id + ORDER BY coalesce(t3.id,j1.id); +---- +stmt 0 err 1 -1 216 no such table: t3 +==== join9-generated.dup24 + + SELECT * + FROM t3 FULL JOIN ( + t4 LEFT JOIN ( + t5 FULL JOIN t6 USING(id) + ) USING(id) + ) AS j1 ON j1.id=t3.id + ORDER BY coalesce(t3.id,j1.id); +---- +stmt 0 err 1 -1 215 no such table: t3 +==== join9-generated.dup25 + + WITH t56(id,y,z) AS (SELECT * FROM t5 FULL JOIN t6 USING(id) LIMIT 50) + SELECT id,x,y,z FROM t4 JOIN t56 USING(id) + ORDER BY 1; +---- +stmt 0 err 1 -1 138 no such table: t4 +==== join9-generated.dup26 + + SELECT id,x,y,z + FROM t4 INNER JOIN (t5 FULL JOIN t6 USING(id)) USING(id) + ORDER BY 1; +---- +stmt 0 err 1 -1 100 no such table: t4 +==== join9-generated.dup27 + + SELECT id,x,y,z + FROM t4 FULL JOIN t5 USING(id) INNER JOIN t6 USING(id) + ORDER BY 1; +---- +stmt 0 err 1 -1 98 no such table: t4 +==== join9-generated.dup28 + + WITH t45(id,x,y) AS (SELECT * FROM t4 FULL JOIN t5 USING(id) LIMIT 50) + SELECT id,x,y,z FROM t45 JOIN t6 USING(id) + ORDER BY 1; +---- +stmt 0 err 1 -1 138 no such table: t4 diff --git a/parser/testdata/joinA.metadata.json b/parser/testdata/joinA.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/joinA.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/joinA.test b/parser/testdata/joinA.test new file mode 100644 index 0000000..977c093 --- /dev/null +++ b/parser/testdata/joinA.test @@ -0,0 +1,134 @@ +==== joinA-generated + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + INNER JOIN t2 USING(c,d) + INNER JOIN t3 USING(a,b,f) + INNER JOIN t4 USING(a,c,d,f) + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinA-generated.dup1 + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + LEFT JOIN t2 USING(c,d) + LEFT JOIN t3 USING(a,b,f) + LEFT JOIN t4 USING(a,c,d,f) + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinA-generated.dup2 + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + LEFT JOIN t2 USING(c,d) + RIGHT JOIN t3 USING(a,b,f) + LEFT JOIN t4 USING(a,c,d,f) + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinA-generated.dup3 + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + RIGHT JOIN t2 USING(c,d) + LEFT JOIN t3 USING(a,b,f) + RIGHT JOIN t4 USING(a,c,d,f) + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinA-generated.dup4 + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + FULL JOIN t2 USING(c,d) + LEFT JOIN t3 USING(a,b,f) + RIGHT JOIN t4 USING(a,c,d,f) + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinA-generated.dup5 + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + RIGHT JOIN t2 USING(c,d) + FULL JOIN t3 USING(a,b,f) + RIGHT JOIN t4 USING(a,c,d,f) + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinA-generated.dup6 + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + RIGHT JOIN t2 USING(c,d) + LEFT JOIN t3 USING(a,b,f) + FULL JOIN t4 USING(a,c,d,f) + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinA-generated.dup7 + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + LEFT JOIN t2 USING(c,d) + RIGHT JOIN t3 USING(a,b,f) + FULL JOIN t4 USING(a,c,d,f) + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinA-generated.dup8 + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + FULL JOIN t2 USING(c,d) + FULL JOIN t3 USING(a,b,f) + FULL JOIN t4 USING(a,c,d,f) + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinA-generated.dup9 + + SELECT a,b,c,d,t2.e,f,t3.e,t1.a + FROM t1 + FULL JOIN t2 USING(c,d) + FULL JOIN t3 USING(a,b,f) + FULL JOIN t4 USING(a,c,d,f) + WHERE t1.a!=0 + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinA-generated.dup10 + + SELECT a,b,c,d,t2.e,f,t3.e,t3.a + FROM t1 + FULL JOIN t2 USING(c,d) + FULL JOIN t3 USING(a,b,f) + FULL JOIN t4 USING(a,c,d,f) + WHERE t3.a!=0 + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinA-generated.dup11 + + SELECT a,b,c,d,t2.e,f,t3.e,t4.a + FROM t1 + FULL JOIN t2 USING(c,d) + FULL JOIN t3 USING(a,b,f) + FULL JOIN t4 USING(a,c,d,f) + WHERE t4.a!=0 + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinA-generated.dup12 + + SELECT a,b,c,d,t2.e,f,t3.e + FROM t1 + FULL JOIN t2 USING(c,d) + FULL JOIN t3 USING(a,b,f) + FULL JOIN t4 USING(a,c,d,f) + WHERE t2.e!=0 + ORDER BY 1 nulls first, 3 nulls first; +---- +stmt 0 err 1 -1 218 no such table: t1 diff --git a/parser/testdata/joinB.metadata.json b/parser/testdata/joinB.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/joinB.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/joinB.test b/parser/testdata/joinB.test new file mode 100644 index 0000000..3594c4d --- /dev/null +++ b/parser/testdata/joinB.test @@ -0,0 +1,5760 @@ +==== joinB-1 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-2 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-3 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-4 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-5 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-6 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinB-7 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-8 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL INNER JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 185 no such table: t1 +==== joinB-9 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-10 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-11 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-12 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-13 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-14 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-15 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-16 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL INNER JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-17 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-18 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-19 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-20 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-21 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-22 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinB-23 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-24 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL INNER JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 185 no such table: t1 +==== joinB-25 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-26 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-27 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-28 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-29 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-30 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-31 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-32 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL INNER JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-33 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-34 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-35 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-36 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-37 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-38 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-39 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-40 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-41 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-42 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-43 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-44 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-45 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-46 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-47 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-48 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-49 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-50 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-51 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-52 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-53 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-54 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-55 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-56 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-57 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-58 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-59 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-60 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-61 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-62 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-63 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-64 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-65 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-66 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-67 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-68 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-69 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-70 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinB-71 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-72 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 185 no such table: t1 +==== joinB-73 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-74 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-75 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-76 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-77 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-78 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-79 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-80 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-81 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-82 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-83 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-84 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-85 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-86 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinB-87 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-88 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 185 no such table: t1 +==== joinB-89 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-90 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-91 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-92 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-93 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-94 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-95 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-96 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-97 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-98 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-99 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-100 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-101 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-102 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-103 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-104 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL FULL JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-105 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-106 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-107 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-108 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-109 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-110 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-111 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-112 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL FULL JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-113 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-114 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-115 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-116 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-117 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-118 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-119 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-120 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL FULL JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-121 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-122 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-123 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-124 + + SELECT a, c, d, e, f, g + FROM t1 + INNER JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-125 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-126 + + SELECT a, b, c, d, e, f, g + FROM t1 + INNER JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-127 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + INNER JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-128 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL INNER JOIN t2 + NATURAL FULL JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-129 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-130 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-131 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-132 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-133 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-134 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-135 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-136 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL INNER JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-137 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-138 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-139 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-140 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-141 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-142 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-143 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-144 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL INNER JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-145 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-146 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-147 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-148 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-149 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-150 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-151 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-152 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL INNER JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-153 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-154 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-155 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-156 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-157 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-158 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-159 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-160 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL INNER JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-161 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-162 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-163 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-164 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-165 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-166 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-167 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-168 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-169 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-170 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 181 no such table: t1 +==== joinB-171 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-172 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 172 no such table: t1 +==== joinB-173 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-174 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 197 no such table: t1 +==== joinB-175 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-176 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-177 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-178 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-179 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-180 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-181 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-182 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-183 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-184 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-185 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-186 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 181 no such table: t1 +==== joinB-187 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-188 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 172 no such table: t1 +==== joinB-189 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-190 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 197 no such table: t1 +==== joinB-191 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-192 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-193 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-194 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-195 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-196 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-197 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-198 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-199 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-200 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-201 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-202 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-203 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-204 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-205 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-206 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-207 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-208 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-209 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-210 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-211 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-212 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-213 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-214 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-215 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-216 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-217 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-218 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-219 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-220 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-221 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-222 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-223 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-224 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-225 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-226 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-227 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-228 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-229 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-230 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-231 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-232 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL FULL JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-233 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-234 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 181 no such table: t1 +==== joinB-235 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-236 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 172 no such table: t1 +==== joinB-237 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-238 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 197 no such table: t1 +==== joinB-239 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-240 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL FULL JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-241 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-242 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-243 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-244 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-245 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-246 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-247 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-248 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL FULL JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-249 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-250 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 181 no such table: t1 +==== joinB-251 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-252 + + SELECT a, c, d, e, f, g + FROM t1 + LEFT JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 172 no such table: t1 +==== joinB-253 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-254 + + SELECT a, b, c, d, e, f, g + FROM t1 + LEFT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 197 no such table: t1 +==== joinB-255 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + LEFT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-256 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL LEFT JOIN t2 + NATURAL FULL JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-257 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-258 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-259 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-260 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-261 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-262 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinB-263 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-264 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL INNER JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 185 no such table: t1 +==== joinB-265 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-266 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-267 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-268 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-269 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-270 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-271 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-272 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL INNER JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-273 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-274 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-275 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-276 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-277 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-278 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinB-279 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-280 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL INNER JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 185 no such table: t1 +==== joinB-281 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-282 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-283 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-284 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-285 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-286 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-287 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-288 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL INNER JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-289 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-290 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-291 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-292 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-293 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-294 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-295 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-296 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-297 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-298 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-299 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-300 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-301 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-302 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-303 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-304 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-305 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-306 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-307 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-308 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-309 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-310 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-311 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-312 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-313 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-314 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-315 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-316 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-317 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-318 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-319 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-320 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-321 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-322 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-323 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-324 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-325 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-326 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinB-327 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-328 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 185 no such table: t1 +==== joinB-329 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-330 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-331 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-332 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-333 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-334 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-335 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-336 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-337 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-338 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-339 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-340 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-341 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 177 no such table: t1 +==== joinB-342 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 200 no such table: t1 +==== joinB-343 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-344 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 185 no such table: t1 +==== joinB-345 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-346 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-347 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-348 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-349 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-350 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-351 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-352 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-353 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-354 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-355 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-356 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-357 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-358 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-359 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-360 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL FULL JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-361 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-362 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-363 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-364 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-365 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-366 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-367 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-368 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL FULL JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-369 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-370 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-371 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-372 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-373 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-374 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-375 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-376 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL FULL JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-377 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-378 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-379 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-380 + + SELECT a, c, d, e, f, g + FROM t1 + RIGHT JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-381 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-382 + + SELECT a, b, c, d, e, f, g + FROM t1 + RIGHT JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-383 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + RIGHT JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-384 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL RIGHT JOIN t2 + NATURAL FULL JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-385 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-386 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-387 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-388 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-389 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-390 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-391 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-392 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL INNER JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-393 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-394 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-395 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-396 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-397 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-398 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-399 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-400 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL INNER JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-401 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-402 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-403 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-404 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-405 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-406 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-407 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-408 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL INNER JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-409 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-410 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-411 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-412 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 INNER JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-413 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-414 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + INNER JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-415 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + INNER JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-416 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL INNER JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-417 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-418 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-419 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-420 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-421 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-422 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-423 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-424 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-425 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-426 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 181 no such table: t1 +==== joinB-427 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-428 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 172 no such table: t1 +==== joinB-429 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-430 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 197 no such table: t1 +==== joinB-431 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-432 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-433 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-434 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-435 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-436 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-437 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-438 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-439 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-440 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-441 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-442 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 181 no such table: t1 +==== joinB-443 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-444 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 LEFT JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 172 no such table: t1 +==== joinB-445 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-446 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + LEFT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 197 no such table: t1 +==== joinB-447 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + LEFT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-448 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL LEFT JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-449 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-450 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-451 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-452 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-453 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-454 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-455 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-456 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-457 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-458 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-459 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-460 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-461 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-462 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-463 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-464 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-465 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-466 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-467 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-468 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-469 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 176 no such table: t1 +==== joinB-470 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 199 no such table: t1 +==== joinB-471 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-472 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 184 no such table: t1 +==== joinB-473 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-474 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-475 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-476 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 RIGHT JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-477 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-478 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + RIGHT JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-479 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + RIGHT JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-480 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL RIGHT JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-481 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-482 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-483 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-484 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + INNER JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-485 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-486 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + INNER JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-487 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + INNER JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-488 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL FULL JOIN t3 + NATURAL INNER JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-489 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-490 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 181 no such table: t1 +==== joinB-491 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-492 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + LEFT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 172 no such table: t1 +==== joinB-493 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-494 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + LEFT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 197 no such table: t1 +==== joinB-495 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + LEFT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-496 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL FULL JOIN t3 + NATURAL LEFT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-497 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-498 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 +==== joinB-499 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-500 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + RIGHT JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-501 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 175 no such table: t1 +==== joinB-502 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + RIGHT JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 198 no such table: t1 +==== joinB-503 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + RIGHT JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-504 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL FULL JOIN t3 + NATURAL RIGHT JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 183 no such table: t1 +==== joinB-505 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + INNER JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-506 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + INNER JOIN t5 USING(a,b) + WHERE a<>13 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 181 no such table: t1 +==== joinB-507 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + LEFT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-508 + + SELECT a, c, d, e, f, g + FROM t1 + FULL JOIN (t2 FULL JOIN t3 USING(a)) USING(a) + FULL JOIN (t4 LEFT JOIN t5 USING(a)) USING(a) + WHERE a<=18 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 172 no such table: t1 +==== joinB-509 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + RIGHT JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== joinB-510 + + SELECT a, b, c, d, e, f, g + FROM t1 + FULL JOIN t2 USING(a,b) + FULL JOIN t3 USING(a,b) + FULL JOIN t4 USING(a,b) + RIGHT JOIN t5 USING(a,b) + WHERE d<>33 OR d IS NULL + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 197 no such table: t1 +==== joinB-511 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 + FULL JOIN t2 USING(a) + FULL JOIN t3 USING(a) + FULL JOIN t4 USING(a) + FULL JOIN t5 USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 173 no such table: t1 +==== joinB-512 + + SELECT b, c, d, e, f, g + FROM t1 + NATURAL FULL JOIN t2 + NATURAL FULL JOIN t3 + NATURAL FULL JOIN t4 + NATURAL FULL JOIN t5 + WHERE b BETWEEN 12 AND 17 + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 182 no such table: t1 diff --git a/parser/testdata/joinC.metadata.json b/parser/testdata/joinC.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/joinC.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/joinC.test b/parser/testdata/joinC.test new file mode 100644 index 0000000..d5c7cd8 --- /dev/null +++ b/parser/testdata/joinC.test @@ -0,0 +1,3328 @@ +==== joinC-1 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-2 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-3 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-4 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-5 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-6 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-7 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-8 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-9 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-10 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-11 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-12 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-13 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-14 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-15 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-16 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-17 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-18 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-19 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-20 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-21 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-22 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-23 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-24 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-25 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-26 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-27 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-28 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-29 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-30 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-31 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-32 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-33 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-34 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-35 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-36 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-37 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-38 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-39 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-40 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-41 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-42 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-43 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-44 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-45 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-46 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-47 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-48 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-49 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-50 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-51 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-52 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-53 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-54 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-55 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-56 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-57 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-58 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-59 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-60 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-61 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-62 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-63 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-64 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 INNER JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-65 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-66 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-67 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-68 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-69 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-70 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-71 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-72 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-73 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-74 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-75 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-76 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-77 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-78 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-79 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-80 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-81 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-82 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-83 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-84 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-85 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-86 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-87 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-88 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-89 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-90 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-91 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-92 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-93 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-94 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-95 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-96 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-97 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-98 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-99 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-100 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-101 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-102 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-103 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-104 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-105 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-106 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-107 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-108 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-109 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-110 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-111 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-112 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-113 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-114 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-115 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-116 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-117 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-118 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-119 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-120 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-121 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-122 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-123 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-124 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-125 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-126 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-127 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-128 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 LEFT JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-129 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-130 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-131 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-132 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-133 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-134 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-135 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-136 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-137 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-138 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-139 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-140 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-141 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-142 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-143 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-144 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-145 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-146 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-147 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-148 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-149 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-150 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-151 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-152 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-153 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-154 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-155 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-156 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-157 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-158 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-159 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-160 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-161 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-162 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-163 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-164 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-165 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-166 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-167 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-168 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-169 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-170 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-171 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinC-172 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-173 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-174 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-175 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-176 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-177 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-178 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-179 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-180 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-181 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-182 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-183 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-184 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-185 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-186 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-187 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-188 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-189 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-190 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-191 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-192 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 RIGHT JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-193 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-194 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-195 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-196 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-197 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-198 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-199 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-200 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-201 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-202 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-203 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-204 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-205 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-206 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-207 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-208 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 INNER JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-209 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-210 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-211 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-212 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-213 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-214 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-215 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-216 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-217 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-218 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-219 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-220 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-221 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-222 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-223 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-224 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 LEFT JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-225 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-226 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-227 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-228 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-229 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-230 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-231 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-232 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-233 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-234 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-235 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinC-236 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-237 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-238 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-239 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-240 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 RIGHT JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-241 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-242 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-243 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-244 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 INNER JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-245 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-246 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-247 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-248 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 LEFT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-249 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-250 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-251 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 191 no such table: t1 +==== joinC-252 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 RIGHT JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-253 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 INNER JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-254 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 LEFT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 +==== joinC-255 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 RIGHT JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 190 no such table: t1 +==== joinC-256 + + SELECT a, t1.a, t2.a, t3.a, t4.a, t5.a + FROM t1 FULL JOIN ( + t2 FULL JOIN ( + t3 FULL JOIN ( + t4 FULL JOIN t5 USING(a) + ) USING(a) + ) USING(a) + ) USING(a) + ORDER BY 1 NULLS FIRST; +---- +stmt 0 err 1 -1 189 no such table: t1 diff --git a/parser/testdata/joinD.metadata.json b/parser/testdata/joinD.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/joinD.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/joinD.test b/parser/testdata/joinD.test new file mode 100644 index 0000000..0d96a8f --- /dev/null +++ b/parser/testdata/joinD.test @@ -0,0 +1,11435 @@ +==== joinD-1 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 204 no such table: t1 +==== joinD-2 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-3 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-4 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-5 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 217 no such table: t1 +==== joinD-6 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-7 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-8 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-9 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-10 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-11 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-12 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-13 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-14 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 267 no such table: t1 +==== joinD-15 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-16 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-17 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-18 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-19 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-20 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-21 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-22 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-23 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-24 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-25 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-26 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-27 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-28 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-29 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-30 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-31 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-32 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-33 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-34 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-35 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-36 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-37 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-38 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-39 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 204 no such table: t1 +==== joinD-40 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-41 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-42 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-43 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 217 no such table: t1 +==== joinD-44 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-45 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-46 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-47 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-48 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-49 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-50 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-51 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-52 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 267 no such table: t1 +==== joinD-53 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-54 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-55 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-56 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-57 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-58 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-59 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-60 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-61 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-62 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-63 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-64 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-65 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-66 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-67 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-68 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-69 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-70 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-71 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-72 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-73 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-74 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-75 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-76 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-77 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-78 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-79 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-80 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-81 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-82 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-83 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-84 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-85 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-86 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-87 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-88 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-89 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-90 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-91 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-92 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-93 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-94 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-95 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-96 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-97 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-98 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-99 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-100 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-101 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-102 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-103 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-104 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-105 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-106 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-107 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-108 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-109 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 265 no such table: t1 +==== joinD-110 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-111 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-112 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-113 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-114 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-115 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-116 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-117 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-118 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-119 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-120 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-121 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-122 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-123 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-124 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-125 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-126 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-127 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-128 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-129 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-130 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-131 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-132 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-133 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-134 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-135 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-136 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-137 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-138 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-139 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-140 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-141 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-142 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-143 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-144 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-145 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-146 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-147 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-148 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-149 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-150 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-151 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-152 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-153 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 204 no such table: t1 +==== joinD-154 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-155 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-156 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-157 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 217 no such table: t1 +==== joinD-158 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-159 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-160 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-161 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-162 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-163 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-164 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-165 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-166 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 267 no such table: t1 +==== joinD-167 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-168 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-169 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-170 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-171 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-172 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-173 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-174 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-175 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-176 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-177 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-178 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-179 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-180 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-181 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-182 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-183 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-184 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-185 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-186 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-187 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-188 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-189 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-190 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-191 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 204 no such table: t1 +==== joinD-192 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-193 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-194 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-195 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 217 no such table: t1 +==== joinD-196 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-197 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-198 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-199 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-200 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-201 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-202 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-203 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-204 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 267 no such table: t1 +==== joinD-205 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-206 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-207 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-208 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-209 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-210 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-211 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-212 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-213 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-214 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-215 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-216 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-217 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-218 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-219 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-220 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-221 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-222 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-223 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-224 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-225 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-226 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-227 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-228 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-229 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-230 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-231 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-232 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-233 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-234 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-235 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-236 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-237 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-238 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-239 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-240 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-241 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-242 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-243 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-244 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-245 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-246 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-247 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-248 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-249 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-250 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-251 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-252 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-253 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-254 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-255 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-256 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-257 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-258 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-259 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-260 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-261 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-262 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-263 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-264 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-265 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-266 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-267 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-268 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-269 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-270 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-271 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-272 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-273 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-274 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-275 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-276 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-277 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-278 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-279 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-280 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-281 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-282 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-283 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-284 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-285 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-286 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-287 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-288 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-289 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-290 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-291 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-292 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-293 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-294 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-295 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-296 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 227 no such table: t1 +==== joinD-297 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-298 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-299 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-300 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-301 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-302 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-303 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-304 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-305 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-306 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-307 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-308 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-309 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-310 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-311 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-312 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-313 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-314 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-315 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-316 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-317 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-318 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-319 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-320 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-321 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-322 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-323 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-324 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-325 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-326 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-327 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-328 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-329 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-330 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-331 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-332 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-333 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 265 no such table: t1 +==== joinD-334 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-335 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-336 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-337 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-338 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-339 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-340 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-341 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-342 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-343 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-344 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-345 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-346 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-347 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-348 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-349 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-350 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-351 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-352 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-353 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-354 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-355 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-356 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-357 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-358 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-359 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-360 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-361 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-362 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-363 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-364 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-365 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-366 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-367 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-368 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-369 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-370 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-371 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-372 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-373 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-374 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-375 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-376 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-377 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-378 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-379 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-380 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-381 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-382 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-383 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-384 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-385 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-386 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-387 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-388 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-389 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-390 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 265 no such table: t1 +==== joinD-391 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-392 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-393 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-394 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-395 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-396 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinD-397 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-398 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-399 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-400 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-401 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-402 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-403 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-404 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-405 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-406 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-407 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-408 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-409 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 264 no such table: t1 +==== joinD-410 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 268 no such table: t1 +==== joinD-411 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 268 no such table: t1 +==== joinD-412 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 268 no such table: t1 +==== joinD-413 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 212 no such table: t1 +==== joinD-414 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 212 no such table: t1 +==== joinD-415 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-416 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-417 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-418 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-419 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-420 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-421 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-422 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-423 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-424 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-425 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-426 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-427 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-428 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 265 no such table: t1 +==== joinD-429 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-430 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-431 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-432 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-433 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-434 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinD-435 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-436 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-437 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-438 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-439 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-440 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-441 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-442 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-443 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-444 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-445 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-446 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-447 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 245 no such table: t1 +==== joinD-448 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 249 no such table: t1 +==== joinD-449 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 249 no such table: t1 +==== joinD-450 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 249 no such table: t1 +==== joinD-451 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 212 no such table: t1 +==== joinD-452 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 212 no such table: t1 +==== joinD-453 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-454 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-455 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-456 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-457 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-458 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-459 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-460 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-461 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-462 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-463 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-464 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-465 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-466 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-467 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-468 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-469 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-470 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-471 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-472 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-473 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-474 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-475 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-476 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-477 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-478 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-479 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-480 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-481 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-482 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-483 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-484 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-485 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 265 no such table: t1 +==== joinD-486 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-487 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-488 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-489 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-490 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-491 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-492 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-493 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-494 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-495 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-496 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-497 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-498 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-499 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-500 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-501 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-502 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-503 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-504 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-505 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-506 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-507 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-508 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-509 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-510 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-511 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-512 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-513 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-514 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-515 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-516 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-517 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-518 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-519 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-520 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-521 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-522 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-523 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-524 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-525 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-526 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-527 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-528 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-529 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-530 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-531 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-532 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-533 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-534 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-535 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-536 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-537 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-538 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-539 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-540 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-541 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-542 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-543 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-544 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-545 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-546 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-547 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinD-548 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-549 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-550 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-551 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-552 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-553 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-554 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-555 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-556 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-557 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-558 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-559 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-560 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 245 no such table: t1 +==== joinD-561 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 249 no such table: t1 +==== joinD-562 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 249 no such table: t1 +==== joinD-563 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 249 no such table: t1 +==== joinD-564 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 212 no such table: t1 +==== joinD-565 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-566 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-567 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-568 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-569 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-570 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-571 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-572 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-573 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-574 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-575 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-576 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-577 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-578 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-579 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-580 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-581 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-582 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-583 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinD-584 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-585 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-586 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-587 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-588 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-589 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-590 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-591 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-592 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-593 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-594 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-595 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-596 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-597 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 230 no such table: t1 +==== joinD-598 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 230 no such table: t1 +==== joinD-599 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 230 no such table: t1 +==== joinD-600 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 212 no such table: t1 +==== joinD-601 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 204 no such table: t1 +==== joinD-602 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-603 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-604 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-605 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 217 no such table: t1 +==== joinD-606 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-607 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-608 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-609 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-610 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-611 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-612 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-613 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-614 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 267 no such table: t1 +==== joinD-615 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-616 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-617 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-618 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-619 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-620 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-621 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-622 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-623 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-624 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-625 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-626 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-627 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-628 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-629 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-630 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-631 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-632 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-633 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-634 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-635 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-636 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-637 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-638 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-639 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 204 no such table: t1 +==== joinD-640 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-641 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-642 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-643 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 217 no such table: t1 +==== joinD-644 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-645 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-646 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-647 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-648 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-649 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-650 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-651 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-652 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 267 no such table: t1 +==== joinD-653 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-654 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-655 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-656 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-657 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-658 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-659 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-660 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-661 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-662 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-663 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-664 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-665 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-666 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-667 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-668 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-669 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-670 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-671 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-672 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-673 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-674 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-675 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-676 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-677 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-678 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-679 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-680 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-681 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-682 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-683 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-684 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-685 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-686 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-687 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-688 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-689 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-690 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-691 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-692 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-693 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-694 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-695 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-696 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-697 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-698 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-699 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-700 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-701 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-702 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-703 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-704 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-705 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-706 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-707 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-708 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-709 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 265 no such table: t1 +==== joinD-710 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-711 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-712 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 269 no such table: t1 +==== joinD-713 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-714 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-715 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-716 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-717 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-718 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-719 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-720 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-721 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-722 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-723 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-724 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-725 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-726 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-727 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-728 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-729 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-730 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-731 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-732 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-733 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-734 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-735 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-736 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-737 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-738 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-739 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-740 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-741 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-742 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-743 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-744 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-745 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-746 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-747 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-748 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-749 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-750 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-751 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-752 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-753 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 204 no such table: t1 +==== joinD-754 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-755 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-756 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-757 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 217 no such table: t1 +==== joinD-758 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-759 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-760 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-761 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-762 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-763 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-764 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-765 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-766 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 267 no such table: t1 +==== joinD-767 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-768 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-769 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-770 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-771 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-772 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-773 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-774 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-775 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-776 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-777 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-778 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-779 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-780 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-781 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-782 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-783 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-784 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-785 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 266 no such table: t1 +==== joinD-786 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-787 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-788 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 270 no such table: t1 +==== joinD-789 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-790 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-791 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 204 no such table: t1 +==== joinD-792 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-793 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-794 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-795 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 217 no such table: t1 +==== joinD-796 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-797 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-798 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-799 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-800 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-801 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-802 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-803 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 208 no such table: t1 +==== joinD-804 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 267 no such table: t1 +==== joinD-805 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-806 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-807 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 271 no such table: t1 +==== joinD-808 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-809 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-810 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-811 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-812 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-813 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-814 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-815 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-816 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-817 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-818 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-819 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-820 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-821 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-822 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-823 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-824 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-825 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-826 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-827 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-828 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-829 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-830 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-831 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-832 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-833 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-834 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-835 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-836 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-837 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-838 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-839 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-840 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-841 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-842 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-843 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-844 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-845 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-846 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-847 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-848 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-849 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-850 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-851 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-852 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-853 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-854 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-855 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-856 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-857 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-858 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-859 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-860 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-861 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-862 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-863 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-864 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-865 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-866 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-867 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-868 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-869 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-870 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-871 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-872 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-873 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-874 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-875 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-876 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-877 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-878 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-879 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-880 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-881 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-882 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-883 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-884 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-885 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-886 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-887 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-888 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-889 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-890 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-891 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-892 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-893 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-894 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-895 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-896 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 227 no such table: t1 +==== joinD-897 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-898 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-899 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-900 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-901 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-902 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-903 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-904 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-905 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-906 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-907 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-908 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-909 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-910 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-911 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-912 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-913 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-914 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-915 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-916 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-917 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-918 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-919 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-920 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-921 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-922 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-923 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-924 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-925 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-926 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-927 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-928 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-929 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-930 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-931 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-932 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-933 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-934 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-935 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-936 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-937 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-938 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-939 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-940 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-941 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-942 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-943 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-944 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-945 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-946 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-947 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-948 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-949 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-950 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-951 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-952 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-953 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-954 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-955 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-956 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-957 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-958 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-959 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-960 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-961 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-962 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-963 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + INNER JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-964 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 227 no such table: t1 +==== joinD-965 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-966 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-967 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-968 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-969 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-970 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-971 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-972 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-973 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-974 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-975 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-976 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-977 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-978 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-979 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-980 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-981 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-982 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-983 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-984 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-985 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-986 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinD-987 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-988 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-989 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-990 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-991 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-992 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-993 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-994 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-995 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-996 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-997 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-998 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 245 no such table: t1 +==== joinD-999 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 249 no such table: t1 +==== joinD-1000 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 249 no such table: t1 +==== joinD-1001 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 249 no such table: t1 +==== joinD-1002 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 212 no such table: t1 +==== joinD-1003 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-1004 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1005 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-1006 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-1007 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1008 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1009 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1010 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1011 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1012 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1013 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1014 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1015 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-1016 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-1017 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-1018 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-1019 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-1020 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinD-1021 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1022 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-1023 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-1024 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1025 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-1026 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1027 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-1028 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1029 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1030 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1031 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + LEFT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1032 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-1033 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 230 no such table: t1 +==== joinD-1034 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 230 no such table: t1 +==== joinD-1035 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 230 no such table: t1 +==== joinD-1036 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 212 no such table: t1 +==== joinD-1037 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-1038 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1039 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-1040 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-1041 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1042 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-1043 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1044 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-1045 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1046 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1047 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1048 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1049 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-1050 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-1051 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-1052 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-1053 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-1054 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-1055 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1056 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-1057 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-1058 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1059 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1060 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1061 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1062 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1063 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1064 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1065 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1066 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 246 no such table: t1 +==== joinD-1067 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-1068 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-1069 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 250 no such table: t1 +==== joinD-1070 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-1071 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 203 no such table: t1 +==== joinD-1072 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1073 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 225 no such table: t1 +==== joinD-1074 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 216 no such table: t1 +==== joinD-1075 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1076 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-1077 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1078 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-1079 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1080 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1081 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1082 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1083 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 247 no such table: t1 +==== joinD-1084 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-1085 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-1086 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 251 no such table: t1 +==== joinD-1087 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-1088 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-1089 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1090 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-1091 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-1092 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1093 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1094 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1095 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1096 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1097 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1098 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1099 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + RIGHT JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1100 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 227 no such table: t1 +==== joinD-1101 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-1102 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-1103 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-1104 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 213 no such table: t1 +==== joinD-1105 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-1106 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1107 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-1108 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-1109 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1110 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1111 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1112 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1113 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1114 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1115 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1116 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + INNER JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1117 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 227 no such table: t1 +==== joinD-1118 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-1119 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-1120 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + INNER JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-1121 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinD-1122 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1123 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-1124 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-1125 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1126 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-1127 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1128 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-1129 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1130 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1131 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1132 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + LEFT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1133 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 226 no such table: t1 +==== joinD-1134 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 230 no such table: t1 +==== joinD-1135 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 230 no such table: t1 +==== joinD-1136 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + LEFT JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 230 no such table: t1 +==== joinD-1137 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 202 no such table: t1 +==== joinD-1138 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1139 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 224 no such table: t1 +==== joinD-1140 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 215 no such table: t1 +==== joinD-1141 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1142 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1143 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1144 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 222 no such table: t1 +==== joinD-1145 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1146 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1147 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1148 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + RIGHT JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 206 no such table: t1 +==== joinD-1149 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 227 no such table: t1 +==== joinD-1150 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-1151 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-1152 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + RIGHT JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 231 no such table: t1 +==== joinD-1153 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 201 no such table: t1 +==== joinD-1154 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1155 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE (t2.x>0 OR t2.x IS NULL) + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 223 no such table: t1 +==== joinD-1156 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON true + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t1.b=t2.b AND t2.x>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 214 no such table: t1 +==== joinD-1157 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1158 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t3.y>0 OR t3.y IS NULL + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-1159 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1160 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z IS NULL OR t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 221 no such table: t1 +==== joinD-1161 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1162 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t4.z>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1163 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d AND t4.z>0 + WHERE t2.x>0 AND t3.y>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1164 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b=t2.b + FULL JOIN t3 ON t1.c=t3.c + FULL JOIN t4 ON t1.d=t4.d + WHERE t2.x>0 AND t3.y>0 AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 205 no such table: t1 +==== joinD-1165 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 207 no such table: t1 +==== joinD-1166 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b = t2.b + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 211 no such table: t1 +==== joinD-1167 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t3.y>0 + FULL JOIN t4 ON t1.d = t4.d AND t4.z>0 + WHERE t1.b = t2.b AND t1.c = t3.c + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 211 no such table: t1 +==== joinD-1168 + + SELECT t1.*, t2.*, t3.*, t4.* + FROM t1 FULL JOIN t2 ON t2.x>0 + FULL JOIN t3 ON t1.c = t3.c AND t3.y>0 + FULL JOIN t4 ON t4.z>0 + WHERE t1.b = t2.b AND t1.d = t4.d + ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0); +---- +stmt 0 err 1 -1 211 no such table: t1 +==== joinD-extra-1000 + + CREATE VIEW v1 AS + SELECT * + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0; + CREATE TRIGGER v1r1 INSTEAD OF UPDATE OF c ON v1 BEGIN + UPDATE t1 SET c=new.c WHERE (a,b,c,d) IS (old.a,old.b,old.c,old.d); + UPDATE t3 SET c=new.c WHERE (c,y) IS (old.c,old.y); + END; + SELECT * FROM v1 WHERE y BETWEEN 30 AND 40 ORDER BY y; +---- +stmt 0 ok +stmt 167 err 1 -1 224 no such table: main.v1 +stmt 359 err 1 -1 416 no such table: v1 +==== joinD-extra-1010 + + BEGIN; + UPDATE v1 SET c=c+1000 WHERE y BETWEEN 30 and 40; + SELECT * FROM v1 WHERE y BETWEEN 30 AND 40 ORDER BY y; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 61 no such table: v1 +stmt 61 err 1 -1 118 no such table: v1 +stmt 118 ok diff --git a/parser/testdata/joinE.metadata.json b/parser/testdata/joinE.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/joinE.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/joinE.test b/parser/testdata/joinE.test new file mode 100644 index 0000000..166250f --- /dev/null +++ b/parser/testdata/joinE.test @@ -0,0 +1,252 @@ +==== joinE-1 + + SELECT a, b + FROM t1 INNER JOIN t2 ON true + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 74 no such table: t1 +==== joinE-2 + + SELECT a, b + FROM t1 INNER JOIN t2 ON true WHERE a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 90 no such table: t1 +==== joinE-3 + + SELECT a, b + FROM t1 INNER JOIN t2 ON a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 79 no such table: t1 +==== joinE-4 + + SELECT a, b + FROM t1 INNER JOIN t2 ON true WHERE b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 90 no such table: t1 +==== joinE-5 + + SELECT a, b + FROM t1 INNER JOIN t2 ON b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 79 no such table: t1 +==== joinE-6 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON true + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 73 no such table: t1 +==== joinE-7 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON true WHERE a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 89 no such table: t1 +==== joinE-8 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 78 no such table: t1 +==== joinE-9 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON true WHERE b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 89 no such table: t1 +==== joinE-10 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 78 no such table: t1 +==== joinE-11 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON true + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 74 no such table: t1 +==== joinE-12 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON true WHERE a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 90 no such table: t1 +==== joinE-13 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 79 no such table: t1 +==== joinE-14 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON true WHERE b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 90 no such table: t1 +==== joinE-15 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 79 no such table: t1 +==== joinE-16 + + SELECT a, b + FROM t1 FULL JOIN t2 ON true + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 73 no such table: t1 +==== joinE-17 + + SELECT a, b + FROM t1 FULL JOIN t2 ON true WHERE a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 89 no such table: t1 +==== joinE-19 + + SELECT a, b + FROM t1 FULL JOIN t2 ON true WHERE b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 89 no such table: t1 +==== joinE-21 + + SELECT a, b + FROM t1 INNER JOIN t2 ON true + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 74 no such table: t1 +==== joinE-22 + + SELECT a, b + FROM t1 INNER JOIN t2 ON true WHERE a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 90 no such table: t1 +==== joinE-23 + + SELECT a, b + FROM t1 INNER JOIN t2 ON a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 79 no such table: t1 +==== joinE-24 + + SELECT a, b + FROM t1 INNER JOIN t2 ON true WHERE b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 90 no such table: t1 +==== joinE-25 + + SELECT a, b + FROM t1 INNER JOIN t2 ON b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 79 no such table: t1 +==== joinE-26 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON true + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 73 no such table: t1 +==== joinE-27 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON true WHERE a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 89 no such table: t1 +==== joinE-28 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 78 no such table: t1 +==== joinE-29 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON true WHERE b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 89 no such table: t1 +==== joinE-30 + + SELECT a, b + FROM t1 LEFT JOIN t2 ON b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 78 no such table: t1 +==== joinE-31 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON true + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 74 no such table: t1 +==== joinE-32 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON true WHERE a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 90 no such table: t1 +==== joinE-33 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 79 no such table: t1 +==== joinE-34 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON true WHERE b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 90 no such table: t1 +==== joinE-35 + + SELECT a, b + FROM t1 RIGHT JOIN t2 ON b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 79 no such table: t1 +==== joinE-36 + + SELECT a, b + FROM t1 FULL JOIN t2 ON true + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 73 no such table: t1 +==== joinE-37 + + SELECT a, b + FROM t1 FULL JOIN t2 ON true WHERE a IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 89 no such table: t1 +==== joinE-39 + + SELECT a, b + FROM t1 FULL JOIN t2 ON true WHERE b IS NULL + ORDER BY coalesce(a,b,3); +---- +stmt 0 err 1 -1 89 no such table: t1 diff --git a/parser/testdata/joinF.metadata.json b/parser/testdata/joinF.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/joinF.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/joinF.test b/parser/testdata/joinF.test new file mode 100644 index 0000000..a5ffef9 --- /dev/null +++ b/parser/testdata/joinF.test @@ -0,0 +1,513 @@ +==== joinF-1 + + SELECT * + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== joinF-2 + + SELECT * + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 195 no such table: t1 +==== joinF-3 + + SELECT * + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-4 + + SELECT * + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-5 + + SELECT * + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== joinF-6 + + SELECT * + FROM t1 INNER JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 195 no such table: t1 +==== joinF-7 + + SELECT * + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-8 + + SELECT * + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-9 + + SELECT * + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 145 no such table: t1 +==== joinF-10 + + SELECT * + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinF-11 + + SELECT * + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-12 + + SELECT * + FROM t1 INNER JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-13 + + SELECT * + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== joinF-14 + + SELECT * + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 195 no such table: t1 +==== joinF-15 + + SELECT * + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-16 + + SELECT * + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-17 + + SELECT * + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== joinF-18 + + SELECT * + FROM t1 INNER JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 195 no such table: t1 +==== joinF-19 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-20 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-21 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 145 no such table: t1 +==== joinF-22 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinF-23 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-24 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-25 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 145 no such table: t1 +==== joinF-26 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinF-27 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 144 no such table: t1 +==== joinF-28 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 192 no such table: t1 +==== joinF-29 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 145 no such table: t1 +==== joinF-30 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinF-31 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-32 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-33 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 145 no such table: t1 +==== joinF-34 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinF-35 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-36 + + SELECT * + FROM t1 LEFT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-37 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== joinF-38 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 195 no such table: t1 +==== joinF-39 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-40 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-41 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== joinF-42 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + INNER JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 195 no such table: t1 +==== joinF-43 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-44 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-45 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 145 no such table: t1 +==== joinF-46 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 193 no such table: t1 +==== joinF-47 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-48 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + LEFT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-49 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== joinF-50 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + INNER JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 195 no such table: t1 +==== joinF-51 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 146 no such table: t1 +==== joinF-52 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + LEFT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 194 no such table: t1 +==== joinF-53 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== joinF-54 + + SELECT * + FROM t1 RIGHT JOIN t2 ON true + RIGHT JOIN t3 ON t2.y IS NOT NULL + RIGHT JOIN t4 ON true + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600) + ORDER BY coalesce(t1.x,t2.y,t3.z,t4.w,0); +---- +stmt 0 err 1 -1 195 no such table: t1 diff --git a/parser/testdata/joinH.metadata.json b/parser/testdata/joinH.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/joinH.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/joinH.test b/parser/testdata/joinH.test new file mode 100644 index 0000000..9936917 --- /dev/null +++ b/parser/testdata/joinH.test @@ -0,0 +1,591 @@ +==== 1.0 + + CREATE TABLE t1(a INT); + CREATE TABLE t2(b INT); + INSERT INTO t2(b) VALUES(NULL); +---- +stmt 0 ok +stmt 26 ok +stmt 52 err 1 -1 86 no such table: t2 +==== 1.1 + + SELECT DISTINCT a FROM t1 FULL JOIN t2 ON true WHERE (b ISNULL); +---- +stmt 0 err 1 -1 67 no such table: t1 +==== 1.2 + + SELECT a FROM t1 FULL JOIN t2 ON true; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 1.3 + + SELECT a FROM t1 FULL JOIN t2 ON true WHERE (b ISNULL); +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 1.4 + + SELECT DISTINCT a FROM t1 FULL JOIN t2 ON true; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 2.0 + + CREATE TABLE r3(x); + CREATE TABLE r4(y INTEGER PRIMARY KEY); + INSERT INTO r4 VALUES(55); +---- +stmt 0 ok +stmt 22 ok +stmt 64 err 1 -1 93 no such table: r4 +==== 2.1 + + SELECT 'value!' FROM r3 FULL JOIN r4 ON (y=x); +---- +stmt 0 err 1 -1 49 no such table: r3 +==== 2.2 + + SELECT 'value!' FROM r3 FULL JOIN r4 ON (y=x) WHERE +y=55; +---- +stmt 0 err 1 -1 61 no such table: r3 +==== 3.1 + + CREATE TABLE t0 (c0); + CREATE TABLE t1 (c0); + CREATE TABLE t2 (c0 , c1 , c2 , UNIQUE (c0), UNIQUE (c2 DESC)); + INSERT INTO t2 VALUES ('x', 'y', 'z'); + ANALYZE; + CREATE VIEW v0(c0) AS SELECT FALSE; +---- +stmt 0 ok +stmt 24 ok +stmt 48 ok +stmt 114 err 1 -1 155 no such table: t2 +stmt 155 ok +stmt 166 ok +==== 3.2 + + SELECT * FROM t0 LEFT OUTER JOIN t1 ON v0.c0 INNER JOIN v0 INNER JOIN t2 ON (t2.c2 NOT NULL); +---- +stmt 0 err 1 -1 96 no such table: t0 +==== 4.1 + + CREATE TABLE t1(a,b,c,d,e,f,g,h,PRIMARY KEY(a,b,c)) WITHOUT ROWID; + CREATE TABLE t2(i, j); + INSERT INTO t2 VALUES(10, 20); +---- +stmt 0 ok +stmt 69 ok +stmt 94 err 1 -1 127 no such table: t2 +==== 4.2 + + SELECT (d IS NULL) FROM t1 RIGHT JOIN t2 ON (j=33); +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 4.3 + + CREATE INDEX i1 ON t1( (d IS NULL), d ); +---- +stmt 0 err 1 -1 43 no such table: main.t1 +==== 4.4 + + SELECT (d IS NULL) FROM t1 RIGHT JOIN t2 ON (j=33); +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 5.0 + + CREATE TABLE t0(w); + CREATE TABLE t1(x); + CREATE TABLE t2(y); + CREATE TABLE t3(z); + INSERT INTO t3 VALUES('t3val'); +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +stmt 66 ok +stmt 88 err 1 -1 122 no such table: t3 +==== 5.1 + + SELECT * FROM t1 INNER JOIN t2 ON (0) RIGHT OUTER JOIN t3; +---- +stmt 0 err 1 -1 61 no such table: t1 +==== 5.2 + + SELECT * FROM t1 INNER JOIN t2 ON (0) FULL OUTER JOIN t3; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== 5.3 + + SELECT * FROM t3 LEFT JOIN t2 ON (0); +---- +stmt 0 err 1 -1 40 no such table: t3 +==== 5.4 + + SELECT * FROM t0 RIGHT JOIN t1 INNER JOIN t2 ON (0) RIGHT JOIN t3 +---- +stmt 0 err 1 -1 69 no such table: t0 +==== 5.5 + + SELECT * FROM t0 RIGHT JOIN t1 INNER JOIN t2 ON (0) +---- +stmt 0 err 1 -1 55 no such table: t0 +==== 6.0 + + CREATE TABLE t1(a INT); + CREATE TABLE t2(b INT); + INSERT INTO t1 VALUES(3); + SELECT CASE WHEN t2.b THEN 0 ELSE 1 END FROM t1 LEFT JOIN t2 ON true; +---- +stmt 0 ok +stmt 26 ok +stmt 52 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 152 no such table: t1 +==== 6.1 + + SELECT * FROM t1 LEFT JOIN t2 ON true WHERE CASE WHEN t2.b THEN 0 ELSE 1 END; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== 7.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c); + CREATE TABLE t3(d); + + INSERT INTO t1 VALUES ('a', 'a'); + INSERT INTO t2 VALUES ('ddd'); + INSERT INTO t3 VALUES(1234); +---- +stmt 0 ok +stmt 25 ok +stmt 47 ok +stmt 69 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 139 no such table: t2 +stmt 139 err 1 -1 170 no such table: t3 +==== 7.1 + + SELECT t2.rowid FROM t1 JOIN (t2 JOIN t3); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 7.1.dup1 + + UPDATE t1 SET b = t2.rowid FROM t2, t3; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 7.2 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 21 no such table: t1 +==== 8.0 + + CREATE TABLE x1(a INTEGER PRIMARY KEY, b); + CREATE TABLE x2(c, d); + CREATE TABLE x3(rowid, _rowid_); + + CREATE TABLE x4(rowid, _rowid_, oid); + + INSERT INTO x1 VALUES(1000, 'thousand'); + INSERT INTO x2 VALUES('c', 'd'); + INSERT INTO x3(oid, rowid, _rowid_) VALUES(43, 'hello', 'world'); + INSERT INTO x4(oid, rowid, _rowid_) VALUES('forty three', 'hello', 'world'); +---- +stmt 0 ok +stmt 45 ok +stmt 70 ok +stmt 105 ok +stmt 146 err 1 -1 190 no such table: x1 +stmt 190 err 1 -1 225 no such table: x2 +stmt 225 err 1 -1 293 no such table: x3 +stmt 293 err 1 -1 372 no such table: x4 +==== 8.1 + + SELECT x3.oid FROM x1 JOIN (x2 JOIN x3 ON c='c') +---- +stmt 0 err 1 -1 52 no such table: x1 +==== 8.2 + + SELECT x3.rowid FROM x1 JOIN (x2 JOIN x3 ON c='c') +---- +stmt 0 err 1 -1 54 no such table: x1 +==== 8.3 + + SELECT x4.oid FROM x1 JOIN (x2 JOIN x4 ON c='c') +---- +stmt 0 err 1 -1 52 no such table: x1 +==== 9.0 + + CREATE TABLE x1(a); + CREATE TABLE x2(b); + CREATE TABLE x3(c); + + CREATE TABLE wo1(a PRIMARY KEY, b) WITHOUT ROWID; + CREATE TABLE wo2(a PRIMARY KEY, rowid) WITHOUT ROWID; + CREATE TABLE wo3(a PRIMARY KEY, b) WITHOUT ROWID; +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +stmt 66 ok +stmt 119 ok +stmt 175 ok +==== 9.1 + + SELECT rowid FROM wo1, x1, x2; +---- +stmt 0 err 1 -1 33 no such table: wo1 +==== 9.2 + + SELECT rowid FROM wo1, (x1, x2); +---- +stmt 0 err 1 -1 35 no such table: wo1 +==== 9.3 + + SELECT rowid FROM wo1 JOIN (x1 JOIN x2); +---- +stmt 0 err 1 -1 43 no such table: wo1 +==== 9.4 + + SELECT a FROM wo1, x1, x2; +---- +stmt 0 err 1 -1 29 no such table: wo1 +==== 9.5 + + SELECT * FROM x1 JOIN x2 USING (rowid); +---- +stmt 0 err 1 -1 42 no such table: x1 +==== 9.6 + + SELECT * FROM wo2 JOIN x2 USING (rowid); +---- +stmt 0 err 1 -1 43 no such table: wo2 +==== 9.7 + + INSERT INTO x1(rowid, a) VALUES(101, 'A'); + INSERT INTO x2(rowid, b) VALUES(55, 'B'); + SELECT * FROM x1 NATURAL JOIN x2; +---- +stmt 0 err 1 -1 45 no such table: x1 +stmt 45 err 1 -1 89 no such table: x2 +stmt 89 err 1 -1 125 no such table: x1 +==== 9.8 + + INSERT INTO wo1(a, b) VALUES('mya', 'myb'); + INSERT INTO wo2(a, rowid) VALUES('mypk', 'myrowid'); + INSERT INTO wo3(a, b) VALUES('MYA', 'MYB'); + INSERT INTO x3(rowid, c) VALUES(99, 'x3B'); +---- +stmt 0 err 1 -1 46 no such table: wo1 +stmt 46 err 1 -1 101 no such table: wo2 +stmt 101 err 1 -1 147 no such table: wo3 +stmt 147 err 1 -1 193 no such table: x3 +==== 9.8.dup1 + + SELECT rowid FROM x1 JOIN (x2 JOIN wo2); +---- +stmt 0 err 1 -1 43 no such table: x1 +==== 9.9 + + SELECT _rowid_ FROM wo1 JOIN (wo3 JOIN x3) +---- +stmt 0 err 1 -1 46 no such table: wo1 +==== 9.10 + + SELECT oid FROM wo1 JOIN (wo3 JOIN x3) +---- +stmt 0 err 1 -1 42 no such table: wo1 +==== 9.11 + + SELECT oid FROM wo2 JOIN (wo3 JOIN x3) +---- +stmt 0 err 1 -1 42 no such table: wo2 +==== 10.0 + + CREATE TABLE rt0 (c0 INTEGER, c1 INTEGER, c2 INTEGER, c3 INTEGER, c4 INTEGER); + CREATE TABLE rt3 (c3 INTEGER); + + INSERT INTO rt0(c3, c1) VALUES (x'', '1'); + INSERT INTO rt0(c3, c1) VALUES ('-1', -1e500); + INSERT INTO rt0(c3, c1) VALUES (1, x''); + + CREATE VIEW v6(c0, c1, c2) AS SELECT 0, 0, 0; +---- +stmt 0 ok +stmt 81 ok +stmt 114 err 1 -1 160 no such table: rt0 +stmt 160 err 1 -1 209 no such table: rt0 +stmt 209 err 1 -1 252 no such table: rt0 +stmt 252 ok +==== 10.1 + + SELECT COUNT(*) FROM rt0 LEFT JOIN rt3 JOIN v6 ON ((CASE v6.c0 WHEN rt0.c4 THEN rt3.c3 END) NOT BETWEEN (rt0.c4) AND (NULL)) WHERE (rt0.c1); -- 2 +---- +stmt 0 err 1 -1 143 no such table: rt0 +==== 10.2 + + SELECT COUNT(*) FROM rt0 LEFT JOIN rt3 RIGHT OUTER JOIN v6 ON ((CASE v6.c0 WHEN rt0.c4 THEN rt3.c3 END) NOT BETWEEN (rt0.c4) AND (NULL)) WHERE (rt0.c1); -- 2 +---- +stmt 0 err 1 -1 155 no such table: rt0 +==== 11.1 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + CREATE TABLE t3(e, f); + + INSERT INTO t1 VALUES(1, 1); + INSERT INTO t2 VALUES(2, 2); + INSERT INTO t3 VALUES(3, 3); +---- +stmt 0 ok +stmt 25 ok +stmt 50 ok +stmt 75 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 138 no such table: t2 +stmt 138 err 1 -1 169 no such table: t3 +==== 11.2 + + SELECT * FROM t1 LEFT JOIN t2 RIGHT JOIN t3 ON (t2.c=10) +---- +stmt 0 err 1 -1 60 no such table: t1 +==== 11.3 + + SELECT * FROM t1 LEFT JOIN t2 RIGHT JOIN t3 ON (t2.c=10) WHERE t1.a=1 +---- +stmt 0 err 1 -1 73 no such table: t1 +==== 12.1 + + CREATE TABLE t1(a1 INT, b1 TEXT); + INSERT INTO t1 VALUES(88,''); + CREATE TABLE t2(c2 INT, d2 TEXT); + INSERT INTO t2 VALUES(88,''); + CREATE TABLE t3(e3 TEXT PRIMARY KEY); + INSERT INTO t3 VALUES(''); +---- +stmt 0 ok +stmt 36 err 1 -1 68 no such table: t1 +stmt 68 ok +stmt 104 err 1 -1 136 no such table: t2 +stmt 136 ok +stmt 176 err 1 -1 205 no such table: t3 +==== 12.2 + + SELECT * FROM t1 LEFT JOIN t2 ON true RIGHT JOIN t3 ON d2=e3 WHERE c2 BETWEEN NULL AND a1; +---- +stmt 0 err 1 -1 93 no such table: t1 +==== 12.3 + + SELECT * FROM t1 LEFT JOIN t2 ON true RIGHT JOIN t3 ON d2=e3 WHERE c2 BETWEEN NULL AND a1; +---- +stmt 0 err 1 -1 93 no such table: t1 +==== 13.1 + + CREATE TABLE t1(a INT AS (b), b INT); + INSERT INTO t1(b) VALUES(123); + CREATE TABLE t2(a INT, c INT); + SELECT a FROM t2 NATURAL RIGHT JOIN t1; +---- +stmt 0 ok +stmt 40 err 1 -1 73 no such table: t1 +stmt 73 ok +stmt 106 err 1 -1 148 no such table: t2 +==== 13.2 + + CREATE INDEX t1a ON t1(a); + SELECT a FROM t2 NATURAL RIGHT JOIN t1; +---- +stmt 0 err 1 -1 29 no such table: main.t1 +stmt 29 err 1 -1 71 no such table: t2 +==== 13.3 + + CREATE TABLE t3(a INT, b INT); + CREATE UNIQUE INDEX t3x ON t3(a, a+b); + INSERT INTO t3(a,b) VALUES(1,2),(4,8),(16,32),(4,80),(1,-300); + CREATE TABLE t4(x INT, y INT); + INSERT INTO t4(x,y) SELECT a, b FROM t3; + INSERT INTO t4(x,y) VALUES(99,99); + SELECT a1.a, sum( a1.a+a1.b ) FROM t3 AS a1 RIGHT JOIN t4 ON a=x + GROUP BY a1.a ORDER BY 1; +---- +stmt 0 ok +stmt 33 err 1 -1 74 no such table: main.t3 +stmt 74 err 1 -1 139 no such table: t3 +stmt 139 ok +stmt 172 err 1 -1 215 no such table: t4 +stmt 215 err 1 -1 252 no such table: t4 +stmt 252 err 1 -1 348 no such table: t3 +==== 13.4 + + SELECT sum( a1.a+a1.b ) FROM t3 AS a1 RIGHT JOIN t3 ON true + GROUP BY a1.a ORDER BY 1; +---- +stmt 0 err 1 -1 91 no such table: t3 +==== 14.0 + + CREATE TABLE t1(c0 INT); + CREATE TABLE t2(c0 BLOB); + CREATE TABLE t3(c0 BLOB); + CREATE TABLE t4(c4 BLOB); + INSERT INTO t1(c0) VALUES(0); + INSERT INTO t3(c0) VALUES('0'); +---- +stmt 0 ok +stmt 27 ok +stmt 55 ok +stmt 83 ok +stmt 111 err 1 -1 143 no such table: t1 +stmt 143 err 1 -1 177 no such table: t3 +==== 14.1.1 + + SELECT * FROM t1 NATURAL LEFT JOIN t2 NATURAL JOIN t3; +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 14.1.2 + + SELECT * FROM t1 NATURAL LEFT JOIN t2 NATURAL JOIN t3 FULL JOIN t4 ON true; +---- +stmt 0 err 1 -1 78 no such table: t1 +==== 14.1.3 + + SELECT * FROM (t1 NATURAL LEFT JOIN t2 NATURAL JOIN t3) FULL JOIN t4 ON true; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== 14.1.4 + + SELECT * + FROM (t1 NATURAL LEFT JOIN t2 NATURAL JOIN t3) AS qq FULL JOIN t4 ON true; +---- +stmt 0 err 1 -1 89 no such table: t1 +==== 14.2.1 + + SELECT * FROM t3 NATURAL LEFT JOIN t2 NATURAL JOIN t1; +---- +stmt 0 err 1 -1 57 no such table: t3 +==== 14.2.2 + + SELECT * FROM t3 NATURAL LEFT JOIN t2 NATURAL JOIN t1 FULL JOIN t4 ON true; +---- +stmt 0 err 1 -1 78 no such table: t3 +==== 14.2.3 + + SELECT * FROM (t3 NATURAL LEFT JOIN t2 NATURAL JOIN t1) FULL JOIN t4 ON true; +---- +stmt 0 err 1 -1 80 no such table: t3 +==== 14.2.4 + + SELECT * + FROM (t3 NATURAL LEFT JOIN t2 NATURAL JOIN t1) AS qq FULL JOIN t4 ON true; +---- +stmt 0 err 1 -1 89 no such table: t3 +==== 15.1 + + CREATE TABLE t0(c0); + CREATE TABLE t1(c0); + CREATE TABLE t2(c0); + INSERT INTO t0 VALUES ('1.0'); + INSERT INTO t2(c0) VALUES (9); + SELECT t0.c0,t2.c0 FROM (SELECT CAST(t0.c0 as REAL) AS c0 FROM t0) as subquery NATURAL LEFT JOIN t1 NATURAL JOIN t0 RIGHT JOIN t2 ON 1; +---- +stmt 0 ok +stmt 23 ok +stmt 46 ok +stmt 69 err 1 -1 102 no such table: t0 +stmt 102 err 1 -1 135 no such table: t2 +stmt 135 err 1 -1 275 no such table: t0 +==== 15.2 + + CREATE TABLE x1(x COLLATE nocase); + CREATE TABLE x2(x); + CREATE TABLE x3(x); + CREATE TABLE t4(y); + INSERT INTO x1 VALUES('ABC'); + INSERT INTO x3 VALUES('abc'); + SELECT lower(x), quote(y) FROM x1 LEFT JOIN x2 USING (x) JOIN x3 USING (x) FULL JOIN t4; +---- +stmt 0 ok +stmt 37 ok +stmt 59 ok +stmt 81 ok +stmt 103 err 1 -1 135 no such table: x1 +stmt 135 err 1 -1 167 no such table: x3 +stmt 167 err 1 -1 258 no such table: x1 +==== 16.0 + + CREATE TABLE t0_a (c0 INT); + CREATE TABLE t0_b (c0 INT); + + CREATE TABLE t2 (c0 INT); + INSERT INTO t2 VALUES (1); +---- +stmt 0 ok +stmt 30 ok +stmt 60 ok +stmt 89 err 1 -1 118 no such table: t2 +==== 16.1 + + SELECT * FROM t2 LEFT JOIN t0_b +---- +stmt 0 err 1 -1 35 no such table: t2 +==== 16.2.1 + + SELECT * FROM (t0_a RIGHT JOIN ( t2 LEFT JOIN t0_b)) +---- +stmt 0 err 1 -1 69 no such table: t0_a +==== 16.2.2 + + SELECT * FROM (t0_a RIGHT JOIN (SELECT * FROM t2 LEFT JOIN t0_b)) +---- +stmt 0 err 1 -1 69 no such table: t0_a +==== 16.3.1 + + SELECT * FROM (t0_a RIGHT JOIN ( t2 LEFT JOIN t0_b) USING (c0)); +---- +stmt 0 err 1 -1 80 no such table: t0_a +==== 16.3.2 + + SELECT * FROM (t0_a RIGHT JOIN (SELECT * FROM t2 LEFT JOIN t0_b) USING (c0)); +---- +stmt 0 err 1 -1 80 no such table: t0_a +==== 16.4.0 + + CREATE TABLE x0(a TEXT); + CREATE TABLE x1(a TEXT); + CREATE TABLE x2(a TEXT); + + INSERT INTO x1 VALUES('blue'); + INSERT INTO x2 VALUES('red'); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 err 1 -1 115 no such table: x1 +stmt 115 err 1 -1 147 no such table: x2 +==== 16.4.1 + + SELECT * FROM x0 RIGHT JOIN ( x1, x2) USING (a) +---- +stmt 0 err 1 -1 64 no such table: x0 +==== 16.4.2 + + SELECT * FROM x0 RIGHT JOIN (SELECT * FROM x1, x2) USING (a) +---- +stmt 0 err 1 -1 64 no such table: x0 +==== 16.5.0 + + CREATE TABLE t0 (c0 INT); + CREATE TABLE t1 (c0 INT); + CREATE TABLE t2 (c0 INT); + + INSERT INTO t1(c0) VALUES (NULL); + INSERT INTO t2 VALUES (1); + + CREATE VIEW v0(c0) AS SELECT 1 AS col_0 FROM t0; +---- +stmt 0 ok +stmt 28 ok +stmt 56 ok +stmt 84 err 1 -1 121 no such table: t1 +stmt 121 err 1 -1 150 no such table: t2 +stmt 150 ok +==== 16.5.2 + + SELECT * FROM (t0 NATURAL RIGHT JOIN (t0 FULL JOIN (v0 NATURAL FULL JOIN t2) ON TRUE)) NATURAL FULL JOIN t1; +---- +stmt 0 err 1 -1 111 no such table: t0 diff --git a/parser/testdata/joinI.metadata.json b/parser/testdata/joinI.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/joinI.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/joinI.test b/parser/testdata/joinI.test new file mode 100644 index 0000000..029b5d2 --- /dev/null +++ b/parser/testdata/joinI.test @@ -0,0 +1,287 @@ +==== 1.0 + + CREATE TABLE t1(a INT); + CREATE TABLE t2(b INT); + CREATE TABLE t3(c INT); +---- +stmt 0 ok +stmt 26 ok +stmt 52 ok +==== 2.0 + + CREATE TABLE t0(c0 INT, c1 INT); + CREATE TABLE t1 (c0 INT); + + CREATE VIEW v1(c0) AS SELECT t0.c0 FROM t0 NATURAL RIGHT JOIN t1; + CREATE VIEW v2(c0) AS SELECT 0 FROM v1; + + INSERT INTO t0(c0, c1) VALUES (-1, 0); + INSERT INTO t1(c0) VALUES (NULL); + + SELECT * FROM v1 INNER JOIN (v2 CROSS JOIN t0) ON (t0.c0 < t0.c1); +---- +stmt 0 ok +stmt 35 ok +stmt 63 ok +stmt 132 ok +stmt 174 err 1 -1 216 no such table: t0 +stmt 216 err 1 -1 252 no such table: t1 +stmt 252 err 1 -1 322 no such table: v1 +==== 3.0 + + CREATE TABLE t0(c0, c1); + CREATE TABLE t1(v); + CREATE TABLE t2(w); + CREATE TABLE t3(x); + CREATE TABLE t4(y); + CREATE TABLE t5(z); +---- +stmt 0 ok +stmt 27 ok +stmt 49 ok +stmt 71 ok +stmt 93 ok +stmt 115 ok +==== 3.1 + + SELECT 1234 FROM t4 + RIGHT JOIN t5 + CROSS JOIN (t2 CROSS JOIN t0) AS a1 ON (a1.c0 < a1.c1); +---- +stmt 0 err 1 -1 98 no such table: t4 +==== 3.2 + + SELECT 1234 FROM t4 + RIGHT JOIN t5 + CROSS JOIN (t2 CROSS JOIN t1 CROSS JOIN t0) AS a1 ON (a1.c0 < a1.c1); +---- +stmt 0 err 1 -1 112 no such table: t4 +==== 3.3 + + SELECT 5678 FROM t0 RIGHT JOIN t1 ON ( + SELECT 1 FROM t2 RIGHT JOIN t3 ON t2.w + ) CROSS JOIN t4; +---- +stmt 0 err 1 -1 103 no such table: t0 +==== 3.4 + + SELECT 5678 FROM t0 RIGHT JOIN t1 ON ( + SELECT 1 FROM t2 RIGHT JOIN t3 ON t4.y + ) CROSS JOIN t4; +---- +stmt 0 err 1 -1 103 no such table: t0 +==== 3.5 + + SELECT 5678 FROM t0 RIGHT JOIN t1 ON ( + SELECT 1 FROM t2 RIGHT JOIN t3 ON 0=t1.v + ) CROSS JOIN t4; +---- +stmt 0 err 1 -1 105 no such table: t0 +==== 3.6 + + SELECT 5678 FROM t0 RIGHT JOIN t1 ON ( + SELECT 1 FROM t2 RIGHT JOIN t3 ON max(0,t5.z) CROSS JOIN t5 + ) CROSS JOIN t4; +---- +stmt 0 err 1 -1 124 no such table: t0 +==== 4.0 + + CREATE TABLE t1(a); + CREATE TABLE t2(b); + CREATE TABLE t3(c, d); +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +==== 4.1 + + SELECT c+d AS cd FROM t1 LEFT JOIN t2 ON (cd=5) CROSS JOIN t3; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== 5.0 + + CREATE TABLE parent1(parent1key, child1key, Child2key, child3key); + CREATE TABLE child1 ( child1key NVARCHAR, value NVARCHAR ); + CREATE TABLE child2 ( child2key NVARCHAR, value NVARCHAR ); +---- +stmt 0 ok +stmt 69 ok +stmt 131 ok +==== 5.1 + + SELECT parent1.parent1key, child1.value, child2.value + FROM parent1 + LEFT OUTER JOIN child1 ON child1.child1key = parent1.child1key + INNER JOIN child2 ON child2.child2key = parent1.child2key; +---- +stmt 0 err 1 -1 203 no such table: parent1 +==== 6.0 + + CREATE TABLE t5(a, d); + CREATE TABLE t6(a, e); + INSERT INTO t5 VALUES(1, 'red'); + INSERT INTO t6 VALUES(0, 1000); + + CREATE TABLE t7(x); + CREATE TABLE t8(y); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 85 no such table: t5 +stmt 85 err 1 -1 119 no such table: t6 +stmt 119 ok +stmt 142 ok +==== 6.1 + + SELECT * FROM t6 CROSS JOIN (t7 RIGHT JOIN t8 ON (t6.a)); +---- +stmt 0 err 1 -1 60 no such table: t6 +==== 6.4 + + SELECT * FROM t7 RIGHT JOIN t8 ON (t6.a) CROSS JOIN t6; +---- +stmt 0 err 1 -1 58 no such table: t7 +==== 6.5 + + SELECT * FROM + (SELECT * FROM t7 RIGHT JOIN t8 ON (t6.a) CROSS JOIN t6); +---- +stmt 0 err 1 -1 77 no such table: t7 +==== 6.6 + + SELECT *, NOT EXISTS ( + SELECT * FROM t7 RIGHT JOIN t8 ON (t6.a) CROSS JOIN t6 + ) FROM t5; +---- +stmt 0 err 1 -1 99 no such table: t5 +==== 6.7 + + SELECT *, NOT EXISTS ( + SELECT 1 + EXCEPT + SELECT 11 FROM t7 RIGHT JOIN t8 ON (t6.a) CROSS JOIN t6 + ) FROM t5; +---- +stmt 0 err 1 -1 132 no such table: t5 +==== 6.8 + + SELECT *, NOT EXISTS ( + SELECT 11 FROM t7 RIGHT JOIN t8 ON (t6.a) CROSS JOIN t6 + EXCEPT + SELECT 1 + ) FROM t5; +---- +stmt 0 err 1 -1 132 no such table: t5 +==== 7.0 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + CREATE TABLE t2(d, e); + CREATE INDEX t2def ON t2(d, (e+1)); + INSERT INTO t2 VALUES(1, 3); + INSERT INTO t2 VALUES(2, 555); + INSERT INTO t2 VALUES(3, 3); +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: t1 +stmt 50 ok +stmt 75 err 1 -1 113 no such table: main.t2 +stmt 113 err 1 -1 144 no such table: t2 +stmt 144 err 1 -1 177 no such table: t2 +stmt 177 err 1 -1 208 no such table: t2 +==== 7.1 + + SELECT * FROM t1 RIGHT JOIN t2 ON ( a=d ) WHERE (t2.e+1)!=4; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 7.2 + + CREATE TABLE rt0(c0 INTEGER PRIMARY KEY, c1, c2); + CREATE TABLE t1 (c1 INTEGER, c2 BLOB, c4 INTEGER); + CREATE UNIQUE INDEX i81 ON t1(c1, c4, +c2); + + INSERT INTO t1(c4) VALUES ('a'); + INSERT INTO rt0(c1, c2) VALUES (0.0, 0.0); + INSERT INTO t1(c2, c1) VALUES (1, 'b'); +---- +stmt 0 ok +stmt 52 ok +stmt 105 err 1 -1 151 no such table: main.t1 +stmt 151 err 1 -1 187 no such table: t1 +stmt 187 err 1 -1 232 no such table: rt0 +stmt 232 err 1 -1 274 no such table: t1 +==== 7.2.dup1 + + SELECT count(*) FROM ( + SELECT DISTINCT * FROM rt0 FULL JOIN t1 ON rt0.c0=t1.c1 + WHERE ((rt0.c1 OR t1.c4)) IS NOT (+ t1.c2) + ); +---- +stmt 0 err 1 -1 141 no such table: rt0 +==== 7.3 + + SELECT count(*) FROM ( + SELECT DISTINCT * FROM rt0 LEFT JOIN t1 ON rt0.c0=t1.c1 + WHERE ((rt0.c1 OR t1.c4)) IS NOT (+ t1.c2) + UNION + SELECT DISTINCT * FROM rt0 RIGHT JOIN t1 ON rt0.c0=t1.c1 + WHERE ((rt0.c1 OR t1.c4)) IS NOT (+ t1.c2) + ); +---- +stmt 0 err 1 -1 265 no such table: rt0 +==== 8.0 + + CREATE TABLE t1(x REAL); + CREATE TABLE t2(x REAL); + INSERT INTO t1 VALUES(2.5); + INSERT INTO t2 VALUES(2.5); + SELECT x FROM t1 JOIN t2 USING(x) WHERE x='2.5'; +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 114 no such table: t2 +stmt 114 err 1 -1 165 no such table: t1 +==== 8.1 + + SELECT x FROM t1 LEFT JOIN t2 USING(x) WHERE x='2.5'; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 8.2 + + SELECT x FROM t1 RIGHT JOIN t2 USING(x) WHERE x='2.5'; +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 8.3 + + SELECT x FROM t1 FULL JOIN t2 USING(x) WHERE x='2.5'; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 8.10 + + CREATE TABLE t3(x TEXT COLLATE nocase); + CREATE TABLE t4(x TEXT COLLATE nocase); + INSERT INTO t3 VALUES('abc'); + INSERT INTO t4 VALUES('ABC'); + SELECT lower(x) FROM t3 JOIN t4 USING(x) WHERE x='Abc'; +---- +stmt 0 ok +stmt 42 ok +stmt 84 err 1 -1 116 no such table: t3 +stmt 116 err 1 -1 148 no such table: t4 +stmt 148 err 1 -1 206 no such table: t3 +==== 8.11 + + SELECT lower(x) FROM t3 LEFT JOIN t4 USING(x) WHERE x='Abc'; +---- +stmt 0 err 1 -1 63 no such table: t3 +==== 8.12 + + SELECT lower(x) FROM t3 RIGHT JOIN t4 USING(x) WHERE x='Abc'; +---- +stmt 0 err 1 -1 64 no such table: t3 +==== 8.13 + + SELECT lower(x) FROM t3 FULL JOIN t4 USING(x) WHERE x='Abc'; +---- +stmt 0 err 1 -1 63 no such table: t3 diff --git a/parser/testdata/journal1.metadata.json b/parser/testdata/journal1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/journal1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/journal1.test b/parser/testdata/journal1.test new file mode 100644 index 0000000..7a476c0 --- /dev/null +++ b/parser/testdata/journal1.test @@ -0,0 +1,15 @@ +==== journal1-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,randstr(10,400)); + INSERT INTO t1 VALUES(2,randstr(10,400)); + INSERT INTO t1 SELECT a+2, a||b FROM t1; + INSERT INTO t1 SELECT a+4, a||b FROM t1; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 118 no such table: t1 +stmt 118 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 208 no such table: t1 +stmt 208 err 1 -1 237 no such table: t1 diff --git a/parser/testdata/journal2.metadata.json b/parser/testdata/journal2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/journal2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/journal2.test b/parser/testdata/journal2.test new file mode 100644 index 0000000..3d8222d --- /dev/null +++ b/parser/testdata/journal2.test @@ -0,0 +1,19 @@ +==== journal2-1.4 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== journal2-1.7 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== journal2-1.9 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== journal2-1.15 + + SELECT count(*) FROM t2; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 29 no such table: t2 +stmt 29 ok diff --git a/parser/testdata/journal3.metadata.json b/parser/testdata/journal3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/journal3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/journal3.test b/parser/testdata/journal3.test new file mode 100644 index 0000000..1e6fe19 --- /dev/null +++ b/parser/testdata/journal3.test @@ -0,0 +1,8 @@ +==== journal3-1.1 + CREATE TABLE tx(y, z) +---- +stmt 0 ok +==== journal3-generated + ROLLBACK +---- +stmt 0 ok diff --git a/parser/testdata/jrnlmode.metadata.json b/parser/testdata/jrnlmode.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/jrnlmode.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/jrnlmode.test b/parser/testdata/jrnlmode.test new file mode 100644 index 0000000..2b0d35b --- /dev/null +++ b/parser/testdata/jrnlmode.test @@ -0,0 +1,334 @@ +==== jrnlmode-1.0 + + PRAGMA journal_mode; + PRAGMA main.journal_mode; + PRAGMA temp.journal_mode; +---- +stmt 0 ok +stmt 25 ok +stmt 55 ok +==== jrnlmode-1.1 + + PRAGMA journal_mode = persist; +---- +stmt 0 ok +==== jrnlmode-1.2 + + PRAGMA journal_mode; + PRAGMA main.journal_mode; + PRAGMA temp.journal_mode; +---- +stmt 0 ok +stmt 25 ok +stmt 55 ok +==== jrnlmode-1.5 + + PRAGMA journal_mode; + PRAGMA main.journal_mode; + PRAGMA temp.journal_mode; +---- +stmt 0 ok +stmt 25 ok +stmt 55 ok +==== jrnlmode-1.6 + + PRAGMA journal_mode = delete; +---- +stmt 0 ok +==== jrnlmode-1.7 + + PRAGMA journal_mode; + PRAGMA main.journal_mode; + PRAGMA Temp.journal_mode; +---- +stmt 0 ok +stmt 25 ok +stmt 55 ok +==== jrnlmode-1.7.1 + + PRAGMA journal_mode = truncate; +---- +stmt 0 ok +==== jrnlmode-1.7.2 + + PRAGMA journal_mode; + PRAGMA main.journal_mode; + PRAGMA temp.journal_mode; +---- +stmt 0 ok +stmt 25 ok +stmt 55 ok +==== jrnlmode-1.8 + + PRAGMA journal_mode = off; + PRAGMA journal_mode = invalid; +---- +stmt 0 ok +stmt 31 ok +==== jrnlmode-1.11 + + PRAGMA journal_mode; +---- +stmt 0 ok +==== jrnlmode-1.99 + + DETACH aux1; + DETACH aux2; + DETACH aux3; +---- +stmt 0 ok +stmt 19 ok +stmt 38 ok +==== jrnlmode-2.3 + + SELECT * FROM abc; +---- +stmt 0 err 1 -1 25 no such table: abc +==== jrnlmode-2.5 + + SELECT * FROM def; +---- +stmt 0 err 1 -1 25 no such table: def +==== jrnlmode-3.1 + + CREATE TABLE x(n INTEGER); + ATTACH 'test2.db' AS a; + create table a.x ( n integer ); + insert into a.x values(1); + insert into a.x values (2); + insert into a.x values (3); + insert into a.x values (4); +---- +stmt 0 ok +stmt 34 ok +stmt 65 err 1 86 91 unknown database a +stmt 104 err 1 -1 138 no such table: a.x +stmt 138 err 1 -1 173 no such table: a.x +stmt 173 err 1 -1 208 no such table: a.x +stmt 208 err 1 -1 243 no such table: a.x +==== jrnlmode-4.2 + PRAGMA journal_mode = off +---- +stmt 0 ok +==== jrnlmode-4.3 + INSERT INTO abc VALUES(1, 2, randomblob(2000)) +---- +stmt 0 err 1 -1 48 no such table: abc +==== jrnlmode-4.4 + DELETE FROM abc +---- +stmt 0 err 1 -1 17 no such table: abc +==== jrnlmode-5.2 + PRAGMA journal_size_limit +---- +stmt 0 ok +==== jrnlmode-5.3 + + ATTACH 'test2.db' AS aux; + PRAGMA aux.journal_mode=persist; + PRAGMA aux.journal_size_limit; +---- +stmt 0 ok +stmt 33 err 1 47 72 unknown database aux +stmt 72 err 1 86 109 unknown database aux +==== jrnlmode-5.4.1 + PRAGMA aux.journal_size_limit = 999999999999 +---- +stmt 0 err 1 8 46 unknown database aux +==== jrnlmode-5.4.2 + PRAGMA aux.journal_size_limit = 10240 +---- +stmt 0 err 1 8 39 unknown database aux +==== jrnlmode-5.5 + PRAGMA main.journal_size_limit = 20480 +---- +stmt 0 ok +==== jrnlmode-5.6 + PRAGMA journal_size_limit +---- +stmt 0 ok +==== jrnlmode-5.7 + PRAGMA aux.journal_size_limit +---- +stmt 0 err 1 8 31 unknown database aux +==== jrnlmode-5.8 + + ATTACH 'test3.db' AS aux2; + PRAGMA aux2.journal_mode=persist; +---- +stmt 0 ok +stmt 33 err 1 47 73 unknown database aux2 +==== jrnlmode-5.9 + + CREATE TABLE main.t1(a, b, c); + CREATE TABLE aux.t2(a, b, c); + CREATE TABLE aux2.t3(a, b, c); +---- +stmt 0 ok +stmt 37 err 1 57 64 unknown database aux +stmt 73 err 1 93 101 unknown database aux2 +==== jrnlmode-5.20 + + PRAGMA journal_size_limit = 0; + BEGIN; + UPDATE t1 SET a = randomblob(1000); +---- +stmt 0 ok +stmt 37 ok +stmt 50 err 1 -1 92 no such table: t1 +==== jrnlmode-6.1 + + PRAGMA journal_mode = truncate; + CREATE TABLE t4(a, b); + BEGIN; + INSERT INTO t4 VALUES(1, 2); + PRAGMA journal_mode = memory; +---- +stmt 0 ok +stmt 40 ok +stmt 71 ok +stmt 86 err 1 -1 125 no such table: t4 +stmt 125 ok +==== jrnlmode-6.3 + + COMMIT; + SELECT * FROM t4; +---- +stmt 0 ok +stmt 16 err 1 -1 42 no such table: t4 +==== jrnlmode-6.7 + + COMMIT; + SELECT * FROM t4; +---- +stmt 0 ok +stmt 16 err 1 -1 42 no such table: t4 +==== jrnlmode-8.1 + PRAGMA locking_mode=EXCLUSIVE +---- +stmt 0 ok +==== jrnlmode-8.2 + CREATE TABLE t1(x) +---- +stmt 0 ok +==== jrnlmode-8.3 + INSERT INTO t1 VALUES(123) +---- +stmt 0 err 1 -1 28 no such table: t1 +==== jrnlmode-8.4 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== jrnlmode-8.5 + PRAGMA journal_mode=PERSIST +---- +stmt 0 ok +==== jrnlmode-8.6 + PRAGMA journal_mode=DELETE +---- +stmt 0 ok +==== jrnlmode-8.7 + PRAGMA journal_mode=TRUNCATE +---- +stmt 0 ok +==== jrnlmode-8.8 + PRAGMA journal_mode=DELETE +---- +stmt 0 ok +==== jrnlmode-8.9 + CREATE TABLE t2(y) +---- +stmt 0 ok +==== jrnlmode-8.10 + INSERT INTO t2 VALUES(456) +---- +stmt 0 err 1 -1 28 no such table: t2 +==== jrnlmode-8.11 + SELECT * FROM t1, t2 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== jrnlmode-8.12 + PRAGMA locking_mode=NORMAL +---- +stmt 0 ok +==== jrnlmode-8.13 + PRAGMA journal_mode=PERSIST +---- +stmt 0 ok +==== jrnlmode-8.14 + PRAGMA journal_mode=TRUNCATE +---- +stmt 0 ok +==== jrnlmode-8.15 + PRAGMA journal_mode=PERSIST +---- +stmt 0 ok +==== jrnlmode-8.16 + PRAGMA journal_mode=DELETE +---- +stmt 0 ok +==== jrnlmode-8.17 + PRAGMA journal_mode=TRUNCATE +---- +stmt 0 ok +==== jrnlmode-8.18 + PRAGMA locking_mode=EXCLUSIVE +---- +stmt 0 ok +==== jrnlmode-8.19 + CREATE TABLE t3(z) +---- +stmt 0 ok +==== jrnlmode-8.20 + BEGIN IMMEDIATE +---- +stmt 0 ok +==== jrnlmode-8.21 + PRAGMA journal_mode=DELETE +---- +stmt 0 ok +==== jrnlmode-8.22 + COMMIT +---- +stmt 0 ok +==== jrnlmode-8.23 + PRAGMA journal_mode=DELETE +---- +stmt 0 ok +==== jrnlmode-8.24 + PRAGMA journal_mode=TRUNCATE +---- +stmt 0 ok +==== jrnlmode-8.25 + PRAGMA locking_mode=NORMAL +---- +stmt 0 ok +==== jrnlmode-8.26 + CREATE TABLE t4(w) +---- +stmt 0 ok +==== jrnlmode-8.27 + BEGIN IMMEDIATE +---- +stmt 0 ok +==== jrnlmode-8.28 + PRAGMA journal_mode=DELETE +---- +stmt 0 ok +==== jrnlmode-8.29 + COMMIT +---- +stmt 0 ok +==== jrnlmode-8.30 + PRAGMA journal_mode=DELETE +---- +stmt 0 ok +==== jrnlmode-9.2 + + PRAGMA locking_mode = exclusive; + CREATE TABLE tx(a); + PRAGMA journal_mode = off; +---- +stmt 0 ok +stmt 35 ok +stmt 57 ok diff --git a/parser/testdata/jrnlmode2.metadata.json b/parser/testdata/jrnlmode2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/jrnlmode2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/jrnlmode2.test b/parser/testdata/jrnlmode2.test new file mode 100644 index 0000000..5af94ab --- /dev/null +++ b/parser/testdata/jrnlmode2.test @@ -0,0 +1,9 @@ +==== jrnlmode2-1.1 + + PRAGMA journal_mode = persist; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 35 ok +stmt 62 err 1 -1 95 no such table: t1 diff --git a/parser/testdata/json101.metadata.json b/parser/testdata/json101.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/json101.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/json101.test b/parser/testdata/json101.test new file mode 100644 index 0000000..0105b0f --- /dev/null +++ b/parser/testdata/json101.test @@ -0,0 +1,566 @@ +==== json101-1.1.00 + + SELECT json_array(1,2.5,null,'hello'); +---- +stmt 0 ok +==== json101-1.1.01 + + SELECT json_array(1,'{"abc":2.5,"def":null,"ghi":hello}',99); + -- the second term goes in as a string: +---- +stmt 0 ok +==== json101-1.1.02 + + SELECT json_array(1,json('{"abc":2.5,"def":null,"ghi":"hello"}'),99); + -- the second term goes in as JSON +---- +stmt 0 ok +==== json101-1.1.03 + + SELECT json_array(1,json_object('abc',2.5,'def',null,'ghi','hello'),99); + -- the second term goes in as JSON +---- +stmt 0 ok +==== json101-1.3 + + SELECT json_array(1,printf('%.1000c','x'),x'abcd',3); +---- +stmt 0 ok +==== json101-1.3b + + SELECT jsonb_array(1,printf('%.1000c','x'),x'abcd',3); +---- +stmt 0 ok +==== json101-1.4 + + SELECT json_array(-9223372036854775808,9223372036854775807,0,1,-1, + 0.0, 1.0, -1.0, -1e99, +2e100, + 'one','two','three', + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, NULL, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 99); +---- +stmt 0 ok +==== json101-1.4b + + SELECT json(jsonb_array(-9223372036854775808,9223372036854775807,0,1,-1, + 0.0, 1.0, -1.0, -1e99, +2e100, + 'one','two','three', + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, NULL, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 99)); +---- +stmt 0 ok +==== json101-2.1 + + SELECT json_object('a',1,'b',2.5,'c',null,'d','String Test'); +---- +stmt 0 ok +==== json101-2.1b + + SELECT json(jsonb_object('a',1,'b',2.5,'c',null,'d','String Test')); +---- +stmt 0 ok +==== json101-2.2 + + SELECT json_object('a',printf('%.1000c','x'),2,2.5); +---- +stmt 0 ok +==== json101-2.2b + + SELECT jsonb_object('a',printf('%.1000c','x'),2,2.5); +---- +stmt 0 ok +==== json101-2.2.2 + + SELECT json_object('a',json_array('xyx',77,4.5),'x',2.5); +---- +stmt 0 ok +==== json101-2.2.2b + + SELECT json(jsonb_object('a',json_array('xyx',77,4.5),'x',2.5)); +---- +stmt 0 ok +==== json101-2.2.3 + + SELECT json_object('a',jsonb_array('xyx',77,4.5),'x',2.5); +---- +stmt 0 ok +==== json101-2.2.3b + + SELECT json(jsonb_object('a',jsonb_array('xyx',77,4.5),'x',2.5)); +---- +stmt 0 ok +==== json101-2.3 + + SELECT json_object('a',1,'b'); +---- +stmt 0 ok +==== json101-2.4 + + SELECT json_object('a',printf('%.1000c','x'),'b',x'abcd'); +---- +stmt 0 ok +==== json101-2.5 + + SELECT json_object('a',printf('%.10c','x'),'b',jsonb_array(1,2,3)); +---- +stmt 0 ok +==== json101-4.2 + + SELECT * FROM j1 WHERE NOT json_valid(char(0x20,0x09,0x0a,0x0d)||x); +---- +stmt 0 err 1 -1 71 no such table: j1 +==== json101-4.3 + + SELECT * FROM j1 WHERE NOT json_valid(x||char(0x20,0x09,0x0a,0x0d)); +---- +stmt 0 err 1 -1 71 no such table: j1 +==== json101-4.4 + + SELECT json_valid(''), json_valid(char(0x20,0x09,0x0a,0x0d)); +---- +stmt 0 ok +==== json101-4.5 + + SELECT x FROM j1 WHERE json_remove(x)<>x; +---- +stmt 0 err 1 -1 44 no such table: j1 +==== json101-4.6 + + SELECT x FROM j1 WHERE json_replace(x)<>x; +---- +stmt 0 err 1 -1 45 no such table: j1 +==== json101-4.7 + + SELECT x FROM j1 WHERE json_set(x)<>x; +---- +stmt 0 err 1 -1 41 no such table: j1 +==== json101-4.8 + + SELECT x FROM j1 WHERE json_insert(x)<>x; +---- +stmt 0 err 1 -1 44 no such table: j1 +==== json101-5.2 + + SELECT id, json_valid(json), json_type(json), '|' FROM j2 ORDER BY id; +---- +stmt 0 err 1 -1 73 no such table: j2 +==== json101-5.2b + + SELECT id, json_valid(json,5), json_type(json), '|' FROM j2b ORDER BY id; +---- +stmt 0 err 1 -1 76 no such table: j2b +==== json101-5.5 + + SELECT j2.rowid, jx.rowid, fullkey, path, key + FROM j2, json_each(j2.json) AS jx + WHERE jx.json<>j2.json; +---- +stmt 0 err 1 -1 113 no such table: j2 +==== json101-5.6 + + SELECT j2.rowid, jx.rowid, fullkey, path, key + FROM j2, json_tree(j2.json) AS jx + WHERE jx.json<>j2.json; +---- +stmt 0 err 1 -1 113 no such table: j2 +==== json101-5.7 + + SELECT j2.rowid, jx.rowid, fullkey, path, key + FROM j2, json_each(j2.json) AS jx + WHERE jx.value<>jx.atom AND type NOT IN ('array','object'); +---- +stmt 0 err 1 -1 149 no such table: j2 +==== json101-5.8 + + SELECT j2.rowid, jx.rowid, fullkey, path, key + FROM j2, json_tree(j2.json) AS jx + WHERE jx.value<>jx.atom AND type NOT IN ('array','object'); +---- +stmt 0 err 1 -1 149 no such table: j2 +==== json101-6.1 + + SELECT json_valid('{"a":55,"b":72,}'); +---- +stmt 0 ok +==== json101-6.2 + + SELECT json_error_position('{"a":55,"b":72,}'); +---- +stmt 0 ok +==== json101-6.3 + + SELECT json_valid(json('{"a":55,"b":72,}')); +---- +stmt 0 ok +==== json101-6.4 + + SELECT json_valid('{"a":55,"b":72 , }'); +---- +stmt 0 ok +==== json101-6.5 + + SELECT json_error_position('{"a":55,"b":72 , }'); +---- +stmt 0 ok +==== json101-6.6 + + SELECT json_error_position('{"a":55,"b":72,,}'); +---- +stmt 0 ok +==== json101-6.7 + + SELECT json_valid('{"a":55,"b":72}'); +---- +stmt 0 ok +==== json101-8.1 + + DROP TABLE IF EXISTS t8; + CREATE TABLE t8(a,b); + INSERT INTO t8(a) VALUES('abc' || char(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35) || 'xyz'); + UPDATE t8 SET b=json_array(a); + SELECT b FROM t8; +---- +stmt 0 ok +stmt 27 ok +stmt 51 err 1 -1 200 no such table: t8 +stmt 200 err 1 -1 233 no such table: t8 +stmt 233 err 1 -1 253 no such table: t8 +==== json101-8.1b + + DROP TABLE IF EXISTS t8; + CREATE TABLE t8(a,b); + INSERT INTO t8(a) VALUES('abc' || char(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35) || 'xyz'); + UPDATE t8 SET b=jsonb_array(a); + SELECT json(b) FROM t8; +---- +stmt 0 ok +stmt 27 ok +stmt 51 err 1 -1 200 no such table: t8 +stmt 200 err 1 -1 234 no such table: t8 +stmt 234 err 1 -1 260 no such table: t8 +==== json101-8.3 + + SELECT json_valid(char(0x22,0xe4,0x22)); +---- +stmt 0 ok +==== json101-9.1 + + SELECT json_quote('abc"xyz'); +---- +stmt 0 ok +==== json101-9.2 + + SELECT json_quote(3.14159); +---- +stmt 0 ok +==== json101-9.3 + + SELECT json_quote(12345); +---- +stmt 0 ok +==== json101-9.4 + + SELECT json_quote(null); +---- +stmt 0 ok +==== json101-9.5 + + SELECT json_quote(x'3031323334'); +---- +stmt 0 ok +==== json101-9.6 + + SELECT json_quote(123,456) +---- +stmt 0 err 1 10 30 wrong number of arguments to function json_quote() +==== json101-9.7 + + SELECT json_quote() +---- +stmt 0 err 1 10 23 wrong number of arguments to function json_quote() +==== json101-12.100 + + CREATE TABLE t12(x); + INSERT INTO t12(x) VALUES( + '{"settings": + {"layer2": + {"hapax.legomenon": + {"forceDisplay":true, + "transliterate":true, + "add.footnote":true, + "summary.report":true}, + "dis.legomenon": + {"forceDisplay":true, + "transliterate":false, + "add.footnote":false, + "summary.report":true}, + "tris.legomenon": + {"forceDisplay":true, + "transliterate":false, + "add.footnote":false, + "summary.report":false} + } + } + }'); +---- +stmt 0 ok +stmt 23 err 1 -1 660 no such table: t12 +==== json101-14.100 + + SELECT fullkey FROM json_each('123'); +---- +stmt 0 ok +==== json101-14.110 + + SELECT fullkey FROM json_each('123.56'); +---- +stmt 0 ok +==== json101-14.120 + + SELECT fullkey FROM json_each('"hello"'); +---- +stmt 0 ok +==== json101-14.130 + + SELECT fullkey FROM json_each('null'); +---- +stmt 0 ok +==== json101-14.140 + + SELECT fullkey FROM json_tree('123'); +---- +stmt 0 ok +==== json101-14.150 + + SELECT fullkey FROM json_tree('123.56'); +---- +stmt 0 ok +==== json101-14.160 + + SELECT fullkey FROM json_tree('"hello"'); +---- +stmt 0 ok +==== json101-14.170 + + SELECT fullkey FROM json_tree('null'); +---- +stmt 0 ok +==== json101-15.100 + + SELECT * FROM JSON_EACH('{"a":1, "b":2}'); +---- +stmt 0 ok +==== json101-15.110 + + SELECT xyz.* FROM JSON_EACH('{"a":1, "b":2}') AS xyz; +---- +stmt 0 ok +==== json101-15.120 + + SELECT * FROM (JSON_EACH('{"a":1, "b":2}')); +---- +stmt 0 ok +==== json101-15.130 + + SELECT xyz.* FROM (JSON_EACH('{"a":1, "b":2}')) AS xyz; +---- +stmt 0 ok +==== json101-17.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a,b,c); + CREATE TABLE t2(d); + SELECT * FROM t1 LEFT JOIN t2 ON (SELECT b FROM json_each ORDER BY 1); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 80 ok +stmt 102 err 1 -1 175 no such table: t1 +==== json101-18.1 + + SELECT json_valid('{"":5}'); +---- +stmt 0 ok +==== json101-19.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); +---- +stmt 0 ok +stmt 27 ok +==== json101-19.2 + + BEGIN; + INSERT INTO t1 VALUES(0), (json('not-valid-json')); +---- +stmt 0 ok +stmt 9 err 1 -1 63 no such table: t1 +==== json101-19.3 + + COMMIT; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 10 err 1 -1 30 no such table: t1 +==== json101-20.1 + + SELECT json_object('a',2e370,'b',-3e380); +---- +stmt 0 ok +==== json101-20.2 + + SELECT json_object('a',2e370,'b',-3e380)->>'a'; +---- +stmt 0 ok +==== json101-20.3 + + SELECT json_object('a',2e370,'b',-3e380)->>'b'; +---- +stmt 0 ok +==== json101-21.1-legacy + + SELECT json_valid(NULL); +---- +stmt 0 ok +==== json101-21.1-correct + + SELECT json_valid(NULL); +---- +stmt 0 ok +==== json101-21.2 + + SELECT json_error_position(NULL); +---- +stmt 0 ok +==== json101-21.3 + + SELECT json(NULL); +---- +stmt 0 ok +==== json101-21.4 + + SELECT json_array(NULL); +---- +stmt 0 ok +==== json101-21.5 + + SELECT json_extract(NULL); +---- +stmt 0 ok +==== json101-21.7 + + SELECT NULL->0; +---- +stmt 0 ok +==== json101-21.8 + + SELECT NULL->>0; +---- +stmt 0 ok +==== json101-21.9 + + SELECT '{a:5}'->NULL; +---- +stmt 0 ok +==== json101-21.10 + + SELECT '{a:5}'->>NULL; +---- +stmt 0 ok +==== json101-21.11 + + SELECT json_object(NULL,5); +---- +stmt 0 ok +==== json101-21.12 + + SELECT json_patch(NULL,'{a:5}'); +---- +stmt 0 ok +==== json101-21.13 + + SELECT json_patch('{a:5}',NULL); +---- +stmt 0 ok +==== json101-21.14 + + SELECT json_patch(NULL,NULL); +---- +stmt 0 ok +==== json101-21.16 + + SELECT json_remove('{a:5,b:7}',NULL); +---- +stmt 0 ok +==== json101-21.18 + + SELECT json_replace('{a:5,b:7}',NULL,NULL); +---- +stmt 0 ok +==== json101-21.20 + + SELECT json_set('{a:5,b:7}',NULL,NULL); +---- +stmt 0 ok +==== json101-21.21 + + SELECT json_type(NULL); +---- +stmt 0 ok +==== json101-21.22 + + SELECT json_type('{a:5,b:7}',NULL); +---- +stmt 0 ok +==== json101-21.23 + + SELECT json_quote(NULL); +---- +stmt 0 ok +==== json101-21.24 + + SELECT count(*) FROM json_each(NULL); +---- +stmt 0 ok +==== json101-21.25 + + SELECT count(*) FROM json_tree(NULL); +---- +stmt 0 ok +==== json101-21.26 + + WITH c(x) AS (VALUES(1),(2.0),(NULL),('three')) + SELECT json_group_array(x) FROM c; +---- +stmt 0 ok +==== json101-21.27 + + WITH c(x,y) AS (VALUES('a',1),('b',2.0),('c',NULL),(NULL,'three'),('e','four')) + SELECT json_group_object(x,y) FROM c; +---- +stmt 0 ok +==== json101-25.1 + + SELECT json_array(0.1234567890123456789)->>0 = 0.1234567890123456789; +---- +stmt 0 ok +==== json101-26.1 + + SELECT value FROM json_each(x'CC141761133117621332176313331764133437656565') WHERE key='eee'; +---- +stmt 0 ok +==== json101-26.2 + + SELECT json_valid(x'CC141761133117621332176313331764133437656565',8); +---- +stmt 0 ok diff --git a/parser/testdata/json102.metadata.json b/parser/testdata/json102.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/json102.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/json102.test b/parser/testdata/json102.test new file mode 100644 index 0000000..7fd7c41 --- /dev/null +++ b/parser/testdata/json102.test @@ -0,0 +1,216 @@ +==== json102-120 + + SELECT json_object('ex',json_array(52,3.14159)); +---- +stmt 0 ok +==== json102-120-2 + + SELECT json(jsonb_object('ex',json_array(52,3.14159))); +---- +stmt 0 ok +==== json102-120-3 + + SELECT json_object('ex',jsonb_array(52,3.14159)); +---- +stmt 0 ok +==== json102-120-4 + + SELECT json(jsonb_object('ex',jsonb_array(52,3.14159))); +---- +stmt 0 ok +==== json102-140 + + SELECT json_array(1,2,'3',4); +---- +stmt 0 ok +==== json102-140b + + SELECT json(jsonb_array(1,2,'3',4)); +---- +stmt 0 ok +==== json102-160 + + SELECT json_array(json_array(1,2)); +---- +stmt 0 ok +==== json102-160-2 + + SELECT json_array(jsonb_array(1,2)); +---- +stmt 0 ok +==== json102-160-3 + + SELECT json(jsonb_array(json_array(1,2))); +---- +stmt 0 ok +==== json102-160-4 + + SELECT json(jsonb_array(jsonb_array(1,2))); +---- +stmt 0 ok +==== json102-410 + + SELECT json_object('a',2,'c',4); +---- +stmt 0 ok +==== json102-410b + + SELECT json(jsonb_object('a',2,'c',4)); +---- +stmt 0 ok +==== json102-420 + + SELECT json_object('a',2,'c','{e:5}'); +---- +stmt 0 ok +==== json102-420b + + SELECT json(jsonb_object('a',2,'c','{e:5}')); +---- +stmt 0 ok +==== json102-430 + + SELECT json_object('a',2,'c',json_object('e',5)); +---- +stmt 0 ok +==== json102-430-2 + + SELECT json(jsonb_object('a',2,'c',json_object('e',5))); +---- +stmt 0 ok +==== json102-430-3 + + SELECT json_object('a',2,'c',jsonb_object('e',5)); +---- +stmt 0 ok +==== json102-430-4 + + SELECT json(jsonb_object('a',2,'c',jsonb_object('e',5))); +---- +stmt 0 ok +==== json102-470 + + SELECT json_remove('{"x":25,"y":42}'); +---- +stmt 0 ok +==== json102-470-2 + + SELECT json_remove(jsonb('{"x":25,"y":42}')); +---- +stmt 0 ok +==== json102-470-3 + + SELECT json(jsonb_remove('{"x":25,"y":42}')); +---- +stmt 0 ok +==== json102-470-4 + + SELECT json(jsonb_remove(jsonb('{"x":25,"y":42}'))); +---- +stmt 0 ok +==== json102-510b + + SELECT json_type(x'cc0f1761cb0b133235332e350102001778'); +---- +stmt 0 ok +==== json102-610 + + SELECT json_valid(char(123)||'"x":35'||char(125)); +---- +stmt 0 ok +==== json102-620 + + SELECT json_valid(char(123)||'"x":35'); +---- +stmt 0 ok +==== json102-1000b + + SELECT DISTINCT user.name + FROM user, json_each(user.phoneb) + WHERE json_each.value LIKE '704-%' + ORDER BY 1; +---- +stmt 0 err 1 -1 119 no such table: user +==== json102-1011 + + SELECT name FROM user WHERE phone LIKE '704-%' + UNION + SELECT user.name + FROM user, json_each(user.phone) + WHERE json_valid(user.phone) + AND json_each.value LIKE '704-%'; +---- +stmt 0 err 1 -1 184 no such table: user +==== json102-1110 + + SELECT big.rowid, fullkey, value + FROM big, json_tree(big.json) + WHERE json_tree.type NOT IN ('object','array') + ORDER BY +big.rowid, +json_tree.id +---- +stmt 0 err 1 -1 158 no such table: big +==== json102-1110b + + SELECT big.rowid, fullkey, value + FROM big, json_tree(jsonb(big.json)) + WHERE json_tree.type NOT IN ('object','array') + ORDER BY +big.rowid, +json_tree.id +---- +stmt 0 err 1 -1 165 no such table: big +==== json102-1120 + + SELECT big.rowid, fullkey, atom + FROM big, json_tree(big.json) + WHERE atom IS NOT NULL + ORDER BY +big.rowid, +json_tree.id +---- +stmt 0 err 1 -1 133 no such table: big +==== json102-1201 + SELECT json_valid(char(32) || '"xyz"') +---- +stmt 0 ok +==== json102-1202 + SELECT json_valid(char(200) || '"xyz"') +---- +stmt 0 ok +==== json102-1500 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<0x20) + SELECT x FROM c WHERE json_valid(printf('{"a":"x%sz"}', char(x))) ORDER BY x; +---- +stmt 0 ok +==== json102-1501 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<0x1f) + SELECT sum(json_valid(json_quote('a'||char(x)||'z'))) FROM c ORDER BY x; +---- +stmt 0 ok +==== json102-1700 + + CREATE TABLE t1(a1 DATE, a2 INTEGER PRIMARY KEY, a3 INTEGER, memo TEXT); + CREATE INDEX t1x1 ON t1(a3, a1, memo->>'y'); + INSERT INTO t1(a2,a1,a3,memo) VALUES (876, '2023-08-03', 5, '{"x":77,"y":4}'); +---- +stmt 0 ok +stmt 75 err 1 -1 122 no such table: main.t1 +stmt 122 err 1 -1 203 no such table: t1 +==== json102-1800 + + SELECT '{"1":"one","2":"two","3":"three"}'->>'2'; +---- +stmt 0 ok +==== json102-1801 + + SELECT '{"1":"one","2":"two","3":"three"}'->>2; +---- +stmt 0 ok +==== json102-1820 + + SELECT '{"1":"one","2":"two","3":"three"}'->'2'; +---- +stmt 0 ok +==== json102-1821 + + SELECT '{"1":"one","2":"two","3":"three"}'->2; +---- +stmt 0 ok diff --git a/parser/testdata/json103.metadata.json b/parser/testdata/json103.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/json103.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/json103.test b/parser/testdata/json103.test new file mode 100644 index 0000000..8b0ee27 --- /dev/null +++ b/parser/testdata/json103.test @@ -0,0 +1,107 @@ +==== json103-100 + + CREATE TABLE t1(a,b,c); + WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b,c) SELECT x, x%3, printf('n%d',x) FROM c; + UPDATE t1 SET a='orange' WHERE rowid=39; + UPDATE t1 SET a=32.5 WHERE rowid=31; + UPDATE t1 SET a=x'303132' WHERE rowid=29; + UPDATE t1 SET a=NULL WHERE rowid=37; + SELECT json_group_array(a) FROM t1 WHERE a<0 AND typeof(a)!='blob'; +---- +stmt 0 ok +stmt 26 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 206 no such table: t1 +stmt 206 err 1 -1 245 no such table: t1 +stmt 245 err 1 -1 289 no such table: t1 +stmt 289 err 1 -1 328 no such table: t1 +stmt 328 err 1 -1 398 no such table: t1 +==== json103-101 + + SELECT json_group_array(a) FROM t1; +---- +stmt 0 err 1 -1 38 no such table: t1 +==== json103-102 + + SELECT quote(jsonb_group_array(a)) FROM t1 WHERE a<0 AND typeof(a)!='blob'; +---- +stmt 0 err 1 -1 78 no such table: t1 +==== json103-110 + + SELECT json_group_array(a) FROM t1 + WHERE rowid BETWEEN 31 AND 39; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== json103-111 + + SELECT json_array_length(json_group_array(a)) FROM t1 + WHERE rowid BETWEEN 31 AND 39; +---- +stmt 0 err 1 -1 90 no such table: t1 +==== json103-120 + + SELECT b, json_group_array(a) FROM t1 WHERE rowid<10 GROUP BY b ORDER BY b; +---- +stmt 0 err 1 -1 78 no such table: t1 +==== json103-200 + + SELECT json_group_object(c,a) FROM t1 WHERE a<0 AND typeof(a)!='blob'; +---- +stmt 0 err 1 -1 73 no such table: t1 +==== json103-201 + + SELECT json_group_object(c,a) FROM t1; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== json103-202 + + SELECT quote(jsonb_group_object(c,a)) FROM t1 WHERE a<0 AND typeof(a)!='blob'; +---- +stmt 0 err 1 -1 81 no such table: t1 +==== json103-210 + + SELECT json_group_object(c,a) FROM t1 + WHERE rowid BETWEEN 31 AND 39 AND rowid%2==1; +---- +stmt 0 err 1 -1 89 no such table: t1 +==== json103-220 + + SELECT b, json_group_object(c,a) FROM t1 + WHERE rowid<7 GROUP BY b ORDER BY b; +---- +stmt 0 err 1 -1 83 no such table: t1 +==== json103-300 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1),('abc'); + SELECT + json_group_array(x), + json_group_array(json_object('x',x)) + FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 49 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 175 no such table: t1 +==== json103-400 + + CREATE TABLE t4(x); + INSERT INTO t4 VALUES + (1), + ('a,b'), + (3), + ('x"y'), + (5), + (6), + (7); + SELECT json_group_array(x) OVER (ROWS 2 PRECEDING) FROM t4; +---- +stmt 0 ok +stmt 24 err 1 -1 135 no such table: t4 +stmt 135 err 1 -1 199 no such table: t4 +==== json103-410 + + SELECT json_group_object(rowid, x) OVER (ROWS 2 PRECEDING) FROM t4; +---- +stmt 0 err 1 -1 72 no such table: t4 diff --git a/parser/testdata/json104.metadata.json b/parser/testdata/json104.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/json104.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/json104.test b/parser/testdata/json104.test new file mode 100644 index 0000000..0b440ce --- /dev/null +++ b/parser/testdata/json104.test @@ -0,0 +1,138 @@ +==== json104-100 + + SELECT json_patch('{ + "a": "b", + "c": { + "d": "e", + "f": "g" + } + }','{ + "a":"z", + "c": { + "f": null + } + }'); +---- +stmt 0 ok +==== json104-101 + + SELECT json_patch('{ + "a": "b", + "c": { + "d": "e", + "f": "g" + } + }','{ + a:"z", + c: { + f: null + } + }'); +---- +stmt 0 ok +==== json104-102 + + SELECT json_patch('{ + a: "b", + c: { + d: "e", + f: "g" + } + }','{ + "a":"z", + "c": { + "f": null + } + }'); +---- +stmt 0 ok +==== json104-103 + + SELECT json_patch('{ + a: "b", + c: { + d: "e", + f: "g" + } + }','{ + a:"z", + c: { + f: null + } + }'); +---- +stmt 0 ok +==== json104-220 + + SELECT json_patch('{}','{"a":{"bb":{"ccc":null}}}'); +---- +stmt 0 ok +==== json104-300 + + SELECT json_patch('{"a":"b"}','{"a":"c"}'); +---- +stmt 0 ok +==== json104-300a + + SELECT coalesce(json_patch(null,'{"a":"c"}'), 'real-null'); +---- +stmt 0 ok +==== json104-301 + + SELECT json_patch('{"a":"b"}','{"b":"c"}'); +---- +stmt 0 ok +==== json104-302 + + SELECT json_patch('{"a":"b"}','{"a":null}'); +---- +stmt 0 ok +==== json104-303 + + SELECT json_patch('{"a":"b","b":"c"}','{"a":null}'); +---- +stmt 0 ok +==== json104-306 + + SELECT json_patch('{"a":{"b":"c"}}','{"a":{"b":"d","c":null}}'); +---- +stmt 0 ok +==== json104-310 + + SELECT json_patch('{"a":"foo"}','null'); +---- +stmt 0 ok +==== json104-310a + + SELECT coalesce(json_patch('{"a":"foo"}',null), 'real-null'); +---- +stmt 0 ok +==== json104-311 + + SELECT json_patch('{"a":"foo"}','"bar"'); +---- +stmt 0 ok +==== json104-312 + + SELECT json_patch('{"e":null}','{"a":1}'); +---- +stmt 0 ok +==== json104-314 + + SELECT json_patch('{}','{"a":{"bb":{"ccc":null}}}'); +---- +stmt 0 ok +==== json104-320 + + SELECT json_patch('{"x":{"one":1}}','{"x":{"two":2},"x":"three"}'); +---- +stmt 0 ok +==== 401 + + CREATE TABLE obj(x); + INSERT INTO obj VALUES('{"a":1,"b":2}'); + SELECT * FROM obj; +---- +stmt 0 ok +stmt 23 err 1 -1 66 no such table: obj +stmt 66 err 1 -1 87 no such table: obj diff --git a/parser/testdata/json106.metadata.json b/parser/testdata/json106.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/json106.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/json106.test b/parser/testdata/json106.test new file mode 100644 index 0000000..cb2ad7f --- /dev/null +++ b/parser/testdata/json106.test @@ -0,0 +1,61 @@ +==== json106-generated + + SELECT count(*) + FROM t1, json_tree(j0) AS rt + WHERE rt.type NOT IN ('object','array') + AND rt.atom IS NOT (j0 ->> rt.fullkey); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== json106-generated.dup1 + + SELECT count(*) + FROM t1, json_tree(j5) AS rt + WHERE rt.type NOT IN ('object','array') + AND rt.atom IS NOT (j0 ->> rt.fullkey); +---- +stmt 0 err 1 -1 147 no such table: t1 +==== json106-generated.dup2 + + DELETE FROM kv; + INSERT INTO kv + SELECT rt.rowid, rt.fullkey, rt.atom + FROM t1, json_tree(j0) AS rt + WHERE rt.type NOT IN ('object','array'); +---- +stmt 0 err 1 -1 20 no such table: kv +stmt 20 err 1 -1 167 no such table: kv +==== json106-generated.dup3 + + SELECT count(*) + FROM t1, kv + WHERE key NOT LIKE '%]' + AND json_remove(j5,key)->>key IS NOT NULL +---- +stmt 0 err 1 -1 117 no such table: t1 +==== json106-generated.dup4 + + SELECT count(*) + FROM t1, kv + WHERE key NOT LIKE '%]' + AND json_insert(json_remove(j5,key),key,val)->>key IS NOT val +---- +stmt 0 err 1 -1 137 no such table: t1 +==== json106-generated.dup5 + + UPDATE t1 SET p=json_patch(j0,j5); + SELECT count(*) + FROM t1, kv + WHERE p->>key IS NOT val +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 108 no such table: t1 +==== json106-generated.dup6 + + SELECT j0 FROM t1 WHERE json(j0)!=json(json_pretty(j0)); +---- +stmt 0 err 1 -1 61 no such table: t1 +==== json106-generated.dup7 + + SELECT j5 FROM t1 WHERE json(j5)!=json(json_pretty(j5)); +---- +stmt 0 err 1 -1 61 no such table: t1 diff --git a/parser/testdata/json107.metadata.json b/parser/testdata/json107.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/json107.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/json107.test b/parser/testdata/json107.test new file mode 100644 index 0000000..ceb05ee --- /dev/null +++ b/parser/testdata/json107.test @@ -0,0 +1,51 @@ +==== 1.1 + + SELECT json_valid( CAST('{"a":1}' AS BLOB) ); +---- +stmt 0 ok +==== 1.1.1 + + SELECT json_valid( CAST('{"a":1}' AS BLOB), 1); +---- +stmt 0 ok +==== 1.1.2 + + SELECT json_valid( CAST('{"a":1}' AS BLOB), 2); +---- +stmt 0 ok +==== 1.1.4 + + SELECT json_valid( CAST('{"a":1}' AS BLOB), 4); +---- +stmt 0 ok +==== 1.1.8 + + SELECT json_valid( CAST('{"a":1}' AS BLOB), 8); +---- +stmt 0 ok +==== 1.2.1 + + SELECT CAST('{"a":123}' AS blob) -> 'a'; +---- +stmt 0 ok +==== 1.2.2 + + SELECT CAST('{"a":123}' AS blob) ->> 'a'; +---- +stmt 0 ok +==== 1.7 + + SELECT json_type(CAST('{"a":123,"b":456}' AS blob)); +---- +stmt 0 ok +==== 1.8 + + SELECT json(CAST('{"a":123,"b":456}' AS blob)); +---- +stmt 0 ok +==== 2.1 + + SELECT key, value FROM json_tree( CAST('{"a":123,"b":456}' AS blob) ) + WHERE atom; +---- +stmt 0 ok diff --git a/parser/testdata/json108.metadata.json b/parser/testdata/json108.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/json108.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/json108.test b/parser/testdata/json108.test new file mode 100644 index 0000000..f79eca1 --- /dev/null +++ b/parser/testdata/json108.test @@ -0,0 +1,25 @@ +==== 1.1 + + SELECT count(*) FROM t1 WHERE json(j0)==json(json_pretty(j0,NULL)); +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 1.2 + + SELECT count(*) FROM t1 WHERE json(j0)==json(json_pretty(j0,NULL)); +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 1.3 + + SELECT count(*) FROM t1 WHERE json(j0)==json(json_pretty(j0,'')); +---- +stmt 0 err 1 -1 68 no such table: t1 +==== 1.4 + + SELECT count(*) FROM t1 WHERE json(j0)==json(json_pretty(j0,char(9))); +---- +stmt 0 err 1 -1 73 no such table: t1 +==== 1.5 + + SELECT count(*) FROM t1 WHERE json(j0)==json(json_pretty(j0,'/*hello*/')); +---- +stmt 0 err 1 -1 77 no such table: t1 diff --git a/parser/testdata/json501.metadata.json b/parser/testdata/json501.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/json501.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/json501.test b/parser/testdata/json501.test new file mode 100644 index 0000000..588cf46 --- /dev/null +++ b/parser/testdata/json501.test @@ -0,0 +1,236 @@ +==== 1.1 + + WITH c(x) AS (VALUES('{a:5,b:6}')) + SELECT x->>'a', json(x), json_valid(x), NOT json_error_position(x) FROM c; +---- +stmt 0 ok +==== 1.10 + + SELECT json('{ MNO_123/xyz : 789 }'); +---- +stmt 0 ok +==== 1.11 + + SELECT '{ MNO_123æxyz : 789 }'->>'MNO_123æxyz'; +---- +stmt 0 ok +==== 2.1 + + WITH c(x) AS (VALUES('{"a":5, "b":6, }')) + SELECT x->>'b', json(x), json_valid(x), NOT json_error_position(x) FROM c; +---- +stmt 0 ok +==== 2.2 + + SELECT '{a:5, b:6 , }'->>'b'; +---- +stmt 0 ok +==== 2.3 + + SELECT '{a:5, b:6 ,, }'->>'b'; +---- +stmt 0 ok +==== 2.4 + + SELECT '{a:5, b:6, ,}'->>'b'; +---- +stmt 0 ok +==== 4.1 + + WITH c(x) AS (VALUES('{"a": ''abcd''}')) + SELECT x->>'a', json(x), json_valid(x), NOT json_error_position(x) FROM c; +---- +stmt 0 ok +==== 5.1 + + WITH c(x) AS (VALUES('{a: "abc'||char(0x5c,0x0a)||'xyz"}')) + SELECT x->>'a', json(x), json_valid(x), NOT json_error_position(x) FROM c; +---- +stmt 0 ok +==== 5.2 + + SELECT ('{a: "abc'||char(0x5c,0x0d)||'xyz"}')->>'a'; +---- +stmt 0 ok +==== 5.3 + + SELECT ('{a: "abc'||char(0x5c,0x0d,0x0a)||'xyz"}')->>'a'; +---- +stmt 0 ok +==== 5.4 + + SELECT ('{a: "abc'||char(0x5c,0x2028)||'xyz"}')->>'a'; +---- +stmt 0 ok +==== 5.5 + + SELECT ('{a: "abc'||char(0x5c,0x2029)||'xyz"}')->>'a'; +---- +stmt 0 ok +==== 6.1 + + SELECT ('{a: "abc'||char(0x5c,0x27)||'xyz"}')->>'a'; +---- +stmt 0 ok +==== 6.2 + + SELECT ('{a: "abc'||char(0x5c,0x22)||'xyz"}')->>'a'; +---- +stmt 0 ok +==== 6.3 + + SELECT ('{a: "abc'||char(0x5c,0x5c)||'xyz"}')->>'a'; +---- +stmt 0 ok +==== 7.1 + + SELECT '{a: 0x0}'->>'a'; +---- +stmt 0 ok +==== 7.2 + + SELECT '{a: -0x0}'->>'a'; +---- +stmt 0 ok +==== 7.3 + + SELECT '{a: +0x0}'->>'a'; +---- +stmt 0 ok +==== 7.4 + + SELECT '{a: 0xabcdef}'->>'a'; +---- +stmt 0 ok +==== 7.5 + + SELECT '{a: -0xaBcDeF}'->>'a'; +---- +stmt 0 ok +==== 7.6 + + SELECT '{a: +0xABCDEF}'->>'a'; +---- +stmt 0 ok +==== 8.1 + + WITH c(x) AS (VALUES('{x: 4.}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.2 + + WITH c(x) AS (VALUES('{x: +4.}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.3 + + WITH c(x) AS (VALUES('{x: -4.}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.3.dup1 + + WITH c(x) AS (VALUES('{x: .5}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.4 + + WITH c(x) AS (VALUES('{x: -.5}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.5 + + WITH c(x) AS (VALUES('{x: +.5}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.6 + + WITH c(x) AS (VALUES('{x: 4.e0}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.7 + + WITH c(x) AS (VALUES('{x: +4.e1}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.8 + + WITH c(x) AS (VALUES('{x: -4.e2}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.9 + + WITH c(x) AS (VALUES('{x: .5e3}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.10 + + WITH c(x) AS (VALUES('{x: -.5e-1}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 8.11 + + WITH c(x) AS (VALUES('{x: +.5e-2}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 9.1 + + WITH c(x) AS (VALUES('{x: +Infinity}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 9.2 + + WITH c(x) AS (VALUES('{x: -Infinity}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 9.3 + + WITH c(x) AS (VALUES('{x: Infinity}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 9.4 + + WITH c(x) AS (VALUES('{x: NaN}')) SELECT x->>'x', json(x) FROM c; +---- +stmt 0 ok +==== 10.1 + + SELECT '{a: +123}'->'a'; +---- +stmt 0 ok +==== 11.1 + + SELECT ' /* abc */ { /*def*/ aaa /* xyz */ : // to the end of line + 123 /* xyz */ , /* 123 */ }'->>'aaa'; +---- +stmt 0 ok +==== 12.1 + + SELECT (char(0x09,0x0a,0x0b,0x0c,0x0d,0x20,0xa0,0x2028,0x2029) + || '{a: "xyz"}')->>'a'; +---- +stmt 0 ok +==== 12.2 + + SELECT ('{a:' || char(0x09,0x0a,0x0b,0x0c,0x0d,0x20,0xa0,0x2028,0x2029) + || '"xyz"}')->>'a'; +---- +stmt 0 ok +==== 12.3 + + SELECT (char(0x1680,0x2000,0x2001,0x2002,0x2003,0x2004,0x2005, + 0x2006,0x2007,0x2008,0x2009,0x200a,0x3000,0xfeff) + || '{a: "xyz"}')->>'a'; +---- +stmt 0 ok +==== 12.4 + + SELECT ('{a: ' ||char(0x1680,0x2000,0x2001,0x2002,0x2003,0x2004,0x2005, + 0x2006,0x2007,0x2008,0x2009,0x200a,0x3000,0xfeff) + || ' "xyz"}')->>'a'; +---- +stmt 0 ok +==== 13.1 + + SELECT json('{x:''a "b" c''}'); +---- +stmt 0 ok diff --git a/parser/testdata/json502.metadata.json b/parser/testdata/json502.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/json502.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/json502.test b/parser/testdata/json502.test new file mode 100644 index 0000000..cd9ba39 --- /dev/null +++ b/parser/testdata/json502.test @@ -0,0 +1,9 @@ +==== 1.1 + + CREATE TABLE t1(x JSON); + INSERT INTO t1(x) VALUES('{a:{b:{c:"hello",},},}'); + SELECT fullkey FROM t1, json_tree(x); +---- +stmt 0 ok +stmt 27 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 121 no such table: t1 diff --git a/parser/testdata/jsonb01.metadata.json b/parser/testdata/jsonb01.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/jsonb01.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/jsonb01.test b/parser/testdata/jsonb01.test new file mode 100644 index 0000000..f73cb22 --- /dev/null +++ b/parser/testdata/jsonb01.test @@ -0,0 +1,5 @@ +==== jsonb01-3.0 + + SELECT json(x'6B37616263162d'); +---- +stmt 0 ok diff --git a/parser/testdata/keyword1.test b/parser/testdata/keyword1.test deleted file mode 100644 index e69de29..0000000 diff --git a/parser/testdata/lastinsert.metadata.json b/parser/testdata/lastinsert.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/lastinsert.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/lastinsert.test b/parser/testdata/lastinsert.test new file mode 100644 index 0000000..b508540 --- /dev/null +++ b/parser/testdata/lastinsert.test @@ -0,0 +1,256 @@ +==== lastinsert-1.1 + + create table t1 (k integer primary key); + insert into t1 values (1); + insert into t1 values (NULL); + insert into t1 values (NULL); + select last_insert_rowid(); +---- +stmt 0 ok +stmt 49 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 122 no such table: t1 +stmt 122 err 1 -1 160 no such table: t1 +stmt 160 ok +==== lastinsert-1.1w + + create table t1w (k integer primary key) WITHOUT ROWID; + insert into t1w values (123456); + select last_insert_rowid(); -- returns 3 from above. +---- +stmt 0 ok +stmt 64 err 1 -1 105 no such table: t1w +stmt 105 ok +==== lastinsert-1.2 + + update t1 set k=4 where k=2; + select last_insert_rowid(); +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 ok +==== lastinsert-1.3 + + delete from t1 where k=4; + select last_insert_rowid(); +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 ok +==== lastinsert-1.4.1 + + create table t2 (k integer primary key, val1, val2, val3); + select last_insert_rowid(); +---- +stmt 0 ok +stmt 67 ok +==== lastinsert-1.4.2 + + create view v as select * from t1; + select last_insert_rowid(); +---- +stmt 0 ok +stmt 43 ok +==== lastinsert-2.1 + + delete from t2; + create trigger r1 after insert on t1 for each row begin + insert into t2 values (NEW.k*2, last_insert_rowid(), NULL, NULL); + update t2 set k=k+10, val2=100+last_insert_rowid(); + update t2 set val3=1000+last_insert_rowid(); + end; + insert into t1 values (13); + select last_insert_rowid(); +---- +stmt 0 err 1 -1 24 no such table: t2 +stmt 24 err 1 -1 88 no such table: main.t1 +stmt 300 err 1 -1 336 no such table: t1 +stmt 336 ok +==== lastinsert-2.2 + + select val1 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-2.3 + + select val2 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-2.4 + + select val3 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-3.1 + + delete from t2; + drop trigger r1; + create trigger r1 after update on t1 for each row begin + insert into t2 values (NEW.k*2, last_insert_rowid(), NULL, NULL); + update t2 set k=k+10, val2=100+last_insert_rowid(); + update t2 set val3=1000+last_insert_rowid(); + end; + update t1 set k=14 where k=3; + select last_insert_rowid(); +---- +stmt 0 err 1 -1 24 no such table: t2 +stmt 24 err 1 -1 49 no such trigger: r1 +stmt 49 err 1 -1 113 no such table: main.t1 +stmt 325 err 1 -1 363 no such table: t1 +stmt 363 ok +==== lastinsert-3.2 + + select val1 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-3.3 + + select val2 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-3.4 + + select val3 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-4.1 + + delete from t2; + drop trigger r1; + create trigger r1 instead of insert on v for each row begin + insert into t2 values (NEW.k*2, last_insert_rowid(), NULL, NULL); + update t2 set k=k+10, val2=100+last_insert_rowid(); + update t2 set val3=1000+last_insert_rowid(); + end; + insert into v values (15); + select last_insert_rowid(); +---- +stmt 0 err 1 -1 24 no such table: t2 +stmt 24 err 1 -1 49 no such trigger: r1 +stmt 49 err 1 -1 117 no such table: main.v +stmt 329 err 1 -1 364 no such table: v +stmt 364 ok +==== lastinsert-4.2 + + select val1 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-4.3 + + select val2 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-4.4 + + select val3 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-5.2 + + select val1 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-5.3 + + select val2 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-5.4 + + select val3 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-6.1 + + delete from t2; + drop trigger r1; + create trigger r1 instead of update on v for each row begin + insert into t2 values (NEW.k*2, last_insert_rowid(), NULL, NULL); + update t2 set k=k+10, val2=100+last_insert_rowid(); + update t2 set val3=1000+last_insert_rowid(); + end; + update v set k=16 where k=14; + select last_insert_rowid(); +---- +stmt 0 err 1 -1 24 no such table: t2 +stmt 24 err 1 -1 49 no such trigger: r1 +stmt 49 err 1 -1 117 no such table: main.v +stmt 329 err 1 -1 367 no such table: v +stmt 367 ok +==== lastinsert-6.2 + + select val1 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-6.3 + + select val2 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-6.4 + + select val3 from t2; +---- +stmt 0 err 1 -1 29 no such table: t2 +==== lastinsert-7.1 + + drop table t1; drop table t2; drop trigger r1; + create temp table t1 (k integer primary key); + create temp table t2 (k integer primary key); + create temp view v1 as select * from t1; + create temp view v2 as select * from t2; + create temp table rid (k integer primary key, rin, rout); + insert into rid values (1, NULL, NULL); + insert into rid values (2, NULL, NULL); + create temp trigger r1 instead of insert on v1 for each row begin + update rid set rin=last_insert_rowid() where k=1; + insert into t1 values (100+NEW.k); + insert into v2 values (100+last_insert_rowid()); + update rid set rout=last_insert_rowid() where k=1; + end; + create temp trigger r2 instead of insert on v2 for each row begin + update rid set rin=last_insert_rowid() where k=2; + insert into t2 values (1000+NEW.k); + update rid set rout=last_insert_rowid() where k=2; + end; + insert into t1 values (77); + select last_insert_rowid(); +---- +stmt 0 err 1 -1 23 no such table: t1 +stmt 23 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 55 no such trigger: r1 +stmt 55 ok +stmt 109 ok +stmt 163 ok +stmt 212 ok +stmt 261 ok +stmt 327 err 1 -1 375 no such table: rid +stmt 375 err 1 -1 423 no such table: rid +stmt 423 err 1 -1 497 no such table: v1 +stmt 743 err 1 -1 817 no such table: v2 +stmt 1003 err 1 -1 1039 no such table: t1 +stmt 1039 ok +==== lastinsert-7.2 + + insert into v1 values (5); + select last_insert_rowid(); +---- +stmt 0 err 1 -1 35 no such table: v1 +stmt 35 ok +==== lastinsert-7.3 + + select rin from rid where k=1; +---- +stmt 0 err 1 -1 39 no such table: rid +==== lastinsert-7.4 + + select rout from rid where k=1; +---- +stmt 0 err 1 -1 40 no such table: rid +==== lastinsert-7.5 + + select rin from rid where k=2; +---- +stmt 0 err 1 -1 39 no such table: rid +==== lastinsert-7.6 + + select rout from rid where k=2; +---- +stmt 0 err 1 -1 40 no such table: rid diff --git a/parser/testdata/laststmtchanges.metadata.json b/parser/testdata/laststmtchanges.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/laststmtchanges.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/laststmtchanges.test b/parser/testdata/laststmtchanges.test new file mode 100644 index 0000000..3a48ccc --- /dev/null +++ b/parser/testdata/laststmtchanges.test @@ -0,0 +1,247 @@ +==== laststmtchanges-1.1 + + create table t0 (x); + insert into t0 values (1); + insert into t0 values (1); + insert into t0 values (2); + insert into t0 values (2); + insert into t0 values (1); + insert into t0 values (1); + insert into t0 values (1); + insert into t0 values (2); + select changes(), total_changes(); +---- +stmt 0 ok +stmt 29 err 1 -1 64 no such table: t0 +stmt 64 err 1 -1 99 no such table: t0 +stmt 99 err 1 -1 134 no such table: t0 +stmt 134 err 1 -1 169 no such table: t0 +stmt 169 err 1 -1 204 no such table: t0 +stmt 204 err 1 -1 239 no such table: t0 +stmt 239 err 1 -1 274 no such table: t0 +stmt 274 err 1 -1 309 no such table: t0 +stmt 309 ok +==== laststmtchanges-1.2 + + update t0 set x=3 where x=1; + select changes(), total_changes(); +---- +stmt 0 err 1 -1 37 no such table: t0 +stmt 37 ok +==== laststmtchanges-1.4 + + update t0 set x=77 where x=88; + select changes(); +---- +stmt 0 err 1 -1 39 no such table: t0 +stmt 39 ok +==== laststmtchanges-1.5 + + delete from t0 where x=2; + select changes(); +---- +stmt 0 err 1 -1 34 no such table: t0 +stmt 34 ok +==== laststmtchanges-2.2 + + select v1 from t2; +---- +stmt 0 err 1 -1 27 no such table: t2 +==== laststmtchanges-2.3 + + select v2 from t2; +---- +stmt 0 err 1 -1 27 no such table: t2 +==== laststmtchanges-3.1 + + drop trigger r1; + delete from t2; delete from t2; + create trigger r1 after update on t1 for each row begin + insert into t2 values (NULL, changes(), NULL); + delete from t0 where oid=1 or oid=2; + update t2 set v2=changes(); + end; + update t1 set k=k; + select changes(); +---- +stmt 0 err 1 -1 25 no such trigger: r1 +stmt 25 err 1 -1 49 no such table: t2 +stmt 49 err 1 -1 65 no such table: t2 +stmt 65 err 1 -1 129 no such table: main.t1 +stmt 290 err 1 -1 317 no such table: t1 +stmt 317 ok +==== laststmtchanges-3.2 + + select v1 from t2; +---- +stmt 0 err 1 -1 27 no such table: t2 +==== laststmtchanges-3.3 + + select v2 from t2; +---- +stmt 0 err 1 -1 27 no such table: t2 +==== laststmtchanges-4.1 + + drop trigger r1; + delete from t2; delete from t2; + create trigger r1 before delete on t1 for each row begin + insert into t2 values (NULL, changes(), NULL); + insert into t0 values (5); + update t2 set v2=changes(); + end; + delete from t1; + select changes(); +---- +stmt 0 err 1 -1 25 no such trigger: r1 +stmt 25 err 1 -1 49 no such table: t2 +stmt 49 err 1 -1 65 no such table: t2 +stmt 65 err 1 -1 130 no such table: main.t1 +stmt 281 err 1 -1 305 no such table: t1 +stmt 305 ok +==== laststmtchanges-4.2 + + select v1 from t2; +---- +stmt 0 err 1 -1 27 no such table: t2 +==== laststmtchanges-4.3 + + select v2 from t2; +---- +stmt 0 err 1 -1 27 no such table: t2 +==== laststmtchanges-5.1 + + drop table t0; drop table t1; drop table t2; + create temp table t0(x); + create temp table t1 (k integer primary key); + create temp table t2 (k integer primary key); + create temp view v1 as select * from t1; + create temp view v2 as select * from t2; + create temp table n1 (k integer primary key, n); + create temp table n2 (k integer primary key, n); + insert into t0 values (1); + insert into t0 values (2); + insert into t0 values (1); + insert into t0 values (1); + insert into t0 values (1); + insert into t0 values (2); + insert into t0 values (2); + insert into t0 values (1); + create temp trigger r1 instead of insert on v1 for each row begin + insert into n1 values (NULL, changes()); + update t0 set x=x*10 where x=1; + insert into n1 values (NULL, changes()); + insert into t1 values (NEW.k); + insert into n1 values (NULL, changes()); + update t0 set x=x*10 where x=0; + insert into v2 values (100+NEW.k); + insert into n1 values (NULL, changes()); + end; + create temp trigger r2 instead of insert on v2 for each row begin + insert into n2 values (NULL, changes()); + insert into t2 values (1000+NEW.k); + insert into n2 values (NULL, changes()); + update t0 set x=x*100 where x=0; + insert into n2 values (NULL, changes()); + delete from t0 where x=2; + insert into n2 values (NULL, changes()); + end; + insert into t1 values (77); + select changes(); +---- +stmt 0 err 1 -1 23 no such table: t0 +stmt 23 err 1 -1 38 no such table: t1 +stmt 38 err 1 -1 53 no such table: t2 +stmt 53 ok +stmt 86 ok +stmt 140 ok +stmt 194 ok +stmt 243 ok +stmt 292 ok +stmt 349 ok +stmt 406 err 1 -1 441 no such table: t0 +stmt 441 err 1 -1 476 no such table: t0 +stmt 476 err 1 -1 511 no such table: t0 +stmt 511 err 1 -1 546 no such table: t0 +stmt 546 err 1 -1 581 no such table: t0 +stmt 581 err 1 -1 616 no such table: t0 +stmt 616 err 1 -1 651 no such table: t0 +stmt 651 err 1 -1 686 no such table: t0 +stmt 686 err 1 -1 760 no such table: v1 +stmt 1163 err 1 -1 1237 no such table: v2 +stmt 1593 err 1 -1 1629 no such table: t1 +stmt 1629 ok +==== laststmtchanges-5.2 + + delete from t1 where k=88; + select changes(); +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 ok +==== laststmtchanges-5.3 + + insert into v1 values (5); + select changes(); +---- +stmt 0 err 1 -1 35 no such table: v1 +stmt 35 ok +==== laststmtchanges-5.4 + + select n from n1; +---- +stmt 0 err 1 -1 26 no such table: n1 +==== laststmtchanges-5.5 + + select n from n2; +---- +stmt 0 err 1 -1 26 no such table: n2 +==== laststmtchanges-6.1 + + CREATE TABLE t3(a, b, c); + INSERT INTO t3 VALUES(1, 2, 3); + INSERT INTO t3 VALUES(4, 5, 6); +---- +stmt 0 ok +stmt 30 err 1 -1 66 no such table: t3 +stmt 66 err 1 -1 102 no such table: t3 +==== laststmtchanges-6.2 + + BEGIN; + DELETE FROM t3; + SELECT changes(); +---- +stmt 0 ok +stmt 11 err 1 -1 31 no such table: t3 +stmt 31 ok +==== laststmtchanges-6.3 + + ROLLBACK; + BEGIN; + DELETE FROM t3 WHERE a IS NOT NULL; + SELECT changes(); +---- +stmt 0 ok +stmt 14 ok +stmt 25 err 1 -1 65 no such table: t3 +stmt 65 ok +==== laststmtchanges-6.4 + + ROLLBACK; + CREATE INDEX t3_i1 ON t3(a); + BEGIN; + DELETE FROM t3; + SELECT changes(); +---- +stmt 0 ok +stmt 14 err 1 -1 47 no such table: main.t3 +stmt 47 ok +stmt 58 err 1 -1 78 no such table: t3 +stmt 78 ok +==== laststmtchanges-6.6 + + SELECT total_changes(); + DELETE FROM t3; + SELECT total_changes(); +---- +stmt 0 ok +stmt 28 err 1 -1 48 no such table: t3 +stmt 48 ok diff --git a/parser/testdata/like.metadata.json b/parser/testdata/like.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/like.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/like.test b/parser/testdata/like.test new file mode 100644 index 0000000..97998ca --- /dev/null +++ b/parser/testdata/like.test @@ -0,0 +1,336 @@ +==== like-1.1 + + SELECT x FROM t1 WHERE x LIKE 'abc' ORDER BY 1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== like-1.2 + + SELECT x FROM t1 WHERE x GLOB 'abc' ORDER BY 1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== like-1.3 + + SELECT x FROM t1 WHERE x LIKE 'ABC' ORDER BY 1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== like-1.4 + + SELECT x FROM t1 WHERE x LIKE 'aBc' ORDER BY 1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== like-1.5.2 + + SELECT x FROM t1 WHERE x LIKE 'abc' ORDER BY 1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== like-1.5.3 + + PRAGMA case_sensitive_like; -- no argument; does not change setting + SELECT x FROM t1 WHERE x LIKE 'abc' ORDER BY 1; +---- +stmt 0 ok +stmt 32 err 1 -1 124 no such table: t1 +==== like-1.6 + + SELECT x FROM t1 WHERE x GLOB 'abc' ORDER BY 1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== like-1.7 + + SELECT x FROM t1 WHERE x LIKE 'ABC' ORDER BY 1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== like-1.8 + + SELECT x FROM t1 WHERE x LIKE 'aBc' ORDER BY 1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== like-1.9 + + PRAGMA case_sensitive_like=off; + SELECT x FROM t1 WHERE x LIKE 'abc' ORDER BY 1; +---- +stmt 0 ok +stmt 36 err 1 -1 88 no such table: t1 +==== like-1.10 + + PRAGMA case_sensitive_like; -- No argument, does not change setting. + SELECT x FROM t1 WHERE x LIKE 'abc' ORDER BY 1; +---- +stmt 0 ok +stmt 32 err 1 -1 126 no such table: t1 +==== like-2.2 + + SELECT x FROM t1 WHERE x REGEXP '^abc' ORDER BY 1; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== like-2.4 + + SELECT x FROM t1 WHERE x MATCH 'abc*' ORDER BY 1; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== like-7.1 + + SELECT rowid, * FROM t1 WHERE rowid GLOB '1*' ORDER BY rowid; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== like-11.0 + + CREATE TABLE t11( + a INTEGER PRIMARY KEY, + b TEXT COLLATE nocase, + c TEXT COLLATE binary + ); + INSERT INTO t11 VALUES(1, 'a','a'); + INSERT INTO t11 VALUES(2, 'ab','ab'); + INSERT INTO t11 VALUES(3, 'abc','abc'); + INSERT INTO t11 VALUES(4, 'abcd','abcd'); + INSERT INTO t11 VALUES(5, 'A','A'); + INSERT INTO t11 VALUES(6, 'AB','AB'); + INSERT INTO t11 VALUES(7, 'ABC','ABC'); + INSERT INTO t11 VALUES(8, 'ABCD','ABCD'); + INSERT INTO t11 VALUES(9, 'x','x'); + INSERT INTO t11 VALUES(10, 'yz','yz'); + INSERT INTO t11 VALUES(11, 'X','X'); + INSERT INTO t11 VALUES(12, 'YZ','YZ'); + SELECT count(*) FROM t11; +---- +stmt 0 ok +stmt 115 err 1 -1 155 no such table: t11 +stmt 155 err 1 -1 197 no such table: t11 +stmt 197 err 1 -1 241 no such table: t11 +stmt 241 err 1 -1 287 no such table: t11 +stmt 287 err 1 -1 327 no such table: t11 +stmt 327 err 1 -1 369 no such table: t11 +stmt 369 err 1 -1 413 no such table: t11 +stmt 413 err 1 -1 459 no such table: t11 +stmt 459 err 1 -1 499 no such table: t11 +stmt 499 err 1 -1 542 no such table: t11 +stmt 542 err 1 -1 583 no such table: t11 +stmt 583 err 1 -1 626 no such table: t11 +stmt 626 err 1 -1 656 no such table: t11 +==== like-12.1 + + CREATE TABLE t12nc(id INTEGER, x TEXT UNIQUE COLLATE nocase); + INSERT INTO t12nc VALUES(1,'abcde'),(2,'uvwxy'),(3,'ABCDEF'); + CREATE TABLE t12b(id INTEGER, x TEXT UNIQUE COLLATE binary); + INSERT INTO t12b VALUES(1,'abcde'),(2,'uvwxy'),(3,'ABCDEF'); + SELECT id FROM t12nc WHERE x LIKE 'abc%' ORDER BY +id; +---- +stmt 0 ok +stmt 64 err 1 -1 128 no such table: t12nc +stmt 128 ok +stmt 191 err 1 -1 254 no such table: t12b +stmt 254 err 1 -1 311 no such table: t12nc +==== like-12.2 + + SELECT id FROM t12b WHERE x LIKE 'abc%' ORDER BY +id; +---- +stmt 0 err 1 -1 56 no such table: t12b +==== like-12.3 + + SELECT id FROM t12nc WHERE x LIKE 'abc%' COLLATE binary ORDER BY +id; +---- +stmt 0 err 1 -1 72 no such table: t12nc +==== like-12.4 + + SELECT id FROM t12b WHERE x LIKE 'abc%' COLLATE binary ORDER BY +id; +---- +stmt 0 err 1 -1 71 no such table: t12b +==== like-12.5 + + SELECT id FROM t12nc WHERE x LIKE 'abc%' COLLATE nocase ORDER BY +id; +---- +stmt 0 err 1 -1 72 no such table: t12nc +==== like-12.6 + + SELECT id FROM t12b WHERE x LIKE 'abc%' COLLATE nocase ORDER BY +id; +---- +stmt 0 err 1 -1 71 no such table: t12b +==== like-12.11 + + EXPLAIN QUERY PLAN + SELECT id FROM t12nc WHERE x LIKE 'abc%' ORDER BY +id; +---- +stmt 0 err 1 -1 78 no such table: t12nc +==== like-12.12 + + EXPLAIN QUERY PLAN + SELECT id FROM t12b WHERE x LIKE 'abc%' ORDER BY +id; +---- +stmt 0 err 1 -1 77 no such table: t12b +==== like-12.13 + + EXPLAIN QUERY PLAN + SELECT id FROM t12nc WHERE x LIKE 'abc%' COLLATE nocase ORDER BY +id; +---- +stmt 0 err 1 -1 93 no such table: t12nc +==== like-12.14 + + EXPLAIN QUERY PLAN + SELECT id FROM t12b WHERE x LIKE 'abc%' COLLATE nocase ORDER BY +id; +---- +stmt 0 err 1 -1 92 no such table: t12b +==== like-12.15 + + EXPLAIN QUERY PLAN + SELECT id FROM t12nc WHERE x LIKE 'abc%' COLLATE binary ORDER BY +id; +---- +stmt 0 err 1 -1 93 no such table: t12nc +==== like-12.16 + + EXPLAIN QUERY PLAN + SELECT id FROM t12b WHERE x LIKE 'abc%' COLLATE binary ORDER BY +id; +---- +stmt 0 err 1 -1 92 no such table: t12b +==== like-13.1 + + SELECT char(0x304d) LIKE char(0x306d); +---- +stmt 0 ok +==== like-13.2 + + SELECT char(0x4d) LIKE char(0x306d); +---- +stmt 0 ok +==== like-13.3 + + SELECT char(0x304d) LIKE char(0x6d); +---- +stmt 0 ok +==== like-13.4 + + SELECT char(0x4d) LIKE char(0x6d); +---- +stmt 0 ok +==== like-15.100 + + CREATE TABLE t15(x TEXT COLLATE nocase, y, PRIMARY KEY(x)); + INSERT INTO t15(x,y) VALUES + ('abcde',1), ('ab%de',2), ('a_cde',3), + ('uvwxy',11),('uvwx%',12),('uvwx_',13), + ('_bcde',21),('%bcde',22), + ('abcd_',31),('abcd%',32), + ('ab%xy',41); + SELECT y FROM t15 WHERE x LIKE 'ab/%d%' ESCAPE '/'; +---- +stmt 0 ok +stmt 62 err 1 -1 259 no such table: t15 +stmt 259 err 1 -1 313 no such table: t15 +==== like-15.101 + + EXPLAIN QUERY PLAN + SELECT y FROM t15 WHERE x LIKE 'ab/%d%' ESCAPE '/'; +---- +stmt 0 err 1 -1 75 no such table: t15 +==== like-15.102 + + EXPLAIN QUERY PLAN + SELECT y FROM t15 WHERE x LIKE 'ab/%d%' ESCAPE '//'; +---- +stmt 0 err 1 -1 76 no such table: t15 +==== like-15.103 + + EXPLAIN QUERY PLAN + SELECT y FROM t15 WHERE x LIKE 'ab/%d%' ESCAPE ''; +---- +stmt 0 err 1 -1 74 no such table: t15 +==== like-15.110 + + SELECT y FROM t15 WHERE x LIKE 'abcdx%%' ESCAPE 'x'; +---- +stmt 0 err 1 -1 55 no such table: t15 +==== like-15.111 + + SELECT y FROM t15 WHERE x LIKE 'abx%%' ESCAPE 'x' ORDER BY +y +---- +stmt 0 err 1 -1 65 no such table: t15 +==== like-15.112 + + EXPLAIN QUERY PLAN + SELECT y FROM t15 WHERE x LIKE 'abx%%' ESCAPE 'x' ORDER BY +y +---- +stmt 0 err 1 -1 86 no such table: t15 +==== like-15.120 + + SELECT y FROM t15 WHERE x LIKE '/%bc%' ESCAPE '/'; +---- +stmt 0 err 1 -1 53 no such table: t15 +==== like-15.121 + + EXPLAIN QUERY PLAN + SELECT y FROM t15 WHERE x LIKE '/%bc%' ESCAPE '/'; +---- +stmt 0 err 1 -1 74 no such table: t15 +==== 16.0 + + CREATE TABLE t1(a INTEGER COLLATE NOCASE); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1 VALUES(' 1x'); + INSERT INTO t1 VALUES(' 1-'); +---- +stmt 0 ok +stmt 45 err 1 -1 73 no such table: main.t1 +stmt 73 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 137 no such table: t1 +==== 16.1 + + SELECT * FROM t1 WHERE a LIKE ' 1%'; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 16.2 + + SELECT * FROM t1 WHERE a LIKE ' 1-'; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 17.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(id INTEGER PRIMARY KEY, x TEXT); + INSERT INTO t1 VALUES + (1,'abcde'), + (2,'abc_'), + (3,'abc__'), + (4,'abc%'), + (5,'abc%%'); + SELECT id FROM t1 WHERE x LIKE 'abc%%' ESCAPE '%'; +---- +stmt 0 ok +stmt 27 ok +stmt 78 err 1 -1 185 no such table: t1 +stmt 185 err 1 -1 238 no such table: t1 +==== 17.1 + + SELECT id FROM t1 WHERE x LIKE 'abc__' ESCAPE '_'; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== 17.1.dup1 + + SELECT 'x' LIKE '%' ESCAPE '_'; +---- +stmt 0 ok +==== 18.0 + + CREATE TABLE t1(x INT, y TEXT); + INSERT INTO t1 VALUES(1,'abc'),(2,'ABC'),(3,'Abc'); + CREATE VIEW t2 AS SELECT * FROM t1 WHERE y LIKE 'a%'; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 34 err 1 -1 88 no such table: t1 +stmt 88 ok +stmt 144 err 1 -1 164 no such table: t2 +==== 18.1 + + PRAGMA case_sensitive_like=OFF; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 34 err 1 -1 54 no such table: t2 +==== 18.2 + + PRAGMA case_sensitive_like=ON; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 33 err 1 -1 53 no such table: t2 diff --git a/parser/testdata/like3.metadata.json b/parser/testdata/like3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/like3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/like3.test b/parser/testdata/like3.test new file mode 100644 index 0000000..f0f0029 --- /dev/null +++ b/parser/testdata/like3.test @@ -0,0 +1,276 @@ +==== like3-1.1 + + PRAGMA encoding=UTF8; + CREATE TABLE t1(a,b TEXT COLLATE nocase); + INSERT INTO t1(a,b) + VALUES(1,'abc'), + (2,'ABX'), + (3,'BCD'), + (4,x'616263'), + (5,x'414258'), + (6,x'424344'); + CREATE INDEX t1ba ON t1(b,a); + + SELECT a, b FROM t1 WHERE b LIKE 'aB%' ORDER BY +a; +---- +stmt 0 ok +stmt 24 ok +stmt 68 err 1 -1 234 no such table: t1 +stmt 234 err 1 -1 266 no such table: main.t1 +stmt 266 err 1 -1 321 no such table: t1 +==== like3-1.2 + + SELECT a, b FROM t1 WHERE +b LIKE 'aB%' ORDER BY +a; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== like3-2.0 + + CREATE TABLE t2(a, b TEXT); + INSERT INTO t2 SELECT a, b FROM t1; + CREATE INDEX t2ba ON t2(b,a); + SELECT a, b FROM t2 WHERE b GLOB 'ab*' ORDER BY +a; +---- +stmt 0 ok +stmt 30 err 1 -1 68 no such table: t2 +stmt 68 err 1 -1 100 no such table: main.t2 +stmt 100 err 1 -1 154 no such table: t2 +==== like3-2.1 + + SELECT a, b FROM t2 WHERE +b GLOB 'ab*' ORDER BY +a; +---- +stmt 0 err 1 -1 55 no such table: t2 +==== like3-2.2 + + SELECT a, b FROM t2 WHERE b>=x'6162' AND b GLOB 'ab*' +---- +stmt 0 err 1 -1 57 no such table: t2 +==== like3-2.3 + + SELECT a, b FROM t2 WHERE +b>=x'6162' AND +b GLOB 'ab*' +---- +stmt 0 err 1 -1 59 no such table: t2 +==== like3-2.4 + + SELECT a, b FROM t2 WHERE b GLOB 'ab*' AND b>=x'6162' +---- +stmt 0 err 1 -1 57 no such table: t2 +==== like3-2.5 + + SELECT a, b FROM t2 WHERE +b GLOB 'ab*' AND +b>=x'6162' +---- +stmt 0 err 1 -1 59 no such table: t2 +==== like3-3.0 + + CREATE TABLE t3(x TEXT PRIMARY KEY COLLATE nocase); + INSERT INTO t3(x) VALUES('aaa'),('abc'),('abd'),('abe'),('acz'); + INSERT INTO t3(x) SELECT CAST(x AS blob) FROM t3; + SELECT quote(x) FROM t3 WHERE x LIKE 'ab%' ORDER BY x; +---- +stmt 0 ok +stmt 54 err 1 -1 121 no such table: t3 +stmt 121 err 1 -1 173 no such table: t3 +stmt 173 err 1 -1 230 no such table: t3 +==== like3-3.1 + + SELECT quote(x) FROM t3 WHERE x LIKE 'ab%' ORDER BY x DESC; +---- +stmt 0 err 1 -1 62 no such table: t3 +==== like3-3.1ck + + SELECT quote(x) FROM t3 WHERE x LIKE 'ab%' ORDER BY +x DESC; +---- +stmt 0 err 1 -1 63 no such table: t3 +==== like3-3.2 + + SELECT quote(x) FROM t3 WHERE x LIKE 'ab%' ORDER BY x ASC; +---- +stmt 0 err 1 -1 61 no such table: t3 +==== like3-3.2ck + + SELECT quote(x) FROM t3 WHERE x LIKE 'ab%' ORDER BY +x ASC; +---- +stmt 0 err 1 -1 62 no such table: t3 +==== like3-4.0 + + CREATE TABLE t4(x TEXT COLLATE nocase); + CREATE INDEX t4x ON t4(x DESC); + INSERT INTO t4(x) SELECT x FROM t3; + SELECT quote(x) FROM t4 WHERE x LIKE 'ab%' ORDER BY x; +---- +stmt 0 ok +stmt 42 err 1 -1 76 no such table: main.t4 +stmt 76 err 1 -1 114 no such table: t4 +stmt 114 err 1 -1 171 no such table: t4 +==== like3-4.1 + + SELECT quote(x) FROM t4 WHERE x LIKE 'ab%' ORDER BY x DESC; +---- +stmt 0 err 1 -1 62 no such table: t4 +==== like3-4.1ck + + SELECT quote(x) FROM t4 WHERE x LIKE 'ab%' ORDER BY +x DESC; +---- +stmt 0 err 1 -1 63 no such table: t4 +==== like3-4.2 + + SELECT quote(x) FROM t4 WHERE x LIKE 'ab%' ORDER BY x ASC; +---- +stmt 0 err 1 -1 61 no such table: t4 +==== like3-4.2ck + + SELECT quote(x) FROM t4 WHERE x LIKE 'ab%' ORDER BY +x ASC; +---- +stmt 0 err 1 -1 62 no such table: t4 +==== like3-5.100 + + CREATE TABLE t5a(x INT UNIQUE COLLATE nocase); + INSERT INTO t5a(x) VALUES('/abc'),(123),(-234); + SELECT x FROM t5a WHERE x LIKE '/%'; +---- +stmt 0 ok +stmt 49 err 1 -1 99 no such table: t5a +stmt 99 err 1 -1 138 no such table: t5a +==== like3-5.110 + + SELECT x FROM t5a WHERE x LIKE '/a%'; +---- +stmt 0 err 1 -1 40 no such table: t5a +==== like3-5.120 + + SELECT x FROM t5a WHERE x LIKE '^12%' ESCAPE '^'; +---- +stmt 0 err 1 -1 52 no such table: t5a +==== like3-5.122 + + SELECT x FROM t5a WHERE x LIKE '^-2%' ESCAPE '^'; +---- +stmt 0 err 1 -1 52 no such table: t5a +==== like3-5.200 + + CREATE TABLE t5b(x INT UNIQUE COLLATE binary); + INSERT INTO t5b(x) VALUES('/abc'),(123),(-234); + SELECT x FROM t5b WHERE x GLOB '/*'; +---- +stmt 0 ok +stmt 49 err 1 -1 99 no such table: t5b +stmt 99 err 1 -1 138 no such table: t5b +==== like3-5.210 + + SELECT x FROM t5b WHERE x GLOB '/a*'; +---- +stmt 0 err 1 -1 40 no such table: t5b +==== like3-5.300 + + CREATE TABLE t5c (c0 REAL); + CREATE INDEX t5c_0 ON t5c(c0 COLLATE NOCASE); + INSERT INTO t5c(rowid, c0) VALUES (99,'+/'); + SELECT * FROM t5c WHERE (c0 LIKE '+/'); +---- +stmt 0 ok +stmt 30 err 1 -1 78 no such table: main.t5c +stmt 78 err 1 -1 125 no such table: t5c +stmt 125 err 1 -1 167 no such table: t5c +==== like3-5.400 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 INT UNIQUE COLLATE NOCASE); + INSERT INTO t0(c0) VALUES ('./'); + SELECT * FROM t0 WHERE t0.c0 LIKE './'; +---- +stmt 0 ok +stmt 27 ok +stmt 76 err 1 -1 112 no such table: t0 +stmt 112 err 1 -1 154 no such table: t0 +==== like3-5.410 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 INT UNIQUE COLLATE NOCASE); + INSERT INTO t0(c0) VALUES ('.1%'); + SELECT * FROM t0 WHERE t0.c0 LIKE '.1%'; +---- +stmt 0 ok +stmt 27 ok +stmt 76 err 1 -1 113 no such table: t0 +stmt 113 err 1 -1 156 no such table: t0 +==== like3-5.420 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 UNIQUE); + INSERT INTO t0(c0) VALUES(-1); + SELECT * FROM t0 WHERE t0.c0 GLOB '-*'; +---- +stmt 0 ok +stmt 27 ok +stmt 57 err 1 -1 90 no such table: t0 +stmt 90 err 1 -1 132 no such table: t0 +==== like3-5.421 + + SELECT t0.c0 GLOB '-*' FROM t0; +---- +stmt 0 err 1 -1 34 no such table: t0 +==== like3-6.100 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(path TEXT COLLATE nocase PRIMARY KEY,a,b,c) WITHOUT ROWID; +---- +stmt 0 ok +stmt 27 ok +==== like3-6.200 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(path TEXT,x,y,z); + CREATE INDEX t2path ON t2(path COLLATE nocase); + CREATE INDEX t2path2 ON t2(path); +---- +stmt 0 ok +stmt 27 ok +stmt 63 err 1 -1 113 no such table: main.t2 +stmt 113 err 1 -1 149 no such table: main.t2 +==== like3-7.0 + + PRAGMA encoding = 'UTF-16be'; + + CREATE TABLE Example(word TEXT NOT NULL); + CREATE INDEX Example_word on Example(word); + + INSERT INTO Example VALUES(char(0x307F)); +---- +stmt 0 ok +stmt 34 ok +stmt 83 err 1 -1 131 no such table: main.Example +stmt 131 err 1 -1 180 no such table: Example +==== like3-7.1 + + SELECT char(0x307F)=='み'; +---- +stmt 0 ok +==== like3-7.1.dup1 + + SELECT * FROM Example WHERE word GLOB 'み*' +---- +stmt 0 err 1 -1 50 no such table: Example +==== like3-7.2 + + SELECT * FROM Example WHERE word >= char(0x307F) AND word < char(0x3080); +---- +stmt 0 err 1 -1 78 no such table: Example +==== like3-generated + + CREATE TABLE t1(x); +---- +stmt 0 ok +==== like3-generated.dup1 + + PRAGMA encoding +---- +stmt 0 ok +==== like3-generated.dup2 + + SELECT typeof(x) FROM t1 +---- +stmt 0 err 1 -1 32 no such table: t1 +==== like3-generated.dup3 + + CREATE INDEX i1 ON t1(x); +---- +stmt 0 err 1 -1 32 no such table: main.t1 diff --git a/parser/testdata/limit.metadata.json b/parser/testdata/limit.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/limit.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/limit.test b/parser/testdata/limit.test new file mode 100644 index 0000000..9fa03c4 --- /dev/null +++ b/parser/testdata/limit.test @@ -0,0 +1,413 @@ +==== limit-1.0 +SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== limit-1.1 +SELECT count(*) FROM t1 LIMIT 5 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== limit-1.2.1 +SELECT x FROM t1 ORDER BY x LIMIT 5 +---- +stmt 0 err 1 -1 36 no such table: t1 +==== limit-1.2.2 +SELECT x FROM t1 ORDER BY x LIMIT 5 OFFSET 2 +---- +stmt 0 err 1 -1 45 no such table: t1 +==== limit-1.2.3 +SELECT x FROM t1 ORDER BY x+1 LIMIT 5 OFFSET -2 +---- +stmt 0 err 1 -1 48 no such table: t1 +==== limit-1.2.4 +SELECT x FROM t1 ORDER BY x+1 LIMIT 2, -5 +---- +stmt 0 err 1 -1 42 no such table: t1 +==== limit-1.2.5 +SELECT x FROM t1 ORDER BY x+1 LIMIT -2, 5 +---- +stmt 0 err 1 -1 42 no such table: t1 +==== limit-1.2.6 +SELECT x FROM t1 ORDER BY x+1 LIMIT -2, -5 +---- +stmt 0 err 1 -1 43 no such table: t1 +==== limit-1.2.7 +SELECT x FROM t1 ORDER BY x LIMIT 2, 5 +---- +stmt 0 err 1 -1 39 no such table: t1 +==== limit-1.3 +SELECT x FROM t1 ORDER BY x LIMIT 5 OFFSET 5 +---- +stmt 0 err 1 -1 45 no such table: t1 +==== limit-1.4.1 +SELECT x FROM t1 ORDER BY x LIMIT 50 OFFSET 30 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== limit-1.4.2 +SELECT x FROM t1 ORDER BY x LIMIT 30, 50 +---- +stmt 0 err 1 -1 41 no such table: t1 +==== limit-1.5 +SELECT x FROM t1 ORDER BY x LIMIT 50 OFFSET 50 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== limit-1.6 +SELECT * FROM t1 AS a, t1 AS b ORDER BY a.x, b.x LIMIT 5 +---- +stmt 0 err 1 -1 57 no such table: t1 +==== limit-1.7 +SELECT * FROM t1 AS a, t1 AS b ORDER BY a.x, b.x LIMIT 5 OFFSET 32 +---- +stmt 0 err 1 -1 67 no such table: t1 +==== limit-2.1 + + CREATE VIEW v1 AS SELECT * FROM t1 LIMIT 2; + SELECT count(*) FROM (SELECT * FROM v1); +---- +stmt 0 ok +stmt 50 err 1 -1 97 no such table: v1 +==== limit-2.2 + + CREATE TABLE t2 AS SELECT * FROM t1 LIMIT 2; + SELECT count(*) FROM t2; +---- +stmt 0 err 1 -1 49 no such table: t1 +stmt 49 err 1 -1 78 no such table: t2 +==== limit-2.3 + + SELECT count(*) FROM t1 WHERE rowid IN (SELECT rowid FROM t1 LIMIT 2); +---- +stmt 0 err 1 -1 77 no such table: t1 +==== limit-3.1 + + SELECT z FROM (SELECT y*10+x AS z FROM t1 ORDER BY x LIMIT 10) + ORDER BY z LIMIT 5; +---- +stmt 0 err 1 -1 95 no such table: t1 +==== limit-4.2 + + SELECT x FROM t3 LIMIT 2 OFFSET 10000 +---- +stmt 0 err 1 -1 43 no such table: t3 +==== limit-4.3 + + CREATE TABLE t4 AS SELECT x, + 'abcdefghijklmnopqrstuvwyxz ABCDEFGHIJKLMNOPQRSTUVWYXZ' || x || + 'abcdefghijklmnopqrstuvwyxz ABCDEFGHIJKLMNOPQRSTUVWYXZ' || x || + 'abcdefghijklmnopqrstuvwyxz ABCDEFGHIJKLMNOPQRSTUVWYXZ' || x || + 'abcdefghijklmnopqrstuvwyxz ABCDEFGHIJKLMNOPQRSTUVWYXZ' || x || + 'abcdefghijklmnopqrstuvwyxz ABCDEFGHIJKLMNOPQRSTUVWYXZ' || x AS y + FROM t3 LIMIT 1000; + SELECT x FROM t4 ORDER BY y DESC LIMIT 1 OFFSET 999; +---- +stmt 0 err 1 -1 414 no such table: t3 +stmt 414 err 1 -1 471 no such table: t4 +==== limit-5.1 + + CREATE TABLE t5(x,y); + INSERT INTO t5 SELECT x-y, x+y FROM t1 WHERE x BETWEEN 10 AND 15 + ORDER BY x LIMIT 2; + SELECT * FROM t5 ORDER BY x; +---- +stmt 0 ok +stmt 26 err 1 -1 123 no such table: t5 +stmt 123 err 1 -1 156 no such table: t5 +==== limit-5.2 + + DELETE FROM t5; + INSERT INTO t5 SELECT x-y, x+y FROM t1 WHERE x BETWEEN 10 AND 15 + ORDER BY x DESC LIMIT 2; + SELECT * FROM t5 ORDER BY x; +---- +stmt 0 err 1 -1 20 no such table: t5 +stmt 20 err 1 -1 122 no such table: t5 +stmt 122 err 1 -1 155 no such table: t5 +==== limit-5.3 + + DELETE FROM t5; + INSERT INTO t5 SELECT x-y, x+y FROM t1 WHERE x ORDER BY x DESC LIMIT 31; + SELECT * FROM t5 ORDER BY x LIMIT 2; +---- +stmt 0 err 1 -1 20 no such table: t5 +stmt 20 err 1 -1 97 no such table: t5 +stmt 97 err 1 -1 138 no such table: t5 +==== limit-5.4 + + SELECT * FROM t5 ORDER BY x DESC, y DESC LIMIT 2; +---- +stmt 0 err 1 -1 54 no such table: t5 +==== limit-5.5 + + DELETE FROM t5; + INSERT INTO t5 SELECT a.x*100+b.x, a.y*100+b.y FROM t1 AS a, t1 AS b + ORDER BY 1, 2 LIMIT 1000; + SELECT count(*), sum(x), sum(y), min(x), max(x), min(y), max(y) FROM t5; +---- +stmt 0 err 1 -1 20 no such table: t5 +stmt 20 err 1 -1 138 no such table: t5 +stmt 138 err 1 -1 215 no such table: t5 +==== limit-6.1 + + BEGIN; + CREATE TABLE t6(a); + INSERT INTO t6 VALUES(1); + INSERT INTO t6 VALUES(2); + INSERT INTO t6 SELECT a+2 FROM t6; + COMMIT; + SELECT * FROM t6; +---- +stmt 0 ok +stmt 11 ok +stmt 35 err 1 -1 65 no such table: t6 +stmt 65 err 1 -1 95 no such table: t6 +stmt 95 err 1 -1 134 no such table: t6 +stmt 134 ok +stmt 146 err 1 -1 168 no such table: t6 +==== limit-6.2 + + SELECT * FROM t6 LIMIT -1 OFFSET -1; +---- +stmt 0 err 1 -1 41 no such table: t6 +==== limit-6.3 + + SELECT * FROM t6 LIMIT 2 OFFSET -123; +---- +stmt 0 err 1 -1 42 no such table: t6 +==== limit-6.4 + + SELECT * FROM t6 LIMIT -432 OFFSET 2; +---- +stmt 0 err 1 -1 42 no such table: t6 +==== limit-6.5 + + SELECT * FROM t6 LIMIT -1 +---- +stmt 0 err 1 -1 31 no such table: t6 +==== limit-6.6 + + SELECT * FROM t6 LIMIT -1 OFFSET 1 +---- +stmt 0 err 1 -1 40 no such table: t6 +==== limit-6.7 + + SELECT * FROM t6 LIMIT 0 +---- +stmt 0 err 1 -1 30 no such table: t6 +==== limit-6.8 + + SELECT * FROM t6 LIMIT 0 OFFSET 1 +---- +stmt 0 err 1 -1 39 no such table: t6 +==== limit-7.1.1 + + SELECT x FROM t2 LIMIT 5 UNION ALL SELECT a FROM t6; +---- +stmt 0 err 1 -1 57 LIMIT clause should come after UNION ALL not before +==== limit-7.1.2 + + SELECT x FROM t2 LIMIT 5 UNION SELECT a FROM t6; +---- +stmt 0 err 1 -1 53 LIMIT clause should come after UNION not before +==== limit-7.1.3 + + SELECT x FROM t2 LIMIT 5 EXCEPT SELECT a FROM t6 LIMIT 3; +---- +stmt 0 err 1 -1 62 LIMIT clause should come after EXCEPT not before +==== limit-7.1.4 + + SELECT x FROM t2 LIMIT 0,5 INTERSECT SELECT a FROM t6; +---- +stmt 0 err 1 -1 59 LIMIT clause should come after INTERSECT not before +==== limit-7.2 + + SELECT x FROM t2 UNION ALL SELECT a FROM t6 LIMIT 5; +---- +stmt 0 err 1 -1 57 no such table: t6 +==== limit-7.3 + + SELECT x FROM t2 UNION ALL SELECT a FROM t6 LIMIT 3 OFFSET 1; +---- +stmt 0 err 1 -1 66 no such table: t6 +==== limit-7.4 + + SELECT x FROM t2 UNION ALL SELECT a FROM t6 ORDER BY 1 LIMIT 3 OFFSET 1; +---- +stmt 0 err 1 -1 77 no such table: t6 +==== limit-7.5 + + SELECT x FROM t2 UNION SELECT x+2 FROM t2 LIMIT 2 OFFSET 1; +---- +stmt 0 err 1 -1 64 no such table: t2 +==== limit-7.6 + + SELECT x FROM t2 UNION SELECT x+2 FROM t2 ORDER BY 1 DESC LIMIT 2 OFFSET 1; +---- +stmt 0 err 1 -1 80 no such table: t2 +==== limit-7.7 + + SELECT a+9 FROM t6 EXCEPT SELECT y FROM t2 LIMIT 2; +---- +stmt 0 err 1 -1 56 no such table: t2 +==== limit-7.8 + + SELECT a+9 FROM t6 EXCEPT SELECT y FROM t2 ORDER BY 1 DESC LIMIT 2; +---- +stmt 0 err 1 -1 72 no such table: t2 +==== limit-7.9 + + SELECT a+26 FROM t6 INTERSECT SELECT x FROM t2 LIMIT 1; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== limit-7.10 + + SELECT a+27 FROM t6 INTERSECT SELECT x FROM t2 LIMIT 1; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== limit-7.11 + + SELECT a+27 FROM t6 INTERSECT SELECT x FROM t2 LIMIT 1 OFFSET 1; +---- +stmt 0 err 1 -1 69 no such table: t2 +==== limit-7.12 + + SELECT a+27 FROM t6 INTERSECT SELECT x FROM t2 + ORDER BY 1 DESC LIMIT 1 OFFSET 1; +---- +stmt 0 err 1 -1 93 no such table: t2 +==== limit-8.1 + + SELECT DISTINCT cast(round(x/100) as integer) FROM t3 LIMIT 5; +---- +stmt 0 err 1 -1 67 no such table: t3 +==== limit-8.2 + + SELECT DISTINCT cast(round(x/100) as integer) FROM t3 LIMIT 5 OFFSET 5; +---- +stmt 0 err 1 -1 76 no such table: t3 +==== limit-8.3 + + SELECT DISTINCT cast(round(x/100) as integer) FROM t3 LIMIT 5 OFFSET 25; +---- +stmt 0 err 1 -1 77 no such table: t3 +==== limit-9.1 + + SELECT * FROM (SELECT * FROM t6 LIMIT 3); +---- +stmt 0 err 1 -1 48 no such table: t6 +==== limit-9.2.1 + + CREATE TABLE t7 AS SELECT * FROM t6; +---- +stmt 0 err 1 -1 41 no such table: t6 +==== limit-9.2.2 + + SELECT * FROM (SELECT * FROM t7 LIMIT 3); +---- +stmt 0 err 1 -1 48 no such table: t7 +==== limit-9.3 + + SELECT * FROM (SELECT * FROM t6 LIMIT 3) + UNION + SELECT * FROM (SELECT * FROM t7 LIMIT 3) + ORDER BY 1 +---- +stmt 0 err 1 -1 132 no such table: t7 +==== limit-9.4 + + SELECT * FROM (SELECT * FROM t6 LIMIT 3) + UNION + SELECT * FROM (SELECT * FROM t7 LIMIT 3) + ORDER BY 1 + LIMIT 2 +---- +stmt 0 err 1 -1 148 no such table: t7 +==== limit-9.5 + + SELECT * FROM t6 LIMIT 3 + UNION + SELECT * FROM t7 LIMIT 3 +---- +stmt 0 err 1 -1 75 LIMIT clause should come after UNION not before +==== limit-12.1 + + SELECT * FROM t1 LIMIT replace(1) +---- +stmt 0 err 1 -1 40 no such table: t1 +==== limit-12.2 + + SELECT * FROM t1 LIMIT 5 OFFSET replace(1) +---- +stmt 0 err 1 -1 49 no such table: t1 +==== limit-12.3 + + SELECT * FROM t1 LIMIT x +---- +stmt 0 err 1 -1 31 no such table: t1 +==== limit-12.4 + + SELECT * FROM t1 LIMIT 1 OFFSET x +---- +stmt 0 err 1 -1 40 no such table: t1 +==== limit-14.1 + + SELECT 123 LIMIT 1 OFFSET 0 +---- +stmt 0 ok +==== limit-14.2 + + SELECT 123 LIMIT 1 OFFSET 1 +---- +stmt 0 ok +==== limit-14.3 + + SELECT 123 LIMIT 0 OFFSET 0 +---- +stmt 0 ok +==== limit-14.4 + + SELECT 123 LIMIT 0 OFFSET 1 +---- +stmt 0 ok +==== limit-14.6 + + SELECT 123 LIMIT -1 OFFSET 0 +---- +stmt 0 ok +==== limit-14.7 + + SELECT 123 LIMIT -1 OFFSET 1 +---- +stmt 0 ok +==== limit-15.1 + + CREATE TABLE t1(a PRIMARY KEY, b TEXT); + CREATE TABLE t4(c PRIMARY KEY, d); + CREATE TABLE t5(e PRIMARY KEY, f); + CREATE TABLE t6(g, h); + CREATE TABLE t3_a(k, v); + CREATE TABLE t3_b(k, v); + CREATE VIEW t3 AS SELECT * FROM t3_a UNION ALL SELECT * FROM t3_b; + INSERT INTO t5(e,f) VALUES(500000,'orange'); + INSERT INTO t4(c,d) VALUES(300000,'blue'),(400,'green'),(8000,'grey'); + INSERT INTO t1(a,b) VALUES(300000,'purple'); + INSERT INTO t3_a VALUES(300000,'yellow'),(500,'pink'),(8000,'red'); + INSERT INTO t6 default values; + SELECT ( + SELECT 100000 FROM + (SELECT 200000 FROM t6 WHERE a = ( SELECT 300000 FROM t3 WHERE a ) ), + (SELECT 400000 FROM t5 WHERE e=500000), + (SELECT 600000 FROM t4 WHERE c=a) + ) FROM t1; +---- +stmt 0 ok +stmt 42 ok +stmt 79 ok +stmt 116 ok +stmt 141 ok +stmt 168 ok +stmt 195 ok +stmt 264 err 1 -1 311 no such table: t5 +stmt 311 err 1 -1 384 no such table: t4 +stmt 384 err 1 -1 431 no such table: t1 +stmt 431 err 1 -1 501 no such table: t3_a +stmt 501 err 1 -1 534 no such table: t6 +stmt 534 err 1 -1 757 no such table: t1 diff --git a/parser/testdata/limit2.metadata.json b/parser/testdata/limit2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/limit2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/limit2.test b/parser/testdata/limit2.test new file mode 100644 index 0000000..06a650d --- /dev/null +++ b/parser/testdata/limit2.test @@ -0,0 +1,250 @@ +==== limit2-100 + + CREATE TABLE t1(a,b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000) + INSERT INTO t1(a,b) SELECT 1, (x*17)%1000 + 1000 FROM c; + INSERT INTO t1(a,b) VALUES(2,2),(3,1006),(4,4),(5,9999); + CREATE INDEX t1ab ON t1(a,b); +---- +stmt 0 ok +stmt 24 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 222 no such table: t1 +stmt 222 err 1 -1 254 no such table: main.t1 +==== limit2-100.1 + + SELECT a, b, '|' FROM t1 WHERE a IN (2,4,5,3,1) ORDER BY b LIMIT 5; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== limit2-100.2 + + SELECT a, b, '|' FROM t1 WHERE a IN (2,4,5,3,1) ORDER BY +b LIMIT 5; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== limit2-110 + + CREATE TABLE t2(x,y); + INSERT INTO t2(x,y) VALUES('a',1),('a',2),('a',3),('a',4); + INSERT INTO t2(x,y) VALUES('b',1),('c',2),('d',3),('e',4); + CREATE INDEX t2xy ON t2(x,y); +---- +stmt 0 ok +stmt 24 err 1 -1 85 no such table: t2 +stmt 85 err 1 -1 146 no such table: t2 +stmt 146 err 1 -1 178 no such table: main.t2 +==== limit2-110.1 + + SELECT a, b, '|' FROM t2, t1 WHERE t2.x='a' AND t1.a=t2.y ORDER BY t1.b LIMIT 5; +---- +stmt 0 err 1 -1 83 no such table: t2 +==== limit2-110.2 + + SELECT a, b, '|' FROM t2, t1 WHERE t2.x='a' AND t1.a=t2.y ORDER BY +t1.b LIMIT 5; +---- +stmt 0 err 1 -1 84 no such table: t2 +==== limit2-120 + + DROP INDEX t1ab; + CREATE INDEX t1ab ON t1(a,b DESC); +---- +stmt 0 err 1 -1 19 no such index: t1ab +stmt 19 err 1 -1 56 no such table: main.t1 +==== limit2-120.1 + + SELECT a, b, '|' FROM t1 WHERE a IN (2,4,5,3,1) ORDER BY b DESC LIMIT 5; +---- +stmt 0 err 1 -1 75 no such table: t1 +==== limit2-120.2 + + SELECT a, b, '|' FROM t1 WHERE a IN (2,4,5,3,1) ORDER BY +b DESC LIMIT 5; +---- +stmt 0 err 1 -1 76 no such table: t1 +==== limit2-200 + + CREATE TABLE t200(a, b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000) + INSERT INTO t200(a,b) SELECT x, x FROM c; + CREATE TABLE t201(x INTEGER PRIMARY KEY, y); + INSERT INTO t201(x,y) VALUES(2,12345); + + SELECT *, '|' FROM t200, t201 WHERE x=b ORDER BY y LIMIT 3; +---- +stmt 0 ok +stmt 27 err 1 -1 151 no such table: t200 +stmt 151 ok +stmt 198 err 1 -1 239 no such table: t201 +stmt 239 err 1 -1 302 no such table: t200 +==== limit2-210 + + SELECT *, '|' FROM t200 LEFT JOIN t201 ON x=b ORDER BY y LIMIT 3; +---- +stmt 0 err 1 -1 68 no such table: t200 +==== limit2-300 + + CREATE TABLE t300(a,b,c); + CREATE INDEX t300x ON t300(a,b,c); + INSERT INTO t300 VALUES(0,1,99),(0,1,0),(0,0,0); + SELECT *,'.' FROM t300 WHERE a=0 AND (c=0 OR c=99) ORDER BY c DESC; +---- +stmt 0 ok +stmt 28 err 1 -1 65 no such table: main.t300 +stmt 65 err 1 -1 116 no such table: t300 +stmt 116 err 1 -1 186 no such table: t300 +==== limit2-310 + + SELECT *,'.' FROM t300 WHERE a=0 AND (c=0 OR c=99) ORDER BY c DESC LIMIT 1; +---- +stmt 0 err 1 -1 78 no such table: t300 +==== limit2-400 + + CREATE TABLE t400(a,b); + CREATE INDEX t400_ab ON t400(a,b); + INSERT INTO t400(a,b) VALUES(1,90),(1,40),(2,80),(2,30),(3,70),(3,20); + SELECT *,'x' FROM t400 WHERE a IN (1,2,3) ORDER BY b DESC LIMIT 3; + SELECT *,'y' FROM t400 WHERE a IN (1,2,3) ORDER BY +b DESC LIMIT 3; +---- +stmt 0 ok +stmt 26 err 1 -1 63 no such table: main.t400 +stmt 63 err 1 -1 136 no such table: t400 +stmt 136 err 1 -1 205 no such table: t400 +stmt 205 err 1 -1 275 no such table: t400 +==== 500 + + CREATE TABLE t500(i INTEGER PRIMARY KEY, j); + INSERT INTO t500 VALUES(1, 1); + INSERT INTO t500 VALUES(2, 2); + INSERT INTO t500 VALUES(3, 3); + INSERT INTO t500 VALUES(4, 0); + INSERT INTO t500 VALUES(5, 5); + SELECT j FROM t500 WHERE i IN (1,2,3,4,5) ORDER BY j DESC LIMIT 3; +---- +stmt 0 ok +stmt 47 err 1 -1 80 no such table: t500 +stmt 80 err 1 -1 113 no such table: t500 +stmt 113 err 1 -1 146 no such table: t500 +stmt 146 err 1 -1 179 no such table: t500 +stmt 179 err 1 -1 212 no such table: t500 +stmt 212 err 1 -1 281 no such table: t500 +==== 501 + + CREATE TABLE t501(i INTEGER PRIMARY KEY, j); + INSERT INTO t501 VALUES(1, 5); + INSERT INTO t501 VALUES(2, 4); + INSERT INTO t501 VALUES(3, 3); + INSERT INTO t501 VALUES(4, 6); + INSERT INTO t501 VALUES(5, 1); + SELECT j FROM t501 WHERE i IN (1,2,3,4,5) ORDER BY j LIMIT 3; +---- +stmt 0 ok +stmt 47 err 1 -1 80 no such table: t501 +stmt 80 err 1 -1 113 no such table: t501 +stmt 113 err 1 -1 146 no such table: t501 +stmt 146 err 1 -1 179 no such table: t501 +stmt 179 err 1 -1 212 no such table: t501 +stmt 212 err 1 -1 276 no such table: t501 +==== 502 + + CREATE TABLE t502(i INT PRIMARY KEY, j); + INSERT INTO t502 VALUES(1, 5); + INSERT INTO t502 VALUES(2, 4); + INSERT INTO t502 VALUES(3, 3); + INSERT INTO t502 VALUES(4, 6); + INSERT INTO t502 VALUES(5, 1); + SELECT j FROM t502 WHERE i IN (1,2,3,4,5) ORDER BY j LIMIT 3; +---- +stmt 0 ok +stmt 43 err 1 -1 76 no such table: t502 +stmt 76 err 1 -1 109 no such table: t502 +stmt 109 err 1 -1 142 no such table: t502 +stmt 142 err 1 -1 175 no such table: t502 +stmt 175 err 1 -1 208 no such table: t502 +stmt 208 err 1 -1 272 no such table: t502 +==== 600 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a, b); INSERT INTO t1 VALUES(1,2); + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x, y); INSERT INTO t2 VALUES(1,3); + CREATE INDEX t1ab ON t1(a,b); + SELECT y FROM t1, t2 WHERE a=x AND b<=y ORDER BY b DESC; +---- +stmt 0 ok +stmt 27 ok +stmt 52 err 1 -1 81 no such table: t1 +stmt 81 ok +stmt 108 ok +stmt 133 err 1 -1 162 no such table: t2 +stmt 162 err 1 -1 194 no such table: main.t1 +stmt 194 err 1 -1 253 no such table: t1 +==== 700 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(aa VARCHAR PRIMARY KEY NOT NULL,bb,cc,x VARCHAR(400)); + INSERT INTO t1(aa,bb,cc) VALUES('maroon','meal','lecture'); + INSERT INTO t1(aa,bb,cc) VALUES('reality','meal','catsear'); + CREATE TABLE t2(aa VARCHAR PRIMARY KEY, dd INT DEFAULT 1, ee, x VARCHAR(100)); + INSERT INTO t2(aa,dd,ee) VALUES('maroon',0,'travel'),('reality',0,'hour'); + CREATE INDEX t2x1 ON t2(dd,ee); + ANALYZE; + DROP TABLE IF EXISTS sqlite_stat4; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1 VALUES + ('t2','t2x1','3 3 3'), + ('t2','sqlite_autoindex_t2_1','3 1'), + ('t1','sqlite_autoindex_t1_1','2 1'); + ANALYZE sqlite_master; + SELECT * + FROM t1 LEFT JOIN t2 ON t1.aa=t2.aa + WHERE t1.bb='meal' + ORDER BY t2.dd DESC + LIMIT 1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 127 err 1 -1 189 no such table: t1 +stmt 189 err 1 -1 252 no such table: t1 +stmt 252 ok +stmt 333 err 1 -1 410 no such table: t2 +stmt 410 err 1 -1 444 no such table: main.t2 +stmt 444 ok +stmt 455 ok +stmt 492 err 1 -1 520 no such table: sqlite_stat1 +stmt 520 err 1 -1 665 no such table: sqlite_stat1 +stmt 665 ok +stmt 690 err 1 -1 798 no such table: t1 +==== 710 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(aa, bb); + INSERT INTO t1 VALUES('maroon','meal'); + CREATE TABLE t2(cc, dd, ee, x VARCHAR(100)); + INSERT INTO t2(cc,dd,ee) VALUES('maroon',1,'one'); + INSERT INTO t2(cc,dd,ee) VALUES('maroon',2,'two'); + INSERT INTO t2(cc,dd,ee) VALUES('maroon',0,'zero'); + CREATE INDEX t2ddee ON t2(dd,ee); + CREATE INDEX t2cc ON t2(cc); + ANALYZE; + SELECT t2.cc, t2.dd, t2.ee FROM t1 CROSS JOIN t2 ON t1.aa=t2.cc + ORDER BY t2.dd LIMIT 1; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 ok +stmt 61 err 1 -1 103 no such table: t1 +stmt 103 ok +stmt 150 err 1 -1 203 no such table: t2 +stmt 203 err 1 -1 256 no such table: t2 +stmt 256 err 1 -1 310 no such table: t2 +stmt 310 err 1 -1 346 no such table: main.t2 +stmt 346 err 1 -1 377 no such table: main.t2 +stmt 377 ok +stmt 389 err 1 -1 481 no such table: t1 +==== 720 + + SELECT t2.cc, t2.dd, t2.ee FROM t1 CROSS JOIN t2 ON t1.aa=t2.cc + WHERE t1.bb='meal' + ORDER BY t2.dd LIMIT 1; +---- +stmt 0 err 1 -1 113 no such table: t1 diff --git a/parser/testdata/literal.metadata.json b/parser/testdata/literal.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/literal.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/literal.test b/parser/testdata/literal.test new file mode 100644 index 0000000..0ada280 --- /dev/null +++ b/parser/testdata/literal.test @@ -0,0 +1,5 @@ +==== 5.1 + + SELECT 1 ORDER BY 2_3; +---- +stmt 0 err 1 -1 25 1st ORDER BY term out of range - should be between 1 and 1 diff --git a/parser/testdata/literal2.metadata.json b/parser/testdata/literal2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/literal2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/literal2.test b/parser/testdata/literal2.test new file mode 100644 index 0000000..f8a9d7a --- /dev/null +++ b/parser/testdata/literal2.test @@ -0,0 +1,25 @@ +==== 1.0 + + SELECT 123_456 +---- +stmt 0 ok +==== 3.0.0 + + SELECT 0xFF_FF +---- +stmt 0 ok +==== 3.0.1 + + SELECT 0xFF_EF +---- +stmt 0 ok +==== 3.1.0 + + SELECT 0XFF_FF +---- +stmt 0 ok +==== 3.1.1 + + SELECT 0XFF_EF +---- +stmt 0 ok diff --git a/parser/testdata/loadext.metadata.json b/parser/testdata/loadext.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/loadext.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/loadext.test b/parser/testdata/loadext.test new file mode 100644 index 0000000..4928eed --- /dev/null +++ b/parser/testdata/loadext.test @@ -0,0 +1,30 @@ +==== loadext-1.1 + + SELECT half(1.0); +---- +stmt 0 err 1 12 22 no such function: half +==== loadext-3.1 + + SELECT half(5); +---- +stmt 0 err 1 12 20 no such function: half +==== loadext-3.4 + + SELECT half(5); +---- +stmt 0 err 1 12 20 no such function: half +==== loadext-3.6 + + SELECT sqlite3_status('MEMORY_USED_X') AS mused +---- +stmt 0 err 1 12 53 no such function: sqlite3_status +==== loadext-3.7 + + SELECT sqlite3_status(4.53) AS mused +---- +stmt 0 err 1 12 42 no such function: sqlite3_status +==== loadext-3.8 + + SELECT sqlite3_status(23) AS mused +---- +stmt 0 err 1 12 40 no such function: sqlite3_status diff --git a/parser/testdata/loadext2.metadata.json b/parser/testdata/loadext2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/loadext2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/loadext2.test b/parser/testdata/loadext2.test new file mode 100644 index 0000000..8e5c445 --- /dev/null +++ b/parser/testdata/loadext2.test @@ -0,0 +1,50 @@ +==== loadext2-1.1 + + SELECT sqr(2) +---- +stmt 0 err 1 12 19 no such function: sqr +==== loadext2-1.2 + + SELECT cube(2) +---- +stmt 0 err 1 12 20 no such function: cube +==== loadext2-1.4 + + SELECT cube(2) +---- +stmt 0 err 1 12 20 no such function: cube +==== loadext2-1.6 + + SELECT cube(2) +---- +stmt 0 err 1 12 20 no such function: cube +==== loadext2-1.7.5 + + SELECT sqr(2) +---- +stmt 0 err 1 12 19 no such function: sqr +==== loadext2-1.8 + + SELECT cube(2) +---- +stmt 0 err 1 12 20 no such function: cube +==== loadext2-1.10 + + SELECT cube(2) +---- +stmt 0 err 1 12 20 no such function: cube +==== loadext2-1.12 + + SELECT cube(2) +---- +stmt 0 err 1 12 20 no such function: cube +==== loadext2-1.14 + + SELECT sqr(2) +---- +stmt 0 err 1 12 19 no such function: sqr +==== loadext2-1.15 + + SELECT cube(2) +---- +stmt 0 err 1 12 20 no such function: cube diff --git a/parser/testdata/lock.metadata.json b/parser/testdata/lock.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/lock.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/lock.test b/parser/testdata/lock.test new file mode 100644 index 0000000..0a95eb0 --- /dev/null +++ b/parser/testdata/lock.test @@ -0,0 +1,58 @@ +==== lock-1.1 +SELECT name FROM sqlite_master WHERE type='table' ORDER BY name +---- +stmt 0 ok +==== lock-1.9 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== lock-1.20 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== lock-5.1 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== lock-5.3 + + CREATE TEMP TABLE t3(x); + SELECT * FROM t3; +---- +stmt 0 ok +stmt 31 err 1 -1 55 no such table: t3 +==== lock-5.4 + + INSERT INTO t3 SELECT tx_exec('SELECT y FROM t2 LIMIT 1'); +---- +stmt 0 err 1 -1 65 no such table: t3 +==== lock-5.5 + + SELECT * FROM t3; +---- +stmt 0 err 1 -1 24 no such table: t3 +==== lock-5.6 + + UPDATE t1 SET a=tx_exec('SELECT x FROM t2'); +---- +stmt 0 err 1 -1 51 no such table: t1 +==== lock-5.7 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 24 no such table: t1 +==== lock-5.8 + + UPDATE t3 SET x=tx_exec('SELECT x FROM t2'); +---- +stmt 0 err 1 -1 51 no such table: t3 +==== lock-5.9 + + SELECT * FROM t3; +---- +stmt 0 err 1 -1 24 no such table: t3 +==== lock-7.2 + PRAGMA lock_status +---- +stmt 0 ok diff --git a/parser/testdata/lock2.metadata.json b/parser/testdata/lock2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/lock2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/lock2.test b/parser/testdata/lock2.test new file mode 100644 index 0000000..fc1884d --- /dev/null +++ b/parser/testdata/lock2.test @@ -0,0 +1,26 @@ +==== lock2-1.1.1 +pragma lock_status +---- +stmt 0 ok +==== lock2-1.2 + + BEGIN; + CREATE TABLE abc(a, b, c); +---- +stmt 0 ok +stmt 11 ok +==== lock2-1.5 + + COMMIT; +---- +stmt 0 ok +==== lock2-1.8 + + COMMIT; +---- +stmt 0 ok +==== lock2-1.9 + + SELECT * FROM sqlite_master; +---- +stmt 0 ok diff --git a/parser/testdata/lock3.metadata.json b/parser/testdata/lock3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/lock3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/lock3.test b/parser/testdata/lock3.test new file mode 100644 index 0000000..cbf4694 --- /dev/null +++ b/parser/testdata/lock3.test @@ -0,0 +1,8 @@ +==== lock3-3.3 +END TRANSACTION +---- +stmt 0 ok +==== lock3-4.3 +END TRANSACTION +---- +stmt 0 ok diff --git a/parser/testdata/lock5.metadata.json b/parser/testdata/lock5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/lock5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/lock5.test b/parser/testdata/lock5.test new file mode 100644 index 0000000..686a595 --- /dev/null +++ b/parser/testdata/lock5.test @@ -0,0 +1,19 @@ +==== lock5-dotfile.7 + SELECT * FROM t1; +---- +stmt 0 err 1 -1 18 no such table: t1 +==== lock5-dotfile.9 + SELECT * FROM t1; +---- +stmt 0 err 1 -1 18 no such table: t1 +==== lock5-none.2 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 2.dotfile.2 + + BEGIN; + UPDATE t1 SET z=z+1, x=hex(randomblob(20)); +---- +stmt 0 ok +stmt 11 err 1 -1 61 no such table: t1 diff --git a/parser/testdata/lock6.metadata.json b/parser/testdata/lock6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/lock6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/lock6.test b/parser/testdata/lock6.test new file mode 100644 index 0000000..43fb1a3 --- /dev/null +++ b/parser/testdata/lock6.test @@ -0,0 +1,4 @@ +==== lock6-1.2 +pragma lock_status +---- +stmt 0 ok diff --git a/parser/testdata/main.metadata.json b/parser/testdata/main.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/main.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/main.test b/parser/testdata/main.test new file mode 100644 index 0000000..2cece2b --- /dev/null +++ b/parser/testdata/main.test @@ -0,0 +1,100 @@ +==== main-3.2.6 +select x'4869' +---- +stmt 0 ok +==== main-3.2.7 +select x'48695' +---- +stmt 0 err 1 7 7 unrecognized token: "x'48695'" +==== main-3.2.8 +select x'486x' +---- +stmt 0 err 1 7 7 unrecognized token: "x'486x'" +==== main-3.2.16 +select cast(3.14e+4 AS integer) +---- +stmt 0 ok +==== main-3.2.17 +select cast(3.14e+04 AS integer) +---- +stmt 0 ok +==== main-3.2.18 +select cast(3.14e+004 AS integer) +---- +stmt 0 ok +==== main-3.2.19 +select cast(3.14e4 AS integer) +---- +stmt 0 ok +==== main-3.2.20 +select cast(3.14e04 AS integer) +---- +stmt 0 ok +==== main-3.2.21 +select cast(3.14e004 AS integer) +---- +stmt 0 ok +==== main-3.2.16.dup1 +select cast(3.14E+4 AS integer) +---- +stmt 0 ok +==== main-3.2.17.dup1 +select cast(3.14E+04 AS integer) +---- +stmt 0 ok +==== main-3.2.18.dup1 +select cast(3.14E+004 AS integer) +---- +stmt 0 ok +==== main-3.2.19.dup1 +select cast(3.14E4 AS integer) +---- +stmt 0 ok +==== main-3.2.20.dup1 +select cast(3.14E04 AS integer) +---- +stmt 0 ok +==== main-3.2.21.dup1 +select cast(3.14E004 AS integer) +---- +stmt 0 ok +==== main-3.2.22 +select cast(3.14e-4 * 1e8 AS integer) +---- +stmt 0 ok +==== main-3.2.23 +select cast(3.14E-04 * 1E08 AS integer) +---- +stmt 0 ok +==== main-3.2.24 +select cast(3.14e-004 * 01.0E+8 AS integer) +---- +stmt 0 ok +==== main-3.2.25 +select 123/*abc +---- +stmt 0 ok +==== main-3.2.26 +select 123/***abc +---- +stmt 0 ok +==== main-3.2.27 +select 123/*/*2 +---- +stmt 0 ok +==== main-3.2.28 +select 123/**/*2 +---- +stmt 0 ok +==== main-3.2.29 +select 123/ +---- +stmt 0 err 1 -1 12 incomplete input +==== main-3.2.30 +select 123--5 +---- +stmt 0 ok +==== main-3.6 +SELECT 'abc' + #9 +---- +stmt 0 err 1 -1 18 near "#9": syntax error diff --git a/parser/testdata/malloc.metadata.json b/parser/testdata/malloc.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/malloc.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/malloc.test b/parser/testdata/malloc.test new file mode 100644 index 0000000..80fa265 --- /dev/null +++ b/parser/testdata/malloc.test @@ -0,0 +1,29 @@ +==== 40.1 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES('fghij'); + INSERT INTO t1 VALUES('pqrst'); + INSERT INTO t1 VALUES('abcde'); + INSERT INTO t1 VALUES('uvwxy'); + INSERT INTO t1 VALUES('klmno'); +---- +stmt 0 ok +stmt 22 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 192 no such table: t1 +==== 40.2 + + SELECT * FROM t1 ORDER BY 1 COLLATE utf16bin; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 42.0 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z); + CREATE TABLE t2(a, b); + CREATE VIEW a002 AS SELECT *, sum(b) AS m FROM t2 GROUP BY a; +---- +stmt 0 ok +stmt 48 ok +stmt 73 ok diff --git a/parser/testdata/malloc3.metadata.json b/parser/testdata/malloc3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/malloc3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/malloc3.test b/parser/testdata/malloc3.test new file mode 100644 index 0000000..910e429 --- /dev/null +++ b/parser/testdata/malloc3.test @@ -0,0 +1,140 @@ +==== malloc3-generated +SELECT tbl_name FROM sqlite_master; +---- +stmt 0 ok +==== malloc3-generated.dup1 +SELECT tbl_name FROM sqlite_master; +---- +stmt 0 ok +==== malloc3-generated.dup2 +SELECT * FROM abc +---- +stmt 0 err 1 -1 18 no such table: abc +==== malloc3-generated.dup3 +SELECT * FROM abc +---- +stmt 0 err 1 -1 18 no such table: abc +==== malloc3-generated.dup4 + + SELECT * FROM abc ORDER BY a DESC; +---- +stmt 0 err 1 -1 41 no such table: abc +==== malloc3-generated.dup5 + + SELECT name, tbl_name FROM sqlite_master ORDER BY name; + SELECT * FROM abc; +---- +stmt 0 ok +stmt 62 err 1 -1 87 no such table: abc +==== malloc3-generated.dup6 +SELECT count(*) FROM abc +---- +stmt 0 err 1 -1 25 no such table: abc +==== malloc3-generated.dup7 + + SELECT min( + (oid == a) AND 'String value ' || a == b AND a == length(c) + ) FROM abc; +---- +stmt 0 err 1 -1 107 no such table: abc +==== malloc3-generated.dup8 +SELECT count(*) FROM abc +---- +stmt 0 err 1 -1 25 no such table: abc +==== malloc3-generated.dup9 + + SELECT min( + (oid == a) AND 'String value ' || a == b AND a == length(c) + ) FROM abc; +---- +stmt 0 err 1 -1 107 no such table: abc +==== malloc3-generated.dup10 +SELECT count(*) FROM abc +---- +stmt 0 err 1 -1 25 no such table: abc +==== malloc3-generated.dup11 + + SELECT min( + (oid == a) AND 'String value ' || a == b AND a == length(c) + ) FROM abc; +---- +stmt 0 err 1 -1 107 no such table: abc +==== malloc3-generated.dup12 +SELECT a, b, c FROM abc +---- +stmt 0 err 1 -1 24 no such table: abc +==== malloc3-generated.dup13 +SELECT a, b, c FROM abc +---- +stmt 0 err 1 -1 24 no such table: abc +==== malloc3-generated.dup14 +SELECT a, count(*) FROM abc GROUP BY a; +---- +stmt 0 err 1 -1 39 no such table: abc +==== malloc3-generated.dup15 +SELECT a, count(*) FROM abc GROUP BY a; +---- +stmt 0 err 1 -1 39 no such table: abc +==== malloc3-generated.dup16 +SELECT a, count(*) FROM abc GROUP BY a; +---- +stmt 0 err 1 -1 39 no such table: abc +==== malloc3-generated.dup17 +SELECT a, count(*) FROM abc GROUP BY a; +---- +stmt 0 err 1 -1 39 no such table: abc +==== malloc3-generated.dup18 +SELECT a, count(*) FROM abc GROUP BY a; +---- +stmt 0 err 1 -1 39 no such table: abc +==== malloc3-generated.dup19 +SELECT a, count(*) FROM abc GROUP BY a; +---- +stmt 0 err 1 -1 39 no such table: abc +==== malloc3-generated.dup20 +SELECT * FROM abc +---- +stmt 0 err 1 -1 18 no such table: abc +==== malloc3-generated.dup21 +SELECT a, count(*) FROM abc GROUP BY a; +---- +stmt 0 err 1 -1 39 no such table: abc +==== malloc3-generated.dup22 + + SELECT name, tbl_name FROM sqlite_master; +---- +stmt 0 ok +==== malloc3-generated.dup23 + + SELECT name, tbl_name FROM sqlite_master; +---- +stmt 0 ok +==== malloc3-generated.dup24 + + SELECT name, tbl_name FROM sqlite_master; +---- +stmt 0 ok +==== malloc3-generated.dup25 + + SELECT * FROM def, ghi WHERE d = g; +---- +stmt 0 err 1 -1 42 no such table: def +==== malloc3-generated.dup26 + + SELECT * FROM v1 WHERE d = g; +---- +stmt 0 err 1 -1 36 no such table: v1 +==== malloc3-generated.dup27 + + SELECT * FROM tbl2, def WHERE d = x; +---- +stmt 0 err 1 -1 45 no such table: tbl2 +==== malloc3-generated.dup28 + + SELECT * FROM tbl2, def WHERE d = x; +---- +stmt 0 err 1 -1 45 no such table: tbl2 +==== malloc3-generated.dup29 +SELECT * FROM ghi +---- +stmt 0 err 1 -1 18 no such table: ghi diff --git a/parser/testdata/malloc5.metadata.json b/parser/testdata/malloc5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/malloc5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/malloc5.test b/parser/testdata/malloc5.test new file mode 100644 index 0000000..8fe6d6b --- /dev/null +++ b/parser/testdata/malloc5.test @@ -0,0 +1,5 @@ +==== malloc5-1.9 + + COMMIT; +---- +stmt 0 ok diff --git a/parser/testdata/mallocA.metadata.json b/parser/testdata/mallocA.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/mallocA.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/mallocA.test b/parser/testdata/mallocA.test new file mode 100644 index 0000000..4ca3967 --- /dev/null +++ b/parser/testdata/mallocA.test @@ -0,0 +1,32 @@ +==== 6-prep + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + INSERT INTO t1 VALUES('abc', 'w'); -- rowid=1 + INSERT INTO t1 VALUES('abc', 'x'); -- rowid=2 + INSERT INTO t1 VALUES('abc', 'y'); -- rowid=3 + INSERT INTO t1 VALUES('abc', 'z'); -- rowid=4 + + INSERT INTO t1 VALUES('def', 'w'); -- rowid=5 + INSERT INTO t1 VALUES('def', 'x'); -- rowid=6 + INSERT INTO t1 VALUES('def', 'y'); -- rowid=7 + INSERT INTO t1 VALUES('def', 'z'); -- rowid=8 + + ANALYZE; +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t1 +stmt 56 err 1 -1 93 no such table: t1 +stmt 93 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 189 no such table: t1 +stmt 189 err 1 -1 237 no such table: t1 +stmt 237 err 1 -1 286 no such table: t1 +stmt 286 err 1 -1 334 no such table: t1 +stmt 334 err 1 -1 382 no such table: t1 +stmt 382 err 1 -1 430 no such table: t1 +stmt 430 ok +==== 7.0 + + PRAGMA cache_size = 5; +---- +stmt 0 ok diff --git a/parser/testdata/mallocK.metadata.json b/parser/testdata/mallocK.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/mallocK.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/mallocK.test b/parser/testdata/mallocK.test new file mode 100644 index 0000000..2db9ee1 --- /dev/null +++ b/parser/testdata/mallocK.test @@ -0,0 +1,106 @@ +==== 6.0 + + CREATE TABLE t3(a TEXT, b TEXT COLLATE utf16_aligned, c); + INSERT INTO t3 VALUES('one', '.....', 0); + INSERT INTO t3 VALUES('one', '....x', 1); + INSERT INTO t3 VALUES('one', '...x.', 2); + INSERT INTO t3 VALUES('one', '...xx', 3); + INSERT INTO t3 VALUES('one', '..x..', 4); + INSERT INTO t3 VALUES('one', '..x.x', 5); + INSERT INTO t3 VALUES('one', '..xx.', 6); + INSERT INTO t3 VALUES('one', '..xxx', 7); + INSERT INTO t3 VALUES('one', '.x...', 8); + INSERT INTO t3 VALUES('one', '.x..x', 9); + INSERT INTO t3 VALUES('one', '.x.x.', 10); + INSERT INTO t3 VALUES('one', '.x.xx', 11); + INSERT INTO t3 VALUES('one', '.xx..', 12); + INSERT INTO t3 VALUES('one', '.xx.x', 13); + INSERT INTO t3 VALUES('one', '.xxx.', 14); + INSERT INTO t3 VALUES('one', '.xxxx', 15); + + INSERT INTO t3 VALUES('two', 'x....', 16); + INSERT INTO t3 VALUES('two', 'x...x', 17); + INSERT INTO t3 VALUES('two', 'x..x.', 18); + INSERT INTO t3 VALUES('two', 'x..xx', 19); + INSERT INTO t3 VALUES('two', 'x.x..', 20); + INSERT INTO t3 VALUES('two', 'x.x.x', 21); + INSERT INTO t3 VALUES('two', 'x.xx.', 22); + INSERT INTO t3 VALUES('two', 'x.xxx', 23); + INSERT INTO t3 VALUES('two', 'xx...', 24); + INSERT INTO t3 VALUES('two', 'xx..x', 25); + INSERT INTO t3 VALUES('two', 'xx.x.', 26); + INSERT INTO t3 VALUES('two', 'xx.xx', 27); + INSERT INTO t3 VALUES('two', 'xxx..', 28); + INSERT INTO t3 VALUES('two', 'xxx.x', 29); + INSERT INTO t3 VALUES('two', 'xxxx.', 30); + INSERT INTO t3 VALUES('two', 'xxxxx', 31); + + INSERT INTO t3 SELECT * FROM t3; + + CREATE INDEX i3 ON t3(a, b); + ANALYZE; + + SELECT 'x' > '.'; +---- +stmt 0 err 1 -1 56 no such collation sequence: utf16_aligned +stmt 60 err 1 -1 104 no such table: t3 +stmt 104 err 1 -1 148 no such table: t3 +stmt 148 err 1 -1 192 no such table: t3 +stmt 192 err 1 -1 236 no such table: t3 +stmt 236 err 1 -1 280 no such table: t3 +stmt 280 err 1 -1 324 no such table: t3 +stmt 324 err 1 -1 368 no such table: t3 +stmt 368 err 1 -1 412 no such table: t3 +stmt 412 err 1 -1 456 no such table: t3 +stmt 456 err 1 -1 500 no such table: t3 +stmt 500 err 1 -1 545 no such table: t3 +stmt 545 err 1 -1 590 no such table: t3 +stmt 590 err 1 -1 635 no such table: t3 +stmt 635 err 1 -1 680 no such table: t3 +stmt 680 err 1 -1 725 no such table: t3 +stmt 725 err 1 -1 770 no such table: t3 +stmt 770 err 1 -1 816 no such table: t3 +stmt 816 err 1 -1 861 no such table: t3 +stmt 861 err 1 -1 906 no such table: t3 +stmt 906 err 1 -1 951 no such table: t3 +stmt 951 err 1 -1 996 no such table: t3 +stmt 996 err 1 -1 1041 no such table: t3 +stmt 1041 err 1 -1 1086 no such table: t3 +stmt 1086 err 1 -1 1131 no such table: t3 +stmt 1131 err 1 -1 1176 no such table: t3 +stmt 1176 err 1 -1 1221 no such table: t3 +stmt 1221 err 1 -1 1266 no such table: t3 +stmt 1266 err 1 -1 1311 no such table: t3 +stmt 1311 err 1 -1 1356 no such table: t3 +stmt 1356 err 1 -1 1401 no such table: t3 +stmt 1401 err 1 -1 1446 no such table: t3 +stmt 1446 err 1 -1 1491 no such table: t3 +stmt 1491 err 1 -1 1527 no such table: t3 +stmt 1527 err 1 -1 1559 no such table: main.t3 +stmt 1559 ok +stmt 1570 ok +==== 7.1 + + CREATE TABLE x1(a INTEGER PRIMARY KEY, b); +---- +stmt 0 ok +==== 8.0 + + PRAGMA encoding = 'utf-16'; + CREATE TABLE x2(x TEXT, y TEXT); + WITH data(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM data + ) + INSERT INTO x2 SELECT isqrt(i), isqrt(i) FROM data LIMIT 400; + CREATE INDEX x2x ON x2(x); + CREATE INDEX x2y ON x2(y); + ANALYZE; + DELETE FROM x2; +---- +stmt 0 ok +stmt 30 ok +stmt 65 err 1 -1 197 no such table: x2 +stmt 197 err 1 -1 226 no such table: main.x2 +stmt 226 err 1 -1 255 no such table: main.x2 +stmt 255 ok +stmt 266 err 1 -1 284 no such table: x2 diff --git a/parser/testdata/mallocM.metadata.json b/parser/testdata/mallocM.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/mallocM.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/mallocM.test b/parser/testdata/mallocM.test new file mode 100644 index 0000000..50b2137 --- /dev/null +++ b/parser/testdata/mallocM.test @@ -0,0 +1,17 @@ +==== 1.0 + + CREATE TABLE t1(x); +---- +stmt 0 ok +==== 2.0.1 + SELECT instr(x'', x'') +---- +stmt 0 ok +==== 2.0.2 + SELECT instr(x'12345678', x'') +---- +stmt 0 ok +==== 2.0.3 + SELECT instr(x'', x'1234') +---- +stmt 0 ok diff --git a/parser/testdata/memdb.metadata.json b/parser/testdata/memdb.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/memdb.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/memdb.test b/parser/testdata/memdb.test new file mode 100644 index 0000000..e8950a6 --- /dev/null +++ b/parser/testdata/memdb.test @@ -0,0 +1,184 @@ +==== memdb-generated + + INSERT INTO t3 SELECT randstr(10,400) FROM t3 WHERE random()%10==0; +---- +stmt 0 err 1 -1 77 no such table: t3 +==== memdb-3.1 + + CREATE TABLE t4(a,b,c,d); + BEGIN; + INSERT INTO t4 VALUES(1,2,3,4); + SELECT * FROM t4; +---- +stmt 0 ok +stmt 30 ok +stmt 41 err 1 -1 77 no such table: t4 +stmt 77 err 1 -1 99 no such table: t4 +==== memdb-3.2 + + SELECT name FROM sqlite_master WHERE type='table'; +---- +stmt 0 ok +==== memdb-3.3 + + DROP TABLE t4; + SELECT name FROM sqlite_master WHERE type='table'; +---- +stmt 0 err 1 -1 19 no such table: t4 +stmt 19 ok +==== memdb-3.4 + + ROLLBACK; + SELECT name FROM sqlite_master WHERE type='table'; +---- +stmt 0 ok +stmt 14 ok +==== memdb-4.0 + + CREATE TABLE t1(a, b, c, UNIQUE(a,b)); + CREATE TABLE t2(x); + SELECT c FROM t1 ORDER BY c; +---- +stmt 0 ok +stmt 43 ok +stmt 67 err 1 -1 100 no such table: t1 +==== memdb-5.0 + + DROP TABLE t2; + DROP TABLE t3; + CREATE TABLE t2(a,b,c); + INSERT INTO t2 VALUES(1,2,1); + INSERT INTO t2 VALUES(2,3,2); + INSERT INTO t2 VALUES(3,4,1); + INSERT INTO t2 VALUES(4,5,4); + SELECT c FROM t2 ORDER BY b; + CREATE TABLE t3(x); + INSERT INTO t3 VALUES(1); +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 err 1 -1 38 no such table: t3 +stmt 38 ok +stmt 66 err 1 -1 100 no such table: t2 +stmt 100 err 1 -1 134 no such table: t2 +stmt 134 err 1 -1 168 no such table: t2 +stmt 168 err 1 -1 202 no such table: t2 +stmt 202 err 1 -1 235 no such table: t2 +stmt 235 ok +stmt 259 err 1 -1 289 no such table: t3 +==== memdb-6.1 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== memdb-6.2 + + BEGIN; + DROP TABLE t2; + SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; +---- +stmt 0 ok +stmt 11 err 1 -1 30 no such table: t2 +stmt 30 ok +==== memdb-6.3 + + ROLLBACK; + SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; +---- +stmt 0 ok +stmt 14 ok +==== memdb-6.4 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== memdb-6.5 + + SELECT a FROM t2 UNION SELECT b FROM t2 ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: t2 +==== memdb-6.6 + + CREATE INDEX i2 ON t2(c); + SELECT a FROM t2 ORDER BY c; +---- +stmt 0 err 1 -1 30 no such table: main.t2 +stmt 30 err 1 -1 63 no such table: t2 +==== memdb-6.6.dup1 + + SELECT a FROM t2 ORDER BY c DESC; +---- +stmt 0 err 1 -1 38 no such table: t2 +==== memdb-6.7 + + BEGIN; + CREATE TABLE t5(x,y); + INSERT INTO t5 VALUES(1,2); + SELECT * FROM t5; +---- +stmt 0 ok +stmt 11 ok +stmt 37 err 1 -1 69 no such table: t5 +stmt 69 err 1 -1 91 no such table: t5 +==== memdb-6.8 + + SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; +---- +stmt 0 ok +==== memdb-6.9 + + ROLLBACK; + SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; +---- +stmt 0 ok +stmt 14 ok +==== memdb-6.10 + + CREATE TABLE t5(x PRIMARY KEY, y UNIQUE); + SELECT * FROM t5; +---- +stmt 0 ok +stmt 46 err 1 -1 68 no such table: t5 +==== memdb-6.11 + + SELECT * FROM t5 ORDER BY y DESC; +---- +stmt 0 err 1 -1 38 no such table: t5 +==== memdb-6.12 + + INSERT INTO t5 VALUES(1,2); + INSERT INTO t5 VALUES(3,4); + REPLACE INTO t5 VALUES(1,4); + SELECT rowid,* FROM t5; +---- +stmt 0 err 1 -1 34 no such table: t5 +stmt 34 err 1 -1 68 no such table: t5 +stmt 68 err 1 -1 103 no such table: t5 +stmt 103 err 1 -1 133 no such table: t5 +==== memdb-6.13 + + DELETE FROM t5 WHERE x>5; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 32 no such table: t5 +stmt 32 err 1 -1 56 no such table: t5 +==== memdb-6.14 + + DELETE FROM t5 WHERE y<3; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 32 no such table: t5 +stmt 32 err 1 -1 56 no such table: t5 +==== memdb-6.15 + + DELETE FROM t5 WHERE x>0; + SELECT * FROM t5; +---- +stmt 0 err 1 -1 30 no such table: t5 +stmt 30 err 1 -1 52 no such table: t5 +==== memdb-8.2 + + DELETE FROM t1; + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 49 no such table: t1 diff --git a/parser/testdata/memdb1.metadata.json b/parser/testdata/memdb1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/memdb1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/memdb1.test b/parser/testdata/memdb1.test new file mode 100644 index 0000000..a7c9f78 --- /dev/null +++ b/parser/testdata/memdb1.test @@ -0,0 +1,147 @@ +==== 110 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 120 + + PRAGMA auto_vacuum = off; + VACUUM; +---- +stmt 0 ok +stmt 28 ok +==== 130 + + CREATE TABLE t2(x, y); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t2(x, y) SELECT x, randomblob(1000) FROM c; + DROP TABLE t2; + PRAGMA page_count; +---- +stmt 0 ok +stmt 25 err 1 -1 161 no such table: t2 +stmt 161 err 1 -1 178 no such table: t2 +stmt 178 ok +==== 140 + + VACUUM; + PRAGMA page_count; +---- +stmt 0 ok +stmt 10 ok +==== 152 +INSERT INTO t1 VALUES(3,4); +---- +stmt 0 err 1 -1 27 no such table: t1 +==== 162 +INSERT INTO t1 VALUES(5,randomblob(100000)) +---- +stmt 0 err 1 -1 44 no such table: t1 +==== 200 + + CREATE TABLE t3(x, y); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<400) + INSERT INTO t3(x, y) SELECT x, randomblob(1000) FROM c; + PRAGMA quick_check; +---- +stmt 0 ok +stmt 25 err 1 -1 161 no such table: t3 +stmt 161 ok +==== 300 + + CREATE TABLE t3(x, y); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<400) + INSERT INTO t3(x, y) SELECT x, randomblob(1000) FROM c; + PRAGMA quick_check; +---- +stmt 0 ok +stmt 25 err 1 -1 161 no such table: t3 +stmt 161 ok +==== 400 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 410 + + CREATE TABLE t4(a,b); + INSERT INTO t4 VALUES('hello','world!'); + PRAGMA integrity_check; + SELECT * FROM t4; +---- +stmt 0 ok +stmt 24 err 1 -1 67 no such table: t4 +stmt 67 ok +stmt 93 err 1 -1 113 no such table: t4 +==== 420 + + PRAGMA journal_mode=TRUNCATE; + PRAGMA journal_mode=OFF; + PRAGMA journal_mode=DELETE; + PRAGMA journal_mode=WAL; + PRAGMA journal_mode=PERSIST; + PRAGMA journal_mode=MEMORY; + PRAGMA journal_mode=OFF; + PRAGMA journal_mode=DELETE; +---- +stmt 0 ok +stmt 32 ok +stmt 59 ok +stmt 89 ok +stmt 116 ok +stmt 147 ok +stmt 177 ok +stmt 204 ok +==== 510 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 700 + + CREATE TABLE t1(a, b); + PRAGMA schema_version = 0; +---- +stmt 0 ok +stmt 27 ok +==== 800 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 8192; + PRAGMA journal_mode = wal; + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); + CREATE TABLE t2(x, y); +---- +stmt 0 ok +stmt 28 ok +stmt 57 ok +stmt 88 ok +stmt 115 err 1 -1 148 no such table: t1 +stmt 148 ok +==== 810 + + PRAGMA locking_mode = exclusive; + SELECT * FROM t1 +---- +stmt 0 ok +stmt 37 err 1 -1 59 no such table: t1 +==== 820 + + INSERT INTO t1 VALUES(3, 4); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 55 no such table: t1 +==== 830 + + PRAGMA wal_checkpoint; +---- +stmt 0 ok +==== 1000 + + CREATE TABLE t(x); + INSERT INTO t VALUES(1),(2); +---- +stmt 0 ok +stmt 21 err 1 -1 53 no such table: t diff --git a/parser/testdata/memdb2.metadata.json b/parser/testdata/memdb2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/memdb2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/memdb2.test b/parser/testdata/memdb2.test new file mode 100644 index 0000000..67fbe1f --- /dev/null +++ b/parser/testdata/memdb2.test @@ -0,0 +1,24 @@ +==== memdb2-generated + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t1 +==== memdb2-generated.dup1 + + BEGIN; + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 11 err 1 -1 46 no such table: t1 +==== memdb2-generated.dup2 + + COMMIT +---- +stmt 0 ok +==== memdb2-generated.dup3 + + COMMIT +---- +stmt 0 ok diff --git a/parser/testdata/memjournal.metadata.json b/parser/testdata/memjournal.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/memjournal.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/memjournal.test b/parser/testdata/memjournal.test new file mode 100644 index 0000000..ec00dcb --- /dev/null +++ b/parser/testdata/memjournal.test @@ -0,0 +1,19 @@ +==== 1.0 + + PRAGMA journal_mode = memory; + CREATE TABLE t1(a); +---- +stmt 0 ok +stmt 32 ok +==== 1.1 + + BEGIN; + INSERT INTO t1 VALUES( randomblob(500) ); +---- +stmt 0 ok +stmt 9 err 1 -1 55 no such table: t1 +==== 1.3 + + COMMIT; +---- +stmt 0 ok diff --git a/parser/testdata/memjournal2.metadata.json b/parser/testdata/memjournal2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/memjournal2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/memjournal2.test b/parser/testdata/memjournal2.test new file mode 100644 index 0000000..b2b3a91 --- /dev/null +++ b/parser/testdata/memjournal2.test @@ -0,0 +1,38 @@ +==== 1.0 + + PRAGMA journal_mode = memory; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE); +---- +stmt 0 ok +stmt 32 ok +==== memjournal2-generated + + SAVEPOINT two; + UPDATE t1 SET b=randomblob(700) WHERE a==1; + ROLLBACK TO two; + RELEASE two; +---- +stmt 0 ok +stmt 21 err 1 -1 73 no such table: t1 +stmt 73 ok +stmt 96 ok +==== memjournal2-generated.dup1 + + SAVEPOINT two; + UPDATE t1 SET b=randomblob(700) WHERE a==1; + ROLLBACK TO two; + RELEASE two; +---- +stmt 0 ok +stmt 21 err 1 -1 73 no such table: t1 +stmt 73 ok +stmt 96 ok +==== memjournal2-generated.dup2 + + PRAGMA integrity_check; + ROLLBACK TO one; + RELEASE one; +---- +stmt 0 ok +stmt 28 ok +stmt 49 ok diff --git a/parser/testdata/merge1.metadata.json b/parser/testdata/merge1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/merge1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/merge1.test b/parser/testdata/merge1.test new file mode 100644 index 0000000..e258960 --- /dev/null +++ b/parser/testdata/merge1.test @@ -0,0 +1,36 @@ +==== 100 + + WITH data(v) AS ( + SELECT value FROM generate_series(1,35,3) + UNION ALL + SELECT value FROM generate_series(10,30,4) + UNION ALL + SELECT value FROM generate_series(20,50,5) + UNION ALL + SELECT value FROM generate_series(30,60,6) + UNION ALL + SELECT value FROM generate_series(1,50,7) + UNION ALL + SELECT value FROM generate_series(10,80,8) + ) + SELECT v FROM data ORDER BY v; +---- +stmt 0 err 1 -1 407 no such table: generate_series +==== 110 + + WITH data(v) AS ( + SELECT value FROM generate_series(1,35,3) + UNION ALL + SELECT value FROM generate_series(10,30,4) + UNION ALL + SELECT value FROM generate_series(20,50,5) + UNION ALL + SELECT value FROM generate_series(30,60,6) + UNION ALL + SELECT value FROM generate_series(1,50,7) + UNION ALL + SELECT value FROM generate_series(10,80,8) + ) + SELECT v FROM data ORDER BY v; +---- +stmt 0 err 1 -1 407 no such table: generate_series diff --git a/parser/testdata/minmax.metadata.json b/parser/testdata/minmax.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/minmax.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/minmax.test b/parser/testdata/minmax.test new file mode 100644 index 0000000..719c7af --- /dev/null +++ b/parser/testdata/minmax.test @@ -0,0 +1,523 @@ +==== minmax-1.0 + + BEGIN; + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1,1); + INSERT INTO t1 VALUES(2,2); + INSERT INTO t1 VALUES(3,2); + INSERT INTO t1 VALUES(4,3); + INSERT INTO t1 VALUES(5,3); + INSERT INTO t1 VALUES(6,3); + INSERT INTO t1 VALUES(7,3); + INSERT INTO t1 VALUES(8,4); + INSERT INTO t1 VALUES(9,4); + INSERT INTO t1 VALUES(10,4); + INSERT INTO t1 VALUES(11,4); + INSERT INTO t1 VALUES(12,4); + INSERT INTO t1 VALUES(13,4); + INSERT INTO t1 VALUES(14,4); + INSERT INTO t1 VALUES(15,4); + INSERT INTO t1 VALUES(16,5); + INSERT INTO t1 VALUES(17,5); + INSERT INTO t1 VALUES(18,5); + INSERT INTO t1 VALUES(19,5); + INSERT INTO t1 VALUES(20,5); + COMMIT; + SELECT DISTINCT y FROM t1 ORDER BY y; +---- +stmt 0 ok +stmt 11 ok +stmt 38 err 1 -1 70 no such table: t1 +stmt 70 err 1 -1 102 no such table: t1 +stmt 102 err 1 -1 134 no such table: t1 +stmt 134 err 1 -1 166 no such table: t1 +stmt 166 err 1 -1 198 no such table: t1 +stmt 198 err 1 -1 230 no such table: t1 +stmt 230 err 1 -1 262 no such table: t1 +stmt 262 err 1 -1 294 no such table: t1 +stmt 294 err 1 -1 326 no such table: t1 +stmt 326 err 1 -1 359 no such table: t1 +stmt 359 err 1 -1 392 no such table: t1 +stmt 392 err 1 -1 425 no such table: t1 +stmt 425 err 1 -1 458 no such table: t1 +stmt 458 err 1 -1 491 no such table: t1 +stmt 491 err 1 -1 524 no such table: t1 +stmt 524 err 1 -1 557 no such table: t1 +stmt 557 err 1 -1 590 no such table: t1 +stmt 590 err 1 -1 623 no such table: t1 +stmt 623 err 1 -1 656 no such table: t1 +stmt 656 err 1 -1 689 no such table: t1 +stmt 689 ok +stmt 701 err 1 -1 743 no such table: t1 +==== minmax-1.21 +SELECT min(x) FROM t1 WHERE x=5 +---- +stmt 0 err 1 -1 32 no such table: t1 +==== minmax-1.22 +SELECT min(x) FROM t1 WHERE x>=5 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== minmax-1.23 +SELECT min(x) FROM t1 WHERE x>=4.5 +---- +stmt 0 err 1 -1 35 no such table: t1 +==== minmax-1.24 +SELECT min(x) FROM t1 WHERE x<4.5 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== minmax-4.1 + + SELECT coalesce(min(x+0),-1), coalesce(max(x+0),-1) FROM + (SELECT * FROM t1 UNION SELECT NULL as 'x', NULL as 'y') +---- +stmt 0 err 1 -1 129 no such table: t1 +==== minmax-4.2 + + SELECT y, coalesce(sum(x),0) FROM + (SELECT null AS x, y+1 AS y FROM t1 UNION SELECT * FROM t1) + GROUP BY y ORDER BY y; +---- +stmt 0 err 1 -1 137 no such table: t1 +==== minmax-4.3 + + SELECT y, count(x), count(*) FROM + (SELECT null AS x, y+1 AS y FROM t1 UNION SELECT * FROM t1) + GROUP BY y ORDER BY y; +---- +stmt 0 err 1 -1 137 no such table: t1 +==== minmax-5.1 + + CREATE TABLE t3(x INTEGER UNIQUE NOT NULL); + SELECT coalesce(min(x),999) FROM t3; +---- +stmt 0 ok +stmt 48 err 1 -1 89 no such table: t3 +==== minmax-5.2 + + SELECT coalesce(min(rowid),999) FROM t3; +---- +stmt 0 err 1 -1 45 no such table: t3 +==== minmax-5.3 + + SELECT coalesce(max(x),999) FROM t3; +---- +stmt 0 err 1 -1 41 no such table: t3 +==== minmax-5.4 + + SELECT coalesce(max(rowid),999) FROM t3; +---- +stmt 0 err 1 -1 45 no such table: t3 +==== minmax-5.5 + + SELECT coalesce(max(rowid),999) FROM t3 WHERE rowid<25; +---- +stmt 0 err 1 -1 60 no such table: t3 +==== minmax-6.1 + + SELECT min(a) FROM t2 LIMIT 1 +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax-6.2 + + SELECT max(a) FROM t2 LIMIT 3 +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax-6.3 + + SELECT min(a) FROM t2 LIMIT 0,100 +---- +stmt 0 err 1 -1 39 no such table: t2 +==== minmax-6.4 + + SELECT max(a) FROM t2 LIMIT 1,100 +---- +stmt 0 err 1 -1 39 no such table: t2 +==== minmax-6.5 + + SELECT min(x) FROM t3 LIMIT 1 +---- +stmt 0 err 1 -1 35 no such table: t3 +==== minmax-6.6 + + SELECT max(x) FROM t3 LIMIT 0 +---- +stmt 0 err 1 -1 35 no such table: t3 +==== minmax-6.7 + + SELECT max(a) FROM t2 LIMIT 0 +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax-7.1 + + SELECT max(x) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== minmax-7.2 + + SELECT * FROM (SELECT max(x) FROM t1); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== minmax-7.3 + + SELECT min(x) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== minmax-7.4 + + SELECT * FROM (SELECT min(x) FROM t1); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== minmax-8.1 + + CREATE TABLE t4(a TEXT); + INSERT INTO t4 VALUES('1234'); + INSERT INTO t4 VALUES('234'); + INSERT INTO t4 VALUES('34'); + SELECT min(a), max(a) FROM t4; +---- +stmt 0 ok +stmt 29 err 1 -1 64 no such table: t4 +stmt 64 err 1 -1 98 no such table: t4 +stmt 98 err 1 -1 131 no such table: t4 +stmt 131 err 1 -1 166 no such table: t4 +==== minmax-8.2 + + CREATE TABLE t5(a INTEGER); + INSERT INTO t5 VALUES('1234'); + INSERT INTO t5 VALUES('234'); + INSERT INTO t5 VALUES('34'); + SELECT min(a), max(a) FROM t5; +---- +stmt 0 ok +stmt 32 err 1 -1 67 no such table: t5 +stmt 67 err 1 -1 101 no such table: t5 +stmt 101 err 1 -1 134 no such table: t5 +stmt 134 err 1 -1 169 no such table: t5 +==== minmax-9.0 + + SELECT max(rowid) AS yy FROM t4 UNION SELECT max(rowid) FROM t5 +---- +stmt 0 err 1 -1 71 no such table: t5 +==== minmax-9.1 + + SELECT max(yy) FROM ( + SELECT max(rowid) AS yy FROM t4 UNION SELECT max(rowid) FROM t5 + ) +---- +stmt 0 err 1 -1 109 no such table: t5 +==== minmax-9.2 + + SELECT max(yy) FROM ( + SELECT max(rowid) AS yy FROM t4 EXCEPT SELECT max(rowid) FROM t5 + ) +---- +stmt 0 err 1 -1 110 no such table: t5 +==== minmax-10.1 + + CREATE TABLE t6(x); + INSERT INTO t6 VALUES(1); + INSERT INTO t6 VALUES(2); + INSERT INTO t6 VALUES(NULL); + SELECT coalesce(min(x),-1) FROM t6; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t6 +stmt 54 err 1 -1 84 no such table: t6 +stmt 84 err 1 -1 117 no such table: t6 +stmt 117 err 1 -1 157 no such table: t6 +==== minmax-10.2 + + SELECT max(x) FROM t6; +---- +stmt 0 err 1 -1 27 no such table: t6 +==== minmax-10.3 + + CREATE INDEX i6 ON t6(x); + SELECT coalesce(min(x),-1) FROM t6; +---- +stmt 0 err 1 -1 30 no such table: main.t6 +stmt 30 err 1 -1 70 no such table: t6 +==== minmax-10.4 + + SELECT max(x) FROM t6; +---- +stmt 0 err 1 -1 27 no such table: t6 +==== minmax-10.5 + + DELETE FROM t6 WHERE x NOT NULL; + SELECT count(*) FROM t6; +---- +stmt 0 err 1 -1 37 no such table: t6 +stmt 37 err 1 -1 66 no such table: t6 +==== minmax-10.6 + + SELECT count(x) FROM t6; +---- +stmt 0 err 1 -1 29 no such table: t6 +==== minmax-10.7 + + SELECT (SELECT min(x) FROM t6), (SELECT max(x) FROM t6); +---- +stmt 0 err 1 -1 63 no such table: t6 +==== minmax-10.8 + + SELECT min(x), max(x) FROM t6; +---- +stmt 0 err 1 -1 35 no such table: t6 +==== minmax-10.9 + + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + SELECT count(*) FROM t6; +---- +stmt 0 err 1 -1 37 no such table: t6 +stmt 37 err 1 -1 74 no such table: t6 +stmt 74 err 1 -1 111 no such table: t6 +stmt 111 err 1 -1 148 no such table: t6 +stmt 148 err 1 -1 185 no such table: t6 +stmt 185 err 1 -1 222 no such table: t6 +stmt 222 err 1 -1 259 no such table: t6 +stmt 259 err 1 -1 296 no such table: t6 +stmt 296 err 1 -1 333 no such table: t6 +stmt 333 err 1 -1 370 no such table: t6 +stmt 370 err 1 -1 399 no such table: t6 +==== minmax-10.10 + + SELECT count(x) FROM t6; +---- +stmt 0 err 1 -1 29 no such table: t6 +==== minmax-10.11 + + SELECT (SELECT min(x) FROM t6), (SELECT max(x) FROM t6); +---- +stmt 0 err 1 -1 63 no such table: t6 +==== minmax-10.12 + + SELECT min(x), max(x) FROM t6; +---- +stmt 0 err 1 -1 35 no such table: t6 +==== minmax-11.1 + + CREATE INDEX t1i2 ON t1(y,x); + SELECT min(x) FROM t1 WHERE y=5; +---- +stmt 0 err 1 -1 34 no such table: main.t1 +stmt 34 err 1 -1 71 no such table: t1 +==== minmax-11.2 + + SELECT max(x) FROM t1 WHERE y=5; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== minmax-11.3 + + SELECT min(x) FROM t1 WHERE y=6; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== minmax-11.4 + + SELECT max(x) FROM t1 WHERE y=6; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== minmax-11.5 + + SELECT min(x) FROM t1 WHERE y=1; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== minmax-11.6 + + SELECT max(x) FROM t1 WHERE y=1; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== minmax-11.7 + + SELECT min(x) FROM t1 WHERE y=0; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== minmax-11.8 + + SELECT max(x) FROM t1 WHERE y=0; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== minmax-11.9 + + SELECT min(x) FROM t1 WHERE y=5 AND x>=17.5; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== minmax-11.10 + + SELECT max(x) FROM t1 WHERE y=5 AND x>=17.5; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== minmax-12.1 + + CREATE TABLE t7(a,b,c); + INSERT INTO t7 SELECT y, x, x*y FROM t1; + INSERT INTO t7 SELECT y, x, x*y+1000 FROM t1; + CREATE INDEX t7i1 ON t7(a,b,c); + SELECT min(a) FROM t7; +---- +stmt 0 ok +stmt 28 err 1 -1 73 no such table: t7 +stmt 73 err 1 -1 123 no such table: t7 +stmt 123 err 1 -1 159 no such table: main.t7 +stmt 159 err 1 -1 186 no such table: t7 +==== minmax-12.2 + + SELECT max(a) FROM t7; +---- +stmt 0 err 1 -1 27 no such table: t7 +==== minmax-12.3 + + SELECT max(a) FROM t7 WHERE a=5; +---- +stmt 0 err 1 -1 37 no such table: t7 +==== minmax-12.4 + + SELECT min(b) FROM t7 WHERE a=5; +---- +stmt 0 err 1 -1 37 no such table: t7 +==== minmax-12.5 + + SELECT max(b) FROM t7 WHERE a=5; +---- +stmt 0 err 1 -1 37 no such table: t7 +==== minmax-12.6 + + SELECT min(b) FROM t7 WHERE a=4; +---- +stmt 0 err 1 -1 37 no such table: t7 +==== minmax-12.7 + + SELECT max(b) FROM t7 WHERE a=4; +---- +stmt 0 err 1 -1 37 no such table: t7 +==== minmax-12.8 + + SELECT min(c) FROM t7 WHERE a=4 AND b=10; +---- +stmt 0 err 1 -1 46 no such table: t7 +==== minmax-12.9 + + SELECT max(c) FROM t7 WHERE a=4 AND b=10; +---- +stmt 0 err 1 -1 46 no such table: t7 +==== minmax-12.10 + + SELECT min(rowid) FROM t7; +---- +stmt 0 err 1 -1 31 no such table: t7 +==== minmax-12.11 + + SELECT max(rowid) FROM t7; +---- +stmt 0 err 1 -1 31 no such table: t7 +==== minmax-12.12 + + SELECT min(rowid) FROM t7 WHERE a=3; +---- +stmt 0 err 1 -1 41 no such table: t7 +==== minmax-12.13 + + SELECT max(rowid) FROM t7 WHERE a=3; +---- +stmt 0 err 1 -1 41 no such table: t7 +==== minmax-12.14 + + SELECT min(rowid) FROM t7 WHERE a=3 AND b=5; +---- +stmt 0 err 1 -1 49 no such table: t7 +==== minmax-12.15 + + SELECT max(rowid) FROM t7 WHERE a=3 AND b=5; +---- +stmt 0 err 1 -1 49 no such table: t7 +==== minmax-12.16 + + SELECT min(rowid) FROM t7 WHERE a=3 AND b=5 AND c=1015; +---- +stmt 0 err 1 -1 60 no such table: t7 +==== minmax-12.17 + + SELECT max(rowid) FROM t7 WHERE a=3 AND b=5 AND c=15; +---- +stmt 0 err 1 -1 58 no such table: t7 +==== 13.1 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES('a', 1, 1); + INSERT INTO t1 VALUES('b', 6, 6); + INSERT INTO t1 VALUES('c', 5, 5); + INSERT INTO t1 VALUES('a', 4, 4); + INSERT INTO t1 VALUES('a', 5, 5); + INSERT INTO t1 VALUES('c', 6, 6); + INSERT INTO t1 VALUES('b', 4, 4); + INSERT INTO t1 VALUES('c', 7, 7); + INSERT INTO t1 VALUES('b', 2, 2); + INSERT INTO t1 VALUES('b', 3, 3); + INSERT INTO t1 VALUES('a', 3, 3); + INSERT INTO t1 VALUES('b', 5, 5); + INSERT INTO t1 VALUES('c', 4, 4); + INSERT INTO t1 VALUES('c', 3, 3); + INSERT INTO t1 VALUES('a', 2, 2); + SELECT * FROM t1 ORDER BY a, b, c; +---- +stmt 0 ok +stmt 28 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 100 no such table: t1 +stmt 100 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 172 no such table: t1 +stmt 172 err 1 -1 208 no such table: t1 +stmt 208 err 1 -1 244 no such table: t1 +stmt 244 err 1 -1 280 no such table: t1 +stmt 280 err 1 -1 316 no such table: t1 +stmt 316 err 1 -1 352 no such table: t1 +stmt 352 err 1 -1 388 no such table: t1 +stmt 388 err 1 -1 424 no such table: t1 +stmt 424 err 1 -1 460 no such table: t1 +stmt 460 err 1 -1 496 no such table: t1 +stmt 496 err 1 -1 532 no such table: t1 +stmt 532 err 1 -1 568 no such table: t1 +stmt 568 err 1 -1 605 no such table: t1 +==== 13.2 + CREATE INDEX i1 ON t1(a, b, c) +---- +stmt 0 err 1 -1 32 no such table: main.t1 +==== 14.1 + + CREATE TABLE t14(a INTEGER, b INTEGER); + INSERT INTO t14(a,b) VALUES(100,2),(200,2),(300,2),(400,1),(500,2); + SELECT min(a) FROM t14 WHERE b='2' AND a>'50'; +---- +stmt 0 ok +stmt 42 err 1 -1 112 no such table: t14 +stmt 112 err 1 -1 161 no such table: t14 +==== 14.2 + + CREATE INDEX t14ba ON t14(b,a); + SELECT min(a) FROM t14 WHERE b='2' AND a>'50'; +---- +stmt 0 err 1 -1 34 no such table: main.t14 +stmt 34 err 1 -1 83 no such table: t14 +==== 15.1 + + CREATE TABLE t1(a); + CREATE TABLE t2(b); + CREATE TABLE t3(c); + INSERT INTO t1 VALUES(0); + INSERT INTO t2 VALUES(5); + SELECT MIN((SELECT b FROM t2 UNION SELECT x FROM (SELECT x FROM (SELECT 1 AS x WHERE t1.a=1) UNION ALL SELECT c FROM t3))) FROM t1; +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +stmt 66 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 122 no such table: t2 +stmt 122 err 1 -1 256 no such table: t1 diff --git a/parser/testdata/minmax2.metadata.json b/parser/testdata/minmax2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/minmax2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/minmax2.test b/parser/testdata/minmax2.test new file mode 100644 index 0000000..8fa269b --- /dev/null +++ b/parser/testdata/minmax2.test @@ -0,0 +1,267 @@ +==== minmax2-4.1 + + SELECT coalesce(min(x+0),-1), coalesce(max(x+0),-1) FROM + (SELECT * FROM t1 UNION SELECT NULL as 'x', NULL as 'y') +---- +stmt 0 err 1 -1 129 no such table: t1 +==== minmax2-4.2 + + SELECT y, coalesce(sum(x),0) FROM + (SELECT null AS x, y+1 AS y FROM t1 UNION SELECT * FROM t1) + GROUP BY y ORDER BY y; +---- +stmt 0 err 1 -1 137 no such table: t1 +==== minmax2-4.3 + + SELECT y, count(x), count(*) FROM + (SELECT null AS x, y+1 AS y FROM t1 UNION SELECT * FROM t1) + GROUP BY y ORDER BY y; +---- +stmt 0 err 1 -1 137 no such table: t1 +==== minmax2-5.1 + + CREATE TABLE t3(x INTEGER UNIQUE NOT NULL); + SELECT coalesce(min(x),999) FROM t3; +---- +stmt 0 ok +stmt 48 err 1 -1 89 no such table: t3 +==== minmax2-5.2 + + SELECT coalesce(min(rowid),999) FROM t3; +---- +stmt 0 err 1 -1 45 no such table: t3 +==== minmax2-5.3 + + SELECT coalesce(max(x),999) FROM t3; +---- +stmt 0 err 1 -1 41 no such table: t3 +==== minmax2-5.4 + + SELECT coalesce(max(rowid),999) FROM t3; +---- +stmt 0 err 1 -1 45 no such table: t3 +==== minmax2-5.5 + + SELECT coalesce(max(rowid),999) FROM t3 WHERE rowid<25; +---- +stmt 0 err 1 -1 60 no such table: t3 +==== minmax2-6.1 + + SELECT min(a) FROM t2 LIMIT 1 +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax2-6.2 + + SELECT max(a) FROM t2 LIMIT 3 +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax2-6.3 + + SELECT min(a) FROM t2 LIMIT 0,100 +---- +stmt 0 err 1 -1 39 no such table: t2 +==== minmax2-6.4 + + SELECT max(a) FROM t2 LIMIT 1,100 +---- +stmt 0 err 1 -1 39 no such table: t2 +==== minmax2-6.5 + + SELECT min(x) FROM t3 LIMIT 1 +---- +stmt 0 err 1 -1 35 no such table: t3 +==== minmax2-6.6 + + SELECT max(x) FROM t3 LIMIT 0 +---- +stmt 0 err 1 -1 35 no such table: t3 +==== minmax2-6.7 + + SELECT max(a) FROM t2 LIMIT 0 +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax2-7.1 + + SELECT max(x) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== minmax2-7.2 + + SELECT * FROM (SELECT max(x) FROM t1); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== minmax2-7.3 + + SELECT min(x) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== minmax2-7.4 + + SELECT * FROM (SELECT min(x) FROM t1); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== minmax2-8.1 + + CREATE TABLE t4(a TEXT); + INSERT INTO t4 VALUES('1234'); + INSERT INTO t4 VALUES('234'); + INSERT INTO t4 VALUES('34'); + SELECT min(a), max(a) FROM t4; +---- +stmt 0 ok +stmt 29 err 1 -1 64 no such table: t4 +stmt 64 err 1 -1 98 no such table: t4 +stmt 98 err 1 -1 131 no such table: t4 +stmt 131 err 1 -1 166 no such table: t4 +==== minmax2-8.2 + + CREATE TABLE t5(a INTEGER); + INSERT INTO t5 VALUES('1234'); + INSERT INTO t5 VALUES('234'); + INSERT INTO t5 VALUES('34'); + SELECT min(a), max(a) FROM t5; +---- +stmt 0 ok +stmt 32 err 1 -1 67 no such table: t5 +stmt 67 err 1 -1 101 no such table: t5 +stmt 101 err 1 -1 134 no such table: t5 +stmt 134 err 1 -1 169 no such table: t5 +==== minmax2-9.0 + + SELECT max(rowid) FROM t4 UNION SELECT max(rowid) FROM t5 +---- +stmt 0 err 1 -1 65 no such table: t5 +==== minmax2-9.1 + + SELECT max(yy) FROM ( + SELECT max(rowid) AS yy FROM t4 UNION SELECT max(rowid) FROM t5 + ) +---- +stmt 0 err 1 -1 109 no such table: t5 +==== minmax2-9.2 + + SELECT max(yy) FROM ( + SELECT max(rowid) AS yy FROM t4 EXCEPT SELECT max(rowid) FROM t5 + ) +---- +stmt 0 err 1 -1 110 no such table: t5 +==== minmax2-10.1 + + CREATE TABLE t6(x); + INSERT INTO t6 VALUES(1); + INSERT INTO t6 VALUES(2); + INSERT INTO t6 VALUES(NULL); + SELECT coalesce(min(x),-1) FROM t6; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t6 +stmt 54 err 1 -1 84 no such table: t6 +stmt 84 err 1 -1 117 no such table: t6 +stmt 117 err 1 -1 157 no such table: t6 +==== minmax2-10.2 + + SELECT max(x) FROM t6; +---- +stmt 0 err 1 -1 27 no such table: t6 +==== minmax2-10.3 + + CREATE INDEX i6 ON t6(x DESC); + SELECT coalesce(min(x),-1) FROM t6; +---- +stmt 0 err 1 -1 35 no such table: main.t6 +stmt 35 err 1 -1 75 no such table: t6 +==== minmax2-10.4 + + SELECT max(x) FROM t6; +---- +stmt 0 err 1 -1 27 no such table: t6 +==== minmax2-10.5 + + DELETE FROM t6 WHERE x NOT NULL; + SELECT count(*) FROM t6; +---- +stmt 0 err 1 -1 37 no such table: t6 +stmt 37 err 1 -1 66 no such table: t6 +==== minmax2-10.6 + + SELECT count(x) FROM t6; +---- +stmt 0 err 1 -1 29 no such table: t6 +==== minmax2-10.7 + + SELECT (SELECT min(x) FROM t6), (SELECT max(x) FROM t6); +---- +stmt 0 err 1 -1 63 no such table: t6 +==== minmax2-10.8 + + SELECT min(x), max(x) FROM t6; +---- +stmt 0 err 1 -1 35 no such table: t6 +==== minmax2-10.9 + + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + INSERT INTO t6 SELECT * FROM t6; + SELECT count(*) FROM t6; +---- +stmt 0 err 1 -1 37 no such table: t6 +stmt 37 err 1 -1 74 no such table: t6 +stmt 74 err 1 -1 111 no such table: t6 +stmt 111 err 1 -1 148 no such table: t6 +stmt 148 err 1 -1 185 no such table: t6 +stmt 185 err 1 -1 222 no such table: t6 +stmt 222 err 1 -1 259 no such table: t6 +stmt 259 err 1 -1 296 no such table: t6 +stmt 296 err 1 -1 333 no such table: t6 +stmt 333 err 1 -1 370 no such table: t6 +stmt 370 err 1 -1 399 no such table: t6 +==== minmax2-10.10 + + SELECT count(x) FROM t6; +---- +stmt 0 err 1 -1 29 no such table: t6 +==== minmax2-10.11 + + SELECT (SELECT min(x) FROM t6), (SELECT max(x) FROM t6); +---- +stmt 0 err 1 -1 63 no such table: t6 +==== minmax2-10.12 + + SELECT min(x), max(x) FROM t6; +---- +stmt 0 err 1 -1 35 no such table: t6 +==== minmax2-11.100 + + CREATE TABLE t11(a,b,c); + INSERT INTO t11(a,b,c) VALUES(1,10,5),(2,8,11),(3,1,4),(4,20,1),(5,16,4); + CREATE INDEX t11bc ON t11(b+c); + SELECT max(b+c) FROM t11; +---- +stmt 0 ok +stmt 27 err 1 -1 103 no such table: t11 +stmt 103 err 1 -1 137 no such table: main.t11 +stmt 137 err 1 -1 165 no such table: t11 +==== minmax2-11.110 + + SELECT a, max(b+c) FROM t11; +---- +stmt 0 err 1 -1 31 no such table: t11 +==== minmax2-11.120 + + SELECT a, min(b+c) FROM t11; +---- +stmt 0 err 1 -1 31 no such table: t11 +==== minmax2-11.130 + + INSERT INTO t11(a,b,c) VALUES(6,NULL,0),(7,0,NULL); + SELECT a, min(b+c) FROM t11; +---- +stmt 0 err 1 -1 54 no such table: t11 +stmt 54 err 1 -1 85 no such table: t11 diff --git a/parser/testdata/minmax3.metadata.json b/parser/testdata/minmax3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/minmax3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/minmax3.test b/parser/testdata/minmax3.test new file mode 100644 index 0000000..a019008 --- /dev/null +++ b/parser/testdata/minmax3.test @@ -0,0 +1,186 @@ +==== minmax3-1.4.4 + DROP INDEX i1 +---- +stmt 0 err 1 -1 15 no such index: i1 +==== minmax3-2.1 + + CREATE TABLE t2(a, b); + CREATE INDEX i3 ON t2(a, b); + INSERT INTO t2 VALUES(1, NULL); + INSERT INTO t2 VALUES(1, 1); + INSERT INTO t2 VALUES(1, 2); + INSERT INTO t2 VALUES(1, 3); + INSERT INTO t2 VALUES(2, NULL); + INSERT INTO t2 VALUES(2, 1); + INSERT INTO t2 VALUES(2, 2); + INSERT INTO t2 VALUES(2, 3); + INSERT INTO t2 VALUES(3, 1); + INSERT INTO t2 VALUES(3, 2); + INSERT INTO t2 VALUES(3, 3); +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: main.t2 +stmt 60 err 1 -1 96 no such table: t2 +stmt 96 err 1 -1 129 no such table: t2 +stmt 129 err 1 -1 162 no such table: t2 +stmt 162 err 1 -1 195 no such table: t2 +stmt 195 err 1 -1 231 no such table: t2 +stmt 231 err 1 -1 264 no such table: t2 +stmt 264 err 1 -1 297 no such table: t2 +stmt 297 err 1 -1 330 no such table: t2 +stmt 330 err 1 -1 363 no such table: t2 +stmt 363 err 1 -1 396 no such table: t2 +stmt 396 err 1 -1 429 no such table: t2 +==== minmax3-2.2 + SELECT min(b) FROM t2 WHERE a = 1; +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax3-2.3 + SELECT min(b) FROM t2 WHERE a = 1 AND b>1; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== minmax3-2.4 + SELECT min(b) FROM t2 WHERE a = 1 AND b>-1; +---- +stmt 0 err 1 -1 44 no such table: t2 +==== minmax3-2.5 + SELECT min(b) FROM t2 WHERE a = 1; +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax3-2.6 + SELECT min(b) FROM t2 WHERE a = 1 AND b<2; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== minmax3-2.7 + SELECT min(b) FROM t2 WHERE a = 1 AND b<1; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== minmax3-2.8 + SELECT min(b) FROM t2 WHERE a = 3 AND b<1; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== minmax3-3.1 + + DROP TABLE t2; + CREATE TABLE t2(a, b); + CREATE INDEX i3 ON t2(a, b DESC); + INSERT INTO t2 VALUES(1, NULL); + INSERT INTO t2 VALUES(1, 1); + INSERT INTO t2 VALUES(1, 2); + INSERT INTO t2 VALUES(1, 3); + INSERT INTO t2 VALUES(2, NULL); + INSERT INTO t2 VALUES(2, 1); + INSERT INTO t2 VALUES(2, 2); + INSERT INTO t2 VALUES(2, 3); + INSERT INTO t2 VALUES(3, 1); + INSERT INTO t2 VALUES(3, 2); + INSERT INTO t2 VALUES(3, 3); +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 ok +stmt 46 err 1 -1 84 no such table: main.t2 +stmt 84 err 1 -1 120 no such table: t2 +stmt 120 err 1 -1 153 no such table: t2 +stmt 153 err 1 -1 186 no such table: t2 +stmt 186 err 1 -1 219 no such table: t2 +stmt 219 err 1 -1 255 no such table: t2 +stmt 255 err 1 -1 288 no such table: t2 +stmt 288 err 1 -1 321 no such table: t2 +stmt 321 err 1 -1 354 no such table: t2 +stmt 354 err 1 -1 387 no such table: t2 +stmt 387 err 1 -1 420 no such table: t2 +stmt 420 err 1 -1 453 no such table: t2 +==== minmax3-3.2 + SELECT min(b) FROM t2 WHERE a = 1; +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax3-3.3 + SELECT min(b) FROM t2 WHERE a = 1 AND b>1; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== minmax3-3.4 + SELECT min(b) FROM t2 WHERE a = 1 AND b>-1; +---- +stmt 0 err 1 -1 44 no such table: t2 +==== minmax3-3.5 + SELECT min(b) FROM t2 WHERE a = 1; +---- +stmt 0 err 1 -1 35 no such table: t2 +==== minmax3-3.6 + SELECT min(b) FROM t2 WHERE a = 1 AND b<2; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== minmax3-3.7 + SELECT min(b) FROM t2 WHERE a = 1 AND b<1; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== minmax3-3.8 + SELECT min(b) FROM t2 WHERE a = 3 AND b<1; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== minmax3-4.1 + + CREATE TABLE t4(x); + INSERT INTO t4 VALUES('abc'); + INSERT INTO t4 VALUES('BCD'); + SELECT max(x) FROM t4; +---- +stmt 0 ok +stmt 24 err 1 -1 58 no such table: t4 +stmt 58 err 1 -1 92 no such table: t4 +stmt 92 err 1 -1 119 no such table: t4 +==== minmax3-4.2 + + SELECT max(x COLLATE nocase) FROM t4; +---- +stmt 0 err 1 -1 42 no such table: t4 +==== minmax3-4.3 + + SELECT max(x), max(x COLLATE nocase) FROM t4; +---- +stmt 0 err 1 -1 50 no such table: t4 +==== minmax3-4.4 + + SELECT max(x COLLATE binary), max(x COLLATE nocase) FROM t4; +---- +stmt 0 err 1 -1 65 no such table: t4 +==== minmax3-4.5 + + SELECT max(x COLLATE nocase), max(x COLLATE rtrim) FROM t4; +---- +stmt 0 err 1 -1 64 no such table: t4 +==== minmax3-4.6 + + SELECT max(x COLLATE nocase), max(x) FROM t4; +---- +stmt 0 err 1 -1 50 no such table: t4 +==== minmax3-4.10 + + SELECT min(x) FROM t4; +---- +stmt 0 err 1 -1 27 no such table: t4 +==== minmax3-4.11 + + SELECT min(x COLLATE nocase) FROM t4; +---- +stmt 0 err 1 -1 42 no such table: t4 +==== minmax3-4.12 + + SELECT min(x), min(x COLLATE nocase) FROM t4; +---- +stmt 0 err 1 -1 50 no such table: t4 +==== minmax3-4.13 + + SELECT min(x COLLATE binary), min(x COLLATE nocase) FROM t4; +---- +stmt 0 err 1 -1 65 no such table: t4 +==== minmax3-4.14 + + SELECT min(x COLLATE nocase), min(x COLLATE rtrim) FROM t4; +---- +stmt 0 err 1 -1 64 no such table: t4 +==== minmax3-4.15 + + SELECT min(x COLLATE nocase), min(x) FROM t4; +---- +stmt 0 err 1 -1 50 no such table: t4 diff --git a/parser/testdata/minmax4.metadata.json b/parser/testdata/minmax4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/minmax4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/minmax4.test b/parser/testdata/minmax4.test new file mode 100644 index 0000000..72c1f02 --- /dev/null +++ b/parser/testdata/minmax4.test @@ -0,0 +1,106 @@ +==== minmax4-generated + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(NULL, 1); +---- +stmt 0 ok +stmt 27 err 1 -1 63 no such table: t1 +==== minmax4-generated.dup1 + + SELECT min(a), b FROM t1; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== minmax4-generated.dup2 + + SELECT min(a), b FROM t1 WHERE a<50; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== minmax4-generated.dup3 + + INSERT INTO t1 VALUES(2, 2); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== minmax4-generated.dup4 + + SELECT min(a), b FROM t1; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== minmax4-generated.dup5 + + SELECT min(a), b FROM t1 WHERE a<50; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 4.0 + + CREATE TABLE t0 (c0, c1); + CREATE INDEX i0 ON t0(c1, c1 + 1 DESC); + INSERT INTO t0(c0) VALUES (1); +---- +stmt 0 ok +stmt 28 err 1 -1 70 no such table: main.t0 +stmt 70 err 1 -1 103 no such table: t0 +==== 4.1 + + SELECT MIN(t0.c1), t0.c0 FROM t0 WHERE t0.c1 ISNULL; +---- +stmt 0 err 1 -1 55 no such table: t0 +==== 5.0 + + CREATE TABLE t1 (a, b); + INSERT INTO t1 VALUES(123, NULL); + CREATE INDEX i1 ON t1(a, b DESC); +---- +stmt 0 ok +stmt 26 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 98 no such table: main.t1 +==== 5.1 + + SELECT MIN(a) FROM t1 WHERE a=123; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== 6.1.0 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(NULL, 1, 'x'); + CREATE INDEX i1 ON t1(a); +---- +stmt 0 ok +stmt 28 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 95 no such table: main.t1 +==== 6.1.1 + + SELECT min(a), b, c FROM t1 WHERE c='x'; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== 6.1.2 + + INSERT INTO t1 VALUES(1, 2, 'y'); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 6.1.3 + + SELECT min(a), b, c FROM t1 WHERE c='x'; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== 6.2.0 + + CREATE TABLE t0(c0 UNIQUE, c1); + INSERT INTO t0(c1) VALUES (0); + INSERT INTO t0(c0) VALUES (0); + CREATE VIEW v0(c0, c1) AS + SELECT t0.c1, t0.c0 FROM t0 WHERE CAST(t0.rowid AS INT) = 1; +---- +stmt 0 ok +stmt 34 err 1 -1 67 no such table: t0 +stmt 67 err 1 -1 100 no such table: t0 +stmt 100 ok +==== 6.2.1 + + SELECT c0, c1 FROM v0; +---- +stmt 0 err 1 -1 25 no such table: v0 +==== 6.2.2 + + SELECT v0.c0, MIN(v0.c1) FROM v0; +---- +stmt 0 err 1 -1 36 no such table: v0 diff --git a/parser/testdata/misc1.metadata.json b/parser/testdata/misc1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/misc1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/misc1.test b/parser/testdata/misc1.test new file mode 100644 index 0000000..fb35426 --- /dev/null +++ b/parser/testdata/misc1.test @@ -0,0 +1,518 @@ +==== misc1-1.2 +SELECT x0, x10, x25, x50, x75 FROM manycol +---- +stmt 0 err 1 -1 43 no such table: manycol +==== misc1-1.3.2 +SELECT x50 FROM manycol ORDER BY x80 +---- +stmt 0 err 1 -1 37 no such table: manycol +==== misc1-1.4 +SELECT x75 FROM manycol WHERE x50=350 +---- +stmt 0 err 1 -1 38 no such table: manycol +==== misc1-1.5 +SELECT x50 FROM manycol WHERE x99=599 +---- +stmt 0 err 1 -1 38 no such table: manycol +==== misc1-1.7 +SELECT count(*) FROM manycol +---- +stmt 0 err 1 -1 29 no such table: manycol +==== misc1-2.2 +SELECT sum(one), two, four FROM agger + GROUP BY two, four ORDER BY sum(one) desc +---- +stmt 0 err 1 -1 91 no such table: agger +==== misc1-2.3 +SELECT sum((one)), (two), (four) FROM agger + GROUP BY (two), (four) ORDER BY sum(one) desc +---- +stmt 0 err 1 -1 101 no such table: agger +==== misc1-4.1 + + BEGIN; + CREATE TABLE t2(a); + INSERT INTO t2 VALUES('This is a long string to use up a lot of disk -'); + UPDATE t2 SET a=a||a||a||a; + INSERT INTO t2 SELECT '1 - ' || a FROM t2; + INSERT INTO t2 SELECT '2 - ' || a FROM t2; + INSERT INTO t2 SELECT '3 - ' || a FROM t2; + INSERT INTO t2 SELECT '4 - ' || a FROM t2; + INSERT INTO t2 SELECT '5 - ' || a FROM t2; + INSERT INTO t2 SELECT '6 - ' || a FROM t2; + COMMIT; + SELECT count(*) FROM t2; +---- +stmt 0 ok +stmt 11 ok +stmt 35 err 1 -1 113 no such table: t2 +stmt 113 err 1 -1 145 no such table: t2 +stmt 145 err 1 -1 192 no such table: t2 +stmt 192 err 1 -1 239 no such table: t2 +stmt 239 err 1 -1 286 no such table: t2 +stmt 286 err 1 -1 333 no such table: t2 +stmt 333 err 1 -1 380 no such table: t2 +stmt 380 err 1 -1 427 no such table: t2 +stmt 427 ok +stmt 439 err 1 -1 468 no such table: t2 +==== misc1-5.1 + + CREATE TABLE t3(a,b); + INSERT INTO t3 VALUES(1,2); + INSERT INTO t3 VALUES(3,4); + UPDATE t3 SET a=0 WHEREwww b=2; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t3 +stmt 58 err 1 -1 90 no such table: t3 +stmt 90 err 1 113 121 near "WHEREwww": syntax error +==== misc1-5.2 + + SELECT * FROM t3 ORDER BY a; +---- +stmt 0 err 1 -1 33 no such table: t3 +==== misc1-6.1 + + CREATE TABLE t4( + abort, asc, begin, cluster, conflict, copy, delimiters, desc, end, + explain, fail, ignore, key, offset, pragma, replace, temp, + vacuum, view + ); +---- +stmt 0 ok +==== misc1-6.2 + + INSERT INTO t4 + VALUES(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19); +---- +stmt 0 err 1 -1 83 no such table: t4 +==== misc1-6.3 + + SELECT * FROM t4 +---- +stmt 0 err 1 -1 22 no such table: t4 +==== misc1-6.4 + + SELECT abort+asc,max(key,pragma,temp) FROM t4 +---- +stmt 0 err 1 -1 51 no such table: t4 +==== misc1-7.1 + + CREATE TABLE error1( + a TYPE PRIMARY KEY, + b TYPE PRIMARY KEY + ); +---- +stmt 0 err 1 -1 82 table "error1" has more than one primary key +==== misc1-7.2 + + CREATE TABLE error1( + a INTEGER PRIMARY KEY, + b TYPE PRIMARY KEY + ); +---- +stmt 0 err 1 -1 85 table "error1" has more than one primary key +==== misc1-7.3 + + CREATE TABLE t5(a,b,c,PRIMARY KEY(a,b)); + INSERT INTO t5 VALUES(1,2,3); + SELECT * FROM t5 ORDER BY a; +---- +stmt 0 ok +stmt 45 err 1 -1 79 no such table: t5 +stmt 79 err 1 -1 112 no such table: t5 +==== misc1-7.4 + + INSERT INTO t5 VALUES(1,2,4); +---- +stmt 0 err 1 -1 34 no such table: t5 +==== misc1-7.5 + + INSERT INTO t5 VALUES(0,2,4); +---- +stmt 0 err 1 -1 34 no such table: t5 +==== misc1-7.6 + + SELECT * FROM t5 ORDER BY a; +---- +stmt 0 err 1 -1 33 no such table: t5 +==== misc1-8.1 + + SELECT *; +---- +stmt 0 err 1 -1 14 no tables specified +==== misc1-8.2 + + SELECT t1.*; +---- +stmt 0 err 1 -1 17 no such table: t1 +==== misc1-9.1 + + CREATE TABLE t1(a unique not null, b unique not null); + INSERT INTO t1 VALUES('a',1234567890123456789); + INSERT INTO t1 VALUES('b',1234567891123456789); + INSERT INTO t1 VALUES('c',1234567892123456789); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 59 err 1 -1 111 no such table: t1 +stmt 111 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 215 no such table: t1 +stmt 215 err 1 -1 237 no such table: t1 +==== misc1-10.0 +SELECT count(*) FROM manycol +---- +stmt 0 err 1 -1 29 no such table: manycol +==== misc1-10.4 +SELECT count(*) FROM manycol +---- +stmt 0 err 1 -1 29 no such table: manycol +==== misc1-10.6 +SELECT x1 FROM manycol WHERE x0=100 +---- +stmt 0 err 1 -1 36 no such table: manycol +==== misc1-10.8 +SELECT x1 FROM manycol WHERE x0=100 +---- +stmt 0 err 1 -1 36 no such table: manycol +==== misc1-10.10 +SELECT x1 FROM manycol WHERE x0=100 +---- +stmt 0 err 1 -1 36 no such table: manycol +==== misc1-12.1 +SELECT '0'=='0.0' +---- +stmt 0 ok +==== misc1-12.2 +SELECT '0'==0.0 +---- +stmt 0 ok +==== misc1-12.3 +SELECT '12345678901234567890'=='12345678901234567891' +---- +stmt 0 ok +==== misc1-12.4 + + CREATE TABLE t6(a INT UNIQUE, b TEXT UNIQUE); + INSERT INTO t6 VALUES('0','0.0'); + SELECT * FROM t6; +---- +stmt 0 ok +stmt 50 err 1 -1 88 no such table: t6 +stmt 88 err 1 -1 110 no such table: t6 +==== misc1-12.5 + + INSERT OR IGNORE INTO t6 VALUES(0.0,'x'); + SELECT * FROM t6; +---- +stmt 0 err 1 -1 48 no such table: t6 +stmt 48 err 1 -1 72 no such table: t6 +==== misc1-12.6 + + INSERT OR IGNORE INTO t6 VALUES('y',0); + SELECT * FROM t6; +---- +stmt 0 err 1 -1 46 no such table: t6 +stmt 46 err 1 -1 70 no such table: t6 +==== misc1-12.7 + + CREATE TABLE t7(x INTEGER, y TEXT, z); + INSERT INTO t7 VALUES(0,0,1); + INSERT INTO t7 VALUES(0.0,0,2); + INSERT INTO t7 VALUES(0,0.0,3); + INSERT INTO t7 VALUES(0.0,0.0,4); + SELECT DISTINCT x, y FROM t7 ORDER BY z; +---- +stmt 0 ok +stmt 43 err 1 -1 77 no such table: t7 +stmt 77 err 1 -1 113 no such table: t7 +stmt 113 err 1 -1 149 no such table: t7 +stmt 149 err 1 -1 187 no such table: t7 +stmt 187 err 1 -1 232 no such table: t7 +==== misc1-12.8 + + SELECT min(z), max(z), count(z) FROM t7 GROUP BY x ORDER BY 1; +---- +stmt 0 err 1 -1 67 no such table: t7 +==== misc1-12.9 + + SELECT min(z), max(z), count(z) FROM t7 GROUP BY y ORDER BY 1; +---- +stmt 0 err 1 -1 67 no such table: t7 +==== misc1-12.11 + + CREATE TABLE t8(x TEXT COLLATE numeric, y INTEGER COLLATE text, z); + INSERT INTO t8 VALUES(0,0,1); + INSERT INTO t8 VALUES(0.0,0,2); + INSERT INTO t8 VALUES(0,0.0,3); + INSERT INTO t8 VALUES(0.0,0.0,4); + SELECT DISTINCT x, y FROM t8 ORDER BY z; +---- +stmt 0 err 1 -1 44 no such collation sequence: numeric +stmt 72 err 1 -1 106 no such table: t8 +stmt 106 err 1 -1 142 no such table: t8 +stmt 142 err 1 -1 178 no such table: t8 +stmt 178 err 1 -1 216 no such table: t8 +stmt 216 err 1 -1 261 no such table: t8 +==== misc1-12.12 + + SELECT min(z), max(z), count(z) FROM t8 GROUP BY x ORDER BY 1; +---- +stmt 0 err 1 -1 67 no such table: t8 +==== misc1-12.13 + + SELECT min(z), max(z), count(z) FROM t8 GROUP BY y ORDER BY 1; +---- +stmt 0 err 1 -1 67 no such table: t8 +==== misc1-13.1 + + CREATE TABLE t9(x,y); + INSERT INTO t9 VALUES('one',1); + INSERT INTO t9 VALUES('two',2); + INSERT INTO t9 VALUES('three',3); + INSERT INTO t9 VALUES('four',4); + INSERT INTO t9 VALUES('five',5); + INSERT INTO t9 VALUES('six',6); + INSERT INTO t9 VALUES('seven',7); + INSERT INTO t9 VALUES('eight',8); + INSERT INTO t9 VALUES('nine',9); + INSERT INTO t9 VALUES('ten',10); + INSERT INTO t9 VALUES('eleven',11); + SELECT y FROM t9 + WHERE x=(SELECT x FROM t9 WHERE y=1) + OR x=(SELECT x FROM t9 WHERE y=2) + OR x=(SELECT x FROM t9 WHERE y=3) + OR x=(SELECT x FROM t9 WHERE y=4) + OR x=(SELECT x FROM t9 WHERE y=5) + OR x=(SELECT x FROM t9 WHERE y=6) + OR x=(SELECT x FROM t9 WHERE y=7) + OR x=(SELECT x FROM t9 WHERE y=8) + OR x=(SELECT x FROM t9 WHERE y=9) + OR x=(SELECT x FROM t9 WHERE y=10) + OR x=(SELECT x FROM t9 WHERE y=11) + OR x=(SELECT x FROM t9 WHERE y=12) + OR x=(SELECT x FROM t9 WHERE y=13) + OR x=(SELECT x FROM t9 WHERE y=14) + ; +---- +stmt 0 ok +stmt 29 err 1 -1 68 no such table: t9 +stmt 68 err 1 -1 107 no such table: t9 +stmt 107 err 1 -1 148 no such table: t9 +stmt 148 err 1 -1 188 no such table: t9 +stmt 188 err 1 -1 228 no such table: t9 +stmt 228 err 1 -1 267 no such table: t9 +stmt 267 err 1 -1 308 no such table: t9 +stmt 308 err 1 -1 349 no such table: t9 +stmt 349 err 1 -1 389 no such table: t9 +stmt 389 err 1 -1 429 no such table: t9 +stmt 429 err 1 -1 472 no such table: t9 +stmt 472 err 1 -1 1126 no such table: t9 +==== misc1-15.1.1 + + CREATE TABLE t10 AS SELECT c1; +---- +stmt 0 err 1 32 35 no such column: c1 +==== misc1-15.1.2 + + CREATE TABLE t10 AS SELECT t9.c1; +---- +stmt 0 err 1 32 38 no such column: t9.c1 +==== misc1-15.1.3 + + CREATE TABLE t10 AS SELECT main.t9.c1; +---- +stmt 0 err 1 32 43 no such column: main.t9.c1 +==== misc1-16.2 + + CREATE TABLE test(a integer, primary key(a)); +---- +stmt 0 ok +==== misc1-16.3 + + CREATE TABLE test2(a text primary key, b text, primary key(a,b)); +---- +stmt 0 err 1 -1 69 table "test2" has more than one primary key +==== misc1-16.4 + + INSERT INTO test VALUES(1); + SELECT rowid, a FROM test; +---- +stmt 0 err 1 -1 32 no such table: test +stmt 32 err 1 -1 63 no such table: test +==== misc1-16.5 + + INSERT INTO test VALUES(5); + SELECT rowid, a FROM test; +---- +stmt 0 err 1 -1 32 no such table: test +stmt 32 err 1 -1 63 no such table: test +==== misc1-16.6 + + INSERT INTO test VALUES(NULL); + SELECT rowid, a FROM test; +---- +stmt 0 err 1 -1 35 no such table: test +stmt 35 err 1 -1 66 no such table: test +==== misc1-17.1 + + BEGIN; + CREATE TABLE RealTable(TestID INTEGER PRIMARY KEY, TestString TEXT); + CREATE TEMP TABLE TempTable(TestID INTEGER PRIMARY KEY, TestString TEXT); + CREATE TEMP TRIGGER trigTest_1 AFTER UPDATE ON TempTable BEGIN + INSERT INTO RealTable(TestString) + SELECT new.TestString FROM TempTable LIMIT 1; + END; + INSERT INTO TempTable(TestString) VALUES ('1'); + INSERT INTO TempTable(TestString) VALUES ('2'); + UPDATE TempTable SET TestString = TestString + 1 WHERE TestID=1 OR TestId=2; + COMMIT; + SELECT TestString FROM RealTable ORDER BY 1; +---- +stmt 0 ok +stmt 11 ok +stmt 84 ok +stmt 162 err 1 -1 229 no such table: TempTable +stmt 334 err 1 -1 386 no such table: TempTable +stmt 386 err 1 -1 438 no such table: TempTable +stmt 438 err 1 -1 519 no such table: TempTable +stmt 519 ok +stmt 531 err 1 -1 580 no such table: RealTable +==== misc1-19.1 + + CREATE TABLE t19 AS SELECT 1, 2 AS '', 3; + SELECT * FROM t19; +---- +stmt 0 ok +stmt 44 err 1 -1 65 no such table: t19 +==== misc1-19.2 + + CREATE TABLE t19b AS SELECT 4 AS '', 5 AS '', 6 AS ''; + SELECT * FROM t19b; +---- +stmt 0 ok +stmt 58 err 1 -1 80 no such table: t19b +==== misc1-19.3 + + CREATE TABLE t19c(x TEXT); + CREATE TABLE t19d AS SELECT * FROM t19c UNION ALL SELECT 1234; + SELECT x, typeof(x) FROM t19d; +---- +stmt 0 ok +stmt 29 err 1 -1 94 no such table: t19c +stmt 94 err 1 -1 127 no such table: t19d +==== misc1-20.1 + + CREATE TABLE t0(x INTEGER DEFAULT(0==0) NOT NULL); + REPLACE INTO t0(x) VALUES(''); + SELECT rowid, quote(x) FROM t0; +---- +stmt 0 ok +stmt 53 err 1 -1 86 no such table: t0 +stmt 86 err 1 -1 120 no such table: t0 +==== misc1-21.1 + + select''like''like''like#0; +---- +stmt 0 err 1 -1 30 near "#0": syntax error +==== misc1-21.2 + + VALUES(0,0x0MATCH#0; +---- +stmt 0 err 1 12 12 unrecognized token: "0x0MATCH" +==== misc1-22.1 + + SELECT ''+3 FROM (SELECT ''+5); +---- +stmt 0 ok +==== misc1-23.1 + + CREATE TABLE t1(x); + PRAGMA writable_schema=ON; + UPDATE sqlite_master SET sql='CREATE table t(d CHECK(T(#0)'; + BEGIN; + CREATE TABLE t2(y); + ROLLBACK; + DROP TABLE IF EXISTS t3; +---- +stmt 0 ok +stmt 22 ok +stmt 51 ok +stmt 114 ok +stmt 123 ok +stmt 145 ok +stmt 157 ok +==== misc1-23.2 + + CREATE TABLE t1(x UNIQUE); + PRAGMA writable_schema=ON; + UPDATE sqlite_master SET sql='CREATE TABLE IF not EXISTS t(c)'; + BEGIN; + CREATE TABLE t2(x); + ROLLBACK; + DROP TABLE F; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 124 ok +stmt 133 ok +stmt 155 ok +stmt 167 err 1 -1 183 no such table: F +==== misc1-23.3 + + CREATE TABLE t1(x UNIQUE); + PRAGMA writable_schema=ON; + UPDATE sqlite_master SET sql='CREATE table y(a TEXT, a TEXT)'; + BEGIN; + CREATE TABLE t2(y); + ROLLBACK; + DROP TABLE IF EXISTS t; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 123 ok +stmt 132 ok +stmt 154 ok +stmt 166 ok +==== misc1-26.0 + + DROP TABLE IF EXISTS abc; + CREATE TABLE abc(a, b, c); + SELECT randomblob(min(max(coalesce(EXISTS (SELECT 1 FROM ( SELECT (SELECT 2147483647) NOT IN (SELECT 2147483649 UNION ALL SELECT DISTINCT -1) IN (SELECT 2147483649), 'fault', (SELECT ALL -1 INTERSECT SELECT 'experiments') IN (SELECT ALL 56.1 ORDER BY 'experiments' DESC) FROM (SELECT DISTINCT 2147483648, 'hardware' UNION ALL SELECT -2147483648, 'experiments' ORDER BY 2147483648 LIMIT 1 OFFSET 123456789.1234567899) GROUP BY (SELECT ALL 0 INTERSECT SELECT 'in') IN (SELECT DISTINCT 'experiments' ORDER BY zeroblob(1000) LIMIT 56.1 OFFSET -456) HAVING EXISTS (SELECT 'fault' EXCEPT SELECT DISTINCT 56.1) UNION SELECT 'The', 'The', 2147483649 UNION ALL SELECT DISTINCT 'hardware', 'first', 'experiments' ORDER BY 'hardware' LIMIT 123456789.1234567899 OFFSET -2147483647)) NOT IN (SELECT (SELECT DISTINCT (SELECT 'The') FROM abc ORDER BY EXISTS (SELECT -1 INTERSECT SELECT ALL NULL) ASC) IN (SELECT DISTINCT EXISTS (SELECT ALL 123456789.1234567899 ORDER BY 1 ASC, NULL DESC) FROM sqlite_master INTERSECT SELECT 456)), (SELECT ALL 'injection' UNION ALL SELECT ALL (SELECT DISTINCT 'first' UNION SELECT DISTINCT 'The') FROM (SELECT 456, 'in', 2147483649))),1), 500)), 'first', EXISTS (SELECT DISTINCT 456 FROM abc ORDER BY 'experiments' DESC) FROM abc; +---- +stmt 0 ok +stmt 28 ok +stmt 57 err 1 -1 1315 no such table: abc +==== misc1-27.0 + + CREATE TABLE dup1(a,b,c); + INSERT INTO dup1(a,b,c,a,b,c) VALUES(1,2,3,4,5,6); + SELECT a,b,c FROM dup1; +---- +stmt 0 ok +stmt 28 err 1 -1 81 no such table: dup1 +stmt 81 err 1 -1 107 no such table: dup1 +==== misc1-27.1 + + UPDATE dup1 SET a=7, b=8, c=9, a=10, b=11, c=12; + SELECT a,b,c FROM dup1; +---- +stmt 0 err 1 -1 51 no such table: dup1 +stmt 51 err 1 -1 77 no such table: dup1 +==== misc1-28.0 + + CREATE TABLE t1(x); + CREATE UNIQUE INDEX t1x ON t1(x) WHERE x=1; + INSERT OR ABORT INTO t1 DEFAULT VALUES; + UPDATE OR REPLACE t1 SET x = 1; + PRAGMA integrity_check; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 22 err 1 -1 68 no such table: main.t1 +stmt 68 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 144 no such table: t1 +stmt 144 ok +stmt 170 err 1 -1 190 no such table: t1 diff --git a/parser/testdata/misc2.metadata.json b/parser/testdata/misc2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/misc2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/misc2.test b/parser/testdata/misc2.test new file mode 100644 index 0000000..ee6ed02 --- /dev/null +++ b/parser/testdata/misc2.test @@ -0,0 +1,193 @@ +==== misc2-1.1 + + CREATE TABLE FOO(bar integer); + CREATE TRIGGER foo_insert BEFORE INSERT ON foo BEGIN + SELECT CASE WHEN (NOT new.bar BETWEEN 0 AND 20) + THEN raise(rollback, 'aiieee') END; + END; + INSERT INTO foo(bar) VALUES (1); +---- +stmt 0 ok +stmt 35 err 1 -1 92 no such table: main.foo +stmt 204 err 1 -1 241 no such table: foo +==== misc2-1.2 + + INSERT INTO foo(bar) VALUES (111); +---- +stmt 0 err 1 -1 39 no such table: foo +==== misc2-2.1 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1,2,3); + CREATE TABLE t2(a,b,c); + INSERT INTO t2 VALUES(7,8,9); +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 ok +stmt 90 err 1 -1 124 no such table: t2 +==== misc2-2.2 + + SELECT rowid, * FROM (SELECT * FROM t1, t2); +---- +stmt 0 err 1 -1 51 no such table: t1 +==== misc2-2.2.dup1 + + SELECT rowid, * FROM (SELECT * FROM t1, t2); +---- +stmt 0 err 1 -1 51 no such table: t1 +==== misc2-2.2b + + SELECT 'rowid', * FROM (SELECT * FROM t1, t2); +---- +stmt 0 err 1 -1 51 no such table: t1 +==== misc2-2.3 + + CREATE VIEW v1 AS SELECT * FROM t1, t2; + SELECT rowid, * FROM v1; +---- +stmt 0 ok +stmt 46 err 1 -1 77 no such table: v1 +==== misc2-2.3.dup1 + + CREATE VIEW v1 AS SELECT * FROM t1, t2; + SELECT rowid, * FROM v1; +---- +stmt 0 ok +stmt 46 err 1 -1 77 no such table: v1 +==== misc2-2.3b + + SELECT 'rowid', * FROM v1; +---- +stmt 0 err 1 -1 31 no such table: v1 +==== misc2-3.1 + + SELECT t1.b+t2.b AS a, t1.a, t2.a FROM t1, t2 WHERE a==10 +---- +stmt 0 err 1 -1 63 no such table: t1 +==== misc2-4.1 + + INSERT INTO t1 VALUES(4000000000,'a','b'); + SELECT a FROM t1 WHERE a>1; +---- +stmt 0 err 1 -1 47 no such table: t1 +stmt 47 err 1 -1 79 no such table: t1 +==== misc2-4.2 + + INSERT INTO t1 VALUES(2147483648,'b2','c2'); + INSERT INTO t1 VALUES(2147483647,'b3','c3'); + SELECT a FROM t1 WHERE a>2147483647; +---- +stmt 0 err 1 -1 49 no such table: t1 +stmt 49 err 1 -1 98 no such table: t1 +stmt 98 err 1 -1 139 no such table: t1 +==== misc2-4.3 + + SELECT a FROM t1 WHERE a<2147483648; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== misc2-4.4 + + SELECT a FROM t1 WHERE a<=2147483648; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== misc2-4.5 + + SELECT a FROM t1 WHERE a<10000000000; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== misc2-4.6 + + SELECT a FROM t1 WHERE a<1000000000000 ORDER BY 1; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== misc2-5.1 + + CREATE TABLE x(a,b); + CREATE VIEW y AS + SELECT x1.b AS p, x2.b AS q FROM x AS x1, x AS x2 WHERE x1.a=x2.a; + CREATE VIEW z AS + SELECT y1.p, y2.p FROM y AS y1, y AS y2 WHERE y1.q=y2.q; + SELECT * from z; +---- +stmt 0 ok +stmt 25 ok +stmt 120 ok +stmt 204 err 1 -1 225 no such table: z +==== misc2-7.3 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== misc2-7.13 +SELECT * FROM t1 +---- +stmt 0 err 1 -1 17 no such table: t1 +==== misc2-8.1 +- +---- +stmt 0 err 1 0 1 near "-": syntax error +==== misc2-9.1 + + BEGIN; + CREATE TABLE counts(n INTEGER PRIMARY KEY); + INSERT INTO counts VALUES(0); + INSERT INTO counts VALUES(1); + INSERT INTO counts SELECT n+2 FROM counts; + INSERT INTO counts SELECT n+4 FROM counts; + INSERT INTO counts SELECT n+8 FROM counts; + COMMIT; + + CREATE TEMP TABLE x AS + SELECT dim1.n, dim2.n, dim3.n + FROM counts AS dim1, counts AS dim2, counts AS dim3 + WHERE dim1.n<10 AND dim2.n<10 AND dim3.n<10; + + SELECT count(*) FROM x; +---- +stmt 0 ok +stmt 13 ok +stmt 63 err 1 -1 99 no such table: counts +stmt 99 err 1 -1 135 no such table: counts +stmt 135 err 1 -1 184 no such table: counts +stmt 184 err 1 -1 233 no such table: counts +stmt 233 err 1 -1 282 no such table: counts +stmt 282 ok +stmt 296 err 1 -1 473 no such table: counts +stmt 473 err 1 -1 506 no such table: x +==== misc2-9.2 + + DROP TABLE x; + CREATE TEMP TABLE x AS + SELECT dim1.n, dim2.n, dim3.n + FROM counts AS dim1, counts AS dim2, counts AS dim3 + WHERE dim1.n>=6 AND dim2.n>=6 AND dim3.n>=6; + + SELECT count(*) FROM x; +---- +stmt 0 err 1 -1 20 no such table: x +stmt 20 err 1 -1 194 no such table: counts +stmt 194 err 1 -1 227 no such table: x +==== misc2-9.3 + + DROP TABLE x; + CREATE TEMP TABLE x AS + SELECT dim1.n, dim2.n, dim3.n, dim4.n + FROM counts AS dim1, counts AS dim2, counts AS dim3, counts AS dim4 + WHERE dim1.n<5 AND dim2.n<5 AND dim3.n<5 AND dim4.n<5; + + SELECT count(*) FROM x; +---- +stmt 0 err 1 -1 20 no such table: x +stmt 20 err 1 -1 228 no such table: counts +stmt 228 err 1 -1 261 no such table: x +==== misc2-10.1 + + CREATE TABLE t1229(x); + CREATE TRIGGER r1229 BEFORE INSERT ON t1229 BEGIN + INSERT INTO t1229 SELECT y FROM (SELECT new.x y); + END; + INSERT INTO t1229 VALUES(1); +---- +stmt 0 ok +stmt 29 err 1 -1 85 no such table: main.t1229 +stmt 154 err 1 -1 189 no such table: t1229 diff --git a/parser/testdata/misc3.metadata.json b/parser/testdata/misc3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/misc3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/misc3.test b/parser/testdata/misc3.test new file mode 100644 index 0000000..1983055 --- /dev/null +++ b/parser/testdata/misc3.test @@ -0,0 +1,233 @@ +==== misc3-2.1 +SELECT 2e-25*0.5e25 +---- +stmt 0 ok +==== misc3-2.2 +SELECT 2.0e-25*000000.500000000000000000000000000000e+00025 +---- +stmt 0 ok +==== misc3-2.3 +SELECT 000000000002e-0000000025*0.5e25 +---- +stmt 0 ok +==== misc3-2.4 +SELECT 2e-25*0.5e250 +---- +stmt 0 ok +==== misc3-2.5 +SELECT format('%.15e',2.0e-250*0.5e25) +---- +stmt 0 ok +==== misc3-2.6 +SELECT '-2.0e-127' * '-0.5e27' +---- +stmt 0 ok +==== misc3-2.7 +SELECT '+2.0e-127' * '-0.5e27' +---- +stmt 0 ok +==== misc3-2.8 +SELECT 2.0e-27 * '+0.5e+127' +---- +stmt 0 ok +==== misc3-2.9 +SELECT 2.0e-27 * '+0.000005e+132' +---- +stmt 0 ok +==== misc3-3.2 + + CREATE TABLE t2(a INT UNIQUE); +---- +stmt 0 ok +==== misc3-3.3 + + INSERT INTO t2 VALUES(2147483648); +---- +stmt 0 err 1 -1 39 no such table: t2 +==== misc3-3.4 + + INSERT INTO t2 VALUES(-2147483649); +---- +stmt 0 err 1 -1 40 no such table: t2 +==== misc3-3.5 + + INSERT INTO t2 VALUES(+2147483649); +---- +stmt 0 err 1 -1 40 no such table: t2 +==== misc3-3.6 + + INSERT INTO t2 VALUES(+2147483647); + INSERT INTO t2 VALUES(-2147483648); + INSERT INTO t2 VALUES(-2147483647); + INSERT INTO t2 VALUES(2147483646); + SELECT * FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 40 no such table: t2 +stmt 40 err 1 -1 80 no such table: t2 +stmt 80 err 1 -1 120 no such table: t2 +stmt 120 err 1 -1 159 no such table: t2 +stmt 159 err 1 -1 192 no such table: t2 +==== misc3-3.7 + + SELECT * FROM t2 WHERE a>=-2147483648 ORDER BY a; +---- +stmt 0 err 1 -1 54 no such table: t2 +==== misc3-3.8 + + SELECT * FROM t2 WHERE a>-2147483648 ORDER BY a; +---- +stmt 0 err 1 -1 53 no such table: t2 +==== misc3-3.9 + + SELECT * FROM t2 WHERE a>-2147483649 ORDER BY a; +---- +stmt 0 err 1 -1 53 no such table: t2 +==== misc3-3.10 + + SELECT * FROM t2 WHERE a>=0 AND a<2147483649 ORDER BY a DESC; +---- +stmt 0 err 1 -1 66 no such table: t2 +==== misc3-3.11 + + SELECT * FROM t2 WHERE a>=0 AND a<=2147483648 ORDER BY a DESC; +---- +stmt 0 err 1 -1 67 no such table: t2 +==== misc3-3.12 + + SELECT * FROM t2 WHERE a>=0 AND a<2147483648 ORDER BY a DESC; +---- +stmt 0 err 1 -1 66 no such table: t2 +==== misc3-3.13 + + SELECT * FROM t2 WHERE a>=0 AND a<=2147483647 ORDER BY a DESC; +---- +stmt 0 err 1 -1 67 no such table: t2 +==== misc3-3.14 + + SELECT * FROM t2 WHERE a>=0 AND a<2147483647 ORDER BY a DESC; +---- +stmt 0 err 1 -1 66 no such table: t2 +==== misc3-4.1 + + CREATE TABLE t3(a INTEGER PRIMARY KEY, b); + INSERT INTO t3(b) VALUES('abc'); + INSERT INTO t3(b) VALUES('xyz'); + INSERT INTO t3(b) VALUES(NULL); + INSERT INTO t3(b) VALUES(NULL); + INSERT INTO t3(b) SELECT b||'d' FROM t3; + INSERT INTO t3(b) SELECT b||'e' FROM t3; + INSERT INTO t3(b) SELECT b||'f' FROM t3; + INSERT INTO t3(b) SELECT b||'g' FROM t3; + INSERT INTO t3(b) SELECT b||'h' FROM t3; + SELECT count(a), count(b) FROM t3; +---- +stmt 0 ok +stmt 47 err 1 -1 84 no such table: t3 +stmt 84 err 1 -1 121 no such table: t3 +stmt 121 err 1 -1 157 no such table: t3 +stmt 157 err 1 -1 193 no such table: t3 +stmt 193 err 1 -1 238 no such table: t3 +stmt 238 err 1 -1 283 no such table: t3 +stmt 283 err 1 -1 328 no such table: t3 +stmt 328 err 1 -1 373 no such table: t3 +stmt 373 err 1 -1 418 no such table: t3 +stmt 418 err 1 -1 457 no such table: t3 +==== misc3-4.2 + + SELECT count(a) FROM t3 WHERE b IN (SELECT b FROM t3); +---- +stmt 0 err 1 -1 61 no such table: t3 +==== misc3-4.3 + + SELECT count(a) FROM t3 WHERE b IN (SELECT b FROM t3 ORDER BY a+1); +---- +stmt 0 err 1 -1 74 no such table: t3 +==== misc3-5.1 + + CREATE TABLE x1 (b, c); + INSERT INTO x1 VALUES('dog',3); + INSERT INTO x1 VALUES('cat',1); + INSERT INTO x1 VALUES('dog',4); + CREATE TABLE x2 (c, e); + INSERT INTO x2 VALUES(1,'one'); + INSERT INTO x2 VALUES(2,'two'); + INSERT INTO x2 VALUES(3,'three'); + INSERT INTO x2 VALUES(4,'four'); + SELECT x2.c AS c, e, b FROM x2 LEFT JOIN + (SELECT b, max(c)+0 AS c FROM x1 GROUP BY b) + USING(c); +---- +stmt 0 ok +stmt 30 err 1 -1 68 no such table: x1 +stmt 68 err 1 -1 106 no such table: x1 +stmt 106 err 1 -1 144 no such table: x1 +stmt 144 ok +stmt 174 err 1 -1 212 no such table: x2 +stmt 212 err 1 -1 250 no such table: x2 +stmt 250 err 1 -1 290 no such table: x2 +stmt 290 err 1 -1 329 no such table: x2 +stmt 329 err 1 -1 449 no such table: x2 +==== misc3-5.2 + + SELECT * FROM ( + SELECT x2.c AS c, e, b FROM x2 LEFT JOIN + (SELECT b, max(c)+0 AS c FROM x1 GROUP BY b) + USING(c) + ); +---- +stmt 0 err 1 -1 156 no such table: x2 +==== misc3-7.1 + + BEGIN; + CREATE TABLE y1(a); + CREATE TABLE y2(b); + CREATE TABLE y3(c); + CREATE TRIGGER r1 AFTER DELETE ON y1 FOR EACH ROW BEGIN + INSERT INTO y3(c) SELECT b FROM y2 ORDER BY b LIMIT 1; + END; + INSERT INTO y1 VALUES(1); + INSERT INTO y1 VALUES(2); + INSERT INTO y1 SELECT a+2 FROM y1; + INSERT INTO y1 SELECT a+4 FROM y1; + INSERT INTO y1 SELECT a+8 FROM y1; + INSERT INTO y1 SELECT a+16 FROM y1; + INSERT INTO y2 SELECT a FROM y1; + COMMIT; + SELECT count(*) FROM y1; +---- +stmt 0 ok +stmt 11 ok +stmt 35 ok +stmt 59 ok +stmt 83 err 1 -1 143 no such table: main.y1 +stmt 213 err 1 -1 243 no such table: y1 +stmt 243 err 1 -1 273 no such table: y1 +stmt 273 err 1 -1 312 no such table: y1 +stmt 312 err 1 -1 351 no such table: y1 +stmt 351 err 1 -1 390 no such table: y1 +stmt 390 err 1 -1 430 no such table: y1 +stmt 430 err 1 -1 467 no such table: y2 +stmt 467 ok +stmt 479 err 1 -1 508 no such table: y1 +==== misc3-7.2 + + DELETE FROM y1; + SELECT count(*) FROM y1; +---- +stmt 0 err 1 -1 20 no such table: y1 +stmt 20 err 1 -1 49 no such table: y1 +==== misc3-7.3 + + SELECT count(*) FROM y3; +---- +stmt 0 err 1 -1 29 no such table: y3 +==== misc-8.1 + + SELECT count(CASE WHEN b IN ('abc','xyz') THEN 'x' END) FROM t3 +---- +stmt 0 err 1 -1 71 no such table: t3 +==== misc-8.2 + + SELECT count(*) FROM t3 WHERE 1+(b IN ('abc','xyz'))==2 +---- +stmt 0 err 1 -1 63 no such table: t3 diff --git a/parser/testdata/misc4.metadata.json b/parser/testdata/misc4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/misc4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/misc4.test b/parser/testdata/misc4.test new file mode 100644 index 0000000..1b4f21a --- /dev/null +++ b/parser/testdata/misc4.test @@ -0,0 +1,81 @@ +==== misc4-1.4 + + SELECT * FROM temp.t2; +---- +stmt 0 err 1 -1 29 no such table: temp.t2 +==== misc4-2.4 + + INSERT INTO t3 VALUES(1); +---- +stmt 0 err 1 -1 30 no such table: t3 +==== misc4-3.2 + + SELECT ID, Value FROM Table1 + UNION SELECT ID, max(Value) FROM Table2 GROUP BY 1 + ORDER BY 1, 2; +---- +stmt 0 err 1 -1 116 no such table: Table2 +==== misc4-3.3 + + SELECT ID, Value FROM Table1 + UNION SELECT ID, max(Value) FROM Table2 GROUP BY 1, 2 + ORDER BY 1, 2; +---- +stmt 0 err 1 -1 120 no such table: Table2 +==== misc4-3.4 + + SELECT ID, max(Value) FROM Table2 GROUP BY 1, 2 + UNION SELECT ID, Value FROM Table1 + ORDER BY 1, 2; +---- +stmt 0 err 1 -1 120 no such table: Table1 +==== misc4-4.1 + + create table a(key varchar, data varchar); + create table b(key varchar, period integer); + insert into a values('01','data01'); + insert into a values('+1','data+1'); + + insert into b values ('01',1); + insert into b values ('01',2); + insert into b values ('+1',3); + insert into b values ('+1',4); + + select a.*, x.* + from a, (select key,sum(period) from b group by key) as x + where a.key=x.key order by 1 desc; +---- +stmt 0 ok +stmt 49 ok +stmt 100 err 1 -1 143 no such table: a +stmt 143 err 1 -1 186 no such table: a +stmt 186 err 1 -1 230 no such table: b +stmt 230 err 1 -1 267 no such table: b +stmt 267 err 1 -1 304 no such table: b +stmt 304 err 1 -1 341 no such table: b +stmt 341 err 1 -1 479 no such table: a +==== misc4-6.1 + + CREATE TABLE abc(a); + INSERT INTO abc VALUES(1); + CREATE TABLE def(d, e, f, PRIMARY KEY(d, e)); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: abc +stmt 56 ok +==== misc4-6.2 + + SELECT a FROM abc LEFT JOIN def ON (abc.a=def.d); +---- +stmt 0 err 1 -1 54 no such table: abc +==== misc4-7.2 + + CREATE TABLE t0(a,b); + INSERT INTO t0 VALUES(1,0),(2,0); + UPDATE t0 SET b=9 WHERE a AND (SELECT a FROM t0 WHERE a); + SELECT * FROM t0 ORDER BY +a; +---- +stmt 0 ok +stmt 24 err 1 -1 60 no such table: t0 +stmt 60 err 1 -1 120 no such table: t0 +stmt 120 err 1 -1 152 no such table: t0 diff --git a/parser/testdata/misc5.metadata.json b/parser/testdata/misc5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/misc5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/misc5.test b/parser/testdata/misc5.test new file mode 100644 index 0000000..1d218ee --- /dev/null +++ b/parser/testdata/misc5.test @@ -0,0 +1,168 @@ +==== misc5-2.1 + + create table t2(x unique); + insert into t2 values(1); + insert or ignore into t2 select x*2 from t2; + insert or ignore into t2 select x*4 from t2; + insert or ignore into t2 select x*16 from t2; + insert or ignore into t2 select x*256 from t2; + insert or ignore into t2 select x*65536 from t2; + insert or ignore into t2 select x*2147483648 from t2; + insert or ignore into t2 select x-1 from t2; + insert or ignore into t2 select x+1 from t2; + insert or ignore into t2 select -x from t2; + select count(*) from t2; +---- +stmt 0 ok +stmt 33 err 1 -1 65 no such table: t2 +stmt 65 err 1 -1 116 no such table: t2 +stmt 116 err 1 -1 167 no such table: t2 +stmt 167 err 1 -1 219 no such table: t2 +stmt 219 err 1 -1 272 no such table: t2 +stmt 272 err 1 -1 327 no such table: t2 +stmt 327 err 1 -1 387 no such table: t2 +stmt 387 err 1 -1 438 no such table: t2 +stmt 438 err 1 -1 489 no such table: t2 +stmt 489 err 1 -1 539 no such table: t2 +stmt 539 err 1 -1 570 no such table: t2 +==== misc5-2.1.dup1 + + BEGIN; + create table t2(x unique); + create table t2_temp(x); + insert into t2_temp values(1); + insert into t2_temp select x*2 from t2_temp; + insert into t2_temp select x*4 from t2_temp; + insert into t2_temp select x*16 from t2_temp; + insert into t2_temp select x*256 from t2_temp; + insert into t2_temp select x*65536 from t2_temp; + insert into t2_temp select x*2147483648 from t2_temp; + insert into t2_temp select x-1 from t2_temp; + insert into t2_temp select x+1 from t2_temp; + insert into t2_temp select -x from t2_temp; + INSERT INTO t2 SELECT DISTINCT(x) FROM t2_temp; + DROP TABLE t2_temp; + COMMIT; + select count(*) from t2; +---- +stmt 0 ok +stmt 13 ok +stmt 46 ok +stmt 77 err 1 -1 114 no such table: t2_temp +stmt 114 err 1 -1 165 no such table: t2_temp +stmt 165 err 1 -1 216 no such table: t2_temp +stmt 216 err 1 -1 268 no such table: t2_temp +stmt 268 err 1 -1 321 no such table: t2_temp +stmt 321 err 1 -1 376 no such table: t2_temp +stmt 376 err 1 -1 436 no such table: t2_temp +stmt 436 err 1 -1 487 no such table: t2_temp +stmt 487 err 1 -1 538 no such table: t2_temp +stmt 538 err 1 -1 588 no such table: t2_temp +stmt 588 err 1 -1 642 no such table: t2 +stmt 642 err 1 -1 668 no such table: t2_temp +stmt 668 ok +stmt 682 err 1 -1 713 no such table: t2 +==== misc5-2.2 + + select x from t2 order by x; +---- +stmt 0 err 1 -1 33 no such table: t2 +==== misc5-3.1 + + CREATE TABLE songs(songid, artist, timesplayed); + INSERT INTO songs VALUES(1,'one',1); + INSERT INTO songs VALUES(2,'one',2); + INSERT INTO songs VALUES(3,'two',3); + INSERT INTO songs VALUES(4,'three',5); + INSERT INTO songs VALUES(5,'one',7); + INSERT INTO songs VALUES(6,'two',11); + SELECT DISTINCT artist + FROM ( + SELECT DISTINCT artist + FROM songs + WHERE songid IN ( + SELECT songid + FROM songs + WHERE LOWER(artist) = ( + -- This sub-query is indeterminate. Because there is no ORDER BY, + -- it may return 'one', 'two' or 'three'. Because of this, the + -- outermost parent query may correctly return any of 'one', 'two' + -- or 'three' as well. + SELECT DISTINCT LOWER(artist) + FROM ( + -- This sub-query returns the table: + -- + -- two 14 + -- one 10 + -- three 5 + -- + SELECT DISTINCT artist,sum(timesplayed) AS total + FROM songs + GROUP BY LOWER(artist) + ORDER BY total DESC + LIMIT 10 + ) + WHERE artist <> '' + ) + ) + ) + ORDER BY LOWER(artist) ASC; +---- +stmt 0 ok +stmt 55 err 1 -1 98 no such table: songs +stmt 98 err 1 -1 141 no such table: songs +stmt 141 err 1 -1 184 no such table: songs +stmt 184 err 1 -1 229 no such table: songs +stmt 229 err 1 -1 272 no such table: songs +stmt 272 err 1 -1 316 no such table: songs +stmt 316 err 1 -1 1344 no such table: songs +==== misc5-5.1 +SELECT .1 +---- +stmt 0 ok +==== misc5-5.2 +SELECT 2. +---- +stmt 0 ok +==== misc5-5.3 +SELECT 3.e0 +---- +stmt 0 ok +==== misc5-5.4 +SELECT .4e+1 +---- +stmt 0 ok +==== misc5-6.1 + + SELECT * FROM sqlite_master + UNION ALL + SELECT * FROM sqlite_master + LIMIT (SELECT count(*) FROM blah); +---- +stmt 0 err 1 -1 127 no such table: blah +==== misc5-9.1 + + SELECT name, type FROM sqlite_master WHERE name IS NULL + UNION + SELECT type, name FROM sqlite_master WHERE type IS NULL + ORDER BY 1, 2, 1, 2, 1, 2 +---- +stmt 0 ok +==== misc5-9.2 + + SELECT name, type FROM sqlite_master WHERE name IS NULL + UNION + SELECT type, name FROM sqlite_master WHERE type IS NULL + ORDER BY 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 +---- +stmt 0 ok +==== misc5-10.1 + + SELECT 123abc +---- +stmt 0 err 1 12 12 unrecognized token: "123abc" +==== misc5-10.2 + + SELECT 1*123.4e5ghi; +---- +stmt 0 err 1 14 14 unrecognized token: "123.4e5ghi" diff --git a/parser/testdata/misc7.metadata.json b/parser/testdata/misc7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/misc7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/misc7.test b/parser/testdata/misc7.test new file mode 100644 index 0000000..ace24a4 --- /dev/null +++ b/parser/testdata/misc7.test @@ -0,0 +1,78 @@ +==== misc7-7.2 + + DETACH aux; +---- +stmt 0 ok +==== misc7-9 + + SELECT * + FROM (SELECT name+1 AS one FROM sqlite_master LIMIT 1 OFFSET 1) + WHERE one LIKE 'hello%'; +---- +stmt 0 ok +==== misc7-10.1 + + INSERT INTO t1(a,b,c) VALUES(12345,2,3) ON CONFLICT(a) DO NOTHING; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== misc7-11 + + SELECT t1.a, t2.a FROM t1, t1 AS t2 ORDER BY 2 LIMIT 1; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== misc7-14.0 + + CREATE TABLE abc(a PRIMARY KEY, b, c); +---- +stmt 0 ok +==== misc7-15.2 + + DELETE FROM abc WHERE rowid > 12; + INSERT INTO abc SELECT + randstr(100,100), randstr(100,100), randstr(100,100) FROM abc; +---- +stmt 0 err 1 -1 38 no such table: abc +stmt 38 err 1 -1 141 no such table: abc +==== misc7-16.X + + SELECT count(*) FROM t3; +---- +stmt 0 err 1 -1 29 no such table: t3 +==== misc7-18.1 + + CREATE TABLE table_1 (col_10); + CREATE TABLE table_2 ( + col_1, col_2, col_3, col_4, col_5, + col_6, col_7, col_8, col_9, col_10 + ); + SELECT a.col_10 + FROM + (SELECT table_1.col_10 AS col_10 FROM table_1) a, + (SELECT table_1.col_10, table_2.col_9 AS qcol_9 + FROM table_1, table_2 + GROUP BY table_1.col_10, qcol_9); +---- +stmt 0 ok +stmt 35 ok +stmt 151 err 1 -1 363 no such table: table_1 +==== misc7-22.2 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 23.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t1 +==== 23.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== 23.3 + + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 err 1 -1 33 no such table: t1 diff --git a/parser/testdata/misc8.metadata.json b/parser/testdata/misc8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/misc8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/misc8.test b/parser/testdata/misc8.test new file mode 100644 index 0000000..df99e3e --- /dev/null +++ b/parser/testdata/misc8.test @@ -0,0 +1,145 @@ +==== misc8-1.0 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1,2,3),(4,5,6); + SELECT quote(eval('SELECT * FROM t1 ORDER BY a','-abc-')); +---- +stmt 0 ok +stmt 26 err 1 -1 66 no such table: t1 +stmt 66 err 1 82 127 no such function: eval +==== misc8-1.1 + + SELECT quote(eval('SELECT * FROM t1 ORDER BY a')); +---- +stmt 0 err 1 16 53 no such function: eval +==== misc8-1.2 + + SELECT quote(eval('SELECT d FROM t1 ORDER BY a')); +---- +stmt 0 err 1 16 53 no such function: eval +==== misc8-1.3 + + INSERT INTO t1 VALUES(7,null,9); + SELECT eval('SELECT * FROM t1 ORDER BY a',','); +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 45 85 no such function: eval +==== misc8-1.4 + + BEGIN; + INSERT INTO t1 VALUES(10,11,12); + SELECT a, coalesce(b, eval('ROLLBACK; SELECT ''bam'';')), c + FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 9 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 129 no such table: t1 +==== misc8-1.5 + + INSERT INTO t1 VALUES(10,11,12); + SELECT a, coalesce(b, eval('SELECT ''bam''')), c + FROM t1 + ORDER BY rowid; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 117 no such table: t1 +==== misc8-1.6 + + SELECT a, coalesce(b, eval('DELETE FROM t1; SELECT ''bam''')), c + FROM t1 + ORDER BY rowid; +---- +stmt 0 err 1 -1 98 no such table: t1 +==== misc8-1.7 + + INSERT INTO t1 VALUES(1,2,3),(4,5,6),(7,null,9); + BEGIN; + CREATE TABLE t2(x); + SELECT a, coalesce(b, eval('ROLLBACK; SELECT ''bam''')), c + FROM t1 + ORDER BY rowid; +---- +stmt 0 err 1 -1 51 no such table: t1 +stmt 51 ok +stmt 60 ok +stmt 82 err 1 -1 174 no such table: t1 +==== misc8-1.8 + + PRAGMA empty_result_callbacks = 1; + SELECT eval('SELECT * FROM t1 WHERE 1 = 0;'); +---- +stmt 0 ok +stmt 37 err 1 47 85 no such function: eval +==== misc8-2.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER) WITHOUT ROWID; + CREATE TABLE t2(c INTEGER PRIMARY KEY, d INTEGER, x BLOB); + INSERT INTO t1 VALUES(0,0); + INSERT INTO t1 VALUES(10,10); + INSERT INTO t2 VALUES(1,1,zeroblob(200)); + INSERT INTO t2 VALUES(2,2,zeroblob(200)); + INSERT INTO t2 VALUES(3,3,zeroblob(200)); + INSERT INTO t2 VALUES(4,4,zeroblob(200)); + INSERT INTO t2 VALUES(5,5,zeroblob(200)); + INSERT INTO t2 VALUES(6,6,zeroblob(200)); + INSERT INTO t2 VALUES(7,7,zeroblob(200)); + INSERT INTO t2 VALUES(8,8,zeroblob(200)); + INSERT INTO t2 VALUES(9,9,zeroblob(200)); + INSERT INTO t2 VALUES(10,10,zeroblob(200)); + SELECT a, c, eval( + printf('DELETE FROM t2 WHERE c=%d AND %d>5', a+c, a+c) + ) FROM t1, t2; +---- +stmt 0 ok +stmt 67 ok +stmt 128 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 234 no such table: t2 +stmt 234 err 1 -1 278 no such table: t2 +stmt 278 err 1 -1 322 no such table: t2 +stmt 322 err 1 -1 366 no such table: t2 +stmt 366 err 1 -1 410 no such table: t2 +stmt 410 err 1 -1 454 no such table: t2 +stmt 454 err 1 -1 498 no such table: t2 +stmt 498 err 1 -1 542 no such table: t2 +stmt 542 err 1 -1 586 no such table: t2 +stmt 586 err 1 -1 632 no such table: t2 +stmt 632 err 1 -1 731 no such table: t1 +==== misc8-3.0 + + SELECT * + FROM + ( + (SELECT 0 AS i) AS x1, + (SELECT 1) AS x2 + ) AS x3, + (SELECT 6 AS j UNION ALL SELECT 7) AS x4 + WHERE i0 then 1 else 0 end, 99) from t1; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== null-2.2 + + select ifnull(case when not b<>0 then 1 else 0 end, 99) from t1; +---- +stmt 0 err 1 -1 69 no such table: t1 +==== null-2.3 + + select ifnull(case when b<>0 and c<>0 then 1 else 0 end, 99) from t1; +---- +stmt 0 err 1 -1 74 no such table: t1 +==== null-2.4 + + select ifnull(case when not (b<>0 and c<>0) then 1 else 0 end, 99) from t1; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== null-2.5 + + select ifnull(case when b<>0 or c<>0 then 1 else 0 end, 99) from t1; +---- +stmt 0 err 1 -1 73 no such table: t1 +==== null-2.6 + + select ifnull(case when not (b<>0 or c<>0) then 1 else 0 end, 99) from t1; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== null-2.7 + + select ifnull(case b when c then 1 else 0 end, 99) from t1; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== null-2.8 + + select ifnull(case c when b then 1 else 0 end, 99) from t1; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== null-3.1 + + select count(*), count(b), count(c), sum(b), sum(c), + avg(b), avg(c), min(b), max(b) from t1; +---- +stmt 0 err 1 -1 109 no such table: t1 +==== null-3.2 + + SELECT sum(b), total(b) FROM t1 WHERE b<0 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== null-4.1 + + select a from t1 where b<10 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== null-4.2 + + select a from t1 where not b>10 +---- +stmt 0 err 1 -1 37 no such table: t1 +==== null-4.3 + + select a from t1 where b<10 or c=1; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== null-4.4 + + select a from t1 where b<10 and c=1; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== null-4.5 + + select a from t1 where not (b<10 and c=1); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== null-5.1 + + select distinct b from t1 order by b; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== null-6.1 + + select b from t1 union select c from t1 order by b; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== null-6.2 + + select b from t1 union select c from t1 order by 1; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== null-6.3 + + select b from t1 union select c from t1 order by t1.b; +---- +stmt 0 err 1 -1 61 no such table: t1 +==== null-6.4 + + select b from t1 union select c from t1 order by main.t1.b; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== null-6.5 + + select b from t1 union select c from t1 order by t1.a; +---- +stmt 0 err 1 -1 61 no such table: t1 +==== null-6.6 + + select b from t1 union select c from t1 order by main.t1.a; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== null-7.1 + + create table t2(a, b unique on conflict ignore); + insert into t2 values(1,1); + insert into t2 values(2,null); + insert into t2 values(3,null); + insert into t2 values(4,1); + select a from t2; +---- +stmt 0 ok +stmt 55 err 1 -1 89 no such table: t2 +stmt 89 err 1 -1 126 no such table: t2 +stmt 126 err 1 -1 163 no such table: t2 +stmt 163 err 1 -1 197 no such table: t2 +stmt 197 err 1 -1 221 no such table: t2 +==== null-7.2 + + create table t3(a, b, c, unique(b,c) on conflict ignore); + insert into t3 values(1,1,1); + insert into t3 values(2,null,1); + insert into t3 values(3,null,1); + insert into t3 values(4,1,1); + select a from t3; +---- +stmt 0 ok +stmt 64 err 1 -1 100 no such table: t3 +stmt 100 err 1 -1 139 no such table: t3 +stmt 139 err 1 -1 178 no such table: t3 +stmt 178 err 1 -1 214 no such table: t3 +stmt 214 err 1 -1 238 no such table: t3 +==== null-8.1 + + CREATE TABLE t4(x,y); + INSERT INTO t4 VALUES(1,11); + INSERT INTO t4 VALUES(2,NULL); + SELECT x FROM t4 WHERE y=NULL; +---- +stmt 0 ok +stmt 26 err 1 -1 59 no such table: t4 +stmt 59 err 1 -1 94 no such table: t4 +stmt 94 err 1 -1 129 no such table: t4 +==== null-8.2 + + SELECT x FROM t4 WHERE y IN (33,NULL); +---- +stmt 0 err 1 -1 45 no such table: t4 +==== null-8.3 + + SELECT x FROM t4 WHERE y<33 ORDER BY x; +---- +stmt 0 err 1 -1 44 no such table: t4 +==== null-8.4 + + SELECT x FROM t4 WHERE y>6 ORDER BY x; +---- +stmt 0 err 1 -1 43 no such table: t4 +==== null-8.5 + + SELECT x FROM t4 WHERE y!=33 ORDER BY x; +---- +stmt 0 err 1 -1 45 no such table: t4 +==== null-8.11 + + CREATE INDEX t4i1 ON t4(y); + SELECT x FROM t4 WHERE y=NULL; +---- +stmt 0 err 1 -1 32 no such table: main.t4 +stmt 32 err 1 -1 67 no such table: t4 +==== null-8.12 + + SELECT x FROM t4 WHERE y IN (33,NULL); +---- +stmt 0 err 1 -1 45 no such table: t4 +==== null-8.13 + + SELECT x FROM t4 WHERE y<33 ORDER BY x; +---- +stmt 0 err 1 -1 44 no such table: t4 +==== null-8.14 + + SELECT x FROM t4 WHERE y>6 ORDER BY x; +---- +stmt 0 err 1 -1 43 no such table: t4 +==== null-8.15 + + SELECT x FROM t4 WHERE y!=33 ORDER BY x; +---- +stmt 0 err 1 -1 45 no such table: t4 +==== null-9.1 + + CREATE TABLE t5(a, b, c); + CREATE UNIQUE INDEX t5ab ON t5(a, b); + + INSERT INTO t5 VALUES(1, NULL, 'one'); + INSERT INTO t5 VALUES(1, NULL, 'i'); + INSERT INTO t5 VALUES(NULL, 'x', 'two'); + INSERT INTO t5 VALUES(NULL, 'x', 'ii'); +---- +stmt 0 ok +stmt 28 err 1 -1 68 no such table: main.t5 +stmt 68 err 1 -1 110 no such table: t5 +stmt 110 err 1 -1 149 no such table: t5 +stmt 149 err 1 -1 192 no such table: t5 +stmt 192 err 1 -1 234 no such table: t5 +==== null-9.2 + + SELECT * FROM t5 WHERE a = 1 AND b IS NULL; +---- +stmt 0 err 1 -1 46 no such table: t5 +==== null-9.3 + + SELECT * FROM t5 WHERE a IS NULL AND b = 'x'; +---- +stmt 0 err 1 -1 48 no such table: t5 +==== null-10.1 + + CREATE TABLE t0(c0 PRIMARY KEY DESC); + INSERT INTO t0(c0) VALUES (0); + SELECT * FROM t0 WHERE t0.c0 > NULL; +---- +stmt 0 ok +stmt 40 err 1 -1 73 no such table: t0 +stmt 73 err 1 -1 112 no such table: t0 diff --git a/parser/testdata/nulls1.metadata.json b/parser/testdata/nulls1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/nulls1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/nulls1.test b/parser/testdata/nulls1.test new file mode 100644 index 0000000..835188b --- /dev/null +++ b/parser/testdata/nulls1.test @@ -0,0 +1,277 @@ +==== 1.0 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(a INTEGER); + INSERT INTO t3 VALUES(NULL), (10), (30), (20), (NULL); +---- +stmt 0 ok +stmt 27 ok +stmt 57 err 1 -1 114 no such table: t3 +==== 2.0 + + CREATE TABLE t2(a, b, c); + CREATE INDEX i2 ON t2(a, b); + INSERT INTO t2 VALUES(1, 1, 1); + INSERT INTO t2 VALUES(1, NULL, 2); + INSERT INTO t2 VALUES(1, NULL, 3); + INSERT INTO t2 VALUES(1, 4, 4); +---- +stmt 0 ok +stmt 28 err 1 -1 59 no such table: main.t2 +stmt 59 err 1 -1 93 no such table: t2 +stmt 93 err 1 -1 130 no such table: t2 +stmt 130 err 1 -1 167 no such table: t2 +stmt 167 err 1 -1 201 no such table: t2 +==== 2.1 + + SELECT * FROM t2 WHERE a=1 ORDER BY b NULLS LAST +---- +stmt 0 err 1 -1 52 no such table: t2 +==== 2.2 + + SELECT * FROM t2 WHERE a=1 ORDER BY b DESC NULLS FIRST +---- +stmt 0 err 1 -1 58 no such table: t2 +==== 3.0 + + CREATE TABLE t1(a, b, c, d, UNIQUE (b)); +---- +stmt 0 ok +==== 3.2 + + CREATE TABLE first(nulls, last); + INSERT INTO first(last, nulls) VALUES(100,200), (300,400), (200,300); + SELECT * FROM first ORDER BY nulls; +---- +stmt 0 ok +stmt 35 err 1 -1 107 no such table: first +stmt 107 err 1 -1 145 no such table: first +==== 4.0 + + CREATE TABLE tx(a INTEGER PRIMARY KEY, b, c); + CREATE INDEX i1 ON tx(b); + INSERT INTO tx VALUES(1, 1, 1); + INSERT INTO tx VALUES(2, NULL, 2); + INSERT INTO tx VALUES(3, 3, 3); + INSERT INTO tx VALUES(4, NULL, 4); + INSERT INTO tx VALUES(5, 5, 5); + CREATE VIRTUAL TABLE te USING echo(tx); +---- +stmt 0 ok +stmt 50 err 1 -1 80 no such table: main.tx +stmt 80 err 1 -1 116 no such table: tx +stmt 116 err 1 -1 155 no such table: tx +stmt 155 err 1 -1 191 no such table: tx +stmt 191 err 1 -1 230 no such table: tx +stmt 230 err 1 -1 266 no such table: tx +stmt 266 ok +==== 4.1 + + SELECT * FROM tx ORDER BY b NULLS FIRST; +---- +stmt 0 err 1 -1 45 no such table: tx +==== 4.2 + + SELECT * FROM te ORDER BY b NULLS FIRST; +---- +stmt 0 err 1 -1 45 no such table: te +==== 4.3 + + SELECT * FROM tx ORDER BY b NULLS LAST; +---- +stmt 0 err 1 -1 44 no such table: tx +==== 4.4 + + SELECT * FROM te ORDER BY b NULLS LAST; +---- +stmt 0 err 1 -1 44 no such table: te +==== 5.0 + + CREATE TABLE t4(a, b, c); + INSERT INTO t4 VALUES(1, 1, 11); + INSERT INTO t4 VALUES(1, 2, 12); + INSERT INTO t4 VALUES(1, NULL, 1); + + INSERT INTO t4 VALUES(2, NULL, 1); + INSERT INTO t4 VALUES(2, 2, 12); + INSERT INTO t4 VALUES(2, 1, 11); + + INSERT INTO t4 VALUES(3, NULL, 1); + INSERT INTO t4 VALUES(3, 2, 12); + INSERT INTO t4 VALUES(3, NULL, 3); +---- +stmt 0 ok +stmt 28 err 1 -1 63 no such table: t4 +stmt 63 err 1 -1 98 no such table: t4 +stmt 98 err 1 -1 135 no such table: t4 +stmt 135 err 1 -1 173 no such table: t4 +stmt 173 err 1 -1 208 no such table: t4 +stmt 208 err 1 -1 243 no such table: t4 +stmt 243 err 1 -1 281 no such table: t4 +stmt 281 err 1 -1 316 no such table: t4 +stmt 316 err 1 -1 353 no such table: t4 +==== 5.1 + + SELECT * FROM t4 WHERE a IN (1, 2, 3) ORDER BY a, b NULLS LAST +---- +stmt 0 err 1 -1 66 no such table: t4 +==== 5.2 + + CREATE INDEX t4ab ON t4(a, b); + SELECT * FROM t4 WHERE a IN (1, 2, 3) ORDER BY a, b NULLS LAST +---- +stmt 0 err 1 -1 33 no such table: main.t4 +stmt 33 err 1 -1 99 no such table: t4 +==== 5.4 + + SELECT * FROM t4 WHERE a IN (1, 2, 3) ORDER BY a DESC, b DESC NULLS FIRST +---- +stmt 0 err 1 -1 77 no such table: t4 +==== 6.0 + + CREATE TABLE t5(a, b, c); + WITH s(i) AS ( + VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<200 + ) + INSERT INTO t5 SELECT i%2, CASE WHEN (i%10)==0 THEN NULL ELSE i END, i FROM s; +---- +stmt 0 ok +stmt 28 err 1 -1 185 no such table: t5 +==== 6.1.1 + + CREATE INDEX t5ab ON t5(a, b, c); + SELECT a,b FROM t5 WHERE a=1 ORDER BY b NULLS LAST, c; +---- +stmt 0 err 1 -1 36 no such table: main.t5 +stmt 36 err 1 -1 93 no such table: t5 +==== 6.2.1 + + SELECT a,b FROM t5 WHERE a=1 ORDER BY b DESC NULLS FIRST, c DESC +---- +stmt 0 err 1 -1 68 no such table: t5 +==== 7.0 + + CREATE TABLE t71(a, b, c); + CREATE INDEX t71abc ON t71(a, b, c); + + SELECT * FROM t71 WHERE a=1 AND b=2 ORDER BY c NULLS LAST; + SELECT * FROM t71 WHERE a=1 AND b=2 ORDER BY c DESC NULLS FIRST; + + SELECT * FROM t71 ORDER BY a NULLS LAST; + SELECT * FROM t71 ORDER BY a DESC NULLS FIRST; +---- +stmt 0 ok +stmt 29 err 1 -1 68 no such table: main.t71 +stmt 68 err 1 -1 130 no such table: t71 +stmt 130 err 1 -1 197 no such table: t71 +stmt 197 err 1 -1 241 no such table: t71 +stmt 241 err 1 -1 290 no such table: t71 +==== 8.0 + + CREATE TABLE t80(a, b INTEGER, PRIMARY KEY(b NULLS LAST)) WITHOUT ROWID; +---- +stmt 0 err 1 -1 60 unsupported use of NULLS LAST +==== 9.0 + + CREATE TABLE v0 (c1, c2, c3); + CREATE INDEX v3 ON v0 (c1, c2, c3); +---- +stmt 0 ok +stmt 32 err 1 -1 70 no such table: main.v0 +==== 9.1 + + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('v0','v3','648 324 81'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 25 err 1 -1 84 no such table: sqlite_stat1 +stmt 84 ok +==== 9.2 + + INSERT INTO v0 VALUES + (1, 10, 'b'), + (1, 10, 'd'), + (1, 10, NULL), + (2, 10, 'a'), + (2, 10, NULL), + (1, 10, 'c'), + (2, 10, 'b'), + (1, 10, 'a'), + (1, 10, NULL), + (2, 10, NULL), + (2, 10, 'd'), + (2, 10, 'c'); +---- +stmt 0 err 1 -1 268 no such table: v0 +==== 9.3 + + SELECT c1, c2, ifnull(c3, 'NULL') FROM v0 + WHERE c2=10 ORDER BY c1, c3 NULLS LAST +---- +stmt 0 err 1 -1 87 no such table: v0 +==== 10.10 + + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES('X'); + CREATE TABLE t2(c, d); + CREATE INDEX t2dc ON t2(d, c); + SELECT c FROM t1 LEFT JOIN t2 ON d=NULL ORDER BY d, c NULLS LAST; +---- +stmt 0 ok +stmt 22 err 1 -1 55 no such table: t1 +stmt 55 ok +stmt 80 err 1 -1 113 no such table: main.t2 +stmt 113 err 1 -1 181 no such table: t1 +==== 10.20 + + INSERT INTO t2(c,d) VALUES(5,'X'),(6,'Y'),(7,'Z'),(3,'A'),(4,'B'); + SELECT c FROM t1 LEFT JOIN t2 ON d=x ORDER BY d, c NULLS LAST; +---- +stmt 0 err 1 -1 69 no such table: t2 +stmt 69 err 1 -1 134 no such table: t1 +==== 10.30 + + UPDATE t2 SET d='X'; + UPDATE t2 SET c=NULL WHERE c=6; + SELECT c FROM t1 LEFT JOIN t2 ON d=x ORDER BY d NULLS FIRST, c NULLS FIRST; +---- +stmt 0 err 1 -1 23 no such table: t2 +stmt 23 err 1 -1 57 no such table: t2 +stmt 57 err 1 -1 135 no such table: t1 +==== 10.40 + + SELECT c FROM t1 LEFT JOIN t2 ON d=x ORDER BY d NULLS LAST, c NULLS LAST; +---- +stmt 0 err 1 -1 76 no such table: t1 +==== 10.41 + + SELECT c FROM t1 LEFT JOIN t2 ON d=x ORDER BY c NULLS LAST; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== 10.42 + + SELECT c FROM t1 LEFT JOIN t2 ON d=x ORDER BY +d NULLS LAST, +c NULLS LAST; +---- +stmt 0 err 1 -1 78 no such table: t1 +==== 10.50 + + INSERT INTO t1(x) VALUES(NULL),('Y'); + SELECT x, c, d, '|' FROM t1 LEFT JOIN t2 ON d=x + ORDER BY d NULLS LAST, c NULLS LAST; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 130 no such table: t1 +==== 10.51 + + SELECT x, c, d, '|' FROM t1 LEFT JOIN t2 ON d=x + ORDER BY +d NULLS LAST, +c NULLS LAST; +---- +stmt 0 err 1 -1 92 no such table: t1 +==== nulls1-generated + + CREATE TABLE t1(a TEXT COLLATE NOCASE, b TEXT); + INSERT INTO t1 VALUES('Hello', 'world'); +---- +stmt 0 ok +stmt 52 err 1 -1 97 no such table: t1 diff --git a/parser/testdata/nulls2.metadata.json b/parser/testdata/nulls2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/nulls2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/nulls2.test b/parser/testdata/nulls2.test new file mode 100644 index 0000000..8a17847 --- /dev/null +++ b/parser/testdata/nulls2.test @@ -0,0 +1,40 @@ +==== nulls2-generated + + CREATE TABLE t1(a, b, c); + + INSERT INTO t1 VALUES(1, 1, NULL); + INSERT INTO t1 VALUES(2, 2, NULL); + + CREATE TABLE t2(d NOT NULL, e NOT NULL, f); + INSERT INTO t2 VALUES(1, 1, NULL); + INSERT INTO t2 VALUES(2, 2, NULL); +---- +stmt 0 ok +stmt 30 err 1 -1 70 no such table: t1 +stmt 70 err 1 -1 109 no such table: t1 +stmt 109 ok +stmt 158 err 1 -1 197 no such table: t2 +stmt 197 err 1 -1 236 no such table: t2 +==== nulls2-generated.dup1 + + SELECT rowid FROM t2 WHERE (d, e, f) IN ( + SELECT a, b, c FROM t1 + ) +---- +stmt 0 err 1 -1 84 no such table: t2 +==== nulls2-generated.dup2 + + CREATE TABLE t1(a, b, c COLLATE nocase); + INSERT INTO t1 VALUES('one', 'two', 'THREE'); + INSERT INTO t1 VALUES('four', 'five', 'SIX'); +---- +stmt 0 ok +stmt 45 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 145 no such table: t1 +==== nulls2-generated.dup3 + + SELECT (NULL, 'two', 'three') IN ( + SELECT a, b, c FROM t1 + ) IS NULL +---- +stmt 0 err 1 -1 85 no such table: t1 diff --git a/parser/testdata/numindex1.metadata.json b/parser/testdata/numindex1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/numindex1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/numindex1.test b/parser/testdata/numindex1.test new file mode 100644 index 0000000..b0d68b0 --- /dev/null +++ b/parser/testdata/numindex1.test @@ -0,0 +1,89 @@ +==== numindex1-1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + CREATE INDEX t1b ON t1(b); + INSERT INTO t1(a,b) VALUES(100, 356282677878746339); + INSERT INTO t1(a,b) VALUES(50, 356282677878746339.0); + INSERT INTO t1(a,b) VALUES(0, 356282677878746340); + DELETE FROM t1 WHERE a=50; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 45 err 1 -1 74 no such table: main.t1 +stmt 74 err 1 -1 129 no such table: t1 +stmt 129 err 1 -1 185 no such table: t1 +stmt 185 err 1 -1 238 no such table: t1 +stmt 238 err 1 -1 267 no such table: t1 +stmt 267 ok +==== numindex1-1.2 + + CREATE TABLE t2(a,b); + INSERT INTO t2(a,b) VALUES('b', 1<<58), + ('c', (1<<58)+1e-7), ('d', (1<<58)+1); + SELECT a, b, typeof(b), '|' FROM t2 ORDER BY +a; +---- +stmt 0 ok +stmt 24 err 1 -1 111 no such table: t2 +stmt 111 err 1 -1 162 no such table: t2 +==== numindex1-1.3 + + SELECT x.a || CASE WHEN x.b==y.b THEN '==' ELSE '<>' END || y.a + FROM t2 AS x, t2 AS y + ORDER BY +x.a, +x.b; +---- +stmt 0 err 1 -1 116 no such table: t2 +==== numindex1-2.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY,b); + CREATE INDEX t1b ON t1(b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b) SELECT x, 10000000000000004.0 FROM c + WHERE x NOT IN (23,37); + INSERT INTO t1(a,b) VALUES(23,10000000000000005); + INSERT INTO t1(a,b) VALUES(37,10000000000000003); + DELETE FROM t1 WHERE a NOT IN (23,37); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 27 ok +stmt 71 err 1 -1 100 no such table: main.t1 +stmt 100 err 1 -1 263 no such table: t1 +stmt 263 err 1 -1 315 no such table: t1 +stmt 315 err 1 -1 367 no such table: t1 +stmt 367 err 1 -1 408 no such table: t1 +stmt 408 ok +==== numindex1-3.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY,b); + CREATE INDEX t1b ON t1(b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<20) + INSERT INTO t1(a,b) SELECT x, 100000000000000005.0 + FROM c WHERE x NOT IN (3,5,7,11,13,17,19); + INSERT INTO t1(a,b) VALUES(3,100000000000000005); + INSERT INTO t1(a,b) VALUES(5,100000000000000000); + INSERT INTO t1(a,b) VALUES(7,100000000000000008); + INSERT INTO t1(a,b) VALUES(11,100000000000000006); + INSERT INTO t1(a,b) VALUES(13,100000000000000001); + INSERT INTO t1(a,b) VALUES(17,100000000000000004); + INSERT INTO t1(a,b) VALUES(19,100000000000000003); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 27 ok +stmt 71 err 1 -1 100 no such table: main.t1 +stmt 100 err 1 -1 276 no such table: t1 +stmt 276 err 1 -1 328 no such table: t1 +stmt 328 err 1 -1 380 no such table: t1 +stmt 380 err 1 -1 432 no such table: t1 +stmt 432 err 1 -1 485 no such table: t1 +stmt 485 err 1 -1 538 no such table: t1 +stmt 538 err 1 -1 591 no such table: t1 +stmt 591 err 1 -1 644 no such table: t1 +stmt 644 ok +==== numindex1-3.2 + + SELECT a FROM t1 ORDER BY b; +---- +stmt 0 err 1 -1 31 no such table: t1 diff --git a/parser/testdata/offset1.metadata.json b/parser/testdata/offset1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/offset1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/offset1.test b/parser/testdata/offset1.test new file mode 100644 index 0000000..4963667 --- /dev/null +++ b/parser/testdata/offset1.test @@ -0,0 +1,232 @@ +==== offset1-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'); + CREATE TABLE t2(x,y); + INSERT INTO t2 VALUES(8,'y'),(9,'z'),(6,'w'),(7,'x'); + SELECT count(*) FROM t1, t2; +---- +stmt 0 ok +stmt 24 err 1 -1 88 no such table: t1 +stmt 88 ok +stmt 112 err 1 -1 168 no such table: t2 +stmt 168 err 1 -1 199 no such table: t1 +==== offset1-1.2.0 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 0; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.2.1 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.2.2 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 2; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.2.3 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 3; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.2.4 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 4; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.2.5 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 5; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.2.6 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 6; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.2.7 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 7; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.2.8 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 8; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.2.9 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 9; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.3.0 + + SELECT * FROM t1 LIMIT 0; +---- +stmt 0 err 1 -1 28 no such table: t1 +==== offset1-1.4.0 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 0 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.4.1 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 1 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.4.2 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 2 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.4.3 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 3 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.4.4 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 4 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.4.5 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 5 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.4.6 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 6 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.4.7 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 7 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.4.8 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 8 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-1.4.9 + + SELECT a, b FROM t1 + UNION ALL + SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) + LIMIT 9 OFFSET 1; +---- +stmt 0 err 1 -1 103 no such table: t2 +==== offset1-2.0 + + CREATE TABLE employees ( + id integer primary key, + name text, + city text, + department text, + salary integer + ); + INSERT INTO employees VALUES + (11,'Diane','London','hr',70), + (12,'Bob','London','hr',78), + (21,'Emma','London','it',84), + (22,'Grace','Berlin','it',90), + (23,'Henry','London','it',104), + (24,'Irene','Berlin','it',104), + (25,'Frank','Berlin','it',120), + (31,'Cindy','Berlin','sales',96), + (32,'Dave','London','sales',96), + (33,'Alice','Berlin','sales',100); + CREATE VIEW v AS + SELECT * FROM ( + SELECT * FROM employees + WHERE salary < 100 + ORDER BY salary desc) + UNION ALL + SELECT * FROM ( + SELECT * FROM employees + WHERE salary >= 100 + ORDER BY salary asc); +---- +stmt 0 ok +stmt 130 err 1 -1 520 no such table: employees +stmt 520 ok +==== offset1-2.1 + + SELECT * FROM v ORDER BY +id; +---- +stmt 0 err 1 -1 32 no such table: v +==== offset1-2.2 + + SELECT * FROM v LIMIT 5 OFFSET 2; +---- +stmt 0 err 1 -1 36 no such table: v +==== offset1-2.3 + + SELECT * FROM v LIMIT 3 OFFSET 6; +---- +stmt 0 err 1 -1 36 no such table: v +==== offset1-2.4 + + SELECT * FROM v LIMIT 3 OFFSET 1; +---- +stmt 0 err 1 -1 36 no such table: v diff --git a/parser/testdata/openv2.metadata.json b/parser/testdata/openv2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/openv2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/openv2.test b/parser/testdata/openv2.test new file mode 100644 index 0000000..abd6ebe --- /dev/null +++ b/parser/testdata/openv2.test @@ -0,0 +1,9 @@ +==== openv2-1.4 + + INSERT INTO t1 VALUES(123) +---- +stmt 0 err 1 -1 32 no such table: t1 +==== openv2-2.2 +CREATE TABLE t1(x) +---- +stmt 0 ok diff --git a/parser/testdata/orderby1.metadata.json b/parser/testdata/orderby1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/orderby1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/orderby1.test b/parser/testdata/orderby1.test new file mode 100644 index 0000000..d8c50f2 --- /dev/null +++ b/parser/testdata/orderby1.test @@ -0,0 +1,95 @@ +==== 5.1 + + EXPLAIN QUERY PLAN SELECT 5 UNION ALL SELECT 3 ORDER BY 1 +---- +stmt 0 ok +==== 5.2 + + SELECT 5 UNION ALL SELECT 3 ORDER BY 1 +---- +stmt 0 ok +==== 5.3 + + SELECT 986 AS x GROUP BY X ORDER BY X +---- +stmt 0 ok +==== 6.0 + + CREATE TABLE abc(a, b, c); + INSERT INTO abc VALUES(1, 2, 3); + INSERT INTO abc VALUES(4, 5, 6); + INSERT INTO abc VALUES(7, 8, 9); + SELECT ( + SELECT 'hardware' FROM ( + SELECT 'software' ORDER BY 'firmware' ASC, 'sportswear' DESC + ) GROUP BY 1 HAVING length(b) + ) + FROM abc; +---- +stmt 0 ok +stmt 29 err 1 -1 64 no such table: abc +stmt 64 err 1 -1 99 no such table: abc +stmt 99 err 1 -1 134 no such table: abc +stmt 134 err 1 -1 293 no such table: abc +==== 7.0 + + CREATE TABLE t7(a,b); + CREATE INDEX t7a ON t7(a); + CREATE INDEX t7ab ON t7(a,b); + EXPLAIN QUERY PLAN + SELECT * FROM t7 WHERE a=?1 ORDER BY rowid; +---- +stmt 0 ok +stmt 24 err 1 -1 53 no such table: main.t7 +stmt 53 err 1 -1 85 no such table: main.t7 +stmt 85 err 1 -1 152 no such table: t7 +==== 8.0 + + PRAGMA cache_size = 5; + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 78 no such table: main.t1 +==== 8.2 + + WITH cnt(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM cnt WHERE i<10000 + ) + INSERT INTO t1 SELECT i%2, randomblob(500) FROM cnt; +---- +stmt 0 err 1 -1 135 no such table: t1 +==== 9.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(1),(2); + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(y); + INSERT INTO t2 VALUES(9),(8),(3),(4); + SELECT (SELECT x||y FROM t2, t1 ORDER BY x, y); +---- +stmt 0 ok +stmt 27 ok +stmt 69 err 1 -1 101 no such table: t1 +stmt 101 ok +stmt 128 ok +stmt 150 err 1 -1 190 no such table: t2 +stmt 190 err 1 -1 240 no such table: t2 +==== 10.0 + + CREATE TABLE t10(a,b); + INSERT INTO t10 VALUES(1,2),(8,9),(3,4),(5,4),(0,7); + CREATE INDEX t10b ON t10(b); + SELECT b, rowid, '^' FROM t10 ORDER BY b, a LIMIT 4; +---- +stmt 0 ok +stmt 25 err 1 -1 80 no such table: t10 +stmt 80 err 1 -1 111 no such table: main.t10 +stmt 111 err 1 -1 166 no such table: t10 +==== 11.0 + + VALUES(2) EXCEPT SELECT '' ORDER BY abc +---- +stmt 0 err 1 -1 43 1st ORDER BY term does not match any column in the result set diff --git a/parser/testdata/orderby3.metadata.json b/parser/testdata/orderby3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/orderby3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/orderby3.test b/parser/testdata/orderby3.test new file mode 100644 index 0000000..8769b6f --- /dev/null +++ b/parser/testdata/orderby3.test @@ -0,0 +1,134 @@ +==== 1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY); + CREATE TABLE t2(b INTEGER PRIMARY KEY, c INTEGER); + CREATE TABLE t3(d INTEGER); + + INSERT INTO t1 VALUES(1),(2),(3); + + INSERT INTO t2 VALUES(3, 1); + INSERT INTO t2 VALUES(4, 2); + INSERT INTO t2 VALUES(5, 3); + + INSERT INTO t3 VALUES(4),(3),(5); +---- +stmt 0 ok +stmt 42 ok +stmt 95 ok +stmt 125 err 1 -1 166 no such table: t1 +stmt 166 err 1 -1 202 no such table: t2 +stmt 202 err 1 -1 233 no such table: t2 +stmt 233 err 1 -1 264 no such table: t2 +stmt 264 err 1 -1 305 no such table: t3 +==== 1.1.asc + + SELECT t1.a + FROM t1, t2, t3 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a; +---- +stmt 0 err 1 -1 85 no such table: t1 +==== 1.1.desc + + SELECT t1.a + FROM t1, t2, t3 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a DESC; +---- +stmt 0 err 1 -1 90 no such table: t1 +==== 1.123.asc + + SELECT t1.a + FROM t1 CROSS JOIN t2 CROSS JOIN t3 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a; +---- +stmt 0 err 1 -1 105 no such table: t1 +==== 1.123.desc + + SELECT t1.a + FROM t1 CROSS JOIN t2 CROSS JOIN t3 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a DESC; +---- +stmt 0 err 1 -1 110 no such table: t1 +==== 1.132.asc + + SELECT t1.a + FROM t1 CROSS JOIN t3 CROSS JOIN t2 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a; +---- +stmt 0 err 1 -1 105 no such table: t1 +==== 1.132.desc + + SELECT t1.a + FROM t1 CROSS JOIN t3 CROSS JOIN t2 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a DESC; +---- +stmt 0 err 1 -1 110 no such table: t1 +==== 1.213.asc + + SELECT t1.a + FROM t2 CROSS JOIN t1 CROSS JOIN t3 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a; +---- +stmt 0 err 1 -1 105 no such table: t2 +==== 1.213.desc + + SELECT t1.a + FROM t2 CROSS JOIN t1 CROSS JOIN t3 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a DESC; +---- +stmt 0 err 1 -1 110 no such table: t2 +==== 1.231.asc + + SELECT t1.a + FROM t2 CROSS JOIN t3 CROSS JOIN t1 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a; +---- +stmt 0 err 1 -1 105 no such table: t2 +==== 1.231.desc + + SELECT t1.a + FROM t2 CROSS JOIN t3 CROSS JOIN t1 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a DESC; +---- +stmt 0 err 1 -1 110 no such table: t2 +==== 1.312.asc + + SELECT t1.a + FROM t3 CROSS JOIN t1 CROSS JOIN t2 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a; +---- +stmt 0 err 1 -1 105 no such table: t3 +==== 1.312.desc + + SELECT t1.a + FROM t3 CROSS JOIN t1 CROSS JOIN t2 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a DESC; +---- +stmt 0 err 1 -1 110 no such table: t3 +==== 1.321.asc + + SELECT t1.a + FROM t3 CROSS JOIN t2 CROSS JOIN t1 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a; +---- +stmt 0 err 1 -1 105 no such table: t3 +==== 1.321.desc + + SELECT t1.a + FROM t3 CROSS JOIN t2 CROSS JOIN t1 + WHERE t1.a=t2.c AND t2.b=t3.d + ORDER BY t1.a DESC; +---- +stmt 0 err 1 -1 110 no such table: t3 diff --git a/parser/testdata/orderby4.metadata.json b/parser/testdata/orderby4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/orderby4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/orderby4.test b/parser/testdata/orderby4.test new file mode 100644 index 0000000..ff060aa --- /dev/null +++ b/parser/testdata/orderby4.test @@ -0,0 +1,50 @@ +==== 1.1 + + CREATE TABLE t1(a, b, PRIMARY KEY(a,b)); + INSERT INTO t1 VALUES(1,1),(1,2); + CREATE TABLE t2(x, y, PRIMARY KEY(x,y)); + INSERT INTO t2 VALUES(3,3),(4,4); + SELECT a, x FROM t1, t2 ORDER BY 1, 2; +---- +stmt 0 ok +stmt 43 err 1 -1 79 no such table: t1 +stmt 79 ok +stmt 122 err 1 -1 158 no such table: t2 +stmt 158 err 1 -1 199 no such table: t1 +==== 1.2 + + SELECT a, x FROM t1 CROSS JOIN t2 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 1.3 + + SELECT a, x FROM t2 CROSS JOIN t1 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 51 no such table: t2 +==== 2.1 + + CREATE TABLE t3(a); + INSERT INTO t3 VALUES(1),(1); + CREATE INDEX t3a ON t3(a); + CREATE TABLE t4(x); + INSERT INTO t4 VALUES(3),(4); + CREATE INDEX t4x ON t4(x); + SELECT a, x FROM t3, t4 ORDER BY 1, 2; +---- +stmt 0 ok +stmt 22 err 1 -1 54 no such table: t3 +stmt 54 err 1 -1 83 no such table: main.t3 +stmt 83 ok +stmt 105 err 1 -1 137 no such table: t4 +stmt 137 err 1 -1 166 no such table: main.t4 +stmt 166 err 1 -1 207 no such table: t3 +==== 2.2 + + SELECT a, x FROM t3 CROSS JOIN t4 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 51 no such table: t3 +==== 2.3 + + SELECT a, x FROM t4 CROSS JOIN t3 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 51 no such table: t4 diff --git a/parser/testdata/orderby5.metadata.json b/parser/testdata/orderby5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/orderby5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/orderby5.test b/parser/testdata/orderby5.test new file mode 100644 index 0000000..2bab75b --- /dev/null +++ b/parser/testdata/orderby5.test @@ -0,0 +1,225 @@ +==== 1.1 + + CREATE TABLE t1(a,b,c); + CREATE INDEX t1bc ON t1(b,c); + + EXPLAIN QUERY PLAN + SELECT DISTINCT a, b, c FROM t1 WHERE a=0; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: main.t1 +stmt 58 err 1 -1 125 no such table: t1 +==== 1.2.1 + + EXPLAIN QUERY PLAN + SELECT DISTINCT a, c, b FROM t1 WHERE a=0; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== 1.2.2 + + EXPLAIN QUERY PLAN + SELECT DISTINCT a, c, b FROM t1 WHERE a='xyz' COLLATE nocase; +---- +stmt 0 err 1 -1 85 no such table: t1 +==== 1.2.3 + + EXPLAIN QUERY PLAN + SELECT DISTINCT a COLLATE nocase, c, b FROM t1 WHERE a='xyz'; +---- +stmt 0 err 1 -1 85 no such table: t1 +==== 1.2.4 + + EXPLAIN QUERY PLAN + SELECT DISTINCT a COLLATE nocase, c, b FROM t1 WHERE a='xyz' COLLATE nocase; +---- +stmt 0 err 1 -1 100 no such table: t1 +==== 1.3 + + EXPLAIN QUERY PLAN + SELECT DISTINCT b, a, c FROM t1 WHERE a=0; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== 1.4 + + EXPLAIN QUERY PLAN + SELECT DISTINCT b, c, a FROM t1 WHERE a=0; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== 1.5 + + EXPLAIN QUERY PLAN + SELECT DISTINCT c, a, b FROM t1 WHERE a=0; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== 1.6 + + EXPLAIN QUERY PLAN + SELECT DISTINCT c, b, a FROM t1 WHERE a=0; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== 1.7 + + EXPLAIN QUERY PLAN + SELECT DISTINCT c, b, a FROM t1 WHERE +a=0; +---- +stmt 0 err 1 -1 67 no such table: t1 +==== 2.1a + + CREATE TABLE t2(a,b,c); + CREATE INDEX t2bc ON t2(b,c); + ANALYZE; + INSERT INTO sqlite_stat1 VALUES('t1','t1bc','1000000 10 9'); + INSERT INTO sqlite_stat1 VALUES('t2','t2bc','100 10 5'); + ANALYZE sqlite_master; + + EXPLAIN QUERY PLAN + SELECT * FROM t2 WHERE a=0 ORDER BY a, b, c; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: main.t2 +stmt 58 ok +stmt 69 err 1 -1 132 no such table: sqlite_stat1 +stmt 132 err 1 -1 191 no such table: sqlite_stat1 +stmt 191 ok +stmt 216 err 1 -1 285 no such table: t2 +==== 2.1b + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE likelihood(a=0, 0.03) ORDER BY a, b, c; +---- +stmt 0 err 1 -1 86 no such table: t1 +==== 2.2 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE +a=0 ORDER BY a, b, c; +---- +stmt 0 err 1 -1 69 no such table: t1 +==== 2.3 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a=0 ORDER BY b, a, c; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== 2.4 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a=0 ORDER BY b, c, a; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== 2.5 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a=0 ORDER BY a, c, b; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== 2.6 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a=0 ORDER BY c, a, b; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== 2.7 + + EXPLAIN QUERY PLAN + SELECT * FROM t1 WHERE a=0 ORDER BY c, b, a; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== 3.0 + + CREATE TABLE t3(a INTEGER PRIMARY KEY, b, c, d, e, f); + CREATE INDEX t3bcde ON t3(b, c, d, e); + EXPLAIN QUERY PLAN + SELECT a FROM t3 WHERE b=2 AND c=3 ORDER BY d DESC, e DESC, b, c, a DESC; +---- +stmt 0 ok +stmt 57 err 1 -1 98 no such table: main.t3 +stmt 98 err 1 -1 195 no such table: t3 +==== 3.1 + + DROP TABLE t3; + CREATE TABLE t3(a INTEGER PRIMARY KEY, b, c, d, e, f) WITHOUT rowid; + CREATE INDEX t3bcde ON t3(b, c, d, e); + EXPLAIN QUERY PLAN + SELECT a FROM t3 WHERE b=2 AND c=3 ORDER BY d DESC, e DESC, b, c, a DESC; +---- +stmt 0 err 1 -1 17 no such table: t3 +stmt 17 ok +stmt 88 err 1 -1 129 no such table: main.t3 +stmt 129 err 1 -1 226 no such table: t3 +==== 4.1.0 + + CREATE TABLE t4(b COLLATE nocase); + INSERT INTO t4 VALUES('abc'); + INSERT INTO t4 VALUES('ABC'); + INSERT INTO t4 VALUES('aBC'); +---- +stmt 0 ok +stmt 37 err 1 -1 69 no such table: t4 +stmt 69 err 1 -1 101 no such table: t4 +stmt 101 err 1 -1 133 no such table: t4 +==== 4.1.1 + + SELECT * FROM t4 ORDER BY b COLLATE binary +---- +stmt 0 err 1 -1 46 no such table: t4 +==== 4.1.2 + + SELECT * FROM t4 WHERE b='abc' ORDER BY b COLLATE binary +---- +stmt 0 err 1 -1 60 no such table: t4 +==== 4.2.1 + + CREATE TABLE Records(typeID INTEGER, key TEXT COLLATE nocase, value TEXT); + CREATE INDEX RecordsIndex ON Records(typeID, key, value); +---- +stmt 0 ok +stmt 77 err 1 -1 137 no such table: main.Records +==== 4.2.2 + + explain query plan + SELECT typeID, key, value FROM Records + WHERE typeID = 2 AND key = 'x' + ORDER BY key, value; +---- +stmt 0 err 1 -1 120 no such table: Records +==== 4.2.3 + + explain query plan + SELECT typeID, key, value FROM Records + WHERE typeID = 2 AND (key = 'x' COLLATE binary) + ORDER BY key, value; +---- +stmt 0 err 1 -1 136 no such table: Records +==== 4.2.4 + + explain query plan + SELECT typeID, key, value FROM Records + WHERE typeID = 2 + ORDER BY key, value; +---- +stmt 0 err 1 -1 106 no such table: Records +==== 4.3.1 + + CREATE TABLE t5(a INTEGER PRIMARY KEY, b COLLATE hello, c, d); +---- +stmt 0 err 1 -1 58 no such collation sequence: hello +==== 4.3.2 + + SELECT a FROM t5 WHERE b='def' ORDER BY b; +---- +stmt 0 err 1 -1 45 no such table: t5 +==== 4.4.0 + + DROP TABLE t1; + CREATE TABLE t1(a); + DROP TABLE t2; + CREATE TABLE t2(b INTEGER PRIMARY KEY, c INT); + SELECT DISTINCT * + FROM t1 LEFT JOIN t2 ON b=c AND b=(SELECT a FROM t1) + WHERE c>10; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 39 err 1 -1 56 no such table: t2 +stmt 56 ok +stmt 105 err 1 -1 197 no such table: t1 diff --git a/parser/testdata/orderby6.metadata.json b/parser/testdata/orderby6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/orderby6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/orderby6.test b/parser/testdata/orderby6.test new file mode 100644 index 0000000..7c15d40 --- /dev/null +++ b/parser/testdata/orderby6.test @@ -0,0 +1,120 @@ +==== orderby6-generated + + SELECT b,a,c FROM t1 ORDER BY b,a,c; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== orderby6-generated.dup1 + + SELECT b,a,c FROM t1 ORDER BY b,c DESC,a; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== orderby6-generated.dup2 + + SELECT b,a,c FROM t1 ORDER BY b DESC,c,a; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== orderby6-generated.dup3 + + SELECT b,a,c FROM t1 ORDER BY b DESC,a,c; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== orderby6-generated.dup4 + + SELECT a FROM t1 ORDER BY b, a LIMIT 10 OFFSET 20; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== orderby6-generated.dup5 + + SELECT a FROM t1 ORDER BY +b, a LIMIT 10 OFFSET 20; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== orderby6-generated.dup6 + + SELECT a FROM t1 ORDER BY b DESC, a LIMIT 10 OFFSET 20; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== orderby6-generated.dup7 + + SELECT a FROM t1 ORDER BY +b DESC, a LIMIT 10 OFFSET 20; +---- +stmt 0 err 1 -1 61 no such table: t1 +==== orderby6-generated.dup8 + + SELECT a FROM t1 ORDER BY b, a DESC LIMIT 10 OFFSET 45; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== orderby6-generated.dup9 + + SELECT a FROM t1 ORDER BY +b, a DESC LIMIT 10 OFFSET 45; +---- +stmt 0 err 1 -1 61 no such table: t1 +==== orderby6-generated.dup10 + + SELECT a FROM t1 ORDER BY b DESC, a LIMIT 10 OFFSET 45; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== orderby6-generated.dup11 + + SELECT a FROM t1 ORDER BY +b DESC, a LIMIT 10 OFFSET 45; +---- +stmt 0 err 1 -1 61 no such table: t1 +==== orderby6-generated.dup12 + + SELECT a FROM t2 ORDER BY b,c,d,e,f; +---- +stmt 0 err 1 -1 41 no such table: t2 +==== orderby6-generated.dup13 + + SELECT a FROM t2 ORDER BY b,c,d,e,+f; +---- +stmt 0 err 1 -1 42 no such table: t2 +==== orderby6-generated.dup14 + + SELECT a FROM t2 ORDER BY b,c,d,+e,+f; +---- +stmt 0 err 1 -1 43 no such table: t2 +==== orderby6-generated.dup15 + + SELECT a FROM t2 ORDER BY b,c,+d,+e,+f; +---- +stmt 0 err 1 -1 44 no such table: t2 +==== orderby6-generated.dup16 + + SELECT a FROM t2 ORDER BY b,+c,+d,+e,+f; +---- +stmt 0 err 1 -1 45 no such table: t2 +==== orderby6-generated.dup17 + + SELECT a FROM t2 ORDER BY b,c,d,e,f DESC; +---- +stmt 0 err 1 -1 46 no such table: t2 +==== orderby6-generated.dup18 + + SELECT a FROM t2 ORDER BY b,c,d,e DESC,f; +---- +stmt 0 err 1 -1 46 no such table: t2 +==== orderby6-generated.dup19 + + SELECT a FROM t2 ORDER BY b,c,d DESC,e,f; +---- +stmt 0 err 1 -1 46 no such table: t2 +==== orderby6-generated.dup20 + + SELECT a FROM t2 ORDER BY b,c DESC,d,e,f; +---- +stmt 0 err 1 -1 46 no such table: t2 +==== orderby6-generated.dup21 + + SELECT a FROM t2 ORDER BY b DESC,c,d,e,f; +---- +stmt 0 err 1 -1 46 no such table: t2 +==== orderby6-generated.dup22 + + SELECT a FROM t2 ORDER BY b DESC,c DESC,d,e,f LIMIT 31; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== orderby6-generated.dup23 + + SELECT a FROM t2 ORDER BY b,c,d,e,f DESC LIMIT 8 OFFSET 7; +---- +stmt 0 err 1 -1 63 no such table: t2 diff --git a/parser/testdata/orderby7.metadata.json b/parser/testdata/orderby7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/orderby7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/orderby7.test b/parser/testdata/orderby7.test new file mode 100644 index 0000000..dbbe75e --- /dev/null +++ b/parser/testdata/orderby7.test @@ -0,0 +1,98 @@ +==== 1.0 + + CREATE VIRTUAL TABLE fts USING fts3(content TEXT); + INSERT INTO fts(rowid,content) + VALUES(1,'this is a test of the fts3 virtual'), + (2,'table used as part of a join together'), + (3,'with the DISTINCT keyword. There was'), + (4,'a bug at one time (2013-06 through 2014-04)'), + (5,'that prevented this from working correctly.'), + (11,'a row that occurs twice'), + (12,'a row that occurs twice'); + + CREATE TABLE t1(x TEXT PRIMARY KEY, y); + INSERT OR IGNORE INTO t1 SELECT content, rowid+100 FROM fts; +---- +stmt 0 ok +stmt 53 err 1 -1 461 no such table: fts +stmt 461 ok +stmt 505 err 1 -1 568 no such table: t1 +==== 1.1 + + SELECT DISTINCT fts.rowid, t1.y + FROM fts, t1 + WHERE fts MATCH 'that twice' + AND content=x + ORDER BY y; +---- +stmt 0 err 1 -1 117 no such table: fts +==== 1.2 + + SELECT DISTINCT fts.rowid, t1.x + FROM fts, t1 + WHERE fts MATCH 'that twice' + AND content=x + ORDER BY 1; +---- +stmt 0 err 1 -1 117 no such table: fts +==== 1.3 + + SELECT DISTINCT t1.x + FROM fts, t1 + WHERE fts MATCH 'that twice' + AND content=x + ORDER BY 1; +---- +stmt 0 err 1 -1 106 no such table: fts +==== 1.4 + + SELECT t1.x + FROM fts, t1 + WHERE fts MATCH 'that twice' + AND content=x + ORDER BY 1; +---- +stmt 0 err 1 -1 97 no such table: fts +==== 1.5 + + SELECT DISTINCT t1.x + FROM fts, t1 + WHERE fts MATCH 'that twice' + AND content=x; +---- +stmt 0 err 1 -1 92 no such table: fts +==== 1.6 + + SELECT t1.x + FROM fts, t1 + WHERE fts MATCH 'that twice' + AND content=x; +---- +stmt 0 err 1 -1 83 no such table: fts +==== 2.1 + + SELECT DISTINCT t1.x + FROM fts, t1 + WHERE fts.rowid=11 + AND content=x + ORDER BY fts.rowid; +---- +stmt 0 err 1 -1 104 no such table: fts +==== 2.2 + + SELECT DISTINCT t1.* + FROM fts, t1 + WHERE fts.rowid=11 + AND content=x + ORDER BY fts.rowid; +---- +stmt 0 err 1 -1 104 no such table: fts +==== 2.3 + + SELECT DISTINCT t1.* + FROM fts, t1 + WHERE fts.rowid=11 + AND content=x + ORDER BY t1.y +---- +stmt 0 err 1 -1 99 no such table: fts diff --git a/parser/testdata/orderby9.metadata.json b/parser/testdata/orderby9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/orderby9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/orderby9.test b/parser/testdata/orderby9.test new file mode 100644 index 0000000..90bd0a0 --- /dev/null +++ b/parser/testdata/orderby9.test @@ -0,0 +1,10 @@ +==== setup + + -- create a table with many entries + CREATE TABLE t1(x); + WITH RECURSIVE + c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1 SELECT x FROM c; +---- +stmt 0 ok +stmt 60 err 1 -1 176 no such table: t1 diff --git a/parser/testdata/orderbyA.metadata.json b/parser/testdata/orderbyA.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/orderbyA.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/orderbyA.test b/parser/testdata/orderbyA.test new file mode 100644 index 0000000..eab76b8 --- /dev/null +++ b/parser/testdata/orderbyA.test @@ -0,0 +1,66 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES('one', 1, 11); + INSERT INTO t1 VALUES('three', 7, 11); + INSERT INTO t1 VALUES('one', 2, 11); + INSERT INTO t1 VALUES('one', 3, 11); + INSERT INTO t1 VALUES('two', 4, 11); + INSERT INTO t1 VALUES('two', 6, 11); + INSERT INTO t1 VALUES('three', 8, 11); + INSERT INTO t1 VALUES('two', 5, 11); + INSERT INTO t1 VALUES('three', 9, 11); +---- +stmt 0 ok +stmt 28 err 1 -1 69 no such table: t1 +stmt 69 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 192 no such table: t1 +stmt 192 err 1 -1 233 no such table: t1 +stmt 233 err 1 -1 274 no such table: t1 +stmt 274 err 1 -1 315 no such table: t1 +stmt 315 err 1 -1 356 no such table: t1 +stmt 356 err 1 -1 397 no such table: t1 +==== 2.0 + + CREATE TABLE t2(a, b, c); + INSERT INTO t2 VALUES(1, 'one', 1); + INSERT INTO t2 VALUES(1, 'two', 2); + INSERT INTO t2 VALUES(1, 'one', 3); + INSERT INTO t2 VALUES(1, 'two', 4); + INSERT INTO t2 VALUES(1, 'one', 5); + INSERT INTO t2 VALUES(1, 'two', 6); + + INSERT INTO t2 VALUES(2, 'one', 7); + INSERT INTO t2 VALUES(2, 'two', 8); + INSERT INTO t2 VALUES(2, 'one', 9); + INSERT INTO t2 VALUES(2, 'two', 10); + INSERT INTO t2 VALUES(2, 'one', 11); + INSERT INTO t2 VALUES(2, 'two', 12); + + INSERT INTO t2 VALUES(NULL, 'one', 13); + INSERT INTO t2 VALUES(NULL, 'two', 14); + INSERT INTO t2 VALUES(NULL, 'one', 15); + INSERT INTO t2 VALUES(NULL, 'two', 16); + INSERT INTO t2 VALUES(NULL, 'one', 17); + INSERT INTO t2 VALUES(NULL, 'two', 18); +---- +stmt 0 ok +stmt 28 err 1 -1 66 no such table: t2 +stmt 66 err 1 -1 104 no such table: t2 +stmt 104 err 1 -1 142 no such table: t2 +stmt 142 err 1 -1 180 no such table: t2 +stmt 180 err 1 -1 218 no such table: t2 +stmt 218 err 1 -1 256 no such table: t2 +stmt 256 err 1 -1 295 no such table: t2 +stmt 295 err 1 -1 333 no such table: t2 +stmt 333 err 1 -1 371 no such table: t2 +stmt 371 err 1 -1 410 no such table: t2 +stmt 410 err 1 -1 449 no such table: t2 +stmt 449 err 1 -1 488 no such table: t2 +stmt 488 err 1 -1 531 no such table: t2 +stmt 531 err 1 -1 573 no such table: t2 +stmt 573 err 1 -1 615 no such table: t2 +stmt 615 err 1 -1 657 no such table: t2 +stmt 657 err 1 -1 699 no such table: t2 +stmt 699 err 1 -1 741 no such table: t2 diff --git a/parser/testdata/orderbyB.metadata.json b/parser/testdata/orderbyB.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/orderbyB.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/orderbyB.test b/parser/testdata/orderbyB.test new file mode 100644 index 0000000..b7a8d23 --- /dev/null +++ b/parser/testdata/orderbyB.test @@ -0,0 +1,26 @@ +==== 1.0 + + CREATE TABLE t1(a TEXT, b TEXT, c INT); + INSERT INTO t1 VALUES(NULL,NULL,NULL); + WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<7) + INSERT INTO t1(a,b,c) SELECT char(p,p), char(q,q), n FROM + (SELECT ((n-1)%4)+0x61 AS p, abs(n*2-9+(n>=5))+0x60 AS q, n FROM c); + UPDATE t1 SET b=upper(b) WHERE c=1; + CREATE TABLE t2(k TEXT PRIMARY KEY, v INT) WITHOUT ROWID; + WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<7) + INSERT INTO t2(k,v) SELECT char(0x60+n,0x60+n), n FROM c; + WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<7) + INSERT INTO t2(k,v) SELECT char(0x40+n,0x40+n), n FROM c; + SELECT a,b,c,tx.v AS 'v-a', ty.v AS 'v-b' + FROM t1 LEFT JOIN t2 AS tx ON tx.k=a + LEFT JOIN t2 AS ty ON ty.k=b + ORDER BY c; +---- +stmt 0 ok +stmt 42 err 1 -1 83 no such table: t1 +stmt 83 err 1 -1 301 no such table: t1 +stmt 301 err 1 -1 339 no such table: t1 +stmt 339 ok +stmt 399 err 1 -1 536 no such table: t2 +stmt 536 err 1 -1 673 no such table: t2 +stmt 673 err 1 -1 814 no such table: t1 diff --git a/parser/testdata/ovfl.metadata.json b/parser/testdata/ovfl.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/ovfl.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/ovfl.test b/parser/testdata/ovfl.test new file mode 100644 index 0000000..23a61d8 --- /dev/null +++ b/parser/testdata/ovfl.test @@ -0,0 +1,5 @@ +==== 1.2 + + SELECT sum(length(c2)) FROM t1; +---- +stmt 0 err 1 -1 34 no such table: t1 diff --git a/parser/testdata/pager1.metadata.json b/parser/testdata/pager1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pager1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pager1.test b/parser/testdata/pager1.test new file mode 100644 index 0000000..a9618ec --- /dev/null +++ b/parser/testdata/pager1.test @@ -0,0 +1,628 @@ +==== pager1-3.1.2 + + PRAGMA cache_size = 10; + BEGIN; + INSERT INTO t1 VALUES(1, randomblob(1500)); + INSERT INTO t1 VALUES(2, randomblob(1500)); + INSERT INTO t1 VALUES(3, randomblob(1500)); + SELECT * FROM counter; +---- +stmt 0 ok +stmt 26 ok +stmt 35 err 1 -1 83 no such table: t1 +stmt 83 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 179 no such table: t1 +stmt 179 err 1 -1 206 no such table: counter +==== pager1-3.1.3 + + INSERT INTO t1 SELECT a+3, randomblob(1500) FROM t1 +---- +stmt 0 err 1 -1 57 no such table: t1 +==== pager1-3.4 + SELECT * FROM counter +---- +stmt 0 err 1 -1 23 no such table: counter +==== pager1-3.5 + SELECT a FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== pager1-3.6 + COMMIT +---- +stmt 0 ok +==== pager1-generated + + BEGIN; + INSERT INTO z VALUES(NULL, a_string(800)); + INSERT INTO z VALUES(NULL, a_string(800)); + SAVEPOINT one; + UPDATE z SET y = NULL WHERE x>256; + PRAGMA incremental_vacuum; + SELECT count(*) FROM z WHERE x < 100; + ROLLBACK TO one; + COMMIT; +---- +stmt 0 ok +stmt 11 err 1 -1 60 no such table: z +stmt 60 err 1 -1 109 no such table: z +stmt 109 ok +stmt 130 err 1 -1 173 no such table: z +stmt 173 ok +stmt 208 err 1 -1 254 no such table: z +stmt 254 ok +stmt 277 ok +==== pager1-generated.dup1 + + BEGIN; + SAVEPOINT one; + UPDATE z SET y = y||x; + ROLLBACK TO one; + COMMIT; + SELECT count(*) FROM z; +---- +stmt 0 ok +stmt 11 ok +stmt 32 err 1 -1 63 no such table: z +stmt 63 ok +stmt 86 ok +stmt 98 err 1 -1 126 no such table: z +==== pager1-generated.dup2 + + SAVEPOINT one; + UPDATE z SET y = y||x; + ROLLBACK TO one; +---- +stmt 0 ok +stmt 19 err 1 -1 48 no such table: z +stmt 48 ok +==== pager1-generated.dup3 + + SELECT count(*) FROM z; + RELEASE one; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 28 no such table: z +stmt 28 ok +stmt 45 ok +==== pager1-generated.dup4 + + SAVEPOINT one; + RELEASE one; +---- +stmt 0 ok +stmt 19 ok +==== pager1.4.1.2 + SELECT * FROM x +---- +stmt 0 err 1 -1 17 no such table: x +==== pager1-generated.dup5 + + SELECT * FROM a +---- +stmt 0 err 1 -1 23 no such table: a +==== pager1-generated.dup6 + + SELECT * FROM b +---- +stmt 0 err 1 -1 23 no such table: b +==== pager1-generated.dup7 +SELECT * FROM a +---- +stmt 0 err 1 -1 16 no such table: a +==== pager1-generated.dup8 +SELECT * FROM b +---- +stmt 0 err 1 -1 16 no such table: b +==== pager1-generated.dup9 + + SELECT * FROM a +---- +stmt 0 err 1 -1 23 no such table: a +==== pager1-generated.dup10 + + SELECT * FROM b +---- +stmt 0 err 1 -1 23 no such table: b +==== pager1.4.5.1 + + PRAGMA journal_mode = DELETE; + PRAGMA page_size = 1024; + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + INSERT INTO t1 VALUES('I', 'II'); + INSERT INTO t2 VALUES('III', 'IV'); + BEGIN; + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t2 VALUES(3, 4); + COMMIT; +---- +stmt 0 ok +stmt 32 ok +stmt 59 ok +stmt 84 ok +stmt 109 err 1 -1 145 no such table: t1 +stmt 145 err 1 -1 183 no such table: t2 +stmt 183 ok +stmt 192 err 1 -1 225 no such table: t1 +stmt 225 err 1 -1 258 no such table: t2 +stmt 258 ok +==== pager1.4.5.2 + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 40 no such table: t2 +==== pager1.4.5.3 + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 40 no such table: t2 +==== pager1.4.5.4 + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 40 no such table: t2 +==== pager1.4.5.5 + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 40 no such table: t2 +==== pager1.4.5.6 + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 40 no such table: t2 +==== pager1.4.6.2 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== pager1.4.6.4 + + ATTACH 'test.db2' AS two; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 28 err 1 -1 48 no such table: t2 +==== pager1.4.6.12 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== pager1.4.6.12.dup1 + + ATTACH 'test.db2' AS two; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 28 err 1 -1 48 no such table: t2 +==== pager1.4.6.14 + + ATTACH 'test.db3' AS three; + SELECT * FROM t3; +---- +stmt 0 ok +stmt 30 err 1 -1 50 no such table: t3 +==== pager1.4.7.1 + + PRAGMA journal_mode = DELETE; + CREATE TABLE t1(x PRIMARY KEY, y); + CREATE INDEX i1 ON t1(y); + INSERT INTO t1 VALUES('I', 'one'); + INSERT INTO t1 VALUES('II', 'four'); + INSERT INTO t1 VALUES('III', 'nine'); + BEGIN; + INSERT INTO t1 VALUES('IV', 'sixteen'); + INSERT INTO t1 VALUES('V' , 'twentyfive'); + COMMIT; +---- +stmt 0 ok +stmt 32 ok +stmt 69 err 1 -1 97 no such table: main.t1 +stmt 97 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 176 no such table: t1 +stmt 176 err 1 -1 216 no such table: t1 +stmt 216 ok +stmt 225 err 1 -1 269 no such table: t1 +stmt 269 err 1 -1 316 no such table: t1 +stmt 316 ok +==== pager1-5.2.1 + + PRAGMA journal_mode = memory; + BEGIN; + INSERT INTO t1 VALUES(84, 'Andropov'); + INSERT INTO t2 VALUES(84, 'Andropov'); + COMMIT; +---- +stmt 0 ok +stmt 34 ok +stmt 45 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 135 no such table: t2 +stmt 135 ok +==== pager1-5.3.1 + + PRAGMA journal_mode = off; + BEGIN; + INSERT INTO t1 VALUES(85, 'Gorbachev'); + INSERT INTO t2 VALUES(85, 'Gorbachev'); + COMMIT; +---- +stmt 0 ok +stmt 31 ok +stmt 42 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 134 no such table: t2 +stmt 134 ok +==== pager1-6.2 + + CREATE TABLE t11(a, b) +---- +stmt 0 ok +==== pager1-6.4 + PRAGMA max_page_count +---- +stmt 0 ok +==== pager1-6.5 + PRAGMA max_page_count = 15 +---- +stmt 0 ok +==== pager1-6.6 + CREATE TABLE t11(a, b) +---- +stmt 0 ok +==== pager1-6.7 + + BEGIN; + INSERT INTO t11 VALUES(1, 2); + PRAGMA max_page_count = 13; +---- +stmt 0 ok +stmt 9 err 1 -1 43 no such table: t11 +stmt 43 ok +==== pager1-6.8 + + INSERT INTO t11 VALUES(3, 4); + PRAGMA max_page_count = 10; +---- +stmt 0 err 1 -1 34 no such table: t11 +stmt 34 ok +==== pager1-6.9 + COMMIT +---- +stmt 0 ok +==== pager1-6.10 + PRAGMA max_page_count = 10 +---- +stmt 0 ok +==== pager1-6.11 + SELECT * FROM t11 +---- +stmt 0 err 1 -1 19 no such table: t11 +==== pager1-6.12 + PRAGMA max_page_count +---- +stmt 0 ok +==== pager1-generated.dup11 + + BEGIN; + INSERT INTO x1 VALUES('William'); + INSERT INTO x1 VALUES('Anne'); + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 51 no such table: x1 +stmt 51 err 1 -1 88 no such table: x1 +stmt 88 ok +==== pager1-9.1.4 + SELECT count(*) FROM ab +---- +stmt 0 err 1 -1 25 no such table: ab +==== pager1-9.2.4 + SELECT count(*) FROM ab +---- +stmt 0 err 1 -1 25 no such table: ab +==== pager1-generated.dup12 + + INSERT INTO t3 VALUES(a_string(300), a_string(300)); + INSERT INTO t3 SELECT * FROM t3; /* 2 */ + INSERT INTO t3 SELECT * FROM t3; /* 4 */ + INSERT INTO t3 SELECT * FROM t3; /* 8 */ + INSERT INTO t3 SELECT * FROM t3; /* 16 */ + INSERT INTO t3 SELECT * FROM t3; /* 32 */ +---- +stmt 0 err 1 -1 60 no such table: t3 +stmt 60 err 1 -1 99 no such table: t3 +stmt 99 err 1 -1 154 no such table: t3 +stmt 154 err 1 -1 209 no such table: t3 +stmt 209 err 1 -1 264 no such table: t3 +stmt 264 err 1 -1 319 no such table: t3 +==== pager1-11.1 + + PRAGMA journal_mode = DELETE; + PRAGMA cache_size = 10; + BEGIN; + CREATE TABLE zz(top PRIMARY KEY); + INSERT INTO zz VALUES(a_string(222)); + INSERT INTO zz SELECT a_string((SELECT 222+max(rowid) FROM zz)) FROM zz; + INSERT INTO zz SELECT a_string((SELECT 222+max(rowid) FROM zz)) FROM zz; + INSERT INTO zz SELECT a_string((SELECT 222+max(rowid) FROM zz)) FROM zz; + INSERT INTO zz SELECT a_string((SELECT 222+max(rowid) FROM zz)) FROM zz; + INSERT INTO zz SELECT a_string((SELECT 222+max(rowid) FROM zz)) FROM zz; + COMMIT; + BEGIN; + UPDATE zz SET top = a_string(345); +---- +stmt 0 ok +stmt 32 ok +stmt 58 ok +stmt 67 ok +stmt 105 err 1 -1 147 no such table: zz +stmt 147 err 1 -1 224 no such table: zz +stmt 224 err 1 -1 301 no such table: zz +stmt 301 err 1 -1 378 no such table: zz +stmt 378 err 1 -1 455 no such table: zz +stmt 455 err 1 -1 532 no such table: zz +stmt 532 ok +stmt 542 ok +stmt 551 err 1 -1 590 no such table: zz +==== pager1-11.2 + COMMIT +---- +stmt 0 ok +==== pager1-11.5 + SELECT count(*) FROM zz +---- +stmt 0 err 1 -1 25 no such table: zz +==== pager1-generated.dup13 + + SELECT count(*) FROM v; + PRAGMA main.page_size; +---- +stmt 0 err 1 -1 31 no such table: v +stmt 31 ok +==== pager1-13.1.1 + + PRAGMA page_size = 1024; + PRAGMA journal_mode = PERSIST; + PRAGMA cache_size = 10; + BEGIN; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB); + INSERT INTO t1 VALUES(NULL, a_string(400)); + INSERT INTO t1 SELECT NULL, a_string(400) FROM t1; /* 2 */ + INSERT INTO t1 SELECT NULL, a_string(400) FROM t1; /* 4 */ + INSERT INTO t1 SELECT NULL, a_string(400) FROM t1; /* 8 */ + INSERT INTO t1 SELECT NULL, a_string(400) FROM t1; /* 16 */ + INSERT INTO t1 SELECT NULL, a_string(400) FROM t1; /* 32 */ + INSERT INTO t1 SELECT NULL, a_string(400) FROM t1; /* 64 */ + INSERT INTO t1 SELECT NULL, a_string(400) FROM t1; /* 128 */ + COMMIT; + UPDATE t1 SET b = a_string(400); +---- +stmt 0 ok +stmt 27 ok +stmt 60 ok +stmt 86 ok +stmt 95 ok +stmt 147 err 1 -1 195 no such table: t1 +stmt 195 err 1 -1 250 no such table: t1 +stmt 250 err 1 -1 324 no such table: t1 +stmt 324 err 1 -1 398 no such table: t1 +stmt 398 err 1 -1 472 no such table: t1 +stmt 472 err 1 -1 546 no such table: t1 +stmt 546 err 1 -1 620 no such table: t1 +stmt 620 err 1 -1 694 no such table: t1 +stmt 694 ok +stmt 723 err 1 -1 758 no such table: t1 +==== pager1-generated.dup14 + PRAGMA integrity_check +---- +stmt 0 ok +==== pager1-13.2.1 + + CREATE INDEX i1 ON t1(b); + UPDATE t1 SET b = a_string(400); +---- +stmt 0 err 1 -1 28 no such table: main.t1 +stmt 28 err 1 -1 63 no such table: t1 +==== pager1-generated.dup15 + PRAGMA integrity_check +---- +stmt 0 ok +==== pager1-14.1.1 + + PRAGMA journal_mode = OFF; + CREATE TABLE t1(a, b); + BEGIN; + INSERT INTO t1 VALUES(1, 2); + COMMIT; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 54 ok +stmt 63 err 1 -1 96 no such table: t1 +stmt 96 ok +stmt 106 err 1 -1 126 no such table: t1 +==== pager1-14.1.2 + + BEGIN; + INSERT INTO t1 VALUES(3, 4); + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 42 no such table: t1 +stmt 42 ok +==== pager1-14.1.3 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== pager1-14.1.4 + + BEGIN; + INSERT INTO t1(rowid, a, b) SELECT a+3, b, b FROM t1; + INSERT INTO t1(rowid, a, b) SELECT a+3, b, b FROM t1; +---- +stmt 0 ok +stmt 9 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 125 no such table: t1 +==== pager1-14.1.5 + + COMMIT; +---- +stmt 0 ok +==== pager1-14.1.6 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== pager1-15.0 + + CREATE TABLE tx(y, z); + INSERT INTO tx VALUES('Ayutthaya', 'Beijing'); + INSERT INTO tx VALUES('London', 'Tokyo'); +---- +stmt 0 ok +stmt 25 err 1 -1 74 no such table: tx +stmt 74 err 1 -1 118 no such table: tx +==== pager1-generated.dup16 + + SELECT * FROM tx; +---- +stmt 0 err 1 -1 22 no such table: tx +==== pager1-20.1.2 + + BEGIN EXCLUSIVE; + COMMIT; +---- +stmt 0 ok +stmt 21 ok +==== pager1-20.2.2 + + BEGIN EXCLUSIVE; + COMMIT; +---- +stmt 0 ok +stmt 21 ok +==== pager1-23.6.1 +PRAGMA locking_mode = normal +---- +stmt 0 ok +==== pager1-23.6.2 +PRAGMA locking_mode = exclusive +---- +stmt 0 ok +==== pager1-23.6.3 +PRAGMA locking_mode +---- +stmt 0 ok +==== pager1-23.6.4 +PRAGMA main.locking_mode +---- +stmt 0 ok +==== pager1-24.1.3 + + UPDATE x1 SET z = a_string(300) WHERE rowid>40; + COMMIT; + PRAGMA integrity_check; + SELECT count(*) FROM x1; +---- +stmt 0 err 1 -1 55 no such table: x1 +stmt 55 ok +stmt 67 ok +stmt 95 err 1 -1 124 no such table: x1 +==== pager1-26.1 + + UPDATE tbl SET b = a_string(550); +---- +stmt 0 err 1 -1 36 no such table: tbl +==== pager1-29.2 + + PRAGMA page_size = 4096; + VACUUM; +---- +stmt 0 ok +stmt 31 ok +==== pager1-generated.dup17 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t1 +==== pager1-generated.dup18 + + VACUUM; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 34 no such table: t1 +==== 39.4 + + PRAGMA auto_vacuum = 2; + CREATE TABLE t3(x); + CREATE TABLE t4(x); + + DROP TABLE t2; + DROP TABLE t3; + DROP TABLE t4; +---- +stmt 0 ok +stmt 26 ok +stmt 48 ok +stmt 70 err 1 -1 88 no such table: t2 +stmt 88 err 1 -1 105 no such table: t3 +stmt 105 err 1 -1 122 no such table: t4 +==== 40.2 + + INSERT INTO t1 VALUES(randomblob(1200)); + INSERT INTO t1 VALUES(randomblob(1200)); + INSERT INTO t1 VALUES(randomblob(1200)); +---- +stmt 0 err 1 -1 45 no such table: t1 +stmt 45 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 135 no such table: t1 +==== 44.1 + + PRAGMA page_size=4096; + PRAGMA auto_vacuum=FULL; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b ANY); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<50) + INSERT INTO t1(a,b) SELECT x, zeroblob(1000) FROM c; + CREATE TABLE t2 AS SELECT * FROM t1; + PRAGMA page_count; +---- +stmt 0 ok +stmt 25 ok +stmt 52 ok +stmt 101 err 1 -1 232 no such table: t1 +stmt 232 err 1 -1 271 no such table: t1 +stmt 271 ok +==== 44.2 + + BEGIN; + DROP TABLE t2; + PRAGMA incremental_vacuum=50; + PRAGMA page_count; + PRAGMA max_page_count=2; +---- +stmt 0 ok +stmt 9 err 1 -1 26 no such table: t2 +stmt 26 ok +stmt 58 ok +stmt 79 ok +==== 44.3 + + ROLLBACK; + PRAGMA page_count; + PRAGMA max_page_count; +---- +stmt 0 ok +stmt 12 ok +stmt 33 ok diff --git a/parser/testdata/pager2.metadata.json b/parser/testdata/pager2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pager2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pager2.test b/parser/testdata/pager2.test new file mode 100644 index 0000000..c60e36f --- /dev/null +++ b/parser/testdata/pager2.test @@ -0,0 +1,7 @@ +==== pager2-generated + + SELECT COALESCE(max(i), 0) FROM t1; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 45 no such table: t1 +stmt 45 ok diff --git a/parser/testdata/pager4.metadata.json b/parser/testdata/pager4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pager4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pager4.test b/parser/testdata/pager4.test new file mode 100644 index 0000000..e3bd8cc --- /dev/null +++ b/parser/testdata/pager4.test @@ -0,0 +1,75 @@ +==== pager4-1.1 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(673,'stone','philips'); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 94 no such table: t1 +==== pager4-1.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== pager4-1.3 + + UPDATE t1 SET a=537; +---- +stmt 0 err 1 -1 23 no such table: t1 +==== pager4-1.4 + + UPDATE t1 SET a=948; +---- +stmt 0 err 1 -1 23 no such table: t1 +==== pager4-1.5 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== pager4-1.6 + + UPDATE t1 SET a=537; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 23 no such table: t1 +stmt 23 err 1 -1 43 no such table: t1 +==== pager4-1.7 + + PRAGMA journal_mode=OFF; + UPDATE t1 SET a=107; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 27 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 70 no such table: t1 +==== pager4-1.8 + + PRAGMA journal_mode=MEMORY; + UPDATE t1 SET b='magpie'; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 30 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 78 no such table: t1 +==== pager4-1.9 + + PRAGMA journal_mode=DELETE; + UPDATE t1 SET c='jaguar'; +---- +stmt 0 ok +stmt 30 err 1 -1 58 no such table: t1 +==== pager4-1.10 + + PRAGMA journal_mode=TRUNCATE; + UPDATE t1 SET c='jaguar'; +---- +stmt 0 ok +stmt 32 err 1 -1 60 no such table: t1 +==== pager4-1.11 + + PRAGMA journal_mode=PERSIST; + UPDATE t1 SET c='jaguar'; +---- +stmt 0 ok +stmt 31 err 1 -1 59 no such table: t1 diff --git a/parser/testdata/pagerfault3.metadata.json b/parser/testdata/pagerfault3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pagerfault3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pagerfault3.test b/parser/testdata/pagerfault3.test new file mode 100644 index 0000000..61cddd4 --- /dev/null +++ b/parser/testdata/pagerfault3.test @@ -0,0 +1,13 @@ +==== pagerfault3-pre1 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 2048; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randomblob(1200)); + PRAGMA page_count; +---- +stmt 0 ok +stmt 28 ok +stmt 57 ok +stmt 81 err 1 -1 126 no such table: t1 +stmt 126 ok diff --git a/parser/testdata/pagesize.metadata.json b/parser/testdata/pagesize.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pagesize.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pagesize.test b/parser/testdata/pagesize.test new file mode 100644 index 0000000..39787a8 --- /dev/null +++ b/parser/testdata/pagesize.test @@ -0,0 +1,144 @@ +==== pagesize-1.1 +PRAGMA page_size +---- +stmt 0 ok +==== pagesize-1.3 + + CREATE TABLE t1(a); + PRAGMA page_size=2048; + PRAGMA page_size; +---- +stmt 0 ok +stmt 24 ok +stmt 51 ok +==== pagesize-1.5 + + PRAGMA page_size=512; + PRAGMA page_size; +---- +stmt 0 ok +stmt 26 ok +==== pagesize-1.6 + + PRAGMA page_size=8192; + PRAGMA page_size; +---- +stmt 0 ok +stmt 29 ok +==== pagesize-1.7 + + PRAGMA page_size=65537; + PRAGMA page_size; +---- +stmt 0 ok +stmt 30 ok +==== pagesize-1.8 + + PRAGMA page_size=1234; + PRAGMA page_size +---- +stmt 0 ok +stmt 29 ok +==== pagesize-generated + + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t1 VALUES(2,3,4); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 38 no such table: t1 +stmt 38 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 102 no such table: t1 +==== pagesize-generated.dup1 +VACUUM +---- +stmt 0 ok +==== pagesize-generated.dup2 + + INSERT INTO t1 VALUES(randstr(10,9000)); + INSERT INTO t1 VALUES(randstr(10,9000)); + INSERT INTO t1 VALUES(randstr(10,9000)); + BEGIN; + INSERT INTO t1 SELECT x||x FROM t1; + INSERT INTO t1 SELECT x||x FROM t1; + INSERT INTO t1 SELECT x||x FROM t1; + INSERT INTO t1 SELECT x||x FROM t1; + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 47 no such table: t1 +stmt 47 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 141 no such table: t1 +stmt 141 ok +stmt 154 err 1 -1 196 no such table: t1 +stmt 196 err 1 -1 238 no such table: t1 +stmt 238 err 1 -1 280 no such table: t1 +stmt 280 err 1 -1 322 no such table: t1 +stmt 322 err 1 -1 353 no such table: t1 +==== pagesize-generated.dup3 + + ROLLBACK; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 16 err 1 -1 47 no such table: t1 +==== pagesize-generated.dup4 + + INSERT INTO t1 SELECT x||x FROM t1; + INSERT INTO t1 SELECT x||x FROM t1; + INSERT INTO t1 SELECT x||x FROM t1; + INSERT INTO t1 SELECT x||x FROM t1; + INSERT INTO t1 SELECT x||x FROM t1; + INSERT INTO t1 SELECT x||x FROM t1; + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 42 no such table: t1 +stmt 42 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 168 no such table: t1 +stmt 168 err 1 -1 210 no such table: t1 +stmt 210 err 1 -1 252 no such table: t1 +stmt 252 err 1 -1 283 no such table: t1 +==== pagesize-generated.dup5 + + BEGIN; + DELETE FROM t1 WHERE rowid%5!=0; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 13 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 83 no such table: t1 +==== pagesize-generated.dup6 + + ROLLBACK; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 16 err 1 -1 47 no such table: t1 +==== pagesize-3.1 + + BEGIN; + SELECT * FROM sqlite_master; + PRAGMA page_size=2048; + PRAGMA main.page_size; +---- +stmt 0 ok +stmt 9 ok +stmt 40 ok +stmt 65 ok +==== pagesize-3.2 + + CREATE TABLE t1(x); + COMMIT; +---- +stmt 0 ok +stmt 22 ok +==== pagesize-3.3 + + BEGIN; + PRAGMA page_size = 2048; + COMMIT; + PRAGMA main.page_size; +---- +stmt 0 ok +stmt 9 ok +stmt 38 ok +stmt 48 ok diff --git a/parser/testdata/pcache2.metadata.json b/parser/testdata/pcache2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pcache2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pcache2.test b/parser/testdata/pcache2.test new file mode 100644 index 0000000..2eccea3 --- /dev/null +++ b/parser/testdata/pcache2.test @@ -0,0 +1,7 @@ +==== pcache2-2.2 + + PRAGMA page_size = 4096; + CREATE TABLE t1(x); +---- +stmt 0 ok +stmt 27 ok diff --git a/parser/testdata/pendingrace.metadata.json b/parser/testdata/pendingrace.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pendingrace.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pendingrace.test b/parser/testdata/pendingrace.test new file mode 100644 index 0000000..b6034c0 --- /dev/null +++ b/parser/testdata/pendingrace.test @@ -0,0 +1,19 @@ +==== 1.0 + + PRAGMA cache_size = 5; + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<10 + ) + INSERT INTO t1 SELECT hex(randomblob(100)), hex(randomblob(100)) FROM s; +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 81 no such table: main.t1 +stmt 81 err 1 -1 229 no such table: t1 +==== 1.3 + + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/percentile.metadata.json b/parser/testdata/percentile.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/percentile.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/percentile.test b/parser/testdata/percentile.test new file mode 100644 index 0000000..0c935a7 --- /dev/null +++ b/parser/testdata/percentile.test @@ -0,0 +1,382 @@ +==== percentile-generated +SELECT median(x) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== percentile-generated.dup1 +SELECT median() WITHIN GROUP (ORDER BY x) FROM t1 +---- +stmt 0 err 1 29 30 near "(": syntax error +==== percentile-1.1.median + + SELECT median(x) FROM t1; +---- +stmt 0 err 1 -1 28 no such table: t1 +==== percentile-1.1.median.dup1 + + SELECT median() WITHIN GROUP (ORDER BY x) FROM t1; +---- +stmt 0 err 1 34 35 near "(": syntax error +==== percentile-1.1.distinct.1 + + SELECT median(DISTINCT x) FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== percentile-1.1.distinct.2 + + SELECT percentile(DISTINCT 50) WITHIN GROUP (ORDER BY x) FROM t1; +---- +stmt 0 err 1 49 50 near "(": syntax error +==== percentile-1.1.median.dup2 + + SELECT median() WITHIN GROUP (ORDER BY x) FROM t1; +---- +stmt 0 err 1 34 35 near "(": syntax error +==== percentile-1.2 +INSERT INTO t1 VALUES(NULL),(NULL); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== percentile-generated.dup2 +SELECT median(x) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== percentile-generated.dup3 +SELECT median() WITHIN GROUP (ORDER BY x) FROM t1 +---- +stmt 0 err 1 29 30 near "(": syntax error +==== percentile-1.4.1 +SELECT round(percentile(x, 15+0.000001*rowid),1) FROM t1 +---- +stmt 0 err 1 -1 57 no such table: t1 +==== percentile-1.4.2 +SELECT round(percentile_cont(x,(15+0.000001*rowid)*0.01),1) FROM t1 +---- +stmt 0 err 1 -1 68 no such table: t1 +==== percentile-1.4.3 +SELECT percentile_disc(x, (15+0.000001*rowid)*0.01) FROM t1 +---- +stmt 0 err 1 -1 60 no such table: t1 +==== percentile-1.5.1 +SELECT percentile(x, 15+0.1*rowid) FROM t1 +---- +stmt 0 err 1 -1 43 no such table: t1 +==== percentile-1.5.2 +SELECT percentile_cont(x, (15+0.1*rowid)*0.01) FROM t1 +---- +stmt 0 err 1 -1 55 no such table: t1 +==== percentile-1.5.3 +SELECT percentile_disc(x, (15+0.1*rowid)*0.01) FROM t1 +---- +stmt 0 err 1 -1 55 no such table: t1 +==== percentile-1.6 + + CREATE TABLE t2(x); + INSERT INTO t2 SELECT x+0.0 FROM t1 ORDER BY random(); +---- +stmt 0 ok +stmt 24 err 1 -1 83 no such table: t2 +==== percentile-generated.dup4 +SELECT median(x) FROM t2 +---- +stmt 0 err 1 -1 25 no such table: t2 +==== percentile-generated.dup5 +SELECT median() WITHIN GROUP (ORDER BY x) FROM t2 +---- +stmt 0 err 1 29 30 near "(": syntax error +==== percentile-1.8.1 +SELECT percentile(x,0,1) FROM t1 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== percentile-1.8.2 +SELECT percentile_cont(x,0,1) FROM t1 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== percentile-1.8.3 +SELECT percentile_disc(x,0,1) FROM t1 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== percentile-1.8.4 +SELECT median(x,0) FROM t1 +---- +stmt 0 err 1 -1 27 no such table: t1 +==== percentile-1.8.5 +SELECT percentile(0,1) WITHIN GROUP(ORDER BY x) FROM t1 +---- +stmt 0 err 1 35 36 near "(": syntax error +==== percentile-1.8.2.dup1 +SELECT percentile_cont(0,1)WITHIN GROUP (ORDER BY x) FROM t1 +---- +stmt 0 err 1 40 41 near "(": syntax error +==== percentile-1.8.3.dup1 +SELECT percentile_disc(0,1)WITHIN GROUP (ORDER BY x) FROM t1 +---- +stmt 0 err 1 40 41 near "(": syntax error +==== percentile-1.8.4.dup1 +SELECT median(x) WITHIN GROUP (ORDER BY x) FROM t1 +---- +stmt 0 err 1 30 31 near "(": syntax error +==== percentile-1.9.1 +SELECT percentile(x) FROM t1 +---- +stmt 0 err 1 -1 29 no such table: t1 +==== percentile-1.9.2 +SELECT percentile_cont(x) FROM t1 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== percentile-1.9.3 +SELECT percentile_disc(x) FROM t1 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== percentile-1.9.4 +SELECT median() FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== percentile-1.9.5 +SELECT percentile() WITHIN GROUP(ORDER BY x) FROM t1 +---- +stmt 0 err 1 32 33 near "(": syntax error +==== percentile-1.9.6 +SELECT percentile_cont()WITHIN GROUP (ORDER BY x) FROM t1 +---- +stmt 0 err 1 37 38 near "(": syntax error +==== percentile-1.9.7 +SELECT percentile_disc()WITHIN GROUP (ORDER BY x) FROM t1 +---- +stmt 0 err 1 37 38 near "(": syntax error +==== percentile-1.10 +SELECT percentile(x,null) FROM t1 +---- +stmt 0 err 1 -1 34 no such table: t1 +==== percentile-1.11 +SELECT percentile(x,'fifty') FROM t1 +---- +stmt 0 err 1 -1 37 no such table: t1 +==== percentile-1.12 +SELECT percentile(x,x'3530') FROM t1 +---- +stmt 0 err 1 -1 37 no such table: t1 +==== percentile-1.13 +SELECT percentile(x,-0.0000001) FROM t1 +---- +stmt 0 err 1 -1 40 no such table: t1 +==== percentile-1.14 +SELECT percentile(x,100.0000001) FROM t1 +---- +stmt 0 err 1 -1 41 no such table: t1 +==== percentile-1.14.2 +SELECT percentile_cont(x,1.0000001) FROM t1 +---- +stmt 0 err 1 -1 44 no such table: t1 +==== percentile-1.14.3 +SELECT percentile_disc(x,1.0000001) FROM t1 +---- +stmt 0 err 1 -1 44 no such table: t1 +==== percentile-1.15.1 + + BEGIN; + UPDATE t1 SET x='50' WHERE x IS NULL; + SELECT percentile(x, 50) FROM t1; +---- +stmt 0 ok +stmt 11 err 1 -1 53 no such table: t1 +stmt 53 err 1 -1 91 no such table: t1 +==== percentile-1.15.2 + + SELECT percentile_cont(x, 0.50) FROM t1; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== percentile-1.15.3 + + SELECT percentile_disc(x, 0.50) FROM t1; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== percentile-1.15.4 + + SELECT median(x) FROM t1; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== percentile-1.16 + + ROLLBACK; + BEGIN; + UPDATE t1 SET x=x'3530' WHERE x IS NULL; + SELECT percentile(x, 50) FROM t1; +---- +stmt 0 ok +stmt 14 ok +stmt 25 err 1 -1 70 no such table: t1 +stmt 70 err 1 -1 108 no such table: t1 +==== percentile-1.17 + + ROLLBACK; + SELECT percentile(x, 50) FROM t1; +---- +stmt 0 ok +stmt 14 err 1 -1 52 no such table: t1 +==== percentile-1.18 + + UPDATE t1 SET x=NULL; + SELECT ifnull(percentile(x, 50),'NULL') FROM t1 +---- +stmt 0 err 1 -1 26 no such table: t1 +stmt 26 err 1 -1 79 no such table: t1 +==== percentile-1.19 + + UPDATE t1 SET x=12345 WHERE rowid=5; + SELECT percentile(x, 0), percentile(x, 50), percentile(x,100) FROM t1 +---- +stmt 0 err 1 -1 41 no such table: t1 +stmt 41 err 1 -1 116 no such table: t1 +==== percentile-1.20.1 + + DELETE FROM t1; + INSERT INTO t1 SELECT x+0.0 FROM t2; + UPDATE t1 SET x=1.0e300*1.0e300 WHERE rowid=5; + SELECT percentile(x,50) from t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 61 no such table: t1 +stmt 61 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 149 no such table: t1 +==== percentile-1.20.2 + + SELECT percentile_cont(x,0.50) from t1; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== percentile-1.20.3 + + SELECT percentile_disc(x,0.50) from t1; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== percentile-1.20.4 + + SELECT median(x) from t1; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== percentile-1.20.5 + + SELECT percentile(50) WITHIN GROUP (ORDER BY x) from t1; +---- +stmt 0 err 1 42 43 near "(": syntax error +==== percentile-1.20.6 + + SELECT percentile_cont(0.50) WITHIN GROUP (ORDER BY x) from t1; +---- +stmt 0 err 1 49 50 near "(": syntax error +==== percentile-1.20.7 + + SELECT percentile_disc(0.50) WITHIN GROUP(ORDER BY X) from t1; +---- +stmt 0 err 1 48 49 near "(": syntax error +==== percentile-1.20.8 + + SELECT median() WITHIN GROUP (ORDER BY x) from t1; +---- +stmt 0 err 1 36 37 near "(": syntax error +==== percentile-1.21 + + UPDATE t1 SET x=-1.0e300*1.0e300 WHERE rowid=5; + SELECT percentile(x,50) from t1; +---- +stmt 0 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 89 no such table: t1 +==== percentile-3.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, d); + INSERT INTO t1 VALUES (1, 'A', 'one', 8.4), + (2, 'B', 'two', 7.1), + (3, 'C', 'three', 5.9), + (4, 'D', 'one', 11.0), + (5, 'E', 'two', 12.5), + (6, 'F', 'three', 0.0), + (7, 'G', 'one', 2.7); +---- +stmt 0 ok +stmt 27 ok +stmt 78 err 1 -1 414 no such table: t1 +==== percential-4.0 + + CREATE TABLE products( + vendorId INT, + productId INTEGER PRIMARY KEY, + productName REAL, + price REAL + ); + INSERT INTO products VALUES + (1001, 17, 'Left-handed screwdriver', 25.99), + (1001, 49, 'Right-handed screwdriver', 25.99), + (1001, 216, 'Long weight (blue)', 14.75), + (1001, 31, 'Long weight (green)', 11.99), + (1002, 37, 'Sledge hammer', 33.49), + (1003, 7, 'Chainsaw', 245.00), + (1003, 8, 'Straw dog box', 55.99), + (1003, 12, 'Hammock', 11.01), + (1004, 113, 'Teapot', 12.45), + (1004, 117, 'Bottomless coffee mug', 9.99); +---- +stmt 0 ok +stmt 120 err 1 -1 582 no such table: products +==== percentile-4.1 + + SELECT VendorId, ProductId, /* ProductName,*/ Price, + avg(price) OVER (PARTITION BY vendorId) AS "Average", + median(price) OVER (PARTITION BY vendorId) AS "Median" + FROM products + ORDER BY vendorId, productId; +---- +stmt 0 err 1 -1 233 no such table: products +==== percentile-4.2 + + SELECT vendorId, median(price) FROM products + GROUP BY 1 ORDER BY 1; +---- +stmt 0 err 1 -1 73 no such table: products +==== percentile-5.0 + + CREATE TABLE user(name TEXT, class TEXT, cost REAL); + INSERT INTO user VALUES + ('Alice', 'Y', 3578.27), + ('Bob', 'X', 3399.99), + ('Cindy', 'Z', 699.10), + ('Dave', 'Y', 3078.27), + ('Emma', 'Z', 2319.99), + ('Fred', 'Y', 539.99), + ('Gina', 'X', 2320.49), + ('Hank', 'W', 24.99), + ('Irma', 'W', 24.99), + ('Jake', 'X', 2234.99), + ('Kim', 'Y', 4319.99), + ('Liam', 'X', 4968.59), + ('Mia', 'W', 59.53), + ('Nate', 'W', 23.50); +---- +stmt 0 ok +stmt 55 err 1 -1 491 no such table: user +==== percentile-5.1 + + SELECT name, class, cost, + percentile(cost, 0) OVER w1 AS 'P0', + percentile(cost, 25) OVER w1 AS 'P1', + percentile(cost, 50) OVER w1 AS 'P2', + percentile(cost, 75) OVER w1 AS 'P3', + percentile(cost, 100) OVER w1 AS 'P4' + FROM user + WINDOW w1 AS (PARTITION BY class) + ORDER BY class, cost; +---- +stmt 0 err 1 -1 314 no such table: user +==== percentile-6.0 + + WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<12) + SELECT median(iif(n%2,0.1,1.0)) FROM c; +---- +stmt 0 err 1 86 118 no such function: median +==== percentile-7.0 + + WITH RECURSIVE t1(n,x) AS ( + VALUES(1,1.0) + UNION ALL + SELECT n+1, if(n%2,n*2.0,999998.0-2.0*n) FROM t1 WHERE n<1000000 + ) SELECT median(x) FROM t1; +---- +stmt 0 err 1 143 161 no such function: median diff --git a/parser/testdata/pragma.metadata.json b/parser/testdata/pragma.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pragma.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pragma.test b/parser/testdata/pragma.test new file mode 100644 index 0000000..977ec4b --- /dev/null +++ b/parser/testdata/pragma.test @@ -0,0 +1,1014 @@ +==== pragma-1.1 + + PRAGMA cache_size; + PRAGMA default_cache_size; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 23 ok +stmt 54 ok +==== pragma-1.4 + + PRAGMA synchronous=OFF; + PRAGMA cache_size; + PRAGMA default_cache_size; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 28 ok +stmt 51 ok +stmt 82 ok +==== pragma-1.5 + + PRAGMA cache_size=-4321; + PRAGMA cache_size; + PRAGMA default_cache_size; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 29 ok +stmt 52 ok +stmt 83 ok +==== pragma-1.6 + + PRAGMA synchronous=ON; + PRAGMA cache_size; + PRAGMA default_cache_size; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 27 ok +stmt 50 ok +stmt 81 ok +==== pragma-1.8 + + PRAGMA default_cache_size=-123; + PRAGMA cache_size; + PRAGMA default_cache_size; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 36 ok +stmt 59 ok +stmt 90 ok +==== pragma-1.9.2 + + VACUUM; + PRAGMA cache_size; + PRAGMA default_cache_size; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 14 ok +stmt 39 ok +stmt 72 ok +==== pragma-1.10 + + PRAGMA synchronous=NORMAL; + PRAGMA cache_size; + PRAGMA default_cache_size; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 31 ok +stmt 54 ok +stmt 85 ok +==== pragma-1.11.1 + + PRAGMA synchronous=EXTRA; + PRAGMA cache_size; + PRAGMA default_cache_size; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 30 ok +stmt 53 ok +stmt 84 ok +==== pragma-1.11.2 + + PRAGMA synchronous=FULL; + PRAGMA cache_size; + PRAGMA default_cache_size; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 29 ok +stmt 52 ok +stmt 83 ok +==== pragma-1.13 + + PRAGMA synchronous=0; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 26 ok +==== pragma-1.14 + + PRAGMA synchronous=2; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 26 ok +==== pragma-1.14.1 + + PRAGMA synchronous=4; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 26 ok +==== pragma-1.14.2 + + PRAGMA synchronous=3; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 26 ok +==== pragma-1.14.3 + + PRAGMA synchronous=8; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 26 ok +==== pragma-1.14.4 + + PRAGMA synchronous=10; + PRAGMA synchronous; +---- +stmt 0 ok +stmt 27 ok +==== 1.15.1 + + PRAGMA default_cache_size = 0; +---- +stmt 0 ok +==== 1.15.2 + + PRAGMA default_cache_size; +---- +stmt 0 ok +==== 1.15.3 + + PRAGMA default_cache_size = -500; +---- +stmt 0 ok +==== 1.15.4 + + PRAGMA default_cache_size; +---- +stmt 0 ok +==== 1.15.3.dup1 + + PRAGMA default_cache_size = 500; +---- +stmt 0 ok +==== 1.15.4.dup1 + + PRAGMA default_cache_size; +---- +stmt 0 ok +==== 1.15.4.dup2 + + PRAGMA default_cache_size; +---- +stmt 0 ok +==== pragma-1.15 + + PRAGMA vdbe_listing=YES; + PRAGMA vdbe_listing; +---- +stmt 0 ok +stmt 31 ok +==== pragma-1.16 + + PRAGMA vdbe_listing=NO; + PRAGMA vdbe_listing; +---- +stmt 0 ok +stmt 30 ok +==== pragma-1.17 + + PRAGMA parser_trace=ON; + PRAGMA parser_trace=OFF; +---- +stmt 0 ok +stmt 28 ok +==== pragma-1.18 + + PRAGMA bogus = -1234; -- Parsing of negative values +---- +stmt 0 ok +==== pragma-2.2 + + pragma aux.synchronous; +---- +stmt 0 err 1 14 30 unknown database aux +==== pragma-2.3 + + pragma aux.synchronous = OFF; + pragma aux.synchronous; + pragma synchronous; +---- +stmt 0 err 1 14 36 unknown database aux +stmt 36 err 1 50 66 unknown database aux +stmt 66 ok +==== pragma-2.4 + + pragma aux.synchronous = ON; + pragma synchronous; + pragma aux.synchronous; +---- +stmt 0 err 1 14 35 unknown database aux +stmt 35 ok +stmt 61 err 1 75 91 unknown database aux +==== pragma-3.3 +PRAGMA integrity_check=1 +---- +stmt 0 ok +==== pragma-3.4 + + ATTACH DATABASE 'test.db' AS t2; + PRAGMA integrity_check +---- +stmt 0 ok +stmt 41 ok +==== pragma-3.5 + + PRAGMA integrity_check=4 +---- +stmt 0 ok +==== pragma-3.5.2 + + PRAGMA integrity_check='4' +---- +stmt 0 err 1 -1 34 no such table: 4 +==== pragma-3.6 + + PRAGMA integrity_check=xyz +---- +stmt 0 err 1 -1 34 no such table: xyz +==== pragma-3.6b + + PRAGMA integrity_check=t2 +---- +stmt 0 err 1 -1 33 no such table: t2 +==== pragma-3.6c + + PRAGMA integrity_check=sqlite_schema +---- +stmt 0 ok +==== pragma-3.7 + + PRAGMA integrity_check=0 +---- +stmt 0 ok +==== pragma-3.8.1 +PRAGMA quick_check +---- +stmt 0 ok +==== pragma-3.8.2 +PRAGMA QUICK_CHECK +---- +stmt 0 ok +==== pragma-3.9a + + ATTACH 'testerr.db' AS t2; + PRAGMA integrity_check +---- +stmt 0 ok +stmt 35 ok +==== pragma-3.9b + + PRAGMA t2.integrity_check=t2; +---- +stmt 0 err 1 14 36 unknown database t2 +==== pragma-3.9c + + PRAGMA t2.integrity_check=sqlite_schema; +---- +stmt 0 err 1 14 47 unknown database t2 +==== pragma-3.10 + + PRAGMA integrity_check=1 +---- +stmt 0 ok +==== pragma-3.11 + + PRAGMA integrity_check=5 +---- +stmt 0 ok +==== pragma-3.12 + + PRAGMA integrity_check=4 +---- +stmt 0 ok +==== pragma-3.13 + + PRAGMA integrity_check=3 +---- +stmt 0 ok +==== pragma-3.14 + + PRAGMA integrity_check(2) +---- +stmt 0 ok +==== pragma-3.15 + + ATTACH 'testerr.db' AS t3; + PRAGMA integrity_check +---- +stmt 0 ok +stmt 35 ok +==== pragma-3.16 + + PRAGMA integrity_check(10) +---- +stmt 0 ok +==== pragma-3.17 + + PRAGMA integrity_check=8 +---- +stmt 0 ok +==== pragma-3.18 + + PRAGMA integrity_check=4 +---- +stmt 0 ok +==== pragma-3.20 + + CREATE TABLE t1(a,b); + CREATE INDEX t1a ON t1(a); + INSERT INTO t1 VALUES(1,1),(2,2),(3,3),(2,4),(NULL,5),(NULL,6); + PRAGMA writable_schema=ON; + UPDATE sqlite_master SET sql='CREATE UNIQUE INDEX t1a ON t1(a)' + WHERE name='t1a'; + UPDATE sqlite_master SET sql='CREATE TABLE t1(a NOT NULL,b)' + WHERE name='t1'; + PRAGMA writable_schema=OFF; + ALTER TABLE t1 RENAME TO t1x; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 28 err 1 -1 61 no such table: main.t1 +stmt 61 err 1 -1 131 no such table: t1 +stmt 131 ok +stmt 164 ok +stmt 260 ok +stmt 352 ok +stmt 386 err 1 -1 422 no such table: t1 +stmt 422 ok +==== pragma-3.21 + + PRAGMA integrity_check(3); +---- +stmt 0 ok +==== pragma-3.22 + + PRAGMA integrity_check(2); +---- +stmt 0 ok +==== pragma-3.23 + + PRAGMA integrity_check(1); +---- +stmt 0 ok +==== pragma-3.24 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a); + INSERT INTO t1 VALUES (1); + ALTER TABLE t1 ADD COLUMN b NOT NULL DEFAULT 0.25; + SELECT * FROM t1; + PRAGMA integrity_check(t1); +---- +stmt 0 ok +stmt 29 ok +stmt 53 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 120 no such table: t1 +stmt 139 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 193 no such table: t1 +==== pragma-3.25 + + ALTER TABLE t1 ADD COLUMN c CHECK (1); + SELECT * FROM t1; + PRAGMA integrity_check(t1); +---- +stmt 0 err 1 -1 38 no such table: t1 +stmt 43 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 97 no such table: t1 +==== pragma-3.40 + + CREATE TABLE t1( + a INTEGER PRIMARY KEY, + b TEXT COLLATE nocase, + c INT COLLATE nocase, + d TEXT + ); + INSERT INTO t1(a,b,c,d) VALUES + (1, 'one','one','one'), + (2, 'two','two','two'), + (3, 'three','three','three'), + (4, 'four','four','four'), + (5, 'five','five','five'); + CREATE INDEX t1bcd ON t1(b,c,d); + CREATE TABLE t2( + a INTEGER PRIMARY KEY, + b TEXT COLLATE nocase, + c INT COLLATE nocase, + d TEXT + ); + INSERT INTO t2(a,b,c,d) VALUES + (1, 'one','one','one'), + (2, 'two','two','TWO'), + (3, 'three','THREE','three'), + (4, 'FOUR','four','four'), + (5, 'FIVE','FIVE','five'); + CREATE INDEX t2bcd ON t2(b,c,d); + CREATE TEMP TABLE saved_schema AS SELECT name, rootpage FROM sqlite_schema; + PRAGMA writable_schema=ON; + UPDATE sqlite_schema + SET rootpage=(SELECT rootpage FROM saved_schema WHERE name='t2bcd') + WHERE name='t1bcd'; + UPDATE sqlite_schema + SET rootpage=(SELECT rootpage FROM saved_schema WHERE name='t1bcd') + WHERE name='t2bcd'; + PRAGMA Writable_schema=RESET; +---- +stmt 0 ok +stmt 115 err 1 -1 300 no such table: t1 +stmt 300 err 1 -1 335 no such table: main.t1 +stmt 335 ok +stmt 450 err 1 -1 635 no such table: t2 +stmt 635 err 1 -1 670 no such table: main.t2 +stmt 670 ok +stmt 748 ok +stmt 777 err 1 -1 896 no such table: saved_schema +stmt 896 err 1 -1 1015 no such table: saved_schema +stmt 1015 ok +==== pragma-3.41 + + SELECT integrity_check AS x FROM pragma_integrity_check ORDER BY 1; +---- +stmt 0 ok +==== pragma-4.1 + + ATTACH 'test2.db' AS aux; + pragma aux.cache_size; + pragma aux.default_cache_size; +---- +stmt 0 ok +stmt 30 err 1 42 57 unknown database aux +stmt 57 err 1 69 92 unknown database aux +==== pragma-4.2 + + pragma aux.cache_size = 50; + pragma aux.cache_size; + pragma aux.default_cache_size; +---- +stmt 0 err 1 12 32 unknown database aux +stmt 32 err 1 44 59 unknown database aux +stmt 59 err 1 71 94 unknown database aux +==== pragma-4.3 + + pragma aux.default_cache_size = 456; + pragma aux.cache_size; + pragma aux.default_cache_size; +---- +stmt 0 err 1 12 41 unknown database aux +stmt 41 err 1 53 68 unknown database aux +stmt 68 err 1 80 103 unknown database aux +==== pragma-4.4 + + pragma cache_size; + pragma default_cache_size; +---- +stmt 0 ok +stmt 23 ok +==== pragma-4.5 + + DETACH aux; + ATTACH 'test3.db' AS aux; + pragma aux.cache_size; + pragma aux.default_cache_size; +---- +stmt 0 ok +stmt 16 ok +stmt 46 err 1 58 73 unknown database aux +stmt 73 err 1 85 108 unknown database aux +==== pragma-4.6 + + DETACH aux; + ATTACH 'test2.db' AS aux; + pragma aux.cache_size; + pragma aux.default_cache_size; +---- +stmt 0 ok +stmt 16 ok +stmt 46 err 1 58 73 unknown database aux +stmt 73 err 1 85 108 unknown database aux +==== pragma-5.0 + + pragma synchronous; +---- +stmt 0 ok +==== pragma-5.1 + + BEGIN; + pragma synchronous = OFF; +---- +stmt 0 ok +stmt 11 ok +==== pragma-5.2 + + pragma synchronous; +---- +stmt 0 ok +==== pragma-6.2.1 + + pragma table_info; +---- +stmt 0 ok +==== pragma-6.2.2 + + CREATE TABLE t5( + a TEXT DEFAULT CURRENT_TIMESTAMP, + b DEFAULT (5+3), + c TEXT, + d INTEGER DEFAULT NULL, + e TEXT DEFAULT '', + UNIQUE(b,c,d), + PRIMARY KEY(e,b,c) + ); + PRAGMA table_info(t5); +---- +stmt 0 ok +stmt 207 ok +==== pragma-6.2.3 + + CREATE TABLE t2_3(a,b INTEGER PRIMARY KEY,c); + pragma table_info(t2_3) +---- +stmt 0 ok +stmt 50 ok +==== pragma-6.3.1 + + CREATE TABLE t3(a int references t2(b), b UNIQUE); + pragma foreign_key_list(t3); +---- +stmt 0 ok +stmt 57 ok +==== pragma-6.3.2 + + pragma foreign_key_list; +---- +stmt 0 ok +==== pragma-6.3.3 + + pragma foreign_key_list(t3_bogus); +---- +stmt 0 ok +==== pragma-6.3.4 + + pragma foreign_key_list(t5); +---- +stmt 0 ok +==== pragma-6.5.1c + + CREATE INDEX t3i2 ON t3(b,a); + PRAGMA index_info='t3i2'; + DROP INDEX t3i2; +---- +stmt 0 err 1 -1 32 no such table: main.t3 +stmt 32 ok +stmt 60 err 1 -1 79 no such index: t3i2 +==== pragma-6.5.2 + + pragma index_info(t3i1_bogus); +---- +stmt 0 ok +==== pragma-6.6.1 + + CREATE TABLE trial(col_main); + CREATE TEMP TABLE trial(col_temp); +---- +stmt 0 ok +stmt 36 ok +==== pragma-6.6.2 + + PRAGMA table_info(trial); +---- +stmt 0 ok +==== pragma-6.6.3 + + PRAGMA temp.table_info(trial); +---- +stmt 0 ok +==== pragma-6.6.4 + + PRAGMA main.table_info(trial); +---- +stmt 0 ok +==== pragma-6.8 + + CREATE TABLE t68(a,b,c,PRIMARY KEY(a,b,a,c)); + PRAGMA table_info(t68); +---- +stmt 0 ok +stmt 50 ok +==== pragma-7.1.2 + + pragma index_list(t3_bogus); +---- +stmt 0 ok +==== pragma-8.1.1 + + PRAGMA schema_version = 105; +---- +stmt 0 ok +==== pragma-8.1.3 + + PRAGMA schema_version = 106; + PRAGMA schema_version; +---- +stmt 0 ok +stmt 31 ok +==== pragma-8.1.4 + + PRAGMA schema_version = 106; + PRAGMA schema_version; +---- +stmt 0 ok +stmt 31 ok +==== pragma-8.1.5 + + CREATE TABLE t4(a, b, c); + INSERT INTO t4 VALUES(1, 2, 3); + SELECT * FROM t4; +---- +stmt 0 ok +stmt 30 err 1 -1 66 no such table: t4 +stmt 66 err 1 -1 88 no such table: t4 +==== pragma-8.1.6 + + PRAGMA schema_version; +---- +stmt 0 ok +==== pragma-8.1.8 + + PRAGMA schema_version = 108; +---- +stmt 0 ok +==== pragma-8.1.11 + + ATTACH 'test2.db' AS aux; + CREATE TABLE aux.t1(a, b, c); + PRAGMA aux.schema_version = 205; +---- +stmt 0 ok +stmt 32 err 1 52 59 unknown database aux +stmt 68 err 1 82 107 unknown database aux +==== pragma-8.1.12 + + PRAGMA aux.schema_version; +---- +stmt 0 err 1 14 33 unknown database aux +==== pragma-8.1.13 + + PRAGMA schema_version; +---- +stmt 0 ok +==== pragma-8.1.15 + + PRAGMA aux.schema_version = 206; +---- +stmt 0 err 1 14 39 unknown database aux +==== pragma-8.2.2 + + PRAGMA user_version = 2; +---- +stmt 0 ok +==== pragma-8.2.4.1 + + PRAGMA schema_version; +---- +stmt 0 ok +==== pragma-8.2.4.2 + + VACUUM; + PRAGMA user_version; +---- +stmt 0 ok +stmt 14 ok +==== pragma-8.2.4.3 + + PRAGMA schema_version; +---- +stmt 0 ok +==== pragma-8.2.5 + + PRAGMA aux.user_version; +---- +stmt 0 err 1 14 31 unknown database aux +==== pragma-8.2.6 + + PRAGMA aux.user_version = 3; +---- +stmt 0 err 1 14 35 unknown database aux +==== pragma-8.2.7 + + PRAGMA aux.user_version; +---- +stmt 0 err 1 14 31 unknown database aux +==== pragma-8.2.8 + + PRAGMA main.user_version; +---- +stmt 0 ok +==== pragma-8.2.9 + + BEGIN; + PRAGMA aux.user_version = 10; + PRAGMA user_version = 11; +---- +stmt 0 ok +stmt 13 err 1 27 49 unknown database aux +stmt 49 ok +==== pragma-8.2.10 + + PRAGMA aux.user_version; +---- +stmt 0 err 1 14 31 unknown database aux +==== pragma-8.2.11 + + PRAGMA main.user_version; +---- +stmt 0 ok +==== pragma-8.2.12 + + ROLLBACK; + PRAGMA aux.user_version; +---- +stmt 0 ok +stmt 16 err 1 30 47 unknown database aux +==== pragma-8.2.13 + + PRAGMA main.user_version; +---- +stmt 0 ok +==== pragma-8.2.14 + + PRAGMA user_version = -450; +---- +stmt 0 ok +==== pragma-8.2.15 + + PRAGMA user_version; +---- +stmt 0 ok +==== pragma-8.3.1 + + PRAGMA application_id; +---- +stmt 0 ok +==== pragma-8.3.2 +PRAGMA Application_ID(12345); PRAGMA application_id; +---- +stmt 0 ok +stmt 29 ok +==== pragma-9.4 + + PRAGMA temp_store_directory; +---- +stmt 0 ok +==== pragma-9.6 + + PRAGMA temp_store_directory; +---- +stmt 0 ok +==== pragma-9.7 + + PRAGMA temp_store_directory='/NON/EXISTENT/PATH/FOOBAR'; +---- +stmt 0 err 1 -1 64 not a writable directory +==== pragma-9.8 + + PRAGMA temp_store_directory=''; +---- +stmt 0 ok +==== pragma-9.9 + + PRAGMA temp_store_directory; + PRAGMA temp_store=FILE; + CREATE TEMP TABLE temp_store_directory_test(a integer); + INSERT INTO temp_store_directory_test values (2); + SELECT * FROM temp_store_directory_test; +---- +stmt 0 ok +stmt 40 ok +stmt 74 ok +stmt 140 err 1 -1 200 no such table: temp_store_directory_test +stmt 200 err 1 -1 251 no such table: temp_store_directory_test +==== pragma-9.11 + + PRAGMA temp_store = 0; + PRAGMA temp_store; +---- +stmt 0 ok +stmt 27 ok +==== pragma-9.12 + + PRAGMA temp_store = 1; + PRAGMA temp_store; +---- +stmt 0 ok +stmt 27 ok +==== pragma-9.13 + + PRAGMA temp_store = 2; + PRAGMA temp_store; +---- +stmt 0 ok +stmt 27 ok +==== pragma-9.14 + + PRAGMA temp_store = 3; + PRAGMA temp_store; +---- +stmt 0 ok +stmt 27 ok +==== pragma-9.15 + + BEGIN EXCLUSIVE; + CREATE TEMP TABLE temp_table(t); + INSERT INTO temp_table VALUES('valuable data'); + PRAGMA temp_store = 1; +---- +stmt 0 ok +stmt 21 ok +stmt 58 err 1 -1 110 no such table: temp_table +stmt 110 ok +==== pragma-9.16 + + SELECT * FROM temp_table; + COMMIT; +---- +stmt 0 err 1 -1 30 no such table: temp_table +stmt 30 ok +==== pragma-9.17 + + INSERT INTO temp_table VALUES('valuable data II'); + SELECT * FROM temp_table; +---- +stmt 0 err 1 -1 55 no such table: temp_table +stmt 55 err 1 -1 85 no such table: temp_table +==== pragma-10.1 + + INSERT INTO t1 VALUES(randstr(10,10)); +---- +stmt 0 err 1 -1 43 no such table: t1 +==== pragma-10.2 + + UPDATE t1 SET a = randstr(10,10); +---- +stmt 0 err 1 -1 38 no such table: t1 +==== pragma-10.3 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== pragma-14.2 + + CREATE TABLE abc(a, b, c); + PRAGMA page_count; + PRAGMA main.page_count; + PRAGMA temp.page_count; +---- +stmt 0 ok +stmt 34 ok +stmt 59 ok +stmt 89 ok +==== pragma-14.2uc +pragma PAGE_COUNT +---- +stmt 0 ok +==== pragma-14.3 + + BEGIN; + CREATE TABLE def(a, b, c); + PRAGMA page_count; +---- +stmt 0 ok +stmt 14 ok +stmt 47 ok +==== pragma-14.3uc +pragma PAGE_COUNT +---- +stmt 0 ok +==== pragma-14.5 + + ROLLBACK; + PRAGMA page_count; +---- +stmt 0 ok +stmt 16 ok +==== pragma-14.6uc +pragma AUX.PAGE_COUNT +---- +stmt 0 err 1 7 22 unknown database AUX +==== pragma-15.1 + + PRAGMA cache_size=59; + PRAGMA cache_size; +---- +stmt 0 ok +stmt 28 ok +==== pragma-16.8.1 + + PRAGMA lock_proxy_file="yetanotherproxy"; + PRAGMA lock_proxy_file; +---- +stmt 0 ok +stmt 48 ok +==== pragma-16.8.2 + + create table mine(x); +---- +stmt 0 ok +==== pragma-19.1 +PRAGMA error +---- +stmt 0 ok +==== pragma-19.2 +PRAGMA error='This is the error message' +---- +stmt 0 ok +==== pragma-19.3 +PRAGMA error='7 This is the error message' +---- +stmt 0 ok +==== pragma-19.4 +PRAGMA error=7 +---- +stmt 0 ok +==== pragma-20.1 +PRAGMA data_store_directory +---- +stmt 0 ok +==== pragma-20.3 +PRAGMA data_store_directory +---- +stmt 0 ok +==== pragma-20.8 +PRAGMA data_store_directory +---- +stmt 0 ok +==== 22.3.2 + PRAGMA main.integrity_check; +---- +stmt 0 ok +==== 22.3.3 + PRAGMA aux.integrity_check; +---- +stmt 0 err 1 8 28 unknown database aux +==== 22.4.2 + PRAGMA main.integrity_check; +---- +stmt 0 ok +==== 22.4.3 + PRAGMA aux.integrity_check; +---- +stmt 0 err 1 8 28 unknown database aux +==== 24.0 + + PRAGMA page_size = 1024; + CREATE TABLE t1(a, b, c); + CREATE INDEX i1 ON t1(b); + INSERT INTO t1 VALUES('a', 'b', 'c'); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 29 ok +stmt 59 err 1 -1 89 no such table: main.t1 +stmt 89 err 1 -1 131 no such table: t1 +stmt 131 ok +==== 24.1 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== 24.2 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 25.0 + + CREATE TABLE t1(a INT, b AS (a*2) NOT NULL); + CREATE TEMP TABLE t2(a PRIMARY KEY, b, c UNIQUE) WITHOUT ROWID; + CREATE UNIQUE INDEX t2x ON t2(c,b); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 47 ok +stmt 113 err 1 -1 151 no such table: main.t2 +stmt 151 ok diff --git a/parser/testdata/pragma2.metadata.json b/parser/testdata/pragma2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pragma2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pragma2.test b/parser/testdata/pragma2.test new file mode 100644 index 0000000..1145113 --- /dev/null +++ b/parser/testdata/pragma2.test @@ -0,0 +1,193 @@ +==== pragma2-1.1 + + PRAGMA freelist_count; +---- +stmt 0 ok +==== pragma2-1.2 + + CREATE TABLE abc(a, b, c); + PRAGMA freelist_count; +---- +stmt 0 ok +stmt 31 ok +==== pragma2-1.3 + + DROP TABLE abc; + PRAGMA freelist_count; +---- +stmt 0 err 1 -1 20 no such table: abc +stmt 20 ok +==== pragma2-1.4 + + PRAGMA main.freelist_count; +---- +stmt 0 ok +==== pragma2-2.1 + + ATTACH 'test2.db' AS aux; + PRAGMA aux.auto_vacuum=OFF; + PRAGMA aux.freelist_count; +---- +stmt 0 ok +stmt 32 err 1 46 66 unknown database aux +stmt 66 err 1 80 99 unknown database aux +==== pragma2-2.2 + + CREATE TABLE aux.abc(a, b, c); + PRAGMA aux.freelist_count; +---- +stmt 0 err 1 20 28 unknown database aux +stmt 37 err 1 51 70 unknown database aux +==== pragma2-2.5 + + DELETE FROM aux.abc; + PRAGMA aux.freelist_count; +---- +stmt 0 err 1 -1 27 no such table: aux.abc +stmt 27 err 1 41 60 unknown database aux +==== pragma2-3.1 + + PRAGMA aux.freelist_count; + PRAGMA main.freelist_count; + PRAGMA freelist_count; +---- +stmt 0 err 1 14 33 unknown database aux +stmt 33 ok +stmt 67 ok +==== pragma2-3.2 + + PRAGMA freelist_count = 500; + PRAGMA freelist_count; +---- +stmt 0 ok +stmt 35 ok +==== pragma2-3.3 + + PRAGMA aux.freelist_count = 500; + PRAGMA aux.freelist_count; +---- +stmt 0 err 1 14 39 unknown database aux +stmt 39 err 1 53 72 unknown database aux +==== pragma2-4.1 + + PRAGMA main.cache_size=2000; + PRAGMA temp.cache_size=2000; + PRAGMA cache_spill; + PRAGMA main.cache_spill; + PRAGMA temp.cache_spill; +---- +stmt 0 ok +stmt 31 ok +stmt 62 ok +stmt 84 ok +stmt 111 ok +==== pragma2-4.2 + + PRAGMA cache_spill=OFF; + PRAGMA cache_spill; + PRAGMA main.cache_spill; + PRAGMA temp.cache_spill; +---- +stmt 0 ok +stmt 26 ok +stmt 48 ok +stmt 75 ok +==== pragma2-4.3 + + PRAGMA page_size=1024; + PRAGMA cache_size=50; + BEGIN; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, d); + INSERT INTO t1 VALUES(1, randomblob(400), 1, randomblob(400)); + INSERT INTO t1 SELECT a+1, randomblob(400), a+1, randomblob(400) FROM t1; + INSERT INTO t1 SELECT a+2, randomblob(400), a+2, randomblob(400) FROM t1; + INSERT INTO t1 SELECT a+4, randomblob(400), a+4, randomblob(400) FROM t1; + INSERT INTO t1 SELECT a+8, randomblob(400), a+8, randomblob(400) FROM t1; + INSERT INTO t1 SELECT a+16, randomblob(400), a+16, randomblob(400) FROM t1; + INSERT INTO t1 SELECT a+32, randomblob(400), a+32, randomblob(400) FROM t1; + INSERT INTO t1 SELECT a+64, randomblob(400), a+64, randomblob(400) FROM t1; + COMMIT; + ATTACH 'test2.db' AS aux1; + CREATE TABLE aux1.t2(a INTEGER PRIMARY KEY, b, c, d); + INSERT INTO t2 SELECT * FROM t1; + DETACH aux1; + PRAGMA cache_spill=ON; +---- +stmt 0 ok +stmt 25 ok +stmt 49 ok +stmt 58 ok +stmt 109 err 1 -1 174 no such table: t1 +stmt 174 err 1 -1 250 no such table: t1 +stmt 250 err 1 -1 326 no such table: t1 +stmt 326 err 1 -1 402 no such table: t1 +stmt 402 err 1 -1 478 no such table: t1 +stmt 478 err 1 -1 556 no such table: t1 +stmt 556 err 1 -1 634 no such table: t1 +stmt 634 err 1 -1 712 no such table: t1 +stmt 712 ok +stmt 722 ok +stmt 751 err 1 767 775 unknown database aux1 +stmt 807 err 1 -1 842 no such table: t2 +stmt 842 ok +stmt 857 ok +==== pragma2-4.6 + + ROLLBACK; + PRAGMA cache_spill=OFF; + ATTACH 'test2.db' AS aux1; + PRAGMA aux1.cache_size=50; + BEGIN; + UPDATE t2 SET c=c+1; + PRAGMA lock_status; +---- +stmt 0 ok +stmt 12 ok +stmt 38 ok +stmt 67 err 1 77 96 unknown database aux1 +stmt 96 ok +stmt 105 err 1 -1 128 no such table: t2 +stmt 128 ok +==== pragma2-4.7 + + COMMIT; +---- +stmt 0 ok +==== pragma2-4.8 + + PRAGMA cache_spill=ON; -- Applies to all databases + BEGIN; + UPDATE t2 SET c=c-1; + PRAGMA lock_status; +---- +stmt 0 ok +stmt 25 ok +stmt 62 err 1 -1 85 no such table: t2 +stmt 85 ok +==== pragma2-5.1 + + PRAGMA page_size=16384; + CREATE TABLE t1(x); + PRAGMA cache_size=2; + PRAGMA cache_spill=YES; + PRAGMA cache_spill; +---- +stmt 0 ok +stmt 26 ok +stmt 48 ok +stmt 71 ok +stmt 97 ok +==== pragma2-5.2 + + PRAGMA cache_spill=NO; + PRAGMA cache_spill; +---- +stmt 0 ok +stmt 25 ok +==== pragma2-5.3 + + PRAGMA cache_spill(-51); + PRAGMA cache_spill; +---- +stmt 0 ok +stmt 27 ok diff --git a/parser/testdata/pragma3.metadata.json b/parser/testdata/pragma3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pragma3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pragma3.test b/parser/testdata/pragma3.test new file mode 100644 index 0000000..75e3782 --- /dev/null +++ b/parser/testdata/pragma3.test @@ -0,0 +1,84 @@ +==== pragma3-100 + + PRAGMA data_version; +---- +stmt 0 ok +==== pragma3-101 + + PRAGMA temp.data_version; +---- +stmt 0 ok +==== pragma3-102 + + PRAGMA main.data_version=1234; + PRAGMA main.data_version; +---- +stmt 0 ok +stmt 33 ok +==== pragma3-110 + + PRAGMA data_version; + BEGIN IMMEDIATE; + PRAGMA data_version; + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(100),(200),(300); + PRAGMA data_version; + COMMIT; + SELECT * FROM t1; + PRAGMA data_version; +---- +stmt 0 ok +stmt 23 ok +stmt 42 ok +stmt 65 ok +stmt 87 err 1 -1 129 no such table: t1 +stmt 129 ok +stmt 152 ok +stmt 162 err 1 -1 182 no such table: t1 +stmt 182 ok +==== pragma3-130 + + PRAGMA data_version; + BEGIN IMMEDIATE; + PRAGMA data_version; + INSERT INTO t1 VALUES(400),(500); + PRAGMA data_version; + COMMIT; + SELECT * FROM t1; + PRAGMA data_version; + PRAGMA shrink_memory; +---- +stmt 0 ok +stmt 23 ok +stmt 42 ok +stmt 65 err 1 -1 101 no such table: t1 +stmt 101 ok +stmt 124 ok +stmt 134 err 1 -1 154 no such table: t1 +stmt 154 ok +stmt 177 ok +==== pragma3-150 + + SELECT * FROM t1; + PRAGMA data_version; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 ok +==== pragma3-generated + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); + PRAGMA data_version; +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t1 +stmt 60 ok +==== pragma3-generated.dup1 + + BEGIN EXCLUSIVE; + COMMIT; + PRAGMA data_version; +---- +stmt 0 ok +stmt 21 ok +stmt 33 ok diff --git a/parser/testdata/pragma4.metadata.json b/parser/testdata/pragma4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pragma4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pragma4.test b/parser/testdata/pragma4.test new file mode 100644 index 0000000..902305f --- /dev/null +++ b/parser/testdata/pragma4.test @@ -0,0 +1,234 @@ +==== 4.1.1 + + CREATE TABLE t1(a, b, c); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t2(d, e, f); +---- +stmt 0 ok +stmt 28 ok +stmt 56 err 1 72 79 unknown database aux +==== 4.1.2 + PRAGMA table_info = t1 +---- +stmt 0 ok +==== 4.1.3 + PRAGMA table_info = t2 +---- +stmt 0 ok +==== 4.1.5a + + PRAGMA table_info(t1) +---- +stmt 0 ok +==== 4.1.5 + + PRAGMA table_info(t1) +---- +stmt 0 ok +==== 4.1.6 + PRAGMA table_info(t2) +---- +stmt 0 ok +==== 4.2.1 + + CREATE TABLE t1(a, b, c); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t2(d, e, f); +---- +stmt 0 ok +stmt 28 ok +stmt 56 err 1 72 79 unknown database aux +==== 4.2.2 + SELECT * FROM pragma_table_info('t1') +---- +stmt 0 ok +==== 4.2.3 + SELECT * FROM pragma_table_info('t2') +---- +stmt 0 ok +==== 4.2.5 + SELECT * FROM pragma_table_info('t1') +---- +stmt 0 ok +==== 4.2.6 + SELECT * FROM pragma_table_info('t2') +---- +stmt 0 ok +==== 4.3.1 + + CREATE TABLE t1(a, b, c); + CREATE INDEX i1 ON t1(b); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t2(d, e, f); + CREATE INDEX aux.i2 ON t2(e); +---- +stmt 0 ok +stmt 28 err 1 -1 56 no such table: main.t1 +stmt 56 ok +stmt 84 err 1 100 107 unknown database aux +stmt 116 err 1 132 148 unknown database aux +==== 4.3.2 + SELECT * FROM pragma_index_info('i1') +---- +stmt 0 ok +==== 4.3.3 + SELECT * FROM pragma_index_info('i2') +---- +stmt 0 ok +==== 4.3.5 + SELECT * FROM pragma_index_info('i1') +---- +stmt 0 ok +==== 4.3.6 + SELECT * FROM pragma_index_info('i2') +---- +stmt 0 ok +==== 4.4.0 + + CREATE INDEX main.i1 ON t1(b, c); + CREATE INDEX aux.i2 ON t2(e, f); +---- +stmt 0 err 1 -1 36 no such table: main.t1 +stmt 36 err 1 52 71 unknown database aux +==== 4.4.1 + SELECT * FROM pragma_index_list('t1') +---- +stmt 0 ok +==== 4.4.2 + SELECT * FROM pragma_index_list('t2') +---- +stmt 0 ok +==== 4.4.5 + SELECT * FROM pragma_index_list('t1') +---- +stmt 0 ok +==== 4.4.6 + SELECT * FROM pragma_index_list('t2') +---- +stmt 0 ok +==== 4.5.0 + + CREATE UNIQUE INDEX main.i1 ON t1(a); + CREATE UNIQUE INDEX aux.i2 ON t2(d); + CREATE TABLE main.c1 (a, b, c REFERENCES t1(a)); + CREATE TABLE aux.c2 (d, e, r REFERENCES t2(d)); +---- +stmt 0 err 1 -1 40 no such table: main.t1 +stmt 40 err 1 63 79 unknown database aux +stmt 79 ok +stmt 130 err 1 146 154 unknown database aux +==== 4.5.1 + SELECT * FROM pragma_foreign_key_list('c1') +---- +stmt 0 ok +==== 4.5.2 + SELECT * FROM pragma_foreign_key_list('c2') +---- +stmt 0 ok +==== 4.5.4 + SELECT * FROM pragma_foreign_key_list('c1') +---- +stmt 0 ok +==== 4.5.5 + SELECT * FROM pragma_foreign_key_list('c2') +---- +stmt 0 ok +==== 4.6.0 + + CREATE TABLE main.c1 (a, b, c REFERENCES t1(a)); + CREATE TABLE aux.c2 (d, e, r REFERENCES t2(d)); + INSERT INTO main.c1 VALUES(1, 2, 3); + INSERT INTO aux.c2 VALUES(4, 5, 6); +---- +stmt 0 ok +stmt 51 err 1 67 75 unknown database aux +stmt 101 err 1 -1 140 no such table: main.c1 +stmt 140 err 1 -1 178 no such table: aux.c2 +==== 4.6.1 + pragma foreign_key_check('c1') +---- +stmt 0 err 1 -1 32 no such table: c1 +==== 4.6.2 + pragma foreign_key_check('c2') +---- +stmt 0 err 1 -1 32 no such table: c2 +==== 4.6.4 + pragma foreign_key_check('c1') +---- +stmt 0 err 1 -1 32 no such table: c1 +==== 4.6.5 + + pragma foreign_key_check('c2') +---- +stmt 0 err 1 -1 35 no such table: c2 +==== 5.0 + + CREATE TABLE t4(a DEFAULT 'abc' /* comment */, b DEFAULT -1 -- comment + , c DEFAULT +4.0 /* another comment */ + ); + PRAGMA table_info = t4; +---- +stmt 0 ok +stmt 122 ok +==== 6.0 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INT PRIMARY KEY, b INT); + CREATE TABLE t2(c INT PRIMARY KEY, d INT REFERENCES t1); + SELECT t.name, f."table", f."from", i.name, i.pk + FROM pragma_table_list() AS t + JOIN pragma_foreign_key_list(t.name, t.schema) AS f + JOIN pragma_table_info(f."table", t.schema) AS i + WHERE i.pk; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 105 ok +stmt 166 ok +==== 6.1 + + CREATE VIEW v1 AS SELECT abs(a) FROM t1; + PRAGMA writable_schema=ON; + UPDATE sqlite_schema + SET sql=replace(sql,'abs(a)','nosuchfunc(a)') + WHERE name='v1'; + PRAGMA writable_schema=RESET; +---- +stmt 0 ok +stmt 45 ok +stmt 76 ok +stmt 176 ok +==== 6.2 + + PRAGMA table_list; +---- +stmt 0 ok +==== 7.0 + + CREATE TABLE t3 ("a" TEXT, "b" TEXT); + CREATE TABLE t4 ("a" TEXT, "b" TEXT, "c" TEXT); +---- +stmt 0 ok +stmt 42 ok +==== 7.1 + + CREATE TABLE pragma_t3 AS SELECT * FROM pragma_table_info('t3'); + CREATE TABLE pragma_t4 AS SELECT * FROM pragma_table_info('t4'); +---- +stmt 0 ok +stmt 69 ok +==== 7.2 + + SELECT pragma_t4.name, pragma_t3.name + FROM pragma_t4 RIGHT JOIN pragma_t3 ON (pragma_t4.name=pragma_t3.name); +---- +stmt 0 err 1 -1 121 no such table: pragma_t4 +==== 7.3 + + SELECT t4.name, t3.name + FROM pragma_table_info('t4') t4 + RIGHT JOIN pragma_table_info('t3') t3 ON (t4.name=t3.name); +---- +stmt 0 ok diff --git a/parser/testdata/pragma5.metadata.json b/parser/testdata/pragma5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pragma5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pragma5.test b/parser/testdata/pragma5.test new file mode 100644 index 0000000..2fedc55 --- /dev/null +++ b/parser/testdata/pragma5.test @@ -0,0 +1,37 @@ +==== 1.0 + + PRAGMA table_info(pragma_function_list) +---- +stmt 0 ok +==== 1.1 + + SELECT DISTINCT name, builtin + FROM pragma_function_list WHERE name='upper' AND builtin +---- +stmt 0 ok +==== 1.2 + + SELECT DISTINCT name, builtin + FROM pragma_function_list WHERE name LIKE 'exter%'; +---- +stmt 0 ok +==== 2.0 + + PRAGMA table_info(pragma_module_list) +---- +stmt 0 ok +==== 2.1 + + SELECT * FROM pragma_module_list WHERE name='fts5' +---- +stmt 0 ok +==== 3.0 + + PRAGMA table_info(pragma_pragma_list) +---- +stmt 0 ok +==== 3.1 + + SELECT * FROM pragma_pragma_list WHERE name='pragma_list' +---- +stmt 0 ok diff --git a/parser/testdata/pragmafault.metadata.json b/parser/testdata/pragmafault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pragmafault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pragmafault.test b/parser/testdata/pragmafault.test new file mode 100644 index 0000000..60b1d65 --- /dev/null +++ b/parser/testdata/pragmafault.test @@ -0,0 +1,9 @@ +==== 1.0 + + CREATE TABLE t1(a, b, CHECK(a!=b)); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 38 err 1 -1 69 no such table: t1 +stmt 69 err 1 -1 100 no such table: t1 diff --git a/parser/testdata/prefixes.metadata.json b/parser/testdata/prefixes.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/prefixes.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/prefixes.test b/parser/testdata/prefixes.test new file mode 100644 index 0000000..b828490 --- /dev/null +++ b/parser/testdata/prefixes.test @@ -0,0 +1,43 @@ +==== 2.0 + + CREATE TABLE t1(k TEXT UNIQUE, v INTEGER); + INSERT INTO t1 VALUES + ('aback', 1), + ('abaft', 2), + ('abandon', 3), + ('abandoned', 4), + ('abandoning', 5), + ('abandonment', 6), + ('abandons', 7), + ('abase', 8), + ('abased', 9), + ('abasement', 10), + ('abasements', 11), + ('abases', 12), + ('abash', 13), + ('abashed', 14), + ('abashes', 15), + ('abashing', 16), + ('abasing', 17), + ('abate', 18), + ('abated', 19), + ('abatement', 20), + ('abatements', 21); +---- +stmt 0 ok +stmt 45 err 1 -1 509 no such table: t1 +==== 3.1 + + SELECT prefix_length(null,'abc'); +---- +stmt 0 err 1 10 36 no such function: prefix_length +==== 3.2 + + SELECT prefix_length('abc',null); +---- +stmt 0 err 1 10 36 no such function: prefix_length +==== 3.3 + + SELECT prefix_length(zeroblob(15000),zeroblob(5000)); +---- +stmt 0 err 1 10 56 no such function: prefix_length diff --git a/parser/testdata/printf.metadata.json b/parser/testdata/printf.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/printf.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/printf.test b/parser/testdata/printf.test new file mode 100644 index 0000000..b7230e8 --- /dev/null +++ b/parser/testdata/printf.test @@ -0,0 +1,85 @@ +==== printf-16.1 + + SELECT printf('%.*g',2147483647,0.01); +---- +stmt 0 ok +==== printf-17.1 + + SELECT format('%!.20g', 13.0); +---- +stmt 0 ok +==== printf-17.2 + + SELECT format('%.3e', 199990000.0); +---- +stmt 0 ok +==== printf-17.3 + + SELECT format('%.3f', 199990000.0); +---- +stmt 0 ok +==== printf-17.4 + + SELECT format('%.3g', 199990000.0); +---- +stmt 0 ok +==== printf-17.5 + + SELECT format('%.4e', 199990000.0); +---- +stmt 0 ok +==== printf-17.6 + + SELECT format('%.4f', 199990000.0); +---- +stmt 0 ok +==== printf-17.7 + + SELECT format('%.4g', 199990000.0); +---- +stmt 0 ok +==== printf-17.8 + + SELECT format('%.5e', 199990000.0); +---- +stmt 0 ok +==== printf-17.9 + + SELECT format('%.5f', 199990000.0); +---- +stmt 0 ok +==== printf-17.10 + + SELECT format('%.5g', 199990000.0); +---- +stmt 0 ok +==== printf-17.11 + + SELECT format('%.30f',1.0000000000000000076e-50); +---- +stmt 0 ok +==== printf-17.12 + + SELECT format('%!.0e',-1e100); +---- +stmt 0 ok +==== printf-18.1 + + SELECT length( format('%,.249f', -5.0e-300) ); +---- +stmt 0 ok +==== printf-19.1 + + SELECT format('%0.0f %0.0g %0.0g', 0.9, 0.09, 1.9); +---- +stmt 0 ok +==== printf-19.2 + + SELECT format('%0.0f %#0.0f',0.0, 0.0); +---- +stmt 0 ok +==== printf-19.3 + + SELECT format('%,.0f %,.0f',12345e+10, 12345e+11); +---- +stmt 0 ok diff --git a/parser/testdata/printf2.metadata.json b/parser/testdata/printf2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/printf2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/printf2.test b/parser/testdata/printf2.test new file mode 100644 index 0000000..d94b602 --- /dev/null +++ b/parser/testdata/printf2.test @@ -0,0 +1,260 @@ +==== printf2-1.1 + + SELECT quote(format()), quote(format(NULL,1,2,3)); +---- +stmt 0 ok +==== printf2-1.2 + + SELECT printf('hello'); +---- +stmt 0 ok +==== printf2-1.3 + + SELECT format('%d,%d,%d',55,-11,3421); +---- +stmt 0 ok +==== printf2-1.4 + + SELECT printf('%d,%d,%d',55,'-11',3421); +---- +stmt 0 ok +==== printf2-1.5 + + SELECT format('%d,%d,%d,%d',55,'-11',3421); +---- +stmt 0 ok +==== printf2-1.6 + + SELECT printf('%.2f',3.141592653); +---- +stmt 0 ok +==== printf2-1.7 + + SELECT format('%.*f',2,3.141592653); +---- +stmt 0 ok +==== printf2-1.8 + + SELECT printf('%*.*f',5,2,3.141592653); +---- +stmt 0 ok +==== printf2-1.9 + + SELECT format('%d',314159.2653); +---- +stmt 0 ok +==== printf2-1.10 + + SELECT printf('%lld',314159.2653); +---- +stmt 0 ok +==== printf2-1.11 + + SELECT format('%lld%n',314159.2653,'hi'); +---- +stmt 0 ok +==== printf2-1.12 + + SELECT printf('%n',0); +---- +stmt 0 ok +==== printf2-1.12.dup1 + + SELECT format('%.*z',5,'abcdefghijklmnop'); +---- +stmt 0 ok +==== printf2-1.13 + + SELECT printf('%c','abcdefghijklmnop'); +---- +stmt 0 ok +==== printf2-2.1 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t1 VALUES(-1,-2,-3); + INSERT INTO t1 VALUES('abc','def','ghi'); + INSERT INTO t1 VALUES(1.5,2.25,3.125); + SELECT printf('(%s)-%n-(%s)',a,b,c) FROM t1 ORDER BY rowid; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 93 no such table: t1 +stmt 93 err 1 -1 137 no such table: t1 +stmt 137 err 1 -1 178 no such table: t1 +stmt 178 err 1 -1 240 no such table: t1 +==== printf2-2.2 + + SELECT printf('%s=(%p)',a,a) FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== printf2-2.3 + + SELECT printf('%s=(%d/%g/%s)',a) FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== printf2-3.1 + + SELECT printf('|%110.100c|','*'); +---- +stmt 0 ok +==== printf2-3.2 + + SELECT printf('|%-110.100c|','*'); +---- +stmt 0 ok +==== printf2-3.3 + + SELECT printf('|%9.8c|%-9.8c|','*','*'); +---- +stmt 0 ok +==== printf2-3.4 + + SELECT printf('|%8.8c|%-8.8c|','*','*'); +---- +stmt 0 ok +==== printf2-3.5 + + SELECT printf('|%7.8c|%-7.8c|','*','*'); +---- +stmt 0 ok +==== printf2-4.1 + + SELECT printf('|%,d|%,d|',0,-1); +---- +stmt 0 ok +==== printf2-4.2 + + SELECT printf('|%,d|%,d|',12,-12); +---- +stmt 0 ok +==== printf2-4.3 + + SELECT printf('|%,d|%,d|',123,-123); +---- +stmt 0 ok +==== printf2-4.4 + + SELECT printf('|%,d|%,d|',1234,-1234); +---- +stmt 0 ok +==== printf2-4.5 + + SELECT printf('|%,d|%,d|',12345,-12345); +---- +stmt 0 ok +==== printf2-4.6 + + SELECT printf('|%,d|%,d|',123456,-123456); +---- +stmt 0 ok +==== printf2-4.7 + + SELECT printf('|%,d|%,d|',1234567,-1234567); +---- +stmt 0 ok +==== printf2-4.8 + + SELECT printf('|%,d|%,d|',12345678,-12345678); +---- +stmt 0 ok +==== printf2-4.9 + + SELECT printf('|%,d|%,d|',123456789,-123456789); +---- +stmt 0 ok +==== printf2-4.10 + + SELECT printf('|%,d|%,d|',1234567890,-1234567890); +---- +stmt 0 ok +==== printf2-5.100 + + SELECT printf('(%8c)',char(11106)); +---- +stmt 0 ok +==== printf2-5.101 + + SELECT printf('(%-8c)',char(11106)); +---- +stmt 0 ok +==== printf2-5.102 + + SELECT printf('(%5.3c)',char(1492)); +---- +stmt 0 ok +==== printf2-5.103 + + SELECT printf('(%-5.3c)',char(1492)); +---- +stmt 0 ok +==== printf2-5.104 + + SELECT printf('(%3.3c)',char(1492)); +---- +stmt 0 ok +==== printf2-5.105 + + SELECT printf('(%-3.3c)',char(1492)); +---- +stmt 0 ok +==== printf2-5.104.dup1 + + SELECT printf('(%2c)',char(1513)); +---- +stmt 0 ok +==== printf2-5.106 + + SELECT printf('(%-2c)',char(1513)); +---- +stmt 0 ok +==== printf2-6.100 + + SELECT printf('(%!.3s)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok +==== printf2-6.101 + + SELECT printf('(%.6s)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok +==== printf2-6.102 + + SELECT printf('(%!5.3s)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok +==== printf2-6.103 + + SELECT printf('(%8.6s)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok +==== printf2-6.104 + + SELECT printf('(%!-5.3s)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok +==== printf2-6.105 + + SELECT printf('(%-8.6s)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok +==== printf2-6.106 + + SELECT printf('(%!.3Q)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok +==== printf2-6.107 + + SELECT printf('(%.6Q)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok +==== printf2-6.108 + + SELECT printf('(%!7.3Q)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok +==== printf2-6.109 + + SELECT printf('(%10.6Q)','הנה מה־טוב ומה־נעים שבת אחים גם־יחד'); +---- +stmt 0 ok diff --git a/parser/testdata/progress.metadata.json b/parser/testdata/progress.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/progress.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/progress.test b/parser/testdata/progress.test new file mode 100644 index 0000000..3b90cc5 --- /dev/null +++ b/parser/testdata/progress.test @@ -0,0 +1,5 @@ +==== progress-1.3.1 + + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 29 no such table: t1 diff --git a/parser/testdata/ptrchng.metadata.json b/parser/testdata/ptrchng.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/ptrchng.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/ptrchng.test b/parser/testdata/ptrchng.test new file mode 100644 index 0000000..ac3d3f7 --- /dev/null +++ b/parser/testdata/ptrchng.test @@ -0,0 +1,163 @@ +==== ptrchng-1.1 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y BLOB); + INSERT INTO t1 VALUES(1, 'abc'); + INSERT INTO t1 VALUES(2, + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234356789'); + INSERT INTO t1 VALUES(3, x'626c6f62'); + INSERT INTO t1 VALUES(4, + x'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324' + ); + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 52 err 1 -1 89 no such table: t1 +stmt 89 err 1 -1 194 no such table: t1 +stmt 194 err 1 -1 237 no such table: t1 +stmt 237 err 1 -1 352 no such table: t1 +stmt 352 err 1 -1 381 no such table: t1 +==== ptrchng-2.1 + + SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=1 +---- +stmt 0 err 1 -1 72 no such table: t1 +==== ptrchng-2.2 + + SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=1 +---- +stmt 0 err 1 -1 72 no such table: t1 +==== ptrchng-2.3 + + SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=1 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-2.4 + + SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=1 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-2.5 + + SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=1 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-2.6 + + SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=1 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-2.11 + + SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=3 +---- +stmt 0 err 1 -1 72 no such table: t1 +==== ptrchng-2.12 + + SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=3 +---- +stmt 0 err 1 -1 72 no such table: t1 +==== ptrchng-2.13 + + SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=3 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-2.14 + + SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=3 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-2.15 + + SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=3 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-2.16 + + SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=3 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-3.1 + + SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=2 +---- +stmt 0 err 1 -1 72 no such table: t1 +==== ptrchng-3.2 + + SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=2 +---- +stmt 0 err 1 -1 72 no such table: t1 +==== ptrchng-3.3 + + SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=2 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-3.4 + + SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=2 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-3.5 + + SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=2 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-3.6 + + SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=2 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-3.11 + + SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=4 +---- +stmt 0 err 1 -1 72 no such table: t1 +==== ptrchng-3.12 + + SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=4 +---- +stmt 0 err 1 -1 72 no such table: t1 +==== ptrchng-3.13 + + SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=4 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-3.14 + + SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=4 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-3.15 + + SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=4 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-3.16 + + SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=4 +---- +stmt 0 err 1 -1 76 no such table: t1 +==== ptrchng-4.1 + + SELECT pointer_change(y, 'text', 'bytes', 'text') FROM t1 +---- +stmt 0 err 1 -1 63 no such table: t1 +==== ptrchng-4.2 + + SELECT pointer_change(y, 'blob', 'bytes', 'blob') FROM t1 +---- +stmt 0 err 1 -1 63 no such table: t1 +==== ptrchng-5.1 + + SELECT pointer_change(y, 'text', 'bytes', 'blob') FROM t1 +---- +stmt 0 err 1 -1 63 no such table: t1 +==== ptrchng-5.2 + + SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 +---- +stmt 0 err 1 -1 66 no such table: t1 +==== ptrchng-5.3 + + SELECT pointer_change(y, 'text16', 'bytes16', 'blob') FROM t1 +---- +stmt 0 err 1 -1 69 no such table: t1 diff --git a/parser/testdata/pushdown.metadata.json b/parser/testdata/pushdown.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/pushdown.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/pushdown.test b/parser/testdata/pushdown.test new file mode 100644 index 0000000..adee595 --- /dev/null +++ b/parser/testdata/pushdown.test @@ -0,0 +1,220 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 'b1', 'c1'); + INSERT INTO t1 VALUES(2, 'b2', 'c2'); + INSERT INTO t1 VALUES(3, 'b3', 'c3'); + INSERT INTO t1 VALUES(4, 'b4', 'c4'); + CREATE INDEX i1 ON t1(a, c); +---- +stmt 0 ok +stmt 28 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 188 no such table: t1 +stmt 188 err 1 -1 219 no such table: main.t1 +==== 1.3 + + DROP INDEX i1; + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 err 1 -1 17 no such index: i1 +stmt 17 err 1 -1 48 no such table: main.t1 +==== 2.0 + + CREATE TABLE u1(a, b, c); + CREATE TABLE u2(x, y, z); + + INSERT INTO u1 VALUES('a1', 'b1', 'c1'); + INSERT INTO u2 VALUES('a1', 'b1', 'c1'); +---- +stmt 0 ok +stmt 28 ok +stmt 56 err 1 -1 100 no such table: u1 +stmt 100 err 1 -1 143 no such table: u2 +==== 3.1 + + CREATE TABLE t0(c0 INT); + INSERT INTO t0 VALUES(0); + CREATE TABLE t1_a(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t1_a VALUES(1,'one'); + CREATE TABLE t1_b(c INTEGER PRIMARY KEY, d TEXT); + INSERT INTO t1_b VALUES(2,'two'); + CREATE VIEW v0 AS SELECT CAST(t0.c0 AS INTEGER) AS c0 FROM t0; + CREATE VIEW v1(a,b) AS SELECT a, b FROM t1_a UNION ALL SELECT c, 0 FROM t1_b; + SELECT v1.a, quote(v1.b), t0.c0 AS cd FROM t0 LEFT JOIN v0 ON v0.c0!=0,v1; +---- +stmt 0 ok +stmt 27 err 1 -1 55 no such table: t0 +stmt 55 ok +stmt 107 err 1 -1 143 no such table: t1_a +stmt 143 ok +stmt 195 err 1 -1 231 no such table: t1_b +stmt 231 ok +stmt 296 ok +stmt 376 err 1 -1 453 no such table: t0 +==== 3.2 + + SELECT a, quote(b), cd FROM ( + SELECT v1.a, v1.b, t0.c0 AS cd FROM t0 LEFT JOIN v0 ON v0.c0!=0, v1 + ) WHERE a=2 AND b='0' AND cd=0; +---- +stmt 0 err 1 -1 138 no such table: t0 +==== 3.3 + + SELECT a, quote(b), cd FROM ( + SELECT v1.a, v1.b, t0.c0 AS cd FROM t0 LEFT JOIN v0 ON v0.c0!=0, v1 + ) WHERE a=1 AND b='one' AND cd=0; +---- +stmt 0 err 1 -1 140 no such table: t0 +==== 3.4 + + SELECT a, quote(b), cd FROM ( + SELECT v1.a, v1.b, t0.c0 AS cd FROM t0 LEFT JOIN v0 ON v0.c0!=0, v1 + ) WHERE a=2 AND b=0 AND cd=0; +---- +stmt 0 err 1 -1 136 no such table: t0 +==== 3.5 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INT, b INT, c TEXT, PRIMARY KEY(a,b)) WITHOUT ROWID; + INSERT INTO t1(a,b,c) VALUES + (1,100,'abc'), + (2,200,'def'), + (3,300,'abc'); + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INT, b INT, c TEXT, PRIMARY KEY(a,b)) WITHOUT ROWID; + INSERT INTO t2(a,b,c) VALUES + (1,110,'efg'), + (2,200,'hij'), + (3,330,'klm'); + CREATE VIEW v3 AS + SELECT a, b, c FROM t1 + UNION ALL + SELECT a, b, 'xyz' FROM t2; + SELECT * FROM v3 WHERE a=2 AND b=200; +---- +stmt 0 ok +stmt 27 ok +stmt 100 err 1 -1 188 no such table: t1 +stmt 188 ok +stmt 215 ok +stmt 288 err 1 -1 376 no such table: t2 +stmt 376 ok +stmt 469 err 1 -1 509 no such table: v3 +==== 3.7 + + SELECT count(*) FROM v3; +---- +stmt 0 err 1 -1 27 no such table: v3 +==== 4.1 + + CREATE TABLE t1(a INT); + CREATE TABLE t2(b INT); + CREATE TABLE t3(c INT); + INSERT INTO t3(c) VALUES(3); + CREATE TABLE t4(d INT); + CREATE TABLE t5(e INT); + INSERT INTO t5(e) VALUES(5); + CREATE VIEW v6(f,g) AS SELECT d, e FROM t4 RIGHT JOIN t5 ON true; + SELECT * FROM t1 JOIN t2 ON false RIGHT JOIN t3 ON true CROSS JOIN v6; +---- +stmt 0 ok +stmt 26 ok +stmt 52 ok +stmt 78 err 1 -1 109 no such table: t3 +stmt 109 ok +stmt 135 ok +stmt 161 err 1 -1 192 no such table: t5 +stmt 192 ok +stmt 260 err 1 -1 334 no such table: t1 +==== 4.2 + + SELECT * FROM v6 JOIN t5 ON false RIGHT JOIN t3 ON true; +---- +stmt 0 err 1 -1 59 no such table: v6 +==== 4.3 + + SELECT * FROM t1 JOIN t2 ON false JOIN v6 ON true RIGHT JOIN t3 ON true; +---- +stmt 0 err 1 -1 75 no such table: t1 +==== 5.0 + + CREATE TABLE t1(a INT); INSERT INTO t1 VALUES(1); + CREATE TABLE t2(b INT); INSERT INTO t2 VALUES(2); + CREATE TABLE t3(c INT); INSERT INTO t3 VALUES(3); + CREATE TABLE t4(d INT); INSERT INTO t4 VALUES(4); + CREATE TABLE t5(e INT); INSERT INTO t5 VALUES(5); + SELECT * + FROM t1 JOIN t2 ON null RIGHT JOIN t3 ON true + LEFT JOIN (t4 JOIN t5 ON d+1=e) ON d=4 + WHERE e>0; +---- +stmt 0 ok +stmt 26 err 1 -1 53 no such table: t1 +stmt 53 ok +stmt 79 err 1 -1 106 no such table: t2 +stmt 106 ok +stmt 132 err 1 -1 159 no such table: t3 +stmt 159 ok +stmt 185 err 1 -1 212 no such table: t4 +stmt 212 ok +stmt 238 err 1 -1 265 no such table: t5 +stmt 265 err 1 -1 389 no such table: t1 +==== 6.0 + + CREATE TABLE t01(w,x,y,z); + CREATE TABLE t02(w,x,y,z); + CREATE VIEW t0(w,x,y,z) AS + SELECT w,x,y,z FROM t01 UNION ALL SELECT w,x,y,z FROM t02; + CREATE INDEX t01x ON t01(w,x,y); + CREATE INDEX t02x ON t02(w,x,y); + CREATE VIEW v1(k) AS VALUES(77),(88),(99); + CREATE TABLE k1(k); + INSERT INTO k1 SELECT * FROM v1; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 150 err 1 -1 185 no such table: main.t01 +stmt 185 err 1 -1 220 no such table: main.t02 +stmt 220 ok +stmt 265 ok +stmt 287 err 1 -1 322 no such table: k1 +==== 7.0 + + CREATE TABLE t0_1(a INT , b INT, c INT); + CREATE TABLE t0_2(a INT , b INT, c INT); + + INSERT INTO t0_1 (a, b, c) VALUES (1, 0, 1); + INSERT INTO t0_2 (a, b, c) VALUES (1, 0, 1); + + CREATE TABLE empty1(x); + CREATE TABLE empty2(y); +---- +stmt 0 ok +stmt 45 ok +stmt 90 err 1 -1 138 no such table: t0_1 +stmt 138 err 1 -1 185 no such table: t0_2 +stmt 185 ok +stmt 214 ok +==== 7.1 + + SELECT t0_2.c + FROM (SELECT '0000' AS c0 FROM empty2 RIGHT JOIN t0_1 ON 1) AS v0 + LEFT JOIN empty1 ON v0.c0, t0_2 + RIGHT JOIN ( + SELECT 5678 AS col0 FROM (SELECT 0) + ) AS sub1 ON 1; +---- +stmt 0 err 1 -1 208 no such table: empty2 +==== 7.2 + + SELECT t0_2.c + FROM (SELECT '0000' AS c0 FROM empty2 RIGHT JOIN t0_1 ON 1) AS v0 + LEFT JOIN empty1 ON v0.c0, t0_2 + RIGHT JOIN ( + SELECT 5678 AS col0 FROM (SELECT 0) + ) AS sub1 ON 1 WHERE +t0_2.c; +---- +stmt 0 err 1 -1 222 no such table: empty2 diff --git a/parser/testdata/qrf01.metadata.json b/parser/testdata/qrf01.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/qrf01.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/qrf01.test b/parser/testdata/qrf01.test new file mode 100644 index 0000000..20a56ad --- /dev/null +++ b/parser/testdata/qrf01.test @@ -0,0 +1,44 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1,2.5,'three'),(x'424c4f42',NULL,'Ἀμήν'); +---- +stmt 0 ok +stmt 28 err 1 -1 99 no such table: t1 +==== 2.0 + + DELETE FROM t1; + INSERT INTO t1 VALUES(1,2,'The quick fox jumps over the lazy brown dog.'); +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 95 no such table: t1 +==== 2.30 + + UPDATE t1 SET c='Η γρήγορη αλεπού πηδάει πάνω από το τεμπέλικο καφέ σκυλί'; + SELECT hex(c) FROM t1; +---- +stmt 0 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 150 no such table: t1 +==== 4.0 + + DELETE FROM t1; + INSERT INTO t1 VALUES(json('{a:5,b:6}'), jsonb('{c:1,d:2}'), 99); +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 86 no such table: t1 +==== 6.0 + + DELETE FROM t2; + INSERT INTO t2 VALUES + (1, 2.5, 'three', x'342028666f757229', null); +---- +stmt 0 err 1 -1 18 no such table: t2 +stmt 18 err 1 -1 93 no such table: t2 +==== 7.0 + + CREATE TABLE t7(a,b); + INSERT INTO t7 VALUES('abcdefghijklmnop', + 'abcぁdefかghiのjklはmnop'); +---- +stmt 0 ok +stmt 24 err 1 -1 105 no such table: t7 diff --git a/parser/testdata/qrf02.metadata.json b/parser/testdata/qrf02.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/qrf02.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/qrf02.test b/parser/testdata/qrf02.test new file mode 100644 index 0000000..6e79fca --- /dev/null +++ b/parser/testdata/qrf02.test @@ -0,0 +1,7 @@ +==== 1.0 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: t1 diff --git a/parser/testdata/qrf05.metadata.json b/parser/testdata/qrf05.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/qrf05.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/qrf05.test b/parser/testdata/qrf05.test new file mode 100644 index 0000000..a8de307 --- /dev/null +++ b/parser/testdata/qrf05.test @@ -0,0 +1,5 @@ +==== 1.0 + + CREATE TABLE t1(a INT NOT NULL); +---- +stmt 0 ok diff --git a/parser/testdata/queryonly.metadata.json b/parser/testdata/queryonly.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/queryonly.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/queryonly.test b/parser/testdata/queryonly.test new file mode 100644 index 0000000..457cfdb --- /dev/null +++ b/parser/testdata/queryonly.test @@ -0,0 +1,80 @@ +==== queryonly-1.1 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(123),(456); + SELECT a FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 22 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 89 no such table: t1 +==== queryonly-1.2 + + PRAGMA query_only; +---- +stmt 0 ok +==== queryonly-1.3 + + PRAGMA query_only=ON; + PRAGMA query_only; +---- +stmt 0 ok +stmt 24 ok +==== queryonly-1.4 +INSERT INTO t1 VALUES(789); +---- +stmt 0 err 1 -1 27 no such table: t1 +==== queryonly-1.5 +DELETE FROM t1; +---- +stmt 0 err 1 -1 15 no such table: t1 +==== queryonly-1.6 +UPDATE t1 SET a=a+1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== queryonly-1.7 +CREATE TABLE t2(b); +---- +stmt 0 ok +==== queryonly-1.8 +CREATE INDEX t1a ON t1(a); +---- +stmt 0 err 1 -1 26 no such table: main.t1 +==== queryonly-1.9 +DROP TABLE t1; +---- +stmt 0 err 1 -1 14 no such table: t1 +==== queryonly-1.10 +ANALYZE; +---- +stmt 0 ok +==== queryonly-1.11 + + SELECT a FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== queryonly-2.2 + + PRAGMA query_only; +---- +stmt 0 ok +==== queryonly-2.3 + + PRAGMA query_only=OFF; + PRAGMA query_only; +---- +stmt 0 ok +stmt 25 ok +==== queryonly-2.4 + + INSERT INTO t1 VALUES(789); + SELECT a FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 61 no such table: t1 +==== queryonly-2.5 + + UPDATE t1 SET a=a+1; + SELECT a FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 23 no such table: t1 +stmt 23 err 1 -1 54 no such table: t1 diff --git a/parser/testdata/quickcheck.metadata.json b/parser/testdata/quickcheck.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/quickcheck.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/quickcheck.test b/parser/testdata/quickcheck.test new file mode 100644 index 0000000..e046431 --- /dev/null +++ b/parser/testdata/quickcheck.test @@ -0,0 +1,18 @@ +==== 1.0 + + CREATE TABLE t1( + a INTEGER NOT NULL, b INTEGER NOT NULL, c AS (a+1), + PRIMARY KEY(b, a) + ) WITHOUT ROWID; + + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 116 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 179 no such table: t1 +==== 1.1 + + PRAGMA quick_check +---- +stmt 0 ok diff --git a/parser/testdata/quota.metadata.json b/parser/testdata/quota.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/quota.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/quota.test b/parser/testdata/quota.test new file mode 100644 index 0000000..f6e6f66 --- /dev/null +++ b/parser/testdata/quota.test @@ -0,0 +1,20 @@ +==== quota-2.1.4 + INSERT INTO t1 VALUES(3, randomblob(1100)) +---- +stmt 0 err 1 -1 44 no such table: t1 +==== quota-2.2.1 + INSERT INTO t1 VALUES(3, randomblob(1100)) +---- +stmt 0 err 1 -1 44 no such table: t1 +==== quota-2.4.2 + INSERT INTO t1 VALUES(3, randomblob(1100)) +---- +stmt 0 err 1 -1 44 no such table: t1 +==== quota-3.1.4 + CREATE TABLE t3(a, b) +---- +stmt 0 ok +==== quota-4.1.7 +INSERT INTO t2 VALUES(zeroblob(200000)) +---- +stmt 0 err 1 -1 40 no such table: t2 diff --git a/parser/testdata/quote.metadata.json b/parser/testdata/quote.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/quote.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/quote.test b/parser/testdata/quote.test new file mode 100644 index 0000000..56610d7 --- /dev/null +++ b/parser/testdata/quote.test @@ -0,0 +1,137 @@ +==== quote-1.0 +CREATE TABLE '@abc' ( '#xyz' int, '!pqr' text ); +---- +stmt 0 ok +==== quote-1.1 +INSERT INTO '@abc' VALUES(5,'hello') +---- +stmt 0 err 1 -1 37 no such table: @abc +==== quote-1.2.1 +SELECT * FROM '@abc' +---- +stmt 0 err 1 -1 21 no such table: @abc +==== quote-1.3 + + SELECT '@abc'.'!pqr', '@abc'.'#xyz'+5 FROM '@abc' +---- +stmt 0 err 1 -1 55 no such table: @abc +==== quote-1.3.1 + + SELECT '!pqr', '#xyz'+5 FROM '@abc' +---- +stmt 0 err 1 -1 41 no such table: @abc +==== quote-1.3.2 + + SELECT "!pqr", "#xyz"+5 FROM '@abc' +---- +stmt 0 err 1 -1 41 no such table: @abc +==== 2.0 + + CREATE TABLE t1(x, y, z); +---- +stmt 0 ok +==== 2.2 + + PRAGMA writable_schema = 1; + CREATE TABLE xyz(a, b, c CHECK (c!="null") ); + CREATE INDEX i2 ON t1(x, y, z||"abc"); + CREATE INDEX i3 ON t1("w"||""); + CREATE INDEX i4 ON t1(x) WHERE z="w"; +---- +stmt 0 ok +stmt 30 ok +stmt 78 err 1 -1 119 no such table: main.t1 +stmt 119 err 1 -1 153 no such table: main.t1 +stmt 153 err 1 -1 193 no such table: main.t1 +==== 2.3.1 + + INSERT INTO xyz VALUES(1, 2, 3); +---- +stmt 0 err 1 -1 35 no such table: xyz +==== 2.3.2 + + INSERT INTO xyz VALUES(1, 2, 'null'); +---- +stmt 0 err 1 -1 40 no such table: xyz +==== 2.4 + + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 'w'); + SELECT * FROM t1 WHERE z='w'; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 70 no such table: t1 +stmt 70 err 1 -1 102 no such table: t1 +==== 2.5 + + SELECT sql FROM sqlite_master; +---- +stmt 0 ok +==== 3.0 + + CREATE TABLE t1(a,b); + CREATE INDEX x1 on t1("b"); + ALTER TABLE t1 DROP COLUMN b; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: main.t1 +stmt 62 err 1 -1 98 no such table: t1 +==== 3.1 + + DROP TABLE t1; + CREATE TABLE t1(a,"b"); + CREATE INDEX x1 on t1("b"); + ALTER TABLE t1 DROP COLUMN b; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 47 err 1 -1 79 no such table: main.t1 +stmt 79 err 1 -1 113 no such table: t1 +==== 3.2 + + DROP TABLE t1; + CREATE TABLE t1(a,'b'); + CREATE INDEX x1 on t1("b"); + ALTER TABLE t1 DROP COLUMN b; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 47 err 1 -1 79 no such table: main.t1 +stmt 79 err 1 -1 113 no such table: t1 +==== 3.3 + + DROP TABLE t1; + CREATE TABLE t1(a,"b"); + CREATE INDEX x1 on t1('b'); + ALTER TABLE t1 DROP COLUMN b; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 47 err 1 -1 79 no such table: main.t1 +stmt 79 err 1 -1 113 no such table: t1 +==== 3.4 + + DROP TABLE t1; + CREATE TABLE t1(a, b, c); + CREATE INDEX x1 ON t1("a"||"b"); + INSERT INTO t1 VALUES(1,2,3),(1,4,5); + ALTER TABLE t1 DROP COLUMN b; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 49 err 1 -1 86 no such table: main.t1 +stmt 86 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 162 no such table: t1 +==== 3.5 + + DROP TABLE t1; + CREATE TABLE t1(a, b, c); + CREATE INDEX x1 ON t1("a"||"x"); + INSERT INTO t1 VALUES(1,2,3),(1,4,5); + ALTER TABLE t1 DROP COLUMN b; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 49 err 1 -1 86 no such table: main.t1 +stmt 86 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 162 no such table: t1 diff --git a/parser/testdata/rdonly.metadata.json b/parser/testdata/rdonly.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rdonly.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rdonly.test b/parser/testdata/rdonly.test new file mode 100644 index 0000000..e8289b3 --- /dev/null +++ b/parser/testdata/rdonly.test @@ -0,0 +1,14 @@ +==== rdonly-1.1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 76 no such table: t1 +==== rdonly-1.4 + + INSERT INTO t1 VALUES(2) +---- +stmt 0 err 1 -1 30 no such table: t1 diff --git a/parser/testdata/readonly.metadata.json b/parser/testdata/readonly.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/readonly.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/readonly.test b/parser/testdata/readonly.test new file mode 100644 index 0000000..37e8861 --- /dev/null +++ b/parser/testdata/readonly.test @@ -0,0 +1,19 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2), (3, 4), (5, 6); +---- +stmt 0 ok +stmt 25 err 1 -1 72 no such table: t1 +==== 1.1 + + INSERT INTO t1 VALUES(7, 8); +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 1.2 + + BEGIN; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 9 err 1 -1 31 no such table: t1 diff --git a/parser/testdata/recover.metadata.json b/parser/testdata/recover.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/recover.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/recover.test b/parser/testdata/recover.test new file mode 100644 index 0000000..65ea873 --- /dev/null +++ b/parser/testdata/recover.test @@ -0,0 +1,51 @@ +==== 2.1.0 + + PRAGMA auto_vacuum = 0; + CREATE TABLE t1(a, b, c, PRIMARY KEY(b, c)) WITHOUT ROWID; + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t1 VALUES(7, 8, 9); +---- +stmt 0 ok +stmt 26 ok +stmt 87 err 1 -1 121 no such table: t1 +stmt 121 err 1 -1 155 no such table: t1 +stmt 155 err 1 -1 189 no such table: t1 +==== 2.2.0 + + PRAGMA writable_schema = 1; + DELETE FROM sqlite_master WHERE name='t1'; +---- +stmt 0 ok +stmt 30 ok +==== 2.3.0 + + CREATE TABLE lost_and_found(a, b, c); +---- +stmt 0 ok +==== 2.4.0 + + CREATE TABLE lost_and_found_0(a, b, c); +---- +stmt 0 ok +==== 4.0 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(d, e, f); + CREATE TABLE t3(g, h, i); + + INSERT INTO t2 VALUES(1, 2, 3); + INSERT INTO t2 VALUES('a', 'b', 'c'); + + INSERT INTO t3 VALUES('one', 'two', 'three'); + DROP TABLE t1; + DROP TABLE t2; +---- +stmt 0 ok +stmt 28 ok +stmt 56 ok +stmt 84 err 1 -1 119 no such table: t2 +stmt 119 err 1 -1 159 no such table: t2 +stmt 159 err 1 -1 208 no such table: t3 +stmt 208 err 1 -1 225 no such table: t1 +stmt 225 err 1 -1 242 no such table: t2 diff --git a/parser/testdata/regexp1.metadata.json b/parser/testdata/regexp1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/regexp1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/regexp1.test b/parser/testdata/regexp1.test new file mode 100644 index 0000000..b32f8fa --- /dev/null +++ b/parser/testdata/regexp1.test @@ -0,0 +1,227 @@ +==== regexp1-1.1.2 + + SELECT regexpi('abc','ABC'); +---- +stmt 0 err 1 10 31 no such function: regexpi +==== regexp1-1.1.3 + + SELECT regexpi('ABC','ABC'); +---- +stmt 0 err 1 10 31 no such function: regexpi +==== regexp1-1.1.4 + + SELECT regexpi('ABC','abc'); +---- +stmt 0 err 1 10 31 no such function: regexpi +==== regexp1-1.1.5 + + SELECT regexpi('ABC.','ABC'); +---- +stmt 0 err 1 10 32 no such function: regexpi +==== regexp1-1.2 + + SELECT x FROM t1 WHERE y REGEXP 'by|in' ORDER BY x; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== regexp1-1.3.1 + + SELECT x FROM t1 WHERE y REGEXP 'by|Christ' ORDER BY x; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== regexp1-1.3.2 + + SELECT x FROM t1 WHERE regexp('by|christ',y) ORDER BY x; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== regexp1-1.3.3 + + SELECT x FROM t1 WHERE regexpi('by|christ',y) ORDER BY x; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== regexp1-1.3.4 + + SELECT x FROM t1 WHERE regexpi('BY|CHRIST',y) ORDER BY x; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== regexp1-1.4 + + SELECT x FROM t1 WHERE y REGEXP 'shal+ al+' ORDER BY x; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== regexp1-1.5.1 + + SELECT x FROM t1 WHERE y REGEXP 'shall x*y*z*all' ORDER BY x; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== regexp1-1.5.2 + + SELECT x FROM t1 WHERE regexp('shall x*y*z*all',y) ORDER BY x; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== regexp1-1.5.3 + + SELECT x FROM t1 WHERE regexp('SHALL x*y*z*all',y) ORDER BY x; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== regexp1-1.5.4 + + SELECT x FROM t1 WHERE regexpi('SHALL x*y*z*all',y) ORDER BY x; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== regexp1-1.6 + + SELECT x FROM t1 WHERE y REGEXP 'shallx?y? ?z?all' ORDER BY x; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== regexp1-1.7 + + SELECT x FROM t1 WHERE y REGEXP 'r{2}' ORDER BY x; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== regexp1-1.8 + + SELECT x FROM t1 WHERE y REGEXP 'r{3}' ORDER BY x; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== regexp1-1.9 + + SELECT x FROM t1 WHERE y REGEXP 'r{1}' ORDER BY x; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== regexp1-1.10 + + SELECT x FROM t1 WHERE y REGEXP 'ur{2,10}e' ORDER BY x; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== regexp1-1.14 + + SELECT x FROM t1 WHERE y REGEXP 'alive' ORDER BY x; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== regexp1-1.15 + + SELECT x FROM t1 WHERE y REGEXP '^alive' ORDER BY x; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== regexp1-2.1 + + SELECT 'aaaabbbbcccc' REGEXP 'ab*c', + 'aaaacccc' REGEXP 'ab*c'; +---- +stmt 0 err 1 25 75 no such function: REGEXP +==== regexp1-2.2 + + SELECT 'aaaabbbbcccc' REGEXP 'ab+c', + 'aaaacccc' REGEXP 'ab+c'; +---- +stmt 0 err 1 25 74 no such function: REGEXP +==== regexp1-2.3 + + SELECT 'aaaabbbbcccc' REGEXP 'ab?c', + 'aaaacccc' REGEXP 'ab?c'; +---- +stmt 0 err 1 25 74 no such function: REGEXP +==== regexp1-2.4 + + SELECT 'aaaabbbbbbcccc' REGEXP 'ab{3,5}c', + 'aaaabbbbbcccc' REGEXP 'ab{3,5}c', + 'aaaabbbbcccc' REGEXP 'ab{3,5}c', + 'aaaabbbcccc' REGEXP 'ab{3,5}c', + 'aaaabbcccc' REGEXP 'ab{3,5}c', + 'aaaabcccc' REGEXP 'ab{3,5}c' +---- +stmt 0 err 1 27 255 no such function: REGEXP +==== regexp1-3.1 + + CREATE TABLE t1(id INTEGER PRIMARY KEY, a TEXT); + INSERT INTO t1(id, a) VALUES(1, '日本語'); + SELECT a, hex(a), length(a) FROM t1; +---- +stmt 0 ok +stmt 51 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 138 no such table: t1 +==== regexp1-3.2 + + SELECT * FROM t1 WHERE a='日本語'; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== regexp1-3.3 + + SELECT * FROM t1 WHERE a LIKE '日本語'; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== regexp1-3.4 + + SELECT * FROM t1 wHERE a REGEXP '日本語'; +---- +stmt 0 err 1 -1 47 no such table: t1 +==== regexp1-6.6 +SELECT 'abc' REGEXP '(^abc|def)'; +---- +stmt 0 err 1 13 33 no such function: REGEXP +==== regexp1-6.7 +SELECT 'xabc' REGEXP '(^abc|def)'; +---- +stmt 0 err 1 14 34 no such function: REGEXP +==== regexp1-6.8 +SELECT 'def' REGEXP '(^abc|def)'; +---- +stmt 0 err 1 13 33 no such function: REGEXP +==== regexp1-6.9 +SELECT 'xdef' REGEXP '(^abc|def)'; +---- +stmt 0 err 1 14 34 no such function: REGEXP +==== regexp1-7.1 + + SELECT char(0x61,0x7ff,0x62) REGEXP char(0x7ff); +---- +stmt 0 err 1 32 51 no such function: REGEXP +==== regexp1-7.2 + + SELECT char(0x61,0x800,0x62) REGEXP char(0x800); +---- +stmt 0 err 1 32 51 no such function: REGEXP +==== regexp1-7.3 + + SELECT char(0x61,0xabc,0x62) REGEXP char(0xabc); +---- +stmt 0 err 1 32 51 no such function: REGEXP +==== regexp1-7.4 + + SELECT char(0x61,0xfff,0x62) REGEXP char(0xfff); +---- +stmt 0 err 1 32 51 no such function: REGEXP +==== regexp1-7.5 + + SELECT char(0x61,0x1000,0x62) REGEXP char(0x1000); +---- +stmt 0 err 1 33 53 no such function: REGEXP +==== regexp1-7.10 + + SELECT char(0x61,0xffff,0x62) REGEXP char(0xffff); +---- +stmt 0 err 1 33 53 no such function: REGEXP +==== regexp1-7.11 + + SELECT char(0x61,0x10000,0x62) REGEXP char(0x10000); +---- +stmt 0 err 1 34 55 no such function: REGEXP +==== regexp1-7.12 + + SELECT char(0x61,0x10ffff,0x62) REGEXP char(0x10ffff); +---- +stmt 0 err 1 35 57 no such function: REGEXP +==== regexp1-8.0 + + CREATE TABLE t2(a); + INSERT INTO t2 VALUES('abc-def'); + SELECT length(a) FROM t2; +---- +stmt 0 ok +stmt 22 err 1 -1 58 no such table: t2 +stmt 58 err 1 -1 86 no such table: t2 +==== regexp1-8.5 + + SELECT rowid FROM t2 WHERE a REGEXP '-'; +---- +stmt 0 err 1 -1 43 no such table: t2 diff --git a/parser/testdata/regexp2.metadata.json b/parser/testdata/regexp2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/regexp2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/regexp2.test b/parser/testdata/regexp2.test new file mode 100644 index 0000000..6ac24c7 --- /dev/null +++ b/parser/testdata/regexp2.test @@ -0,0 +1,140 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + CREATE TABLE x1(x, y, z); + CREATE TABLE x2(x, y, z); + + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO x1 VALUES( + new.a REGEXP 'abc', + new.b REGEXP 'abc', + new.c REGEXP 'abc' + ); + END; + + CREATE TRIGGER tr2 AFTER INSERT ON t1 BEGIN + INSERT INTO x2 VALUES( + new.a REGEXP 'def', + new.b REGEXP 'def', + new.c REGEXP 'def' + ); + END; + + INSERT INTO t1 VALUES('abc', 'def', 'abc'); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 28 ok +stmt 56 ok +stmt 84 err 1 -1 131 no such table: main.t1 +stmt 255 err 1 -1 302 no such table: main.t1 +stmt 426 err 1 -1 473 no such table: t1 +stmt 473 err 1 -1 493 no such table: t1 +==== 1.1 + SELECT * FROM x1 +---- +stmt 0 err 1 -1 18 no such table: x1 +==== 1.2 + SELECT * FROM x2 +---- +stmt 0 err 1 -1 18 no such table: x2 +==== 2.0 + + CREATE TABLE t2(a, b); + CREATE TABLE t3(c, d); + CREATE TABLE t4(e, f); + + CREATE TRIGGER t2_tr1 AFTER UPDATE ON t2 BEGIN + UPDATE t3 SET d = new.b WHERE c = old.a; + END; + + CREATE TRIGGER t3_tr1 AFTER UPDATE ON t3 BEGIN + UPDATE t4 SET f = new.d WHERE e = old.c AND new.d REGEXP 'a.*'; + END; + + CREATE TRIGGER t4_tr1 AFTER UPDATE ON t4 BEGIN + SELECT CASE WHEN new.f REGEXP '.*y.*' THEN error() ELSE 1 END; + END; + + INSERT INTO t2 VALUES(1, 'a_x_1'); + INSERT INTO t2 VALUES(2, 'a_y_1'); + + INSERT INTO t3 VALUES(1, 'b1'); + INSERT INTO t3 VALUES(2, 'b2'); + + INSERT INTO t4 VALUES(1, 'b1'); + INSERT INTO t4 VALUES(2, 'b2'); +---- +stmt 0 ok +stmt 25 ok +stmt 50 ok +stmt 75 err 1 -1 125 no such table: main.t2 +stmt 177 err 1 -1 227 no such table: main.t3 +stmt 302 err 1 -1 352 no such table: main.t4 +stmt 426 err 1 -1 464 no such table: t2 +stmt 464 err 1 -1 501 no such table: t2 +stmt 501 err 1 -1 536 no such table: t3 +stmt 536 err 1 -1 570 no such table: t3 +stmt 570 err 1 -1 605 no such table: t4 +stmt 605 err 1 -1 639 no such table: t4 +==== 2.1 + + UPDATE t2 SET a=a+1 WHERE b REGEXP 'a.*' AND b REGEXP '.*1'; +---- +stmt 0 err 1 -1 63 no such table: t2 +==== 2.2 + + UPDATE t2 SET b = 'a_abc_1'; +---- +stmt 0 err 1 -1 31 no such table: t2 +==== 2.3 + + SELECT * FROM t2; + SELECT * FROM t3; + SELECT * FROM t4; +---- +stmt 0 err 1 -1 20 no such table: t2 +stmt 20 err 1 -1 40 no such table: t3 +stmt 40 err 1 -1 60 no such table: t4 +==== 3.0 + + CREATE TABLE t5(a); + CREATE TABLE t6(x); + + CREATE TRIGGER t5tr AFTER DELETE ON t5 BEGIN + DELETE FROM t6 WHERE t6.x REGEXP old.a; + END; + + INSERT INTO t5 VALUES ('^a.*'), ('^b.*'), ('^c.*'); + INSERT INTO t6 VALUES ('eab'), ('abc'), ('bcd'), ('cde'), ('dea'); + + DELETE FROM t5; + SELECT * FROM t6; +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 92 no such table: main.t5 +stmt 143 err 1 -1 198 no such table: t5 +stmt 198 err 1 -1 267 no such table: t6 +stmt 267 err 1 -1 286 no such table: t5 +stmt 286 err 1 -1 306 no such table: t6 +==== 5.0 + + SELECT 'abc' REGEXP 'a{1,999}bc'; +---- +stmt 0 err 1 16 36 no such function: REGEXP +==== 5.1 + + SELECT 'abc' REGEXP 'a{1,25000}bc'; +---- +stmt 0 err 1 16 38 no such function: REGEXP +==== 5.2 + + SELECT 'abc' REGEXP 'a{999}bc'; +---- +stmt 0 err 1 16 34 no such function: REGEXP +==== 5.3 + + SELECT 'abc' REGEXP 'a{25000}bc'; +---- +stmt 0 err 1 16 36 no such function: REGEXP diff --git a/parser/testdata/reindex.metadata.json b/parser/testdata/reindex.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/reindex.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/reindex.test b/parser/testdata/reindex.test new file mode 100644 index 0000000..9f03d6c --- /dev/null +++ b/parser/testdata/reindex.test @@ -0,0 +1,106 @@ +==== reindex-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(3,4); + CREATE INDEX i1 ON t1(a); + REINDEX; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 120 no such table: main.t1 +stmt 120 ok +==== reindex-1.3 + + REINDEX t1; +---- +stmt 0 err 1 -1 16 unable to identify the object to be reindexed +==== reindex-1.5 + + REINDEX i1; +---- +stmt 0 err 1 -1 16 unable to identify the object to be reindexed +==== reindex-1.7 + + REINDEX main.t1; +---- +stmt 0 err 1 -1 21 unable to identify the object to be reindexed +==== reindex-1.8 + + REINDEX main.i1; +---- +stmt 0 err 1 -1 21 unable to identify the object to be reindexed +==== reindex-1.9 + + REINDEX bogus +---- +stmt 0 err 1 -1 19 unable to identify the object to be reindexed +==== reindex-2.2 + + SELECT b FROM t2 ORDER BY b; +---- +stmt 0 err 1 -1 33 no such table: t2 +==== reindex-2.3 + + SELECT c FROM t2 ORDER BY c; +---- +stmt 0 err 1 -1 33 no such table: t2 +==== reindex-2.4 + + SELECT d FROM t2 ORDER BY d; +---- +stmt 0 err 1 -1 33 no such table: t2 +==== reindex-2.6 + + REINDEX c2; + SELECT a FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 16 unable to identify the object to be reindexed +stmt 16 err 1 -1 49 no such table: t2 +==== reindex-2.7 + + REINDEX t1; + SELECT a FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 16 unable to identify the object to be reindexed +stmt 16 err 1 -1 49 no such table: t2 +==== reindex-2.8 + + REINDEX c1; + SELECT a FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 16 unable to identify the object to be reindexed +stmt 16 err 1 -1 49 no such table: t2 +==== reindex-generated + + CREATE TABLE t0 ( + c0 INTEGER PRIMARY KEY DESC, + c1 UNIQUE DEFAULT NULL + ) %without_rowid% ; + INSERT INTO t0(c0) VALUES (1), (2), (3), (4), (5); + SELECT c0 FROM t0 WHERE c1 IS NULL ORDER BY 1; +---- +stmt 0 err 1 102 103 near "%": syntax error +stmt 119 err 1 -1 176 no such table: t0 +stmt 176 err 1 -1 229 no such table: t0 +==== reindex-generated.dup1 + + REINDEX; +---- +stmt 0 ok +==== reindex-generated.dup2 + + SELECT c0 FROM t0 WHERE c1 IS NULL ORDER BY 1; +---- +stmt 0 err 1 -1 53 no such table: t0 +==== reindex-generated.dup3 + + SELECT c0 FROM t0 WHERE c1 IS NULL AND c0 IN (1,2,3,4,5); +---- +stmt 0 err 1 -1 64 no such table: t0 +==== reindex-generated.dup4 + + PRAGMA integrity_check; +---- +stmt 0 ok diff --git a/parser/testdata/reservebytes.metadata.json b/parser/testdata/reservebytes.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/reservebytes.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/reservebytes.test b/parser/testdata/reservebytes.test new file mode 100644 index 0000000..2a1904f --- /dev/null +++ b/parser/testdata/reservebytes.test @@ -0,0 +1,20 @@ +==== 1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + CREATE INDEX i1 ON t1(b, c); + WITH s(i) AS ( + VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 + ) + INSERT INTO t1 SELECT NULL, i, hex(randomblob(500)) FROM s; +---- +stmt 0 ok +stmt 48 err 1 -1 79 no such table: main.t1 +stmt 79 err 1 -1 217 no such table: t1 +==== 1.3.2 + VACUUM +---- +stmt 0 ok +==== 1.4.2 + VACUUM +---- +stmt 0 ok diff --git a/parser/testdata/resetdb.metadata.json b/parser/testdata/resetdb.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/resetdb.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/resetdb.test b/parser/testdata/resetdb.test new file mode 100644 index 0000000..43677bc --- /dev/null +++ b/parser/testdata/resetdb.test @@ -0,0 +1,115 @@ +==== 100 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size=4096; + CREATE TABLE t1(a,b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<20) + INSERT INTO t1(a,b) SELECT x, randomblob(300) FROM c; + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1b ON t1(b); + SELECT sum(a), sum(length(b)) FROM t1; + PRAGMA integrity_check; + PRAGMA journal_mode; + PRAGMA page_count; +---- +stmt 0 ok +stmt 26 ok +stmt 51 ok +stmt 75 err 1 -1 209 no such table: t1 +stmt 209 err 1 -1 238 no such table: main.t1 +stmt 238 err 1 -1 267 no such table: main.t1 +stmt 267 err 1 -1 308 no such table: t1 +stmt 308 ok +stmt 334 ok +stmt 357 ok +==== 300 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size=8192; + PRAGMA journal_mode=WAL; + CREATE TABLE t1(a,b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<20) + INSERT INTO t1(a,b) SELECT x, randomblob(1300) FROM c; + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1b ON t1(b); + SELECT sum(a), sum(length(b)) FROM t1; + PRAGMA integrity_check; + PRAGMA journal_mode; + PRAGMA page_size; + PRAGMA page_count; +---- +stmt 0 ok +stmt 26 ok +stmt 51 ok +stmt 78 ok +stmt 102 err 1 -1 237 no such table: t1 +stmt 237 err 1 -1 266 no such table: main.t1 +stmt 266 err 1 -1 295 no such table: main.t1 +stmt 295 err 1 -1 336 no such table: t1 +stmt 336 ok +stmt 362 ok +stmt 385 ok +stmt 405 ok +==== 320 + + UPDATE sqlite_dbpage SET data=randomblob(8192) WHERE pgno=1; + PRAGMA quick_check +---- +stmt 0 err 1 -1 63 no such table: sqlite_dbpage +stmt 63 ok +==== 600 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1), (2), (3), (4); +---- +stmt 0 ok +stmt 29 ok +stmt 51 err 1 -1 94 no such table: t1 +==== 700 + + PRAGMA page_size=512; + PRAGMA auto_vacuum = 0; + CREATE TABLE t1(a,b,c); + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1bc ON t1(b,c); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<10) + INSERT INTO t1(a,b,c) SELECT x, randomblob(100),randomblob(100) FROM c; + PRAGMA page_count; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 24 ok +stmt 50 ok +stmt 76 err 1 -1 105 no such table: main.t1 +stmt 105 err 1 -1 137 no such table: main.t1 +stmt 137 err 1 -1 289 no such table: t1 +stmt 289 ok +stmt 310 ok +==== 710 + + UPDATE sqlite_dbpage SET data= + X'53514C69746520666F726D61742033000200030100402020000000000000001300000000000000000000000300000004000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000D00000003017C0001D801AC017C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E03061715110145696E6465787431626374310443524541544520494E4445582074316263204F4E20743128622C63292A0206171311013F696E64657874316174310343524541544520494E44455820743161204F4E20743128612926010617111101397461626C657431743102435245415445205441424C4520743128612C622C6329' WHERE pgno=1; +---- +stmt 0 err 1 -1 1079 no such table: sqlite_dbpage +==== 720 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 740 + + PRAGMA page_count; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 21 ok +==== 800 + + PRAGMA encoding = 'utf8'; + CREATE TABLE t1(a, b); + PRAGMA encoding; +---- +stmt 0 ok +stmt 30 ok +stmt 57 ok diff --git a/parser/testdata/resolver01.metadata.json b/parser/testdata/resolver01.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/resolver01.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/resolver01.test b/parser/testdata/resolver01.test new file mode 100644 index 0000000..95e1cf7 --- /dev/null +++ b/parser/testdata/resolver01.test @@ -0,0 +1,176 @@ +==== resolver01-1.1 + + CREATE TABLE t1(x, y); INSERT INTO t1 VALUES(11,22); + CREATE TABLE t2(y, z); INSERT INTO t2 VALUES(33,44); + SELECT 1 AS y FROM t1, t2 ORDER BY y; +---- +stmt 0 ok +stmt 27 err 1 -1 57 no such table: t1 +stmt 57 ok +stmt 84 err 1 -1 114 no such table: t2 +stmt 114 err 1 -1 156 no such table: t1 +==== resolver01-1.2 + + SELECT 1 AS yy FROM t1, t2 ORDER BY y; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== resolver01-1.3 + + CREATE TABLE t3(x,y); INSERT INTO t3 VALUES(11,44),(33,22); + SELECT x AS y FROM t3 ORDER BY y; +---- +stmt 0 ok +stmt 26 err 1 -1 64 no such table: t3 +stmt 64 err 1 -1 102 no such table: t3 +==== resolver01-1.4 + + SELECT x AS yy FROM t3 ORDER BY y; +---- +stmt 0 err 1 -1 39 no such table: t3 +==== resolver01-1.5 + + SELECT x AS yy FROM t3 ORDER BY yy; +---- +stmt 0 err 1 -1 40 no such table: t3 +==== resolver01-1.6 + + SELECT x AS yy FROM t3 ORDER BY 1; +---- +stmt 0 err 1 -1 39 no such table: t3 +==== resolver01-2.1 + + SELECT 2 AS y FROM t1, t2 ORDER BY y COLLATE nocase; +---- +stmt 0 err 1 -1 57 no such table: t1 +==== resolver01-2.2 + + SELECT 2 AS yy FROM t1, t2 ORDER BY y COLLATE nocase; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== resolver01-2.3 + + SELECT x AS y FROM t3 ORDER BY y COLLATE nocase; +---- +stmt 0 err 1 -1 53 no such table: t3 +==== resolver01-2.4 + + SELECT x AS yy FROM t3 ORDER BY y COLLATE nocase; +---- +stmt 0 err 1 -1 54 no such table: t3 +==== resolver01-2.5 + + SELECT x AS yy FROM t3 ORDER BY yy COLLATE nocase; +---- +stmt 0 err 1 -1 55 no such table: t3 +==== resolver01-2.6 + + SELECT x AS yy FROM t3 ORDER BY 1 COLLATE nocase; +---- +stmt 0 err 1 -1 54 no such table: t3 +==== resolver01-3.1 + + SELECT 3 AS y FROM t1, t2 ORDER BY +y; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== resolver01-3.2 + + SELECT 2 AS yy FROM t1, t2 ORDER BY +y; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== resolver01-3.3 + + SELECT x AS y FROM t3 ORDER BY +y; +---- +stmt 0 err 1 -1 39 no such table: t3 +==== resolver01-3.4 + + SELECT x AS yy FROM t3 ORDER BY +y; +---- +stmt 0 err 1 -1 40 no such table: t3 +==== resolver01-3.5 + + SELECT x AS yy FROM t3 ORDER BY +yy +---- +stmt 0 err 1 -1 41 no such table: t3 +==== resolver01-4.1 + + CREATE TABLE t4(m CHAR(2)); + INSERT INTO t4 VALUES('az'); + INSERT INTO t4 VALUES('by'); + INSERT INTO t4 VALUES('cx'); + SELECT '1', substr(m,2) AS m FROM t4 ORDER BY m; + SELECT '2', substr(m,2) AS m FROM t4 ORDER BY m COLLATE binary; + SELECT '3', substr(m,2) AS m FROM t4 ORDER BY lower(m); +---- +stmt 0 ok +stmt 30 err 1 -1 61 no such table: t4 +stmt 61 err 1 -1 92 no such table: t4 +stmt 92 err 1 -1 123 no such table: t4 +stmt 123 err 1 -1 174 no such table: t4 +stmt 174 err 1 -1 240 no such table: t4 +stmt 240 err 1 -1 298 no such table: t4 +==== resolver01-5.1 + + CREATE TABLE t5(m CHAR(2)); + INSERT INTO t5 VALUES('ax'); + INSERT INTO t5 VALUES('bx'); + INSERT INTO t5 VALUES('cy'); + SELECT count(*), substr(m,2,1) AS m FROM t5 GROUP BY m ORDER BY 1, 2; +---- +stmt 0 ok +stmt 30 err 1 -1 61 no such table: t5 +stmt 61 err 1 -1 92 no such table: t5 +stmt 92 err 1 -1 123 no such table: t5 +stmt 123 err 1 -1 195 no such table: t5 +==== resolver01-5.2 + + SELECT count(*), substr(m,2,1) AS mx FROM t5 GROUP BY m ORDER BY 1, 2; +---- +stmt 0 err 1 -1 73 no such table: t5 +==== resolver01-5.3 + + SELECT count(*), substr(m,2,1) AS mx FROM t5 GROUP BY mx ORDER BY 1, 2; +---- +stmt 0 err 1 -1 74 no such table: t5 +==== resolver01-5.4 + + SELECT count(*), substr(m,2,1) AS mx FROM t5 + GROUP BY substr(m,2,1) ORDER BY 1, 2; +---- +stmt 0 err 1 -1 88 no such table: t5 +==== resolver01-6.1 + + CREATE TABLE t61(name); + SELECT min(name) FROM t61 GROUP BY lower(name); +---- +stmt 0 ok +stmt 26 err 1 -1 76 no such table: t61 +==== resolver01-6.2 + + SELECT min(name) AS name FROM t61 GROUP BY lower(name); +---- +stmt 0 err 1 -1 58 no such table: t61 +==== resolver01-6.3 + + CREATE TABLE t63(name); + INSERT INTO t63 VALUES (NULL); + INSERT INTO t63 VALUES ('abc'); + SELECT count(), + NULLIF(name,'abc') AS name + FROM t63 + GROUP BY lower(name); +---- +stmt 0 ok +stmt 26 err 1 -1 59 no such table: t63 +stmt 59 err 1 -1 93 no such table: t63 +stmt 93 err 1 -1 183 no such table: t63 +==== resolver01-7.1 + + SELECT 2 AS x WHERE (SELECT x AS y WHERE 3>y); +---- +stmt 0 ok +==== resolver01-7.2 + + SELECT 2 AS x WHERE (SELECT x AS y WHERE 1>y); +---- +stmt 0 ok diff --git a/parser/testdata/returningfault.metadata.json b/parser/testdata/returningfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/returningfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/returningfault.test b/parser/testdata/returningfault.test new file mode 100644 index 0000000..0868767 --- /dev/null +++ b/parser/testdata/returningfault.test @@ -0,0 +1,10 @@ +==== 1.0 + + CREATE TABLE t1 (b); +---- +stmt 0 ok +==== 2.0 + + CREATE TABLE t1(x); +---- +stmt 0 ok diff --git a/parser/testdata/rollback.metadata.json b/parser/testdata/rollback.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rollback.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rollback.test b/parser/testdata/rollback.test new file mode 100644 index 0000000..18e0aa8 --- /dev/null +++ b/parser/testdata/rollback.test @@ -0,0 +1,31 @@ +==== rollback-1.1 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES(3); + INSERT INTO t1 VALUES(4); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 114 no such table: t1 +stmt 114 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 166 no such table: t1 +==== rollback-1.2 + + CREATE TABLE t3(a unique on conflict rollback); + INSERT INTO t3 SELECT a FROM t1; + BEGIN; + INSERT INTO t1 SELECT * FROM t1; +---- +stmt 0 ok +stmt 54 err 1 -1 93 no such table: t3 +stmt 93 ok +stmt 106 err 1 -1 145 no such table: t1 +==== rollback-1.4 + + INSERT INTO t3 SELECT a FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t3 diff --git a/parser/testdata/rollback2.metadata.json b/parser/testdata/rollback2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rollback2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rollback2.test b/parser/testdata/rollback2.test new file mode 100644 index 0000000..21ec98b --- /dev/null +++ b/parser/testdata/rollback2.test @@ -0,0 +1,19 @@ +==== 1.0 + + SELECT int2hex(0), int2hex(100), int2hex(255) +---- +stmt 0 err 1 10 49 no such function: int2hex +==== 1.1 + + CREATE TABLE t1(i, h); + CREATE INDEX i1 ON t1(h); + WITH data(a, b) AS ( + SELECT 1, int2hex(1) + UNION ALL + SELECT a+1, int2hex(a+1) FROM data WHERE a<40 + ) + INSERT INTO t1 SELECT * FROM data; +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 208 no such table: t1 diff --git a/parser/testdata/rollbackfault.metadata.json b/parser/testdata/rollbackfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rollbackfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rollbackfault.test b/parser/testdata/rollbackfault.test new file mode 100644 index 0000000..21ec98b --- /dev/null +++ b/parser/testdata/rollbackfault.test @@ -0,0 +1,19 @@ +==== 1.0 + + SELECT int2hex(0), int2hex(100), int2hex(255) +---- +stmt 0 err 1 10 49 no such function: int2hex +==== 1.1 + + CREATE TABLE t1(i, h); + CREATE INDEX i1 ON t1(h); + WITH data(a, b) AS ( + SELECT 1, int2hex(1) + UNION ALL + SELECT a+1, int2hex(a+1) FROM data WHERE a<40 + ) + INSERT INTO t1 SELECT * FROM data; +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 208 no such table: t1 diff --git a/parser/testdata/rowallock.metadata.json b/parser/testdata/rowallock.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowallock.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowallock.test b/parser/testdata/rowallock.test new file mode 100644 index 0000000..a845ffc --- /dev/null +++ b/parser/testdata/rowallock.test @@ -0,0 +1,28 @@ +==== rowallock-generated + + PRAGMA page_size = 4096; + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + INSERT INTO t1 VALUES(1, 2), (3, 4); + PRAGMA journal_mode = wal; +---- +stmt 0 ok +stmt 29 ok +stmt 56 ok +stmt 83 err 1 -1 124 no such table: t1 +stmt 124 ok +==== rowallock-generated.dup1 + + PRAGMA mmap_size = 1000000; +---- +stmt 0 ok +==== rowallock-generated.dup2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== rowallock-generated.dup3 + + INSERT INTO t1 VALUES(5, 6); +---- +stmt 0 err 1 -1 33 no such table: t1 diff --git a/parser/testdata/rowhash.metadata.json b/parser/testdata/rowhash.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowhash.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowhash.test b/parser/testdata/rowhash.test new file mode 100644 index 0000000..0f67d54 --- /dev/null +++ b/parser/testdata/rowhash.test @@ -0,0 +1,11 @@ +==== rowhash-1.1 + + CREATE TABLE t1(id INTEGER PRIMARY KEY, a, b, c); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); + CREATE INDEX i3 ON t1(c); +---- +stmt 0 ok +stmt 54 err 1 -1 84 no such table: main.t1 +stmt 84 err 1 -1 114 no such table: main.t1 +stmt 114 err 1 -1 144 no such table: main.t1 diff --git a/parser/testdata/rowid.metadata.json b/parser/testdata/rowid.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowid.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowid.test b/parser/testdata/rowid.test new file mode 100644 index 0000000..845fc47 --- /dev/null +++ b/parser/testdata/rowid.test @@ -0,0 +1,729 @@ +==== rowid-1.1 + + CREATE TABLE t1(x int, y int); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(3,4); + SELECT x FROM t1 ORDER BY y; +---- +stmt 0 ok +stmt 35 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 132 no such table: t1 +==== rowid-2.1 + + INSERT INTO t1(rowid,x,y) VALUES(1234,5,6); + SELECT rowid, * FROM t1; +---- +stmt 0 err 1 -1 48 no such table: t1 +stmt 48 err 1 -1 77 no such table: t1 +==== rowid-2.2 + + UPDATE t1 SET rowid=12345 WHERE x==1; + SELECT rowid, * FROM t1 +---- +stmt 0 err 1 -1 42 no such table: t1 +stmt 42 err 1 -1 71 no such table: t1 +==== rowid-2.3 + + INSERT INTO t1(y,x,oid) VALUES(8,7,1235); + SELECT rowid, * FROM t1 WHERE rowid>1000; +---- +stmt 0 err 1 -1 46 no such table: t1 +stmt 46 err 1 -1 92 no such table: t1 +==== rowid-2.4 + + UPDATE t1 SET oid=12346 WHERE x==1; + SELECT rowid, * FROM t1; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 69 no such table: t1 +==== rowid-2.5 + + INSERT INTO t1(x,_rowid_,y) VALUES(9,1236,10); + SELECT rowid, * FROM t1 WHERE rowid>1000; +---- +stmt 0 err 1 -1 51 no such table: t1 +stmt 51 err 1 -1 97 no such table: t1 +==== rowid-2.6 + + UPDATE t1 SET _rowid_=12347 WHERE x==1; + SELECT rowid, * FROM t1 WHERE rowid>1000; +---- +stmt 0 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 90 no such table: t1 +==== rowid-3.1 + + CREATE TABLE t2(rowid int, x int, y int); + INSERT INTO t2 VALUES(0,2,3); + INSERT INTO t2 VALUES(4,5,6); + INSERT INTO t2 VALUES(7,8,9); + SELECT * FROM t2 ORDER BY x; +---- +stmt 0 ok +stmt 46 err 1 -1 80 no such table: t2 +stmt 80 err 1 -1 114 no such table: t2 +stmt 114 err 1 -1 148 no such table: t2 +stmt 148 err 1 -1 181 no such table: t2 +==== rowid-3.2 +SELECT * FROM t2 ORDER BY rowid +---- +stmt 0 err 1 -1 32 no such table: t2 +==== rowid-3.3 +SELECT rowid, x, y FROM t2 ORDER BY rowid +---- +stmt 0 err 1 -1 42 no such table: t2 +==== rowid-4.2 +SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1.rowid==t2.rowid +---- +stmt 0 err 1 -1 61 no such table: t2 +==== rowid-4.2.1 +SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1.oid==t2.rowid +---- +stmt 0 err 1 -1 59 no such table: t2 +==== rowid-4.2.2 +SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1._rowid_==t2.rowid +---- +stmt 0 err 1 -1 63 no such table: t2 +==== rowid-4.2.3 +SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t2.rowid==t1.rowid +---- +stmt 0 err 1 -1 61 no such table: t2 +==== rowid-4.2.4 +SELECT t2.y FROM t2, t1 WHERE t2.rowid==t1.oid AND t1.x==4 +---- +stmt 0 err 1 -1 59 no such table: t2 +==== rowid-4.2.5 +SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1._rowid_==t2.rowid +---- +stmt 0 err 1 -1 63 no such table: t1 +==== rowid-4.2.6 +SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t2.rowid==t1.rowid +---- +stmt 0 err 1 -1 61 no such table: t1 +==== rowid-4.2.7 +SELECT t2.y FROM t1, t2 WHERE t2.rowid==t1.oid AND t1.x==4 +---- +stmt 0 err 1 -1 59 no such table: t1 +==== rowid-4.3.1 +SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1._rowid_==t2.rowid +---- +stmt 0 err 1 -1 63 no such table: t1 +==== rowid-4.3.2 +SELECT t2.y FROM t1, t2 WHERE t2.rowid==t1.oid AND 4==t1.x +---- +stmt 0 err 1 -1 59 no such table: t1 +==== rowid-4.4 +SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1.rowid==t2.rowid +---- +stmt 0 err 1 -1 61 no such table: t2 +==== rowid-4.4.1 +SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1._rowid_==t2.rowid +---- +stmt 0 err 1 -1 63 no such table: t2 +==== rowid-4.4.2 +SELECT t2.y FROM t2, t1 WHERE t2.rowid==t1.oid AND 4==t1.x +---- +stmt 0 err 1 -1 59 no such table: t2 +==== rowid-4.6 + + SELECT t1.x FROM t1, t2 + WHERE t2.y==256 AND t1.rowid==t2.rowid +---- +stmt 0 err 1 -1 72 no such table: t1 +==== rowid-5.1.2 +SELECT max(x) FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== rowid-6.1 + + SELECT x FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== rowid-6.3 + + SELECT x FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== rowid-7.0 + + DELETE FROM t1; + DROP TABLE t2; + DROP INDEX idxt1; + INSERT INTO t1 VALUES(1,2); + SELECT rowid, * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 39 no such table: t2 +stmt 39 err 1 -1 61 no such index: idxt1 +stmt 61 err 1 -1 93 no such table: t1 +stmt 93 err 1 -1 122 no such table: t1 +==== rowid-7.1 + + INSERT INTO t1 VALUES(99,100); + SELECT rowid,* FROM t1 +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 63 no such table: t1 +==== rowid-7.2 + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b); + INSERT INTO t2(b) VALUES(55); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 47 err 1 -1 81 no such table: t2 +stmt 81 err 1 -1 103 no such table: t2 +==== rowid-7.3 + + INSERT INTO t2(b) VALUES(66); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 34 no such table: t2 +stmt 34 err 1 -1 56 no such table: t2 +==== rowid-7.4 + + INSERT INTO t2(a,b) VALUES(1000000,77); + INSERT INTO t2(b) VALUES(88); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 44 no such table: t2 +stmt 44 err 1 -1 78 no such table: t2 +stmt 78 err 1 -1 100 no such table: t2 +==== rowid-7.5 + + INSERT INTO t2(a,b) VALUES(2147483647,99); + INSERT INTO t2(b) VALUES(11); + SELECT b FROM t2 ORDER BY b; +---- +stmt 0 err 1 -1 47 no such table: t2 +stmt 47 err 1 -1 81 no such table: t2 +stmt 81 err 1 -1 114 no such table: t2 +==== rowid-7.6 + + SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647); +---- +stmt 0 err 1 -1 71 no such table: t2 +==== rowid-7.7 + + INSERT INTO t2(b) VALUES(22); + INSERT INTO t2(b) VALUES(33); + INSERT INTO t2(b) VALUES(44); + INSERT INTO t2(b) VALUES(55); + SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647) + ORDER BY b; +---- +stmt 0 err 1 -1 36 no such table: t2 +stmt 36 err 1 -1 72 no such table: t2 +stmt 72 err 1 -1 108 no such table: t2 +stmt 108 err 1 -1 144 no such table: t2 +stmt 144 err 1 -1 237 no such table: t2 +==== rowid-7.8 + + DELETE FROM t2 WHERE a!=2; + INSERT INTO t2(b) VALUES(111); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 31 no such table: t2 +stmt 31 err 1 -1 66 no such table: t2 +stmt 66 err 1 -1 88 no such table: t2 +==== rowid-8.1 + + CREATE TABLE t3(a integer primary key); + CREATE TABLE t4(x); + INSERT INTO t4 VALUES(1); + CREATE TRIGGER r3 AFTER INSERT on t3 FOR EACH ROW BEGIN + INSERT INTO t4 VALUES(NEW.a+10); + END; + SELECT * FROM t3; +---- +stmt 0 ok +stmt 44 ok +stmt 68 err 1 -1 98 no such table: t4 +stmt 98 err 1 -1 158 no such table: main.t3 +stmt 206 err 1 -1 228 no such table: t3 +==== rowid-8.2 + + SELECT rowid, * FROM t4; +---- +stmt 0 err 1 -1 29 no such table: t4 +==== rowid-8.3 + + INSERT INTO t3 VALUES(123); + SELECT last_insert_rowid(); +---- +stmt 0 err 1 -1 32 no such table: t3 +stmt 32 ok +==== rowid-8.4 + + SELECT * FROM t3; +---- +stmt 0 err 1 -1 22 no such table: t3 +==== rowid-8.5 + + SELECT rowid, * FROM t4; +---- +stmt 0 err 1 -1 29 no such table: t4 +==== rowid-8.6 + + INSERT INTO t3 VALUES(NULL); + SELECT last_insert_rowid(); +---- +stmt 0 err 1 -1 33 no such table: t3 +stmt 33 ok +==== rowid-8.7 + + SELECT * FROM t3; +---- +stmt 0 err 1 -1 22 no such table: t3 +==== rowid-8.8 + + SELECT rowid, * FROM t4; +---- +stmt 0 err 1 -1 29 no such table: t4 +==== rowid-9.1 + + SELECT * FROM t3 WHERE a<123.5 +---- +stmt 0 err 1 -1 36 no such table: t3 +==== rowid-9.2 + + SELECT * FROM t3 WHERE a<124.5 +---- +stmt 0 err 1 -1 36 no such table: t3 +==== rowid-9.3 + + SELECT * FROM t3 WHERE a>123.5 +---- +stmt 0 err 1 -1 36 no such table: t3 +==== rowid-9.4 + + SELECT * FROM t3 WHERE a>122.5 +---- +stmt 0 err 1 -1 36 no such table: t3 +==== rowid-9.5 + + SELECT * FROM t3 WHERE a==123.5 +---- +stmt 0 err 1 -1 37 no such table: t3 +==== rowid-9.6 + + SELECT * FROM t3 WHERE a==123.000 +---- +stmt 0 err 1 -1 39 no such table: t3 +==== rowid-9.7 + + SELECT * FROM t3 WHERE a>100.5 AND a<200.5 +---- +stmt 0 err 1 -1 48 no such table: t3 +==== rowid-9.8 + + SELECT * FROM t3 WHERE a>'xyz'; +---- +stmt 0 err 1 -1 36 no such table: t3 +==== rowid-9.9 + + SELECT * FROM t3 WHERE a<'xyz'; +---- +stmt 0 err 1 -1 36 no such table: t3 +==== rowid-9.10 + + SELECT * FROM t3 WHERE a>=122.9 AND a<=123.1 +---- +stmt 0 err 1 -1 50 no such table: t3 +==== rowid-10.1 + + CREATE TABLE t5(a); + INSERT INTO t5 VALUES(1); + INSERT INTO t5 VALUES(2); + INSERT INTO t5 SELECT a+2 FROM t5; + INSERT INTO t5 SELECT a+4 FROM t5; + SELECT rowid, * FROM t5; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t5 +stmt 54 err 1 -1 84 no such table: t5 +stmt 84 err 1 -1 123 no such table: t5 +stmt 123 err 1 -1 162 no such table: t5 +stmt 162 err 1 -1 191 no such table: t5 +==== rowid-10.2 +SELECT rowid, a FROM t5 WHERE rowid>=5.5 +---- +stmt 0 err 1 -1 41 no such table: t5 +==== rowid-10.3 +SELECT rowid, a FROM t5 WHERE rowid>=5.0 +---- +stmt 0 err 1 -1 41 no such table: t5 +==== rowid-10.4 +SELECT rowid, a FROM t5 WHERE rowid>5.5 +---- +stmt 0 err 1 -1 40 no such table: t5 +==== rowid-10.3.2 +SELECT rowid, a FROM t5 WHERE rowid>5.0 +---- +stmt 0 err 1 -1 40 no such table: t5 +==== rowid-10.5 +SELECT rowid, a FROM t5 WHERE 5.5<=rowid +---- +stmt 0 err 1 -1 41 no such table: t5 +==== rowid-10.6 +SELECT rowid, a FROM t5 WHERE 5.5=rowid +---- +stmt 0 err 1 -1 41 no such table: t5 +==== rowid-10.10 +SELECT rowid, a FROM t5 WHERE 5.5>rowid +---- +stmt 0 err 1 -1 40 no such table: t5 +==== rowid-10.11 +SELECT rowid, a FROM t5 WHERE rowid>=5.5 ORDER BY rowid DESC +---- +stmt 0 err 1 -1 61 no such table: t5 +==== rowid-10.11.2 +SELECT rowid, a FROM t5 WHERE rowid>=5.0 ORDER BY rowid DESC +---- +stmt 0 err 1 -1 61 no such table: t5 +==== rowid-10.12 +SELECT rowid, a FROM t5 WHERE rowid>5.5 ORDER BY rowid DESC +---- +stmt 0 err 1 -1 60 no such table: t5 +==== rowid-10.12.2 +SELECT rowid, a FROM t5 WHERE rowid>5.0 ORDER BY rowid DESC +---- +stmt 0 err 1 -1 60 no such table: t5 +==== rowid-10.13 +SELECT rowid, a FROM t5 WHERE 5.5<=rowid ORDER BY rowid DESC +---- +stmt 0 err 1 -1 61 no such table: t5 +==== rowid-10.14 +SELECT rowid, a FROM t5 WHERE 5.5=rowid ORDER BY rowid DESC +---- +stmt 0 err 1 -1 61 no such table: t5 +==== rowid-10.18 +SELECT rowid, a FROM t5 WHERE 5.5>rowid ORDER BY rowid DESC +---- +stmt 0 err 1 -1 60 no such table: t5 +==== rowid-10.30 + + CREATE TABLE t6(a); + INSERT INTO t6(rowid,a) SELECT -a,a FROM t5; + SELECT rowid, * FROM t6; +---- +stmt 0 ok +stmt 24 err 1 -1 73 no such table: t6 +stmt 73 err 1 -1 102 no such table: t6 +==== rowid-10.31.1 +SELECT rowid, a FROM t6 WHERE rowid>=-5.5 +---- +stmt 0 err 1 -1 42 no such table: t6 +==== rowid-10.31.2 +SELECT rowid, a FROM t6 WHERE rowid>=-5.0 +---- +stmt 0 err 1 -1 42 no such table: t6 +==== rowid-10.32.1 +SELECT rowid, a FROM t6 WHERE rowid>=-5.5 ORDER BY rowid DESC +---- +stmt 0 err 1 -1 62 no such table: t6 +==== rowid-10.32.1.dup1 +SELECT rowid, a FROM t6 WHERE rowid>=-5.0 ORDER BY rowid DESC +---- +stmt 0 err 1 -1 62 no such table: t6 +==== rowid-10.33 +SELECT rowid, a FROM t6 WHERE -5.5<=rowid +---- +stmt 0 err 1 -1 42 no such table: t6 +==== rowid-10.34 +SELECT rowid, a FROM t6 WHERE -5.5<=rowid ORDER BY rowid DESC +---- +stmt 0 err 1 -1 62 no such table: t6 +==== rowid-10.35.1 +SELECT rowid, a FROM t6 WHERE rowid>-5.5 +---- +stmt 0 err 1 -1 41 no such table: t6 +==== rowid-10.35.2 +SELECT rowid, a FROM t6 WHERE rowid>-5.0 +---- +stmt 0 err 1 -1 41 no such table: t6 +==== rowid-10.36.1 +SELECT rowid, a FROM t6 WHERE rowid>-5.5 ORDER BY rowid DESC +---- +stmt 0 err 1 -1 61 no such table: t6 +==== rowid-10.36.2 +SELECT rowid, a FROM t6 WHERE rowid>-5.0 ORDER BY rowid DESC +---- +stmt 0 err 1 -1 61 no such table: t6 +==== rowid-10.37 +SELECT rowid, a FROM t6 WHERE -5.5=rowid +---- +stmt 0 err 1 -1 42 no such table: t6 +==== rowid-10.42 +SELECT rowid, a FROM t6 WHERE -5.5>=rowid ORDER BY rowid DESC +---- +stmt 0 err 1 -1 62 no such table: t6 +==== rowid-10.43 +SELECT rowid, a FROM t6 WHERE rowid<-5.5 +---- +stmt 0 err 1 -1 41 no such table: t6 +==== rowid-10.44 +SELECT rowid, a FROM t6 WHERE rowid<-5.5 ORDER BY rowid DESC +---- +stmt 0 err 1 -1 61 no such table: t6 +==== rowid-10.44.dup1 +SELECT rowid, a FROM t6 WHERE -5.5>rowid +---- +stmt 0 err 1 -1 41 no such table: t6 +==== rowid-10.46 +SELECT rowid, a FROM t6 WHERE -5.5>rowid ORDER BY rowid DESC +---- +stmt 0 err 1 -1 61 no such table: t6 +==== rowid-11.1 +SELECT rowid, a FROM t5 WHERE rowid>'abc' +---- +stmt 0 err 1 -1 42 no such table: t5 +==== rowid-11.2 +SELECT rowid, a FROM t5 WHERE rowid>='abc' +---- +stmt 0 err 1 -1 43 no such table: t5 +==== rowid-11.3 +SELECT rowid, a FROM t5 WHERE rowid<'abc' +---- +stmt 0 err 1 -1 42 no such table: t5 +==== rowid-11.4 +SELECT rowid, a FROM t5 WHERE rowid<='abc' +---- +stmt 0 err 1 -1 43 no such table: t5 +==== rowid-11.asc.1 +SELECT rowid, a FROM t5 WHERE rowid>'abc' ORDER BY 1 ASC +---- +stmt 0 err 1 -1 57 no such table: t5 +==== rowid-11.asc.2 +SELECT rowid, a FROM t5 WHERE rowid>='abc' ORDER BY 1 ASC +---- +stmt 0 err 1 -1 58 no such table: t5 +==== rowid-11.asc.3 +SELECT rowid, a FROM t5 WHERE rowid<'abc' ORDER BY 1 ASC +---- +stmt 0 err 1 -1 57 no such table: t5 +==== rowid-11.asc.4 +SELECT rowid, a FROM t5 WHERE rowid<='abc' ORDER BY 1 ASC +---- +stmt 0 err 1 -1 58 no such table: t5 +==== rowid-11.desc.1 +SELECT rowid, a FROM t5 WHERE rowid>'abc' ORDER BY 1 DESC +---- +stmt 0 err 1 -1 58 no such table: t5 +==== rowid-11.desc.2 +SELECT rowid, a FROM t5 WHERE rowid>='abc' ORDER BY 1 DESC +---- +stmt 0 err 1 -1 59 no such table: t5 +==== rowid-11.desc.3 +SELECT rowid, a FROM t5 WHERE rowid<'abc' ORDER BY 1 DESC +---- +stmt 0 err 1 -1 58 no such table: t5 +==== rowid-11.desc.4 +SELECT rowid, a FROM t5 WHERE rowid<='abc' ORDER BY 1 DESC +---- +stmt 0 err 1 -1 59 no such table: t5 +==== rowid-12.1 + + CREATE TABLE t7(x INTEGER PRIMARY KEY, y); + CREATE TABLE t7temp(a INTEGER PRIMARY KEY); + INSERT INTO t7 VALUES(9223372036854775807,'a'); + SELECT y FROM t7; +---- +stmt 0 ok +stmt 47 ok +stmt 95 err 1 -1 147 no such table: t7 +stmt 147 err 1 -1 169 no such table: t7 +==== rowid-13.1 + + CREATE TABLE t13(x); + INSERT INTO t13(rowid,x) VALUES(1234,5); + SELECT rowid, x, addrow(rowid+1000), '|' FROM t13 LIMIT 3; + SELECT last_insert_rowid(); +---- +stmt 0 ok +stmt 23 err 1 -1 66 no such table: t13 +stmt 66 err 1 -1 127 no such table: t13 +stmt 127 ok +==== rowid-14.0 + + CREATE TABLE t14(x INTEGER PRIMARY KEY); + INSERT INTO t14(x) VALUES (100); +---- +stmt 0 ok +stmt 43 err 1 -1 78 no such table: t14 +==== rowid-14.1 + + SELECT * FROM t14 WHERE x < 'a' ORDER BY rowid ASC; +---- +stmt 0 err 1 -1 54 no such table: t14 +==== rowid-14.2 + + SELECT * FROM t14 WHERE x < 'a' ORDER BY rowid DESC; +---- +stmt 0 err 1 -1 55 no such table: t14 +==== rowid-14.3 + + DELETE FROM t14; + SELECT * FROM t14 WHERE x < 'a' ORDER BY rowid ASC; +---- +stmt 0 err 1 -1 19 no such table: t14 +stmt 19 err 1 -1 73 no such table: t14 +==== rowid-14.4 + + SELECT * FROM t14 WHERE x < 'a' ORDER BY rowid DESC; +---- +stmt 0 err 1 -1 55 no such table: t14 +==== rowid-15.0 + + PRAGMA reverse_unordered_selects=true; + CREATE TABLE t1 (c0, c1); + CREATE TABLE t2 (c0 INT UNIQUE); + INSERT INTO t1(c0, c1) VALUES (0, 0), (0, NULL); + INSERT INTO t2(c0) VALUES (1); +---- +stmt 0 ok +stmt 41 ok +stmt 69 ok +stmt 104 err 1 -1 155 no such table: t1 +stmt 155 err 1 -1 188 no such table: t2 +==== rowid-15.1 + + SELECT t2.c0, t1.c1 FROM t1, t2 + WHERE (t2.rowid <= 'a') OR (t1.c0 <= t2.c0) LIMIT 100 +---- +stmt 0 err 1 -1 92 no such table: t1 +==== rowid-15.2 + + SELECT 1, NULL INTERSECT SELECT * FROM ( + SELECT t2.c0, t1.c1 FROM t1, t2 + WHERE ((t2.rowid <= 'a')) OR (t1.c0 <= t2.c0) ORDER BY 'a' DESC LIMIT 100 + ); +---- +stmt 0 err 1 -1 166 no such table: t1 +==== 16.0 + + CREATE TABLE t1(x); + CREATE TABLE t2(y PRIMARY KEY) WITHOUT ROWID; + CREATE VIEW v1 AS SELECT x FROM t1; + CREATE TABLE t3(z); + + INSERT INTO t1(rowid, x) VALUES(1, 1); + INSERT INTO t2(y) VALUES(2); + INSERT INTO t3(rowid, z) VALUES(3, 3); +---- +stmt 0 ok +stmt 22 ok +stmt 70 ok +stmt 108 ok +stmt 130 err 1 -1 172 no such table: t1 +stmt 172 err 1 -1 203 no such table: t2 +stmt 203 err 1 -1 244 no such table: t3 +==== 16.1 + SELECT rowid FROM t1, t2; +---- +stmt 0 err 1 -1 26 no such table: t1 +==== 16.2 + SELECT rowid FROM t1, v1; +---- +stmt 0 err 1 -1 26 no such table: t1 +==== 16.3 + SELECT rowid FROM t3, v1; +---- +stmt 0 err 1 -1 26 no such table: t3 +==== 16.4 + SELECT rowid FROM t3, (SELECT 123); +---- +stmt 0 err 1 -1 36 no such table: t3 +==== 16.5 + SELECT rowid FROM t2, t1; +---- +stmt 0 err 1 -1 26 no such table: t2 +==== 16.6 + SELECT rowid FROM v1, t1; +---- +stmt 0 err 1 -1 26 no such table: v1 +==== 16.7 + SELECT rowid FROM v1, t3; +---- +stmt 0 err 1 -1 26 no such table: v1 +==== 16.8 + SELECT rowid FROM (SELECT 123), t3; +---- +stmt 0 err 1 -1 36 no such table: t3 +==== 16.1.dup1 + SELECT rowid FROM t1, t2; +---- +stmt 0 err 1 -1 26 no such table: t1 +==== 16.2.dup1 + SELECT rowid FROM t1, v1; +---- +stmt 0 err 1 -1 26 no such table: t1 +==== 16.3.dup1 + SELECT rowid FROM t3, v1; +---- +stmt 0 err 1 -1 26 no such table: t3 +==== 16.4.dup1 + SELECT rowid FROM t3, (SELECT 123); +---- +stmt 0 err 1 -1 36 no such table: t3 +==== 16.5.dup1 + SELECT rowid FROM t2, t1; +---- +stmt 0 err 1 -1 26 no such table: t2 +==== 16.6.dup1 + SELECT rowid FROM v1, t1; +---- +stmt 0 err 1 -1 26 no such table: v1 +==== 16.7.dup1 + SELECT rowid FROM v1, t3; +---- +stmt 0 err 1 -1 26 no such table: v1 +==== 16.8.dup1 + SELECT rowid FROM (SELECT 123), t3; +---- +stmt 0 err 1 -1 36 no such table: t3 +==== 16.9 + + SELECT rowid FROM t1, t3; +---- +stmt 0 err 1 -1 29 no such table: t1 diff --git a/parser/testdata/rowvalue.metadata.json b/parser/testdata/rowvalue.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalue.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalue.test b/parser/testdata/rowvalue.test new file mode 100644 index 0000000..9540a6d --- /dev/null +++ b/parser/testdata/rowvalue.test @@ -0,0 +1,968 @@ +==== 0.0 + + CREATE TABLE one(o); + INSERT INTO one VALUES(1); +---- +stmt 0 ok +stmt 23 err 1 -1 52 no such table: one +==== 3.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 1); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(2, 3); + INSERT INTO t1 VALUES(2, 4); + INSERT INTO t1 VALUES(3, 5); + INSERT INTO t1 VALUES(3, 6); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 87 no such table: t1 +stmt 87 err 1 -1 118 no such table: t1 +stmt 118 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 180 no such table: t1 +stmt 180 err 1 -1 211 no such table: t1 +==== 6.0 + + CREATE TABLE hh(a, b, c); + INSERT INTO hh VALUES('abc', 1, 'i'); + INSERT INTO hh VALUES('ABC', 1, 'ii'); + INSERT INTO hh VALUES('def', 2, 'iii'); + INSERT INTO hh VALUES('DEF', 2, 'iv'); + INSERT INTO hh VALUES('GHI', 3, 'v'); + INSERT INTO hh VALUES('ghi', 3, 'vi'); + + CREATE INDEX hh_ab ON hh(a, b); +---- +stmt 0 ok +stmt 28 err 1 -1 68 no such table: hh +stmt 68 err 1 -1 109 no such table: hh +stmt 109 err 1 -1 151 no such table: hh +stmt 151 err 1 -1 192 no such table: hh +stmt 192 err 1 -1 232 no such table: hh +stmt 232 err 1 -1 273 no such table: hh +stmt 273 err 1 -1 308 no such table: main.hh +==== 6.1 + + SELECT c FROM hh WHERE (a, b) = (SELECT 'abc', 1); +---- +stmt 0 err 1 -1 53 no such table: hh +==== 6.2 + + SELECT c FROM hh WHERE (a, b) = (SELECT 'abc' COLLATE nocase, 1); +---- +stmt 0 err 1 -1 68 no such table: hh +==== 6.3 + + SELECT c FROM hh WHERE a = (SELECT 'abc' COLLATE nocase) AND b = (SELECT 1); +---- +stmt 0 err 1 -1 79 no such table: hh +==== 6.4 + + SELECT c FROM hh WHERE +a = (SELECT 'abc' COLLATE nocase) AND b = (SELECT 1); +---- +stmt 0 err 1 -1 80 no such table: hh +==== 6.5 + + SELECT c FROM hh WHERE a = (SELECT 'abc') COLLATE nocase AND b = (SELECT 1); +---- +stmt 0 err 1 -1 79 no such table: hh +==== 6.6 + + SELECT c FROM hh WHERE (a, b) = (SELECT 'abc', 1) COLLATE nocase; +---- +stmt 0 err 1 -1 68 no such table: hh +==== 6.7 + + SELECT c FROM hh WHERE (a, b) = 1; +---- +stmt 0 err 1 -1 37 no such table: hh +==== 6.8 + + SELECT c FROM hh WHERE (a COLLATE nocase, b) = (SELECT 'def', 2); +---- +stmt 0 err 1 -1 68 no such table: hh +==== 6.9 + + SELECT c FROM hh WHERE (a COLLATE nocase, b) IS NOT (SELECT 'def', 2); +---- +stmt 0 err 1 -1 73 no such table: hh +==== 6.10 + + SELECT c FROM hh WHERE (b, a) = (SELECT 2, 'def'); +---- +stmt 0 err 1 -1 53 no such table: hh +==== 7.0 + + CREATE TABLE xy(i INTEGER PRIMARY KEY, j, k); + INSERT INTO xy VALUES(1, 1, 1); + INSERT INTO xy VALUES(2, 2, 2); + INSERT INTO xy VALUES(3, 3, 3); + INSERT INTO xy VALUES(4, 4, 4); +---- +stmt 0 ok +stmt 48 err 1 -1 82 no such table: xy +stmt 82 err 1 -1 116 no such table: xy +stmt 116 err 1 -1 150 no such table: xy +stmt 150 err 1 -1 184 no such table: xy +==== 8.0 + + CREATE TABLE j1(a); +---- +stmt 0 ok +==== 8.1 + + SELECT * FROM j1 WHERE (select min(a) FROM j1) IN (?, ?, ?) +---- +stmt 0 err 1 -1 63 no such table: j1 +==== 9.0 + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b, c); + INSERT INTO t2 VALUES(1, 1, 1); + INSERT INTO t2 VALUES(2, 2, 2); + INSERT INTO t2 VALUES(3, 3, 3); + INSERT INTO t2 VALUES(4, 4, 4); + INSERT INTO t2 VALUES(5, 5, 5); +---- +stmt 0 ok +stmt 48 err 1 -1 82 no such table: t2 +stmt 82 err 1 -1 116 no such table: t2 +stmt 116 err 1 -1 150 no such table: t2 +stmt 150 err 1 -1 184 no such table: t2 +stmt 184 err 1 -1 218 no such table: t2 +==== 10.0 + + CREATE TABLE dual(dummy); INSERT INTO dual(dummy) VALUES('X'); + CREATE TABLE t3(a TEXT,b TEXT,c TEXT,d TEXT,e TEXT,f TEXT); + CREATE INDEX t3x ON t3(b,c,d,e,f); + + SELECT a FROM t3 + WHERE (c,d) IN (SELECT 'c','d' FROM dual) + AND (a,b,e) IN (SELECT 'a','b','d' FROM dual); +---- +stmt 0 ok +stmt 28 err 1 -1 65 no such table: dual +stmt 65 ok +stmt 127 err 1 -1 164 no such table: main.t3 +stmt 164 err 1 -1 281 no such table: t3 +==== 11.1 + + CREATE TABLE t11(a); + SELECT * FROM t11 WHERE (a,a)<=1; +---- +stmt 0 ok +stmt 23 err 1 -1 59 no such table: t11 +==== 11.2 + + SELECT * FROM t11 WHERE (a,a)<1; +---- +stmt 0 err 1 -1 35 no such table: t11 +==== 11.3 + + SELECT * FROM t11 WHERE (a,a)>=1; +---- +stmt 0 err 1 -1 36 no such table: t11 +==== 11.4 + + SELECT * FROM t11 WHERE (a,a)>1; +---- +stmt 0 err 1 -1 35 no such table: t11 +==== 11.5 + + SELECT * FROM t11 WHERE (a,a)==1; +---- +stmt 0 err 1 -1 36 no such table: t11 +==== 11.6 + + SELECT * FROM t11 WHERE (a,a)<>1; +---- +stmt 0 err 1 -1 36 no such table: t11 +==== 11.7 + + SELECT * FROM t11 WHERE (a,a) IS 1; +---- +stmt 0 err 1 -1 38 no such table: t11 +==== 11.8 + + SELECT * FROM t11 WHERE (a,a) IS NOT 1; +---- +stmt 0 err 1 -1 42 no such table: t11 +==== 12.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INT,b INT); INSERT INTO t1 VALUES(1,2); + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x INT,y INT); INSERT INTO t2 VALUES(3,4); + SELECT *,'x' FROM t1 LEFT JOIN t2 ON (a,b)=(x,y); +---- +stmt 0 ok +stmt 27 ok +stmt 59 err 1 -1 87 no such table: t1 +stmt 87 ok +stmt 114 ok +stmt 146 err 1 -1 174 no such table: t2 +stmt 174 err 1 -1 226 no such table: t1 +==== 12.2 + + SELECT t1.*, t2.* FROM t2 RIGHT JOIN t1 ON (a,b)=(x,y); +---- +stmt 0 err 1 -1 58 no such table: t2 +==== 12.3 + + SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON (a,b)=(x,y) + ORDER BY coalesce(a,x); +---- +stmt 0 err 1 -1 83 no such table: t1 +==== 14.0 + + CREATE TABLE t12(x); + INSERT INTO t12 VALUES(2), (4); +---- +stmt 0 ok +stmt 23 err 1 -1 57 no such table: t12 +==== 14.6 + + SELECT 1 FROM t12 WHERE (1,x) BETWEEN (1,1) AND (3,3) +---- +stmt 0 err 1 -1 57 no such table: t12 +==== 14.1 + + CREATE TABLE x1(a PRIMARY KEY, b); + CREATE TABLE x2(a INTEGER PRIMARY KEY, b); +---- +stmt 0 ok +stmt 37 ok +==== 15.1 + + DETACH (SELECT * FROM (SELECT 1,2))<3; +---- +stmt 0 err 1 -1 41 row value misused +==== 15.2 + + UPDATE x1 SET a=(SELECT * FROM (SELECT b,2))<3; +---- +stmt 0 err 1 -1 50 no such table: x1 +==== 15.3 + + UPDATE x1 SET a=NULL WHERE a<(SELECT * FROM (SELECT b,2)); +---- +stmt 0 err 1 -1 62 no such table: x1 +==== 15.4 + + DELETE FROM x1 WHERE a<(SELECT * FROM (SELECT b,2)); +---- +stmt 0 err 1 -1 56 no such table: x1 +==== 15.5 + + INSERT INTO x1(a,b) VALUES(1,(SELECT * FROM (SELECT 1,2))<3); +---- +stmt 0 err 1 -1 64 no such table: x1 +==== 16.1 + + CREATE TABLE t16a(a,b,c); + INSERT INTO t16a VALUES(1,2,3); + CREATE TABLE t16b(x); + INSERT INTO t16b(x) VALUES(1); + CREATE TRIGGER t16r AFTER UPDATE ON t16b BEGIN + UPDATE t16a SET (a,b,c)=(SELECT new.x,new.x+1,new.x+2); + END; + UPDATE t16b SET x=7; + SELECT * FROM t16a; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t16a +stmt 62 ok +stmt 86 err 1 -1 119 no such table: t16b +stmt 119 err 1 -1 168 no such table: main.t16b +stmt 236 err 1 -1 259 no such table: t16b +stmt 259 err 1 -1 281 no such table: t16a +==== 16.2 + + UPDATE t16b SET x=97; + SELECT * FROM t16a; +---- +stmt 0 err 1 -1 24 no such table: t16b +stmt 24 err 1 -1 46 no such table: t16a +==== 16.3 + + CREATE TABLE t16c(a, b, c, d, e); + INSERT INTO t16c VALUES(1, 'a', 'b', 'c', 'd'); + CREATE TRIGGER t16c1 AFTER INSERT ON t16c BEGIN + UPDATE t16c SET (c, d) = (SELECT 'A', 'B'), (e, b) = (SELECT 'C', 'D') + WHERE a = new.a-1; + END; + + SELECT * FROM t16c; +---- +stmt 0 ok +stmt 36 err 1 -1 86 no such table: t16c +stmt 86 err 1 -1 136 no such table: main.t16c +stmt 243 err 1 -1 266 no such table: t16c +==== 16.4 + + INSERT INTO t16c VALUES(2, 'w', 'x', 'y', 'z'); + SELECT * FROM t16c; +---- +stmt 0 err 1 -1 50 no such table: t16c +stmt 50 err 1 -1 72 no such table: t16c +==== 16.5 + + DROP TRIGGER t16c1; + PRAGMA recursive_triggers = 1; + INSERT INTO t16c VALUES(3, 'i', 'ii', 'iii', 'iv'); + CREATE TRIGGER t16c1 AFTER UPDATE ON t16c WHEN new.a>1 BEGIN + UPDATE t16c SET (e, d) = ( + SELECT b, c FROM t16c WHERE a = new.a-1 + ), (c, b) = ( + SELECT d, e FROM t16c WHERE a = new.a-1 + ) WHERE a = new.a-1; + END; + + UPDATE t16c SET a=a WHERE a=3; + SELECT * FROM t16c; +---- +stmt 0 err 1 -1 22 no such trigger: t16c1 +stmt 22 ok +stmt 55 err 1 -1 109 no such table: t16c +stmt 109 err 1 -1 172 no such table: main.t16c +stmt 345 err 1 -1 379 no such table: t16c +stmt 379 err 1 -1 401 no such table: t16c +==== 17.0 + + CREATE TABLE b1(a, b); + CREATE TABLE b2(x); +---- +stmt 0 ok +stmt 25 ok +==== 17.1 + + SELECT * FROM b2 CROSS JOIN b1 + WHERE b2.x=b1.a AND (b1.a, 2) + IN (VALUES(1, 2)); +---- +stmt 0 err 1 -1 88 no such table: b2 +==== 18.0 + + CREATE TABLE b3 ( a, b, PRIMARY KEY (a, b) ); + CREATE TABLE b4 ( a ); + CREATE TABLE b5 ( a, b ); + INSERT INTO b3 VALUES (1, 1), (1, 2); + INSERT INTO b4 VALUES (1); + INSERT INTO b5 VALUES (1, 1), (1, 2); +---- +stmt 0 ok +stmt 48 ok +stmt 73 ok +stmt 101 err 1 -1 141 no such table: b3 +stmt 141 err 1 -1 170 no such table: b4 +stmt 170 err 1 -1 210 no such table: b5 +==== 18.1 + + SELECT * FROM b3 WHERE (SELECT b3.a, b3.b) IN ( SELECT a, b FROM b5 ) +---- +stmt 0 err 1 -1 73 no such table: b3 +==== 18.2 + + SELECT * FROM b3 WHERE (VALUES(b3.a, b3.b)) IN ( SELECT a, b FROM b5 ); +---- +stmt 0 err 1 -1 74 no such table: b3 +==== 18.3 + + SELECT * FROM b3 WHERE (b3.a, b3.b) IN ( SELECT a, b FROM b5 ); +---- +stmt 0 err 1 -1 66 no such table: b3 +==== 18.4 + + SELECT * FROM b3 JOIN b4 ON b4.a = b3.a + WHERE (SELECT b3.a, b3.b) IN ( SELECT a, b FROM b5 ); +---- +stmt 0 err 1 -1 98 no such table: b3 +==== 18.5 + + SELECT * FROM b3 JOIN b4 ON b4.a = b3.a + WHERE (VALUES(b3.a, b3.b)) IN ( SELECT a, b FROM b5 ); +---- +stmt 0 err 1 -1 99 no such table: b3 +==== 18.6 + + SELECT * FROM b3 JOIN b4 ON b4.a = b3.a + WHERE (b3.a, b3.b) IN ( SELECT a, b FROM b5 ); +---- +stmt 0 err 1 -1 91 no such table: b3 +==== 19.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY,b); + INSERT INTO t1(a,b) VALUES(1,11),(2,22),(3,33),(4,44); + SELECT * FROM t1 WHERE (a,b)>(0,0) ORDER BY a; +---- +stmt 0 ok +stmt 27 ok +stmt 71 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 177 no such table: t1 +==== 19.2 + + SELECT * FROM t1 WHERE (a,b)>=(0,0) ORDER BY a; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 19.3 + + SELECT * FROM t1 WHERE (a,b)<(5,0) ORDER BY a DESC; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 19.4 + + SELECT * FROM t1 WHERE (a,b)<=(5,0) ORDER BY a DESC; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 19.5 + + SELECT * FROM t1 WHERE (a,b)>(3,0) ORDER BY a; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 19.6 + + SELECT * FROM t1 WHERE (a,b)>=(3,0) ORDER BY a; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 19.7 + + SELECT * FROM t1 WHERE (a,b)<(3,0) ORDER BY a DESC; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 19.8 + + SELECT * FROM t1 WHERE (a,b)<=(3,0) ORDER BY a DESC; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 19.9 + + SELECT * FROM t1 WHERE (a,b)>(3,32) ORDER BY a; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 19.10 + + SELECT * FROM t1 WHERE (a,b)>(3,33) ORDER BY a; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 19.11 + + SELECT * FROM t1 WHERE (a,b)>=(3,33) ORDER BY a; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 19.12 + + SELECT * FROM t1 WHERE (a,b)>=(3,34) ORDER BY a; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 19.13 + + SELECT * FROM t1 WHERE (a,b)<(3,34) ORDER BY a DESC; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 19.14 + + SELECT * FROM t1 WHERE (a,b)<(3,33) ORDER BY a DESC; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 19.15 + + SELECT * FROM t1 WHERE (a,b)<=(3,33) ORDER BY a DESC; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 19.16 + + SELECT * FROM t1 WHERE (a,b)<=(3,32) ORDER BY a DESC; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 19.21 + + SELECT * FROM t1 WHERE (0,0)<(a,b) ORDER BY a; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 19.22 + + SELECT * FROM t1 WHERE (0,0)<=(a,b) ORDER BY a; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 19.23 + + SELECT * FROM t1 WHERE (5,0)>(a,b) ORDER BY a DESC; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 19.24 + + SELECT * FROM t1 WHERE (5,0)>=(a,b) ORDER BY a DESC; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 19.25 + + SELECT * FROM t1 WHERE (3,0)<(a,b) ORDER BY a; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 19.26 + + SELECT * FROM t1 WHERE (3,0)<=(a,b) ORDER BY a; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 19.27 + + SELECT * FROM t1 WHERE (3,0)>(a,b) ORDER BY a DESC; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 19.28 + + SELECT * FROM t1 WHERE (3,0)>=(a,b) ORDER BY a DESC; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 19.29 + + SELECT * FROM t1 WHERE (3,32)<(a,b) ORDER BY a; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 19.30 + + SELECT * FROM t1 WHERE (3,33)<(a,b) ORDER BY a; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 19.31 + + SELECT * FROM t1 WHERE (3,33)<=(a,b) ORDER BY a; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 19.32 + + SELECT * FROM t1 WHERE (3,34)<=(a,b) ORDER BY a; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 19.33 + + SELECT * FROM t1 WHERE (3,34)>(a,b) ORDER BY a DESC; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 19.34 + + SELECT * FROM t1 WHERE (3,33)>(a,b) ORDER BY a DESC; +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 19.35 + + SELECT * FROM t1 WHERE (3,33)>=(a,b) ORDER BY a DESC; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 19.36 + + SELECT * FROM t1 WHERE (3,32)>=(a,b) ORDER BY a DESC; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 20.1 + + SELECT 1 WHERE (2,(2,0)) IS (2,(2,0)); +---- +stmt 0 ok +==== 21.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a,b,PRIMARY KEY(b,b)); + INSERT INTO t1 VALUES(1,2),(3,4),(5,6); + SELECT * FROM t1 WHERE (a,b) IN (VALUES(1,2)); +---- +stmt 0 ok +stmt 27 ok +stmt 68 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 159 no such table: t1 +==== 22.100 + + SELECT (SELECT 3,4 UNION SELECT 5,6 ORDER BY 1) IN (SELECT 3,4); + SELECT (SELECT 3,4 UNION SELECT 5,6 ORDER BY 1) IN (SELECT 5,6); + SELECT (SELECT 5,6 UNION SELECT 3,4 ORDER BY 1) IN (SELECT 3,4); + SELECT (SELECT 5,6 UNION SELECT 3,4 ORDER BY 1) IN (SELECT 5,6); + SELECT (SELECT 3,4 UNION SELECT 5,6 ORDER BY 1 DESC) IN (SELECT 3,4); + SELECT (SELECT 3,4 UNION SELECT 5,6 ORDER BY 1 DESC) IN (SELECT 5,6); + SELECT (SELECT 5,6 UNION SELECT 3,4 ORDER BY 1 DESC) IN (SELECT 3,4); + SELECT (SELECT 5,6 UNION SELECT 3,4 ORDER BY 1 DESC) IN (SELECT 5,6); +---- +stmt 0 ok +stmt 67 ok +stmt 134 ok +stmt 201 ok +stmt 268 ok +stmt 340 ok +stmt 412 ok +stmt 484 ok +==== 23.100 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(aa COLLATE NOCASE, bb); + INSERT INTO t0 VALUES('a', 'A'); + SELECT (+bb,1) >= (aa, 1), (aa,1)<=(+bb,1) FROM t0; + SELECT 2 FROM t0 WHERE (+bb,1) >= (aa,1); + SELECT 3 FROM t0 WHERE (aa,1) <= (+bb,1); +---- +stmt 0 ok +stmt 27 ok +stmt 69 err 1 -1 104 no such table: t0 +stmt 104 err 1 -1 158 no such table: t0 +stmt 158 err 1 -1 202 no such table: t0 +stmt 202 err 1 -1 246 no such table: t0 +==== 23.110 + + SELECT (SELECT +bb,1) >= (aa, 1), (aa,1)<=(SELECT +bb,1) FROM t0; + SELECT 2 FROM t0 WHERE (SELECT +bb,1) >= (aa,1); + SELECT 3 FROM t0 WHERE (aa,1) <= (SELECT +bb,1); +---- +stmt 0 err 1 -1 68 no such table: t0 +stmt 68 err 1 -1 119 no such table: t0 +stmt 119 err 1 -1 170 no such table: t0 +==== 24.100 + + DROP TABLE t0; + CREATE TABLE t0(c0 TEXT PRIMARY KEY); + INSERT INTO t0(c0) VALUES (''); + SELECT (t0.c0, TRUE) > (CAST(0 AS REAL), FALSE) FROM t0; + SELECT 2 FROM t0 WHERE (t0.c0, TRUE) > (CAST('' AS REAL), FALSE); +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +stmt 57 err 1 -1 91 no such table: t0 +stmt 91 err 1 -1 150 no such table: t0 +stmt 150 err 1 -1 218 no such table: t0 +==== 25.10 + + DROP TABLE t0; + CREATE TABLE t0(c0 UNIQUE); + INSERT INTO t0(c0) VALUES('a'); + SELECT (t0.c0, 0) < ('B' COLLATE NOCASE, 0) FROM t0; + SELECT 2 FROM t0 WHERE (t0.c0, 0) < ('B' COLLATE NOCASE, 0); +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 ok +stmt 47 err 1 -1 81 no such table: t0 +stmt 81 err 1 -1 136 no such table: t0 +stmt 136 err 1 -1 199 no such table: t0 +==== 25.20 + + SELECT ('B' COLLATE NOCASE, 0)> (t0.c0, 0) FROM t0; + SELECT 2 FROM t0 WHERE ('B' COLLATE NOCASE, 0)> (t0.c0, 0); +---- +stmt 0 err 1 -1 54 no such table: t0 +stmt 54 err 1 -1 116 no such table: t0 +==== 25.30 + + SELECT ('B', 0)> (t0.c0 COLLATE nocase, 0) FROM t0; + SELECT 2 FROM t0 WHERE ('B', 0)> (t0.c0 COLLATE nocase, 0); +---- +stmt 0 err 1 -1 54 no such table: t0 +stmt 54 err 1 -1 116 no such table: t0 +==== 25.40 + + SELECT (t0.c0 COLLATE nocase, 0) < ('B', 0) FROM t0; + SELECT 2 FROM t0 WHERE (t0.c0 COLLATE nocase, 0) < ('B', 0); +---- +stmt 0 err 1 -1 55 no such table: t0 +stmt 55 err 1 -1 118 no such table: t0 +==== 26.10 + + CREATE TABLE t0(c0); + CREATE TABLE t1(c1); + INSERT INTO t1(c1) VALUES (0); + SELECT (c0, x'') != (NULL, 0) FROM t1 LEFT JOIN t0; +---- +stmt 0 ok +stmt 23 ok +stmt 46 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 133 no such table: t1 +==== 26.20 + + SELECT 2 FROM t1 LEFT JOIN t0 ON (c0, x'') != (NULL, 0); +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 26.21 + + SELECT 21 FROM t0 RIGHT JOIN t1 ON (c0, x'') != (NULL, 0); +---- +stmt 0 err 1 -1 61 no such table: t0 +==== 26.30 + + SELECT 3 FROM t1 LEFT JOIN t0 WHERE (c0, x'') != (NULL, 0); +---- +stmt 0 err 1 -1 62 no such table: t1 +==== 26.31 + + SELECT 31 FROM t0 RIGHT JOIN t1 WHERE (c0, x'') != (NULL, 0); +---- +stmt 0 err 1 -1 64 no such table: t0 +==== 27.10 + + CREATE TABLE t0(c0 CHECK(((0, 0) > (0, c0)))); + INSERT INTO t0(c0) VALUES(0) ON CONFLICT(c0) DO UPDATE SET c0 = 3; +---- +stmt 0 ok +stmt 49 err 1 -1 118 no such table: t0 +==== 28.10 + + CREATE TABLE t0(c0 PRIMARY KEY, c1); + CREATE TRIGGER trigger0 BEFORE DELETE ON t0 BEGIN + SELECT (SELECT c0,c1 FROM t0) FROM t0; + END ; + DELETE FROM t0; +---- +stmt 0 ok +stmt 39 err 1 -1 91 no such table: main.t0 +stmt 143 err 1 -1 161 no such table: t0 +==== 29.1 + + SELECT (SELECT 1 WHERE ((SELECT 1 WHERE (2,(2,0)) IS (2,(20))),(2,0)) IS (2,(20))) WHERE (2,(2,0)) IS (2 IN(SELECT 1 WHERE (2,(2,2,0)) IS (2,(20))),(20)); +---- +stmt 0 err 1 -1 157 row value misused +==== 30.0 + + CREATE TABLE t1(x, y, z); + CREATE TABLE t2(a, b); + + INSERT INTO t1 VALUES(1000, 2000, 3000); + INSERT INTO t2 VALUES(NULL, NULL); +---- +stmt 0 ok +stmt 28 ok +stmt 53 err 1 -1 97 no such table: t1 +stmt 97 err 1 -1 134 no such table: t2 +==== 30.1 + + UPDATE t2 SET (a,b)=( + SELECT max( t1.x ) OVER( PARTITION BY sum( (SELECT t1.y) ) ), 2 + ) + FROM t1; +---- +stmt 0 err 1 -1 107 no such table: t2 +==== 30.2 + + SELECT * FROM t2 +---- +stmt 0 err 1 -1 20 no such table: t2 +==== 30.3 + + CREATE TABLE t1(x INT PRIMARY KEY, y, z); + CREATE TABLE t2(a,b,c,d,e,PRIMARY KEY(a,b))WITHOUT ROWID; + + UPDATE t2 SET (d,d,a)=(SELECT EXISTS(SELECT 1 IN(SELECT max( 1 IN(SELECT x ORDER BY 1)) OVER(PARTITION BY sum((SELECT y FROM t1 UNION SELECT x ORDER BY 1)))INTERSECT SELECT EXISTS(SELECT 1 FROM t1 UNION SELECT x ORDER BY 1) ORDER BY 1) ORDERa)|9 AS blob, 2, 3) FROM t1 WHERE x999 + ORDER BY t1.id; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 67 err 1 -1 99 no such table: main.t1 +stmt 99 ok +stmt 173 err 1 -1 297 no such table: t1 +stmt 297 err 1 -1 333 no such table: t2 +stmt 333 err 1 -1 425 no such table: t1 +==== 34.5 + + EXPLAIN QUERY PLAN + SELECT * + FROM t1 JOIN t2 USING(id) + WHERE t1.a=777 AND t2.id>999 + ORDER BY t1.id; +---- +stmt 0 err 1 -1 113 no such table: t1 +==== 35.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(c1 TEXT, c2 INTEGER, PRIMARY KEY(c1, c2)); + INSERT INTO t1(c1, c2) VALUES ('a', 1); + SELECT ('a', 1) IN (SELECT c1, c2 from t1); +---- +stmt 0 ok +stmt 27 ok +stmt 88 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 176 no such table: t1 +==== 35.1 + + SELECT (1, 'a') IN (SELECT c2, c1 from t1); +---- +stmt 0 err 1 -1 46 no such table: t1 +==== 36.0 + + DROP TABLE t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1),(2),(3); + SELECT (1,2,3,max(x)) IN () FROM t1; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 39 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 114 no such table: t1 +==== 36.1 + + SELECT (1,2,max(x),3) IN () FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 36.2 + + SELECT (max(x),1,23) IN () FROM t1; +---- +stmt 0 err 1 -1 38 no such table: t1 diff --git a/parser/testdata/rowvalue2.metadata.json b/parser/testdata/rowvalue2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalue2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalue2.test b/parser/testdata/rowvalue2.test new file mode 100644 index 0000000..4b5d478 --- /dev/null +++ b/parser/testdata/rowvalue2.test @@ -0,0 +1,130 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(0, 0, 0); + INSERT INTO t1 VALUES(0, 1, 1); + INSERT INTO t1 VALUES(1, 0, 2); + INSERT INTO t1 VALUES(1, 1, 3); + + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 164 no such table: t1 +stmt 164 err 1 -1 196 no such table: main.t1 +==== 1.1.1 + SELECT c FROM t1 WHERE (a, b) >= (1, 0) +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 1.1.2 + SELECT c FROM t1 WHERE (a, b) > (1, 0) +---- +stmt 0 err 1 -1 40 no such table: t1 +==== 2.0.1 + + CREATE TABLE t2(a INTEGER, b INTEGER, c INTEGER, d INTEGER); + CREATE INDEX i2 ON t2(a, b, c); +---- +stmt 0 ok +stmt 63 err 1 -1 97 no such table: main.t2 +==== 2.1 + + SELECT d FROM t2 WHERE (a, b) > (2, 2); +---- +stmt 0 err 1 -1 42 no such table: t2 +==== 2.2 + + SELECT d FROM t2 WHERE (a, b) >= (2, 2); +---- +stmt 0 err 1 -1 43 no such table: t2 +==== 2.3 + + SELECT d FROM t2 WHERE a=1 AND (b, c) >= (1, 2); +---- +stmt 0 err 1 -1 51 no such table: t2 +==== 2.4 + + SELECT d FROM t2 WHERE a=1 AND (b, c) > (1, 2); +---- +stmt 0 err 1 -1 50 no such table: t2 +==== 4.0 + + CREATE TABLE t4(a, b, c); + INSERT INTO t4 VALUES(NULL, NULL, NULL); + INSERT INTO t4 VALUES(NULL, NULL, 0); + INSERT INTO t4 VALUES(NULL, NULL, 1); + INSERT INTO t4 VALUES(NULL, 0, NULL); + INSERT INTO t4 VALUES(NULL, 0, 0); + INSERT INTO t4 VALUES(NULL, 0, 1); + INSERT INTO t4 VALUES(NULL, 1, NULL); + INSERT INTO t4 VALUES(NULL, 1, 0); + INSERT INTO t4 VALUES(NULL, 1, 1); + + INSERT INTO t4 VALUES( 0, NULL, NULL); + INSERT INTO t4 VALUES( 0, NULL, 0); + INSERT INTO t4 VALUES( 0, NULL, 1); + INSERT INTO t4 VALUES( 0, 0, NULL); + INSERT INTO t4 VALUES( 0, 0, 0); + INSERT INTO t4 VALUES( 0, 0, 1); + INSERT INTO t4 VALUES( 0, 1, NULL); + INSERT INTO t4 VALUES( 0, 1, 0); + INSERT INTO t4 VALUES( 0, 1, 1); + + INSERT INTO t4 VALUES( 1, NULL, NULL); + INSERT INTO t4 VALUES( 1, NULL, 0); + INSERT INTO t4 VALUES( 1, NULL, 1); + INSERT INTO t4 VALUES( 1, 0, NULL); + INSERT INTO t4 VALUES( 1, 0, 0); + INSERT INTO t4 VALUES( 1, 0, 1); + INSERT INTO t4 VALUES( 1, 1, NULL); + INSERT INTO t4 VALUES( 1, 1, 0); + INSERT INTO t4 VALUES( 1, 1, 1); +---- +stmt 0 ok +stmt 28 err 1 -1 71 no such table: t4 +stmt 71 err 1 -1 111 no such table: t4 +stmt 111 err 1 -1 151 no such table: t4 +stmt 151 err 1 -1 194 no such table: t4 +stmt 194 err 1 -1 234 no such table: t4 +stmt 234 err 1 -1 274 no such table: t4 +stmt 274 err 1 -1 317 no such table: t4 +stmt 317 err 1 -1 357 no such table: t4 +stmt 357 err 1 -1 397 no such table: t4 +stmt 397 err 1 -1 441 no such table: t4 +stmt 441 err 1 -1 481 no such table: t4 +stmt 481 err 1 -1 521 no such table: t4 +stmt 521 err 1 -1 564 no such table: t4 +stmt 564 err 1 -1 604 no such table: t4 +stmt 604 err 1 -1 644 no such table: t4 +stmt 644 err 1 -1 687 no such table: t4 +stmt 687 err 1 -1 727 no such table: t4 +stmt 727 err 1 -1 767 no such table: t4 +stmt 767 err 1 -1 811 no such table: t4 +stmt 811 err 1 -1 851 no such table: t4 +stmt 851 err 1 -1 891 no such table: t4 +stmt 891 err 1 -1 934 no such table: t4 +stmt 934 err 1 -1 974 no such table: t4 +stmt 974 err 1 -1 1014 no such table: t4 +stmt 1014 err 1 -1 1057 no such table: t4 +stmt 1057 err 1 -1 1097 no such table: t4 +stmt 1097 err 1 -1 1137 no such table: t4 +==== 5.0 + + CREATE TABLE r1(a TEXT, iB TEXT); + CREATE TABLE r2(x TEXT, zY INTEGER); + CREATE INDEX r1ab ON r1(a, iB); + + INSERT INTO r1 VALUES(35, 35); + INSERT INTO r2 VALUES(35, 36); + INSERT INTO r2 VALUES(35, 4); + INSERT INTO r2 VALUES(35, 35); +---- +stmt 0 ok +stmt 36 ok +stmt 75 err 1 -1 109 no such table: main.r1 +stmt 109 err 1 -1 143 no such table: r1 +stmt 143 err 1 -1 176 no such table: r2 +stmt 176 err 1 -1 208 no such table: r2 +stmt 208 err 1 -1 241 no such table: r2 diff --git a/parser/testdata/rowvalue3.metadata.json b/parser/testdata/rowvalue3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalue3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalue3.test b/parser/testdata/rowvalue3.test new file mode 100644 index 0000000..00f92ad --- /dev/null +++ b/parser/testdata/rowvalue3.test @@ -0,0 +1,133 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + CREATE INDEX i1 ON t1(a, b); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t1 VALUES(7, 8, 9); +---- +stmt 0 ok +stmt 28 err 1 -1 59 no such table: main.t1 +stmt 59 err 1 -1 93 no such table: t1 +stmt 93 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 161 no such table: t1 +==== 2.0 + + CREATE TABLE z1(x, y, z); + CREATE TABLE kk(a, b); + + INSERT INTO z1 VALUES('a', 'b', 'c'); + INSERT INTO z1 VALUES('d', 'e', 'f'); + INSERT INTO z1 VALUES('g', 'h', 'i'); + + -- INSERT INTO kk VALUES('y', 'y'); + INSERT INTO kk VALUES('d', 'e'); + -- INSERT INTO kk VALUES('x', 'x'); +---- +stmt 0 ok +stmt 28 ok +stmt 53 err 1 -1 94 no such table: z1 +stmt 94 err 1 -1 134 no such table: z1 +stmt 134 err 1 -1 174 no such table: z1 +stmt 174 err 1 -1 248 no such table: kk +==== rowvalue3-generated + + SELECT * FROM z1 WHERE x IN (SELECT a FROM kk) +---- +stmt 0 err 1 -1 52 no such table: z1 +==== rowvalue3-generated.dup1 + + SELECT * FROM z1 WHERE (x,y) IN (SELECT a, b FROM kk) +---- +stmt 0 err 1 -1 59 no such table: z1 +==== rowvalue3-generated.dup2 + + SELECT * FROM z1 WHERE (x, +y) IN (SELECT a, b FROM kk) +---- +stmt 0 err 1 -1 61 no such table: z1 +==== rowvalue3-generated.dup3 + + SELECT * FROM z1 WHERE (x, +y) IN (SELECT a, b||'x' FROM kk) +---- +stmt 0 err 1 -1 66 no such table: z1 +==== rowvalue3-generated.dup4 + + SELECT * FROM z1 WHERE (+x, y) IN (SELECT a, b FROM kk) +---- +stmt 0 err 1 -1 61 no such table: z1 +==== 3.0 + + CREATE TABLE c1(a, b, c, d); + INSERT INTO c1(rowid, a, b) VALUES(1, NULL, 1); + INSERT INTO c1(rowid, a, b) VALUES(2, 2, NULL); + INSERT INTO c1(rowid, a, b) VALUES(3, 2, 2); + INSERT INTO c1(rowid, a, b) VALUES(4, 3, 3); + + INSERT INTO c1(rowid, a, b, c, d) VALUES(101, 'a', 'b', 1, 1); + INSERT INTO c1(rowid, a, b, c, d) VALUES(102, 'a', 'b', 1, 2); + INSERT INTO c1(rowid, a, b, c, d) VALUES(103, 'a', 'b', 1, 3); + INSERT INTO c1(rowid, a, b, c, d) VALUES(104, 'a', 'b', 2, 1); + INSERT INTO c1(rowid, a, b, c, d) VALUES(105, 'a', 'b', 2, 2); + INSERT INTO c1(rowid, a, b, c, d) VALUES(106, 'a', 'b', 2, 3); + INSERT INTO c1(rowid, a, b, c, d) VALUES(107, 'a', 'b', 3, 1); + INSERT INTO c1(rowid, a, b, c, d) VALUES(108, 'a', 'b', 3, 2); + INSERT INTO c1(rowid, a, b, c, d) VALUES(109, 'a', 'b', 3, 3); +---- +stmt 0 ok +stmt 31 err 1 -1 83 no such table: c1 +stmt 83 err 1 -1 135 no such table: c1 +stmt 135 err 1 -1 184 no such table: c1 +stmt 184 err 1 -1 233 no such table: c1 +stmt 233 err 1 -1 299 no such table: c1 +stmt 299 err 1 -1 364 no such table: c1 +stmt 364 err 1 -1 429 no such table: c1 +stmt 429 err 1 -1 494 no such table: c1 +stmt 494 err 1 -1 559 no such table: c1 +stmt 559 err 1 -1 624 no such table: c1 +stmt 624 err 1 -1 689 no such table: c1 +stmt 689 err 1 -1 754 no such table: c1 +stmt 754 err 1 -1 819 no such table: c1 +==== 4.0 + + CREATE TABLE hh(a, b, c); + + INSERT INTO hh VALUES('a', 'a', 1); + INSERT INTO hh VALUES('a', 'b', 2); + INSERT INTO hh VALUES('b', 'a', 3); + INSERT INTO hh VALUES('b', 'b', 4); + + CREATE TABLE k1(x, y); + INSERT INTO k1 VALUES('a', 'a'); + INSERT INTO k1 VALUES('b', 'b'); + INSERT INTO k1 VALUES('a', 'b'); + INSERT INTO k1 VALUES('b', 'a'); +---- +stmt 0 ok +stmt 28 err 1 -1 67 no such table: hh +stmt 67 err 1 -1 105 no such table: hh +stmt 105 err 1 -1 143 no such table: hh +stmt 143 err 1 -1 181 no such table: hh +stmt 181 ok +stmt 207 err 1 -1 242 no such table: k1 +stmt 242 err 1 -1 277 no such table: k1 +stmt 277 err 1 -1 312 no such table: k1 +stmt 312 err 1 -1 347 no such table: k1 +==== 5.0 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE T1(a TEXT); + INSERT INTO T1(a) VALUES ('aaa'); + CREATE TABLE T2(a TEXT PRIMARY KEY,n INT); + INSERT INTO T2(a, n) VALUES('aaa',0); + SELECT * FROM T2 + WHERE (a,n) IN (SELECT T1.a, V.n + FROM T1, (SELECT * FROM (SELECT 0 n) T3) V); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 err 1 -1 117 no such table: T1 +stmt 117 ok +stmt 162 err 1 -1 202 no such table: T2 +stmt 202 err 1 -1 323 no such table: T2 diff --git a/parser/testdata/rowvalue4.metadata.json b/parser/testdata/rowvalue4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalue4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalue4.test b/parser/testdata/rowvalue4.test new file mode 100644 index 0000000..3ff1e7d --- /dev/null +++ b/parser/testdata/rowvalue4.test @@ -0,0 +1,202 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + CREATE INDEX t1bac ON t1(b, a, c); +---- +stmt 0 ok +stmt 28 err 1 -1 65 no such table: main.t1 +==== 2.0 + + CREATE TABLE t2(a, b, c, d); + INSERT INTO t2 VALUES(1, 1, 1, 1); + INSERT INTO t2 VALUES(1, 1, 2, 2); + INSERT INTO t2 VALUES(1, 1, 3, 3); + INSERT INTO t2 VALUES(1, 2, 1, 4); + INSERT INTO t2 VALUES(1, 2, 2, 5); + INSERT INTO t2 VALUES(1, 2, 3, 6); + INSERT INTO t2 VALUES(1, 3, 1, 7); + INSERT INTO t2 VALUES(1, 3, 2, 8); + INSERT INTO t2 VALUES(1, 3, 3, 9); + + INSERT INTO t2 VALUES(2, 1, 1, 10); + INSERT INTO t2 VALUES(2, 1, 2, 11); + INSERT INTO t2 VALUES(2, 1, 3, 12); + INSERT INTO t2 VALUES(2, 2, 1, 13); + INSERT INTO t2 VALUES(2, 2, 2, 14); + INSERT INTO t2 VALUES(2, 2, 3, 15); + INSERT INTO t2 VALUES(2, 3, 1, 16); + INSERT INTO t2 VALUES(2, 3, 2, 17); + INSERT INTO t2 VALUES(2, 3, 3, 18); + + INSERT INTO t2 VALUES(3, 1, 1, 19); + INSERT INTO t2 VALUES(3, 1, 2, 20); + INSERT INTO t2 VALUES(3, 1, 3, 21); + INSERT INTO t2 VALUES(3, 2, 1, 22); + INSERT INTO t2 VALUES(3, 2, 2, 23); + INSERT INTO t2 VALUES(3, 2, 3, 24); + INSERT INTO t2 VALUES(3, 3, 1, 25); + INSERT INTO t2 VALUES(3, 3, 2, 26); + INSERT INTO t2 VALUES(3, 3, 3, 27); +---- +stmt 0 ok +stmt 31 err 1 -1 70 no such table: t2 +stmt 70 err 1 -1 109 no such table: t2 +stmt 109 err 1 -1 148 no such table: t2 +stmt 148 err 1 -1 187 no such table: t2 +stmt 187 err 1 -1 226 no such table: t2 +stmt 226 err 1 -1 265 no such table: t2 +stmt 265 err 1 -1 304 no such table: t2 +stmt 304 err 1 -1 343 no such table: t2 +stmt 343 err 1 -1 382 no such table: t2 +stmt 382 err 1 -1 423 no such table: t2 +stmt 423 err 1 -1 463 no such table: t2 +stmt 463 err 1 -1 503 no such table: t2 +stmt 503 err 1 -1 543 no such table: t2 +stmt 543 err 1 -1 583 no such table: t2 +stmt 583 err 1 -1 623 no such table: t2 +stmt 623 err 1 -1 663 no such table: t2 +stmt 663 err 1 -1 703 no such table: t2 +stmt 703 err 1 -1 743 no such table: t2 +stmt 743 err 1 -1 784 no such table: t2 +stmt 784 err 1 -1 824 no such table: t2 +stmt 824 err 1 -1 864 no such table: t2 +stmt 864 err 1 -1 904 no such table: t2 +stmt 904 err 1 -1 944 no such table: t2 +stmt 944 err 1 -1 984 no such table: t2 +stmt 984 err 1 -1 1024 no such table: t2 +stmt 1024 err 1 -1 1064 no such table: t2 +stmt 1064 err 1 -1 1104 no such table: t2 +==== 3.0 + + CREATE TABLE c1(a, b, c, d); + INSERT INTO c1(a, b) VALUES(1, 'a'); + INSERT INTO c1(a, b) VALUES(1, 'b'); + INSERT INTO c1(a, b) VALUES(1, 'c'); + INSERT INTO c1(a, b) VALUES(1, 'd'); + INSERT INTO c1(a, b) VALUES(1, 'e'); + INSERT INTO c1(a, b) VALUES(1, 'f'); + INSERT INTO c1(a, b) VALUES(1, 'g'); + INSERT INTO c1(a, b) VALUES(1, 'h'); + INSERT INTO c1(a, b) VALUES(1, 'i'); + INSERT INTO c1(a, b) VALUES(1, 'j'); + INSERT INTO c1(a, b) VALUES(1, 'k'); + INSERT INTO c1(a, b) VALUES(1, 'l'); + INSERT INTO c1(a, b) VALUES(1, 'm'); + INSERT INTO c1(a, b) VALUES(1, 'n'); + INSERT INTO c1(a, b) VALUES(1, 'o'); + INSERT INTO c1(a, b) VALUES(1, 'p'); + INSERT INTO c1(a, b) VALUES(2, 'a'); + INSERT INTO c1(a, b) VALUES(2, 'b'); + INSERT INTO c1(a, b) VALUES(2, 'c'); + INSERT INTO c1(a, b) VALUES(2, 'd'); + INSERT INTO c1(a, b) VALUES(2, 'e'); + INSERT INTO c1(a, b) VALUES(2, 'f'); + INSERT INTO c1(a, b) VALUES(2, 'g'); + INSERT INTO c1(a, b) VALUES(2, 'h'); + + INSERT INTO c1(c, d) SELECT a, b FROM c1; + + CREATE INDEX c1ab ON c1(a, b); + CREATE INDEX c1cd ON c1(c, d); + ANALYZE; +---- +stmt 0 ok +stmt 33 err 1 -1 74 no such table: c1 +stmt 74 err 1 -1 115 no such table: c1 +stmt 115 err 1 -1 156 no such table: c1 +stmt 156 err 1 -1 197 no such table: c1 +stmt 197 err 1 -1 238 no such table: c1 +stmt 238 err 1 -1 279 no such table: c1 +stmt 279 err 1 -1 320 no such table: c1 +stmt 320 err 1 -1 361 no such table: c1 +stmt 361 err 1 -1 402 no such table: c1 +stmt 402 err 1 -1 443 no such table: c1 +stmt 443 err 1 -1 484 no such table: c1 +stmt 484 err 1 -1 525 no such table: c1 +stmt 525 err 1 -1 566 no such table: c1 +stmt 566 err 1 -1 607 no such table: c1 +stmt 607 err 1 -1 648 no such table: c1 +stmt 648 err 1 -1 689 no such table: c1 +stmt 689 err 1 -1 730 no such table: c1 +stmt 730 err 1 -1 771 no such table: c1 +stmt 771 err 1 -1 812 no such table: c1 +stmt 812 err 1 -1 853 no such table: c1 +stmt 853 err 1 -1 894 no such table: c1 +stmt 894 err 1 -1 935 no such table: c1 +stmt 935 err 1 -1 976 no such table: c1 +stmt 976 err 1 -1 1017 no such table: c1 +stmt 1017 err 1 -1 1064 no such table: c1 +stmt 1064 err 1 -1 1100 no such table: main.c1 +stmt 1100 err 1 -1 1135 no such table: main.c1 +stmt 1135 ok +==== 5.0 + + CREATE TABLE d1(x, y); + CREATE TABLE d2(a, b, c); + CREATE INDEX d2ab ON d2(a, b); + CREATE INDEX d2c ON d2(c); + + WITH i(i) AS ( + VALUES(1) UNION ALL SELECT i+1 FROM i WHERE i<1000 + ) + INSERT INTO d2 SELECT i/100, i%100, i/100 FROM i; + ANALYZE; +---- +stmt 0 ok +stmt 25 ok +stmt 53 err 1 -1 86 no such table: main.d2 +stmt 86 err 1 -1 115 no such table: main.d2 +stmt 115 err 1 -1 244 no such table: d2 +stmt 244 ok +==== 6.0 + + CREATE TABLE e1(a, b, c, d, e); + CREATE INDEX e1ab ON e1(a, b); + CREATE INDEX e1cde ON e1(c, d, e); +---- +stmt 0 ok +stmt 34 err 1 -1 67 no such table: main.e1 +stmt 67 err 1 -1 104 no such table: main.e1 +==== 7.1 + + CREATE TABLE f1(a, b, c); + CREATE INDEX f1ab ON f1(a, b); +---- +stmt 0 ok +stmt 28 err 1 -1 61 no such table: main.f1 +==== 7.2 + + SELECT (a COLLATE nocase, b) IN (SELECT a, b FROM f1) FROM f1; +---- +stmt 0 err 1 -1 65 no such table: f1 +==== 7.3 + + SELECT (a COLLATE nose, b) IN (SELECT a, b FROM f1) FROM f1; +---- +stmt 0 err 1 -1 63 no such table: f1 +==== 7.4 + + SELECT * FROM f1 WHERE (?, ? COLLATE nose) > (a, b); +---- +stmt 0 err 1 -1 55 no such table: f1 +==== 8.1 + + CREATE TABLE c1(x, y); + CREATE TABLE c2(a, b, c); + CREATE INDEX c2ab ON c2(a, b); + CREATE INDEX c2c ON c2(c); + + CREATE TABLE c3(d); +---- +stmt 0 ok +stmt 25 ok +stmt 53 err 1 -1 86 no such table: main.c2 +stmt 86 err 1 -1 115 no such table: main.c2 +stmt 115 ok +==== 8.2 + + SELECT * FROM c2 CROSS JOIN c3 WHERE + ( (a, b) == (SELECT x, y FROM c1) AND c3.d = c ) OR + ( c == (SELECT x, y FROM c1) AND c3.d = c ) +---- +stmt 0 err 1 -1 145 no such table: c2 diff --git a/parser/testdata/rowvalue5.metadata.json b/parser/testdata/rowvalue5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalue5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalue5.test b/parser/testdata/rowvalue5.test new file mode 100644 index 0000000..ee28bf6 --- /dev/null +++ b/parser/testdata/rowvalue5.test @@ -0,0 +1,5 @@ +==== 1.0 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); +---- +stmt 0 ok diff --git a/parser/testdata/rowvalue6.metadata.json b/parser/testdata/rowvalue6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalue6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalue6.test b/parser/testdata/rowvalue6.test new file mode 100644 index 0000000..5f24033 --- /dev/null +++ b/parser/testdata/rowvalue6.test @@ -0,0 +1,27 @@ +==== 1.1 + + CREATE TABLE t1(a,b,c); + CREATE INDEX t1x1 ON t1(a,b); + INSERT INTO t1 VALUES(1,NULL,200); + + CREATE TABLE t2(x,y,z); + INSERT INTO t2 VALUES(1,NULL,55); + + SELECT c FROM t1 WHERE (a,b) IN (SELECT x,y FROM t2 WHERE z==55); +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: main.t1 +stmt 58 err 1 -1 95 no such table: t1 +stmt 95 ok +stmt 122 err 1 -1 158 no such table: t2 +stmt 158 err 1 -1 227 no such table: t1 +==== 1.2 + + INSERT INTO t1 VALUES(2,3,400); + INSERT INTO t2 VALUES(2,3,55); + + SELECT c FROM t1 WHERE (a,b) IN (SELECT x,y FROM t2 WHERE z==55); +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 67 no such table: t2 +stmt 67 err 1 -1 138 no such table: t1 diff --git a/parser/testdata/rowvalue7.metadata.json b/parser/testdata/rowvalue7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalue7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalue7.test b/parser/testdata/rowvalue7.test new file mode 100644 index 0000000..bf3d79d --- /dev/null +++ b/parser/testdata/rowvalue7.test @@ -0,0 +1,67 @@ +==== 1.1 + + CREATE TABLE t1(a,b,c,d); + CREATE INDEX t1x ON t1(a,b); + INSERT INTO t1(a,b,c,d) VALUES(1,2,0,0),(3,4,0,0),(5,6,0,0); + CREATE TABLE t2(w,x,y,z); + CREATE INDEX t2x ON t2(w,x); + INSERT INTO t2(w,x,y,z) VALUES(1,2,11,22),(8,9,88,99),(3,5,33,55),(5,6,55,66); + + SELECT *,'|' FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 28 err 1 -1 59 no such table: main.t1 +stmt 59 err 1 -1 122 no such table: t1 +stmt 122 ok +stmt 150 err 1 -1 181 no such table: main.t2 +stmt 181 err 1 -1 262 no such table: t2 +stmt 262 err 1 -1 298 no such table: t1 +==== 1.2 + + UPDATE t1 SET (c,d) = (SELECT y,z FROM t2 WHERE (w,x)=(a,b)); + SELECT *,'|' FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 99 no such table: t1 +==== 1.3 + + UPDATE t1 SET (c,d) = (SELECT y,z FROM t2 WHERE w=a); + SELECT *,'|' FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 91 no such table: t1 +==== 1.4 + + UPDATE t1 SET (c) = 99 WHERE a=3; + SELECT *,'|' FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 71 no such table: t1 +==== 1.5 + + UPDATE t1 SET b = 8, (c,d) = (SELECT 123,456) WHERE a=3; + SELECT *,'|' FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 59 no such table: t1 +stmt 59 err 1 -1 94 no such table: t1 +==== 2.1 + + UPDATE t1 SET (c,d) = (SELECT x,y,z FROM t2 WHERE w=a); +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 2.2 + + UPDATE t1 SET (b,c,d) = (SELECT x,y FROM t2 WHERE w=a); +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 3.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + UPDATE t1 SET (a,a,a,b)=(SELECT 99,100); +---- +stmt 0 ok +stmt 27 ok +stmt 51 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 124 no such table: t1 diff --git a/parser/testdata/rowvalue8.metadata.json b/parser/testdata/rowvalue8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalue8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalue8.test b/parser/testdata/rowvalue8.test new file mode 100644 index 0000000..660458f --- /dev/null +++ b/parser/testdata/rowvalue8.test @@ -0,0 +1,48 @@ +==== 1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c,d); + INSERT INTO t1(a,b,c,d) VALUES + (1,1,2,3), + (2,2,3,4), + (3,1,2,4), + (4,2,3,5), + (5,3,4,6), + (6,4,5,9); + SELECT a, CASE (b,c) WHEN (1,2) THEN 'aleph' + WHEN (2,3) THEN 'bet' + WHEN (3,4) THEN 'gimel' + ELSE '-' END, + '|' + FROM t1 + ORDER BY a; +---- +stmt 0 ok +stmt 48 err 1 -1 177 no such table: t1 +stmt 177 err 1 -1 393 no such table: t1 +==== 1.2 + + SELECT a, CASE (b,c,d) WHEN (1,2,3) THEN 'aleph' + WHEN (2,3,4) THEN 'bet' + WHEN (3,4,6) THEN 'gimel' + ELSE '-' END, + '|' + FROM t1 + ORDER BY a; +---- +stmt 0 err 1 -1 230 no such table: t1 +==== 2.1 + + CREATE TABLE t2(x INTEGER PRIMARY KEY, y); + INSERT INTO t2(x,y) VALUES(1,6),(2,5),(3,4),(4,3),(5,2),(6,1); + SELECT x, CASE (SELECT b,c FROM t1 WHERE a=y) + WHEN (1,2) THEN 'aleph' + WHEN (2,3) THEN 'bet' + WHEN (3,4) THEN 'gimel' + ELSE '-' END, + '|' + FROM t2 + ORDER BY +x; +---- +stmt 0 ok +stmt 45 err 1 -1 110 no such table: t2 +stmt 110 err 1 -1 331 no such table: t2 diff --git a/parser/testdata/rowvalue9.metadata.json b/parser/testdata/rowvalue9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalue9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalue9.test b/parser/testdata/rowvalue9.test new file mode 100644 index 0000000..76ff054 --- /dev/null +++ b/parser/testdata/rowvalue9.test @@ -0,0 +1,364 @@ +==== 1.0.1 + + CREATE TABLE a1(c, b INTEGER, a TEXT, PRIMARY KEY(a, b)); + + INSERT INTO a1 (rowid, c, b, a) VALUES(3, '0x03', 1, 1); + INSERT INTO a1 (rowid, c, b, a) VALUES(14, '0x0E', 2, 2); + INSERT INTO a1 (rowid, c, b, a) VALUES(15, '0x0F', 3, 3); + INSERT INTO a1 (rowid, c, b, a) VALUES(92, '0x5C', 4, 4); + + CREATE TABLE a2(x BLOB, y BLOB); + INSERT INTO a2(x, y) VALUES(1, 1); + INSERT INTO a2(x, y) VALUES(2, '2'); + INSERT INTO a2(x, y) VALUES('3', 3); + INSERT INTO a2(x, y) VALUES('4', '4'); +---- +stmt 0 ok +stmt 60 err 1 -1 122 no such table: a1 +stmt 122 err 1 -1 182 no such table: a1 +stmt 182 err 1 -1 242 no such table: a1 +stmt 242 err 1 -1 302 no such table: a1 +stmt 302 ok +stmt 338 err 1 -1 375 no such table: a2 +stmt 375 err 1 -1 414 no such table: a2 +stmt 414 err 1 -1 453 no such table: a2 +stmt 453 err 1 -1 494 no such table: a2 +==== 1.0.2 + + SELECT x, typeof(x), y, typeof(y) FROM a2 ORDER BY rowid +---- +stmt 0 err 1 -1 61 no such table: a2 +==== 1.1.1 + + SELECT (SELECT rowid FROM a1 WHERE a=x AND b=y) FROM a2 +---- +stmt 0 err 1 -1 59 no such table: a2 +==== 1.1.2 + + SELECT (SELECT rowid FROM a1 WHERE (a, b) = (x, y)) FROM a2 +---- +stmt 0 err 1 -1 63 no such table: a2 +==== 1.2.3 + + SELECT a1.rowid FROM a1, a2 WHERE a=x AND b=y; +---- +stmt 0 err 1 -1 49 no such table: a1 +==== 1.2.4 + + SELECT a1.rowid FROM a1, a2 WHERE (a, b) = (x, y) +---- +stmt 0 err 1 -1 53 no such table: a1 +==== 1.3.1 + + SELECT a1.rowid FROM a1, a2 WHERE coalesce(NULL,x)=a AND coalesce(NULL,y)=b +---- +stmt 0 err 1 -1 79 no such table: a1 +==== 1.3.2 + + SELECT a1.rowid FROM a1, a2 + WHERE (coalesce(NULL,x), coalesce(NULL,y)) = (a, b) +---- +stmt 0 err 1 -1 86 no such table: a1 +==== 1.4.1 + + SELECT a1.rowid FROM a1, a2 WHERE +x=a AND +y=b +---- +stmt 0 err 1 -1 51 no such table: a1 +==== 1.4.2 + + SELECT a1.rowid FROM a1, a2 WHERE (+x, +y) = (a, b) +---- +stmt 0 err 1 -1 55 no such table: a1 +==== 1.5.1 + + SELECT (SELECT rowid FROM a1 WHERE a=+x AND b=+y) FROM a2 +---- +stmt 0 err 1 -1 61 no such table: a2 +==== 1.5.2 + + SELECT (SELECT rowid FROM a1 WHERE (a, b) = (+x, +y)) FROM a2 +---- +stmt 0 err 1 -1 65 no such table: a2 +==== 1.5.3 + + SELECT (SELECT rowid FROM a1 WHERE (+x, +y) = (a, b)) FROM a2 +---- +stmt 0 err 1 -1 65 no such table: a2 +==== 1.6.1 + + SELECT a1.rowid FROM a1 WHERE (a, b) IN (SELECT x, y FROM a2) +---- +stmt 0 err 1 -1 65 no such table: a1 +==== 1.6.2 + + SELECT a1.rowid FROM a1, a2 WHERE EXISTS ( + SELECT 1 FROM a1 WHERE a=x AND b=y + ) +---- +stmt 0 err 1 -1 89 no such table: a1 +==== 2.1 + + CREATE TABLE b1(a TEXT); + CREATE TABLE b2(x BLOB); + INSERT INTO b1 VALUES(1); + INSERT INTO b2 VALUES(1); +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 82 no such table: b1 +stmt 82 err 1 -1 110 no such table: b2 +==== 2.2 + SELECT * FROM b1, b2 WHERE a=x; +---- +stmt 0 err 1 -1 32 no such table: b1 +==== 2.3 + SELECT * FROM b1 WHERE a IN (SELECT x FROM b2) +---- +stmt 0 err 1 -1 48 no such table: b1 +==== 2.4 + CREATE UNIQUE INDEX b1a ON b1(a); +---- +stmt 0 err 1 -1 34 no such table: main.b1 +==== 2.5 + SELECT * FROM b1 WHERE a IN (SELECT x FROM b2) +---- +stmt 0 err 1 -1 48 no such table: b1 +==== 3.1 + + CREATE TABLE c1(a INTEGER, b TEXT); + INSERT INTO c1 VALUES(1, 1); + CREATE TABLE c2(x BLOB, y BLOB); + INSERT INTO c2 VALUES(1, 1); +---- +stmt 0 ok +stmt 38 err 1 -1 69 no such table: c1 +stmt 69 ok +stmt 104 err 1 -1 135 no such table: c2 +==== 3.2 + + SELECT * FROM c1 WHERE (a, b) IN (SELECT x, y FROM c2) +---- +stmt 0 err 1 -1 58 no such table: c1 +==== 3.3 + + CREATE UNIQUE INDEX c1ab ON c1(a, b); + SELECT * FROM c1 WHERE (a, b) IN (SELECT x, y FROM c2) +---- +stmt 0 err 1 -1 40 no such table: main.c1 +stmt 40 err 1 -1 98 no such table: c1 +==== 3.4 + + SELECT * FROM c1 WHERE (a, +b) IN (SELECT x, y FROM c2) +---- +stmt 0 err 1 -1 59 no such table: c1 +==== 3.5 + + SELECT c1.rowid FROM c1 WHERE b = (SELECT y FROM c2); +---- +stmt 0 err 1 -1 56 no such table: c1 +==== 3.6 + + SELECT c1.rowid FROM c1 WHERE (a, b) = (SELECT x, y FROM c2); +---- +stmt 0 err 1 -1 64 no such table: c1 +==== 4.0 + + CREATE TABLE d1(a TEXT, b INTEGER, c NUMERIC); + CREATE TABLE d2(x BLOB, y BLOB); + + INSERT INTO d1 VALUES(1, 1, 1); + INSERT INTO d1 VALUES(2, 2, 2); + INSERT INTO d1 VALUES(3, 3, 3); + INSERT INTO d1 VALUES(4, 4, 4); + + INSERT INTO d2 VALUES (1, 1); + INSERT INTO d2 VALUES (2, '2'); + INSERT INTO d2 VALUES ('3', 3); + INSERT INTO d2 VALUES ('4', '4'); +---- +stmt 0 ok +stmt 49 ok +stmt 84 err 1 -1 119 no such table: d1 +stmt 119 err 1 -1 153 no such table: d1 +stmt 153 err 1 -1 187 no such table: d1 +stmt 187 err 1 -1 221 no such table: d1 +stmt 221 err 1 -1 254 no such table: d2 +stmt 254 err 1 -1 288 no such table: d2 +stmt 288 err 1 -1 322 no such table: d2 +stmt 322 err 1 -1 358 no such table: d2 +==== rowvalue9-generated + + SELECT rowid FROM d1 WHERE (a, c) IN (SELECT x, y FROM d2); +---- +stmt 0 err 1 -1 64 no such table: d1 +==== rowvalue9-generated.dup1 + + SELECT rowid FROM d1 WHERE (c, a) IN (SELECT x, y FROM d2); +---- +stmt 0 err 1 -1 64 no such table: d1 +==== rowvalue9-generated.dup2 + + SELECT rowid FROM d1 WHERE (+c, a) IN (SELECT x, y FROM d2); +---- +stmt 0 err 1 -1 65 no such table: d1 +==== rowvalue9-generated.dup3 + + SELECT rowid FROM d1 WHERE (c, a) = ( + SELECT x, y FROM d2 WHERE d2.rowid=d1.rowid + ); +---- +stmt 0 err 1 -1 99 no such table: d1 +==== rowvalue9-generated.dup4 + + SELECT d1.rowid FROM d1, d2 WHERE a = y; +---- +stmt 0 err 1 -1 45 no such table: d1 +==== rowvalue9-generated.dup5 + + SELECT d1.rowid FROM d1 WHERE a = ( + SELECT y FROM d2 where d2.rowid=d1.rowid + ); +---- +stmt 0 err 1 -1 94 no such table: d1 +==== 5.0 + + CREATE TABLE e1(a TEXT, c NUMERIC); + CREATE TABLE e2(x BLOB, y BLOB); + + INSERT INTO e1 VALUES(2, 2); + + INSERT INTO e2 VALUES ('2', 2); + INSERT INTO e2 VALUES ('2', '2'); + INSERT INTO e2 VALUES ('2', '2.0'); + + CREATE INDEX e1c ON e1(c); +---- +stmt 0 ok +stmt 38 ok +stmt 73 err 1 -1 105 no such table: e1 +stmt 105 err 1 -1 140 no such table: e2 +stmt 140 err 1 -1 176 no such table: e2 +stmt 176 err 1 -1 214 no such table: e2 +stmt 214 err 1 -1 244 no such table: main.e1 +==== 5.1 + + SELECT rowid FROM e1 WHERE (a, c) IN (SELECT x, y FROM e2); +---- +stmt 0 err 1 -1 62 no such table: e1 +==== 5.2 + + SELECT rowid FROM e2 WHERE rowid IN (SELECT +c FROM e1); +---- +stmt 0 err 1 -1 59 no such table: e2 +==== 5.3 + + SELECT rowid FROM e2 WHERE rowid IN (SELECT 0+c FROM e1); +---- +stmt 0 err 1 -1 60 no such table: e2 +==== 6.0 + + CREATE TABLE f1(a, b); + CREATE TABLE f2(c, d); + CREATE TABLE f3(e, f); +---- +stmt 0 ok +stmt 25 ok +stmt 50 ok +==== 6.1 + + SELECT * FROM f3 WHERE (e, f) IN ( + SELECT a, b FROM f1 UNION ALL SELECT c, d FROM f2 + ); +---- +stmt 0 err 1 -1 96 no such table: f3 +==== 6.2 + + CREATE INDEX f3e ON f3(e); + SELECT * FROM f3 WHERE (e, f) IN ( + SELECT a, b FROM f1 UNION ALL SELECT c, d FROM f2 + ); +---- +stmt 0 err 1 -1 29 no such table: main.f3 +stmt 29 err 1 -1 125 no such table: f3 +==== 7.0 + + CREATE TABLE g1(a, b); + INSERT INTO g1 VALUES + (1, 1), (1, 2), (1, 3), (1, 'i'), (1, 'j'), + (1, 6), (1, 7), (1, 8), (1, 9), (1, 10), + (1, 4), (1, 5); + + CREATE TABLE g2(x, y); + CREATE INDEX g2x ON g2(x); + + INSERT INTO g2 VALUES(1, 4); + INSERT INTO g2 VALUES(1, 5); +---- +stmt 0 ok +stmt 25 err 1 -1 169 no such table: g1 +stmt 169 ok +stmt 195 err 1 -1 224 no such table: main.g2 +stmt 224 err 1 -1 256 no such table: g2 +stmt 256 err 1 -1 287 no such table: g2 +==== 7.1 + + SELECT * FROM g2 WHERE (x, y) IN ( + SELECT a, b FROM g1 ORDER BY +a, +b LIMIT 10 + ); +---- +stmt 0 err 1 -1 91 no such table: g2 +==== 7.2 + + SELECT * FROM g2 WHERE (x, y) IN ( + SELECT a, b FROM g1 ORDER BY a, b LIMIT 10 + ); +---- +stmt 0 err 1 -1 89 no such table: g2 +==== 7.3 + + SELECT * FROM g2 WHERE (x, y) IN ( + SELECT a, b FROM g1 ORDER BY 1, 2 LIMIT 10 + ); +---- +stmt 0 err 1 -1 89 no such table: g2 +==== 8.1 + + CREATE TABLE t1(a ,b FLOAT); + CREATE INDEX t1x1 ON t1(a,b,a,a,a,a,a,a,a,a,a,b); +---- +stmt 0 ok +stmt 31 err 1 -1 83 no such table: main.t1 +==== 8.2 + + SELECT a FROM t1 NATURAL JOIN t1 WHERE (a,b)> (SELECT 2 IN (SELECT 2,2), 2); +---- +stmt 0 err 1 -1 79 no such table: t1 +==== 9.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 1), (1, 2), (2, 2), (2, 3), (3, 3), (3, 4), (4, 4); +---- +stmt 0 ok +stmt 25 err 1 -1 104 no such table: t1 +==== 9.1 + + SELECT * FROM t1 WHERE (a, b) IN ( (3, 3), (2, 2) ); +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 9.2 + + CREATE INDEX i1 ON t1(a); +---- +stmt 0 err 1 -1 28 no such table: main.t1 +==== 9.4 + + SELECT * FROM t1 WHERE (a, b) IN ( (3, 3), (2, 2) ); +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 9.5 + + CREATE INDEX i2 ON t1(b, a); + SELECT * FROM t1 WHERE (a, b) IN ( (3, 3), (2, 2) ); +---- +stmt 0 err 1 -1 31 no such table: main.t1 +stmt 31 err 1 -1 86 no such table: t1 diff --git a/parser/testdata/rowvalueA.metadata.json b/parser/testdata/rowvalueA.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvalueA.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvalueA.test b/parser/testdata/rowvalueA.test new file mode 100644 index 0000000..e9a2a33 --- /dev/null +++ b/parser/testdata/rowvalueA.test @@ -0,0 +1,135 @@ +==== 1.0 + + SELECT (1, 2) IN ( (3, 4), (5, 6), (1, 3) ); +---- +stmt 0 ok +==== 1.1 + + SELECT (1, 2) IN ( (3, 4), (5, 6), (1, 2) ); +---- +stmt 0 ok +==== 1.2 + + SELECT (1, 2) IN ( (3, 2) ); +---- +stmt 0 ok +==== 1.3 + + SELECT (1, 2) IN ( (1, 2) ); +---- +stmt 0 ok +==== 1.4 + + SELECT (1, 2) IN ( ); +---- +stmt 0 ok +==== 1.5 + + SELECT (1, 2) NOT IN ( ); +---- +stmt 0 ok +==== 2.0 + + SELECT (1, 2) IN ( (1, 2), (3, 4, 5), (5, 6) ) +---- +stmt 0 err 1 -1 50 IN(...) element has 3 terms - expected 2 +==== 2.1 + + SELECT (1, 2) IN ( (1, 2), 4, (5, 6) ) +---- +stmt 0 err 1 -1 42 IN(...) element has 1 term - expected 2 +==== 2.2 + + SELECT (1, 2, 3) IN ( (1, 2), (3, 4), (5, 6) ) +---- +stmt 0 err 1 -1 50 IN(...) element has 2 terms - expected 3 +==== 2.3 + + SELECT 2 IN ( (1, 2), (3, 4), (5, 6) ) +---- +stmt 0 err 1 -1 42 row value misused +==== 3.0 + + CREATE TABLE x2 (x, y); + INSERT INTO x2 VALUES (1234, 'abc'); + + CREATE TABLE x1 (a, b PRIMARY KEY COLLATE NOCASE) WITHOUT ROWID; + INSERT INTO x1 VALUES (1234, 'ABCD'); +---- +stmt 0 ok +stmt 26 err 1 -1 65 no such table: x2 +stmt 65 ok +stmt 133 err 1 -1 173 no such table: x1 +==== 3.1 + + SELECT * FROM x2 CROSS JOIN x1 WHERE (1234, x2.y) > (x1.a, x1.b); +---- +stmt 0 err 1 -1 68 no such table: x2 +==== 3.2 + + CREATE INDEX x1a ON x1(a); +---- +stmt 0 err 1 -1 29 no such table: main.x1 +==== 3.3 + + SELECT * FROM x2 CROSS JOIN x1 WHERE (1234, x2.y) > (x1.a, x1.b); +---- +stmt 0 err 1 -1 68 no such table: x2 +==== 4.0 + + CREATE TABLE t1 (a PRIMARY KEY, b COLLATE NOCASE) WITHOUT ROWID; + INSERT INTO t1 VALUES ('BBB', 'a'); +---- +stmt 0 ok +stmt 67 err 1 -1 105 no such table: t1 +==== 4.1 + + SELECT * FROM t1 WHERE (t1.a, t1.b) <= ('BBB', 'CCC'); +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 4.2 + + DROP TABLE t1; + CREATE TABLE t0 (c0); + INSERT INTO t0 VALUES ('True'); + + CREATE TABLE t1 (c0 COLLATE NOCASE, c1 PRIMARY KEY) WITHOUT ROWID; + INSERT INTO t1 VALUES ('a', 1); + INSERT INTO t1 VALUES ('a', 'True'); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 41 err 1 -1 75 no such table: t0 +stmt 75 ok +stmt 145 err 1 -1 179 no such table: t1 +stmt 179 err 1 -1 218 no such table: t1 +==== 4.3 + + SELECT * FROM t0, t1 WHERE (t1.c1, t1.c0) <= (t0.c0, t0.c0); +---- +stmt 0 err 1 -1 63 no such table: t0 +==== 5.1 + + DROP TABLE t1; + CREATE TABLE t1(a TEXT, b TEXT); + CREATE INDEX t1_ab ON t1(a COLLATE NOCASE, b COLLATE NOCASE); + INSERT INTO t1 VALUES('a',null),('b', 'ABCD'); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 52 err 1 -1 116 no such table: main.t1 +stmt 116 err 1 -1 165 no such table: t1 +==== 5.2 + + SELECT * FROM t1 + WHERE ('B' COLLATE nocase,'abc')>(a,b) + ORDER BY +a; +---- +stmt 0 err 1 -1 77 no such table: t1 +==== 5.3 + + SELECT * FROM t1 NOT INDEXED + WHERE ('B' COLLATE nocase,'abc')>(a,b) + ORDER BY +a; +---- +stmt 0 err 1 -1 89 no such table: t1 diff --git a/parser/testdata/rowvaluefault.metadata.json b/parser/testdata/rowvaluefault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvaluefault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvaluefault.test b/parser/testdata/rowvaluefault.test new file mode 100644 index 0000000..aa75a3c --- /dev/null +++ b/parser/testdata/rowvaluefault.test @@ -0,0 +1,16 @@ +==== 1.0 + + CREATE TABLE xyz(one, two, thr, fou); + INSERT INTO xyz VALUES('A', 'A', 'A', 1); + INSERT INTO xyz VALUES('B', 'B', 'B', 2); + INSERT INTO xyz VALUES('C', 'C', 'C', 3); + INSERT INTO xyz VALUES('D', 'D', 'D', 4); + + CREATE UNIQUE INDEX xyz_one_two ON xyz(one, two); +---- +stmt 0 ok +stmt 40 err 1 -1 85 no such table: xyz +stmt 85 err 1 -1 130 no such table: xyz +stmt 130 err 1 -1 175 no such table: xyz +stmt 175 err 1 -1 220 no such table: xyz +stmt 220 err 1 -1 273 no such table: main.xyz diff --git a/parser/testdata/rowvaluevtab.metadata.json b/parser/testdata/rowvaluevtab.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/rowvaluevtab.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/rowvaluevtab.test b/parser/testdata/rowvaluevtab.test new file mode 100644 index 0000000..f368ac2 --- /dev/null +++ b/parser/testdata/rowvaluevtab.test @@ -0,0 +1,57 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + CREATE INDEX t1b ON t1(b); + INSERT INTO t1 VALUES('one', 1, 1); + INSERT INTO t1 VALUES('two', 1, 2); + INSERT INTO t1 VALUES('three', 1, 3); + INSERT INTO t1 VALUES('four', 2, 1); + INSERT INTO t1 VALUES('five', 2, 2); + INSERT INTO t1 VALUES('six', 2, 3); + INSERT INTO t1 VALUES('seven', 3, 1); + INSERT INTO t1 VALUES('eight', 3, 2); + INSERT INTO t1 VALUES('nine', 3, 3); + + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<10000 + ) INSERT INTO t1 SELECT NULL, NULL, NULL FROM s; + CREATE VIRTUAL TABLE e1 USING echo(t1); +---- +stmt 0 ok +stmt 28 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 133 no such table: t1 +stmt 133 err 1 -1 173 no such table: t1 +stmt 173 err 1 -1 212 no such table: t1 +stmt 212 err 1 -1 251 no such table: t1 +stmt 251 err 1 -1 289 no such table: t1 +stmt 289 err 1 -1 329 no such table: t1 +stmt 329 err 1 -1 369 no such table: t1 +stmt 369 err 1 -1 408 no such table: t1 +stmt 408 err 1 -1 532 no such table: t1 +stmt 532 ok +==== 1.1 + + SELECT a FROM e1 WHERE (b, c) = (2, 2) +---- +stmt 0 err 1 -1 42 no such table: e1 +==== 1.2 + + SELECT a FROM e1 WHERE (b, c) > (2, 2) +---- +stmt 0 err 1 -1 42 no such table: e1 +==== 1.3 + + SELECT a FROM e1 WHERE (b, c) >= (2, 2) +---- +stmt 0 err 1 -1 43 no such table: e1 +==== 1.3.dup1 + + SELECT a FROM e1 WHERE (b, c) BETWEEN (1, 2) AND (2, 3) +---- +stmt 0 err 1 -1 59 no such table: e1 +==== 1.4 + + SELECT a FROM e1 WHERE (b, c) IN ( VALUES(2, 2) ) +---- +stmt 0 err 1 -1 53 no such table: e1 diff --git a/parser/testdata/savepoint.metadata.json b/parser/testdata/savepoint.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/savepoint.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/savepoint.test b/parser/testdata/savepoint.test new file mode 100644 index 0000000..be62861 --- /dev/null +++ b/parser/testdata/savepoint.test @@ -0,0 +1,331 @@ +==== savepoint-1.2 + + SAVEPOINT sp1; + ROLLBACK TO sp1; +---- +stmt 0 ok +stmt 19 ok +==== savepoint-1.5 + + SAVEPOINT sp1; + ROLLBACK TO sp1; +---- +stmt 0 ok +stmt 19 ok +==== savepoint-4.1 + + CREATE TABLE t2(d, e, f); + SELECT sql FROM sqlite_master; +---- +stmt 0 ok +stmt 30 ok +==== savepoint-4.2 + + BEGIN; + CREATE TABLE t3(g,h); + INSERT INTO t3 VALUES('I', 'II'); + SAVEPOINT one; + DROP TABLE t3; +---- +stmt 0 ok +stmt 11 ok +stmt 37 err 1 -1 75 no such table: t3 +stmt 75 ok +stmt 94 err 1 -1 113 no such table: t3 +==== savepoint-4.5 + + ROLLBACK; + SELECT sql FROM sqlite_master; +---- +stmt 0 ok +stmt 14 ok +==== savepoint-5.3.2.2 +ROLLBACK TO def +---- +stmt 0 ok +==== savepoint-5.3.3 +RELEASE def +---- +stmt 0 ok +==== savepoint-5.4.1 + + SAVEPOINT main; + INSERT INTO blobs VALUES('another blob'); +---- +stmt 0 ok +stmt 22 err 1 -1 70 no such table: blobs +==== savepoint-5.4.3 + RELEASE main +---- +stmt 0 ok +==== savepoint-5.4.5 + SELECT x FROM blobs WHERE rowid = 2 +---- +stmt 0 err 1 -1 37 no such table: blobs +==== savepoint-5.4.6 + SELECT count(*) FROM blobs +---- +stmt 0 err 1 -1 28 no such table: blobs +==== savepoint-6.3 + + PRAGMA cache_size = 10; + BEGIN; + UPDATE t1 SET a = randstr(10,10) WHERE (rowid%4)==0; + SAVEPOINT one; + DELETE FROM t1 WHERE rowid%2; + PRAGMA incr_vacuum; + SAVEPOINT two; + INSERT INTO t1 SELECT randstr(10,400), randstr(10,400), c FROM t1; + DELETE FROM t1 WHERE rowid%2; + PRAGMA incr_vacuum; + ROLLBACK TO one; + COMMIT; +---- +stmt 0 ok +stmt 30 ok +stmt 43 err 1 -1 104 no such table: t1 +stmt 104 ok +stmt 127 err 1 -1 167 no such table: t1 +stmt 167 ok +stmt 197 ok +stmt 222 err 1 -1 301 no such table: t1 +stmt 301 err 1 -1 343 no such table: t1 +stmt 343 ok +stmt 375 ok +stmt 400 ok +==== savepoint-7.2.2 + + COMMIT; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 12 ok +==== savepoint-7.3.1 + + CREATE TABLE t2(a, b); + INSERT INTO t2 SELECT a, b FROM t1; +---- +stmt 0 ok +stmt 27 err 1 -1 67 no such table: t2 +==== savepoint-7.5.1 + + PRAGMA incremental_vacuum; + CREATE TABLE t5(x, y); + INSERT INTO t5 VALUES(1, randstr(1000,1000)); + INSERT INTO t5 VALUES(2, randstr(1000,1000)); + INSERT INTO t5 VALUES(3, randstr(1000,1000)); + + BEGIN; + INSERT INTO t5 VALUES(4, randstr(1000,1000)); + INSERT INTO t5 VALUES(5, randstr(1000,1000)); + DELETE FROM t5 WHERE x=1 OR x=2; + SAVEPOINT one; + PRAGMA incremental_vacuum; + SAVEPOINT two; + INSERT INTO t5 VALUES(1, randstr(1000,1000)); + INSERT INTO t5 VALUES(2, randstr(1000,1000)); + ROLLBACK TO two; + ROLLBACK TO one; + COMMIT; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 31 ok +stmt 58 err 1 -1 108 no such table: t5 +stmt 108 err 1 -1 158 no such table: t5 +stmt 158 err 1 -1 208 no such table: t5 +stmt 208 ok +stmt 220 err 1 -1 272 no such table: t5 +stmt 272 err 1 -1 324 no such table: t5 +stmt 324 err 1 -1 363 no such table: t5 +stmt 363 ok +stmt 384 ok +stmt 419 ok +stmt 442 err 1 -1 498 no such table: t5 +stmt 498 err 1 -1 554 no such table: t5 +stmt 554 ok +stmt 579 ok +stmt 602 ok +stmt 614 ok +==== savepoint-7.5.2 + + DROP TABLE t5; +---- +stmt 0 err 1 -1 19 no such table: t5 +==== savepoint-10.1.1 + + SAVEPOINT one; + ATTACH 'test2.db' AS aux; + DETACH aux; +---- +stmt 0 ok +stmt 19 ok +stmt 49 ok +==== savepoint-10.1.3 + + RELEASE one; + DETACH aux; +---- +stmt 0 ok +stmt 17 ok +==== savepoint-10.2.2 + PRAGMA lock_status +---- +stmt 0 ok +==== savepoint-10.2.3 + + SAVEPOINT one; + INSERT INTO t1 VALUES(1, 2); + PRAGMA lock_status; +---- +stmt 0 ok +stmt 21 err 1 -1 56 no such table: t1 +stmt 56 ok +==== savepoint-10.2.4 + + INSERT INTO t3 VALUES(3, 4); + PRAGMA lock_status; +---- +stmt 0 err 1 -1 35 no such table: t3 +stmt 35 ok +==== savepoint-10.2.5 + + SAVEPOINT two; + INSERT INTO t2 VALUES(5, 6); + PRAGMA lock_status; +---- +stmt 0 ok +stmt 21 err 1 -1 56 no such table: t2 +stmt 56 ok +==== savepoint-10.2.6 + SELECT * FROM t2 +---- +stmt 0 err 1 -1 18 no such table: t2 +==== savepoint-10.2.8 + PRAGMA lock_status +---- +stmt 0 ok +==== savepoint-10.2.9 + SELECT 'a', * FROM t1 ; SELECT 'b', * FROM t3 +---- +stmt 0 err 1 -1 24 no such table: t1 +stmt 24 err 1 -1 47 no such table: t3 +==== savepoint-10.2.9.dup1 + PRAGMA lock_status +---- +stmt 0 ok +==== savepoint-10.2.14 + PRAGMA lock_status +---- +stmt 0 ok +==== savepoint-11.2 + + SAVEPOINT one; + CREATE TABLE t2(a, b, UNIQUE(a, b)); + SAVEPOINT two; + CREATE TABLE t3(a, b, UNIQUE(a, b)); +---- +stmt 0 ok +stmt 19 ok +stmt 62 ok +stmt 83 ok +==== savepoint-11.4 + ROLLBACK TO two +---- +stmt 0 ok +==== savepoint-11.6 + + CREATE TABLE t3(a, b, UNIQUE(a, b)); + ROLLBACK TO one; +---- +stmt 0 ok +stmt 42 ok +==== savepoint-11.9 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + DROP TABLE IF EXISTS t3; +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +==== savepoint-11.12 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== savepoint-12.1 + + CREATE TABLE t4(a PRIMARY KEY, b); + INSERT INTO t4 VALUES(1, 'one'); +---- +stmt 0 ok +stmt 39 err 1 -1 76 no such table: t4 +==== savepoint-12.4 + SAVEPOINT one +---- +stmt 0 ok +==== savepoint-13.2 + + BEGIN; + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 SELECT a+4,b+4 FROM t1; + COMMIT; +---- +stmt 0 ok +stmt 13 err 1 -1 48 no such table: t1 +stmt 48 err 1 -1 94 no such table: t1 +stmt 94 ok +==== savepoint-13.3 + + BEGIN; + INSERT INTO t1 VALUES(9, 10); + SAVEPOINT s1; + INSERT INTO t1 VALUES(11, 12); + COMMIT; +---- +stmt 0 ok +stmt 13 err 1 -1 51 no such table: t1 +stmt 51 ok +stmt 73 err 1 -1 114 no such table: t1 +stmt 114 ok +==== savepoint-13.4 + + BEGIN; + INSERT INTO t1 VALUES(13, 14); + SAVEPOINT s1; + INSERT INTO t1 VALUES(15, 16); + ROLLBACK TO s1; + ROLLBACK; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 13 err 1 -1 52 no such table: t1 +stmt 52 ok +stmt 74 err 1 -1 115 no such table: t1 +stmt 115 ok +stmt 139 ok +stmt 155 err 1 -1 179 no such table: t1 +==== savepoint-17.1 + + BEGIN; + CREATE TABLE t6(a, b); + INSERT INTO t6 VALUES(1, 2); + SAVEPOINT one; + INSERT INTO t6 VALUES(3, 4); + ROLLBACK TO one; + SELECT * FROM t6; + ROLLBACK; +---- +stmt 0 ok +stmt 9 ok +stmt 36 err 1 -1 69 no such table: t6 +stmt 69 ok +stmt 88 err 1 -1 123 no such table: t6 +stmt 123 ok +stmt 144 err 1 -1 166 no such table: t6 +stmt 166 ok +==== savepoint-17.2 + + CREATE TABLE t6(a, b); +---- +stmt 0 ok diff --git a/parser/testdata/savepoint4.metadata.json b/parser/testdata/savepoint4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/savepoint4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/savepoint4.test b/parser/testdata/savepoint4.test new file mode 100644 index 0000000..821738f --- /dev/null +++ b/parser/testdata/savepoint4.test @@ -0,0 +1,84 @@ +==== savepoint4-1 + + PRAGMA cache_size=10; + BEGIN; + CREATE TABLE t1(x TEXT); + INSERT INTO t1 VALUES(randstr(10,400)); + INSERT INTO t1 VALUES(randstr(10,400)); + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + COMMIT; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 26 ok +stmt 37 ok +stmt 66 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 154 no such table: t1 +stmt 154 err 1 -1 205 no such table: t1 +stmt 205 err 1 -1 256 no such table: t1 +stmt 256 err 1 -1 307 no such table: t1 +stmt 307 err 1 -1 358 no such table: t1 +stmt 358 err 1 -1 409 no such table: t1 +stmt 409 err 1 -1 460 no such table: t1 +stmt 460 err 1 -1 511 no such table: t1 +stmt 511 err 1 -1 562 no such table: t1 +stmt 562 err 1 -1 613 no such table: t1 +stmt 613 ok +stmt 625 err 1 -1 654 no such table: t1 +==== savepoint4-generated + + DELETE FROM t1 WHERE random()%10==0; + INSERT INTO t1 SELECT randstr(10,10)||x FROM t1 WHERE random()%9==0; +---- +stmt 0 err 1 -1 43 no such table: t1 +stmt 43 err 1 -1 118 no such table: t1 +==== savepoint4-2 + + PRAGMA cache_size=10; + DROP TABLE IF EXISTS t1; + BEGIN; + CREATE TABLE t1(x TEXT); + CREATE INDEX i1 ON t1(x); + INSERT INTO t1 VALUES(randstr(10,400)); + INSERT INTO t1 VALUES(randstr(10,400)); + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + INSERT INTO t1 SELECT randstr(10,400) FROM t1; + COMMIT; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 26 ok +stmt 55 ok +stmt 66 ok +stmt 95 err 1 -1 125 no such table: main.t1 +stmt 125 err 1 -1 169 no such table: t1 +stmt 169 err 1 -1 213 no such table: t1 +stmt 213 err 1 -1 264 no such table: t1 +stmt 264 err 1 -1 315 no such table: t1 +stmt 315 err 1 -1 366 no such table: t1 +stmt 366 err 1 -1 417 no such table: t1 +stmt 417 err 1 -1 468 no such table: t1 +stmt 468 err 1 -1 519 no such table: t1 +stmt 519 err 1 -1 570 no such table: t1 +stmt 570 ok +stmt 582 err 1 -1 611 no such table: t1 +==== savepoint4-generated.dup1 + + DELETE FROM t1 WHERE random()%10==0; + INSERT INTO t1 SELECT randstr(10,10)||x FROM t1 WHERE random()%9==0; +---- +stmt 0 err 1 -1 43 no such table: t1 +stmt 43 err 1 -1 118 no such table: t1 diff --git a/parser/testdata/scanstatus.metadata.json b/parser/testdata/scanstatus.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/scanstatus.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/scanstatus.test b/parser/testdata/scanstatus.test new file mode 100644 index 0000000..cc1546c --- /dev/null +++ b/parser/testdata/scanstatus.test @@ -0,0 +1,287 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(x, y); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t2 VALUES('a', 'b'); + INSERT INTO t2 VALUES('c', 'd'); + INSERT INTO t2 VALUES('e', 'f'); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 147 no such table: t2 +stmt 147 err 1 -1 182 no such table: t2 +stmt 182 err 1 -1 217 no such table: t2 +==== 1.1a + SELECT count(*) FROM t1, t2; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 1.2a + SELECT count(*) FROM t1, t2; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 1.3 + + ANALYZE; + SELECT count(*) FROM t1, t2; +---- +stmt 0 ok +stmt 11 err 1 -1 42 no such table: t1 +==== 1.5 + ANALYZE +---- +stmt 0 ok +==== 1.6 + + SELECT count(*) FROM t1, t2 WHERE t2.rowid>1; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 1.8 + + SELECT count(*) FROM t1, t2 WHERE t2.rowid>1; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 2.1 + + CREATE TABLE x1(i INTEGER PRIMARY KEY, j); + INSERT INTO x1 VALUES(1, 'one'); + INSERT INTO x1 VALUES(2, 'two'); + INSERT INTO x1 VALUES(3, 'three'); + INSERT INTO x1 VALUES(4, 'four'); + CREATE INDEX x1j ON x1(j); + + SELECT * FROM x1 WHERE i=2; +---- +stmt 0 ok +stmt 45 err 1 -1 80 no such table: x1 +stmt 80 err 1 -1 115 no such table: x1 +stmt 115 err 1 -1 152 no such table: x1 +stmt 152 err 1 -1 188 no such table: x1 +stmt 188 err 1 -1 217 no such table: main.x1 +stmt 217 err 1 -1 248 no such table: x1 +==== 2.3.1 + + SELECT * FROM x1 WHERE j='two' +---- +stmt 0 err 1 -1 34 no such table: x1 +==== 2.4.1 + + SELECT * FROM x1 WHERE j<'two' +---- +stmt 0 err 1 -1 34 no such table: x1 +==== 2.5.1 + + SELECT * FROM x1 WHERE j>='two' +---- +stmt 0 err 1 -1 35 no such table: x1 +==== 2.6.1 + + SELECT * FROM x1 WHERE j BETWEEN 'three' AND 'two' +---- +stmt 0 err 1 -1 54 no such table: x1 +==== 2.7.1 + + CREATE TABLE x2(i INTEGER, j, k); + INSERT INTO x2 SELECT i, j, i || ' ' || j FROM x1; + CREATE INDEX x2j ON x2(j); + CREATE INDEX x2ij ON x2(i, j); + SELECT * FROM x2 WHERE j BETWEEN 'three' AND 'two' +---- +stmt 0 ok +stmt 36 err 1 -1 89 no such table: x2 +stmt 89 err 1 -1 118 no such table: main.x2 +stmt 118 err 1 -1 151 no such table: main.x2 +stmt 151 err 1 -1 205 no such table: x2 +==== 2.8.1 + + SELECT * FROM x2 WHERE i=1 AND j='two' +---- +stmt 0 err 1 -1 42 no such table: x2 +==== 2.9.1 + + SELECT * FROM x2 WHERE i=5 AND j='two' +---- +stmt 0 err 1 -1 42 no such table: x2 +==== 2.10.1 + + SELECT * FROM x2 WHERE i=3 AND j='three' +---- +stmt 0 err 1 -1 44 no such table: x2 +==== 3.1 + + CREATE TABLE a1(a, b, c, d); + CREATE INDEX a1a ON a1(a); + CREATE INDEX a1bc ON a1(b, c); + + WITH d(x) AS (SELECT 1 UNION ALL SELECT x+1 AS n FROM d WHERE n<=100) + INSERT INTO a1 SELECT x, x, x, x FROM d; +---- +stmt 0 ok +stmt 31 err 1 -1 60 no such table: main.a1 +stmt 60 err 1 -1 93 no such table: main.a1 +stmt 93 err 1 -1 209 no such table: a1 +==== 3.2.1 + + SELECT d FROM a1 WHERE (a=4 OR b=13) +---- +stmt 0 err 1 -1 40 no such table: a1 +==== 3.2.1.dup1 + + SELECT count(*) FROM a1 WHERE (a BETWEEN 4 AND 12) OR (b BETWEEN 40 AND 60) +---- +stmt 0 err 1 -1 79 no such table: a1 +==== 3.3.1 + + SELECT count(*) FROM a1 AS x, a1 AS y + WHERE (x.a BETWEEN 4 AND 12) AND (y.b BETWEEN 1 AND 10) +---- +stmt 0 err 1 -1 100 no such table: a1 +==== 3.4.1 + + SELECT count(*) FROM a1 WHERE a IN (1, 5, 10, 15); +---- +stmt 0 err 1 -1 53 no such table: a1 +==== 3.4.1.dup1 + + SELECT count(*) FROM a1 WHERE rowid IN (1, 5, 10, 15); +---- +stmt 0 err 1 -1 57 no such table: a1 +==== 4.0 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(x PRIMARY KEY, y, z); + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + SELECT * FROM t2 WHERE x BETWEEN 20 AND 40; + END; + WITH d(x) AS (SELECT 1 UNION ALL SELECT x+1 AS n FROM d WHERE n<=100) + INSERT INTO t2 SELECT x, x*2, x*3 FROM d; +---- +stmt 0 ok +stmt 28 ok +stmt 68 err 1 -1 114 no such table: main.t1 +stmt 169 err 1 -1 285 no such table: t2 +==== 4.1.1 + INSERT INTO t1 VALUES(1, 2, 3); +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 4.2 + + CREATE TABLE p1(x PRIMARY KEY); + INSERT INTO p1 VALUES(1), (2), (3), (4); + CREATE TABLE c1(y REFERENCES p1); + INSERT INTO c1 VALUES(1), (2), (3); + PRAGMA foreign_keys=on; +---- +stmt 0 ok +stmt 34 err 1 -1 77 no such table: p1 +stmt 77 ok +stmt 113 err 1 -1 151 no such table: c1 +stmt 151 ok +==== 4.2.1 + DELETE FROM p1 WHERE x=4 +---- +stmt 0 err 1 -1 26 no such table: p1 +==== 5.0 + + CREATE TABLE t1(a PRIMARY KEY, b, c); + INSERT INTO t1 VALUES(0, 1, 'a'); + INSERT INTO t1 VALUES(1, 0, 'b'); + INSERT INTO t1 VALUES(2, 1, 'c'); + INSERT INTO t1 VALUES(3, 0, 'd'); + INSERT INTO t1 VALUES(4, 1, 'e'); + INSERT INTO t1 VALUES(5, 0, 'a'); + INSERT INTO t1 VALUES(6, 1, 'b'); + INSERT INTO t1 VALUES(7, 0, 'c'); + INSERT INTO t1 VALUES(8, 1, 'd'); + INSERT INTO t1 VALUES(9, 0, 'e'); + CREATE INDEX t1bc ON t1(b, c); + + CREATE TABLE t2(x, y); + CREATE INDEX t2xy ON t2(x, y); + WITH data(i, x, y) AS ( + SELECT 0, 0, tochar(0) + UNION ALL + SELECT i+1, (i+1)%2, tochar(i+1) FROM data WHERE i<500 + ) INSERT INTO t2 SELECT x, y FROM data; + + CREATE TABLE t3(x, y); + INSERT INTO t3 SELECT * FROM t2; + + ANALYZE; +---- +stmt 0 ok +stmt 40 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 184 no such table: t1 +stmt 184 err 1 -1 220 no such table: t1 +stmt 220 err 1 -1 256 no such table: t1 +stmt 256 err 1 -1 292 no such table: t1 +stmt 292 err 1 -1 328 no such table: t1 +stmt 328 err 1 -1 364 no such table: t1 +stmt 364 err 1 -1 400 no such table: t1 +stmt 400 err 1 -1 433 no such table: main.t1 +stmt 433 ok +stmt 459 err 1 -1 492 no such table: main.t2 +stmt 492 err 1 -1 661 no such table: t2 +stmt 661 ok +stmt 687 err 1 -1 722 no such table: t3 +stmt 722 ok +==== 5.1.1 + + SELECT count(*) FROM t1 WHERE a IN (SELECT b FROM t1 AS ii) +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 5.2.1 + + SELECT count(*) FROM t1 WHERE a IN (0, 1) +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 5.3.2 + + SELECT count(*) FROM t2 WHERE y = 'j'; +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 5.4.2 + + SELECT count(*) FROM t1, t2 WHERE y = c; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 5.5.2 + + SELECT count(*) FROM t1, t3 WHERE y = c; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== 6.0 + + CREATE VIRTUAL TABLE ft1 USING fts4; + INSERT INTO ft1 VALUES('a d c f g h e i f c'); + INSERT INTO ft1 VALUES('g c h b g b f f f g'); + INSERT INTO ft1 VALUES('h h c c h f a e d d'); + INSERT INTO ft1 VALUES('e j i j i e b c f g'); + INSERT INTO ft1 VALUES('g f b g j c h a d f'); + INSERT INTO ft1 VALUES('j i a e g f a i a c'); + INSERT INTO ft1 VALUES('f d g g j j c a h g'); + INSERT INTO ft1 VALUES('b d h a d j j j b i'); + INSERT INTO ft1 VALUES('j e a b j e c b c i'); + INSERT INTO ft1 VALUES('a d e f b j j c g d'); +---- +stmt 0 ok +stmt 41 err 1 -1 92 no such table: ft1 +stmt 92 err 1 -1 143 no such table: ft1 +stmt 143 err 1 -1 194 no such table: ft1 +stmt 194 err 1 -1 245 no such table: ft1 +stmt 245 err 1 -1 296 no such table: ft1 +stmt 296 err 1 -1 347 no such table: ft1 +stmt 347 err 1 -1 398 no such table: ft1 +stmt 398 err 1 -1 449 no such table: ft1 +stmt 449 err 1 -1 500 no such table: ft1 +stmt 500 err 1 -1 551 no such table: ft1 +==== 6.1.1 + + SELECT count(*) FROM ft1 WHERE ft1 MATCH 'd' +---- +stmt 0 err 1 -1 50 no such table: ft1 diff --git a/parser/testdata/scanstatus2.metadata.json b/parser/testdata/scanstatus2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/scanstatus2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/scanstatus2.test b/parser/testdata/scanstatus2.test new file mode 100644 index 0000000..5d66938 --- /dev/null +++ b/parser/testdata/scanstatus2.test @@ -0,0 +1,85 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(x, y); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t2 VALUES('a', 'b'); + INSERT INTO t2 VALUES('c', 'd'); + INSERT INTO t2 VALUES('e', 'f'); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 147 no such table: t2 +stmt 147 err 1 -1 182 no such table: t2 +stmt 182 err 1 -1 217 no such table: t2 +==== 2.0 + + CREATE VIRTUAL TABLE ft USING fts5(a); + INSERT INTO ft VALUES('abc'); + INSERT INTO ft VALUES('def'); + INSERT INTO ft VALUES('ghi'); +---- +stmt 0 ok +stmt 43 err 1 -1 77 no such table: ft +stmt 77 err 1 -1 111 no such table: ft +stmt 111 err 1 -1 145 no such table: ft +==== 3.0 + + CREATE TABLE x1(a, b); + CREATE TABLE x2(c, d); + + WITH s(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<1000) + INSERT INTO x1 SELECT i, i FROM s; + INSERT INTO x2 SELECT a, b FROM x1; +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 155 no such table: x1 +stmt 155 err 1 -1 193 no such table: x2 +==== 4.0 + + CREATE TABLE rt1 (id INTEGER PRIMARY KEY, x1, x2); + CREATE TABLE rt2 (id, x1, x2); +---- +stmt 0 ok +stmt 53 ok +==== 5.0 + + CREATE TABLE t1(x, y); + CREATE TRIGGER tr1 AFTER DELETE ON t1 BEGIN + SELECT 1; + END; + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 27 err 1 -1 75 no such table: main.t1 +stmt 100 err 1 -1 133 no such table: t1 +==== 5.1 + + DELETE FROM t1 WHERE x=1; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== 6.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(3, 'three'); + INSERT INTO t1 VALUES(4, 'four'); + INSERT INTO t1 VALUES(5, 'five'); + INSERT INTO t1 VALUES(6, 'six'); + INSERT INTO t1 VALUES(7, 'seven'); + INSERT INTO t1 VALUES(8, 'eight'); +---- +stmt 0 ok +stmt 25 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 132 no such table: t1 +stmt 132 err 1 -1 168 no such table: t1 +stmt 168 err 1 -1 204 no such table: t1 +stmt 204 err 1 -1 239 no such table: t1 +stmt 239 err 1 -1 276 no such table: t1 +stmt 276 err 1 -1 313 no such table: t1 diff --git a/parser/testdata/schema.metadata.json b/parser/testdata/schema.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/schema.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/schema.test b/parser/testdata/schema.test new file mode 100644 index 0000000..a821565 --- /dev/null +++ b/parser/testdata/schema.test @@ -0,0 +1,5 @@ +==== schema-10.2 + + CREATE TABLE t2(a, b, c); +---- +stmt 0 ok diff --git a/parser/testdata/schema2.metadata.json b/parser/testdata/schema2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/schema2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/schema2.test b/parser/testdata/schema2.test new file mode 100644 index 0000000..4044ad4 --- /dev/null +++ b/parser/testdata/schema2.test @@ -0,0 +1,5 @@ +==== schema2-10.2 + + CREATE TABLE t2(a, b, c); +---- +stmt 0 ok diff --git a/parser/testdata/schema4.metadata.json b/parser/testdata/schema4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/schema4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/schema4.test b/parser/testdata/schema4.test new file mode 100644 index 0000000..5e87525 --- /dev/null +++ b/parser/testdata/schema4.test @@ -0,0 +1,200 @@ +==== schema4-1.1 + + CREATE TABLE log(x, a, b); + CREATE TABLE tbl(a, b); + + CREATE TABLE t1(a, b); + CREATE VIEW v1 AS SELECT * FROM tbl; + CREATE INDEX i1 ON tbl(a); +---- +stmt 0 ok +stmt 29 ok +stmt 55 ok +stmt 81 ok +stmt 120 err 1 -1 149 no such table: main.tbl +==== schema4-1.2 + + CREATE TRIGGER t1 AFTER INSERT ON tbl BEGIN + INSERT INTO log VALUES('after insert', new.a, new.b); + END; + CREATE TRIGGER v1 AFTER UPDATE ON tbl BEGIN + INSERT INTO log VALUES('after update', new.a, new.b); + END; + CREATE TRIGGER i1 AFTER DELETE ON tbl BEGIN + INSERT INTO log VALUES('after delete', old.a, old.b); + END; +---- +stmt 0 err 1 -1 46 no such table: main.tbl +stmt 111 err 1 -1 157 no such table: main.tbl +stmt 222 err 1 -1 268 no such table: main.tbl +==== schema4-1.3 + + INSERT INTO tbl VALUES(1, 2); + UPDATE tbl SET b=a+b, a=a+1; + DELETE FROM tbl; + + SELECT x, a, b FROM log; +---- +stmt 0 err 1 -1 32 no such table: tbl +stmt 32 err 1 -1 63 no such table: tbl +stmt 63 err 1 -1 82 no such table: tbl +stmt 82 err 1 -1 110 no such table: log +==== schema4-1.4 + + DELETE FROM log; + + DROP INDEX i1; + DROP TABLE t1; + DROP VIEW v1; + + INSERT INTO tbl VALUES(1, 2); + UPDATE tbl SET b=a+b, a=a+1; + DELETE FROM tbl; + + SELECT x, a, b FROM log; +---- +stmt 0 err 1 -1 19 no such table: log +stmt 19 err 1 -1 37 no such index: i1 +stmt 37 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 70 no such view: v1 +stmt 70 err 1 -1 103 no such table: tbl +stmt 103 err 1 -1 134 no such table: tbl +stmt 134 err 1 -1 153 no such table: tbl +stmt 153 err 1 -1 181 no such table: log +==== schema4-1.5 + + DELETE FROM log; + INSERT INTO tbl VALUES(1, 2); + UPDATE tbl SET b=a+b, a=a+1; + DELETE FROM tbl; + SELECT x, a, b FROM log; +---- +stmt 0 err 1 -1 19 no such table: log +stmt 19 err 1 -1 51 no such table: tbl +stmt 51 err 1 -1 82 no such table: tbl +stmt 82 err 1 -1 101 no such table: tbl +stmt 101 err 1 -1 128 no such table: log +==== schema4-1.6 + + CREATE TABLE t1(a, b); + CREATE VIEW v1 AS SELECT * FROM tbl; + CREATE INDEX i1 ON tbl(a); +---- +stmt 0 ok +stmt 25 ok +stmt 64 err 1 -1 93 no such table: main.tbl +==== schema4-1.7 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING fts3; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +==== schema4-1.8 + + DELETE FROM log; + DROP TABLE t1; + INSERT INTO tbl VALUES(1, 2); + UPDATE tbl SET b=a+b, a=a+1; + DELETE FROM tbl; + SELECT x, a, b FROM log; +---- +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 74 no such table: tbl +stmt 74 err 1 -1 107 no such table: tbl +stmt 107 err 1 -1 128 no such table: tbl +stmt 128 err 1 -1 157 no such table: log +==== schema4-2.1 + + CREATE TABLE log(x, a, b); + CREATE TABLE tbl(a, b); + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 31 ok +stmt 59 ok +stmt 89 err 1 -1 122 no such table: main.t1 +==== schema4-2.2 + + CREATE TRIGGER t1 AFTER INSERT ON tbl BEGIN + INSERT INTO log VALUES('after insert', new.a, new.b); + END; + CREATE TRIGGER i1 AFTER DELETE ON tbl BEGIN + INSERT INTO log VALUES('after delete', old.a, old.b); + END; +---- +stmt 0 err 1 -1 48 no such table: main.tbl +stmt 117 err 1 -1 165 no such table: main.tbl +==== schema4-2.3 + ALTER TABLE t1 RENAME TO t2 +---- +stmt 0 err 1 -1 29 no such table: t1 +==== schema4-2.4 + + INSERT INTO tbl VALUES('a', 'b'); + DELETE FROM tbl; + SELECT * FROM log; +---- +stmt 0 err 1 -1 39 no such table: tbl +stmt 39 err 1 -1 60 no such table: tbl +stmt 60 err 1 -1 83 no such table: log +==== schema4-2.5 + + DELETE FROM log; + INSERT INTO tbl VALUES('c', 'd'); + DELETE FROM tbl; + SELECT * FROM log; +---- +stmt 0 err 1 -1 22 no such table: log +stmt 22 err 1 -1 60 no such table: tbl +stmt 60 err 1 -1 81 no such table: tbl +stmt 81 err 1 -1 104 no such table: log +==== schema4-2.6 + + CREATE TEMP TRIGGER x1 AFTER UPDATE ON tbl BEGIN + INSERT INTO log VALUES('after update', new.a, new.b); + END; + + CREATE TEMP TABLE x1(x); + INSERT INTO x1 VALUES(123); +---- +stmt 0 err 1 -1 53 no such table: tbl +stmt 122 ok +stmt 152 err 1 -1 184 no such table: x1 +==== schema4-2.8 + + select sql from temp.sqlite_master WHERE type='table'; +---- +stmt 0 ok +==== schema4-2.7 + ALTER TABLE tbl RENAME TO tbl2 +---- +stmt 0 err 1 -1 32 no such table: tbl +==== schema4-2.9 + + select sql from sqlite_temp_master WHERE type='table'; +---- +stmt 0 ok +==== schema4-2.10 + + DELETE FROM log; + INSERT INTO tbl2 VALUES('e', 'f'); + UPDATE tbl2 SET a='g', b='h'; + DELETE FROM tbl2; + SELECT * FROM log; +---- +stmt 0 err 1 -1 22 no such table: log +stmt 22 err 1 -1 61 no such table: tbl2 +stmt 61 err 1 -1 95 no such table: tbl2 +stmt 95 err 1 -1 117 no such table: tbl2 +stmt 117 err 1 -1 140 no such table: log +==== schema4-2.11 + + INSERT INTO x1 VALUES(456); + SELECT * FROM x1 +---- +stmt 0 err 1 -1 32 no such table: x1 +stmt 32 err 1 -1 54 no such table: x1 diff --git a/parser/testdata/schema5.metadata.json b/parser/testdata/schema5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/schema5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/schema5.test b/parser/testdata/schema5.test new file mode 100644 index 0000000..2fbe3df --- /dev/null +++ b/parser/testdata/schema5.test @@ -0,0 +1,16 @@ +==== schema5-1.2 +INSERT INTO t1 VALUES(1,3,4); +---- +stmt 0 err 1 -1 29 no such table: t1 +==== schema5-1.4 +INSERT INTO t1 VALUES(10,11,12); +---- +stmt 0 err 1 -1 32 no such table: t1 +==== schema5-1.6 +INSERT INTO t1 VALUES(1,3,4) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== schema5-1.7 +INSERT INTO t1 VALUES(10,2,3) +---- +stmt 0 err 1 -1 30 no such table: t1 diff --git a/parser/testdata/schemafault.metadata.json b/parser/testdata/schemafault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/schemafault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/schemafault.test b/parser/testdata/schemafault.test new file mode 100644 index 0000000..49f8cc5 --- /dev/null +++ b/parser/testdata/schemafault.test @@ -0,0 +1,7 @@ +==== 1.0 + + CREATE TABLE t2(aaa INTTT); + CREATE VIEW v2(xxx , yyy) AS SELECT aaa, aaa+1 FROM t2; +---- +stmt 0 ok +stmt 30 ok diff --git a/parser/testdata/securedel2.metadata.json b/parser/testdata/securedel2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/securedel2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/securedel2.test b/parser/testdata/securedel2.test new file mode 100644 index 0000000..572c7f0 --- /dev/null +++ b/parser/testdata/securedel2.test @@ -0,0 +1,20 @@ +==== 1.3.1 + PRAGMA secure_delete = 0 +---- +stmt 0 ok +==== 1.3.2 + DELETE FROM t1 WHERE rowid = 1 +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 1.4.1 + PRAGMA secure_delete = 1 +---- +stmt 0 ok +==== 1.4.2 + DELETE FROM t1 WHERE rowid = 1 +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 1.5.1 + DELETE FROM t1 WHERE rowid>850 +---- +stmt 0 err 1 -1 32 no such table: t1 diff --git a/parser/testdata/seekscan1.metadata.json b/parser/testdata/seekscan1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/seekscan1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/seekscan1.test b/parser/testdata/seekscan1.test new file mode 100644 index 0000000..bf9b2bf --- /dev/null +++ b/parser/testdata/seekscan1.test @@ -0,0 +1,47 @@ +==== 1.0 + + CREATE TABLE t1(a TEXT, b INT, c INT NOT NULL, PRIMARY KEY(a,b,c)); + WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<1997) + INSERT INTO t1(a,b,c) SELECT printf('xyz%d',x/10),x/6,x FROM c; + INSERT INTO t1 VALUES('abc',234,6); + INSERT INTO t1 VALUES('abc',345,7); + ANALYZE; +---- +stmt 0 ok +stmt 70 err 1 -1 216 no such table: t1 +stmt 216 err 1 -1 254 no such table: t1 +stmt 254 err 1 -1 292 no such table: t1 +stmt 292 ok +==== 1.1 + + SELECT a,b,c FROM t1 + WHERE b IN (234, 345) AND c BETWEEN 6 AND 6.5 AND a='abc' + ORDER BY a, b; +---- +stmt 0 err 1 -1 102 no such table: t1 +==== 1.2 + + SELECT a,b,c FROM t1 + WHERE b IN (234, 345) AND c BETWEEN 6 AND 7 AND a='abc' + ORDER BY a, b; +---- +stmt 0 err 1 -1 100 no such table: t1 +==== 1.3 + + SELECT a,b,c FROM t1 + WHERE b IN (234, 345) AND c >=6 AND a='abc' + ORDER BY a, b; +---- +stmt 0 err 1 -1 88 no such table: t1 +==== 1.4 + + SELECT a,b,c FROM t1 + WHERE b IN (234, 345) AND c<=7 AND a='abc' + ORDER BY a, b; +---- +stmt 0 err 1 -1 87 no such table: t1 +==== 1.5 + + SELECT a,b,c FROM t1 WHERE b IN (235, 345) AND c<=3 AND a='abc' ORDER BY a, b; +---- +stmt 0 err 1 -1 81 no such table: t1 diff --git a/parser/testdata/selectG.test b/parser/testdata/selectG.test deleted file mode 100644 index e69de29..0000000 diff --git a/parser/testdata/shared.metadata.json b/parser/testdata/shared.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/shared.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/shared.test b/parser/testdata/shared.test new file mode 100644 index 0000000..d814d42 --- /dev/null +++ b/parser/testdata/shared.test @@ -0,0 +1,85 @@ +==== shared-generated + + SELECT * FROM seq; +---- +stmt 0 err 1 -1 23 no such table: seq +==== shared-generated.dup1 + + CREATE TABLE abc(a, b, c); + CREATE TABLE def(d, e, f); + INSERT INTO abc VALUES('i', 'ii', 'iii'); + INSERT INTO def VALUES('I', 'II', 'III'); +---- +stmt 0 ok +stmt 31 ok +stmt 62 err 1 -1 108 no such table: abc +stmt 108 err 1 -1 154 no such table: def +==== shared-generated.dup2 + + INSERT INTO abc VALUES('iv', 'v', 'vi'); +---- +stmt 0 err 1 -1 45 no such table: abc +==== shared-generated.dup3 + + CREATE TABLE ghi(g, h, i); +---- +stmt 0 ok +==== shared-generated.dup4 + + INSERT INTO def VALUES('IV', 'V', 'VI'); +---- +stmt 0 err 1 -1 45 no such table: def +==== shared-generated.dup5 + + SELECT * FROM sqlite_master; +---- +stmt 0 ok +==== shared-generated.dup6 + + ATTACH 'test2.db' AS aux; + SELECT * FROM aux.sqlite_master; +---- +stmt 0 ok +stmt 32 err 1 -1 71 no such table: aux.sqlite_master +==== shared-generated.dup7 + + SELECT * FROM aux.sqlite_master; +---- +stmt 0 err 1 -1 39 no such table: aux.sqlite_master +==== shared-generated.dup8 +SELECT * FROM abc2 +---- +stmt 0 err 1 -1 19 no such table: abc2 +==== shared-generated.dup9 + + INSERT INTO abc2 VALUES(4, 5, 6); + INSERT INTO abc2 VALUES(7, 8, 9); +---- +stmt 0 err 1 -1 38 no such table: abc2 +stmt 38 err 1 -1 76 no such table: abc2 +==== shared-generated.dup10 + + PRAGMA cache_size = 10; + PRAGMA cache_size; +---- +stmt 0 ok +stmt 30 ok +==== shared-generated.dup11 + + CREATE TABLE t1(a, b, c); + CREATE TABLE aux2.t2(a, b, c); + CREATE TABLE aux3.t3(a, b, c); + CREATE TABLE aux4.t4(a, b, c); + CREATE TABLE aux5.t5(a, b, c); + SELECT count(*) FROM + aux2.sqlite_master, + aux3.sqlite_master, + aux4.sqlite_master, + aux5.sqlite_master +---- +stmt 0 ok +stmt 30 err 1 48 56 unknown database aux2 +stmt 65 err 1 83 91 unknown database aux3 +stmt 100 err 1 118 126 unknown database aux4 +stmt 135 err 1 153 161 unknown database aux5 +stmt 170 err 1 -1 303 no such table: aux2.sqlite_master diff --git a/parser/testdata/shared2.metadata.json b/parser/testdata/shared2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/shared2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/shared2.test b/parser/testdata/shared2.test new file mode 100644 index 0000000..a48eff3 --- /dev/null +++ b/parser/testdata/shared2.test @@ -0,0 +1,7 @@ +==== shared2-4.1 + + CREATE TABLE t0(a, b); + CREATE TABLE t1(a, b DEFAULT 'hello world'); +---- +stmt 0 ok +stmt 27 ok diff --git a/parser/testdata/shared3.metadata.json b/parser/testdata/shared3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/shared3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/shared3.test b/parser/testdata/shared3.test new file mode 100644 index 0000000..0b4bc70 --- /dev/null +++ b/parser/testdata/shared3.test @@ -0,0 +1,36 @@ +==== 3.1 + + PRAGMA auto_vacuum = 2; + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(randomblob(500), randomblob(500)); + INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; + INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; + INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; + INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; + INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; + INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; + INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; +---- +stmt 0 ok +stmt 26 ok +stmt 51 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 176 no such table: t1 +stmt 176 err 1 -1 242 no such table: t1 +stmt 242 err 1 -1 308 no such table: t1 +stmt 308 err 1 -1 374 no such table: t1 +stmt 374 err 1 -1 440 no such table: t1 +stmt 440 err 1 -1 506 no such table: t1 +stmt 506 err 1 -1 572 no such table: t1 +==== 3.3 + + BEGIN; + DELETE FROM t1 WHERE 1; + PRAGMA incremental_vacuum; +---- +stmt 0 ok +stmt 9 err 1 -1 37 no such table: t1 +stmt 37 ok +==== 3.5 + COMMIT +---- +stmt 0 ok diff --git a/parser/testdata/shared7.metadata.json b/parser/testdata/shared7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/shared7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/shared7.test b/parser/testdata/shared7.test new file mode 100644 index 0000000..26969c0 --- /dev/null +++ b/parser/testdata/shared7.test @@ -0,0 +1,5 @@ +==== shared7-1.4 + + ATTACH 'test.db' AS err1; +---- +stmt 0 ok diff --git a/parser/testdata/sharedlock.metadata.json b/parser/testdata/sharedlock.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/sharedlock.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/sharedlock.test b/parser/testdata/sharedlock.test new file mode 100644 index 0000000..df0c3c8 --- /dev/null +++ b/parser/testdata/sharedlock.test @@ -0,0 +1,20 @@ +==== sharedlock-1.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); +---- +stmt 0 ok +stmt 27 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 101 no such table: t1 +==== 2.1 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x, y); + INSERT INTO t2 VALUES(1, 2); + INSERT INTO t2 VALUES(3, 4); +---- +stmt 0 ok +stmt 29 ok +stmt 56 err 1 -1 89 no such table: t2 +stmt 89 err 1 -1 122 no such table: t2 diff --git a/parser/testdata/shell7.metadata.json b/parser/testdata/shell7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/shell7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/shell7.test b/parser/testdata/shell7.test new file mode 100644 index 0000000..25ef6ce --- /dev/null +++ b/parser/testdata/shell7.test @@ -0,0 +1,19 @@ +==== 1.0 + + CREATE TABLE f1(tn INTEGER PRIMARY KEY, x BLOB); + CREATE TABLE f2(tn INTEGER PRIMARY KEY, x BLOB); + + INSERT INTO f1 VALUES(1, X'01020304'); + INSERT INTO f1 VALUES(2, X'01000304'); + INSERT INTO f1 VALUES(3, randomblob(200)); +---- +stmt 0 ok +stmt 52 ok +stmt 104 err 1 -1 147 no such table: f1 +stmt 147 err 1 -1 188 no such table: f1 +stmt 188 err 1 -1 233 no such table: f1 +==== shell7-generated + + SELECT (SELECT x FROM f1 WHERE tn=1)==(SELECT x FROM f2 WHERE tn=1) +---- +stmt 0 err 1 -1 74 no such table: f1 diff --git a/parser/testdata/shell9.metadata.json b/parser/testdata/shell9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/shell9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/shell9.test b/parser/testdata/shell9.test new file mode 100644 index 0000000..892f4f3 --- /dev/null +++ b/parser/testdata/shell9.test @@ -0,0 +1,38 @@ +==== 1.0 + + CREATE VIRTUAL TABLE t1 USING fts5(a, b, c); + INSERT INTO t1 VALUES('one', 'two', 'three'); +---- +stmt 0 ok +stmt 47 err 1 -1 95 no such table: t1 +==== 1.1.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 1.2.1 + + CREATE TABLE t4(hello); +---- +stmt 0 ok +==== 2.0.1 + + CREATE TABLE t1(x); + CREATE TABLE t2(y); + INSERT INTO t1 VALUES('one'); + INSERT INTO t2 VALUES('two'); +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 108 no such table: t2 +==== 2.1.1 + + CREATE virtual TABLE r1 USING fts5(x); +---- +stmt 0 ok +==== 3.1.0 + + CREATE TABLE t4(hello, check( hello IS NOT "xyz") ); +---- +stmt 0 ok diff --git a/parser/testdata/shmlock.metadata.json b/parser/testdata/shmlock.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/shmlock.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/shmlock.test b/parser/testdata/shmlock.test new file mode 100644 index 0000000..24176ab --- /dev/null +++ b/parser/testdata/shmlock.test @@ -0,0 +1,9 @@ +==== 1.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 29 ok +stmt 54 err 1 -1 85 no such table: t1 diff --git a/parser/testdata/shortread1.metadata.json b/parser/testdata/shortread1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/shortread1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/shortread1.test b/parser/testdata/shortread1.test new file mode 100644 index 0000000..4175564 --- /dev/null +++ b/parser/testdata/shortread1.test @@ -0,0 +1,27 @@ +==== shortread1-1.1 + + CREATE TABLE t1(a TEXT); + BEGIN; + INSERT INTO t1 VALUES(hex(randomblob(5000))); + INSERT INTO t1 VALUES(hex(randomblob(100))); + PRAGMA freelist_count; +---- +stmt 0 ok +stmt 29 ok +stmt 40 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 139 no such table: t1 +stmt 139 ok +==== shortread1-1.2 + + DELETE FROM t1 WHERE rowid=1; + PRAGMA freelist_count; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 ok +==== shortread1-1.4 + + COMMIT; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 41 no such table: t1 diff --git a/parser/testdata/sidedelete.metadata.json b/parser/testdata/sidedelete.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/sidedelete.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/sidedelete.test b/parser/testdata/sidedelete.test new file mode 100644 index 0000000..e35f9bf --- /dev/null +++ b/parser/testdata/sidedelete.test @@ -0,0 +1,20 @@ +==== sidedelete-2.0 + + CREATE TABLE t1(a PRIMARY KEY, b); + CREATE TABLE chng(a PRIMARY KEY, b); + SELECT count(*) FROM t1; + SELECT count(*) FROM chng; +---- +stmt 0 ok +stmt 39 ok +stmt 80 err 1 -1 109 no such table: t1 +stmt 109 err 1 -1 140 no such table: chng +==== sidedelete-3.0 + + DROP TABLE t1; + CREATE TABLE t1(a PRIMARY KEY); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 ok +stmt 57 err 1 -1 80 no such table: t1 diff --git a/parser/testdata/skipscan1.metadata.json b/parser/testdata/skipscan1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/skipscan1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/skipscan1.test b/parser/testdata/skipscan1.test new file mode 100644 index 0000000..e892897 --- /dev/null +++ b/parser/testdata/skipscan1.test @@ -0,0 +1,541 @@ +==== skipscan1-1.1 + + CREATE TABLE t1(a TEXT, b INT, c INT, d INT); + CREATE INDEX t1abc ON t1(a,b,c); + INSERT INTO t1 VALUES('abc',123,4,5); + INSERT INTO t1 VALUES('abc',234,5,6); + INSERT INTO t1 VALUES('abc',234,6,7); + INSERT INTO t1 VALUES('abc',345,7,8); + INSERT INTO t1 VALUES('def',567,8,9); + INSERT INTO t1 VALUES('def',345,9,10); + INSERT INTO t1 VALUES('bcd',100,6,11); + + /* Fake the sqlite_stat1 table so that the query planner believes + ** the table contains thousands of rows and that the first few + ** columns are not selective. */ + ANALYZE; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1 VALUES('t1','t1abc','10000 5000 2000 10'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 48 err 1 -1 83 no such table: main.t1 +stmt 83 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 203 no such table: t1 +stmt 203 err 1 -1 243 no such table: t1 +stmt 243 err 1 -1 283 no such table: t1 +stmt 283 err 1 -1 324 no such table: t1 +stmt 324 err 1 -1 365 no such table: t1 +stmt 365 ok +stmt 545 err 1 -1 573 no such table: sqlite_stat1 +stmt 573 err 1 -1 643 no such table: sqlite_stat1 +stmt 643 ok +==== skipscan1-1.2 + + SELECT a,b,c,d,'|' FROM t1 WHERE b=345 ORDER BY a; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== skipscan1-1.2eqp + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a; +---- +stmt 0 err 1 -1 84 no such table: t1 +==== skipscan1-1.2sort + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a; +---- +stmt 0 err 1 -1 84 no such table: t1 +==== skipscan1-1.3 + + SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a DESC; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== skipscan1-1.3eqp + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a DESC; +---- +stmt 0 err 1 -1 89 no such table: t1 +==== skipscan1-1.3sort + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE d<>99 AND b=345 ORDER BY a DESC; +---- +stmt 0 err 1 -1 89 no such table: t1 +==== skipscan1-1.4 + + SELECT a,b,c,d,'|' FROM t1 WHERE c=6 ORDER BY a, b, c; +---- +stmt 0 err 1 -1 57 no such table: t1 +==== skipscan1-1.4eqp + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE c=6 ORDER BY a, b, c; +---- +stmt 0 err 1 -1 78 no such table: t1 +==== skipscan1-1.4sort + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE c=6 ORDER BY a, b, c; +---- +stmt 0 err 1 -1 78 no such table: t1 +==== skipscan1-1.5 + + SELECT a,b,c,d,'|' FROM t1 WHERE c IN (6,7) ORDER BY a, b, c; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== skipscan1-1.5eqp + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE c IN (6,7) ORDER BY a, b, c; +---- +stmt 0 err 1 -1 85 no such table: t1 +==== skipscan1-1.5sort + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE c IN (6,7) ORDER BY a, b, c; +---- +stmt 0 err 1 -1 85 no such table: t1 +==== skipscan1-1.6 + + SELECT a,b,c,d,'|' FROM t1 WHERE c BETWEEN 6 AND 7 ORDER BY a, b, c; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== skipscan1-1.6eqp + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE c BETWEEN 6 AND 7 ORDER BY a, b, c; +---- +stmt 0 err 1 -1 92 no such table: t1 +==== skipscan1-1.6sort + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE c BETWEEN 6 AND 7 ORDER BY a, b, c; +---- +stmt 0 err 1 -1 92 no such table: t1 +==== skipscan1-1.7 + + SELECT a,b,c,d,'|' FROM t1 WHERE b IN (234, 345) AND c BETWEEN 6 AND 7 + ORDER BY a, b; +---- +stmt 0 err 1 -1 91 no such table: t1 +==== skipscan1-1.7eqp + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE b IN (234, 345) AND c BETWEEN 6 AND 7 + ORDER BY a, b; +---- +stmt 0 err 1 -1 112 no such table: t1 +==== skipscan1-1.7sort + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t1 WHERE b IN (234, 345) AND c BETWEEN 6 AND 7 + ORDER BY a, b; +---- +stmt 0 err 1 -1 112 no such table: t1 +==== skipscan1-1.51 + + CREATE TABLE t1j(x TEXT, y INTEGER); + INSERT INTO t1j VALUES('one',1),('six',6),('ninty-nine',99); + INSERT INTO sqlite_stat1 VALUES('t1j',null,'3'); + ANALYZE sqlite_master; + SELECT x, a, b, c, d, '|' FROM t1j, t1 WHERE c=y ORDER BY +a; +---- +stmt 0 ok +stmt 39 err 1 -1 102 no such table: t1j +stmt 102 err 1 -1 153 no such table: sqlite_stat1 +stmt 153 ok +stmt 178 err 1 -1 242 no such table: t1j +==== skipscan1-1.51eqp + + EXPLAIN QUERY PLAN + SELECT x, a, b, c, d, '|' FROM t1j, t1 WHERE c=y ORDER BY +a; +---- +stmt 0 err 1 -1 85 no such table: t1j +==== skipscan1-1.52 + + SELECT x, a, b, c, d, '|' FROM t1j LEFT JOIN t1 ON c=y ORDER BY +y, +a; +---- +stmt 0 err 1 -1 74 no such table: t1j +==== skipscan1-1.52eqp + + EXPLAIN QUERY PLAN + SELECT x, a, b, c, d, '|' FROM t1j LEFT JOIN t1 ON c=y ORDER BY +y, +a; +---- +stmt 0 err 1 -1 95 no such table: t1j +==== skipscan1-2.1 + + CREATE TABLE t2(a TEXT, b INT, c INT, d INT, + PRIMARY KEY(a,b,c)); + INSERT INTO t2 SELECT * FROM t1; + + /* Fake the sqlite_stat1 table so that the query planner believes + ** the table contains thousands of rows and that the first few + ** columns are not selective. */ + ANALYZE; + UPDATE sqlite_stat1 SET stat='10000 5000 2000 10' WHERE idx NOT NULL; + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 86 err 1 -1 121 no such table: t2 +stmt 121 ok +stmt 301 err 1 -1 373 no such table: sqlite_stat1 +stmt 373 ok +==== skipscan1-2.2 + + SELECT a,b,c,d,'|' FROM t2 WHERE d<>99 AND b=345 ORDER BY a; +---- +stmt 0 err 1 -1 63 no such table: t2 +==== skipscan1-2.2eqp + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t2 WHERE d<>99 AND b=345 ORDER BY a; +---- +stmt 0 err 1 -1 84 no such table: t2 +==== skipscan1-2.2sort + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t2 WHERE d<>99 AND b=345 ORDER BY a; +---- +stmt 0 err 1 -1 84 no such table: t2 +==== skipscan1-3.1 + + CREATE TABLE t3(a TEXT, b INT, c INT, d INT, + PRIMARY KEY(a,b,c)) WITHOUT ROWID; + INSERT INTO t3 SELECT * FROM t1; + + /* Fake the sqlite_stat1 table so that the query planner believes + ** the table contains thousands of rows and that the first few + ** columns are not selective. */ + ANALYZE; + UPDATE sqlite_stat1 SET stat='10000 5000 2000 10' WHERE idx NOT NULL; + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 100 err 1 -1 135 no such table: t3 +stmt 135 ok +stmt 315 err 1 -1 387 no such table: sqlite_stat1 +stmt 387 ok +==== skipscan1-3.2 + + SELECT a,b,c,d,'|' FROM t3 WHERE b=345 ORDER BY a; +---- +stmt 0 err 1 -1 53 no such table: t3 +==== skipscan1-3.2eqp + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t3 WHERE b=345 ORDER BY a; +---- +stmt 0 err 1 -1 74 no such table: t3 +==== skipscan1-3.2sort + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t3 WHERE b=345 ORDER BY a; +---- +stmt 0 err 1 -1 74 no such table: t3 +==== skipscan1-4.1 + + CREATE TABLE t4(a,b,c,d,e,f,g,h,i); + CREATE INDEX t4all ON t4(a,b,c,d,e,f,g,h); + INSERT INTO t4 VALUES(1,2,3,4,5,6,7,8,9); + ANALYZE; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1 + VALUES('t4','t4all','655360 163840 40960 10240 2560 640 160 40 10'); + ANALYZE sqlite_master; + SELECT i FROM t4 WHERE a=1; + SELECT i FROM t4 WHERE b=2; + SELECT i FROM t4 WHERE c=3; + SELECT i FROM t4 WHERE d=4; + SELECT i FROM t4 WHERE e=5; + SELECT i FROM t4 WHERE f=6; + SELECT i FROM t4 WHERE g=7; + SELECT i FROM t4 WHERE h=8; +---- +stmt 0 ok +stmt 38 err 1 -1 83 no such table: main.t4 +stmt 83 err 1 -1 127 no such table: t4 +stmt 127 ok +stmt 138 err 1 -1 166 no such table: sqlite_stat1 +stmt 166 err 1 -1 267 no such table: sqlite_stat1 +stmt 267 ok +stmt 292 err 1 -1 322 no such table: t4 +stmt 322 err 1 -1 352 no such table: t4 +stmt 352 err 1 -1 382 no such table: t4 +stmt 382 err 1 -1 412 no such table: t4 +stmt 412 err 1 -1 442 no such table: t4 +stmt 442 err 1 -1 472 no such table: t4 +stmt 472 err 1 -1 502 no such table: t4 +stmt 502 err 1 -1 532 no such table: t4 +==== skipscan1-5.1 + + CREATE TABLE t5( + id INTEGER PRIMARY KEY, + loc TEXT, + lang INTEGER, + utype INTEGER, + xa INTEGER, + xd INTEGER, + xh INTEGER + ); + CREATE INDEX t5i1 on t5(loc, xh, xa, utype, lang); + CREATE INDEX t5i2 ON t5(xd,loc,utype,lang); + EXPLAIN QUERY PLAN + SELECT xh, loc FROM t5 WHERE loc >= 'M' AND loc < 'N'; +---- +stmt 0 ok +stmt 150 err 1 -1 203 no such table: main.t5 +stmt 203 err 1 -1 249 no such table: main.t5 +stmt 249 err 1 -1 329 no such table: t5 +==== skipscan1-5.2 + + ANALYZE; + DELETE FROM sqlite_stat1; + DROP TABLE IF EXISTS sqlite_stat4; + INSERT INTO sqlite_stat1 VALUES('t5','t5i1','2702931 3 2 2 2 2'); + INSERT INTO sqlite_stat1 VALUES('t5','t5i2','2702931 686 2 2 2'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 11 err 1 -1 39 no such table: sqlite_stat1 +stmt 39 ok +stmt 76 err 1 -1 144 no such table: sqlite_stat1 +stmt 144 err 1 -1 212 no such table: sqlite_stat1 +stmt 212 ok +==== skipscan1-5.3 + + EXPLAIN QUERY PLAN + SELECT xh, loc FROM t5 WHERE loc >= 'M' AND loc < 'N'; +---- +stmt 0 err 1 -1 80 no such table: t5 +==== skipscan1-6.1 + + CREATE TABLE t1(a,b,c,d,e,f,g,h varchar(300)); + CREATE INDEX t1ab ON t1(a,b); + ANALYZE sqlite_master; + -- Only two distinct values for the skip-scan column. Skip-scan is not used. + INSERT INTO sqlite_stat1 VALUES('t1','t1ab','500000 250000 125000'); + ANALYZE sqlite_master; + EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=1; +---- +stmt 0 ok +stmt 49 err 1 -1 81 no such table: main.t1 +stmt 81 ok +stmt 106 err 1 -1 257 no such table: sqlite_stat1 +stmt 257 ok +stmt 282 err 1 -1 331 no such table: t1 +==== skipscan1-6.2 + + -- Four distinct values for the skip-scan column. Skip-scan is used. + UPDATE sqlite_stat1 SET stat='500000 250000 62500'; + ANALYZE sqlite_master; + EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=1; +---- +stmt 0 err 1 -1 126 no such table: sqlite_stat1 +stmt 126 ok +stmt 151 err 1 -1 200 no such table: t1 +==== skipscan1-6.3 + + -- Two distinct values for the skip-scan column again. Skip-scan is not used. + UPDATE sqlite_stat1 SET stat='500000 125000 62500'; + ANALYZE sqlite_master; + EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=1; +---- +stmt 0 err 1 -1 135 no such table: sqlite_stat1 +stmt 135 ok +stmt 160 err 1 -1 209 no such table: t1 +==== skipscan1-7.1 + + UPDATE sqlite_stat1 SET stat='500000 125000 1 sz=100'; + ANALYZE sqlite_master; + EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=1; +---- +stmt 0 err 1 -1 57 no such table: sqlite_stat1 +stmt 57 ok +stmt 82 err 1 -1 131 no such table: t1 +==== skipscan1-7.2 + + UPDATE sqlite_stat1 SET stat='500000 125000 1 noskipscan sz=100'; + ANALYZE sqlite_master; + EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=1; +---- +stmt 0 err 1 -1 68 no such table: sqlite_stat1 +stmt 68 ok +stmt 93 err 1 -1 142 no such table: t1 +==== skipscan1-7.3 + + UPDATE sqlite_stat1 SET stat='500000 125000 1 sz=100 noskipscan'; + ANALYZE sqlite_master; + EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=1; +---- +stmt 0 err 1 -1 68 no such table: sqlite_stat1 +stmt 68 ok +stmt 93 err 1 -1 142 no such table: t1 +==== skipscan1-8.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x, y, PRIMARY KEY(x,y)) WITHOUT ROWID; + INSERT INTO t1(x,y) VALUES(1,'AB'); + INSERT INTO t1(x,y) VALUES(2,'CD'); + ANALYZE; + DROP TABLE IF EXISTS sqlite_stat4; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES('t1','t1','1000000 100 1'); + ANALYZE sqlite_master; + SELECT * FROM t1 + WHERE (y = 'AB' AND x <= 4) + OR (y = 'EF' AND x = 5); +---- +stmt 0 ok +stmt 27 ok +stmt 84 err 1 -1 122 no such table: t1 +stmt 122 err 1 -1 160 no such table: t1 +stmt 160 ok +stmt 171 ok +stmt 208 err 1 -1 236 no such table: sqlite_stat1 +stmt 236 err 1 -1 312 no such table: sqlite_stat1 +stmt 312 ok +stmt 337 err 1 -1 418 no such table: t1 +==== skipscan1-8.1eqp + + EXPLAIN QUERY PLAN + SELECT * FROM t1 + WHERE (y = 'AB' AND x <= 4) + OR (y = 'EF' AND x = 5); +---- +stmt 0 err 1 -1 102 no such table: t1 +==== skipscan1-8.2 + + SELECT * FROM t1 + WHERE y = 'AB' OR (y = 'CD' AND x = 2) + ORDER BY +x; +---- +stmt 0 err 1 -1 76 no such table: t1 +==== skipscan1-9.2 + + CREATE TABLE t9a(a,b,c); + CREATE INDEX t9a_ab ON t9a(a,b); + CREATE TABLE t9b(x,y); + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('t9a','t9a_ab','1000000 250000 1'); + ANALYZE sqlite_master; + EXPLAIN QUERY PLAN + SELECT * FROM t9a WHERE b IN (SELECT x FROM t9b WHERE y!=5); +---- +stmt 0 ok +stmt 27 err 1 -1 62 no such table: main.t9a +stmt 62 ok +stmt 87 ok +stmt 112 err 1 -1 182 no such table: sqlite_stat1 +stmt 182 ok +stmt 207 err 1 -1 291 no such table: t9a +==== skipscan1-9.3 + + EXPLAIN QUERY PLAN + SELECT * FROM t9a WHERE b IN (SELECT x FROM t9b WHERE y!=5); +---- +stmt 0 err 1 -1 85 no such table: t9a +==== skipscan1-2.1.dup1 + + CREATE TABLE t6(a TEXT, b INT, c INT, d INT); + CREATE INDEX t6abc ON t6(a,b,c); + INSERT INTO t6 VALUES('abc',123,4,5); + + ANALYZE; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1 VALUES('t6','t6abc','10000 5000 2000 10'); + ANALYZE sqlite_master; + DELETE FROM t6; +---- +stmt 0 ok +stmt 48 err 1 -1 83 no such table: main.t6 +stmt 83 err 1 -1 123 no such table: t6 +stmt 123 ok +stmt 135 err 1 -1 163 no such table: sqlite_stat1 +stmt 163 err 1 -1 233 no such table: sqlite_stat1 +stmt 233 ok +stmt 258 err 1 -1 276 no such table: t6 +==== skipscan1-2.2eqp.dup1 + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t6 WHERE d<>99 AND b=345 ORDER BY a; +---- +stmt 0 err 1 -1 84 no such table: t6 +==== skipscan1-2.2.dup1 + + SELECT a,b,c,d,'|' FROM t6 WHERE d<>99 AND b=345 ORDER BY a; +---- +stmt 0 err 1 -1 63 no such table: t6 +==== skipscan1-2.3eqp + + EXPLAIN QUERY PLAN + SELECT a,b,c,d,'|' FROM t6 WHERE d<>99 AND b=345 ORDER BY a DESC; +---- +stmt 0 err 1 -1 89 no such table: t6 +==== skipscan1-2.3 + + SELECT a,b,c,d,'|' FROM t6 WHERE d<>99 AND b=345 ORDER BY a DESC; +---- +stmt 0 err 1 -1 68 no such table: t6 +==== skipscan1-3.1.dup1 + + CREATE TABLE t1 (c1, c2, c3, c4, PRIMARY KEY(c4, c3)); + INSERT INTO t1 VALUES(3,0,1,NULL); + INSERT INTO t1 VALUES(0,4,1,NULL); + INSERT INTO t1 VALUES(5,6,1,NULL); + INSERT INTO t1 VALUES(0,4,1,NULL); + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('t1','sqlite_autoindex_t1_1','18 18 6'); + ANALYZE sqlite_master; + SELECT DISTINCT quote(c1), quote(c2), quote(c3), quote(c4), '|' + FROM t1 WHERE t1.c3 = 1; +---- +stmt 0 ok +stmt 57 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 168 no such table: t1 +stmt 168 err 1 -1 205 no such table: t1 +stmt 205 ok +stmt 230 err 1 -1 305 no such table: sqlite_stat1 +stmt 305 ok +stmt 330 err 1 -1 425 no such table: t1 +==== skipscan1-4.10 + + CREATE TABLE t1(a,b INT); + INSERT INTO t1(a,b) VALUES(1,2),(3,3),(4,5); + CREATE UNIQUE INDEX i1 ON t1(b,b,a,a,a,a,a,b,a); + ANALYZE; + DROP TABLE IF EXISTS sqlite_stat4; + INSERT INTO sqlite_stat1 VALUES('t1','i1','30 30 30 2 2 2 2 2 2 2'); + ANALYZE sqlite_master; + + SELECT DISTINCT a + FROM t1 + WHERE a = b + AND a = 3 + AND b IN (1,3,2,4) + AND b >= 0 + AND a <= 10; +---- +stmt 0 ok +stmt 28 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 126 no such table: main.t1 +stmt 126 ok +stmt 137 ok +stmt 174 err 1 -1 245 no such table: sqlite_stat1 +stmt 245 ok +stmt 270 err 1 -1 391 no such table: t1 +==== skipscan1-5.0 + + CREATE TABLE t1(a TEXT, UNIQUE(a,a,a)); + INSERT INTO t1 VALUES (hex(zeroblob(241))),(1),(2),(3); + ANALYZE; + SELECT max(a) FROM t1 WHERE a IN t1; +---- +stmt 0 ok +stmt 42 err 1 -1 100 no such table: t1 +stmt 100 ok +stmt 111 err 1 -1 150 no such table: t1 diff --git a/parser/testdata/skipscan2.metadata.json b/parser/testdata/skipscan2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/skipscan2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/skipscan2.test b/parser/testdata/skipscan2.test new file mode 100644 index 0000000..af6ab09 --- /dev/null +++ b/parser/testdata/skipscan2.test @@ -0,0 +1,227 @@ +==== skipscan2-1.1 + + CREATE TABLE people( + name TEXT PRIMARY KEY, + role TEXT NOT NULL, + height INT NOT NULL, -- in cm + CHECK( role IN ('student','teacher') ) + ); + CREATE INDEX people_idx1 ON people(role, height); +---- +stmt 0 ok +stmt 156 err 1 -1 208 no such table: main.people +==== skipscan2-1.2 + + INSERT INTO people VALUES('Alice','student',156); + INSERT INTO people VALUES('Bob','student',161); + INSERT INTO people VALUES('Cindy','student',155); + INSERT INTO people VALUES('David','student',181); + INSERT INTO people VALUES('Emily','teacher',158); + INSERT INTO people VALUES('Fred','student',163); + INSERT INTO people VALUES('Ginny','student',169); + INSERT INTO people VALUES('Harold','student',172); + INSERT INTO people VALUES('Imma','student',179); + INSERT INTO people VALUES('Jack','student',181); + INSERT INTO people VALUES('Karen','student',163); + INSERT INTO people VALUES('Logan','student',177); + INSERT INTO people VALUES('Megan','teacher',159); + INSERT INTO people VALUES('Nathan','student',163); + INSERT INTO people VALUES('Olivia','student',161); + INSERT INTO people VALUES('Patrick','teacher',180); + INSERT INTO people VALUES('Quiana','student',182); + INSERT INTO people VALUES('Robert','student',159); + INSERT INTO people VALUES('Sally','student',166); + INSERT INTO people VALUES('Tom','student',171); + INSERT INTO people VALUES('Ursula','student',170); + INSERT INTO people VALUES('Vance','student',179); + INSERT INTO people VALUES('Willma','student',175); + INSERT INTO people VALUES('Xavier','teacher',185); + INSERT INTO people VALUES('Yvonne','student',149); + INSERT INTO people VALUES('Zach','student',170); +---- +stmt 0 err 1 -1 52 no such table: people +stmt 52 err 1 -1 102 no such table: people +stmt 102 err 1 -1 154 no such table: people +stmt 154 err 1 -1 206 no such table: people +stmt 206 err 1 -1 258 no such table: people +stmt 258 err 1 -1 309 no such table: people +stmt 309 err 1 -1 361 no such table: people +stmt 361 err 1 -1 414 no such table: people +stmt 414 err 1 -1 465 no such table: people +stmt 465 err 1 -1 516 no such table: people +stmt 516 err 1 -1 568 no such table: people +stmt 568 err 1 -1 620 no such table: people +stmt 620 err 1 -1 672 no such table: people +stmt 672 err 1 -1 725 no such table: people +stmt 725 err 1 -1 778 no such table: people +stmt 778 err 1 -1 832 no such table: people +stmt 832 err 1 -1 885 no such table: people +stmt 885 err 1 -1 938 no such table: people +stmt 938 err 1 -1 990 no such table: people +stmt 990 err 1 -1 1040 no such table: people +stmt 1040 err 1 -1 1093 no such table: people +stmt 1093 err 1 -1 1145 no such table: people +stmt 1145 err 1 -1 1198 no such table: people +stmt 1198 err 1 -1 1251 no such table: people +stmt 1251 err 1 -1 1304 no such table: people +stmt 1304 err 1 -1 1355 no such table: people +==== skipscan2-1.3 + + SELECT name FROM people WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 60 no such table: people +==== skipscan2-1.3eqp + + EXPLAIN QUERY PLAN + SELECT name FROM people WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 81 no such table: people +==== skipscan2-1.4 + + ANALYZE; + -- We do not have enough people above to actually force the use + -- of a skip-scan. So make a manual adjustment to the stat1 table + -- to make it seem like there are many more. + UPDATE sqlite_stat1 SET stat='10000 5000 20' WHERE idx='people_idx1'; + UPDATE sqlite_stat1 SET stat='10000 1' WHERE idx='sqlite_autoindex_people_1'; + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 11 err 1 -1 265 no such table: sqlite_stat1 +stmt 265 err 1 -1 345 no such table: sqlite_stat1 +stmt 345 ok +==== skipscan2-1.5 + + SELECT name FROM people WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 60 no such table: people +==== skipscan2-1.5eqp + + EXPLAIN QUERY PLAN + SELECT name FROM people WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 81 no such table: people +==== skipscan2-1.6 + + SELECT name FROM people + WHERE role IN (SELECT DISTINCT role FROM people) + AND height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 115 no such table: people +==== skipscan2-1.7 + + SELECT name FROM people WHERE role='teacher' AND height>=180 + UNION ALL + SELECT name FROM people WHERE role='student' AND height>=180 + ORDER BY 1; +---- +stmt 0 err 1 -1 152 no such table: people +==== skipscan2-1.8 + + INSERT INTO people VALUES('Angie','student',166); + INSERT INTO people VALUES('Brad','student',176); + INSERT INTO people VALUES('Claire','student',168); + INSERT INTO people VALUES('Donald','student',162); + INSERT INTO people VALUES('Elaine','student',177); + INSERT INTO people VALUES('Frazier','student',159); + INSERT INTO people VALUES('Grace','student',179); + INSERT INTO people VALUES('Horace','student',166); + ANALYZE; + SELECT stat FROM sqlite_stat1 WHERE idx='people_idx1'; +---- +stmt 0 err 1 -1 52 no such table: people +stmt 52 err 1 -1 103 no such table: people +stmt 103 err 1 -1 156 no such table: people +stmt 156 err 1 -1 209 no such table: people +stmt 209 err 1 -1 262 no such table: people +stmt 262 err 1 -1 316 no such table: people +stmt 316 err 1 -1 368 no such table: people +stmt 368 err 1 -1 421 no such table: people +stmt 421 ok +stmt 432 err 1 -1 489 no such table: sqlite_stat1 +==== skipscan2-1.9 + + SELECT name FROM people WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 60 no such table: people +==== skipscan2-1.9eqp + + EXPLAIN QUERY PLAN + SELECT name FROM people WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 81 no such table: people +==== skipscan2-1.10 + + INSERT INTO people VALUES('Ingrad','student',155); + INSERT INTO people VALUES('Jacob','student',179); + ANALYZE; + SELECT stat FROM sqlite_stat1 WHERE idx='people_idx1'; +---- +stmt 0 err 1 -1 53 no such table: people +stmt 53 err 1 -1 105 no such table: people +stmt 105 ok +stmt 116 err 1 -1 173 no such table: sqlite_stat1 +==== skipscan2-1.11 + + SELECT name FROM people WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 60 no such table: people +==== skipscan2-1.11eqp + + EXPLAIN QUERY PLAN + SELECT name FROM people WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 81 no such table: people +==== skipscan2-2.1 + + CREATE TABLE peoplew( + name TEXT PRIMARY KEY, + role TEXT NOT NULL, + height INT NOT NULL, -- in cm + CHECK( role IN ('student','teacher') ) + ) WITHOUT ROWID; + CREATE INDEX peoplew_idx1 ON peoplew(role, height); + INSERT INTO peoplew(name,role,height) + SELECT name, role, height FROM people; + SELECT name FROM peoplew WHERE height>=180 ORDER BY +name; +---- +stmt 0 ok +stmt 171 err 1 -1 225 no such table: main.peoplew +stmt 225 err 1 -1 310 no such table: peoplew +stmt 310 err 1 -1 371 no such table: peoplew +==== skipscan2-2.2 + + SELECT name FROM peoplew + WHERE role IN (SELECT DISTINCT role FROM peoplew) + AND height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 117 no such table: peoplew +==== skipscan2-2.2.dup1 + + SELECT name FROM peoplew WHERE role='teacher' AND height>=180 + UNION ALL + SELECT name FROM peoplew WHERE role='student' AND height>=180 + ORDER BY 1; +---- +stmt 0 err 1 -1 154 no such table: peoplew +==== skipscan2-2.4 + + ANALYZE; +---- +stmt 0 ok +==== skipscan2-2.5 + + SELECT name FROM peoplew WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 61 no such table: peoplew +==== skipscan2-2.5eqp + + EXPLAIN QUERY PLAN + SELECT name FROM peoplew WHERE height>=180 ORDER BY +name; +---- +stmt 0 err 1 -1 82 no such table: peoplew +==== skipscan2-3.1 + + CREATE TABLE t3(a, b, c, PRIMARY KEY(a, b)) WITHOUT ROWID; +---- +stmt 0 ok diff --git a/parser/testdata/skipscan3.metadata.json b/parser/testdata/skipscan3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/skipscan3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/skipscan3.test b/parser/testdata/skipscan3.test new file mode 100644 index 0000000..4977fc5 --- /dev/null +++ b/parser/testdata/skipscan3.test @@ -0,0 +1,64 @@ +==== skipscan3-1.1 + + CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,b,c)); + WITH RECURSIVE + c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000) + INSERT INTO t1(a,b,c,d) + SELECT 1, 1, x, printf('x%04d',x) FROM c; + ANALYZE; +---- +stmt 0 ok +stmt 47 err 1 -1 201 no such table: t1 +stmt 201 ok +==== skipscan3-1.2eqp + + EXPLAIN QUERY PLAN SELECT d FROM t1 WHERE +a=1 AND c=32; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== skipscan3-1.2 + + SELECT d FROM t1 WHERE +a=1 AND c=32; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== skipscan3-1.3eqp + + EXPLAIN QUERY PLAN SELECT d FROM t1 WHERE a=1 AND c=32; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== skipscan3-1.3 + + SELECT d FROM t1 WHERE a=1 AND c=32; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== skipscan3-2.1 + + CREATE TABLE t2(a,b,c,d,PRIMARY KEY(a,b,c)) WITHOUT ROWID; + WITH RECURSIVE + c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000) + INSERT INTO t2(a,b,c,d) + SELECT 1, 1, x, printf('x%04d',x) FROM c; + ANALYZE; +---- +stmt 0 ok +stmt 61 err 1 -1 215 no such table: t2 +stmt 215 ok +==== skipscan3-2.2eqp + + EXPLAIN QUERY PLAN SELECT d FROM t2 WHERE +a=1 AND c=32; +---- +stmt 0 err 1 -1 59 no such table: t2 +==== skipscan3-2.2 + + SELECT d FROM t2 WHERE +a=1 AND c=32; +---- +stmt 0 err 1 -1 40 no such table: t2 +==== skipscan3-2.3eqp + + EXPLAIN QUERY PLAN SELECT d FROM t2 WHERE a=1 AND c=32; +---- +stmt 0 err 1 -1 58 no such table: t2 +==== skipscan3-2.3 + + SELECT d FROM t2 WHERE a=1 AND c=32; +---- +stmt 0 err 1 -1 39 no such table: t2 diff --git a/parser/testdata/skipscan5.metadata.json b/parser/testdata/skipscan5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/skipscan5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/skipscan5.test b/parser/testdata/skipscan5.test new file mode 100644 index 0000000..1977e0a --- /dev/null +++ b/parser/testdata/skipscan5.test @@ -0,0 +1,21 @@ +==== 1.1 + + CREATE TABLE t1(a INT, b INT, c INT); + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 40 err 1 -1 71 no such table: main.t1 +==== skipscan5-generated + + CREATE TABLE t2(a TEXT, b TEXT, c TEXT COLLATE test_collate, d TEXT); + CREATE INDEX i2 ON t2(a, b, c); +---- +stmt 0 err 1 -1 65 no such collation sequence: test_collate +stmt 74 err 1 -1 110 no such table: main.t2 +==== 3.1 + + CREATE TABLE t3(a, b, c); + CREATE INDEX i3 ON t3(a, b); +---- +stmt 0 ok +stmt 28 err 1 -1 59 no such table: main.t3 diff --git a/parser/testdata/skipscan6.metadata.json b/parser/testdata/skipscan6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/skipscan6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/skipscan6.test b/parser/testdata/skipscan6.test new file mode 100644 index 0000000..5684346 --- /dev/null +++ b/parser/testdata/skipscan6.test @@ -0,0 +1,233 @@ +==== 1.1 + + CREATE TABLE t1( + aa int, + bb int, + cc int, + dd int, + ee int + ); + CREATE INDEX ix on t1(aa, bb, cc, dd DESC); + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('t1','ix','2695116 1347558 264 18 2'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 196859 196859 32 1','0 15043 15043 92468 92499','0 19 286 81846 92499',X'0609010804031552977BD725BD28'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 14687 161 1 1','0 289067 299306 299457 299457','0 199 6772 273984 299457',X'060902020403013406314D67456415B819'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 19313 19308 22 1','0 325815 325815 343725 343746','0 261 9545 315009 343746',X'060902080403018A49B0A3AD1ED931'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 25047 9051 15 1','0 350443 350443 356590 356604','0 266 9795 325519 356604',X'06090208040301914C2DD2E91F93CF'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 42327 9906 7 1','0 376381 376381 380291 380297','0 268 10100 344232 380297',X'06090208040301934BF672511F7ED3'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 24513 2237 1 1','0 455150 467779 470015 470015','0 286 10880 425401 470015',X'06090202040301A703464A28F2611EF1EE'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 18730 18724 15 1','0 479663 479663 498271 498285','0 287 10998 450793 498285',X'06090208040301A8494AF3A41EC50C'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 119603 47125 1 1','0 572425 572425 598915 598915','0 404 14230 546497 598915',X'06090208040302474FD1929A03194F'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 1454 1454 1 1','0 898346 898346 898373 898373','0 952 31165 827562 898373',X'06090208040304FD53F6A2A2097F64'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 57138 7069 1 1','0 1122389 1122389 1129457 1129457','0 1967 46801 1045943 1129457',X'06090208040309884BC4C52F1F6EB7'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 285 11 1 1','0 1197683 1197824 1197831 1197831','0 2033 50990 1112280 1197831',X'06090202040309D80346503FE2A9038E4F'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 25365 9773 1 1','0 1301013 1301013 1310785 1310785','0 2561 58806 1217877 1310785',X'0609020804030C5F4C8F88AB0AF2A2'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 45180 7222 1 1','0 1326378 1326378 1333599 1333599','0 2562 59921 1240187 1333599',X'0609020804030C604CAB75490B0351'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 8537 41 1 1','0 1496959 1497288 1497289 1497289','0 3050 68246 1394126 1497289',X'0609020204030EA0057F527459B0257C4B'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 26139 26131 17 1','0 1507977 1507977 1520578 1520594','0 3074 69188 1416111 1520594',X'0609020804030EB95169453423D4EA'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 102894 29678 1 1','0 1537421 1550467 1564894 1564894','0 3109 69669 1459820 1564894',X'0609020204030EE3183652A6ED3006EBCB'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 319 3 1 1','0 1796728 1796746 1796747 1796747','0 3650 86468 1682243 1796747',X'0609020204031163033550D0C41018C28D'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 127 127 1 1','0 2096194 2096194 2096205 2096205','0 5145 106437 1951535 2096205',X'060902080403180F53BB1AF727EE50'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 66574 5252 1 1','0 2230524 2265961 2271212 2271212','0 5899 114976 2085829 2271212',X'0609020204031B8A05195009976D223B90'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 19440 19440 1 1','0 2391680 2391680 2395663 2395663','0 6718 123714 2184781 2395663',X'0609020804031F7452E00A7B07431A'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 18321 2177 1 1','0 2522928 2523231 2525407 2525407','0 7838 139084 2299958 2525407',X'06090201040324A7475231103B1AA7B8'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 22384 1361 1 1','0 2541249 2544834 2546194 2546194','0 7839 139428 2308416 2546194',X'06090202040324A8011652323D4B1AA9EB'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','2677151 18699 855 1 1','0 2563633 2578178 2579032 2579032','0 7840 139947 2321671 2579032',X'06090202040324A9077452323D7D1052C5'); + INSERT INTO sqlite_stat4 VALUES('t1','ix','17965 1579 1579 1 1','2677151 2690666 2690666 2692244 2692244','1 9870 153959 2418294 2692244',X'060102080403021B8A4FE1AB84032B35'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 83 err 1 -1 130 no such table: main.t1 +stmt 130 ok +stmt 155 err 1 -1 228 no such table: sqlite_stat1 +stmt 228 err 1 -1 386 no such table: sqlite_stat4 +stmt 386 err 1 -1 553 no such table: sqlite_stat4 +stmt 553 err 1 -1 719 no such table: sqlite_stat4 +stmt 719 err 1 -1 884 no such table: sqlite_stat4 +stmt 884 err 1 -1 1049 no such table: sqlite_stat4 +stmt 1049 err 1 -1 1218 no such table: sqlite_stat4 +stmt 1218 err 1 -1 1385 no such table: sqlite_stat4 +stmt 1385 err 1 -1 1552 no such table: sqlite_stat4 +stmt 1552 err 1 -1 1716 no such table: sqlite_stat4 +stmt 1716 err 1 -1 1888 no such table: sqlite_stat4 +stmt 1888 err 1 -1 2060 no such table: sqlite_stat4 +stmt 2060 err 1 -1 2232 no such table: sqlite_stat4 +stmt 2232 err 1 -1 2404 no such table: sqlite_stat4 +stmt 2404 err 1 -1 2577 no such table: sqlite_stat4 +stmt 2577 err 1 -1 2751 no such table: sqlite_stat4 +stmt 2751 err 1 -1 2929 no such table: sqlite_stat4 +stmt 2929 err 1 -1 3100 no such table: sqlite_stat4 +stmt 3100 err 1 -1 3270 no such table: sqlite_stat4 +stmt 3270 err 1 -1 3447 no such table: sqlite_stat4 +stmt 3447 err 1 -1 3621 no such table: sqlite_stat4 +stmt 3621 err 1 -1 3796 no such table: sqlite_stat4 +stmt 3796 err 1 -1 3973 no such table: sqlite_stat4 +stmt 3973 err 1 -1 4149 no such table: sqlite_stat4 +stmt 4149 err 1 -1 4327 no such table: sqlite_stat4 +stmt 4327 ok +==== 1.2 + + EXPLAIN QUERY PLAN + SELECT COUNT(*) + FROM t1 + WHERE bb=21 + AND aa=1 + AND dd BETWEEN 1413833728 and 1413837331; +---- +stmt 0 err 1 -1 127 no such table: t1 +==== 2.1 + + DROP INDEX ix; + CREATE INDEX good on t1(bb, aa, dd DESC); + CREATE INDEX bad on t1(aa, bb, cc, dd DESC); + DELETE FROM sqlite_stat1; + DELETE FROM sqlite_stat4; + INSERT INTO sqlite_stat1 VALUES('t1','good','2695116 299 264 2'); + INSERT INTO sqlite_stat1 VALUES('t1','bad','2695116 1347558 264 18 2'); + INSERT INTO sqlite_stat4 VALUES('t1','good','197030 196859 32 1','15086 15086 92511 92536','19 25 81644 92536',X'05010904031552977BD725BD22'); + INSERT INTO sqlite_stat4 VALUES('t1','good','14972 14687 1 1','289878 289878 299457 299457','199 244 267460 299457',X'050209040301344F7E569402C419'); + INSERT INTO sqlite_stat4 VALUES('t1','good','19600 19313 22 1','327127 327127 346222 346243','261 319 306884 346243',X'0502090403018A49503BC01EC577'); + INSERT INTO sqlite_stat4 VALUES('t1','good','25666 25047 15 1','352087 352087 372692 372706','266 327 325601 372706',X'050209040301914C2DD2E91F93CF'); + INSERT INTO sqlite_stat4 VALUES('t1','good','42392 42327 26 1','378657 378657 382547 382572','268 331 333529 382572',X'05020904030193533B2FE326ED48'); + INSERT INTO sqlite_stat4 VALUES('t1','good','24619 24513 11 1','457872 457872 461748 461758','286 358 399322 461758',X'050209040301A752B1557825EA7C'); + INSERT INTO sqlite_stat4 VALUES('t1','good','18969 18730 15 1','482491 482491 501105 501119','287 360 433605 501119',X'050209040301A8494AF3A41EC50C'); + INSERT INTO sqlite_stat4 VALUES('t1','good','119710 119603 1 1','576500 576500 598915 598915','404 505 519877 598915',X'05020904030247539A7A7912F617'); + INSERT INTO sqlite_stat4 VALUES('t1','good','11955 11946 1 1','889796 889796 898373 898373','938 1123 794694 898373',X'050209040304EF4DF9C4150BBB28'); + INSERT INTO sqlite_stat4 VALUES('t1','good','57197 57138 24 1','1129865 1129865 1151492 1151515','1967 2273 1027048 1151515',X'05020904030988533510BC26E20A'); + INSERT INTO sqlite_stat4 VALUES('t1','good','3609 3543 1 1','1196265 1196265 1197831 1197831','2002 2313 1070108 1197831',X'050209040309B050E95CD718D94D'); + INSERT INTO sqlite_stat4 VALUES('t1','good','25391 25365 13 1','1309378 1309378 1315567 1315579','2561 2936 1178358 1315579',X'05020904030C5F53DF9E13283570'); + INSERT INTO sqlite_stat4 VALUES('t1','good','45232 45180 17 1','1334769 1334769 1337946 1337962','2562 2938 1198998 1337962',X'05020904030C60541CACEE28BCAC'); + INSERT INTO sqlite_stat4 VALUES('t1','good','5496 5493 1 1','1495882 1495882 1497289 1497289','3043 3479 1348695 1497289',X'05020904030E99515C62AD0F0B34'); + INSERT INTO sqlite_stat4 VALUES('t1','good','26348 26139 17 1','1517381 1517381 1529990 1530006','3074 3519 1378320 1530006',X'05020904030EB95169453423D4EA'); + INSERT INTO sqlite_stat4 VALUES('t1','good','102927 102894 10 1','1547088 1547088 1649950 1649959','3109 3559 1494260 1649959',X'05020904030EE34D309F671FFA47'); + INSERT INTO sqlite_stat4 VALUES('t1','good','3602 3576 1 1','1793873 1793873 1796747 1796747','3601 4128 1630783 1796747',X'050209040311294FE88B432219B9'); + INSERT INTO sqlite_stat4 VALUES('t1','good','154 154 1 1','2096059 2096059 2096205 2096205','5037 5779 1893039 2096205',X'050209040317994EFF05A016DCED'); + INSERT INTO sqlite_stat4 VALUES('t1','good','68153 66574 60 1','2244039 2244039 2268892 2268951','5899 6749 2027553 2268951',X'05020904031B8A532DBC5A26D2BA'); + INSERT INTO sqlite_stat4 VALUES('t1','good','321 321 1 1','2395618 2395618 2395663 2395663','6609 7528 2118435 2395663',X'05020904031EFA54078EEE1E2D65'); + INSERT INTO sqlite_stat4 VALUES('t1','good','19449 19440 22 1','2407769 2407769 2426049 2426070','6718 7651 2146904 2426070',X'05020904031F7450E6118C2336BD'); + INSERT INTO sqlite_stat4 VALUES('t1','good','18383 18321 56 1','2539949 2539949 2551080 2551135','7838 8897 2245459 2551135',X'050209040324A752EA2E1E2642B2'); + INSERT INTO sqlite_stat4 VALUES('t1','good','22479 22384 60 1','2558332 2558332 2565233 2565292','7839 8899 2251202 2565292',X'050209040324A853926538279A5F'); + INSERT INTO sqlite_stat4 VALUES('t1','good','18771 18699 63 1','2580811 2580811 2596914 2596976','7840 8901 2263572 2596976',X'050209040324A9526C1DE9256E72'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 196859 196859 32 1','0 15043 15043 92468 92499','0 19 286 81846 92499',X'0609010804031552977BD725BD28'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 14687 161 1 1','0 289067 299306 299457 299457','0 199 6772 273984 299457',X'060902020403013406314D67456415B819'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 19313 19308 22 1','0 325815 325815 343725 343746','0 261 9545 315009 343746',X'060902080403018A49B0A3AD1ED931'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 25047 9051 15 1','0 350443 350443 356590 356604','0 266 9795 325519 356604',X'06090208040301914C2DD2E91F93CF'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 42327 9906 7 1','0 376381 376381 380291 380297','0 268 10100 344232 380297',X'06090208040301934BF672511F7ED3'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 24513 2237 1 1','0 455150 467779 470015 470015','0 286 10880 425401 470015',X'06090202040301A703464A28F2611EF1EE'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 18730 18724 15 1','0 479663 479663 498271 498285','0 287 10998 450793 498285',X'06090208040301A8494AF3A41EC50C'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 119603 47125 1 1','0 572425 572425 598915 598915','0 404 14230 546497 598915',X'06090208040302474FD1929A03194F'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 1454 1454 1 1','0 898346 898346 898373 898373','0 952 31165 827562 898373',X'06090208040304FD53F6A2A2097F64'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 57138 7069 1 1','0 1122389 1122389 1129457 1129457','0 1967 46801 1045943 1129457',X'06090208040309884BC4C52F1F6EB7'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 285 11 1 1','0 1197683 1197824 1197831 1197831','0 2033 50990 1112280 1197831',X'06090202040309D80346503FE2A9038E4F'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 25365 9773 1 1','0 1301013 1301013 1310785 1310785','0 2561 58806 1217877 1310785',X'0609020804030C5F4C8F88AB0AF2A2'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 45180 7222 1 1','0 1326378 1326378 1333599 1333599','0 2562 59921 1240187 1333599',X'0609020804030C604CAB75490B0351'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 8537 41 1 1','0 1496959 1497288 1497289 1497289','0 3050 68246 1394126 1497289',X'0609020204030EA0057F527459B0257C4B'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 26139 26131 17 1','0 1507977 1507977 1520578 1520594','0 3074 69188 1416111 1520594',X'0609020804030EB95169453423D4EA'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 102894 29678 1 1','0 1537421 1550467 1564894 1564894','0 3109 69669 1459820 1564894',X'0609020204030EE3183652A6ED3006EBCB'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 319 3 1 1','0 1796728 1796746 1796747 1796747','0 3650 86468 1682243 1796747',X'0609020204031163033550D0C41018C28D'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 127 127 1 1','0 2096194 2096194 2096205 2096205','0 5145 106437 1951535 2096205',X'060902080403180F53BB1AF727EE50'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 66574 5252 1 1','0 2230524 2265961 2271212 2271212','0 5899 114976 2085829 2271212',X'0609020204031B8A05195009976D223B90'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 19440 19440 1 1','0 2391680 2391680 2395663 2395663','0 6718 123714 2184781 2395663',X'0609020804031F7452E00A7B07431A'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 18321 2177 1 1','0 2522928 2523231 2525407 2525407','0 7838 139084 2299958 2525407',X'06090201040324A7475231103B1AA7B8'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 22384 1361 1 1','0 2541249 2544834 2546194 2546194','0 7839 139428 2308416 2546194',X'06090202040324A8011652323D4B1AA9EB'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','2677151 18699 855 1 1','0 2563633 2578178 2579032 2579032','0 7840 139947 2321671 2579032',X'06090202040324A9077452323D7D1052C5'); + INSERT INTO sqlite_stat4 VALUES('t1','bad','17965 1579 1579 1 1','2677151 2690666 2690666 2692244 2692244','1 9870 153959 2418294 2692244',X'060102080403021B8A4FE1AB84032B35'); + ANALYZE sqlite_master; +---- +stmt 0 err 1 -1 17 no such index: ix +stmt 17 err 1 -1 61 no such table: main.t1 +stmt 61 err 1 -1 109 no such table: main.t1 +stmt 109 err 1 -1 137 no such table: sqlite_stat1 +stmt 137 err 1 -1 165 no such table: sqlite_stat4 +stmt 165 err 1 -1 233 no such table: sqlite_stat1 +stmt 233 err 1 -1 307 no such table: sqlite_stat1 +stmt 307 err 1 -1 452 no such table: sqlite_stat4 +stmt 452 err 1 -1 604 no such table: sqlite_stat4 +stmt 604 err 1 -1 757 no such table: sqlite_stat4 +stmt 757 err 1 -1 910 no such table: sqlite_stat4 +stmt 910 err 1 -1 1063 no such table: sqlite_stat4 +stmt 1063 err 1 -1 1216 no such table: sqlite_stat4 +stmt 1216 err 1 -1 1369 no such table: sqlite_stat4 +stmt 1369 err 1 -1 1523 no such table: sqlite_stat4 +stmt 1523 err 1 -1 1676 no such table: sqlite_stat4 +stmt 1676 err 1 -1 1837 no such table: sqlite_stat4 +stmt 1837 err 1 -1 1995 no such table: sqlite_stat4 +stmt 1995 err 1 -1 2156 no such table: sqlite_stat4 +stmt 2156 err 1 -1 2317 no such table: sqlite_stat4 +stmt 2317 err 1 -1 2475 no such table: sqlite_stat4 +stmt 2475 err 1 -1 2636 no such table: sqlite_stat4 +stmt 2636 err 1 -1 2799 no such table: sqlite_stat4 +stmt 2799 err 1 -1 2957 no such table: sqlite_stat4 +stmt 2957 err 1 -1 3113 no such table: sqlite_stat4 +stmt 3113 err 1 -1 3274 no such table: sqlite_stat4 +stmt 3274 err 1 -1 3430 no such table: sqlite_stat4 +stmt 3430 err 1 -1 3591 no such table: sqlite_stat4 +stmt 3591 err 1 -1 3752 no such table: sqlite_stat4 +stmt 3752 err 1 -1 3913 no such table: sqlite_stat4 +stmt 3913 err 1 -1 4074 no such table: sqlite_stat4 +stmt 4074 err 1 -1 4233 no such table: sqlite_stat4 +stmt 4233 err 1 -1 4401 no such table: sqlite_stat4 +stmt 4401 err 1 -1 4568 no such table: sqlite_stat4 +stmt 4568 err 1 -1 4734 no such table: sqlite_stat4 +stmt 4734 err 1 -1 4900 no such table: sqlite_stat4 +stmt 4900 err 1 -1 5070 no such table: sqlite_stat4 +stmt 5070 err 1 -1 5238 no such table: sqlite_stat4 +stmt 5238 err 1 -1 5406 no such table: sqlite_stat4 +stmt 5406 err 1 -1 5571 no such table: sqlite_stat4 +stmt 5571 err 1 -1 5744 no such table: sqlite_stat4 +stmt 5744 err 1 -1 5917 no such table: sqlite_stat4 +stmt 5917 err 1 -1 6090 no such table: sqlite_stat4 +stmt 6090 err 1 -1 6263 no such table: sqlite_stat4 +stmt 6263 err 1 -1 6437 no such table: sqlite_stat4 +stmt 6437 err 1 -1 6612 no such table: sqlite_stat4 +stmt 6612 err 1 -1 6791 no such table: sqlite_stat4 +stmt 6791 err 1 -1 6963 no such table: sqlite_stat4 +stmt 6963 err 1 -1 7134 no such table: sqlite_stat4 +stmt 7134 err 1 -1 7312 no such table: sqlite_stat4 +stmt 7312 err 1 -1 7487 no such table: sqlite_stat4 +stmt 7487 err 1 -1 7663 no such table: sqlite_stat4 +stmt 7663 err 1 -1 7841 no such table: sqlite_stat4 +stmt 7841 err 1 -1 8018 no such table: sqlite_stat4 +stmt 8018 err 1 -1 8197 no such table: sqlite_stat4 +stmt 8197 ok +==== 2.2 + + EXPLAIN QUERY PLAN + SELECT COUNT(*) + FROM t1 + WHERE bb=21 + AND aa=1 + AND dd BETWEEN 1413833728 and 1413837331; +---- +stmt 0 err 1 -1 127 no such table: t1 +==== 3.0 + + CREATE TABLE t3(a, b, c, d); + CREATE INDEX t3_ba ON t3(b, a, c); + CREATE INDEX t3_a ON t3(a); + + WITH d(a, b) AS ( + SELECT 1, 1 + UNION ALL + SELECT a+1, (a+1) % 5 FROM d WHERE a<100 + ) + INSERT INTO t3 SELECT a, b, 'c', 'd' FROM d; + + CREATE TABLE t2(a, b, c, d); + CREATE INDEX t2_a ON t2(a); + CREATE INDEX t2_ba ON t2(b, a, c); + INSERT INTO t2 SELECT * FROM t3; + + ANALYZE; + SELECT * FROM sqlite_stat1 ORDER BY +idx; +---- +stmt 0 ok +stmt 31 err 1 -1 68 no such table: main.t3 +stmt 68 err 1 -1 98 no such table: main.t3 +stmt 98 err 1 -1 246 no such table: t3 +stmt 246 ok +stmt 278 err 1 -1 308 no such table: main.t2 +stmt 308 err 1 -1 345 no such table: main.t2 +stmt 345 err 1 -1 380 no such table: t2 +stmt 380 ok +stmt 392 err 1 -1 436 no such table: sqlite_stat1 diff --git a/parser/testdata/snapshot.metadata.json b/parser/testdata/snapshot.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/snapshot.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/snapshot.test b/parser/testdata/snapshot.test new file mode 100644 index 0000000..5670b41 --- /dev/null +++ b/parser/testdata/snapshot.test @@ -0,0 +1,113 @@ +==== snapshot-generated + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 93 no such table: t1 +==== snapshot-generated.dup1 + + BEGIN; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 11 err 1 -1 35 no such table: t1 +==== snapshot-generated.dup2 + + INSERT INTO t1 VALUES('x','y') +---- +stmt 0 err 1 -1 38 no such table: t1 +==== snapshot-generated.dup3 + + CREATE TABLE t2(x, y); + INSERT INTO t2 VALUES('a', 'b'); + INSERT INTO t2 VALUES('c', 'd'); + BEGIN; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 27 err 1 -1 64 no such table: t2 +stmt 64 err 1 -1 101 no such table: t2 +stmt 101 ok +stmt 112 err 1 -1 136 no such table: t2 +==== snapshot-generated.dup4 + + BEGIN; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 13 err 1 -1 39 no such table: t2 +==== snapshot-generated.dup5 + + PRAGMA journal_mode = wal; + CREATE TABLE t3(i, j); + INSERT INTO t3 VALUES('o', 't'); + INSERT INTO t3 VALUES('t', 'f'); + BEGIN; + SELECT * FROM t3; +---- +stmt 0 ok +stmt 31 ok +stmt 58 err 1 -1 95 no such table: t3 +stmt 95 err 1 -1 132 no such table: t3 +stmt 132 ok +stmt 143 err 1 -1 167 no such table: t3 +==== snapshot-generated.dup6 + + INSERT INTO t3 VALUES('s', 'e'); + INSERT INTO t3 VALUES('n', 't'); + BEGIN; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 39 no such table: t3 +stmt 39 err 1 -1 78 no such table: t3 +stmt 78 ok +stmt 91 err 1 -1 117 no such table: t3 +==== snapshot-generated.dup7 + + PRAGMA journal_mode = wal; + CREATE TABLE x1(x, xx, xxx); + INSERT INTO x1 VALUES('z', 'zz', 'zzz'); + BEGIN; + SELECT * FROM x1; +---- +stmt 0 ok +stmt 31 ok +stmt 64 err 1 -1 109 no such table: x1 +stmt 109 ok +stmt 120 err 1 -1 144 no such table: x1 +==== snapshot-generated.dup8 + + PRAGMA journal_mode = wal; + CREATE TABLE x1(x, xx, xxx); + INSERT INTO x1 VALUES('z', 'zz', 'zzz'); + BEGIN; + PRAGMA user_version; +---- +stmt 0 ok +stmt 31 ok +stmt 64 err 1 -1 109 no such table: x1 +stmt 109 ok +stmt 120 ok +==== snapshot-generated.dup9 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(x); +---- +stmt 0 ok +stmt 31 ok +==== snapshot-generated.dup10 + + INSERT INTO t1 VALUES(11); + INSERT INTO t1 VALUES(12); + INSERT INTO t1 VALUES(13); + BEGIN; + PRAGMA application_id; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 93 no such table: t1 +stmt 93 ok +stmt 104 ok diff --git a/parser/testdata/snapshot2.metadata.json b/parser/testdata/snapshot2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/snapshot2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/snapshot2.test b/parser/testdata/snapshot2.test new file mode 100644 index 0000000..02332b9 --- /dev/null +++ b/parser/testdata/snapshot2.test @@ -0,0 +1,59 @@ +==== 1.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); +---- +stmt 0 ok +stmt 29 ok +stmt 57 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 125 no such table: t1 +==== 1.1.2 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 1.2.2 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 2.0 + + CREATE TABLE t1(x); + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); +---- +stmt 0 ok +stmt 22 ok +stmt 51 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 107 no such table: t1 +==== 3.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES('a', 'b'); + INSERT INTO t1 VALUES('c', 'd'); +---- +stmt 0 ok +stmt 29 ok +stmt 54 err 1 -1 89 no such table: t1 +stmt 89 err 1 -1 124 no such table: t1 +==== 3.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 5.0 + + CREATE TABLE t2(x); + PRAGMA journal_mode = wal; + INSERT INTO t2 VALUES('abc'); + INSERT INTO t2 VALUES('def'); + INSERT INTO t2 VALUES('ghi'); +---- +stmt 0 ok +stmt 22 ok +stmt 51 err 1 -1 83 no such table: t2 +stmt 83 err 1 -1 115 no such table: t2 +stmt 115 err 1 -1 147 no such table: t2 diff --git a/parser/testdata/snapshot3.metadata.json b/parser/testdata/snapshot3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/snapshot3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/snapshot3.test b/parser/testdata/snapshot3.test new file mode 100644 index 0000000..3b80fcb --- /dev/null +++ b/parser/testdata/snapshot3.test @@ -0,0 +1,26 @@ +==== 1.0 + + CREATE TABLE t1(y); + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES(3); + INSERT INTO t1 VALUES(4); +---- +stmt 0 ok +stmt 22 ok +stmt 51 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 135 no such table: t1 +stmt 135 err 1 -1 163 no such table: t1 +==== 2.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 29 ok +stmt 54 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 116 no such table: t1 diff --git a/parser/testdata/snapshot4.metadata.json b/parser/testdata/snapshot4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/snapshot4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/snapshot4.test b/parser/testdata/snapshot4.test new file mode 100644 index 0000000..caab335 --- /dev/null +++ b/parser/testdata/snapshot4.test @@ -0,0 +1,23 @@ +==== 1.0 + + PRAGMA cache_size = 10; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, randomblob(400)); + PRAGMA journal_mode = wal; + WITH s(i) AS ( + SELECT 2 UNION ALL SELECT i+1 FROM s WHERE i<100 + ) + INSERT INTO t1 SELECT i, randomblob(400) FROM s; +---- +stmt 0 ok +stmt 26 ok +stmt 51 err 1 -1 96 no such table: t1 +stmt 96 ok +stmt 125 err 1 -1 251 no such table: t1 +==== 1.1 + + BEGIN; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 11 err 1 -1 42 no such table: t1 diff --git a/parser/testdata/snapshot_fault.metadata.json b/parser/testdata/snapshot_fault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/snapshot_fault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/snapshot_fault.test b/parser/testdata/snapshot_fault.test new file mode 100644 index 0000000..85f429b --- /dev/null +++ b/parser/testdata/snapshot_fault.test @@ -0,0 +1,41 @@ +==== 4.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(zzz); + INSERT INTO t1 VALUES('abc'); + INSERT INTO t1 VALUES('def'); +---- +stmt 0 ok +stmt 29 ok +stmt 53 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 117 no such table: t1 +==== 4.1.0 + + PRAGMA page_size = 512; + PRAGMA journal_mode = wal; + PRAGMA wal_autocheckpoint = 0; + CREATE TABLE t1(zzz); + INSERT INTO t1 VALUES(randomblob( 500 * 9500 )); + PRAGMA user_version = 211; +---- +stmt 0 ok +stmt 26 ok +stmt 55 ok +stmt 88 ok +stmt 112 err 1 -1 163 no such table: t1 +stmt 163 ok +==== 5.0 + + PRAGMA page_size = 512; + PRAGMA journal_mode = wal; + PRAGMA wal_autocheckpoint = 0; + CREATE TABLE t1(zzz); + INSERT INTO t1 VALUES(randomblob( 5000 )); + PRAGMA user_version = 211; +---- +stmt 0 ok +stmt 26 ok +stmt 55 ok +stmt 88 ok +stmt 112 err 1 -1 157 no such table: t1 +stmt 157 ok diff --git a/parser/testdata/snapshot_up.metadata.json b/parser/testdata/snapshot_up.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/snapshot_up.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/snapshot_up.test b/parser/testdata/snapshot_up.test new file mode 100644 index 0000000..281d067 --- /dev/null +++ b/parser/testdata/snapshot_up.test @@ -0,0 +1,52 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t1 VALUES(7, 8, 9); +---- +stmt 0 ok +stmt 28 ok +stmt 57 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 159 no such table: t1 +==== 1.2 + + BEGIN; + SELECT * FROM t1 +---- +stmt 0 ok +stmt 9 err 1 -1 31 no such table: t1 +==== 1.6 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 1.8 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 1.11 + + BEGIN; + SELECT * FROM t1 +---- +stmt 0 ok +stmt 12 err 1 -1 36 no such table: t1 +==== 1.14 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 1.15 + + BEGIN; + SELECT * FROM t1 +---- +stmt 0 ok +stmt 9 err 1 -1 31 no such table: t1 +==== 1.17 + COMMIT +---- +stmt 0 ok diff --git a/parser/testdata/softheap1.metadata.json b/parser/testdata/softheap1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/softheap1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/softheap1.test b/parser/testdata/softheap1.test new file mode 100644 index 0000000..275d62b --- /dev/null +++ b/parser/testdata/softheap1.test @@ -0,0 +1,23 @@ +==== softheap1-1.0 +PRAGMA soft_heap_limit +---- +stmt 0 ok +==== softheap1-1.1 +PRAGMA soft_heap_limit=123456; PRAGMA soft_heap_limit; +---- +stmt 0 ok +stmt 30 ok +==== softheap1-1.3 +PRAGMA soft_heap_limit(-1); PRAGMA soft_heap_limit; +---- +stmt 0 ok +stmt 27 ok +==== softheap1-1.4 +PRAGMA soft_heap_limit(0); PRAGMA soft_heap_limit; +---- +stmt 0 ok +stmt 26 ok +==== softheap1-2.0 +PRAGMA soft_heap_limit +---- +stmt 0 ok diff --git a/parser/testdata/sort.metadata.json b/parser/testdata/sort.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/sort.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/sort.test b/parser/testdata/sort.test new file mode 100644 index 0000000..39e6cba --- /dev/null +++ b/parser/testdata/sort.test @@ -0,0 +1,521 @@ +==== sort-1.1 +SELECT n FROM t1 ORDER BY n +---- +stmt 0 err 1 -1 28 no such table: t1 +==== sort-1.1.1 +SELECT n FROM t1 ORDER BY n ASC +---- +stmt 0 err 1 -1 32 no such table: t1 +==== sort-1.1.1.dup1 +SELECT ALL n FROM t1 ORDER BY n ASC +---- +stmt 0 err 1 -1 36 no such table: t1 +==== sort-1.2 +SELECT n FROM t1 ORDER BY n DESC +---- +stmt 0 err 1 -1 33 no such table: t1 +==== sort-1.3a +SELECT v FROM t1 ORDER BY v +---- +stmt 0 err 1 -1 28 no such table: t1 +==== sort-1.3b +SELECT n FROM t1 ORDER BY v +---- +stmt 0 err 1 -1 28 no such table: t1 +==== sort-1.4 +SELECT n FROM t1 ORDER BY v DESC +---- +stmt 0 err 1 -1 33 no such table: t1 +==== sort-1.5 +SELECT flt FROM t1 ORDER BY flt +---- +stmt 0 err 1 -1 32 no such table: t1 +==== sort-1.6 +SELECT flt FROM t1 ORDER BY flt DESC +---- +stmt 0 err 1 -1 37 no such table: t1 +==== sort-1.7 +SELECT roman FROM t1 ORDER BY roman +---- +stmt 0 err 1 -1 36 no such table: t1 +==== sort-1.8 +SELECT n FROM t1 ORDER BY log, flt +---- +stmt 0 err 1 -1 35 no such table: t1 +==== sort-1.8.1 +SELECT n FROM t1 ORDER BY log asc, flt +---- +stmt 0 err 1 -1 39 no such table: t1 +==== sort-1.8.2 +SELECT n FROM t1 ORDER BY log, flt ASC +---- +stmt 0 err 1 -1 39 no such table: t1 +==== sort-1.8.3 +SELECT n FROM t1 ORDER BY log ASC, flt asc +---- +stmt 0 err 1 -1 43 no such table: t1 +==== sort-1.9 +SELECT n FROM t1 ORDER BY log, flt DESC +---- +stmt 0 err 1 -1 40 no such table: t1 +==== sort-1.9.1 +SELECT n FROM t1 ORDER BY log ASC, flt DESC +---- +stmt 0 err 1 -1 44 no such table: t1 +==== sort-1.10 +SELECT n FROM t1 ORDER BY log DESC, flt +---- +stmt 0 err 1 -1 40 no such table: t1 +==== sort-1.11 +SELECT n FROM t1 ORDER BY log DESC, flt DESC +---- +stmt 0 err 1 -1 45 no such table: t1 +==== sort-2.1.1 + + UPDATE t1 SET v='x' || -flt; + UPDATE t1 SET v='x-2b' where v=='x-0.123'; + SELECT v FROM t1 ORDER BY v; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 113 no such table: t1 +==== sort-2.1.2 + + SELECT v FROM t1 ORDER BY substr(v,2,999); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== sort-2.1.3 + + SELECT v FROM t1 ORDER BY substr(v,2,999)+0.0; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== sort-2.1.4 + + SELECT v FROM t1 ORDER BY substr(v,2,999) DESC; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== sort-2.1.5 + + SELECT v FROM t1 ORDER BY substr(v,2,999)+0.0 DESC; +---- +stmt 0 err 1 -1 56 no such table: t1 +==== sort-3.1 + + CREATE TABLE t2(a,b); + INSERT INTO t2 VALUES('AGLIENTU',1); + INSERT INTO t2 VALUES('AGLIE`',2); + INSERT INTO t2 VALUES('AGNA',3); + SELECT a, b FROM t2 ORDER BY a; +---- +stmt 0 ok +stmt 26 err 1 -1 67 no such table: t2 +stmt 67 err 1 -1 106 no such table: t2 +stmt 106 err 1 -1 143 no such table: t2 +stmt 143 err 1 -1 179 no such table: t2 +==== sort-3.2 + + SELECT a, b FROM t2 ORDER BY a DESC; +---- +stmt 0 err 1 -1 41 no such table: t2 +==== sort-3.3 + + DELETE FROM t2; + INSERT INTO t2 VALUES('aglientu',1); + INSERT INTO t2 VALUES('aglie`',2); + INSERT INTO t2 VALUES('agna',3); + SELECT a, b FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 20 no such table: t2 +stmt 20 err 1 -1 61 no such table: t2 +stmt 61 err 1 -1 100 no such table: t2 +stmt 100 err 1 -1 137 no such table: t2 +stmt 137 err 1 -1 173 no such table: t2 +==== sort-3.4 + + SELECT a, b FROM t2 ORDER BY a DESC; +---- +stmt 0 err 1 -1 41 no such table: t2 +==== sort-4.1 + + INSERT INTO t1 VALUES(9,'x2.7',3,'IX',4.0e5); + INSERT INTO t1 VALUES(10,'x5.0e10',3,'X',-4.0e5); + INSERT INTO t1 VALUES(11,'x-4.0e9',3,'XI',4.1e4); + INSERT INTO t1 VALUES(12,'x01234567890123456789',3,'XII',-4.2e3); + SELECT n FROM t1 ORDER BY n; +---- +stmt 0 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 104 no such table: t1 +stmt 104 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 228 no such table: t1 +stmt 228 err 1 -1 261 no such table: t1 +==== sort-4.2 + + SELECT n||'' FROM t1 ORDER BY 1; +---- +stmt 0 err 1 -1 37 no such table: t1 +==== sort-4.3 + + SELECT n+0 FROM t1 ORDER BY 1; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== sort-4.4 + + SELECT n||'' FROM t1 ORDER BY 1 DESC; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== sort-4.5 + + SELECT n+0 FROM t1 ORDER BY 1 DESC; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== sort-4.6 + + SELECT v FROM t1 ORDER BY 1; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== sort-4.7 + + SELECT v FROM t1 ORDER BY 1 DESC; +---- +stmt 0 err 1 -1 38 no such table: t1 +==== sort-4.8 + + SELECT substr(v,2,99) FROM t1 ORDER BY 1; +---- +stmt 0 err 1 -1 46 no such table: t1 +==== sort-5.1 + + create table t3(a,b); + insert into t3 values(5,NULL); + insert into t3 values(6,NULL); + insert into t3 values(3,NULL); + insert into t3 values(4,'cd'); + insert into t3 values(1,'ab'); + insert into t3 values(2,NULL); + select a from t3 order by b, a; +---- +stmt 0 ok +stmt 26 err 1 -1 61 no such table: t3 +stmt 61 err 1 -1 96 no such table: t3 +stmt 96 err 1 -1 131 no such table: t3 +stmt 131 err 1 -1 166 no such table: t3 +stmt 166 err 1 -1 201 no such table: t3 +stmt 201 err 1 -1 236 no such table: t3 +stmt 236 err 1 -1 272 no such table: t3 +==== sort-5.2 + + select a from t3 order by b, a desc; +---- +stmt 0 err 1 -1 41 no such table: t3 +==== sort-5.3 + + select a from t3 order by b desc, a; +---- +stmt 0 err 1 -1 41 no such table: t3 +==== sort-5.4 + + select a from t3 order by b desc, a desc; +---- +stmt 0 err 1 -1 46 no such table: t3 +==== sort-6.1 + + create index i3 on t3(b,a); + select a from t3 order by b, a; +---- +stmt 0 err 1 -1 32 no such table: main.t3 +stmt 32 err 1 -1 68 no such table: t3 +==== sort-6.2 + + select a from t3 order by b, a desc; +---- +stmt 0 err 1 -1 41 no such table: t3 +==== sort-6.3 + + select a from t3 order by b desc, a; +---- +stmt 0 err 1 -1 41 no such table: t3 +==== sort-6.4 + + select a from t3 order by b desc, a desc; +---- +stmt 0 err 1 -1 46 no such table: t3 +==== sort-7.1 + + CREATE TABLE t4( + a INTEGER, + b VARCHAR(30) + ); + INSERT INTO t4 VALUES(1,1); + INSERT INTO t4 VALUES(2,2); + INSERT INTO t4 VALUES(11,11); + INSERT INTO t4 VALUES(12,12); + SELECT a FROM t4 ORDER BY 1; +---- +stmt 0 ok +stmt 65 err 1 -1 97 no such table: t4 +stmt 97 err 1 -1 129 no such table: t4 +stmt 129 err 1 -1 163 no such table: t4 +stmt 163 err 1 -1 197 no such table: t4 +stmt 197 err 1 -1 230 no such table: t4 +==== sort-7.2 + + SELECT b FROM t4 ORDER BY 1 +---- +stmt 0 err 1 -1 33 no such table: t4 +==== sort-7.3 + + CREATE VIEW v4 AS SELECT * FROM t4; + SELECT a FROM v4 ORDER BY 1; +---- +stmt 0 ok +stmt 40 err 1 -1 73 no such table: v4 +==== sort-7.4 + + SELECT b FROM v4 ORDER BY 1; +---- +stmt 0 err 1 -1 33 no such table: v4 +==== sort-7.5 + + SELECT a FROM t4 UNION SELECT a FROM v4 ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: v4 +==== sort-7.6 + + SELECT b FROM t4 UNION SELECT a FROM v4 ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: v4 +==== sort-7.7 + + SELECT a FROM t4 UNION SELECT b FROM v4 ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: v4 +==== sort-7.8 + + SELECT b FROM t4 UNION SELECT b FROM v4 ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: v4 +==== sort-8.1 + + CREATE TABLE t5(a real, b text); + INSERT INTO t5 VALUES(100,'A1'); + INSERT INTO t5 VALUES(100.0,'A2'); + SELECT * FROM t5 ORDER BY a, b; +---- +stmt 0 ok +stmt 37 err 1 -1 74 no such table: t5 +stmt 74 err 1 -1 113 no such table: t5 +stmt 113 err 1 -1 149 no such table: t5 +==== sort-9.1 + + CREATE TABLE t6(x, y); + INSERT INTO t6 VALUES(1,1); + INSERT INTO t6 VALUES(2,'1'); + INSERT INTO t6 VALUES(3,x'31'); + INSERT INTO t6 VALUES(4,NULL); + SELECT x FROM t6 ORDER BY y; +---- +stmt 0 ok +stmt 27 err 1 -1 59 no such table: t6 +stmt 59 err 1 -1 93 no such table: t6 +stmt 93 err 1 -1 129 no such table: t6 +stmt 129 err 1 -1 164 no such table: t6 +stmt 164 err 1 -1 197 no such table: t6 +==== sort-9.2 + + SELECT x FROM t6 ORDER BY y DESC; +---- +stmt 0 err 1 -1 38 no such table: t6 +==== sort-9.3 + + SELECT x FROM t6 WHERE y<1 +---- +stmt 0 err 1 -1 32 no such table: t6 +==== sort-9.4 + + SELECT x FROM t6 WHERE y<'1' +---- +stmt 0 err 1 -1 34 no such table: t6 +==== sort-9.5 + + SELECT x FROM t6 WHERE y1 +---- +stmt 0 err 1 -1 32 no such table: t6 +==== sort-9.7 + + SELECT x FROM t6 WHERE y>'1' +---- +stmt 0 err 1 -1 34 no such table: t6 +==== sort-10.1 + + CREATE TABLE t7(c INTEGER PRIMARY KEY); + INSERT INTO t7 VALUES(1); + INSERT INTO t7 VALUES(2); + INSERT INTO t7 VALUES(3); + INSERT INTO t7 VALUES(4); +---- +stmt 0 ok +stmt 44 err 1 -1 74 no such table: t7 +stmt 74 err 1 -1 104 no such table: t7 +stmt 104 err 1 -1 134 no such table: t7 +stmt 134 err 1 -1 164 no such table: t7 +==== sort-10.2 + + SELECT c FROM t7 WHERE c<=3 ORDER BY c DESC; +---- +stmt 0 err 1 -1 49 no such table: t7 +==== sort-10.3 + + SELECT c FROM t7 WHERE c<3 ORDER BY c DESC; +---- +stmt 0 err 1 -1 48 no such table: t7 +==== sort-11.1 + + create table t8(a unique, b, c); + insert into t8 values(1,2,3); + insert into t8 values(2,3,4); + create table t9(x,y); + insert into t9 values(2,4); + insert into t9 values(2,3); + select y from t8, t9 where a=1 order by a, y; +---- +stmt 0 ok +stmt 37 err 1 -1 71 no such table: t8 +stmt 71 err 1 -1 105 no such table: t8 +stmt 105 ok +stmt 131 err 1 -1 163 no such table: t9 +stmt 163 err 1 -1 195 no such table: t9 +stmt 195 err 1 -1 245 no such table: t8 +==== sort-12.1 + + create table a (id integer primary key); + create table b (id integer primary key, aId integer, text); + insert into a values (1); + insert into b values (2, 1, 'xxx'); + insert into b values (1, 1, 'zzz'); + insert into b values (3, 1, 'yyy'); + select a.id, b.id, b.text from a join b on (a.id = b.aId) + order by a.id, b.text; +---- +stmt 0 ok +stmt 45 ok +stmt 109 err 1 -1 139 no such table: a +stmt 139 err 1 -1 179 no such table: b +stmt 179 err 1 -1 219 no such table: b +stmt 219 err 1 -1 259 no such table: b +stmt 259 err 1 -1 350 no such table: a +==== sort-13.0 + + CREATE TABLE t10(a, b); +---- +stmt 0 ok +==== sort-13.2 + + SELECT a, b FROM t10 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t10 +==== sort-13.3 + + PRAGMA cache_size = 5; + SELECT a, b FROM t10 ORDER BY a; +---- +stmt 0 ok +stmt 25 err 1 -1 60 no such table: t10 +==== sort-generated + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(4); + INSERT INTO t1 VALUES(5); + INSERT INTO t1 VALUES(3); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES(6); + INSERT INTO t1 VALUES(1); + CREATE INDEX i1 ON t1(a); + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 114 no such table: t1 +stmt 114 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 174 no such table: t1 +stmt 174 err 1 -1 204 no such table: t1 +stmt 204 err 1 -1 234 no such table: main.t1 +stmt 234 err 1 -1 267 no such table: t1 +==== 16.1 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(1, NULL, 3); + INSERT INTO t1 VALUES(NULL, 2, 3); + INSERT INTO t1 VALUES(1, 2, NULL); + INSERT INTO t1 VALUES(4, 5, 6); + CREATE UNIQUE INDEX i1 ON t1(b, a, c); +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 173 no such table: t1 +stmt 173 err 1 -1 207 no such table: t1 +stmt 207 err 1 -1 248 no such table: main.t1 +==== 16.2 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(1, NULL, 3); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(1, 2, NULL); + INSERT INTO t1 VALUES(4, 5, 6); + CREATE UNIQUE INDEX i1 ON t1(b, a, c); +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 133 no such table: t1 +stmt 133 err 1 -1 170 no such table: t1 +stmt 170 err 1 -1 204 no such table: t1 +stmt 204 err 1 -1 245 no such table: main.t1 +==== 17.1 + + SELECT * FROM sqlite_master ORDER BY sql; +---- +stmt 0 ok +==== 18.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<50) + -- increase to 5000 for actual test data ----^^ + INSERT INTO t1(a,b,c) SELECT x, random()%5000, random()%5000 FROM c; + CREATE TABLE t2(d,e,f); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<500) + -- increase to 50000 for actual test data -----^^^ + INSERT INTO t2(d,e,f) SELECT + NULLIF(0, random()%2), random()%5000, random()%5000 + FROM c; + ANALYZE; + UPDATE sqlite_stat1 SET stat='50000' WHERE tbl='t2'; + UPDATE sqlite_stat1 SET stat='5000' WHERE tbl='t1'; + ANALYZE sqlite_schema; +---- +stmt 0 ok +stmt 48 err 1 -1 272 no such table: t1 +stmt 272 ok +stmt 298 err 1 -1 558 no such table: t2 +stmt 558 ok +stmt 569 err 1 -1 624 no such table: sqlite_stat1 +stmt 624 err 1 -1 678 no such table: sqlite_stat1 +stmt 678 ok +==== 18.2 + + EXPLAIN QUERY PLAN + SELECT a FROM t1 JOIN t2 + WHERE a IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20) + AND a=CASE WHEN d IS NOT NULL THEN e ELSE f END + ORDER BY a; +---- +stmt 0 err 1 -1 183 no such table: t1 diff --git a/parser/testdata/sort2.metadata.json b/parser/testdata/sort2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/sort2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/sort2.test b/parser/testdata/sort2.test new file mode 100644 index 0000000..8e7908f --- /dev/null +++ b/parser/testdata/sort2.test @@ -0,0 +1,52 @@ +==== sort2-generated + + PRAGMA cache_size = 5; + WITH r(x,y) AS ( + SELECT 1, randomblob(100) + UNION ALL + SELECT x+1, randomblob(100) FROM r + LIMIT 100000 + ) + SELECT count(x), length(y) FROM r GROUP BY (x%5) +---- +stmt 0 ok +stmt 27 ok +==== sort2-generated.dup1 + + CREATE TABLE t1(a, b); + WITH r(x,y) AS ( + SELECT 1, randomblob(100) + UNION ALL + SELECT x+1, randomblob(100) FROM r + LIMIT 10000 + ) INSERT INTO t1 SELECT * FROM r; +---- +stmt 0 ok +stmt 27 err 1 -1 193 no such table: t1 +==== sort2-generated.dup2 + + CREATE UNIQUE INDEX i1 ON t1(b, a); +---- +stmt 0 err 1 -1 40 no such table: main.t1 +==== sort2-generated.dup3 + + CREATE UNIQUE INDEX i2 ON t1(a); +---- +stmt 0 err 1 -1 37 no such table: main.t1 +==== sort2-generated.dup4 + PRAGMA integrity_check +---- +stmt 0 ok +==== sort2-generated.dup5 + + PRAGMA cache_size = 5; + WITH r(x,y) AS ( + SELECT 1, randomblob(100) + UNION ALL + SELECT x+1, randomblob(100) FROM r + LIMIT 1000000 + ) + SELECT count(x), length(y) FROM r GROUP BY (x%5) +---- +stmt 0 ok +stmt 29 ok diff --git a/parser/testdata/sort3.metadata.json b/parser/testdata/sort3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/sort3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/sort3.test b/parser/testdata/sort3.test new file mode 100644 index 0000000..e1122fc --- /dev/null +++ b/parser/testdata/sort3.test @@ -0,0 +1,51 @@ +==== 1.0 + + PRAGMA cache_size = 5; + CREATE TABLE t11(a, b); + INSERT INTO t11 VALUES(randomblob(5000), NULL); + INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --2 + INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --3 + INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --4 + INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --5 + INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --6 + INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --7 + INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --8 + INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --9 + UPDATE t11 SET b = cksum(a); +---- +stmt 0 ok +stmt 25 ok +stmt 51 err 1 -1 101 no such table: t11 +stmt 101 err 1 -1 159 no such table: t11 +stmt 159 err 1 -1 221 no such table: t11 +stmt 221 err 1 -1 283 no such table: t11 +stmt 283 err 1 -1 345 no such table: t11 +stmt 345 err 1 -1 407 no such table: t11 +stmt 407 err 1 -1 469 no such table: t11 +stmt 469 err 1 -1 531 no such table: t11 +stmt 531 err 1 -1 593 no such table: t11 +stmt 593 err 1 -1 628 no such table: t11 +==== sort3-generated + + WITH r(x,y) AS ( + SELECT 1, randomblob(1000) + UNION ALL + SELECT x+1, randomblob(1000) FROM r + LIMIT 20000 + ) + SELECT count(*), sum(length(y)) FROM r GROUP BY (x%5); +---- +stmt 0 ok +==== 3 + + PRAGMA cache_size = 20000; + WITH r(x,y) AS ( + SELECT 1, randomblob(1000) + UNION ALL + SELECT x+1, randomblob(1000) FROM r + LIMIT 2200000 + ) + SELECT count(*), sum(length(y)) FROM r GROUP BY (x%5); +---- +stmt 0 ok +stmt 29 ok diff --git a/parser/testdata/sort5.metadata.json b/parser/testdata/sort5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/sort5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/sort5.test b/parser/testdata/sort5.test new file mode 100644 index 0000000..8b2ce30 --- /dev/null +++ b/parser/testdata/sort5.test @@ -0,0 +1,14 @@ +==== 1.0 + + PRAGMA mmap_size = 10000000; + PRAGMA cache_size = 10; + CREATE TABLE t1(a, b); +---- +stmt 0 ok +stmt 31 ok +stmt 57 ok +==== 1.2 + + CREATE INDEX i1 ON t1(b); +---- +stmt 0 err 1 -1 28 no such table: main.t1 diff --git a/parser/testdata/sorterref.metadata.json b/parser/testdata/sorterref.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/sorterref.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/sorterref.test b/parser/testdata/sorterref.test new file mode 100644 index 0000000..7d69dde --- /dev/null +++ b/parser/testdata/sorterref.test @@ -0,0 +1,44 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + ALTER TABLE t1 ADD COLUMN d DEFAULT 'string'; + INSERT INTO t1 VALUES(7, 8, 9, 'text'); +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 134 no such table: t1 +stmt 144 err 1 -1 186 no such table: t1 +==== 1.1 + + SELECT * FROM t1 ORDER BY b; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 2.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d, PRIMARY KEY(c)) WITHOUT ROWID; + + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(2, 3); + INSERT INTO t1 VALUES(3, 4); + + INSERT INTO t2 VALUES(1, 'one'); + INSERT INTO t2 VALUES(3, 'three'); +---- +stmt 0 ok +stmt 27 ok +stmt 52 ok +stmt 107 err 1 -1 139 no such table: t1 +stmt 139 err 1 -1 170 no such table: t1 +stmt 170 err 1 -1 201 no such table: t1 +stmt 201 err 1 -1 237 no such table: t2 +stmt 237 err 1 -1 274 no such table: t2 +==== 2.1 + + SELECT * FROM t1 LEFT JOIN t2 ON (a=c) ORDER BY b; +---- +stmt 0 err 1 -1 53 no such table: t1 diff --git a/parser/testdata/sortfault.metadata.json b/parser/testdata/sortfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/sortfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/sortfault.test b/parser/testdata/sortfault.test new file mode 100644 index 0000000..557aa48 --- /dev/null +++ b/parser/testdata/sortfault.test @@ -0,0 +1,12 @@ +==== 1.0 + + PRAGMA cache_size = 5; +---- +stmt 0 ok +==== 4.0 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); +---- +stmt 0 ok +stmt 29 err 1 -1 64 no such table: t1 diff --git a/parser/testdata/speed3.metadata.json b/parser/testdata/speed3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/speed3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/speed3.test b/parser/testdata/speed3.test new file mode 100644 index 0000000..bbd3aa0 --- /dev/null +++ b/parser/testdata/speed3.test @@ -0,0 +1,7 @@ +==== speed3-0.4 + + PRAGMA main.auto_vacuum; + PRAGMA aux.auto_vacuum; +---- +stmt 0 ok +stmt 29 err 1 41 57 unknown database aux diff --git a/parser/testdata/spellfix.metadata.json b/parser/testdata/spellfix.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/spellfix.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/spellfix.test b/parser/testdata/spellfix.test new file mode 100644 index 0000000..f565e23 --- /dev/null +++ b/parser/testdata/spellfix.test @@ -0,0 +1,277 @@ +==== 1.11 + + SELECT next_char('re','vocab','w'); +---- +stmt 0 err 1 10 38 no such function: next_char +==== 1.11sub + + SELECT next_char('re','(SELECT w AS x FROM vocab)','x'); +---- +stmt 0 err 1 10 59 no such function: next_char +==== 1.12 + + SELECT next_char('r','vocab','w'); +---- +stmt 0 err 1 10 37 no such function: next_char +==== 1.13 + + SELECT next_char('','vocab','w'); +---- +stmt 0 err 1 10 36 no such function: next_char +==== 1.14 +SELECT next_char('','xyzzy','a') +---- +stmt 0 err 1 7 33 no such function: next_char +==== 1.20 + + CREATE TABLE vocab2(w TEXT); + CREATE INDEX vocab2w ON vocab2(w COLLATE nocase); + INSERT INTO vocab2 VALUES('abc'), ('ABD'), ('aBe'), ('AbF'); + SELECT next_char('ab', 'vocab2', 'w', null, 'nocase'); +---- +stmt 0 ok +stmt 31 err 1 -1 83 no such table: main.vocab2 +stmt 83 err 1 -1 146 no such table: vocab2 +stmt 146 err 1 156 203 no such function: next_char +==== 1.21 + + SELECT next_char('ab','vocab2','w',null,null); +---- +stmt 0 err 1 10 49 no such function: next_char +==== 1.22 + + SELECT next_char('AB','vocab2','w',null,'NOCASE'); +---- +stmt 0 err 1 10 53 no such function: next_char +==== 1.23 + + SELECT next_char('ab','vocab2','w',null,'binary'); +---- +stmt 0 err 1 10 53 no such function: next_char +==== 1.30 + + SELECT rowid FROM t1 WHERE word='rabbit'; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== 1.31 + + UPDATE t1 SET rowid=2000 WHERE word='rabbit'; + SELECT rowid FROM t1 WHERE word='rabbit'; +---- +stmt 0 err 1 -1 48 no such table: t1 +stmt 48 err 1 -1 92 no such table: t1 +==== 1.32 + + INSERT INTO t1(rowid, word) VALUES(3000,'melody'); + SELECT rowid, word, matchlen FROM t1 WHERE word MATCH 'melotti' + ORDER BY score LIMIT 3; +---- +stmt 0 err 1 -1 53 no such table: t1 +stmt 53 err 1 -1 146 no such table: t1 +==== 1.33 +INSERT INTO t1(rowid, word) VALUES(3000,'garden'); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== 2.1 + + CREATE VIRTUAL TABLE t2 USING spellfix1; + INSERT INTO t2 (word, soundslike) VALUES('school', 'skuul'); + INSERT INTO t2 (word, soundslike) VALUES('psalm', 'sarm'); + SELECT word, matchlen FROM t2 WHERE word MATCH 'sar*' LIMIT 5; +---- +stmt 0 ok +stmt 43 err 1 -1 106 no such table: t2 +stmt 106 err 1 -1 167 no such table: t2 +stmt 167 err 1 -1 232 no such table: t2 +==== 2.2 + + SELECT word, matchlen FROM t2 WHERE word MATCH 'skol*' LIMIT 5; +---- +stmt 0 err 1 -1 66 no such table: t2 +==== 3.1 + + CREATE TABLE costs(iLang, cFrom, cTo, iCost); + INSERT INTO costs VALUES(0, 'a', 'e', 1); + INSERT INTO costs VALUES(0, 'e', 'i', 1); + INSERT INTO costs VALUES(0, 'i', 'o', 1); + INSERT INTO costs VALUES(0, 'o', 'u', 1); + INSERT INTO costs VALUES(0, 'u', 'a', 1); + CREATE VIRTUAL TABLE t3 USING spellfix1(edit_cost_table=costs); +---- +stmt 0 ok +stmt 48 err 1 -1 92 no such table: costs +stmt 92 err 1 -1 136 no such table: costs +stmt 136 err 1 -1 180 no such table: costs +stmt 180 err 1 -1 224 no such table: costs +stmt 224 err 1 -1 268 no such table: costs +stmt 268 ok +==== 4.0 + + INSERT INTO t3(command) VALUES('edit_cost_table=NULL'); +---- +stmt 0 err 1 -1 58 no such table: t3 +==== 5.0 + + CREATE TABLE costs2(iLang, cFrom, cTo, iCost); + INSERT INTO costs2 VALUES(0, 'a', 'o', 1); + INSERT INTO costs2 VALUES(0, 'e', 'o', 4); + INSERT INTO costs2 VALUES(0, 'i', 'o', 8); + INSERT INTO costs2 VALUES(0, 'u', 'o', 16); + INSERT INTO t3(command) VALUES('edit_cost_table="costs2"'); +---- +stmt 0 ok +stmt 49 err 1 -1 94 no such table: costs2 +stmt 94 err 1 -1 139 no such table: costs2 +stmt 139 err 1 -1 184 no such table: costs2 +stmt 184 err 1 -1 230 no such table: costs2 +stmt 230 err 1 -1 292 no such table: t3 +==== 6.1.1 + + SELECT word FROM t3 WHERE rowid = 10; +---- +stmt 0 err 1 -1 40 no such table: t3 +==== 6.1.2 + + SELECT word, distance FROM t3 WHERE rowid = 10; +---- +stmt 0 err 1 -1 50 no such table: t3 +==== 6.1.3 + + SELECT word, distance FROM t3 WHERE rowid = 10 AND word MATCH 'kiiner'; +---- +stmt 0 err 1 -1 74 no such table: t3 +==== 7.1 + + CREATE VIRTUAL TABLE t4 USING spellfix1; + PRAGMA table_info = t4; +---- +stmt 0 ok +stmt 43 ok +==== 7.2.1 + + INSERT INTO t4(rowid, word) VALUES(1, 'Archilles'); + INSERT INTO t4(rowid, word) VALUES(2, 'Pluto'); + INSERT INTO t4(rowid, word) VALUES(3, 'Atrides'); + INSERT OR REPLACE INTO t4(rowid, word) VALUES(2, 'Apollo'); + SELECT rowid, word FROM t4; +---- +stmt 0 err 1 -1 54 no such table: t4 +stmt 54 err 1 -1 104 no such table: t4 +stmt 104 err 1 -1 156 no such table: t4 +stmt 156 err 1 -1 218 no such table: t4 +stmt 218 err 1 -1 248 no such table: t4 +==== 7.2.2 + + INSERT OR ABORT INTO t4(rowid, word) VALUES(1, 'Leto'); +---- +stmt 0 err 1 -1 58 no such table: t4 +==== 7.2.3 + + INSERT OR ROLLBACK INTO t4(rowid, word) VALUES(3, 'Zeus'); +---- +stmt 0 err 1 -1 61 no such table: t4 +==== 7.2.4 + + INSERT OR FAIL INTO t4(rowid, word) VALUES(3, 'Zeus'); +---- +stmt 0 err 1 -1 57 no such table: t4 +==== 7.2.5 + + INSERT OR IGNORE INTO t4(rowid, word) VALUES(3, 'Zeus'); + SELECT rowid, word FROM t4; +---- +stmt 0 err 1 -1 59 no such table: t4 +stmt 59 err 1 -1 89 no such table: t4 +==== 7.3.1 + + UPDATE OR REPLACE t4 SET rowid=3 WHERE rowid=1; + SELECT rowid, word FROM t4; +---- +stmt 0 err 1 -1 50 no such table: t4 +stmt 50 err 1 -1 80 no such table: t4 +==== 7.3.2 + + UPDATE OR ABORT t4 SET rowid=3 WHERE rowid=2; +---- +stmt 0 err 1 -1 48 no such table: t4 +==== 7.3.3 + + UPDATE OR ROLLBACK t4 SET rowid=3 WHERE rowid=2; +---- +stmt 0 err 1 -1 51 no such table: t4 +==== 7.3.4 + + UPDATE OR FAIL t4 SET rowid=3 WHERE rowid=2; +---- +stmt 0 err 1 -1 47 no such table: t4 +==== 7.3.5 + + UPDATE OR IGNORE t4 SET rowid=3 WHERE rowid=2; + SELECT rowid, word FROM t4; +---- +stmt 0 err 1 -1 49 no such table: t4 +stmt 49 err 1 -1 79 no such table: t4 +==== 7.4.1 + + DELETE FROM t4; + INSERT INTO t4(rowid, word) VALUES(10, 'Agamemnon'); + INSERT INTO t4(rowid, word) VALUES(20, 'Patroclus'); + INSERT INTO t4(rowid, word) VALUES(30, 'Chryses'); + + CREATE TABLE t5(i, w); + INSERT INTO t5 VALUES(5, 'Poseidon'); + INSERT INTO t5 VALUES(20, 'Chronos'); + INSERT INTO t5 VALUES(30, 'Hera'); +---- +stmt 0 err 1 -1 18 no such table: t4 +stmt 18 err 1 -1 73 no such table: t4 +stmt 73 err 1 -1 128 no such table: t4 +stmt 128 err 1 -1 181 no such table: t4 +stmt 181 ok +stmt 207 err 1 -1 248 no such table: t5 +stmt 248 err 1 -1 288 no such table: t5 +stmt 288 err 1 -1 325 no such table: t5 +==== spellfix-generated + SELECT rowid, word FROM t4 +---- +stmt 0 err 1 -1 28 no such table: t4 +==== spellfix-generated.dup1 + SELECT rowid, word FROM t4 +---- +stmt 0 err 1 -1 28 no such table: t4 +==== 8.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE d(w); + INSERT INTO d VALUES(1); + WITH RECURSIVE cnt(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM cnt WHERE n<100) + SELECT sum(length(next_char( + printf('%.*c',1000000,'A'), + 'd', + 'substr(printf(''%.*c'',2000000,''A''),1,if(abs(random())%2=0,1000001,1))')))>0 + FROM cnt; +---- +stmt 0 ok +stmt 27 ok +stmt 48 err 1 -1 75 no such table: d +stmt 75 err 1 177 326 no such function: next_char +==== 8.2 + + DROP TABLE IF EXISTS t1; + CREATE VIRTUAL TABLE t1 USING spellfix1; + INSERT INTO t1(word) VALUES('hello'),('world'); + SELECT word FROM t1 WHERE word MATCH ''; +---- +stmt 0 ok +stmt 27 ok +stmt 70 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 163 no such table: t1 +==== 8.3 + + DROP TABLE t1; + CREATE VIRTUAL TABLE t1 USING spellfix1; + INSERT INTO t1(command) VALUES('edit_cost_table=''xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 60 err 1 -1 217 no such table: t1 diff --git a/parser/testdata/spellfix2.metadata.json b/parser/testdata/spellfix2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/spellfix2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/spellfix2.test b/parser/testdata/spellfix2.test new file mode 100644 index 0000000..2808072 --- /dev/null +++ b/parser/testdata/spellfix2.test @@ -0,0 +1,60 @@ +==== 1.0 + + CREATE VIRTUAL TABLE demo USING spellfix1; + INSERT INTO demo(word) VALUES ('amsterdam'); + INSERT INTO demo(word) VALUES ('amsterdammetje'); + INSERT INTO demo(word) VALUES ('amsterdamania'); + INSERT INTO demo(word) VALUES ('amsterdamweg'); + INSERT INTO demo(word) VALUES ('amsterdamsestraat'); + INSERT INTO demo(word) VALUES ('amsterdamlaan'); +---- +stmt 0 ok +stmt 45 err 1 -1 92 no such table: demo +stmt 92 err 1 -1 144 no such table: demo +stmt 144 err 1 -1 195 no such table: demo +stmt 195 err 1 -1 245 no such table: demo +stmt 245 err 1 -1 300 no such table: demo +stmt 300 err 1 -1 351 no such table: demo +==== 1.1 + + SELECT word, distance, matchlen FROM demo + WHERE word MATCH 'amstedam*' AND top=3 + ORDER BY +word; +---- +stmt 0 err 1 -1 104 no such table: demo +==== 1.2 + + SELECT word, distance, matchlen FROM demo WHERE + word MATCH 'amstedam*' AND top=3 AND distance <= 100 + ORDER BY +word; +---- +stmt 0 err 1 -1 124 no such table: demo +==== 1.3 + + SELECT word, distance, matchlen FROM demo WHERE + word MATCH 'amstedam*' AND distance <= 100 + ORDER BY +word; +---- +stmt 0 err 1 -1 114 no such table: demo +==== 1.5 + + SELECT count(*) FROM demo WHERE word MATCH 'amstedam*' AND distance <= 100; + SELECT count(*) FROM demo + WHERE word MATCH 'amstedam*' AND distance <= 100 AND top=20; +---- +stmt 0 err 1 -1 78 no such table: demo +stmt 78 err 1 -1 170 no such table: demo +==== 1.6 + + SELECT word, distance, matchlen FROM demo + WHERE word MATCH 'amstedam*' AND distance <= 100 + ORDER BY distance, word; +---- +stmt 0 err 1 -1 123 no such table: demo +==== 1.7 + + SELECT word, distance, matchlen FROM demo + WHERE word MATCH 'amstedam*' AND distance <= 100 AND top=20 + ORDER BY distance, word; +---- +stmt 0 err 1 -1 134 no such table: demo diff --git a/parser/testdata/spellfix3.metadata.json b/parser/testdata/spellfix3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/spellfix3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/spellfix3.test b/parser/testdata/spellfix3.test new file mode 100644 index 0000000..9b8b227 --- /dev/null +++ b/parser/testdata/spellfix3.test @@ -0,0 +1,50 @@ +==== 100 + + SELECT spellfix1_scriptcode('And God said, “Let there be light”'); +---- +stmt 0 err 1 10 73 no such function: spellfix1_scriptcode +==== 110 + + SELECT spellfix1_scriptcode('Бог сказал: "Да будет свет"'); +---- +stmt 0 err 1 10 82 no such function: spellfix1_scriptcode +==== 120 + + SELECT spellfix1_scriptcode('και ειπεν ο θεος γενηθητω φως και εγενετο φως'); +---- +stmt 0 err 1 10 117 no such function: spellfix1_scriptcode +==== 130 + + SELECT spellfix1_scriptcode('וַיֹּ֥אמֶר אֱלֹהִ֖ים יְהִ֣י א֑וֹר וַֽיְהִי־אֽוֹר׃'); +---- +stmt 0 err 1 10 129 no such function: spellfix1_scriptcode +==== 140 + + SELECT spellfix1_scriptcode('فِي ذَلِكَ الوَقتِ، قالَ اللهُ: لِيَكُنْ نُورٌ. فَصَارَ نُورٌ.'); +---- +stmt 0 err 1 10 148 no such function: spellfix1_scriptcode +==== 200 + + SELECT spellfix1_scriptcode('+3.14159'); +---- +stmt 0 err 1 10 43 no such function: spellfix1_scriptcode +==== 210 + + SELECT spellfix1_scriptcode('And God said: "Да будет свет"'); +---- +stmt 0 err 1 10 75 no such function: spellfix1_scriptcode +==== 220 + + SELECT spellfix1_scriptcode('+3.14159 light'); +---- +stmt 0 err 1 10 49 no such function: spellfix1_scriptcode +==== 230 + + SELECT spellfix1_scriptcode('+3.14159 свет'); +---- +stmt 0 err 1 10 52 no such function: spellfix1_scriptcode +==== 240 + + SELECT spellfix1_scriptcode('וַיֹּ֥אמֶר +3.14159'); +---- +stmt 0 err 1 10 64 no such function: spellfix1_scriptcode diff --git a/parser/testdata/spellfix4.metadata.json b/parser/testdata/spellfix4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/spellfix4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/spellfix4.test b/parser/testdata/spellfix4.test new file mode 100644 index 0000000..11dd743 --- /dev/null +++ b/parser/testdata/spellfix4.test @@ -0,0 +1,391 @@ +==== 100 + + CREATE TABLE cost1(iLang, cFrom, cTo, iCost); + INSERT INTO cost1 VALUES + (0, '', '?', 97), + (0, '?', '', 98), + (0, '?', '?', 99), + (0, 'm', 'n', 50), + (0, 'n', 'm', 50) + ; + SELECT editdist3('cost1'); + SELECT editdist3('anchor','amchor'); +---- +stmt 0 ok +stmt 48 err 1 -1 193 no such table: cost1 +stmt 193 err 1 203 222 no such function: editdist3 +stmt 222 err 1 232 261 no such function: editdist3 +==== 110 + + SELECT editdist3('anchor','anchoxr'); +---- +stmt 0 err 1 10 40 no such function: editdist3 +==== 111 + + SELECT editdist3('anchor','xanchor'); +---- +stmt 0 err 1 10 40 no such function: editdist3 +==== 112 + + SELECT editdist3('anchor','anchorx'); +---- +stmt 0 err 1 10 40 no such function: editdist3 +==== 120 + + SELECT editdist3('anchor','anchr'); +---- +stmt 0 err 1 10 38 no such function: editdist3 +==== 121 + + SELECT editdist3('anchor','ancho'); +---- +stmt 0 err 1 10 38 no such function: editdist3 +==== 122 + + SELECT editdist3('anchor','nchor'); +---- +stmt 0 err 1 10 38 no such function: editdist3 +==== 130 + + SELECT editdist3('anchor','anchur'); +---- +stmt 0 err 1 10 39 no such function: editdist3 +==== 131 + + SELECT editdist3('anchor','onchor'); +---- +stmt 0 err 1 10 39 no such function: editdist3 +==== 132 + + SELECT editdist3('anchor','anchot'); +---- +stmt 0 err 1 10 39 no such function: editdist3 +==== 140 + + SELECT editdist3('anchor','omchor'); +---- +stmt 0 err 1 10 39 no such function: editdist3 +==== 200 + + INSERT INTO cost1 VALUES + (0, 'a', 'ä', 5), + (0, 'ss', 'ß', 8) + ; + SELECT editdist3('cost1'); + SELECT editdist3('strasse','straße'); + SELECT editdist3('straße','strasse'); +---- +stmt 0 err 1 -1 77 no such table: cost1 +stmt 77 err 1 87 106 no such function: editdist3 +stmt 106 err 1 116 147 no such function: editdist3 +stmt 147 err 1 157 188 no such function: editdist3 +==== 210 + + SELECT editdist3('baume','bäume'); +---- +stmt 0 err 1 10 38 no such function: editdist3 +==== 220 + + SELECT editdist3('baum','bäume'); +---- +stmt 0 err 1 10 37 no such function: editdist3 +==== 230 + + INSERT INTO cost1 VALUES + (0, 'ä', 'a', 5), + (0, 'ß', 'ss', 8) + ; + SELECT editdist3('cost1'); + SELECT editdist3('strasse','straße'); + SELECT editdist3('straße','strasse'); +---- +stmt 0 err 1 -1 77 no such table: cost1 +stmt 77 err 1 87 106 no such function: editdist3 +stmt 106 err 1 116 147 no such function: editdist3 +stmt 147 err 1 157 188 no such function: editdist3 +==== 300 + + DELETE FROM cost1; + INSERT INTO cost1 VALUES + (0, '', '?', 97), + (0, '?', '', 98), + (0, '?', '?', 99), + (0, 'a', 'e', 50), + (0, 'a', 'i', 70), + (0, 'a', 'o', 75), + (0, 'a', 'u', 81), + (0, 'e', 'a', 50), + (0, 'e', 'i', 52), + (0, 'e', 'o', 72), + (0, 'e', 'u', 82), + (0, 'i', 'a', 70), + (0, 'i', 'e', 52), + (0, 'i', 'o', 75), + (0, 'i', 'u', 83), + (0, 'o', 'a', 75), + (0, 'o', 'e', 72), + (0, 'o', 'i', 75), + (0, 'o', 'u', 40), + (0, 'u', 'a', 81), + (0, 'u', 'e', 82), + (0, 'u', 'i', 83), + (0, 'u', 'o', 40), + (0, 'm', 'n', 45), + (0, 'n', 'm', 45) + ; + CREATE TABLE words(x TEXT); + INSERT INTO words VALUES + ('abraham'), + ('action'), + ('africa'), + ('aladdin'), + ('alert'), + ('alien'), + ('amazon'), + ('analog'), + ('animal'), + ('apollo'), + ('archive'), + ('arnold'), + ('aspirin'), + ('august'), + ('average'), + ('bahama'), + ('bambino'), + ('barcode'), + ('bazooka'), + ('belgium'), + ('between'), + ('biology'), + ('blonde'), + ('border'), + ('brave'), + ('british'), + ('bucket'), + ('button'), + ('caesar'), + ('camilla'), + ('cannon'), + ('caramel'), + ('carpet'), + ('catalog'), + ('century'), + ('chaos'), + ('chef'), + ('china'), + ('circus'), + ('classic'), + ('clinic'), + ('coconut'), + ('combine'), + ('complex'), + ('congo'), + ('convert'), + ('cosmos'), + ('crack'), + ('crown'), + ('cyclone'), + ('deal'), + ('delete'), + ('denver'), + ('detail'), + ('diana'), + ('direct'), + ('dolby'), + ('double'), + ('dublin'), + ('echo'), + ('edition'), + ('electra'), + ('emotion'), + ('enjoy'), + ('escape'), + ('everest'), + ('exile'), + ('express'), + ('family'), + ('ferrari'), + ('filter'), + ('fish'), + ('florida'), + ('ford'), + ('forum'), + ('frank'), + ('frozen'), + ('gallery'), + ('garlic'), + ('geneva'), + ('gibson'), + ('gloria'), + ('gordon'), + ('gravity'), + ('ground'), + ('habitat'), + ('harlem'), + ('hazard'), + ('herbert'), + ('hobby'), + ('house'), + ('icon'), + ('immune'), + ('india'), + ('inside'), + ('isotope'), + ('jamaica'), + ('jazz'), + ('joker'), + ('juliet'), + ('jupiter'), + ('kevin'), + ('korea'), + ('latin'), + ('legal'), + ('lexicon'), + ('limbo'), + ('lithium'), + ('logo'), + ('lucas'), + ('madrid'), + ('major'), + ('manual'), + ('mars'), + ('maximum'), + ('medical'), + ('mental'), + ('meter'), + ('miguel'), + ('mimosa'), + ('miranda'), + ('modern'), + ('money'), + ('morgan'), + ('motor'), + ('mystic'), + ('nebula'), + ('network'), + ('nice'), + ('nitro'), + ('norway'), + ('nurse'), + ('octavia'), + ('olympic'), + ('opus'), + ('orient'), + ('othello'), + ('pacific'), + ('panama'), + ('paper'), + ('parking'), + ('pasta'), + ('paul'), + ('people'), + ('permit'), + ('phrase'), + ('pilgrim'), + ('planet'), + ('pocket'), + ('police'), + ('popular'), + ('prefer'), + ('presto'), + ('private'), + ('project'), + ('proxy'), + ('python'), + ('quota'), + ('rainbow'), + ('raymond'), + ('region'), + ('report'), + ('reward'), + ('risk'), + ('robot'), + ('rose'), + ('russian'), + ('sailor'), + ('salt'), + ('saturn'), + ('scorpio'), + ('second'), + ('seminar'), + ('shadow'), + ('shave'), + ('shock'), + ('silence'), + ('sinatra'), + ('sleep'), + ('social'), + ('sonata'), + ('spain'), + ('sphere'), + ('spray'), + ('state'), + ('stone'), + ('strong'), + ('sugar'), + ('supreme'), + ('swing'), + ('talent'), + ('telecom'), + ('thermos'), + ('tina'), + ('tommy'), + ('torso'), + ('trade'), + ('trick'), + ('tropic'), + ('turtle'), + ('uniform'), + ('user'), + ('vega'), + ('vertigo'), + ('village'), + ('visible'), + ('vocal'), + ('voyage'), + ('weekend'), + ('winter'), + ('year'), + ('zipper') + ; + SELECT editdist3('cost1'); +---- +stmt 0 err 1 -1 21 no such table: cost1 +stmt 21 err 1 -1 626 no such table: cost1 +stmt 626 ok +stmt 656 err 1 -1 3845 no such table: words +stmt 3845 err 1 3855 3874 no such function: editdist3 +==== 310 + + SELECT editdist3(a.x,b.x), a.x, b.x + FROM words a, words b + WHERE a.x5000; +---- +stmt 0 err 1 -1 51 no such table: sqlite_stmt +==== stmtvtab1-160 + + SELECT * FROM sqlite_stmt WHERE NOT busy; +---- +stmt 0 err 1 -1 44 no such table: sqlite_stmt diff --git a/parser/testdata/strict1.metadata.json b/parser/testdata/strict1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/strict1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/strict1.test b/parser/testdata/strict1.test new file mode 100644 index 0000000..07f613c --- /dev/null +++ b/parser/testdata/strict1.test @@ -0,0 +1,351 @@ +==== strict1-1.1 + + CREATE TABLE t1(a) STRICT; +---- +stmt 0 err 1 -1 29 missing datatype for t1.a +==== strict1-1.2 + + CREATE TABLE t1(a PRIMARY KEY) STRICT, WITHOUT ROWID; +---- +stmt 0 err 1 -1 56 missing datatype for t1.a +==== strict1-1.3 + + CREATE TABLE t1(a PRIMARY KEY) WITHOUT ROWID, STRICT; +---- +stmt 0 err 1 -1 56 missing datatype for t1.a +==== strict1-1.4 + + CREATE TABLE t1(a BANJO PRIMARY KEY) WITHOUT ROWID, STRICT; +---- +stmt 0 err 1 -1 62 unknown datatype for t1.a: "BANJO" +==== strict1-1.5 + + CREATE TABLE t1(a TEXT PRIMARY KEY, b INT, c INTEGER, d REAL, e BLOB, f DATE) strict; +---- +stmt 0 err 1 -1 88 unknown datatype for t1.f: "DATE" +==== strict1-1.6 + + CREATE TABLE t1(a TEXT PRIMARY KEY, b INT, c INTEGER, d REAL, e BLOB, f TEXT(50)) WITHOUT ROWID, STRICT; +---- +stmt 0 err 1 -1 107 unknown datatype for t1.f: "TEXT(50)" +==== strict1-2.0 + + CREATE TABLE t1( + a INT, + b INTEGER, + c BLOB, + d TEXT, + e REAL + ) STRICT; +---- +stmt 0 ok +==== strict1-2.0a + + SELECT strict FROM pragma_table_list('t1'); +---- +stmt 0 ok +==== strict1-2.1 + + INSERT INTO t1(a) VALUES('xyz'); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== strict1-2.2 + + INSERT INTO t1(b) VALUES('xyz'); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== strict1-2.3 + + INSERT INTO t1(c) VALUES('xyz'); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== strict1-2.4 + + INSERT INTO t1(d) VALUES(x'3142536475'); +---- +stmt 0 err 1 -1 43 no such table: t1 +==== strict1-2.5 + + INSERT INTO t1(e) VALUES('xyz'); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== strict1-3.1 + + INSERT INTO t1(a, b) VALUES(1,2),('3','4'),(5.0, 6.0),(null,null); + SELECT a, b, '|' FROM t1; +---- +stmt 0 err 1 -1 69 no such table: t1 +stmt 69 err 1 -1 97 no such table: t1 +==== strict1-3.2 + + INSERT INTO t1(a) VALUES(1.2); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== strict1-3.3 + + INSERT INTO t1(a) VALUES(x'313233'); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== strict1-3.4 + + INSERT INTO t1(b) VALUES(1.2); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== strict1-3.5 + + INSERT INTO t1(b) VALUES(x'313233'); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== strict1-4.1 + + DELETE FROM t1; + INSERT INTO t1(c) VALUES(x'313233'), (NULL); + SELECT typeof(c), c FROM t1; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 96 no such table: t1 +==== strict1-4.2 + + INSERT INTO t1(c) VALUES('456'); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== strict1-5.1 + + DELETE FROM t1; + INSERT INTO t1(d) VALUES('xyz'),(4),(5.5),(NULL); + SELECT typeof(d), d FROM t1; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 70 no such table: t1 +stmt 70 err 1 -1 101 no such table: t1 +==== strict1-5.2 + + INSERT INTO t1(d) VALUES(x'4567'); +---- +stmt 0 err 1 -1 37 no such table: t1 +==== strict1-6.1 + + DELETE FROM t1; + INSERT INTO t1(e) VALUES(1),(2.5),('3'),('4.5'),(6.0),(NULL); + SELECT typeof(e), e FROM t1; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 113 no such table: t1 +==== strict1-6.2 + + INSERT INTO t1(e) VALUES('xyz'); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== strict1-6.3 + + INSERT INTO t1(e) VALUES(x'3456'); +---- +stmt 0 err 1 -1 37 no such table: t1 +==== strict1-7.1 + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4( + a INT AS (b*2) VIRTUAL, + b INT AS (c*2) STORED, + c INT PRIMARY KEY + ) STRICT; + INSERT INTO t4(c) VALUES(1); + SELECT * FROM t4; +---- +stmt 0 ok +stmt 29 ok +stmt 147 err 1 -1 180 no such table: t4 +stmt 180 err 1 -1 202 no such table: t4 +==== strict1-7.2 + + ALTER TABLE t4 ADD COLUMN d VARCHAR; +---- +stmt 0 err 1 -1 41 no such table: t4 +==== strict1-7.3 + + ALTER TABLE t4 ADD COLUMN d; +---- +stmt 0 err 1 -1 33 no such table: t4 +==== strict1-8.1 + + CREATE TABLE csv_import_table ( + "debit" TEXT, + "credit" TEXT + ); + INSERT INTO csv_import_table VALUES ('', '250.00'); + CREATE TABLE IF NOT EXISTS transactions ( + debit REAL, + credit REAL, + amount REAL GENERATED ALWAYS AS (ifnull(credit, 0.0) - ifnull(debit, 0.0)) + ) STRICT; + INSERT INTO transactions + SELECT + nullif(debit, '') AS debit, + nullif(credit, '') AS credit + FROM csv_import_table; + SELECT * FROM transactions; +---- +stmt 0 ok +stmt 75 err 1 -1 129 no such table: csv_import_table +stmt 129 ok +stmt 303 err 1 -1 433 no such table: transactions +stmt 433 err 1 -1 463 no such table: transactions +==== strict1-8.2 + + CREATE TABLE t1(x REAL, y REAL AS (x)) STRICT; + INSERT INTO t1 VALUES(5),(4611686018427387904); + SELECT *, '|' FROM t1; +---- +stmt 0 ok +stmt 49 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 124 no such table: t1 +==== strict1-9.1 + + CREATE TABLE strict ( + k INTEGER PRIMARY KEY, + c1 REAL AS(if(k=11,1.5, k=12,2, k=13,'x', k=14,x'34', 0.0)) STORED, + c2 INT AS(if(k=21,1.5, k=22,2, k=23,'x', k=24,x'34', 0)) STORED, + c3 TEXT AS(if(k=31,1.5, k=32,2, k=33,'x', k=34,x'34', 'x')) STORED, + c4 BLOB AS(if(k=41,1.5, k=42,2, k=43,'x', k=44,x'34', x'00')) STORED, + c5 ANY AS(if(k=51,1.5, k=52,2, k=53,'x', k=54,x'34', 0)) STORED + ) STRICT; + INSERT INTO strict(k) VALUES(11); + INSERT INTO strict(k) VALUES(12); + INSERT INTO strict(k) VALUES(22); + INSERT INTO strict(k) VALUES(31); + INSERT INTO strict(k) VALUES(32); + INSERT INTO strict(k) VALUES(33); + INSERT INTO strict(k) VALUES(44); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 432 err 1 -1 468 no such table: strict +stmt 468 err 1 -1 504 no such table: strict +stmt 504 err 1 -1 540 no such table: strict +stmt 540 err 1 -1 576 no such table: strict +stmt 576 err 1 -1 612 no such table: strict +stmt 612 err 1 -1 648 no such table: strict +stmt 648 err 1 -1 684 no such table: strict +stmt 684 ok +==== strict1-9.2.13 + + INSERT INTO strict(k) VALUES(13); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.2.14 + + INSERT INTO strict(k) VALUES(14); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.2.21 + + INSERT INTO strict(k) VALUES(21); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.2.23 + + INSERT INTO strict(k) VALUES(23); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.2.24 + + INSERT INTO strict(k) VALUES(24); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.2.34 + + INSERT INTO strict(k) VALUES(34); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.2.41 + + INSERT INTO strict(k) VALUES(41); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.2.42 + + INSERT INTO strict(k) VALUES(42); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.2.43 + + INSERT INTO strict(k) VALUES(43); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.3 + + DROP TABLE strict; + CREATE TABLE strict ( + k INTEGER PRIMARY KEY, + c1 REAL AS(if(k=11,1.5, k=12,2, k=13,'x', k=14,x'34', 0.0)) VIRTUAL, + c2 INT AS(if(k=21,1.5, k=22,2, k=23,'x', k=24,x'34', 0)) VIRTUAL, + c3 TEXT AS(if(k=31,1.5, k=32,2, k=33,'x', k=34,x'34', 'x')) VIRTUAL, + c4 BLOB AS(if(k=41,1.5, k=42,2, k=43,'x', k=44,x'34', x'00')) VIRTUAL, + c5 ANY AS(if(k=51,1.5, k=52,2, k=53,'x', k=54,x'34', 0)) VIRTUAL + ) STRICT; + INSERT INTO strict(k) VALUES(11); + INSERT INTO strict(k) VALUES(12); + INSERT INTO strict(k) VALUES(22); + INSERT INTO strict(k) VALUES(31); + INSERT INTO strict(k) VALUES(32); + INSERT INTO strict(k) VALUES(33); + INSERT INTO strict(k) VALUES(44); + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 21 no such table: strict +stmt 21 ok +stmt 458 err 1 -1 494 no such table: strict +stmt 494 err 1 -1 530 no such table: strict +stmt 530 err 1 -1 566 no such table: strict +stmt 566 err 1 -1 602 no such table: strict +stmt 602 err 1 -1 638 no such table: strict +stmt 638 err 1 -1 674 no such table: strict +stmt 674 err 1 -1 710 no such table: strict +stmt 710 ok +==== strict1-9.4.13 + + INSERT INTO strict(k) VALUES(13); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.4.14 + + INSERT INTO strict(k) VALUES(14); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.4.21 + + INSERT INTO strict(k) VALUES(21); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.4.23 + + INSERT INTO strict(k) VALUES(23); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.4.24 + + INSERT INTO strict(k) VALUES(24); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.4.34 + + INSERT INTO strict(k) VALUES(34); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.4.41 + + INSERT INTO strict(k) VALUES(41); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.4.42 + + INSERT INTO strict(k) VALUES(42); +---- +stmt 0 err 1 -1 36 no such table: strict +==== strict1-9.4.43 + + INSERT INTO strict(k) VALUES(43); +---- +stmt 0 err 1 -1 36 no such table: strict diff --git a/parser/testdata/strict2.metadata.json b/parser/testdata/strict2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/strict2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/strict2.test b/parser/testdata/strict2.test new file mode 100644 index 0000000..2a70935 --- /dev/null +++ b/parser/testdata/strict2.test @@ -0,0 +1,215 @@ +==== strict2-1.1 + + CREATE TABLE t1( + a INT, + b INTEGER, + c TEXT, + d REAL, + e BLOB + ) STRICT; + CREATE TABLE t1nn( + a INT NOT NULL, + b INTEGER NOT NULL, + c TEXT NOT NULL, + d REAL NOT NULL, + e BLOB NOT NULL + ) STRICT; + CREATE TABLE t2(a,b,c,d,e); + INSERT INTO t1(a,b,c,d,e) VALUES(1,1,'one',1.0,x'b1'),(2,2,'two',2.25,x'b2b2b2'); + PRAGMA writable_schema=on; + UPDATE sqlite_schema SET rootpage=(SELECT rootpage FROM sqlite_schema WHERE name='t1'); +---- +stmt 0 ok +stmt 92 ok +stmt 231 ok +stmt 261 err 1 -1 345 no such table: t1 +stmt 345 ok +stmt 374 ok +==== strict2-1.2 + + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 28 no such table: t1 +==== strict2-1.3 + + UPDATE t2 SET a=2.5 WHERE b=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 err 1 -1 61 no such table: t1 +==== strict2-1.4 + + UPDATE t2 SET a='xyz' WHERE b=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 63 no such table: t1 +==== strict2-1.5 + + UPDATE t2 SET a=x'445566' WHERE b=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 39 no such table: t2 +stmt 39 err 1 -1 67 no such table: t1 +==== strict2-1.6 + + UPDATE t2 SET a=2.5 WHERE b=2; + PRAGMA quick_check('t1nn'); +---- +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 err 1 -1 63 no such table: t1nn +==== strict2-1.7 + + UPDATE t2 SET a='xyz' WHERE b=2; + PRAGMA quick_check('t1nn'); +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 65 no such table: t1nn +==== strict2-1.8 + + UPDATE t2 SET a=x'445566' WHERE b=2; + PRAGMA quick_check('t1nn'); +---- +stmt 0 err 1 -1 39 no such table: t2 +stmt 39 err 1 -1 69 no such table: t1nn +==== strict2-1.13 + + UPDATE t2 SET a=2 WHERE b=2; + UPDATE t2 SET b=2.5 WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 31 no such table: t2 +stmt 31 err 1 -1 64 no such table: t2 +stmt 64 err 1 -1 92 no such table: t1 +==== strict2-1.14 + + UPDATE t2 SET b='two' WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 63 no such table: t1 +==== strict2-1.15 + + UPDATE t2 SET b=x'b0b1b2b3b4' WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 43 no such table: t2 +stmt 43 err 1 -1 71 no such table: t1 +==== strict2-1.16 + + UPDATE t2 SET b=NULL WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 34 no such table: t2 +stmt 34 err 1 -1 62 no such table: t1 +==== strict2-1.17 + + UPDATE t2 SET b=2.5 WHERE a=2; + PRAGMA quick_check('t1nn'); +---- +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 err 1 -1 63 no such table: t1nn +==== strict2-1.18 + + UPDATE t2 SET b=NULL WHERE a=2; + PRAGMA quick_check('t1nn'); +---- +stmt 0 err 1 -1 34 no such table: t2 +stmt 34 err 1 -1 64 no such table: t1nn +==== strict2-1.23 + + UPDATE t2 SET b=2 WHERE a=2; + UPDATE t2 SET c=9 WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 31 no such table: t2 +stmt 31 err 1 -1 62 no such table: t2 +stmt 62 err 1 -1 90 no such table: t1 +==== strict2-1.24 + + UPDATE t2 SET c=9.5 WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 err 1 -1 61 no such table: t1 +==== strict2-1.25 + + UPDATE t2 SET c=x'b0b1b2b3b4' WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 43 no such table: t2 +stmt 43 err 1 -1 71 no such table: t1 +==== strict2-1.33 + + UPDATE t2 SET c='two' WHERE a=2; + UPDATE t2 SET d=9 WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 66 no such table: t2 +stmt 66 err 1 -1 94 no such table: t1 +==== strict2-1.34 + + UPDATE t2 SET d='nine' WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 36 no such table: t2 +stmt 36 err 1 -1 64 no such table: t1 +==== strict2-1.35 + + UPDATE t2 SET d=x'b0b1b2b3b4' WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 43 no such table: t2 +stmt 43 err 1 -1 71 no such table: t1 +==== strict2-1.43 + + UPDATE t2 SET d=2.5 WHERE a=2; + UPDATE t2 SET e=9 WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 err 1 -1 64 no such table: t2 +stmt 64 err 1 -1 92 no such table: t1 +==== strict2-1.44 + + UPDATE t2 SET e=9.5 WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 33 no such table: t2 +stmt 33 err 1 -1 61 no such table: t1 +==== strict2-1.45 + + UPDATE t2 SET e='hello' WHERE a=2; + PRAGMA quick_check('t1'); +---- +stmt 0 err 1 -1 37 no such table: t2 +stmt 37 err 1 -1 65 no such table: t1 +==== strict2-2.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INT, b ANY) STRICT; + INSERT INTO t2(a,b) VALUES(1,2),(3,4.5),(5,'six'),(7,x'8888'),(9,NULL); + PRAGMA integrity_check(t2); +---- +stmt 0 ok +stmt 27 ok +stmt 67 err 1 -1 141 no such table: t2 +stmt 141 err 1 -1 171 no such table: t2 +==== strict2-3.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(id ANY PRIMARY KEY, x TEXT); + INSERT INTO t1 VALUES(1,2),('three','four'),(x'5555','six'),(NULL,'eight'); + PRAGMA writable_schema=ON; + UPDATE sqlite_schema SET sql=(sql||'STRICT') WHERE name='t1'; + PRAGMA writable_schema=RESET; + PRAGMA integrity_check(t1); +---- +stmt 0 ok +stmt 27 ok +stmt 74 err 1 -1 152 no such table: t1 +stmt 152 ok +stmt 181 ok +stmt 245 ok +stmt 277 err 1 -1 307 no such table: t1 diff --git a/parser/testdata/subjournal.metadata.json b/parser/testdata/subjournal.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/subjournal.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/subjournal.test b/parser/testdata/subjournal.test new file mode 100644 index 0000000..ebcbfaf --- /dev/null +++ b/parser/testdata/subjournal.test @@ -0,0 +1,59 @@ +==== 1.0 + + PRAGMA temp_store = memory; + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1, 2, 3); +---- +stmt 0 ok +stmt 30 ok +stmt 56 err 1 -1 90 no such table: t1 +==== 1.1 + + BEGIN; + INSERT INTO t1 VALUES(4, 5, 6); + SAVEPOINT one; + INSERT INTO t1 VALUES(7, 8, 9); + ROLLBACK TO one; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 9 err 1 -1 45 no such table: t1 +stmt 45 ok +stmt 64 err 1 -1 102 no such table: t1 +stmt 102 ok +stmt 123 err 1 -1 145 no such table: t1 +==== 1.2 + + COMMIT; +---- +stmt 0 ok +==== 2.0 + + PRAGMA cache_size = 5; + CREATE TABLE t2(a BLOB); + CREATE INDEX i2 ON t2(a); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 + ) INSERT INTO t2 SELECT randomblob(500) FROM s; +---- +stmt 0 ok +stmt 25 ok +stmt 52 err 1 -1 80 no such table: main.t2 +stmt 80 err 1 -1 200 no such table: t2 +==== 2.2 + + BEGIN; + UPDATE t2 SET a=randomblob(499); + SAVEPOINT two; + UPDATE t2 SET a=randomblob(498); + ROLLBACK TO two; + COMMIT; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 9 err 1 -1 46 no such table: t2 +stmt 46 ok +stmt 65 err 1 -1 104 no such table: t2 +stmt 104 ok +stmt 125 ok +stmt 135 ok diff --git a/parser/testdata/subquery.metadata.json b/parser/testdata/subquery.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/subquery.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/subquery.test b/parser/testdata/subquery.test new file mode 100644 index 0000000..efcc203 --- /dev/null +++ b/parser/testdata/subquery.test @@ -0,0 +1,561 @@ +==== subquery-1.2 + + UPDATE t1 SET b=b+(SELECT y FROM t2 WHERE x=a); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 74 no such table: t1 +==== subquery-1.3 + + SELECT b FROM t1 WHERE EXISTS(SELECT * FROM t2 WHERE y=a) +---- +stmt 0 err 1 -1 63 no such table: t1 +==== subquery-1.4 + + SELECT b FROM t1 WHERE NOT EXISTS(SELECT * FROM t2 WHERE y=a) +---- +stmt 0 err 1 -1 67 no such table: t1 +==== subquery-1.5 + + SELECT a, x FROM t1, t2 WHERE t1.a = (SELECT x); +---- +stmt 0 err 1 -1 53 no such table: t1 +==== subquery-1.6 + + CREATE INDEX i1 ON t1(a); + SELECT a, x FROM t1, t2 WHERE t1.a = (SELECT x); +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 err 1 -1 83 no such table: t1 +==== subquery-1.7 + + SELECT a, x FROM t2, t1 WHERE t1.a = (SELECT x); +---- +stmt 0 err 1 -1 53 no such table: t2 +==== subquery-1.8 + + SELECT count(*) FROM t1 WHERE a > (SELECT count(*) FROM t2); +---- +stmt 0 err 1 -1 65 no such table: t1 +==== subquery-1.9.1 + + SELECT (y*2)>b FROM t1, t2 WHERE a=x; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== subquery-1.9.2 + + SELECT a FROM t1 WHERE (SELECT (y*2)>b FROM t2 WHERE a=x); +---- +stmt 0 err 1 -1 63 no such table: t1 +==== subquery-1.10.1 + + SELECT (SELECT a), b FROM t1; +---- +stmt 0 err 1 -1 34 no such table: t1 +==== subquery-1.10.2 + + SELECT * FROM (SELECT (SELECT a), b FROM t1); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== subquery-1.10.3 + + SELECT * FROM (SELECT (SELECT sum(a) FROM t1)); +---- +stmt 0 err 1 -1 52 no such table: t1 +==== subquery-1.10.4 + + CREATE TABLE t5 (val int, period text PRIMARY KEY); + INSERT INTO t5 VALUES(5, '2001-3'); + INSERT INTO t5 VALUES(10, '2001-4'); + INSERT INTO t5 VALUES(15, '2002-1'); + INSERT INTO t5 VALUES(5, '2002-2'); + INSERT INTO t5 VALUES(10, '2002-3'); + INSERT INTO t5 VALUES(15, '2002-4'); + INSERT INTO t5 VALUES(10, '2003-1'); + INSERT INTO t5 VALUES(5, '2003-2'); + INSERT INTO t5 VALUES(25, '2003-3'); + INSERT INTO t5 VALUES(5, '2003-4'); + + SELECT period, vsum + FROM (SELECT + a.period, + (select sum(val) from t5 where period between a.period and '2002-4') vsum + FROM t5 a where a.period between '2002-1' and '2002-4') + WHERE vsum < 45 ; +---- +stmt 0 ok +stmt 56 err 1 -1 96 no such table: t5 +stmt 96 err 1 -1 137 no such table: t5 +stmt 137 err 1 -1 178 no such table: t5 +stmt 178 err 1 -1 218 no such table: t5 +stmt 218 err 1 -1 259 no such table: t5 +stmt 259 err 1 -1 300 no such table: t5 +stmt 300 err 1 -1 341 no such table: t5 +stmt 341 err 1 -1 381 no such table: t5 +stmt 381 err 1 -1 422 no such table: t5 +stmt 422 err 1 -1 462 no such table: t5 +stmt 462 err 1 -1 685 no such table: t5 +==== subquery-1.10.5 + + SELECT period, vsum from + (select a.period, + (select sum(val) from t5 where period between a.period and '2002-4') vsum + FROM t5 a where a.period between '2002-1' and '2002-4') + WHERE vsum < 45 ; +---- +stmt 0 err 1 -1 216 no such table: t5 +==== subquery-1.10.6 + + DROP TABLE t5; +---- +stmt 0 err 1 -1 19 no such table: t5 +==== subquery-2.1 + + SELECT (SELECT 10); +---- +stmt 0 ok +==== subquery-2.2.1 + + CREATE TABLE t3(a PRIMARY KEY, b); + INSERT INTO t3 VALUES(1, 2); + INSERT INTO t3 VALUES(3, 1); +---- +stmt 0 ok +stmt 39 err 1 -1 72 no such table: t3 +stmt 72 err 1 -1 105 no such table: t3 +==== subquery-2.2.2 + + SELECT * FROM t3 WHERE a IN (SELECT b FROM t3); +---- +stmt 0 err 1 -1 52 no such table: t3 +==== subquery-2.2.3 + + DROP TABLE t3; +---- +stmt 0 err 1 -1 19 no such table: t3 +==== subquery-2.3.1 + + CREATE TABLE t3(a TEXT); + INSERT INTO t3 VALUES('10'); +---- +stmt 0 ok +stmt 29 err 1 -1 62 no such table: t3 +==== subquery-2.3.2 + + SELECT a IN (10.0, 20) FROM t3; +---- +stmt 0 err 1 -1 36 no such table: t3 +==== subquery-2.3.3 + + DROP TABLE t3; +---- +stmt 0 err 1 -1 19 no such table: t3 +==== subquery-2.4.1 + + CREATE TABLE t3(a TEXT); + INSERT INTO t3 VALUES('XX'); +---- +stmt 0 ok +stmt 29 err 1 -1 62 no such table: t3 +==== subquery-2.4.2 + + SELECT count(*) FROM t3 WHERE a IN (SELECT 'XX') +---- +stmt 0 err 1 -1 54 no such table: t3 +==== subquery-2.4.3 + + DROP TABLE t3; +---- +stmt 0 err 1 -1 19 no such table: t3 +==== subquery-2.5.1 + + CREATE TABLE t3(a INTEGER); + INSERT INTO t3 VALUES(10); + + CREATE TABLE t4(x TEXT); + INSERT INTO t4 VALUES('10.0'); +---- +stmt 0 ok +stmt 32 err 1 -1 63 no such table: t3 +stmt 63 ok +stmt 93 err 1 -1 128 no such table: t4 +==== subquery-2.5.4 + + DROP TABLE t3; + DROP TABLE t4; +---- +stmt 0 err 1 -1 19 no such table: t3 +stmt 19 err 1 -1 38 no such table: t4 +==== subquery-3.1.1 + + SELECT * FROM v1 WHERE EXISTS(SELECT 1); +---- +stmt 0 err 1 -1 47 no such table: v1 +==== subquery-3.3.1 + + SELECT a, (SELECT b) FROM t1 GROUP BY a; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== subquery-3.3.3 + + INSERT INTO t1 VALUES(2, 4); + SELECT max(a), (SELECT d FROM t2 WHERE a=c) FROM t1; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 90 no such table: t1 +==== subquery-3.3.4 + + SELECT a, (SELECT (SELECT d FROM t2 WHERE a=c)) FROM t1 GROUP BY a; +---- +stmt 0 err 1 -1 72 no such table: t1 +==== subquery-3.3.5 + + SELECT a, (SELECT count(*) FROM t2 WHERE a=c) FROM t1; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== subquery-3.4.1 + + CREATE TABLE t34(x,y); + INSERT INTO t34 VALUES(106,4), (107,3), (106,5), (107,5); + SELECT a.x, avg(a.y) + FROM t34 AS a + GROUP BY a.x + HAVING NOT EXISTS( SELECT b.x, avg(b.y) + FROM t34 AS b + GROUP BY b.x + HAVING avg(a.y) > avg(b.y)); +---- +stmt 0 ok +stmt 27 err 1 -1 89 no such table: t34 +stmt 89 err 1 -1 329 no such table: t34 +==== subquery-3.4.2 + + SELECT a.x, avg(a.y) AS avg1 + FROM t34 AS a + GROUP BY a.x + HAVING NOT EXISTS( SELECT b.x, avg(b.y) AS avg2 + FROM t34 AS b + GROUP BY b.x + HAVING avg1 > avg2); +---- +stmt 0 err 1 -1 248 no such table: t34 +==== subquery-3.4.3 + + SELECT + a.x, + avg(a.y), + NOT EXISTS ( SELECT b.x, avg(b.y) + FROM t34 AS b + GROUP BY b.x + HAVING avg(a.y) > avg(b.y)), + EXISTS ( SELECT c.x, avg(c.y) + FROM t34 AS c + GROUP BY c.x + HAVING avg(a.y) > avg(c.y)) + FROM t34 AS a + GROUP BY a.x + ORDER BY a.x; +---- +stmt 0 err 1 -1 404 no such table: t34 +==== subquery-3.5.1 + + CREATE TABLE t35a(x); INSERT INTO t35a VALUES(1),(2),(3); + CREATE TABLE t35b(y); INSERT INTO t35b VALUES(98), (99); + SELECT max((SELECT avg(y) FROM t35b)) FROM t35a; +---- +stmt 0 ok +stmt 26 err 1 -1 62 no such table: t35a +stmt 62 ok +stmt 88 err 1 -1 123 no such table: t35b +stmt 123 err 1 -1 176 no such table: t35a +==== subquery-3.5.2 + + SELECT max((SELECT count(y) FROM t35b)) FROM t35a; +---- +stmt 0 err 1 -1 55 no such table: t35a +==== subquery-3.5.3 + + SELECT max((SELECT count() FROM t35b)) FROM t35a; +---- +stmt 0 err 1 -1 54 no such table: t35a +==== subquery-3.5.4 + + SELECT max((SELECT count(x) FROM t35b)) FROM t35a; +---- +stmt 0 err 1 -1 55 no such table: t35a +==== subquery-3.5.5 + + SELECT max((SELECT count(x) FROM t35b)) FROM t35a; +---- +stmt 0 err 1 -1 55 no such table: t35a +==== subquery-3.5.6 + + SELECT max((SELECT a FROM (SELECT count(x) AS a FROM t35b))) FROM t35a; +---- +stmt 0 err 1 -1 76 no such table: t35a +==== subquery-3.5.7 + + SELECT max((SELECT a FROM (SELECT count(y) AS a FROM t35b))) FROM t35a; +---- +stmt 0 err 1 -1 76 no such table: t35a +==== subquery-4.1.1 + + SELECT (SELECT a FROM t1); +---- +stmt 0 err 1 -1 31 no such table: t1 +==== subquery-4.2 + + DELETE FROM t1; + SELECT (SELECT a FROM t1); +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 51 no such table: t1 +==== subquery-4.2.2 +INSERT INTO t3 VALUES((SELECT max(a) FROM t3)+1) +---- +stmt 0 err 1 -1 49 no such table: t3 +==== subquery-7.1 + + CREATE TABLE t7(c7); + INSERT INTO t7 VALUES(1); + INSERT INTO t7 VALUES(2); + INSERT INTO t7 VALUES(3); + CREATE TABLE t8(c8); + INSERT INTO t8 VALUES(100); + INSERT INTO t8 VALUES(200); + INSERT INTO t8 VALUES(300); + CREATE TABLE t9(c9); + INSERT INTO t9 VALUES(10000); + INSERT INTO t9 VALUES(20000); + INSERT INTO t9 VALUES(30000); + + SELECT (SELECT c7+c8 FROM t7) FROM t8; +---- +stmt 0 ok +stmt 25 err 1 -1 55 no such table: t7 +stmt 55 err 1 -1 85 no such table: t7 +stmt 85 err 1 -1 115 no such table: t7 +stmt 115 ok +stmt 140 err 1 -1 172 no such table: t8 +stmt 172 err 1 -1 204 no such table: t8 +stmt 204 err 1 -1 236 no such table: t8 +stmt 236 ok +stmt 261 err 1 -1 295 no such table: t9 +stmt 295 err 1 -1 329 no such table: t9 +stmt 329 err 1 -1 363 no such table: t9 +stmt 363 err 1 -1 407 no such table: t8 +==== subquery-7.2 + + SELECT (SELECT max(c7)+c8 FROM t7) FROM t8; +---- +stmt 0 err 1 -1 48 no such table: t8 +==== subquery-7.3 + + SELECT (SELECT c7+max(c8) FROM t8) FROM t7 +---- +stmt 0 err 1 -1 48 no such table: t7 +==== subquery-7.4 + + SELECT (SELECT max(c7)+max(c8) FROM t8) FROM t7 +---- +stmt 0 err 1 -1 53 no such table: t7 +==== subquery-7.5 + + SELECT (SELECT c8 FROM t8 WHERE rowid=max(c7)) FROM t7 +---- +stmt 0 err 1 -1 60 no such table: t7 +==== subquery-7.6 + + SELECT (SELECT (SELECT max(c7+c8+c9) FROM t9) FROM t8) FROM t7 +---- +stmt 0 err 1 -1 68 no such table: t7 +==== subquery-7.7 + + SELECT (SELECT (SELECT c7+max(c8+c9) FROM t9) FROM t8) FROM t7 +---- +stmt 0 err 1 -1 68 no such table: t7 +==== subquery-7.8 + + SELECT (SELECT (SELECT max(c7)+c8+c9 FROM t9) FROM t8) FROM t7 +---- +stmt 0 err 1 -1 68 no such table: t7 +==== subquery-7.9 + + SELECT (SELECT (SELECT c7+max(c8)+c9 FROM t9) FROM t8) FROM t7 +---- +stmt 0 err 1 -1 68 no such table: t7 +==== subquery-7.10 + + SELECT (SELECT (SELECT c7+c8+max(c9) FROM t9) FROM t8) FROM t7 +---- +stmt 0 err 1 -1 68 no such table: t7 +==== subquery-7.11 + + SELECT (SELECT (SELECT max(c7)+max(c8)+max(c9) FROM t9) FROM t8) FROM t7 +---- +stmt 0 err 1 -1 78 no such table: t7 +==== subquery-8.1 + + CREATE TABLE t8(a TEXT, b INT); + SELECT (SELECT 0 FROM (SELECT * FROM t1)) AS x WHERE x; + SELECT (SELECT 0 FROM (SELECT * FROM (SELECT 0))) AS x WHERE x; +---- +stmt 0 ok +stmt 34 err 1 -1 92 no such table: t1 +stmt 92 ok +==== subquery-9.1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1),(1),(1); + SELECT (SELECT DISTINCT x FROM t1 ORDER BY +x LIMIT 1 OFFSET 100) FROM t1; +---- +stmt 0 ok +stmt 22 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 135 no such table: t1 +==== subquery-9.2 + + SELECT (SELECT DISTINCT x FROM t1 ORDER BY +x LIMIT 1 OFFSET 0) FROM t1; +---- +stmt 0 err 1 -1 75 no such table: t1 +==== subquery-9.3 + + INSERT INTO t1 VALUES(2); + SELECT (SELECT DISTINCT x FROM t1 ORDER BY +x LIMIT 1 OFFSET 1) FROM t1; +---- +stmt 0 err 1 -1 28 no such table: t1 +stmt 28 err 1 -1 103 no such table: t1 +==== subquery-9.4 + + SELECT (SELECT DISTINCT x FROM t1 ORDER BY +x LIMIT 1 OFFSET 2) FROM t1; +---- +stmt 0 err 1 -1 75 no such table: t1 +==== subquery-10.1 + + CREATE TABLE t1(aa TEXT, bb INT, cc TEXT); + CREATE INDEX x11 on t1(bb); + CREATE INDEX x12 on t1(aa); + CREATE TABLE t2(aa TEXT, xx INT); + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES('t1', 'x11', '156789 28'); + INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES('t1', 'x12', '156789 1'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 45 err 1 -1 75 no such table: main.t1 +stmt 75 err 1 -1 105 no such table: main.t1 +stmt 105 ok +stmt 141 ok +stmt 166 err 1 -1 243 no such table: sqlite_stat1 +stmt 243 err 1 -1 319 no such table: sqlite_stat1 +stmt 319 ok +==== 10.3 + + CREATE TABLE blob( + rid INTEGER PRIMARY KEY, + size INT, + uuid TEXT + ); + CREATE TABLE delta( + rid INTEGER PRIMARY KEY, + srcid INT + ); + CREATE INDEX delta_i1 ON delta(srcid); +---- +stmt 0 ok +stmt 83 ok +stmt 153 err 1 -1 194 no such table: main.delta +==== subquery-11.1 + + CREATE TABLE t1(ix INT, rx REAL, bx BLOB, tx TEXT, ax); + INSERT INTO t1 VALUES(1,1.0,x'31','x',NULL); + WITH c(a) AS (SELECT 'y' UNION SELECT tx FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT tx FROM t1 UNION SELECT 'y') SELECT affinity(a) FROM c; +---- +stmt 0 ok +stmt 58 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 184 no such table: t1 +stmt 184 err 1 -1 263 no such table: t1 +==== subquery-11.2 + + WITH c(a) AS (SELECT 2 UNION SELECT tx FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT tx FROM t1 UNION SELECT 2) SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 154 no such table: t1 +==== subquery-11.3 + + WITH c(a) AS (SELECT 2.0 UNION SELECT tx FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT tx FROM t1 UNION SELECT 2.0) SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 158 no such table: t1 +==== subquery-11.4 + + WITH c(a) AS (SELECT null UNION SELECT tx FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT tx FROM t1 UNION SELECT null) SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 160 no such table: t1 +==== subquery-11.5 + + WITH c(a) AS (SELECT x'32' UNION SELECT tx FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT tx FROM t1 UNION SELECT x'32') SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 162 no such table: t1 +==== subquery-11.6 + + WITH c(a) AS (SELECT 3 UNION SELECT ix FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT ix FROM t1 UNION SELECT 3) SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 154 no such table: t1 +==== subquery-11.7 + + WITH c(a) AS (SELECT 3.0 UNION SELECT ix FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT ix FROM t1 UNION SELECT 3.0) SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 158 no such table: t1 +==== subquery-11.8 + + WITH c(a) AS (SELECT '3' UNION SELECT ix FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT ix FROM t1 UNION SELECT '3') SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 158 no such table: t1 +==== subquery-11.10 + + WITH c(a) AS (SELECT x'32' UNION SELECT ix FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT ix FROM t1 UNION SELECT x'32') SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 162 no such table: t1 +==== subquery-11.11 + + WITH c(a) AS (SELECT 4 UNION SELECT rx FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT rx FROM t1 UNION SELECT 4) SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 154 no such table: t1 +==== subquery-11.12 + + WITH c(a) AS (SELECT '4' UNION SELECT rx FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT rx FROM t1 UNION SELECT '4') SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 158 no such table: t1 +==== subquery-11.13 + + WITH c(a) AS (SELECT null UNION SELECT rx FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT rx FROM t1 UNION SELECT null) SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 160 no such table: t1 +==== subquery-11.14 + + WITH c(a) AS (SELECT x'b4' UNION SELECT rx FROM t1) SELECT affinity(a) FROM c; + WITH c(a) AS (SELECT rx FROM t1 UNION SELECT x'b4') SELECT affinity(a) FROM c; +---- +stmt 0 err 1 -1 81 no such table: t1 +stmt 81 err 1 -1 162 no such table: t1 diff --git a/parser/testdata/subquery2.metadata.json b/parser/testdata/subquery2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/subquery2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/subquery2.test b/parser/testdata/subquery2.test new file mode 100644 index 0000000..8960742 --- /dev/null +++ b/parser/testdata/subquery2.test @@ -0,0 +1,231 @@ +==== subquery2-1.2 + + CREATE INDEX t1b ON t1(b); + SELECT a FROM t1 + WHERE b IN (SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3)); +---- +stmt 0 err 1 -1 31 no such table: main.t1 +stmt 31 err 1 -1 126 no such table: t1 +==== subquery2-1.11 + + SELECT a FROM t1 + WHERE +b=(SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3)); +---- +stmt 0 err 1 -1 93 no such table: t1 +==== subquery2-1.12 + + SELECT a FROM t1 + WHERE b=(SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3)); +---- +stmt 0 err 1 -1 92 no such table: t1 +==== subquery2-1.21 + + SELECT a FROM t1 + WHERE +b=(SELECT x+1 FROM + (SELECT DISTINCT f/d AS x FROM t2 JOIN t3 ON d*a=f)) +---- +stmt 0 err 1 -1 124 no such table: t1 +==== subquery2-1.22 + + SELECT a FROM t1 + WHERE b=(SELECT x+1 FROM + (SELECT DISTINCT f/d AS x FROM t2 JOIN t3 ON d*a=f)) +---- +stmt 0 err 1 -1 123 no such table: t1 +==== 2.1 + + CREATE TABLE t4(a, b); + CREATE TABLE t5(a, b); + INSERT INTO t5 VALUES(3, 5); + + INSERT INTO t4 VALUES(1, 1); + INSERT INTO t4 VALUES(2, 3); + INSERT INTO t4 VALUES(3, 6); + INSERT INTO t4 VALUES(4, 10); + INSERT INTO t4 VALUES(5, 15); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 81 no such table: t5 +stmt 81 err 1 -1 113 no such table: t4 +stmt 113 err 1 -1 144 no such table: t4 +stmt 144 err 1 -1 175 no such table: t4 +stmt 175 err 1 -1 207 no such table: t4 +stmt 207 err 1 -1 239 no such table: t4 +==== 2.2 + + SELECT * + FROM (SELECT * FROM t4 ORDER BY a LIMIT -1 OFFSET 1) + LIMIT (SELECT a FROM t5) +---- +stmt 0 err 1 -1 96 no such table: t4 +==== 3.0 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1 (id INTEGER PRIMARY KEY, data TEXT); + INSERT INTO t1(id,data) VALUES(9,'nine-a'); + INSERT INTO t1(id,data) VALUES(10,'ten-a'); + INSERT INTO t1(id,data) VALUES(11,'eleven-a'); + CREATE TABLE t2 (id INTEGER PRIMARY KEY, data TEXT); + INSERT INTO t2(id,data) VALUES(9,'nine-b'); + INSERT INTO t2(id,data) VALUES(10,'ten-b'); + INSERT INTO t2(id,data) VALUES(11,'eleven-b'); + + SELECT id FROM ( + SELECT id,data FROM ( + SELECT * FROM t1 UNION ALL SELECT * FROM t2 + ) + WHERE id=10 ORDER BY data + ); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 109 err 1 -1 155 no such table: t1 +stmt 155 err 1 -1 201 no such table: t1 +stmt 201 err 1 -1 250 no such table: t1 +stmt 250 ok +stmt 305 err 1 -1 351 no such table: t2 +stmt 351 err 1 -1 397 no such table: t2 +stmt 397 err 1 -1 446 no such table: t2 +stmt 446 err 1 -1 586 no such table: t2 +==== 3.1 + + SELECT data FROM ( + SELECT 'dummy', data FROM ( + SELECT data FROM t1 UNION ALL SELECT data FROM t1 + ) ORDER BY data + ); +---- +stmt 0 err 1 -1 137 no such table: t1 +==== 3.2 + + DROP TABLE IF EXISTS t3; + DROP TABLE IF EXISTS t4; + CREATE TABLE t3(id INTEGER, data TEXT); + CREATE TABLE t4(id INTEGER, data TEXT); + INSERT INTO t3 VALUES(4, 'a'),(2,'c'); + INSERT INTO t4 VALUES(3, 'b'),(1,'d'); + + SELECT data, id FROM ( + SELECT id, data FROM ( + SELECT * FROM t3 UNION ALL SELECT * FROM t4 + ) ORDER BY data + ); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 96 ok +stmt 138 err 1 -1 179 no such table: t3 +stmt 179 err 1 -1 220 no such table: t4 +stmt 220 err 1 -1 349 no such table: t4 +==== 4.0 + + CREATE TABLE t6(x); +---- +stmt 0 ok +==== 5.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('ALFKI'); + INSERT INTO t1 VALUES('ANATR'); + + CREATE TABLE t2(y, z); + CREATE INDEX t2y ON t2 (y); + INSERT INTO t2 VALUES('ANATR', '1997-08-08 00:00:00'); + INSERT INTO t2 VALUES('ALFKI', '1997-08-25 00:00:00'); +---- +stmt 0 ok +stmt 22 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 90 no such table: t1 +stmt 90 ok +stmt 116 err 1 -1 146 no such table: main.t2 +stmt 146 err 1 -1 203 no such table: t2 +stmt 203 err 1 -1 260 no such table: t2 +==== 5.1 + + SELECT ( SELECT y FROM t2 WHERE x = y ORDER BY y, z) FROM t1; +---- +stmt 0 err 1 -1 64 no such table: t1 +==== 6.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1234); +---- +stmt 0 ok +stmt 22 err 1 -1 53 no such table: t1 +==== 6.1 + + SELECT DISTINCT 'string' FROM t1 LIMIT 1 OFFSET 5; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== 6.2 + + SELECT ( + SELECT 'string' FROM t1 LIMIT 1 OFFSET 5 + ); +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 6.3 + + SELECT ( + SELECT DISTINCT 'string' FROM t1 LIMIT 1 OFFSET 5 + ); +---- +stmt 0 err 1 -1 72 no such table: t1 +==== 6.4 + + SELECT ( + SELECT DISTINCT 'string' FROM t1 ORDER BY 1 LIMIT 1 OFFSET 5 + ); +---- +stmt 0 err 1 -1 83 no such table: t1 +==== 6.5 + + SELECT ( + SELECT 'string' FROM t1 ORDER BY 1 LIMIT 1 OFFSET 5 + ); +---- +stmt 0 err 1 -1 74 no such table: t1 +==== 6.6 + + SELECT (SELECT DISTINCT x, x FROM t1 LIMIT 1 OFFSET 5)==(1234, 1234) +---- +stmt 0 err 1 -1 72 no such table: t1 +==== 7.0 + + CREATE TABLE t1(x); + CREATE INDEX i1 ON t1(x); + INSERT INTO t1 VALUES(1234); +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: main.t1 +stmt 50 err 1 -1 81 no such table: t1 +==== 7.1 + + SELECT ( + SELECT DISTINCT 'string' FROM t1 ORDER BY x LIMIT 1 OFFSET 5 + ); +---- +stmt 0 err 1 -1 81 no such table: t1 +==== 7.2 + + DROP INDEX i1; + CREATE UNIQUE INDEX i1 ON t1(x); +---- +stmt 0 err 1 -1 17 no such index: i1 +stmt 17 err 1 -1 52 no such table: main.t1 +==== 7.3 + + SELECT ( + SELECT DISTINCT x FROM t1 ORDER BY 1 LIMIT 1 OFFSET 5 + ); +---- +stmt 0 err 1 -1 74 no such table: t1 +==== 7.4 + + SELECT (SELECT DISTINCT x FROM t1 ORDER BY +x LIMIT 1 OFFSET 0); +---- +stmt 0 err 1 -1 67 no such table: t1 diff --git a/parser/testdata/subselect.metadata.json b/parser/testdata/subselect.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/subselect.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/subselect.test b/parser/testdata/subselect.test new file mode 100644 index 0000000..4da4907 --- /dev/null +++ b/parser/testdata/subselect.test @@ -0,0 +1,130 @@ +==== subselect-1.3a +SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=2) +---- +stmt 0 err 1 -1 56 no such table: t1 +==== subselect-1.3b +SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=4) +---- +stmt 0 err 1 -1 56 no such table: t1 +==== subselect-1.3c +SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=6) +---- +stmt 0 err 1 -1 56 no such table: t1 +==== subselect-1.3d +SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=8) +---- +stmt 0 err 1 -1 56 no such table: t1 +==== subselect-1.3e + + SELECT b FROM t1 + WHERE a = (SELECT a FROM t1 UNION SELECT b FROM t1 ORDER BY 1); +---- +stmt 0 err 1 -1 94 no such table: t1 +==== subselect-1.4 +SELECT b from t1 where a = coalesce((SELECT a FROM t1 WHERE b=5),1) +---- +stmt 0 err 1 -1 68 no such table: t1 +==== subselect-2.1 + + SELECT (SELECT a FROM t1 ORDER BY a), (SELECT a FROM t1 ORDER BY a DESC) +---- +stmt 0 err 1 -1 78 no such table: t1 +==== subselect-2.2 + + SELECT 1 IN (SELECT a FROM t1 ORDER BY a); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== subselect-2.3 + + SELECT 2 IN (SELECT a FROM t1 ORDER BY a DESC); +---- +stmt 0 err 1 -1 52 no such table: t1 +==== subselect-3.1 + + CREATE TABLE t3(x int); + INSERT INTO t3 SELECT a FROM t1 UNION ALL SELECT b FROM t1; + SELECT * FROM t3 ORDER BY x; +---- +stmt 0 ok +stmt 28 err 1 -1 92 no such table: t3 +stmt 92 err 1 -1 125 no such table: t3 +==== subselect-3.1.dup1 + + CREATE TABLE t3(x int); + INSERT INTO t3 SELECT a FROM t1; + INSERT INTO t3 SELECT b FROM t1; + SELECT * FROM t3 ORDER BY x; +---- +stmt 0 ok +stmt 28 err 1 -1 65 no such table: t3 +stmt 65 err 1 -1 103 no such table: t3 +stmt 103 err 1 -1 136 no such table: t3 +==== subselect-3.2 + + SELECT sum(x) FROM (SELECT x FROM t3 ORDER BY x LIMIT 2); +---- +stmt 0 err 1 -1 62 no such table: t3 +==== subselect-3.3 + + SELECT sum(x) FROM (SELECT x FROM t3 ORDER BY x DESC LIMIT 2); +---- +stmt 0 err 1 -1 67 no such table: t3 +==== subselect-3.4 + + SELECT (SELECT x FROM t3 ORDER BY x); +---- +stmt 0 err 1 -1 42 no such table: t3 +==== subselect-3.5 + + SELECT (SELECT x FROM t3 ORDER BY x DESC); +---- +stmt 0 err 1 -1 47 no such table: t3 +==== subselect-3.6 + + SELECT (SELECT x FROM t3 ORDER BY x LIMIT 1); +---- +stmt 0 err 1 -1 50 no such table: t3 +==== subselect-3.7 + + SELECT (SELECT x FROM t3 ORDER BY x DESC LIMIT 1); +---- +stmt 0 err 1 -1 55 no such table: t3 +==== subselect-3.8 + + SELECT (SELECT x FROM t3 ORDER BY x LIMIT 1 OFFSET 2); +---- +stmt 0 err 1 -1 59 no such table: t3 +==== subselect-3.9 + + SELECT (SELECT x FROM t3 ORDER BY x DESC LIMIT 1 OFFSET 2); +---- +stmt 0 err 1 -1 64 no such table: t3 +==== subselect-3.10 + + SELECT x FROM t3 WHERE x IN + (SELECT x FROM t3 ORDER BY x DESC LIMIT 1 OFFSET 2); +---- +stmt 0 err 1 -1 92 no such table: t3 +==== subselect-4.1 + + CREATE TABLE t4(a TEXT, b TEXT); + INSERT INTO t4 VALUES('a','1'); + INSERT INTO t4 VALUES('b','2'); + INSERT INTO t4 VALUES('c','3'); + SELECT a FROM t4 WHERE b IN (SELECT b FROM t4 ORDER BY b); +---- +stmt 0 ok +stmt 37 err 1 -1 73 no such table: t4 +stmt 73 err 1 -1 109 no such table: t4 +stmt 109 err 1 -1 145 no such table: t4 +stmt 145 err 1 -1 208 no such table: t4 +==== subselect-4.2 + + SELECT a FROM t4 WHERE b IN (SELECT b FROM t4 ORDER BY b LIMIT 1); +---- +stmt 0 err 1 -1 71 no such table: t4 +==== subselect-4.3 + + SELECT a FROM t4 WHERE b IN (SELECT b FROM t4 ORDER BY b DESC LIMIT 1); +---- +stmt 0 err 1 -1 76 no such table: t4 diff --git a/parser/testdata/subtype1.metadata.json b/parser/testdata/subtype1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/subtype1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/subtype1.test b/parser/testdata/subtype1.test new file mode 100644 index 0000000..4e6e534 --- /dev/null +++ b/parser/testdata/subtype1.test @@ -0,0 +1,90 @@ +==== subtype1-100 + + SELECT test_getsubtype('hello'); +---- +stmt 0 err 1 10 35 no such function: test_getsubtype +==== subtype1-110 + + SELECT test_getsubtype(test_setsubtype('hello',123)); +---- +stmt 0 err 1 26 56 no such function: test_setsubtype +==== subtype1-120 + + SELECT typeof(test_setsubtype('hello',123)); +---- +stmt 0 err 1 17 47 no such function: test_setsubtype +==== subtype1-130 + + SELECT test_setsubtype('hello',123); +---- +stmt 0 err 1 10 39 no such function: test_setsubtype +==== subtype1-200 + + CREATE TABLE t1(a); INSERT INTO t1 VALUES ('x'); + CREATE VIEW t2(b) AS SELECT json(TRUE); + CREATE TABLE t3(b); INSERT INTO t3 VALUES(json(TRUE)); +---- +stmt 0 ok +stmt 22 err 1 -1 51 no such table: t1 +stmt 51 ok +stmt 93 ok +stmt 115 err 1 -1 150 no such table: t3 +==== subtype1-210 + + SELECT * FROM t3, t1 WHERE NOT json_quote(b); +---- +stmt 0 err 1 -1 48 no such table: t3 +==== subtype1-220 + + SELECT * FROM t2, t1 WHERE NOT json_quote(b); +---- +stmt 0 err 1 -1 48 no such table: t2 +==== subtype1-230 + + WITH t4(a) AS MATERIALIZED (SELECT json(1)) SELECT subtype(a) FROM t4; +---- +stmt 0 ok +==== subtype1-231 + + WITH t4(a) AS NOT MATERIALIZED (SELECT json(1)) SELECT subtype(a) FROM t4; +---- +stmt 0 ok +==== subtype1-300 + + CREATE TABLE t0(c0); + INSERT INTO t0 VALUES ('1'); + CREATE VIEW v0(c0) AS SELECT CASE WHEN 1 THEN json_patch('1', '1') END + FROM t0 GROUP BY t0.c0; + SELECT * FROM v0 WHERE json_quote(v0.c0) != '1'; +---- +stmt 0 ok +stmt 23 err 1 -1 54 no such table: t0 +stmt 54 ok +stmt 176 err 1 -1 227 no such table: v0 +==== subtype1-310 + + SELECT *, json_quote(y) FROM (SELECT +json('1') AS y); +---- +stmt 0 ok +==== subtype1-320 + + SELECT *, json_quote(y) FROM (SELECT +json('1') AS y) + WHERE json_quote(y)='"1"'; +---- +stmt 0 ok +==== subtype1-400 + + WITH t400(id,j) AS (VALUES + (1,'{a:{x:1,y:2},b:{x:3,y:4}}'), + (2,'not json') + ) + SELECT id, subtype(if(json_valid(j,6),j->'a')) FROM t400; +---- +stmt 0 ok +==== subtype1-500 + + CREATE TABLE t1(id, j); + INSERT INTO t1 VALUES (1,'{a:{x:1,y:2},b:{x:3,y:4}}'), (2,'not json'); +---- +stmt 0 ok +stmt 26 err 1 -1 99 no such table: t1 diff --git a/parser/testdata/superlock.metadata.json b/parser/testdata/superlock.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/superlock.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/superlock.test b/parser/testdata/superlock.test new file mode 100644 index 0000000..c2cbda0 --- /dev/null +++ b/parser/testdata/superlock.test @@ -0,0 +1,166 @@ +==== 1.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + PRAGMA journal_mode = DELETE; +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 ok +==== 1.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 2.1 + + INSERT INTO t1 VALUES(3, 4); + PRAGMA journal_mode = WAL; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 ok +==== 2.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 2.4 + INSERT INTO t1 VALUES(5, 6) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 2.5 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== 3.1 + INSERT INTO t1 VALUES(3, 4) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 3.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 3.4 + INSERT INTO t1 VALUES(5, 6) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 3.5 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== 4.1 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== 4.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 4.4 + INSERT INTO t1 VALUES(5, 6) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 4.5 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== 6.1 + + ATTACH 'test.db2' AS aux; + PRAGMA aux.journal_mode = wal; + CREATE TABLE aux.t2(x, y); + INSERT INTO aux.t2 VALUES('a', 'b'); + PRAGMA schema_version = 450; + DETACH aux; + + PRAGMA main.journal_mode = wal; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 28 err 1 38 61 unknown database aux +stmt 61 err 1 77 84 unknown database aux +stmt 90 err 1 -1 129 no such table: aux.t2 +stmt 129 ok +stmt 160 ok +stmt 174 ok +stmt 209 ok +stmt 234 err 1 -1 265 no such table: t1 +stmt 265 err 1 -1 296 no such table: t1 +stmt 296 err 1 -1 316 no such table: t1 +==== 6.2 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 6.3 + SELECT * FROM t2 +---- +stmt 0 err 1 -1 18 no such table: t2 +==== 6.4 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 6.5 + SELECT * FROM t2 +---- +stmt 0 err 1 -1 18 no such table: t2 +==== 6.6 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== 6.7 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 6.8 + SELECT * FROM t2 +---- +stmt 0 err 1 -1 18 no such table: t2 +==== 6.9 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 6.10 + SELECT * FROM t2 +---- +stmt 0 err 1 -1 18 no such table: t2 +==== 6.11codec + + PRAGMA journal_mode = delete; + VACUUM; + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(5, 6); +---- +stmt 0 ok +stmt 35 ok +stmt 47 ok +stmt 78 err 1 -1 111 no such table: t1 +==== 6.11 + + PRAGMA journal_mode = delete; + PRAGMA page_size = 512; + VACUUM; + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(5, 6); +---- +stmt 0 ok +stmt 35 ok +stmt 63 ok +stmt 75 ok +stmt 106 err 1 -1 139 no such table: t1 +==== 6.12 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 6.13 + SELECT * FROM t2 +---- +stmt 0 err 1 -1 18 no such table: t2 +==== 6.14 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 6.15 + SELECT * FROM t2 +---- +stmt 0 err 1 -1 18 no such table: t2 diff --git a/parser/testdata/swarmvtab.metadata.json b/parser/testdata/swarmvtab.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/swarmvtab.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/swarmvtab.test b/parser/testdata/swarmvtab.test new file mode 100644 index 0000000..6660a21 --- /dev/null +++ b/parser/testdata/swarmvtab.test @@ -0,0 +1,105 @@ +==== 1.0 + + CREATE TABLE t0(a INTEGER PRIMARY KEY, b TEXT); + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<400) + INSERT INTO t0 SELECT i, hex(randomblob(50)) FROM s; + + CREATE TABLE dir(f, t, imin, imax); +---- +stmt 0 ok +stmt 50 err 1 -1 173 no such table: t0 +stmt 173 ok +==== 1.2 + + DROP TABLE s1; +---- +stmt 0 err 1 -1 18 no such table: s1 +==== 1.3 + + CREATE VIRTUAL TABLE temp.s1 USING swarmvtab('SELECT * FROM dir'); + SELECT count(*) FROM s1 WHERE rowid<50; +---- +stmt 0 ok +stmt 69 err 1 -1 111 no such table: s1 +==== 1.5.1.(5-seconds-or-so) + + SELECT count(*) FROM s1 a, s1 b WHERE b.rowid<=200; +---- +stmt 0 err 1 -1 54 no such table: s1 +==== 1.5.2 + + SELECT count(*) FROM s1 a, s1 b, s1 c + WHERE a.rowid=b.rowid AND b.rowid=c.rowid; +---- +stmt 0 err 1 -1 86 no such table: s1 +==== 2.1 + + SELECT * FROM s1 WHERE rowid BETWEEN 1 AND 100; +---- +stmt 0 err 1 -1 50 no such table: s1 +==== 2.2 + + SELECT * FROM s1 WHERE rowid BETWEEN 101 AND 200; +---- +stmt 0 err 1 -1 52 no such table: s1 +==== 2.3 + + SELECT * FROM s1 WHERE rowid BETWEEN 201 AND 300; +---- +stmt 0 err 1 -1 52 no such table: s1 +==== 2.4 + + CREATE VIRTUAL TABLE temp.x1 USING swarmvtab('SELECT * FROMdir'); +---- +stmt 0 ok +==== 2.5 + + CREATE VIRTUAL TABLE temp.x1 USING swarmvtab('SELECT * FROMdir', 'fetchdb'); +---- +stmt 0 ok +==== 3.1 + + CREATE VIRTUAL TABLE temp.xyz USING swarmvtab( + 'VALUES + (''test.db1'', ''t1'', 1, 10), + (''test.db2'', ''t1'', 11, 20) + ', 'fetch_db_no_such_function' + ); +---- +stmt 0 ok +==== 3.2 + + CREATE VIRTUAL TABLE temp.xyz USING swarmvtab( + 'VALUES + (''test.db1'', ''t1'', 1, 10), + (''test.db2'', ''t1'', 11, 20) + ', 'fetch_db' + ); +---- +stmt 0 ok +==== 3.3.1 + + ATTACH 'test.db1' AS aux; + CREATE TABLE aux.t1(a INTEGER PRIMARY KEY, b); + INSERT INTO aux.t1 VALUES(1, NULL); + INSERT INTO aux.t1 VALUES(2, NULL); + INSERT INTO aux.t1 VALUES(9, NULL); + DETACH aux; + CREATE VIRTUAL TABLE temp.xyz USING swarmvtab( + 'VALUES + (''test.db1'', ''t1'', 1, 10), + (''test.db2'', ''t1'', 11, 20) + ', 'fetch_db' + ); +---- +stmt 0 ok +stmt 28 err 1 44 51 unknown database aux +stmt 77 err 1 -1 115 no such table: aux.t1 +stmt 115 err 1 -1 153 no such table: aux.t1 +stmt 153 err 1 -1 191 no such table: aux.t1 +stmt 191 ok +stmt 205 ok +==== 3.3.2 + SELECT * FROM xyz +---- +stmt 0 err 1 -1 19 no such table: xyz diff --git a/parser/testdata/swarmvtab2.metadata.json b/parser/testdata/swarmvtab2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/swarmvtab2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/swarmvtab2.test b/parser/testdata/swarmvtab2.test new file mode 100644 index 0000000..37b42d1 --- /dev/null +++ b/parser/testdata/swarmvtab2.test @@ -0,0 +1,27 @@ +==== 100 + + CREATE TABLE t1(filename, tablename, istart, iend); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<99) + INSERT INTO t1 SELECT printf('test%03d.db',x),'t2',x*1000,x*1000+999 FROM c; + CREATE VIRTUAL TABLE temp.v1 USING swarmvtab( + 'SELECT * FROM t1', 'create_database' + ); +---- +stmt 0 ok +stmt 54 err 1 -1 209 no such table: t1 +stmt 209 ok +==== 110 + + SELECT b FROM v1 WHERE a=3875; +---- +stmt 0 err 1 -1 33 no such table: v1 +==== 130 + + SELECT b FROM v1 WHERE a BETWEEN 3999 AND 4000 ORDER BY a; +---- +stmt 0 err 1 -1 61 no such table: v1 +==== 150 + + SELECT b FROM v1 WHERE a>=99998; +---- +stmt 0 err 1 -1 35 no such table: v1 diff --git a/parser/testdata/swarmvtab3.metadata.json b/parser/testdata/swarmvtab3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/swarmvtab3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/swarmvtab3.test b/parser/testdata/swarmvtab3.test new file mode 100644 index 0000000..76255df --- /dev/null +++ b/parser/testdata/swarmvtab3.test @@ -0,0 +1,32 @@ +==== 1.0 + + CREATE TEMP TABLE swarm(id, tbl, minval, maxval); +---- +stmt 0 ok +==== swarmvtab3-generated + + SELECT b FROM s WHERE a<10; +---- +stmt 0 err 1 -1 32 no such table: s +==== swarmvtab3-generated.dup1 + + SELECT b FROM s WHERE (b%10)=0; +---- +stmt 0 err 1 -1 36 no such table: s +==== 2.0 + + DROP TABLE IF EXISTS swarm; + CREATE TEMP TABLE swarm(file, tbl, minval, maxval, ctx); +---- +stmt 0 ok +stmt 30 ok +==== swarmvtab3-generated.dup2 + + SELECT b FROM s WHERE a<10; +---- +stmt 0 err 1 -1 32 no such table: s +==== swarmvtab3-generated.dup3 + + SELECT b FROM s WHERE (b%10)=0; +---- +stmt 0 err 1 -1 36 no such table: s diff --git a/parser/testdata/swarmvtabfault.metadata.json b/parser/testdata/swarmvtabfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/swarmvtabfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/swarmvtabfault.test b/parser/testdata/swarmvtabfault.test new file mode 100644 index 0000000..07d2146 --- /dev/null +++ b/parser/testdata/swarmvtabfault.test @@ -0,0 +1,15 @@ +==== 1.0 + + ATTACH 'test.db1' AS aux; + CREATE TABLE aux.t1(a INTEGER PRIMARY KEY, b); + INSERT INTO aux.t1 VALUES(1, NULL); + INSERT INTO aux.t1 VALUES(2, NULL); + INSERT INTO aux.t1 VALUES(9, NULL); + DETACH aux; +---- +stmt 0 ok +stmt 28 err 1 44 51 unknown database aux +stmt 77 err 1 -1 115 no such table: aux.t1 +stmt 115 err 1 -1 153 no such table: aux.t1 +stmt 153 err 1 -1 191 no such table: aux.t1 +stmt 191 ok diff --git a/parser/testdata/symlink.metadata.json b/parser/testdata/symlink.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/symlink.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/symlink.test b/parser/testdata/symlink.test new file mode 100644 index 0000000..f82a56f --- /dev/null +++ b/parser/testdata/symlink.test @@ -0,0 +1,24 @@ +==== 1.0 + + CREATE TABLE t1(x, y); +---- +stmt 0 ok +==== symlink-generated + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== symlink-generated.dup1 + + DELETE FROM t1; + PRAGMA journal_mode = delete; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 ok +==== 5.0 + + CREATE TABLE xyz(x, y, z); + INSERT INTO xyz VALUES(1, 2, 3); +---- +stmt 0 ok +stmt 29 err 1 -1 64 no such table: xyz diff --git a/parser/testdata/symlink2.metadata.json b/parser/testdata/symlink2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/symlink2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/symlink2.test b/parser/testdata/symlink2.test new file mode 100644 index 0000000..5fa1b88 --- /dev/null +++ b/parser/testdata/symlink2.test @@ -0,0 +1,7 @@ +==== 1.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1,9999); +---- +stmt 0 ok +stmt 25 err 1 -1 58 no such table: t1 diff --git a/parser/testdata/sync2.metadata.json b/parser/testdata/sync2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/sync2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/sync2.test b/parser/testdata/sync2.test new file mode 100644 index 0000000..6d09df4 --- /dev/null +++ b/parser/testdata/sync2.test @@ -0,0 +1,87 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +==== 1.2.1 + PRAGMA main.synchronous = NORMAL +---- +stmt 0 ok +==== 1.2.2 + PRAGMA main.synchronous +---- +stmt 0 ok +==== 1.3.1 + PRAGMA main.synchronous = OFF +---- +stmt 0 ok +==== 1.3.2 + PRAGMA main.synchronous +---- +stmt 0 ok +==== 1.4.1 + PRAGMA main.synchronous = FULL +---- +stmt 0 ok +==== 1.4.2 + PRAGMA main.synchronous +---- +stmt 0 ok +==== 1.5 + PRAGMA journal_mode = wal +---- +stmt 0 ok +==== 1.8.1 + PRAGMA main.synchronous = NORMAL +---- +stmt 0 ok +==== 1.8.2 + PRAGMA main.synchronous +---- +stmt 0 ok +==== 1.10.1 + PRAGMA main.synchronous = OFF +---- +stmt 0 ok +==== 1.10.2 + PRAGMA main.synchronous +---- +stmt 0 ok +==== 1.11.3 + PRAGMA main.synchronous +---- +stmt 0 ok +==== 1.14 + PRAGMA journal_mode = delete +---- +stmt 0 ok +==== 1.15.3 + PRAGMA main.synchronous +---- +stmt 0 ok +==== 1.16 + PRAGMA journal_mode = wal +---- +stmt 0 ok +==== 1.17.3 + PRAGMA main.synchronous +---- +stmt 0 ok +==== 1.18.3 + PRAGMA main.synchronous=off +---- +stmt 0 ok +==== 1.18 + PRAGMA journal_mode = delete +---- +stmt 0 ok +==== 1.19.3 + PRAGMA main.synchronous +---- +stmt 0 ok +==== 1.20.3 + PRAGMA main.synchronous +---- +stmt 0 ok diff --git a/parser/testdata/syscall.metadata.json b/parser/testdata/syscall.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/syscall.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/syscall.test b/parser/testdata/syscall.test new file mode 100644 index 0000000..4c00456 --- /dev/null +++ b/parser/testdata/syscall.test @@ -0,0 +1,13 @@ +==== 4.1 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t2(x, y); + INSERT INTO t2 VALUES(3, 4); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 ok +stmt 84 err 1 100 107 unknown database aux +stmt 113 err 1 -1 144 no such table: t2 diff --git a/parser/testdata/tabfunc01.metadata.json b/parser/testdata/tabfunc01.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tabfunc01.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tabfunc01.test b/parser/testdata/tabfunc01.test new file mode 100644 index 0000000..c4fe198 --- /dev/null +++ b/parser/testdata/tabfunc01.test @@ -0,0 +1,804 @@ +==== tabfunc01-1.1 + + SELECT *, '|' FROM generate_series WHERE start=1 AND stop=9 AND step=2; +---- +stmt 0 err 1 -1 74 no such table: generate_series +==== tabfunc01-1.1b + + PRAGMA table_xinfo(generate_series); +---- +stmt 0 ok +==== tabfunc01-1.2 + + SELECT *, '|' FROM generate_series(0) LIMIT 5; +---- +stmt 0 err 1 -1 49 no such table: generate_series +==== tabfunc01-1.2b + + SELECT *, '|' FROM generate_series LIMIT 5; +---- +stmt 0 err 1 -1 46 no such table: generate_series +==== tabfunc01-1.2c + + SELECT *, '|' FROM generate_series(value) LIMIT 5; +---- +stmt 0 err 1 -1 53 no such table: generate_series +==== tabfunc01-1.3 + + CREATE VIRTUAL TABLE t1 USING generate_series; +---- +stmt 0 ok +==== tabfunc01-1.4 + + SELECT * FROM generate_series(1,9,2); +---- +stmt 0 err 1 -1 40 no such table: generate_series +==== tabfunc01-1.5 + + SELECT * FROM generate_series(1,9); +---- +stmt 0 err 1 -1 38 no such table: generate_series +==== tabfunc01-1.6 + + SELECT * FROM generate_series(1,10) WHERE step=3; +---- +stmt 0 err 1 -1 52 no such table: generate_series +==== tabfunc01-1.7 + + SELECT * FROM generate_series(1,9,2,11); +---- +stmt 0 err 1 -1 43 no such table: generate_series +==== tabfunc01-1.8 + + SELECT * FROM generate_series(0,32,5) ORDER BY rowid DESC; +---- +stmt 0 err 1 -1 61 no such table: generate_series +==== tabfunc01-1.9 + + SELECT rowid, * FROM generate_series(0,32,5) ORDER BY value DESC; +---- +stmt 0 err 1 -1 68 no such table: generate_series +==== tabfunc01-1.10 + + SELECT rowid, * FROM generate_series(0,32,5) ORDER BY +value DESC; +---- +stmt 0 err 1 -1 69 no such table: generate_series +==== tabfunc01-1.20 + + CREATE VIEW v1(a,b) AS VALUES(1,2),(3,4); + SELECT * FROM v1; +---- +stmt 0 ok +stmt 44 err 1 -1 64 no such table: v1 +==== tabfunc01-1.21.1 + + SELECT * FROM v1(55); +---- +stmt 0 err 1 -1 24 no such table: v1 +==== tabfunc01-1.21.2 + + SELECT * FROM v1(); +---- +stmt 0 err 1 -1 22 no such table: v1 +==== tabfunc01-1.22 + + CREATE VIEW v2(x) AS SELECT value FROM generate_series(1,5); + SELECT * FROM v2; +---- +stmt 0 ok +stmt 63 err 1 -1 83 no such table: v2 +==== tabfunc01-1.23.1 + + SELECT * FROM v2(55); +---- +stmt 0 err 1 -1 24 no such table: v2 +==== tabfunc01-1.23.2 + + SELECT * FROM v2(); +---- +stmt 0 err 1 -1 22 no such table: v2 +==== tabfunc01-1.24 + + CREATE TABLE t0(x); + INSERT INTO t0(x) VALUES(123),(456),(789); + SELECT * FROM t0 ORDER BY x; +---- +stmt 0 ok +stmt 22 err 1 -1 67 no such table: t0 +stmt 67 err 1 -1 98 no such table: t0 +==== tabfunc01-1.25 + + SELECT * FROM t0(55) ORDER BY x; +---- +stmt 0 err 1 -1 35 no such table: t0 +==== tabfunc01-1.26 + + WITH w0 AS (SELECT * FROM t0) + INSERT INTO t0(x) SELECT * FROM w0() +---- +stmt 0 err 1 -1 72 no such table: t0 +==== tabfunc01-2.1 + + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES(2),(3); + SELECT *, '|' FROM t1, generate_series(1,x) ORDER BY 1, 2 +---- +stmt 0 ok +stmt 22 err 1 -1 57 no such table: t1 +stmt 57 err 1 -1 118 no such table: t1 +==== tabfunc01-2.2 + + SELECT *, '|' FROM (SELECT x FROM t1) AS y, generate_series(1,y.x) + ORDER BY 1, 2; +---- +stmt 0 err 1 -1 86 no such table: t1 +==== tabfunc01-2.50 + + SELECT * FROM generate_series(0) LIMIT 5; +---- +stmt 0 err 1 -1 44 no such table: generate_series +==== tabfunc01-3.1 + + SELECT DISTINCT value FROM generate_series(1,x), t1 ORDER BY 1; +---- +stmt 0 err 1 -1 66 no such table: generate_series +==== tabfunc01-4.1 + + SELECT * FROM main.generate_series(1,4) +---- +stmt 0 err 1 -1 43 no such table: main.generate_series +==== tabfunc01-4.2 + + SELECT * FROM temp.generate_series(1,4) +---- +stmt 0 err 1 -1 43 no such table: temp.generate_series +==== tabfunc01-4.3 + + ATTACH ':memory:' AS aux1; + CREATE TABLE aux1.t1(a,b,c); + SELECT * FROM aux1.generate_series(1,4) +---- +stmt 0 ok +stmt 29 err 1 45 53 unknown database aux1 +stmt 60 err 1 -1 103 no such table: aux1.generate_series +==== tabfunc01-4.4 + + SELECT * FROM (generate_series(1,5,2)) AS x LIMIT 10; +---- +stmt 0 err 1 -1 56 no such table: generate_series +==== tabfunc01-5.1 + + SELECT value + FROM generate_series(60,73,6) + WHERE value=66; +---- +stmt 0 err 1 -1 68 no such table: generate_series +==== tabfunc01-5.2 + + SELECT value + FROM generate_series(73,60,-6) + WHERE value=67; +---- +stmt 0 err 1 -1 69 no such table: generate_series +==== tabfunc01-6.1 + + SELECT value FROM generate_series(1,10) WHERE value<5.5; +---- +stmt 0 err 1 -1 59 no such table: generate_series +==== tabfunc01-6.2 + + SELECT value FROM generate_series(1,10) WHERE value<5.0; +---- +stmt 0 err 1 -1 59 no such table: generate_series +==== tabfunc01-6.3 + + SELECT value FROM generate_series(1,10) WHERE value<=5.5; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-6.4 + + SELECT value FROM generate_series(1,10) WHERE value<=5.0; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-6.5 + + SELECT value FROM generate_series(1,10) WHERE value>5.5; +---- +stmt 0 err 1 -1 59 no such table: generate_series +==== tabfunc01-6.6 + + SELECT value FROM generate_series(1,10) WHERE value>5.0; +---- +stmt 0 err 1 -1 59 no such table: generate_series +==== tabfunc01-6.7 + + SELECT value FROM generate_series(1,10) WHERE value>=5.5; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-6.8 + + SELECT value FROM generate_series(1,10) WHERE value>=5.0; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-6.9 + + SELECT value FROM generate_series(10,1,-1) WHERE value<5.5; +---- +stmt 0 err 1 -1 62 no such table: generate_series +==== tabfunc01-6.10 + + SELECT value FROM generate_series(10,1,-1) WHERE value<5.0; +---- +stmt 0 err 1 -1 62 no such table: generate_series +==== tabfunc01-6.11 + + SELECT value FROM generate_series(10,1,-1) WHERE value<=5.5; +---- +stmt 0 err 1 -1 63 no such table: generate_series +==== tabfunc01-6.12 + + SELECT value FROM generate_series(10,1,-1) WHERE value<=5.0; +---- +stmt 0 err 1 -1 63 no such table: generate_series +==== tabfunc01-6.13 + + SELECT value FROM generate_series(10,1,-1) WHERE value>5.5; +---- +stmt 0 err 1 -1 62 no such table: generate_series +==== tabfunc01-6.14 + + SELECT value FROM generate_series(10,1,-1) WHERE value>5.0; +---- +stmt 0 err 1 -1 62 no such table: generate_series +==== tabfunc01-6.15 + + SELECT value FROM generate_series(10,1,-1) WHERE value>=5.5; +---- +stmt 0 err 1 -1 63 no such table: generate_series +==== tabfunc01-6.16 + + SELECT value FROM generate_series(10,1,-1) WHERE value>=5.0; +---- +stmt 0 err 1 -1 63 no such table: generate_series +==== tabfunc01-6.17 + + SELECT value FROM generate_series(1,10) WHERE value==5.5; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-6.18 + + SELECT value FROM generate_series(1,10) WHERE value==5.0; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-500 + + SELECT * FROM generate_series WHERE start IN (1,7) AND stop=20 AND step=10 + ORDER BY +1; +---- +stmt 0 err 1 -1 92 no such table: generate_series +==== tabfunc01-600 + + CREATE TABLE t600(a INTEGER PRIMARY KEY, b TEXT); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t600(a,b) SELECT x, printf('(%03d)',x) FROM c; + SELECT b FROM t600 WHERE a IN generate_series(2,52,10); +---- +stmt 0 ok +stmt 52 err 1 -1 192 no such table: t600 +stmt 192 err 1 -1 250 no such table: t600 +==== tabfunc01-800 + + ALTER TABLE generate_series ADD COLUMN col2; +---- +stmt 0 err 1 -1 51 no such table: generate_series +==== tabfunc01-810 + + ALTER TABLE generate_series RENAME TO flubber; +---- +stmt 0 err 1 -1 53 no such table: generate_series +==== tabfunc01-820 + + ALTER TABLE generate_series RENAME start TO flubber; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-830 + + ALTER TABLE generate_series DROP COLUMN start; +---- +stmt 0 err 1 -1 53 no such table: generate_series +==== tabfunc01-900 + + ALTER TABLE pragma_compile_options ADD COLUMN col2; +---- +stmt 0 err 1 -1 58 virtual tables may not be altered +==== tabfunc01-910 + + ALTER TABLE pragma_compile_options RENAME TO flubber; +---- +stmt 0 err 1 -1 60 table pragma_compile_options may not be altered +==== tabfunc01-920 + + ALTER TABLE pragma_compile_options RENAME start TO flubber; +---- +stmt 0 err 1 -1 67 table pragma_compile_options may not be altered +==== tabfunc01-930 + + ALTER TABLE pragma_compile_options DROP COLUMN start; +---- +stmt 0 err 1 -1 60 table pragma_compile_options may not be altered +==== tabfunc01-900.dup1 + + SELECT * FROM ( + SELECT * FROM generate_series(1,10) + UNION ALL + SELECT * FROM generate_series(101,104) + ) LIMIT 10 OFFSET 5; +---- +stmt 0 err 1 -1 138 no such table: generate_series +==== tabfunc01-910.dup1 + + SELECT * FROM ( + SELECT * FROM generate_series(1,10) + UNION ALL + SELECT * FROM generate_series(101,104) + ) LIMIT -1 OFFSET 5; +---- +stmt 0 err 1 -1 138 no such table: generate_series +==== tabfunc01-920.dup1 + + SELECT * FROM ( + SELECT * FROM generate_series(1,10) + UNION ALL + SELECT * FROM generate_series(101,104) + ) LIMIT -1 OFFSET 0; +---- +stmt 0 err 1 -1 138 no such table: generate_series +==== tabfunc01-930.dup1 + + SELECT * FROM generate_series(9223372036854775807, + -9223372036854775808, + -9223372036854775808); +---- +stmt 0 err 1 -1 162 no such table: generate_series +==== tabfunc01-931 + + SELECT * FROM generate_series(9223372036854775807, + -9223372036854775808, + -9223372036854775808) + LIMIT 100 OFFSET 1; +---- +stmt 0 err 1 -1 184 no such table: generate_series +==== tabfunc01-932 + + SELECT * FROM generate_series(9223372036854775807, + -9223372036854775808, + -9223372036854775808) + LIMIT 100 OFFSET 2; +---- +stmt 0 err 1 -1 184 no such table: generate_series +==== tabfunc01-933 + + SELECT * FROM generate_series(9223372036854775807, + -9223372036854775808, + -9223372036854775808) + LIMIT 100 OFFSET 9223372036854775807; +---- +stmt 0 err 1 -1 202 no such table: generate_series +==== tabfunc01-940 + + SELECT * FROM generate_series(1,11,2); +---- +stmt 0 err 1 -1 41 no such table: generate_series +==== tabfunc01-941 + + SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 4; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-942 + + SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 5; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-943 + + SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 6; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-944 + + SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 7; +---- +stmt 0 err 1 -1 60 no such table: generate_series +==== tabfunc01-945 + + SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 9223372036854775807; +---- +stmt 0 err 1 -1 78 no such table: generate_series +==== tabfunc01-950 + + SELECT * FROM generate_series(1,11,1) LIMIT 100 OFFSET 10; +---- +stmt 0 err 1 -1 61 no such table: generate_series +==== tabfunc01-951 + + SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 9223372036854775807; +---- +stmt 0 err 1 -1 78 no such table: generate_series +==== tabfunc01-952 + + SELECT * FROM generate_series(11,1,-1) LIMIT 100 OFFSET 10; +---- +stmt 0 err 1 -1 62 no such table: generate_series +==== tabfunc01-953 + + SELECT * FROM generate_series(11,1,-1) LIMIT 100 OFFSET 9223372036854775807; +---- +stmt 0 err 1 -1 79 no such table: generate_series +==== tabfunc01-954 + + SELECT * FROM generate_series(1,11,1) LIMIT 3 OFFSET 3; +---- +stmt 0 err 1 -1 58 no such table: generate_series +==== 1100 + + select 1 as c_0 + from + generate_series(1, 1) as ref_3 + where (ref_3.value) in (select 1); +---- +stmt 0 err 1 -1 109 no such table: generate_series +==== 1200 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(value INT); + INSERT INTO t1 VALUES (1),(2),(3); + SELECT t1.value, t2.value + FROM t1 RIGHT JOIN generate_series(1,3,1) AS t2 USING(value); +---- +stmt 0 ok +stmt 27 ok +stmt 57 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 188 no such table: t1 +==== 1300 + + SELECT value + FROM generate_series(-9223372036854775808, 9223372036854775807, 2) + WHERE value BETWEEN 1 AND 5; +---- +stmt 0 err 1 -1 118 no such table: generate_series +==== 1301 + + SELECT value + FROM generate_series(-9223372036854775808, 9223372036854775807, 2) + WHERE value BETWEEN 0 AND 6; +---- +stmt 0 err 1 -1 118 no such table: generate_series +==== 1302 + + SELECT value + FROM generate_series(-9223372036854775808, 9223372036854775807, 2) + WHERE value BETWEEN 0.5 AND 6.25; +---- +stmt 0 err 1 -1 123 no such table: generate_series +==== 1303 + + SELECT value + FROM generate_series(-9223372036854775808, 9223372036854775807, 2) + WHERE value BETWEEN 9223372036854775803 AND 9223372036854775807 +---- +stmt 0 err 1 -1 154 no such table: generate_series +==== 1304 + + SELECT value + FROM generate_series(-9223372036854775808, 9223372036854775807, 2) + WHERE value BETWEEN 9223372036854775803 AND 9223372036854775807 + ORDER BY value DESC; +---- +stmt 0 err 1 -1 177 no such table: generate_series +==== 1310 + + SELECT value FROM generate_series(0) LIMIT 5; +---- +stmt 0 err 1 -1 48 no such table: generate_series +==== 1311 + + SELECT value FROM generate_series(5) LIMIT 5; +---- +stmt 0 err 1 -1 48 no such table: generate_series +==== 1312 + + SELECT value FROM generate_series(0) WHERE stop=6; +---- +stmt 0 err 1 -1 53 no such table: generate_series +==== 1313 + + SELECT value FROM generate_series(1,10) WHERE step IS NULL; +---- +stmt 0 err 1 -1 62 no such table: generate_series +==== 1314 + + SELECT value FROM generate_series(0xfffffffd); +---- +stmt 0 err 1 -1 49 no such table: generate_series +==== 1315 + + SELECT value FROM generate_series(4,3,1); +---- +stmt 0 err 1 -1 44 no such table: generate_series +==== 1316 + + SELECT value FROM generate_series(3,4,-1); +---- +stmt 0 err 1 -1 45 no such table: generate_series +==== 1320 + + SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807) + WHERE value=9.2234e18; +---- +stmt 0 err 1 -1 105 no such table: generate_series +==== 1321 + + SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807) + WHERE value=-9.2234e18; +---- +stmt 0 err 1 -1 106 no such table: generate_series +==== 1322 + + SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807) + WHERE value>9223372036854775807; +---- +stmt 0 err 1 -1 115 no such table: generate_series +==== 1323 + + SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807) + WHERE value>9223372036854775806; +---- +stmt 0 err 1 -1 115 no such table: generate_series +==== 1324 + + SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807) + WHERE value>=9223372036854775807; +---- +stmt 0 err 1 -1 116 no such table: generate_series +==== 1330 + + SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807) + WHERE value<-9223372036854775808; +---- +stmt 0 err 1 -1 116 no such table: generate_series +==== 1331 + + SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807) + WHERE value<=-9223372036854775808; +---- +stmt 0 err 1 -1 117 no such table: generate_series +==== 1332 + + SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807) + WHERE value<-9223372036854775807; +---- +stmt 0 err 1 -1 116 no such table: generate_series +==== 1333 + + SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807) + WHERE value BETWEEN 4 AND 1; +---- +stmt 0 err 1 -1 111 no such table: generate_series +==== 1340 + + SELECT value FROM generate_series(100,0,-10) + WHERE value BETWEEN 33 AND 66; +---- +stmt 0 err 1 -1 81 no such table: generate_series +==== 1341 + + SELECT value FROM generate_series(100,0,-10) + WHERE value BETWEEN 33 AND 60; +---- +stmt 0 err 1 -1 81 no such table: generate_series +==== 1342 + + SELECT value FROM generate_series(100,0,-10) + WHERE value BETWEEN 33 AND 59; +---- +stmt 0 err 1 -1 81 no such table: generate_series +==== 1343 + + SELECT value + FROM generate_series(-9223372036854760000,-9223372036854775808,-10000); +---- +stmt 0 err 1 -1 91 no such table: generate_series +==== 1344 + + SELECT value + FROM generate_series(-9223372036854760000,-9223372036854775808,-10000) + WHERE value < -9223372036854770001; +---- +stmt 0 err 1 -1 129 no such table: generate_series +==== 1345 + + SELECT value + FROM generate_series(9223372036854760000,9223372036854775807,10000); +---- +stmt 0 err 1 -1 88 no such table: generate_series +==== 1346 + + SELECT value + FROM generate_series(9223372036854760000,9223372036854775807,10000) + WHERE value > 9223372036854770001; +---- +stmt 0 err 1 -1 125 no such table: generate_series +==== 1350 + + SELECT value FROM generate_series(100,0,-10) + WHERE value BETWEEN 33 AND 38; +---- +stmt 0 err 1 -1 81 no such table: generate_series +==== 1351 + + SELECT value FROM generate_series(0,100,+10) + WHERE value BETWEEN 33 AND 38; +---- +stmt 0 err 1 -1 81 no such table: generate_series +==== 1360 + + SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808); +---- +stmt 0 err 1 -1 78 no such table: generate_series +==== 1361 + + SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808) + LIMIT 1 OFFSET 0; +---- +stmt 0 err 1 -1 97 no such table: generate_series +==== 1362 + + SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808) + ORDER BY value ASC; +---- +stmt 0 err 1 -1 100 no such table: generate_series +==== 1363 + + SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808) + ORDER BY value ASC LIMIT 10 OFFSET 1; +---- +stmt 0 err 1 -1 118 no such table: generate_series +==== 1364 + + SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808) + ORDER BY value ASC LIMIT 10 OFFSET 40000000; +---- +stmt 0 err 1 -1 125 no such table: generate_series +==== 1370 + + SELECT * FROM generate_series(0,0,0); +---- +stmt 0 err 1 -1 40 no such table: generate_series +==== 1400 + + CREATE TABLE t1(x); + CREATE TABLE t2(y); +---- +stmt 0 ok +stmt 22 ok +==== 1410 + + SELECT x, y, value + FROM (t1 RIGHT JOIN generate_series(t2.y,5) AS value) JOIN t2; +---- +stmt 0 err 1 -1 86 no such table: t1 +==== 1420 + + SELECT x, y, value + FROM t2 JOIN (t1 RIGHT JOIN generate_series(t2.y,5) AS value) +---- +stmt 0 err 1 -1 87 no such table: t2 +==== 1500 + + SELECT value FROM generate_series(1) WHERE value>1e19 LIMIT 3; +---- +stmt 0 err 1 -1 65 no such table: generate_series +==== 1501 + + SELECT value FROM generate_series(1) WHERE value>=1e19 LIMIT 3; +---- +stmt 0 err 1 -1 66 no such table: generate_series +==== 1502 + + SELECT value FROM generate_series(1) WHERE value<-1e19 LIMIT 3; +---- +stmt 0 err 1 -1 66 no such table: generate_series +==== 1503 + + SELECT value FROM generate_series(1) WHERE value<=-1e19 LIMIT 3; +---- +stmt 0 err 1 -1 67 no such table: generate_series +==== 1504 + + SELECT value FROM generate_series(1,9223372036854775807) + WHERE value>=9223372036854775807.0 + LIMIT 3; +---- +stmt 0 err 1 -1 109 no such table: generate_series +==== 1505 + + SELECT value FROM generate_series(1,9223372036854775807) + WHERE value>9223372036854775807.0 + LIMIT 3; +---- +stmt 0 err 1 -1 108 no such table: generate_series +==== 1506 + + SELECT 9223372036854774784 = 9223372036854775000.0; +---- +stmt 0 ok +==== 1507 + + SELECT value FROM generate_series(1,9223372036854775807) + WHERE value>=9223372036854775000.0 + LIMIT 3; +---- +stmt 0 err 1 -1 109 no such table: generate_series +==== 1508 + + SELECT value FROM generate_series(1,9223372036854775807) + WHERE value>9223372036854775000.0 + LIMIT 3; +---- +stmt 0 err 1 -1 108 no such table: generate_series +==== 1510 + + SELECT value FROM generate_series(-9223372036854775808,1) + WHERE value>=-9223372036854775000.0 + LIMIT 3; +---- +stmt 0 err 1 -1 111 no such table: generate_series +==== 1511 + + SELECT value FROM generate_series(-9223372036854775808,1) + WHERE value>-9223372036854775000.0 + LIMIT 3; +---- +stmt 0 err 1 -1 110 no such table: generate_series +==== 1520 + + SELECT value FROM generate_series(9223372036854774784) + WHERE value<=9223372036854775000.0 + LIMIT 3; +---- +stmt 0 err 1 -1 107 no such table: generate_series +==== 1521 + + SELECT value FROM generate_series(9223372036854774784) + WHERE value<9223372036854775000.0 + LIMIT 3; +---- +stmt 0 err 1 -1 106 no such table: generate_series +==== 1522 + + SELECT value FROM generate_series(9223372036854775805,9223372036854775807) + WHERE value<=9223372036854775807.0 + LIMIT 3; +---- +stmt 0 err 1 -1 127 no such table: generate_series +==== 1522ck + + SELECT value FROM generate_series(9223372036854775805,9223372036854775807) + WHERE +value<=9223372036854775807.0 + LIMIT 3; +---- +stmt 0 err 1 -1 128 no such table: generate_series +==== 1523 + + SELECT value FROM generate_series(9223372036854775805,9223372036854775807) + WHERE value<9223372036854775807.0 + LIMIT 3; +---- +stmt 0 err 1 -1 126 no such table: generate_series +==== 1523ck + + SELECT value FROM generate_series(9223372036854775805,9223372036854775807) + WHERE +value<9223372036854775807.0 + LIMIT 3; +---- +stmt 0 err 1 -1 127 no such table: generate_series diff --git a/parser/testdata/table.metadata.json b/parser/testdata/table.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/table.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/table.test b/parser/testdata/table.test new file mode 100644 index 0000000..6ba41d3 --- /dev/null +++ b/parser/testdata/table.test @@ -0,0 +1,327 @@ +==== table-1.3 +SELECT name, tbl_name, type FROM sqlite_master WHERE type!='meta' +---- +stmt 0 ok +==== table-2.1.1 +CREATE TABLE "test2" (two) +---- +stmt 0 ok +==== table-2.1d +CREATE TABLE IF NOT EXISTS test2(x,y) +---- +stmt 0 ok +==== table-2.1e +CREATE TABLE IF NOT EXISTS test2(x UNIQUE, y TEXT PRIMARY KEY) +---- +stmt 0 ok +==== table-2.1f +DROP TABLE test2; SELECT name FROM sqlite_master WHERE type!='meta' +---- +stmt 0 err 1 -1 17 no such table: test2 +stmt 17 ok +==== table-2.2c +SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name +---- +stmt 0 ok +==== table-2.2e +SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name +---- +stmt 0 ok +==== table-5.1.1 +DROP TABLE test009 +---- +stmt 0 err 1 -1 19 no such table: test009 +==== table-5.1.2 +DROP TABLE IF EXISTS test009 +---- +stmt 0 ok +==== table-5.2 +DROP TABLE IF EXISTS sqlite_master +---- +stmt 0 err 1 -1 35 table sqlite_master may not be dropped +==== table-7.2 + + INSERT INTO weird VALUES('a','b',9,0,'xyz','hi','y''all'); + SELECT * FROM weird; +---- +stmt 0 err 1 -1 63 no such table: weird +stmt 63 err 1 -1 88 no such table: weird +==== table-7.3 + + CREATE TABLE savepoint(release); + INSERT INTO savepoint(release) VALUES(10); + UPDATE savepoint SET release = 5; + SELECT release FROM savepoint; +---- +stmt 0 ok +stmt 37 err 1 -1 84 no such table: savepoint +stmt 84 err 1 -1 122 no such table: savepoint +stmt 122 err 1 -1 157 no such table: savepoint +==== table-8.1.1 + + SELECT sql FROM sqlite_master WHERE name='t2'; +---- +stmt 0 ok +==== table-8.3.1 + + SELECT sql FROM sqlite_master WHERE name='t4"abc' +---- +stmt 0 ok +==== table-8.7 + + SELECT * FROM t5; +---- +stmt 0 err 1 -1 22 no such table: t5 +==== table-8.8 + + CREATE TABLE t5 AS SELECT * FROM no_such_table; +---- +stmt 0 err 1 -1 52 no such table: no_such_table +==== table-8.10 + + CREATE TABLE t12( + a INTEGER, + b VARCHAR(10), + c VARCHAR(1,10), + d VARCHAR(+1,-10), + e VARCHAR (+1,-10), + f "VARCHAR (+1,-10, 5)", + g BIG INTEGER + ); + CREATE TABLE t13 AS SELECT * FROM t12; + SELECT sql FROM sqlite_master WHERE name = 't13'; +---- +stmt 0 ok +stmt 192 err 1 -1 235 no such table: t12 +stmt 235 ok +==== table-9.1 + + CREATE TABLE t6(a,b,a); +---- +stmt 0 err 1 -1 27 duplicate column name: a +==== table-9.2 + + CREATE TABLE t6(a varchar(100), b blob, a integer); +---- +stmt 0 err 1 -1 55 duplicate column name: a +==== table-10.1 + + CREATE TABLE t6(a REFERENCES t4(a) NOT NULL); + INSERT INTO t6 VALUES(NULL); +---- +stmt 0 ok +stmt 50 err 1 -1 83 no such table: t6 +==== table-10.2 + + DROP TABLE t6; + CREATE TABLE t6(a REFERENCES t4(a) MATCH PARTIAL); +---- +stmt 0 err 1 -1 19 no such table: t6 +stmt 19 ok +==== table-10.3 + + DROP TABLE t6; + CREATE TABLE t6(a REFERENCES t4 MATCH FULL ON DELETE SET NULL NOT NULL); +---- +stmt 0 err 1 -1 19 no such table: t6 +stmt 19 ok +==== table-10.4 + + DROP TABLE t6; + CREATE TABLE t6(a REFERENCES t4 MATCH FULL ON UPDATE SET DEFAULT DEFAULT 1); +---- +stmt 0 err 1 -1 19 no such table: t6 +stmt 19 ok +==== table-10.5 + + DROP TABLE t6; + CREATE TABLE t6(a NOT NULL NOT DEFERRABLE INITIALLY IMMEDIATE); +---- +stmt 0 err 1 -1 19 no such table: t6 +stmt 19 ok +==== table-10.6 + + DROP TABLE t6; + CREATE TABLE t6(a NOT NULL DEFERRABLE INITIALLY DEFERRED); +---- +stmt 0 err 1 -1 19 no such table: t6 +stmt 19 ok +==== table-10.7 + + DROP TABLE t6; + CREATE TABLE t6(a, + FOREIGN KEY (a) REFERENCES t4(b) DEFERRABLE INITIALLY DEFERRED + ); +---- +stmt 0 err 1 -1 19 no such table: t6 +stmt 19 ok +==== table-10.8 + + DROP TABLE t6; + CREATE TABLE t6(a,b,c, + FOREIGN KEY (b,c) REFERENCES t4(x,y) MATCH PARTIAL + ON UPDATE SET NULL ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED + ); +---- +stmt 0 err 1 -1 19 no such table: t6 +stmt 19 ok +==== table-10.9 + + DROP TABLE t6; + CREATE TABLE t6(a,b,c, + FOREIGN KEY (b,c) REFERENCES t4(x) + ); +---- +stmt 0 err 1 -1 19 no such table: t6 +stmt 19 err 1 -1 93 number of columns in foreign key does not match the number of columns in the referenced table +==== table-11.1 + + CREATE TABLE t7( + a integer primary key, + b number(5,10), + c character varying (8), + d VARCHAR(9), + e clob, + f BLOB, + g Text, + h + ); + INSERT INTO t7(a) VALUES(1); + SELECT typeof(a), typeof(b), typeof(c), typeof(d), + typeof(e), typeof(f), typeof(g), typeof(h) + FROM t7 LIMIT 1; +---- +stmt 0 ok +stmt 188 err 1 -1 221 no such table: t7 +stmt 221 err 1 -1 351 no such table: t7 +==== table-11.2 + + SELECT typeof(a+b), typeof(a||b), typeof(c+d), typeof(c||d) + FROM t7 LIMIT 1; +---- +stmt 0 err 1 -1 85 no such table: t7 +==== table-12.2 + + SELECT sql FROM sqlite_master WHERE tbl_name = 't8' +---- +stmt 0 ok +==== table-13.1 + + CREATE TABLE tablet8( + a integer primary key, + tm text DEFAULT CURRENT_TIME, + dt text DEFAULT CURRENT_DATE, + dttm text DEFAULT CURRENT_TIMESTAMP + ); + SELECT * FROM tablet8; +---- +stmt 0 ok +stmt 180 err 1 -1 207 no such table: tablet8 +==== table-16.1 + + CREATE TABLE t16(x DEFAULT(max(1))); + INSERT INTO t16(x) VALUES(123); + SELECT rowid, x FROM t16; +---- +stmt 0 ok +stmt 39 err 1 -1 73 no such table: t16 +stmt 73 err 1 -1 101 no such table: t16 +==== table-16.2 + + INSERT INTO t16(rowid) VALUES(4); +---- +stmt 0 err 1 -1 36 no such table: t16 +==== table-16.3 + + DROP TABLE t16; + CREATE TABLE t16(x DEFAULT(abs(1))); + INSERT INTO t16(rowid) VALUES(4); + SELECT rowid, x FROM t16; +---- +stmt 0 err 1 -1 18 no such table: t16 +stmt 18 ok +stmt 57 err 1 -1 93 no such table: t16 +stmt 93 err 1 -1 121 no such table: t16 +==== table-16.4 + + DROP TABLE t16; + CREATE TABLE t16(x DEFAULT(avg(1))); + INSERT INTO t16(rowid) VALUES(123); + SELECT rowid, x FROM t16; +---- +stmt 0 err 1 -1 18 no such table: t16 +stmt 18 ok +stmt 57 err 1 -1 95 no such table: t16 +stmt 95 err 1 -1 123 no such table: t16 +==== table-16.5 + + DROP TABLE t16; + CREATE TABLE t16(x DEFAULT(count())); + INSERT INTO t16(rowid) VALUES(123); + SELECT rowid, x FROM t16; +---- +stmt 0 err 1 -1 18 no such table: t16 +stmt 18 ok +stmt 58 err 1 -1 96 no such table: t16 +stmt 96 err 1 -1 124 no such table: t16 +==== table-16.6 + + DROP TABLE t16; + CREATE TABLE t16(x DEFAULT(string_agg('x',','))); + INSERT INTO t16(rowid) VALUES(123); + SELECT rowid, x FROM t16; +---- +stmt 0 err 1 -1 18 no such table: t16 +stmt 18 ok +stmt 70 err 1 -1 108 no such table: t16 +stmt 108 err 1 -1 136 no such table: t16 +==== table-16.7 + + INSERT INTO t16 DEFAULT VALUES; +---- +stmt 0 err 1 -1 34 no such table: t16 +==== table-17.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a TEXT); + INSERT INTO t1(a) VALUES(1),(2); + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x TEXT, y TEXT); + INSERT INTO t2(x,y) VALUES(3,4); + DROP TABLE IF EXISTS t3; + CREATE TABLE t3 AS + SELECT a AS p, coalesce(y,a) AS q FROM t1 LEFT JOIN t2 ON a=x; + SELECT p, q, '|' FROM t3 ORDER BY p; +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 89 no such table: t1 +stmt 89 ok +stmt 116 ok +stmt 151 err 1 -1 186 no such table: t2 +stmt 186 ok +stmt 213 err 1 -1 301 no such table: t1 +stmt 301 err 1 -1 340 no such table: t3 +==== table-18.1 + + DROP TABLE IF EXISTS t1; + BEGIN; + CREATE TABLE t1 AS SELECT zeroblob(2e20); +---- +stmt 0 ok +stmt 27 ok +stmt 36 ok +==== table-18.2 + + COMMIT; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 10 ok +==== table-19.1 + + CREATE TABLE t19 AS SELECT * FROM sqlite_master; + SELECT name FROM t19 ORDER BY name; +---- +stmt 0 ok +stmt 51 err 1 -1 89 no such table: t19 diff --git a/parser/testdata/tableopts.metadata.json b/parser/testdata/tableopts.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tableopts.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tableopts.test b/parser/testdata/tableopts.test new file mode 100644 index 0000000..9a4c3e4 --- /dev/null +++ b/parser/testdata/tableopts.test @@ -0,0 +1,55 @@ +==== tableopt-1.1 + + CREATE TABLE t1(a,b) WITHOUT rowid; +---- +stmt 0 err 1 -1 40 PRIMARY KEY missing on table t1 +==== tableopt-1.1b + + CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT,b) WITHOUT rowid; +---- +stmt 0 err 1 -1 74 AUTOINCREMENT not allowed on WITHOUT ROWID tables +==== tableopt-1.2 + + CREATE TABLE t1(a,b) WITHOUT unknown2; +---- +stmt 0 err 1 -1 43 unknown table option: unknown2 +==== tableopt-2.1 + + CREATE TABLE t1(a, b, c, PRIMARY KEY(a,b)) WITHOUT rowid; + INSERT INTO t1 VALUES(1,2,3),(2,3,4); + SELECT c FROM t1 WHERE a IN (1,2) ORDER BY b; +---- +stmt 0 ok +stmt 60 err 1 -1 100 no such table: t1 +stmt 100 err 1 -1 148 no such table: t1 +==== tableopt-2.1.1 + + SELECT rowid, * FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== tableopt-2.1.2 + + SELECT _rowid_, * FROM t1; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== tableopt-2.1.3 + + SELECT oid, * FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== tableopt-2.2 + + VACUUM; + SELECT c FROM t1 WHERE a IN (1,2) ORDER BY b; +---- +stmt 0 ok +stmt 10 err 1 -1 58 no such table: t1 +==== tableopt-3.1 + + CREATE TABLE without(x INTEGER PRIMARY KEY, without TEXT); + INSERT INTO without VALUES(1, 'xyzzy'), (2, 'fizzle'); + SELECT * FROM without WHERE without='xyzzy'; +---- +stmt 0 ok +stmt 61 err 1 -1 118 no such table: without +stmt 118 err 1 -1 165 no such table: without diff --git a/parser/testdata/tclsqlite.metadata.json b/parser/testdata/tclsqlite.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tclsqlite.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tclsqlite.test b/parser/testdata/tclsqlite.test new file mode 100644 index 0000000..1a8eea6 --- /dev/null +++ b/parser/testdata/tclsqlite.test @@ -0,0 +1,102 @@ +==== tcl-5.2 + + SELECT typeof(a), typeof(b), typeof(c) FROM t3 +---- +stmt 0 err 1 -1 54 no such table: t3 +==== tcl-5.4 + + SELECT typeof(a), typeof(b), typeof(c) FROM t3 +---- +stmt 0 err 1 -1 54 no such table: t3 +==== tcl-14.1 + + CREATE TABLE t6(x); + INSERT INTO t6 VALUES(1); +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: t6 +==== tcl-16.100 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2),(2,NULL),(3,'xyz'); +---- +stmt 0 ok +stmt 24 err 1 -1 73 no such table: t1 +==== 17.0 + + SELECT quote( add_i(2, 3) ); + SELECT quote( add_r(2, 3) ); + SELECT quote( add_t(2, 3) ); + SELECT quote( add_b(2, 3) ); + SELECT quote( add_a(2, 3) ); +---- +stmt 0 err 1 17 31 no such function: add_i +stmt 31 err 1 48 62 no such function: add_r +stmt 62 err 1 79 93 no such function: add_t +stmt 93 err 1 110 124 no such function: add_b +stmt 124 err 1 141 155 no such function: add_a +==== 17.1 + + SELECT quote( add_i(2.2, 3.3) ); + SELECT quote( add_r(2.2, 3.3) ); + SELECT quote( add_t(2.2, 3.3) ); + SELECT quote( add_b(2.2, 3.3) ); + SELECT quote( add_a(2.2, 3.3) ); +---- +stmt 0 err 1 17 35 no such function: add_i +stmt 35 err 1 52 70 no such function: add_r +stmt 70 err 1 87 105 no such function: add_t +stmt 105 err 1 122 140 no such function: add_b +stmt 140 err 1 157 175 no such function: add_a +==== 17.2 + + SELECT quote( ret_i(2.5) ); + SELECT quote( ret_r(2.5) ); + SELECT quote( ret_t(2.5) ); + SELECT quote( ret_b(2.5) ); + SELECT quote( ret_a(2.5) ); +---- +stmt 0 err 1 17 30 no such function: ret_i +stmt 30 err 1 47 60 no such function: ret_r +stmt 60 err 1 77 90 no such function: ret_t +stmt 90 err 1 107 120 no such function: ret_b +stmt 120 err 1 137 150 no such function: ret_a +==== 17.3 + + SELECT quote( ret_i('2.5') ); + SELECT quote( ret_r('2.5') ); + SELECT quote( ret_t('2.5') ); + SELECT quote( ret_b('2.5') ); + SELECT quote( ret_a('2.5') ); +---- +stmt 0 err 1 17 32 no such function: ret_i +stmt 32 err 1 49 64 no such function: ret_r +stmt 64 err 1 81 96 no such function: ret_t +stmt 96 err 1 113 128 no such function: ret_b +stmt 128 err 1 145 160 no such function: ret_a +==== 17.4 + + SELECT quote( ret_i('abc') ); + SELECT quote( ret_r('abc') ); + SELECT quote( ret_t('abc') ); + SELECT quote( ret_b('abc') ); + SELECT quote( ret_a('abc') ); +---- +stmt 0 err 1 17 32 no such function: ret_i +stmt 32 err 1 49 64 no such function: ret_r +stmt 64 err 1 81 96 no such function: ret_t +stmt 96 err 1 113 128 no such function: ret_b +stmt 128 err 1 145 160 no such function: ret_a +==== 17.5 + + SELECT quote( ret_i(X'616263') ); + SELECT quote( ret_r(X'616263') ); + SELECT quote( ret_t(X'616263') ); + SELECT quote( ret_b(X'616263') ); + SELECT quote( ret_a(X'616263') ); +---- +stmt 0 err 1 17 36 no such function: ret_i +stmt 36 err 1 53 72 no such function: ret_r +stmt 72 err 1 89 108 no such function: ret_t +stmt 108 err 1 125 144 no such function: ret_b +stmt 144 err 1 161 180 no such function: ret_a diff --git a/parser/testdata/tempdb.metadata.json b/parser/testdata/tempdb.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tempdb.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tempdb.test b/parser/testdata/tempdb.test new file mode 100644 index 0000000..6d728b8 --- /dev/null +++ b/parser/testdata/tempdb.test @@ -0,0 +1,5 @@ +==== tempdb-1.2 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 diff --git a/parser/testdata/tempdb2.metadata.json b/parser/testdata/tempdb2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tempdb2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tempdb2.test b/parser/testdata/tempdb2.test new file mode 100644 index 0000000..d5f9170 --- /dev/null +++ b/parser/testdata/tempdb2.test @@ -0,0 +1,72 @@ +==== 1.1 + + PRAGMA page_size=1024; + PRAGMA cache_size=50; + + BEGIN; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, int2str(1)); + INSERT INTO t1 VALUES(2, int2str(1)); + INSERT INTO t1 VALUES(3, int2str(1)); + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b); + WITH c(x) AS ( VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100 ) + INSERT INTO t2 SELECT x, int2str(x) FROM c; + COMMIT; + + PRAGMA lock_status; +---- +stmt 0 ok +stmt 25 ok +stmt 49 ok +stmt 59 ok +stmt 106 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 232 no such table: t1 +stmt 232 ok +stmt 280 err 1 -1 400 no such table: t2 +stmt 400 ok +stmt 410 ok +==== 1.2 + + UPDATE t1 SET b=int2str(2); + SELECT b=int2str(2) FROM t1 +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 61 no such table: t1 +==== 1.3 + + BEGIN; + DELETE FROM t1; + UPDATE t2 SET b=int2str(a+1); + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 29 no such table: t1 +stmt 29 err 1 -1 63 no such table: t2 +stmt 63 ok +==== 1.4 + + SELECT b=int2str(2) FROM t1 +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 2.0 + + PRAGMA cache_size = -100; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + WITH c(x) AS ( VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100 ) + INSERT INTO t1 SELECT x, int2str(x) FROM c; +---- +stmt 0 ok +stmt 28 ok +stmt 73 err 1 -1 191 no such table: t1 +==== 2.1 + + INSERT INTO t1 VALUES(10001, int2str(1001) || int2str(1001) || int2str(1001)); +---- +stmt 0 err 1 -1 81 no such table: t1 +==== 2.2 + + SELECT b FROM t1 WHERE a = 10001; +---- +stmt 0 err 1 -1 36 no such table: t1 diff --git a/parser/testdata/temptable.metadata.json b/parser/testdata/temptable.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/temptable.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/temptable.test b/parser/testdata/temptable.test new file mode 100644 index 0000000..60f6a9b --- /dev/null +++ b/parser/testdata/temptable.test @@ -0,0 +1,132 @@ +==== temptable-1.3 +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== temptable-1.7 +INSERT INTO t2 VALUES(8,9,0); +---- +stmt 0 err 1 -1 29 no such table: t2 +==== temptable-2.1 + + BEGIN TRANSACTION; + CREATE TEMPORARY TABLE t2(x,y); + INSERT INTO t2 VALUES(1,2); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 23 ok +stmt 59 err 1 -1 91 no such table: t2 +stmt 91 err 1 -1 113 no such table: t2 +==== temptable-2.3 + + BEGIN TRANSACTION; + CREATE TEMPORARY TABLE t2(x,y); + INSERT INTO t2 VALUES(1,2); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 23 ok +stmt 59 err 1 -1 91 no such table: t2 +stmt 91 err 1 -1 113 no such table: t2 +==== temptable-3.1 + + CREATE INDEX i2 ON t2(x); + SELECT name FROM sqlite_master WHERE type='index'; +---- +stmt 0 err 1 -1 30 no such table: main.t2 +stmt 30 ok +==== temptable-3.2 + + SELECT y FROM t2 WHERE x=1; +---- +stmt 0 err 1 -1 32 no such table: t2 +==== temptable-3.3 + + DROP INDEX i2; + SELECT y FROM t2 WHERE x=1; +---- +stmt 0 err 1 -1 19 no such index: i2 +stmt 19 err 1 -1 51 no such table: t2 +==== temptable-4.2 + + CREATE TABLE t2(x,y,z); + INSERT INTO t2 VALUES(9,8,7); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t2 +stmt 62 err 1 -1 84 no such table: t2 +==== temptable-4.7 + + DROP TABLE t2; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 err 1 -1 41 no such table: t2 +==== temptable-4.9 + + CREATE TABLE t2(x unique, y); + INSERT INTO t2 VALUES(3,4); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 34 err 1 -1 66 no such table: t2 +stmt 66 err 1 -1 88 no such table: t2 +==== temptable-4.12 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== temptable-4.14 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== temptable-5.4 + + SELECT y FROM t2 WHERE x=3 +---- +stmt 0 err 1 -1 32 no such table: t2 +==== temptable-5.8 + + SELECT y FROM t2 WHERE x=1; +---- +stmt 0 err 1 -1 32 no such table: t2 +==== temptable-5.9 + + SELECT y FROM t2 WHERE x=3 +---- +stmt 0 err 1 -1 32 no such table: t2 +==== temptable-6.1 + + CREATE TABLE t8(x); + INSERT INTO t8 VALUES('xyzzy'); + SELECT * FROM t8; +---- +stmt 0 ok +stmt 24 err 1 -1 60 no such table: t8 +stmt 60 err 1 -1 82 no such table: t8 +==== temptable-6.4 + + CREATE TEMP TABLE t9(x,y); +---- +stmt 0 ok +==== temptable-6.5 + + INSERT INTO t9 VALUES(1,2); + SELECT * FROM t9; +---- +stmt 0 err 1 -1 32 no such table: t9 +stmt 32 err 1 -1 54 no such table: t9 +==== temptable-6.7 + + SELECT * FROM t8,t9; +---- +stmt 0 err 1 -1 25 no such table: t8 +==== temptable-7.1 + + ATTACH 'test2.db' AS two; + CREATE TEMP TABLE two.abc(x,y); +---- +stmt 0 ok +stmt 32 err 1 57 65 unknown database two diff --git a/parser/testdata/temptable2.metadata.json b/parser/testdata/temptable2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/temptable2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/temptable2.test b/parser/testdata/temptable2.test new file mode 100644 index 0000000..3c6d391 --- /dev/null +++ b/parser/testdata/temptable2.test @@ -0,0 +1,368 @@ +==== 1.1 + + CREATE TEMP TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 30 err 1 -1 61 no such table: main.t1 +==== 1.2 + + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<100000 ) + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM X; +---- +stmt 0 err 1 -1 136 no such table: t1 +==== 1.3 + + PRAGMA temp.integrity_check; +---- +stmt 0 ok +==== 2.1 + + CREATE TEMP TABLE t2(a, b); + INSERT INTO t2 VALUES(1, 2); +---- +stmt 0 ok +stmt 30 err 1 -1 61 no such table: t2 +==== 2.2 + + BEGIN; + INSERT INTO t2 VALUES(3, 4); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 9 err 1 -1 42 no such table: t2 +stmt 42 err 1 -1 64 no such table: t2 +==== 2.3 + + ROLLBACK; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 12 err 1 -1 32 no such table: t2 +==== 3.1.1 + + PRAGMA main.cache_size = 10; + PRAGMA temp.cache_size = 10; + + CREATE TEMP TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<1000 ) + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM x; + + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 31 ok +stmt 62 ok +stmt 93 err 1 -1 124 no such table: main.t1 +stmt 124 err 1 -1 259 no such table: t1 +stmt 259 err 1 -1 287 no such table: t1 +==== 3.1.2 + + BEGIN; + UPDATE t1 SET b=randomblob(100) WHERE (rowid%10)==0; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 66 no such table: t1 +stmt 66 ok +==== 3.1.3 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== 3.1.4 + PRAGMA temp.integrity_check +---- +stmt 0 ok +==== 3.2.1 + + BEGIN; + UPDATE t1 SET b=randomblob(100) WHERE (rowid%10)==0; + SAVEPOINT abc; + UPDATE t1 SET b=randomblob(100) WHERE (rowid%10)==1; + ROLLBACK TO abc; + UPDATE t1 SET b=randomblob(100) WHERE (rowid%10)==2; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 66 no such table: t1 +stmt 66 ok +stmt 85 err 1 -1 144 no such table: t1 +stmt 144 ok +stmt 165 err 1 -1 222 no such table: t1 +stmt 222 ok +==== 3.2.2 + PRAGMA temp.integrity_check +---- +stmt 0 ok +==== 4.1.1 + + PRAGMA main.cache_size = 10; + PRAGMA temp.cache_size = 10; + + CREATE TEMP TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<10 ) + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM x; + + SELECT count(*) FROM t1; + PRAGMA temp.page_count; +---- +stmt 0 ok +stmt 31 ok +stmt 62 ok +stmt 93 err 1 -1 124 no such table: main.t1 +stmt 124 err 1 -1 257 no such table: t1 +stmt 257 err 1 -1 285 no such table: t1 +stmt 285 ok +==== 4.1.2 + + BEGIN; + UPDATE t1 SET b=randomblob(100); + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 46 no such table: t1 +stmt 46 ok +==== 4.1.3 + + CREATE TEMP TABLE t2(a, b); + CREATE INDEX i2 ON t2(a, b); + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<500 ) + INSERT INTO t2 SELECT randomblob(100), randomblob(100) FROM x; + + SELECT count(*) FROM t2; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 30 err 1 -1 61 no such table: main.t2 +stmt 61 err 1 -1 194 no such table: t2 +stmt 194 err 1 -1 222 no such table: t2 +stmt 222 err 1 -1 249 no such table: t1 +==== 4.1.4 + PRAGMA temp.integrity_check +---- +stmt 0 ok +==== 5.1.1 + + PRAGMA main.cache_size = 10; + PRAGMA temp.cache_size = 10; + + CREATE TEMP TABLE t2(a, b); + CREATE INDEX i2 ON t2(a, b); + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<500 ) + INSERT INTO t2 SELECT randomblob(100), randomblob(100) FROM x; + + CREATE TEMP TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 31 ok +stmt 62 ok +stmt 93 err 1 -1 124 no such table: main.t2 +stmt 124 err 1 -1 257 no such table: t2 +stmt 257 ok +stmt 288 err 1 -1 319 no such table: main.t1 +stmt 319 err 1 -1 350 no such table: t1 +==== 5.1.3 + + BEGIN; + UPDATE t1 SET a=2; + UPDATE t2 SET a=randomblob(100); + SELECT count(*) FROM t1; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 69 no such table: t2 +stmt 69 err 1 -1 98 no such table: t1 +stmt 98 ok +==== 5.1.4 + + UPDATE t2 SET a=randomblob(100); + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 56 no such table: t1 +==== 5.1.5 + PRAGMA temp.integrity_check +---- +stmt 0 ok +==== 6.1 + + PRAGMA main.cache_size = 10; + PRAGMA temp.cache_size = 10; + + CREATE TEMP TABLE t1(x); + INSERT INTO t1 VALUES('one'); + + CREATE TEMP TABLE t2(a, b); + CREATE INDEX i2 ON t2(a, b); + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<500 ) + INSERT INTO t2 SELECT randomblob(100), randomblob(100) FROM x; +---- +stmt 0 ok +stmt 31 ok +stmt 62 ok +stmt 90 err 1 -1 122 no such table: t1 +stmt 122 ok +stmt 153 err 1 -1 184 no such table: main.t2 +stmt 184 err 1 -1 317 no such table: t2 +==== 6.2 + + UPDATE t1 SET x='two'; -- step 1 + BEGIN; + UPDATE t2 SET a=randomblob(100); -- step 2 + SELECT * FROM t1; -- step 3 + ROLLBACK; -- step 4 + + SELECT count(*) FROM t2; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 25 no such table: t1 +stmt 25 ok +stmt 56 err 1 -1 93 no such table: t2 +stmt 93 err 1 -1 125 no such table: t1 +stmt 125 ok +stmt 162 err 1 -1 225 no such table: t2 +stmt 225 err 1 -1 245 no such table: t1 +==== 7.1 + + PRAGMA auto_vacuum=INCREMENTAL; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(zeroblob(900)); + INSERT INTO t1 VALUES(zeroblob(900)); + INSERT INTO t1 SELECT x FROM t1; + INSERT INTO t1 SELECT x FROM t1; + INSERT INTO t1 SELECT x FROM t1; + INSERT INTO t1 SELECT x FROM t1; + BEGIN; + DELETE FROM t1 WHERE rowid%2; + PRAGMA incremental_vacuum(4); + ROLLBACK; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 34 ok +stmt 56 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 136 no such table: t1 +stmt 136 err 1 -1 171 no such table: t1 +stmt 171 err 1 -1 206 no such table: t1 +stmt 206 err 1 -1 241 no such table: t1 +stmt 241 err 1 -1 276 no such table: t1 +stmt 276 ok +stmt 285 err 1 -1 317 no such table: t1 +stmt 317 ok +stmt 349 ok +stmt 361 ok +==== 8.1 + + PRAGMA auto_vacuum = OFF; + CREATE TABLE t2(a, b); + CREATE INDEX i2 ON t2(a, b); + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<20 ) + INSERT INTO t2 SELECT randomblob(100), randomblob(100) FROM x ORDER BY 1, 2; + PRAGMA page_count; +---- +stmt 0 ok +stmt 28 ok +stmt 53 err 1 -1 84 no such table: main.t2 +stmt 84 err 1 -1 230 no such table: t2 +stmt 230 ok +==== temptable2-generated + + PRAGMA cache_size = 15; + PRAGMA auto_vacuum = 1; +---- +stmt 0 ok +stmt 28 ok +==== temptable2-generated.dup1 + + CREATE TABLE tx(a, b); + CREATE INDEX i1 ON tx(a); + CREATE INDEX i2 ON tx(b); + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<1000 ) + INSERT INTO tx SELECT randomblob(100), randomblob(100) FROM x; +---- +stmt 0 ok +stmt 27 err 1 -1 57 no such table: main.tx +stmt 57 err 1 -1 87 no such table: main.tx +stmt 87 err 1 -1 227 no such table: tx +==== temptable2-generated.dup2 + DELETE FROM tx WHERE (random()%3)==0 +---- +stmt 0 err 1 -1 38 no such table: tx +==== temptable2-generated.dup3 + PRAGMA integrity_check +---- +stmt 0 ok +==== temptable2-generated.dup4 + + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<400 ) + INSERT INTO tx SELECT randomblob(100), randomblob(100) FROM x; +---- +stmt 0 err 1 -1 148 no such table: tx +==== temptable2-generated.dup5 + PRAGMA integrity_check +---- +stmt 0 ok +==== temptable2-generated.dup6 + + BEGIN; + DELETE FROM tx WHERE (random()%3)==0; + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<500 ) + INSERT INTO tx SELECT randomblob(100), randomblob(100) FROM x; + COMMIT; +---- +stmt 0 ok +stmt 14 err 1 -1 58 no such table: tx +stmt 58 err 1 -1 201 no such table: tx +stmt 201 ok +==== temptable2-generated.dup7 + PRAGMA integrity_check +---- +stmt 0 ok +==== 10.0 + + PRAGMA cache_size = 50; + PRAGMA page_size = 1024; + CREATE TABLE t1(a, b, PRIMARY KEY(a)) WITHOUT ROWID; + CREATE INDEX i1 ON t1(a); + CREATE TABLE t2(x, y); + INSERT INTO t2 VALUES(1, 2); +---- +stmt 0 ok +stmt 26 ok +stmt 53 ok +stmt 108 err 1 -1 136 no such table: main.t1 +stmt 136 ok +stmt 161 err 1 -1 192 no such table: t2 +==== 10.1 + + BEGIN; + WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<500 ) + INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM x; + COMMIT; + INSERT INTO t2 VALUES(3, 4); +---- +stmt 0 ok +stmt 9 err 1 -1 148 no such table: t1 +stmt 148 ok +stmt 158 err 1 -1 189 no such table: t2 +==== 10.2 + PRAGMA mmap_size = 512000 +---- +stmt 0 ok +==== 10.3 + SELECT * FROM t2 +---- +stmt 0 err 1 -1 18 no such table: t2 +==== 10.4 + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/temptable3.metadata.json b/parser/testdata/temptable3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/temptable3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/temptable3.test b/parser/testdata/temptable3.test new file mode 100644 index 0000000..091d830 --- /dev/null +++ b/parser/testdata/temptable3.test @@ -0,0 +1,36 @@ +==== 1.1 + + PRAGMA cache_size = 1; + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = 2; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES( randomblob(800) ); + INSERT INTO t1 VALUES( randomblob(800) ); + CREATE TABLE t2(x); + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 25 ok +stmt 52 ok +stmt 78 ok +stmt 100 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 188 no such table: t1 +stmt 188 ok +stmt 210 ok +==== 1.2 + + PRAGMA cache_size = 1; + PRAGMA auto_vacuum = 2; + CREATE TABLE t1(x); + CREATE TABLE t2(x UNIQUE); + INSERT INTO t2 VALUES(1), (2), (3); + DROP TABLE t1; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 25 ok +stmt 51 ok +stmt 73 ok +stmt 102 err 1 -1 140 no such table: t2 +stmt 140 err 1 -1 157 no such table: t1 +stmt 157 ok diff --git a/parser/testdata/temptrigger.metadata.json b/parser/testdata/temptrigger.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/temptrigger.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/temptrigger.test b/parser/testdata/temptrigger.test new file mode 100644 index 0000000..6b589bc --- /dev/null +++ b/parser/testdata/temptrigger.test @@ -0,0 +1,359 @@ +==== temptrigger-1.1 + + CREATE TABLE t1(a, b); + CREATE TEMP TABLE tt1(a, b); + CREATE TEMP TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO tt1 VALUES(new.a, new.b); + END; +---- +stmt 0 ok +stmt 27 ok +stmt 60 err 1 -1 113 no such table: t1 +==== temptrigger-1.2.2 + SELECT * FROM tt1 +---- +stmt 0 err 1 -1 19 no such table: tt1 +==== temptrigger-1.2.4 + SELECT * FROM tt1 +---- +stmt 0 err 1 -1 19 no such table: tt1 +==== temptrigger-2.2 + + INSERT INTO t1 VALUES(10, 20); + SELECT * FROM tt1; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 58 no such table: tt1 +==== temptrigger-2.4 + + INSERT INTO t1 VALUES(30, 40); + SELECT * FROM tt1; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 err 1 -1 58 no such table: tt1 +==== temptrigger-3.2.1 + + INSERT INTO aux.t2 VALUES(1, 2); + SELECT * FROM aux.t2; +---- +stmt 0 err 1 -1 38 no such table: aux.t2 +stmt 38 err 1 -1 64 no such table: aux.t2 +==== temptrigger-3.2.2 + SELECT * FROM tt2 +---- +stmt 0 err 1 -1 19 no such table: tt2 +==== temptrigger-3.3.2 + SELECT * FROM tt2 +---- +stmt 0 err 1 -1 19 no such table: tt2 +==== 4.0 + + CREATE TABLE t1(x); + CREATE TEMP TRIGGER tr1 BEFORE INSERT ON t1 BEGIN + SELECT 1,2,3; + END; +---- +stmt 0 ok +stmt 22 err 1 -1 74 no such table: t1 +==== 4.1 + + CREATE TEMP TABLE t1(x); +---- +stmt 0 ok +==== 5.0 + + CREATE TABLE t1(x); + CREATE TEMP TRIGGER tr1 BEFORE INSERT ON t1 BEGIN SELECT 1,2,3; END; +---- +stmt 0 ok +stmt 22 err 1 -1 74 no such table: t1 +==== 5.2 + + SELECT * FROM sqlite_master; + SELECT * FROM temp.sqlite_master; +---- +stmt 0 ok +stmt 31 ok +==== 6.0 + + CREATE TABLE t1(x); + CREATE TEMP TRIGGER tr1 BEFORE INSERT ON t1 BEGIN + SELECT raise(ABORT, 'error'); + END; + ATTACH 'test.db2' AS aux; +---- +stmt 0 ok +stmt 22 err 1 -1 74 no such table: t1 +stmt 117 ok +==== 6.2 + + SELECT type,name,tbl_name,sql FROM aux.sqlite_master; + INSERT INTO aux.t1 VALUES(1,2,3); +---- +stmt 0 err 1 -1 56 no such table: aux.sqlite_master +stmt 56 err 1 -1 92 no such table: aux.t1 +==== 6.3 + + INSERT INTO main.t1 VALUES(1); +---- +stmt 0 err 1 -1 33 no such table: main.t1 +==== 7.0 + + CREATE TABLE m1(a, b); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.a1(c, d); +---- +stmt 0 ok +stmt 25 ok +stmt 53 err 1 69 76 unknown database aux +==== 7.1 + + CREATE TEMP TRIGGER tr1 AFTER INSERT ON m1 BEGIN + INSERT INTO a1 VALUES(new.a, new.b); + END; + + INSERT INTO m1 VALUES(5, 6); + SELECT * FROM aux.a1; +---- +stmt 0 err 1 -1 51 no such table: m1 +stmt 99 err 1 -1 131 no such table: m1 +stmt 131 err 1 -1 155 no such table: aux.a1 +==== 7.2 + + CREATE TABLE a1(e, f); + INSERT INTO m1 VALUES(7, 8); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: m1 +==== 7.3.1 + SELECT * FROM main.a1 +---- +stmt 0 err 1 -1 23 no such table: main.a1 +==== 7.3.2 + SELECT * FROM aux.a1 +---- +stmt 0 err 1 -1 23 no such table: aux.a1 +==== 7.4 + + DROP TRIGGER tr1; + CREATE TEMP TRIGGER tr1 AFTER INSERT ON m1 BEGIN + INSERT INTO a1 SELECT d, c FROM aux.a1; + END; + + DELETE FROM aux.a1; + DELETE FROM main.a1; + INSERT INTO aux.a1 VALUES('hello', 'world'); +---- +stmt 0 err 1 -1 20 no such trigger: tr1 +stmt 20 err 1 -1 71 no such table: m1 +stmt 122 err 1 -1 145 no such table: aux.a1 +stmt 145 err 1 -1 168 no such table: main.a1 +stmt 168 err 1 -1 215 no such table: aux.a1 +==== 7.5 + + INSERT INTO m1 VALUES(9, 10); + SELECT * FROM main.a1; +---- +stmt 0 err 1 -1 32 no such table: m1 +stmt 32 err 1 -1 57 no such table: main.a1 +==== 7.6 + + DROP TRIGGER tr1; + CREATE TRIGGER tr1 AFTER INSERT ON m1 BEGIN + INSERT INTO a1 SELECT d, c FROM aux.a1; + END; +---- +stmt 0 err 1 -1 20 no such trigger: tr1 +stmt 20 err 1 -1 66 no such table: main.m1 +==== 8.0 + + ATTACH 'test.db2' AS aux; + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + CREATE TABLE aux.t1(e, f); + CREATE TABLE aux.t2(g, h); +---- +stmt 0 ok +stmt 28 ok +stmt 53 ok +stmt 78 err 1 94 101 unknown database aux +stmt 107 err 1 123 130 unknown database aux +==== 8.1.1 + + CREATE TRIGGER tr1 AFTER INSERT ON t2 BEGIN + INSERT INTO aux.t1 VALUES(new.c, new.d); + END; +---- +stmt 0 err 1 -1 46 no such table: main.t2 +==== 8.1.2 + + CREATE TEMP TRIGGER tr1 AFTER INSERT ON t2 BEGIN + INSERT INTO aux.t1 VALUES(new.c, new.d); + END; + + INSERT INTO main.t2 VALUES('x', 'y'); + SELECT * FROM aux.t1; +---- +stmt 0 err 1 -1 51 no such table: t2 +stmt 103 err 1 -1 144 no such table: main.t2 +stmt 144 err 1 -1 168 no such table: aux.t1 +==== 8.1.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 8.2.1 + + CREATE TRIGGER aux.tr2 AFTER UPDATE ON aux.t1 BEGIN + UPDATE main.t2 SET c=new.e, d=new.f; + END; +---- +stmt 0 err 1 18 54 unknown database aux +==== 8.2.2 + + CREATE TEMP TRIGGER tr2 AFTER UPDATE ON aux.t1 BEGIN + UPDATE main.t2 SET c=new.e, d=new.f; + END; + + UPDATE aux.t1 SET e=1, f=2; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 55 no such table: aux.t1 +stmt 103 err 1 -1 134 no such table: aux.t1 +stmt 134 err 1 -1 154 no such table: t2 +==== 8.2.3 + SELECT * FROM aux.t2 +---- +stmt 0 err 1 -1 22 no such table: aux.t2 +==== 8.3.1 + + CREATE TRIGGER tr3 AFTER DELETE ON t2 BEGIN + DELETE FROM aux.t1; + END; +---- +stmt 0 err 1 -1 46 no such table: main.t2 +==== 8.3.2 + + INSERT INTO main.t1 VALUES('a', 'b'); + CREATE TEMP TRIGGER tr3 AFTER DELETE ON t2 BEGIN + DELETE FROM aux.t1; + END; + + DELETE FROM main.t2; + SELECT * FROM aux.t1; +---- +stmt 0 err 1 -1 40 no such table: main.t1 +stmt 40 err 1 -1 91 no such table: t2 +stmt 122 err 1 -1 146 no such table: main.t2 +stmt 146 err 1 -1 170 no such table: aux.t1 +==== 8.3.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 9.1 + INSERT INTO db0.tbl VALUES('a', 'b', 'c'); +---- +stmt 0 err 1 -1 43 no such table: db0.tbl +==== 9.1.1 + SELECT * FROM db0.tbl +---- +stmt 0 err 1 -1 23 no such table: db0.tbl +==== 9.1.2 + SELECT * FROM db1.tbl +---- +stmt 0 err 1 -1 23 no such table: db1.tbl +==== 9.1.3 + SELECT * FROM db2.tbl +---- +stmt 0 err 1 -1 23 no such table: db2.tbl +==== 9.1.1.dup1 + SELECT * FROM db3.tbl +---- +stmt 0 err 1 -1 23 no such table: db3.tbl +==== 9.1.2.dup1 + SELECT * FROM db4.tbl +---- +stmt 0 err 1 -1 23 no such table: db4.tbl +==== 9.1.3.dup1 + SELECT * FROM db5.tbl +---- +stmt 0 err 1 -1 23 no such table: db5.tbl +==== 9.1.1.dup2 + SELECT * FROM db6.tbl +---- +stmt 0 err 1 -1 23 no such table: db6.tbl +==== 9.1.2.dup2 + SELECT * FROM db7.tbl +---- +stmt 0 err 1 -1 23 no such table: db7.tbl +==== 9.3 + UPDATE db0.tbl SET a=1, b=2, c=3 +---- +stmt 0 err 1 -1 34 no such table: db0.tbl +==== 9.3.1 + SELECT * FROM db0.tbl +---- +stmt 0 err 1 -1 23 no such table: db0.tbl +==== 9.3.2 + SELECT * FROM db1.tbl +---- +stmt 0 err 1 -1 23 no such table: db1.tbl +==== 9.3.3 + SELECT * FROM db2.tbl +---- +stmt 0 err 1 -1 23 no such table: db2.tbl +==== 9.3.1.dup1 + SELECT * FROM db3.tbl +---- +stmt 0 err 1 -1 23 no such table: db3.tbl +==== 9.3.2.dup1 + SELECT * FROM db4.tbl +---- +stmt 0 err 1 -1 23 no such table: db4.tbl +==== 9.3.3.dup1 + SELECT * FROM db5.tbl +---- +stmt 0 err 1 -1 23 no such table: db5.tbl +==== 9.3.1.dup2 + SELECT * FROM db6.tbl +---- +stmt 0 err 1 -1 23 no such table: db6.tbl +==== 9.3.2.dup2 + SELECT * FROM db7.tbl +---- +stmt 0 err 1 -1 23 no such table: db7.tbl +==== 9.5 + DELETE FROM db0.tbl +---- +stmt 0 err 1 -1 21 no such table: db0.tbl +==== 9.5.1 + SELECT * FROM db0.tbl +---- +stmt 0 err 1 -1 23 no such table: db0.tbl +==== 9.5.2 + SELECT * FROM db1.tbl +---- +stmt 0 err 1 -1 23 no such table: db1.tbl +==== 9.5.3 + SELECT * FROM db2.tbl +---- +stmt 0 err 1 -1 23 no such table: db2.tbl +==== 9.5.1.dup1 + SELECT * FROM db3.tbl +---- +stmt 0 err 1 -1 23 no such table: db3.tbl +==== 9.5.2.dup1 + SELECT * FROM db4.tbl +---- +stmt 0 err 1 -1 23 no such table: db4.tbl +==== 9.5.3.dup1 + SELECT * FROM db5.tbl +---- +stmt 0 err 1 -1 23 no such table: db5.tbl +==== 9.5.1.dup2 + SELECT * FROM db6.tbl +---- +stmt 0 err 1 -1 23 no such table: db6.tbl +==== 9.5.2.dup2 + SELECT * FROM db7.tbl +---- +stmt 0 err 1 -1 23 no such table: db7.tbl diff --git a/parser/testdata/thread001.metadata.json b/parser/testdata/thread001.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/thread001.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/thread001.test b/parser/testdata/thread001.test new file mode 100644 index 0000000..2d75862 --- /dev/null +++ b/parser/testdata/thread001.test @@ -0,0 +1,44 @@ +==== thread001-generated + + CREATE TABLE ab(a INTEGER PRIMARY KEY, b); + CREATE INDEX ab_i ON ab(b); + INSERT INTO ab SELECT NULL, md5sum(a, b) FROM ab; + SELECT count(*) FROM ab; +---- +stmt 0 ok +stmt 49 err 1 -1 83 no such table: main.ab +stmt 83 err 1 -1 139 no such table: ab +stmt 139 err 1 -1 170 no such table: ab +==== thread001-generated.dup1 + + SELECT + (SELECT md5sum(a, b) FROM ab WHERE a < (SELECT max(a) FROM ab)) == + (SELECT b FROM ab WHERE a = (SELECT max(a) FROM ab)) +---- +stmt 0 err 1 -1 151 no such table: ab +==== thread001-generated.dup2 + PRAGMA integrity_check +---- +stmt 0 ok +==== t1 + + SELECT + (SELECT md5sum(a, b) FROM ab WHERE +a < (SELECT max(a) FROM ab)) == + (SELECT b FROM ab WHERE a = (SELECT max(a) FROM ab)) +---- +stmt 0 err 1 -1 164 no such table: ab +==== thread001-generated.dup3 + SELECT count(*) FROM ab; +---- +stmt 0 err 1 -1 25 no such table: ab +==== thread001-generated.dup4 + + SELECT + (SELECT md5sum(a, b) FROM ab WHERE +a < (SELECT max(a) FROM ab)) == + (SELECT b FROM ab WHERE a = (SELECT max(a) FROM ab)) +---- +stmt 0 err 1 -1 152 no such table: ab +==== thread001-generated.dup5 + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/thread004.metadata.json b/parser/testdata/thread004.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/thread004.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/thread004.test b/parser/testdata/thread004.test new file mode 100644 index 0000000..4dd4d8b --- /dev/null +++ b/parser/testdata/thread004.test @@ -0,0 +1,4 @@ +==== thread004-1.1 + CREATE TABLE t1(a, b, c) +---- +stmt 0 ok diff --git a/parser/testdata/thread1.metadata.json b/parser/testdata/thread1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/thread1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/thread1.test b/parser/testdata/thread1.test new file mode 100644 index 0000000..c19b44d --- /dev/null +++ b/parser/testdata/thread1.test @@ -0,0 +1,27 @@ +==== thread1-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,'abcdefgh'); + INSERT INTO t1 SELECT a+1, b||b FROM t1; + INSERT INTO t1 SELECT a+2, b||b FROM t1; + INSERT INTO t1 SELECT a+4, b||b FROM t1; + SELECT count(*), max(length(b)) FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 202 no such table: t1 +stmt 202 err 1 -1 247 no such table: t1 +==== thread1-2.4 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== thread1-2.7 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 +==== thread1-2.11 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 diff --git a/parser/testdata/thread2.metadata.json b/parser/testdata/thread2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/thread2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/thread2.test b/parser/testdata/thread2.test new file mode 100644 index 0000000..b17ddc5 --- /dev/null +++ b/parser/testdata/thread2.test @@ -0,0 +1,15 @@ +==== thread1-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,'abcdefgh'); + INSERT INTO t1 SELECT a+1, b||b FROM t1; + INSERT INTO t1 SELECT a+2, b||b FROM t1; + INSERT INTO t1 SELECT a+4, b||b FROM t1; + SELECT count(*), max(length(b)) FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 202 no such table: t1 +stmt 202 err 1 -1 247 no such table: t1 diff --git a/parser/testdata/thread3.metadata.json b/parser/testdata/thread3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/thread3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/thread3.test b/parser/testdata/thread3.test new file mode 100644 index 0000000..498f0d6 --- /dev/null +++ b/parser/testdata/thread3.test @@ -0,0 +1,12 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + PRAGMA journal_mode = DELETE; +---- +stmt 0 ok +stmt 25 ok +==== thread3-generated + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 diff --git a/parser/testdata/tkt-02a8e81d44.metadata.json b/parser/testdata/tkt-02a8e81d44.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-02a8e81d44.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-02a8e81d44.test b/parser/testdata/tkt-02a8e81d44.test new file mode 100644 index 0000000..31a0204 --- /dev/null +++ b/parser/testdata/tkt-02a8e81d44.test @@ -0,0 +1,15 @@ +==== tkt-02a838-1.1 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES(4); + INSERT INTO t1 VALUES(5); + SELECT * FROM (SELECT a FROM t1 LIMIT 1) UNION ALL SELECT 3; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 114 no such table: t1 +stmt 114 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 209 no such table: t1 diff --git a/parser/testdata/tkt-18458b1a.metadata.json b/parser/testdata/tkt-18458b1a.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-18458b1a.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-18458b1a.test b/parser/testdata/tkt-18458b1a.test new file mode 100644 index 0000000..7dfd9a8 --- /dev/null +++ b/parser/testdata/tkt-18458b1a.test @@ -0,0 +1,24 @@ +==== tkt-18458b1a-generated + + CREATE TABLE t0(c0 COLLATE NOCASE); + INSERT INTO t0(c0) VALUES ('B'); + CREATE VIEW v0(c0, c1) AS SELECT DISTINCT t0.c0, 'a' FROM t0; +---- +stmt 0 ok +stmt 40 err 1 -1 77 no such table: t0 +stmt 77 ok +==== tkt-18458b1a-generated.dup1 + + SELECT count(*) FROM v0 WHERE c1 >= c0; +---- +stmt 0 err 1 -1 44 no such table: v0 +==== tkt-18458b1a-generated.dup2 + + SELECT count(*) FROM v0 WHERE NOT NOT (c1 >= c0); +---- +stmt 0 err 1 -1 54 no such table: v0 +==== tkt-18458b1a-generated.dup3 + + SELECT count(*) FROM v0 WHERE ((c1 >= c0) OR 0+0); +---- +stmt 0 err 1 -1 55 no such table: v0 diff --git a/parser/testdata/tkt-2a5629202f.metadata.json b/parser/testdata/tkt-2a5629202f.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-2a5629202f.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-2a5629202f.test b/parser/testdata/tkt-2a5629202f.test new file mode 100644 index 0000000..0b89449 --- /dev/null +++ b/parser/testdata/tkt-2a5629202f.test @@ -0,0 +1,43 @@ +==== 1.1 + + CREATE TABLE t8(b TEXT, c TEXT); + INSERT INTO t8 VALUES('a', 'one'); + INSERT INTO t8 VALUES('b', 'two'); + INSERT INTO t8 VALUES(NULL, 'three'); + INSERT INTO t8 VALUES(NULL, 'four'); +---- +stmt 0 ok +stmt 35 err 1 -1 73 no such table: t8 +stmt 73 err 1 -1 111 no such table: t8 +stmt 111 err 1 -1 151 no such table: t8 +stmt 151 err 1 -1 190 no such table: t8 +==== 1.2 + + SELECT coalesce(b, 'null') || '/' || c FROM t8 x ORDER BY x.b, x.c +---- +stmt 0 err 1 -1 70 no such table: t8 +==== 1.3 + + CREATE UNIQUE INDEX i1 ON t8(b); + SELECT coalesce(b, 'null') || '/' || c FROM t8 x ORDER BY x.b, x.c +---- +stmt 0 err 1 -1 35 no such table: main.t8 +stmt 35 err 1 -1 105 no such table: t8 +==== 1.4 + + DROP INDEX i1; + CREATE UNIQUE INDEX i1 ON t8(b, c); + SELECT coalesce(b, 'null') || '/' || c FROM t8 x ORDER BY x.b, x.c +---- +stmt 0 err 1 -1 17 no such index: i1 +stmt 17 err 1 -1 55 no such table: main.t8 +stmt 55 err 1 -1 125 no such table: t8 +==== 2.1 + + CREATE TABLE t2(a, b NOT NULL, c); + CREATE UNIQUE INDEX t2ab ON t2(a, b); + CREATE UNIQUE INDEX t2ba ON t2(b, a); +---- +stmt 0 ok +stmt 37 err 1 -1 77 no such table: main.t2 +stmt 77 err 1 -1 117 no such table: main.t2 diff --git a/parser/testdata/tkt-2d1a5c67d.metadata.json b/parser/testdata/tkt-2d1a5c67d.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-2d1a5c67d.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-2d1a5c67d.test b/parser/testdata/tkt-2d1a5c67d.test new file mode 100644 index 0000000..4c379a2 --- /dev/null +++ b/parser/testdata/tkt-2d1a5c67d.test @@ -0,0 +1,35 @@ +==== 3.1 + + PRAGMA cache_size = 10; + CREATE TABLE t3(a INTEGER PRIMARY KEY, b); + CREATE TABLE t4(a); +---- +stmt 0 ok +stmt 26 ok +stmt 71 ok +==== 3.2 + + INSERT INTO t3 VALUES(NULL, randomblob(500)); + INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 2 + INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 4 + INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 8 + INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 16 + INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 32 + INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 64 + INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 128 +---- +stmt 0 err 1 -1 48 no such table: t3 +stmt 48 err 1 -1 92 no such table: t3 +stmt 92 err 1 -1 145 no such table: t3 +stmt 145 err 1 -1 198 no such table: t3 +stmt 198 err 1 -1 251 no such table: t3 +stmt 251 err 1 -1 305 no such table: t3 +stmt 305 err 1 -1 359 no such table: t3 +stmt 359 err 1 -1 413 no such table: t3 +==== 3.3 + + BEGIN; + INSERT INTO t4 VALUES('xyz'); +---- +stmt 0 ok +stmt 9 err 1 -1 43 no such table: t4 diff --git a/parser/testdata/tkt-313723c356.metadata.json b/parser/testdata/tkt-313723c356.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-313723c356.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-313723c356.test b/parser/testdata/tkt-313723c356.test new file mode 100644 index 0000000..787ab9f --- /dev/null +++ b/parser/testdata/tkt-313723c356.test @@ -0,0 +1,21 @@ +==== tkt-313723c356.1 + + PRAGMA page_size = 1024; + PRAGMA journal_mode = WAL; + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + INSERT INTO t1 VALUES(randomblob(400), randomblob(400)); + INSERT INTO t1 SELECT randomblob(400), randomblob(400) FROM t1; + INSERT INTO t1 SELECT randomblob(400), randomblob(400) FROM t1; + INSERT INTO t1 SELECT randomblob(400), randomblob(400) FROM t1; + INSERT INTO t1 SELECT randomblob(400), randomblob(400) FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 56 ok +stmt 81 err 1 -1 112 no such table: main.t1 +stmt 112 err 1 -1 171 no such table: t1 +stmt 171 err 1 -1 237 no such table: t1 +stmt 237 err 1 -1 303 no such table: t1 +stmt 303 err 1 -1 369 no such table: t1 +stmt 369 err 1 -1 435 no such table: t1 diff --git a/parser/testdata/tkt-385a5b56b9.metadata.json b/parser/testdata/tkt-385a5b56b9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-385a5b56b9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-385a5b56b9.test b/parser/testdata/tkt-385a5b56b9.test new file mode 100644 index 0000000..93ef35c --- /dev/null +++ b/parser/testdata/tkt-385a5b56b9.test @@ -0,0 +1,32 @@ +==== 1.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, NULL); + INSERT INTO t1 VALUES(2, NULL); + INSERT INTO t1 VALUES(1, NULL); +---- +stmt 0 ok +stmt 26 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 128 no such table: t1 +==== 1.1 + SELECT DISTINCT x, y FROM t1 +---- +stmt 0 err 1 -1 30 no such table: t1 +==== 1.2 + CREATE UNIQUE INDEX i1 ON t1(x, y) +---- +stmt 0 err 1 -1 36 no such table: main.t1 +==== 1.3 + SELECT DISTINCT x, y FROM t1 +---- +stmt 0 err 1 -1 30 no such table: t1 +==== 2.0 + + CREATE TABLE t2(x, y NOT NULL); + CREATE UNIQUE INDEX t2x ON t2(x); + CREATE UNIQUE INDEX t2y ON t2(y); +---- +stmt 0 ok +stmt 34 err 1 -1 70 no such table: main.t2 +stmt 70 err 1 -1 106 no such table: main.t2 diff --git a/parser/testdata/tkt-38cb5df375.metadata.json b/parser/testdata/tkt-38cb5df375.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-38cb5df375.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-38cb5df375.test b/parser/testdata/tkt-38cb5df375.test new file mode 100644 index 0000000..f2d8569 --- /dev/null +++ b/parser/testdata/tkt-38cb5df375.test @@ -0,0 +1,13 @@ +==== tkt-38cb5df375.0 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 SELECT a+2 FROM t1; + INSERT INTO t1 SELECT a+4 FROM t1; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 162 no such table: t1 diff --git a/parser/testdata/tkt-3a77c9714e.metadata.json b/parser/testdata/tkt-3a77c9714e.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-3a77c9714e.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-3a77c9714e.test b/parser/testdata/tkt-3a77c9714e.test new file mode 100644 index 0000000..fbddcb2 --- /dev/null +++ b/parser/testdata/tkt-3a77c9714e.test @@ -0,0 +1,62 @@ +==== 1.1 + + CREATE TABLE t1(t1_id INTEGER PRIMARY KEY, t1_title TEXT); + CREATE TABLE t2(t2_id INTEGER PRIMARY KEY, t2_title TEXT); + CREATE TABLE t3(t3_id INTEGER PRIMARY KEY, t3_title TEXT); + + INSERT INTO t1 (t1_id, t1_title) VALUES (888, 'ABCDEF'); + INSERT INTO t2 (t2_id, t2_title) VALUES (999, 'ABCDEF'); + INSERT INTO t3 (t3_id, t3_title) VALUES (999, 'ABCDEF'); +---- +stmt 0 ok +stmt 61 ok +stmt 122 ok +stmt 183 err 1 -1 243 no such table: t1 +stmt 243 err 1 -1 302 no such table: t2 +stmt 302 err 1 -1 361 no such table: t3 +==== 1.2 + + SELECT t1_title, t2_title + FROM t1 LEFT JOIN t2 + WHERE + t2_id = (SELECT t3_id FROM + ( SELECT t3_id FROM t3 WHERE t3_title=t1_title LIMIT 500 ) + ) +---- +stmt 0 err 1 -1 159 no such table: t1 +==== 2.2 + + SELECT + SrcWord, Beginnings.Title + FROM + (SELECT 'FACTORING' AS SrcWord UNION SELECT 'SWIMMING' AS SrcWord ) + LEFT JOIN + Beginnings + WHERE Beginnings.Id= ( + SELECT BeginningId FROM ( + SELECT SrcWord, B.Id as BeginningId, B.Title || E.Title As Connected + FROM Beginnings B LEFT JOIN Endings E ON B.EndingId=E.EndingId + WHERE Connected=SrcWord LIMIT 1 + ) + ) +---- +stmt 0 err 1 -1 417 no such table: Beginnings +==== 3.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(i INT PRIMARY KEY, a, b); + INSERT INTO t1 VALUES(NULL,'one','i'); + CREATE INDEX i1a ON t1(a); + CREATE INDEX i1b ON t1(b); + SELECT (SELECT 1 + FROM (SELECT 1 FROM t1 WHERE a=1 OR b='i') + WHERE a='o' + OR b IN (SELECT a=('b' IN (SELECT 'a')))) + FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 71 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 141 no such table: main.t1 +stmt 141 err 1 -1 170 no such table: main.t1 +stmt 170 err 1 -1 336 no such table: t1 diff --git a/parser/testdata/tkt-4c86b126f2.metadata.json b/parser/testdata/tkt-4c86b126f2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-4c86b126f2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-4c86b126f2.test b/parser/testdata/tkt-4c86b126f2.test new file mode 100644 index 0000000..2bc2b36 --- /dev/null +++ b/parser/testdata/tkt-4c86b126f2.test @@ -0,0 +1,39 @@ +==== tkt-4c86b126f2-1.1 + + CREATE TABLE nodes( + local_relpath TEXT PRIMARY KEY, + moved_to TEXT + ); + INSERT INTO nodes VALUES('A',NULL); + INSERT INTO nodes VALUES('A/B',NULL); + INSERT INTO nodes VALUES('',NULL); + INSERT INTO nodes VALUES('A/B/C-move',NULL); + INSERT INTO nodes VALUES('A/B/C','A/B/C-move'); + INSERT INTO nodes VALUES('A/B-move',NULL); + INSERT INTO nodes VALUES('A/B-move/C-move',NULL); + INSERT INTO nodes VALUES('A/B-move/C','x'); + SELECT local_relpath, moved_to + FROM nodes + WHERE (local_relpath = 'A/B' OR + ((local_relpath > 'A/B/') AND (local_relpath < 'A/B0'))) + AND moved_to IS NOT NULL; +---- +stmt 0 ok +stmt 85 err 1 -1 123 no such table: nodes +stmt 123 err 1 -1 163 no such table: nodes +stmt 163 err 1 -1 200 no such table: nodes +stmt 200 err 1 -1 247 no such table: nodes +stmt 247 err 1 -1 297 no such table: nodes +stmt 297 err 1 -1 342 no such table: nodes +stmt 342 err 1 -1 394 no such table: nodes +stmt 394 err 1 -1 440 no such table: nodes +stmt 440 err 1 -1 619 no such table: nodes +==== tkt-4c86b126f2-2.1 + + CREATE TABLE t1(x TEXT UNIQUE, y TEXT UNIQUE, z); + INSERT INTO t1 VALUES('ghi','jkl','y'); + SELECT * FROM t1 WHERE (x='ghi' OR y='jkl') AND z IS NOT NULL; +---- +stmt 0 ok +stmt 52 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 159 no such table: t1 diff --git a/parser/testdata/tkt-4dd95f6943.metadata.json b/parser/testdata/tkt-4dd95f6943.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-4dd95f6943.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-4dd95f6943.test b/parser/testdata/tkt-4dd95f6943.test new file mode 100644 index 0000000..0e8391b --- /dev/null +++ b/parser/testdata/tkt-4dd95f6943.test @@ -0,0 +1,65 @@ +==== 1.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES (3), (4), (2), (1), (5), (6); +---- +stmt 0 ok +stmt 22 err 1 -1 76 no such table: t1 +==== tkt-4dd95f6943-generated + DROP INDEX IF EXISTS i1; +---- +stmt 0 ok +==== tkt-4dd95f6943-generated.dup1 + + SELECT x FROM t1 WHERE x IN(2, 4, 5) ORDER BY x ASC; +---- +stmt 0 err 1 -1 57 no such table: t1 +==== tkt-4dd95f6943-generated.dup2 + + SELECT x FROM t1 WHERE x IN(2, 4, 5) ORDER BY x DESC; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 2.0 + + CREATE TABLE t2(x, y); + INSERT INTO t2 VALUES (5, 3), (5, 4), (5, 2), (5, 1), (5, 5), (5, 6); + INSERT INTO t2 VALUES (1, 3), (1, 4), (1, 2), (1, 1), (1, 5), (1, 6); + INSERT INTO t2 VALUES (3, 3), (3, 4), (3, 2), (3, 1), (3, 5), (3, 6); + INSERT INTO t2 VALUES (2, 3), (2, 4), (2, 2), (2, 1), (2, 5), (2, 6); + INSERT INTO t2 VALUES (4, 3), (4, 4), (4, 2), (4, 1), (4, 5), (4, 6); + INSERT INTO t2 VALUES (6, 3), (6, 4), (6, 2), (6, 1), (6, 5), (6, 6); + + CREATE TABLE t3(a, b); + INSERT INTO t3 VALUES (2, 2), (4, 4), (5, 5); + CREATE UNIQUE INDEX t3i1 ON t3(a ASC); + CREATE UNIQUE INDEX t3i2 ON t3(b DESC); +---- +stmt 0 ok +stmt 25 err 1 -1 97 no such table: t2 +stmt 97 err 1 -1 169 no such table: t2 +stmt 169 err 1 -1 241 no such table: t2 +stmt 241 err 1 -1 313 no such table: t2 +stmt 313 err 1 -1 385 no such table: t2 +stmt 385 err 1 -1 457 no such table: t2 +stmt 457 ok +stmt 483 err 1 -1 531 no such table: t3 +stmt 531 err 1 -1 572 no such table: main.t3 +stmt 572 err 1 -1 614 no such table: main.t3 +==== tkt-4dd95f6943-generated.dup3 + DROP INDEX IF EXISTS i1; +---- +stmt 0 ok +==== 3.0 + + CREATE TABLE t7(x); + INSERT INTO t7 VALUES (1), (2), (3); + CREATE INDEX i7 ON t7(x); + + CREATE TABLE t8(y); + INSERT INTO t8 VALUES (1), (2), (3); +---- +stmt 0 ok +stmt 22 err 1 -1 61 no such table: t7 +stmt 61 err 1 -1 89 no such table: main.t7 +stmt 89 ok +stmt 112 err 1 -1 151 no such table: t8 diff --git a/parser/testdata/tkt-4ef7e3cfca.metadata.json b/parser/testdata/tkt-4ef7e3cfca.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-4ef7e3cfca.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-4ef7e3cfca.test b/parser/testdata/tkt-4ef7e3cfca.test new file mode 100644 index 0000000..d808050 --- /dev/null +++ b/parser/testdata/tkt-4ef7e3cfca.test @@ -0,0 +1,69 @@ +==== 1.1 + + CREATE TABLE x(a); + CREATE TRIGGER t AFTER INSERT ON x BEGIN + SELECT * FROM x WHERE abc.a = 1; + END; + INSERT INTO x VALUES('assert'); +---- +stmt 0 ok +stmt 21 err 1 -1 64 no such table: main.x +stmt 108 err 1 -1 142 no such table: x +==== 2.1 + + CREATE TABLE w(a); + CREATE TABLE x(a); + CREATE TABLE y(a); + CREATE TABLE z(a); + + INSERT INTO x(a) VALUES(5); + INSERT INTO y(a) VALUES(10); + + CREATE TRIGGER t AFTER INSERT ON w BEGIN + INSERT INTO z + SELECT (SELECT x.a + y.a FROM y) FROM x; + END; + INSERT INTO w VALUES('incorrect'); +---- +stmt 0 ok +stmt 21 ok +stmt 42 ok +stmt 63 ok +stmt 84 err 1 -1 115 no such table: x +stmt 115 err 1 -1 146 no such table: y +stmt 146 err 1 -1 190 no such table: main.w +stmt 260 err 1 -1 297 no such table: w +==== 2.2 + + SELECT * FROM z; +---- +stmt 0 err 1 -1 19 no such table: z +==== 3.1 + + CREATE TABLE w(a); + CREATE TABLE x(b); + CREATE TABLE y(a); + CREATE TABLE z(a); + + INSERT INTO x(b) VALUES(5); + INSERT INTO y(a) VALUES(10); + + CREATE TRIGGER t AFTER INSERT ON w BEGIN + INSERT INTO z + SELECT (SELECT x.b + y.a FROM y) FROM x; + END; + INSERT INTO w VALUES('assert'); +---- +stmt 0 ok +stmt 21 ok +stmt 42 ok +stmt 63 ok +stmt 84 err 1 -1 115 no such table: x +stmt 115 err 1 -1 146 no such table: y +stmt 146 err 1 -1 190 no such table: main.w +stmt 260 err 1 -1 294 no such table: w +==== 3.2 + + SELECT * FROM z; +---- +stmt 0 err 1 -1 19 no such table: z diff --git a/parser/testdata/tkt-54844eea3f.metadata.json b/parser/testdata/tkt-54844eea3f.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-54844eea3f.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-54844eea3f.test b/parser/testdata/tkt-54844eea3f.test new file mode 100644 index 0000000..22e3680 --- /dev/null +++ b/parser/testdata/tkt-54844eea3f.test @@ -0,0 +1,61 @@ +==== 1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(4); + + CREATE TABLE t2(b INTEGER PRIMARY KEY); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(2); + INSERT INTO t2 SELECT b+2 FROM t2; + INSERT INTO t2 SELECT b+4 FROM t2; + INSERT INTO t2 SELECT b+8 FROM t2; + INSERT INTO t2 SELECT b+16 FROM t2; + + CREATE TABLE t3(c INTEGER PRIMARY KEY); + INSERT INTO t3 VALUES(1); + INSERT INTO t3 VALUES(2); + INSERT INTO t3 VALUES(3); +---- +stmt 0 ok +stmt 44 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 104 no such table: t1 +stmt 104 ok +stmt 149 err 1 -1 179 no such table: t2 +stmt 179 err 1 -1 209 no such table: t2 +stmt 209 err 1 -1 248 no such table: t2 +stmt 248 err 1 -1 287 no such table: t2 +stmt 287 err 1 -1 326 no such table: t2 +stmt 326 err 1 -1 366 no such table: t2 +stmt 366 ok +stmt 411 err 1 -1 441 no such table: t3 +stmt 441 err 1 -1 471 no such table: t3 +stmt 471 err 1 -1 501 no such table: t3 +==== 1.1 + + SELECT 'test-2', t3.c, ( + SELECT count(*) + FROM t1 JOIN (SELECT DISTINCT t3.c AS p FROM t2) AS x ON t1.a=x.p + ) + FROM t3; +---- +stmt 0 err 1 -1 151 no such table: t3 +==== 1.2 + + CREATE TABLE t4(a, b, c); + INSERT INTO t4 VALUES('a', 1, 'one'); + INSERT INTO t4 VALUES('a', 2, 'two'); + INSERT INTO t4 VALUES('b', 1, 'three'); + INSERT INTO t4 VALUES('b', 2, 'four'); + SELECT ( + SELECT c FROM ( + SELECT * FROM t4 WHERE a=out.a ORDER BY b LIMIT 10 OFFSET 1 + ) WHERE b=out.b + ) FROM t4 AS out; +---- +stmt 0 ok +stmt 30 err 1 -1 72 no such table: t4 +stmt 72 err 1 -1 114 no such table: t4 +stmt 114 err 1 -1 158 no such table: t4 +stmt 158 err 1 -1 201 no such table: t4 +stmt 201 err 1 -1 349 no such table: t4 diff --git a/parser/testdata/tkt-5e10420e8d.metadata.json b/parser/testdata/tkt-5e10420e8d.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-5e10420e8d.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-5e10420e8d.test b/parser/testdata/tkt-5e10420e8d.test new file mode 100644 index 0000000..371c867 --- /dev/null +++ b/parser/testdata/tkt-5e10420e8d.test @@ -0,0 +1,45 @@ +==== tkt-5e10420e8d.1 + + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = incremental; + + CREATE TABLE t1(x); + CREATE TABLE t2(x); + CREATE TABLE t3(x); +---- +stmt 0 ok +stmt 27 ok +stmt 63 ok +stmt 86 ok +stmt 108 ok +==== tkt-5e10420e8d.2 + + INSERT INTO t3 VALUES(randomblob(500 + 1024*248)); + INSERT INTO t1 VALUES(randomblob(1500)); + INSERT INTO t2 VALUES(randomblob(500 + 1024*248)); + + DELETE FROM t3; + DELETE FROM t2; + DELETE FROM t1; +---- +stmt 0 err 1 -1 53 no such table: t3 +stmt 53 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 149 no such table: t2 +stmt 149 err 1 -1 168 no such table: t3 +stmt 168 err 1 -1 186 no such table: t2 +stmt 186 err 1 -1 204 no such table: t1 +==== tkt-5e10420e8d.3 + + PRAGMA incremental_vacuum(248) +---- +stmt 0 ok +==== tkt-5e10420e8d.4 + + PRAGMA incremental_vacuum(1) +---- +stmt 0 ok +==== tkt-5e10420e8d.5 + + PRAGMA integrity_check; +---- +stmt 0 ok diff --git a/parser/testdata/tkt-752e1646fc.metadata.json b/parser/testdata/tkt-752e1646fc.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-752e1646fc.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-752e1646fc.test b/parser/testdata/tkt-752e1646fc.test new file mode 100644 index 0000000..7203ddd --- /dev/null +++ b/parser/testdata/tkt-752e1646fc.test @@ -0,0 +1,13 @@ +==== tkt-752e1646fc-1.1 + + CREATE TABLE "test" ("letter" VARCHAR(1) PRIMARY KEY, "number" INTEGER NOT NULL); + INSERT INTO "test" ("letter", "number") VALUES('b', 1); + INSERT INTO "test" ("letter", "number") VALUES('a', 2); + INSERT INTO "test" ("letter", "number") VALUES('c', 2); + SELECT DISTINCT "number" FROM (SELECT "letter", "number" FROM "test" ORDER BY "letter", "number" LIMIT 1) AS "test"; +---- +stmt 0 ok +stmt 86 err 1 -1 146 no such table: test +stmt 146 err 1 -1 207 no such table: test +stmt 207 err 1 -1 268 no such table: test +stmt 268 err 1 -1 390 no such table: test diff --git a/parser/testdata/tkt-78e04e52ea.metadata.json b/parser/testdata/tkt-78e04e52ea.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-78e04e52ea.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-78e04e52ea.test b/parser/testdata/tkt-78e04e52ea.test new file mode 100644 index 0000000..764dc9e --- /dev/null +++ b/parser/testdata/tkt-78e04e52ea.test @@ -0,0 +1,49 @@ +==== tkt-78e04-1.0 + + CREATE TABLE ""("" UNIQUE, x CHAR(100)); + CREATE TABLE t2(x); + INSERT INTO ""("") VALUES(1); + INSERT INTO t2 VALUES(2); + SELECT * FROM "", t2; +---- +stmt 0 ok +stmt 45 ok +stmt 69 err 1 -1 103 no such table: +stmt 103 err 1 -1 133 no such table: t2 +stmt 133 err 1 -1 159 no such table: +==== tkt-78e04-1.1 + + INSERT INTO ""("") VALUES(1); +---- +stmt 0 err 1 -1 34 no such table: +==== tkt-78e04-1.2 + + PRAGMA table_info(""); +---- +stmt 0 ok +==== tkt-78e04-1.3 + + CREATE INDEX i1 ON ""("" COLLATE nocase); +---- +stmt 0 err 1 -1 46 no such table: main. +==== tkt-78e04-1.5 + + DROP TABLE ""; + SELECT name FROM sqlite_master; +---- +stmt 0 err 1 -1 19 no such table: +stmt 19 ok +==== tkt-78e04-2.1 + + CREATE INDEX "" ON t2(x); + EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=5; +---- +stmt 0 err 1 -1 30 no such table: main.t2 +stmt 30 err 1 -1 81 no such table: t2 +==== tkt-78e04-2.2 + + DROP INDEX ""; + EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=2; +---- +stmt 0 err 1 -1 19 no such index: +stmt 19 err 1 -1 70 no such table: t2 diff --git a/parser/testdata/tkt-7a31705a7e6.metadata.json b/parser/testdata/tkt-7a31705a7e6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-7a31705a7e6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-7a31705a7e6.test b/parser/testdata/tkt-7a31705a7e6.test new file mode 100644 index 0000000..3528d18 --- /dev/null +++ b/parser/testdata/tkt-7a31705a7e6.test @@ -0,0 +1,11 @@ +==== tkt-7a31705a7e6-1.1 + + CREATE TABLE t1 (a INTEGER PRIMARY KEY); + CREATE TABLE t2 (a INTEGER PRIMARY KEY, b INTEGER); + CREATE TABLE t2x (b INTEGER PRIMARY KEY); + SELECT t1.a FROM ((t1 JOIN t2 ON t1.a=t2.a) AS x JOIN t2x ON x.b=t2x.b) as y; +---- +stmt 0 ok +stmt 43 ok +stmt 97 ok +stmt 141 err 1 -1 221 no such table: t1 diff --git a/parser/testdata/tkt-7bbfb7d442.metadata.json b/parser/testdata/tkt-7bbfb7d442.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-7bbfb7d442.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-7bbfb7d442.test b/parser/testdata/tkt-7bbfb7d442.test new file mode 100644 index 0000000..b54a714 --- /dev/null +++ b/parser/testdata/tkt-7bbfb7d442.test @@ -0,0 +1,152 @@ +==== 1.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(3, 'three'); + + CREATE TABLE t2(c, d); + INSERT INTO t2 VALUES('one', 'I'); + INSERT INTO t2 VALUES('two', 'II'); + INSERT INTO t2 VALUES('three', 'III'); + + CREATE TABLE t3(t3_a PRIMARY KEY, t3_d); + CREATE TRIGGER t3t AFTER INSERT ON t3 WHEN new.t3_d IS NULL BEGIN + UPDATE t3 SET t3_d = ( + SELECT d FROM + (SELECT * FROM t2 WHERE (new.t3_a%2)=(rowid%2) LIMIT 10), + (SELECT * FROM t1 WHERE (new.t3_a%2)=(rowid%2) LIMIT 10) + WHERE a = new.t3_a AND b = c + ) WHERE t3_a = new.t3_a; + END; +---- +stmt 0 ok +stmt 25 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 132 no such table: t1 +stmt 132 ok +stmt 158 err 1 -1 195 no such table: t2 +stmt 195 err 1 -1 233 no such table: t2 +stmt 233 err 1 -1 274 no such table: t2 +stmt 274 ok +stmt 318 err 1 -1 386 no such table: main.t3 +==== 1.2 + + INSERT INTO t3(t3_a) VALUES(1); + INSERT INTO t3(t3_a) VALUES(2); + INSERT INTO t3(t3_a) VALUES(3); + SELECT * FROM t3; +---- +stmt 0 err 1 -1 34 no such table: t3 +stmt 34 err 1 -1 68 no such table: t3 +stmt 68 err 1 -1 102 no such table: t3 +stmt 102 err 1 -1 122 no such table: t3 +==== 1.3 + DELETE FROM t3 +---- +stmt 0 err 1 -1 16 no such table: t3 +==== 1.4 + + INSERT INTO t3(t3_a) SELECT 1 UNION SELECT 2 UNION SELECT 3; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 65 no such table: t3 +stmt 65 err 1 -1 87 no such table: t3 +==== 2.1 + + CREATE TABLE InventoryControl ( + InventoryControlId INTEGER PRIMARY KEY AUTOINCREMENT, + SKU INTEGER NOT NULL, + Variant INTEGER NOT NULL DEFAULT 0, + ControlDate DATE NOT NULL, + ControlState INTEGER NOT NULL DEFAULT -1, + DeliveredQty VARCHAR(30) + ); + + CREATE TRIGGER TGR_InventoryControl_AfterInsert + AFTER INSERT ON InventoryControl + FOR EACH ROW WHEN NEW.ControlState=-1 BEGIN + + INSERT OR REPLACE INTO InventoryControl( + InventoryControlId,SKU,Variant,ControlDate,ControlState,DeliveredQty + ) SELECT + T1.InventoryControlId AS InventoryControlId, + T1.SKU AS SKU, + T1.Variant AS Variant, + T1.ControlDate AS ControlDate, + 1 AS ControlState, + COALESCE(T2.DeliveredQty,0) AS DeliveredQty + FROM ( + SELECT + NEW.InventoryControlId AS InventoryControlId, + II.SKU AS SKU, + II.Variant AS Variant, + COALESCE(LastClosedIC.ControlDate,NEW.ControlDate) AS ControlDate + FROM + InventoryItem II + LEFT JOIN + InventoryControl LastClosedIC + ON LastClosedIC.InventoryControlId IN ( SELECT 99999 ) + WHERE + II.SKU=NEW.SKU AND + II.Variant=NEW.Variant + ) T1 + LEFT JOIN ( + SELECT + TD.SKU AS SKU, + TD.Variant AS Variant, + 10 AS DeliveredQty + FROM + TransactionDetail TD + WHERE + TD.SKU=NEW.SKU AND + TD.Variant=NEW.Variant + ) T2 + ON T2.SKU=T1.SKU AND + T2.Variant=T1.Variant; + END; + + CREATE TABLE InventoryItem ( + SKU INTEGER NOT NULL, + Variant INTEGER NOT NULL DEFAULT 0, + DeptCode INTEGER NOT NULL, + GroupCode INTEGER NOT NULL, + ItemDescription VARCHAR(120) NOT NULL, + PRIMARY KEY(SKU, Variant) + ); + + INSERT INTO InventoryItem VALUES(220,0,1,170,'Scoth Tampon Recurer'); + INSERT INTO InventoryItem VALUES(31,0,1,110,'Fromage'); + + CREATE TABLE TransactionDetail ( + TransactionId INTEGER NOT NULL, + SKU INTEGER NOT NULL, + Variant INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY(TransactionId, SKU, Variant) + ); + INSERT INTO TransactionDetail(TransactionId, SKU, Variant) VALUES(44, 31, 0); + + + INSERT INTO InventoryControl(SKU, Variant, ControlDate) SELECT + II.SKU AS SKU, II.Variant AS Variant, '2011-08-30' AS ControlDate + FROM InventoryItem II; +---- +stmt 0 ok +stmt 269 err 1 -1 404 no such table: main.InventoryControl +stmt 1640 ok +stmt 1881 err 1 -1 1956 no such table: InventoryItem +stmt 1956 err 1 -1 2014 no such table: InventoryItem +stmt 2014 ok +stmt 2204 err 1 -1 2284 no such table: TransactionDetail +stmt 2284 err 1 -1 2458 no such table: InventoryControl +==== 2.2 + + SELECT SKU, DeliveredQty FROM InventoryControl WHERE SKU=31 +---- +stmt 0 err 1 -1 63 no such table: InventoryControl +==== 2.3 + + SELECT CASE WHEN DeliveredQty=10 THEN 'TEST PASSED!' ELSE 'TEST FAILED!' END + FROM InventoryControl WHERE SKU=31; +---- +stmt 0 err 1 -1 118 no such table: InventoryControl diff --git a/parser/testdata/tkt-80ba201079.metadata.json b/parser/testdata/tkt-80ba201079.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-80ba201079.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-80ba201079.test b/parser/testdata/tkt-80ba201079.test new file mode 100644 index 0000000..694d578 --- /dev/null +++ b/parser/testdata/tkt-80ba201079.test @@ -0,0 +1,58 @@ +==== 301 + + CREATE TABLE t1(a, b, c); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); + CREATE TABLE t2(d, e); + + INSERT INTO t1 VALUES('A', 'B', 'C'); + INSERT INTO t2 VALUES('D', 'E'); +---- +stmt 0 ok +stmt 28 err 1 -1 56 no such table: main.t1 +stmt 56 err 1 -1 84 no such table: main.t1 +stmt 84 ok +stmt 109 err 1 -1 150 no such table: t1 +stmt 150 err 1 -1 185 no such table: t2 +==== 302 + + SELECT * FROM t1, t2 WHERE + (a='A' AND d='E') OR + (b='B' AND c IN ('C', 'D', 'E')) +---- +stmt 0 err 1 -1 92 no such table: t1 +==== 303 + + SELECT * FROM t1, t2 WHERE + (a='A' AND d='E') OR + (b='B' AND c IN (SELECT c FROM t1)) +---- +stmt 0 err 1 -1 95 no such table: t1 +==== 304 + + SELECT * FROM t1, t2 WHERE + (a='A' AND d='E') OR + (b='B' AND c IN (SELECT 'B' UNION SELECT 'C' UNION SELECT 'D')) +---- +stmt 0 err 1 -1 129 no such table: t1 +==== 305 + + SELECT * FROM t1, t2 WHERE + (b='B' AND c IN ('C', 'D', 'E')) OR + (a='A' AND d='E') +---- +stmt 0 err 1 -1 92 no such table: t1 +==== 306 + + SELECT * FROM t1, t2 WHERE + (b='B' AND c IN (SELECT c FROM t1)) OR + (a='A' AND d='E') +---- +stmt 0 err 1 -1 95 no such table: t1 +==== 307 + + SELECT * FROM t1, t2 WHERE + (b='B' AND c IN (SELECT 'B' UNION SELECT 'C' UNION SELECT 'D')) OR + (a='A' AND d='E') +---- +stmt 0 err 1 -1 129 no such table: t1 diff --git a/parser/testdata/tkt-80e031a00f.metadata.json b/parser/testdata/tkt-80e031a00f.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-80e031a00f.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-80e031a00f.test b/parser/testdata/tkt-80e031a00f.test new file mode 100644 index 0000000..3cfa556 --- /dev/null +++ b/parser/testdata/tkt-80e031a00f.test @@ -0,0 +1,477 @@ +==== tkt-80e031a00f.1 +SELECT 1 IN () +---- +stmt 0 ok +==== tkt-80e031a00f.1b +SELECT 1 IN (2) +---- +stmt 0 ok +==== tkt-80e031a00f.1c +SELECT 1 IN (2,3,4,5,6,7,8,9) +---- +stmt 0 ok +==== tkt-80e031a00f.2 +SELECT 1 NOT IN () +---- +stmt 0 ok +==== tkt-80e031a00f.2b +SELECT 1 NOT IN (2) +---- +stmt 0 ok +==== tkt-80e031a00f.2c +SELECT 1 NOT IN (2,3,4,5,6,7,8,9) +---- +stmt 0 ok +==== tkt-80e031a00f.3 +SELECT null IN () +---- +stmt 0 ok +==== tkt-80e031a00f.4 +SELECT null NOT IN () +---- +stmt 0 ok +==== tkt-80e031a00f.5 + + CREATE TABLE t1(x); + SELECT 1 IN t1; +---- +stmt 0 ok +stmt 22 err 1 -1 40 no such table: t1 +==== tkt-80e031a00f.6 +SELECT 1 NOT IN t1 +---- +stmt 0 err 1 -1 19 no such table: t1 +==== tkt-80e031a00f.7 +SELECT null IN t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== tkt-80e031a00f.8 +SELECT null NOT IN t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== tkt-80e031a00f.9 + + CREATE TABLE t2(y INTEGER PRIMARY KEY); + SELECT 1 IN t2; +---- +stmt 0 ok +stmt 42 err 1 -1 60 no such table: t2 +==== tkt-80e031a00f.10 +SELECT 1 NOT IN t2 +---- +stmt 0 err 1 -1 19 no such table: t2 +==== tkt-80e031a00f.11 +SELECT null IN t2 +---- +stmt 0 err 1 -1 18 no such table: t2 +==== tkt-80e031a00f.12 +SELECT null NOT IN t2 +---- +stmt 0 err 1 -1 22 no such table: t2 +==== tkt-80e031a00f.13 + + CREATE TABLE t3(z INT UNIQUE); + SELECT 1 IN t3; +---- +stmt 0 ok +stmt 33 err 1 -1 51 no such table: t3 +==== tkt-80e031a00f.14 +SELECT 1 NOT IN t3 +---- +stmt 0 err 1 -1 19 no such table: t3 +==== tkt-80e031a00f.15 +SELECT null IN t3 +---- +stmt 0 err 1 -1 18 no such table: t3 +==== tkt-80e031a00f.16 +SELECT null NOT IN t3 +---- +stmt 0 err 1 -1 22 no such table: t3 +==== tkt-80e031a00f.17 +SELECT 1 IN (SELECT x+y FROM t1, t2) +---- +stmt 0 err 1 -1 37 no such table: t1 +==== tkt-80e031a00f.18 +SELECT 1 NOT IN (SELECT x+y FROM t1,t2) +---- +stmt 0 err 1 -1 40 no such table: t1 +==== tkt-80e031a00f.19 +SELECT null IN (SELECT x+y FROM t1,t2) +---- +stmt 0 err 1 -1 39 no such table: t1 +==== tkt-80e031a00f.20 +SELECT null NOT IN (SELECT x+y FROM t1,t2) +---- +stmt 0 err 1 -1 43 no such table: t1 +==== tkt-80e031a00f.21 +SELECT 1.23 IN () +---- +stmt 0 ok +==== tkt-80e031a00f.22 +SELECT 1.23 NOT IN () +---- +stmt 0 ok +==== tkt-80e031a00f.23 +SELECT 1.23 IN t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== tkt-80e031a00f.24 +SELECT 1.23 NOT IN t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== tkt-80e031a00f.25 +SELECT 'hello' IN () +---- +stmt 0 ok +==== tkt-80e031a00f.26 +SELECT 'hello' NOT IN () +---- +stmt 0 ok +==== tkt-80e031a00f.27 +SELECT 'hello' IN t1 +---- +stmt 0 err 1 -1 21 no such table: t1 +==== tkt-80e031a00f.28 +SELECT 'hello' NOT IN t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== tkt-80e031a00f.29 +SELECT x'303132' IN () +---- +stmt 0 ok +==== tkt-80e031a00f.30 +SELECT x'303132' NOT IN () +---- +stmt 0 ok +==== tkt-80e031a00f.31 +SELECT x'303132' IN t1 +---- +stmt 0 err 1 -1 23 no such table: t1 +==== tkt-80e031a00f.32 +SELECT x'303132' NOT IN t1 +---- +stmt 0 err 1 -1 27 no such table: t1 +==== tkt-80e031a00f.100 +SELECT 1 IN (2,3,4) +---- +stmt 0 ok +==== tkt-80e031a00f.101 +SELECT 1 NOT IN (2,3,4) +---- +stmt 0 ok +==== tkt-80e031a00f.102 +SELECT 'a' IN ('b','c','d') +---- +stmt 0 ok +==== tkt-80e031a00f.103 +SELECT 'a' NOT IN ('b','c','d') +---- +stmt 0 ok +==== tkt-80e031a00f.105 +SELECT 1 NOT IN t4 +---- +stmt 0 err 1 -1 19 no such table: t4 +==== tkt-80e031a00f.106 +SELECT 1 IN t5 +---- +stmt 0 err 1 -1 15 no such table: t5 +==== tkt-80e031a00f.107 +SELECT 1 NOT IN t5 +---- +stmt 0 err 1 -1 19 no such table: t5 +==== tkt-80e031a00f.108 +SELECT 1 IN t6 +---- +stmt 0 err 1 -1 15 no such table: t6 +==== tkt-80e031a00f.109 +SELECT 1 NOT IN t6 +---- +stmt 0 err 1 -1 19 no such table: t6 +==== tkt-80e031a00f.110 +SELECT 'a' IN t7 +---- +stmt 0 err 1 -1 17 no such table: t7 +==== tkt-80e031a00f.111 +SELECT 'a' NOT IN t7 +---- +stmt 0 err 1 -1 21 no such table: t7 +==== tkt-80e031a00f.112 +SELECT 'a' IN t8 +---- +stmt 0 err 1 -1 17 no such table: t8 +==== tkt-80e031a00f.113 +SELECT 'a' NOT IN t8 +---- +stmt 0 err 1 -1 21 no such table: t8 +==== tkt-80e031a00f.300 +SELECT 2 IN (2,3,4,null) +---- +stmt 0 ok +==== tkt-80e031a00f.301 +SELECT 3 NOT IN (2,3,4,null) +---- +stmt 0 ok +==== tkt-80e031a00f.302 +SELECT 4 IN (2,3,4) +---- +stmt 0 ok +==== tkt-80e031a00f.303 +SELECT 2 NOT IN (2,3,4) +---- +stmt 0 ok +==== tkt-80e031a00f.304 +SELECT 'b' IN ('b','c','d') +---- +stmt 0 ok +==== tkt-80e031a00f.305 +SELECT 'c' NOT IN ('b','c','d') +---- +stmt 0 ok +==== tkt-80e031a00f.306 +SELECT 'd' IN ('b','c',null,'d') +---- +stmt 0 ok +==== tkt-80e031a00f.307 +SELECT 'b' NOT IN (null,'b','c','d') +---- +stmt 0 ok +==== tkt-80e031a00f.308 +SELECT 2 IN t4 +---- +stmt 0 err 1 -1 15 no such table: t4 +==== tkt-80e031a00f.309 +SELECT 3 NOT IN t4 +---- +stmt 0 err 1 -1 19 no such table: t4 +==== tkt-80e031a00f.310 +SELECT 4 IN t4n +---- +stmt 0 err 1 -1 16 no such table: t4n +==== tkt-80e031a00f.311 +SELECT 2 NOT IN t4n +---- +stmt 0 err 1 -1 20 no such table: t4n +==== tkt-80e031a00f.312 +SELECT 2 IN t5 +---- +stmt 0 err 1 -1 15 no such table: t5 +==== tkt-80e031a00f.313 +SELECT 3 NOT IN t5 +---- +stmt 0 err 1 -1 19 no such table: t5 +==== tkt-80e031a00f.314 +SELECT 2 IN t6 +---- +stmt 0 err 1 -1 15 no such table: t6 +==== tkt-80e031a00f.315 +SELECT 3 NOT IN t6 +---- +stmt 0 err 1 -1 19 no such table: t6 +==== tkt-80e031a00f.316 +SELECT 4 IN t6n +---- +stmt 0 err 1 -1 16 no such table: t6n +==== tkt-80e031a00f.317 +SELECT 2 NOT IN t6n +---- +stmt 0 err 1 -1 20 no such table: t6n +==== tkt-80e031a00f.318 +SELECT 'b' IN t7 +---- +stmt 0 err 1 -1 17 no such table: t7 +==== tkt-80e031a00f.319 +SELECT 'c' NOT IN t7 +---- +stmt 0 err 1 -1 21 no such table: t7 +==== tkt-80e031a00f.320 +SELECT 'c' IN t7n +---- +stmt 0 err 1 -1 18 no such table: t7n +==== tkt-80e031a00f.321 +SELECT 'd' NOT IN t7n +---- +stmt 0 err 1 -1 22 no such table: t7n +==== tkt-80e031a00f.322 +SELECT 'b' IN t8 +---- +stmt 0 err 1 -1 17 no such table: t8 +==== tkt-80e031a00f.323 +SELECT 'c' NOT IN t8 +---- +stmt 0 err 1 -1 21 no such table: t8 +==== tkt-80e031a00f.324 +SELECT 'c' IN t8n +---- +stmt 0 err 1 -1 18 no such table: t8n +==== tkt-80e031a00f.325 +SELECT 'd' NOT IN t8n +---- +stmt 0 err 1 -1 22 no such table: t8n +==== tkt-80e031a00f.326 +SELECT 'a' IN (NULL,'a') +---- +stmt 0 ok +==== tkt-80e031a00f.327 +SELECT 'a' IN (NULL,'b') +---- +stmt 0 ok +==== tkt-80e031a00f.328 +SELECT 'a' NOT IN (NULL,'a') +---- +stmt 0 ok +==== tkt-80e031a00f.329 +SELECT 'a' NOT IN (NULL,'b') +---- +stmt 0 ok +==== tkt-80e031a00f.400 +SELECT 1 IN (2,3,4,null) +---- +stmt 0 ok +==== tkt-80e031a00f.401 +SELECT 1 NOT IN (2,3,4,null) +---- +stmt 0 ok +==== tkt-80e031a00f.402 +SELECT 'a' IN ('b','c',null,'d') +---- +stmt 0 ok +==== tkt-80e031a00f.403 +SELECT 'a' NOT IN (null,'b','c','d') +---- +stmt 0 ok +==== tkt-80e031a00f.404 +SELECT 1 IN t4n +---- +stmt 0 err 1 -1 16 no such table: t4n +==== tkt-80e031a00f.405 +SELECT 5 NOT IN t4n +---- +stmt 0 err 1 -1 20 no such table: t4n +==== tkt-80e031a00f.406 +SELECT 6 IN t6n +---- +stmt 0 err 1 -1 16 no such table: t6n +==== tkt-80e031a00f.407 +SELECT 7 NOT IN t6n +---- +stmt 0 err 1 -1 20 no such table: t6n +==== tkt-80e031a00f.408 +SELECT 'a' IN t7n +---- +stmt 0 err 1 -1 18 no such table: t7n +==== tkt-80e031a00f.409 +SELECT 'e' NOT IN t7n +---- +stmt 0 err 1 -1 22 no such table: t7n +==== tkt-80e031a00f.410 +SELECT 'f' IN t8n +---- +stmt 0 err 1 -1 18 no such table: t8n +==== tkt-80e031a00f.411 +SELECT 'g' NOT IN t8n +---- +stmt 0 err 1 -1 22 no such table: t8n +==== tkt-80e031a00f.500 +SELECT null IN (2,3,4,null) +---- +stmt 0 ok +==== tkt-80e031a00f.501 +SELECT null NOT IN (2,3,4,null) +---- +stmt 0 ok +==== tkt-80e031a00f.502 +SELECT null IN (2,3,4) +---- +stmt 0 ok +==== tkt-80e031a00f.503 +SELECT null NOT IN (2,3,4) +---- +stmt 0 ok +==== tkt-80e031a00f.504 +SELECT null IN ('b','c','d') +---- +stmt 0 ok +==== tkt-80e031a00f.505 +SELECT null NOT IN ('b','c','d') +---- +stmt 0 ok +==== tkt-80e031a00f.506 +SELECT null IN ('b','c',null,'d') +---- +stmt 0 ok +==== tkt-80e031a00f.507 +SELECT null NOT IN (null,'b','c','d') +---- +stmt 0 ok +==== tkt-80e031a00f.508 +SELECT null IN t4 +---- +stmt 0 err 1 -1 18 no such table: t4 +==== tkt-80e031a00f.509 +SELECT null NOT IN t4 +---- +stmt 0 err 1 -1 22 no such table: t4 +==== tkt-80e031a00f.510 +SELECT null IN t4n +---- +stmt 0 err 1 -1 19 no such table: t4n +==== tkt-80e031a00f.511 +SELECT null NOT IN t4n +---- +stmt 0 err 1 -1 23 no such table: t4n +==== tkt-80e031a00f.512 +SELECT null IN t5 +---- +stmt 0 err 1 -1 18 no such table: t5 +==== tkt-80e031a00f.513 +SELECT null NOT IN t5 +---- +stmt 0 err 1 -1 22 no such table: t5 +==== tkt-80e031a00f.514 +SELECT null IN t6 +---- +stmt 0 err 1 -1 18 no such table: t6 +==== tkt-80e031a00f.515 +SELECT null NOT IN t6 +---- +stmt 0 err 1 -1 22 no such table: t6 +==== tkt-80e031a00f.516 +SELECT null IN t6n +---- +stmt 0 err 1 -1 19 no such table: t6n +==== tkt-80e031a00f.517 +SELECT null NOT IN t6n +---- +stmt 0 err 1 -1 23 no such table: t6n +==== tkt-80e031a00f.518 +SELECT null IN t7 +---- +stmt 0 err 1 -1 18 no such table: t7 +==== tkt-80e031a00f.519 +SELECT null NOT IN t7 +---- +stmt 0 err 1 -1 22 no such table: t7 +==== tkt-80e031a00f.520 +SELECT null IN t7n +---- +stmt 0 err 1 -1 19 no such table: t7n +==== tkt-80e031a00f.521 +SELECT null NOT IN t7n +---- +stmt 0 err 1 -1 23 no such table: t7n +==== tkt-80e031a00f.522 +SELECT null IN t8 +---- +stmt 0 err 1 -1 18 no such table: t8 +==== tkt-80e031a00f.523 +SELECT null NOT IN t8 +---- +stmt 0 err 1 -1 22 no such table: t8 +==== tkt-80e031a00f.524 +SELECT null IN t8n +---- +stmt 0 err 1 -1 19 no such table: t8n +==== tkt-80e031a00f.525 +SELECT null NOT IN t8n +---- +stmt 0 err 1 -1 23 no such table: t8n diff --git a/parser/testdata/tkt-868145d012.metadata.json b/parser/testdata/tkt-868145d012.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-868145d012.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-868145d012.test b/parser/testdata/tkt-868145d012.test new file mode 100644 index 0000000..30461d2 --- /dev/null +++ b/parser/testdata/tkt-868145d012.test @@ -0,0 +1,58 @@ +==== tkt-868145d012.100 + + CREATE TABLE p ( + id INTEGER PRIMARY KEY, + uid VARCHAR(36), + t INTEGER + ); + + CREATE TABLE pa ( + id INTEGER PRIMARY KEY, + a_uid VARCHAR(36) + ); + + CREATE TABLE a ( + id INTEGER PRIMARY KEY, + uid VARCHAR(36), + t INTEGER + ); + + INSERT INTO pa VALUES(1,'1234'); + INSERT INTO pa VALUES(2,'2345'); + INSERT INTO p VALUES(3,'1234',97); + INSERT INTO p VALUES(4,'1234',98); + INSERT INTO a VALUES(5,'1234',98); + INSERT INTO a VALUES(6,'1234',99); +---- +stmt 0 ok +stmt 87 ok +stmt 165 ok +stmt 255 err 1 -1 293 no such table: pa +stmt 293 err 1 -1 328 no such table: pa +stmt 328 err 1 -1 365 no such table: p +stmt 365 err 1 -1 402 no such table: p +stmt 402 err 1 -1 439 no such table: a +stmt 439 err 1 -1 476 no such table: a +==== tkt-868145d012.110 + + SELECT DISTINCT pa.id, p.id, a.id + FROM + pa + LEFT JOIN p ON p.uid='1234' + LEFT JOIN a ON a.uid=pa.a_uid + WHERE + a.t=p.t + ; +---- +stmt 0 err 1 -1 140 no such table: pa +==== tkt-868145d012.120 + + SELECT DISTINCT pa.id, p.id, a.id + FROM + pa + LEFT JOIN p ON p.uid='1234' + LEFT JOIN a ON a.uid=pa.a_uid AND a.t=p.t + ORDER BY 1, 2, 3 + ; +---- +stmt 0 err 1 -1 151 no such table: pa diff --git a/parser/testdata/tkt-8c63ff0ec.metadata.json b/parser/testdata/tkt-8c63ff0ec.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-8c63ff0ec.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-8c63ff0ec.test b/parser/testdata/tkt-8c63ff0ec.test new file mode 100644 index 0000000..8ef283f --- /dev/null +++ b/parser/testdata/tkt-8c63ff0ec.test @@ -0,0 +1,37 @@ +==== 1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, d, e); + INSERT INTO t1 VALUES(1,20,30,40,50),(3,60,70,80,90); + CREATE TABLE t2(x INTEGER PRIMARY KEY); + INSERT INTO t2 VALUES(2); + CREATE TABLE t3(z); + INSERT INTO t3 VALUES(2),(2),(2),(2); + + SELECT a, b+c FROM t1 + UNION ALL + SELECT x, 5 FROM t2 JOIN t3 ON z=x WHERE x=2 + ORDER BY a; +---- +stmt 0 ok +stmt 54 err 1 -1 110 no such table: t1 +stmt 110 ok +stmt 152 err 1 -1 180 no such table: t2 +stmt 180 ok +stmt 202 err 1 -1 242 no such table: t3 +stmt 242 err 1 -1 342 no such table: t2 +==== 1.2 + + SELECT a, b+c+d FROM t1 + UNION ALL + SELECT x, 5 FROM t2 JOIN t3 ON z=x WHERE x=2 + ORDER BY a; +---- +stmt 0 err 1 -1 99 no such table: t2 +==== 1.3 + + SELECT a, b+c+d+e FROM t1 + UNION ALL + SELECT x, 5 FROM t2 JOIN t3 ON z=x WHERE x=2 + ORDER BY a; +---- +stmt 0 err 1 -1 101 no such table: t2 diff --git a/parser/testdata/tkt-91e2e8ba6f.metadata.json b/parser/testdata/tkt-91e2e8ba6f.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-91e2e8ba6f.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-91e2e8ba6f.test b/parser/testdata/tkt-91e2e8ba6f.test new file mode 100644 index 0000000..828dde6 --- /dev/null +++ b/parser/testdata/tkt-91e2e8ba6f.test @@ -0,0 +1,41 @@ +==== 1.1 + + CREATE TABLE t1(x INTEGER, y REAL); + INSERT INTO t1 VALUES(11, 11); +---- +stmt 0 ok +stmt 38 err 1 -1 71 no such table: t1 +==== 1.2 + + SELECT x/10, y/10 FROM t1; +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 1.3 + + SELECT x/10, y/10 FROM (SELECT * FROM t1); +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 1.4 + + SELECT x/10, y/10 FROM (SELECT * FROM t1 LIMIT 5 OFFSET 0); +---- +stmt 0 err 1 -1 62 no such table: t1 +==== 1.5 + + SELECT x/10, y/10 FROM (SELECT * FROM t1 LIMIT 5 OFFSET 0) LIMIT 5 OFFSET 0; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== 1.6 + + SELECT a.x/10, a.y/10 FROM + (SELECT * FROM t1 LIMIT 5 OFFSET 0) AS a, t1 AS b WHERE a.x = b.x + LIMIT 5 OFFSET 0; +---- +stmt 0 err 1 -1 120 no such table: t1 +==== 1.7 + + CREATE VIEW v1 AS SELECT * FROM t1 LIMIT 5; + SELECT a.x/10, a.y/10 FROM v1 AS a, t1 AS b WHERE a.x = b.x LIMIT 5 OFFSET 0; +---- +stmt 0 ok +stmt 46 err 1 -1 126 no such table: v1 diff --git a/parser/testdata/tkt-99378177930f87bd.metadata.json b/parser/testdata/tkt-99378177930f87bd.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-99378177930f87bd.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-99378177930f87bd.test b/parser/testdata/tkt-99378177930f87bd.test new file mode 100644 index 0000000..035ea93 --- /dev/null +++ b/parser/testdata/tkt-99378177930f87bd.test @@ -0,0 +1,210 @@ +==== tkt-99378-100 + + CREATE TABLE t1(a INT, b TEXT, c INT, d INT); + INSERT INTO t1(a,b,c,d) VALUES + (1, '{"x":1}', 12, 3), + (1, '{"x":2}', 4, 5), + (1, '{"x":1}', 6, 11), + (2, '{"x":1}', 22, 3), + (2, '{"x":2}', 4, 5), + (3, '{"x":1}', 6, 7); + CREATE INDEX t1x ON t1(d, a, b->>'x', c); + CREATE TABLE t2(y); + INSERT INTO t2(y) VALUES(9); +---- +stmt 0 ok +stmt 48 err 1 -1 249 no such table: t1 +stmt 249 err 1 -1 293 no such table: main.t1 +stmt 293 ok +stmt 315 err 1 -1 346 no such table: t2 +==== tkt-99378-110 + + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1 + WHERE d BETWEEN 0 and 10 + GROUP BY a; +---- +stmt 0 err 1 -1 274 no such table: t1 +==== tkt-99378-111 + + SELECT if(a,a,y), + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t2 CROSS JOIN t1 + WHERE d BETWEEN 0 and 10 + GROUP BY a; +---- +stmt 0 err 1 -1 296 no such table: t2 +==== tkt-99378-120 + + EXPLAIN + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1 + WHERE d BETWEEN 0 and 10 + GROUP BY a; +---- +stmt 0 err 1 -1 284 no such table: t1 +==== tkt-99378-121 + + EXPLAIN + SELECT if(a,a,y), + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t2 CROSS JOIN t1 + WHERE d BETWEEN 0 and 10 + GROUP BY a; +---- +stmt 0 err 1 -1 306 no such table: t2 +==== tkt-99378-130 + + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1 + WHERE d BETWEEN 0 and 10 + GROUP BY +a; +---- +stmt 0 err 1 -1 275 no such table: t1 +==== tkt-99378-140 + + EXPLAIN + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1 + WHERE d BETWEEN 0 and 10 + GROUP BY +a; +---- +stmt 0 err 1 -1 285 no such table: t1 +==== tkt-99378-200 + + DROP INDEX t1x; + CREATE INDEX t1x ON t1(a, d, b->>'x', c); +---- +stmt 0 err 1 -1 18 no such index: t1x +stmt 18 err 1 -1 62 no such table: main.t1 +==== tkt-99378-210 + + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1 + WHERE d BETWEEN 0 and 10 + GROUP BY a; +---- +stmt 0 err 1 -1 274 no such table: t1 +==== tkt-99378-220 + + EXPLAIN + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1 + WHERE d BETWEEN 0 and 10 + GROUP BY a; +---- +stmt 0 err 1 -1 284 no such table: t1 +==== tkt-99378-230 + + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1 + WHERE d BETWEEN 0 and 10 + GROUP BY a; +---- +stmt 0 err 1 -1 274 no such table: t1 +==== tkt-99378-240 + + EXPLAIN + SELECT a, + SUM(1) AS t1, + SUM(CASE WHEN b->>'x'=1 THEN 1 END) AS t2, + SUM(c) AS t3, + SUM(CASE WHEN b->>'x'=1 THEN c END) AS t4 + FROM t1 + WHERE d BETWEEN 0 and 10 + GROUP BY a; +---- +stmt 0 err 1 -1 284 no such table: t1 +==== tkt-99378-300 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INT); + CREATE INDEX i1 ON t1(a,a=a); + INSERT INTO t1 VALUES(1),(2),(3),(4); + SELECT * FROM t1 NATURAL JOIN t1 + WHERE a==1 + OR ( + (SELECT avg( + (SELECT sum((SELECT 1 FROM t1 NATURAL RIGHT JOIN t1 WHERE a=a)))) AS xyz + ) + AND a==2 + ); +---- +stmt 0 ok +stmt 27 ok +stmt 53 err 1 -1 85 no such table: main.t1 +stmt 85 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 344 no such table: t1 +==== tkt-99378-310 + + DROP INDEX i1; + SELECT * FROM t1 NATURAL JOIN t1 + WHERE a==1 + OR ( + (SELECT avg( + (SELECT sum((SELECT 1 FROM t1 NATURAL RIGHT JOIN t1 WHERE a=a)))) AS xyz + ) + AND a==2 + ); +---- +stmt 0 err 1 -1 17 no such index: i1 +stmt 17 err 1 -1 236 no such table: t1 +==== tkt-99378-400 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t0(w); + INSERT INTO t0(w) VALUES(1); + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES(1); + CREATE INDEX t1x ON t1(x > 0); + CREATE VIEW t2(y) AS SELECT avg(w) FROM t0 GROUP BY w>1; + CREATE VIEW t3(z) AS SELECT count(*) FROM t2 WHERE y BETWEEN 0 and 0; + SELECT count(*) FROM t1 NOT INDEXED WHERE (SELECT z FROM t3); + SELECT count(*) FROM t1 INDEXED BY t1x WHERE (SELECT z FROM t3); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 ok +stmt 56 err 1 -1 87 no such table: t0 +stmt 87 ok +stmt 109 err 1 -1 140 no such table: t1 +stmt 140 err 1 -1 173 no such table: main.t1 +stmt 173 ok +stmt 232 ok +stmt 304 err 1 -1 368 no such table: t1 +stmt 368 err 1 -1 435 no such table: t1 diff --git a/parser/testdata/tkt-9a8b09f8e6.metadata.json b/parser/testdata/tkt-9a8b09f8e6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-9a8b09f8e6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-9a8b09f8e6.test b/parser/testdata/tkt-9a8b09f8e6.test new file mode 100644 index 0000000..619ca79 --- /dev/null +++ b/parser/testdata/tkt-9a8b09f8e6.test @@ -0,0 +1,261 @@ +==== 1.1 + + CREATE TABLE t1(x TEXT); + INSERT INTO t1 VALUES('1'); +---- +stmt 0 ok +stmt 29 err 1 -1 61 no such table: t1 +==== 1.2 + + CREATE TABLE t2(x INTEGER); + INSERT INTO t2 VALUES(1); +---- +stmt 0 ok +stmt 32 err 1 -1 62 no such table: t2 +==== 1.3 + + CREATE TABLE t3(x REAL); + INSERT INTO t3 VALUES(1.0); +---- +stmt 0 ok +stmt 29 err 1 -1 61 no such table: t3 +==== 1.4 + + CREATE TABLE t4(x REAL); + INSERT INTO t4 VALUES(1.11); +---- +stmt 0 ok +stmt 29 err 1 -1 62 no such table: t4 +==== 1.5 + + CREATE TABLE t5(x, y); + INSERT INTO t5 VALUES('1', 'one'); + INSERT INTO t5 VALUES(1, 'two'); + INSERT INTO t5 VALUES('1.0', 'three'); + INSERT INTO t5 VALUES(1.0, 'four'); +---- +stmt 0 ok +stmt 27 err 1 -1 66 no such table: t5 +stmt 66 err 1 -1 103 no such table: t5 +stmt 103 err 1 -1 146 no such table: t5 +stmt 146 err 1 -1 186 no such table: t5 +==== 2.1 + + SELECT x FROM t1 WHERE x IN (1); +---- +stmt 0 err 1 -1 37 no such table: t1 +==== 2.2 + + SELECT x FROM t1 WHERE x IN (1.0); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 2.3 + + SELECT x FROM t1 WHERE x IN ('1'); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 2.4 + + SELECT x FROM t1 WHERE x IN ('1.0'); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 2.5 + + SELECT x FROM t1 WHERE 1 IN (x); +---- +stmt 0 err 1 -1 37 no such table: t1 +==== 2.6 + + SELECT x FROM t1 WHERE 1.0 IN (x); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 2.7 + + SELECT x FROM t1 WHERE '1' IN (x); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 2.8 + + SELECT x FROM t1 WHERE '1.0' IN (x); +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 3.1 + + SELECT x FROM t2 WHERE x IN (1); +---- +stmt 0 err 1 -1 37 no such table: t2 +==== 3.2 + + SELECT x FROM t2 WHERE x IN (1.0); +---- +stmt 0 err 1 -1 39 no such table: t2 +==== 3.3 + + SELECT x FROM t2 WHERE x IN ('1'); +---- +stmt 0 err 1 -1 39 no such table: t2 +==== 3.4 + + SELECT x FROM t2 WHERE x IN ('1.0'); +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 3.5 + + SELECT x FROM t2 WHERE 1 IN (x); +---- +stmt 0 err 1 -1 37 no such table: t2 +==== 3.6 + + SELECT x FROM t2 WHERE 1.0 IN (x); +---- +stmt 0 err 1 -1 39 no such table: t2 +==== 3.7 + + SELECT x FROM t2 WHERE '1' IN (x); +---- +stmt 0 err 1 -1 39 no such table: t2 +==== 3.8 + + SELECT x FROM t2 WHERE '1.0' IN (x); +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 4.1 + + SELECT x FROM t3 WHERE x IN (1); +---- +stmt 0 err 1 -1 37 no such table: t3 +==== 4.2 + + SELECT x FROM t3 WHERE x IN (1.0); +---- +stmt 0 err 1 -1 39 no such table: t3 +==== 4.3 + + SELECT x FROM t3 WHERE x IN ('1'); +---- +stmt 0 err 1 -1 39 no such table: t3 +==== 4.4 + + SELECT x FROM t3 WHERE x IN ('1.0'); +---- +stmt 0 err 1 -1 41 no such table: t3 +==== 4.5 + + SELECT x FROM t3 WHERE 1 IN (x); +---- +stmt 0 err 1 -1 37 no such table: t3 +==== 4.6 + + SELECT x FROM t3 WHERE 1.0 IN (x); +---- +stmt 0 err 1 -1 39 no such table: t3 +==== 4.7 + + SELECT x FROM t3 WHERE '1' IN (x); +---- +stmt 0 err 1 -1 39 no such table: t3 +==== 4.8 + + SELECT x FROM t3 WHERE '1.0' IN (x); +---- +stmt 0 err 1 -1 41 no such table: t3 +==== 5.1 + + SELECT x FROM t4 WHERE x IN (1); +---- +stmt 0 err 1 -1 37 no such table: t4 +==== 5.2 + + SELECT x FROM t4 WHERE x IN (1.0); +---- +stmt 0 err 1 -1 39 no such table: t4 +==== 5.3 + + SELECT x FROM t4 WHERE x IN ('1'); +---- +stmt 0 err 1 -1 39 no such table: t4 +==== 5.4 + + SELECT x FROM t4 WHERE x IN ('1.0'); +---- +stmt 0 err 1 -1 41 no such table: t4 +==== 5.5 + + SELECT x FROM t4 WHERE x IN (1.11); +---- +stmt 0 err 1 -1 40 no such table: t4 +==== 5.6 + + SELECT x FROM t4 WHERE x IN ('1.11'); +---- +stmt 0 err 1 -1 42 no such table: t4 +==== 5.7 + + SELECT x FROM t4 WHERE 1 IN (x); +---- +stmt 0 err 1 -1 37 no such table: t4 +==== 5.8 + + SELECT x FROM t4 WHERE 1.0 IN (x); +---- +stmt 0 err 1 -1 39 no such table: t4 +==== 5.9 + + SELECT x FROM t4 WHERE '1' IN (x); +---- +stmt 0 err 1 -1 39 no such table: t4 +==== 5.10 + + SELECT x FROM t4 WHERE '1.0' IN (x); +---- +stmt 0 err 1 -1 41 no such table: t4 +==== 5.11 + + SELECT x FROM t4 WHERE 1.11 IN (x); +---- +stmt 0 err 1 -1 40 no such table: t4 +==== 5.12 + + SELECT x FROM t4 WHERE '1.11' IN (x); +---- +stmt 0 err 1 -1 42 no such table: t4 +==== 6.1 + + SELECT x, y FROM t5 WHERE x IN (1); +---- +stmt 0 err 1 -1 40 no such table: t5 +==== 6.2 + + SELECT x, y FROM t5 WHERE x IN (1.0); +---- +stmt 0 err 1 -1 42 no such table: t5 +==== 6.3 + + SELECT x, y FROM t5 WHERE x IN ('1'); +---- +stmt 0 err 1 -1 42 no such table: t5 +==== 6.4 + + SELECT x, y FROM t5 WHERE x IN ('1.0'); +---- +stmt 0 err 1 -1 44 no such table: t5 +==== 6.5 + + SELECT x, y FROM t5 WHERE 1 IN (x); +---- +stmt 0 err 1 -1 40 no such table: t5 +==== 6.6 + + SELECT x, y FROM t5 WHERE 1.0 IN (x); +---- +stmt 0 err 1 -1 42 no such table: t5 +==== 6.7 + + SELECT x, y FROM t5 WHERE '1' IN (x); +---- +stmt 0 err 1 -1 42 no such table: t5 +==== 6.8 + + SELECT x, y FROM t5 WHERE '1.0' IN (x); +---- +stmt 0 err 1 -1 44 no such table: t5 diff --git a/parser/testdata/tkt-9d68c883.metadata.json b/parser/testdata/tkt-9d68c883.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-9d68c883.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-9d68c883.test b/parser/testdata/tkt-9d68c883.test new file mode 100644 index 0000000..eb3cda1 --- /dev/null +++ b/parser/testdata/tkt-9d68c883.test @@ -0,0 +1,19 @@ +==== tkt-9d68c88-1.1 + + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = 2; + CREATE TABLE t3(x); + CREATE TABLE t4(x); + CREATE TABLE t5(x); + INSERT INTO t5 VALUES(randomblob(1500)); + CREATE TABLE t7(x); + CREATE TABLE t8(x); +---- +stmt 0 ok +stmt 29 ok +stmt 57 ok +stmt 81 ok +stmt 105 ok +stmt 129 err 1 -1 174 no such table: t5 +stmt 174 ok +stmt 198 ok diff --git a/parser/testdata/tkt-9f2eb3abac.metadata.json b/parser/testdata/tkt-9f2eb3abac.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-9f2eb3abac.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-9f2eb3abac.test b/parser/testdata/tkt-9f2eb3abac.test new file mode 100644 index 0000000..161e270 --- /dev/null +++ b/parser/testdata/tkt-9f2eb3abac.test @@ -0,0 +1,62 @@ +==== 1.1 + + CREATE TABLE t1(a,b,c,d,e, PRIMARY KEY(a,b,c,d,e)); + SELECT * FROM t1 WHERE a=? AND b=? AND c=? AND d=? AND e=?; +---- +stmt 0 ok +stmt 54 err 1 -1 116 no such table: t1 +==== 1.2 + + CREATE TABLE "a" ( + "b" integer NOT NULL, + "c" integer NOT NULL, + PRIMARY KEY ("b", "c") + ); + + CREATE TABLE "d" ( + "e" integer NOT NULL, + "g" integer NOT NULL, + "f" integer NOT NULL, + "h" integer NOT NULL, + "i" character(10) NOT NULL, + "j" int, + PRIMARY KEY ("e", "g", "f", "h") + ); + + CREATE TABLE "d_to_a" ( + "f_e" integer NOT NULL, + "f_g" integer NOT NULL, + "f_f" integer NOT NULL, + "f_h" integer NOT NULL, + "t_b" integer NOT NULL, + "t_c" integer NOT NULL, + "r" character NOT NULL, + "s" integer, + PRIMARY KEY ("f_e", "f_g", "f_f", "f_h", "t_b", "t_c") + ); + + INSERT INTO d (g, e, h, f, j, i) VALUES ( 1, 1, 1, 1, 1, 1 ); + INSERT INTO a (b, c) VALUES ( 1, 1 ); + INSERT INTO d_to_a VALUES (1, 1, 1, 1, 1, 1, 1, 1); + + DELETE FROM d_to_a + WHERE f_g = 1 AND f_e = 1 AND f_h = 1 AND f_f = 1 AND t_b = 1 AND t_c = 1; + + SELECT * FROM d_to_a; +---- +stmt 0 ok +stmt 115 ok +stmt 346 ok +stmt 672 err 1 -1 737 no such table: d +stmt 737 err 1 -1 777 no such table: a +stmt 777 err 1 -1 831 no such table: d_to_a +stmt 831 err 1 -1 931 no such table: d_to_a +stmt 931 err 1 -1 956 no such table: d_to_a +==== 2.0 + CREATE TABLE t1(a,b,c,d,e, PRIMARY KEY(a,b,c,d,e)) +---- +stmt 0 ok +==== 2.1 + CREATE TABLE t2(x) +---- +stmt 0 ok diff --git a/parser/testdata/tkt-a7debbe0.metadata.json b/parser/testdata/tkt-a7debbe0.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-a7debbe0.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-a7debbe0.test b/parser/testdata/tkt-a7debbe0.test new file mode 100644 index 0000000..887af25 --- /dev/null +++ b/parser/testdata/tkt-a7debbe0.test @@ -0,0 +1,114 @@ +==== tkt-a7debbe0-generated + + CREATE TABLE t0(xyz INTEGER); + INSERT INTO t0(xyz) VALUES(456); + CREATE VIEW v2(a, B) AS + SELECT 'a', 'B' COLLATE NOCASE FROM t0; + CREATE TABLE t2(a, B COLLATE NOCASE); + INSERT INTO t2 VALUES('a', 'B'); + CREATE VIEW v3(a, B) AS + SELECT 'a' COLLATE BINARY, 'B' COLLATE NOCASE FROM t0; + + CREATE VIEW v4(a, B) AS + SELECT 'a', +CAST('B' COLLATE NOCASE AS TEXT) FROM t0; + + CREATE VIEW v5(a, B) AS + SELECT 'a', ('B' COLLATE NOCASE) || '' FROM t0; +---- +stmt 0 ok +stmt 34 err 1 -1 71 no such table: t0 +stmt 71 ok +stmt 148 ok +stmt 190 err 1 -1 227 no such table: t2 +stmt 227 ok +stmt 318 ok +stmt 410 ok +==== tkt-a7debbe0-generated.dup1 + SELECT a >= B FROM t2; +---- +stmt 0 err 1 -1 25 no such table: t2 +==== tkt-a7debbe0-generated.dup2 + SELECT 'a' >= 'B' COLLATE NOCASE +---- +stmt 0 ok +==== tkt-a7debbe0-generated.dup3 + SELECT a >= B FROM v2 +---- +stmt 0 err 1 -1 25 no such table: v2 +==== tkt-a7debbe0-generated.dup4 + SELECT a >= B FROM v3 +---- +stmt 0 err 1 -1 25 no such table: v3 +==== tkt-a7debbe0-generated.dup5 + SELECT a >= B FROM v4 +---- +stmt 0 err 1 -1 25 no such table: v4 +==== tkt-a7debbe0-generated.dup6 + SELECT a >= B FROM v5 +---- +stmt 0 err 1 -1 25 no such table: v5 +==== tkt-a7debbe0-generated.dup7 + SELECT B < a FROM t2 +---- +stmt 0 err 1 -1 24 no such table: t2 +==== tkt-a7debbe0-generated.dup8 + SELECT 'B' COLLATE NOCASE < 'a' +---- +stmt 0 ok +==== tkt-a7debbe0-generated.dup9 + SELECT B < a FROM v2 +---- +stmt 0 err 1 -1 24 no such table: v2 +==== tkt-a7debbe0-generated.dup10 + SELECT B < a FROM v3 +---- +stmt 0 err 1 -1 24 no such table: v3 +==== tkt-a7debbe0-generated.dup11 + SELECT a < B FROM v4 +---- +stmt 0 err 1 -1 23 no such table: v4 +==== tkt-a7debbe0-generated.dup12 + SELECT a < B FROM v5 +---- +stmt 0 err 1 -1 23 no such table: v5 +==== tkt-a7debbe0-generated.dup13 + + CREATE TABLE t5(a, b COLLATE NOCASE); + INSERT INTO t5 VALUES(1, 'XYZ'); +---- +stmt 0 ok +stmt 42 err 1 -1 79 no such table: t5 +==== tkt-a7debbe0-generated.dup14 + + SELECT xyz==b FROM ( SELECT a, 'xyz' AS xyz FROM t5 ), t5; +---- +stmt 0 err 1 -1 63 no such table: t5 +==== tkt-a7debbe0-generated.dup15 + + SELECT 'xyz'==b FROM ( SELECT a, 'xyz' AS xyz FROM t5 ), t5; +---- +stmt 0 err 1 -1 65 no such table: t5 +==== tkt-a7debbe0-generated.dup16 + + DROP TABLE t0; + DROP VIEW v2; + + CREATE TABLE t0(c0); + INSERT INTO t0(c0) VALUES(''); + CREATE VIEW v2(c0, c1) AS + SELECT 'B' COLLATE NOCASE, 'a' FROM t0 ORDER BY t0.c0; + SELECT SUM(count) FROM ( + SELECT v2.c1 BETWEEN v2.c0 AND v2.c1 as count FROM v2 + ); +---- +stmt 0 err 1 -1 19 no such table: t0 +stmt 19 err 1 -1 37 no such view: v2 +stmt 37 ok +stmt 63 err 1 -1 98 no such table: t0 +stmt 98 ok +stmt 192 err 1 -1 288 no such table: v2 +==== tkt-a7debbe0-generated.dup17 + + SELECT v2.c1 BETWEEN v2.c0 AND v2.c1 as count FROM v2; +---- +stmt 0 err 1 -1 59 no such table: v2 diff --git a/parser/testdata/tkt-a8a0d2996a.metadata.json b/parser/testdata/tkt-a8a0d2996a.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-a8a0d2996a.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-a8a0d2996a.test b/parser/testdata/tkt-a8a0d2996a.test new file mode 100644 index 0000000..1f22ed1 --- /dev/null +++ b/parser/testdata/tkt-a8a0d2996a.test @@ -0,0 +1,118 @@ +==== 1.0 + + CREATE TABLE t(x,y); + INSERT INTO t VALUES('1','1'); + SELECT typeof(x), typeof(y) FROM t WHERE 1=x+0 AND y=='1'; +---- +stmt 0 ok +stmt 23 err 1 -1 56 no such table: t +stmt 56 err 1 -1 117 no such table: t +==== 1.1 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x-0 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 1.2 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x*1 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 1.3 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x/1 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 1.4 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x%4 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 2.0 + + UPDATE t SET x='1xyzzy'; + SELECT typeof(x), typeof(y) FROM t WHERE 1=x+0 AND y=='1'; +---- +stmt 0 err 1 -1 27 no such table: t +stmt 27 err 1 -1 88 no such table: t +==== 2.1 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x-0 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 2.2 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x*1 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 2.3 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x/1 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 2.4 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x%4 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 3.0 + + UPDATE t SET x='1.0'; + SELECT typeof(x), typeof(y) FROM t WHERE 1=x+0 AND y=='1'; +---- +stmt 0 err 1 -1 24 no such table: t +stmt 24 err 1 -1 85 no such table: t +==== 3.1 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x-0 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 3.2 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x*1 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 3.3 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x/1 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 3.4 + + SELECT typeof(x), typeof(y) FROM t WHERE 1=x%4 AND y=='1'; +---- +stmt 0 err 1 -1 61 no such table: t +==== 4.0 + + SELECT 1+1.; +---- +stmt 0 ok +==== 4.1 + + SELECT '1.23e64'/'1.0000e+62'; +---- +stmt 0 ok +==== 4.2 + + SELECT '100x'+'-2y'; +---- +stmt 0 ok +==== 4.3 + + SELECT '100x'+'4.5y'; +---- +stmt 0 ok +==== 4.4 + + SELECT '-9223372036854775807x'-'1x'; +---- +stmt 0 ok +==== 4.5 + + SELECT '9223372036854775806x'+'1x'; +---- +stmt 0 ok +==== 4.6 + + SELECT '1234x'/'10y', '1234x'/'10.y', '1234x'/'1e1y'; +---- +stmt 0 ok diff --git a/parser/testdata/tkt-b1d3a2e531.metadata.json b/parser/testdata/tkt-b1d3a2e531.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-b1d3a2e531.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-b1d3a2e531.test b/parser/testdata/tkt-b1d3a2e531.test new file mode 100644 index 0000000..3267236 --- /dev/null +++ b/parser/testdata/tkt-b1d3a2e531.test @@ -0,0 +1,138 @@ +==== 1.0 + PRAGMA foreign_keys = ON +---- +stmt 0 ok +==== 1.1 + + CREATE TABLE pp(x PRIMARY KEY); + CREATE TABLE cc(y REFERENCES pp DEFERRABLE INITIALLY DEFERRED); + INSERT INTO pp VALUES('abc'); + INSERT INTO cc VALUES('abc'); +---- +stmt 0 ok +stmt 34 ok +stmt 100 err 1 -1 132 no such table: pp +stmt 132 err 1 -1 164 no such table: cc +==== 1.2 + + BEGIN; + DROP TABLE pp; + DROP TABLE cc; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 28 no such table: pp +stmt 28 err 1 -1 47 no such table: cc +stmt 47 ok +==== 1.3 + + CREATE TABLE pp(x PRIMARY KEY); + CREATE TABLE cc(y REFERENCES pp DEFERRABLE INITIALLY DEFERRED); + INSERT INTO pp VALUES('abc'); + INSERT INTO cc VALUES('abc'); +---- +stmt 0 ok +stmt 34 ok +stmt 100 err 1 -1 132 no such table: pp +stmt 132 err 1 -1 164 no such table: cc +==== 1.4 + + BEGIN; + DROP TABLE cc; + DROP TABLE pp; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 28 no such table: cc +stmt 28 err 1 -1 47 no such table: pp +stmt 47 ok +==== 2.1 + + CREATE TABLE pp(x PRIMARY KEY); + CREATE TABLE cc( + y INTEGER PRIMARY KEY REFERENCES pp DEFERRABLE INITIALLY DEFERRED + ); + INSERT INTO pp VALUES(5); + INSERT INTO cc VALUES(5); +---- +stmt 0 ok +stmt 34 ok +stmt 128 err 1 -1 156 no such table: pp +stmt 156 err 1 -1 184 no such table: cc +==== 2.2 + + BEGIN; + DROP TABLE pp; + DROP TABLE cc; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 28 no such table: pp +stmt 28 err 1 -1 47 no such table: cc +stmt 47 ok +==== 2.3 + + CREATE TABLE pp(x PRIMARY KEY); + CREATE TABLE cc( + y INTEGER PRIMARY KEY REFERENCES pp DEFERRABLE INITIALLY DEFERRED + ); + INSERT INTO pp VALUES(5); + INSERT INTO cc VALUES(5); +---- +stmt 0 ok +stmt 34 ok +stmt 128 err 1 -1 156 no such table: pp +stmt 156 err 1 -1 184 no such table: cc +==== 2.4 + + BEGIN; + DROP TABLE cc; + DROP TABLE pp; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 28 no such table: cc +stmt 28 err 1 -1 47 no such table: pp +stmt 47 ok +==== 3.1 + + CREATE TABLE pp1(x PRIMARY KEY); + CREATE TABLE cc1(y REFERENCES pp1 DEFERRABLE INITIALLY DEFERRED); + + CREATE TABLE pp2(x PRIMARY KEY); + CREATE TABLE cc2(y REFERENCES pp1 DEFERRABLE INITIALLY DEFERRED); + + INSERT INTO pp1 VALUES(2200); + INSERT INTO cc1 VALUES(NULL); + + INSERT INTO pp2 VALUES(2200); + INSERT INTO cc2 VALUES(2200); +---- +stmt 0 ok +stmt 35 ok +stmt 103 ok +stmt 139 ok +stmt 207 err 1 -1 240 no such table: pp1 +stmt 240 err 1 -1 272 no such table: cc1 +stmt 272 err 1 -1 305 no such table: pp2 +stmt 305 err 1 -1 337 no such table: cc2 +==== 3.2 + + BEGIN; + DELETE FROM pp2; + DROP TABLE pp1; + DROP TABLE cc1; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 30 no such table: pp2 +stmt 30 err 1 -1 50 no such table: pp1 +stmt 50 err 1 -1 70 no such table: cc1 +stmt 70 ok +==== 3.3 + + DROP TABLE cc2; + COMMIT; +---- +stmt 0 err 1 -1 20 no such table: cc2 +stmt 20 ok diff --git a/parser/testdata/tkt-b351d95f9.metadata.json b/parser/testdata/tkt-b351d95f9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-b351d95f9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-b351d95f9.test b/parser/testdata/tkt-b351d95f9.test new file mode 100644 index 0000000..dcd6531 --- /dev/null +++ b/parser/testdata/tkt-b351d95f9.test @@ -0,0 +1,33 @@ +==== tkt-b351d95.1 + + CREATE table t1(a,b); + INSERT INTO t1 VALUES('name1','This is a test'); + INSERT INTO t1 VALUES('name2','xyz'); + CREATE TABLE t2(x,y); + INSERT INTO t2 SELECT a, CASE b WHEN 'xyz' THEN null ELSE b END FROM t1; + SELECT x, y FROM t2 ORDER BY x; +---- +stmt 0 ok +stmt 26 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 121 no such table: t1 +stmt 121 ok +stmt 147 err 1 -1 224 no such table: t2 +stmt 224 err 1 -1 260 no such table: t2 +==== tkt-b351d95.2 + + DELETE FROM t2; + INSERT INTO t2 SELECT a, coalesce(b,a) FROM t1; + SELECT x, y FROM t2 ORDER BY x; +---- +stmt 0 err 1 -1 20 no such table: t2 +stmt 20 err 1 -1 72 no such table: t2 +stmt 72 err 1 -1 108 no such table: t2 +==== tkt-b351d95.3 + + DELETE FROM t2; + INSERT INTO t2 SELECT a, coalesce(b,a) FROM t1; + SELECT x, y BETWEEN 'xy' AND 'xz' FROM t2 ORDER BY x; +---- +stmt 0 err 1 -1 20 no such table: t2 +stmt 20 err 1 -1 72 no such table: t2 +stmt 72 err 1 -1 130 no such table: t2 diff --git a/parser/testdata/tkt-b75a9ca6b0.metadata.json b/parser/testdata/tkt-b75a9ca6b0.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-b75a9ca6b0.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-b75a9ca6b0.test b/parser/testdata/tkt-b75a9ca6b0.test new file mode 100644 index 0000000..8557241 --- /dev/null +++ b/parser/testdata/tkt-b75a9ca6b0.test @@ -0,0 +1,16 @@ +==== 1 + + CREATE TABLE t1 (x, y); + INSERT INTO t1 VALUES (1, 3); + INSERT INTO t1 VALUES (2, 2); + INSERT INTO t1 VALUES (3, 1); +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 123 no such table: t1 +==== 1.1 + + CREATE INDEX i1 ON t1(x, y); +---- +stmt 0 err 1 -1 31 no such table: main.t1 diff --git a/parser/testdata/tkt-ba7cbfaedc.metadata.json b/parser/testdata/tkt-ba7cbfaedc.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-ba7cbfaedc.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-ba7cbfaedc.test b/parser/testdata/tkt-ba7cbfaedc.test new file mode 100644 index 0000000..ea9db87 --- /dev/null +++ b/parser/testdata/tkt-ba7cbfaedc.test @@ -0,0 +1,39 @@ +==== 1 + + CREATE TABLE t1 (x, y); + INSERT INTO t1 VALUES (3, 'a'); + INSERT INTO t1 VALUES (1, 'a'); + INSERT INTO t1 VALUES (2, 'b'); + INSERT INTO t1 VALUES (2, 'a'); + INSERT INTO t1 VALUES (3, 'b'); + INSERT INTO t1 VALUES (1, 'b'); +---- +stmt 0 ok +stmt 26 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 129 no such table: t1 +stmt 129 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 197 no such table: t1 +stmt 197 err 1 -1 231 no such table: t1 +==== 1.1 + + CREATE INDEX i1 ON t1(x, y); +---- +stmt 0 err 1 -1 31 no such table: main.t1 +==== 2.0 + + drop table if exists t1; + create table t1(id int); + insert into t1(id) values(1),(2),(3),(4),(5); + create index t1_idx_id on t1(id asc); + select * from t1 group by id order by id; + select * from t1 group by id order by id asc; + select * from t1 group by id order by id desc; +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 102 no such table: t1 +stmt 102 err 1 -1 142 no such table: main.t1 +stmt 142 err 1 -1 186 no such table: t1 +stmt 186 err 1 -1 234 no such table: t1 +stmt 234 err 1 -1 283 no such table: t1 diff --git a/parser/testdata/tkt-bd484a090c.metadata.json b/parser/testdata/tkt-bd484a090c.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-bd484a090c.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-bd484a090c.test b/parser/testdata/tkt-bd484a090c.test new file mode 100644 index 0000000..55e50b6 --- /dev/null +++ b/parser/testdata/tkt-bd484a090c.test @@ -0,0 +1,8 @@ +==== 2.1 + SELECT datetime('now', 'localtime') +---- +stmt 0 ok +==== 2.2 + SELECT datetime('2000-01-01', 'utc') +---- +stmt 0 ok diff --git a/parser/testdata/tkt-bdc6bbbb38.metadata.json b/parser/testdata/tkt-bdc6bbbb38.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-bdc6bbbb38.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-bdc6bbbb38.test b/parser/testdata/tkt-bdc6bbbb38.test new file mode 100644 index 0000000..0689e9e --- /dev/null +++ b/parser/testdata/tkt-bdc6bbbb38.test @@ -0,0 +1,37 @@ +==== tkt-bdc6bbbb38-generated + INSERT INTO t2 VALUES('a b c') +---- +stmt 0 err 1 -1 32 no such table: t2 +==== tkt-bdc6bbbb38-generated.dup1 + + SELECT offsets(t2) FROM t2 WHERE t2 MATCH 'a AND d OR b' ORDER BY docid ASC +---- +stmt 0 err 1 -1 81 no such table: t2 +==== tkt-bdc6bbbb38-generated.dup2 + INSERT INTO t2 VALUES('a c d') +---- +stmt 0 err 1 -1 32 no such table: t2 +==== tkt-bdc6bbbb38-generated.dup3 + + SELECT offsets(t2) FROM t2 WHERE t2 MATCH 'a AND d OR b' ORDER BY docid ASC +---- +stmt 0 err 1 -1 81 no such table: t2 +==== tkt-bdc6bbbb38-generated.dup4 + INSERT INTO t3 VALUES('a c d') +---- +stmt 0 err 1 -1 32 no such table: t3 +==== tkt-bdc6bbbb38-generated.dup5 + + SELECT offsets(t3) FROM t3 WHERE t3 MATCH 'a AND d OR b' ORDER BY docid DESC +---- +stmt 0 err 1 -1 82 no such table: t3 +==== tkt-bdc6bbbb38-generated.dup6 + + INSERT INTO t3 VALUES('a b c'); +---- +stmt 0 err 1 -1 37 no such table: t3 +==== tkt-bdc6bbbb38-generated.dup7 + + SELECT offsets(t3) FROM t3 WHERE t3 MATCH 'a AND d OR b' ORDER BY docid DESC +---- +stmt 0 err 1 -1 82 no such table: t3 diff --git a/parser/testdata/tkt-c48d99d690.metadata.json b/parser/testdata/tkt-c48d99d690.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-c48d99d690.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-c48d99d690.test b/parser/testdata/tkt-c48d99d690.test new file mode 100644 index 0000000..8a9f2da --- /dev/null +++ b/parser/testdata/tkt-c48d99d690.test @@ -0,0 +1,21 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + INSERT INTO t1 VALUES('one' , 1); + INSERT INTO t1 VALUES('two' , 5); + INSERT INTO t1 VALUES('two' , 2); + INSERT INTO t1 VALUES('three', 3); + PRAGMA count_changes = 1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 93 no such table: t1 +stmt 93 err 1 -1 132 no such table: t1 +stmt 132 err 1 -1 171 no such table: t1 +stmt 171 err 1 -1 210 no such table: t1 +stmt 210 ok +==== 1.1 + INSERT INTO t2 SELECT * FROM t1 +---- +stmt 0 err 1 -1 33 no such table: t2 diff --git a/parser/testdata/tkt-cbd054fa6b.metadata.json b/parser/testdata/tkt-cbd054fa6b.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-cbd054fa6b.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-cbd054fa6b.test b/parser/testdata/tkt-cbd054fa6b.test new file mode 100644 index 0000000..ccea851 --- /dev/null +++ b/parser/testdata/tkt-cbd054fa6b.test @@ -0,0 +1,16 @@ +==== tkt-cbd05-1.3 + + SELECT tbl,idx,string_agg(s(sample),' ') + FROM vvv + WHERE idx = 't1_x' + GROUP BY tbl,idx +---- +stmt 0 err 1 -1 107 no such table: vvv +==== tkt-cbd05-2.3 + + SELECT tbl,idx,group_concat(s(sample),' ') + FROM vvv + WHERE idx = 't1_x' + GROUP BY tbl,idx +---- +stmt 0 err 1 -1 109 no such table: vvv diff --git a/parser/testdata/tkt-d11f09d36e.metadata.json b/parser/testdata/tkt-d11f09d36e.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-d11f09d36e.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-d11f09d36e.test b/parser/testdata/tkt-d11f09d36e.test new file mode 100644 index 0000000..4836e22 --- /dev/null +++ b/parser/testdata/tkt-d11f09d36e.test @@ -0,0 +1,28 @@ +==== tkt-d11f09d36e.2 + + BEGIN; + UPDATE t1 set x = x+10000; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 44 no such table: t1 +stmt 44 ok +==== tkt-d11f09d36e.3 + PRAGMA integrity_check +---- +stmt 0 ok +==== tkt-d11f09d36e.4 + + SAVEPOINT tr; + UPDATE t1 set x = x+10000; + ROLLBACK TO tr; + RELEASE tr; +---- +stmt 0 ok +stmt 18 err 1 -1 51 no such table: t1 +stmt 51 ok +stmt 71 ok +==== tkt-d11f09d36e.5 + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/tkt-d635236375.metadata.json b/parser/testdata/tkt-d635236375.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-d635236375.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-d635236375.test b/parser/testdata/tkt-d635236375.test new file mode 100644 index 0000000..79b9aeb --- /dev/null +++ b/parser/testdata/tkt-d635236375.test @@ -0,0 +1,20 @@ +==== 1.0 + + CREATE TABLE t1(id1 INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(9999); + CREATE TABLE t2(id2 INTEGER PRIMARY KEY); + INSERT INTO t2 VALUES(12345); + INSERT INTO t2 VALUES(54321); + SELECT DISTINCT id1 AS x, id1 AS y FROM t1, t2; +---- +stmt 0 ok +stmt 46 err 1 -1 79 no such table: t1 +stmt 79 ok +stmt 125 err 1 -1 159 no such table: t2 +stmt 159 err 1 -1 193 no such table: t2 +stmt 193 err 1 -1 245 no such table: t1 +==== 1.1 + + SELECT count(*) FROM t1, t2 GROUP BY id1, id1; +---- +stmt 0 err 1 -1 51 no such table: t1 diff --git a/parser/testdata/tkt-f3e5abed55.metadata.json b/parser/testdata/tkt-f3e5abed55.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-f3e5abed55.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-f3e5abed55.test b/parser/testdata/tkt-f3e5abed55.test new file mode 100644 index 0000000..3cd40c8 --- /dev/null +++ b/parser/testdata/tkt-f3e5abed55.test @@ -0,0 +1,20 @@ +==== tkt-f3e5abed55-1.1 + + ATTACH 'test.db2' AS aux; + CREATE TABLE main.t1(a, b); + CREATE TABLE aux.t2(c, d); +---- +stmt 0 ok +stmt 30 ok +stmt 62 err 1 80 87 unknown database aux +==== tkt-f3e5abed55-2.1 + + ATTACH 'test.db2' AS aux; + BEGIN; + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t2 VALUES(3, 4); +---- +stmt 0 ok +stmt 32 ok +stmt 45 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 119 no such table: t2 diff --git a/parser/testdata/tkt-f67b41381a.metadata.json b/parser/testdata/tkt-f67b41381a.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-f67b41381a.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-f67b41381a.test b/parser/testdata/tkt-f67b41381a.test new file mode 100644 index 0000000..fb45c03 --- /dev/null +++ b/parser/testdata/tkt-f67b41381a.test @@ -0,0 +1,15 @@ +==== 1.0 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + ALTER TABLE t1 ADD COLUMN b DEFAULT 2; + CREATE TABLE t2(a, b); + INSERT INTO t2 SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 22 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 88 no such table: t1 +stmt 91 ok +stmt 116 err 1 -1 151 no such table: t2 +stmt 151 err 1 -1 171 no such table: t2 diff --git a/parser/testdata/tkt-f777251dc7a.metadata.json b/parser/testdata/tkt-f777251dc7a.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-f777251dc7a.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-f777251dc7a.test b/parser/testdata/tkt-f777251dc7a.test new file mode 100644 index 0000000..3ca1328 --- /dev/null +++ b/parser/testdata/tkt-f777251dc7a.test @@ -0,0 +1,74 @@ +==== tkt-f7772-1.1 + + CREATE TEMP TABLE t1(x UNIQUE); + INSERT INTO t1 VALUES(1); + CREATE TABLE t2(x, y); + INSERT INTO t2 VALUES(1, 2); + CREATE TEMP TABLE t3(w, z); +---- +stmt 0 ok +stmt 37 err 1 -1 68 no such table: t1 +stmt 68 ok +stmt 96 err 1 -1 130 no such table: t2 +stmt 130 ok +==== tkt-f7772-1.2 + + BEGIN IMMEDIATE; + CREATE TABLE xyzzy(abc); + SELECT x, force_rollback(), EXISTS(SELECT 1 FROM t3 WHERE w=x) FROM t2; +---- +stmt 0 ok +stmt 21 ok +stmt 50 err 1 -1 126 no such table: t2 +==== tkt-f7772-2.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + DROP TABLE IF EXISTS t3; + + CREATE TEMP TABLE t1(x UNIQUE); + INSERT INTO t1 VALUES(1); + CREATE TABLE t2(x, y); + INSERT INTO t2 VALUES(1, 2); +---- +stmt 0 ok +stmt 30 ok +stmt 60 ok +stmt 90 ok +stmt 128 err 1 -1 159 no such table: t1 +stmt 159 ok +stmt 187 err 1 -1 221 no such table: t2 +==== tkt-f7772-3.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + DROP TABLE IF EXISTS t3; + + CREATE TEMP TABLE t1(x); + CREATE TABLE t2(x); + CREATE TABLE t3(x); + + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(2); +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 87 ok +stmt 117 ok +stmt 141 ok +stmt 165 err 1 -1 198 no such table: t1 +stmt 198 err 1 -1 228 no such table: t1 +stmt 228 err 1 -1 258 no such table: t2 +stmt 258 err 1 -1 288 no such table: t2 +==== tkt-f7772-3.2 + + SELECT ins() AS x FROM t2 UNION ALL SELECT ins() AS x FROM t1 +---- +stmt 0 err 1 -1 67 no such table: t1 +==== tkt-f7772-3.3 + SELECT * FROM t3 +---- +stmt 0 err 1 -1 18 no such table: t3 diff --git a/parser/testdata/tkt-f973c7ac31.metadata.json b/parser/testdata/tkt-f973c7ac31.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-f973c7ac31.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-f973c7ac31.test b/parser/testdata/tkt-f973c7ac31.test new file mode 100644 index 0000000..3f1455d --- /dev/null +++ b/parser/testdata/tkt-f973c7ac31.test @@ -0,0 +1,59 @@ +==== tkt-f973c7ac3-1.0 + + CREATE TABLE t(c1 INTEGER, c2 INTEGER); + INSERT INTO t VALUES(5, 5); + INSERT INTO t VALUES(5, 4); +---- +stmt 0 ok +stmt 44 err 1 -1 76 no such table: t +stmt 76 err 1 -1 108 no such table: t +==== tkt-f973c7ac31-generated + + SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<='2' ORDER BY c2 DESC +---- +stmt 0 err 1 -1 75 no such table: t +==== tkt-f973c7ac31-generated.dup1 + + SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<=5 ORDER BY c2 DESC +---- +stmt 0 err 1 -1 73 no such table: t +==== tkt-f973c7ac31-generated.dup2 + + SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<='5' ORDER BY c2 DESC +---- +stmt 0 err 1 -1 75 no such table: t +==== tkt-f973c7ac31-generated.dup3 + + SELECT * FROM t WHERE c1 = 5 AND c2>'0' AND c2<=5 ORDER BY c2 DESC +---- +stmt 0 err 1 -1 75 no such table: t +==== tkt-f973c7ac31-generated.dup4 + + SELECT * FROM t WHERE c1 = 5 AND c2>'0' AND c2<='5' ORDER BY c2 DESC +---- +stmt 0 err 1 -1 77 no such table: t +==== tkt-f973c7ac31-generated.dup5 + + SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<='2' ORDER BY c2 ASC +---- +stmt 0 err 1 -1 74 no such table: t +==== tkt-f973c7ac31-generated.dup6 + + SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<=5 ORDER BY c2 ASC +---- +stmt 0 err 1 -1 72 no such table: t +==== tkt-f973c7ac31-generated.dup7 + + SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<='5' ORDER BY c2 ASC +---- +stmt 0 err 1 -1 74 no such table: t +==== tkt-f973c7ac31-generated.dup8 + + SELECT * FROM t WHERE c1 = 5 AND c2>'0' AND c2<=5 ORDER BY c2 ASC +---- +stmt 0 err 1 -1 74 no such table: t +==== tkt-f973c7ac31-generated.dup9 + + SELECT * FROM t WHERE c1 = 5 AND c2>'0' AND c2<='5' ORDER BY c2 ASC +---- +stmt 0 err 1 -1 76 no such table: t diff --git a/parser/testdata/tkt-fa7bf5ec.metadata.json b/parser/testdata/tkt-fa7bf5ec.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-fa7bf5ec.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-fa7bf5ec.test b/parser/testdata/tkt-fa7bf5ec.test new file mode 100644 index 0000000..9830c48 --- /dev/null +++ b/parser/testdata/tkt-fa7bf5ec.test @@ -0,0 +1,15 @@ +==== tkt-fa7bf5ec-1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES ('a'); + INSERT INTO t1 VALUES ('A'); + INSERT INTO t1 VALUES ('A'); + SELECT count(CASE WHEN x='a' THEN 1 END), + count(CASE WHEN x='A' THEN 1 END) + FROM t1; +---- +stmt 0 ok +stmt 24 err 1 -1 57 no such table: t1 +stmt 57 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 229 no such table: t1 diff --git a/parser/testdata/tkt-fc62af4523.metadata.json b/parser/testdata/tkt-fc62af4523.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt-fc62af4523.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt-fc62af4523.test b/parser/testdata/tkt-fc62af4523.test new file mode 100644 index 0000000..85a3cea --- /dev/null +++ b/parser/testdata/tkt-fc62af4523.test @@ -0,0 +1,11 @@ +==== tkt-fc62af4523.3 + PRAGMA journal_mode = DELETE +---- +stmt 0 ok +==== tkt-fc62af4523.6 + + PRAGMA integrity_check; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 28 err 1 -1 57 no such table: t1 diff --git a/parser/testdata/tkt1435.metadata.json b/parser/testdata/tkt1435.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1435.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1435.test b/parser/testdata/tkt1435.test new file mode 100644 index 0000000..5ee0af8 --- /dev/null +++ b/parser/testdata/tkt1435.test @@ -0,0 +1,33 @@ +==== tkt1435-1.1 + + select row, pinned from tlList, Instances, Versions, Flavors + where + Instances.troveName = tlList.name + and Versions.version = tlList.version + and Instances.versionId = Versions.versionId + and ( Flavors.flavor = tlList.flavor or Flavors.flavor is NULL + and tlList.flavor = '') + and Instances.flavorId = Flavors.flavorId + order by row asc; +---- +stmt 0 err 1 -1 407 no such table: tlList +==== tkt1435-1.2 + + CREATE INDEX InstancesNameIdx ON Instances(troveName); + CREATE UNIQUE INDEX InstancesIdx + ON Instances(troveName, versionId, flavorId); + ANALYZE; + select row, pinned from tlList, Instances, Versions, Flavors + where + Instances.troveName = tlList.name + and Versions.version = tlList.version + and Instances.versionId = Versions.versionId + and ( Flavors.flavor = tlList.flavor or Flavors.flavor is NULL + and tlList.flavor = '') + and Instances.flavorId = Flavors.flavorId + order by row asc; +---- +stmt 0 err 1 -1 59 no such table: main.Instances +stmt 59 err 1 -1 149 no such table: main.Instances +stmt 149 ok +stmt 162 err 1 -1 569 no such table: tlList diff --git a/parser/testdata/tkt1443.metadata.json b/parser/testdata/tkt1443.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1443.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1443.test b/parser/testdata/tkt1443.test new file mode 100644 index 0000000..7d9f1df --- /dev/null +++ b/parser/testdata/tkt1443.test @@ -0,0 +1,55 @@ +==== tkt1443-1.1 + + select distinct + Items.Item as trove, UP.pattern as pattern + from + ( select + Permissions.labelId as labelId, + PerItems.item as pattern + from + Users, UserGroupMembers, Permissions + left outer join Items as PerItems + on Permissions.itemId = PerItems.itemId + where + Users.user = 'limited' + and Users.userId = UserGroupMembers.userId + and UserGroupMembers.userGroupId = Permissions.userGroupId + ) as UP join LabelMap on ( UP.labelId = 0 or + UP.labelId = LabelMap.labelId ), + Labels, Items + where + Labels.label = 'localhost@rpl:branch' + and Labels.labelId = LabelMap.labelId + and LabelMap.itemId = Items.itemId + ORDER BY +trove, +pattern +---- +stmt 0 err 1 -1 824 no such table: Users +==== tkt1443-1.2 + + CREATE UNIQUE INDEX PermissionsIdx + ON Permissions(userGroupId, labelId, itemId); + select distinct + Items.Item as trove, UP.pattern as pattern + from + ( select + Permissions.labelId as labelId, + PerItems.item as pattern + from + Users, UserGroupMembers, Permissions + left outer join Items as PerItems + on Permissions.itemId = PerItems.itemId + where + Users.user = 'limited' + and Users.userId = UserGroupMembers.userId + and UserGroupMembers.userGroupId = Permissions.userGroupId + ) as UP join LabelMap on ( UP.labelId = 0 or + UP.labelId = LabelMap.labelId ), + Labels, Items + where + Labels.label = 'localhost@rpl:branch' + and Labels.labelId = LabelMap.labelId + and LabelMap.itemId = Items.itemId + ORDER BY +trove, +pattern +---- +stmt 0 err 1 -1 94 no such table: main.Permissions +stmt 94 err 1 -1 918 no such table: Users diff --git a/parser/testdata/tkt1444.metadata.json b/parser/testdata/tkt1444.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1444.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1444.test b/parser/testdata/tkt1444.test new file mode 100644 index 0000000..7f64ebf --- /dev/null +++ b/parser/testdata/tkt1444.test @@ -0,0 +1,34 @@ +==== tkt1444-1.1 + + CREATE TABLE DemoTable (x INTEGER, TextKey TEXT, DKey Real); + CREATE INDEX DemoTableIdx ON DemoTable (TextKey); + INSERT INTO DemoTable VALUES(9,8,7); + INSERT INTO DemoTable VALUES(1,2,3); + CREATE VIEW DemoView AS SELECT * FROM DemoTable ORDER BY TextKey; + SELECT * FROM DemoTable UNION ALL SELECT * FROM DemoView ORDER BY 1; +---- +stmt 0 ok +stmt 65 err 1 -1 119 no such table: main.DemoTable +stmt 119 err 1 -1 160 no such table: DemoTable +stmt 160 err 1 -1 201 no such table: DemoTable +stmt 201 ok +stmt 271 err 1 -1 344 no such table: DemoView +==== tkt1444-1.2 + + SELECT * FROM DemoTable UNION ALL SELECT * FROM DemoView; +---- +stmt 0 err 1 -1 62 no such table: DemoView +==== tkt1444-1.3 + + DROP VIEW DemoView; + CREATE VIEW DemoView AS SELECT * FROM DemoTable; + SELECT * FROM DemoTable UNION ALL SELECT * FROM DemoView ORDER BY 1; +---- +stmt 0 err 1 -1 24 no such view: DemoView +stmt 24 ok +stmt 77 err 1 -1 150 no such table: DemoView +==== tkt1444-1.4 + + SELECT * FROM DemoTable UNION ALL SELECT * FROM DemoView; +---- +stmt 0 err 1 -1 62 no such table: DemoView diff --git a/parser/testdata/tkt1449.metadata.json b/parser/testdata/tkt1449.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1449.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1449.test b/parser/testdata/tkt1449.test new file mode 100644 index 0000000..69be787 --- /dev/null +++ b/parser/testdata/tkt1449.test @@ -0,0 +1,302 @@ +==== tkt1449-1.1 + + BEGIN; + CREATE TABLE ACLS(ISSUEID text(50) not null, OBJECTID text(50) not null, PARTICIPANTID text(50) not null, PERMISSIONBITS int not null, constraint PK_ACLS primary key (ISSUEID, OBJECTID, PARTICIPANTID)); + CREATE TABLE ACTIONITEMSTATUSES(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, FRIENDLYNAME text(100) not null, REVISION int not null, SHORTNAME text(30) not null, LONGNAME text(200) not null, ATTACHMENTHANDLING int not null, RESULT int not null, NOTIFYCREATOR text(1) null, NOTIFYASSIGNEE text(1) null, NOTIFYFYI text(1) null, NOTIFYCLOSURETEAM text(1) null, NOTIFYCOORDINATORS text(1) null, COMMENTREQUIRED text(1) not null, constraint PK_ACTIONITEMSTATUSES primary key (ISSUEID, OBJECTID)); + CREATE TABLE ACTIONITEMTYPES(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, REVISION int not null, LABEL text(200) not null, INSTRUCTIONS text not null, EMAILINSTRUCTIONS text null, ALLOWEDSTATUSES text not null, INITIALSTATUS text(100) not null, COMMENTREQUIRED text(1) not null, ATTACHMENTHANDLING int not null, constraint PK_ACTIONITEMTYPES primary key (ISSUEID, OBJECTID)); + CREATE TABLE ATTACHMENTS(TQUNID text(36) not null, OBJECTID text(50) null, ISSUEID text(50) null, DATASTREAM blob not null, CONTENTENCODING text(50) null, CONTENTCHARSET text(50) null, CONTENTTYPE text(100) null, CONTENTID text(100) null, CONTENTLOCATION text(100) null, CONTENTNAME text(100) not null, constraint PK_ATTACHMENTS primary key (TQUNID)); + CREATE TABLE COMPLIANCEPOLICIES(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, BODY text null, constraint PK_COMPLIANCEPOLICIES primary key (ISSUEID, OBJECTID)); + CREATE TABLE DBHISTORY(DATETIME text(25) not null, OPERATION text(20) not null, KUBIVERSION text(100) not null, FROMVERSION int null, TOVERSION int null); + CREATE TABLE DBINFO(FINGERPRINT text(32) not null, VERSION int not null); + CREATE TABLE DETACHEDATTACHMENTS (TQUNID text(36) not null, ISSUEID text(50) not null, OBJECTID text(50) not null, PATH text(300) not null, DETACHEDFILELASTMODTIMESTAMP text(25) null, CONTENTID text(100) not null, constraint PK_DETACHEDATTACHMENTS primary key (TQUNID)); + CREATE TABLE DOCREFERENCES(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, REFERENCEDOCUMENTID text(50) null, constraint PK_DOCREFERENCES primary key (ISSUEID, OBJECTID)); + CREATE TABLE DQ (TQUNID text(36) not null, ISSUEID text(50) not null, DEPENDSID text(50) null, DEPENDSTYPE int null, DEPENDSCOMMANDSTREAM blob null, DEPENDSNODEIDSEQNOKEY text(100) null, DEPENDSACLVERSION int null, constraint PK_DQ primary key (TQUNID)); + CREATE TABLE EMAILQ(TIMEQUEUED int not null, NODEID text(50) not null, MIME blob not null, TQUNID text(36) not null); + CREATE TABLE ENTERPRISEDATA(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, DATE1 text(25) null, DATE2 text(25) null, DATE3 text(25) null, DATE4 text(25) null, DATE5 text(25) null, DATE6 text(25) null, DATE7 text(25) null, DATE8 text(25) null, DATE9 text(25) null, DATE10 text(25) null, VALUE1 int null, VALUE2 int null, VALUE3 int null, VALUE4 int null, VALUE5 int null, VALUE6 int null, VALUE7 int null, VALUE8 int null, VALUE9 int null, VALUE10 int null, VALUE11 int null, VALUE12 int null, VALUE13 int null, VALUE14 int null, VALUE15 int null, VALUE16 int null, VALUE17 int null, VALUE18 int null, VALUE19 int null, VALUE20 int null, STRING1 text(300) null, STRING2 text(300) null, STRING3 text(300) null, STRING4 text(300) null, STRING5 text(300) null, STRING6 text(300) null, STRING7 text(300) null, STRING8 text(300) null, STRING9 text(300) null, STRING10 text(300) null, LONGSTRING1 text null, LONGSTRING2 text null, LONGSTRING3 text null, LONGSTRING4 text null, LONGSTRING5 text null, LONGSTRING6 text null, LONGSTRING7 text null, LONGSTRING8 text null, LONGSTRING9 text null, LONGSTRING10 text null, constraint PK_ENTERPRISEDATA primary key (ISSUEID, OBJECTID)); + CREATE TABLE FILEMORGUE(TQUNID text(36) not null, PATH text(300) not null, DELETEFOLDERWHENEMPTY text(1) null, constraint PK_FILEMORGUE primary key (TQUNID)); + CREATE TABLE FILES(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, PARENTENTITYID text(50) null, BODY text null, BODYCONTENTTYPE text(100) null, ISOBSOLETE text(1) null, FILENAME text(300) not null, VISIBLENAME text(300) not null, VERSIONSTRING text(300) not null, DOCUMENTHASH text(40) not null, ISFINAL text(1) null, DOCREFERENCEID text(50) not null, constraint PK_FILES primary key (ISSUEID, OBJECTID)); + CREATE TABLE FOLDERS(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, CONTAINERNAME text(300) null, CONTAINERACLSETTINGS text null, constraint PK_FOLDERS primary key (ISSUEID, OBJECTID)); + CREATE TABLE GLOBALSETTINGS(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, SINGULARPROJECTLABEL text(30) not null, PLURALPROJECTLABEL text(30) not null, PROJECTREQUIRED text(1) not null, CUSTOMPROJECTSALLOWED text(1) not null, ACTIONITEMSPECXML text null, PROJECTLISTXML text null, ENTERPRISEDATALABELS text null, ENTERPRISEDATATABXSL text null, constraint PK_GLOBALSETTINGS primary key (ISSUEID, OBJECTID)); + CREATE TABLE GLOBALSTRINGPROPERTIES(ID int not null, VALUE text(300) not null, constraint PK_GLOBALSTRINGPROPERTIES primary key (ID)); + CREATE TABLE IMQ(TQUNID text(36) not null, DATETIMEQUEUED text(25) not null, ISSUEID text(50) not null, KUBIBUILD text(30) not null, FAILCOUNT int not null, LASTRUN text(25) null, ENVELOPESTREAM blob not null, PAYLOADSTREAM blob not null, constraint PK_IMQ primary key (TQUNID)); + CREATE TABLE INVITATIONNODES(INVITATIONID text(50) not null, RECIPIENTNODEID text(50) not null, DATECREATED text(25) not null, constraint PK_INVITATIONNODES primary key (INVITATIONID, RECIPIENTNODEID)); + CREATE TABLE INVITATIONS (INVITATIONID text(50) not null, SENDERNODEID text(50) not null, RECIPIENTEMAILADDR text(200) not null, RECIPIENTUSERID text(50) null, RECIPIENTNODES text null, ISSUEID text(50) not null, ENVELOPE text not null, MESSAGEBLOB blob not null, INVITATIONSTATE int not null, TQUNID text(36) not null, DATECREATED text(25) not null); + CREATE TABLE ISSUES (CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, CONTAINERNAME text(300) null, CONTAINERACLSETTINGS text null, ISINITIALIZED text(1) null, BLINDINVITES text null, ISSYSTEMISSUE text(1) not null, ISSUETYPE int not null, ACTIVITYTYPEID text(50) null, ISINCOMPLETE text(1) not null, constraint PK_ISSUES primary key (ISSUEID, OBJECTID)); + CREATE TABLE ISSUESETTINGS (CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, ISSUENAME text(300) not null, ISSUEACLSETTINGS text not null, ISSUEDUEDATE text(25) null, ISSUEPRIORITY int null, ISSUESTATUS int null, DESCRIPTION text null, PROJECTID text(100) null, PROJECTNAME text null, PROJECTNAMEISCUSTOM text(1) null, ISSYSTEMISSUE text(1) not null, ACTIONITEMREVNUM int not null, constraint PK_ISSUESETTINGS primary key (ISSUEID, OBJECTID)); + CREATE TABLE KMTPMSG (MSGID integer not null, SENDERID text(50) null, RECIPIENTIDLIST text not null, ISSUEID text(50) null, MESSAGETYPE int not null, ENVELOPE text null, MESSAGEBLOB blob not null, RECEIVEDDATE text(25) not null, constraint PK_KMTPMSG primary key (MSGID)); + CREATE TABLE KMTPNODEQ(NODEID text(50) not null, MSGID int not null, RECEIVEDDATE text(25) not null, SENDCOUNT int not null); + CREATE TABLE KMTPQ(MSGID integer not null, SENDERID text(50) null, RECIPIENTIDLIST text not null, ISSUEID text(50) null, MESSAGETYPE int not null, ENVELOPE text null, MESSAGEBLOB blob not null, constraint PK_KMTPQ primary key (MSGID)); + CREATE TABLE LOGENTRIES(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, PARENTENTITYID text(50) null, BODY text null, BODYCONTENTTYPE text(100) null, ISOBSOLETE text(1) null, ACTIONTYPE int not null, ASSOCIATEDOBJECTIDS text null, OLDENTITIES text null, NEWENTITIES text null, OTHERENTITIES text null, constraint PK_LOGENTRIES primary key (ISSUEID, OBJECTID)); + CREATE TABLE LSBI(TQUNID text(36) not null, ISSUEID text(50) not null, TABLEITEMID text(50) null, TABLENODEID text(50) null, TABLECMD int null, TABLECONTAINERID text(50) null, TABLESEQNO int null, DIRTYCONTENT text null, STUBBED text(1) null, ENTITYSTUBDATA text null, UPDATENUMBER int not null, constraint PK_LSBI primary key (TQUNID)); + CREATE TABLE LSBN(TQUNID text(36) not null, ISSUEID text(50) not null, NODEID text(50) not null, STORESEQNO int not null, SYNCSEQNO int not null, LASTMSGDATE text(25) null, constraint PK_LSBN primary key (TQUNID)); + CREATE TABLE MMQ(TQUNID text(36) not null, ISSUEID text(50) not null, TABLEREQUESTNODE text(50) null, MMQENTRYINDEX text(60) null, DIRECTION int null, NODEID text(50) null, TABLEFIRSTSEQNO int null, TABLELASTSEQNO int null, NEXTRESENDTIMEOUT text(25) null, TABLETIMEOUTMULTIPLIER int null, constraint PK_MMQ primary key (TQUNID)); + CREATE TABLE NODEREG(NODEID text(50) not null, USERID text(50) null, CREATETIME text(25) not null, TQUNID text(36) not null); + CREATE TABLE NODES (NODEID text(50) not null, USERID text(50) null, NODESTATE int not null, NODECERT text null, KUBIVERSION int not null, KUBIBUILD text(30) not null, TQUNID text(36) not null, LASTBINDDATE text(25) null, LASTUNBINDDATE text(25) null, LASTBINDIP text(15) null, NUMBINDS int not null, NUMSENDS int not null, NUMPOLLS int not null, NUMRECVS int not null); + CREATE TABLE PARTICIPANTNODES(ISSUEID text(50) not null, OBJECTID text(50) not null, NODEID text(50) not null, USERID text(50) null, NODESTATE int not null, NODECERT text null, KUBIVERSION int not null, KUBIBUILD text(30) not null, TQUNID text(36) not null); + CREATE TABLE PARTICIPANTS(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, PARTICIPANTSTATE int not null, PARTICIPANTROLE int not null, PARTICIPANTTEAM int not null, ISREQUIREDMEMBER text(1) null, USERID text(50) null, ISAGENT text(1) null, NAME text(150) not null, EMAILADDRESS text(200) not null, ISEMAILONLY text(1) not null, INVITATION text null, ACCEPTRESENDCOUNT int null, ACCEPTRESENDTIMEOUT text(25) null, ACCEPTLASTSENTTONODEID text(50) null, constraint PK_PARTICIPANTS primary key (ISSUEID, OBJECTID)); + CREATE TABLE PARTICIPANTSETTINGS(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, PARTICIPANTID text(50) not null, TASKPIMSYNC text(1) null, MOBILESUPPORT text(1) null, NOTIFYBYEMAIL text(1) null, MARKEDCRITICAL text(1) null, constraint PK_PARTICIPANTSETTINGS primary key (ISSUEID, OBJECTID)); + CREATE TABLE PARTITIONS(PARTITIONID text(50) not null, NAME text(100) not null, LDAPDN text(300) not null, SERVERNODEID text(50) not null, TQUNID text(36) not null); + CREATE TABLE PROJECTS(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, NAME text(100) not null, ID text(100) null, constraint PK_PROJECTS primary key (ISSUEID, OBJECTID)); + CREATE TABLE TASKCOMPLETIONS(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, PARENTENTITYID text(50) null, BODY text null, BODYCONTENTTYPE text(100) null, ISOBSOLETE text(1) null, TASKID text(50) not null, DISPOSITION int not null, STATUSID text(50) not null, SHORTNAME text(30) not null, LONGNAME text(200) not null, constraint PK_TASKCOMPLETIONS primary key (ISSUEID, OBJECTID)); + CREATE TABLE TASKS(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, PARENTENTITYID text(50) null, BODY text null, BODYCONTENTTYPE text(100) null, ISOBSOLETE text(1) null, DUETIME text(25) null, ASSIGNEDTO text(50) not null, TARGETOBJECTIDS text null, RESPONSEID text(50) not null, TYPEID text(50) not null, LABEL text(200) not null, INSTRUCTIONS text not null, ALLOWEDSTATUSES text not null, ISSERIALREVIEW text(1) null, DAYSTOREVIEW int null, REVIEWERIDS text(500) null, REVIEWTYPE int null, REVIEWGROUP text(300) null, constraint PK_TASKS primary key (ISSUEID, OBJECTID)); + CREATE TABLE USERS (USERID text(50) not null, USERSID text(100) not null, ENTERPRISEUSER text(1) not null, USEREMAILADDRESS text(200) null, EMAILVALIDATED text(1) null, VALIDATIONCOOKIE text(50) null, CREATETIME text(25) not null, TQUNID text(36) not null, PARTITIONID text(50) null); + CREATE VIEW CRITICALISSUES as + + + select + USERID, ISSUEID, ISSUENAME, min(DATE1) DATE1 + from ( + select p.USERID USERID, p.ISSUEID ISSUEID, iset.ISSUENAME ISSUENAME, t.DUETIME DATE1 + from PARTICIPANTS p + join TASKS t on t.ASSIGNEDTO = p.OBJECTID + join TASKCOMPLETIONS tc on tc.TASKID = t.OBJECTID + join ISSUESETTINGS iset on iset.ISSUEID = p.ISSUEID + where (t.ISOBSOLETE = 'n' or t.ISOBSOLETE is null) + and tc.DISPOSITION = 1 + and iset.ISSUESTATUS = 1 + union + select p.USERID USERID, p.ISSUEID ISSUEID, iset.ISSUENAME ISSUENAME, iset.ISSUEDUEDATE DATE1 + from PARTICIPANTS p + join PARTICIPANTSETTINGS ps on ps.PARTICIPANTID = p.OBJECTID + join ISSUESETTINGS iset on iset.ISSUEID = p.ISSUEID + where ps.MARKEDCRITICAL = 'y' + and iset.ISSUESTATUS = 1 + ) as CRITICALDATA + group by USERID, ISSUEID, ISSUENAME; + CREATE VIEW CURRENTFILES as + + + select + d.ISSUEID as ISSUEID, + d.REFERENCEDOCUMENTID as OBJECTID, + f.VISIBLENAME as VISIBLENAME + from + DOCREFERENCES d + join FILES f on f.OBJECTID = d.REFERENCEDOCUMENTID; + CREATE VIEW ISSUEDATA as + + + select + ISSUES.OBJECTID as ISSUEID, + ISSUES.CREATIONDATE as CREATIONDATE, + ISSUES.AUTHORID as AUTHORID, + ISSUES.LASTMODIFIEDDATE as LASTMODIFIEDDATE, + ISSUES.LASTMODIFIEDBYID as LASTMODIFIEDBYID, + ISSUESETTINGS.ISSUENAME as ISSUENAME, + ISSUES.ISINITIALIZED as ISINITIALIZED, + ISSUES.ISSYSTEMISSUE as ISSYSTEMISSUE, + ISSUES.ISSUETYPE as ISSUETYPE, + ISSUES.ISINCOMPLETE as ISINCOMPLETE, + ISSUESETTINGS.REVISIONNUM as ISSUESETTINGS_REVISIONNUM, + ISSUESETTINGS.LASTMODIFIEDDATE as ISSUESETTINGS_LASTMODIFIEDDATE, + ISSUESETTINGS.LASTMODIFIEDBYID as ISSUESETTINGS_LASTMODIFIEDBYID, + ISSUESETTINGS.ISSUEDUEDATE as ISSUEDUEDATE, + ISSUESETTINGS.ISSUEPRIORITY as ISSUEPRIORITY, + ISSUESETTINGS.ISSUESTATUS as ISSUESTATUS, + ISSUESETTINGS.DESCRIPTION as DESCRIPTION, + ISSUESETTINGS.PROJECTID as PROJECTID, + ISSUESETTINGS.PROJECTNAME as PROJECTNAME, + ISSUESETTINGS.PROJECTNAMEISCUSTOM as PROJECTNAMEISCUSTOM, + ENTERPRISEDATA.REVISIONNUM as ENTERPRISEDATA_REVISIONNUM, + ENTERPRISEDATA.CREATIONDATE as ENTERPRISEDATA_CREATIONDATE, + ENTERPRISEDATA.AUTHORID as ENTERPRISEDATA_AUTHORID, + ENTERPRISEDATA.LASTMODIFIEDDATE as ENTERPRISEDATA_LASTMODIFIEDDATE, + ENTERPRISEDATA.LASTMODIFIEDBYID as ENTERPRISEDATA_LASTMODIFIEDBYID, + ENTERPRISEDATA.DATE1 as DATE1, + ENTERPRISEDATA.DATE2 as DATE2, + ENTERPRISEDATA.DATE3 as DATE3, + ENTERPRISEDATA.DATE4 as DATE4, + ENTERPRISEDATA.DATE5 as DATE5, + ENTERPRISEDATA.DATE6 as DATE6, + ENTERPRISEDATA.DATE7 as DATE7, + ENTERPRISEDATA.DATE8 as DATE8, + ENTERPRISEDATA.DATE9 as DATE9, + ENTERPRISEDATA.DATE10 as DATE10, + ENTERPRISEDATA.VALUE1 as VALUE1, + ENTERPRISEDATA.VALUE2 as VALUE2, + ENTERPRISEDATA.VALUE3 as VALUE3, + ENTERPRISEDATA.VALUE4 as VALUE4, + ENTERPRISEDATA.VALUE5 as VALUE5, + ENTERPRISEDATA.VALUE6 as VALUE6, + ENTERPRISEDATA.VALUE7 as VALUE7, + ENTERPRISEDATA.VALUE8 as VALUE8, + ENTERPRISEDATA.VALUE9 as VALUE9, + ENTERPRISEDATA.VALUE10 as VALUE10, + ENTERPRISEDATA.VALUE11 as VALUE11, + ENTERPRISEDATA.VALUE12 as VALUE12, + ENTERPRISEDATA.VALUE13 as VALUE13, + ENTERPRISEDATA.VALUE14 as VALUE14, + ENTERPRISEDATA.VALUE15 as VALUE15, + ENTERPRISEDATA.VALUE16 as VALUE16, + ENTERPRISEDATA.VALUE17 as VALUE17, + ENTERPRISEDATA.VALUE18 as VALUE18, + ENTERPRISEDATA.VALUE19 as VALUE19, + ENTERPRISEDATA.VALUE20 as VALUE20, + ENTERPRISEDATA.STRING1 as STRING1, + ENTERPRISEDATA.STRING2 as STRING2, + ENTERPRISEDATA.STRING3 as STRING3, + ENTERPRISEDATA.STRING4 as STRING4, + ENTERPRISEDATA.STRING5 as STRING5, + ENTERPRISEDATA.STRING6 as STRING6, + ENTERPRISEDATA.STRING7 as STRING7, + ENTERPRISEDATA.STRING8 as STRING8, + ENTERPRISEDATA.STRING9 as STRING9, + ENTERPRISEDATA.STRING10 as STRING10, + ENTERPRISEDATA.LONGSTRING1 as LONGSTRING1, + ENTERPRISEDATA.LONGSTRING2 as LONGSTRING2, + ENTERPRISEDATA.LONGSTRING3 as LONGSTRING3, + ENTERPRISEDATA.LONGSTRING4 as LONGSTRING4, + ENTERPRISEDATA.LONGSTRING5 as LONGSTRING5, + ENTERPRISEDATA.LONGSTRING6 as LONGSTRING6, + ENTERPRISEDATA.LONGSTRING7 as LONGSTRING7, + ENTERPRISEDATA.LONGSTRING8 as LONGSTRING8, + ENTERPRISEDATA.LONGSTRING9 as LONGSTRING9, + ENTERPRISEDATA.LONGSTRING10 as LONGSTRING10 + from + ISSUES + join ISSUESETTINGS on ISSUES.OBJECTID = ISSUESETTINGS.ISSUEID + left outer join ENTERPRISEDATA on ISSUES.OBJECTID = ENTERPRISEDATA.ISSUEID; + CREATE VIEW ITEMS as + + select 'FILES' as TABLENAME, CLASSID, SEQNO, LASTMODONNODEID, PREVMODONNODEID, ISSUEID, OBJECTID, REVISIONNUM, CONTAINERID, AUTHORID, CREATIONDATE, LASTMODIFIEDDATE, UPDATENUMBER, PREVREVISIONNUM, LASTCMD, LASTCMDACLVERSION, USERDEFINEDFIELD, LASTMODIFIEDBYID, PARENTENTITYID, BODY, BODYCONTENTTYPE, ISOBSOLETE, FILENAME, VISIBLENAME, VERSIONSTRING, DOCUMENTHASH, ISFINAL, DOCREFERENCEID, NULL as ACTIONTYPE, NULL as ASSOCIATEDOBJECTIDS, NULL as OLDENTITIES, NULL as NEWENTITIES, NULL as OTHERENTITIES, NULL as TQUNID, NULL as TABLEITEMID, NULL as TABLENODEID, NULL as TABLECMD, NULL as TABLECONTAINERID, NULL as TABLESEQNO, NULL as DIRTYCONTENT, NULL as STUBBED, NULL as ENTITYSTUBDATA, NULL as PARTICIPANTSTATE, NULL as PARTICIPANTROLE, NULL as PARTICIPANTTEAM, NULL as ISREQUIREDMEMBER, NULL as USERID, NULL as ISAGENT, NULL as NAME, NULL as EMAILADDRESS, NULL as ISEMAILONLY, NULL as INVITATION, NULL as ACCEPTRESENDCOUNT, NULL as ACCEPTRESENDTIMEOUT, NULL as ACCEPTLASTSENTTONODEID, NULL as TASKID, NULL as DISPOSITION, NULL as STATUSID, NULL as SHORTNAME, NULL as LONGNAME, NULL as DUETIME, NULL as ASSIGNEDTO, NULL as TARGETOBJECTIDS, NULL as RESPONSEID, NULL as TYPEID, NULL as LABEL, NULL as INSTRUCTIONS, NULL as ALLOWEDSTATUSES, NULL as ISSERIALREVIEW, NULL as DAYSTOREVIEW, NULL as REVIEWERIDS, NULL as REVIEWTYPE, NULL as REVIEWGROUP from FILES + union all + select 'LOGENTRIES' as TABLENAME, CLASSID, SEQNO, LASTMODONNODEID, PREVMODONNODEID, ISSUEID, OBJECTID, REVISIONNUM, CONTAINERID, AUTHORID, CREATIONDATE, LASTMODIFIEDDATE, UPDATENUMBER, PREVREVISIONNUM, LASTCMD, LASTCMDACLVERSION, USERDEFINEDFIELD, LASTMODIFIEDBYID, PARENTENTITYID, BODY, BODYCONTENTTYPE, ISOBSOLETE, NULL as FILENAME, NULL as VISIBLENAME, NULL as VERSIONSTRING, NULL as DOCUMENTHASH, NULL as ISFINAL, NULL as DOCREFERENCEID, ACTIONTYPE, ASSOCIATEDOBJECTIDS, OLDENTITIES, NEWENTITIES, OTHERENTITIES, NULL as TQUNID, NULL as TABLEITEMID, NULL as TABLENODEID, NULL as TABLECMD, NULL as TABLECONTAINERID, NULL as TABLESEQNO, NULL as DIRTYCONTENT, NULL as STUBBED, NULL as ENTITYSTUBDATA, NULL as PARTICIPANTSTATE, NULL as PARTICIPANTROLE, NULL as PARTICIPANTTEAM, NULL as ISREQUIREDMEMBER, NULL as USERID, NULL as ISAGENT, NULL as NAME, NULL as EMAILADDRESS, NULL as ISEMAILONLY, NULL as INVITATION, NULL as ACCEPTRESENDCOUNT, NULL as ACCEPTRESENDTIMEOUT, NULL as ACCEPTLASTSENTTONODEID, NULL as TASKID, NULL as DISPOSITION, NULL as STATUSID, NULL as SHORTNAME, NULL as LONGNAME, NULL as DUETIME, NULL as ASSIGNEDTO, NULL as TARGETOBJECTIDS, NULL as RESPONSEID, NULL as TYPEID, NULL as LABEL, NULL as INSTRUCTIONS, NULL as ALLOWEDSTATUSES, NULL as ISSERIALREVIEW, NULL as DAYSTOREVIEW, NULL as REVIEWERIDS, NULL as REVIEWTYPE, NULL as REVIEWGROUP from LOGENTRIES + union all + select 'LSBI' as TABLENAME, NULL as CLASSID, NULL as SEQNO, NULL as LASTMODONNODEID, NULL as PREVMODONNODEID, ISSUEID, NULL as OBJECTID, NULL as REVISIONNUM, NULL as CONTAINERID, NULL as AUTHORID, NULL as CREATIONDATE, NULL as LASTMODIFIEDDATE, UPDATENUMBER, NULL as PREVREVISIONNUM, NULL as LASTCMD, NULL as LASTCMDACLVERSION, NULL as USERDEFINEDFIELD, NULL as LASTMODIFIEDBYID, NULL as PARENTENTITYID, NULL as BODY, NULL as BODYCONTENTTYPE, NULL as ISOBSOLETE, NULL as FILENAME, NULL as VISIBLENAME, NULL as VERSIONSTRING, NULL as DOCUMENTHASH, NULL as ISFINAL, NULL as DOCREFERENCEID, NULL as ACTIONTYPE, NULL as ASSOCIATEDOBJECTIDS, NULL as OLDENTITIES, NULL as NEWENTITIES, NULL as OTHERENTITIES, TQUNID, TABLEITEMID, TABLENODEID, TABLECMD, TABLECONTAINERID, TABLESEQNO, DIRTYCONTENT, STUBBED, ENTITYSTUBDATA, NULL as PARTICIPANTSTATE, NULL as PARTICIPANTROLE, NULL as PARTICIPANTTEAM, NULL as ISREQUIREDMEMBER, NULL as USERID, NULL as ISAGENT, NULL as NAME, NULL as EMAILADDRESS, NULL as ISEMAILONLY, NULL as INVITATION, NULL as ACCEPTRESENDCOUNT, NULL as ACCEPTRESENDTIMEOUT, NULL as ACCEPTLASTSENTTONODEID, NULL as TASKID, NULL as DISPOSITION, NULL as STATUSID, NULL as SHORTNAME, NULL as LONGNAME, NULL as DUETIME, NULL as ASSIGNEDTO, NULL as TARGETOBJECTIDS, NULL as RESPONSEID, NULL as TYPEID, NULL as LABEL, NULL as INSTRUCTIONS, NULL as ALLOWEDSTATUSES, NULL as ISSERIALREVIEW, NULL as DAYSTOREVIEW, NULL as REVIEWERIDS, NULL as REVIEWTYPE, NULL as REVIEWGROUP from LSBI where TABLECMD=3 + union all + select 'PARTICIPANTS' as TABLENAME, CLASSID, SEQNO, LASTMODONNODEID, PREVMODONNODEID, ISSUEID, OBJECTID, REVISIONNUM, CONTAINERID, AUTHORID, CREATIONDATE, LASTMODIFIEDDATE, UPDATENUMBER, PREVREVISIONNUM, LASTCMD, LASTCMDACLVERSION, USERDEFINEDFIELD, LASTMODIFIEDBYID, NULL as PARENTENTITYID, NULL as BODY, NULL as BODYCONTENTTYPE, NULL as ISOBSOLETE, NULL as FILENAME, NULL as VISIBLENAME, NULL as VERSIONSTRING, NULL as DOCUMENTHASH, NULL as ISFINAL, NULL as DOCREFERENCEID, NULL as ACTIONTYPE, NULL as ASSOCIATEDOBJECTIDS, NULL as OLDENTITIES, NULL as NEWENTITIES, NULL as OTHERENTITIES, NULL as TQUNID, NULL as TABLEITEMID, NULL as TABLENODEID, NULL as TABLECMD, NULL as TABLECONTAINERID, NULL as TABLESEQNO, NULL as DIRTYCONTENT, NULL as STUBBED, NULL as ENTITYSTUBDATA, PARTICIPANTSTATE, PARTICIPANTROLE, PARTICIPANTTEAM, ISREQUIREDMEMBER, USERID, ISAGENT, NAME, EMAILADDRESS, ISEMAILONLY, INVITATION, ACCEPTRESENDCOUNT, ACCEPTRESENDTIMEOUT, ACCEPTLASTSENTTONODEID, NULL as TASKID, NULL as DISPOSITION, NULL as STATUSID, NULL as SHORTNAME, NULL as LONGNAME, NULL as DUETIME, NULL as ASSIGNEDTO, NULL as TARGETOBJECTIDS, NULL as RESPONSEID, NULL as TYPEID, NULL as LABEL, NULL as INSTRUCTIONS, NULL as ALLOWEDSTATUSES, NULL as ISSERIALREVIEW, NULL as DAYSTOREVIEW, NULL as REVIEWERIDS, NULL as REVIEWTYPE, NULL as REVIEWGROUP from PARTICIPANTS + union all + select 'TASKCOMPLETIONS' as TABLENAME, CLASSID, SEQNO, LASTMODONNODEID, PREVMODONNODEID, ISSUEID, OBJECTID, REVISIONNUM, CONTAINERID, AUTHORID, CREATIONDATE, LASTMODIFIEDDATE, UPDATENUMBER, PREVREVISIONNUM, LASTCMD, LASTCMDACLVERSION, USERDEFINEDFIELD, LASTMODIFIEDBYID, PARENTENTITYID, BODY, BODYCONTENTTYPE, ISOBSOLETE, NULL as FILENAME, NULL as VISIBLENAME, NULL as VERSIONSTRING, NULL as DOCUMENTHASH, NULL as ISFINAL, NULL as DOCREFERENCEID, NULL as ACTIONTYPE, NULL as ASSOCIATEDOBJECTIDS, NULL as OLDENTITIES, NULL as NEWENTITIES, NULL as OTHERENTITIES, NULL as TQUNID, NULL as TABLEITEMID, NULL as TABLENODEID, NULL as TABLECMD, NULL as TABLECONTAINERID, NULL as TABLESEQNO, NULL as DIRTYCONTENT, NULL as STUBBED, NULL as ENTITYSTUBDATA, NULL as PARTICIPANTSTATE, NULL as PARTICIPANTROLE, NULL as PARTICIPANTTEAM, NULL as ISREQUIREDMEMBER, NULL as USERID, NULL as ISAGENT, NULL as NAME, NULL as EMAILADDRESS, NULL as ISEMAILONLY, NULL as INVITATION, NULL as ACCEPTRESENDCOUNT, NULL as ACCEPTRESENDTIMEOUT, NULL as ACCEPTLASTSENTTONODEID, TASKID, DISPOSITION, STATUSID, SHORTNAME, LONGNAME, NULL as DUETIME, NULL as ASSIGNEDTO, NULL as TARGETOBJECTIDS, NULL as RESPONSEID, NULL as TYPEID, NULL as LABEL, NULL as INSTRUCTIONS, NULL as ALLOWEDSTATUSES, NULL as ISSERIALREVIEW, NULL as DAYSTOREVIEW, NULL as REVIEWERIDS, NULL as REVIEWTYPE, NULL as REVIEWGROUP from TASKCOMPLETIONS + union all + select 'TASKS' as TABLENAME, CLASSID, SEQNO, LASTMODONNODEID, PREVMODONNODEID, ISSUEID, OBJECTID, REVISIONNUM, CONTAINERID, AUTHORID, CREATIONDATE, LASTMODIFIEDDATE, UPDATENUMBER, PREVREVISIONNUM, LASTCMD, LASTCMDACLVERSION, USERDEFINEDFIELD, LASTMODIFIEDBYID, PARENTENTITYID, BODY, BODYCONTENTTYPE, ISOBSOLETE, NULL as FILENAME, NULL as VISIBLENAME, NULL as VERSIONSTRING, NULL as DOCUMENTHASH, NULL as ISFINAL, NULL as DOCREFERENCEID, NULL as ACTIONTYPE, NULL as ASSOCIATEDOBJECTIDS, NULL as OLDENTITIES, NULL as NEWENTITIES, NULL as OTHERENTITIES, NULL as TQUNID, NULL as TABLEITEMID, NULL as TABLENODEID, NULL as TABLECMD, NULL as TABLECONTAINERID, NULL as TABLESEQNO, NULL as DIRTYCONTENT, NULL as STUBBED, NULL as ENTITYSTUBDATA, NULL as PARTICIPANTSTATE, NULL as PARTICIPANTROLE, NULL as PARTICIPANTTEAM, NULL as ISREQUIREDMEMBER, NULL as USERID, NULL as ISAGENT, NULL as NAME, NULL as EMAILADDRESS, NULL as ISEMAILONLY, NULL as INVITATION, NULL as ACCEPTRESENDCOUNT, NULL as ACCEPTRESENDTIMEOUT, NULL as ACCEPTLASTSENTTONODEID, NULL as TASKID, NULL as DISPOSITION, NULL as STATUSID, NULL as SHORTNAME, NULL as LONGNAME, DUETIME, ASSIGNEDTO, TARGETOBJECTIDS, RESPONSEID, TYPEID, LABEL, INSTRUCTIONS, ALLOWEDSTATUSES, ISSERIALREVIEW, DAYSTOREVIEW, REVIEWERIDS, REVIEWTYPE, REVIEWGROUP from TASKS; + CREATE VIEW TASKINFO as + + + select + t.ISSUEID as ISSUEID, + t.OBJECTID as OBJECTID, + t.ASSIGNEDTO as ASSIGNEDTO, + t.TARGETOBJECTIDS as TARGETOBJECTIDS, + t.DUETIME as DUETIME, + t.ISOBSOLETE as ISOBSOLETE, + tc.DISPOSITION as DISPOSITION + from + TASKS t + join TASKCOMPLETIONS tc on tc.TASKID = t.OBJECTID; + CREATE INDEX DQ_ISSUEID_DEPENDSID on DQ (ISSUEID, DEPENDSID); + CREATE INDEX EMAILQ_TIMEQUEUED on EMAILQ (TIMEQUEUED); + CREATE INDEX FOLDERS_CONTAINERID_ISSUEID on FOLDERS (CONTAINERID, ISSUEID); + CREATE INDEX IMQ_DATETIMEQUEUED on IMQ (DATETIMEQUEUED); + CREATE INDEX INVITATIONS_RECIPIENTUSERID_INVITATIONID on INVITATIONS (RECIPIENTUSERID, INVITATIONID); + CREATE INDEX INVITATIONS_TQUNID on INVITATIONS (TQUNID); + CREATE INDEX ISSUESETTINGS_CONTAINERID on ISSUESETTINGS (CONTAINERID); + CREATE INDEX KMTPMSG_RECEIVEDDATE on KMTPMSG (RECEIVEDDATE desc); + CREATE INDEX KMTPNODEQ_MSGID on KMTPNODEQ (MSGID); + CREATE INDEX KMTPNODEQ_NODEID_MSGID on KMTPNODEQ (NODEID, MSGID); + CREATE INDEX KMTPNODEQ_RECEIVEDDATE on KMTPNODEQ (RECEIVEDDATE desc); + CREATE INDEX LSBI_ISSUEID_TABLEITEMID on LSBI (ISSUEID, TABLEITEMID); + CREATE INDEX LSBN_ISSUEID_NODEID on LSBN (ISSUEID, NODEID); + CREATE INDEX MMQ_ISSUEID_MMQENTRYINDEX on MMQ (ISSUEID, MMQENTRYINDEX); + CREATE INDEX NODEREG_NODEID_USERID on NODEREG (NODEID, USERID); + CREATE INDEX NODEREG_TQUNID on NODEREG (TQUNID); + CREATE INDEX NODEREG_USERID_NODEID on NODEREG (USERID, NODEID); + CREATE INDEX NODES_NODEID on NODES (NODEID); + CREATE INDEX NODES_TQUNID on NODES (TQUNID); + CREATE INDEX PARTICIPANTNODES_ISSUEID_OBJECTID_NODEID on PARTICIPANTNODES (ISSUEID, OBJECTID, NODEID); + CREATE INDEX PARTICIPANTNODES_TQUNID on PARTICIPANTNODES (TQUNID); + CREATE INDEX PARTICIPANTSETTINGS_PARTICIPANTID on PARTICIPANTSETTINGS (PARTICIPANTID); + CREATE INDEX PARTITIONS_LDAPDN on PARTITIONS (LDAPDN); + CREATE INDEX PARTITIONS_PARTITIONID_SERVERNODEID on PARTITIONS (PARTITIONID, SERVERNODEID); + CREATE INDEX PARTITIONS_SERVERNODEID_PARTITIONID on PARTITIONS (SERVERNODEID, PARTITIONID); + CREATE INDEX PARTITIONS_TQUNID on PARTITIONS (TQUNID); + CREATE INDEX TASKCOMPLETIONS_TASKID on TASKCOMPLETIONS (TASKID); + CREATE INDEX TASKS_ASSIGNEDTO on TASKS (ASSIGNEDTO); + CREATE INDEX USERS_PARTITIONID_USERID on USERS (PARTITIONID, USERID); + CREATE INDEX USERS_TQUNID on USERS (TQUNID); + CREATE INDEX USERS_USERID_PARTITIONID on USERS (USERID, PARTITIONID); + CREATE INDEX USERS_USERSID_USERID on USERS (USERSID, USERID); + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 218 ok +stmt 1133 ok +stmt 1932 ok +stmt 2288 ok +stmt 2871 ok +stmt 3030 ok +stmt 3108 ok +stmt 3383 ok +stmt 3975 ok +stmt 4234 ok +stmt 4356 ok +stmt 5949 ok +stmt 6112 ok +stmt 6939 ok +stmt 7546 ok +stmt 8376 ok +stmt 8515 ok +stmt 8799 ok +stmt 9006 ok +stmt 9362 ok +stmt 10137 ok +stmt 11000 ok +stmt 11277 ok +stmt 11407 ok +stmt 11647 ok +stmt 12428 ok +stmt 12770 ok +stmt 12989 ok +stmt 13324 ok +stmt 13454 ok +stmt 13828 ok +stmt 14091 ok +stmt 15023 ok +stmt 15736 ok +stmt 15906 ok +stmt 16497 ok +stmt 17299 ok +stmt 18293 ok +stmt 18582 ok +stmt 19525 ok +stmt 19782 ok +stmt 23487 ok +stmt 31883 ok +stmt 32261 err 1 -1 32327 no such table: main.DQ +stmt 32327 err 1 -1 32386 no such table: main.EMAILQ +stmt 32386 err 1 -1 32466 no such table: main.FOLDERS +stmt 32466 err 1 -1 32527 no such table: main.IMQ +stmt 32527 err 1 -1 32633 no such table: main.INVITATIONS +stmt 32633 err 1 -1 32694 no such table: main.INVITATIONS +stmt 32694 err 1 -1 32769 no such table: main.ISSUESETTINGS +stmt 32769 err 1 -1 32839 no such table: main.KMTPMSG +stmt 32839 err 1 -1 32894 no such table: main.KMTPNODEQ +stmt 32894 err 1 -1 32964 no such table: main.KMTPNODEQ +stmt 32964 err 1 -1 33038 no such table: main.KMTPNODEQ +stmt 33038 err 1 -1 33112 no such table: main.LSBI +stmt 33112 err 1 -1 33176 no such table: main.LSBN +stmt 33176 err 1 -1 33252 no such table: main.MMQ +stmt 33252 err 1 -1 33320 no such table: main.NODEREG +stmt 33320 err 1 -1 33373 no such table: main.NODEREG +stmt 33373 err 1 -1 33441 no such table: main.NODEREG +stmt 33441 err 1 -1 33490 no such table: main.NODES +stmt 33490 err 1 -1 33539 no such table: main.NODES +stmt 33539 err 1 -1 33646 no such table: main.PARTICIPANTNODES +stmt 33646 err 1 -1 33717 no such table: main.PARTICIPANTNODES +stmt 33717 err 1 -1 33808 no such table: main.PARTICIPANTSETTINGS +stmt 33808 err 1 -1 33867 no such table: main.PARTITIONS +stmt 33867 err 1 -1 33963 no such table: main.PARTITIONS +stmt 33963 err 1 -1 34059 no such table: main.PARTITIONS +stmt 34059 err 1 -1 34118 no such table: main.PARTITIONS +stmt 34118 err 1 -1 34187 no such table: main.TASKCOMPLETIONS +stmt 34187 err 1 -1 34244 no such table: main.TASKS +stmt 34244 err 1 -1 34318 no such table: main.USERS +stmt 34318 err 1 -1 34367 no such table: main.USERS +stmt 34367 err 1 -1 34441 no such table: main.USERS +stmt 34441 err 1 -1 34507 no such table: main.USERS +stmt 34507 ok +==== tkt1449-1.2 + + select NEWENTITIES from ITEMS where ((ISSUEID = 'x') and (OBJECTID = 'y')) +---- +stmt 0 err 1 -1 80 no such table: ITEMS diff --git a/parser/testdata/tkt1473.metadata.json b/parser/testdata/tkt1473.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1473.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1473.test b/parser/testdata/tkt1473.test new file mode 100644 index 0000000..9e61e2a --- /dev/null +++ b/parser/testdata/tkt1473.test @@ -0,0 +1,693 @@ +==== tkt1473-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(3,4); + SELECT * FROM t1 +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 112 no such table: t1 +==== tkt1473-1.2 + + SELECT 1 FROM t1 WHERE a=1 UNION ALL SELECT 2 FROM t1 WHERE b=0 +---- +stmt 0 err 1 -1 69 no such table: t1 +==== tkt1473-1.3 + + SELECT 1 FROM t1 WHERE a=1 UNION SELECT 2 FROM t1 WHERE b=0 +---- +stmt 0 err 1 -1 65 no such table: t1 +==== tkt1473-1.4 + + SELECT 1 FROM t1 WHERE a=1 UNION ALL SELECT 2 FROM t1 WHERE b=4 +---- +stmt 0 err 1 -1 69 no such table: t1 +==== tkt1473-1.5 + + SELECT 1 FROM t1 WHERE a=1 UNION SELECT 2 FROM t1 WHERE b=4 +---- +stmt 0 err 1 -1 65 no such table: t1 +==== tkt1473-1.6 + + SELECT 1 FROM t1 WHERE a=0 UNION ALL SELECT 2 FROM t1 WHERE b=4 +---- +stmt 0 err 1 -1 69 no such table: t1 +==== tkt1473-1.7 + + SELECT 1 FROM t1 WHERE a=0 UNION SELECT 2 FROM t1 WHERE b=4 +---- +stmt 0 err 1 -1 65 no such table: t1 +==== tkt1473-1.8 + + SELECT 1 FROM t1 WHERE a=0 UNION ALL SELECT 2 FROM t1 WHERE b=0 +---- +stmt 0 err 1 -1 69 no such table: t1 +==== tkt1473-1.9 + + SELECT 1 FROM t1 WHERE a=0 UNION SELECT 2 FROM t1 WHERE b=0 +---- +stmt 0 err 1 -1 65 no such table: t1 +==== tkt1473-2.2 + + SELECT (SELECT 1 FROM t1 WHERE a=1 UNION ALL SELECT 2 FROM t1 WHERE b=0) +---- +stmt 0 err 1 -1 78 no such table: t1 +==== tkt1473-2.3 + + SELECT (SELECT 1 FROM t1 WHERE a=1 UNION SELECT 2 FROM t1 WHERE b=0) +---- +stmt 0 err 1 -1 74 no such table: t1 +==== tkt1473-2.4 + + SELECT (SELECT 1 FROM t1 WHERE a=1 UNION ALL SELECT 2 FROM t1 WHERE b=4) +---- +stmt 0 err 1 -1 78 no such table: t1 +==== tkt1473-2.5 + + SELECT (SELECT 1 FROM t1 WHERE a=1 UNION SELECT 2 FROM t1 WHERE b=4) +---- +stmt 0 err 1 -1 74 no such table: t1 +==== tkt1473-2.6 + + SELECT (SELECT 1 FROM t1 WHERE a=0 UNION ALL SELECT 2 FROM t1 WHERE b=4) +---- +stmt 0 err 1 -1 78 no such table: t1 +==== tkt1473-2.7 + + SELECT (SELECT 1 FROM t1 WHERE a=0 UNION SELECT 2 FROM t1 WHERE b=4) +---- +stmt 0 err 1 -1 74 no such table: t1 +==== tkt1473-2.8 + + SELECT (SELECT 1 FROM t1 WHERE a=0 UNION ALL SELECT 2 FROM t1 WHERE b=0) +---- +stmt 0 err 1 -1 78 no such table: t1 +==== tkt1473-2.9 + + SELECT (SELECT 1 FROM t1 WHERE a=0 UNION SELECT 2 FROM t1 WHERE b=0) +---- +stmt 0 err 1 -1 74 no such table: t1 +==== tkt1473-3.2 + + SELECT EXISTS + (SELECT 1 FROM t1 WHERE a=1 UNION ALL SELECT 2 FROM t1 WHERE b=0) +---- +stmt 0 err 1 -1 91 no such table: t1 +==== tkt1473-3.3 + + SELECT EXISTS + (SELECT 1 FROM t1 WHERE a=1 UNION SELECT 2 FROM t1 WHERE b=0) +---- +stmt 0 err 1 -1 87 no such table: t1 +==== tkt1473-3.4 + + SELECT EXISTS + (SELECT 1 FROM t1 WHERE a=1 UNION ALL SELECT 2 FROM t1 WHERE b=4) +---- +stmt 0 err 1 -1 91 no such table: t1 +==== tkt1473-3.5 + + SELECT EXISTS + (SELECT 1 FROM t1 WHERE a=1 UNION SELECT 2 FROM t1 WHERE b=4) +---- +stmt 0 err 1 -1 87 no such table: t1 +==== tkt1473-3.6 + + SELECT EXISTS + (SELECT 1 FROM t1 WHERE a=0 UNION ALL SELECT 2 FROM t1 WHERE b=4) +---- +stmt 0 err 1 -1 91 no such table: t1 +==== tkt1473-3.7 + + SELECT EXISTS + (SELECT 1 FROM t1 WHERE a=0 UNION SELECT 2 FROM t1 WHERE b=4) +---- +stmt 0 err 1 -1 87 no such table: t1 +==== tkt1473-3.8 + + SELECT EXISTS + (SELECT 1 FROM t1 WHERE a=0 UNION ALL SELECT 2 FROM t1 WHERE b=0) +---- +stmt 0 err 1 -1 91 no such table: t1 +==== tkt1473-3.9 + + SELECT EXISTS + (SELECT 1 FROM t1 WHERE a=0 UNION SELECT 2 FROM t1 WHERE b=0) +---- +stmt 0 err 1 -1 87 no such table: t1 +==== tkt1473-4.1 + + CREATE TABLE t2(x,y); + INSERT INTO t2 VALUES(1,2); + INSERT INTO t2 SELECT x+2, y+2 FROM t2; + INSERT INTO t2 SELECT x+4, y+4 FROM t2; + INSERT INTO t2 SELECT x+8, y+8 FROM t2; + INSERT INTO t2 SELECT x+16, y+16 FROM t2; + INSERT INTO t2 SELECT x+32, y+32 FROM t2; + INSERT INTO t2 SELECT x+64, y+64 FROM t2; + SELECT count(*), sum(x), sum(y) FROM t2; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t2 +stmt 58 err 1 -1 102 no such table: t2 +stmt 102 err 1 -1 146 no such table: t2 +stmt 146 err 1 -1 190 no such table: t2 +stmt 190 err 1 -1 236 no such table: t2 +stmt 236 err 1 -1 282 no such table: t2 +stmt 282 err 1 -1 328 no such table: t2 +stmt 328 err 1 -1 373 no such table: t2 +==== tkt1473-4.2 + + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=3 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=2 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=4 +---- +stmt 0 err 1 -1 438 no such table: t2 +==== tkt1473-4.3 + + SELECT ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=3 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=2 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 495 no such table: t2 +==== tkt1473-4.4 + + SELECT ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=-1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=3 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=2 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 496 no such table: t2 +==== tkt1473-4.5 + + SELECT ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=-1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=-1 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=2 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=-4 + ) +---- +stmt 0 err 1 -1 498 no such table: t2 +==== tkt1473-4.6 + + SELECT ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=-1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=-2 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=-3 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 498 no such table: t2 +==== tkt1473-4.7 + + SELECT ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=-1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=-2 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=-3 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=-4 + ) +---- +stmt 0 err 1 -1 499 no such table: t2 +==== tkt1473-5.3 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=3 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=2 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 502 no such table: t2 +==== tkt1473-5.4 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=-1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=3 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=2 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 503 no such table: t2 +==== tkt1473-5.5 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=-1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=-1 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=2 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=-4 + ) +---- +stmt 0 err 1 -1 505 no such table: t2 +==== tkt1473-5.6 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=-1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=-2 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=-3 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 505 no such table: t2 +==== tkt1473-5.7 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION ALL + SELECT 2 FROM t2 WHERE x=-1 + UNION ALL + SELECT 3 FROM t2 WHERE x=2 + UNION ALL + SELECT 4 FROM t2 WHERE x=-2 + UNION ALL + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION ALL + SELECT 7 FROM t2 WHERE y=1 + UNION ALL + SELECT 8 FROM t2 WHERE y=-3 + UNION ALL + SELECT 9 FROM t2 WHERE y=3 + UNION ALL + SELECT 10 FROM t2 WHERE y=-4 + ) +---- +stmt 0 err 1 -1 506 no such table: t2 +==== tkt1473-6.3 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION + SELECT 2 FROM t2 WHERE x=1 + UNION + SELECT 3 FROM t2 WHERE x=2 + UNION + SELECT 4 FROM t2 WHERE x=3 + UNION + SELECT 5 FROM t2 WHERE x=4 + UNION + SELECT 6 FROM t2 WHERE y=0 + UNION + SELECT 7 FROM t2 WHERE y=1 + UNION + SELECT 8 FROM t2 WHERE y=2 + UNION + SELECT 9 FROM t2 WHERE y=3 + UNION + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 466 no such table: t2 +==== tkt1473-6.4 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION + SELECT 2 FROM t2 WHERE x=-1 + UNION + SELECT 3 FROM t2 WHERE x=2 + UNION + SELECT 4 FROM t2 WHERE x=3 + UNION + SELECT 5 FROM t2 WHERE x=4 + UNION + SELECT 6 FROM t2 WHERE y=0 + UNION + SELECT 7 FROM t2 WHERE y=1 + UNION + SELECT 8 FROM t2 WHERE y=2 + UNION + SELECT 9 FROM t2 WHERE y=3 + UNION + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 467 no such table: t2 +==== tkt1473-6.5 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION + SELECT 2 FROM t2 WHERE x=-1 + UNION + SELECT 3 FROM t2 WHERE x=2 + UNION + SELECT 4 FROM t2 WHERE x=-1 + UNION + SELECT 5 FROM t2 WHERE x=4 + UNION + SELECT 6 FROM t2 WHERE y=0 + UNION + SELECT 7 FROM t2 WHERE y=1 + UNION + SELECT 8 FROM t2 WHERE y=2 + UNION + SELECT 9 FROM t2 WHERE y=3 + UNION + SELECT 10 FROM t2 WHERE y=-4 + ) +---- +stmt 0 err 1 -1 469 no such table: t2 +==== tkt1473-6.6 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION + SELECT 2 FROM t2 WHERE x=-1 + UNION + SELECT 3 FROM t2 WHERE x=2 + UNION + SELECT 4 FROM t2 WHERE x=-2 + UNION + SELECT 5 FROM t2 WHERE x=4 + UNION + SELECT 6 FROM t2 WHERE y=0 + UNION + SELECT 7 FROM t2 WHERE y=1 + UNION + SELECT 8 FROM t2 WHERE y=-3 + UNION + SELECT 9 FROM t2 WHERE y=3 + UNION + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 469 no such table: t2 +==== tkt1473-6.7 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION + SELECT 2 FROM t2 WHERE x=-1 + UNION + SELECT 3 FROM t2 WHERE x=2 + UNION + SELECT 4 FROM t2 WHERE x=-2 + UNION + SELECT 5 FROM t2 WHERE x=4 + UNION + SELECT 6 FROM t2 WHERE y=0 + UNION + SELECT 7 FROM t2 WHERE y=1 + UNION + SELECT 8 FROM t2 WHERE y=-3 + UNION + SELECT 9 FROM t2 WHERE y=3 + UNION + SELECT 10 FROM t2 WHERE y=-4 + ) +---- +stmt 0 err 1 -1 470 no such table: t2 +==== tkt1473-6.8 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION + SELECT 2 FROM t2 WHERE x=-1 + UNION + SELECT 3 FROM t2 WHERE x=2 + UNION + SELECT 4 FROM t2 WHERE x=-2 + UNION + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION + SELECT 7 FROM t2 WHERE y=1 + UNION + SELECT 8 FROM t2 WHERE y=-3 + UNION + SELECT 9 FROM t2 WHERE y=3 + UNION + SELECT 10 FROM t2 WHERE y=4 + ) +---- +stmt 0 err 1 -1 473 no such table: t2 +==== tkt1473-6.9 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 + UNION + SELECT 2 FROM t2 WHERE x=-1 + UNION + SELECT 3 FROM t2 WHERE x=2 + UNION + SELECT 4 FROM t2 WHERE x=-2 + UNION + SELECT 5 FROM t2 WHERE x=4 + UNION ALL + SELECT 6 FROM t2 WHERE y=0 + UNION + SELECT 7 FROM t2 WHERE y=1 + UNION + SELECT 8 FROM t2 WHERE y=-3 + UNION + SELECT 9 FROM t2 WHERE y=3 + UNION + SELECT 10 FROM t2 WHERE y=-4 + ) +---- +stmt 0 err 1 -1 474 no such table: t2 +==== tkt1473-7.1 + + SELECT 1 FROM t2 WHERE x=1 EXCEPT SELECT 2 FROM t2 WHERE y=2 +---- +stmt 0 err 1 -1 66 no such table: t2 +==== tkt1473-7.2 + + SELECT ( + SELECT 1 FROM t2 WHERE x=1 EXCEPT SELECT 2 FROM t2 WHERE y=2 + ) +---- +stmt 0 err 1 -1 87 no such table: t2 +==== tkt1473-7.3 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=1 EXCEPT SELECT 2 FROM t2 WHERE y=2 + ) +---- +stmt 0 err 1 -1 94 no such table: t2 +==== tkt1473-7.4 + + SELECT ( + SELECT 1 FROM t2 WHERE x=0 EXCEPT SELECT 2 FROM t2 WHERE y=2 + ) +---- +stmt 0 err 1 -1 87 no such table: t2 +==== tkt1473-7.5 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=0 EXCEPT SELECT 2 FROM t2 WHERE y=2 + ) +---- +stmt 0 err 1 -1 94 no such table: t2 +==== tkt1473-8.1 + + SELECT 1 FROM t2 WHERE x=1 INTERSECT SELECT 2 FROM t2 WHERE y=2 +---- +stmt 0 err 1 -1 69 no such table: t2 +==== tkt1473-8.1.dup1 + + SELECT 1 FROM t2 WHERE x=1 INTERSECT SELECT 1 FROM t2 WHERE y=2 +---- +stmt 0 err 1 -1 69 no such table: t2 +==== tkt1473-8.3 + + SELECT ( + SELECT 1 FROM t2 WHERE x=1 INTERSECT SELECT 2 FROM t2 WHERE y=2 + ) +---- +stmt 0 err 1 -1 90 no such table: t2 +==== tkt1473-8.4 + + SELECT ( + SELECT 1 FROM t2 WHERE x=1 INTERSECT SELECT 1 FROM t2 WHERE y=2 + ) +---- +stmt 0 err 1 -1 90 no such table: t2 +==== tkt1473-8.5 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=1 INTERSECT SELECT 2 FROM t2 WHERE y=2 + ) +---- +stmt 0 err 1 -1 97 no such table: t2 +==== tkt1473-8.6 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=1 INTERSECT SELECT 1 FROM t2 WHERE y=2 + ) +---- +stmt 0 err 1 -1 97 no such table: t2 +==== tkt1473-8.7 + + SELECT ( + SELECT 1 FROM t2 WHERE x=0 INTERSECT SELECT 1 FROM t2 WHERE y=2 + ) +---- +stmt 0 err 1 -1 90 no such table: t2 +==== tkt1473-8.8 + + SELECT EXISTS ( + SELECT 1 FROM t2 WHERE x=1 INTERSECT SELECT 1 FROM t2 WHERE y=0 + ) +---- +stmt 0 err 1 -1 97 no such table: t2 diff --git a/parser/testdata/tkt1501.metadata.json b/parser/testdata/tkt1501.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1501.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1501.test b/parser/testdata/tkt1501.test new file mode 100644 index 0000000..3d714ab --- /dev/null +++ b/parser/testdata/tkt1501.test @@ -0,0 +1,12 @@ +==== tkt1501-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + SELECT a, b, 'abc' FROM t1 + UNION + SELECT b, a, 'xyz' FROM t1 + ORDER BY 2, 3; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 155 no such table: t1 diff --git a/parser/testdata/tkt1512.metadata.json b/parser/testdata/tkt1512.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1512.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1512.test b/parser/testdata/tkt1512.test new file mode 100644 index 0000000..920074e --- /dev/null +++ b/parser/testdata/tkt1512.test @@ -0,0 +1,11 @@ +==== tkt1512-1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(3,4); + SELECT * FROM t1 +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 112 no such table: t1 diff --git a/parser/testdata/tkt1514.metadata.json b/parser/testdata/tkt1514.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1514.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1514.test b/parser/testdata/tkt1514.test new file mode 100644 index 0000000..63510b1 --- /dev/null +++ b/parser/testdata/tkt1514.test @@ -0,0 +1,7 @@ +==== tkt1514-1.1 + + CREATE TABLE t1(a,b); + SELECT a FROM t1 WHERE max(b)<10 GROUP BY a; +---- +stmt 0 ok +stmt 26 err 1 -1 75 no such table: t1 diff --git a/parser/testdata/tkt1536.metadata.json b/parser/testdata/tkt1536.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1536.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1536.test b/parser/testdata/tkt1536.test new file mode 100644 index 0000000..21234de --- /dev/null +++ b/parser/testdata/tkt1536.test @@ -0,0 +1,19 @@ +==== tkt1536-1.1 + + CREATE TABLE t1( + a INTEGER PRIMARY KEY, + b TEXT + ); + INSERT INTO t1 VALUES(1,'01'); + SELECT typeof(a), typeof(b) FROM t1; +---- +stmt 0 ok +stmt 70 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 146 no such table: t1 +==== tkt1536-1.2 + + INSERT INTO t1(b) SELECT b FROM t1; + SELECT b FROM t1 WHERE rowid=2; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 76 no such table: t1 diff --git a/parser/testdata/tkt1537.metadata.json b/parser/testdata/tkt1537.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1537.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1537.test b/parser/testdata/tkt1537.test new file mode 100644 index 0000000..dbaea5d --- /dev/null +++ b/parser/testdata/tkt1537.test @@ -0,0 +1,99 @@ +==== tkt1537-1.1 + + CREATE TABLE t1(id, a1, a2); + INSERT INTO t1 VALUES(1, NULL, NULL); + INSERT INTO t1 VALUES(2, 1, 3); + CREATE TABLE t2(id, b); + INSERT INTO t2 VALUES(3, 1); + INSERT INTO t2 VALUES(4, NULL); + SELECT * FROM t1 LEFT JOIN t2 ON a1=b OR a2=+b; +---- +stmt 0 ok +stmt 33 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 111 no such table: t1 +stmt 111 ok +stmt 139 err 1 -1 172 no such table: t2 +stmt 172 err 1 -1 208 no such table: t2 +stmt 208 err 1 -1 260 no such table: t1 +==== tkt1537-1.2 + + SELECT * FROM t1 LEFT JOIN t2 ON a1=b OR a2=b; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== tkt1537-1.3 + + SELECT * FROM t2 LEFT JOIN t1 ON a1=b OR a2=b; +---- +stmt 0 err 1 -1 51 no such table: t2 +==== tkt1537-1.4 + + SELECT * FROM t1 LEFT JOIN t2 ON b IN (a1,a2); +---- +stmt 0 err 1 -1 53 no such table: t1 +==== tkt1537-1.5 + + SELECT * FROM t2 LEFT JOIN t1 ON b IN (a2,a1); +---- +stmt 0 err 1 -1 53 no such table: t2 +==== tkt1537-1.6 + + CREATE INDEX t1a1 ON t1(a1); + CREATE INDEX t1a2 ON t1(a2); + CREATE INDEX t2b ON t2(b); + SELECT * FROM t1 LEFT JOIN t2 ON a1=b OR a2=b; +---- +stmt 0 err 1 -1 33 no such table: main.t1 +stmt 33 err 1 -1 66 no such table: main.t1 +stmt 66 err 1 -1 97 no such table: main.t2 +stmt 97 err 1 -1 148 no such table: t1 +==== tkt1537-1.7 + + SELECT * FROM t2 LEFT JOIN t1 ON a1=b OR a2=b; +---- +stmt 0 err 1 -1 51 no such table: t2 +==== tkt1537-1.8 + + SELECT * FROM t1 LEFT JOIN t2 ON b IN (a1,a2); +---- +stmt 0 err 1 -1 53 no such table: t1 +==== tkt1537-1.9 + + SELECT * FROM t2 LEFT JOIN t1 ON b IN (a2,a1); +---- +stmt 0 err 1 -1 53 no such table: t2 +==== tkt1537-2.1 + + SELECT * FROM t1 LEFT JOIN t2 ON b BETWEEN a1 AND a2; +---- +stmt 0 err 1 -1 58 no such table: t1 +==== tkt1537-2.2 + + CREATE INDEX t2b ON t2(b); + SELECT * FROM t1 LEFT JOIN t2 ON b BETWEEN a1 AND a2; +---- +stmt 0 err 1 -1 31 no such table: main.t2 +stmt 31 err 1 -1 89 no such table: t1 +==== tkt1537-2.3 + + SELECT * FROM t2 LEFT JOIN t1 ON b BETWEEN a1 AND a2; +---- +stmt 0 err 1 -1 58 no such table: t2 +==== tkt1537-2.4 + + CREATE INDEX t1a1 ON t1(a1); + CREATE INDEX t1a2 ON t1(a2); + SELECT * FROM t2 LEFT JOIN t1 ON b BETWEEN a1 AND a2; +---- +stmt 0 err 1 -1 33 no such table: main.t1 +stmt 33 err 1 -1 66 no such table: main.t1 +stmt 66 err 1 -1 124 no such table: t2 +==== tkt1537-3.1 + + SELECT * FROM t1 LEFT JOIN t2 ON b GLOB 'abc*' WHERE t1.id=1; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== tkt1537-3.2 + + SELECT * FROM t2 LEFT JOIN t1 ON a1 GLOB 'abc*' WHERE t2.id=3; +---- +stmt 0 err 1 -1 68 no such table: t2 diff --git a/parser/testdata/tkt1567.metadata.json b/parser/testdata/tkt1567.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1567.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1567.test b/parser/testdata/tkt1567.test new file mode 100644 index 0000000..d7ccb07 --- /dev/null +++ b/parser/testdata/tkt1567.test @@ -0,0 +1,34 @@ +==== tkt1567-1.3 + + BEGIN; + UPDATE t1 SET a = a||'x' WHERE rowid%2==0; +---- +stmt 0 ok +stmt 11 err 1 -1 58 no such table: t1 +==== tkt1567-1.4 + + UPDATE t1 SET a = CASE WHEN rowid<90 THEN substr(a,1,10) ELSE '9999' END; +---- +stmt 0 err 1 -1 78 no such table: t1 +==== tkt1567-1.5 + + COMMIT; +---- +stmt 0 ok +==== tkt1567-2.3 + + BEGIN; + UPDATE t2 SET a = a||'x' WHERE rowid%2==0; +---- +stmt 0 ok +stmt 11 err 1 -1 58 no such table: t2 +==== tkt1567-2.4 + + UPDATE t2 SET a = CASE WHEN rowid<90 THEN substr(a,1,10) ELSE '9999' END; +---- +stmt 0 err 1 -1 78 no such table: t2 +==== tkt1567-2.5 + + COMMIT; +---- +stmt 0 ok diff --git a/parser/testdata/tkt1644.metadata.json b/parser/testdata/tkt1644.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1644.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1644.test b/parser/testdata/tkt1644.test new file mode 100644 index 0000000..dd9830b --- /dev/null +++ b/parser/testdata/tkt1644.test @@ -0,0 +1,29 @@ +==== tkt1644-1.1 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + CREATE TABLE t2(b); + INSERT INTO t2 VALUES(99); + CREATE TEMP VIEW v1 AS SELECT * FROM t1; + SELECT * FROM v1; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 ok +stmt 78 err 1 -1 109 no such table: t2 +stmt 109 ok +stmt 154 err 1 -1 176 no such table: v1 +==== tkt1644-1.2 + + DROP VIEW v1; + CREATE TEMP VIEW v1 AS SELECT * FROM t2; + SELECT * FROM v1; +---- +stmt 0 err 1 -1 18 no such view: v1 +stmt 18 ok +stmt 63 err 1 -1 85 no such table: v1 +==== tkt1644-1.3 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 diff --git a/parser/testdata/tkt1667.metadata.json b/parser/testdata/tkt1667.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1667.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1667.test b/parser/testdata/tkt1667.test new file mode 100644 index 0000000..1ef7c1c --- /dev/null +++ b/parser/testdata/tkt1667.test @@ -0,0 +1,5 @@ +==== tkt1667-4.1 + + DELETE FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 diff --git a/parser/testdata/tkt1873.metadata.json b/parser/testdata/tkt1873.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt1873.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt1873.test b/parser/testdata/tkt1873.test new file mode 100644 index 0000000..4122411 --- /dev/null +++ b/parser/testdata/tkt1873.test @@ -0,0 +1,29 @@ +==== tkt1873-1.1 + + CREATE TABLE t1(x, y); + ATTACH 'test2.db' AS aux; + CREATE TABLE aux.t2(x, y); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t2 VALUES(5, 6); + INSERT INTO t2 VALUES(7, 8); +---- +stmt 0 ok +stmt 27 ok +stmt 57 err 1 75 82 unknown database aux +stmt 88 err 1 -1 121 no such table: t1 +stmt 121 err 1 -1 154 no such table: t1 +stmt 154 err 1 -1 187 no such table: t2 +stmt 187 err 1 -1 220 no such table: t2 +==== tkt1873-1.4 + + select * from t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== tkt1873-1.5 + + ATTACH 'test2.db' AS aux; + select * from t2; +---- +stmt 0 ok +stmt 30 err 1 -1 52 no such table: t2 diff --git a/parser/testdata/tkt2141.metadata.json b/parser/testdata/tkt2141.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt2141.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt2141.test b/parser/testdata/tkt2141.test new file mode 100644 index 0000000..ba46fa1 --- /dev/null +++ b/parser/testdata/tkt2141.test @@ -0,0 +1,39 @@ +==== tkt2141-1.1 + + CREATE TABLE tab1 (t1_id integer PRIMARY KEY, t1_desc); + INSERT INTO tab1 VALUES(1,'rec 1 tab 1'); + CREATE TABLE tab2 (t2_id integer PRIMARY KEY, t2_id_t1, t2_desc); + INSERT INTO tab2 VALUES(1,1,'rec 1 tab 2'); + CREATE TABLE tab3 (t3_id integer PRIMARY KEY, t3_id_t2, t3_desc); + INSERT INTO tab3 VALUES(1,1,'aa'); + SELECT * + FROM tab1 t1 LEFT JOIN tab2 t2 ON t1.t1_id = t2.t2_id_t1 + WHERE t2.t2_id IN + (SELECT t2_id FROM tab2, tab3 ON t2_id = t3_id_t2 + WHERE t3_id IN (1,2) GROUP BY t2_id); +---- +stmt 0 ok +stmt 62 err 1 -1 110 no such table: tab1 +stmt 110 ok +stmt 182 err 1 -1 232 no such table: tab2 +stmt 232 ok +stmt 304 err 1 -1 345 no such table: tab3 +stmt 345 err 1 -1 559 no such table: tab1 +==== tkt2141-1.2 + + SELECT * + FROM tab1 t1 LEFT JOIN tab2 t2 ON t1.t1_id = t2.t2_id_t1 + WHERE t2.t2_id IN + (SELECT t2_id FROM tab2, tab3 ON t2_id = t3_id_t2 + WHERE t3_id IN (1,2)); +---- +stmt 0 err 1 -1 199 no such table: tab1 +==== tkt2141-1.3 + + SELECT * + FROM tab1 t1 LEFT JOIN tab2 t2 + WHERE t2.t2_id IN + (SELECT t2_id FROM tab2, tab3 ON t2_id = t3_id_t2 + WHERE t3_id IN (1,2)); +---- +stmt 0 err 1 -1 173 no such table: tab1 diff --git a/parser/testdata/tkt2192.metadata.json b/parser/testdata/tkt2192.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt2192.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt2192.test b/parser/testdata/tkt2192.test new file mode 100644 index 0000000..e775b2d --- /dev/null +++ b/parser/testdata/tkt2192.test @@ -0,0 +1,131 @@ +==== tkt2192-1.1 + + -- Raw data (RBS) -------- + + create table records ( + date real, + type text, + description text, + value integer, + acc_name text, + acc_no text + ); + + -- Direct Debits ---------------- + create view direct_debits as + select * from records where type = 'D/D'; + + create view monthly_direct_debits as + select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value + from direct_debits + group by strftime('%Y-%m', date); + + -- Expense Categories --------------- + create view energy as + select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value + from direct_debits + where description like '%NPOWER%' + group by strftime('%Y-%m', date); + + create view phone_internet as + select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value + from direct_debits + where description like '%BT DIRECT%' + or description like '%SUPANET%' + or description like '%ORANGE%' + group by strftime('%Y-%m', date); + + create view credit_cards as + select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value + from direct_debits where description like '%VISA%' + group by strftime('%Y-%m', date); + + -- Overview --------------------- + + create view expense_overview as + select 'Energy' as expense, date, value from energy + union + select 'Phone/Internet' as expense, date, value from phone_internet + union + select 'Credit Card' as expense, date, value from credit_cards; + + create view jan as + select 'jan', expense, value from expense_overview + where date like '%-01'; + + create view nov as + select 'nov', expense, value from expense_overview + where date like '%-11'; + + create view summary as + select * from jan join nov on (jan.expense = nov.expense); +---- +stmt 0 ok +stmt 228 ok +stmt 352 ok +stmt 539 ok +stmt 794 ok +stmt 1101 ok +stmt 1311 ok +stmt 1621 ok +stmt 1737 ok +stmt 1853 ok +==== tkt2192-2.1 + + CREATE TABLE t1(a,b); + CREATE VIEW v1 AS + SELECT * FROM t1 WHERE b%7=0 UNION SELECT * FROM t1 WHERE b%5=0; + INSERT INTO t1 VALUES(1,7); + INSERT INTO t1 VALUES(2,10); + INSERT INTO t1 VALUES(3,14); + INSERT INTO t1 VALUES(4,15); + INSERT INTO t1 VALUES(1,16); + INSERT INTO t1 VALUES(2,17); + INSERT INTO t1 VALUES(3,20); + INSERT INTO t1 VALUES(4,21); + INSERT INTO t1 VALUES(1,22); + INSERT INTO t1 VALUES(2,24); + INSERT INTO t1 VALUES(3,25); + INSERT INTO t1 VALUES(4,26); + INSERT INTO t1 VALUES(1,27); + + SELECT b FROM v1 ORDER BY b; +---- +stmt 0 ok +stmt 26 ok +stmt 119 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 184 no such table: t1 +stmt 184 err 1 -1 217 no such table: t1 +stmt 217 err 1 -1 250 no such table: t1 +stmt 250 err 1 -1 283 no such table: t1 +stmt 283 err 1 -1 316 no such table: t1 +stmt 316 err 1 -1 349 no such table: t1 +stmt 349 err 1 -1 382 no such table: t1 +stmt 382 err 1 -1 415 no such table: t1 +stmt 415 err 1 -1 448 no such table: t1 +stmt 448 err 1 -1 481 no such table: t1 +stmt 481 err 1 -1 514 no such table: t1 +stmt 514 err 1 -1 547 no such table: t1 +stmt 547 err 1 -1 582 no such table: v1 +==== tkt2192-2.2 + + SELECT * FROM v1 ORDER BY a, b; +---- +stmt 0 err 1 -1 36 no such table: v1 +==== tkt2192-2.3 + + SELECT x.a || '/' || x.b || '/' || y.b + FROM v1 AS x JOIN v1 AS y ON x.a=y.a AND x.b0; + SELECT count(*), sum(x) FROM t1; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 67 no such table: t1 +==== tkt2767-1.3 + + UPDATE t1 SET x=x+1; + SELECT count(*), sum(x) FROM t1; +---- +stmt 0 err 1 -1 25 no such table: t1 +stmt 25 err 1 -1 62 no such table: t1 +==== tkt2767-1.4 + + INSERT INTO t1 SELECT x+32 FROM t1; + SELECT count(*), sum(x) FROM t1; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 77 no such table: t1 diff --git a/parser/testdata/tkt2817.metadata.json b/parser/testdata/tkt2817.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt2817.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt2817.test b/parser/testdata/tkt2817.test new file mode 100644 index 0000000..4d0265d --- /dev/null +++ b/parser/testdata/tkt2817.test @@ -0,0 +1,34 @@ +==== tkt2817-1.0 + + CREATE TEMP TABLE tbl(a, b, c); + -- INSERT INTO tbl VALUES(1, 'abc', 'def'); + -- INSERT INTO tbl VALUES(2, 'ghi', 'jkl'); +---- +stmt 0 ok +==== tkt2817-1.1 + + CREATE TABLE main.tbl(a, b, c); + CREATE INDEX main.tbli ON tbl(a, b, c); + INSERT INTO main.tbl SELECT a, b, c FROM temp.tbl; +---- +stmt 0 ok +stmt 36 err 1 -1 81 no such table: main.tbl +stmt 81 err 1 -1 136 no such table: main.tbl +==== tkt2817-2.0 + + CREATE TEMP TABLE tmp(a, b, c); + INSERT INTO tmp VALUES(1, 'abc', 'def'); + INSERT INTO tmp VALUES(2, 'ghi', 'jkl'); +---- +stmt 0 ok +stmt 36 err 1 -1 81 no such table: tmp +stmt 81 err 1 -1 126 no such table: tmp +==== tkt2817-2.1 + + CREATE TABLE main.tbl(a, b, c); + CREATE INDEX main.tbli ON tbl(a, b, c); + INSERT INTO main.tbl SELECT a, b, c FROM temp.tmp; +---- +stmt 0 ok +stmt 36 err 1 -1 81 no such table: main.tbl +stmt 81 err 1 -1 136 no such table: main.tbl diff --git a/parser/testdata/tkt2822.metadata.json b/parser/testdata/tkt2822.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt2822.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt2822.test b/parser/testdata/tkt2822.test new file mode 100644 index 0000000..39ad3b1 --- /dev/null +++ b/parser/testdata/tkt2822.test @@ -0,0 +1,224 @@ +==== tkt2822-0.1 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(a, b, c); + + INSERT INTO t1 VALUES(1, 3, 9); + INSERT INTO t1 VALUES(3, 9, 27); + INSERT INTO t1 VALUES(5, 15, 45); + + INSERT INTO t2 VALUES(2, 6, 18); + INSERT INTO t2 VALUES(4, 12, 36); + INSERT INTO t2 VALUES(6, 18, 54); +---- +stmt 0 ok +stmt 30 ok +stmt 60 err 1 -1 97 no such table: t1 +stmt 97 err 1 -1 134 no such table: t1 +stmt 134 err 1 -1 172 no such table: t1 +stmt 172 err 1 -1 210 no such table: t2 +stmt 210 err 1 -1 248 no such table: t2 +stmt 248 err 1 -1 286 no such table: t2 +==== tkt2822-1.1 + + SELECT a, b, c FROM t1 UNION ALL SELECT a, b, c FROM t2 ORDER BY 1; +---- +stmt 0 err 1 -1 72 no such table: t2 +==== tkt2822-1.2 + + SELECT a, CAST (b AS TEXT), c FROM t1 + UNION ALL + SELECT a, b, c FROM t2 + ORDER BY 2; +---- +stmt 0 err 1 -1 106 no such table: t2 +==== tkt2822-2.1 + + SELECT a, b, c FROM t1 UNION ALL SELECT a, b, c FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 72 no such table: t2 +==== tkt2822-2.2 + + SELECT a, CAST (b AS TEXT) AS x, c FROM t1 + UNION ALL + SELECT a, b, c FROM t2 + ORDER BY x; +---- +stmt 0 err 1 -1 111 no such table: t2 +==== tkt2822-2.3 + + SELECT t1.a, b, c FROM t1 UNION ALL SELECT t2.a, b, c FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 78 no such table: t2 +==== tkt2822-3.1 + + SELECT a, CAST (b AS TEXT) AS x, c FROM t1 + UNION ALL + SELECT a, b, c FROM t2 + ORDER BY CAST (b AS TEXT); +---- +stmt 0 err 1 -1 126 no such table: t2 +==== tkt2822-3.2 + + SELECT t1.a, b, c FROM t1 UNION ALL SELECT t2.a, b, c FROM t2 ORDER BY t1.a; +---- +stmt 0 err 1 -1 81 no such table: t2 +==== tkt2822-3.3 + + SELECT a, b, c FROM t1 UNION ALL SELECT a AS x, b, c FROM t2 ORDER BY x; +---- +stmt 0 err 1 -1 77 no such table: t2 +==== tkt2822-3.5 + + SELECT a, b, c FROM t2 + UNION ALL + SELECT a AS b, CAST (b AS TEXT) AS a, c FROM t1 + ORDER BY a; +---- +stmt 0 err 1 -1 116 no such table: t1 +==== tkt2822-4.1 + + SELECT a, b, c FROM t1 UNION ALL SELECT a, b, c FROM t2 ORDER BY x +---- +stmt 0 err 1 -1 72 no such table: t2 +==== tkt2822-4.2 + + SELECT a, CAST (b AS TEXT) AS x, c FROM t1 + UNION ALL + SELECT a, b, c FROM t2 + ORDER BY CAST (b AS INTEGER); +---- +stmt 0 err 1 -1 129 no such table: t2 +==== tkt2822-5.1 + + CREATE TABLE t3(a,b); + INSERT INTO t3 VALUES(1,8); + INSERT INTO t3 VALUES(9,2); + + SELECT a AS b FROM t3 ORDER BY b; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t3 +stmt 58 err 1 -1 90 no such table: t3 +stmt 90 err 1 -1 129 no such table: t3 +==== tkt2822-5.5 + + SELECT a AS b FROM t3 ORDER BY +b; +---- +stmt 0 err 1 -1 39 no such table: t3 +==== tkt2822-6.1 + + CREATE TABLE t6a(p,q); + INSERT INTO t6a VALUES(1,8); + INSERT INTO t6a VALUES(9,2); + CREATE TABLE t6b(x,y); + INSERT INTO t6b VALUES(1,7); + INSERT INTO t6b VALUES(7,2); + + SELECT p, q FROM t6a UNION ALL SELECT x, y FROM t6b ORDER BY 1, 2 +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t6a +stmt 60 err 1 -1 93 no such table: t6a +stmt 93 ok +stmt 120 err 1 -1 153 no such table: t6b +stmt 153 err 1 -1 186 no such table: t6b +stmt 186 err 1 -1 258 no such table: t6b +==== tkt2822-6.2 + + SELECT p PX, q QX FROM t6a UNION ALL SELECT x XX, y YX FROM t6b + ORDER BY PX, YX +---- +stmt 0 err 1 -1 89 no such table: t6b +==== tkt2822-6.3 + + SELECT p PX, q QX FROM t6a UNION ALL SELECT x XX, y YX FROM t6b + ORDER BY XX, QX +---- +stmt 0 err 1 -1 89 no such table: t6b +==== tkt2822-6.4 + + SELECT p PX, q QX FROM t6a UNION ALL SELECT x XX, y YX FROM t6b + ORDER BY QX, XX +---- +stmt 0 err 1 -1 89 no such table: t6b +==== tkt2822-6.5 + + SELECT p PX, q QX FROM t6a UNION ALL SELECT x XX, y YX FROM t6b + ORDER BY t6b.x, QX +---- +stmt 0 err 1 -1 92 no such table: t6b +==== tkt2822-6.6 + + SELECT p PX, q QX FROM t6a UNION ALL SELECT x XX, y YX FROM t6b + ORDER BY t6a.q, XX +---- +stmt 0 err 1 -1 92 no such table: t6b +==== tkt2822-7.2.1 + + SELECT * FROM t7 ORDER BY 1, 0; +---- +stmt 0 err 1 -1 36 no such table: t7 +==== tkt2822-7.2.2 + + SELECT * FROM t7 ORDER BY 1, 26; +---- +stmt 0 err 1 -1 37 no such table: t7 +==== tkt2822-7.2.3 + + SELECT * FROM t7 ORDER BY 1, 65536; +---- +stmt 0 err 1 -1 40 no such table: t7 +==== tkt2822-7.3 + + SELECT * FROM t7 ORDER BY 1, 2, 0; +---- +stmt 0 err 1 -1 39 no such table: t7 +==== tkt2822-7.4 + + SELECT * FROM t7 ORDER BY 1, 2, 3, 0; +---- +stmt 0 err 1 -1 42 no such table: t7 +==== tkt2822-7.9 + + SELECT * FROM t7 ORDER BY 1, 2, 3, 4, 5, 6, 7, 8, 0; +---- +stmt 0 err 1 -1 57 no such table: t7 +==== tkt2822-7.10 + + SELECT * FROM t7 ORDER BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 0; +---- +stmt 0 err 1 -1 60 no such table: t7 +==== tkt2822-7.11 + + SELECT * FROM t7 ORDER BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0; +---- +stmt 0 err 1 -1 64 no such table: t7 +==== tkt2822-7.12 + + SELECT * FROM t7 ORDER BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 0; +---- +stmt 0 err 1 -1 68 no such table: t7 +==== tkt2822-7.13 + + SELECT * FROM t7 ORDER BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 0; +---- +stmt 0 err 1 -1 72 no such table: t7 +==== tkt2822-7.20 + + SELECT * FROM t7 ORDER BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11,12,13,14,15,16,17,18,19, 0 +---- +stmt 0 err 1 -1 121 no such table: t7 +==== tkt2822-7.21 + + SELECT * FROM t7 ORDER BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11,12,13,14,15,16,17,18,19, 20, 0 +---- +stmt 0 err 1 -1 125 no such table: t7 +==== tkt2822-7.22 + + SELECT * FROM t7 ORDER BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11,12,13,14,15,16,17,18,19, 20, 21, 0 +---- +stmt 0 err 1 -1 129 no such table: t7 diff --git a/parser/testdata/tkt2832.metadata.json b/parser/testdata/tkt2832.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt2832.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt2832.test b/parser/testdata/tkt2832.test new file mode 100644 index 0000000..58c7624 --- /dev/null +++ b/parser/testdata/tkt2832.test @@ -0,0 +1,53 @@ +==== tkt2832-1.1 + + CREATE TABLE t1(a PRIMARY KEY); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(3); +---- +stmt 0 ok +stmt 36 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 126 no such table: t1 +==== tkt2832-1.2 + + UPDATE OR REPLACE t1 SET a = 1; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 58 no such table: t1 +==== tkt2832-2.1 + + CREATE TABLE t2(a, b); + CREATE TRIGGER t2_t AFTER UPDATE ON t2 BEGIN + DELETE FROM t2 WHERE a = new.a + 1; + END; + INSERT INTO t2 VALUES(1, 2); + INSERT INTO t2 VALUES(2, 3); +---- +stmt 0 ok +stmt 27 err 1 -1 76 no such table: main.t2 +stmt 127 err 1 -1 160 no such table: t2 +stmt 160 err 1 -1 193 no such table: t2 +==== tkt2832-2.2 + + UPDATE t2 SET b = 5 +---- +stmt 0 err 1 -1 26 no such table: t2 +==== tkt2832-3.1 + + CREATE TABLE t3(a, b); + CREATE TRIGGER t3_t AFTER DELETE ON t3 BEGIN + DELETE FROM t3 WHERE a = old.a + 1; + END; + INSERT INTO t3 VALUES(1, 2); + INSERT INTO t3 VALUES(2, 3); +---- +stmt 0 ok +stmt 27 err 1 -1 76 no such table: main.t3 +stmt 127 err 1 -1 160 no such table: t3 +stmt 160 err 1 -1 193 no such table: t3 +==== tkt2832-3.2 + DELETE FROM t3 WHERE 1 +---- +stmt 0 err 1 -1 24 no such table: t3 diff --git a/parser/testdata/tkt2920.metadata.json b/parser/testdata/tkt2920.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt2920.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt2920.test b/parser/testdata/tkt2920.test new file mode 100644 index 0000000..1fe6d08 --- /dev/null +++ b/parser/testdata/tkt2920.test @@ -0,0 +1,4 @@ +==== tkt2920-1.9 +COMMIT +---- +stmt 0 ok diff --git a/parser/testdata/tkt2942.metadata.json b/parser/testdata/tkt2942.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt2942.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt2942.test b/parser/testdata/tkt2942.test new file mode 100644 index 0000000..e6e71ad --- /dev/null +++ b/parser/testdata/tkt2942.test @@ -0,0 +1,30 @@ +==== tkt2942.1 + + create table t1(num int); + insert into t1 values (2); + insert into t1 values (1); + insert into t1 values (3); + insert into t1 values (4); + SELECT group_concat(num) FROM (SELECT num FROM t1 ORDER BY num DESC); +---- +stmt 0 ok +stmt 30 err 1 -1 61 no such table: t1 +stmt 61 err 1 -1 92 no such table: t1 +stmt 92 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 154 no such table: t1 +stmt 154 err 1 -1 228 no such table: t1 +==== tkt2942.2 + + SELECT group_concat(num) FROM (SELECT num FROM t1 ORDER BY num); +---- +stmt 0 err 1 -1 69 no such table: t1 +==== tkt2942.3 + + SELECT group_concat(num) FROM (SELECT num FROM t1); +---- +stmt 0 err 1 -1 56 no such table: t1 +==== tkt2942.4 + + SELECT group_concat(num) FROM (SELECT num FROM t1 ORDER BY rowid DESC); +---- +stmt 0 err 1 -1 76 no such table: t1 diff --git a/parser/testdata/tkt3080.metadata.json b/parser/testdata/tkt3080.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3080.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3080.test b/parser/testdata/tkt3080.test new file mode 100644 index 0000000..9cdb245 --- /dev/null +++ b/parser/testdata/tkt3080.test @@ -0,0 +1,4 @@ +==== tkt3080.11 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 17 no such table: t2 diff --git a/parser/testdata/tkt3121.metadata.json b/parser/testdata/tkt3121.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3121.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3121.test b/parser/testdata/tkt3121.test new file mode 100644 index 0000000..fff9c47 --- /dev/null +++ b/parser/testdata/tkt3121.test @@ -0,0 +1,30 @@ +==== vtabD-1.1 + + PRAGMA encoding = 'utf16'; + + CREATE TABLE r1(field); + CREATE TABLE r2(col PRIMARY KEY, descr); + + INSERT INTO r1 VALUES('abcd'); + INSERT INTO r2 VALUES('abcd', 'A nice description'); + INSERT INTO r2 VALUES('efgh', 'Another description'); + + CREATE VIRTUAL TABLE t1 USING echo(r1); + CREATE VIRTUAL TABLE t2 USING echo(r2); +---- +stmt 0 ok +stmt 31 ok +stmt 60 ok +stmt 105 err 1 -1 141 no such table: r1 +stmt 141 err 1 -1 198 no such table: r2 +stmt 198 err 1 -1 256 no such table: r2 +stmt 256 ok +stmt 301 ok +==== vtabD-1.2 + + select + t1.field as Field, + t2.descr as Descr + from t1 inner join t2 on t1.field = t2.col order by t1.field +---- +stmt 0 err 1 -1 126 no such table: t1 diff --git a/parser/testdata/tkt3201.metadata.json b/parser/testdata/tkt3201.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3201.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3201.test b/parser/testdata/tkt3201.test new file mode 100644 index 0000000..a3949f0 --- /dev/null +++ b/parser/testdata/tkt3201.test @@ -0,0 +1,18 @@ +==== tkt3201-1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); +---- +stmt 0 ok +stmt 52 err 1 -1 89 no such table: t1 +stmt 89 err 1 -1 126 no such table: t1 +==== tkt3201-2 + + SELECT l.a, r.a FROM t1 AS l, t1 AS r WHERE l.a < r.a; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== tkt3201-7 + SELECT a, b, c, d FROM t1, t3 WHERE a < c +---- +stmt 0 err 1 -1 43 no such table: t1 diff --git a/parser/testdata/tkt3292.metadata.json b/parser/testdata/tkt3292.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3292.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3292.test b/parser/testdata/tkt3292.test new file mode 100644 index 0000000..1b9f0b9 --- /dev/null +++ b/parser/testdata/tkt3292.test @@ -0,0 +1,33 @@ +==== tkt3292-1.2 + + INSERT INTO t1 VALUES(3, 0); + INSERT INTO t1 VALUES(4, 2); + SELECT * FROM t1 WHERE b>=1; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 99 no such table: t1 +==== tkt3292-2.1 + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b, c, d); + INSERT INTO t2 VALUES(0, 1, 'hello', x'012345'); + INSERT INTO t2 VALUES(1, 1, 'hello', x'012345'); + INSERT INTO t2 VALUES(2, 1, 'hello', x'012345'); + CREATE INDEX i2 ON t2(b,c,d); + SELECT a FROM t2 WHERE b=1 AND c='hello' AND d>=x'012345'; +---- +stmt 0 ok +stmt 53 err 1 -1 106 no such table: t2 +stmt 106 err 1 -1 159 no such table: t2 +stmt 159 err 1 -1 212 no such table: t2 +stmt 212 err 1 -1 246 no such table: main.t2 +stmt 246 err 1 -1 309 no such table: t2 +==== tkt3292-2.2 + + INSERT INTO t2 VALUES(3, 1, 'hello', x'012344'); + INSERT INTO t2 VALUES(4, 1, 'hello', x'012346'); + SELECT a FROM t2 WHERE b=1 AND c='hello' AND d>=x'012345'; +---- +stmt 0 err 1 -1 53 no such table: t2 +stmt 53 err 1 -1 106 no such table: t2 +stmt 106 err 1 -1 169 no such table: t2 diff --git a/parser/testdata/tkt3298.metadata.json b/parser/testdata/tkt3298.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3298.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3298.test b/parser/testdata/tkt3298.test new file mode 100644 index 0000000..8dd85d8 --- /dev/null +++ b/parser/testdata/tkt3298.test @@ -0,0 +1,69 @@ +==== tkt3298-1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); + INSERT INTO t1 VALUES(0, 1); + INSERT INTO t1 VALUES(1, 1); + INSERT INTO t1 VALUES(2, 1); + CREATE VIEW v1 AS SELECT a AS x, b+1 AS y FROM t1; + CREATE TRIGGER r1 INSTEAD OF UPDATE ON v1 + BEGIN + UPDATE t1 SET b=new.y-1 WHERE a=new.x; + END; + CREATE TRIGGER r2 INSTEAD OF DELETE ON v1 + BEGIN + DELETE FROM t1 WHERE a=old.x; + END; + SELECT * FROM v1 ORDER BY x; +---- +stmt 0 ok +stmt 51 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 117 no such table: t1 +stmt 117 err 1 -1 150 no such table: t1 +stmt 150 ok +stmt 205 err 1 -1 263 no such table: main.v1 +stmt 321 err 1 -1 379 no such table: main.v1 +stmt 428 err 1 -1 461 no such table: v1 +==== tkt3298-1.2 + + UPDATE v1 SET y=3 WHERE x=0; + SELECT * FROM v1 ORDER by x; +---- +stmt 0 err 1 -1 33 no such table: v1 +stmt 33 err 1 -1 66 no such table: v1 +==== tkt3298-1.3 + + UPDATE v1 SET y=4 WHERE v1.x=2; + SELECT * FROM v1 ORDER by x; +---- +stmt 0 err 1 -1 36 no such table: v1 +stmt 36 err 1 -1 69 no such table: v1 +==== tkt3298-1.4 + + DELETE FROM v1 WHERE x=1; + SELECT * FROM v1 ORDER BY x; +---- +stmt 0 err 1 -1 30 no such table: v1 +stmt 30 err 1 -1 63 no such table: v1 +==== tkt3298-1.5 + + DELETE FROM v1 WHERE v1.x=2; + SELECT * FROM v1 ORDER BY x; +---- +stmt 0 err 1 -1 33 no such table: v1 +stmt 33 err 1 -1 66 no such table: v1 +==== tkt3298-2.1 + + CREATE TABLE t2(p,q); + INSERT INTO t2 VALUES(1,11); + INSERT INTO t2 VALUES(2,22); + CREATE TABLE t3(x,y); + INSERT INTO t3 VALUES(1,'one'); + + SELECT *, (SELECT z FROM (SELECT y AS z FROM t3 WHERE x=t1.a+1) ) FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 59 no such table: t2 +stmt 59 err 1 -1 92 no such table: t2 +stmt 92 ok +stmt 118 err 1 -1 154 no such table: t3 +stmt 154 err 1 -1 234 no such table: t1 diff --git a/parser/testdata/tkt3334.metadata.json b/parser/testdata/tkt3334.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3334.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3334.test b/parser/testdata/tkt3334.test new file mode 100644 index 0000000..0239aa8 --- /dev/null +++ b/parser/testdata/tkt3334.test @@ -0,0 +1,69 @@ +==== tkt3334-1.0 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,934); + INSERT INTO t1 VALUES(2,221); + INSERT INTO t1 VALUES(1,372); + INSERT INTO t1 VALUES(3,552); + INSERT INTO t1 VALUES(1,719); + INSERT INTO t1 VALUES(4,102); + SELECT * FROM t1 ORDER BY b; +---- +stmt 0 ok +stmt 26 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 196 no such table: t1 +stmt 196 err 1 -1 230 no such table: t1 +stmt 230 err 1 -1 263 no such table: t1 +==== tkt3334-1.1 + + SELECT a FROM (SELECT a FROM t1 ORDER BY b LIMIT 2) WHERE a=1; +---- +stmt 0 err 1 -1 67 no such table: t1 +==== tkt3334-1.2 + + SELECT count(*) FROM (SELECT a FROM t1 ORDER BY b LIMIT 2) WHERE a=1; +---- +stmt 0 err 1 -1 74 no such table: t1 +==== tkt3334-1.3 + + SELECT a FROM (SELECT a FROM t1 ORDER BY b LIMIT 3) WHERE a=1; +---- +stmt 0 err 1 -1 67 no such table: t1 +==== tkt3334-1.4 + + SELECT count(*) FROM (SELECT a FROM t1 ORDER BY b LIMIT 3) WHERE a=1; +---- +stmt 0 err 1 -1 74 no such table: t1 +==== tkt3334-1.5 + + SELECT a FROM (SELECT a FROM t1 ORDER BY b LIMIT 99) WHERE a=1; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== tkt3334-1.6 + + SELECT count(*) FROM (SELECT a FROM t1 ORDER BY b LIMIT 99) WHERE a=1; +---- +stmt 0 err 1 -1 75 no such table: t1 +==== tkt3334-1.7 + + SELECT a FROM (SELECT a FROM t1 ORDER BY b) WHERE a=1; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== tkt3334-1.8 + + SELECT count(*) FROM (SELECT a FROM t1 ORDER BY b) WHERE a=1; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== tkt3334-1.9 + + SELECT a FROM (SELECT a FROM t1) WHERE a=1; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== tkt3334-1.10 + + SELECT count(*) FROM (SELECT a FROM t1) WHERE a=1; +---- +stmt 0 err 1 -1 55 no such table: t1 diff --git a/parser/testdata/tkt3346.metadata.json b/parser/testdata/tkt3346.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3346.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3346.test b/parser/testdata/tkt3346.test new file mode 100644 index 0000000..401da7c --- /dev/null +++ b/parser/testdata/tkt3346.test @@ -0,0 +1,10 @@ +==== tkt3346-2.1 + + CREATE TABLE t2(a); + INSERT INTO t2 VALUES(1); + + SELECT * FROM (SELECT * FROM t1 WHERE 1=x.a) AS x; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t2 +stmt 54 err 1 -1 114 no such table: t1 diff --git a/parser/testdata/tkt3357.metadata.json b/parser/testdata/tkt3357.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3357.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3357.test b/parser/testdata/tkt3357.test new file mode 100644 index 0000000..9850147 --- /dev/null +++ b/parser/testdata/tkt3357.test @@ -0,0 +1,45 @@ +==== tkt3357-1.1 + + create table a(id integer primary key, b_id integer, myvalue varchar); + create table b(id integer primary key, bvalue varchar); + insert into a(b_id, myvalue) values(1,'Test'); + insert into a(b_id, myvalue) values(1,'Test2'); + insert into a(b_id, myvalue) values(1,'Test3'); + insert into b(bvalue) values('btest'); +---- +stmt 0 ok +stmt 75 ok +stmt 135 err 1 -1 186 no such table: a +stmt 186 err 1 -1 238 no such table: a +stmt 238 err 1 -1 290 no such table: a +stmt 290 err 1 -1 333 no such table: b +==== tkt3357-1.2 + + SELECT cc.id, cc.b_id, cc.myvalue, dd.bvalue + FROM ( + SELECT DISTINCT a.id, a.b_id, a.myvalue FROM a + INNER JOIN b ON a.b_id = b.id WHERE b.bvalue = 'btest' + ) cc + LEFT OUTER JOIN b dd ON cc.b_id = dd.id +---- +stmt 0 err 1 -1 229 no such table: a +==== tkt3357-1.3 + + SELECT cc.id, cc.b_id, cc.myvalue + FROM ( + SELECT a.id, a.b_id, a.myvalue + FROM a, b WHERE a.b_id = b.id + ) cc + LEFT OUTER JOIN b dd ON cc.b_id = dd.id +---- +stmt 0 err 1 -1 177 no such table: a +==== tkt3357-1.4 + + SELECT cc.id, cc.b_id, cc.myvalue + FROM ( + SELECT DISTINCT a.id, a.b_id, a.myvalue + FROM a, b WHERE a.b_id = b.id + ) cc + LEFT OUTER JOIN b dd ON cc.b_id = dd.id +---- +stmt 0 err 1 -1 186 no such table: a diff --git a/parser/testdata/tkt3419.metadata.json b/parser/testdata/tkt3419.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3419.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3419.test b/parser/testdata/tkt3419.test new file mode 100644 index 0000000..bbb8e65 --- /dev/null +++ b/parser/testdata/tkt3419.test @@ -0,0 +1,64 @@ +==== tkt3419-1.1 + + create table a(id integer primary key); + create table b(id integer primary key, a_id integer); + create table c(id integer primary key, b_id integer); + + insert into a values (1); + insert into a values (2); + + insert into b values (3, 1); + insert into b values (4, 1); + insert into b values (5, 1); + insert into b values (6, 1); + insert into b values (9, 2); + + insert into c values (4, 3); + insert into c values (5, 5); + insert into c values (6, 4); + insert into c values (7, 6); + insert into c values (8, 9); + + select * FROM a, b, c WHERE a.id=2 AND b.a_id = a.id AND b.id=c.b_id; +---- +stmt 0 ok +stmt 44 ok +stmt 102 ok +stmt 160 err 1 -1 193 no such table: a +stmt 193 err 1 -1 223 no such table: a +stmt 223 err 1 -1 259 no such table: b +stmt 259 err 1 -1 292 no such table: b +stmt 292 err 1 -1 325 no such table: b +stmt 325 err 1 -1 358 no such table: b +stmt 358 err 1 -1 391 no such table: b +stmt 391 err 1 -1 427 no such table: c +stmt 427 err 1 -1 460 no such table: c +stmt 460 err 1 -1 493 no such table: c +stmt 493 err 1 -1 526 no such table: c +stmt 526 err 1 -1 559 no such table: c +stmt 559 err 1 -1 636 no such table: a +==== tkt3419-1.2 + + select * FROM a, c, b WHERE a.id=2 AND b.a_id = a.id AND b.id=c.b_id; +---- +stmt 0 err 1 -1 74 no such table: a +==== tkt3419-1.3 + + select * FROM b, a, c WHERE a.id=2 AND b.a_id = a.id AND b.id=c.b_id; +---- +stmt 0 err 1 -1 74 no such table: b +==== tkt3419-1.4 + + select * FROM b, c, a WHERE a.id=2 AND b.a_id = a.id AND b.id=c.b_id; +---- +stmt 0 err 1 -1 74 no such table: b +==== tkt3419-1.5 + + select * FROM c, a, b WHERE a.id=2 AND b.a_id = a.id AND b.id=c.b_id; +---- +stmt 0 err 1 -1 74 no such table: c +==== tkt3419-1.6 + + select * FROM c, b, a WHERE a.id=2 AND b.a_id = a.id AND b.id=c.b_id; +---- +stmt 0 err 1 -1 74 no such table: c diff --git a/parser/testdata/tkt3424.metadata.json b/parser/testdata/tkt3424.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3424.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3424.test b/parser/testdata/tkt3424.test new file mode 100644 index 0000000..ff26ec5 --- /dev/null +++ b/parser/testdata/tkt3424.test @@ -0,0 +1,40 @@ +==== tkt3424-1.1 + + CREATE TABLE names(id INTEGER, data TEXT, code TEXT); + INSERT INTO names VALUES(1,'E1','AAA'); + INSERT INTO names VALUES(2,NULL,'BBB'); + + CREATE TABLE orig(code TEXT, data TEXT); + INSERT INTO orig VALUES('AAA','E1'); + INSERT INTO orig VALUES('AAA','E2'); + INSERT INTO orig VALUES('AAA','E3'); + INSERT INTO orig VALUES('AAA','E4'); + INSERT INTO orig VALUES('AAA','E5'); +---- +stmt 0 ok +stmt 58 err 1 -1 102 no such table: names +stmt 102 err 1 -1 146 no such table: names +stmt 146 ok +stmt 192 err 1 -1 233 no such table: orig +stmt 233 err 1 -1 274 no such table: orig +stmt 274 err 1 -1 315 no such table: orig +stmt 315 err 1 -1 356 no such table: orig +stmt 356 err 1 -1 397 no such table: orig +==== tkt3424-1.2 + + SELECT * FROM + names LEFT OUTER JOIN orig + ON names.data = orig.data AND names.code = orig.code; +---- +stmt 0 err 1 -1 108 no such table: names +==== tkt3424-1.3 + CREATE INDEX udx_orig_code_data ON orig(code, data) +---- +stmt 0 err 1 -1 53 no such table: main.orig +==== tkt3424-1.4 + + SELECT * FROM + names LEFT OUTER JOIN orig + ON names.data = orig.data AND names.code = orig.code; +---- +stmt 0 err 1 -1 108 no such table: names diff --git a/parser/testdata/tkt3442.metadata.json b/parser/testdata/tkt3442.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3442.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3442.test b/parser/testdata/tkt3442.test new file mode 100644 index 0000000..06c7597 --- /dev/null +++ b/parser/testdata/tkt3442.test @@ -0,0 +1,11 @@ +==== tkt3442-1.1 + + CREATE TABLE listhash( + key INTEGER PRIMARY KEY, + id TEXT, + node INTEGER + ); + CREATE UNIQUE INDEX ididx ON listhash(id); +---- +stmt 0 ok +stmt 104 err 1 -1 152 no such table: main.listhash diff --git a/parser/testdata/tkt3461.metadata.json b/parser/testdata/tkt3461.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3461.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3461.test b/parser/testdata/tkt3461.test new file mode 100644 index 0000000..a667165 --- /dev/null +++ b/parser/testdata/tkt3461.test @@ -0,0 +1,18 @@ +==== tkt3461-1.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t1 +==== tkt3461-1.2 + SELECT a, b+1 AS b_plus_one FROM t1 WHERE a=1 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== tkt3461-2.1 + + SELECT a, b+1 AS b_plus_one + FROM t1 + WHERE CASE WHEN a=1 THEN 1 ELSE b_plus_one END +---- +stmt 0 err 1 -1 99 no such table: t1 diff --git a/parser/testdata/tkt3493.metadata.json b/parser/testdata/tkt3493.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3493.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3493.test b/parser/testdata/tkt3493.test new file mode 100644 index 0000000..3152503 --- /dev/null +++ b/parser/testdata/tkt3493.test @@ -0,0 +1,158 @@ +==== tkt3493-1.1 + + BEGIN; + CREATE TABLE A (id INTEGER PRIMARY KEY AUTOINCREMENT, val TEXT); + INSERT INTO A VALUES(1,'123'); + INSERT INTO A VALUES(2,'456'); + CREATE TABLE B (id INTEGER PRIMARY KEY AUTOINCREMENT, val TEXT); + INSERT INTO B VALUES(1,1); + INSERT INTO B VALUES(2,2); + CREATE TABLE A_B (B_id INTEGER NOT NULL, A_id INTEGER); + INSERT INTO A_B VALUES(1,1); + INSERT INTO A_B VALUES(2,2); + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 80 err 1 -1 115 no such table: A +stmt 115 err 1 -1 150 no such table: A +stmt 150 ok +stmt 219 err 1 -1 250 no such table: B +stmt 250 err 1 -1 281 no such table: B +stmt 281 ok +stmt 341 err 1 -1 374 no such table: A_B +stmt 374 err 1 -1 407 no such table: A_B +stmt 407 ok +==== tkt3493-1.2 + + SELECT + CASE + WHEN B.val = 1 THEN 'XYZ' + ELSE A.val + END AS Col1 + FROM B + LEFT OUTER JOIN A_B ON B.id = A_B.B_id + LEFT OUTER JOIN A ON A.id = A_B.A_id + ORDER BY Col1 ASC; +---- +stmt 0 err 1 -1 221 no such table: B +==== tkt3493-1.3 + + SELECT DISTINCT + CASE + WHEN B.val = 1 THEN 'XYZ' + ELSE A.val + END AS Col1 + FROM B + LEFT OUTER JOIN A_B ON B.id = A_B.B_id + LEFT OUTER JOIN A ON A.id = A_B.A_id + ORDER BY Col1 ASC; +---- +stmt 0 err 1 -1 229 no such table: B +==== tkt3493-1.4 + + SELECT b.val, CASE WHEN b.val = 1 THEN 'xyz' ELSE b.val END AS col1 FROM b; +---- +stmt 0 err 1 -1 80 no such table: b +==== tkt3493-1.5 + + SELECT DISTINCT + b.val, + CASE WHEN b.val = 1 THEN 'xyz' ELSE b.val END AS col1 + FROM b; +---- +stmt 0 err 1 -1 108 no such table: b +==== tkt3493-1.6 + + SELECT DISTINCT + b.val, + CASE WHEN b.val = '1' THEN 'xyz' ELSE b.val END AS col1 + FROM b; +---- +stmt 0 err 1 -1 110 no such table: b +==== tkt3493-2.1 + + CREATE TABLE t1(a TEXT, b INT); + INSERT INTO t1 VALUES(123, 456); +---- +stmt 0 ok +stmt 36 err 1 -1 73 no such table: t1 +==== tkt3493-2.2.1 + SELECT a=123 FROM t1 GROUP BY a +---- +stmt 0 err 1 -1 33 no such table: t1 +==== tkt3493-2.2.2 + SELECT a=123 FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== tkt3493-2.2.3 + SELECT a='123' FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== tkt3493-2.2.4 + SELECT count(*), a=123 FROM t1 +---- +stmt 0 err 1 -1 32 no such table: t1 +==== tkt3493-2.2.5 + SELECT count(*), +a=123 FROM t1 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== tkt3493-2.3.3 + SELECT b='456' FROM t1 GROUP BY a +---- +stmt 0 err 1 -1 35 no such table: t1 +==== tkt3493-2.3.1 + SELECT b='456' FROM t1 GROUP BY b +---- +stmt 0 err 1 -1 35 no such table: t1 +==== tkt3493-2.3.2 + SELECT b='456' FROM t1 +---- +stmt 0 err 1 -1 24 no such table: t1 +==== tkt3493-2.4.1 + SELECT typeof(a), a FROM t1 GROUP BY a HAVING a=123 +---- +stmt 0 err 1 -1 53 no such table: t1 +==== tkt3493-2.4.2 + SELECT typeof(a), a FROM t1 GROUP BY b HAVING a=123 +---- +stmt 0 err 1 -1 53 no such table: t1 +==== tkt3493-2.5.1 + SELECT typeof(b), b FROM t1 GROUP BY a HAVING b='456' +---- +stmt 0 err 1 -1 55 no such table: t1 +==== tkt3493-2.5.2 + SELECT typeof(b), b FROM t1 GROUP BY b HAVING b='456' +---- +stmt 0 err 1 -1 55 no such table: t1 +==== tkt3493-3.1 + + CREATE TABLE t2(a COLLATE NOCASE, b COLLATE BINARY); + INSERT INTO t2 VALUES('aBc', 'DeF'); +---- +stmt 0 ok +stmt 57 err 1 -1 98 no such table: t2 +==== tkt3493-3.2.1 + SELECT a='abc' FROM t2 GROUP BY a +---- +stmt 0 err 1 -1 35 no such table: t2 +==== tkt3493-3.2.2 + SELECT a='abc' FROM t2 +---- +stmt 0 err 1 -1 24 no such table: t2 +==== tkt3493-3.3.1 + SELECT a>b FROM t2 GROUP BY a, b +---- +stmt 0 err 1 -1 34 no such table: t2 +==== tkt3493-3.3.2 + SELECT a>b COLLATE BINARY FROM t2 GROUP BY a, b +---- +stmt 0 err 1 -1 49 no such table: t2 +==== tkt3493-3.3.3 + SELECT b>a FROM t2 GROUP BY a, b +---- +stmt 0 err 1 -1 34 no such table: t2 +==== tkt3493-3.3.4 + SELECT b>a COLLATE NOCASE FROM t2 GROUP BY a, b +---- +stmt 0 err 1 -1 49 no such table: t2 diff --git a/parser/testdata/tkt3508.metadata.json b/parser/testdata/tkt3508.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3508.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3508.test b/parser/testdata/tkt3508.test new file mode 100644 index 0000000..84f42df --- /dev/null +++ b/parser/testdata/tkt3508.test @@ -0,0 +1,20 @@ +==== tkt3508-1.1 + + CREATE TABLE modificationsTmp ( + SUBSTRATE_HPRD_ID VARCHAR(80), + SUBSTRATE_GENE_SYMBOL VARCHAR(80), + SUBSTRATE_ISOFORM_ID VARCHAR(80), + SUBSTRATE_REFSEQ_ID VARCHAR(80), + SITE INTEGER, + RESIDUE VARCHAR(80), + ENZYME_NAME VARCHAR(80), + ENZYME_HPRD_ID VARCHAR(80), + MODIFICATION_TYPE VARCHAR(80), + EXPERIMENT_TYPE VARCHAR(80), + REFERENCE_ID VARCHAR(80) + ); + select SUBSTRATE_HPRD_ID, count(substrate_refseq_id) as c + from modificationsTmp where c > 1 group by SUBSTRATE_HPRD_ID; +---- +stmt 0 ok +stmt 415 err 1 -1 545 no such table: modificationsTmp diff --git a/parser/testdata/tkt3554.metadata.json b/parser/testdata/tkt3554.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3554.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3554.test b/parser/testdata/tkt3554.test new file mode 100644 index 0000000..6dede40 --- /dev/null +++ b/parser/testdata/tkt3554.test @@ -0,0 +1,26 @@ +==== tkt3544-1.1 + + CREATE TABLE test ( obj, t1, t2, PRIMARY KEY(obj, t1, t2) ); + + CREATE TRIGGER test_insert BEFORE INSERT ON test BEGIN + UPDATE test SET t1 = new.t1 + WHERE obj = new.obj AND new.t1 < t1 AND new.t2 >= t1; + + UPDATE test SET t2 = new.t2 + WHERE obj = new.obj AND new.t2 > t2 AND new.t1 <= t2; + + SELECT RAISE(IGNORE) WHERE EXISTS ( + SELECT obj FROM test + WHERE obj = new.obj AND new.t1 >= t1 AND new.t2 <= t2 + ); + END; +---- +stmt 0 ok +stmt 65 err 1 -1 127 no such table: main.test +==== tkt3544-1.2 + + INSERT INTO test VALUES('a', 10000, 11000); + SELECT * FROM test; +---- +stmt 0 err 1 -1 48 no such table: test +stmt 48 err 1 -1 72 no such table: test diff --git a/parser/testdata/tkt35xx.metadata.json b/parser/testdata/tkt35xx.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt35xx.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt35xx.test b/parser/testdata/tkt35xx.test new file mode 100644 index 0000000..91b2593 --- /dev/null +++ b/parser/testdata/tkt35xx.test @@ -0,0 +1,26 @@ +==== tkt35xx-1.1 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 1024; +---- +stmt 0 ok +stmt 28 ok +==== tkt35xx-1.2.2 + + BEGIN; + CREATE TABLE t5(e PRIMARY KEY, f); + DROP TABLE t5; + INSERT INTO t3(a, b) SELECT c, d FROM t4; +---- +stmt 0 ok +stmt 11 ok +stmt 50 err 1 -1 69 no such table: t5 +stmt 69 err 1 -1 115 no such table: t3 +==== tkt35xx-1.2.4 + SELECT count(*) FROM t3 +---- +stmt 0 err 1 -1 25 no such table: t3 +==== tkt35xx-1.2.6 + SELECT count(*) FROM t3 +---- +stmt 0 err 1 -1 25 no such table: t3 diff --git a/parser/testdata/tkt3718.metadata.json b/parser/testdata/tkt3718.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3718.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3718.test b/parser/testdata/tkt3718.test new file mode 100644 index 0000000..80f1f6b --- /dev/null +++ b/parser/testdata/tkt3718.test @@ -0,0 +1,27 @@ +==== tkt3718-1.1 + + CREATE TABLE t1(a PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(3, 'three'); + INSERT INTO t1 VALUES(4, 'four'); + INSERT INTO t1 VALUES(5, 'five'); + CREATE TABLE t2(a PRIMARY KEY, b); +---- +stmt 0 ok +stmt 39 err 1 -1 76 no such table: t1 +stmt 76 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 152 no such table: t1 +stmt 152 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 228 no such table: t1 +stmt 228 ok +==== tkt3718-1.4 +pragma count_changes=0 +---- +stmt 0 ok +==== tkt3718-generated + + SELECT + (SELECT sum(a) FROM t2)==(SELECT sum(a*5-10) FROM t2 WHERE (a%5)==0) +---- +stmt 0 err 1 -1 92 no such table: t2 diff --git a/parser/testdata/tkt3731.metadata.json b/parser/testdata/tkt3731.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3731.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3731.test b/parser/testdata/tkt3731.test new file mode 100644 index 0000000..d531831 --- /dev/null +++ b/parser/testdata/tkt3731.test @@ -0,0 +1,33 @@ +==== tkt3731-1.1 + + CREATE TABLE t1(a PRIMARY KEY, b); + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO t1 VALUES(new.a || '+', new.b || '+'); + END; +---- +stmt 0 ok +stmt 39 err 1 -1 87 no such table: main.t1 +==== tkt3731-1.2 + + INSERT INTO t1 VALUES('a', 'b'); + INSERT INTO t1 VALUES('c', 'd'); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 96 no such table: t1 +==== tkt3731-1.3 + + DELETE FROM t1; + CREATE TABLE t2(a, b); + INSERT INTO t2 VALUES('e', 'f'); + INSERT INTO t2 VALUES('g', 'h'); + INSERT INTO t1 SELECT * FROM t2; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 ok +stmt 47 err 1 -1 84 no such table: t2 +stmt 84 err 1 -1 121 no such table: t2 +stmt 121 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 180 no such table: t1 diff --git a/parser/testdata/tkt3793.metadata.json b/parser/testdata/tkt3793.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3793.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3793.test b/parser/testdata/tkt3793.test new file mode 100644 index 0000000..707ebc3 --- /dev/null +++ b/parser/testdata/tkt3793.test @@ -0,0 +1,7 @@ +==== tkt3793-1.2 + + BEGIN; + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 11 err 1 -1 40 no such table: t1 diff --git a/parser/testdata/tkt3810.metadata.json b/parser/testdata/tkt3810.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3810.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3810.test b/parser/testdata/tkt3810.test new file mode 100644 index 0000000..82331b0 --- /dev/null +++ b/parser/testdata/tkt3810.test @@ -0,0 +1,21 @@ +==== tkt3810-1.1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(123); + SELECT * FROM t1; + CREATE TABLE t2(y); + CREATE TABLE t3(z); +---- +stmt 0 ok +stmt 24 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 78 no such table: t1 +stmt 78 ok +stmt 102 ok +==== tkt3810-4 +SELECT name FROM temp.sqlite_master ORDER BY name +---- +stmt 0 ok +==== tkt3810-5 +DROP TRIGGER r1 +---- +stmt 0 err 1 -1 16 no such trigger: r1 diff --git a/parser/testdata/tkt3841.metadata.json b/parser/testdata/tkt3841.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3841.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3841.test b/parser/testdata/tkt3841.test new file mode 100644 index 0000000..3d4757b --- /dev/null +++ b/parser/testdata/tkt3841.test @@ -0,0 +1,32 @@ +==== tkt3841.1 + + CREATE TABLE table2 (key TEXT, x TEXT); + CREATE TABLE list (key TEXT, value TEXT); + + INSERT INTO table2 VALUES ("a", "alist"); + INSERT INTO table2 VALUES ("b", "blist"); + INSERT INTO list VALUES ("a", 1); + INSERT INTO list VALUES ("a", 2); + INSERT INTO list VALUES ("a", 3); + INSERT INTO list VALUES ("b", 4); + INSERT INTO list VALUES ("b", 5); + INSERT INTO list VALUES ("b", 6); + + SELECT + table2.x, + (SELECT group_concat(list.value) + FROM list + WHERE list.key = table2.key) + FROM table2; +---- +stmt 0 ok +stmt 44 ok +stmt 90 err 1 -1 139 no such table: table2 +stmt 139 err 1 -1 185 no such table: table2 +stmt 185 err 1 -1 223 no such table: list +stmt 223 err 1 -1 261 no such table: list +stmt 261 err 1 -1 299 no such table: list +stmt 299 err 1 -1 337 no such table: list +stmt 337 err 1 -1 375 no such table: list +stmt 375 err 1 -1 413 no such table: list +stmt 413 err 1 -1 552 no such table: table2 diff --git a/parser/testdata/tkt3871.metadata.json b/parser/testdata/tkt3871.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3871.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3871.test b/parser/testdata/tkt3871.test new file mode 100644 index 0000000..98a7aff --- /dev/null +++ b/parser/testdata/tkt3871.test @@ -0,0 +1,8 @@ +==== tkt3871-1.2 + SELECT * FROM e WHERE a = 1 OR a = 2 +---- +stmt 0 err 1 -1 38 no such table: e +==== tkt3871-1.4 + SELECT * FROM e WHERE a = 1 OR a = 2 OR b = 9 +---- +stmt 0 err 1 -1 47 no such table: e diff --git a/parser/testdata/tkt3879.metadata.json b/parser/testdata/tkt3879.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3879.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3879.test b/parser/testdata/tkt3879.test new file mode 100644 index 0000000..823dca1 --- /dev/null +++ b/parser/testdata/tkt3879.test @@ -0,0 +1,38 @@ +==== tkt3879.1.1 + + CREATE TABLE t1 (a PRIMARY KEY, b); + INSERT INTO t1 VALUES ('w', 1); + INSERT INTO t1 VALUES ('z', -1); + + CREATE TABLE t2 (m INTEGER PRIMARY KEY, n, a, p); + INSERT INTO t2 VALUES (25, 13, 'w', 1); + INSERT INTO t2 VALUES (26, 25, 'z', 153); + INSERT INTO t2 VALUES (27, 25, 'z', 68); + + CREATE TABLE t3 (m); + INSERT INTO t3 VALUES (25); +---- +stmt 0 ok +stmt 40 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 114 no such table: t1 +stmt 114 ok +stmt 171 err 1 -1 215 no such table: t2 +stmt 215 err 1 -1 261 no such table: t2 +stmt 261 err 1 -1 306 no such table: t2 +stmt 306 ok +stmt 332 err 1 -1 364 no such table: t3 +==== tkt3879.1.2 + + SELECT 111, t1.b*123 + FROM t3, t2 AS j0, t2 AS j1, t1 + WHERE j0.m=t3.m AND t1.a=j0.a AND j1.n=j0.m; +---- +stmt 0 err 1 -1 110 no such table: t3 +==== tkt3879.1.3 + + SELECT 222, t1.b*123 + FROM t3, t2 AS j0, t2 AS j1, t1 + WHERE j0.m=t3.m AND t1.a=j0.a AND j1.n=j0.m + ORDER BY t1.b; +---- +stmt 0 err 1 -1 128 no such table: t3 diff --git a/parser/testdata/tkt3911.metadata.json b/parser/testdata/tkt3911.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3911.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3911.test b/parser/testdata/tkt3911.test new file mode 100644 index 0000000..1a9be60 --- /dev/null +++ b/parser/testdata/tkt3911.test @@ -0,0 +1,19 @@ +==== tkt3911.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(11,12); + + CREATE TABLE t2(b,c); + INSERT INTO t2 VALUES(2,3); + INSERT INTO t2 VALUES(22,23); + + SELECT * FROM t1 JOIN t2 USING(b); +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 92 no such table: t1 +stmt 92 ok +stmt 119 err 1 -1 151 no such table: t2 +stmt 151 err 1 -1 185 no such table: t2 +stmt 185 err 1 -1 225 no such table: t1 diff --git a/parser/testdata/tkt3918.metadata.json b/parser/testdata/tkt3918.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3918.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3918.test b/parser/testdata/tkt3918.test new file mode 100644 index 0000000..f317d4c --- /dev/null +++ b/parser/testdata/tkt3918.test @@ -0,0 +1,35 @@ +==== tkt3918.1 + + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = incremental; + CREATE TABLE t1(i, x); +---- +stmt 0 ok +stmt 29 ok +stmt 67 ok +==== tkt3918.2 + + INSERT INTO t1 VALUES(1, randstr(1000,1000)); + INSERT INTO t1 VALUES(2, zeroblob(248*1020 + 100)); + INSERT INTO t1 VALUES(3, zeroblob(2*1020 + 100)); +---- +stmt 0 err 1 -1 50 no such table: t1 +stmt 50 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 160 no such table: t1 +==== tkt3918.3 + + DELETE FROM t1 WHERE i = 2; + DELETE FROM t1 WHERE i = 1; + DELETE FROM t1 WHERE i = 3; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 96 no such table: t1 +==== tkt3918.4 + PRAGMA incremental_vacuum = 1 +---- +stmt 0 ok +==== tkt3918.5 + CREATE TABLE t2(a, b) +---- +stmt 0 ok diff --git a/parser/testdata/tkt3922.metadata.json b/parser/testdata/tkt3922.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3922.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3922.test b/parser/testdata/tkt3922.test new file mode 100644 index 0000000..ff787de --- /dev/null +++ b/parser/testdata/tkt3922.test @@ -0,0 +1,36 @@ +==== tkt3922.1 + + CREATE TABLE t1(a NUMBER); + INSERT INTO t1 VALUES('-9223372036854775808'); + SELECT a, typeof(a) FROM t1; +---- +stmt 0 ok +stmt 33 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 121 no such table: t1 +==== tkt3922.1.dup1 + + CREATE TABLE t1(a NUMBER); + INSERT INTO t1 VALUES('-1'); + SELECT a, typeof(a) FROM t1; +---- +stmt 0 ok +stmt 33 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 103 no such table: t1 +==== tkt3922.5 + + DELETE FROM t1; + INSERT INTO t1 VALUES('9223372036854775807'); + SELECT a, typeof(a) FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +stmt 22 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 109 no such table: t1 +==== tkt3922.5.dup1 + + DELETE FROM t1; + INSERT INTO t1 VALUES('1'); + SELECT a, typeof(a) FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +stmt 22 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 91 no such table: t1 diff --git a/parser/testdata/tkt3929.metadata.json b/parser/testdata/tkt3929.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3929.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3929.test b/parser/testdata/tkt3929.test new file mode 100644 index 0000000..e7cd83b --- /dev/null +++ b/parser/testdata/tkt3929.test @@ -0,0 +1,22 @@ +==== tkt3929-1.0 + + PRAGMA page_size = 1024; + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a, b); + CREATE TRIGGER t1_t1 AFTER INSERT ON t1 BEGIN + UPDATE t1 SET b = 'value: ' || a WHERE t1.rowid = new.rowid; + END; +---- +stmt 0 ok +stmt 29 ok +stmt 56 err 1 -1 89 no such table: main.t1 +stmt 89 err 1 -1 139 no such table: main.t1 +==== tkt3929-1.1 + + INSERT INTO t1(a) VALUES(1); + INSERT INTO t1(a) VALUES(2); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 88 no such table: t1 diff --git a/parser/testdata/tkt3935.metadata.json b/parser/testdata/tkt3935.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3935.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3935.test b/parser/testdata/tkt3935.test new file mode 100644 index 0000000..cc6304e --- /dev/null +++ b/parser/testdata/tkt3935.test @@ -0,0 +1,43 @@ +==== tkt3935.1 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); +---- +stmt 0 ok +stmt 27 ok +==== tkt3935.2 + SELECT j1.b FROM ( SELECT * FROM t1 INNER JOIN t2 ON a=c ) AS j1 +---- +stmt 0 err 1 -1 66 no such table: t1 +==== tkt3935.3 + SELECT j1.b FROM (t1 INNER JOIN t2 ON a=c) AS j1 +---- +stmt 0 err 1 -1 50 no such table: t1 +==== tkt3935.4 + SELECT a FROM (t1) AS t ON b USING(a) +---- +stmt 0 err 1 30 35 near "USING": syntax error +==== tkt3935.5 + SELECT a FROM (t1) AS t ON b +---- +stmt 0 err 1 -1 30 a JOIN clause is required before ON +==== tkt3935.6 + SELECT a FROM (SELECT * FROM t1) AS t ON b USING(a) +---- +stmt 0 err 1 44 49 near "USING": syntax error +==== tkt3935.7 + SELECT a FROM (SELECT * FROM t1) AS t ON b +---- +stmt 0 err 1 -1 44 a JOIN clause is required before ON +==== tkt3935.8 + SELECT a FROM t1 AS t ON b +---- +stmt 0 err 1 -1 28 a JOIN clause is required before ON +==== tkt3935.9 + SELECT a FROM t1 AS t ON b USING(a) +---- +stmt 0 err 1 28 33 near "USING": syntax error +==== tkt3935.10 + SELECT a FROM t1 AS t USING(a) +---- +stmt 0 err 1 -1 32 a JOIN clause is required before USING diff --git a/parser/testdata/tkt3992.metadata.json b/parser/testdata/tkt3992.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3992.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3992.test b/parser/testdata/tkt3992.test new file mode 100644 index 0000000..c3368ae --- /dev/null +++ b/parser/testdata/tkt3992.test @@ -0,0 +1,50 @@ +==== tkt3992-1.1 + + CREATE TABLE parameters1( + mountcnt INT NOT NULL CHECK (typeof(mountcnt) == 'integer'), + version REAL NOT NULL + ); + INSERT INTO parameters1(mountcnt, version) VALUES(1, 1.0); + + CREATE TABLE parameters2( + mountcnt INT NOT NULL CHECK (typeof(mountcnt) == 'integer'), + version REAL CHECK (typeof(version) == 'real') + ); + INSERT INTO parameters2(mountcnt, version) VALUES(1, 1.0); +---- +stmt 0 ok +stmt 141 err 1 -1 204 no such table: parameters1 +stmt 204 ok +stmt 371 err 1 -1 434 no such table: parameters2 +==== tkt3992-1.2 + + UPDATE parameters1 SET mountcnt = mountcnt + 1; + SELECT * FROM parameters1; +---- +stmt 0 err 1 -1 52 no such table: parameters1 +stmt 52 err 1 -1 83 no such table: parameters1 +==== tkt3992-1.3 + + UPDATE parameters2 SET mountcnt = mountcnt + 1; + SELECT * FROM parameters2; +---- +stmt 0 err 1 -1 52 no such table: parameters2 +stmt 52 err 1 -1 83 no such table: parameters2 +==== tkt3992-2.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + ALTER TABLE t1 ADD COLUMN c DEFAULT 3; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 106 no such table: t1 +stmt 109 err 1 -1 133 no such table: t1 +==== tkt3992-2.2 + + UPDATE t1 SET a = 'one'; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 55 no such table: t1 diff --git a/parser/testdata/tkt3997.metadata.json b/parser/testdata/tkt3997.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt3997.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt3997.test b/parser/testdata/tkt3997.test new file mode 100644 index 0000000..e346c76 --- /dev/null +++ b/parser/testdata/tkt3997.test @@ -0,0 +1,46 @@ +==== tkt3997-1.1 + + create table mytext(name BLOB); + INSERT INTO mytext VALUES('abc'); + INSERT INTO mytext VALUES('acd'); + INSERT INTO mytext VALUES('afe'); +---- +stmt 0 ok +stmt 36 err 1 -1 74 no such table: mytext +stmt 74 err 1 -1 112 no such table: mytext +stmt 112 err 1 -1 150 no such table: mytext +==== tkt3997-1.2 + + SELECT name + FROM mytext + ORDER BY name COLLATE reverse +---- +stmt 0 err 1 -1 70 no such table: mytext +==== tkt3997-1.3 + + SELECT name + FROM (SELECT name FROM mytext) + ORDER BY name COLLATE reverse +---- +stmt 0 err 1 -1 90 no such table: mytext +==== tkt3997-2.1 + + CREATE TABLE mytext2(name COLLATE reverse); + INSERT INTO mytext2 SELECT name FROM mytext; +---- +stmt 0 err 1 -1 48 no such collation sequence: reverse +stmt 49 err 1 -1 98 no such table: mytext2 +==== tkt3997-2.2 + + SELECT name + FROM (SELECT name FROM mytext2) + ORDER BY name +---- +stmt 0 err 1 -1 75 no such table: mytext2 +==== tkt3997-2.3 + + SELECT name + FROM (SELECT name FROM mytext2) + ORDER BY name COLLATE usual +---- +stmt 0 err 1 -1 87 no such table: mytext2 diff --git a/parser/testdata/tkt4018.metadata.json b/parser/testdata/tkt4018.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tkt4018.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tkt4018.test b/parser/testdata/tkt4018.test new file mode 100644 index 0000000..44c8ee2 --- /dev/null +++ b/parser/testdata/tkt4018.test @@ -0,0 +1,16 @@ +==== tkt4018-1.1 + + CREATE TABLE t1(a, b); + BEGIN; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 38 err 1 -1 60 no such table: t1 +==== tkt4018-2.2 + + BEGIN; + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 11 err 1 -1 44 no such table: t1 diff --git a/parser/testdata/tpch01.metadata.json b/parser/testdata/tpch01.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/tpch01.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/tpch01.test b/parser/testdata/tpch01.test new file mode 100644 index 0000000..5271e37 --- /dev/null +++ b/parser/testdata/tpch01.test @@ -0,0 +1,160 @@ +==== tpch01-1.0 + + CREATE TABLE NATION ( N_NATIONKEY INTEGER NOT NULL, + N_NAME CHAR(25) NOT NULL, + N_REGIONKEY INTEGER NOT NULL, + N_COMMENT VARCHAR(152)); + CREATE TABLE REGION ( R_REGIONKEY INTEGER NOT NULL, + R_NAME CHAR(25) NOT NULL, + R_COMMENT VARCHAR(152)); + CREATE TABLE PART ( P_PARTKEY INTEGER NOT NULL, + P_NAME VARCHAR(55) NOT NULL, + P_MFGR CHAR(25) NOT NULL, + P_BRAND CHAR(10) NOT NULL, + P_TYPE VARCHAR(25) NOT NULL, + P_SIZE INTEGER NOT NULL, + P_CONTAINER CHAR(10) NOT NULL, + P_RETAILPRICE DECIMAL(15,2) NOT NULL, + P_COMMENT VARCHAR(23) NOT NULL ); + CREATE TABLE SUPPLIER ( S_SUPPKEY INTEGER NOT NULL, + S_NAME CHAR(25) NOT NULL, + S_ADDRESS VARCHAR(40) NOT NULL, + S_NATIONKEY INTEGER NOT NULL, + S_PHONE CHAR(15) NOT NULL, + S_ACCTBAL DECIMAL(15,2) NOT NULL, + S_COMMENT VARCHAR(101) NOT NULL); + CREATE TABLE PARTSUPP ( PS_PARTKEY INTEGER NOT NULL, + PS_SUPPKEY INTEGER NOT NULL, + PS_AVAILQTY INTEGER NOT NULL, + PS_SUPPLYCOST DECIMAL(15,2) NOT NULL, + PS_COMMENT VARCHAR(199) NOT NULL ); + CREATE TABLE CUSTOMER ( C_CUSTKEY INTEGER NOT NULL, + C_NAME VARCHAR(25) NOT NULL, + C_ADDRESS VARCHAR(40) NOT NULL, + C_NATIONKEY INTEGER NOT NULL, + C_PHONE CHAR(15) NOT NULL, + C_ACCTBAL DECIMAL(15,2) NOT NULL, + C_MKTSEGMENT CHAR(10) NOT NULL, + C_COMMENT VARCHAR(117) NOT NULL); + CREATE TABLE ORDERS ( O_ORDERKEY INTEGER NOT NULL, + O_CUSTKEY INTEGER NOT NULL, + O_ORDERSTATUS CHAR(1) NOT NULL, + O_TOTALPRICE DECIMAL(15,2) NOT NULL, + O_ORDERDATE DATE NOT NULL, + O_ORDERPRIORITY CHAR(15) NOT NULL, + O_CLERK CHAR(15) NOT NULL, + O_SHIPPRIORITY INTEGER NOT NULL, + O_COMMENT VARCHAR(79) NOT NULL); + CREATE TABLE LINEITEM ( L_ORDERKEY INTEGER NOT NULL, + L_PARTKEY INTEGER NOT NULL, + L_SUPPKEY INTEGER NOT NULL, + L_LINENUMBER INTEGER NOT NULL, + L_QUANTITY DECIMAL(15,2) NOT NULL, + L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL, + L_DISCOUNT DECIMAL(15,2) NOT NULL, + L_TAX DECIMAL(15,2) NOT NULL, + L_RETURNFLAG CHAR(1) NOT NULL, + L_LINESTATUS CHAR(1) NOT NULL, + L_SHIPDATE DATE NOT NULL, + L_COMMITDATE DATE NOT NULL, + L_RECEIPTDATE DATE NOT NULL, + L_SHIPINSTRUCT CHAR(25) NOT NULL, + L_SHIPMODE CHAR(10) NOT NULL, + L_COMMENT VARCHAR(44) NOT NULL); + CREATE INDEX npki on nation(N_NATIONKEY); + CREATE INDEX rpki on region(R_REGIONKEY); + CREATE INDEX ppki on part(P_PARTKEY); + CREATE INDEX spki on supplier(S_SUPPKEY); + CREATE INDEX pspki on partsupp(PS_PARTKEY, PS_SUPPKEY); + CREATE INDEX cpki on customer(C_CUSTKEY); + CREATE INDEX opki on orders(O_ORDERKEY); + CREATE INDEX lpki on lineitem(L_ORDERKEY, L_LINENUMBER); + CREATE INDEX nrki on nation(n_regionkey); + CREATE INDEX snki on supplier(s_nationkey); + CREATE INDEX cnki on customer(c_nationkey); + CREATE INDEX ocki on orders(O_CUSTKEY); + CREATE INDEX odi on orders(O_ORDERDATE); + CREATE INDEX lpki2 on lineitem(L_PARTKEY); + CREATE INDEX lski on lineitem(L_SUPPKEY); + CREATE INDEX lsdi on lineitem(L_SHIPDATE); + CREATE INDEX lcdi on lineitem(L_COMMITDATE); + CREATE INDEX lrdi on lineitem(L_RECEIPTDATE); + CREATE INDEX bootleg_nni on nation(N_NAME); + CREATE INDEX bootleg_psi on part(p_size); + CREATE INDEX bootleg_pti on part(p_type); + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('LINEITEM','lrdi','600572 236'); + INSERT INTO sqlite_stat1 VALUES('LINEITEM','lcdi','600572 244'); + INSERT INTO sqlite_stat1 VALUES('LINEITEM','lsdi','600572 238'); + INSERT INTO sqlite_stat1 VALUES('LINEITEM','lski','600572 601'); + INSERT INTO sqlite_stat1 VALUES('LINEITEM','lpki2','600572 31'); + INSERT INTO sqlite_stat1 VALUES('LINEITEM','lpki','600572 5 1'); + INSERT INTO sqlite_stat1 VALUES('ORDERS','odi','150000 63'); + INSERT INTO sqlite_stat1 VALUES('ORDERS','ocki','150000 15'); + INSERT INTO sqlite_stat1 VALUES('ORDERS','opki','150000 1'); + INSERT INTO sqlite_stat1 VALUES('CUSTOMER','cnki','15000 600'); + INSERT INTO sqlite_stat1 VALUES('CUSTOMER','cpki','15000 1'); + INSERT INTO sqlite_stat1 VALUES('PARTSUPP','pspki','80000 4 1'); + INSERT INTO sqlite_stat1 VALUES('SUPPLIER','snki','1000 40'); + INSERT INTO sqlite_stat1 VALUES('SUPPLIER','spki','1000 1'); + INSERT INTO sqlite_stat1 VALUES('PART','bootleg_pti','20000 134'); + INSERT INTO sqlite_stat1 VALUES('PART','bootleg_psi','20000 400'); + INSERT INTO sqlite_stat1 VALUES('PART','ppki','20000 1'); + INSERT INTO sqlite_stat1 VALUES('REGION','rpki','5 1'); + INSERT INTO sqlite_stat1 VALUES('NATION','bootleg_nni','25 1'); + INSERT INTO sqlite_stat1 VALUES('NATION','nrki','25 5'); + INSERT INTO sqlite_stat1 VALUES('NATION','npki','25 1'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 237 ok +stmt 413 ok +stmt 971 ok +stmt 1425 ok +stmt 1754 ok +stmt 2277 ok +stmt 2862 ok +stmt 3893 err 1 -1 3937 no such table: main.nation +stmt 3937 err 1 -1 3981 no such table: main.region +stmt 3981 err 1 -1 4021 no such table: main.part +stmt 4021 err 1 -1 4065 no such table: main.supplier +stmt 4065 err 1 -1 4123 no such table: main.partsupp +stmt 4123 err 1 -1 4167 no such table: main.customer +stmt 4167 err 1 -1 4210 no such table: main.orders +stmt 4210 err 1 -1 4269 no such table: main.lineitem +stmt 4269 err 1 -1 4313 no such table: main.nation +stmt 4313 err 1 -1 4359 no such table: main.supplier +stmt 4359 err 1 -1 4405 no such table: main.customer +stmt 4405 err 1 -1 4447 no such table: main.orders +stmt 4447 err 1 -1 4490 no such table: main.orders +stmt 4490 err 1 -1 4535 no such table: main.lineitem +stmt 4535 err 1 -1 4579 no such table: main.lineitem +stmt 4579 err 1 -1 4624 no such table: main.lineitem +stmt 4624 err 1 -1 4671 no such table: main.lineitem +stmt 4671 err 1 -1 4719 no such table: main.lineitem +stmt 4719 err 1 -1 4765 no such table: main.nation +stmt 4765 err 1 -1 4809 no such table: main.part +stmt 4809 err 1 -1 4853 no such table: main.part +stmt 4853 ok +stmt 4878 err 1 -1 4945 no such table: sqlite_stat1 +stmt 4945 err 1 -1 5012 no such table: sqlite_stat1 +stmt 5012 err 1 -1 5079 no such table: sqlite_stat1 +stmt 5079 err 1 -1 5146 no such table: sqlite_stat1 +stmt 5146 err 1 -1 5213 no such table: sqlite_stat1 +stmt 5213 err 1 -1 5280 no such table: sqlite_stat1 +stmt 5280 err 1 -1 5343 no such table: sqlite_stat1 +stmt 5343 err 1 -1 5407 no such table: sqlite_stat1 +stmt 5407 err 1 -1 5470 no such table: sqlite_stat1 +stmt 5470 err 1 -1 5536 no such table: sqlite_stat1 +stmt 5536 err 1 -1 5600 no such table: sqlite_stat1 +stmt 5600 err 1 -1 5667 no such table: sqlite_stat1 +stmt 5667 err 1 -1 5731 no such table: sqlite_stat1 +stmt 5731 err 1 -1 5794 no such table: sqlite_stat1 +stmt 5794 err 1 -1 5863 no such table: sqlite_stat1 +stmt 5863 err 1 -1 5932 no such table: sqlite_stat1 +stmt 5932 err 1 -1 5992 no such table: sqlite_stat1 +stmt 5992 err 1 -1 6050 no such table: sqlite_stat1 +stmt 6050 err 1 -1 6116 no such table: sqlite_stat1 +stmt 6116 err 1 -1 6175 no such table: sqlite_stat1 +stmt 6175 err 1 -1 6234 no such table: sqlite_stat1 +stmt 6234 ok diff --git a/parser/testdata/trace.metadata.json b/parser/testdata/trace.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trace.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trace.test b/parser/testdata/trace.test new file mode 100644 index 0000000..cf9ee37 --- /dev/null +++ b/parser/testdata/trace.test @@ -0,0 +1,18 @@ +==== trace-1.3 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 80 no such table: t1 +==== trace-3.3 + + CREATE TABLE t2(a,b); + INSERT INTO t2 VALUES(1,2); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t2 +stmt 58 err 1 -1 80 no such table: t2 diff --git a/parser/testdata/trace2.metadata.json b/parser/testdata/trace2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trace2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trace2.test b/parser/testdata/trace2.test new file mode 100644 index 0000000..5b80f15 --- /dev/null +++ b/parser/testdata/trace2.test @@ -0,0 +1,9 @@ +==== 2.1 + + CREATE VIRTUAL TABLE x1 USING fts4; + INSERT INTO x1 VALUES('Cloudy, with a high near 16'); + INSERT INTO x1 VALUES('Wind chill values as low as -13'); +---- +stmt 0 ok +stmt 40 err 1 -1 98 no such table: x1 +stmt 98 err 1 -1 160 no such table: x1 diff --git a/parser/testdata/trace3.metadata.json b/parser/testdata/trace3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trace3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trace3.test b/parser/testdata/trace3.test new file mode 100644 index 0000000..47c7115 --- /dev/null +++ b/parser/testdata/trace3.test @@ -0,0 +1,44 @@ +==== trace3-1.0 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,NULL); + INSERT INTO t1 VALUES(2,-1); + INSERT INTO t1 VALUES(3,0); + INSERT INTO t1 VALUES(4,1); + INSERT INTO t1 VALUES(5,-2147483648); + INSERT INTO t1 VALUES(6,2147483647); + INSERT INTO t1 VALUES(7,-9223372036854775808); + INSERT INTO t1 VALUES(8,9223372036854775807); + INSERT INTO t1 VALUES(9,-1.0); + INSERT INTO t1 VALUES(10,0.0); + INSERT INTO t1 VALUES(11,1.0); + INSERT INTO t1 VALUES(12,''); + INSERT INTO t1 VALUES(13,'1'); + INSERT INTO t1 VALUES(14,'one'); + INSERT INTO t1 VALUES(15,x'abcd0123'); + INSERT INTO t1 VALUES(16,x'4567cdef'); +---- +stmt 0 ok +stmt 26 err 1 -1 61 no such table: t1 +stmt 61 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 126 no such table: t1 +stmt 126 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 200 no such table: t1 +stmt 200 err 1 -1 241 no such table: t1 +stmt 241 err 1 -1 292 no such table: t1 +stmt 292 err 1 -1 342 no such table: t1 +stmt 342 err 1 -1 377 no such table: t1 +stmt 377 err 1 -1 412 no such table: t1 +stmt 412 err 1 -1 447 no such table: t1 +stmt 447 err 1 -1 481 no such table: t1 +stmt 481 err 1 -1 516 no such table: t1 +stmt 516 err 1 -1 553 no such table: t1 +stmt 553 err 1 -1 596 no such table: t1 +stmt 596 err 1 -1 639 no such table: t1 +==== 13.0 + + CREATE TABLE T1(a, b); + INSERT INTO t1 VALUES(1, 2), (3, 4); +---- +stmt 0 ok +stmt 25 err 1 -1 64 no such table: t1 diff --git a/parser/testdata/trans.metadata.json b/parser/testdata/trans.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trans.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trans.test b/parser/testdata/trans.test new file mode 100644 index 0000000..105936a --- /dev/null +++ b/parser/testdata/trans.test @@ -0,0 +1,525 @@ +==== trans-1.0 + + CREATE TABLE one(a int PRIMARY KEY, b text); + INSERT INTO one VALUES(1,'one'); + INSERT INTO one VALUES(2,'two'); + INSERT INTO one VALUES(3,'three'); + SELECT b FROM one ORDER BY a; +---- +stmt 0 ok +stmt 49 err 1 -1 86 no such table: one +stmt 86 err 1 -1 123 no such table: one +stmt 123 err 1 -1 162 no such table: one +stmt 162 err 1 -1 196 no such table: one +==== trans-1.1 + + CREATE TABLE two(a int PRIMARY KEY, b text); + INSERT INTO two VALUES(1,'I'); + INSERT INTO two VALUES(5,'V'); + INSERT INTO two VALUES(10,'X'); + SELECT b FROM two ORDER BY a; +---- +stmt 0 ok +stmt 49 err 1 -1 84 no such table: two +stmt 84 err 1 -1 119 no such table: two +stmt 119 err 1 -1 155 no such table: two +stmt 155 err 1 -1 189 no such table: two +==== trans-2.10 + + BEGIN; + SELECT a FROM one ORDER BY a; + SELECT a FROM two ORDER BY a; + END; +---- +stmt 0 ok +stmt 11 err 1 -1 45 no such table: one +stmt 45 err 1 -1 79 no such table: two +stmt 79 ok +==== trans-3.1 + + BEGIN; + UPDATE one SET a = 0 WHERE 0; + SELECT a FROM one ORDER BY a; +---- +stmt 0 ok +stmt 11 err 1 -1 45 no such table: one +stmt 45 err 1 -1 79 no such table: one +==== trans-3.4 + + INSERT INTO one VALUES(4,'four'); +---- +stmt 0 err 1 -1 38 no such table: one +==== trans-3.7 + + INSERT INTO two VALUES(4,'IV'); +---- +stmt 0 err 1 -1 36 no such table: two +==== trans-3.10 +END TRANSACTION +---- +stmt 0 ok +==== trans-5.1 +SELECT name FROM sqlite_master WHERE type='table' ORDER BY name +---- +stmt 0 ok +==== trans-5.4 +SELECT a,b FROM one ORDER BY b +---- +stmt 0 err 1 -1 31 no such table: one +==== trans-5.8 + + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name +---- +stmt 0 ok +==== trans-5.9 + + BEGIN TRANSACTION; + CREATE TABLE t1(a int, b int, c int); + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 ok +stmt 65 ok +==== trans-5.10 + + CREATE INDEX i1 ON t1(a); + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 ok +==== trans-5.11 + + COMMIT; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 12 ok +==== trans-5.12 + + BEGIN TRANSACTION; + CREATE TABLE t2(a int, b int, c int); + CREATE INDEX i2a ON t2(a); + CREATE INDEX i2b ON t2(b); + DROP TABLE t1; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 ok +stmt 65 err 1 -1 96 no such table: main.t2 +stmt 96 err 1 -1 127 no such table: main.t2 +stmt 127 err 1 -1 146 no such table: t1 +stmt 146 ok +==== trans-5.13 + + ROLLBACK; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 14 ok +==== trans-5.14 + + BEGIN TRANSACTION; + DROP INDEX i1; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 ok +==== trans-5.15 + + ROLLBACK; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 14 ok +==== trans-5.16 + + BEGIN TRANSACTION; + DROP INDEX i1; + CREATE TABLE t2(x int, y int, z int); + CREATE INDEX i2x ON t2(x); + CREATE INDEX i2y ON t2(y); + INSERT INTO t2 VALUES(1,2,3); + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 ok +stmt 84 err 1 -1 115 no such table: main.t2 +stmt 115 err 1 -1 146 no such table: main.t2 +stmt 146 err 1 -1 180 no such table: t2 +stmt 180 ok +==== trans-5.17 + + COMMIT; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 12 ok +==== trans-5.18 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== trans-5.19 + + SELECT x FROM t2 WHERE y=2; +---- +stmt 0 err 1 -1 32 no such table: t2 +==== trans-5.20 + + BEGIN TRANSACTION; + DROP TABLE t1; + DROP TABLE t2; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such table: t1 +stmt 42 err 1 -1 61 no such table: t2 +stmt 61 ok +==== trans-5.22 + + ROLLBACK; + SELECT name fROM sqlite_master + WHERE type='table' OR type='index' + ORDER BY name; +---- +stmt 0 ok +stmt 14 ok +==== trans-5.23 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== trans-6.7 + + COMMIT; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 34 no such table: t1 +==== trans-6.16 + + COMMIT; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 34 no such table: t1 +==== trans-6.20 + + CREATE TABLE t1(a integer primary key,b,c); + INSERT INTO t1 VALUES(1,-2,-3); + INSERT INTO t1 VALUES(4,-5,-6); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 48 err 1 -1 84 no such table: t1 +stmt 84 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 142 no such table: t1 +==== trans-6.21 + + CREATE INDEX i1 ON t1(b); + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 err 1 -1 62 no such table: t1 +==== trans-6.22 + + BEGIN TRANSACTION; + DROP INDEX i1; + SELECT * FROM t1 WHERE b<1; + ROLLBACK; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 err 1 -1 74 no such table: t1 +stmt 74 ok +==== trans-6.23 + + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== trans-6.24 + + BEGIN TRANSACTION; + DROP TABLE t1; + ROLLBACK; + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such table: t1 +stmt 42 ok +stmt 56 err 1 -1 88 no such table: t1 +==== trans-6.25 + + BEGIN TRANSACTION; + DROP INDEX i1; + CREATE INDEX i1 ON t1(c); + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 err 1 -1 72 no such table: main.t1 +stmt 72 err 1 -1 104 no such table: t1 +==== trans-6.26 + + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== trans-6.27 + + ROLLBACK; + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 14 err 1 -1 46 no such table: t1 +==== trans-6.28 + + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== trans-6.30 + + BEGIN TRANSACTION; + DROP TABLE t1; + CREATE TABLE t1(a int unique,b,c); + COMMIT; + INSERT INTO t1 VALUES(1,-2,-3); + INSERT INTO t1 VALUES(4,-5,-6); + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such table: t1 +stmt 42 ok +stmt 81 ok +stmt 93 err 1 -1 129 no such table: t1 +stmt 129 err 1 -1 165 no such table: t1 +stmt 165 err 1 -1 198 no such table: t1 +==== trans-6.31 + + CREATE INDEX i1 ON t1(b); + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 err 1 -1 62 no such table: t1 +==== trans-6.32 + + BEGIN TRANSACTION; + DROP INDEX i1; + SELECT * FROM t1 WHERE b<1; + ROLLBACK; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 err 1 -1 74 no such table: t1 +stmt 74 ok +==== trans-6.33 + + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== trans-6.34 + + BEGIN TRANSACTION; + DROP TABLE t1; + ROLLBACK; + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such table: t1 +stmt 42 ok +stmt 56 err 1 -1 88 no such table: t1 +==== trans-6.35 + + BEGIN TRANSACTION; + DROP INDEX i1; + CREATE INDEX i1 ON t1(c); + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 23 err 1 -1 42 no such index: i1 +stmt 42 err 1 -1 72 no such table: main.t1 +stmt 72 err 1 -1 104 no such table: t1 +==== trans-6.36 + + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== trans-6.37 + + DROP INDEX i1; + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 19 no such index: i1 +stmt 19 err 1 -1 51 no such table: t1 +==== trans-6.38 + + ROLLBACK; + SELECT * FROM t1 WHERE b<1; +---- +stmt 0 ok +stmt 14 err 1 -1 46 no such table: t1 +==== trans-6.39 + + SELECT * FROM t1 WHERE c<1; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== trans-7.2 +SELECT md5sum(x,y,z) FROM t2 +---- +stmt 0 err 1 -1 29 no such table: t2 +==== trans-7.2.1 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== trans-7.3 + + BEGIN; + DELETE FROM t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 31 no such table: t2 +stmt 31 ok +stmt 45 err 1 -1 79 no such table: t2 +==== trans-7.4 + + BEGIN; + INSERT INTO t2 SELECT * FROM t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 48 no such table: t2 +stmt 48 ok +stmt 62 err 1 -1 96 no such table: t2 +==== trans-7.5 + + BEGIN; + DELETE FROM t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 31 no such table: t2 +stmt 31 ok +stmt 45 err 1 -1 79 no such table: t2 +==== trans-7.6 + + BEGIN; + INSERT INTO t2 SELECT * FROM t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 48 no such table: t2 +stmt 48 ok +stmt 62 err 1 -1 96 no such table: t2 +==== trans-7.7 + + BEGIN; + CREATE TABLE t3 AS SELECT * FROM t2; + INSERT INTO t2 SELECT * FROM t3; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 52 no such table: t2 +stmt 52 err 1 -1 89 no such table: t2 +stmt 89 ok +stmt 103 err 1 -1 137 no such table: t2 +==== trans-7.8 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== trans-7.9 + + BEGIN; + CREATE TEMP TABLE t3 AS SELECT * FROM t2; + INSERT INTO t2 SELECT * FROM t3; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 13 err 1 -1 61 no such table: t2 +stmt 61 err 1 -1 100 no such table: t2 +stmt 100 ok +stmt 116 err 1 -1 152 no such table: t2 +==== trans-7.10 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== trans-7.11 + + BEGIN; + CREATE TEMP TABLE t3 AS SELECT * FROM t2; + INSERT INTO t2 SELECT * FROM t3; + DROP INDEX i2x; + DROP INDEX i2y; + CREATE INDEX i3a ON t3(x); + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 13 err 1 -1 61 no such table: t2 +stmt 61 err 1 -1 100 no such table: t2 +stmt 100 err 1 -1 122 no such index: i2x +stmt 122 err 1 -1 144 no such index: i2y +stmt 144 err 1 -1 177 no such table: main.t3 +stmt 177 ok +stmt 193 err 1 -1 229 no such table: t2 +==== trans-7.12 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== trans-7.13 + + BEGIN; + DROP TABLE t2; + ROLLBACK; + SELECT md5sum(x,y,z) FROM t2; +---- +stmt 0 ok +stmt 13 err 1 -1 34 no such table: t2 +stmt 34 ok +stmt 50 err 1 -1 86 no such table: t2 +==== trans-7.14 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== trans-8.2 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== trans-8.5 +SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master +---- +stmt 0 err 1 7 66 no such function: md5sum +==== trans-generated + + INSERT INTO t3 SELECT randstr(10,400) FROM t3 WHERE random()%10==0; +---- +stmt 0 err 1 -1 77 no such table: t3 diff --git a/parser/testdata/transitive1.metadata.json b/parser/testdata/transitive1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/transitive1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/transitive1.test b/parser/testdata/transitive1.test new file mode 100644 index 0000000..9fbabbe --- /dev/null +++ b/parser/testdata/transitive1.test @@ -0,0 +1,683 @@ +==== transitive1-100 + + CREATE TABLE t1(a TEXT, b TEXT, c TEXT COLLATE NOCASE); + INSERT INTO t1 VALUES('abc','abc','Abc'); + INSERT INTO t1 VALUES('def','def','def'); + INSERT INTO t1 VALUES('ghi','ghi','GHI'); + CREATE INDEX t1a1 ON t1(a); + CREATE INDEX t1a2 ON t1(a COLLATE nocase); + + SELECT * FROM t1 WHERE a=b AND c=b AND c='DEF'; +---- +stmt 0 ok +stmt 58 err 1 -1 102 no such table: t1 +stmt 102 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 220 no such table: main.t1 +stmt 220 err 1 -1 265 no such table: main.t1 +stmt 265 err 1 -1 316 no such table: t1 +==== transitive1-110 + + SELECT * FROM t1 WHERE a=b AND c=b AND c>='DEF' ORDER BY +a; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== transitive1-120 + + SELECT * FROM t1 WHERE a=b AND c=b AND c<='DEF' ORDER BY +a; +---- +stmt 0 err 1 -1 63 no such table: t1 +==== transitive1-200 + + CREATE TABLE t2(a INTEGER, b INTEGER, c TEXT); + INSERT INTO t2 VALUES(100,100,100); + INSERT INTO t2 VALUES(20,20,20); + INSERT INTO t2 VALUES(3,3,3); + + SELECT * FROM t2 WHERE a=b AND c=b AND c=20; +---- +stmt 0 ok +stmt 49 err 1 -1 87 no such table: t2 +stmt 87 err 1 -1 122 no such table: t2 +stmt 122 err 1 -1 154 no such table: t2 +stmt 154 err 1 -1 202 no such table: t2 +==== transitive1-210 + + SELECT * FROM t2 WHERE a=b AND c=b AND c>=20 ORDER BY +a; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== transitive1-220 + + SELECT * FROM t2 WHERE a=b AND c=b AND c<=20 ORDER BY +a; +---- +stmt 0 err 1 -1 60 no such table: t2 +==== transitive1-300 + + CREATE TABLE t301(w INTEGER PRIMARY KEY, x); + CREATE TABLE t302(y INTEGER UNIQUE, z); + INSERT INTO t301 VALUES(1,2),(3,4),(5,6); + INSERT INTO t302 VALUES(1,3),(3,6),(5,7); + SELECT * + FROM t301 CROSS JOIN t302 + WHERE w=y AND y IS NOT NULL + ORDER BY +w; +---- +stmt 0 ok +stmt 47 ok +stmt 89 err 1 -1 133 no such table: t301 +stmt 133 err 1 -1 177 no such table: t302 +stmt 177 err 1 -1 265 no such table: t301 +==== transitive1-301 + + SELECT * + FROM t301 CROSS JOIN t302 + WHERE w=y AND y IS NOT NULL + ORDER BY w; +---- +stmt 0 err 1 -1 87 no such table: t301 +==== transitive1-302 + + SELECT * + FROM t301 CROSS JOIN t302 + WHERE w IS y AND y IS NOT NULL + ORDER BY w; +---- +stmt 0 err 1 -1 90 no such table: t301 +==== transitive1-310 + + SELECT * + FROM t301 CROSS JOIN t302 ON w=y + WHERE y>1 + ORDER BY +w +---- +stmt 0 err 1 -1 77 no such table: t301 +==== transitive1-311 + + SELECT * + FROM t301 CROSS JOIN t302 ON w=y + WHERE y>1 + ORDER BY w +---- +stmt 0 err 1 -1 76 no such table: t301 +==== transitive1-312 + + SELECT * + FROM t301 CROSS JOIN t302 ON w=y + WHERE y>1 + ORDER BY w DESC +---- +stmt 0 err 1 -1 81 no such table: t301 +==== transitive1-320 + + SELECT * + FROM t301 CROSS JOIN t302 ON w=y + WHERE y BETWEEN 2 AND 4; +---- +stmt 0 err 1 -1 76 no such table: t301 +==== transitive1-331 + + SELECT * + FROM t301 CROSS JOIN t302 ON w=y + WHERE y BETWEEN 1 AND 4 + ORDER BY w; +---- +stmt 0 err 1 -1 90 no such table: t301 +==== transitive1-332 + + SELECT * + FROM t301 CROSS JOIN t302 ON w=y + WHERE y BETWEEN 1 AND 4 + ORDER BY w DESC; +---- +stmt 0 err 1 -1 95 no such table: t301 +==== transitive1-400 + + CREATE TABLE t401(a); + CREATE TABLE t402(b); + CREATE TABLE t403(c INTEGER PRIMARY KEY); + INSERT INTO t401 VALUES(1); + INSERT INTO t403 VALUES(1); + SELECT '1-row' FROM t401 LEFT JOIN t402 ON b=a JOIN t403 ON c=a; +---- +stmt 0 ok +stmt 24 ok +stmt 48 ok +stmt 92 err 1 -1 122 no such table: t401 +stmt 122 err 1 -1 152 no such table: t403 +stmt 152 err 1 -1 219 no such table: t401 +==== transitive1-401 + + SELECT '1-row' FROM t401 LEFT JOIN t402 ON b IS a JOIN t403 ON c=a; +---- +stmt 0 err 1 -1 70 no such table: t401 +==== transitive1-402 + + SELECT '1-row' FROM t401 LEFT JOIN t402 ON b=a JOIN t403 ON c IS a; +---- +stmt 0 err 1 -1 70 no such table: t401 +==== transitive1-403 + + SELECT '1-row' FROM t401 LEFT JOIN t402 ON b IS a JOIN t403 ON c IS a; +---- +stmt 0 err 1 -1 73 no such table: t401 +==== transitive1-410 + + CREATE TABLE bookmark ( idBookmark integer primary key, idFile integer, timeInSeconds double, totalTimeInSeconds double, thumbNailImage text, player text, playerState text, type integer); + CREATE TABLE path ( idPath integer primary key, strPath text, strContent text, strScraper text, strHash text, scanRecursive integer, useFolderNames bool, strSettings text, noUpdate bool, exclude bool, dateAdded text); + INSERT INTO "path" VALUES(1,'/tmp/tvshows/','tvshows','metadata.tvdb.com','989B1CE5680A14F5F86123F751169B49',0,0,'',0,0,NULL); + INSERT INTO "path" VALUES(2,'/tmp/tvshows/The.Big.Bang.Theory/','','','85E1DAAB2F5FF6EAE8AEDF1B5C882D1E',NULL,NULL,NULL,NULL,NULL,'2013-10-23 18:58:43'); + CREATE TABLE files ( idFile integer primary key, idPath integer, strFilename text, playCount integer, lastPlayed text, dateAdded text); + INSERT INTO "files" VALUES(1,2,'The.Big.Bang.Theory.S01E01.WEB-DL.AAC2.0.H264.mkv',NULL,NULL,'2013-10-23 18:57:36'); + CREATE TABLE tvshow ( idShow integer primary key,c00 text,c01 text,c02 text,c03 text,c04 text,c05 text,c06 text,c07 text,c08 text,c09 text,c10 text,c11 text,c12 text,c13 text,c14 text,c15 text,c16 text,c17 text,c18 text,c19 text,c20 text,c21 text,c22 text,c23 text); + INSERT INTO "tvshow" VALUES(1,'The Big Bang Theory','Leonard Hofstadter and Sheldon Cooper are brilliant physicists, the kind of "beautiful minds" that understand how the universe works. But none of that genius helps them interact with people, especially women. All this begins to change when a free-spirited beauty named Penny moves in next door. Sheldon, Leonard''s roommate, is quite content spending his nights playing Klingon Boggle with their socially dysfunctional friends, fellow CalTech scientists Howard Wolowitz and Raj Koothrappali. However, Leonard sees in Penny a whole new universe of possibilities... including love.','','','9.200000','2007-09-24','http://thetvdb.com/banners/graphical/80379-g13.jpghttp://thetvdb.com/banners/graphical/80379-g23.jpghttp://thetvdb.com/banners/graphical/80379-g18.jpghttp://thetvdb.com/banners/graphical/80379-g17.jpghttp:// + thetvdb.com/banners/graphical/80379-g6.jpghttp://thetvdb.com/banners/graphical/80379-g5.jpghttp://thetvdb.com/banners/graphical/80379-g2.jpghttp://thetvdb.com/banners/graphical/80379-g11.jpghttp://thetvdb.com/banners/graphical/80379-g12.jpghttp://thetvdb.com/banners/graphical/80379-g19.jpghttp://thetvdb.com/banners/graphical/80379-g3.jpghttp://thetvdb.com/banners/graphical/80379-g4.jpghttp://thetvdb.com/banners/graphical/80379-g15.jpghttp://thetvdb.com/banners/graphical/80379-g.jpghttp://thetvdb.com/banners/graphical/80379-g22.jpghttp://thetvdb.com/banners/graphical/80379-g7.jpghttp://thetvdb.com/banners/graphical/80379-g10.jpghttp://thetvdb.com/banners/graphical/80379-g24.jpghttp://thetvdb.com/banners/graphical/80379-g8.jpghttp://thetvdb.com/banners/graphical/80379-g9.jpghttp://thetvdb.com/banners/graphical/80379-g14.jpghttp://thetvdb.com/banners/graphical/80379-g16.jpghttp://thetvdb.com/banners/graphical/80379-g21.jpghttp://thetvdb.com/banners/text/80379-4.jpghttp://thetvdb.com/banners/text/80379-2.jpghttp://thetvdb.com/banners/text/80379-3.jpghttp://thetvdb.com/banners/text/80379-5.jpghttp://thetvdb.com/banners/seasons/80379-6-8.jpghttp://thetvdb.com/banners/seasons/80379-0-4.jpghttp://thetvdb.com/banners/seasons/80379-1-12.jpghttp://thetvdb.com/banners/seasons/80379-3-9.jpghttp://thetvdb.com/banners/seasons/80379-2-11.jpghttp://thetvdb.com/banners/seasons/80379-5-9.jpghttp://thetvdb.com/banners/seasons/80379-4-8.jpghttp://thetvdb.com/banners/seasons/80379-7-3.jpghttp://thetvdb.com/banners/seasons/80379-3-4.jpghttp://thetvdb.com/banners/seasons/80379-4-5.jpghttp://thetvdb.com/banners/seasons/80379-2-9.jpghttp://thetvdb.com/banners/seasons/80379-0-2.jpghttp://thetvdb.com/banners/seasons/80379-6-6.jpghttp://thetvdb.com/banners/seasons/80379-4-4.jpghttp://thetvdb.com/banners/seasons/80379-6-2.jpghttp://thetvdb.com/banners/seasons/80379-1-9.jpghttp://thetvdb.com/banners/seasons/80379-6-4.jpghttp://thetvdb.com/banners/seasons/80379-1.jpghttp://thetvdb.com/banners/seasons/80379-3.jpghttp://thetvdb.com/banners/seasons/80379-4-2.jpghttp://thetvdb.com/banners/seasons/80379-5-7.jpghttp://thetvdb.com/banners/seasons/80379-2-10.jpghttp://thetvdb.com/banners/seasons/80379-6-5.jpghttp://thetvdb.com/banners/seasons/80379-1-5.jpghttp://thetvdb.com/banners/seasons/80379-5-4.jpghttp://thetvdb.com/banners/seasons/80379-4.jpghttp://thetvdb.com/banners/seasons/80379-6-3.jpghttp://thetvdb.com/banners/seasons/80379-5.jpghttp://thetvdb.com/banners/seasons/80379-3-6.jpghttp://thetvdb.com/banners/seasons/80379-2.jpghttp://thetvdb.com/banners/seasons/80379-7.jpghttp://thetvdb.com/banners/seasons/80379- + 1-7.jpghttp://thetvdb.com/banners/seasons/80379-5-2.jpghttp://thetvdb.com/banners/seasons/80379-5-3.jpghttp://thetvdb.com/banners/seasons/80379-7-2.jpghttp://thetvdb.com/banners/seasons/80379-1-2.jpghttp://thetvdb.com/banners/seasons/80379-2-5.jpghttp://thetvdb.com/banners/seasons/80379-4-3.jpghttp://thetvdb.com/banners/seasons/80379-5-5.jpghttp://thetvdb.com/banners/seasons/80379-0.jpghttp://thetvdb.com/banners/seasons/80379-3-5.jpghttp://thetvdb.com/banners/ + seasons/80379-1-6.jpghttp://thetvdb.com/banners/seasons/80379-2-3.jpghttp://thetvdb.com/banners/seasons/80379-2-8.jpghttp://thetvdb.com/banners/seasons/80379-6-7.jpghttp://thetvdb.com/banners/seasons/80379-5-8.jpghttp://thetvdb.com/banners/seasons/80379-4-7.jpghttp://thetvdb.com/banners/seasons/80379-2-6.jpghttp://thetvdb.com/banners/seasons/80379-3-8.jpghttp://thetvdb.com/banners/seasons/80379-1-11.jpghttp://thetvdb.com/banners/seasons/80379-1-10.jpghttp:// + thetvdb.com/banners/seasons/80379-1-8.jpghttp://thetvdb.com/banners/seasons/80379-3-7.jpghttp://thetvdb.com/banners/seasons/80379-2-4.jpghttp://thetvdb.com/banners/seasons/80379-1-3.jpghttp://thetvdb.com/banners/seasons/80379-1-4.jpghttp://thetvdb.com/banners/seasons/80379-3-3.jpghttp://thetvdb.com/banners/seasons/80379-2-7.jpghttp://thetvdb.com/banners/seasons/80379-6.jpghttp://thetvdb.com/banners/seasons/80379-2-2.jpghttp://thetvdb.com/banners/seasons/80379-5-6.jpghttp://thetvdb.com/banners/seasons/80379-3-2.jpghttp://thetvdb.com/banners/seasons/80379-4-6.jpghttp://thetvdb.com/banners/seasonswide/80379-5.jpghttp://thetvdb.com/banners/seasonswide/80379-3-2.jpghttp://thetvdb.com/banners/seasonswide/80379-1-2.jpghttp://thetvdb.com/banners/seasonswide/80379-2-2.jpghttp://thetvdb.com/banners/seasonswide/80379-4-2.jpghttp://thetvdb.com/banners/seasonswide/80379-0.jpghttp://thetvdb.com/banners/seasonswide/80379-0-2.jpghttp://thetvdb.com/banners/seasonswide/80379-1.jpghttp://thetvdb.com/banners/seasonswide/80379-2.jpghttp://thetvdb.com/banners/seasonswide/80379-4.jpghttp://thetvdb.com/banners/seasonswide/80379-3.jpghttp://thetvdb.com/banners/posters/80379-22.jpghttp://thetvdb.com/banners/posters/80379-18.jpghttp://thetvdb.com/banners/posters/80379-13.jpghttp://thetvdb.com/banners/posters/80379-10.jpghttp://thetvdb.com/banners/posters/80379-16.jpghttp://thetvdb.com/banners/posters/80379-1.jpghttp://thetvdb.com/banners/posters/80379-9.jpghttp://thetvdb.com/banners/posters/80379-2.jpghttp://thetvdb.com/banners/posters/80379-19.jpghttp://thetvdb.com/banners/posters/80379-8.jpghttp://thetvdb.com/banners/posters/80379-4.jpghttp://thetvdb.com/banners/posters/80379-20.jpghttp://thetvdb.com/banners/posters/80379-23.jpghttp://thetvdb.com/banners/posters/80379-7.jpghttp://thetvdb.com/banners/posters/80379-3.jpghttp://thetvdb.com/banners/posters/80379-12.jpghttp://thetvdb.com/banners/posters/80379-11.jpghttp://thetvdb.com/banners/posters/80379-15.jpghttp://thetvdb.com/banners/posters/80379-21.jpghttp://thetvdb.com/banners/posters/80379-14.jpghttp://thetvdb.com/banners/posters/80379-17.jpghttp://thetvdb.com/banners/posters/80379-6.jpghttp://thetvdb.com/banners/posters/80379-5.jpghttp://thetvdb.com/banners/posters/80379-22.jpghttp://thetvdb.com/banners/posters/80379-18.jpghttp://thetvdb.com/banners/posters/80379-13.jpghttp://thetvdb.com/banners/posters/80379-10.jpghttp://thetvdb.com/banners/posters/80379-16.jpghttp://thetvdb.com/banners/posters/80379-1.jpghttp://thetvdb.com/banners/posters/80379-9.jpghttp://thetvdb.com/banners/posters/80379-2.jpghttp://thetvdb.com/banners/posters/80379-19.jpghttp://thetvdb.com/banners/posters/80379-8.jpghttp://thetvdb.com/banners/posters/80379-4.jpghttp://thetvdb.com/banners/posters/80379-20.jpghttp://thetvdb.com/banners/posters/80379-23.jpghttp://thetvdb.com/banners/posters/80379-7.jpghttp://thetvdb.com/banners/posters/80379-3.jpghttp://thetvdb.com/banners/posters/80379-12.jpghttp://thetvdb.com/banners/posters/80379-11.jpghttp://thetvdb.com/banners/posters/80379-15.jpghttp://thetvdb.com/banners/posters/80379-21.jpghttp://thetvdb.com/banners/posters/80379-14.jpghttp://thetvdb.com/banners/posters/80379-17.jpghttp://thetvdb.com/banners/posters/80379-6.jpghttp://thetvdb.com/banners/posters/80379-5.jpg','','Comedy','','http://thetvdb.com/api/1D62F2F90030C444/series/80379/all/en.zip','fanart/original/80379-2.jpgfanart/original/80379-34.jpgfanart/original/80379- + 4.jpgfanart/original/80379-42.jpgfanart/original/80379-37.jpgfanart/original/80379-14.jpgfanart/original/80379-16.jpgfanart/original/80379-1.jpgfanart/original/80379-35.jpgfanart/original/80379-40.jpgfanart/original/80379-31.jpgfanart/original/80379-29.jpgfanart/original/80379-11.jpgfanart/original/80379-24.jpgfanart/original/80379-30.jpgfanart/original/80379-19.jpgfanart/original/80379-9.jpgfanart/original/80379-13.jpgfanart/original/80379-45.jpgfanart/original/80379-33.jpgfanart/original/80379-10.jpgfanart/original/80379-23.jpgfanart/original/80379-12.jpgfanart/original/80379-5.jpgfanart/original/80379-26.jpgfanart/original/80379-27.jpgfanart/original/80379-32.jpgfanart/original/80379-3.jpgfanart/original/80379-25.jpgfanart/original/80379-7.jpgfanart/original/80379-21.jpgfanart/original/80379-28.jpgfanart/original/80379-36.jpgfanart/original/80379-38.jpgfanart/original/80379-20.jpgfanart/original/80379-17.jpgfanart/original/80379-43.jpgfanart/original/80379-22.jpgfanart/original/80379-15.jpgfanart/original/80379-18.jpgfanart/original/80379-6.jpgfanart/original/80379-8.jpgfanart/original/80379-41.jpgfanart/original/80379-44.jpgfanart/original/80379-39.jpg','80379','TV-PG','CBS','','/tmp/tvshows/The.Big.Bang.Theory/','1',NULL,NULL,NULL,NULL,NULL,NULL); + CREATE TABLE episode ( idEpisode integer primary key, idFile integer,c00 text,c01 text,c02 text,c03 text,c04 text,c05 text,c06 text,c07 text,c08 text,c09 text,c10 text,c11 text,c12 varchar(24),c13 varchar(24),c14 text,c15 text,c16 text,c17 varchar(24),c18 text,c19 text,c20 text,c21 text,c22 text,c23 text, idShow integer); + INSERT INTO "episode" VALUES(1,1,'Pilot','Brilliant physicist roommates Leonard and Sheldon meet their new neighbor Penny, who begins showing them that as much as they know about science, they know little about actual living.','','7.700000','Chuck Lorre / Bill Prady','2007-09-24','http://thetvdb.com/banners/episodes/80379/332484.jpg','',NULL,'1800','James Burrows','','1','1','','-1','-1','-1','/tmp/tvshows/The.Big.Bang.Theory/The.Big.Bang.Theory.S01E01.WEB-DL.AAC2.0.H264.mkv','2','332484',NULL,NULL,NULL,1); + CREATE TABLE tvshowlinkpath (idShow integer, idPath integer); + INSERT INTO "tvshowlinkpath" VALUES(1,2); + CREATE TABLE seasons ( idSeason integer primary key, idShow integer, season integer); + INSERT INTO "seasons" VALUES(1,1,-1); + INSERT INTO "seasons" VALUES(2,1,0); + INSERT INTO "seasons" VALUES(3,1,1); + INSERT INTO "seasons" VALUES(4,1,2); + INSERT INTO "seasons" VALUES(5,1,3); + INSERT INTO "seasons" VALUES(6,1,4); + INSERT INTO "seasons" VALUES(7,1,5); + INSERT INTO "seasons" VALUES(8,1,6); + INSERT INTO "seasons" VALUES(9,1,7); + CREATE TABLE art(art_id INTEGER PRIMARY KEY, media_id INTEGER, media_type TEXT, type TEXT, url TEXT); + INSERT INTO "art" VALUES(1,1,'actor','thumb','http://thetvdb.com/banners/actors/73597.jpg'); + INSERT INTO "art" VALUES(2,2,'actor','thumb','http://thetvdb.com/banners/actors/73596.jpg'); + INSERT INTO "art" VALUES(3,3,'actor','thumb','http://thetvdb.com/banners/actors/73595.jpg'); + INSERT INTO "art" VALUES(4,4,'actor','thumb','http://thetvdb.com/banners/actors/73599.jpg'); + INSERT INTO "art" VALUES(5,5,'actor','thumb','http://thetvdb.com/banners/actors/73598.jpg'); + INSERT INTO "art" VALUES(6,6,'actor','thumb','http://thetvdb.com/banners/actors/283158.jpg'); + INSERT INTO "art" VALUES(7,7,'actor','thumb','http://thetvdb.com/banners/actors/283157.jpg'); + INSERT INTO "art" VALUES(8,8,'actor','thumb','http://thetvdb.com/banners/actors/91271.jpg'); + INSERT INTO "art" VALUES(9,9,'actor','thumb','http://thetvdb.com/banners/actors/294178.jpg'); + INSERT INTO "art" VALUES(10,10,'actor','thumb','http://thetvdb.com/banners/actors/283159.jpg'); + INSERT INTO "art" VALUES(11,1,'tvshow','banner','http://thetvdb.com/banners/graphical/80379-g13.jpg'); + INSERT INTO "art" VALUES(12,1,'tvshow','fanart','http://thetvdb.com/banners/fanart/original/80379-2.jpg'); + INSERT INTO "art" VALUES(13,1,'tvshow','poster','http://thetvdb.com/banners/posters/80379-22.jpg'); + INSERT INTO "art" VALUES(14,1,'season','poster','http://thetvdb.com/banners/posters/80379-22.jpg'); + INSERT INTO "art" VALUES(15,2,'season','banner','http://thetvdb.com/banners/seasonswide/80379-0.jpg'); + INSERT INTO "art" VALUES(16,2,'season','poster','http://thetvdb.com/banners/seasons/80379-0-4.jpg'); + INSERT INTO "art" VALUES(17,3,'season','banner','http://thetvdb.com/banners/seasonswide/80379-1-2.jpg'); + INSERT INTO "art" VALUES(18,3,'season','poster','http://thetvdb.com/banners/seasons/80379-1-12.jpg'); + INSERT INTO "art" VALUES(19,4,'season','banner','http://thetvdb.com/banners/seasonswide/80379-2-2.jpg'); + INSERT INTO "art" VALUES(20,4,'season','poster','http://thetvdb.com/banners/seasons/80379-2-11.jpg'); + INSERT INTO "art" VALUES(21,5,'season','banner','http://thetvdb.com/banners/seasonswide/80379-3-2.jpg'); + INSERT INTO "art" VALUES(22,5,'season','poster','http://thetvdb.com/banners/seasons/80379-3-9.jpg'); + INSERT INTO "art" VALUES(23,6,'season','banner','http://thetvdb.com/banners/seasonswide/80379-4-2.jpg'); + INSERT INTO "art" VALUES(24,6,'season','poster','http://thetvdb.com/banners/seasons/80379-4-8.jpg'); + INSERT INTO "art" VALUES(25,7,'season','banner','http://thetvdb.com/banners/seasonswide/80379-5.jpg'); + INSERT INTO "art" VALUES(26,7,'season','poster','http://thetvdb.com/banners/seasons/80379-5-9.jpg'); + INSERT INTO "art" VALUES(27,8,'season','poster','http://thetvdb.com/banners/seasons/80379-6-8.jpg'); + INSERT INTO "art" VALUES(28,9,'season','poster','http://thetvdb.com/banners/seasons/80379-7-3.jpg'); + INSERT INTO "art" VALUES(29,1,'episode','thumb','http://thetvdb.com/banners/episodes/80379/332484.jpg'); + CREATE INDEX ix_bookmark ON bookmark (idFile, type); + CREATE INDEX ix_path ON path ( strPath ); + CREATE INDEX ix_files ON files ( idPath, strFilename ); + CREATE UNIQUE INDEX ix_episode_file_1 on episode (idEpisode, idFile); + CREATE UNIQUE INDEX id_episode_file_2 on episode (idFile, idEpisode); + CREATE INDEX ix_episode_season_episode on episode (c12, c13); + CREATE INDEX ix_episode_bookmark on episode (c17); + CREATE INDEX ix_episode_show1 on episode(idEpisode,idShow); + CREATE INDEX ix_episode_show2 on episode(idShow,idEpisode); + CREATE UNIQUE INDEX ix_tvshowlinkpath_1 ON tvshowlinkpath ( idShow, idPath ); + CREATE UNIQUE INDEX ix_tvshowlinkpath_2 ON tvshowlinkpath ( idPath, idShow ); + CREATE INDEX ixEpisodeBasePath ON episode ( c19 ); + CREATE INDEX ixTVShowBasePath on tvshow ( c17 ); + CREATE INDEX ix_seasons ON seasons (idShow, season); + CREATE INDEX ix_art ON art(media_id, media_type, type); + CREATE VIEW episodeview + AS + SELECT episode.*, + files.strfilename AS strFileName, + path.strpath AS strPath, + files.playcount AS playCount, + files.lastplayed AS lastPlayed, + files.dateadded AS dateAdded, + tvshow.c00 AS strTitle, + tvshow.c14 AS strStudio, + tvshow.c05 AS premiered, + tvshow.c13 AS mpaa, + tvshow.c16 AS strShowPath, + bookmark.timeinseconds AS resumeTimeInSeconds, + bookmark.totaltimeinseconds AS totalTimeInSeconds, + seasons.idseason AS idSeason + FROM episode + JOIN files + ON files.idfile = episode.idfile + JOIN tvshow + ON tvshow.idshow = episode.idshow + LEFT JOIN seasons + ON seasons.idshow = episode.idshow + AND seasons.season = episode.c12 + JOIN path + ON files.idpath = path.idpath + LEFT JOIN bookmark + ON bookmark.idfile = episode.idfile + AND bookmark.type = 1; + CREATE VIEW tvshowview + AS + SELECT tvshow.*, + path.strpath AS strPath, + path.dateadded AS dateAdded, + Max(files.lastplayed) AS lastPlayed, + NULLIF(Count(episode.c12), 0) AS totalCount, + Count(files.playcount) AS watchedcount, + NULLIF(Count(DISTINCT( episode.c12 )), 0) AS totalSeasons + FROM tvshow + LEFT JOIN tvshowlinkpath + ON tvshowlinkpath.idshow = tvshow.idshow + LEFT JOIN path + ON path.idpath = tvshowlinkpath.idpath + LEFT JOIN episode + ON episode.idshow = tvshow.idshow + LEFT JOIN files + ON files.idfile = episode.idfile + GROUP BY tvshow.idshow; + SELECT + episodeview.c12, + path.strPath, + tvshowview.c00, + tvshowview.c01, + tvshowview.c05, + tvshowview.c08, + tvshowview.c14, + tvshowview.c13, + seasons.idSeason, + count(1), + count(files.playCount) + FROM episodeview + JOIN tvshowview ON tvshowview.idShow = episodeview.idShow + JOIN seasons ON (seasons.idShow = tvshowview.idShow + AND seasons.season = episodeview.c12) + JOIN files ON files.idFile = episodeview.idFile + JOIN tvshowlinkpath ON tvshowlinkpath.idShow = tvshowview.idShow + JOIN path ON path.idPath = tvshowlinkpath.idPath + WHERE tvshowview.idShow = 1 + GROUP BY episodeview.c12; +---- +stmt 0 ok +stmt 190 ok +stmt 410 err 1 -1 716 no such table: path +stmt 716 err 1 -1 872 no such table: path +stmt 872 ok +stmt 1010 err 1 -1 1129 no such table: files +stmt 1129 ok +stmt 1398 err 1 -1 22505 no such table: tvshow +stmt 22505 ok +stmt 22831 err 1 -1 23361 no such table: episode +stmt 23361 ok +stmt 23425 err 1 -1 23469 no such table: tvshowlinkpath +stmt 23469 ok +stmt 23557 err 1 -1 23597 no such table: seasons +stmt 23597 err 1 -1 23636 no such table: seasons +stmt 23636 err 1 -1 23675 no such table: seasons +stmt 23675 err 1 -1 23714 no such table: seasons +stmt 23714 err 1 -1 23753 no such table: seasons +stmt 23753 err 1 -1 23792 no such table: seasons +stmt 23792 err 1 -1 23831 no such table: seasons +stmt 23831 err 1 -1 23870 no such table: seasons +stmt 23870 err 1 -1 23909 no such table: seasons +stmt 23909 ok +stmt 24013 err 1 -1 24108 no such table: art +stmt 24108 err 1 -1 24203 no such table: art +stmt 24203 err 1 -1 24298 no such table: art +stmt 24298 err 1 -1 24393 no such table: art +stmt 24393 err 1 -1 24488 no such table: art +stmt 24488 err 1 -1 24584 no such table: art +stmt 24584 err 1 -1 24680 no such table: art +stmt 24680 err 1 -1 24775 no such table: art +stmt 24775 err 1 -1 24871 no such table: art +stmt 24871 err 1 -1 24969 no such table: art +stmt 24969 err 1 -1 25074 no such table: art +stmt 25074 err 1 -1 25183 no such table: art +stmt 25183 err 1 -1 25285 no such table: art +stmt 25285 err 1 -1 25387 no such table: art +stmt 25387 err 1 -1 25492 no such table: art +stmt 25492 err 1 -1 25595 no such table: art +stmt 25595 err 1 -1 25702 no such table: art +stmt 25702 err 1 -1 25806 no such table: art +stmt 25806 err 1 -1 25913 no such table: art +stmt 25913 err 1 -1 26017 no such table: art +stmt 26017 err 1 -1 26124 no such table: art +stmt 26124 err 1 -1 26227 no such table: art +stmt 26227 err 1 -1 26334 no such table: art +stmt 26334 err 1 -1 26437 no such table: art +stmt 26437 err 1 -1 26542 no such table: art +stmt 26542 err 1 -1 26645 no such table: art +stmt 26645 err 1 -1 26748 no such table: art +stmt 26748 err 1 -1 26851 no such table: art +stmt 26851 err 1 -1 26958 no such table: art +stmt 26958 err 1 -1 27013 no such table: main.bookmark +stmt 27013 err 1 -1 27057 no such table: main.path +stmt 27057 err 1 -1 27115 no such table: main.files +stmt 27115 err 1 -1 27187 no such table: main.episode +stmt 27187 err 1 -1 27259 no such table: main.episode +stmt 27259 err 1 -1 27323 no such table: main.episode +stmt 27323 err 1 -1 27376 no such table: main.episode +stmt 27376 err 1 -1 27438 no such table: main.episode +stmt 27438 err 1 -1 27500 no such table: main.episode +stmt 27500 err 1 -1 27580 no such table: main.tvshowlinkpath +stmt 27580 err 1 -1 27660 no such table: main.tvshowlinkpath +stmt 27660 err 1 -1 27713 no such table: main.episode +stmt 27713 err 1 -1 27764 no such table: main.tvshow +stmt 27764 err 1 -1 27819 no such table: main.seasons +stmt 27819 err 1 -1 27877 no such table: main.art +stmt 27877 ok +stmt 29118 ok +stmt 29961 err 1 -1 30633 no such table: episodeview +==== transitive1-500 + + CREATE TABLE x(i INTEGER PRIMARY KEY, y TEXT); + INSERT INTO x VALUES(10, '10'); + SELECT * FROM x WHERE x.y>='1' AND x.y<'2' AND x.i=x.y; +---- +stmt 0 ok +stmt 49 err 1 -1 83 no such table: x +stmt 83 err 1 -1 141 no such table: x +==== transitive1-510 + + CREATE TABLE t1(x TEXT); + CREATE TABLE t2(y TEXT); + INSERT INTO t1 VALUES('abc'); + INSERT INTO t2 VALUES('ABC'); + SELECT * FROM t1 CROSS JOIN t2 WHERE (x=y COLLATE nocase) AND y='ABC'; +---- +stmt 0 ok +stmt 27 ok +stmt 55 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 120 no such table: t2 +stmt 120 err 1 -1 193 no such table: t1 +==== transitive1-520 + + CREATE TABLE t3(i INTEGER PRIMARY KEY, t TEXT); + INSERT INTO t3 VALUES(10, '10'); + SELECT * FROM t3 WHERE i=t AND t = '10 '; +---- +stmt 0 ok +stmt 50 err 1 -1 85 no such table: t3 +stmt 85 err 1 -1 129 no such table: t3 +==== transitive1-530 + + CREATE TABLE u1(x TEXT, y INTEGER, z TEXT); + CREATE INDEX i1 ON u1(x); + INSERT INTO u1 VALUES('00013', 13, '013'); + SELECT * FROM u1 WHERE x=y AND y=z AND z='013'; +---- +stmt 0 ok +stmt 46 err 1 -1 74 no such table: main.u1 +stmt 74 err 1 -1 119 no such table: u1 +stmt 119 err 1 -1 169 no such table: u1 +==== transitive1-540 + + CREATE TABLE b1(x, y); + INSERT INTO b1 VALUES('abc', 'ABC'); + CREATE INDEX b1x ON b1(x); + SELECT * FROM b1 WHERE (x=y COLLATE nocase) AND y='ABC'; +---- +stmt 0 ok +stmt 25 err 1 -1 64 no such table: b1 +stmt 64 err 1 -1 93 no such table: main.b1 +stmt 93 err 1 -1 152 no such table: b1 +==== transitive1-550 + + CREATE TABLE c1(x, y COLLATE nocase, z); + INSERT INTO c1 VALUES('ABC', 'ABC', 'abc'); + SELECT * FROM c1 WHERE x=y AND y=z AND z='abc'; +---- +stmt 0 ok +stmt 43 err 1 -1 89 no such table: c1 +stmt 89 err 1 -1 139 no such table: c1 +==== transitive1-560 + + CREATE INDEX c1x ON c1(x); + SELECT * FROM c1 WHERE x=y AND y=z AND z='abc'; +---- +stmt 0 err 1 -1 29 no such table: main.c1 +stmt 29 err 1 -1 79 no such table: c1 +==== transitive1-560eqp + + EXPLAIN QUERY PLAN + SELECT * FROM c1 WHERE x=y AND y=z AND z='abc'; +---- +stmt 0 err 1 -1 71 no such table: c1 +==== transitive1-570 + + SELECT * FROM c1 WHERE x=y AND z=y AND z='abc'; +---- +stmt 0 err 1 -1 50 no such table: c1 +==== transitive1-570eqp + + EXPLAIN QUERY PLAN + SELECT * FROM c1 WHERE x=y AND z=y AND z='abc'; +---- +stmt 0 err 1 -1 71 no such table: c1 +==== transitive1-600 + + CREATE TABLE t0(a0 INT, b1 INT); + CREATE INDEX t0b1 ON t0(b1); + CREATE TABLE t1(w,x,y,z3 INT); + INSERT INTO t0(a0, b1) VALUES (0,1); + INSERT INTO t1(w,x,y,z3) VALUES (7,8,9,1); +---- +stmt 0 ok +stmt 35 err 1 -1 66 no such table: main.t0 +stmt 66 ok +stmt 99 err 1 -1 138 no such table: t0 +stmt 138 err 1 -1 183 no such table: t1 +==== transitive1-610 + + SELECT ALL * FROM t0,t1 WHERE b1=z3 AND a0=z3; +---- +stmt 0 err 1 -1 49 no such table: t0 +==== transitive1-620 + + SELECT ALL * FROM t0,t1 WHERE likely(b1=z3) AND a0=z3; +---- +stmt 0 err 1 -1 57 no such table: t0 +==== transitive1-630 + + DROP TABLE t0; + DROP TABLE t1; + CREATE TABLE t0(c0 INT, c1 INT UNIQUE); + CREATE TABLE t1(c0 INT); + INSERT INTO t0(c0, c1) VALUES (0, 1); + INSERT INTO t1(c0) VALUES (1); + SELECT ALL * FROM t1 NATURAL JOIN t0 WHERE (t1.c0=t0.c1); + SELECT ALL * FROM t1 NATURAL JOIN t0 WHERE (likely(t1.c0=t0.c1)); + SELECT ALL * FROM t1,t0 WHERE (likely(t1.c0=t0.c1) AND t1.c0=t0.c0); +---- +stmt 0 err 1 -1 17 no such table: t0 +stmt 17 err 1 -1 34 no such table: t1 +stmt 34 ok +stmt 76 ok +stmt 103 err 1 -1 143 no such table: t0 +stmt 143 err 1 -1 176 no such table: t1 +stmt 176 err 1 -1 236 no such table: t1 +stmt 236 err 1 -1 304 no such table: t1 +stmt 304 err 1 -1 375 no such table: t1 +==== transitive1-700 + + CREATE TABLE t1(a INT PRIMARY KEY); + INSERT INTO t1(a) VALUES(1),(2),(3); + CREATE TABLE t2(x INTEGER PRIMARY KEY,y INT); + INSERT INTO t2(y) VALUES(2),(3); +---- +stmt 0 ok +stmt 38 err 1 -1 77 no such table: t1 +stmt 77 ok +stmt 125 err 1 -1 160 no such table: t2 +==== transitive1-710 + + SELECT * FROM t1 CROSS JOIN t2 WHERE t2.y=t1.a AND t1.a=t2.x +---- +stmt 0 err 1 -1 64 no such table: t1 +==== transitive1-720 + + SELECT * FROM t1 CROSS JOIN t2 WHERE likely(t2.y=t1.a) AND unlikely(t1.a=t2.x) +---- +stmt 0 err 1 -1 82 no such table: t1 +==== transitive1-800 + + CREATE TABLE t1(a INT); + INSERT INTO t1 VALUES(0),(3); + CREATE TABLE t2(b INT UNIQUE, c INT); + INSERT INTO t2 VALUES(1,4) ,(0,5); + SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c=a AND b IS a); + SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE a=c AND a IS b); + SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE a=c AND b IS a); + SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c=a AND a IS b); +---- +stmt 0 ok +stmt 26 err 1 -1 58 no such table: t1 +stmt 58 ok +stmt 98 err 1 -1 135 no such table: t2 +stmt 135 err 1 -1 208 no such table: t1 +stmt 208 err 1 -1 281 no such table: t1 +stmt 281 err 1 -1 354 no such table: t1 +stmt 354 err 1 -1 427 no such table: t1 +==== transitive1-810 + + CREATE TABLE t3(a INTEGER PRIMARY KEY,b); + INSERT INTO t3(a,b) VALUES(1,2),(5,5),(7,11); + SELECT * FROM t3 WHERE a=b AND a='5'; +---- +stmt 0 ok +stmt 44 err 1 -1 92 no such table: t3 +stmt 92 err 1 -1 132 no such table: t3 +==== transitive1-811 + + SELECT * FROM t3 WHERE a=b AND a='4'; +---- +stmt 0 err 1 -1 40 no such table: t3 +==== transitive1-812 + + SELECT * FROM t3 WHERE a=b AND a='7'; +---- +stmt 0 err 1 -1 40 no such table: t3 +==== transitive1-813 + + SELECT * FROM t3 WHERE a=b AND a='5x'; +---- +stmt 0 err 1 -1 41 no such table: t3 +==== transitive1-900 + + CREATE TABLE t1(a TEXT); + CREATE TABLE t2(b TEXT COLLATE NOCASE); + INSERT INTO t1 VALUES('abc'); + INSERT INTO t2 VALUES('abc'); + SELECT * FROM t1 CROSS JOIN t2 WHERE a=b AND b='ABC'; +---- +stmt 0 ok +stmt 27 ok +stmt 69 err 1 -1 101 no such table: t1 +stmt 101 err 1 -1 133 no such table: t2 +stmt 133 err 1 -1 189 no such table: t1 +==== 1000 + + PRAGMA automatic_index = 0; + + CREATE TABLE t1(a TEXT); + CREATE TABLE t2(b TEXT); + + INSERT INTO t1 VALUES ('hello'); + INSERT INTO t1 VALUES ('Hello'); + INSERT INTO t1 VALUES ('HELLO'); + INSERT INTO t1 VALUES ('HeLLo'); + + INSERT INTO t2 VALUES ('hello'); + INSERT INTO t2 VALUES ('Hello'); + INSERT INTO t2 VALUES ('HELLO'); + INSERT INTO t2 VALUES ('HeLLo'); +---- +stmt 0 ok +stmt 30 ok +stmt 60 ok +stmt 87 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 193 no such table: t1 +stmt 193 err 1 -1 228 no such table: t1 +stmt 228 err 1 -1 264 no such table: t2 +stmt 264 err 1 -1 299 no such table: t2 +stmt 299 err 1 -1 334 no such table: t2 +stmt 334 err 1 -1 369 no such table: t2 +==== 1010 + + SELECT t1.a, t2.b + FROM t1 CROSS JOIN t2 + WHERE t1.a = t2.b + AND t2.b COLLATE NOCASE = 'Hello'; +---- +stmt 0 err 1 -1 107 no such table: t1 +==== 1020 + + SELECT t1.a, t2.b + FROM t1 CROSS JOIN t2 + WHERE t1.a = t2.b + AND t2.b COLLATE NOCASE = 'Hello'; +---- +stmt 0 err 1 -1 107 no such table: t1 +==== 1100 + + PRAGMA automatic_index = 0; + CREATE TABLE t1(x); + CREATE TABLE t2(y); + + INSERT INTO t1 VALUES('ABC'); + INSERT INTO t2 VALUES('abc'); +---- +stmt 0 ok +stmt 30 ok +stmt 52 ok +stmt 74 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 139 no such table: t2 +==== 1110 + + SELECT * FROM t1 CROSS JOIN t2 + WHERE (t1.x COLLATE nocase) = (t2.y COLLATE nocase) + AND (t2.y = 'ABC') +---- +stmt 0 err 1 -1 113 no such table: t1 +==== 1200 + + PRAGMA automatic_index = 0; + CREATE TABLE t1(x); + CREATE TABLE t2(y); + + INSERT INTO t1 VALUES('ABC'); + INSERT INTO t2 VALUES('ABC'); +---- +stmt 0 ok +stmt 30 ok +stmt 52 ok +stmt 74 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 139 no such table: t2 +==== 1210 + + SELECT * FROM t1 CROSS JOIN t2 + WHERE t1.x = t2.y + AND (t1.x COLLATE nocase = 'abc') +---- +stmt 0 err 1 -1 93 no such table: t1 diff --git a/parser/testdata/trigger2.metadata.json b/parser/testdata/trigger2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trigger2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trigger2.test b/parser/testdata/trigger2.test new file mode 100644 index 0000000..4903159 --- /dev/null +++ b/parser/testdata/trigger2.test @@ -0,0 +1,381 @@ +==== trigger2-generated + + + CREATE TABLE other_tbl(a, b); + INSERT INTO other_tbl VALUES(1, 2); + INSERT INTO other_tbl VALUES(3, 4); + -- INSERT INTO tbl SELECT * FROM other_tbl; + INSERT INTO tbl VALUES(5, 6); + DROP TABLE other_tbl; + + SELECT * FROM rlog; +---- +stmt 0 ok +stmt 41 err 1 -1 85 no such table: other_tbl +stmt 85 err 1 -1 129 no such table: other_tbl +stmt 129 err 1 -1 219 no such table: tbl +stmt 219 err 1 -1 249 no such table: other_tbl +stmt 249 err 1 -1 280 no such table: rlog +==== trigger2-3.1 + + UPDATE tbl SET b = 1, c = 10; -- 2 + UPDATE tbl SET b = 10; -- 0 + UPDATE tbl SET d = 4 WHERE a = 0; --1 + UPDATE tbl SET a = 4, b = 10; --0 + SELECT * FROM log; +---- +stmt 0 err 1 -1 34 no such table: tbl +stmt 34 err 1 -1 66 no such table: tbl +stmt 66 err 1 -1 109 no such table: tbl +stmt 109 err 1 -1 147 no such table: tbl +stmt 147 err 1 -1 174 no such table: log +==== trigger2-3.2 + + + INSERT INTO tbl VALUES(0, 0, 0, 0); -- 1 (ifcapable subquery) + SELECT * FROM log; + UPDATE log SET a = 0; + + INSERT INTO tbl VALUES(0, 0, 0, 0); -- 0 + SELECT * FROM log; + UPDATE log SET a = 0; + + INSERT INTO tbl VALUES(200, 0, 0, 0); -- 1 + SELECT * FROM log; + UPDATE log SET a = 0; +---- +stmt 0 err 1 -1 42 no such table: tbl +stmt 42 err 1 -1 95 no such table: log +stmt 95 err 1 -1 121 no such table: log +stmt 121 err 1 -1 162 no such table: tbl +stmt 162 err 1 -1 194 no such table: log +stmt 194 err 1 -1 220 no such table: log +stmt 220 err 1 -1 263 no such table: tbl +stmt 263 err 1 -1 295 no such table: log +stmt 295 err 1 -1 321 no such table: log +==== trigger2-4.1 + + INSERT INTO tblA values(1, 2); + SELECT * FROM tblA; + SELECT * FROM tblB; + SELECT * FROM tblC; +---- +stmt 0 err 1 -1 35 no such table: tblA +stmt 35 err 1 -1 59 no such table: tblA +stmt 59 err 1 -1 83 no such table: tblB +stmt 83 err 1 -1 107 no such table: tblC +==== trigger2-4.2 + + INSERT INTO tbl VALUES (1, 2, 3); + select * from tbl; +---- +stmt 0 err 1 -1 38 no such table: tbl +stmt 38 err 1 -1 61 no such table: tbl +==== trigger2-6.1a + + BEGIN; + INSERT INTO tbl values (1, 2, 3); + SELECT * from tbl; +---- +stmt 0 ok +stmt 13 err 1 -1 53 no such table: tbl +stmt 53 err 1 -1 78 no such table: tbl +==== trigger2-6.1b + + INSERT OR ABORT INTO tbl values (2, 2, 3); +---- +stmt 0 err 1 -1 49 no such table: tbl +==== trigger2-6.1c + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== trigger2-6.1d + + INSERT OR FAIL INTO tbl values (2, 2, 3); +---- +stmt 0 err 1 -1 48 no such table: tbl +==== trigger2-6.1e + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== trigger2-6.1f + + INSERT OR REPLACE INTO tbl values (2, 2, 3); + SELECT * from tbl; +---- +stmt 0 err 1 -1 51 no such table: tbl +stmt 51 err 1 -1 76 no such table: tbl +==== trigger2-6.1g + + INSERT OR ROLLBACK INTO tbl values (3, 2, 3); +---- +stmt 0 err 1 -1 52 no such table: tbl +==== trigger2-6.1h + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== trigger2-6.2a + + BEGIN; + UPDATE tbl SET a = 1 WHERE a = 4; + SELECT * from tbl; +---- +stmt 0 ok +stmt 13 err 1 -1 53 no such table: tbl +stmt 53 err 1 -1 78 no such table: tbl +==== trigger2-6.2b + + UPDATE OR ABORT tbl SET a = 4 WHERE a = 1; +---- +stmt 0 err 1 -1 49 no such table: tbl +==== trigger2-6.2c + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== trigger2-6.2d + + UPDATE OR FAIL tbl SET a = 4 WHERE a = 1; +---- +stmt 0 err 1 -1 48 no such table: tbl +==== trigger2-6.2e + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== trigger2-6.2f.1 + + UPDATE OR REPLACE tbl SET a = 1 WHERE a = 4; + SELECT * from tbl; +---- +stmt 0 err 1 -1 51 no such table: tbl +stmt 51 err 1 -1 76 no such table: tbl +==== trigger2-6.2f.2 + + INSERT INTO tbl VALUES (2, 3, 4); + SELECT * FROM tbl; +---- +stmt 0 err 1 -1 40 no such table: tbl +stmt 40 err 1 -1 65 no such table: tbl +==== trigger2-6.2g + + UPDATE OR ROLLBACK tbl SET a = 4 WHERE a = 1; +---- +stmt 0 err 1 -1 52 no such table: tbl +==== trigger2-6.2h + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== trigger2-7.1 + + CREATE TABLE ab(a, b); + CREATE TABLE cd(c, d); + INSERT INTO ab VALUES (1, 2); + INSERT INTO ab VALUES (0, 0); + INSERT INTO cd VALUES (3, 4); + + CREATE TABLE tlog(ii INTEGER PRIMARY KEY, + olda, oldb, oldc, oldd, newa, newb, newc, newd); + + CREATE VIEW abcd AS SELECT a, b, c, d FROM ab, cd; + + CREATE TRIGGER before_update INSTEAD OF UPDATE ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + old.a, old.b, old.c, old.d, new.a, new.b, new.c, new.d); + END; + CREATE TRIGGER after_update INSTEAD OF UPDATE ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + old.a, old.b, old.c, old.d, new.a, new.b, new.c, new.d); + END; + + CREATE TRIGGER before_delete INSTEAD OF DELETE ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + old.a, old.b, old.c, old.d, 0, 0, 0, 0); + END; + CREATE TRIGGER after_delete INSTEAD OF DELETE ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + old.a, old.b, old.c, old.d, 0, 0, 0, 0); + END; + + CREATE TRIGGER before_insert INSTEAD OF INSERT ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + 0, 0, 0, 0, new.a, new.b, new.c, new.d); + END; + CREATE TRIGGER after_insert INSTEAD OF INSERT ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + 0, 0, 0, 0, new.a, new.b, new.c, new.d); + END; +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 82 no such table: ab +stmt 82 err 1 -1 114 no such table: ab +stmt 114 err 1 -1 146 no such table: cd +stmt 146 ok +stmt 247 ok +stmt 301 err 1 -1 365 no such table: main.abcd +stmt 465 err 1 -1 527 no such table: main.abcd +stmt 627 err 1 -1 691 no such table: main.abcd +stmt 775 err 1 -1 837 no such table: main.abcd +stmt 921 err 1 -1 985 no such table: main.abcd +stmt 1069 err 1 -1 1132 no such table: main.abcd +==== trigger2-7.2 + + UPDATE abcd SET a = 100, b = 5*5 WHERE a = 1; + DELETE FROM abcd WHERE a = 1; + INSERT INTO abcd VALUES(10, 20, 30, 40); + SELECT * FROM tlog; +---- +stmt 0 err 1 -1 50 no such table: abcd +stmt 50 err 1 -1 84 no such table: abcd +stmt 84 err 1 -1 129 no such table: abcd +stmt 129 err 1 -1 153 no such table: tlog +==== trigger2-7.3 + + DELETE FROM tlog; + INSERT INTO abcd VALUES(10, 20, 30, 40); + UPDATE abcd SET a = 100, b = 5*5 WHERE a = 1; + DELETE FROM abcd WHERE a = 1; + SELECT * FROM tlog; +---- +stmt 0 err 1 -1 22 no such table: tlog +stmt 22 err 1 -1 67 no such table: abcd +stmt 67 err 1 -1 117 no such table: abcd +stmt 117 err 1 -1 151 no such table: abcd +stmt 151 err 1 -1 175 no such table: tlog +==== trigger2-7.4 + + DELETE FROM tlog; + DELETE FROM abcd WHERE a = 1; + INSERT INTO abcd VALUES(10, 20, 30, 40); + UPDATE abcd SET a = 100, b = 5*5 WHERE a = 1; + SELECT * FROM tlog; +---- +stmt 0 err 1 -1 22 no such table: tlog +stmt 22 err 1 -1 56 no such table: abcd +stmt 56 err 1 -1 101 no such table: abcd +stmt 101 err 1 -1 151 no such table: abcd +stmt 151 err 1 -1 175 no such table: tlog +==== trigger2-8.1 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1,2,3); + CREATE VIEW v1 AS + SELECT a+b AS x, b+c AS y, a+c AS z FROM t1; + SELECT * FROM v1; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 ok +stmt 135 err 1 -1 157 no such table: v1 +==== trigger2-8.2 + + CREATE TABLE v1log(a,b,c,d,e,f); + CREATE TRIGGER r1 INSTEAD OF DELETE ON v1 BEGIN + INSERT INTO v1log VALUES(OLD.x,NULL,OLD.y,NULL,OLD.z,NULL); + END; + DELETE FROM v1 WHERE x=1; + SELECT * FROM v1log; +---- +stmt 0 ok +stmt 37 err 1 -1 89 no such table: main.v1 +stmt 164 err 1 -1 194 no such table: v1 +stmt 194 err 1 -1 219 no such table: v1log +==== trigger2-8.3 + + DELETE FROM v1 WHERE x=3; + SELECT * FROM v1log; +---- +stmt 0 err 1 -1 30 no such table: v1 +stmt 30 err 1 -1 55 no such table: v1log +==== trigger2-8.4 + + INSERT INTO t1 VALUES(4,5,6); + DELETE FROM v1log; + DELETE FROM v1 WHERE y=11; + SELECT * FROM v1log; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 57 no such table: v1log +stmt 57 err 1 -1 88 no such table: v1 +stmt 88 err 1 -1 113 no such table: v1log +==== trigger2-8.5 + + CREATE TRIGGER r2 INSTEAD OF INSERT ON v1 BEGIN + INSERT INTO v1log VALUES(NULL,NEW.x,NULL,NEW.y,NULL,NEW.z); + END; + DELETE FROM v1log; + INSERT INTO v1 VALUES(1,2,3); + SELECT * FROM v1log; +---- +stmt 0 err 1 -1 52 no such table: main.v1 +stmt 127 err 1 -1 150 no such table: v1log +stmt 150 err 1 -1 184 no such table: v1 +stmt 184 err 1 -1 209 no such table: v1log +==== trigger2-8.6 + + CREATE TRIGGER r3 INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO v1log VALUES(OLD.x,NEW.x,OLD.y,NEW.y,OLD.z,NEW.z); + END; + DELETE FROM v1log; + UPDATE v1 SET x=x+100, y=y+200, z=z+300; + SELECT * FROM v1log; +---- +stmt 0 err 1 -1 52 no such table: main.v1 +stmt 130 err 1 -1 153 no such table: v1log +stmt 153 err 1 -1 198 no such table: v1 +stmt 198 err 1 -1 223 no such table: v1log +==== trigger2-9.1 + + CREATE TABLE t3(a TEXT, b TEXT); + CREATE VIEW v3 AS SELECT t3.a FROM t3; + CREATE TRIGGER trig1 INSTEAD OF DELETE ON v3 BEGIN + SELECT 1; + END; + DELETE FROM v3 WHERE a = 1; +---- +stmt 0 ok +stmt 37 ok +stmt 80 err 1 -1 135 no such table: main.v3 +stmt 160 err 1 -1 192 no such table: v3 +==== trigger2-10.1 + + CREATE TABLE t1(a,b,c,d); + CREATE VIEW v2(a,b,c,d) AS SELECT * FROM t1; + CREATE TRIGGER v2ins INSTEAD OF INSERT ON v2 BEGIN + INSERT INTO t1(a,b,c,d) VALUES(new.a, new.b, new.c, new.d); + END; + INSERT INTO v2(a,d) VALUES(11,14); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 28 ok +stmt 75 err 1 -1 128 no such table: main.v2 +stmt 199 err 1 -1 236 no such table: v2 +stmt 236 err 1 -1 256 no such table: t1 +==== 11.1 + + CREATE TABLE t1(a INT PRIMARY KEY, b, c REAL, d, e); + CREATE TABLE t2(a INT, b, c REAL, d, e, PRIMARY KEY(a,b)) WITHOUT ROWID; + CREATE UNIQUE INDEX t2c ON t2(c); + CREATE UNIQUE INDEX t2d ON t2(d); + CREATE UNIQUE INDEX t2e ON t2(e); +---- +stmt 0 ok +stmt 55 ok +stmt 130 err 1 -1 166 no such table: main.t2 +stmt 166 err 1 -1 202 no such table: main.t2 +stmt 202 err 1 -1 238 no such table: main.t2 +==== 11.2 + + CREATE TRIGGER r1 BEFORE INSERT ON t1 BEGIN + INSERT INTO t2(a,b,c,d,e) VALUES(91,NULL,93,94,?1) + ON CONFLICT(b,a) DO NOTHING + ON CONFLICT DO UPDATE SET b=?1; + END; +---- +stmt 0 err 1 -1 46 no such table: main.t1 diff --git a/parser/testdata/trigger3.metadata.json b/parser/testdata/trigger3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trigger3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trigger3.test b/parser/testdata/trigger3.test new file mode 100644 index 0000000..1c34955 --- /dev/null +++ b/parser/testdata/trigger3.test @@ -0,0 +1,108 @@ +==== trigger3-1.1 + + BEGIN; + INSERT INTO tbl VALUES (5, 5, 6); + INSERT INTO tbl VALUES (1, 5, 6); +---- +stmt 0 ok +stmt 15 err 1 -1 57 no such table: tbl +stmt 57 err 1 -1 99 no such table: tbl +==== trigger3-1.2 + + SELECT * FROM tbl; + ROLLBACK; +---- +stmt 0 err 1 -1 27 no such table: tbl +stmt 27 ok +==== trigger3-1.3 +SELECT * FROM tbl +---- +stmt 0 err 1 -1 18 no such table: tbl +==== trigger3-2.1 + + BEGIN; + INSERT INTO tbl VALUES (5, 5, 6); + INSERT INTO tbl VALUES (2, 5, 6); +---- +stmt 0 ok +stmt 15 err 1 -1 57 no such table: tbl +stmt 57 err 1 -1 99 no such table: tbl +==== trigger3-2.2 + + SELECT * FROM tbl; + ROLLBACK; +---- +stmt 0 err 1 -1 27 no such table: tbl +stmt 27 ok +==== trigger3-3.1 + + BEGIN; + INSERT INTO tbl VALUES (5, 5, 6); + INSERT INTO tbl VALUES (3, 5, 6); +---- +stmt 0 ok +stmt 15 err 1 -1 57 no such table: tbl +stmt 57 err 1 -1 99 no such table: tbl +==== trigger3-3.2 + + SELECT * FROM tbl; +---- +stmt 0 err 1 -1 27 no such table: tbl +==== trigger3-3.4 +SELECT * FROM tbl +---- +stmt 0 err 1 -1 18 no such table: tbl +==== trigger3-4.1 + + BEGIN; + INSERT INTO tbl VALUES (5, 5, 6); + INSERT INTO tbl VALUES (4, 5, 6); +---- +stmt 0 ok +stmt 15 err 1 -1 57 no such table: tbl +stmt 57 err 1 -1 99 no such table: tbl +==== trigger3-4.2 + + SELECT * FROM tbl; + ROLLBACK; +---- +stmt 0 err 1 -1 27 no such table: tbl +stmt 27 ok +==== trigger3-5.1 + + UPDATE tbl SET c = 10; + SELECT * FROM tbl; +---- +stmt 0 err 1 -1 31 no such table: tbl +stmt 31 err 1 -1 58 no such table: tbl +==== trigger3-5.2 + + DELETE FROM tbl; + SELECT * FROM tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +stmt 25 err 1 -1 52 no such table: tbl +==== trigger3-6 + + INSERT INTO tbl2 VALUES (1, 2, 3); + SELECT * FROM tbl2; + SELECT * FROM tbl; +---- +stmt 0 err 1 -1 43 no such table: tbl2 +stmt 43 err 1 -1 71 no such table: tbl2 +stmt 71 err 1 -1 98 no such table: tbl +==== trigger3-7.1 + + INSERT INTO tbl_view VALUES(1, 2, 3); +---- +stmt 0 err 1 -1 46 no such table: tbl_view +==== trigger3-7.2 + + INSERT INTO tbl_view VALUES(2, 2, 3); +---- +stmt 0 err 1 -1 46 no such table: tbl_view +==== trigger3-7.3 + + INSERT INTO tbl_view VALUES(3, 2, 3); +---- +stmt 0 err 1 -1 46 no such table: tbl_view diff --git a/parser/testdata/trigger4.metadata.json b/parser/testdata/trigger4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trigger4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trigger4.test b/parser/testdata/trigger4.test new file mode 100644 index 0000000..d356207 --- /dev/null +++ b/parser/testdata/trigger4.test @@ -0,0 +1,126 @@ +==== trigger4-1.1 + + create table test1(id integer primary key,a); + create table test2(id integer,b); + create view test as + select test1.id as id,a as a,b as b + from test1 join test2 on test2.id = test1.id; + create trigger I_test instead of insert on test + begin + insert into test1 (id,a) values (NEW.id,NEW.a); + insert into test2 (id,b) values (NEW.id,NEW.b); + end; + insert into test values(1,2,3); + select * from test1; +---- +stmt 0 ok +stmt 50 ok +stmt 88 ok +stmt 207 err 1 -1 271 no such table: main.test +stmt 394 err 1 -1 430 no such table: test +stmt 430 err 1 -1 455 no such table: test1 +==== trigger4-1.2 + + select * from test2; +---- +stmt 0 err 1 -1 25 no such table: test2 +==== trigger4-1.4 + + select * from test2; +---- +stmt 0 err 1 -1 25 no such table: test2 +==== trigger4-2.1 + + create trigger U_test instead of update on test + begin + update test1 set a=NEW.a where id=NEW.id; + update test2 set b=NEW.b where id=NEW.id; + end; + update test set a=22 where id=1; + select * from test1; +---- +stmt 0 err 1 -1 64 no such table: main.test +stmt 175 err 1 -1 212 no such table: test +stmt 212 err 1 -1 237 no such table: test1 +==== trigger4-2.2 + + select * from test2; +---- +stmt 0 err 1 -1 25 no such table: test2 +==== trigger4-2.4 + + select * from test2; +---- +stmt 0 err 1 -1 25 no such table: test2 +==== trigger4-3.1 + + drop table test2; + insert into test values(7,8,9); +---- +stmt 0 err 1 -1 22 no such table: test2 +stmt 22 err 1 -1 58 no such table: test +==== trigger4-3.3 + + update test set a=222 where id=1; +---- +stmt 0 err 1 -1 38 no such table: test +==== trigger4-3.4 + + select * from test1; +---- +stmt 0 err 1 -1 25 no such table: test1 +==== trigger4-3.5 + + create table test2(id,b); + insert into test values(7,8,9); + select * from test1; +---- +stmt 0 ok +stmt 30 err 1 -1 66 no such table: test +stmt 66 err 1 -1 91 no such table: test1 +==== trigger4-3.6 + + select * from test2; +---- +stmt 0 err 1 -1 25 no such table: test2 +==== trigger4-4.2 +select a, b from vw where a<103 or a>226 order by a +---- +stmt 0 err 1 -1 52 no such table: vw +==== trigger4-5.1 +delete from vw where a>101 and a<2000 +---- +stmt 0 err 1 -1 38 no such table: vw +==== trigger4-5.2 +select * from vw +---- +stmt 0 err 1 -1 17 no such table: vw +==== trigger4-6.1 + + insert into vw values(102,1002); + insert into vw select a+2, b+2 from vw; + insert into vw select a+4, b+4 from vw; + insert into vw select a+8, b+8 from vw; + insert into vw select a+16, b+16 from vw; + insert into vw select a+32, b+32 from vw; + insert into vw select a+64, b+64 from vw; +---- +stmt 0 err 1 -1 34 no such table: vw +stmt 34 err 1 -1 75 no such table: vw +stmt 75 err 1 -1 116 no such table: vw +stmt 116 err 1 -1 157 no such table: vw +stmt 157 err 1 -1 200 no such table: vw +stmt 200 err 1 -1 243 no such table: vw +stmt 243 err 1 -1 286 no such table: vw +==== trigger4-6.2 +select count(*) from vw +---- +stmt 0 err 1 -1 24 no such table: vw +==== trigger4-7.1 +update vw set b=b+1000 where a>101 and a<2000 +---- +stmt 0 err 1 -1 46 no such table: vw +==== trigger4-7.2 +select a, b from vw where a<=102 or a>=227 order by a +---- +stmt 0 err 1 -1 54 no such table: vw diff --git a/parser/testdata/trigger5.metadata.json b/parser/testdata/trigger5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trigger5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trigger5.test b/parser/testdata/trigger5.test new file mode 100644 index 0000000..a1b25e1 --- /dev/null +++ b/parser/testdata/trigger5.test @@ -0,0 +1,23 @@ +==== trigger5-1.1 + + CREATE TABLE Item( + a integer PRIMARY KEY NOT NULL , + b double NULL , + c int NOT NULL DEFAULT 0 + ); + CREATE TABLE Undo(UndoAction TEXT); + INSERT INTO Item VALUES (1,38205.60865,340); + CREATE TRIGGER trigItem_UNDO_AD AFTER DELETE ON Item FOR EACH ROW + BEGIN + INSERT INTO Undo SELECT 'INSERT INTO Item (a,b,c) VALUES (' + || coalesce(old.a,'NULL') || ',' || quote(old.b) || ',' || old.c || ');'; + END; + DELETE FROM Item WHERE a = 1; + SELECT * FROM Undo; +---- +stmt 0 ok +stmt 125 ok +stmt 165 err 1 -1 214 no such table: Item +stmt 214 err 1 -1 294 no such table: main.Item +stmt 450 err 1 -1 484 no such table: Item +stmt 484 err 1 -1 508 no such table: Undo diff --git a/parser/testdata/trigger6.metadata.json b/parser/testdata/trigger6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trigger6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trigger6.test b/parser/testdata/trigger6.test new file mode 100644 index 0000000..01d44ae --- /dev/null +++ b/parser/testdata/trigger6.test @@ -0,0 +1,35 @@ +==== trigger6-1.2 + + SELECT * FROM log; +---- +stmt 0 err 1 -1 23 no such table: log +==== trigger6-1.3 + + DELETE FROM t1; + DELETE FROM log; + INSERT INTO t1 VALUES(2,counter(2,3)+4); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 41 no such table: log +stmt 41 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 108 no such table: t1 +==== trigger6-1.4 + + SELECT * FROM log; +---- +stmt 0 err 1 -1 23 no such table: log +==== trigger6-1.5 + + DELETE FROM log; + UPDATE t1 SET y=counter(5); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 53 no such table: t1 +stmt 53 err 1 -1 75 no such table: t1 +==== trigger6-1.6 + + SELECT * FROM log; +---- +stmt 0 err 1 -1 23 no such table: log diff --git a/parser/testdata/trigger7.metadata.json b/parser/testdata/trigger7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trigger7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trigger7.test b/parser/testdata/trigger7.test new file mode 100644 index 0000000..ed941b8 --- /dev/null +++ b/parser/testdata/trigger7.test @@ -0,0 +1,38 @@ +==== trigger7-1.2 + + CREATE TRIGGER not_a_db.r1 AFTER INSERT ON t1 BEGIN + SELECT 'no nothing'; + END +---- +stmt 0 err 1 20 56 unknown database not_a_db +==== trigger7-3.1 + + CREATE TABLE t2(x,y,z); + CREATE TRIGGER t2r1 AFTER INSERT ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r2 BEFORE INSERT ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r3 AFTER UPDATE ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r4 BEFORE UPDATE ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r5 AFTER DELETE ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r6 BEFORE DELETE ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r7 AFTER INSERT ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r8 BEFORE INSERT ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r9 AFTER UPDATE ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r10 BEFORE UPDATE ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r11 AFTER DELETE ON t2 BEGIN SELECT 1; END; + CREATE TRIGGER t2r12 BEFORE DELETE ON t2 BEGIN SELECT 1; END; + DROP TRIGGER t2r6; +---- +stmt 0 ok +stmt 28 err 1 -1 77 no such table: main.t2 +stmt 92 err 1 -1 142 no such table: main.t2 +stmt 157 err 1 -1 206 no such table: main.t2 +stmt 221 err 1 -1 271 no such table: main.t2 +stmt 286 err 1 -1 335 no such table: main.t2 +stmt 350 err 1 -1 400 no such table: main.t2 +stmt 415 err 1 -1 464 no such table: main.t2 +stmt 479 err 1 -1 529 no such table: main.t2 +stmt 544 err 1 -1 593 no such table: main.t2 +stmt 608 err 1 -1 659 no such table: main.t2 +stmt 674 err 1 -1 724 no such table: main.t2 +stmt 739 err 1 -1 790 no such table: main.t2 +stmt 805 err 1 -1 828 no such trigger: t2r6 diff --git a/parser/testdata/trigger9.metadata.json b/parser/testdata/trigger9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trigger9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trigger9.test b/parser/testdata/trigger9.test new file mode 100644 index 0000000..6c5ef13 --- /dev/null +++ b/parser/testdata/trigger9.test @@ -0,0 +1,263 @@ +==== trigger9-1.1 + + PRAGMA page_size = 1024; + CREATE TABLE t1(x, y, z); + INSERT INTO t1 VALUES('1', randstr(10000,10000), '2'); + INSERT INTO t1 VALUES('2', randstr(10000,10000), '4'); + INSERT INTO t1 VALUES('3', randstr(10000,10000), '6'); + CREATE TABLE t2(x); +---- +stmt 0 ok +stmt 29 ok +stmt 59 err 1 -1 118 no such table: t1 +stmt 118 err 1 -1 177 no such table: t1 +stmt 177 err 1 -1 236 no such table: t1 +stmt 236 ok +==== trigger9-1.2.1 + + BEGIN; + CREATE TRIGGER trig1 BEFORE DELETE ON t1 BEGIN + INSERT INTO t2 VALUES(old.rowid); + END; + DELETE FROM t1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 64 no such table: main.t1 +stmt 117 err 1 -1 139 no such table: t1 +stmt 139 err 1 -1 163 no such table: t2 +==== trigger9-1.2.4 + ROLLBACK +---- +stmt 0 ok +==== trigger9-1.3.1 + + BEGIN; + CREATE TRIGGER trig1 BEFORE DELETE ON t1 BEGIN + INSERT INTO t2 VALUES(old.x); + END; + DELETE FROM t1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 64 no such table: main.t1 +stmt 113 err 1 -1 135 no such table: t1 +stmt 135 err 1 -1 159 no such table: t2 +==== trigger9-1.3.3 + ROLLBACK +---- +stmt 0 ok +==== trigger9-1.4.1 + + BEGIN; + CREATE TRIGGER trig1 BEFORE DELETE ON t1 WHEN old.x='1' BEGIN + INSERT INTO t2 VALUES(old.rowid); + END; + DELETE FROM t1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 79 no such table: main.t1 +stmt 132 err 1 -1 154 no such table: t1 +stmt 154 err 1 -1 178 no such table: t2 +==== trigger9-1.4.3 + ROLLBACK +---- +stmt 0 ok +==== trigger9-1.5.1 + + BEGIN; + CREATE TRIGGER trig1 BEFORE UPDATE ON t1 BEGIN + INSERT INTO t2 VALUES(old.rowid); + END; + UPDATE t1 SET y = ''; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 64 no such table: main.t1 +stmt 117 err 1 -1 145 no such table: t1 +stmt 145 err 1 -1 169 no such table: t2 +==== trigger9-1.5.3 + ROLLBACK +---- +stmt 0 ok +==== trigger9-1.6.1 + + BEGIN; + CREATE TRIGGER trig1 BEFORE UPDATE ON t1 BEGIN + INSERT INTO t2 VALUES(old.x); + END; + UPDATE t1 SET y = ''; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 64 no such table: main.t1 +stmt 113 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 165 no such table: t2 +==== trigger9-1.6.3 + ROLLBACK +---- +stmt 0 ok +==== trigger9-1.7.1 + + BEGIN; + CREATE TRIGGER trig1 BEFORE UPDATE ON t1 WHEN old.x>='2' BEGIN + INSERT INTO t2 VALUES(old.x); + END; + UPDATE t1 SET y = ''; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 80 no such table: main.t1 +stmt 129 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 181 no such table: t2 +==== trigger9-1.7.3 + ROLLBACK +---- +stmt 0 ok +==== trigger9-3.1 + + CREATE TABLE t3(a, b); + INSERT INTO t3 VALUES(1, 'one'); + INSERT INTO t3 VALUES(2, 'two'); + INSERT INTO t3 VALUES(3, 'three'); +---- +stmt 0 ok +stmt 27 err 1 -1 64 no such table: t3 +stmt 64 err 1 -1 101 no such table: t3 +stmt 101 err 1 -1 140 no such table: t3 +==== trigger9-3.2 + + BEGIN; + CREATE VIEW v1 AS SELECT * FROM t3; + CREATE TRIGGER trig1 INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO t2 VALUES(old.a); + END; + UPDATE v1 SET b = 'hello'; + SELECT * FROM t2; + ROLLBACK; +---- +stmt 0 ok +stmt 11 ok +stmt 53 err 1 -1 110 no such table: main.v1 +stmt 159 err 1 -1 192 no such table: v1 +stmt 192 err 1 -1 216 no such table: t2 +stmt 216 ok +==== trigger9-3.4 + + BEGIN; + INSERT INTO t3 VALUES(3, 'three'); + INSERT INTO t3 VALUES(3, 'four'); + CREATE VIEW v1 AS SELECT DISTINCT a, b FROM t3; + CREATE TRIGGER trig1 INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO t2 VALUES(old.a); + END; + UPDATE v1 SET b = 'hello'; + SELECT * FROM t2; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 52 no such table: t3 +stmt 52 err 1 -1 92 no such table: t3 +stmt 92 ok +stmt 146 err 1 -1 203 no such table: main.v1 +stmt 252 err 1 -1 285 no such table: v1 +stmt 285 err 1 -1 309 no such table: t2 +stmt 309 ok +==== trigger9-3.5 + + BEGIN; + INSERT INTO t3 VALUES(1, 'uno'); + CREATE VIEW v1 AS SELECT a, b FROM t3 EXCEPT SELECT 1, 'one'; + CREATE TRIGGER trig1 INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO t2 VALUES(old.a); + END; + UPDATE v1 SET b = 'hello'; + SELECT * FROM t2; + ROLLBACK; +---- +stmt 0 ok +stmt 13 err 1 -1 54 no such table: t3 +stmt 54 ok +stmt 124 err 1 -1 183 no such table: main.v1 +stmt 236 err 1 -1 271 no such table: v1 +stmt 271 err 1 -1 297 no such table: t2 +stmt 297 ok +==== trigger9-3.6 + + BEGIN; + INSERT INTO t3 VALUES(1, 'zero'); + CREATE VIEW v1 AS + SELECT sum(a) AS a, max(b) AS b FROM t3 GROUP BY t3.a HAVING b>'two'; + CREATE TRIGGER trig1 INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO t2 VALUES(old.a); + END; + UPDATE v1 SET b = 'hello'; + SELECT * FROM t2; + ROLLBACK; +---- +stmt 0 ok +stmt 13 err 1 -1 55 no such table: t3 +stmt 55 ok +stmt 162 err 1 -1 221 no such table: main.v1 +stmt 274 err 1 -1 309 no such table: v1 +stmt 309 err 1 -1 335 no such table: t2 +stmt 335 ok +==== 4.1 + + CREATE TABLE t1(a, b); + CREATE TABLE log(x); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + CREATE VIEW v1 AS SELECT a, b FROM t1; + + CREATE TRIGGER tr1 INSTEAD OF DELETE ON v1 BEGIN + INSERT INTO log VALUES('delete'); + END; + + CREATE TRIGGER tr2 INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO log VALUES('update'); + END; + + CREATE TRIGGER tr3 INSTEAD OF INSERT ON v1 BEGIN + INSERT INTO log VALUES('insert'); + END; +---- +stmt 0 ok +stmt 25 ok +stmt 48 err 1 -1 79 no such table: t1 +stmt 79 err 1 -1 110 no such table: t1 +stmt 110 ok +stmt 151 err 1 -1 203 no such table: main.v1 +stmt 248 err 1 -1 300 no such table: main.v1 +stmt 345 err 1 -1 397 no such table: main.v1 +==== 4.2 + + DELETE FROM v1 WHERE rowid=1; +---- +stmt 0 err 1 -1 34 no such table: v1 +==== 4.3 + + UPDATE v1 SET a=b WHERE rowid=2; +---- +stmt 0 err 1 -1 37 no such table: v1 +==== 4.2a + + DELETE FROM log; +---- +stmt 0 err 1 -1 21 no such table: log +==== 4.2.dup1 + + DELETE FROM v1 WHERE rowid=1; +---- +stmt 0 err 1 -1 34 no such table: v1 +==== 4.3.dup1 + + UPDATE v1 SET a=b WHERE rowid=2; +---- +stmt 0 err 1 -1 37 no such table: v1 +==== 4.3b + + SELECT * FROM log; +---- +stmt 0 err 1 -1 23 no such table: log diff --git a/parser/testdata/triggerB.metadata.json b/parser/testdata/triggerB.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/triggerB.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/triggerB.test b/parser/testdata/triggerB.test new file mode 100644 index 0000000..e80df8b --- /dev/null +++ b/parser/testdata/triggerB.test @@ -0,0 +1,43 @@ +==== triggerB-1.1 + + CREATE TABLE x(x INTEGER PRIMARY KEY, y INT NOT NULL); + INSERT INTO x(y) VALUES(1); + INSERT INTO x(y) VALUES(1); + CREATE TEMP VIEW vx AS SELECT x, y, 0 AS yy FROM x; + CREATE TEMP TRIGGER tx INSTEAD OF UPDATE OF y ON vx + BEGIN + UPDATE x SET y = new.y WHERE x = new.x; + END; + SELECT * FROM vx; +---- +stmt 0 ok +stmt 59 err 1 -1 91 no such table: x +stmt 91 err 1 -1 123 no such table: x +stmt 123 ok +stmt 179 err 1 -1 245 no such table: vx +stmt 300 err 1 -1 322 no such table: vx +==== triggerB-1.2 + + UPDATE vx SET y = yy; + SELECT * FROM vx; +---- +stmt 0 err 1 -1 26 no such table: vx +stmt 26 err 1 -1 48 no such table: vx +==== triggerB-2.1 + + CREATE TRIGGER ty AFTER INSERT ON x BEGIN + SELECT wen.x; -- Unrecognized name + END; + INSERT INTO x VALUES(1,2); +---- +stmt 0 err 1 -1 46 no such table: main.x +stmt 97 err 1 -1 128 no such table: x +==== triggerB-2.2 + + CREATE TRIGGER tz AFTER UPDATE ON x BEGIN + SELECT dlo.x; -- Unrecognized name + END; + UPDATE x SET y=y+1; +---- +stmt 0 err 1 -1 46 no such table: main.x +stmt 97 err 1 -1 121 no such table: x diff --git a/parser/testdata/triggerC.metadata.json b/parser/testdata/triggerC.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/triggerC.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/triggerC.test b/parser/testdata/triggerC.test new file mode 100644 index 0000000..ffb7004 --- /dev/null +++ b/parser/testdata/triggerC.test @@ -0,0 +1,538 @@ +==== triggerC-1.1 + + CREATE TABLE t1(a, b, c); + CREATE TABLE log(t, a1, b1, c1, a2, b2, c2); + CREATE TRIGGER trig1 BEFORE INSERT ON t1 BEGIN + INSERT INTO log VALUES('before', NULL, NULL, NULL, new.a, new.b, new.c); + END; + CREATE TRIGGER trig2 AFTER INSERT ON t1 BEGIN + INSERT INTO log VALUES('after', NULL, NULL, NULL, new.a, new.b, new.c); + END; + CREATE TRIGGER trig3 BEFORE UPDATE ON t1 BEGIN + INSERT INTO log VALUES('before', old.a,old.b,old.c, new.a,new.b,new.c); + END; + CREATE TRIGGER trig4 AFTER UPDATE ON t1 BEGIN + INSERT INTO log VALUES('after', old.a,old.b,old.c, new.a,new.b,new.c); + END; + + CREATE TRIGGER trig5 BEFORE DELETE ON t1 BEGIN + INSERT INTO log VALUES('before', old.a,old.b,old.c, NULL,NULL,NULL); + END; + CREATE TRIGGER trig6 AFTER DELETE ON t1 BEGIN + INSERT INTO log VALUES('after', old.a,old.b,old.c, NULL,NULL,NULL); + END; +---- +stmt 0 ok +stmt 30 ok +stmt 79 err 1 -1 130 no such table: main.t1 +stmt 218 err 1 -1 268 no such table: main.t1 +stmt 355 err 1 -1 406 no such table: main.t1 +stmt 493 err 1 -1 543 no such table: main.t1 +stmt 629 err 1 -1 681 no such table: main.t1 +stmt 765 err 1 -1 815 no such table: main.t1 +==== triggerC-1.2 + + INSERT INTO t1 VALUES('A', 'B', 'C'); + SELECT * FROM log; +---- +stmt 0 err 1 -1 42 no such table: t1 +stmt 42 err 1 -1 65 no such table: log +==== triggerC-1.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== triggerC-1.4 + + DELETE FROM log; + UPDATE t1 SET a = 'a'; + SELECT * FROM log; +---- +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 48 no such table: t1 +stmt 48 err 1 -1 71 no such table: log +==== triggerC-1.5 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== triggerC-1.6 + + DELETE FROM log; + DELETE FROM t1; + SELECT * FROM log; +---- +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 41 no such table: t1 +stmt 41 err 1 -1 64 no such table: log +==== triggerC-1.7 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== triggerC-1.8 + + CREATE TABLE t4(a, b); + CREATE TRIGGER t4t AFTER DELETE ON t4 BEGIN + SELECT RAISE(ABORT, 'delete is not supported'); + END; +---- +stmt 0 ok +stmt 27 err 1 -1 75 no such table: main.t4 +==== triggerC-1.10 + SELECT * FROM t4 +---- +stmt 0 err 1 -1 18 no such table: t4 +==== triggerC-1.11 + + CREATE TABLE t5 (a primary key, b, c); + INSERT INTO t5 values (1, 2, 3); + CREATE TRIGGER au_tbl AFTER UPDATE ON t5 BEGIN + UPDATE OR IGNORE t5 SET a = new.a, c = 10; + END; +---- +stmt 0 ok +stmt 43 err 1 -1 80 no such table: t5 +stmt 80 err 1 -1 131 no such table: main.t5 +==== triggerC-1.12 + UPDATE OR REPLACE t5 SET a = 4 WHERE a = 1 +---- +stmt 0 err 1 -1 44 no such table: t5 +==== triggerC-1.13 + + CREATE TABLE t6(a INTEGER PRIMARY KEY, b); + INSERT INTO t6 VALUES(1, 2); + create trigger r1 after update on t6 for each row begin + SELECT 1; + end; + UPDATE t6 SET a=a; +---- +stmt 0 ok +stmt 47 err 1 -1 80 no such table: t6 +stmt 80 err 1 -1 140 no such table: main.t6 +stmt 165 err 1 -1 188 no such table: t6 +==== triggerC-1.14 + + DROP TABLE t1; + CREATE TABLE cnt(n); + INSERT INTO cnt VALUES(0); + CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE, c, d, e); + CREATE INDEX t1cd ON t1(c,d); + CREATE TRIGGER t1r1 AFTER UPDATE ON t1 BEGIN UPDATE cnt SET n=n+1; END; + INSERT INTO t1 VALUES(1,2,3,4,5); + INSERT INTO t1 VALUES(6,7,8,9,10); + INSERT INTO t1 VALUES(11,12,13,14,15); +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 44 err 1 -1 75 no such table: cnt +stmt 75 ok +stmt 138 err 1 -1 172 no such table: main.t1 +stmt 172 err 1 -1 221 no such table: main.t1 +stmt 248 err 1 -1 286 no such table: t1 +stmt 286 err 1 -1 325 no such table: t1 +stmt 325 err 1 -1 368 no such table: t1 +==== triggerC-1.15 + UPDATE OR ROLLBACK t1 SET a=100 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== triggerC-2.1.0 + + CREATE TABLE t2(a PRIMARY KEY); +---- +stmt 0 ok +==== triggerC-3.1.1 + + CREATE TABLE t3(a, b); + CREATE TRIGGER t3i AFTER INSERT ON t3 BEGIN + DELETE FROM t3 WHERE rowid = new.rowid; + END; + CREATE TRIGGER t3d AFTER DELETE ON t3 BEGIN + INSERT INTO t3 VALUES(old.a, old.b); + END; +---- +stmt 0 ok +stmt 27 err 1 -1 75 no such table: main.t3 +stmt 130 err 1 -1 178 no such table: main.t3 +==== triggerC-3.1.2 + INSERT INTO t3 VALUES(0,0) +---- +stmt 0 err 1 -1 28 no such table: t3 +==== triggerC-3.1.3 + SELECT * FROM t3 +---- +stmt 0 err 1 -1 18 no such table: t3 +==== triggerC-5.1.0 + + DROP TABLE IF EXISTS t5; + CREATE TABLE t5(a INTEGER PRIMARY KEY, b); + CREATE UNIQUE INDEX t5i ON t5(b); + INSERT INTO t5 VALUES(1, 'a'); + INSERT INTO t5 VALUES(2, 'b'); + INSERT INTO t5 VALUES(3, 'c'); + + CREATE TABLE t5g(a, b, c); + CREATE TRIGGER t5t BEFORE DELETE ON t5 BEGIN + INSERT INTO t5g VALUES(old.a, old.b, (SELECT count(*) FROM t5)); + END; +---- +stmt 0 ok +stmt 29 ok +stmt 76 err 1 -1 114 no such table: main.t5 +stmt 114 err 1 -1 149 no such table: t5 +stmt 149 err 1 -1 184 no such table: t5 +stmt 184 err 1 -1 219 no such table: t5 +stmt 219 ok +stmt 251 err 1 -1 300 no such table: main.t5 +==== triggerC-5.2.0 + + DROP TRIGGER t5t; + CREATE TRIGGER t5t AFTER DELETE ON t5 BEGIN + INSERT INTO t5g VALUES(old.a, old.b, (SELECT count(*) FROM t5)); + END; +---- +stmt 0 err 1 -1 22 no such trigger: t5t +stmt 22 err 1 -1 70 no such table: main.t5 +==== triggerC-5.3.0 + PRAGMA recursive_triggers = off +---- +stmt 0 ok +==== triggerC-5.3.8 + PRAGMA recursive_triggers = on +---- +stmt 0 ok +==== triggerC-6.1 + PRAGMA recursive_triggers +---- +stmt 0 ok +==== triggerC-6.2 + + PRAGMA recursive_triggers = off; + PRAGMA recursive_triggers; +---- +stmt 0 ok +stmt 38 ok +==== triggerC-6.3 + + PRAGMA recursive_triggers = on; + PRAGMA recursive_triggers; +---- +stmt 0 ok +stmt 37 ok +==== triggerC-7.1 + + CREATE TABLE t8(x); + CREATE TABLE t7(a, b); + INSERT INTO t7 VALUES(1, 2); + INSERT INTO t7 VALUES(3, 4); + INSERT INTO t7 VALUES(5, 6); + CREATE TRIGGER t7t BEFORE UPDATE ON t7 BEGIN + DELETE FROM t7 WHERE a = 1; + END; + CREATE TRIGGER t7ta AFTER UPDATE ON t7 BEGIN + INSERT INTO t8 VALUES('after fired ' || old.rowid || '->' || new.rowid); + END; +---- +stmt 0 ok +stmt 24 ok +stmt 51 err 1 -1 84 no such table: t7 +stmt 84 err 1 -1 117 no such table: t7 +stmt 117 err 1 -1 150 no such table: t7 +stmt 150 err 1 -1 199 no such table: main.t7 +stmt 242 err 1 -1 291 no such table: main.t7 +==== triggerC-7.2 + + BEGIN; + UPDATE t7 SET b=7 WHERE a = 5; + SELECT * FROM t7; + SELECT * FROM t8; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 48 no such table: t7 +stmt 48 err 1 -1 72 no such table: t7 +stmt 72 err 1 -1 96 no such table: t8 +stmt 96 ok +==== triggerC-7.3 + + BEGIN; + UPDATE t7 SET b=7 WHERE a = 1; + SELECT * FROM t7; + SELECT * FROM t8; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 48 no such table: t7 +stmt 48 err 1 -1 72 no such table: t7 +stmt 72 err 1 -1 96 no such table: t8 +stmt 96 ok +==== triggerC-7.4 + + DROP TRIGGER t7t; + CREATE TRIGGER t7t BEFORE UPDATE ON t7 WHEN (old.rowid!=1 OR new.rowid!=8) + BEGIN + UPDATE t7 set rowid = 8 WHERE rowid=1; + END; +---- +stmt 0 err 1 -1 22 no such trigger: t7t +stmt 22 err 1 -1 111 no such table: main.t7 +==== triggerC-7.5 + + BEGIN; + UPDATE t7 SET b=7 WHERE a = 5; + SELECT rowid, * FROM t7; + SELECT * FROM t8; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 48 no such table: t7 +stmt 48 err 1 -1 79 no such table: t7 +stmt 79 err 1 -1 103 no such table: t8 +stmt 103 ok +==== triggerC-7.6 + + BEGIN; + UPDATE t7 SET b=7 WHERE a = 1; + SELECT rowid, * FROM t7; + SELECT * FROM t8; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 48 no such table: t7 +stmt 48 err 1 -1 79 no such table: t7 +stmt 79 err 1 -1 103 no such table: t8 +stmt 103 ok +==== triggerC-7.7 + + DROP TRIGGER t7t; + DROP TRIGGER t7ta; + CREATE TRIGGER t7t BEFORE DELETE ON t7 BEGIN + UPDATE t7 set rowid = 8 WHERE rowid=1; + END; + CREATE TRIGGER t7ta AFTER DELETE ON t7 BEGIN + INSERT INTO t8 VALUES('after fired ' || old.rowid); + END; +---- +stmt 0 err 1 -1 22 no such trigger: t7t +stmt 22 err 1 -1 45 no such trigger: t7ta +stmt 45 err 1 -1 94 no such table: main.t7 +stmt 148 err 1 -1 197 no such table: main.t7 +==== triggerC-7.8 + + BEGIN; + DELETE FROM t7 WHERE a = 3; + SELECT rowid, * FROM t7; + SELECT * FROM t8; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 45 no such table: t7 +stmt 45 err 1 -1 76 no such table: t7 +stmt 76 err 1 -1 100 no such table: t8 +stmt 100 ok +==== triggerC-7.9 + + BEGIN; + DELETE FROM t7 WHERE a = 1; + SELECT rowid, * FROM t7; + SELECT * FROM t8; + ROLLBACK; +---- +stmt 0 ok +stmt 11 err 1 -1 45 no such table: t7 +stmt 45 err 1 -1 76 no such table: t7 +stmt 76 err 1 -1 100 no such table: t8 +stmt 100 ok +==== triggerC-9.1 + + CREATE TABLE t9(a,b); + CREATE INDEX t9b ON t9(b); + INSERT INTO t9 VALUES(1,0); + INSERT INTO t9 VALUES(2,1); + INSERT INTO t9 VALUES(3,2); + INSERT INTO t9 SELECT a+3, a+2 FROM t9; + INSERT INTO t9 SELECT a+6, a+5 FROM t9; + SELECT a FROM t9 ORDER BY a; +---- +stmt 0 ok +stmt 26 err 1 -1 57 no such table: main.t9 +stmt 57 err 1 -1 89 no such table: t9 +stmt 89 err 1 -1 121 no such table: t9 +stmt 121 err 1 -1 153 no such table: t9 +stmt 153 err 1 -1 197 no such table: t9 +stmt 197 err 1 -1 241 no such table: t9 +stmt 241 err 1 -1 274 no such table: t9 +==== triggerC-9.2 + + CREATE TRIGGER t9r1 AFTER DELETE ON t9 BEGIN + DELETE FROM t9 WHERE b=old.a; + END; + DELETE FROM t9 WHERE b=4; + SELECT a FROM t9 ORDER BY a; +---- +stmt 0 err 1 -1 49 no such table: main.t9 +stmt 94 err 1 -1 124 no such table: t9 +stmt 124 err 1 -1 157 no such table: t9 +==== triggerC-10.2 + + UPDATE t10 SET a = 'tcl', updatecnt = 5; + SELECT * FROM t10; +---- +stmt 0 err 1 -1 45 no such table: t10 +stmt 45 err 1 -1 68 no such table: t10 +==== triggerC-13.1 + + PRAGMA recursive_triggers = ON; + CREATE TABLE t12(a, b); + INSERT INTO t12 VALUES(1, 2); + CREATE TRIGGER tr12 AFTER UPDATE ON t12 BEGIN + UPDATE t12 SET a=new.a+1, b=new.b+1; + END; +---- +stmt 0 ok +stmt 34 ok +stmt 60 err 1 -1 92 no such table: t12 +stmt 92 err 1 -1 140 no such table: main.t12 +==== triggerC-13.2 + + UPDATE t12 SET a=a+1, b=b+1; +---- +stmt 0 err 1 -1 31 no such table: t12 +==== 15.1.1 + + PRAGMA recursive_triggers = 1; + CREATE TABLE node( + id int not null primary key, + pid int not null default 0 references node, + key varchar not null, + path varchar default '', + unique(pid, key) + ); + CREATE TRIGGER node_delete_referencing AFTER DELETE ON "node" + BEGIN + DELETE FROM "node" WHERE pid = old."id"; + END; +---- +stmt 0 ok +stmt 33 ok +stmt 232 err 1 -1 306 no such table: main.node +==== 15.1.2 + + INSERT INTO node(id, pid, key) VALUES(9, 0, 'test'); + INSERT INTO node(id, pid, key) VALUES(90, 9, 'test1'); + INSERT INTO node(id, pid, key) VALUES(900, 90, 'test2'); + DELETE FROM node WHERE id=9; + SELECT * FROM node; +---- +stmt 0 err 1 -1 55 no such table: node +stmt 55 err 1 -1 112 no such table: node +stmt 112 err 1 -1 171 no such table: node +stmt 171 err 1 -1 202 no such table: node +stmt 202 err 1 -1 224 no such table: node +==== 15.2.1 + + CREATE TABLE x1 (x); + + CREATE TABLE x2 (a, b); + CREATE TABLE '"x2"'(a, b); + + INSERT INTO x2 VALUES(1, 2); + INSERT INTO x2 VALUES(3, 4); + INSERT INTO '"x2"' SELECT * FROM x2; + + CREATE TRIGGER x1ai AFTER INSERT ON x1 BEGIN + INSERT INTO """x2""" VALUES('x', 'y'); + DELETE FROM """x2""" WHERE a=1; + UPDATE """x2""" SET b = 11 WHERE a = 3; + END; + + INSERT INTO x1 VALUES('go!'); +---- +stmt 0 ok +stmt 26 ok +stmt 56 ok +stmt 85 err 1 -1 117 no such table: x2 +stmt 117 err 1 -1 148 no such table: x2 +stmt 148 err 1 -1 187 no such table: "x2" +stmt 187 err 1 -1 235 no such table: main.x1 +stmt 365 err 1 -1 398 no such table: x1 +==== 15.2.2 + SELECT * FROM x2; +---- +stmt 0 err 1 -1 18 no such table: x2 +==== 15.2.3 + SELECT * FROM """x2"""; +---- +stmt 0 err 1 -1 24 no such table: "x2" +==== 16.1 + + SELECT raise(ABORT, 'msg') FROM sqlite_master + UNION SELECT 1 + ORDER BY raise(IGNORE); +---- +stmt 0 err 1 -1 93 1st ORDER BY term does not match any column in the result set +==== 16.2 + + SELECT count(*) FROM sqlite_master + GROUP BY raise(IGNORE) + HAVING raise(ABORT, 'msg'); +---- +stmt 0 err 1 -1 94 RAISE() may only be used within a trigger-program +==== 17.0 + + CREATE TABLE xyz(x INTEGER PRIMARY KEY, y, z); + CREATE TRIGGER xyz_tr BEFORE INSERT ON xyz BEGIN + SELECT new.x; + END; +---- +stmt 0 ok +stmt 49 err 1 -1 100 no such table: main.xyz +==== 17.1 + + INSERT INTO xyz VALUES('hello', 2, 3); +---- +stmt 0 err 1 -1 41 no such table: xyz +==== 18.1 + + CREATE TABLE t1(a); + CREATE TABLE t2(b); + CREATE TABLE t3(c); + CREATE TABLE t4(d); + CREATE TABLE t5(e); + CREATE TABLE t6(f); + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(new.a); + END; + CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN + INSERT INTO t3 VALUES(new.b); + END; + CREATE TRIGGER r3 AFTER INSERT ON t3 BEGIN + INSERT INTO t4 VALUES(new.c); + END; + CREATE TRIGGER r4 AFTER INSERT ON t4 BEGIN + INSERT INTO t5 VALUES(new.d); + END; + CREATE TRIGGER r5 AFTER INSERT ON t5 BEGIN + INSERT INTO t6 VALUES(new.e); + END; +---- +stmt 0 ok +stmt 22 ok +stmt 44 ok +stmt 66 ok +stmt 88 ok +stmt 110 ok +stmt 132 err 1 -1 177 no such table: main.t1 +stmt 218 err 1 -1 263 no such table: main.t2 +stmt 304 err 1 -1 349 no such table: main.t3 +stmt 390 err 1 -1 435 no such table: main.t4 +stmt 476 err 1 -1 521 no such table: main.t5 +==== 18.2 + + INSERT INTO t1(a) VALUES(1); + SELECT f FROM t6; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 51 no such table: t6 +==== 18.3 + + INSERT INTO t1(a) VALUES(2); +---- +stmt 0 err 1 -1 31 no such table: t1 diff --git a/parser/testdata/triggerE.metadata.json b/parser/testdata/triggerE.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/triggerE.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/triggerE.test b/parser/testdata/triggerE.test new file mode 100644 index 0000000..eb3ea44 --- /dev/null +++ b/parser/testdata/triggerE.test @@ -0,0 +1,53 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + CREATE TABLE t3(e, f); +---- +stmt 0 ok +stmt 25 ok +stmt 50 ok +==== 2.1 + + PRAGMA writable_schema = 1; + INSERT INTO sqlite_master VALUES('trigger', 'tr1', 't1', 0, + 'CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(?1, ?2); + END' + ); + + INSERT INTO sqlite_master VALUES('trigger', 'tr2', 't3', 0, + 'CREATE TRIGGER tr2 AFTER INSERT ON t3 WHEN ?1 IS NULL BEGIN + UPDATE t2 SET c=d WHERE c IS ?2; + END' + ); +---- +stmt 0 ok +stmt 30 ok +stmt 197 ok +==== 2.2.1 + + INSERT INTO t1 VALUES(1, 2); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 err 1 -1 51 no such table: t2 +==== 2.2.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 2.3 + + DELETE FROM t2; + INSERT INTO t2 VALUES('x', 'y'); + INSERT INTO t2 VALUES(NULL, 'z'); + INSERT INTO t3 VALUES(1, 2); + SELECT * FROM t3; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 18 no such table: t2 +stmt 18 err 1 -1 53 no such table: t2 +stmt 53 err 1 -1 89 no such table: t2 +stmt 89 err 1 -1 120 no such table: t3 +stmt 120 err 1 -1 140 no such table: t3 +stmt 140 err 1 -1 160 no such table: t2 diff --git a/parser/testdata/triggerF.metadata.json b/parser/testdata/triggerF.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/triggerF.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/triggerF.test b/parser/testdata/triggerF.test new file mode 100644 index 0000000..9d2e7e9 --- /dev/null +++ b/parser/testdata/triggerF.test @@ -0,0 +1,30 @@ +==== triggerF-generated + + PRAGMA recursive_triggers = on; + CREATE TABLE t1(a INT PRIMARY KEY, b) WITHOUT ROWID; + CREATE TABLE log(t); +---- +stmt 0 ok +stmt 36 ok +stmt 93 ok +==== triggerF-generated.dup1 + + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(3, 'three'); + + DELETE FROM t1 WHERE a=1; + INSERT OR REPLACE INTO t1 VALUES(2, 'three'); + UPDATE OR REPLACE t1 SET a=3 WHERE a=2; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 194 no such table: t1 +stmt 194 err 1 -1 238 no such table: t1 +==== triggerF-generated.dup2 + + SELECT * FROM log ORDER BY rowid; +---- +stmt 0 err 1 -1 38 no such table: log diff --git a/parser/testdata/triggerG.metadata.json b/parser/testdata/triggerG.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/triggerG.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/triggerG.test b/parser/testdata/triggerG.test new file mode 100644 index 0000000..cf7f1ce --- /dev/null +++ b/parser/testdata/triggerG.test @@ -0,0 +1,92 @@ +==== 100 + + PRAGMA recursive_triggers = 1; + + CREATE TABLE t1(a); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1(a) VALUES(0),(2),(3),(8),(9); + CREATE TABLE t2(b); + CREATE TABLE t3(c); + + CREATE TRIGGER tr AFTER INSERT ON t3 BEGIN + INSERT INTO t3 SELECT new.c+1 WHERE new.c<5; + INSERT INTO t2 SELECT new.c*100+a FROM t1 WHERE a IN (1, 2, 3, 4); + END; + + INSERT INTO t3 VALUES(2); + SELECT c FROM t3 ORDER BY c;; +---- +stmt 0 ok +stmt 33 ok +stmt 58 err 1 -1 86 no such table: main.t1 +stmt 86 err 1 -1 133 no such table: t1 +stmt 133 ok +stmt 155 ok +stmt 177 err 1 -1 225 no such table: main.t3 +stmt 352 err 1 -1 383 no such table: t3 +stmt 383 err 1 -1 414 no such table: t3 +stmt 414 ok +==== 110 + + SELECT b FROM t2 ORDER BY b; +---- +stmt 0 err 1 -1 31 no such table: t2 +==== 200 + + DELETE FROM t1; + INSERT INTO t1(a) VALUES(0),(2),(3),(8),(9); + DELETE FROM t2; + DELETE FROM t3; + DROP TRIGGER tr; + CREATE TRIGGER tr AFTER INSERT ON t3 BEGIN + INSERT INTO t3 SELECT new.c+1 WHERE new.c<5; + INSERT INTO t2 SELECT new.c*10000+xx.a*100+yy.a + FROM t1 AS xx, t1 AS yy + WHERE xx.a IN (1,2,3,4) + AND yy.a IN (2,3,4,5); + END; + + INSERT INTO t3 VALUES(2); + SELECT b FROM t2 ORDER BY b; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 83 no such table: t2 +stmt 83 err 1 -1 101 no such table: t3 +stmt 101 err 1 -1 120 no such trigger: tr +stmt 120 err 1 -1 165 no such table: main.t3 +stmt 407 err 1 -1 436 no such table: t3 +stmt 436 err 1 -1 467 no such table: t2 +==== 300 + + CREATE TABLE t4(x); + CREATE TRIGGER tr4 AFTER INSERT ON t4 BEGIN + SELECT 0x2147483648e0e0099 AS y WHERE y; + END; +---- +stmt 0 ok +stmt 22 err 1 -1 68 no such table: main.t4 +==== 310 + + INSERT INTO t4 VALUES(1); +---- +stmt 0 err 1 -1 28 no such table: t4 +==== 400 + + CREATE VIEW v0(a) AS SELECT 1234; + CREATE TRIGGER t0001 INSTEAD OF DELETE ON v0 BEGIN + SELECT old.a; + END; +---- +stmt 0 ok +stmt 36 err 1 -1 89 no such table: main.v0 +==== 405 + + SELECT a FROM v0; +---- +stmt 0 err 1 -1 20 no such table: v0 +==== 410 + + DELETE FROM v0; +---- +stmt 0 err 1 -1 18 no such table: v0 diff --git a/parser/testdata/triggerupfrom.metadata.json b/parser/testdata/triggerupfrom.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/triggerupfrom.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/triggerupfrom.test b/parser/testdata/triggerupfrom.test new file mode 100644 index 0000000..c6f6ccc --- /dev/null +++ b/parser/testdata/triggerupfrom.test @@ -0,0 +1,173 @@ +==== 1.0 + + CREATE TABLE map(k, v); + INSERT INTO map VALUES(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'); + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + + CREATE TRIGGER tr AFTER INSERT ON t1 BEGIN + UPDATE t1 SET c = v FROM map WHERE k=new.a AND a=new.a; + END; +---- +stmt 0 ok +stmt 26 err 1 -1 101 no such table: map +stmt 101 ok +stmt 150 err 1 -1 196 no such table: main.t1 +==== 1.1 + + INSERT INTO t1(a) VALUES(1); +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 1.2 + + SELECT a, c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 1.3 + + INSERT INTO t1(a) VALUES(2), (3), (4), (5); + SELECT a, c FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 46 no such table: t1 +stmt 46 err 1 -1 80 no such table: t1 +==== 2.0 + + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t3(x, y); + INSERT INTO aux.t3 VALUES('x', 'y'); +---- +stmt 0 ok +stmt 28 err 1 44 51 unknown database aux +stmt 57 err 1 -1 96 no such table: aux.t3 +==== 2.1 + + CREATE TRIGGER tr2 AFTER INSERT ON t1 BEGIN + UPDATE t1 SET b = y FROM aux.t3 WHERE k=new.a; + END; +---- +stmt 0 err 1 -1 46 no such table: main.t1 +==== 2.2 + + CREATE TEMP TRIGGER tr2 AFTER INSERT ON t1 BEGIN + UPDATE t1 SET b = y FROM aux.t3 WHERE a=new.a; + END; + INSERT INTO t1(a) VALUES(10), (20); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 51 no such table: t1 +stmt 109 err 1 -1 147 no such table: t1 +stmt 147 err 1 -1 167 no such table: t1 +==== 2.3 + + CREATE TABLE link(f, t); + INSERT INTO link VALUES(5, 2), (20, 10), (2, 1); + CREATE TRIGGER tr3 BEFORE DELETE ON t1 BEGIN + UPDATE t1 SET b=coalesce(old.b,old.c) FROM main.link WHERE a=t AND old.a=f; + END; + DELETE FROM t1 WHERE a=2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 27 err 1 -1 78 no such table: link +stmt 78 err 1 -1 125 no such table: main.t1 +stmt 212 err 1 -1 240 no such table: t1 +stmt 240 err 1 -1 260 no such table: t1 +==== 2.4 + + ATTACH 'test.db' AS yyy; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 27 err 1 -1 47 no such table: t1 +==== 3.0 + + CREATE TABLE mmm(x, y); + INSERT INTO mmm VALUES(1, 'one'); + INSERT INTO mmm VALUES(2, 'two'); + INSERT INTO mmm VALUES(3, 'three'); + + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t1(a, b); + CREATE TABLE aux.mmm(x, y); + INSERT INTO aux.mmm VALUES(1, 'ONE'); + INSERT INTO aux.mmm VALUES(2, 'TWO'); + INSERT INTO aux.mmm VALUES(3, 'THREE'); + + CREATE TRIGGER aux.ttt AFTER INSERT ON t1 BEGIN + UPDATE t1 SET b=y FROM mmm WHERE x=new.a AND a=new.a; + END; + + INSERT INTO t1(a) VALUES (2); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 62 no such table: mmm +stmt 62 err 1 -1 98 no such table: mmm +stmt 98 err 1 -1 136 no such table: mmm +stmt 136 ok +stmt 165 err 1 181 188 unknown database aux +stmt 194 err 1 210 218 unknown database aux +stmt 224 err 1 -1 264 no such table: aux.mmm +stmt 264 err 1 -1 304 no such table: aux.mmm +stmt 304 err 1 -1 346 no such table: aux.mmm +stmt 346 err 1 365 397 unknown database aux +stmt 462 err 1 -1 497 no such table: t1 +stmt 497 err 1 -1 517 no such table: t1 +==== 4.0 + + CREATE TABLE t1(k, a, b); + INSERT INTO t1 VALUES('a', 1, 'one'); + INSERT INTO t1 VALUES('b', 2, 'two'); + INSERT INTO t1 VALUES('c', 3, 'three'); + INSERT INTO t1 VALUES('d', 4, 'four'); + + CREATE TABLE log(x); + CREATE VIEW v1 AS SELECT k, a, b AS __hidden__b FROM t1; + CREATE TRIGGER tr1 INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO log VALUES( + '('||old.a||','||old.__hidden__b||')->('||new.a||','||new.__hidden__b||')' + ); + END; +---- +stmt 0 ok +stmt 28 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 108 no such table: t1 +stmt 108 err 1 -1 150 no such table: t1 +stmt 150 err 1 -1 191 no such table: t1 +stmt 191 ok +stmt 215 ok +stmt 274 err 1 -1 325 no such table: main.v1 +==== 4.1-hc-enabled + + SELECT * FROM v1 +---- +stmt 0 err 1 -1 22 no such table: v1 +==== 4.1-hc-disabled + + SELECT * FROM v1 +---- +stmt 0 err 1 -1 22 no such table: v1 +==== 4.2 + + UPDATE v1 SET a='xyz' WHERE k IN ('a', 'c'); + SELECT * FROM log; + DELETE FROM log; +---- +stmt 0 err 1 -1 47 no such table: v1 +stmt 47 err 1 -1 68 no such table: log +stmt 68 err 1 -1 87 no such table: log +==== 4.3 + + CREATE TABLE map(k, v); + INSERT INTO map VALUES('b', 'twelve'); + INSERT INTO map VALUES('d', 'fourteen'); + UPDATE v1 SET a=map.v FROM map WHERE v1.k=map.k; + SELECT * FROM log; + DELETE FROM log; +---- +stmt 0 ok +stmt 26 err 1 -1 67 no such table: map +stmt 67 err 1 -1 110 no such table: map +stmt 110 err 1 -1 161 no such table: v1 +stmt 161 err 1 -1 182 no such table: log +stmt 182 err 1 -1 201 no such table: log diff --git a/parser/testdata/trustschema1.metadata.json b/parser/testdata/trustschema1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/trustschema1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/trustschema1.test b/parser/testdata/trustschema1.test new file mode 100644 index 0000000..ef779da --- /dev/null +++ b/parser/testdata/trustschema1.test @@ -0,0 +1,344 @@ +==== 1.110 + + SELECT a, b, c FROM t1; +---- +stmt 0 err 1 -1 26 no such table: t1 +==== 1.120 + + PRAGMA trusted_schema=OFF; +---- +stmt 0 ok +==== 1.130 + + SELECT a, b FROM t1; +---- +stmt 0 err 1 -1 23 no such table: t1 +==== 1.140 + + SELECT a, b, c FROM t1; +---- +stmt 0 err 1 -1 26 no such table: t1 +==== 1.150 + + PRAGMA trusted_schema=ON; + DROP TABLE t1; + CREATE TABLE t1(a, b AS (f3(a+1))); +---- +stmt 0 ok +stmt 28 err 1 -1 45 no such table: t1 +stmt 45 err 1 73 83 no such function: f3 +==== 1.160 + + PRAGMA trusted_schema=OFF; + CREATE TEMP TABLE temp1(a,b AS (f3(a+1))); + INSERT INTO temp1(a) VALUES(100),(900); + SELECT * FROM temp1; +---- +stmt 0 ok +stmt 29 err 1 64 74 no such function: f3 +stmt 74 err 1 -1 116 no such table: temp1 +stmt 116 err 1 -1 139 no such table: temp1 +==== 1.200 + + PRAGMA trusted_schema=ON; + CREATE TABLE t2(a,b,c,CHECK(f3(c)==c)); +---- +stmt 0 ok +stmt 28 err 1 59 70 no such function: f3 +==== 1.210 + + PRAGMA trusted_schema=Off; + CREATE TABLE t2(a,b,c,CHECK(f2(c)==c)); +---- +stmt 0 ok +stmt 29 err 1 60 71 no such function: f2 +==== 1.211 + + PRAGMA trusted_schema=On; + CREATE TABLE t2(a,b,c,CHECK(f2(c)==c)); +---- +stmt 0 ok +stmt 28 err 1 59 70 no such function: f2 +==== 1.220 + + INSERT INTO t2 VALUES(1,2,3); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 32 no such table: t2 +stmt 32 err 1 -1 52 no such table: t2 +==== 1.230 + + PRAGMA trusted_schema=off; + INSERT INTO t2 VALUES(4,5,6); +---- +stmt 0 ok +stmt 29 err 1 -1 61 no such table: t2 +==== 1.231 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t2 +==== 1.240 + + PRAGMA trusted_schema=OFF; + CREATE TEMP TABLE temp2(a, b, CHECK(f3(b)==b)); + INSERT INTO temp2(a,b) VALUES(1,2),('x','y'); + SELECT * FROM temp2; +---- +stmt 0 ok +stmt 29 err 1 68 79 no such function: f3 +stmt 79 err 1 -1 127 no such table: temp2 +stmt 127 err 1 -1 150 no such table: temp2 +==== 1.300 + + CREATE TABLE t3(a,b DEFAULT(f2(25))); +---- +stmt 0 ok +==== 1.310 + + PRAGMA trusted_schema=Off; + INSERT INTO t3(a) VALUES(1); +---- +stmt 0 ok +stmt 29 err 1 -1 60 no such table: t3 +==== 1.311 + + INSERT INTO t3(a,b) VALUES(1,2); +---- +stmt 0 err 1 -1 35 no such table: t3 +==== 1.320 + + CREATE TEMP TABLE temp3(a, b DEFAULT(f3(31))); + INSERT INTO temp3(a) VALUES(22); + SELECT * FROM temp3; +---- +stmt 0 ok +stmt 49 err 1 -1 84 no such table: temp3 +stmt 84 err 1 -1 107 no such table: temp3 +==== 1.400 + + CREATE TABLE t4(a,b,c); + INSERT INTO t4 VALUES(1,2,3),('a','b','c'),(4,'d',0); + SELECT * FROM t4; + CREATE TEMP TABLE temp4(a,b,c); + INSERT INTO temp4 SELECT * FROM t4; +---- +stmt 0 ok +stmt 26 err 1 -1 82 no such table: t4 +stmt 82 err 1 -1 102 no such table: t4 +stmt 102 ok +stmt 136 err 1 -1 174 no such table: temp4 +==== 1.410 + + CREATE INDEX t4a ON t4(a) WHERE f3(c); +---- +stmt 0 err 1 -1 41 no such table: main.t4 +==== 1.420 + + PRAGMA trusted_schema=OFF; + CREATE INDEX t4a ON t4(a) WHERE f2(c); +---- +stmt 0 ok +stmt 29 err 1 -1 70 no such table: main.t4 +==== 1.421 + + CREATE INDEX t4a ON t4(a) WHERE f1(c); + SELECT a FROM t4 WHERE f1(c) ORDER BY a; +---- +stmt 0 err 1 -1 41 no such table: main.t4 +stmt 41 err 1 -1 84 no such table: t4 +==== 1.430 + + PRAGMA trusted_schema=ON; + CREATE INDEX t4b ON t4(b) WHERE f2(c); + SELECT b FROM t4 WHERE f2(c) ORDER BY b; +---- +stmt 0 ok +stmt 28 err 1 -1 69 no such table: main.t4 +stmt 69 err 1 -1 112 no such table: t4 +==== 1.440 + + PRAGMA trusted_schema=OFF; + CREATE INDEX temp4a ON temp4(a) WHERE f3(c); + SELECT a FROM temp4 WHERE f2(c) ORDER BY a; +---- +stmt 0 ok +stmt 29 err 1 -1 76 no such table: main.temp4 +stmt 76 err 1 -1 122 no such table: temp4 +==== 1.500 + + CREATE TABLE t5(a,b,c); + INSERT INTO t5 VALUES(1,2,3),(4,5,6),(7,0,-3); + SELECT * FROM t5; + CREATE TEMP TABLE temp5(a,b,c); + INSERT INTO temp5 SELECT * FROM t5; +---- +stmt 0 ok +stmt 26 err 1 -1 75 no such table: t5 +stmt 75 err 1 -1 95 no such table: t5 +stmt 95 ok +stmt 129 err 1 -1 167 no such table: temp5 +==== 1.510 + + CREATE INDEX t5x1 ON t5(a+f3(b)); +---- +stmt 0 err 1 -1 36 no such table: main.t5 +==== 1.520 + + PRAGMA trusted_schema=OFF; + CREATE INDEX t5x1 ON t5(a+f2(b)); +---- +stmt 0 ok +stmt 29 err 1 -1 65 no such table: main.t5 +==== 1.521 + + CREATE INDEX t5x1 ON t5(a+f1(b)); + SELECT * FROM t5 INDEXED BY t5x1 WHERE a+f1(b)=3; +---- +stmt 0 err 1 -1 36 no such table: main.t5 +stmt 36 err 1 -1 88 no such table: t5 +==== 1.530 + + PRAGMA trusted_schema=ON; + CREATE INDEX t5x2 ON t5(b+f2(c)); + SELECT * FROM t5 INDEXED BY t5x2 WHERE b+f2(c)=11; +---- +stmt 0 ok +stmt 28 err 1 -1 64 no such table: main.t5 +stmt 64 err 1 -1 117 no such table: t5 +==== 1.540 + + PRAGMA trusted_schema=OFF; + CREATE INDEX temp5x1 ON temp5(a+f3(b)); + SELECT * FROM temp5 INDEXED BY temp5x1 WHERE a+f3(b)=7; +---- +stmt 0 ok +stmt 29 err 1 -1 71 no such table: main.temp5 +stmt 71 err 1 -1 129 no such table: temp5 +==== 2.100 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1,2,3),(100,50,75),(-11,22,-33); + CREATE VIEW v1a AS SELECT f3(a+b) FROM t1; + SELECT f3(a+b) FROM t1; +---- +stmt 0 ok +stmt 26 err 1 -1 83 no such table: t1 +stmt 83 ok +stmt 128 err 1 -1 154 no such table: t1 +==== 2.110 + + PRAGMA trusted_schema=ON; + SELECT * FROM v1a; +---- +stmt 0 ok +stmt 28 err 1 -1 49 no such table: v1a +==== 2.111 + + PRAGMA trusted_schema=OFF; + SELECT * FROM v1a; +---- +stmt 0 ok +stmt 29 err 1 -1 50 no such table: v1a +==== 2.120 + + DROP VIEW v1a; + CREATE TEMP VIEW v1a AS SELECT f3(a+b) FROM t1; + SELECT * FROM v1a; +---- +stmt 0 err 1 -1 17 no such view: v1a +stmt 17 ok +stmt 67 err 1 -1 88 no such table: v1a +==== 2.130 + + CREATE VIEW v1b AS SELECT f2(b+c) FROM t1; + SELECT f2(b+c) FROM t1; +---- +stmt 0 ok +stmt 45 err 1 -1 71 no such table: t1 +==== 2.140 + + PRAGMA trusted_schema=ON; + SELECT * FROM v1b; +---- +stmt 0 ok +stmt 28 err 1 -1 49 no such table: v1b +==== 2.141 + + PRAGMA trusted_schema=OFF; + SELECT * FROM v1b; +---- +stmt 0 ok +stmt 29 err 1 -1 50 no such table: v1b +==== 2.150 + + DROP VIEW v1b; + CREATE TEMP VIEW v1b AS SELECT f2(b+c) FROM t1; + SELECT * FROM v1b; +---- +stmt 0 err 1 -1 17 no such view: v1b +stmt 17 ok +stmt 67 err 1 -1 88 no such table: v1b +==== 3.100 + + DELETE FROM t1; + CREATE TABLE t2(x); + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2(x) SELECT f3(new.a); + END; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 ok +stmt 40 err 1 -1 85 no such table: main.t1 +==== 3.110 + + INSERT INTO t1 VALUES(7,6,5); +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 3.111 + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 40 no such table: t2 +==== 3.120 + + DROP TRIGGER r1; + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2(x) SELECT f2(new.a)+100; + END; + PRAGMA trusted_schema=ON; + INSERT INTO t1 VALUES(7,6,5); + SELECT * FROM t1, t2; +---- +stmt 0 err 1 -1 19 no such trigger: r1 +stmt 19 err 1 -1 64 no such table: main.t1 +stmt 115 ok +stmt 143 err 1 -1 175 no such table: t1 +stmt 175 err 1 -1 199 no such table: t1 +==== 3.130 + + DELETE FROM t1; + DELETE FROM t2; + PRAGMA trusted_schema=OFF; + INSERT INTO t1 VALUES(7,6,5); +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 36 no such table: t2 +stmt 36 ok +stmt 65 err 1 -1 97 no such table: t1 +==== 3.131 + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 40 no such table: t2 +==== 4.2 + + PRAGMA trusted_schema=ON; + SELECT * FROM test41; +---- +stmt 0 ok +stmt 28 err 1 -1 52 no such table: test41 diff --git a/parser/testdata/types.metadata.json b/parser/testdata/types.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/types.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/types.test b/parser/testdata/types.test new file mode 100644 index 0000000..aa07c43 --- /dev/null +++ b/parser/testdata/types.test @@ -0,0 +1,123 @@ +==== types-1.1.0 + + CREATE TABLE t1(i integer, n numeric, t text, o blob); +---- +stmt 0 ok +==== types-generated + + SELECT typeof(i), typeof(n), typeof(t), typeof(o) FROM t1; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== types-generated.dup1 + + SELECT typeof(i), typeof(n), typeof(t), typeof(o) FROM t1; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== types-generated.dup2 + + SELECT typeof(i), typeof(n), typeof(t), typeof(o) FROM t1; +---- +stmt 0 err 1 -1 65 no such table: t1 +==== types-2.1.1 + + CREATE TABLE t1(a integer); + INSERT INTO t1 VALUES(0); + INSERT INTO t1 VALUES(120); + INSERT INTO t1 VALUES(-120); +---- +stmt 0 ok +stmt 32 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 127 no such table: t1 +==== types-2.1.2 + + SELECT a FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== types-2.1.3 + + INSERT INTO t1 VALUES(30000); + INSERT INTO t1 VALUES(-30000); +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 69 no such table: t1 +==== types-2.1.4 + + SELECT a FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== types-2.1.5 + + INSERT INTO t1 VALUES(2100000000); + INSERT INTO t1 VALUES(-2100000000); +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 79 no such table: t1 +==== types-2.1.6 + + SELECT a FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== types-2.1.7 + + INSERT INTO t1 VALUES(9000000*1000000*1000000); + INSERT INTO t1 VALUES(-9000000*1000000*1000000); +---- +stmt 0 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 105 no such table: t1 +==== types-2.1.8 + + SELECT a FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== types-2.2.1 + + CREATE TABLE t2(a float); + INSERT INTO t2 VALUES(0.0); + INSERT INTO t2 VALUES(12345.678); + INSERT INTO t2 VALUES(-12345.678); +---- +stmt 0 ok +stmt 30 err 1 -1 62 no such table: t2 +stmt 62 err 1 -1 100 no such table: t2 +stmt 100 err 1 -1 139 no such table: t2 +==== types-2.2.2 + + SELECT a FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t2 +==== types-2.3.1 + + CREATE TABLE t3(a nullvalue); + INSERT INTO t3 VALUES(NULL); +---- +stmt 0 ok +stmt 34 err 1 -1 67 no such table: t3 +==== types-2.3.2 + + SELECT a ISNULL FROM t3; +---- +stmt 0 err 1 -1 29 no such table: t3 +==== types-2.4.2 + + SELECT a FROM t4; +---- +stmt 0 err 1 -1 22 no such table: t4 +==== types-2.5.1 + + DROP TABLE t1; + DROP TABLE t2; + DROP TABLE t3; + DROP TABLE t4; + CREATE TABLE t1(a, b, c); +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 57 no such table: t3 +stmt 57 err 1 -1 76 no such table: t4 +stmt 76 ok +==== types-2.5.3 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 diff --git a/parser/testdata/types3.metadata.json b/parser/testdata/types3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/types3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/types3.test b/parser/testdata/types3.test new file mode 100644 index 0000000..90b3b3e --- /dev/null +++ b/parser/testdata/types3.test @@ -0,0 +1,35 @@ +==== types3-3.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x TEXT PRIMARY KEY); + INSERT INTO t1 VALUES('1'); + SELECT * FROM t1 WHERE NOT x=upper(1); +---- +stmt 0 ok +stmt 27 ok +stmt 66 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 137 no such table: t1 +==== types3-3.2 + + SELECT * FROM t1 WHERE NOT x=add_text_type(1); +---- +stmt 0 err 1 -1 49 no such table: t1 +==== types3-3.3 + + SELECT * FROM t1 WHERE NOT x=add_int_type('1'); +---- +stmt 0 err 1 -1 50 no such table: t1 +==== types3-3.4 + + DELETE FROM t1; + INSERT INTO t1 VALUES(1.25); + SELECT * FROM t1 WHERE NOT x=add_real_type('1.25'); +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 49 no such table: t1 +stmt 49 err 1 -1 103 no such table: t1 +==== types3-3.5 + + SELECT * FROM t1 WHERE NOT x=add_text_type(1.25); +---- +stmt 0 err 1 -1 52 no such table: t1 diff --git a/parser/testdata/unhex.metadata.json b/parser/testdata/unhex.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/unhex.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/unhex.test b/parser/testdata/unhex.test new file mode 100644 index 0000000..89b528e --- /dev/null +++ b/parser/testdata/unhex.test @@ -0,0 +1,32 @@ +==== 2.0 + + SELECT typeof( unhex('') ), length( unhex('') ); +---- +stmt 0 ok +==== 3.0 + + SELECT unhex(); +---- +stmt 0 err 1 10 18 wrong number of arguments to function unhex() +==== 3.1 + + SELECT unhex('ABCD', '1234', ''); +---- +stmt 0 err 1 10 36 wrong number of arguments to function unhex() +==== 6.0 + + SELECT typeof( unhex(' ', ' -') ), length( unhex('-', ' -') ); +---- +stmt 0 ok +==== 6.4.1 + SELECT typeof(unhex(NULL)) +---- +stmt 0 ok +==== 6.4.2 + SELECT typeof(unhex(NULL, ' ')) +---- +stmt 0 ok +==== 6.4.3 + SELECT typeof(unhex('1234', NULL)) +---- +stmt 0 ok diff --git a/parser/testdata/unionall.metadata.json b/parser/testdata/unionall.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/unionall.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/unionall.test b/parser/testdata/unionall.test new file mode 100644 index 0000000..1dc5158 --- /dev/null +++ b/parser/testdata/unionall.test @@ -0,0 +1,471 @@ +==== 1.0 + + CREATE TABLE t1_a(a INTEGER PRIMARY KEY, b TEXT); + CREATE TABLE t1_b(c INTEGER PRIMARY KEY, d TEXT); + CREATE TABLE t1_c(e INTEGER PRIMARY KEY, f TEXT); + + INSERT INTO t1_a VALUES(1, 'one'), (4, 'four'); + INSERT INTO t1_b VALUES(2, 'two'), (5, 'five'); + INSERT INTO t1_c VALUES(3, 'three'), (6, 'six'); + + CREATE VIEW t1 AS + SELECT a, b FROM t1_a UNION ALL + SELECT c, d FROM t1_b UNION ALL + SELECT e, f FROM t1_c; + + CREATE TABLE i1(x); + INSERT INTO i1 VALUES(2), (5), (6), (1); +---- +stmt 0 ok +stmt 52 ok +stmt 104 ok +stmt 156 err 1 -1 207 no such table: t1_a +stmt 207 err 1 -1 257 no such table: t1_b +stmt 257 err 1 -1 308 no such table: t1_c +stmt 308 ok +stmt 433 ok +stmt 456 err 1 -1 499 no such table: i1 +==== 1.1 + + SELECT a, b FROM ( + SELECT a, b FROM t1_a UNION ALL + SELECT c, d FROM t1_b UNION ALL + SELECT e, f FROM t1_c + ) ORDER BY a +---- +stmt 0 err 1 -1 139 no such table: t1_c +==== 1.2 + + SELECT a, b FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 1.3 + + SELECT a, b FROM i1, t1 WHERE a=x ORDER BY a +---- +stmt 0 err 1 -1 48 no such table: i1 +==== 1.10 + + CREATE TABLE t0(c0 INT); + INSERT INTO t0 VALUES(0); + CREATE TABLE t1_a(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t1_a VALUES(1,'one'); + CREATE TABLE t1_b(c INTEGER PRIMARY KEY, d TEXT); + INSERT INTO t1_b VALUES(2,'two'); + CREATE VIEW t1 AS SELECT a, b FROM t1_a UNION ALL SELECT c, c FROM t1_b; + SELECT * FROM (SELECT t1.a, t1.b AS b, t0.c0 FROM t0, t1); +---- +stmt 0 ok +stmt 27 err 1 -1 55 no such table: t0 +stmt 55 ok +stmt 107 err 1 -1 143 no such table: t1_a +stmt 143 ok +stmt 195 err 1 -1 231 no such table: t1_b +stmt 231 ok +stmt 306 err 1 -1 367 no such table: t0 +==== 1.11 + + SELECT * FROM (SELECT t1.a, t1.b AS b, t0.c0 FROM t0, t1) WHERE b=2; +---- +stmt 0 err 1 -1 71 no such table: t0 +==== 2.1.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(1, 'ONE'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(2, 'TWO'); + INSERT INTO t1 VALUES(3, 'three'); + INSERT INTO t1 VALUES(3, 'THREE'); +---- +stmt 0 ok +stmt 25 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 165 no such table: t1 +stmt 165 err 1 -1 202 no such table: t1 +stmt 202 err 1 -1 239 no such table: t1 +==== 2.1.1 + + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<3 + ) + SELECT * FROM ( + SELECT 0 AS i UNION ALL SELECT i FROM s UNION ALL SELECT 0 + ), t1 WHERE x=i; +---- +stmt 0 err 1 -1 174 no such table: t1 +==== 2.1.2 + + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<3 UNION ALL SELECT 4 + ) + SELECT * FROM s, t1 WHERE x=i; +---- +stmt 0 err 1 -1 126 circular reference: s +==== 2.2.0 + + CREATE TABLE t2_a(k INTEGER PRIMARY KEY, v TEXT); + CREATE TABLE t2_b(k INTEGER PRIMARY KEY, v TEXT); + + CREATE VIEW t2 AS + SELECT * FROM t2_a + UNION ALL + SELECT * FROM t2_b; + + CREATE TRIGGER t2_insert INSTEAD OF INSERT ON t2 BEGIN + INSERT INTO t2_a SELECT new.k, new.v WHERE (new.k%2)==0; + INSERT INTO t2_b SELECT new.k, new.v WHERE (new.k%2)==1; + END; + + INSERT INTO t2 VALUES(5, 'v'), (4, 'iv'), (3, 'iii'), (2, 'ii'); +---- +stmt 0 ok +stmt 52 ok +stmt 104 ok +stmt 189 err 1 -1 247 no such table: main.t2 +stmt 376 err 1 -1 444 no such table: t2 +==== 2.2.1 + + SELECT * FROM t1, t2 WHERE x=k; +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 2.2.2 + + SELECT * FROM t1 LEFT JOIN t2 ON (x=k); +---- +stmt 0 err 1 -1 42 no such table: t1 +==== 2.2.3 + + SELECT x1.*, x2.* FROM t2 AS x1, t2 AS x2 WHERE x1.k=x2.k+1 +---- +stmt 0 err 1 -1 63 no such table: t2 +==== 2.2.4 + + SELECT * FROM t1, t2 WHERE x=k ORDER BY y; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 2.2.5 + + SELECT * FROM t1, t2 WHERE x=k ORDER BY y||''; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 2.2.6 + + SELECT * FROM t1, t2 WHERE x=k ORDER BY v +---- +stmt 0 err 1 -1 45 no such table: t1 +==== 2.2.7 + + SELECT * FROM t1, t2 WHERE x=k ORDER BY v||'' +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 2.2.8 + + SELECT * FROM t1, t2 WHERE x=k ORDER BY k,v||'' +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 2.2.9a + + SELECT * FROM t1, t2 ORDER BY +k +---- +stmt 0 err 1 -1 36 no such table: t1 +==== 2.2.9b + + SELECT * FROM t1, t2 ORDER BY k +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 3.0 + + CREATE TABLE t1(c INTEGER PRIMARY KEY, d TEXT); + INSERT INTO t1 VALUES(1,2); + CREATE TABLE t3_a(k INTEGER PRIMARY KEY, v TEXT); + INSERT INTO t3_a VALUES(2,'ii'); + CREATE TABLE t3_b(k INTEGER PRIMARY KEY, v TEXT); + CREATE VIEW t3 AS + SELECT * FROM t3_a + UNION ALL + SELECT * FROM t3_b; +---- +stmt 0 ok +stmt 50 err 1 -1 80 no such table: t1 +stmt 80 ok +stmt 132 err 1 -1 167 no such table: t3_a +stmt 167 ok +stmt 219 ok +==== 3.1 + + SELECT * FROM t1, t3 ORDER BY k; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 4.0 + + + CREATE TABLE t1_a(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t1_a VALUES(123, 't1_a'); + CREATE TABLE t1_b(c INTEGER PRIMARY KEY, d TEXT); + + CREATE VIEW t1 AS + SELECT a, b FROM t1_a + UNION ALL + SELECT c, d FROM t1_b; + + CREATE TABLE t3_a(k INTEGER PRIMARY KEY, v TEXT); + INSERT INTO t3_a VALUES(456, 't3_a'); + CREATE TABLE t3_b(k INTEGER PRIMARY KEY, v TEXT); + + CREATE VIEW t3 AS + SELECT * FROM t3_a + UNION ALL + SELECT * FROM t3_b; +---- +stmt 0 ok +stmt 53 err 1 -1 93 no such table: t1_a +stmt 93 ok +stmt 145 ok +stmt 233 ok +stmt 286 err 1 -1 326 no such table: t3_a +stmt 326 ok +stmt 378 ok +==== 4.1 + + SELECT * FROM t1, t3 ORDER BY k; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 4.2 + + SELECT * FROM (SELECT * FROM t1, t3) ORDER BY k; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 4.3 + + SELECT * FROM (SELECT * FROM t1, t3), ( + SELECT max(a) OVER () FROM t1 + UNION ALL + SELECT min(a) OVER () FROM t1 + ) + ORDER BY k; +---- +stmt 0 err 1 -1 144 no such table: t1 +==== 4.3.dup1 + + SELECT * FROM (SELECT * FROM t1, t3), ( + SELECT group_concat(a) OVER (ORDER BY a), + group_concat(a) OVER (ORDER BY a), + group_concat(a) OVER (ORDER BY a), + group_concat(a) OVER (ORDER BY a), + group_concat(a) OVER (ORDER BY a), + group_concat(a) OVER (ORDER BY a), + group_concat(a) OVER (ORDER BY a), + group_concat(a) OVER (ORDER BY a), + group_concat(a) OVER (ORDER BY a) + FROM t1 + ) + ORDER BY k; +---- +stmt 0 err 1 -1 486 no such table: t1 +==== 4.3.dup2 + + SELECT * FROM (SELECT * FROM t1, t3) AS o, ( + SELECT * FROM t1 LEFT JOIN t3 ON a=k + ); +---- +stmt 0 err 1 -1 93 no such table: t1 +==== 5.1 + + CREATE TABLE t1_a(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t1_a VALUES(1,'one'); + INSERT INTO t1_a VALUES(0,NULL); + CREATE TABLE t1_b(c INTEGER PRIMARY KEY, d TEXT); + INSERT INTO t1_b VALUES(2,'two'); + INSERT INTO t1_b VALUES(5,'five'); + CREATE TABLE t1_c(e INTEGER PRIMARY KEY, f TEXT); + INSERT INTO t1_c VALUES(3,'three'); + INSERT INTO t1_c VALUES(6,'six'); + CREATE TABLE t2(k,v); + INSERT INTO t2 VALUES(5,'v'); + INSERT INTO t2 VALUES(4,'iv'); + INSERT INTO t2 VALUES(3,'iii'); + INSERT INTO t2 VALUES(2,'ii'); + CREATE TABLE t3_a(k INTEGER PRIMARY KEY, v TEXT); + INSERT INTO t3_a VALUES(2,'ii'); + INSERT INTO t3_a VALUES(4,'iv'); + CREATE TABLE t3_b(k INTEG5R PRIMARY KEY, v TEXT); + INSERT INTO t3_b VALUES(NULL,'iii'); + INSERT INTO t3_b VALUES(NULL,'v'); + CREATE VIEW t1 AS + SELECT a, b FROM t1_a UNION ALL + SELECT c, d FROM t1_b UNION ALL + SELECT e, f FROM t1_c; + CREATE VIEW t3 AS + SELECT * FROM t3_a + UNION ALL + SELECT * FROM t3_b; + CREATE TRIGGER t3_insert INSTEAD OF INSERT ON t3 BEGIN + INSERT INTO t3_a SELECT new.k, new.v WHERE (new.k%2)==0; + INSERT INTO t3_b SELECT new.k, new.v WHERE (new.k%2)==1; + END; +---- +stmt 0 ok +stmt 52 err 1 -1 88 no such table: t1_a +stmt 88 err 1 -1 123 no such table: t1_a +stmt 123 ok +stmt 175 err 1 -1 211 no such table: t1_b +stmt 211 err 1 -1 248 no such table: t1_b +stmt 248 ok +stmt 300 err 1 -1 338 no such table: t1_c +stmt 338 err 1 -1 374 no such table: t1_c +stmt 374 ok +stmt 398 err 1 -1 430 no such table: t2 +stmt 430 err 1 -1 463 no such table: t2 +stmt 463 err 1 -1 497 no such table: t2 +stmt 497 err 1 -1 530 no such table: t2 +stmt 530 ok +stmt 582 err 1 -1 617 no such table: t3_a +stmt 617 err 1 -1 652 no such table: t3_a +stmt 652 ok +stmt 704 err 1 -1 743 no such table: t3_b +stmt 743 err 1 -1 780 no such table: t3_b +stmt 780 ok +stmt 904 ok +stmt 994 err 1 -1 1051 no such table: main.t3 +==== 5.10 + + SELECT *, '+' FROM t1 LEFT JOIN t2 ON (a NOT IN(SELECT v FROM t1, t3 WHERE a=k)=NOT EXISTS(SELECT 1 FROM t1 LEFT JOIN t3 ON (a=k))); +---- +stmt 0 err 1 -1 135 no such table: t1 +==== 5.20 + + SELECT *, '+' FROM t1 LEFT JOIN t3 ON (a NOT IN(SELECT v FROM t1 LEFT JOIN t2 ON (a=k))=k); +---- +stmt 0 err 1 -1 94 no such table: t1 +==== 5.30 + + SELECT * FROM (t1 NATURAL JOIN pragma_table_xinfo('t1_a') NATURAL JOIN t3) t1 + NATURAL JOIN t2 NATURAL JOIN t3 + WHERE rowid ISNULL>0 AND 0%y; +---- +stmt 0 err 1 -1 161 no such table: t1 +==== 6.0 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + CREATE TABLE t2(a,b); + INSERT INTO t2 VALUES(3,4); + + CREATE TABLE t3(a,b); + INSERT INTO t3 VALUES(5,6); + CREATE TABLE t4(a,b); + INSERT INTO t4 VALUES(7,8); + + CREATE TABLE t5(a,b); + INSERT INTO t5 VALUES(9,10); +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t1 +stmt 54 ok +stmt 78 err 1 -1 108 no such table: t2 +stmt 108 ok +stmt 133 err 1 -1 163 no such table: t3 +stmt 163 ok +stmt 187 err 1 -1 217 no such table: t4 +stmt 217 ok +stmt 242 err 1 -1 273 no such table: t5 +==== 6.1 + + WITH x(c) AS ( + SELECT 1000 FROM t1 UNION ALL SELECT 800 FROM t2 + ), + y(d) AS ( + SELECT 100 FROM t3 UNION ALL SELECT 400 FROM t4 + ) + SELECT * FROM t5, x, y; +---- +stmt 0 err 1 -1 170 no such table: t5 +==== 7.1 + + WITH c1(x) AS (VALUES(0) UNION ALL SELECT 100+x FROM c1 WHERE x<100 UNION ALL SELECT 1+x FROM c1 WHERE x<1) + SELECT x, y, '|' + FROM c1 AS x1, (SELECT x+1 AS y FROM c1 WHERE x<1 UNION ALL SELECT 1+x FROM c1 WHERE 1'0',t1; +---- +stmt 0 ok +stmt 27 err 1 -1 55 no such table: t0 +stmt 55 ok +stmt 107 err 1 -1 143 no such table: t1_a +stmt 143 err 1 -1 180 no such table: t1_a +stmt 180 ok +stmt 232 err 1 -1 268 no such table: t1_b +stmt 268 err 1 -1 305 no such table: t1_b +stmt 305 ok +stmt 357 err 1 -1 395 no such table: t1_c +stmt 395 err 1 -1 431 no such table: t1_c +stmt 431 ok +stmt 494 ok +stmt 618 err 1 -1 700 no such table: t0 +==== 8.2 + + SELECT * FROM (SELECT t1.a, t1.b, t0.c0 AS c, v0.c0 AS d FROM t0 LEFT JOIN v0 ON v0.c0>'0',t1) WHERE b=2; +---- +stmt 0 err 1 -1 108 no such table: t0 +==== 8.3 + + SELECT * FROM (SELECT t1.a, t1.b, t0.c0 AS c, v0.c0 AS d FROM t0 LEFT JOIN v0 ON v0.c0>'0',t1) WHERE b=2.0; +---- +stmt 0 err 1 -1 110 no such table: t0 +==== 8.4 + + SELECT * FROM (SELECT t1.a, t1.b, t0.c0 AS c, v0.c0 AS d FROM t0 LEFT JOIN v0 ON v0.c0>'0',t1) WHERE b='2'; +---- +stmt 0 err 1 -1 110 no such table: t0 +==== 8.5 + + SELECT * FROM (SELECT t1.a, t1.b, t0.c0 AS c, v0.c0 AS d FROM t0 LEFT JOIN v0 ON v0.c0>'0',t1) WHERE b=2; +---- +stmt 0 err 1 -1 108 no such table: t0 +==== 8.6 + + SELECT * FROM (SELECT t1.a, t1.b, t0.c0 AS c, v0.c0 AS d FROM t0 LEFT JOIN v0 ON v0.c0>'0',t1) WHERE b=2.0; +---- +stmt 0 err 1 -1 110 no such table: t0 +==== 8.7 + + SELECT * FROM (SELECT t1.a, t1.b, t0.c0 AS c, v0.c0 AS d FROM t0 LEFT JOIN v0 ON v0.c0>'0',t1) WHERE b='2'; +---- +stmt 0 err 1 -1 110 no such table: t0 +==== 8.8 + + SELECT * FROM (SELECT t1.a, t1.b, t0.c0 AS c, v0.c0 AS d FROM t0 LEFT JOIN v0 ON v0.c0>'0',t1) WHERE b=2; +---- +stmt 0 err 1 -1 108 no such table: t0 +==== 8.9 + + SELECT * FROM (SELECT t1.a, t1.b, t0.c0 AS c, v0.c0 AS d FROM t0 LEFT JOIN v0 ON v0.c0>'0',t1) WHERE b=2.0; +---- +stmt 0 err 1 -1 110 no such table: t0 +==== 8.10 + + SELECT * FROM (SELECT t1.a, t1.b, t0.c0 AS c, v0.c0 AS d FROM t0 LEFT JOIN v0 ON v0.c0>'0',t1) WHERE b='2'; +---- +stmt 0 err 1 -1 110 no such table: t0 diff --git a/parser/testdata/unionall2.metadata.json b/parser/testdata/unionall2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/unionall2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/unionall2.test b/parser/testdata/unionall2.test new file mode 100644 index 0000000..767f9f4 --- /dev/null +++ b/parser/testdata/unionall2.test @@ -0,0 +1,46 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + + CREATE VIEW v1 AS SELECT * FROM t1, t2; + CREATE VIEW v2 AS SELECT * FROM t1, t2; + + CREATE VIEW vA AS + SELECT * FROM v1, ( + SELECT * FROM t1 LEFT JOIN t2 ON (a=c) + ) + UNION ALL + SELECT * FROM v1, v2 +---- +stmt 0 ok +stmt 25 ok +stmt 50 ok +stmt 93 ok +stmt 135 ok +==== 1.1 + + SELECT 1 FROM vA, vA, vA, vA, vA, vA, vA, vA, vA, vA +---- +stmt 0 err 1 -1 56 no such table: vA +==== 2.1 + + CREATE TABLE y1(a INTEGER, b); + CREATE TABLE y2(c INTEGER, d); + + CREATE TABLE x3_a(a INTEGER PRIMARY KEY, b TEXT); + CREATE TABLE x3_b(c INTEGER PRIMARY KEY, d TEXT); +---- +stmt 0 ok +stmt 33 ok +stmt 66 ok +stmt 119 ok +==== 2.2 + + + SELECT * FROM y1 CROSS JOIN y2 WHERE y1.a=y2.c AND y2.c IN ( + SELECT a FROM x3_a UNION ALL + SELECT c FROM x3_b ORDER BY 1 + ) +---- +stmt 0 err 1 -1 136 no such table: y1 diff --git a/parser/testdata/unionallfault.metadata.json b/parser/testdata/unionallfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/unionallfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/unionallfault.test b/parser/testdata/unionallfault.test new file mode 100644 index 0000000..ac16a7e --- /dev/null +++ b/parser/testdata/unionallfault.test @@ -0,0 +1,7 @@ +==== 1.0 + + CREATE TABLE t1(x,y,z); + CREATE TABLE t3(x,y,z); +---- +stmt 0 ok +stmt 26 ok diff --git a/parser/testdata/unionvtab.metadata.json b/parser/testdata/unionvtab.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/unionvtab.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/unionvtab.test b/parser/testdata/unionvtab.test new file mode 100644 index 0000000..4842d87 --- /dev/null +++ b/parser/testdata/unionvtab.test @@ -0,0 +1,490 @@ +==== 1.0 + + ATTACH 'test.db2' AS aux; + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + CREATE TABLE t2(a INTEGER PRIMARY KEY, b TEXT); + CREATE TABLE aux.t3(a INTEGER PRIMARY KEY, b TEXT); + + + INSERT INTO t1 VALUES(1, 'one'), (2, 'two'), (3, 'three'); + INSERT INTO t2 VALUES(10, 'ten'), (11, 'eleven'), (12, 'twelve'); + INSERT INTO t3 VALUES(20, 'twenty'), (21, 'twenty-one'), (22, 'twenty-two'); +---- +stmt 0 ok +stmt 28 ok +stmt 79 ok +stmt 129 err 1 145 152 unknown database aux +stmt 183 err 1 -1 246 no such table: t1 +stmt 246 err 1 -1 314 no such table: t2 +stmt 314 err 1 -1 393 no such table: t3 +==== 1.1 + + CREATE VIRTUAL TABLE temp.uuu USING unionvtab( + "VALUES(NULL, 't1', 1, 9), ('main', 't2', 10, 19), ('aux', 't3', 20, 29)" + ); + SELECT * FROM uuu; +---- +stmt 0 ok +stmt 133 err 1 -1 154 no such table: uuu +==== 1.2 + + PRAGMA table_info(uuu); +---- +stmt 0 ok +==== 1.3 + + SELECT * FROM uuu WHERE rowid = 3; + SELECT * FROM uuu WHERE rowid = 11; +---- +stmt 0 err 1 -1 37 no such table: uuu +stmt 37 err 1 -1 75 no such table: uuu +==== 1.4 + + SELECT * FROM uuu WHERE rowid IN (12, 10, 2); +---- +stmt 0 err 1 -1 48 no such table: uuu +==== 1.5 + + SELECT * FROM uuu WHERE rowid BETWEEN 3 AND 11; +---- +stmt 0 err 1 -1 50 no such table: uuu +==== 1.6 + + SELECT * FROM uuu WHERE rowid BETWEEN 11 AND 15; +---- +stmt 0 err 1 -1 51 no such table: uuu +==== 1.7 + + SELECT * FROM uuu WHERE rowid BETWEEN -46 AND 1500; +---- +stmt 0 err 1 -1 54 no such table: uuu +==== 1.8 + + CREATE TABLE src(db, tbl, min, max); + INSERT INTO src VALUES(NULL, 't1', 1, 9); + INSERT INTO src VALUES('main', 't2', 10, 19); + INSERT INTO src VALUES('aux', 't3', 20, 29); + CREATE VIRTUAL TABLE temp.opp USING unionvtab(src); + SELECT * FROM opp; +---- +stmt 0 ok +stmt 39 err 1 -1 83 no such table: src +stmt 83 err 1 -1 131 no such table: src +stmt 131 err 1 -1 178 no such table: src +stmt 178 ok +stmt 232 err 1 -1 253 no such table: opp +==== 1.9 + + CREATE VIRTUAL TABLE temp.qll USING unionvtab( + 'SELECT * FROM src WHERE db!=''xyz''' + ); + SELECT * FROM qll WHERE rowid BETWEEN 10 AND 21; +---- +stmt 0 ok +stmt 96 err 1 -1 147 no such table: qll +==== 2.1.1 + + CREATE VIRTUAL TABLE u1 USING unionvtab("VALUES(NULL, 't1', 1, 100)"); +---- +stmt 0 ok +==== 2.1.2 + + CREATE VIRTUAL TABLE main.u1 USING unionvtab("VALUES('', 't1', 1, 100)"); +---- +stmt 0 ok +==== 2.1.3 + + CREATE VIRTUAL TABLE aux.u1 USING unionvtab("VALUES('', 't1', 1, 100)"); +---- +stmt 0 err 1 24 47 unknown database aux +==== 2.2.1 + + CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES(NULL, 't555', 1, 100)"); +---- +stmt 0 ok +==== 2.2.2 + + CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES('aux', 't555', 1, 100)"); +---- +stmt 0 ok +==== 2.2.3 + + CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES('xua', 't555', 1, 100)"); +---- +stmt 0 ok +==== 2.3.0 + + CREATE TABLE wr1(a, b, c PRIMARY KEY) WITHOUT ROWID; + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE VIEW v2 AS SELECT _rowid_, * FROM t1; + + CREATE TABLE wr2(a, _rowid_ INTEGER, c PRIMARY KEY) WITHOUT ROWID; + CREATE TABLE wr3(a, b, _rowid_ PRIMARY KEY) WITHOUT ROWID; +---- +stmt 0 ok +stmt 55 ok +stmt 93 ok +stmt 140 ok +stmt 210 ok +==== 2.3.1 + + CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES('main', 'wr1', 1, 2)"); +---- +stmt 0 ok +==== 2.3.2 + + CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES(NULL, 'v1', 1, 2)"); +---- +stmt 0 ok +==== 2.3.3 + + CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES(NULL, 'v2', 1, 2)"); +---- +stmt 0 ok +==== 2.3.4 + + CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES(NULL, 'wr2', 1, 2)"); +---- +stmt 0 ok +==== 2.3.5 + + CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES(NULL, 'wr3', 1, 2)"); +---- +stmt 0 ok +==== 2.4.0 + + CREATE TABLE x1(a BLOB, b); + CREATE TABLE x2(a BLOB, b); + CREATE TEMP TABLE x3(a BLOB, b); + + CREATE TABLE aux.y1(one, two, three INTEGER PRIMARY KEY); + CREATE TEMP TABLE y2(one, two, three INTEGER PRIMARY KEY); + CREATE TABLE y3(one, two, three INTEGER PRIMARY KEY); +---- +stmt 0 ok +stmt 30 ok +stmt 60 ok +stmt 95 err 1 112 119 unknown database aux +stmt 156 ok +stmt 217 ok +==== 2.7.1 + + CREATE VIRTUAL TABLE temp.b1 USING unionvtab(1, 2, 3, 4) +---- +stmt 0 ok +==== 3.0 + + CREATE TABLE tbl1(a INTEGER PRIMARY KEY, b); + CREATE TABLE tbl2(a INTEGER PRIMARY KEY, b); + CREATE TABLE tbl3(a INTEGER PRIMARY KEY, b); + + WITH ss(ii) AS ( SELECT 1 UNION ALL SELECT ii+1 FROM ss WHERE ii<100 ) + INSERT INTO tbl1 SELECT ii, '1.' || ii FROM ss; + + WITH ss(ii) AS ( SELECT 1 UNION ALL SELECT ii+1 FROM ss WHERE ii<100 ) + INSERT INTO tbl2 SELECT ii, '2.' || ii FROM ss; + + WITH ss(ii) AS ( SELECT 1 UNION ALL SELECT ii+1 FROM ss WHERE ii<100 ) + INSERT INTO tbl3 SELECT ii, '3.' || ii FROM ss; + + CREATE VIRTUAL TABLE temp.uu USING unionvtab( + "VALUES(NULL,'tbl2', 26, 74), (NULL,'tbl3', 75, 100), (NULL,'tbl1', 1, 25)" + ); +---- +stmt 0 ok +stmt 47 ok +stmt 94 ok +stmt 141 err 1 -1 265 no such table: tbl1 +stmt 265 err 1 -1 389 no such table: tbl2 +stmt 389 err 1 -1 513 no such table: tbl3 +stmt 513 ok +==== 3.1 + + SELECT * FROM uu WHERE rowid = 10; +---- +stmt 0 err 1 -1 37 no such table: uu +==== 3.2 + + SELECT * FROM uu WHERE rowid = 25; +---- +stmt 0 err 1 -1 37 no such table: uu +==== 3.3 + SELECT count(*) FROM uu WHERE rowid <= 24 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.4.1 + SELECT count(*) FROM uu WHERE rowid <= 25 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.4.2 + SELECT count(*) FROM uu WHERE rowid <= 26 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.4.3 + SELECT count(*) FROM uu WHERE rowid <= 73 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.4.4 + SELECT count(*) FROM uu WHERE rowid <= 74 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.4.5 + SELECT count(*) FROM uu WHERE rowid <= 75 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.4.6 + SELECT count(*) FROM uu WHERE rowid <= 99 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.4.7 + SELECT count(*) FROM uu WHERE rowid <= 100 +---- +stmt 0 err 1 -1 44 no such table: uu +==== 3.4.8 + SELECT count(*) FROM uu WHERE rowid <= 101 +---- +stmt 0 err 1 -1 44 no such table: uu +==== 3.5.1 + SELECT count(*) FROM uu WHERE rowid < 25 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.5.2 + SELECT count(*) FROM uu WHERE rowid < 26 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.5.3 + SELECT count(*) FROM uu WHERE rowid < 27 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.5.4 + SELECT count(*) FROM uu WHERE rowid < 73 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.5.5 + SELECT count(*) FROM uu WHERE rowid < 74 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.5.6 + SELECT count(*) FROM uu WHERE rowid < 75 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.5.7 + SELECT count(*) FROM uu WHERE rowid < 76 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.5.8 + SELECT count(*) FROM uu WHERE rowid < 99 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.5.9 + SELECT count(*) FROM uu WHERE rowid < 100 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.5.10 + SELECT count(*) FROM uu WHERE rowid < 101 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.6.1 + SELECT count(*) FROM uu WHERE rowid > 24 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.6.1.dup1 + SELECT count(*) FROM uu WHERE rowid > 25 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.6.2 + SELECT count(*) FROM uu WHERE rowid > 26 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.6.3 + SELECT count(*) FROM uu WHERE rowid > 27 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.6.4 + SELECT count(*) FROM uu WHERE rowid > 73 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.6.5 + SELECT count(*) FROM uu WHERE rowid > 74 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.6.6 + SELECT count(*) FROM uu WHERE rowid > 75 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.6.7 + SELECT count(*) FROM uu WHERE rowid > 76 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.6.8 + SELECT count(*) FROM uu WHERE rowid > 99 +---- +stmt 0 err 1 -1 42 no such table: uu +==== 3.6.9 + SELECT count(*) FROM uu WHERE rowid > 100 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.6.10 + SELECT count(*) FROM uu WHERE rowid > 101 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.1 + SELECT count(*) FROM uu WHERE rowid >= 24 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.1.dup1 + SELECT count(*) FROM uu WHERE rowid >= 25 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.2 + SELECT count(*) FROM uu WHERE rowid >= 26 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.3 + SELECT count(*) FROM uu WHERE rowid >= 27 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.4 + SELECT count(*) FROM uu WHERE rowid >= 73 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.5 + SELECT count(*) FROM uu WHERE rowid >= 74 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.6 + SELECT count(*) FROM uu WHERE rowid >= 75 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.7 + SELECT count(*) FROM uu WHERE rowid >= 76 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.8 + SELECT count(*) FROM uu WHERE rowid >= 99 +---- +stmt 0 err 1 -1 43 no such table: uu +==== 3.7.9 + SELECT count(*) FROM uu WHERE rowid >= 100 +---- +stmt 0 err 1 -1 44 no such table: uu +==== 3.7.10 + SELECT count(*) FROM uu WHERE rowid >= 101 +---- +stmt 0 err 1 -1 44 no such table: uu +==== 3.10.1 + SELECT count(*) FROM uu WHERE a < 25 +---- +stmt 0 err 1 -1 38 no such table: uu +==== 3.10.2 + SELECT count(*) FROM uu WHERE a < 26 +---- +stmt 0 err 1 -1 38 no such table: uu +==== 3.10.3 + SELECT count(*) FROM uu WHERE a < 27 +---- +stmt 0 err 1 -1 38 no such table: uu +==== 3.10.4 + SELECT count(*) FROM uu WHERE a < 73 +---- +stmt 0 err 1 -1 38 no such table: uu +==== 3.10.5 + SELECT count(*) FROM uu WHERE a < 74 +---- +stmt 0 err 1 -1 38 no such table: uu +==== 3.10.6 + SELECT count(*) FROM uu WHERE a < 75 +---- +stmt 0 err 1 -1 38 no such table: uu +==== 3.10.7 + SELECT count(*) FROM uu WHERE a < 76 +---- +stmt 0 err 1 -1 38 no such table: uu +==== 3.10.8 + SELECT count(*) FROM uu WHERE a < 99 +---- +stmt 0 err 1 -1 38 no such table: uu +==== 3.10.9 + SELECT count(*) FROM uu WHERE a < 100 +---- +stmt 0 err 1 -1 39 no such table: uu +==== 3.10.10 + SELECT count(*) FROM uu WHERE a < 101 +---- +stmt 0 err 1 -1 39 no such table: uu +==== 4.1 + + SELECT * FROM sl; +---- +stmt 0 err 1 -1 20 no such table: sl +==== 4.3.1 + + SELECT * FROM sl WHERE rowid>-9223372036854775808 +---- +stmt 0 err 1 -1 53 no such table: sl +==== 4.3.2 + + SELECT * FROM sl WHERE rowid>=-9223372036854775808 +---- +stmt 0 err 1 -1 54 no such table: sl +==== 4.3.3 + + SELECT * FROM sl WHERE rowid<=-9223372036854775808 +---- +stmt 0 err 1 -1 54 no such table: sl +==== 4.3.4 + + SELECT * FROM sl WHERE rowid<-9223372036854775808 +---- +stmt 0 err 1 -1 53 no such table: sl +==== 4.4.1 + + SELECT * FROM sl WHERE rowid<9223372036854775807 +---- +stmt 0 err 1 -1 52 no such table: sl +==== 4.4.2 + + SELECT * FROM sl WHERE rowid<=9223372036854775807 +---- +stmt 0 err 1 -1 53 no such table: sl +==== 4.4.3 + + SELECT * FROM sl WHERE rowid>=9223372036854775807 +---- +stmt 0 err 1 -1 53 no such table: sl +==== 4.4.4 + + SELECT * FROM sl WHERE rowid>9223372036854775807 +---- +stmt 0 err 1 -1 52 no such table: sl +==== 5.1 + + SELECT one FROM cc WHERE one>='seven' +---- +stmt 0 err 1 -1 41 no such table: cc +==== 5.2 + + SELECT y.one FROM cc AS x, cc AS y WHERE x.one=y.one AND x.rowid>5 +---- +stmt 0 err 1 -1 70 no such table: cc +==== 5.3 + + SELECT cc.one FROM c4, cc WHERE cc.rowid>c4.rowid +---- +stmt 0 err 1 -1 53 no such table: c4 +==== 5.4 + + SELECT * FROM cc WHERE two LIKE '6' +---- +stmt 0 err 1 -1 39 no such table: cc +==== 6.0 + + CREATE VIRTUAL TABLE temp.t USING unionvtab('SELECT ''main'', ''xyz'', 1, 2'); +---- +stmt 0 ok +==== 6.1 + + CREATE VIRTUAL TABLE temp.t USING unionvtab('SELECT ''main'', NULL, 1, 2'); +---- +stmt 0 ok diff --git a/parser/testdata/unionvtabfault.metadata.json b/parser/testdata/unionvtabfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/unionvtabfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/unionvtabfault.test b/parser/testdata/unionvtabfault.test new file mode 100644 index 0000000..41cf6a3 --- /dev/null +++ b/parser/testdata/unionvtabfault.test @@ -0,0 +1,18 @@ +==== 1.0 + + ATTACH 'test.db2' AS aux; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + CREATE TABLE t2(a INTEGER PRIMARY KEY, b TEXT); + CREATE TABLE aux.t3(a INTEGER PRIMARY KEY, b TEXT); + + INSERT INTO t1 VALUES(1, 'one'), (2, 'two'), (3, 'three'); + INSERT INTO t2 VALUES(10, 'ten'), (11, 'eleven'), (12, 'twelve'); + INSERT INTO t3 VALUES(20, 'twenty'), (21, 'twenty-one'), (22, 'twenty-two'); +---- +stmt 0 ok +stmt 28 ok +stmt 78 ok +stmt 128 err 1 144 151 unknown database aux +stmt 182 err 1 -1 244 no such table: t1 +stmt 244 err 1 -1 312 no such table: t2 +stmt 312 err 1 -1 391 no such table: t3 diff --git a/parser/testdata/unique.metadata.json b/parser/testdata/unique.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/unique.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/unique.test b/parser/testdata/unique.test new file mode 100644 index 0000000..060f80f --- /dev/null +++ b/parser/testdata/unique.test @@ -0,0 +1,226 @@ +==== unique-1.1 + + CREATE TABLE t1( + a int PRIMARY KEY, + b int PRIMARY KEY, + c text + ); +---- +stmt 0 err 1 -1 73 table "t1" has more than one primary key +==== unique-1.1b + + CREATE TABLE t1( + a int PRIMARY KEY, + b int UNIQUE, + c text + ); +---- +stmt 0 ok +==== unique-1.2 + + INSERT INTO t1(a,b,c) VALUES(1,2,3) +---- +stmt 0 err 1 -1 41 no such table: t1 +==== unique-1.3 + + INSERT INTO t1(a,b,c) VALUES(1,3,4) +---- +stmt 0 err 1 -1 41 no such table: t1 +==== unique-1.4 + + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== unique-1.5 + + INSERT INTO t1(a,b,c) VALUES(3,2,4) +---- +stmt 0 err 1 -1 41 no such table: t1 +==== unique-1.6 + + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== unique-1.7 + + INSERT INTO t1(a,b,c) VALUES(3,4,5) +---- +stmt 0 err 1 -1 41 no such table: t1 +==== unique-1.8 + + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== unique-2.0 + + DROP TABLE t1; + CREATE TABLE t2(a int, b int); + INSERT INTO t2(a,b) VALUES(1,2); + INSERT INTO t2(a,b) VALUES(3,4); + SELECT * FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +stmt 54 err 1 -1 91 no such table: t2 +stmt 91 err 1 -1 128 no such table: t2 +stmt 128 err 1 -1 161 no such table: t2 +==== unique-2.1 + + CREATE UNIQUE INDEX i2 ON t2(a) +---- +stmt 0 err 1 -1 37 no such table: main.t2 +==== unique-2.2 + + SELECT * FROM t2 ORDER BY a +---- +stmt 0 err 1 -1 33 no such table: t2 +==== unique-2.3 + + INSERT INTO t2 VALUES(1,5); +---- +stmt 0 err 1 -1 32 no such table: t2 +==== unique-2.4 + + SELECT * FROM t2 ORDER BY a +---- +stmt 0 err 1 -1 33 no such table: t2 +==== unique-2.5 + + DROP INDEX i2; + SELECT * FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 19 no such index: i2 +stmt 19 err 1 -1 52 no such table: t2 +==== unique-2.6 + + INSERT INTO t2 VALUES(1,5) +---- +stmt 0 err 1 -1 32 no such table: t2 +==== unique-2.7 + + SELECT * FROM t2 ORDER BY a, b; +---- +stmt 0 err 1 -1 36 no such table: t2 +==== unique-2.8 + + CREATE UNIQUE INDEX i2 ON t2(a); +---- +stmt 0 err 1 -1 37 no such table: main.t2 +==== unique-2.9 + + CREATE INDEX i2 ON t2(a); +---- +stmt 0 err 1 -1 30 no such table: main.t2 +==== unique-3.1 + + CREATE TABLE t3( + a int, + b int, + c int, + d int, + unique(a,c,d) + ); +---- +stmt 0 ok +==== unique-3.2 + + INSERT INTO t3(a,b,c,d) VALUES(1,2,3,4); + SELECT * FROM t3 ORDER BY a,b,c,d; +---- +stmt 0 err 1 -1 45 no such table: t3 +stmt 45 err 1 -1 84 no such table: t3 +==== unique-3.3 + + INSERT INTO t3(a,b,c,d) VALUES(1,2,3,5); + SELECT * FROM t3 ORDER BY a,b,c,d; +---- +stmt 0 err 1 -1 45 no such table: t3 +stmt 45 err 1 -1 84 no such table: t3 +==== unique-3.4 + + INSERT INTO t3(a,b,c,d) VALUES(1,4,3,5); + SELECT * FROM t3 ORDER BY a,b,c,d; +---- +stmt 0 err 1 -1 45 no such table: t3 +stmt 45 err 1 -1 84 no such table: t3 +==== unique-4.1 + + CREATE TABLE t4(a UNIQUE, b, c, UNIQUE(b,c)); + INSERT INTO t4 VALUES(1,2,3); + INSERT INTO t4 VALUES(NULL, 2, NULL); + SELECT * FROM t4; +---- +stmt 0 ok +stmt 50 err 1 -1 84 no such table: t4 +stmt 84 err 1 -1 126 no such table: t4 +stmt 126 err 1 -1 148 no such table: t4 +==== unique-4.2 + + INSERT INTO t4 VALUES(NULL, 3, 4); +---- +stmt 0 err 1 -1 39 no such table: t4 +==== unique-4.3 + + SELECT * FROM t4 +---- +stmt 0 err 1 -1 22 no such table: t4 +==== unique-4.4 + + INSERT INTO t4 VALUES(2, 2, NULL); +---- +stmt 0 err 1 -1 39 no such table: t4 +==== unique-4.5 + + SELECT * FROM t4 +---- +stmt 0 err 1 -1 22 no such table: t4 +==== unique-4.6 + + INSERT INTO t4 VALUES(NULL, 2, NULL); +---- +stmt 0 err 1 -1 42 no such table: t4 +==== unique-4.7 +SELECT * FROM t4 +---- +stmt 0 err 1 -1 17 no such table: t4 +==== unique-4.8 +CREATE UNIQUE INDEX i4a ON t4(a,b) +---- +stmt 0 err 1 -1 35 no such table: main.t4 +==== unique-4.9 +CREATE UNIQUE INDEX i4b ON t4(a,b,c) +---- +stmt 0 err 1 -1 37 no such table: main.t4 +==== unique-4.10 +CREATE UNIQUE INDEX i4c ON t4(b) +---- +stmt 0 err 1 -1 33 no such table: main.t4 +==== unique-5.1 + + CREATE TABLE t5( + first_column_with_long_name, + second_column_with_long_name, + third_column_with_long_name, + fourth_column_with_long_name, + fifth_column_with_long_name, + sixth_column_with_long_name, + UNIQUE( + first_column_with_long_name, + second_column_with_long_name, + third_column_with_long_name, + fourth_column_with_long_name, + fifth_column_with_long_name, + sixth_column_with_long_name + ) + ); + INSERT INTO t5 VALUES(1,2,3,4,5,6); + SELECT * FROM t5; +---- +stmt 0 ok +stmt 485 err 1 -1 525 no such table: t5 +stmt 525 err 1 -1 547 no such table: t5 +==== unique-5.2 + + INSERT INTO t5 VALUES(1,2,3,4,5,6); +---- +stmt 0 err 1 -1 40 no such table: t5 diff --git a/parser/testdata/unique2.metadata.json b/parser/testdata/unique2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/unique2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/unique2.test b/parser/testdata/unique2.test new file mode 100644 index 0000000..9dd68bd --- /dev/null +++ b/parser/testdata/unique2.test @@ -0,0 +1,18 @@ +==== unique2-generated +CREATE UNIQUE INDEX t1y ON t1(y) +---- +stmt 0 err 1 -1 33 no such table: main.t1 +==== unique2-generated.dup1 +CREATE UNIQUE INDEX t1yz ON t1(y,z) +---- +stmt 0 err 1 -1 36 no such table: main.t1 +==== 13.1 + + CREATE TABLE err1(a,b,c,UNIQUE(rowid)); +---- +stmt 0 err 1 34 41 no such column: rowid +==== 13.2 + + CREATE TABLE err1(a,b,c,PRIMARY KEY(rowid)); +---- +stmt 0 err 1 39 46 no such column: rowid diff --git a/parser/testdata/unordered.metadata.json b/parser/testdata/unordered.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/unordered.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/unordered.test b/parser/testdata/unordered.test new file mode 100644 index 0000000..ef41d0a --- /dev/null +++ b/parser/testdata/unordered.test @@ -0,0 +1,25 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1 VALUES(1, 'xxx'); + INSERT INTO t1 SELECT a+1, b FROM t1; + INSERT INTO t1 SELECT a+2, b FROM t1; + INSERT INTO t1 SELECT a+4, b FROM t1; + INSERT INTO t1 SELECT a+8, b FROM t1; + INSERT INTO t1 SELECT a+16, b FROM t1; + INSERT INTO t1 SELECT a+32, b FROM t1; + INSERT INTO t1 SELECT a+64, b FROM t1; + ANALYZE; +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: main.t1 +stmt 53 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 128 no such table: t1 +stmt 128 err 1 -1 168 no such table: t1 +stmt 168 err 1 -1 208 no such table: t1 +stmt 208 err 1 -1 248 no such table: t1 +stmt 248 err 1 -1 289 no such table: t1 +stmt 289 err 1 -1 330 no such table: t1 +stmt 330 err 1 -1 371 no such table: t1 +stmt 371 ok diff --git a/parser/testdata/update.metadata.json b/parser/testdata/update.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/update.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/update.test b/parser/testdata/update.test new file mode 100644 index 0000000..a4ba5fe --- /dev/null +++ b/parser/testdata/update.test @@ -0,0 +1,636 @@ +==== update-3.5 +UPDATE test1 SET f2=f2*3 +---- +stmt 0 err 1 -1 25 no such table: test1 +==== update-3.6 +SELECT * FROM test1 ORDER BY f1 +---- +stmt 0 err 1 -1 32 no such table: test1 +==== update-3.8 +SELECT * FROM test1 ORDER BY f1 +---- +stmt 0 err 1 -1 32 no such table: test1 +==== update-3.9 +UPDATE test1 SET f2=f2/3 WHERE f1>5 +---- +stmt 0 err 1 -1 36 no such table: test1 +==== update-3.10 +SELECT * FROM test1 ORDER BY f1 +---- +stmt 0 err 1 -1 32 no such table: test1 +==== update-3.11 +UPDATE test1 SET F2=f1, F1=f2 +---- +stmt 0 err 1 -1 30 no such table: test1 +==== update-3.12 +SELECT * FROM test1 ORDER BY F1 +---- +stmt 0 err 1 -1 32 no such table: test1 +==== update-3.14 +SELECT * FROM test1 ORDER BY F1 +---- +stmt 0 err 1 -1 32 no such table: test1 +==== update-4.6 + + PRAGMA count_changes=on; + UPDATE test1 SET f1=f1-1 WHERE f1<=100 and f2==128; +---- +stmt 0 ok +stmt 29 err 1 -1 85 no such table: test1 +==== update-4.7 + + PRAGMA count_changes=off; + SELECT * FROM test1 ORDER BY f1,f2 +---- +stmt 0 ok +stmt 30 err 1 -1 70 no such table: test1 +==== update-5.4.1 +SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-5.4.2 +SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-5.4.3 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-5.5 +UPDATE test1 SET f1=f1-1 WHERE f1>100 and f2==128 +---- +stmt 0 err 1 -1 50 no such table: test1 +==== update-5.5.1 +SELECT * FROM test1 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 35 no such table: test1 +==== update-5.5.2 +SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-5.5.3 +SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-5.5.4 +SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-5.5.5 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-5.6 + + PRAGMA count_changes=on; + UPDATE test1 SET f1=f1-1 WHERE f1<=100 and f2==128; +---- +stmt 0 ok +stmt 29 err 1 -1 85 no such table: test1 +==== update-5.6.1 + + PRAGMA count_changes=off; + SELECT * FROM test1 ORDER BY f1,f2 +---- +stmt 0 ok +stmt 30 err 1 -1 70 no such table: test1 +==== update-5.6.2 +SELECT * FROM test1 WHERE f1==77 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-5.6.3 +SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-5.6.4 +SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-5.6.5 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-6.1.1 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-6.1.2 +SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-6.1.3 +SELECT * FROM test1 WHERE f1==88 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-6.3.1 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-6.3.2 +SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-6.3.3 +SELECT * FROM test1 WHERE f2==88 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-6.4.1 +SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-6.4.2 +SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-6.4.3 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-6.5.1 +SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-6.5.2 +SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-6.5.3 +SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-6.5.4 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-6.6.1 +SELECT * FROM test1 WHERE f1==77 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-6.6.2 +SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-6.6.3 +SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-6.6.4 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-7.1.1 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-7.1.2 +SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-7.1.3 +SELECT * FROM test1 WHERE f1==88 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-7.3.1 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-7.3.2 +SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-7.3.3 +SELECT * FROM test1 WHERE f2==88 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-7.4.1 +SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-7.4.2 +SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-7.4.3 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-7.5.1 +SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-7.5.2 +SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-7.5.3 +SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-7.5.4 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-7.6.1 +SELECT * FROM test1 WHERE f1==77 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 48 no such table: test1 +==== update-7.6.2 +SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-7.6.3 +SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 49 no such table: test1 +==== update-7.6.4 +SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2 +---- +stmt 0 err 1 -1 47 no such table: test1 +==== update-10.1 + + DROP TABLE test1; + CREATE TABLE t1( + a integer primary key, + b UNIQUE, + c, d, + e, f, + UNIQUE(c,d) + ); + INSERT INTO t1 VALUES(1,2,3,4,5,6); + INSERT INTO t1 VALUES(2,3,4,4,6,7); + SELECT * FROM t1 +---- +stmt 0 err 1 -1 22 no such table: test1 +stmt 22 ok +stmt 143 err 1 -1 183 no such table: t1 +stmt 183 err 1 -1 223 no such table: t1 +stmt 223 err 1 -1 245 no such table: t1 +==== update-10.2 + + UPDATE t1 SET a=1, e=9 WHERE f=6; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 38 no such table: t1 +stmt 38 err 1 -1 60 no such table: t1 +==== update-10.3 + + UPDATE t1 SET a=1, e=10 WHERE f=7; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 61 no such table: t1 +==== update-10.4 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== update-10.5 + + UPDATE t1 SET b=2, e=11 WHERE f=6; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 61 no such table: t1 +==== update-10.6 + + UPDATE t1 SET b=2, e=12 WHERE f=7; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 39 no such table: t1 +stmt 39 err 1 -1 61 no such table: t1 +==== update-10.7 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== update-10.8 + + UPDATE t1 SET c=3, d=4, e=13 WHERE f=6; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 66 no such table: t1 +==== update-10.9 + + UPDATE t1 SET c=3, d=4, e=14 WHERE f=7; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 66 no such table: t1 +==== update-10.10 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 22 no such table: t1 +==== update-11.1 + + UPDATE t1 SET e=e+1 WHERE b IN (SELECT b FROM t1); + SELECT b,e FROM t1; +---- +stmt 0 err 1 -1 57 no such table: t1 +stmt 57 err 1 -1 83 no such table: t1 +==== update-11.2 + + UPDATE t1 SET e=e+1 WHERE a IN (SELECT a FROM t1); + SELECT a,e FROM t1; +---- +stmt 0 err 1 -1 57 no such table: t1 +stmt 57 err 1 -1 83 no such table: t1 +==== update-11.3 + + UPDATE t1 AS xyz SET e=e+1 WHERE xyz.a IN (SELECT a FROM t1); + SELECT a,e FROM t1; +---- +stmt 0 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 94 no such table: t1 +==== update-11.4 + + UPDATE t1 AS xyz SET e=e+1 WHERE EXISTS(SELECT 1 FROM t1 WHERE t1.a=2; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 67 err 1 -1 98 no such table: t1 +stmt 98 err 1 -1 139 no such table: t1 +stmt 139 err 1 -1 159 no such table: t1 +==== update-20.10 + + PRAGMA recursive_triggers = true; + CREATE TABLE t1(a UNIQUE ON CONFLICT REPLACE, b); + INSERT INTO t1(a,b) VALUES(4,12),(9,13); + CREATE INDEX i0 ON t1(b); + CREATE TRIGGER tr0 DELETE ON t1 BEGIN + UPDATE t1 SET b = a; + END; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 36 ok +stmt 88 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 159 no such table: main.t1 +stmt 159 err 1 -1 199 no such table: main.t1 +stmt 231 ok +==== update-20.20 + + UPDATE t1 SET a=0; +---- +stmt 0 err 1 -1 21 no such table: t1 +==== update-20.30 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== update-21.1 + + CREATE TABLE t1 (vkey INTEGER, c5 INTEGER); + INSERT INTO t1 VALUES(3,NULL),(6,-54); +---- +stmt 0 ok +stmt 46 err 1 -1 87 no such table: t1 +==== update-21.2 + + BEGIN; + UPDATE t1 SET vkey = 100 WHERE c5 is null; + SELECT * FROM t1 ORDER BY vkey, c5; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 92 no such table: t1 +stmt 92 ok +==== update-21.3 + + BEGIN; + UPDATE t1 SET vkey = 100 WHERE NOT (-10*(select min(vkey) from t1) >= c5); + SELECT * FROM t1 ORDER BY vkey, c5; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 124 no such table: t1 +stmt 124 ok +==== update-21.4 + + BEGIN; + UPDATE t1 SET vkey = 100 WHERE c5 is null OR NOT (-10*(select min(vkey) from t1) >= c5); + SELECT * FROM t1 ORDER BY vkey, c5; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 100 no such table: t1 +stmt 100 err 1 -1 138 no such table: t1 +stmt 138 ok +==== update-21.11 + + DROP TABLE t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); + CREATE TABLE t2(d INT); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 66 ok +==== update-22.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x INT, y INT); + INSERT INTO t1(x) VALUES(1),(2),(3),(4),(5); + UPDATE t1 SET x=x+100, y=x<=(SELECT min(x) FROM t1) + WHERE x<3 OR (1 BETWEEN 0 AND x<=(SELECT min(x)+2 FROM t1)); + SELECT x FROM t1 WHERE x<100 ORDER BY x; +---- +stmt 0 ok +stmt 27 ok +stmt 60 err 1 -1 107 no such table: t1 +stmt 107 err 1 -1 225 no such table: t1 +stmt 225 err 1 -1 268 no such table: t1 diff --git a/parser/testdata/update2.metadata.json b/parser/testdata/update2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/update2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/update2.test b/parser/testdata/update2.test new file mode 100644 index 0000000..d62d1b0 --- /dev/null +++ b/parser/testdata/update2.test @@ -0,0 +1,214 @@ +==== 1.1.1 + + UPDATE t1 SET b = repeat(b, 100) +---- +stmt 0 err 1 -1 36 no such table: t1 +==== 1.1.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 1.2.1 + + UPDATE t1 SET b = repeat(b, 100) +---- +stmt 0 err 1 -1 36 no such table: t1 +==== 1.2.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 2.1 + + CREATE TABLE t3(a PRIMARY KEY, b, c); + CREATE INDEX t3i ON t3(b); +---- +stmt 0 ok +stmt 40 err 1 -1 69 no such table: main.t3 +==== 2.2 + UPDATE t3 SET c=1 WHERE b=? +---- +stmt 0 err 1 -1 29 no such table: t3 +==== 2.3 + UPDATE t3 SET c=1 WHERE rowid=? +---- +stmt 0 err 1 -1 33 no such table: t3 +==== 3.0 + + CREATE TABLE t4(a PRIMARY KEY, b, c) WITHOUT ROWID; + CREATE INDEX t4c ON t4(c); + INSERT INTO t4 VALUES(1, 2, 3); + INSERT INTO t4 VALUES(2, 3, 4); +---- +stmt 0 ok +stmt 54 err 1 -1 83 no such table: main.t4 +stmt 83 err 1 -1 117 no such table: t4 +stmt 117 err 1 -1 151 no such table: t4 +==== 3.1 + + UPDATE t4 SET c=c+2 WHERE c>2; + SELECT a, c FROM t4 ORDER BY a; +---- +stmt 0 err 1 -1 33 no such table: t4 +stmt 33 err 1 -1 67 no such table: t4 +==== update2-generated + + CREATE UNIQUE INDEX b1c ON b1(c); + INSERT INTO b1 VALUES(1, 'a', 1); + INSERT INTO b1 VALUES(2, 'b', 15); + INSERT INTO b1 VALUES(3, 'c', 3); + INSERT INTO b1 VALUES(4, 'd', 4); + INSERT INTO b1 VALUES(5, 'e', 5); + INSERT INTO b1 VALUES(6, 'f', 6); + INSERT INTO b1 VALUES(7, 'g', 7); +---- +stmt 0 err 1 -1 38 no such table: main.b1 +stmt 38 err 1 -1 76 no such table: b1 +stmt 76 err 1 -1 115 no such table: b1 +stmt 115 err 1 -1 153 no such table: b1 +stmt 153 err 1 -1 191 no such table: b1 +stmt 191 err 1 -1 229 no such table: b1 +stmt 229 err 1 -1 267 no such table: b1 +stmt 267 err 1 -1 305 no such table: b1 +==== update2-generated.dup1 + + UPDATE OR REPLACE b1 SET c=c+10 WHERE a BETWEEN 4 AND 7; + SELECT * FROM b1 ORDER BY a; +---- +stmt 0 err 1 -1 61 no such table: b1 +stmt 61 err 1 -1 94 no such table: b1 +==== update2-generated.dup2 + + CREATE INDEX c1d ON c1(d, b); + CREATE UNIQUE INDEX c1c ON c1(c, b); + + INSERT INTO c1 VALUES(1, 'a', 1, 1); + INSERT INTO c1 VALUES(2, 'a', 15, 2); + INSERT INTO c1 VALUES(3, 'a', 3, 3); + INSERT INTO c1 VALUES(4, 'a', 4, 4); + INSERT INTO c1 VALUES(5, 'a', 5, 5); + INSERT INTO c1 VALUES(6, 'a', 6, 6); + INSERT INTO c1 VALUES(7, 'a', 7, 7); +---- +stmt 0 err 1 -1 34 no such table: main.c1 +stmt 34 err 1 -1 75 no such table: main.c1 +stmt 75 err 1 -1 118 no such table: c1 +stmt 118 err 1 -1 160 no such table: c1 +stmt 160 err 1 -1 202 no such table: c1 +stmt 202 err 1 -1 244 no such table: c1 +stmt 244 err 1 -1 286 no such table: c1 +stmt 286 err 1 -1 328 no such table: c1 +stmt 328 err 1 -1 370 no such table: c1 +==== update2-generated.dup3 + + UPDATE OR REPLACE c1 SET c=c+10 WHERE d BETWEEN 4 AND 7; + SELECT * FROM c1 ORDER BY a; +---- +stmt 0 err 1 -1 61 no such table: c1 +stmt 61 err 1 -1 94 no such table: c1 +==== update2-generated.dup4 + PRAGMA integrity_check +---- +stmt 0 ok +==== update2-generated.dup5 + + DROP INDEX c1d; + DROP INDEX c1c; + DELETE FROM c1; + + INSERT INTO c1 VALUES(1, 'a', 1, 1); + INSERT INTO c1 VALUES(2, 'a', 15, 2); + INSERT INTO c1 VALUES(3, 'a', 3, 3); + INSERT INTO c1 VALUES(4, 'a', 4, 4); + INSERT INTO c1 VALUES(5, 'a', 5, 5); + INSERT INTO c1 VALUES(6, 'a', 6, 6); + INSERT INTO c1 VALUES(7, 'a', 7, 7); + + CREATE INDEX c1d ON c1(d); + CREATE UNIQUE INDEX c1c ON c1(c); +---- +stmt 0 err 1 -1 20 no such index: c1d +stmt 20 err 1 -1 40 no such index: c1c +stmt 40 err 1 -1 60 no such table: c1 +stmt 60 err 1 -1 103 no such table: c1 +stmt 103 err 1 -1 145 no such table: c1 +stmt 145 err 1 -1 187 no such table: c1 +stmt 187 err 1 -1 229 no such table: c1 +stmt 229 err 1 -1 271 no such table: c1 +stmt 271 err 1 -1 313 no such table: c1 +stmt 313 err 1 -1 355 no such table: c1 +stmt 355 err 1 -1 387 no such table: main.c1 +stmt 387 err 1 -1 425 no such table: main.c1 +==== update2-generated.dup6 + + UPDATE OR REPLACE c1 SET c=c+10 WHERE d BETWEEN 4 AND 7; + SELECT * FROM c1 ORDER BY a; +---- +stmt 0 err 1 -1 61 no such table: c1 +stmt 61 err 1 -1 94 no such table: c1 +==== 5.0 + + CREATE TABLE x1(a INTEGER PRIMARY KEY, b, c); + CREATE INDEX x1c ON x1(b, c); + INSERT INTO x1 VALUES(1, 'a', 1); + INSERT INTO x1 VALUES(2, 'a', 2); + INSERT INTO x1 VALUES(3, 'a', 3); +---- +stmt 0 ok +stmt 48 err 1 -1 80 no such table: main.x1 +stmt 80 err 1 -1 116 no such table: x1 +stmt 116 err 1 -1 152 no such table: x1 +stmt 152 err 1 -1 188 no such table: x1 +==== 5.1.1 + + UPDATE x1 SET c=c+1 WHERE b='a'; +---- +stmt 0 err 1 -1 35 no such table: x1 +==== 5.1.2 + + SELECT * FROM x1; +---- +stmt 0 err 1 -1 20 no such table: x1 +==== 6.0 + + CREATE TABLE d1(a,b); + CREATE INDEX d1b ON d1(a); + CREATE INDEX d1c ON d1(b); + INSERT INTO d1 VALUES(1,2); +---- +stmt 0 ok +stmt 24 err 1 -1 53 no such table: main.d1 +stmt 53 err 1 -1 82 no such table: main.d1 +stmt 82 err 1 -1 112 no such table: d1 +==== 6.1 + + UPDATE d1 SET a = a+2 WHERE a>0 OR b>0; +---- +stmt 0 err 1 -1 42 no such table: d1 +==== 6.2 + + SELECT * FROM d1; +---- +stmt 0 err 1 -1 20 no such table: d1 +==== 7.100 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x,y); + CREATE UNIQUE INDEX t1x1 ON t1(x) WHERE x IS NOT NULL; + INSERT INTO t1(x) VALUES(NULL),(NULL); + CREATE INDEX t1x2 ON t1(y); + SELECT quote(x), quote(y), '|' FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 51 err 1 -1 108 no such table: main.t1 +stmt 108 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 179 no such table: main.t1 +stmt 179 err 1 -1 221 no such table: t1 +==== 7.110 + + UPDATE OR REPLACE t1 SET x=1; + SELECT quote(x), quote(y), '|' FROM t1; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 74 no such table: t1 diff --git a/parser/testdata/upfrom1.metadata.json b/parser/testdata/upfrom1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/upfrom1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/upfrom1.test b/parser/testdata/upfrom1.test new file mode 100644 index 0000000..bd44185 --- /dev/null +++ b/parser/testdata/upfrom1.test @@ -0,0 +1,261 @@ +==== 1.1.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER) WITHOUT ROWID; + INSERT INTO t2 VALUES(1, 2, 3); + INSERT INTO t2 VALUES(4, 5, 6); + INSERT INTO t2 VALUES(7, 8, 9); + + DROP TABLE IF EXISTS chng; + CREATE TABLE chng(a INTEGER, b INTEGER, c INTEGER); + INSERT INTO chng VALUES(1, 100, 1000); + INSERT INTO chng VALUES(7, 700, 7000); +---- +stmt 0 ok +stmt 27 ok +stmt 105 err 1 -1 139 no such table: t2 +stmt 139 err 1 -1 173 no such table: t2 +stmt 173 err 1 -1 207 no such table: t2 +stmt 207 ok +stmt 237 ok +stmt 291 err 1 -1 332 no such table: chng +stmt 332 err 1 -1 373 no such table: chng +==== 1.1.1 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t2 +==== 1.1.2 + + UPDATE t2 SET b = chng.b, c = chng.c FROM chng WHERE chng.a = t2.a; + SELECT * FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 70 no such table: t2 +stmt 70 err 1 -1 101 no such table: t2 +==== 1.1.3 + + DELETE FROM t2; + INSERT INTO t2 VALUES(1, 2, 3); + INSERT INTO t2 VALUES(4, 5, 6); + INSERT INTO t2 VALUES(7, 8, 9); +---- +stmt 0 err 1 -1 18 no such table: t2 +stmt 18 err 1 -1 52 no such table: t2 +stmt 52 err 1 -1 86 no such table: t2 +stmt 86 err 1 -1 120 no such table: t2 +==== 1.1.4 + + UPDATE t2 SET (b, c) = (SELECT b, c FROM chng WHERE a=t2.a) + WHERE a IN (SELECT a FROM chng); + SELECT * FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 100 no such table: t2 +stmt 100 err 1 -1 131 no such table: t2 +==== 1.1.5 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(a INTEGER PRIMARY KEY, b INTEGER, c TEXT) WITHOUT ROWID; + INSERT INTO t3 VALUES(1, 1, 'one'); + INSERT INTO t3 VALUES(2, 2, 'two'); + INSERT INTO t3 VALUES(3, 3, 'three'); + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(x TEXT); + INSERT INTO t4 VALUES('five'); + + SELECT * FROM t3 ORDER BY a; +---- +stmt 0 ok +stmt 27 ok +stmt 102 err 1 -1 140 no such table: t3 +stmt 140 err 1 -1 178 no such table: t3 +stmt 178 err 1 -1 218 no such table: t3 +stmt 218 ok +stmt 246 ok +stmt 273 err 1 -1 306 no such table: t4 +stmt 306 err 1 -1 338 no such table: t3 +==== 1.1.6 + + UPDATE t3 SET c=x FROM t4; + SELECT * FROM t3 ORDER BY a; +---- +stmt 0 err 1 -1 29 no such table: t3 +stmt 29 err 1 -1 60 no such table: t3 +==== 1.2.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER) ; + INSERT INTO t2 VALUES(1, 2, 3); + INSERT INTO t2 VALUES(4, 5, 6); + INSERT INTO t2 VALUES(7, 8, 9); + + DROP TABLE IF EXISTS chng; + CREATE TABLE chng(a INTEGER, b INTEGER, c INTEGER); + INSERT INTO chng VALUES(1, 100, 1000); + INSERT INTO chng VALUES(7, 700, 7000); +---- +stmt 0 ok +stmt 27 ok +stmt 92 err 1 -1 126 no such table: t2 +stmt 126 err 1 -1 160 no such table: t2 +stmt 160 err 1 -1 194 no such table: t2 +stmt 194 ok +stmt 224 ok +stmt 278 err 1 -1 319 no such table: chng +stmt 319 err 1 -1 360 no such table: chng +==== 1.2.1 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 20 no such table: t2 +==== 1.2.2 + + UPDATE t2 SET b = chng.b, c = chng.c FROM chng WHERE chng.a = t2.a; + SELECT * FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 70 no such table: t2 +stmt 70 err 1 -1 101 no such table: t2 +==== 1.2.3 + + DELETE FROM t2; + INSERT INTO t2 VALUES(1, 2, 3); + INSERT INTO t2 VALUES(4, 5, 6); + INSERT INTO t2 VALUES(7, 8, 9); +---- +stmt 0 err 1 -1 18 no such table: t2 +stmt 18 err 1 -1 52 no such table: t2 +stmt 52 err 1 -1 86 no such table: t2 +stmt 86 err 1 -1 120 no such table: t2 +==== 1.2.4 + + UPDATE t2 SET (b, c) = (SELECT b, c FROM chng WHERE a=t2.a) + WHERE a IN (SELECT a FROM chng); + SELECT * FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 100 no such table: t2 +stmt 100 err 1 -1 131 no such table: t2 +==== 1.2.5 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(a INTEGER PRIMARY KEY, b INTEGER, c TEXT) ; + INSERT INTO t3 VALUES(1, 1, 'one'); + INSERT INTO t3 VALUES(2, 2, 'two'); + INSERT INTO t3 VALUES(3, 3, 'three'); + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(x TEXT); + INSERT INTO t4 VALUES('five'); + + SELECT * FROM t3 ORDER BY a; +---- +stmt 0 ok +stmt 27 ok +stmt 89 err 1 -1 127 no such table: t3 +stmt 127 err 1 -1 165 no such table: t3 +stmt 165 err 1 -1 205 no such table: t3 +stmt 205 ok +stmt 233 ok +stmt 260 err 1 -1 293 no such table: t4 +stmt 293 err 1 -1 325 no such table: t3 +==== 1.2.6 + + UPDATE t3 SET c=x FROM t4; + SELECT * FROM t3 ORDER BY a; +---- +stmt 0 err 1 -1 29 no such table: t3 +stmt 29 err 1 -1 60 no such table: t3 +==== 2.1 + + DROP TABLE IF EXISTS t5; + DROP TABLE IF EXISTS m1; + DROP TABLE IF EXISTS m2; + CREATE TABLE t5(a INTEGER PRIMARY KEY, b TEXT, c TEXT); + CREATE TABLE m1(x INTEGER PRIMARY KEY, y TEXT); + CREATE TABLE m2(u INTEGER PRIMARY KEY, v TEXT); + + INSERT INTO t5 VALUES(1, 'one', 'ONE'); + INSERT INTO t5 VALUES(2, 'two', 'TWO'); + INSERT INTO t5 VALUES(3, 'three', 'THREE'); + INSERT INTO t5 VALUES(4, 'four', 'FOUR'); + + INSERT INTO m1 VALUES(1, 'i'); + INSERT INTO m1 VALUES(2, 'ii'); + INSERT INTO m1 VALUES(3, 'iii'); + + INSERT INTO m2 VALUES(1, 'I'); + INSERT INTO m2 VALUES(3, 'II'); + INSERT INTO m2 VALUES(4, 'III'); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 ok +stmt 139 ok +stmt 189 ok +stmt 239 err 1 -1 282 no such table: t5 +stmt 282 err 1 -1 324 no such table: t5 +stmt 324 err 1 -1 370 no such table: t5 +stmt 370 err 1 -1 414 no such table: t5 +stmt 414 err 1 -1 448 no such table: m1 +stmt 448 err 1 -1 482 no such table: m1 +stmt 482 err 1 -1 517 no such table: m1 +stmt 517 err 1 -1 551 no such table: m2 +stmt 551 err 1 -1 585 no such table: m2 +stmt 585 err 1 -1 620 no such table: m2 +==== 2.2 + + UPDATE t5 SET b=y, c=v FROM m1 LEFT JOIN m2 ON (x=u) WHERE x=a; + SELECT * FROM t5 ORDER BY a; +---- +stmt 0 err 1 -1 66 no such table: t5 +stmt 66 err 1 -1 97 no such table: t5 +==== 3.1 + + CREATE TABLE t0(a); + CREATE TABLE t1(b); + UPDATE t1 SET b=sum(a) FROM t0; + SELECT * FROM t0, t1; +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 78 no such table: t1 +stmt 78 err 1 -1 102 no such table: t0 +==== 4.1 + + CREATE TABLE t1(x INT); INSERT INTO t1 VALUES(1); + CREATE TABLE t2(y INT); INSERT INTO t2 VALUES(2); + WITH t1 AS (SELECT y+100 AS x FROM t2) + UPDATE t1 SET x=(SELECT x FROM t1); + SELECT x, y FROM t1, t2; +---- +stmt 0 ok +stmt 26 err 1 -1 53 no such table: t1 +stmt 53 ok +stmt 79 err 1 -1 106 no such table: t2 +stmt 106 err 1 -1 188 no such table: t1 +stmt 188 err 1 -1 215 no such table: t1 +==== 4.2 + + WITH t1 AS (SELECT y+100 AS x FROM t2) + UPDATE t1 SET x=x+y FROM t2; + SELECT x, y FROM t1, t2; +---- +stmt 0 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 101 no such table: t1 +==== 5.1 + + CREATE TABLE t1(a); + INSERT INTO t1(a) VALUES(5); + CREATE VIEW t2 AS SELECT a FROM t1 UNION ALL SELECT a FROM t1; + CREATE TABLE t3(b,c); + INSERT INTO t3(b,c) VALUES(1,2); + UPDATE t3 SET (c,b) = (SELECT 3,4) FROM t1, t2; + SELECT * FROM t3; +---- +stmt 0 ok +stmt 22 err 1 -1 53 no such table: t1 +stmt 53 ok +stmt 118 ok +stmt 142 err 1 -1 177 no such table: t3 +stmt 177 err 1 -1 227 no such table: t3 +stmt 227 err 1 -1 247 no such table: t3 diff --git a/parser/testdata/upfrom2.metadata.json b/parser/testdata/upfrom2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/upfrom2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/upfrom2.test b/parser/testdata/upfrom2.test new file mode 100644 index 0000000..e2891da --- /dev/null +++ b/parser/testdata/upfrom2.test @@ -0,0 +1,373 @@ +==== 1.%TN%.0 + + CREATE TABLE log(t TEXT); + CREATE TABLE t1(x PRIMARY KEY, y, z UNIQUE) %WO%; + CREATE INDEX t1y ON t1(y); + + INSERT INTO t1 VALUES(1, 'i', 'one'); + INSERT INTO t1 VALUES(2, 'ii', 'two'); + INSERT INTO t1 VALUES(3, 'iii', 'three'); + INSERT INTO t1 VALUES(4, 'iv', 'four'); + + CREATE TRIGGER tr1 BEFORE UPDATE ON t1 BEGIN + INSERT INTO log VALUES(old.z || '->' || new.z); + END; + CREATE TRIGGER tr2 AFTER UPDATE ON t1 BEGIN + INSERT INTO log VALUES(old.y || '->' || new.y); + END; +---- +stmt 0 ok +stmt 30 err 1 79 80 near "%": syntax error +stmt 84 err 1 -1 115 no such table: main.t1 +stmt 115 err 1 -1 160 no such table: t1 +stmt 160 err 1 -1 204 no such table: t1 +stmt 204 err 1 -1 250 no such table: t1 +stmt 250 err 1 -1 295 no such table: t1 +stmt 295 err 1 -1 345 no such table: main.t1 +stmt 408 err 1 -1 456 no such table: main.t1 +==== 1.%TN%.1 + + WITH data(k, v) AS ( + VALUES(3, 'thirty'), (1, 'ten') + ) + UPDATE t1 SET z=v FROM data WHERE x=k; + + SELECT * FROM t1; + SELECT * FROM log; +---- +stmt 0 err 1 -1 112 no such table: t1 +stmt 112 err 1 -1 135 no such table: t1 +stmt 135 err 1 -1 158 no such table: log +==== 1.%TN%.2 + + CREATE TABLE t2(a, b); + CREATE TABLE t3(k, v); + + INSERT INTO t3 VALUES(5, 'v'); + INSERT INTO t3 VALUES(12, 'xii'); + + INSERT INTO t2 VALUES(2, 12); + INSERT INTO t2 VALUES(3, 5); + + DELETE FROM log; + UPDATE t1 SET y=v FROM t2, t3 WHERE t1.x=t2.a AND t3.k=t2.b; + + SELECT * FROM t1; + SELECT * FROM log; +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 94 no such table: t3 +stmt 94 err 1 -1 132 no such table: t3 +stmt 132 err 1 -1 169 no such table: t2 +stmt 169 err 1 -1 202 no such table: t2 +stmt 202 err 1 -1 226 no such table: log +stmt 226 err 1 -1 291 no such table: t1 +stmt 291 err 1 -1 316 no such table: t1 +stmt 316 err 1 -1 339 no such table: log +==== 1.%TN%.3 + + DELETE FROM log; + WITH data(k, v) AS ( + VALUES(1, 'seven'), (1, 'eight'), (2, 'eleven'), (2, 'twelve') + ) + UPDATE t1 SET z=v FROM data WHERE x=k; + + SELECT * FROM t1; + SELECT * FROM log; +---- +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 164 no such table: t1 +stmt 164 err 1 -1 189 no such table: t1 +stmt 189 err 1 -1 212 no such table: log +==== 1.%TN%.5 + + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE TRIGGER v1tr INSTEAD OF UPDATE ON v1 BEGIN + UPDATE t1 SET y=new.y, z=new.z WHERE x=new.x; + END; + + DELETE FROM log; + WITH data(k, v) AS ( + VALUES(3, 'thirteen'), (3, 'fourteen'), (4, 'fifteen'), (4, 'sixteen') + ) + UPDATE v1 SET z=v FROM data WHERE x=k; +---- +stmt 0 ok +stmt 41 err 1 -1 95 no such table: main.v1 +stmt 156 err 1 -1 178 no such table: log +stmt 178 err 1 -1 329 no such table: v1 +==== 1.%TN%.6 + + SELECT * FROM v1; + SELECT * FROM log; +---- +stmt 0 err 1 -1 22 no such table: v1 +stmt 22 err 1 -1 45 no such table: log +==== 1.%TN%.7 + + CREATE TABLE o1(w, x, y, z UNIQUE, PRIMARY KEY(w, x)) %WO%; + CREATE INDEX o1y ON t1(y); + + INSERT INTO o1 VALUES(0, 0, 'i', 'one'); + INSERT INTO o1 VALUES(0, 1, 'ii', 'two'); + INSERT INTO o1 VALUES(1, 0, 'iii', 'three'); + INSERT INTO o1 VALUES(1, 1, 'iv', 'four'); + + CREATE TRIGGER tro1 BEFORE UPDATE ON o1 BEGIN + INSERT INTO log VALUES(old.z || '->' || new.z); + END; + CREATE TRIGGER tro2 AFTER UPDATE ON o1 BEGIN + INSERT INTO log VALUES(old.y || '->' || new.y); + END; +---- +stmt 0 err 1 59 60 near "%": syntax error +stmt 64 err 1 -1 95 no such table: main.t1 +stmt 95 err 1 -1 141 no such table: o1 +stmt 141 err 1 -1 187 no such table: o1 +stmt 187 err 1 -1 236 no such table: o1 +stmt 236 err 1 -1 283 no such table: o1 +stmt 283 err 1 -1 334 no such table: main.o1 +stmt 397 err 1 -1 446 no such table: main.o1 +==== 1.%TN%.8 + + DELETE FROM log; + WITH data(k, v) AS ( + VALUES(3, 'thirty'), (1, 'ten') + ) + UPDATE o1 SET z=v FROM data WHERE (1+x+w*2)=k; + + SELECT * FROM o1; + SELECT * FROM log; +---- +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 141 no such table: o1 +stmt 141 err 1 -1 164 no such table: o1 +stmt 164 err 1 -1 187 no such table: log +==== 1.%TN%.9 + + DELETE FROM log; + UPDATE o1 SET y=v FROM t2, t3 WHERE (1+o1.w*2+o1.x)=t2.a AND t3.k=t2.b; + + SELECT * FROM o1; + SELECT * FROM log; +---- +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 97 no such table: o1 +stmt 97 err 1 -1 122 no such table: o1 +stmt 122 err 1 -1 145 no such table: log +==== 1.%TN%.10 + + DELETE FROM log; + WITH data(k, v) AS ( + VALUES(1, 'seven'), (1, 'eight'), (2, 'eleven'), (2, 'twelve') + ) + UPDATE o1 SET z=v FROM data WHERE (1+w*2+x)=k; + + SELECT * FROM o1; + SELECT * FROM log; +---- +stmt 0 err 1 -1 21 no such table: log +stmt 21 err 1 -1 172 no such table: o1 +stmt 172 err 1 -1 197 no such table: o1 +stmt 197 err 1 -1 220 no such table: log +==== 1.%TN%.12 + + CREATE VIEW w1 AS SELECT * FROM o1; + CREATE TRIGGER w1tr INSTEAD OF UPDATE ON w1 BEGIN + UPDATE o1 SET y=new.y, z=new.z WHERE w=new.w AND x=new.x; + END; + + DELETE FROM log; + WITH data(k, v) AS ( + VALUES(3, 'thirteen'), (3, 'fourteen'), (4, 'fifteen'), (4, 'sixteen') + ) + UPDATE w1 SET z=v FROM data WHERE (1+w*2+x)=k; +---- +stmt 0 ok +stmt 41 err 1 -1 95 no such table: main.w1 +stmt 168 err 1 -1 190 no such table: log +stmt 190 err 1 -1 349 no such table: w1 +==== 1.%TN%.13 + + SELECT * FROM w1; + SELECT * FROM log; +---- +stmt 0 err 1 -1 22 no such table: w1 +stmt 22 err 1 -1 45 no such table: log +==== 2.%TN%.1 + + CREATE TABLE x1(a INTEGER PRIMARY KEY, b) %WO%; + INSERT INTO x1 VALUES + (1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), + (5, 'five'), (6, 'six'), (7, 'seven'), (8, 'eight'); +---- +stmt 0 err 1 47 48 near "%": syntax error +stmt 52 err 1 -1 198 no such table: x1 +==== 2.%TN%.2 + + CREATE TABLE data1(x, y); + INSERT INTO data1 VALUES + (1, 'eleven'), (1, 'twenty-one'), (2, 'twelve'), (2, 'twenty-two'), + (3, 'thirteen'), (3, 'twenty-three'), (4, 'fourteen'), (4, 'twenty-four'); +---- +stmt 0 ok +stmt 30 err 1 -1 210 no such table: data1 +==== 2.%TN%.3 + + UPDATE x1 SET b=y FROM data1 WHERE a=x ORDER BY a LIMIT 3; + SELECT * FROM x1; +---- +stmt 0 err 1 44 49 near "ORDER": syntax error +stmt 63 err 1 -1 85 no such table: x1 +==== 2.%TN%.4 + + UPDATE x1 SET b=b||y FROM data1 WHERE a=x ORDER BY b LIMIT 3; + SELECT * FROM x1; +---- +stmt 0 err 1 47 52 near "ORDER": syntax error +stmt 66 err 1 -1 88 no such table: x1 +==== 2.%TN%.5 + + UPDATE x1 SET b=b||b ORDER BY b; +---- +stmt 0 err 1 26 31 near "ORDER": syntax error +==== 2.%TN%.6 + + UPDATE x1 SET b=b||y FROM data1 WHERE a=x ORDER BY b; +---- +stmt 0 err 1 47 52 near "ORDER": syntax error +==== 2.%TN%.6.dup1 + + DROP TABLE x1; + CREATE TABLE x1(u, v, b, PRIMARY KEY(u, v)) %WO%; + INSERT INTO x1 VALUES + (0, 1, 'one'), (1, 0, 'two'), (1, 1, 'three'), (2, 0, 'four'), + (2, 1, 'five'), (3, 0, 'six'), (3, 1, 'seven'), (4, 0, 'eight'); +---- +stmt 0 err 1 -1 19 no such table: x1 +stmt 19 err 1 68 69 near "%": syntax error +stmt 73 err 1 -1 243 no such table: x1 +==== 2.%TN%.7 + + UPDATE x1 SET b=y FROM data1 WHERE (u*2+v)=x ORDER BY u, v LIMIT 3; + SELECT * FROM x1; +---- +stmt 0 err 1 50 55 near "ORDER": syntax error +stmt 72 err 1 -1 94 no such table: x1 +==== 2.%TN%.8 + + UPDATE x1 SET b=b||y FROM data1 WHERE (u*2+v)=x ORDER BY b LIMIT 3; + SELECT * FROM x1; +---- +stmt 0 err 1 53 58 near "ORDER": syntax error +stmt 72 err 1 -1 94 no such table: x1 +==== 3.0 + + CREATE TABLE data(x, y, z); + CREATE VIEW t1 AS SELECT * FROM data; + CREATE TRIGGER t1_insert INSTEAD OF INSERT ON t1 BEGIN + INSERT INTO data VALUES(new.x, new.y, new.z); + END; + CREATE TRIGGER t1_update INSTEAD OF UPDATE ON t1 BEGIN + INSERT INTO log VALUES(old.z || '->' || new.z); + END; + + CREATE TABLE log(t TEXT); + + INSERT INTO t1 VALUES(1, 'i', 'one'); + INSERT INTO t1 VALUES(2, 'ii', 'two'); + INSERT INTO t1 VALUES(3, 'iii', 'three'); + INSERT INTO t1 VALUES(4, 'iv', 'four'); +---- +stmt 0 ok +stmt 30 ok +stmt 70 err 1 -1 127 no such table: main.t1 +stmt 184 err 1 -1 241 no such table: main.t1 +stmt 300 ok +stmt 329 err 1 -1 372 no such table: t1 +stmt 372 err 1 -1 414 no such table: t1 +stmt 414 err 1 -1 458 no such table: t1 +stmt 458 err 1 -1 501 no such table: t1 +==== 3.1 + + WITH input(k, v) AS ( + VALUES(3, 'thirty'), (1, 'ten') + ) + UPDATE t1 SET z=v FROM input WHERE x=k; +---- +stmt 0 err 1 -1 108 no such table: t1 +==== upfrom2-generated + + INSERT INTO x1 VALUES(1, 1, 1); + INSERT INTO x1 VALUES(2, 2, 2); + INSERT INTO x1 VALUES(3, 3, 3); + INSERT INTO x1 VALUES(4, 4, 4); + INSERT INTO x1 VALUES(5, 5, 5); + CREATE TABLE map(o, t); + INSERT INTO map VALUES(3, 30), (4, 40), (1, 10); +---- +stmt 0 err 1 -1 36 no such table: x1 +stmt 36 err 1 -1 72 no such table: x1 +stmt 72 err 1 -1 108 no such table: x1 +stmt 108 err 1 -1 144 no such table: x1 +stmt 144 err 1 -1 180 no such table: x1 +stmt 180 ok +stmt 208 err 1 -1 261 no such table: map +==== upfrom2-generated.dup1 + + UPDATE x1 SET a=t FROM map WHERE a=o; + SELECT * FROM x1 ORDER BY a; +---- +stmt 0 err 1 -1 42 no such table: x1 +stmt 42 err 1 -1 75 no such table: x1 +==== 5.0 + + CREATE TABLE x1(a, b, c); + CREATE TABLE x2(a, b, c); +---- +stmt 0 ok +stmt 28 ok +==== 6.0 + + CREATE TABLE t1(a); +---- +stmt 0 ok +==== 6.1 + + UPDATE t1 SET a = 1 FROM ( + SELECT * FROM t1 + ) +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 6.2 + + UPDATE t1 SET a = 1 FROM ( + SELECT * FROM t1 UNION ALL SELECT * FROM t1 + ) +---- +stmt 0 err 1 -1 84 no such table: t1 +==== 7.0 + + CREATE TABLE t1(a); + INSERT INTO t1(a) VALUES(11),(22),(33),(44),(55); + CREATE VIEW t2(b,c) AS SELECT a, COUNT(*) OVER () FROM t1; + CREATE TABLE t3(x,y); + CREATE TRIGGER t2r1 INSTEAD OF UPDATE ON t2 BEGIN + INSERT INTO t3(x,y) VALUES(new.b,new.c); + END; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 22 err 1 -1 74 no such table: t1 +stmt 74 ok +stmt 135 ok +stmt 159 err 1 -1 211 no such table: main.t2 +stmt 263 err 1 -1 283 no such table: t2 +==== 7.1 + + UPDATE t2 SET c=t1.a FROM t1 WHERE t2.b=t1.a; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 48 no such table: t2 +stmt 48 err 1 -1 68 no such table: t3 diff --git a/parser/testdata/upfrom3.metadata.json b/parser/testdata/upfrom3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/upfrom3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/upfrom3.test b/parser/testdata/upfrom3.test new file mode 100644 index 0000000..27b8bd2 --- /dev/null +++ b/parser/testdata/upfrom3.test @@ -0,0 +1,239 @@ +==== 1.%TN%.0 + + CREATE TABLE log(t TEXT); + CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z UNIQUE) %WO%; + CREATE INDEX t1y ON t1(y); + + INSERT INTO t1 VALUES(1, 'i', 'one'); + INSERT INTO t1 VALUES(2, 'ii', 'two'); + INSERT INTO t1 VALUES(3, 'iii', 'three'); + INSERT INTO t1 VALUES(4, 'iv', 'four'); +---- +stmt 0 ok +stmt 30 err 1 87 88 near "%": syntax error +stmt 92 err 1 -1 123 no such table: main.t1 +stmt 123 err 1 -1 168 no such table: t1 +stmt 168 err 1 -1 212 no such table: t1 +stmt 212 err 1 -1 258 no such table: t1 +stmt 258 err 1 -1 303 no such table: t1 +==== 1.%TN%.1 + + CREATE TABLE x1(o, n); + INSERT INTO x1 VALUES(1, 11); + INSERT INTO x1 VALUES(2, 12); + INSERT INTO x1 VALUES(3, 13); + INSERT INTO x1 VALUES(4, 14); + UPDATE t1 SET x=n FROM x1 WHERE x=o; + SELECT x, y, z FROM t1 ORDER BY 1; +---- +stmt 0 ok +stmt 27 err 1 -1 61 no such table: x1 +stmt 61 err 1 -1 95 no such table: x1 +stmt 95 err 1 -1 129 no such table: x1 +stmt 129 err 1 -1 163 no such table: x1 +stmt 163 err 1 -1 204 no such table: t1 +stmt 204 err 1 -1 243 no such table: t1 +==== 1.%TN%.3 + + INSERT INTO x1 VALUES(11, 21); + INSERT INTO x1 VALUES(12, 22); + INSERT INTO x1 VALUES(13, 23); + INSERT INTO x1 VALUES(14, 24); + + INSERT INTO x1 VALUES(21, 31); + INSERT INTO x1 VALUES(22, 32); + INSERT INTO x1 VALUES(23, 33); + INSERT INTO x1 VALUES(24, 34); + UPDATE t1 SET x=n FROM x1 WHERE x=o; + SELECT x, y, z FROM t1 ORDER BY 1; +---- +stmt 0 err 1 -1 35 no such table: x1 +stmt 35 err 1 -1 70 no such table: x1 +stmt 70 err 1 -1 105 no such table: x1 +stmt 105 err 1 -1 140 no such table: x1 +stmt 140 err 1 -1 176 no such table: x1 +stmt 176 err 1 -1 211 no such table: x1 +stmt 211 err 1 -1 246 no such table: x1 +stmt 246 err 1 -1 281 no such table: x1 +stmt 281 err 1 -1 322 no such table: t1 +stmt 322 err 1 -1 361 no such table: t1 +==== 1.%TN%.4 + + UPDATE t1 SET x=n FROM x1 WHERE x=o; + SELECT x, y, z FROM t1 ORDER BY 1; +---- +stmt 0 err 1 -1 41 no such table: t1 +stmt 41 err 1 -1 80 no such table: t1 +==== 1.%TN%.5 + + INSERT INTO x1 VALUES(31, 32); + INSERT INTO x1 VALUES(33, 34); + UPDATE OR REPLACE t1 SET x=n FROM x1 WHERE x=o; + SELECT x, y, z FROM t1 ORDER BY 1; +---- +stmt 0 err 1 -1 35 no such table: x1 +stmt 35 err 1 -1 70 no such table: x1 +stmt 70 err 1 -1 122 no such table: t1 +stmt 122 err 1 -1 161 no such table: t1 +==== 1.%TN%.6 + + INSERT INTO t1 VALUES(33, 'ii', 'two'); + INSERT INTO t1 VALUES(35, 'iv', 'four'); +---- +stmt 0 err 1 -1 44 no such table: t1 +stmt 44 err 1 -1 89 no such table: t1 +==== 1.%TN%.7 + + CREATE TABLE x2(o, n, zz); + INSERT INTO x2 VALUES(32, 41, 'four'); + INSERT INTO x2 VALUES(33, 42, 'three'); + UPDATE OR IGNORE t1 SET x=n, z=zz FROM x2 WHERE x=o; + SELECT x, y, z FROM t1 ORDER BY 1; +---- +stmt 0 ok +stmt 31 err 1 -1 74 no such table: x2 +stmt 74 err 1 -1 118 no such table: x2 +stmt 118 err 1 -1 175 no such table: t1 +stmt 175 err 1 -1 214 no such table: t1 +==== 1.%TN%.8 + + UPDATE OR REPLACE t1 SET x=n, z=zz FROM x2 WHERE x=o; + SELECT x, y, z FROM t1 ORDER BY 1; +---- +stmt 0 err 1 -1 58 no such table: t1 +stmt 58 err 1 -1 97 no such table: t1 +==== 2.1.1 + + CREATE TABLE u1(a, b, c, PRIMARY KEY(b, c)) WITHOUT ROWID; + INSERT INTO u1 VALUES(0, 0, 0); + INSERT INTO u1 VALUES(1, 0, 1); + INSERT INTO u1 VALUES(2, 1, 0); + INSERT INTO u1 VALUES(3, 1, 1); +---- +stmt 0 ok +stmt 61 err 1 -1 95 no such table: u1 +stmt 95 err 1 -1 129 no such table: u1 +stmt 129 err 1 -1 163 no such table: u1 +stmt 163 err 1 -1 197 no such table: u1 +==== 2.1.2 + + CREATE TABLE map(f, t); + INSERT INTO map VALUES(0, 10); + INSERT INTO map VALUES(1, 11); + UPDATE u1 SET c=t FROM map WHERE c=f; + SELECT * FROM u1 ORDER BY a; +---- +stmt 0 ok +stmt 26 err 1 -1 59 no such table: map +stmt 59 err 1 -1 92 no such table: map +stmt 92 err 1 -1 132 no such table: u1 +stmt 132 err 1 -1 163 no such table: u1 +==== 2.1.3 + + UPDATE u1 SET b=t FROM map WHERE b=f; + SELECT * FROM u1 ORDER BY a; +---- +stmt 0 err 1 -1 40 no such table: u1 +stmt 40 err 1 -1 71 no such table: u1 +==== 2.1.4 + + CREATE TABLE map2(o1, o2, n1, n2); + INSERT INTO map2 VALUES + (10, 10, 50, 50), (10, 11, 50, 60), + (11, 10, 60, 50), (11, 11, 60, 60); + UPDATE u1 SET b=n1, c=n2 FROM map2 WHERE b=o1 AND c=o2; + SELECT * FROM u1 ORDER BY a; +---- +stmt 0 ok +stmt 37 err 1 -1 144 no such table: map2 +stmt 144 err 1 -1 202 no such table: u1 +stmt 202 err 1 -1 233 no such table: u1 +==== upfrom3-generated + + CREATE TABLE g1(a, b, c, PRIMARY KEY(a, b)) %WO%; + INSERT INTO g1 VALUES(1, 1, 1); + + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.g1(a, b, c, PRIMARY KEY(a, b)) %WO%; + INSERT INTO aux.g1 VALUES(10, 1, 10); + INSERT INTO aux.g1 VALUES(20, 2, 20); + INSERT INTO aux.g1 VALUES(30, 3, 30); +---- +stmt 0 err 1 51 52 near "%": syntax error +stmt 56 err 1 -1 94 no such table: g1 +stmt 94 ok +stmt 127 err 1 147 154 unknown database aux +stmt 187 err 1 -1 231 no such table: aux.g1 +stmt 231 err 1 -1 275 no such table: aux.g1 +stmt 275 err 1 -1 319 no such table: aux.g1 +==== upfrom3-generated.dup1 + + UPDATE aux.g1 SET c=101 FROM main.g1; +---- +stmt 0 err 1 -1 44 no such table: aux.g1 +==== upfrom3-generated.dup2 + + SELECT * FROM aux.g1; +---- +stmt 0 err 1 -1 28 no such table: aux.g1 +==== upfrom3-generated.dup3 + + UPDATE g1 SET c=101 FROM g1 AS g2; +---- +stmt 0 err 1 -1 41 no such table: g1 +==== upfrom3-generated.dup4 + + SELECT * FROM g1; +---- +stmt 0 err 1 -1 24 no such table: g1 +==== upfrom3-generated.dup5 + + CREATE TABLE p1(a INTEGER PRIMARY KEY, b) %WO%; + CREATE TABLE c1(x PRIMARY KEY, y REFERENCES p1 ON UPDATE CASCADE) %WO%; + PRAGMA foreign_keys = 1; + + INSERT INTO p1 VALUES(1, 'one'); + INSERT INTO p1 VALUES(11, 'eleven'); + INSERT INTO p1 VALUES(111, 'eleventyone'); + + INSERT INTO c1 VALUES('a', 1); + INSERT INTO c1 VALUES('b', 11); + INSERT INTO c1 VALUES('c', 111); +---- +stmt 0 err 1 49 50 near "%": syntax error +stmt 54 err 1 127 128 near "%": syntax error +stmt 132 ok +stmt 163 err 1 -1 203 no such table: p1 +stmt 203 err 1 -1 246 no such table: p1 +stmt 246 err 1 -1 295 no such table: p1 +stmt 295 err 1 -1 333 no such table: c1 +stmt 333 err 1 -1 371 no such table: c1 +stmt 371 err 1 -1 410 no such table: c1 +==== upfrom3-generated.dup6 + + CREATE TABLE map(f, t); + INSERT INTO map VALUES('a', 111); + INSERT INTO map VALUES('c', 112); +---- +stmt 0 ok +stmt 30 err 1 -1 70 no such table: map +stmt 70 err 1 -1 110 no such table: map +==== upfrom3-generated.dup7 + + UPDATE c1 SET y=t FROM map WHERE x=f; +---- +stmt 0 err 1 -1 44 no such table: c1 +==== upfrom3-generated.dup8 + + INSERT INTO map VALUES('eleven', 12); + INSERT INTO map VALUES('eleventyone', 112); + UPDATE p1 SET a=t FROM map WHERE b=f; +---- +stmt 0 err 1 -1 44 no such table: map +stmt 44 err 1 -1 94 no such table: map +stmt 94 err 1 -1 138 no such table: p1 +==== upfrom3-generated.dup9 + + SELECT * FROM c1 +---- +stmt 0 err 1 -1 24 no such table: c1 diff --git a/parser/testdata/upfrom4.metadata.json b/parser/testdata/upfrom4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/upfrom4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/upfrom4.test b/parser/testdata/upfrom4.test new file mode 100644 index 0000000..99140a6 --- /dev/null +++ b/parser/testdata/upfrom4.test @@ -0,0 +1,168 @@ +==== 100 + + DROP TABLE IF EXISTS t5; + DROP TABLE IF EXISTS m1; + DROP TABLE IF EXISTS m2; + CREATE TABLE t5(a INTEGER PRIMARY KEY, b TEXT, c TEXT); + CREATE TABLE m1(x INTEGER PRIMARY KEY, y TEXT); + CREATE TABLE m2(u INTEGER PRIMARY KEY, v TEXT); + + INSERT INTO t5 VALUES(1, 'one', 'ONE'); + INSERT INTO t5 VALUES(2, 'two', 'TWO'); + INSERT INTO t5 VALUES(3, 'three', 'THREE'); + INSERT INTO t5 VALUES(4, 'four', 'FOUR'); + + INSERT INTO m1 VALUES(1, 'i'); + INSERT INTO m1 VALUES(2, 'ii'); + INSERT INTO m1 VALUES(3, 'iii'); + + INSERT INTO m2 VALUES(1, 'I'); + INSERT INTO m2 VALUES(3, 'II'); + INSERT INTO m2 VALUES(4, 'III'); + SELECT * FROM t5; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 ok +stmt 139 ok +stmt 189 ok +stmt 239 err 1 -1 282 no such table: t5 +stmt 282 err 1 -1 324 no such table: t5 +stmt 324 err 1 -1 370 no such table: t5 +stmt 370 err 1 -1 414 no such table: t5 +stmt 414 err 1 -1 448 no such table: m1 +stmt 448 err 1 -1 482 no such table: m1 +stmt 482 err 1 -1 517 no such table: m1 +stmt 517 err 1 -1 551 no such table: m2 +stmt 551 err 1 -1 585 no such table: m2 +stmt 585 err 1 -1 620 no such table: m2 +stmt 620 err 1 -1 640 no such table: t5 +==== 110 + + BEGIN; + UPDATE t5 SET b=y, c=v FROM m1 LEFT JOIN m2 ON (x=u) WHERE x=a; + SELECT * FROM t5 ORDER BY a; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 75 no such table: t5 +stmt 75 err 1 -1 106 no such table: t5 +stmt 106 ok +==== 120 + + BEGIN; + UPDATE t5 SET b=y, c=v FROM m2 RIGHT JOIN m1 ON (x=u) WHERE x=a; + SELECT * FROM t5 ORDER BY a; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 76 no such table: t5 +stmt 76 err 1 -1 107 no such table: t5 +stmt 107 ok +==== 200 + + CREATE TABLE t1(a INT PRIMARY KEY, b INT, c INT); + INSERT INTO t1(a) VALUES(1),(2),(8),(19); + CREATE TABLE c1(x INTEGER PRIMARY KEY, b INT); + INSERT INTO c1(x,b) VALUES(1,1),(8,8),(17,17),(NULL,NULL); + CREATE TABLE c2(x INT,c INT); + INSERT INTO c2(x,c) VALUES(2,2),(8,8),(NULL,NULL); + CREATE TABLE dual(dummy TEXT); + INSERT INTO dual VALUES('X'); +---- +stmt 0 ok +stmt 52 err 1 -1 96 no such table: t1 +stmt 96 ok +stmt 145 err 1 -1 206 no such table: c1 +stmt 206 ok +stmt 238 err 1 -1 291 no such table: c2 +stmt 291 ok +stmt 324 err 1 -1 356 no such table: dual +==== 210 + + BEGIN; + SELECT * FROM t1 ORDER BY a; + UPDATE t1 SET b=c1.b, c=c2.c + FROM dual, c1 NATURAL RIGHT JOIN c2 + WHERE x=a; + SELECT * FROM t1 ORDER BY a; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 156 no such table: t1 +stmt 156 ok +==== 300 + + CREATE TABLE t2(x); + CREATE TRIGGER AFTER INSERT ON t2 BEGIN + UPDATE t1 SET b=c1.b, c=c2.c + FROM dual, c1 NATURAL RIGHT JOIN c2 + WHERE x=a; + END; +---- +stmt 0 ok +stmt 22 err 1 -1 64 no such table: main.t2 +==== 310 + + BEGIN; + SELECT * FROM t1 ORDER BY a; + INSERT INTO t2(x) VALUES(1); + SELECT * FROM t1 ORDER BY a; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 71 no such table: t2 +stmt 71 err 1 -1 102 no such table: t1 +stmt 102 ok +==== 400 + + CREATE TABLE t2(x,y,z PRIMARY KEY) WITHOUT ROWID; + INSERT INTO t2 VALUES(89,-89,6); + CREATE TABLE t1(a INT,b TEXT,c TEXT,d REAL) STRICT; + INSERT INTO t1 VALUES(1,'xyz','def',4.5); + CREATE TRIGGER t1tr BEFORE UPDATE ON t1 BEGIN + INSERT INTO t1(a,b) VALUES(1000,'uvw'); + UPDATE t1 SET b=NULL FROM (SELECT CAST(a AS varchar) FROM t1 ORDER BY b) NATURAL LEFT FULL JOIN t1 AS text; + END; + UPDATE t1 SET b=b|100; + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 ok +stmt 52 err 1 -1 87 no such table: t2 +stmt 87 ok +stmt 141 err 1 -1 185 no such table: t1 +stmt 185 err 1 -1 233 no such table: main.t1 +stmt 396 err 1 -1 421 no such table: t1 +stmt 421 err 1 -1 452 no such table: t1 +==== 500 + + CREATE TABLE t1(abc INT, def INT); + INSERT INTO t1 VALUES(0,0); + INSERT INTO t1 VALUES(0,0); + INSERT INTO t1 VALUES(0,0); + CREATE TABLE dual(dummy TEXT); + INSERT INTO dual(dummy) VALUES('X'); +---- +stmt 0 ok +stmt 39 err 1 -1 73 no such table: t1 +stmt 73 err 1 -1 105 no such table: t1 +stmt 105 err 1 -1 137 no such table: t1 +stmt 137 ok +stmt 172 err 1 -1 215 no such table: dual +==== 510 + + UPDATE t1 + SET (abc, def)=(SELECT x, 123) + FROM dual LEFT JOIN (SELECT 789 AS 'x' FROM dual) AS d2 + LIMIT 2 +---- +stmt 0 err 1 121 126 near "LIMIT": syntax error +==== 520 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 22 no such table: t1 diff --git a/parser/testdata/upfromfault.metadata.json b/parser/testdata/upfromfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/upfromfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/upfromfault.test b/parser/testdata/upfromfault.test new file mode 100644 index 0000000..0070e54 --- /dev/null +++ b/parser/testdata/upfromfault.test @@ -0,0 +1,46 @@ +==== upfromfault-generated + + CREATE TABLE log(t TEXT); + + INSERT INTO t1 VALUES(1, 'i', 'one'); + INSERT INTO t1 VALUES(2, 'ii', 'two'); + INSERT INTO t1 VALUES(3, 'iii', 'three'); + INSERT INTO t1 VALUES(4, 'iv', 'four'); +---- +stmt 0 ok +stmt 30 err 1 -1 75 no such table: t1 +stmt 75 err 1 -1 119 no such table: t1 +stmt 119 err 1 -1 165 no such table: t1 +stmt 165 err 1 -1 210 no such table: t1 +==== upfromfault-generated.dup1 + + CREATE TRIGGER tr1 BEFORE UPDATE ON t1 BEGIN + INSERT INTO log VALUES(old.z || '->' || new.z); + END; + CREATE TRIGGER tr2 AFTER UPDATE ON t1 BEGIN + INSERT INTO log VALUES(old.y || '->' || new.y); + END; +---- +stmt 0 err 1 -1 51 no such table: main.t1 +stmt 118 err 1 -1 168 no such table: main.t1 +==== 2.0 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(x, y, z); +---- +stmt 0 ok +stmt 28 ok +==== 2.2 + + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + UPDATE t1 SET a=x FROM t2 WHERE c=z; + END; + + INSERT INTO t2 VALUES(1, 1, 1); + INSERT INTO t2 VALUES(2, 2, 2); + INSERT INTO t2 VALUES(3, 3, 3); +---- +stmt 0 err 1 -1 46 no such table: main.t1 +stmt 94 err 1 -1 129 no such table: t2 +stmt 129 err 1 -1 163 no such table: t2 +stmt 163 err 1 -1 197 no such table: t2 diff --git a/parser/testdata/upsertfault.metadata.json b/parser/testdata/upsertfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/upsertfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/upsertfault.test b/parser/testdata/upsertfault.test new file mode 100644 index 0000000..5e12d24 --- /dev/null +++ b/parser/testdata/upsertfault.test @@ -0,0 +1,9 @@ +==== 1.0 + + CREATE TABLE t1(a PRIMARY KEY, b, c, d, UNIQUE(b, c)); + INSERT INTO t1 VALUES(1, 1, 1, 1); + INSERT INTO t1 VALUES(2, 2, 2, 2); +---- +stmt 0 ok +stmt 57 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 131 no such table: t1 diff --git a/parser/testdata/uri.metadata.json b/parser/testdata/uri.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/uri.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/uri.test b/parser/testdata/uri.test new file mode 100644 index 0000000..77c9240 --- /dev/null +++ b/parser/testdata/uri.test @@ -0,0 +1,10 @@ +==== 7.3 + + INSERT INTO t2 VALUES('c', 'd') +---- +stmt 0 err 1 -1 36 no such table: t2 +==== 7.4 + + INSERT INTO t1 VALUES(3, 4) +---- +stmt 0 err 1 -1 32 no such table: t1 diff --git a/parser/testdata/vacuum-into.metadata.json b/parser/testdata/vacuum-into.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vacuum-into.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vacuum-into.test b/parser/testdata/vacuum-into.test new file mode 100644 index 0000000..4ca29c0 --- /dev/null +++ b/parser/testdata/vacuum-into.test @@ -0,0 +1,102 @@ +==== vacuum-into-100 + + CREATE TABLE t1( + a INTEGER PRIMARY KEY, + b ANY, + c INT AS (b+1), --- See "2024-04-09" block + CHECK( typeof(b)!='integer' OR b>a-5 ) --- comment below + ); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b) SELECT x, randomblob(600) FROM c; + CREATE INDEX t1b ON t1(b); + DELETE FROM t1 WHERE a%2; + SELECT count(*), sum(a), sum(length(b)) FROM t1; +---- +stmt 0 ok +stmt 197 err 1 -1 330 no such table: t1 +stmt 330 err 1 -1 359 no such table: main.t1 +stmt 359 err 1 -1 387 no such table: t1 +stmt 387 err 1 -1 438 no such table: t1 +==== vacuum-into-110 + + VACUUM main INTO 'out.db'; +---- +stmt 0 ok +==== vacuum-into-130 + + VACUUM INTO 'out.db'; +---- +stmt 0 ok +==== vacuum-into-140 + + VACUUM INTO 'out2.db'; +---- +stmt 0 ok +==== vacuum-into-150 + + VACUUM INTO 'out2.db'; +---- +stmt 0 ok +==== vacuum-into-200 + + VACUUM main INTO ':memory:'; +---- +stmt 0 ok +==== vacuum-into-300 + + CREATE TABLE t2(name TEXT); + INSERT INTO t2 VALUES(':memory:'); + VACUUM main INTO (SELECT name FROM t2); +---- +stmt 0 ok +stmt 30 err 1 -1 67 no such table: t2 +stmt 67 err 1 -1 109 no such table: t2 +==== vacuum-into-310 + + VACUUM INTO null; +---- +stmt 0 ok +==== vacuum-into-320 + + VACUUM INTO x; +---- +stmt 0 err 1 15 17 no such column: x +==== vacuum-into-330 + + VACUUM INTO t1.nosuchcol; +---- +stmt 0 err 1 15 28 no such column: t1.nosuchcol +==== vacuum-into-340 + + VACUUM INTO main.t1.nosuchcol; +---- +stmt 0 err 1 15 33 no such column: main.t1.nosuchcol +==== vacuum-into-420 + + VACUUM INTO target2() +---- +stmt 0 err 1 15 25 no such function: target2 +==== vacuum-into-500 + + VACUUM INTO 'test.db2'; +---- +stmt 0 ok +==== vacuum-into-610 + + PRAGMA page_size; +---- +stmt 0 ok +==== vacuum-into-620 + + PRAGMA page_size=1024; + VACUUM INTO 'test.db2'; +---- +stmt 0 ok +stmt 27 ok +==== vacuum-into-700 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 diff --git a/parser/testdata/vacuum.metadata.json b/parser/testdata/vacuum.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vacuum.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vacuum.test b/parser/testdata/vacuum.test new file mode 100644 index 0000000..ebf01cf --- /dev/null +++ b/parser/testdata/vacuum.test @@ -0,0 +1,85 @@ +==== vacuum-2.1.1 + + BEGIN; + VACUUM; +---- +stmt 0 ok +stmt 13 ok +==== vacuum-2.8 + + INSERT INTO t7 SELECT * FROM t6; + SELECT count(*) FROM t7; +---- +stmt 0 err 1 -1 37 no such table: t7 +stmt 37 err 1 -1 66 no such table: t7 +==== vacuum-5.2 + + VACUUM; +---- +stmt 0 ok +==== vacuum-6.1 + + CREATE TABLE "abc abc"(a, b, c); + INSERT INTO "abc abc" VALUES(1, 2, 3); + VACUUM; +---- +stmt 0 ok +stmt 37 err 1 -1 80 no such table: abc abc +stmt 80 ok +==== vacuum-6.2 + + select * from "abc abc"; +---- +stmt 0 err 1 -1 29 no such table: abc abc +==== vacuum-6.3 + + DELETE FROM "abc abc"; + INSERT INTO "abc abc" VALUES(X'00112233', NULL, NULL); + VACUUM; +---- +stmt 0 err 1 -1 29 no such table: abc abc +stmt 29 err 1 -1 90 no such table: abc abc +stmt 90 ok +==== vacuum-6.4 + + select count(*) from "abc abc" WHERE a = X'00112233'; +---- +stmt 0 err 1 -1 60 no such table: abc abc +==== vacuum-7.1 + + CREATE TABLE t2(t); + CREATE TABLE t3(t); + DROP TABLE t2; + PRAGMA freelist_count; +---- +stmt 0 ok +stmt 24 ok +stmt 48 err 1 -1 67 no such table: t2 +stmt 67 ok +==== vacuum-11.1 + + PRAGMA page_size=1024; + VACUUM; + PRAGMA page_size; +---- +stmt 0 ok +stmt 25 ok +stmt 35 ok +==== vacuum-11.2 + + PRAGMA page_size=2048; + VACUUM; + PRAGMA page_size; +---- +stmt 0 ok +stmt 25 ok +stmt 35 ok +==== vacuum-11.3 + + PRAGMA page_size=4096; + VACUUM; + PRAGMA page_size; +---- +stmt 0 ok +stmt 25 ok +stmt 35 ok diff --git a/parser/testdata/vacuum2.metadata.json b/parser/testdata/vacuum2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vacuum2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vacuum2.test b/parser/testdata/vacuum2.test new file mode 100644 index 0000000..80463b2 --- /dev/null +++ b/parser/testdata/vacuum2.test @@ -0,0 +1,56 @@ +==== vacuum2-1.1 + + CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y); + DROP TABLE t1; + VACUUM; +---- +stmt 0 ok +stmt 61 err 1 -1 80 no such table: t1 +stmt 80 ok +==== vacuum2-4.2 + + pragma auto_vacuum=1; + vacuum; + pragma auto_vacuum; +---- +stmt 0 ok +stmt 28 ok +stmt 42 ok +==== vacuum2-4.3 + + pragma integrity_check +---- +stmt 0 ok +==== vacuum2-4.6 + + pragma integrity_check +---- +stmt 0 ok +==== vacuum2-5.1 + + CREATE TABLE t1(a PRIMARY KEY, b UNIQUE); + INSERT INTO t1 VALUES(1, randomblob(500)); + INSERT INTO t1 SELECT a+1, randomblob(500) FROM t1; -- 2 + INSERT INTO t1 SELECT a+2, randomblob(500) FROM t1; -- 4 + INSERT INTO t1 SELECT a+4, randomblob(500) FROM t1; -- 8 + INSERT INTO t1 SELECT a+8, randomblob(500) FROM t1; -- 16 +---- +stmt 0 ok +stmt 44 err 1 -1 89 no such table: t1 +stmt 89 err 1 -1 143 no such table: t1 +stmt 143 err 1 -1 207 no such table: t1 +stmt 207 err 1 -1 272 no such table: t1 +stmt 272 err 1 -1 337 no such table: t1 +==== 6.0 + + CREATE TABLE t6(x PRIMARY KEY COLLATE cmp, y) WITHOUT ROWID; + CREATE INDEX t6y ON t6(y); + INSERT INTO t6 VALUES('i', 'one'); + INSERT INTO t6 VALUES('ii', 'one'); + INSERT INTO t6 VALUES('iii', 'one'); +---- +stmt 0 err 1 -1 45 no such collation sequence: cmp +stmt 63 err 1 -1 92 no such table: main.t6 +stmt 92 err 1 -1 129 no such table: t6 +stmt 129 err 1 -1 167 no such table: t6 +stmt 167 err 1 -1 206 no such table: t6 diff --git a/parser/testdata/vacuum3.metadata.json b/parser/testdata/vacuum3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vacuum3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vacuum3.test b/parser/testdata/vacuum3.test new file mode 100644 index 0000000..40f0e4f --- /dev/null +++ b/parser/testdata/vacuum3.test @@ -0,0 +1,31 @@ +==== vacuum3-1.1 + + PRAGMA auto_vacuum=OFF; + PRAGMA page_size = 1024; + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); +---- +stmt 0 ok +stmt 28 ok +stmt 57 ok +stmt 87 err 1 -1 123 no such table: t1 +==== vacuum3-1.2 + PRAGMA page_size +---- +stmt 0 ok +==== vacuum3-generated + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== vacuum3-2.2 + PRAGMA page_size +---- +stmt 0 ok +==== vacuum3-generated.dup1 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== vacuum3-3.2 + PRAGMA page_size +---- +stmt 0 ok diff --git a/parser/testdata/vacuum5.metadata.json b/parser/testdata/vacuum5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vacuum5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vacuum5.test b/parser/testdata/vacuum5.test new file mode 100644 index 0000000..baa2fe8 --- /dev/null +++ b/parser/testdata/vacuum5.test @@ -0,0 +1,102 @@ +==== vacuum5-1.1 + + PRAGMA auto_vacuum = 0; + CREATE TABLE main.t1(a,b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000) + INSERT INTO t1(a,b) SELECT x, randomblob(1000) FROM c; + CREATE TEMP TABLE ttemp(x,y); + INSERT INTO ttemp SELECT * FROM t1; + ATTACH 'test2.db' AS x2; + ATTACH 'test3.db' AS x3; + CREATE TABLE x2.t2(c,d); + INSERT INTO t2 SELECT * FROM t1; + CREATE TABLE x3.t3(e,f); + INSERT INTO t3 SELECT * FROM t1; + DELETE FROM t1 WHERE (rowid%3)!=0; + DELETE FROM t2 WHERE (rowid%4)!=0; + DELETE FROM t3 WHERE (rowid%5)!=0; + PRAGMA main.integrity_check; + PRAGMA x2.integrity_check; + PRAGMA x3.integrity_check; +---- +stmt 0 ok +stmt 26 ok +stmt 55 err 1 -1 192 no such table: t1 +stmt 192 ok +stmt 224 err 1 -1 262 no such table: ttemp +stmt 262 ok +stmt 289 ok +stmt 316 err 1 332 338 unknown database x2 +stmt 343 err 1 -1 378 no such table: t2 +stmt 378 err 1 394 400 unknown database x3 +stmt 405 err 1 -1 440 no such table: t3 +stmt 440 err 1 -1 477 no such table: t1 +stmt 477 err 1 -1 514 no such table: t2 +stmt 514 err 1 -1 551 no such table: t3 +stmt 551 ok +stmt 582 err 1 592 611 unknown database x2 +stmt 611 err 1 621 640 unknown database x3 +==== vacuum5-1.2.1 + + VACUUM main; +---- +stmt 0 ok +==== vacuum-1.2.5 + + DELETE FROM t1; + PRAGMA main.integrity_check; +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 ok +==== vacuum5-1.3.1 + + VACUUM x2; +---- +stmt 0 err 1 10 13 unknown database x2 +==== vacuum-1.3.5 + + DELETE FROM t2; + PRAGMA x2.integrity_check; +---- +stmt 0 err 1 -1 18 no such table: t2 +stmt 18 err 1 28 47 unknown database x2 +==== vacuum5-1.4.1 + + VACUUM x3; +---- +stmt 0 err 1 10 13 unknown database x3 +==== vacuum5-1.4.1.dup1 + + VACUUM temp; +---- +stmt 0 ok +==== vacuum5-1.4.2 + + PRAGMA temp.page_count; +---- +stmt 0 ok +==== vacuum5-2.0 + + VACUUM olaf; +---- +stmt 0 err 1 10 15 unknown database olaf +==== 3.0 + + PRAGMA temp_store = file; + PRAGMA page_size = 1024; + PRAGMA cache_size = 50; + CREATE TABLE t1(i INTEGER PRIMARY KEY, j UNIQUE); + WITH s(i) AS ( + VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 + ) + INSERT INTO t1 SELECT NULL, randomblob(100) FROM s; +---- +stmt 0 ok +stmt 30 ok +stmt 59 ok +stmt 87 ok +stmt 141 err 1 -1 279 no such table: t1 +==== 3.1 + VACUUM +---- +stmt 0 ok diff --git a/parser/testdata/vacuum6.metadata.json b/parser/testdata/vacuum6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vacuum6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vacuum6.test b/parser/testdata/vacuum6.test new file mode 100644 index 0000000..a96820f --- /dev/null +++ b/parser/testdata/vacuum6.test @@ -0,0 +1,73 @@ +==== 1.0 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y); + INSERT INTO t1 VALUES(1, 1); +---- +stmt 0 ok +stmt 45 err 1 -1 76 no such table: t1 +==== 1.1 + + VACUUM +---- +stmt 0 ok +==== 1.2 + + CREATE TABLE t1(x,b); + CREATE INDEX x1 ON t1(x); + CREATE INDEX x2 ON t1(x); + CREATE INDEX x3 ON t1(x); + INSERT INTO t1 SELECT 2,''; + VACUUM; +---- +stmt 0 ok +stmt 24 err 1 -1 52 no such table: main.t1 +stmt 52 err 1 -1 80 no such table: main.t1 +stmt 80 err 1 -1 108 no such table: main.t1 +stmt 108 err 1 -1 138 no such table: t1 +stmt 138 ok +==== vacuum6-generated + + vacuum; +---- +stmt 0 ok +==== vacuum6-generated.dup1 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 3.0 + + PRAGMA page_size = 1024; + CREATE TABLE t1(x INTEGER PRIMARY KEY, y); + INSERT INTO t1 VALUES(2, randomblob(1200)); +---- +stmt 0 ok +stmt 27 ok +stmt 72 err 1 -1 118 no such table: t1 +==== 3.1 + + PRAGMA page_size = 512; + VACUUM; +---- +stmt 0 ok +stmt 26 ok +==== 3.2 + + PRAGMA integrity_check +---- +stmt 0 ok +==== 4.0 + + CREATE TABLE tx(a, b); + CREATE INDEX i1 ON tx(b); + WITH s(i) AS ( + SELECT 8000 UNION ALL SELECT i+1 FROM s WHERE i<10000 + ) + INSERT INTO tx SELECT i, randomblob(i) FROM s; + + SELECT sum(length(b)) FROM tx; +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: main.tx +stmt 53 err 1 -1 183 no such table: tx +stmt 183 err 1 -1 217 no such table: tx diff --git a/parser/testdata/vacuummem.metadata.json b/parser/testdata/vacuummem.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vacuummem.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vacuummem.test b/parser/testdata/vacuummem.test new file mode 100644 index 0000000..753a47f --- /dev/null +++ b/parser/testdata/vacuummem.test @@ -0,0 +1,25 @@ +==== 1.0 + + PRAGMA cache_size = -2000; + CREATE TABLE t1(a, b, c); + + WITH r(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM r WHERE i<100000 + ) + INSERT INTO t1 SELECT randomblob(100),randomblob(100),randomblob(100) FROM r; + + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1b ON t1(b); + CREATE INDEX t1c ON t1(c); +---- +stmt 0 ok +stmt 29 ok +stmt 57 err 1 -1 215 no such table: t1 +stmt 215 err 1 -1 245 no such table: main.t1 +stmt 245 err 1 -1 274 no such table: main.t1 +stmt 274 err 1 -1 303 no such table: main.t1 +==== 1.4 + + SELECT count(*) FROM t1 WHERE +a IS NOT NULL +---- +stmt 0 err 1 -1 48 no such table: t1 diff --git a/parser/testdata/values.metadata.json b/parser/testdata/values.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/values.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/values.test b/parser/testdata/values.test new file mode 100644 index 0000000..190077b --- /dev/null +++ b/parser/testdata/values.test @@ -0,0 +1,577 @@ +==== 1.0 + + CREATE TABLE x1(a, b, c); +---- +stmt 0 ok +==== 1.1.1 + + INSERT INTO x1 VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4); +---- +stmt 0 err 1 -1 67 no such table: x1 +==== 1.1.2 + + SELECT * FROM x1; +---- +stmt 0 err 1 -1 20 no such table: x1 +==== 1.2.0 + + DELETE FROM x1 +---- +stmt 0 err 1 -1 18 no such table: x1 +==== 1.2.1 + + INSERT INTO x1 VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3) UNION ALL SELECT 4, 4, 4; + SELECT * FROM x1; +---- +stmt 0 err 1 -1 81 no such table: x1 +stmt 81 err 1 -1 101 no such table: x1 +==== 1.2.2 + + DELETE FROM x1; + INSERT INTO x1 + VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5) + UNION ALL SELECT 6, 6, 6; + SELECT * FROM x1; +---- +stmt 0 err 1 -1 18 no such table: x1 +stmt 18 err 1 -1 127 no such table: x1 +stmt 127 err 1 -1 147 no such table: x1 +==== 1.2.3 + + DELETE FROM x1; + INSERT INTO x1 + VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4) + UNION ALL SELECT 6, 6, 6; + SELECT * FROM x1; +---- +stmt 0 err 1 -1 18 no such table: x1 +stmt 18 err 1 -1 115 no such table: x1 +stmt 115 err 1 -1 135 no such table: x1 +==== 1.2.4 + + DELETE FROM x1; + INSERT INTO x1 VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3) UNION ALL SELECT 6, 6, 6; + SELECT * FROM x1; +---- +stmt 0 err 1 -1 18 no such table: x1 +stmt 18 err 1 -1 99 no such table: x1 +stmt 99 err 1 -1 119 no such table: x1 +==== 1.2.6 + + SELECT * FROM x1; +---- +stmt 0 err 1 -1 20 no such table: x1 +==== 2.0 + + CREATE TABLE x1(a, b, c); +---- +stmt 0 ok +==== 2.1.1 + + INSERT INTO x1 VALUES + (1, 1, 1), + (2, 2, 2), + (3, 3, 3), + (4, 4, 4), + (5, 5, 5), + (6, 6, 6), + (7, 7, 7), + (8, 8, 8), + (9, 9, 9), + (10, 10, 10, 10) +---- +stmt 0 err 1 -1 210 all VALUES must have the same number of terms +==== 2.1.2 + + INSERT INTO x1 VALUES + (1, 1, 1), + (2, 2, 2, 2), + (3, 3, 3), + (4, 4, 4), + (5, 5, 5), + (6, 6, 6), + (7, 7, 7), + (8, 8, 8), + (9, 9, 9), + (10, 10, 10) +---- +stmt 0 err 1 -1 62 all VALUES must have the same number of terms +==== 2.2 + + INSERT INTO x1 VALUES + (1, 1, 1), + (2, 2, 2), + (3, 3, 3), + (4, 4, 4), + (5, 5, 5), + (6, 6, 6), + (7, 7, 7), + (8, 8, 8), + (9, 9, 9), + (10, 10, 10) +---- +stmt 0 err 1 -1 206 no such table: x1 +==== 2.3 + + INSERT INTO x1 VALUES + (1, 1, 1), + (2, 2, 2), + (3, 3, 3), + (4, 4, 4), + (5, 5, 5), + (6, 6, 6), + (7, 7, 7), + (8, 8, 8), + (9, 9, 9), + (10, 10, 10) + UNION ALL + SELECT 5, 12, 12 + ORDER BY 1 +---- +stmt 0 err 1 -1 263 no such table: x1 +==== 3.0 + + CREATE TABLE y1(x, y); +---- +stmt 0 ok +==== 3.1.1 + + DELETE FROM y1; + INSERT INTO y1 VALUES(1, 2), (3, 4), (row_number() OVER (), 5); +---- +stmt 0 err 1 -1 18 no such table: y1 +stmt 18 err 1 -1 84 no such table: y1 +==== 3.1.2 + + SELECT * FROM y1; +---- +stmt 0 err 1 -1 20 no such table: y1 +==== 3.2.1 + + DELETE FROM y1; + INSERT INTO y1 VALUES(1, 2), (3, 4), (row_number() OVER (), 6) + , (row_number() OVER (), 7) +---- +stmt 0 err 1 -1 18 no such table: y1 +stmt 18 err 1 -1 116 no such table: y1 +==== 3.1.2.dup1 + + SELECT * FROM y1; +---- +stmt 0 err 1 -1 20 no such table: y1 +==== 4.0 + + CREATE TABLE x1(a PRIMARY KEY, b) WITHOUT ROWID; +---- +stmt 0 ok +==== 4.1.1 + + DELETE FROM x1; + INSERT INTO x1 VALUES + (1, 1), + (2, (SELECT * FROM (VALUES('a'), ('b'), ('c'), ('d')) )) +---- +stmt 0 err 1 -1 20 no such table: x1 +stmt 20 err 1 -1 129 no such table: x1 +==== 4.1.2 + + SELECT * FROM x1 +---- +stmt 0 err 1 -1 22 no such table: x1 +==== 4.2.1 + + DELETE FROM x1; + INSERT INTO x1 VALUES + (1, 1), + (2, 2), + (3, 3), + (4, 4), + (5, (SELECT * FROM (VALUES('a'), ('b'), ('c'), ('d')) )) +---- +stmt 0 err 1 -1 20 no such table: x1 +stmt 20 err 1 -1 177 no such table: x1 +==== 4.2.2 + + SELECT * FROM x1 +---- +stmt 0 err 1 -1 22 no such table: x1 +==== 4.3.1 + + DELETE FROM x1; + INSERT INTO x1 VALUES + (1, (SELECT * FROM (VALUES('a'), ('b'), ('c'), ('d'), ('e')) )) +---- +stmt 0 err 1 -1 20 no such table: x1 +stmt 20 err 1 -1 120 no such table: x1 +==== 4.3.2 + + SELECT * FROM x1 +---- +stmt 0 err 1 -1 22 no such table: x1 +==== 5.0 + + CREATE VIEW v1 AS VALUES(1, 2, 3), (4, 5, 6), (7, 8, 9); +---- +stmt 0 ok +==== 5.1 + + SELECT * FROM v1 +---- +stmt 0 err 1 -1 20 no such table: v1 +==== 6.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1), (2); +---- +stmt 0 ok +stmt 22 err 1 -1 55 no such table: t1 +==== 6.1 + + SELECT ( VALUES( x ), ( x ) ) FROM t1; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 6.0.dup1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('x'), ('y'); +---- +stmt 0 ok +stmt 22 err 1 -1 59 no such table: t1 +==== 6.1.dup1 + + SELECT * FROM t1, (VALUES(1), (2)) +---- +stmt 0 err 1 -1 38 no such table: t1 +==== 6.2 + + VALUES(CAST(44 AS REAL)),(55); +---- +stmt 0 ok +==== 7.1 + + WITH x1(a, b) AS ( + VALUES(1, 2), ('a', 'b') + ) + SELECT * FROM x1 one, x1 two +---- +stmt 0 ok +==== 8.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('d'), (NULL), (123) +---- +stmt 0 ok +stmt 22 err 1 -1 67 no such table: t1 +==== 9.1 + + VALUES(456), (123), (NULL) UNION ALL SELECT 122 ORDER BY 1 +---- +stmt 0 ok +==== 9.2 + + VALUES (1, 2), (3, 4), ( + ( SELECT column1 FROM ( VALUES (5, 6), (7, 8) ) ), + ( SELECT max(column2) FROM ( VALUES (5, 1), (7, 6) ) ) + ) +---- +stmt 0 ok +==== 10.1 + + CREATE TABLE a2(a, b, c DEFAULT 'xyz'); +---- +stmt 0 ok +==== 10.2 + + INSERT INTO a2(a) VALUES(3),(4); +---- +stmt 0 err 1 -1 35 no such table: a2 +==== 11.0 + + CREATE VIRTUAL TABLE ft USING fts3(x); +---- +stmt 0 ok +==== 11.1 + + INSERT INTO ft VALUES('one'), ('two'); +---- +stmt 0 err 1 -1 43 no such table: ft +==== 12.0 + + CREATE TABLE t1(a, b); +---- +stmt 0 ok +==== 12.1 + + INSERT INTO t1 SELECT 1, 2 UNION ALL VALUES(3, 4), (5, 6); +---- +stmt 0 err 1 -1 61 no such table: t1 +==== 12.2 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 13.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('xyz'); + + SELECT ( + VALUES( (max(substr('abc', 1, 1), x)) ), + (123), + (456) + ) + FROM t1; +---- +stmt 0 ok +stmt 22 err 1 -1 54 no such table: t1 +stmt 54 err 1 -1 157 no such table: t1 +==== 13.1 + + VALUES(300), (zeroblob(300) OVER win); +---- +stmt 0 err 1 17 41 zeroblob() may not be used as a window function +==== 14.1 + + PRAGMA encoding = utf16; + CREATE TABLE t1(a, b); +---- +stmt 0 ok +stmt 27 ok +==== 14.2 + + INSERT INTO t1 VALUES + (17, 'craft'), + (16, 'urtlek' IN(1,2,3)); +---- +stmt 0 err 1 -1 73 no such table: t1 +==== 15.2 + + CREATE TABLE t1(a,b); +---- +stmt 0 ok +==== 15.6 + + CREATE TABLE t2(x,y); +---- +stmt 0 ok +==== 16.1 + + CREATE TABLE t1(a,b); +---- +stmt 0 ok +==== 16.2 + + BEGIN; + INSERT INTO t1 VALUES(1,2),(3,4),(5,6), + (7,row_number()OVER()), + (9,10), (11,12), (13,14), (15,16); + SELECT * FROM t1 ORDER BY a, b; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 154 no such table: t1 +stmt 154 ok +==== 16.4 + + BEGIN; + INSERT INTO t1 VALUES + (1,row_number()OVER()), + (2,3), (4,5), (6,7); + SELECT * FROM t1 ORDER BY a, b; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 122 no such table: t1 +stmt 122 ok +==== 16.6 + + BEGIN; + INSERT INTO t1 VALUES + (1,2),(3,4), + (5,row_number()OVER()), + (7,8),(9,10),(11,12), + (13,row_number()OVER()), + (15,16),(17,18),(19,20),(21,22); + SELECT * FROM t1 ORDER BY a, b; + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 175 no such table: t1 +stmt 175 err 1 -1 209 no such table: t1 +stmt 209 ok +==== 17.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1 AS SELECT * FROM (VALUES(1,2), (3,4 IN (1,2,3))); +---- +stmt 0 ok +stmt 27 ok +==== 17.2 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 18.1 + + DROP TABLE t1; + CREATE TABLE t1(x INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(RAISE(IGNORE)),(0); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 59 err 1 -1 103 no such table: t1 +==== 18.2 + + DROP TABLE t1; + CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z); + CREATE TRIGGER r2 AFTER INSERT ON t1 BEGIN + INSERT INTO t1(y) VALUES(RAISE(IGNORE)),(0); + END; + INSERT INTO t1 VALUES(1,2,3); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 65 err 1 -1 110 no such table: main.t1 +stmt 166 err 1 -1 198 no such table: t1 +stmt 198 err 1 -1 218 no such table: t1 +==== 18.3.1 + + DROP TABLE t1; + CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z); + CREATE TRIGGER r2 AFTER INSERT ON t1 BEGIN + INSERT INTO t1(y) VALUES(RAISE(ABORT,'error 18.3')),(0); + END; + INSERT INTO t1 VALUES(1,2,3); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 65 err 1 -1 110 no such table: main.t1 +stmt 178 err 1 -1 210 no such table: t1 +==== 18.3.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 18.4.1 + + DROP TABLE t1; + CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z); + CREATE TRIGGER r2 AFTER INSERT ON t1 BEGIN + INSERT INTO t1(y) VALUES(1),(RAISE(ABORT,'error 18.4')),(0); + END; + INSERT INTO t1 VALUES(1,2,3); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 65 err 1 -1 110 no such table: main.t1 +stmt 182 err 1 -1 214 no such table: t1 +==== 18.4.2 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 18.5.1 + + DROP TABLE t1; + CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z); + CREATE TRIGGER r2 AFTER INSERT ON t1 BEGIN + INSERT INTO t1(y) VALUES(1), + (CASE WHEN new.z>7 THEN RAISE(ABORT,'error 18.5') ELSE 2 END); + END; + INSERT INTO t1 VALUES(1,2,3); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 65 err 1 -1 110 no such table: main.t1 +stmt 220 err 1 -1 252 no such table: t1 +stmt 252 err 1 -1 272 no such table: t1 +==== 18.5.2 + + DELETE FROM t1; + INSERT INTO t1 VALUES(1,2,13); +---- +stmt 0 err 1 -1 18 no such table: t1 +stmt 18 err 1 -1 51 no such table: t1 +==== 18.5.3 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 19.1 + + CREATE TABLE t1(a INT, b INT); + INSERT INTO t1 VALUES(11,22); + SELECT * FROM t1 LEFT JOIN (VALUES(33,44),(55,66)) AS t2 ON a=b; +---- +stmt 0 ok +stmt 33 err 1 -1 65 no such table: t1 +stmt 65 err 1 -1 132 no such table: t1 +==== 19.2 + + SELECT * FROM (VALUES(33,44),(55,66)) AS t2 RIGHT JOIN t1 ON a=b; +---- +stmt 0 err 1 -1 68 no such table: t1 +==== 19.3 + + SELECT *, '|' FROM t1 FULL JOIN (VALUES(33,44),(55,66)) AS t2 ON a=b + ORDER BY +column1 +---- +stmt 0 err 1 -1 92 no such table: t1 +==== 19.4 + + SELECT *, '|' FROM (VALUES(33,44),(55,66)) AS t2 FULL JOIN t1 ON a=b + ORDER BY +column1 +---- +stmt 0 err 1 -1 92 no such table: t1 +==== 19.5 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + DROP TABLE IF EXISTS t3; + CREATE TABLE t1(a,b); INSERT INTO t1 VALUES(1,2); + CREATE TABLE t2(column1,column2); INSERT INTO t2 VALUES(11,22),(33,44); + CREATE TABLE t3(d,e); INSERT INTO t3 VALUES(3,4); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 ok +stmt 105 err 1 -1 146 no such table: t1 +stmt 146 ok +stmt 182 err 1 -1 221 no such table: t2 +stmt 221 ok +stmt 245 err 1 -1 286 no such table: t3 +==== 19.6 + + -- output verify using PG 14.2 + SELECT * + FROM t1 CROSS JOIN t2 FULL JOIN t3 ON a=d + ORDER BY +d, +column1; +---- +stmt 0 err 1 -1 116 no such table: t1 +==== 19.7 + + SELECT * + FROM t1 CROSS JOIN (VALUES(11,22),(33,44)) FULL JOIN t3 ON a=d + ORDER BY +d, +column1; +---- +stmt 0 err 1 -1 104 no such table: t1 +==== 19.8 + + -- output verified using PG 14.2 + SELECT * + FROM t1 CROSS JOIN t2 FULL JOIN t3 ON a=d + WHERE column1 IS NULL; +---- +stmt 0 err 1 -1 118 no such table: t1 +==== 19.9 + + SELECT * + FROM t1 CROSS JOIN (VALUES(11,22),(33,44)) FULL JOIN t3 ON a=d + WHERE column1 IS NULL; +---- +stmt 0 err 1 -1 104 no such table: t1 diff --git a/parser/testdata/valuesfault.metadata.json b/parser/testdata/valuesfault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/valuesfault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/valuesfault.test b/parser/testdata/valuesfault.test new file mode 100644 index 0000000..2e2ac86 --- /dev/null +++ b/parser/testdata/valuesfault.test @@ -0,0 +1,5 @@ +==== 1.0 + + CREATE TABLE x1(a, b, c); +---- +stmt 0 ok diff --git a/parser/testdata/view.metadata.json b/parser/testdata/view.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/view.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/view.test b/parser/testdata/view.test new file mode 100644 index 0000000..5520247 --- /dev/null +++ b/parser/testdata/view.test @@ -0,0 +1,674 @@ +==== view-1.0 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t1 VALUES(4,5,6); + INSERT INTO t1 VALUES(7,8,9); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 28 err 1 -1 62 no such table: t1 +stmt 62 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 130 no such table: t1 +stmt 130 err 1 -1 152 no such table: t1 +==== view-1.1 + + BEGIN; + CREATE VIEW IF NOT EXISTS v1 AS SELECT a,b FROM t1; + SELECT * FROM v1 ORDER BY a; +---- +stmt 0 ok +stmt 11 ok +stmt 67 err 1 -1 100 no such table: v1 +==== view-1.1.101 + + CREATE TEMP VIEW v1temp AS SELECT a, b FROM t1; + SELECT * FROM v1temp ORDER BY a; +---- +stmt 0 ok +stmt 50 err 1 -1 85 no such table: v1temp +==== view-1.1.120 + + SELECT name, type FROM pragma_table_list('v1'); +---- +stmt 0 ok +==== view-1.2 + + ROLLBACK; + SELECT * FROM v1 ORDER BY a; +---- +stmt 0 ok +stmt 14 err 1 -1 47 no such table: v1 +==== view-1.3 + + CREATE VIEW v1 AS SELECT a,b FROM t1; + SELECT * FROM v1 ORDER BY a; +---- +stmt 0 ok +stmt 42 err 1 -1 75 no such table: v1 +==== view-1.4 + + DROP VIEW IF EXISTS v1; + SELECT * FROM v1 ORDER BY a; +---- +stmt 0 ok +stmt 28 err 1 -1 61 no such table: v1 +==== view-1.5 + + CREATE VIEW v1 AS SELECT a,b FROM t1; + SELECT * FROM v1 ORDER BY a; +---- +stmt 0 ok +stmt 42 err 1 -1 75 no such table: v1 +==== view-1.6 + + DROP TABLE t1; + SELECT * FROM v1 ORDER BY a; +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 err 1 -1 52 no such table: v1 +==== view-1.7 + + CREATE TABLE t1(x,a,b,c); + INSERT INTO t1 VALUES(1,2,3,4); + INSERT INTO t1 VALUES(4,5,6,7); + INSERT INTO t1 VALUES(7,8,9,10); + SELECT * FROM v1 ORDER BY a; +---- +stmt 0 ok +stmt 30 err 1 -1 66 no such table: t1 +stmt 66 err 1 -1 102 no such table: t1 +stmt 102 err 1 -1 139 no such table: t1 +stmt 139 err 1 -1 172 no such table: v1 +==== view-1.10 + + CREATE TABLE t9(x INTEGER); + CREATE VIEW v9a AS SELECT x FROM t9; + CREATE VIEW v9b AS SELECT * FROM t9; + CREATE VIEW v9c(x) AS SELECT x FROM t9; + CREATE VIEW v9d(x) AS SELECT * FROM t9; +---- +stmt 0 ok +stmt 30 ok +stmt 69 ok +stmt 108 ok +stmt 150 ok +==== view-1.11 + + PRAGMA table_info(v9a); +---- +stmt 0 ok +==== view-1.12 + + PRAGMA table_info(v9b); +---- +stmt 0 ok +==== view-1.13 + + PRAGMA table_info(v9c); +---- +stmt 0 ok +==== view-1.14 + + PRAGMA table_info(v9d); +---- +stmt 0 ok +==== view-2.2 + + INSERT INTO v2 VALUES(1,2,3,4); +---- +stmt 0 err 1 -1 36 no such table: v2 +==== view-2.3 + + UPDATE v2 SET a=10 WHERE a=5; +---- +stmt 0 err 1 -1 34 no such table: v2 +==== view-2.4 + + DELETE FROM v2; +---- +stmt 0 err 1 -1 20 no such table: v2 +==== view-2.5 + + INSERT INTO t1 VALUES(11,12,13,14); + SELECT * FROM v2 ORDER BY x; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 73 no such table: v2 +==== view-2.6 + + SELECT x FROM v2 WHERE a>10 +---- +stmt 0 err 1 -1 33 no such table: v2 +==== view-3.3.4 + + CREATE VIEW v1err(x,y DESC,z) AS SELECT a, b+c, c-b FROM t1; +---- +stmt 0 err 1 -1 30 syntax error after column name "y" +==== view-3.3.5 + + DROP VIEW IF EXISTS v1err; + CREATE VIEW v1err(x,y) AS SELECT a, b+c, c-b FROM t1; + SELECT * FROM v1err; +---- +stmt 0 ok +stmt 29 ok +stmt 85 err 1 -1 108 no such table: v1err +==== view-3.3.6 + + DROP VIEW IF EXISTS v1err; + CREATE VIEW v1err(w,x,y,z) AS SELECT a, b+c, c-b FROM t1; + SELECT * FROM v1err; +---- +stmt 0 ok +stmt 29 ok +stmt 89 err 1 -1 112 no such table: v1err +==== view-4.1 + + DROP VIEW t1; +---- +stmt 0 err 1 -1 18 no such view: t1 +==== view-4.2 + + SELECT 1 FROM t1 LIMIT 1; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== view-4.3 + + DROP TABLE v1; +---- +stmt 0 err 1 -1 19 no such table: v1 +==== view-4.4 + + SELECT 1 FROM v1 LIMIT 1; +---- +stmt 0 err 1 -1 31 no such table: v1 +==== view-4.5 + + CREATE INDEX i1v1 ON v1(xyz); +---- +stmt 0 err 1 -1 34 no such table: main.v1 +==== view-5.1 + + CREATE TABLE t2(y,a); + INSERT INTO t2 VALUES(22,2); + INSERT INTO t2 VALUES(33,3); + INSERT INTO t2 VALUES(44,4); + INSERT INTO t2 VALUES(55,5); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 26 err 1 -1 59 no such table: t2 +stmt 59 err 1 -1 92 no such table: t2 +stmt 92 err 1 -1 125 no such table: t2 +stmt 125 err 1 -1 158 no such table: t2 +stmt 158 err 1 -1 180 no such table: t2 +==== view-5.2 + + CREATE VIEW v5 AS + SELECT t1.x AS v, t2.y AS w FROM t1 JOIN t2 USING(a); + SELECT * FROM v5; +---- +stmt 0 ok +stmt 82 err 1 -1 104 no such table: v5 +==== view-5.4 + + SELECT * FROM v5 AS a, t2 AS b WHERE a.w=b.y; +---- +stmt 0 err 1 -1 50 no such table: v5 +==== view-5.6 + + SELECT * FROM t2 AS b, v5 AS a WHERE a.w=b.y; +---- +stmt 0 err 1 -1 50 no such table: t2 +==== view-5.8 + + SELECT * FROM t1 AS a, v5 AS b, t2 AS c WHERE a.x=b.v AND b.w=c.y; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== view-6.1 + + SELECT min(x), min(a), min(b), min(c), min(a+b+c) FROM v2; +---- +stmt 0 err 1 -1 63 no such table: v2 +==== view-6.2 + + SELECT max(x), max(a), max(b), max(c), max(a+b+c) FROM v2; +---- +stmt 0 err 1 -1 63 no such table: v2 +==== view-7.1 + + CREATE TABLE test1(id integer primary key, a); + CREATE TABLE test2(id integer, b); + INSERT INTO test1 VALUES(1,2); + INSERT INTO test2 VALUES(1,3); + CREATE VIEW test AS + SELECT test1.id, a, b + FROM test1 JOIN test2 ON test2.id=test1.id; + SELECT * FROM test; +---- +stmt 0 ok +stmt 51 ok +stmt 90 err 1 -1 125 no such table: test1 +stmt 125 err 1 -1 160 no such table: test2 +stmt 160 ok +stmt 262 err 1 -1 286 no such table: test +==== view-7.3 + + DROP VIEW test; + CREATE VIEW test AS + SELECT test1.id, a, b + FROM test1 JOIN test2 USING(id); + SELECT * FROM test; +---- +stmt 0 err 1 -1 20 no such view: test +stmt 20 ok +stmt 111 err 1 -1 135 no such table: test +==== view-7.5 + + DROP VIEW test; + CREATE VIEW test AS + SELECT test1.id, a, b + FROM test1 NATURAL JOIN test2; + SELECT * FROM test; +---- +stmt 0 err 1 -1 20 no such view: test +stmt 20 ok +stmt 109 err 1 -1 133 no such table: test +==== view-8.1 + + CREATE VIEW v6 AS SELECT pqr, xyz FROM v1; + SELECT * FROM v6 ORDER BY xyz; +---- +stmt 0 ok +stmt 47 err 1 -1 82 no such table: v6 +==== view-8.3 + + CREATE VIEW v7(a) AS SELECT pqr+xyz FROM v6; + SELECT * FROM v7 ORDER BY a; +---- +stmt 0 ok +stmt 49 err 1 -1 82 no such table: v7 +==== view-8.4 + + CREATE VIEW v8 AS SELECT max(cnt) AS mx FROM + (SELECT a%2 AS eo, count(*) AS cnt FROM t1 GROUP BY eo); + SELECT * FROM v8; +---- +stmt 0 ok +stmt 116 err 1 -1 140 no such table: v8 +==== view-8.5 + + SELECT mx+10, mx*2 FROM v8; +---- +stmt 0 err 1 -1 34 no such table: v8 +==== view-8.6 + + SELECT mx+10, pqr FROM v6, v8 WHERE xyz=2; +---- +stmt 0 err 1 -1 49 no such table: v6 +==== view-8.7 + + SELECT mx+10, pqr FROM v6, v8 WHERE xyz>2; +---- +stmt 0 err 1 -1 49 no such table: v6 +==== view-9.1 + + INSERT INTO t2 SELECT * FROM t2 WHERE a<5; + INSERT INTO t2 SELECT * FROM t2 WHERE a<4; + INSERT INTO t2 SELECT * FROM t2 WHERE a<3; + SELECT DISTINCT count(*) FROM t2 GROUP BY a ORDER BY 1; +---- +stmt 0 err 1 -1 47 no such table: t2 +stmt 47 err 1 -1 94 no such table: t2 +stmt 94 err 1 -1 141 no such table: t2 +stmt 141 err 1 -1 201 no such table: t2 +==== view-9.2 + + SELECT DISTINCT count(*) FROM t2 GROUP BY a ORDER BY 1 LIMIT 3; +---- +stmt 0 err 1 -1 68 no such table: t2 +==== view-9.3 + + CREATE VIEW v9 AS + SELECT DISTINCT count(*) FROM t2 GROUP BY a ORDER BY 1 LIMIT 3; + SELECT * FROM v9; +---- +stmt 0 ok +stmt 94 err 1 -1 116 no such table: v9 +==== view-9.4 + + SELECT * FROM v9 ORDER BY 1 DESC; +---- +stmt 0 err 1 -1 38 no such table: v9 +==== view-9.5 + + CREATE VIEW v10 AS + SELECT DISTINCT a, count(*) FROM t2 GROUP BY a ORDER BY 2 LIMIT 3; + SELECT * FROM v10; +---- +stmt 0 ok +stmt 98 err 1 -1 121 no such table: v10 +==== view-9.6 + + SELECT * FROM v10 ORDER BY 1; +---- +stmt 0 err 1 -1 34 no such table: v10 +==== view-10.2 + + SELECT * FROM v_t3_b; +---- +stmt 0 err 1 -1 26 no such table: v_t3_b +==== view-11.1 + + CREATE TABLE t4(a COLLATE NOCASE); + INSERT INTO t4 VALUES('This'); + INSERT INTO t4 VALUES('this'); + INSERT INTO t4 VALUES('THIS'); + SELECT * FROM t4 WHERE a = 'THIS'; +---- +stmt 0 ok +stmt 39 err 1 -1 74 no such table: t4 +stmt 74 err 1 -1 109 no such table: t4 +stmt 109 err 1 -1 144 no such table: t4 +stmt 144 err 1 -1 183 no such table: t4 +==== view-11.2 + + SELECT * FROM (SELECT * FROM t4) WHERE a = 'THIS'; +---- +stmt 0 err 1 -1 57 no such table: t4 +==== view-11.3 + + CREATE VIEW v11 AS SELECT * FROM t4; + SELECT * FROM v11 WHERE a = 'THIS'; +---- +stmt 0 ok +stmt 41 err 1 -1 81 no such table: v11 +==== view-12.1 + + CREATE VIEW v12 AS SELECT a FROM t1 WHERE b=? +---- +stmt 0 err 1 -1 51 parameters are not allowed in views +==== view-12.2 + + CREATE VIEW v12(x) AS SELECT a FROM t1 WHERE b=? +---- +stmt 0 err 1 -1 54 parameters are not allowed in views +==== view-14.1 + + CREATE TEMP VIEW t1 AS SELECT a,b FROM t1; + SELECT * FROM temp.t1; +---- +stmt 0 ok +stmt 47 err 1 -1 74 no such table: temp.t1 +==== view-14.2 + + DROP VIEW IF EXISTS temp.t1; + CREATE TEMP VIEW t1(a,b) AS SELECT a,b FROM t1; + SELECT * FROM temp.t1; +---- +stmt 0 ok +stmt 33 ok +stmt 85 err 1 -1 112 no such table: temp.t1 +==== view-16.1 + + CREATE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1; +---- +stmt 0 ok +==== view-16.2 + + SELECT sql FROM sqlite_master WHERE name='v1' +---- +stmt 0 ok +==== view-16.3 + + DROP VIEW IF EXISTS nosuchview +---- +stmt 0 ok +==== view-17.1 + + DROP VIEW nosuchview +---- +stmt 0 err 1 -1 26 no such view: nosuchview +==== view-17.2 + + DROP VIEW main.nosuchview +---- +stmt 0 err 1 -1 31 no such view: main.nosuchview +==== view-18.1 + + DROP VIEW t1; + DROP TABLE t1; + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + + CREATE VIEW vv1 AS SELECT * FROM t1; + CREATE VIEW vv2 AS SELECT * FROM vv1; + CREATE VIEW vv3 AS SELECT * FROM vv2; + CREATE VIEW vv4 AS SELECT * FROM vv3; + CREATE VIEW vv5 AS SELECT * FROM vv4; + + SELECT * FROM vv5; +---- +stmt 0 err 1 -1 18 no such view: t1 +stmt 18 err 1 -1 37 no such table: t1 +stmt 37 ok +stmt 67 err 1 -1 103 no such table: t1 +stmt 103 err 1 -1 139 no such table: t1 +stmt 139 ok +stmt 181 ok +stmt 223 ok +stmt 265 ok +stmt 307 ok +stmt 349 err 1 -1 373 no such table: vv5 +==== view-20.1 + + DROP TABLE IF EXISTS t1; + DROP VIEW IF EXISTS v1; + CREATE TABLE t1(c1); + CREATE VIEW v1 AS SELECT c1 FROM (SELECT t1.c1 FROM t1); +---- +stmt 0 ok +stmt 29 ok +stmt 57 ok +stmt 82 ok +==== view-22.1 + + CREATE VIEW x1 AS SELECT 123 AS '', 234 AS '', 345 AS ''; + SELECT * FROM x1; +---- +stmt 0 ok +stmt 60 err 1 -1 80 no such table: x1 +==== view-26.0 + + CREATE TABLE t16(a, b, c UNIQUE); + INSERT INTO t16 VALUES(1, 1, 1); + INSERT INTO t16 VALUES(2, 2, 2); + INSERT INTO t16 VALUES(3, 3, 3); + CREATE VIEW v16 AS SELECT max(a) AS mx, min(b) AS mn FROM t16 GROUP BY c; + + SELECT * FROM v16 AS one, v16 AS two WHERE one.mx=1; +---- +stmt 0 ok +stmt 36 err 1 -1 71 no such table: t16 +stmt 71 err 1 -1 106 no such table: t16 +stmt 106 err 1 -1 141 no such table: t16 +stmt 141 ok +stmt 217 err 1 -1 273 no such table: v16 +==== view-26.1 + + WITH v17(x,y) AS (SELECT max(a), min(b) FROM t16 GROUP BY c) + SELECT * FROM v17 AS one, v17 AS two WHERE one.x=1; +---- +stmt 0 err 1 -1 117 no such table: t16 +==== view-27.0 + + CREATE TABLE t0(c0 TEXT, c1); + INSERT INTO t0(c0, c1) VALUES (-1, 0); + CREATE VIEW v0(c0, c1) AS SELECT t0.c0, AVG(t0.c1) FROM t0; +---- +stmt 0 ok +stmt 32 err 1 -1 73 no such table: t0 +stmt 73 ok +==== view-27.1 + + SELECT c0, typeof(c0), c1, typeof(c1) FROM v0; +---- +stmt 0 err 1 -1 49 no such table: v0 +==== view-27.2 + SELECT c01 +---- +stmt 0 err 1 -1 61 no such table: t1 +==== vtab6-2.6 + + SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d WHERE t2.b IS NULL OR t2.b>1 +---- +stmt 0 err 1 -1 77 no such table: t1 +==== vtab6-3.1 + + SELECT * FROM t1 NATURAL JOIN t2 ON t1.a=t2.b; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== vtab6-3.2 + + SELECT * FROM t1 NATURAL JOIN t2 USING(b); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== vtab6-3.3 + + SELECT * FROM t1 JOIN t2 ON t1.a=t2.b USING(b); +---- +stmt 0 err 1 43 48 near "USING": syntax error +==== vtab6-3.4 + + SELECT * FROM t1 JOIN t2 USING(a); +---- +stmt 0 err 1 -1 39 no such table: t1 +==== vtab6-3.5 + SELECT * FROM t1 USING(a) +---- +stmt 0 err 1 -1 27 a JOIN clause is required before USING +==== vtab6-3.6 + + SELECT * FROM t1 JOIN t2 ON t3.a=t2.b; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== vtab6-3.7 + + SELECT * FROM t1 INNER OUTER JOIN t2; +---- +stmt 0 err 1 22 41 unknown join type: INNER OUTER +==== vtab6-3.7.dup1 + + SELECT * FROM t1 LEFT BOGUS JOIN t2; +---- +stmt 0 err 1 22 40 unknown join type: LEFT BOGUS +==== vtab6-4.2 + + SELECT * FROM t6, t5 WHERE t6.at5.a; +---- +stmt 0 err 1 -1 42 no such table: t6 +==== vtab6-4.4 + + UPDATE t6 SET a='xyz'; + SELECT * FROM t6 NATURAL JOIN t5; +---- +stmt 0 err 1 -1 27 no such table: t6 +stmt 27 err 1 -1 65 no such table: t6 +==== vtab6-4.6 + + SELECT * FROM t6, t5 WHERE t6.at5.a; +---- +stmt 0 err 1 -1 42 no such table: t6 +==== vtab6-4.8 + + UPDATE t6 SET a=1; + SELECT * FROM t6 NATURAL JOIN t5; +---- +stmt 0 err 1 -1 23 no such table: t6 +stmt 23 err 1 -1 61 no such table: t6 +==== vtab6-4.9 + + SELECT * FROM t6, t5 WHERE t6.at5.a; +---- +stmt 0 err 1 -1 42 no such table: t6 +==== vtab6-8.1 + + BEGIN; + INSERT INTO t9 VALUES(1,11); + INSERT INTO t9 VALUES(2,22); + INSERT INTO t10 VALUES(1,2); + INSERT INTO t10 VALUES(3,3); + INSERT INTO t11 VALUES(2,111); + INSERT INTO t11 VALUES(3,333); + CREATE VIEW v10_11 AS SELECT x, q FROM t10, t11 WHERE t10.y=t11.p; + COMMIT; + SELECT * FROM t9 LEFT JOIN v10_11 ON( a=x ); +---- +stmt 0 ok +stmt 11 err 1 -1 44 no such table: t9 +stmt 44 err 1 -1 77 no such table: t9 +stmt 77 err 1 -1 110 no such table: t10 +stmt 110 err 1 -1 143 no such table: t10 +stmt 143 err 1 -1 182 no such table: t11 +stmt 182 err 1 -1 217 no such table: t11 +stmt 217 ok +stmt 292 ok +stmt 304 err 1 -1 353 no such table: t9 +==== vtab6-8.2 + + SELECT * FROM t9 LEFT JOIN (SELECT x, q FROM t10, t11 WHERE t10.y=t11.p) + ON( a=x); +---- +stmt 0 err 1 -1 100 no such table: t9 +==== vtab6-8.3 + + SELECT * FROM v10_11 LEFT JOIN t9 ON( a=x ); +---- +stmt 0 err 1 -1 49 no such table: v10_11 +==== vtab6-9.1 + + BEGIN; + INSERT INTO t12 VALUES(1,11); + INSERT INTO t12 VALUES(2,22); + INSERT INTO t13 VALUES(22,222); + COMMIT; +---- +stmt 0 ok +stmt 11 err 1 -1 45 no such table: t12 +stmt 45 err 1 -1 79 no such table: t12 +stmt 79 err 1 -1 115 no such table: t13 +stmt 115 ok +==== vtab6-9.1.1 + + SELECT * FROM t12 NATURAL LEFT JOIN t13 + EXCEPT + SELECT * FROM t12 NATURAL LEFT JOIN (SELECT * FROM t13 WHERE b>0); +---- +stmt 0 err 1 -1 132 no such table: t12 +==== vtab6-9.2 + + CREATE VIEW v13 AS SELECT * FROM t13 WHERE b>0; + SELECT * FROM t12 NATURAL LEFT JOIN t13 + EXCEPT + SELECT * FROM t12 NATURAL LEFT JOIN v13; +---- +stmt 0 ok +stmt 54 err 1 -1 164 no such table: t12 +==== vtab6-10.1 + + CREATE INDEX i22 ON real_t22(q); + SELECT a FROM t21 LEFT JOIN t22 ON b=p WHERE q= + (SELECT max(m.q) FROM t22 m JOIN t21 n ON n.b=m.p WHERE n.c=1); +---- +stmt 0 err 1 -1 37 no such table: main.real_t22 +stmt 37 err 1 -1 160 no such table: t21 +==== vtab6-11.1.0 + + CREATE TABLE ab_r(a, b); + CREATE TABLE bc_r(b, c); + + CREATE VIRTUAL TABLE ab USING echo(ab_r); + CREATE VIRTUAL TABLE bc USING echo(bc_r); + + INSERT INTO ab VALUES(1, 2); + INSERT INTO bc VALUES(2, 3); +---- +stmt 0 ok +stmt 29 ok +stmt 58 ok +stmt 105 ok +stmt 152 err 1 -1 187 no such table: ab +stmt 187 err 1 -1 220 no such table: bc +==== vtab6-11.1.1 + + SELECT a, b, c FROM ab NATURAL JOIN bc; +---- +stmt 0 err 1 -1 44 no such table: ab +==== vtab6-11.1.2 + + SELECT a, b, c FROM bc NATURAL JOIN ab; +---- +stmt 0 err 1 -1 44 no such table: bc +==== vtab6-11.1.3 + + SELECT a, b, c FROM ab NATURAL JOIN bc; +---- +stmt 0 err 1 -1 44 no such table: ab +==== vtab6-11.1.4 + + SELECT a, b, c FROM bc NATURAL JOIN ab; +---- +stmt 0 err 1 -1 44 no such table: bc +==== vtab6-11.2.0 + + CREATE INDEX ab_i ON ab_r(b); + CREATE INDEX bc_i ON bc_r(b); +---- +stmt 0 err 1 -1 34 no such table: main.ab_r +stmt 34 err 1 -1 68 no such table: main.bc_r +==== vtab6-11.2.1 + + SELECT a, b, c FROM ab NATURAL JOIN bc; +---- +stmt 0 err 1 -1 44 no such table: ab +==== vtab6-11.2.2 + + SELECT a, b, c FROM bc NATURAL JOIN ab; +---- +stmt 0 err 1 -1 44 no such table: bc +==== vtab6-11.2.3 + + SELECT a, b, c FROM ab NATURAL JOIN bc; +---- +stmt 0 err 1 -1 44 no such table: ab +==== vtab6-11.2.4 + + SELECT a, b, c FROM bc NATURAL JOIN ab; +---- +stmt 0 err 1 -1 44 no such table: bc +==== vtab6-11.3.1 + + SELECT a, b, c FROM ab NATURAL JOIN bc; +---- +stmt 0 err 1 -1 44 no such table: ab +==== vtab6-11.3.2 + + SELECT a, b, c FROM bc NATURAL JOIN ab; +---- +stmt 0 err 1 -1 44 no such table: bc +==== vtab6-11.3.3 + + SELECT a, b, c FROM ab NATURAL JOIN bc; +---- +stmt 0 err 1 -1 44 no such table: ab +==== vtab6-11.3.4 + + SELECT a, b, c FROM bc NATURAL JOIN ab; +---- +stmt 0 err 1 -1 44 no such table: bc +==== vtab6-11.4.1 + + SELECT a, b, c FROM ab NATURAL JOIN bc; +---- +stmt 0 err 1 -1 44 no such table: ab +==== vtab6-11.4.2 + + SELECT a, b, c FROM bc NATURAL JOIN ab; +---- +stmt 0 err 1 -1 44 no such table: bc diff --git a/parser/testdata/vtab7.metadata.json b/parser/testdata/vtab7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtab7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtab7.test b/parser/testdata/vtab7.test new file mode 100644 index 0000000..d1a0067 --- /dev/null +++ b/parser/testdata/vtab7.test @@ -0,0 +1,21 @@ +==== vtab7-1.1 + + CREATE TABLE abc(a, b, c); + CREATE VIRTUAL TABLE abc2 USING echo(abc); +---- +stmt 0 ok +stmt 31 ok +==== vtab7-2.3 + + INSERT INTO abc2 VALUES(4, 5, 6); + SELECT * FROM log; +---- +stmt 0 err 1 -1 38 no such table: abc2 +stmt 38 err 1 -1 61 no such table: log +==== vtab7-2.4 + + INSERT INTO abc2 VALUES(4, 5, 6); + SELECT * FROM log; +---- +stmt 0 err 1 -1 38 no such table: abc2 +stmt 38 err 1 -1 61 no such table: log diff --git a/parser/testdata/vtab8.metadata.json b/parser/testdata/vtab8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtab8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtab8.test b/parser/testdata/vtab8.test new file mode 100644 index 0000000..abb2765 --- /dev/null +++ b/parser/testdata/vtab8.test @@ -0,0 +1,58 @@ +==== vtab1.2244-1 + + CREATE TABLE t2244(a, b); + CREATE VIRTUAL TABLE t2244e USING echo(t2244); + INSERT INTO t2244 VALUES('AA', 'BB'); + INSERT INTO t2244 VALUES('CC', 'DD'); + SELECT rowid, * FROM t2244e; +---- +stmt 0 ok +stmt 30 ok +stmt 81 err 1 -1 123 no such table: t2244 +stmt 123 err 1 -1 165 no such table: t2244 +stmt 165 err 1 -1 198 no such table: t2244e +==== vtab1.2244-2 + + SELECT * FROM t2244e WHERE rowid = 10; +---- +stmt 0 err 1 -1 43 no such table: t2244e +==== vtab1.2244-3 + + UPDATE t2244e SET a = 'hello world' WHERE 0; + SELECT rowid, * FROM t2244e; +---- +stmt 0 err 1 -1 49 no such table: t2244e +stmt 49 err 1 -1 82 no such table: t2244e +==== vtab1-2250-2 + + CREATE TABLE t2250(a, b); + INSERT INTO t2250 VALUES(10, 20); + CREATE VIRTUAL TABLE t2250e USING echo(t2250); + select max(rowid) from t2250; + select max(rowid) from t2250e; +---- +stmt 0 ok +stmt 30 err 1 -1 68 no such table: t2250 +stmt 68 ok +stmt 119 err 1 -1 153 no such table: t2250 +stmt 153 err 1 -1 188 no such table: t2250e +==== vtab1.2260-1 + + CREATE TABLE t2260a_real(a, b); + CREATE TABLE t2260b_real(a, b); + + CREATE INDEX i2260 ON t2260a_real(a); + CREATE INDEX i2260x ON t2260b_real(a); + + CREATE VIRTUAL TABLE t2260a USING echo(t2260a_real); + CREATE VIRTUAL TABLE t2260b USING echo(t2260b_real); + + SELECT * FROM t2260a, t2260b WHERE t2260a.a = t2260b.a AND t2260a.a > 101; +---- +stmt 0 ok +stmt 36 ok +stmt 72 err 1 -1 115 no such table: main.t2260a_real +stmt 115 err 1 -1 158 no such table: main.t2260b_real +stmt 158 ok +stmt 216 ok +stmt 273 err 1 -1 353 no such table: t2260a diff --git a/parser/testdata/vtab9.metadata.json b/parser/testdata/vtab9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtab9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtab9.test b/parser/testdata/vtab9.test new file mode 100644 index 0000000..70e7f95 --- /dev/null +++ b/parser/testdata/vtab9.test @@ -0,0 +1,21 @@ +==== vtab9-1.2 + + CREATE TABLE t2(a,b,c); + CREATE VIRTUAL TABLE t3 USING echo(t2); + CREATE TABLE d1(a,b,c); + INSERT INTO d1 VALUES(1,2,3); + INSERT INTO d1 VALUES('a','b','c'); + INSERT INTO d1 VALUES(NULL,'x',123.456); + INSERT INTO d1 VALUES(x'6869',123456789,-12345); + INSERT INTO t3(a,b,c) SELECT * FROM d1; + SELECT rowid, * FROM t3; +---- +stmt 0 ok +stmt 28 ok +stmt 72 ok +stmt 100 err 1 -1 134 no such table: d1 +stmt 134 err 1 -1 174 no such table: d1 +stmt 174 err 1 -1 219 no such table: d1 +stmt 219 err 1 -1 272 no such table: d1 +stmt 272 err 1 -1 316 no such table: t3 +stmt 316 err 1 -1 345 no such table: t3 diff --git a/parser/testdata/vtabA.metadata.json b/parser/testdata/vtabA.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabA.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabA.test b/parser/testdata/vtabA.test new file mode 100644 index 0000000..6729471 --- /dev/null +++ b/parser/testdata/vtabA.test @@ -0,0 +1,54 @@ +==== vtabA-1.1 + CREATE TABLE t1(a, b HIDDEN VARCHAR, c INTEGER) +---- +stmt 0 ok +==== vtabA-1.2 + CREATE VIRTUAL TABLE t1e USING echo(t1) +---- +stmt 0 ok +==== vtabA-1.3 + PRAGMA table_info(t1e) +---- +stmt 0 ok +==== vtabA-1.4 + + INSERT INTO t1e VALUES('value a', 'value c'); +---- +stmt 0 err 1 -1 50 no such table: t1e +==== vtabA-1.5 + + SELECT a, b, c FROM t1e; +---- +stmt 0 err 1 -1 29 no such table: t1e +==== vtabA-1.6 + + SELECT * FROM t1e; +---- +stmt 0 err 1 -1 23 no such table: t1e +==== vtabA-1.7 + + DELETE FROM t1e; + INSERT INTO t1e SELECT 'abc','def'; +---- +stmt 0 err 1 -1 19 no such table: t1e +stmt 19 err 1 -1 57 no such table: t1e +==== vtabA-1.8 + + INSERT INTO t1e VALUES('ghi','jkl'),('mno','pqr'),('stu','vwx'); +---- +stmt 0 err 1 -1 67 no such table: t1e +==== vtabA-1.9 + + SELECT a,b,c, '|' FROM t1e ORDER BY 1; +---- +stmt 0 err 1 -1 41 no such table: t1e +==== vtabA-1.20 + + INSERT INTO t1e SELECT * FROM t1e; +---- +stmt 0 err 1 -1 39 no such table: t1e +==== vtabA-1.21 + + SELECT * FROM t1e ORDER BY 1; +---- +stmt 0 err 1 -1 34 no such table: t1e diff --git a/parser/testdata/vtabB.metadata.json b/parser/testdata/vtabB.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabB.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabB.test b/parser/testdata/vtabB.test new file mode 100644 index 0000000..33c5dba --- /dev/null +++ b/parser/testdata/vtabB.test @@ -0,0 +1,42 @@ +==== vtabB-2.1 + + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES(3); + CREATE TABLE t2(y); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(2); + CREATE VIRTUAL TABLE echo_t2 USING echo(t2); + SELECT * FROM t1 WHERE x IN (SELECT rowid FROM t2); +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 err 1 -1 60 no such table: t1 +stmt 60 ok +stmt 84 err 1 -1 114 no such table: t2 +stmt 114 err 1 -1 144 no such table: t2 +stmt 144 ok +stmt 193 err 1 -1 249 no such table: t1 +==== vtab8-2.2 + + SELECT rowid FROM echo_t2 +---- +stmt 0 err 1 -1 31 no such table: echo_t2 +==== vtabB-2.3 + + SELECT * FROM t1 WHERE x IN (SELECT rowid FROM t2); +---- +stmt 0 err 1 -1 56 no such table: t1 +==== vtabB-2.4 + + SELECT * FROM t1 WHERE x IN (SELECT rowid FROM echo_t2); +---- +stmt 0 err 1 -1 61 no such table: t1 +==== vtabB-2.5 + + SELECT * FROM t1 WHERE x IN (SELECT y FROM t2); +---- +stmt 0 err 1 -1 52 no such table: t1 +==== vtabB-2.6 + + SELECT * FROM t1 WHERE x IN (SELECT y FROM echo_t2); +---- +stmt 0 err 1 -1 57 no such table: t1 diff --git a/parser/testdata/vtabC.metadata.json b/parser/testdata/vtabC.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabC.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabC.test b/parser/testdata/vtabC.test new file mode 100644 index 0000000..b2df8a4 --- /dev/null +++ b/parser/testdata/vtabC.test @@ -0,0 +1,18 @@ +==== vtabC-generated +SELECT name FROM sqlite_master +---- +stmt 0 ok +==== vtabC-generated.dup1 + + INSERT INTO m VALUES(1000); + SELECT * FROM m; +---- +stmt 0 err 1 -1 34 no such table: m +stmt 34 err 1 -1 57 no such table: m +==== vtabC-generated.dup2 + + INSERT INTO m VALUES(9000000); + SELECT * FROM m; +---- +stmt 0 err 1 -1 37 no such table: m +stmt 37 err 1 -1 60 no such table: m diff --git a/parser/testdata/vtabD.metadata.json b/parser/testdata/vtabD.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabD.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabD.test b/parser/testdata/vtabD.test new file mode 100644 index 0000000..d76e2b9 --- /dev/null +++ b/parser/testdata/vtabD.test @@ -0,0 +1,35 @@ +==== vtabD-1.1 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); + CREATE VIRTUAL TABLE tv1 USING echo(t1); +---- +stmt 0 ok +stmt 27 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 87 no such table: main.t1 +stmt 87 ok +==== vtabD-1.3 + SELECT * FROM tv1 WHERE a = 1 OR b = 4 +---- +stmt 0 err 1 -1 40 no such table: tv1 +==== vtabD-1.4 + SELECT * FROM tv1 WHERE a = 1 OR b = 1 +---- +stmt 0 err 1 -1 40 no such table: tv1 +==== vtabD-1.5 + SELECT * FROM tv1 WHERE (a > 0 AND a < 5) OR (b > 15 AND b < 65) +---- +stmt 0 err 1 -1 66 no such table: tv1 +==== vtabD-1.6 + SELECT * FROM tv1 WHERE a < 500 OR b = 810000 +---- +stmt 0 err 1 -1 47 no such table: tv1 +==== vtabD-1.7 + SELECT * FROM tv1 WHERE a < 90000 OR b = 8100000000 +---- +stmt 0 err 1 -1 53 no such table: tv1 +==== vtabD-1.8 + SELECT * FROM tv1 WHERE a = 90001 OR b = 810000 +---- +stmt 0 err 1 -1 49 no such table: tv1 diff --git a/parser/testdata/vtabF.metadata.json b/parser/testdata/vtabF.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabF.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabF.test b/parser/testdata/vtabF.test new file mode 100644 index 0000000..233663d --- /dev/null +++ b/parser/testdata/vtabF.test @@ -0,0 +1,31 @@ +==== vtabF-1.1 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); + INSERT INTO t1 VALUES(10,110); + INSERT INTO t1 VALUES(11,111); + INSERT INTO t1 SELECT a+2, b+2 FROM t1; + INSERT INTO t1 SELECT null, b+4 FROM t1; + INSERT INTO t1 SELECT null, b+8 FROM t1; + INSERT INTO t1 SELECT null, b+16 FROM t1; + ANALYZE; + CREATE VIRTUAL TABLE tv1 USING echo(t1); + SELECT b FROM t1 WHERE a IS NOT NULL; +---- +stmt 0 ok +stmt 27 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 87 no such table: main.t1 +stmt 87 err 1 -1 122 no such table: t1 +stmt 122 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 201 no such table: t1 +stmt 201 err 1 -1 246 no such table: t1 +stmt 246 err 1 -1 291 no such table: t1 +stmt 291 err 1 -1 337 no such table: t1 +stmt 337 ok +stmt 350 ok +stmt 395 err 1 -1 437 no such table: t1 +==== vtabF-1.2 +SELECT b FROM tv1 WHERE a IS NOT NULL +---- +stmt 0 err 1 -1 38 no such table: tv1 diff --git a/parser/testdata/vtabH.metadata.json b/parser/testdata/vtabH.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabH.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabH.test b/parser/testdata/vtabH.test new file mode 100644 index 0000000..a121547 --- /dev/null +++ b/parser/testdata/vtabH.test @@ -0,0 +1,23 @@ +==== 1.0 + + CREATE TABLE t6(a, b TEXT); + CREATE INDEX i6 ON t6(b, a); + CREATE VIRTUAL TABLE e6 USING echo(t6); +---- +stmt 0 ok +stmt 30 err 1 -1 61 no such table: main.t6 +stmt 61 ok +==== 2.0 + + CREATE VIRTUAL TABLE vars USING tclvar; + SELECT name, arrayname, value FROM vars WHERE name = 'xyz'; +---- +stmt 0 ok +stmt 42 err 1 -1 104 no such table: vars +==== 3.0 + + SELECT name FROM fsdir WHERE dir = '.' AND name = 'test.db'; + SELECT name FROM fsdir WHERE dir = '.' AND name = '.' +---- +stmt 0 err 1 -1 65 no such table: fsdir +stmt 65 err 1 -1 124 no such table: fsdir diff --git a/parser/testdata/vtabI.metadata.json b/parser/testdata/vtabI.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabI.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabI.test b/parser/testdata/vtabI.test new file mode 100644 index 0000000..0ec1eab --- /dev/null +++ b/parser/testdata/vtabI.test @@ -0,0 +1,7 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c, d, e); + CREATE VIRTUAL TABLE e1 USING echo(t1); +---- +stmt 0 ok +stmt 34 ok diff --git a/parser/testdata/vtabJ.metadata.json b/parser/testdata/vtabJ.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabJ.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabJ.test b/parser/testdata/vtabJ.test new file mode 100644 index 0000000..92e419f --- /dev/null +++ b/parser/testdata/vtabJ.test @@ -0,0 +1,61 @@ +==== 110 + + INSERT INTO tclvar(fullname, value) + VALUES('vtabJ(4)',4),('vtabJ(five)',555); + SELECT fullname, value FROM tclvar WHERE name='vtabJ' ORDER BY fullname; +---- +stmt 0 err 1 -1 84 no such table: tclvar +stmt 84 err 1 -1 159 no such table: tclvar +==== 160 + + SELECT fullname FROM tclvar WHERE arrayname='two' +---- +stmt 0 err 1 -1 53 no such table: tclvar +==== 161 + + DELETE FROM tclvar WHERE arrayname='two'; + SELECT fullname, value FROM tclvar WHERE name='vtabJ' ORDER BY fullname; +---- +stmt 0 err 1 -1 44 no such table: tclvar +stmt 44 err 1 -1 119 no such table: tclvar +==== 171 + + INSERT INTO tclvar(fullname, value) VALUES('xx', 'a'); + SELECT name, value FROM tclvar where name = 'xx'; +---- +stmt 0 err 1 -1 57 no such table: tclvar +stmt 57 err 1 -1 109 no such table: tclvar +==== 172 + + UPDATE tclvar SET value = value || 't' + WHERE name = 'xx' OR name = 'x'||'x'; + SELECT name, value FROM tclvar where name = 'xx'; +---- +stmt 0 err 1 -1 82 no such table: tclvar +stmt 82 err 1 -1 134 no such table: tclvar +==== 173 + + UPDATE tclvar SET value = value || 't' + WHERE name = 'xx' OR name BETWEEN 'xx' AND 'xx'; + SELECT name, value FROM tclvar where name = 'xx'; +---- +stmt 0 err 1 -1 93 no such table: tclvar +stmt 93 err 1 -1 145 no such table: tclvar +==== 181 + + DELETE FROM tclvar WHERE name BETWEEN 'xx' AND 'xx' OR name='xx'; + SELECT name, value FROM tclvar where name = 'xx'; +---- +stmt 0 err 1 -1 68 no such table: tclvar +stmt 68 err 1 -1 120 no such table: tclvar +==== 200 + + CREATE TABLE var(k TEXT, v TEXT); + INSERT INTO var VALUES('testvar1', 10); + INSERT INTO var VALUES('testvar2', 20); + INSERT INTO var VALUES('testvar3', 30); +---- +stmt 0 ok +stmt 36 err 1 -1 78 no such table: var +stmt 78 err 1 -1 120 no such table: var +stmt 120 err 1 -1 162 no such table: var diff --git a/parser/testdata/vtabK.metadata.json b/parser/testdata/vtabK.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabK.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabK.test b/parser/testdata/vtabK.test new file mode 100644 index 0000000..32e1869 --- /dev/null +++ b/parser/testdata/vtabK.test @@ -0,0 +1,89 @@ +==== 100 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(123); + PRAGMA writable_schema=ON; + CREATE VIRTUAL TABLE sqlite_stat1 USING fts5(a); + PRAGMA writable_schema=OFF; + CREATE VIRTUAL TABLE t3 USING fts5(b); + INSERT INTO t3 VALUES('this is a test'); +---- +stmt 0 ok +stmt 22 err 1 -1 52 no such table: t1 +stmt 52 ok +stmt 81 ok +stmt 132 ok +stmt 162 ok +stmt 203 err 1 -1 246 no such table: t3 +==== 110 + + CREATE VIRTUAL TABLE t2 USING rtree(id,x,y); +---- +stmt 0 ok +==== 120 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 130 + + INSERT INTO t3(b) VALUES('Four score and seven years ago'); + SELECT * FROM t3 WHERE t3 MATCH 'this'; +---- +stmt 0 err 1 -1 62 no such table: t3 +stmt 62 err 1 -1 104 no such table: t3 +==== 140 + + SELECT * FROM t3 WHERE t3 MATCH 'four seven'; +---- +stmt 0 err 1 -1 48 no such table: t3 +==== 150 + + INSERT INTO sqlite_stat1(a) + VALUES('We hold these truths to be self-evident...'); + SELECT * FROM sqlite_stat1; +---- +stmt 0 err 1 -1 86 no such table: sqlite_stat1 +stmt 86 err 1 -1 116 no such table: sqlite_stat1 +==== 160 + + ANALYZE; +---- +stmt 0 ok +==== 170 + + PRAGMA integrity_check; +---- +stmt 0 ok +==== 200 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES('Ebed-malech'); + CREATE TABLE x(a); + PRAGMA writable_schema=ON; + CREATE VIRTUAL TABLE sqlite_stat1 USING fts5(a); +---- +stmt 0 ok +stmt 22 err 1 -1 62 no such table: t1 +stmt 62 ok +stmt 83 ok +stmt 112 ok +==== 210 + + CREATE VIRTUAL TABLE t2 USING rtree(id,x,y); +---- +stmt 0 ok +==== 220 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 300 + + CREATE VIRTUAL TABLE t1 USING rtree(a,b,c); + CREATE TABLE t2(x); + ALTER TABLE t2 ADD d GENERATED ALWAYS AS (c IN (SELECT 1 FROM t1)) VIRTUAL; +---- +stmt 0 ok +stmt 46 ok +stmt 68 err 1 -1 111 no such table: t2 diff --git a/parser/testdata/vtabL.metadata.json b/parser/testdata/vtabL.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabL.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabL.test b/parser/testdata/vtabL.test new file mode 100644 index 0000000..e7c42d9 --- /dev/null +++ b/parser/testdata/vtabL.test @@ -0,0 +1,20 @@ +==== vtabL-generated + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); +---- +stmt 0 ok +==== vtabL-generated.dup1 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); +---- +stmt 0 ok +==== vtabL-generated.dup2 + + CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); +---- +stmt 0 ok +==== vtabL-generated.dup3 + + SELECT a, b FROM x1 +---- +stmt 0 err 1 -1 25 no such table: x1 diff --git a/parser/testdata/vtab_alter.metadata.json b/parser/testdata/vtab_alter.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtab_alter.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtab_alter.test b/parser/testdata/vtab_alter.test new file mode 100644 index 0000000..9cd1fa3 --- /dev/null +++ b/parser/testdata/vtab_alter.test @@ -0,0 +1,58 @@ +==== vtab_alter-1.1 + CREATE TABLE t1(a, b VARCHAR, c INTEGER) +---- +stmt 0 ok +==== vtab_alter-1.2 + CREATE VIRTUAL TABLE t1echo USING echo(t1) +---- +stmt 0 ok +==== vtab_alter-1.3 + SELECT * FROM t1echo +---- +stmt 0 err 1 -1 22 no such table: t1echo +==== vtab_alter-1.4 + ALTER TABLE t1echo RENAME TO new +---- +stmt 0 err 1 -1 34 no such table: t1echo +==== vtab_alter-1.5 + SELECT * FROM t1echo +---- +stmt 0 err 1 -1 22 no such table: t1echo +==== vtab_alter-1.6 + SELECT * FROM new +---- +stmt 0 err 1 -1 19 no such table: new +==== vtab_alter-2.1 + + DROP TABLE new; + DROP TABLE t1; + CREATE TABLE t1_base(a, b, c); + CREATE VIRTUAL TABLE t1 USING echo('*_base'); +---- +stmt 0 err 1 -1 21 no such table: new +stmt 21 err 1 -1 40 no such table: t1 +stmt 40 ok +stmt 75 ok +==== vtab_alter-2.2 + + INSERT INTO t1_base VALUES(1, 2, 3); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 42 no such table: t1_base +stmt 42 err 1 -1 64 no such table: t1 +==== vtab_alter-2.3 + ALTER TABLE t1 RENAME TO x +---- +stmt 0 err 1 -1 28 no such table: t1 +==== vtab_alter-2.4 + SELECT * FROM x; +---- +stmt 0 err 1 -1 17 no such table: x +==== vtab_alter-2.5 + SELECT * FROM x_base; +---- +stmt 0 err 1 -1 22 no such table: x_base +==== vtab_alter-3.2 + SELECT * FROM x +---- +stmt 0 err 1 -1 17 no such table: x diff --git a/parser/testdata/vtab_err.metadata.json b/parser/testdata/vtab_err.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtab_err.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtab_err.test b/parser/testdata/vtab_err.test new file mode 100644 index 0000000..fef7d3b --- /dev/null +++ b/parser/testdata/vtab_err.test @@ -0,0 +1,7 @@ +==== vtab_err-3.0 + + CREATE TABLE r(a PRIMARY KEY, b, c); + CREATE VIRTUAL TABLE e USING echo(r); +---- +stmt 0 ok +stmt 39 ok diff --git a/parser/testdata/vtab_shared.metadata.json b/parser/testdata/vtab_shared.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtab_shared.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtab_shared.test b/parser/testdata/vtab_shared.test new file mode 100644 index 0000000..6515a92 --- /dev/null +++ b/parser/testdata/vtab_shared.test @@ -0,0 +1,9 @@ +==== vtab_shared-1.8.1 + + BEGIN; + INSERT INTO t1 VALUES(4, 5, 6); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 48 no such table: t1 +stmt 48 err 1 -1 70 no such table: t1 diff --git a/parser/testdata/vtabdistinct.metadata.json b/parser/testdata/vtabdistinct.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabdistinct.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabdistinct.test b/parser/testdata/vtabdistinct.test new file mode 100644 index 0000000..862f542 --- /dev/null +++ b/parser/testdata/vtabdistinct.test @@ -0,0 +1,23 @@ +==== 1.1 + + SELECT ix FROM qpvtab WHERE vn='sqlite3_vtab_distinct'; +---- +stmt 0 err 1 -1 58 no such table: qpvtab +==== 1.2 + + SELECT DISTINCT ix FROM qpvtab WHERE vn='sqlite3_vtab_distinct'; +---- +stmt 0 err 1 -1 67 no such table: qpvtab +==== 1.3 + + SELECT distinct vn, ix FROM qpvtab(3) + WHERE +vn IN ('sqlite3_vtab_distinct','nOrderBy'); +---- +stmt 0 err 1 -1 94 no such table: qpvtab +==== 1.4 + + SELECT vn, ix FROM qpvtab + GROUP BY vn + HAVING vn='sqlite3_vtab_distinct'; +---- +stmt 0 err 1 -1 80 no such table: qpvtab diff --git a/parser/testdata/vtabdrop.metadata.json b/parser/testdata/vtabdrop.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabdrop.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabdrop.test b/parser/testdata/vtabdrop.test new file mode 100644 index 0000000..2ab787d --- /dev/null +++ b/parser/testdata/vtabdrop.test @@ -0,0 +1,61 @@ +==== 1.0 + + CREATE VIRTUAL TABLE rt USING rtree(id, x1, x2); + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 53 ok +stmt 80 err 1 -1 113 no such table: t1 +==== 1.2 + + SELECT name FROM sqlite_master ORDER BY 1; + SELECT * FROM t1; + SELECT * FROM rt; +---- +stmt 0 ok +stmt 47 err 1 -1 69 no such table: t1 +stmt 69 err 1 -1 91 no such table: rt +==== 1.3 + + SELECT name FROM sqlite_master ORDER BY 1; +---- +stmt 0 ok +==== 2.0 + + CREATE VIRTUAL TABLE ft USING fts5(x); + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 43 ok +stmt 70 err 1 -1 103 no such table: t1 +==== 2.2 + + SELECT name FROM sqlite_master ORDER BY 1; +---- +stmt 0 ok +==== 2.3 + + SELECT name FROM sqlite_master ORDER BY 1; +---- +stmt 0 ok +==== 2.0.dup1 + + CREATE VIRTUAL TABLE ft USING fts3(x); + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 43 ok +stmt 70 err 1 -1 103 no such table: t1 +==== 2.2.dup1 + + SELECT name FROM sqlite_master ORDER BY 1; +---- +stmt 0 ok +==== 2.3.dup1 + + SELECT name FROM sqlite_master ORDER BY 1; +---- +stmt 0 ok diff --git a/parser/testdata/vtabrhs1.metadata.json b/parser/testdata/vtabrhs1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/vtabrhs1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/vtabrhs1.test b/parser/testdata/vtabrhs1.test new file mode 100644 index 0000000..7b02ff2 --- /dev/null +++ b/parser/testdata/vtabrhs1.test @@ -0,0 +1,45 @@ +==== 1.1 + + SELECT rhs FROM qpvtab + WHERE cn='a' + AND a=12345 +---- +stmt 0 err 1 -1 59 no such table: qpvtab +==== 1.2 + + SELECT rhs FROM qpvtab + WHERE cn='a' + AND a<>4.5 +---- +stmt 0 err 1 -1 58 no such table: qpvtab +==== 1.3 + + SELECT rhs FROM qpvtab + WHERE cn='a' + AND 'quokka' < a +---- +stmt 0 err 1 -1 64 no such table: qpvtab +==== 1.4 + + SELECT rhs FROM qpvtab + WHERE cn='a' + AND a IS NULL +---- +stmt 0 err 1 -1 61 no such table: qpvtab +==== 1.5 + + SELECT rhs FROM qpvtab + WHERE cn='a' + AND a GLOB x'0123' +---- +stmt 0 err 1 -1 66 no such table: qpvtab +==== 2.1 + + SELECT typeof(rhs) FROM qpvtab WHERE cn='a' AND a=format('abc'); +---- +stmt 0 err 1 -1 67 no such table: qpvtab +==== 2.2 + + SELECT typeof(rhs) FROM qpvtab WHERE cn='a' AND a=?2 +---- +stmt 0 err 1 -1 56 no such table: qpvtab diff --git a/parser/testdata/wal.metadata.json b/parser/testdata/wal.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/wal.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/wal.test b/parser/testdata/wal.test new file mode 100644 index 0000000..65a4bc1 --- /dev/null +++ b/parser/testdata/wal.test @@ -0,0 +1,219 @@ +==== wal-1.3 + SELECT * FROM sqlite_master +---- +stmt 0 ok +==== wal-1.5 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== wal-4.1 + + DELETE FROM t1; + BEGIN; + INSERT INTO t1 VALUES('a', 'b'); + SAVEPOINT sp; + INSERT INTO t1 VALUES('c', 'd'); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 ok +stmt 31 err 1 -1 70 no such table: t1 +stmt 70 ok +stmt 90 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 157 no such table: t1 +==== wal-4.2 + + ROLLBACK TO sp; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 22 err 1 -1 46 no such table: t1 +==== wal-4.3 + + COMMIT; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 12 err 1 -1 34 no such table: t1 +==== wal-4.4.3 + ROLLBACK TO tr +---- +stmt 0 ok +==== wal-4.4.5 + SELECT count(*) FROM t2 +---- +stmt 0 err 1 -1 25 no such table: t2 +==== wal-4.5.3 + ROLLBACK TO tr +---- +stmt 0 ok +==== wal-4.5.5 + SELECT count(*) FROM t2 ; SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 26 no such table: t2 +stmt 26 err 1 -1 51 no such table: t1 +==== wal-5.1 + + CREATE TEMP TABLE t2(a, b); + INSERT INTO t2 VALUES(1, 2); +---- +stmt 0 ok +stmt 32 err 1 -1 65 no such table: t2 +==== wal-5.2 + + BEGIN; + INSERT INTO t2 VALUES(3, 4); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 11 err 1 -1 46 no such table: t2 +stmt 46 err 1 -1 70 no such table: t2 +==== wal-5.3 + + ROLLBACK; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 14 err 1 -1 36 no such table: t2 +==== wal-5.5 + + COMMIT; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 12 err 1 -1 34 no such table: t2 +==== wal-generated + + PRAGMA auto_vacuum = 0; + PRAGMA journal_mode = wal; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 30 ok +stmt 63 ok +stmt 92 err 1 -1 127 no such table: t1 +stmt 127 err 1 -1 151 no such table: t1 +==== wal-generated.dup1 + BEGIN ; SELECT * FROM t1 +---- +stmt 0 ok +stmt 8 err 1 -1 26 no such table: t1 +==== wal-generated.dup2 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== wal-generated.dup3 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== wal-generated.dup4 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== wal-generated.dup5 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== wal-generated.dup6 + INSERT INTO t1 VALUES(13, 14) +---- +stmt 0 err 1 -1 31 no such table: t1 +==== wal-generated.dup7 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== wal-generated.dup8 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== wal-generated.dup9 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== wal-generated.dup10 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== wal-generated.dup11 + INSERT INTO t1 VALUES(15, 16) +---- +stmt 0 err 1 -1 31 no such table: t1 +==== wal-generated.dup12 + SELECT * FROM t1 ; COMMIT +---- +stmt 0 err 1 -1 19 no such table: t1 +stmt 19 ok +==== wal-generated.dup13 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== wal-generated.dup14 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== wal-11.5 + + SELECT count(*) FROM t1; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 ok +==== wal-11.7 + + SELECT count(*) FROM t1; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 30 no such table: t1 +stmt 30 ok +==== wal-11.11 + + SELECT count(*) FROM t1; + ROLLBACK; + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 31 no such table: t1 +stmt 31 ok +stmt 45 err 1 -1 74 no such table: t1 +==== wal-11.13 + + INSERT INTO t1 VALUES( blob(900) ); + SELECT count(*) FROM t1; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 69 no such table: t1 +stmt 69 ok +==== wal-19.2 + + INSERT INTO t1 VALUES(5, 6); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 55 no such table: t1 +==== wal-21.3 + PRAGMA integrity_check +---- +stmt 0 ok +==== 24.1 + + PRAGMA auto_vacuum = 2; + PRAGMA journal_mode = WAL; + PRAGMA page_size = 1024; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(randomblob(5000)); + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; +---- +stmt 0 ok +stmt 28 ok +stmt 59 ok +stmt 88 ok +stmt 112 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 194 no such table: t1 +stmt 194 err 1 -1 231 no such table: t1 +stmt 231 err 1 -1 268 no such table: t1 +stmt 268 err 1 -1 305 no such table: t1 diff --git a/parser/testdata/wal2.metadata.json b/parser/testdata/wal2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/wal2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/wal2.test b/parser/testdata/wal2.test new file mode 100644 index 0000000..bee9f09 --- /dev/null +++ b/parser/testdata/wal2.test @@ -0,0 +1,163 @@ +==== wal2-3.1 + SELECT count(a), sum(a) FROM t1 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== wal2-3.4 + SELECT count(a), sum(a) FROM t1 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== wal2-6.1.2 + PRAGMA lock_status +---- +stmt 0 ok +==== wal2-6.1.4 + + PRAGMA locking_mode = normal; + PRAGMA lock_status; +---- +stmt 0 ok +stmt 35 ok +==== wal2-6.1.5 + + SELECT * FROM t1; + PRAGMA lock_status; +---- +stmt 0 err 1 -1 23 no such table: t1 +stmt 23 ok +==== wal2-6.1.6 + + INSERT INTO t1 VALUES(3, 4); + PRAGMA lock_status; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 ok +==== wal2-6.2.2 + + BEGIN; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + COMMIT; + Pragma loCK_STATus; +---- +stmt 0 ok +stmt 11 ok +stmt 40 err 1 -1 75 no such table: t1 +stmt 75 ok +stmt 87 ok +==== wal2-6.2.4 + + SELECT * FROM t1; + pragma lock_status; +---- +stmt 0 err 1 -1 22 no such table: t1 +stmt 22 ok +==== wal2-6.2.5 + + INSERT INTO t1 VALUES(3, 4); + pragma lock_status; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 ok +==== wal2-6.2.6 + + PRAGMA locking_mode = NORMAL; + pragma lock_status; +---- +stmt 0 ok +stmt 34 ok +==== wal2-6.2.7 + + BEGIN IMMEDIATE; COMMIT; + pragma lock_status; +---- +stmt 0 ok +stmt 21 ok +stmt 29 ok +==== wal2-6.2.9 + + INSERT INTO t1 VALUES(5, 6); + SELECT * FROM t1; + pragma lock_status; +---- +stmt 0 err 1 -1 33 no such table: t1 +stmt 33 err 1 -1 55 no such table: t1 +stmt 55 ok +==== wal2-6.3.3 + PRAGMA lock_status +---- +stmt 0 ok +==== wal2-6.3.4 + + BEGIN; + INSERT INTO t1 VALUES('Groucho'); +---- +stmt 0 ok +stmt 12 err 1 -1 52 no such table: t1 +==== wal2-6.3.5 + PRAGMA lock_status +---- +stmt 0 ok +==== wal2-6.3.6 + COMMIT +---- +stmt 0 ok +==== wal2-6.3.7 + PRAGMA lock_status +---- +stmt 0 ok +==== wal2-6.5.2 + + PRAGMA locking_mode = normal; + INSERT INTO t2 VALUES('III', 'IV'); + PRAGMA locking_mode = exclusive; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 34 err 1 -1 74 no such table: t2 +stmt 74 ok +stmt 111 err 1 -1 133 no such table: t2 +==== wal2-6.5.3 + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== wal2-11.2 + INSERT INTO t1 VALUES(10, 11, 12) +---- +stmt 0 err 1 -1 35 no such table: t1 +==== wal2-generated + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== wal2-generated.dup1 + INSERT INTO t1 DEFAULT VALUES +---- +stmt 0 err 1 -1 31 no such table: t1 +==== wal2-generated.dup2 + PRAGMA page_size = 4096 +---- +stmt 0 ok +==== wal2-generated.dup3 + PRAGMA journal_mode = WAL +---- +stmt 0 ok +==== wal2-generated.dup4 + + PRAGMA wal_autocheckpoint = 10; + CREATE TABLE t1(a, b); -- 2 wal syncs + INSERT INTO t1 VALUES(1, 2); -- 2 wal sync + PRAGMA wal_checkpoint; -- 1 wal sync, 1 db sync + BEGIN; + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + COMMIT; -- 2 wal sync + PRAGMA wal_checkpoint; -- 1 wal sync, 1 db sync +---- +stmt 0 ok +stmt 36 ok +stmt 63 err 1 -1 126 no such table: t1 +stmt 126 ok +stmt 176 ok +stmt 227 err 1 -1 262 no such table: t1 +stmt 262 err 1 -1 297 no such table: t1 +stmt 297 ok +stmt 309 ok diff --git a/parser/testdata/wal3.metadata.json b/parser/testdata/wal3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/wal3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/wal3.test b/parser/testdata/wal3.test new file mode 100644 index 0000000..20b4dc6 --- /dev/null +++ b/parser/testdata/wal3.test @@ -0,0 +1,11 @@ +==== wal3-6.1.4 + + BEGIN; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 11 err 1 -1 33 no such table: t1 +==== wal3-6.2.2 + PRAGMA wal_checkpoint +---- +stmt 0 ok diff --git a/parser/testdata/wal4.metadata.json b/parser/testdata/wal4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/wal4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/wal4.test b/parser/testdata/wal4.test new file mode 100644 index 0000000..787cff9 --- /dev/null +++ b/parser/testdata/wal4.test @@ -0,0 +1,13 @@ +==== wal4-1.1 + + PRAGMA journal_mode=WAL; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + SELECT x FROM t1 ORDER BY x; +---- +stmt 0 ok +stmt 29 ok +stmt 53 err 1 -1 83 no such table: t1 +stmt 83 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 146 no such table: t1 diff --git a/parser/testdata/wal5.metadata.json b/parser/testdata/wal5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/wal5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/wal5.test b/parser/testdata/wal5.test new file mode 100644 index 0000000..23474df --- /dev/null +++ b/parser/testdata/wal5.test @@ -0,0 +1,24 @@ +==== wal5-generated + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + CREATE TABLE aux.t2(a, b); + INSERT INTO t2 VALUES(1, 2); + INSERT INTO t2 VALUES(3, 4); +---- +stmt 0 ok +stmt 31 err 1 -1 68 no such table: t1 +stmt 68 err 1 90 97 unknown database aux +stmt 103 err 1 -1 140 no such table: t2 +stmt 140 err 1 -1 177 no such table: t2 +==== wal5-generated.dup1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + CREATE TABLE aux.t2(a, b); + INSERT INTO t2 VALUES(1, 2); +---- +stmt 0 ok +stmt 31 err 1 -1 68 no such table: t1 +stmt 68 err 1 90 97 unknown database aux +stmt 103 err 1 -1 140 no such table: t2 diff --git a/parser/testdata/wal6.metadata.json b/parser/testdata/wal6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/wal6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/wal6.test b/parser/testdata/wal6.test new file mode 100644 index 0000000..68da696 --- /dev/null +++ b/parser/testdata/wal6.test @@ -0,0 +1,106 @@ +==== wal6-generated + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1,2); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 49 err 1 -1 83 no such table: t1 +stmt 83 err 1 -1 107 no such table: t1 +==== wal6-generated.dup1 + + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 2.1 + + PRAGMA journal_mode = WAL; + CREATE TABLE t1(a PRIMARY KEY, b TEXT); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + BEGIN; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 ok +stmt 71 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 141 no such table: t1 +stmt 141 ok +stmt 150 err 1 -1 172 no such table: t1 +==== 2.3 + + INSERT INTO t1 VALUES('x', 'x') +---- +stmt 0 err 1 -1 36 no such table: t1 +==== 2.5 + + SELECT * FROM t1; + COMMIT; + INSERT INTO t1 VALUES('x', 'x') +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 ok +stmt 30 err 1 -1 65 no such table: t1 +==== wal6-generated.dup2 + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== wal6-generated.dup3 + INSERT INTO t1 VALUES('y', 'y') +---- +stmt 0 err 1 -1 33 no such table: t1 +==== wal6-generated.dup4 + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== 2.6.1 + DELETE FROM t1 +---- +stmt 0 err 1 -1 16 no such table: t1 +==== 2.6.3 + DELETE FROM t1 +---- +stmt 0 err 1 -1 16 no such table: t1 +==== wal6-generated.dup5 + BEGIN IMMEDIATE +---- +stmt 0 ok +==== wal6-generated.dup6 + BEGIN IMMEDIATE +---- +stmt 0 ok +==== wal6-generated.dup7 + COMMIT +---- +stmt 0 ok +==== 3.1 + + PRAGMA journal_mode = WAL; + CREATE TABLE ab(a PRIMARY KEY, b); +---- +stmt 0 ok +stmt 30 ok +==== 4.1 + + PRAGMA page_size = 1024; + PRAGMA journal_mode = wal; + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + PRAGMA wal_checkpoint = truncate; +---- +stmt 0 ok +stmt 27 ok +stmt 56 ok +stmt 81 ok +stmt 106 ok +==== 5.1 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 29 ok +stmt 54 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 116 no such table: t1 diff --git a/parser/testdata/wal64k.metadata.json b/parser/testdata/wal64k.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/wal64k.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/wal64k.test b/parser/testdata/wal64k.test new file mode 100644 index 0000000..c998c75 --- /dev/null +++ b/parser/testdata/wal64k.test @@ -0,0 +1,23 @@ +==== 1.0 + + PRAGMA journal_mode = WAL; + CREATE TABLE t1(x); + CREATE INDEX i1 ON t1(x); +---- +stmt 0 ok +stmt 30 ok +stmt 52 err 1 -1 80 no such table: main.t1 +==== 2.1 + + PRAGMA page_size=512; + PRAGMA journal_mode=WAL; + CREATE TABLE t1(a,b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<8200) + INSERT INTO t1(a,b) SELECT x, zeroblob(300) FROM c; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 24 ok +stmt 51 ok +stmt 75 err 1 -1 207 no such table: t1 +stmt 207 ok diff --git a/parser/testdata/wal8.metadata.json b/parser/testdata/wal8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/wal8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/wal8.test b/parser/testdata/wal8.test new file mode 100644 index 0000000..cdac214 --- /dev/null +++ b/parser/testdata/wal8.test @@ -0,0 +1,21 @@ +==== 1.1 + + PRAGMA page_size = 4096; + VACUUM; +---- +stmt 0 ok +stmt 27 ok +==== 2.1 + + PRAGMA page_size = 4096; + VACUUM; +---- +stmt 0 ok +stmt 27 ok +==== 3.1 + + PRAGMA page_size = 4096; + SELECT name FROM sqlite_master; +---- +stmt 0 ok +stmt 27 ok diff --git a/parser/testdata/wal9.metadata.json b/parser/testdata/wal9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/wal9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/wal9.test b/parser/testdata/wal9.test new file mode 100644 index 0000000..711bba3 --- /dev/null +++ b/parser/testdata/wal9.test @@ -0,0 +1,56 @@ +==== 1.0 + + PRAGMA page_size = 1024; + PRAGMA journal_mode = WAL; + PRAGMA wal_autocheckpoint = 0; + CREATE TABLE t(x); +---- +stmt 0 ok +stmt 27 ok +stmt 56 ok +stmt 89 ok +==== 1.2 + + BEGIN; + INSERT INTO t VALUES(randomblob(100)); + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + + INSERT INTO t SELECT randomblob(100) FROM t; + INSERT INTO t SELECT randomblob(100) FROM t; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 52 no such table: t +stmt 52 err 1 -1 101 no such table: t +stmt 101 err 1 -1 150 no such table: t +stmt 150 err 1 -1 199 no such table: t +stmt 199 err 1 -1 248 no such table: t +stmt 248 err 1 -1 297 no such table: t +stmt 297 err 1 -1 346 no such table: t +stmt 346 err 1 -1 395 no such table: t +stmt 395 err 1 -1 445 no such table: t +stmt 445 err 1 -1 494 no such table: t +stmt 494 err 1 -1 543 no such table: t +stmt 543 err 1 -1 592 no such table: t +stmt 592 err 1 -1 641 no such table: t +stmt 641 err 1 -1 690 no such table: t +stmt 690 err 1 -1 739 no such table: t +stmt 739 err 1 -1 788 no such table: t +stmt 788 err 1 -1 838 no such table: t +stmt 838 err 1 -1 887 no such table: t +stmt 887 ok diff --git a/parser/testdata/walbak.metadata.json b/parser/testdata/walbak.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walbak.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walbak.test b/parser/testdata/walbak.test new file mode 100644 index 0000000..1028f2a --- /dev/null +++ b/parser/testdata/walbak.test @@ -0,0 +1,41 @@ +==== walbak-1.0 + + PRAGMA synchronous = NORMAL; + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = 0; + PRAGMA journal_mode = wal; + BEGIN; + CREATE TABLE t1(a PRIMARY KEY, b); + INSERT INTO t1 VALUES('I', 'one'); + COMMIT; +---- +stmt 0 ok +stmt 34 ok +stmt 63 ok +stmt 91 ok +stmt 122 ok +stmt 133 ok +stmt 174 err 1 -1 215 no such table: t1 +stmt 215 ok +==== walbak-1.4 + + VACUUM; + PRAGMA main.journal_mode; +---- +stmt 0 ok +stmt 13 ok +==== walbak-generated + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 29 err 1 -1 64 no such table: t1 +stmt 64 err 1 -1 99 no such table: t1 +stmt 99 err 1 -1 123 no such table: t1 +==== walbak-generated.dup1 + PRAGMA journal_mode +---- +stmt 0 ok diff --git a/parser/testdata/walbig.metadata.json b/parser/testdata/walbig.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walbig.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walbig.test b/parser/testdata/walbig.test new file mode 100644 index 0000000..4e138be --- /dev/null +++ b/parser/testdata/walbig.test @@ -0,0 +1,27 @@ +==== walbig-1.0 + + PRAGMA journal_mode = WAL; + CREATE TABLE t1(a PRIMARY KEY, b UNIQUE); + INSERT INTO t1 VALUES(a_string(300), a_string(500)); + INSERT INTO t1 SELECT a_string(300), a_string(500) FROM t1; + INSERT INTO t1 SELECT a_string(300), a_string(500) FROM t1; + INSERT INTO t1 SELECT a_string(300), a_string(500) FROM t1; +---- +stmt 0 ok +stmt 31 ok +stmt 77 err 1 -1 134 no such table: t1 +stmt 134 err 1 -1 198 no such table: t1 +stmt 198 err 1 -1 262 no such table: t1 +stmt 262 err 1 -1 326 no such table: t1 +==== walbig-1.1 + INSERT INTO t1 SELECT a_string(300), a_string(500) FROM t1 +---- +stmt 0 err 1 -1 60 no such table: t1 +==== walbig-1.2 + SELECT a FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 29 no such table: t1 +==== walbig-1.3 + SELECT b FROM t1 ORDER BY b +---- +stmt 0 err 1 -1 29 no such table: t1 diff --git a/parser/testdata/walblock.metadata.json b/parser/testdata/walblock.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walblock.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walblock.test b/parser/testdata/walblock.test new file mode 100644 index 0000000..da92784 --- /dev/null +++ b/parser/testdata/walblock.test @@ -0,0 +1,22 @@ +==== 1.1.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(7, 8); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +stmt 56 err 1 -1 87 no such table: t1 +stmt 87 err 1 -1 118 no such table: t1 +stmt 118 ok +stmt 147 err 1 -1 178 no such table: t1 +==== 1.2.1 + + BEGIN; + INSERT INTO t1 VALUES(9, 10); +---- +stmt 0 ok +stmt 9 err 1 -1 43 no such table: t1 diff --git a/parser/testdata/walckptnoop.metadata.json b/parser/testdata/walckptnoop.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walckptnoop.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walckptnoop.test b/parser/testdata/walckptnoop.test new file mode 100644 index 0000000..781fe07 --- /dev/null +++ b/parser/testdata/walckptnoop.test @@ -0,0 +1,76 @@ +==== 1.0 + + PRAGMA page_size=1024; + PRAGMA auto_vacuum=NONE; + PRAGMA secure_delete=OFF; + VACUUM; + CREATE TABLE t1(x INTEGER PRIMARY KEY, y TEXT); + CREATE INDEX i1 ON t1(y); + PRAGMA journal_mode = wal; + + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<1000 + ) + INSERT INTO t1 SELECT NULL, hex(myrandomblob(64)) FROM s; +---- +stmt 0 ok +stmt 25 ok +stmt 52 ok +stmt 80 ok +stmt 90 ok +stmt 140 err 1 -1 168 no such table: main.t1 +stmt 168 ok +stmt 197 err 1 -1 333 no such table: t1 +==== 1.1 + + PRAGMA wal_checkpoint = noop; +---- +stmt 0 ok +==== 1.2 + + PRAGMA wal_checkpoint = noop; +---- +stmt 0 ok +==== 1.3 + + PRAGMA wal_checkpoint = passive; +---- +stmt 0 ok +==== 1.4 + + PRAGMA wal_checkpoint = noop; +---- +stmt 0 ok +==== 1.5 + + PRAGMA wal_checkpoint = noop; +---- +stmt 0 ok +==== 1.6 + + PRAGMA wal_checkpoint = noop; +---- +stmt 0 ok +==== 1.7 + + BEGIN; + DELETE FROM t1; + PRAGMA wal_checkpoint = noop; +---- +stmt 0 ok +stmt 9 err 1 -1 29 no such table: t1 +stmt 29 ok +==== 1.8 + + COMMIT; + PRAGMA wal_checkpoint = noop; +---- +stmt 0 ok +stmt 10 ok +==== 1.10 + + PRAGMA journal_mode = delete; + PRAGMA wal_checkpoint = noop; +---- +stmt 0 ok +stmt 32 ok diff --git a/parser/testdata/walcksum.metadata.json b/parser/testdata/walcksum.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walcksum.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walcksum.test b/parser/testdata/walcksum.test new file mode 100644 index 0000000..f834f89 --- /dev/null +++ b/parser/testdata/walcksum.test @@ -0,0 +1,163 @@ +==== 3.0 + + PRAGMA auto_vacuum = 0; + PRAGMA synchronous = NORMAL; + PRAGMA journal_mode = WAL; + PRAGMA cache_size = 1; + + CREATE TABLE t1 (i INTEGER PRIMARY KEY, b BLOB, t TEXT); + PRAGMA wal_checkpoint; + INSERT INTO t1 VALUES(1, randomblob(2048), 'one'); +---- +stmt 0 ok +stmt 26 ok +stmt 57 ok +stmt 86 ok +stmt 111 ok +stmt 171 ok +stmt 196 err 1 -1 249 no such table: t1 +==== 3.1 + + BEGIN; + INSERT INTO t1 VALUES(2, randomblob(2048), 'two'); + SAVEPOINT one; + INSERT INTO t1 VALUES(3, randomblob(2048), 'three'); + INSERT INTO t1 VALUES(4, randomblob(2048), 'four'); + INSERT INTO t1 VALUES(5, randomblob(2048), 'five'); + INSERT INTO t1 VALUES(6, randomblob(2048), 'six'); + INSERT INTO t1 VALUES(7, randomblob(2048), 'seven'); + + UPDATE t1 SET b=randomblob(2048) WHERE i=5; + UPDATE t1 SET b=randomblob(2048) WHERE i=6; + UPDATE t1 SET b=randomblob(2048) WHERE i=7; + ROLLBACK TO one; + INSERT INTO t1 VALUES(8, NULL, 'eight'); + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 64 no such table: t1 +stmt 64 ok +stmt 83 err 1 -1 140 no such table: t1 +stmt 140 err 1 -1 196 no such table: t1 +stmt 196 err 1 -1 252 no such table: t1 +stmt 252 err 1 -1 307 no such table: t1 +stmt 307 err 1 -1 364 no such table: t1 +stmt 364 err 1 -1 413 no such table: t1 +stmt 413 err 1 -1 461 no such table: t1 +stmt 461 err 1 -1 509 no such table: t1 +stmt 509 ok +stmt 530 err 1 -1 575 no such table: t1 +stmt 575 ok +==== 3.2 + + SELECT i, t FROM t1 +---- +stmt 0 err 1 -1 23 no such table: t1 +==== 4.0 + + PRAGMA auto_vacuum = 0; + PRAGMA synchronous = NORMAL; + PRAGMA journal_mode = WAL; + PRAGMA cache_size = 1; + + CREATE TABLE t1 (i INTEGER PRIMARY KEY, b BLOB, t TEXT); + PRAGMA wal_checkpoint; + INSERT INTO t1 VALUES(1, randomblob(2048), 'one'); +---- +stmt 0 ok +stmt 26 ok +stmt 57 ok +stmt 86 ok +stmt 111 ok +stmt 171 ok +stmt 196 err 1 -1 249 no such table: t1 +==== 4.1.1 + + SAVEPOINT one; + INSERT INTO t1 VALUES(2, randomblob(2048), 'two'); + INSERT INTO t1 VALUES(3, randomblob(2048), 'three'); + INSERT INTO t1 VALUES(4, randomblob(2048), 'four'); + INSERT INTO t1 VALUES(5, randomblob(2048), 'five'); + INSERT INTO t1 VALUES(6, randomblob(2048), 'six'); + INSERT INTO t1 VALUES(7, randomblob(2048), 'seven'); + + UPDATE t1 SET b=randomblob(2048) WHERE i=5; + UPDATE t1 SET b=randomblob(2048) WHERE i=6; + UPDATE t1 SET b=randomblob(2048) WHERE i=7; +---- +stmt 0 ok +stmt 17 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 129 no such table: t1 +stmt 129 err 1 -1 185 no such table: t1 +stmt 185 err 1 -1 241 no such table: t1 +stmt 241 err 1 -1 296 no such table: t1 +stmt 296 err 1 -1 353 no such table: t1 +stmt 353 err 1 -1 402 no such table: t1 +stmt 402 err 1 -1 450 no such table: t1 +stmt 450 err 1 -1 498 no such table: t1 +==== 4.1.2 + + ROLLBACK TO one; + INSERT INTO t1 VALUES(8, NULL, 'eight'); + RELEASE one; +---- +stmt 0 ok +stmt 21 err 1 -1 66 no such table: t1 +stmt 66 ok +==== 4.2 + + SELECT i, t FROM t1 +---- +stmt 0 err 1 -1 23 no such table: t1 +==== 5.0 + + PRAGMA auto_vacuum = 0; + PRAGMA synchronous = NORMAL; + PRAGMA journal_mode = WAL; + PRAGMA cache_size = 1; + + CREATE TABLE t1 (i INTEGER PRIMARY KEY, b BLOB, t TEXT); + INSERT INTO t1 VALUES(1, randomblob(2048), 'one'); + INSERT INTO t1 VALUES(2, randomblob(2048), 'two'); + INSERT INTO t1 VALUES(3, randomblob(2048), 'three'); + PRAGMA wal_checkpoint; +---- +stmt 0 ok +stmt 26 ok +stmt 57 ok +stmt 86 ok +stmt 111 ok +stmt 171 err 1 -1 224 no such table: t1 +stmt 224 err 1 -1 277 no such table: t1 +stmt 277 err 1 -1 332 no such table: t1 +stmt 332 ok +==== 5.1 + + BEGIN; + SELECT count(*) FROM t1; + SAVEPOINT one; + INSERT INTO t1 VALUES(4, randomblob(2048), 'four'); + INSERT INTO t1 VALUES(5, randomblob(2048), 'five'); + INSERT INTO t1 VALUES(6, randomblob(2048), 'six'); + INSERT INTO t1 VALUES(7, randomblob(2048), 'seven'); + ROLLBACK TO one; + INSERT INTO t1 VALUES(8, randomblob(2048), 'eight'); + INSERT INTO t1 VALUES(9, randomblob(2048), 'nine'); + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 38 no such table: t1 +stmt 38 ok +stmt 57 err 1 -1 113 no such table: t1 +stmt 113 err 1 -1 169 no such table: t1 +stmt 169 err 1 -1 224 no such table: t1 +stmt 224 err 1 -1 281 no such table: t1 +stmt 281 ok +stmt 302 err 1 -1 359 no such table: t1 +stmt 359 err 1 -1 415 no such table: t1 +stmt 415 ok +==== 5.3 + + SELECT i, t FROM t1 +---- +stmt 0 err 1 -1 23 no such table: t1 diff --git a/parser/testdata/walcrash.metadata.json b/parser/testdata/walcrash.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walcrash.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walcrash.test b/parser/testdata/walcrash.test new file mode 100644 index 0000000..46bf9e3 --- /dev/null +++ b/parser/testdata/walcrash.test @@ -0,0 +1,40 @@ +==== walcrash-generated + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walcrash-generated.dup1 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walcrash-generated.dup2 + PRAGMA main.integrity_check +---- +stmt 0 ok +==== walcrash-generated.dup3 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walcrash-generated.dup4 + PRAGMA main.integrity_check +---- +stmt 0 ok +==== walcrash-generated.dup5 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walcrash-generated.dup6 + PRAGMA main.integrity_check +---- +stmt 0 ok +==== walcrash-generated.dup7 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walcrash-generated.dup8 + PRAGMA main.integrity_check +---- +stmt 0 ok +==== walcrash-generated.dup9 + PRAGMA main.journal_mode +---- +stmt 0 ok diff --git a/parser/testdata/walcrash3.metadata.json b/parser/testdata/walcrash3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walcrash3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walcrash3.test b/parser/testdata/walcrash3.test new file mode 100644 index 0000000..76289fa --- /dev/null +++ b/parser/testdata/walcrash3.test @@ -0,0 +1,21 @@ +==== 1.1 + + PRAGMA page_size = 1024; + PRAGMA journal_mode = WAL; + PRAGMA wal_autocheckpoint = 128; + PRAGMA journal_size_limit = 16384; + + CREATE TABLE t1(a BLOB, b BLOB, UNIQUE(a, b)); + INSERT INTO t1 VALUES(randomblob(10), randomblob(1000)); +---- +stmt 0 ok +stmt 27 ok +stmt 56 ok +stmt 91 ok +stmt 128 ok +stmt 178 err 1 -1 237 no such table: t1 +==== walcrash3-generated + + INSERT INTO t1 VALUES(randomblob(10), randomblob(1000)); +---- +stmt 0 err 1 -1 61 no such table: t1 diff --git a/parser/testdata/walcrash4.metadata.json b/parser/testdata/walcrash4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walcrash4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walcrash4.test b/parser/testdata/walcrash4.test new file mode 100644 index 0000000..04e6068 --- /dev/null +++ b/parser/testdata/walcrash4.test @@ -0,0 +1,18 @@ +==== 1.0 + + PRAGMA autovacuum = 0; + PRAGMA page_size = 1024; + PRAGMA journal_mode = wal; + PRAGMA main.synchronous = full; +---- +stmt 0 ok +stmt 25 ok +stmt 52 ok +stmt 81 ok +==== walcrash4-generated + + SELECT count(*) FROM t1; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 ok diff --git a/parser/testdata/walfault2.metadata.json b/parser/testdata/walfault2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walfault2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walfault2.test b/parser/testdata/walfault2.test new file mode 100644 index 0000000..8d7f93a --- /dev/null +++ b/parser/testdata/walfault2.test @@ -0,0 +1,28 @@ +==== 1.0 + + PRAGMA auto_vacuum = 0; + CREATE TABLE t1(a, b); + PRAGMA journal_mode = wal; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 30 + ) + INSERT INTO t1 SELECT randomblob(400), randomblob(400) FROM s; +---- +stmt 0 ok +stmt 26 ok +stmt 51 ok +stmt 80 err 1 -1 216 no such table: t1 +==== 2.0 + + PRAGMA auto_vacuum = 0; + CREATE TABLE t1(a, b); + PRAGMA journal_mode = wal; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 30 + ) + INSERT INTO t1 SELECT randomblob(400), randomblob(400) FROM s; +---- +stmt 0 ok +stmt 26 ok +stmt 51 ok +stmt 80 err 1 -1 216 no such table: t1 diff --git a/parser/testdata/walhook.metadata.json b/parser/testdata/walhook.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walhook.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walhook.test b/parser/testdata/walhook.test new file mode 100644 index 0000000..4d56f64 --- /dev/null +++ b/parser/testdata/walhook.test @@ -0,0 +1,8 @@ +==== walhook-2.2 + PRAGMA wal_autocheckpoint = 10 +---- +stmt 0 ok +==== walhook-2.3 + PRAGMA wal_autocheckpoint +---- +stmt 0 ok diff --git a/parser/testdata/walmode.metadata.json b/parser/testdata/walmode.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walmode.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walmode.test b/parser/testdata/walmode.test new file mode 100644 index 0000000..524cd30 --- /dev/null +++ b/parser/testdata/walmode.test @@ -0,0 +1,222 @@ +==== walmode-0.1 + PRAGMA journal_mode = wal +---- +stmt 0 ok +==== walmode-0.2 + PRAGMA main.journal_mode = wal +---- +stmt 0 ok +==== walmode-0.3 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walmode-4.3 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== walmode-5.1.2 + PRAGMA main.journal_mode = wal +---- +stmt 0 ok +==== walmode-5.1.3 + + BEGIN; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + COMMIT; + SELECT * FROM t1; + PRAGMA main.journal_mode; +---- +stmt 0 ok +stmt 11 ok +stmt 40 err 1 -1 75 no such table: t1 +stmt 75 ok +stmt 87 err 1 -1 109 no such table: t1 +stmt 109 ok +==== walmode-5.1.4 + PRAGMA main.journal_mode = wal +---- +stmt 0 ok +==== walmode-5.1.5 + + INSERT INTO t1 VALUES(3, 4); + SELECT * FROM t1; + PRAGMA main.journal_mode; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 56 no such table: t1 +stmt 56 ok +==== walmode-5.2.2 + PRAGMA main.journal_mode = wal +---- +stmt 0 ok +==== walmode-5.2.3 + + BEGIN; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + COMMIT; + SELECT * FROM t1; + PRAGMA main.journal_mode; +---- +stmt 0 ok +stmt 11 ok +stmt 40 err 1 -1 75 no such table: t1 +stmt 75 ok +stmt 87 err 1 -1 109 no such table: t1 +stmt 109 ok +==== walmode-5.2.4 + PRAGMA main.journal_mode = wal +---- +stmt 0 ok +==== walmode-5.2.5 + + INSERT INTO t1 VALUES(3, 4); + SELECT * FROM t1; + PRAGMA main.journal_mode; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 56 no such table: t1 +stmt 56 ok +==== walmode-5.3.2 + PRAGMA temp.journal_mode = wal +---- +stmt 0 ok +==== walmode-5.3.3 + + BEGIN; + CREATE TEMP TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + COMMIT; + SELECT * FROM t1; + PRAGMA temp.journal_mode; +---- +stmt 0 ok +stmt 11 ok +stmt 45 err 1 -1 80 no such table: t1 +stmt 80 ok +stmt 92 err 1 -1 114 no such table: t1 +stmt 114 ok +==== walmode-5.3.4 + PRAGMA temp.journal_mode = wal +---- +stmt 0 ok +==== walmode-5.3.5 + + INSERT INTO t1 VALUES(3, 4); + SELECT * FROM t1; + PRAGMA temp.journal_mode; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 56 no such table: t1 +stmt 56 ok +==== walmode-8.1 + + CREATE TABLE t1(a, b); + PRAGMA journal_mode = WAL; + ATTACH 'test.db2' AS two; + CREATE TABLE two.t2(a, b); +---- +stmt 0 ok +stmt 25 ok +stmt 54 ok +stmt 82 err 1 98 105 unknown database two +==== walmode-8.2 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walmode-8.3 + PRAGMA two.journal_mode +---- +stmt 0 err 1 8 25 unknown database two +==== walmode-8.4 + PRAGMA two.journal_mode = DELETE +---- +stmt 0 err 1 8 34 unknown database two +==== walmode-8.5 + ATTACH 'test.db2' AS two +---- +stmt 0 ok +==== walmode-8.6 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walmode-8.7 + PRAGMA two.journal_mode +---- +stmt 0 err 1 8 25 unknown database two +==== walmode-8.8 + INSERT INTO two.t2 DEFAULT VALUES +---- +stmt 0 err 1 -1 35 no such table: two.t2 +==== walmode-8.9 + PRAGMA two.journal_mode +---- +stmt 0 err 1 8 25 unknown database two +==== walmode-8.10 + INSERT INTO t1 DEFAULT VALUES +---- +stmt 0 err 1 -1 31 no such table: t1 +==== walmode-8.11 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walmode-8.12 + PRAGMA journal_mode +---- +stmt 0 ok +==== walmode-8.x1 + + PRAGMA two.journal_mode=WAL; + PRAGMA two.journal_mode; +---- +stmt 0 err 1 13 34 unknown database two +stmt 34 err 1 47 64 unknown database two +==== walmode-8.13 + PRAGMA journal_mode = WAL +---- +stmt 0 ok +==== walmode-8.14 + ATTACH 'test.db2' AS two +---- +stmt 0 ok +==== walmode-8.15 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walmode-8.16 + PRAGMA two.journal_mode +---- +stmt 0 err 1 8 25 unknown database two +==== walmode-8.17 + INSERT INTO two.t2 DEFAULT VALUES +---- +stmt 0 err 1 -1 35 no such table: two.t2 +==== walmode-8.18 + PRAGMA two.journal_mode +---- +stmt 0 err 1 8 25 unknown database two +==== walmode-8.20 + PRAGMA journal_mode = DELETE +---- +stmt 0 ok +==== walmode-8.21 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walmode-8.22 + PRAGMA two.journal_mode +---- +stmt 0 err 1 8 25 unknown database two +==== walmode-8.21.dup1 + PRAGMA journal_mode = WAL +---- +stmt 0 ok +==== walmode-8.21.dup2 + PRAGMA main.journal_mode +---- +stmt 0 ok +==== walmode-8.22.dup1 + PRAGMA two.journal_mode +---- +stmt 0 err 1 8 25 unknown database two diff --git a/parser/testdata/walnoshm.metadata.json b/parser/testdata/walnoshm.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walnoshm.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walnoshm.test b/parser/testdata/walnoshm.test new file mode 100644 index 0000000..152fe22 --- /dev/null +++ b/parser/testdata/walnoshm.test @@ -0,0 +1,69 @@ +==== 1.1 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: t1 +==== 1.2 + + PRAGMA journal_mode = WAL; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 30 err 1 -1 50 no such table: t1 +==== 1.4 + + PRAGMA locking_mode = exclusive; + PRAGMA journal_mode = WAL; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 36 ok +stmt 65 err 1 -1 85 no such table: t1 +==== 1.6 + INSERT INTO t1 VALUES(3, 4) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== 1.7 + + PRAGMA locking_mode = normal; +---- +stmt 0 ok +==== 1.8 + + PRAGMA journal_mode = delete; + PRAGMA main.locking_mode; +---- +stmt 0 ok +stmt 32 ok +==== 1.9 + + PRAGMA locking_mode = normal; +---- +stmt 0 ok +==== 1.10 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 2.1.1 + + CREATE TABLE t2(x, y); + INSERT INTO t2 VALUES('a', 'b'); + INSERT INTO t2 VALUES('c', 'd'); +---- +stmt 0 ok +stmt 25 err 1 -1 60 no such table: t2 +stmt 60 err 1 -1 95 no such table: t2 +==== 2.1.2 + + PRAGMA locking_mode = exclusive; + PRAGMA journal_mode = WAL; + INSERT INTO t2 VALUES('e', 'f'); + INSERT INTO t2 VALUES('g', 'h'); +---- +stmt 0 ok +stmt 35 ok +stmt 64 err 1 -1 99 no such table: t2 +stmt 99 err 1 -1 134 no such table: t2 diff --git a/parser/testdata/waloverwrite.metadata.json b/parser/testdata/waloverwrite.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/waloverwrite.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/waloverwrite.test b/parser/testdata/waloverwrite.test new file mode 100644 index 0000000..a151e83 --- /dev/null +++ b/parser/testdata/waloverwrite.test @@ -0,0 +1,19 @@ +==== waloverwrite-generated + + CREATE TABLE t1(x, y); + CREATE TABLE t2(x, y); + CREATE INDEX i1y ON t1(y); + + WITH cnt(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM cnt WHERE i<20 + ) + INSERT INTO t1 SELECT i, randomblob(800) FROM cnt; +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 85 no such table: main.t1 +stmt 85 err 1 -1 226 no such table: t1 +==== waloverwrite-generated.dup1 + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/walprotocol.metadata.json b/parser/testdata/walprotocol.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walprotocol.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walprotocol.test b/parser/testdata/walprotocol.test new file mode 100644 index 0000000..c77dd21 --- /dev/null +++ b/parser/testdata/walprotocol.test @@ -0,0 +1,28 @@ +==== 1.0 + + PRAGMA journal_mode = wal; + CREATE TABLE x(y); + INSERT INTO x VALUES('z'); +---- +stmt 0 ok +stmt 29 ok +stmt 50 err 1 -1 79 no such table: x +==== 2.2 + SELECT * FROM b +---- +stmt 0 err 1 -1 17 no such table: b +==== 2.4 + + INSERT INTO b VALUES('Gilan'); + INSERT INTO b VALUES('Ardabil'); +---- +stmt 0 err 1 -1 35 no such table: b +stmt 35 err 1 -1 72 no such table: b +==== 2.5 + SELECT * FROM b +---- +stmt 0 err 1 -1 17 no such table: b +==== 2.7 + SELECT * FROM b +---- +stmt 0 err 1 -1 17 no such table: b diff --git a/parser/testdata/walprotocol2.metadata.json b/parser/testdata/walprotocol2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walprotocol2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walprotocol2.test b/parser/testdata/walprotocol2.test new file mode 100644 index 0000000..a6e0118 --- /dev/null +++ b/parser/testdata/walprotocol2.test @@ -0,0 +1,31 @@ +==== 1.0 + + PRAGMA journal_mode = wal; + CREATE TABLE x(y); + INSERT INTO x VALUES('z'); +---- +stmt 0 ok +stmt 29 ok +stmt 50 err 1 -1 79 no such table: x +==== 2.0 + + SELECT * FROM x; +---- +stmt 0 err 1 -1 19 no such table: x +==== 2.2 + + BEGIN EXCLUSIVE; +---- +stmt 0 ok +==== 2.4 + + BEGIN EXCLUSIVE; +---- +stmt 0 ok +==== 2.5 + + SELECT * FROM x; + COMMIT; +---- +stmt 0 err 1 -1 19 no such table: x +stmt 19 ok diff --git a/parser/testdata/walrestart.metadata.json b/parser/testdata/walrestart.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walrestart.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walrestart.test b/parser/testdata/walrestart.test new file mode 100644 index 0000000..32f34ea --- /dev/null +++ b/parser/testdata/walrestart.test @@ -0,0 +1,40 @@ +==== 1.0 + + PRAGMA auto_vacuum = 0; + PRAGMA journal_mode = wal; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<20 + ) + INSERT INTO t1 SELECT NULL, randomblob(600) FROM s; + CREATE INDEX i1 ON t1(b); + PRAGMA wal_checkpoint; +---- +stmt 0 ok +stmt 26 ok +stmt 55 ok +stmt 100 err 1 -1 228 no such table: t1 +stmt 228 err 1 -1 256 no such table: main.t1 +stmt 256 ok +==== 1.1 + + UPDATE t1 SET b=randomblob(600); + PRAGMA wal_checkpoint; +---- +stmt 0 err 1 -1 35 no such table: t1 +stmt 35 ok +==== 1.2 + + PRAGMA wal_checkpoint; +---- +stmt 0 ok +==== 1.4 + + PRAGMA wal_checkpoint; +---- +stmt 0 ok +==== 1.5 + + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/walro2.metadata.json b/parser/testdata/walro2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walro2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walro2.test b/parser/testdata/walro2.test new file mode 100644 index 0000000..c1bcbf9 --- /dev/null +++ b/parser/testdata/walro2.test @@ -0,0 +1,7 @@ +==== 0.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(x); +---- +stmt 0 ok +stmt 29 ok diff --git a/parser/testdata/walrofault.metadata.json b/parser/testdata/walrofault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walrofault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walrofault.test b/parser/testdata/walrofault.test new file mode 100644 index 0000000..cd74222 --- /dev/null +++ b/parser/testdata/walrofault.test @@ -0,0 +1,24 @@ +==== 1.0 + + CREATE TABLE t1(b); + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES('hello'); + INSERT INTO t1 VALUES('world'); + INSERT INTO t1 VALUES('!'); + INSERT INTO t1 VALUES('world'); + INSERT INTO t1 VALUES('hello'); + PRAGMA cache_size = 10; + BEGIN; + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<30 ) + INSERT INTO t1(b) SELECT randomblob(800) FROM s; +---- +stmt 0 ok +stmt 22 ok +stmt 51 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 119 no such table: t1 +stmt 119 err 1 -1 149 no such table: t1 +stmt 149 err 1 -1 183 no such table: t1 +stmt 183 err 1 -1 217 no such table: t1 +stmt 217 ok +stmt 243 ok +stmt 252 err 1 -1 375 no such table: t1 diff --git a/parser/testdata/walseh1.metadata.json b/parser/testdata/walseh1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walseh1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walseh1.test b/parser/testdata/walseh1.test new file mode 100644 index 0000000..5e2debe --- /dev/null +++ b/parser/testdata/walseh1.test @@ -0,0 +1,11 @@ +==== 1.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 29 ok +stmt 54 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 116 no such table: t1 diff --git a/parser/testdata/walsetlk.metadata.json b/parser/testdata/walsetlk.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walsetlk.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walsetlk.test b/parser/testdata/walsetlk.test new file mode 100644 index 0000000..e258690 --- /dev/null +++ b/parser/testdata/walsetlk.test @@ -0,0 +1,42 @@ +==== 1.0 + + CREATE TABLE t1(x, y); + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + INSERT INTO t1 VALUES(7, 8); +---- +stmt 0 ok +stmt 25 ok +stmt 54 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 116 no such table: t1 +stmt 116 err 1 -1 147 no such table: t1 +stmt 147 err 1 -1 178 no such table: t1 +==== 1.2 + + BEGIN; + INSERT INTO t1 VALUES(9, 10); +---- +stmt 0 ok +stmt 9 err 1 -1 43 no such table: t1 +==== 1.5 + COMMIT +---- +stmt 0 ok +==== 3.0 + + PRAGMA journal_mode = wal; + CREATE TABLE x1(x, y); + BEGIN; + INSERT INTO x1 VALUES(1, 2); +---- +stmt 0 ok +stmt 29 ok +stmt 54 ok +stmt 63 err 1 -1 96 no such table: x1 +==== 3.3 + + COMMIT; +---- +stmt 0 ok diff --git a/parser/testdata/walsetlk2.metadata.json b/parser/testdata/walsetlk2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walsetlk2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walsetlk2.test b/parser/testdata/walsetlk2.test new file mode 100644 index 0000000..48dc454 --- /dev/null +++ b/parser/testdata/walsetlk2.test @@ -0,0 +1,104 @@ +==== 1.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); +---- +stmt 0 ok +stmt 29 ok +stmt 57 err 1 -1 91 no such table: t1 +==== 1.1 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 1.2 + + INSERT INTO t1 VALUES(4, 5, 6); +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 1.3 + + INSERT INTO t1 VALUES(7, 8, 9); +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 1.5.1 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== 1.5.2 + + INSERT INTO t1 VALUES(10, 11, 12); +---- +stmt 0 err 1 -1 37 no such table: t1 +==== 2.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2), (3, 4); +---- +stmt 0 ok +stmt 25 err 1 -1 64 no such table: t1 +==== 2.1 + + INSERT INTO t1 VALUES(7, 8); +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 2.2 + + INSERT INTO t1 VALUES(7, 8); +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 2.3 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 2.4 + + PRAGMA journal_mode = wal; +---- +stmt 0 ok +==== 2.5 + + INSERT INTO t1 VALUES(9, 10); +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 2.6 + + INSERT INTO t1 VALUES(13, 14); +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 2.7 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 3.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 'one'), (3, 'three'); +---- +stmt 0 ok +stmt 29 ok +stmt 74 err 1 -1 123 no such table: t1 +==== 3.1 + + INSERT INTO t1 VALUES(7, 'seven'); +---- +stmt 0 err 1 -1 37 no such table: t1 +==== 3.2 + + INSERT INTO t1 VALUES(9, 'ten'); +---- +stmt 0 err 1 -1 35 no such table: t1 +==== 3.3 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 3.4 + + INSERT INTO t1 VALUES(13, 'thirteen'); +---- +stmt 0 err 1 -1 41 no such table: t1 diff --git a/parser/testdata/walsetlk3.metadata.json b/parser/testdata/walsetlk3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walsetlk3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walsetlk3.test b/parser/testdata/walsetlk3.test new file mode 100644 index 0000000..5c83777 --- /dev/null +++ b/parser/testdata/walsetlk3.test @@ -0,0 +1,38 @@ +==== 1.0 + + CREATE TABLE t1(x, y); + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); +---- +stmt 0 ok +stmt 25 ok +stmt 54 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 116 no such table: t1 +==== 1.1 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 1.2 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 +==== 2.1 + + CREATE TABLE x1(a); + INSERT INTO x1 VALUES(1), (2), (3); +---- +stmt 0 ok +stmt 22 err 1 -1 60 no such table: x1 +==== 2.2 + + SELECT * FROM x1 +---- +stmt 0 err 1 -1 20 no such table: x1 +==== 2.3 + + SELECT * FROM x1 +---- +stmt 0 err 1 -1 20 no such table: x1 diff --git a/parser/testdata/walsetlk_recover.metadata.json b/parser/testdata/walsetlk_recover.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walsetlk_recover.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walsetlk_recover.test b/parser/testdata/walsetlk_recover.test new file mode 100644 index 0000000..f01c9bc --- /dev/null +++ b/parser/testdata/walsetlk_recover.test @@ -0,0 +1,18 @@ +==== 1.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); +---- +stmt 0 ok +stmt 29 ok +stmt 54 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 116 no such table: t1 +stmt 116 err 1 -1 147 no such table: t1 +==== 1.4 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 diff --git a/parser/testdata/walsetlk_snapshot.metadata.json b/parser/testdata/walsetlk_snapshot.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walsetlk_snapshot.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walsetlk_snapshot.test b/parser/testdata/walsetlk_snapshot.test new file mode 100644 index 0000000..f01c9bc --- /dev/null +++ b/parser/testdata/walsetlk_snapshot.test @@ -0,0 +1,18 @@ +==== 1.0 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); +---- +stmt 0 ok +stmt 29 ok +stmt 54 err 1 -1 85 no such table: t1 +stmt 85 err 1 -1 116 no such table: t1 +stmt 116 err 1 -1 147 no such table: t1 +==== 1.4 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 20 no such table: t1 diff --git a/parser/testdata/walshared.metadata.json b/parser/testdata/walshared.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walshared.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walshared.test b/parser/testdata/walshared.test new file mode 100644 index 0000000..ee4169b --- /dev/null +++ b/parser/testdata/walshared.test @@ -0,0 +1,28 @@ +==== walshared-1.0 + + PRAGMA cache_size = 10; + PRAGMA journal_mode = WAL; + CREATE TABLE t1(a PRIMARY KEY, b UNIQUE); + INSERT INTO t1 VALUES(randomblob(100), randomblob(200)); +---- +stmt 0 ok +stmt 28 ok +stmt 59 ok +stmt 105 err 1 -1 166 no such table: t1 +==== walshared-1.1 + + BEGIN; + INSERT INTO t1 VALUES(randomblob(100), randomblob(200)); + INSERT INTO t1 SELECT randomblob(100), randomblob(200) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(200) FROM t1; + INSERT INTO t1 SELECT randomblob(100), randomblob(200) FROM t1; +---- +stmt 0 ok +stmt 11 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 214 no such table: t1 +stmt 214 err 1 -1 284 no such table: t1 +==== walshared-1.2 + PRAGMA wal_checkpoint +---- +stmt 0 ok diff --git a/parser/testdata/walslow.metadata.json b/parser/testdata/walslow.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walslow.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walslow.test b/parser/testdata/walslow.test new file mode 100644 index 0000000..80416a3 --- /dev/null +++ b/parser/testdata/walslow.test @@ -0,0 +1,13 @@ +==== 4.1 + + PRAGMA journal_mode = wal; + CREATE TABLE t1(x, y); + INSERT INTO "t1" VALUES('A',0); + CREATE TABLE t2(x, y); + INSERT INTO "t2" VALUES('B',2); +---- +stmt 0 ok +stmt 29 ok +stmt 54 err 1 -1 88 no such table: t1 +stmt 88 ok +stmt 113 err 1 -1 147 no such table: t2 diff --git a/parser/testdata/walvfs.metadata.json b/parser/testdata/walvfs.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/walvfs.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/walvfs.test b/parser/testdata/walvfs.test new file mode 100644 index 0000000..672fd4f --- /dev/null +++ b/parser/testdata/walvfs.test @@ -0,0 +1,183 @@ +==== 1.0 + + PRAGMA auto_vacuum = 0; + PRAGMA journal_mode = wal; + PRAGMA synchronous = normal; + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t1 VALUES(7, 8, 9); + PRAGMA wal_checkpoint; +---- +stmt 0 ok +stmt 26 ok +stmt 55 ok +stmt 86 ok +stmt 114 err 1 -1 148 no such table: t1 +stmt 148 err 1 -1 182 no such table: t1 +stmt 182 err 1 -1 216 no such table: t1 +stmt 216 ok +==== 1.2 + + PRAGMA synchronous = normal; + INSERT INTO t1 VALUES(13, 14, 15); + INSERT INTO t1 VALUES(16, 17, 18); + PRAGMA wal_checkpoint; +---- +stmt 0 ok +stmt 31 err 1 -1 68 no such table: t1 +stmt 68 err 1 -1 105 no such table: t1 +stmt 105 ok +==== 2.0 + + PRAGMA journal_size_limit = 10000; + CREATE TABLE t1(x); + PRAGMA journal_mode = wal; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 20 + ) + INSERT INTO t1 SELECT randomblob(750) FROM s; +---- +stmt 0 ok +stmt 37 ok +stmt 59 ok +stmt 88 err 1 -1 207 no such table: t1 +==== 3.0 + + CREATE TABLE t1(x); + PRAGMA journal_mode = wal; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 20 + ) + INSERT INTO t1 SELECT randomblob(750) FROM s; +---- +stmt 0 ok +stmt 22 ok +stmt 51 err 1 -1 170 no such table: t1 +==== 3.1 + + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== 3.2 + + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== 4.1 + + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 27 no such table: t1 +==== 4.2 + + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 27 no such table: t1 +==== 5.0 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 1024; + CREATE TABLE t1(x); + PRAGMA journal_mode = wal; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 20 + ) + INSERT INTO t1 SELECT randomblob(750) FROM s; +---- +stmt 0 ok +stmt 26 ok +stmt 53 ok +stmt 75 ok +stmt 104 err 1 -1 225 no such table: t1 +==== 5.1 + + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 27 no such table: t1 +==== 5.3 + + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 27 no such table: t1 +==== 6.0 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 1024; + CREATE TABLE t1(x); + PRAGMA journal_mode = wal; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 20 + ) + INSERT INTO t1 SELECT randomblob(750) FROM s; +---- +stmt 0 ok +stmt 26 ok +stmt 53 ok +stmt 75 ok +stmt 104 err 1 -1 225 no such table: t1 +==== 6.2 + + INSERT INTO t1 VALUES(1); +---- +stmt 0 err 1 -1 28 no such table: t1 +==== 7.0 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 1024; + CREATE TABLE t1(x); + PRAGMA journal_mode = wal; + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 20 + ) + INSERT INTO t1 SELECT randomblob(750) FROM s; +---- +stmt 0 ok +stmt 26 ok +stmt 53 ok +stmt 75 ok +stmt 104 err 1 -1 225 no such table: t1 +==== 7.1 + + PRAGMA wal_checkpoint +---- +stmt 0 ok +==== 8.0 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 1024; + CREATE TABLE t1(x); + PRAGMA journal_mode = wal; + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 20 ) + INSERT INTO t1 SELECT randomblob(75) FROM s; +---- +stmt 0 ok +stmt 26 ok +stmt 53 ok +stmt 75 ok +stmt 104 err 1 -1 216 no such table: t1 +==== 8.1 + SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 25 no such table: t1 +==== 8.3 + + PRAGMA wal_checkpoint; + SELECT count(*) FROM t1 +---- +stmt 0 ok +stmt 26 err 1 -1 53 no such table: t1 +==== 9.0 + + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 1024; + CREATE TABLE t1(x); + PRAGMA journal_mode = wal; + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s LIMIT 20 ) + INSERT INTO t1 SELECT randomblob(75) FROM s; +---- +stmt 0 ok +stmt 26 ok +stmt 53 ok +stmt 75 ok +stmt 104 err 1 -1 216 no such table: t1 diff --git a/parser/testdata/where.metadata.json b/parser/testdata/where.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/where.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/where.test b/parser/testdata/where.test new file mode 100644 index 0000000..15b7edd --- /dev/null +++ b/parser/testdata/where.test @@ -0,0 +1,519 @@ +==== where-4.3 + + SELECT 99 WHERE 0 +---- +stmt 0 ok +==== where-4.4 + + SELECT 99 WHERE 1 +---- +stmt 0 ok +==== where-4.5 + + SELECT 99 WHERE 0.1 +---- +stmt 0 ok +==== where-4.6 + + SELECT 99 WHERE 0.0 +---- +stmt 0 ok +==== where-4.7 + + SELECT count(*) FROM t1 WHERE t1.w +---- +stmt 0 err 1 -1 40 no such table: t1 +==== where-6.1 + + CREATE TABLE t3(a,b,c); + CREATE INDEX t3a ON t3(a); + CREATE INDEX t3bc ON t3(b,c); + CREATE INDEX t3acb ON t3(a,c,b); + INSERT INTO t3 SELECT w, 101-w, y FROM t1; + SELECT count(*), sum(a), sum(b), sum(c) FROM t3; + ANALYZE; +---- +stmt 0 ok +stmt 28 err 1 -1 59 no such table: main.t3 +stmt 59 err 1 -1 93 no such table: main.t3 +stmt 93 err 1 -1 130 no such table: main.t3 +stmt 130 err 1 -1 177 no such table: t3 +stmt 177 err 1 -1 230 no such table: t3 +stmt 230 ok +==== where-9.1 + + CREATE TABLE t5(x PRIMARY KEY); + SELECT * FROM t5 WHERE x<10; +---- +stmt 0 ok +stmt 36 err 1 -1 69 no such table: t5 +==== where-9.2 + + SELECT * FROM t5 WHERE x<10 ORDER BY x DESC; +---- +stmt 0 err 1 -1 49 no such table: t5 +==== where-9.3 + + SELECT * FROM t5 WHERE x=10; +---- +stmt 0 err 1 -1 33 no such table: t5 +==== where-10.1 + + SELECT 1 WHERE abs(random())<0 +---- +stmt 0 ok +==== where-11.1 + + CREATE TABLE t99(Dte INT, X INT); + DELETE FROM t99 WHERE (Dte = 2451337) OR (Dte = 2451339) OR + (Dte BETWEEN 2451345 AND 2451347) OR (Dte = 2451351) OR + (Dte BETWEEN 2451355 AND 2451356) OR (Dte = 2451358) OR + (Dte = 2451362) OR (Dte = 2451365) OR (Dte = 2451367) OR + (Dte BETWEEN 2451372 AND 2451376) OR (Dte BETWEEN 2451382 AND 2451384) OR + (Dte = 2451387) OR (Dte BETWEEN 2451389 AND 2451391) OR + (Dte BETWEEN 2451393 AND 2451395) OR (Dte = 2451400) OR + (Dte = 2451402) OR (Dte = 2451404) OR (Dte BETWEEN 2451416 AND 2451418) OR + (Dte = 2451422) OR (Dte = 2451426) OR (Dte BETWEEN 2451445 AND 2451446) OR + (Dte = 2451456) OR (Dte = 2451458) OR (Dte BETWEEN 2451465 AND 2451467) OR + (Dte BETWEEN 2451469 AND 2451471) OR (Dte = 2451474) OR + (Dte BETWEEN 2451477 AND 2451501) OR (Dte BETWEEN 2451503 AND 2451509) OR + (Dte BETWEEN 2451511 AND 2451514) OR (Dte BETWEEN 2451518 AND 2451521) OR + (Dte BETWEEN 2451523 AND 2451531) OR (Dte BETWEEN 2451533 AND 2451537) OR + (Dte BETWEEN 2451539 AND 2451544) OR (Dte BETWEEN 2451546 AND 2451551) OR + (Dte BETWEEN 2451553 AND 2451555) OR (Dte = 2451557) OR + (Dte BETWEEN 2451559 AND 2451561) OR (Dte = 2451563) OR + (Dte BETWEEN 2451565 AND 2451566) OR (Dte BETWEEN 2451569 AND 2451571) OR + (Dte = 2451573) OR (Dte = 2451575) OR (Dte = 2451577) OR (Dte = 2451581) OR + (Dte BETWEEN 2451583 AND 2451586) OR (Dte BETWEEN 2451588 AND 2451592) OR + (Dte BETWEEN 2451596 AND 2451598) OR (Dte = 2451600) OR + (Dte BETWEEN 2451602 AND 2451603) OR (Dte = 2451606) OR (Dte = 2451611); +---- +stmt 0 ok +stmt 37 err 1 -1 1608 no such table: t99 +==== where-15.1 + + CREATE TEMP TABLE t1 (a, b, c, d, e); + CREATE TEMP TABLE t2 (f); + SELECT t1.e AS alias FROM t2, t1 WHERE alias = 1 ; +---- +stmt 0 ok +stmt 42 ok +stmt 72 err 1 -1 127 no such table: t2 +==== where-16.1 + + CREATE TABLE a1(id INTEGER PRIMARY KEY, v); + CREATE TABLE a2(id INTEGER PRIMARY KEY, v); + INSERT INTO a1 VALUES(1, 'one'); + INSERT INTO a1 VALUES(2, 'two'); + INSERT INTO a2 VALUES(1, 'one'); + INSERT INTO a2 VALUES(2, 'two'); +---- +stmt 0 ok +stmt 48 ok +stmt 96 err 1 -1 133 no such table: a1 +stmt 133 err 1 -1 170 no such table: a1 +stmt 170 err 1 -1 207 no such table: a2 +stmt 207 err 1 -1 244 no such table: a2 +==== where-16.2 + + SELECT * FROM a2 CROSS JOIN a1 WHERE a1.id=1 AND a1.v='one'; +---- +stmt 0 err 1 -1 65 no such table: a2 +==== where-16.3 + + CREATE TEMP TABLE foo(idx INTEGER); + INSERT INTO foo VALUES(1); + INSERT INTO foo VALUES(1); + INSERT INTO foo VALUES(1); + INSERT INTO foo VALUES(2); + INSERT INTO foo VALUES(2); + CREATE TEMP TABLE bar(stuff INTEGER); + INSERT INTO bar VALUES(100); + INSERT INTO bar VALUES(200); + INSERT INTO bar VALUES(300); +---- +stmt 0 ok +stmt 40 err 1 -1 71 no such table: foo +stmt 71 err 1 -1 102 no such table: foo +stmt 102 err 1 -1 133 no such table: foo +stmt 133 err 1 -1 164 no such table: foo +stmt 164 err 1 -1 195 no such table: foo +stmt 195 ok +stmt 237 err 1 -1 270 no such table: bar +stmt 270 err 1 -1 303 no such table: bar +stmt 303 err 1 -1 336 no such table: bar +==== where-16.4 + + SELECT bar.RowID id FROM foo, bar WHERE foo.idx = bar.RowID AND id = 2; +---- +stmt 0 err 1 -1 76 no such table: foo +==== where-17.1 + + CREATE TABLE tbooking ( + id INTEGER PRIMARY KEY, + eventtype INTEGER NOT NULL + ); + INSERT INTO tbooking VALUES(42, 3); + INSERT INTO tbooking VALUES(43, 4); +---- +stmt 0 ok +stmt 98 err 1 -1 138 no such table: tbooking +stmt 138 err 1 -1 178 no such table: tbooking +==== where-17.2 + + SELECT a.id + FROM tbooking AS a + WHERE a.eventtype=3; +---- +stmt 0 err 1 -1 64 no such table: tbooking +==== where-17.3 + + SELECT a.id, (SELECT b.id FROM tbooking AS b WHERE b.id>a.id) + FROM tbooking AS a + WHERE a.eventtype=3; +---- +stmt 0 err 1 -1 114 no such table: tbooking +==== where-17.4 + + SELECT a.id, (SELECT b.id FROM tbooking AS b WHERE b.id>a.id) + FROM (SELECT 1.5 AS id) AS a +---- +stmt 0 err 1 -1 100 no such table: tbooking +==== where-17.5 + + CREATE TABLE tother(a, b); + INSERT INTO tother VALUES(1, 3.7); + SELECT id, a FROM tbooking, tother WHERE id>a; +---- +stmt 0 ok +stmt 31 err 1 -1 70 no such table: tother +stmt 70 err 1 -1 121 no such table: tbooking +==== where-18.1 + + CREATE TABLE t181(a); + CREATE TABLE t182(b,c); + INSERT INTO t181 VALUES(1); + SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY c IS NULL; +---- +stmt 0 ok +stmt 24 ok +stmt 50 err 1 -1 80 no such table: t181 +stmt 80 err 1 -1 152 no such table: t181 +==== where-18.1rj + + SELECT DISTINCT a FROM t182 RIGHT JOIN t181 ON a=b ORDER BY c IS NULL; +---- +stmt 0 err 1 -1 73 no such table: t182 +==== where-18.2 + + SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY +c; +---- +stmt 0 err 1 -1 65 no such table: t181 +==== where-18.3 + + SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY c; +---- +stmt 0 err 1 -1 64 no such table: t181 +==== where-18.3rj + + SELECT DISTINCT a FROM t182 RIGHT JOIN t181 ON a=b ORDER BY c; +---- +stmt 0 err 1 -1 65 no such table: t182 +==== where-18.4 + + INSERT INTO t181 VALUES(1),(1),(1),(1); + SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY +c; +---- +stmt 0 err 1 -1 42 no such table: t181 +stmt 42 err 1 -1 107 no such table: t181 +==== where-18.4rj + + SELECT DISTINCT a FROM t182 RIGHT JOIN t181 ON a=b ORDER BY +c; +---- +stmt 0 err 1 -1 66 no such table: t182 +==== where-18.5 + + INSERT INTO t181 VALUES(2); + SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY c IS NULL, +a; +---- +stmt 0 err 1 -1 30 no such table: t181 +stmt 30 err 1 -1 106 no such table: t181 +==== where-18.6 + + INSERT INTO t181 VALUES(2); + SELECT DISTINCT a FROM t181 LEFT JOIN t182 ON a=b ORDER BY +a, +c IS NULL; +---- +stmt 0 err 1 -1 30 no such table: t181 +stmt 30 err 1 -1 107 no such table: t181 +==== where-19.0 + + CREATE TABLE t191(a INT UNIQUE NOT NULL, b INT UNIQUE NOT NULL,c,d); + CREATE INDEX t191a ON t1(a); + CREATE INDEX t191b ON t1(b); + CREATE TABLE t192(x INTEGER PRIMARY KEY,y INT, z INT); + + EXPLAIN QUERY PLAN + SELECT t191.rowid FROM t192, t191 WHERE (a=y OR b=y) AND x=?1; +---- +stmt 0 ok +stmt 71 err 1 -1 102 no such table: main.t1 +stmt 102 err 1 -1 133 no such table: main.t1 +stmt 133 ok +stmt 190 err 1 -1 277 no such table: t192 +==== where-20.0 + + CREATE TABLE t201(x); + CREATE TABLE t202(y, z); + INSERT INTO t201 VALUES('key'); + INSERT INTO t202 VALUES('key', -1); + CREATE INDEX t202i ON t202(y, ifnull(z, 0)); + SELECT count(*) FROM t201 LEFT JOIN t202 ON (x=y) WHERE ifnull(z, 0) >=0; +---- +stmt 0 ok +stmt 24 ok +stmt 51 err 1 -1 85 no such table: t201 +stmt 85 err 1 -1 123 no such table: t202 +stmt 123 err 1 -1 170 no such table: main.t202 +stmt 170 err 1 -1 246 no such table: t201 +==== where-21.0 + + CREATE TABLE t12(a, b, c); + CREATE TABLE t13(x); + CREATE INDEX t12ab ON t12(b, a); + CREATE INDEX t12ac ON t12(c, a); + + INSERT INTO t12 VALUES(4, 0, 1); + INSERT INTO t12 VALUES(4, 1, 0); + INSERT INTO t12 VALUES(5, 0, 1); + INSERT INTO t12 VALUES(5, 1, 0); + + INSERT INTO t13 VALUES(1), (2), (3), (4); +---- +stmt 0 ok +stmt 29 ok +stmt 52 err 1 -1 87 no such table: main.t12 +stmt 87 err 1 -1 122 no such table: main.t12 +stmt 122 err 1 -1 158 no such table: t12 +stmt 158 err 1 -1 193 no such table: t12 +stmt 193 err 1 -1 228 no such table: t12 +stmt 228 err 1 -1 263 no such table: t12 +stmt 263 err 1 -1 308 no such table: t13 +==== where-21.1 + + SELECT * FROM t12 WHERE + a = (SELECT * FROM (SELECT count(*) FROM t13 LIMIT 5) ORDER BY 1 LIMIT 10) + AND (b=1 OR c=1); +---- +stmt 0 err 1 -1 125 no such table: t12 +==== where-22.1 + + CREATE TABLE t1(a INT); + CREATE INDEX t1a ON t1(a); + INSERT INTO t1(a) VALUES(NULL),(NULL),(42),(NULL),(NULL); + CREATE TABLE t2(dummy INT); + SELECT count(*) FROM t1 LEFT JOIN t2 ON a IS NOT NULL; +---- +stmt 0 ok +stmt 26 err 1 -1 55 no such table: main.t1 +stmt 55 err 1 -1 115 no such table: t1 +stmt 115 ok +stmt 145 err 1 -1 202 no such table: t1 +==== where-23.0 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY); + INSERT INTO t1(a) VALUES(1),(2),(3); + CREATE TABLE t2(x INTEGER PRIMARY KEY, y INT); + INSERT INTO t2(y) VALUES(2),(3); + SELECT * FROM t1, t2 WHERE a=y AND y=3; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 96 err 1 -1 135 no such table: t1 +stmt 135 ok +stmt 184 err 1 -1 219 no such table: t2 +stmt 219 err 1 -1 261 no such table: t1 +==== where-24.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(3, 'three'); + INSERT INTO t1 VALUES(4, 'four'); +---- +stmt 0 ok +stmt 45 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 115 no such table: t1 +stmt 115 err 1 -1 152 no such table: t1 +stmt 152 err 1 -1 188 no such table: t1 +==== where-25.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); + CREATE UNIQUE INDEX i1 ON t1(c); + INSERT INTO t1 VALUES(1, 'one', 'i'); + INSERT INTO t1 VALUES(2, 'two', 'ii'); + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b, c); + CREATE UNIQUE INDEX i2 ON t2(c); + INSERT INTO t2 VALUES(1, 'one', 'i'); + INSERT INTO t2 VALUES(2, 'two', 'ii'); + INSERT INTO t2 VALUES(3, 'three', 'iii'); + + PRAGMA writable_schema = 1; + UPDATE sqlite_schema SET rootpage = ( + SELECT rootpage FROM sqlite_schema WHERE name = 'i2' + ) WHERE name = 'i1'; +---- +stmt 0 ok +stmt 48 err 1 -1 83 no such table: main.t1 +stmt 83 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 164 no such table: t1 +stmt 164 ok +stmt 213 err 1 -1 248 no such table: main.t2 +stmt 248 err 1 -1 288 no such table: t2 +stmt 288 err 1 -1 329 no such table: t2 +stmt 329 err 1 -1 373 no such table: t2 +stmt 373 ok +stmt 404 ok +==== where-25.1 + + DELETE FROM t1 WHERE c='iii' +---- +stmt 0 err 1 -1 32 no such table: t1 +==== where-25.2 + + INSERT INTO t1 VALUES(4, 'four', 'iii') + ON CONFLICT(c) DO UPDATE SET b=NULL +---- +stmt 0 err 1 -1 84 no such table: t1 +==== where-25.3 + + CREATE TABLE t1(a PRIMARY KEY, b, c) WITHOUT ROWID; + CREATE UNIQUE INDEX i1 ON t1(c); + INSERT INTO t1 VALUES(1, 'one', 'i'); + INSERT INTO t1 VALUES(2, 'two', 'ii'); + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b, c); + CREATE UNIQUE INDEX i2 ON t2(c); + INSERT INTO t2 VALUES(1, 'one', 'i'); + INSERT INTO t2 VALUES(2, 'two', 'ii'); + INSERT INTO t2 VALUES(3, 'three', 'iii'); + + PRAGMA writable_schema = 1; + UPDATE sqlite_schema SET rootpage = ( + SELECT rootpage FROM sqlite_schema WHERE name = 'i2' + ) WHERE name = 'i1'; +---- +stmt 0 ok +stmt 54 err 1 -1 89 no such table: main.t1 +stmt 89 err 1 -1 129 no such table: t1 +stmt 129 err 1 -1 170 no such table: t1 +stmt 170 ok +stmt 219 err 1 -1 254 no such table: main.t2 +stmt 254 err 1 -1 294 no such table: t2 +stmt 294 err 1 -1 335 no such table: t2 +stmt 335 err 1 -1 379 no such table: t2 +stmt 379 ok +stmt 410 ok +==== where-25.4 + + SELECT * FROM t1 WHERE c='iii' +---- +stmt 0 err 1 -1 34 no such table: t1 +==== where-25.5 + + INSERT INTO t1 VALUES(4, 'four', 'iii') + ON CONFLICT(c) DO UPDATE SET b=NULL +---- +stmt 0 err 1 -1 84 no such table: t1 +==== where-26.1 + + CREATE TABLE t0(c0 INTEGER PRIMARY KEY, c1 TEXT); + INSERT INTO t0(c0, c1) VALUES (1, 'a'); + CREATE TABLE t1(c0 INT PRIMARY KEY, c1 TEXT); + INSERT INTO t1(c0, c1) VALUES (1, 'a'); + SELECT * FROM t0 WHERE '-1' BETWEEN 0 AND t0.c0; +---- +stmt 0 ok +stmt 52 err 1 -1 94 no such table: t0 +stmt 94 ok +stmt 142 err 1 -1 184 no such table: t1 +stmt 184 err 1 -1 235 no such table: t0 +==== where-26.2 + + SELECT * FROM t1 WHERE '-1' BETWEEN 0 AND t1.c0; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== where-26.3 + + SELECT * FROM t0 WHERE '-1'>=0 AND '-1'<=t0.c0; +---- +stmt 0 err 1 -1 50 no such table: t0 +==== where-26.4 + + SELECT * FROM t1 WHERE '-1'>=0 AND '-1'<=t1.c0; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== where-26.5 + + SELECT '-1' BETWEEN 0 AND t0.c0 FROM t0; +---- +stmt 0 err 1 -1 43 no such table: t0 +==== where-26.6 + + SELECT '-1' BETWEEN 0 AND t1.c0 FROM t1; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== where-26.7 + + SELECT '-1'>=0 AND '-1'<=t0.c0 FROM t0; +---- +stmt 0 err 1 -1 42 no such table: t0 +==== where-26.8 + + SELECT '-1'>=0 AND '-1'<=t1.c0 FROM t1; +---- +stmt 0 err 1 -1 42 no such table: t1 +==== where-27.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY); + INSERT INTO t1(a) VALUES(9223372036854775807); + SELECT 1 FROM t1 WHERE a>=(9223372036854775807+1); +---- +stmt 0 ok +stmt 44 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 150 no such table: t1 +==== where-27.2 + + SELECT a>=9223372036854775807+1 FROM t1; +---- +stmt 0 err 1 -1 45 no such table: t1 +==== where-28.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); + CREATE INDEX t1b ON t1(b,b,b,b,b,b,b,b,b,b,b,b,b); + INSERT INTO t1(a,b) VALUES(1,1),(15,2),(19,5); + UPDATE t1 SET b=999 WHERE a IN (SELECT 15) AND b IN (1,2); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 49 err 1 -1 102 no such table: main.t1 +stmt 102 err 1 -1 151 no such table: t1 +stmt 151 err 1 -1 212 no such table: t1 +stmt 212 err 1 -1 232 no such table: t1 +==== where-29.1 + + SELECT DISTINCT 'xyz' FROM pragma_cache_size + WHERE rowid OR abs(0) + ORDER BY + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1; +---- +stmt 0 ok diff --git a/parser/testdata/where2.metadata.json b/parser/testdata/where2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/where2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/where2.test b/parser/testdata/where2.test new file mode 100644 index 0000000..2e3c0c4 --- /dev/null +++ b/parser/testdata/where2.test @@ -0,0 +1,306 @@ +==== where2-2.5 + + -- random() is not optimized out + EXPLAIN SELECT * FROM x1, x2 WHERE x=1 ORDER BY random(); +---- +stmt 0 err 1 -1 95 no such table: x1 +==== where2-2.5b + + -- random() is not optimized out + EXPLAIN SELECT * FROM x1, x2 WHERE x=1 ORDER BY random(); +---- +stmt 0 err 1 -1 95 no such table: x1 +==== where2-2.6 + + -- other constant functions are optimized out + EXPLAIN SELECT * FROM x1, x2 WHERE x=1 ORDER BY abs(5); +---- +stmt 0 err 1 -1 106 no such table: x1 +==== where2-2.6b + + -- other constant functions are optimized out + EXPLAIN SELECT * FROM x1, x2 WHERE x=1 ORDER BY abs(5); +---- +stmt 0 err 1 -1 106 no such table: x1 +==== where2-8.1 + + SELECT * FROM t1 WHERE x IN (20,21) AND y IN (1,2) +---- +stmt 0 err 1 -1 58 no such table: t1 +==== where2-8.2 + + SELECT * FROM t1 WHERE x IN (1,2) AND y IN (-5,-6) +---- +stmt 0 err 1 -1 58 no such table: t1 +==== where2-8.3 + + SELECT w FROM t1 + WHERE x IN (SELECT x FROM tx WHERE rowid<0) + AND +y IN (SELECT y FROM tx WHERE rowid=1) +---- +stmt 0 err 1 -1 127 no such table: t1 +==== where2-8.4 + + SELECT w FROM t1 + WHERE x IN (SELECT x FROM tx WHERE rowid=1) + AND y IN (SELECT y FROM tx WHERE rowid<0) +---- +stmt 0 err 1 -1 126 no such table: t1 +==== where2-8.5 + + CREATE INDEX tx_xyz ON tx(x, y, z, w); + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 12 AND 14) +---- +stmt 0 err 1 -1 45 no such table: main.tx +stmt 45 err 1 -1 258 no such table: tx +==== where2-8.6 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 12 AND 14) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 213 no such table: tx +==== where2-8.7 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 12 AND 14) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 213 no such table: tx +==== where2-8.8 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 213 no such table: tx +==== where2-8.9 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 2 AND 4) +---- +stmt 0 err 1 -1 211 no such table: tx +==== where2-8.10 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 2 AND 4) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 211 no such table: tx +==== where2-8.11 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 2 AND 4) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 211 no such table: tx +==== where2-8.12 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN -4 AND -2) +---- +stmt 0 err 1 -1 213 no such table: tx +==== where2-8.13 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN -4 AND -2) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 213 no such table: tx +==== where2-8.14 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN -4 AND -2) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 213 no such table: tx +==== where2-8.15 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 200 AND 300) +---- +stmt 0 err 1 -1 215 no such table: tx +==== where2-8.16 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 200 AND 300) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 215 no such table: tx +==== where2-8.17 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE w BETWEEN 200 AND 300) + AND y IN (SELECT y FROM t1 WHERE w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 215 no such table: tx +==== where2-8.18 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE +w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE +w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE +w BETWEEN 200 AND 300) +---- +stmt 0 err 1 -1 218 no such table: tx +==== where2-8.19 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE +w BETWEEN 10 AND 20) + AND y IN (SELECT y FROM t1 WHERE +w BETWEEN 200 AND 300) + AND z IN (SELECT z FROM t1 WHERE +w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 218 no such table: tx +==== where2-8.20 + + SELECT w FROM tx + WHERE x IN (SELECT x FROM t1 WHERE +w BETWEEN 200 AND 300) + AND y IN (SELECT y FROM t1 WHERE +w BETWEEN 10 AND 20) + AND z IN (SELECT z FROM t1 WHERE +w BETWEEN 10 AND 20) +---- +stmt 0 err 1 -1 218 no such table: tx +==== where2-11.1 + + CREATE TABLE t11(a,b,c,d); + CREATE INDEX i11aba ON t11(a,b,a,c); -- column A occurs twice. + INSERT INTO t11 VALUES(1,2,3,4); + INSERT INTO t11 VALUES(5,6,7,8); + INSERT INTO t11 VALUES(1,2,9,10); + INSERT INTO t11 VALUES(5,11,12,13); + SELECT c FROM t11 WHERE a=1 AND b=2 ORDER BY c; +---- +stmt 0 ok +stmt 31 err 1 -1 72 no such table: main.t11 +stmt 72 err 1 -1 135 no such table: t11 +stmt 135 err 1 -1 172 no such table: t11 +stmt 172 err 1 -1 210 no such table: t11 +stmt 210 err 1 -1 250 no such table: t11 +stmt 250 err 1 -1 302 no such table: t11 +==== where2-11.2 + + CREATE INDEX i11cccccccc ON t11(c,c,c,c,c,c,c,c); -- repeated column + SELECT d FROM t11 WHERE c=9; +---- +stmt 0 err 1 -1 54 no such table: main.t11 +stmt 54 err 1 -1 106 no such table: t11 +==== where2-11.3 + + SELECT d FROM t11 WHERE c IN (1,2,3,4,5); +---- +stmt 0 err 1 -1 46 no such table: t11 +==== where2-11.4 + + SELECT d FROM t11 WHERE c=7 OR (a=1 AND b=2) ORDER BY d; +---- +stmt 0 err 1 -1 61 no such table: t11 +==== where2-13.1 + + CREATE TABLE t13(a,b); + CREATE INDEX t13a ON t13(a); + INSERT INTO t13 VALUES(4,5); + SELECT * FROM t13 WHERE (1=2 AND a=3) OR a=4; +---- +stmt 0 ok +stmt 25 err 1 -1 56 no such table: main.t13 +stmt 56 err 1 -1 87 no such table: t13 +stmt 87 err 1 -1 135 no such table: t13 +==== where2-14.1 + + CREATE TABLE t14a(x INTEGER PRIMARY KEY); + INSERT INTO t14a(x) VALUES(1),(2),(3),(4); + CREATE TABLE t14b(y INTEGER PRIMARY KEY); + INSERT INTO t14b(y) VALUES(1); + SELECT x FROM t14a WHERE x NOT IN (SELECT x FROM t14b); +---- +stmt 0 ok +stmt 44 err 1 -1 89 no such table: t14a +stmt 89 ok +stmt 133 err 1 -1 166 no such table: t14b +stmt 166 err 1 -1 224 no such table: t14a +==== where2-15.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY,b INT); + INSERT INTO t1 VALUES(12,34),(56,78),(90,12); + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x INT UNIQUE); + INSERT INTO t2 VALUES(78),(12); + SELECT a,b,quote(x),'|' + FROM t1 LEFT JOIN (SELECT x FROM t2) AS s1 ON t1.b=s1.x + ORDER BY a,EXISTS(SELECT 1 FROM t1 LEFT JOIN (SELECT x AS y FROM t2) AS s2 ON t1.b=s2.y),x; +---- +stmt 0 ok +stmt 27 ok +stmt 75 err 1 -1 123 no such table: t1 +stmt 123 ok +stmt 150 ok +stmt 183 err 1 -1 217 no such table: t2 +stmt 217 err 1 -1 398 no such table: t1 +==== where2-16.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); + CREATE TABLE t2(c INTEGER PRIMARY KEY, d INT); + CREATE TABLE t3(e INTEGER PRIMARY KEY, f INT); + CREATE TABLE t4(g INTEGER PRIMARY KEY, h INT); +---- +stmt 0 ok +stmt 49 ok +stmt 98 ok +stmt 147 ok +==== where2-16.2 + + EXPLAIN QUERY PLAN + SELECT * + FROM t1, t2 CROSS JOIN t3, t4 + WHERE t4.g=1 + AND t1.a=t4.h + AND t2.c=t1.b + AND t3.e=t2.d; +---- +stmt 0 err 1 -1 140 no such table: t1 +==== where2-16.2.dup1 + + EXPLAIN QUERY PLAN + SELECT * + FROM t1, t2 CROSS JOIN t3, t4 + WHERE t2.c=1 + AND t3.e=t2.d + AND t4.g=t3.f + AND t1.a=t4.h; +---- +stmt 0 err 1 -1 140 no such table: t1 +==== where2-17.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a TEXT); + INSERT INTO t1 VALUES('A'),('b'); + SELECT * FROM t1 WHERE (a='a' COLLATE nocase) OR a='b' ORDER BY +a; +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 90 no such table: t1 +stmt 90 err 1 -1 160 no such table: t1 +==== where2-17.1 + + CREATE INDEX t1_a ON t1(a); + SELECT * FROM t1 WHERE (a='a' COLLATE nocase) OR a='b' ORDER BY +a; +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 err 1 -1 100 no such table: t1 diff --git a/parser/testdata/where3.metadata.json b/parser/testdata/where3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/where3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/where3.test b/parser/testdata/where3.test new file mode 100644 index 0000000..6a75f24 --- /dev/null +++ b/parser/testdata/where3.test @@ -0,0 +1,229 @@ +==== where3-1.1 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(p, q); + CREATE TABLE t3(x, y); + + INSERT INTO t1 VALUES(111,'one'); + INSERT INTO t1 VALUES(222,'two'); + INSERT INTO t1 VALUES(333,'three'); + + INSERT INTO t2 VALUES(1,111); + INSERT INTO t2 VALUES(2,222); + INSERT INTO t2 VALUES(4,444); + CREATE INDEX t2i1 ON t2(p); + + INSERT INTO t3 VALUES(999,'nine'); + CREATE INDEX t3i1 ON t3(x); + + SELECT * FROM t1, t2 LEFT JOIN t3 ON q=x WHERE p=2 AND a=q; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 81 err 1 -1 124 no such table: t1 +stmt 124 err 1 -1 162 no such table: t1 +stmt 162 err 1 -1 202 no such table: t1 +stmt 202 err 1 -1 241 no such table: t2 +stmt 241 err 1 -1 275 no such table: t2 +stmt 275 err 1 -1 309 no such table: t2 +stmt 309 err 1 -1 341 no such table: main.t2 +stmt 341 err 1 -1 385 no such table: t3 +stmt 385 err 1 -1 417 no such table: main.t3 +stmt 417 err 1 -1 486 no such table: t1 +==== where3-1.2 + + CREATE TABLE parent1(parent1key, child1key, Child2key, child3key); + CREATE TABLE child1 ( child1key NVARCHAR, value NVARCHAR ); + CREATE UNIQUE INDEX PKIDXChild1 ON child1 ( child1key ); + CREATE TABLE child2 ( child2key NVARCHAR, value NVARCHAR ); + + INSERT INTO parent1(parent1key,child1key,child2key) + VALUES ( 1, 'C1.1', 'C2.1' ); + INSERT INTO child1 ( child1key, value ) VALUES ( 'C1.1', 'Value for C1.1' ); + INSERT INTO child2 ( child2key, value ) VALUES ( 'C2.1', 'Value for C2.1' ); + + INSERT INTO parent1 ( parent1key, child1key, child2key ) + VALUES ( 2, 'C1.2', 'C2.2' ); + INSERT INTO child2 ( child2key, value ) VALUES ( 'C2.2', 'Value for C2.2' ); + + INSERT INTO parent1 ( parent1key, child1key, child2key ) + VALUES ( 3, 'C1.3', 'C2.3' ); + INSERT INTO child1 ( child1key, value ) VALUES ( 'C1.3', 'Value for C1.3' ); + INSERT INTO child2 ( child2key, value ) VALUES ( 'C2.3', 'Value for C2.3' ); + + SELECT parent1.parent1key, child1.value, child2.value + FROM parent1 + LEFT OUTER JOIN child1 ON child1.child1key = parent1.child1key + INNER JOIN child2 ON child2.child2key = parent1.child2key; +---- +stmt 0 ok +stmt 71 ok +stmt 135 err 1 -1 196 no such table: main.child1 +stmt 196 ok +stmt 260 err 1 -1 354 no such table: parent1 +stmt 354 err 1 -1 435 no such table: child1 +stmt 435 err 1 -1 516 no such table: child2 +stmt 516 err 1 -1 615 no such table: parent1 +stmt 615 err 1 -1 696 no such table: child2 +stmt 696 err 1 -1 795 no such table: parent1 +stmt 795 err 1 -1 876 no such table: child1 +stmt 876 err 1 -1 957 no such table: child2 +stmt 957 err 1 -1 1163 no such table: parent1 +==== where3-3.0 + + CREATE TABLE t301(a INTEGER PRIMARY KEY,b,c); + CREATE INDEX t301c ON t301(c); + INSERT INTO t301 VALUES(1,2,3); + INSERT INTO t301 VALUES(2,2,3); + CREATE TABLE t302(x, y); + INSERT INTO t302 VALUES(4,5); + ANALYZE; +---- +stmt 0 ok +stmt 48 err 1 -1 81 no such table: main.t301 +stmt 81 err 1 -1 115 no such table: t301 +stmt 115 err 1 -1 149 no such table: t301 +stmt 149 ok +stmt 176 err 1 -1 208 no such table: t302 +stmt 208 ok +==== where3-3.2 + + SELECT * FROM t301 WHERE c=3 AND a IS NULL; +---- +stmt 0 err 1 -1 46 no such table: t301 +==== where3-3.3 + + SELECT * FROM t301 WHERE c=3 AND a IS NOT NULL; +---- +stmt 0 err 1 -1 50 no such table: t301 +==== where3-4.0 + + CREATE TABLE t400(a INTEGER PRIMARY KEY, b, c); + CREATE TABLE t401(p INTEGER PRIMARY KEY, q, r); + CREATE TABLE t402(x INTEGER PRIMARY KEY, y, z); + EXPLAIN QUERY PLAN + SELECT * FROM t400, t401, t402 WHERE t402.z GLOB 'abc*'; +---- +stmt 0 ok +stmt 50 ok +stmt 100 ok +stmt 150 err 1 -1 230 no such table: t400 +==== where3-4.1 + + EXPLAIN QUERY PLAN + SELECT * FROM t400, t401, t402 WHERE t401.r GLOB 'abc*'; +---- +stmt 0 err 1 -1 80 no such table: t400 +==== where3-4.2 + + EXPLAIN QUERY PLAN + SELECT * FROM t400, t401, t402 WHERE t400.c GLOB 'abc*'; +---- +stmt 0 err 1 -1 80 no such table: t400 +==== where3-5.0 + + CREATE TABLE aaa (id INTEGER PRIMARY KEY, type INTEGER, + fk INTEGER DEFAULT NULL, parent INTEGER, + position INTEGER, title LONGVARCHAR, + keyword_id INTEGER, folder_type TEXT, + dateAdded INTEGER, lastModified INTEGER); + CREATE INDEX aaa_111 ON aaa (fk, type); + CREATE INDEX aaa_222 ON aaa (parent, position); + CREATE INDEX aaa_333 ON aaa (fk, lastModified); + CREATE TABLE bbb (id INTEGER PRIMARY KEY, type INTEGER, + fk INTEGER DEFAULT NULL, parent INTEGER, + position INTEGER, title LONGVARCHAR, + keyword_id INTEGER, folder_type TEXT, + dateAdded INTEGER, lastModified INTEGER); + CREATE INDEX bbb_111 ON bbb (fk, type); + CREATE INDEX bbb_222 ON bbb (parent, position); + CREATE INDEX bbb_333 ON bbb (fk, lastModified); +---- +stmt 0 ok +stmt 296 err 1 -1 338 no such table: main.aaa +stmt 338 err 1 -1 388 no such table: main.aaa +stmt 388 err 1 -1 438 no such table: main.aaa +stmt 438 ok +stmt 734 err 1 -1 776 no such table: main.bbb +stmt 776 err 1 -1 826 no such table: main.bbb +stmt 826 err 1 -1 876 no such table: main.bbb +==== where3-7-setup + + CREATE TABLE t71(x1 INTEGER PRIMARY KEY, y1); + CREATE TABLE t72(x2 INTEGER PRIMARY KEY, y2); + CREATE TABLE t73(x3, y3); + CREATE TABLE t74(x4, y4); + INSERT INTO t71 VALUES(123,234); + INSERT INTO t72 VALUES(234,345); + INSERT INTO t73 VALUES(123,234); + INSERT INTO t74 VALUES(234,345); + INSERT INTO t74 VALUES(234,678); +---- +stmt 0 ok +stmt 48 ok +stmt 96 ok +stmt 124 ok +stmt 152 err 1 -1 187 no such table: t71 +stmt 187 err 1 -1 222 no such table: t72 +stmt 222 err 1 -1 257 no such table: t73 +stmt 257 err 1 -1 292 no such table: t74 +stmt 292 err 1 -1 327 no such table: t74 +==== where3-generated + + SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1; +---- +stmt 0 err 1 -1 47 no such table: t71 +==== where3-generated.dup1 + + SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 WHERE y2 IS NULL; +---- +stmt 0 err 1 -1 64 no such table: t71 +==== where3-generated.dup2 + + SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 WHERE y2 IS NOT NULL; +---- +stmt 0 err 1 -1 68 no such table: t71 +==== where3-generated.dup3 + + SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 AND y2 IS NULL; +---- +stmt 0 err 1 -1 62 no such table: t71 +==== where3-generated.dup4 + + SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 AND y2 IS NOT NULL; +---- +stmt 0 err 1 -1 66 no such table: t71 +==== where3-generated.dup5 + + SELECT x3 FROM t73 LEFT JOIN t72 ON x2=y3; +---- +stmt 0 err 1 -1 47 no such table: t73 +==== where3-generated.dup6 + + SELECT DISTINCT x3 FROM t73 LEFT JOIN t72 ON x2=y3; +---- +stmt 0 err 1 -1 56 no such table: t73 +==== where3-generated.dup7 + + SELECT x3 FROM t73 LEFT JOIN t74 ON x4=y3; +---- +stmt 0 err 1 -1 47 no such table: t73 +==== where3-generated.dup8 + + SELECT DISTINCT x3 FROM t73 LEFT JOIN t74 ON x4=y3; +---- +stmt 0 err 1 -1 56 no such table: t73 +==== where3-8.1 + + CREATE TABLE t1(a,b,c,d); INSERT INTO t1 VALUES(1,2,3,4); + CREATE TABLE t2(x,y); INSERT INTO t2 VALUES(3,4); + CREATE INDEX t2xy ON t2(x,y); + SELECT 1 FROM t1 JOIN t2 ON x=c AND y=d WHERE d>0; +---- +stmt 0 ok +stmt 28 err 1 -1 61 no such table: t1 +stmt 61 ok +stmt 85 err 1 -1 118 no such table: t2 +stmt 118 err 1 -1 150 no such table: main.t2 +stmt 150 err 1 -1 203 no such table: t1 diff --git a/parser/testdata/where4.metadata.json b/parser/testdata/where4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/where4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/where4.test b/parser/testdata/where4.test new file mode 100644 index 0000000..b875f4d --- /dev/null +++ b/parser/testdata/where4.test @@ -0,0 +1,178 @@ +==== where4-1.0 + + CREATE TABLE t1(w, x, y); + CREATE INDEX i1wxy ON t1(w,x,y); + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t1 VALUES(1,NULL,3); + INSERT INTO t1 VALUES('a','b','c'); + INSERT INTO t1 VALUES('a',NULL,'c'); + INSERT INTO t1 VALUES(X'78',x'79',x'7a'); + INSERT INTO t1 VALUES(X'78',NULL,X'7A'); + INSERT INTO t1 VALUES(NULL,NULL,NULL); + SELECT count(*) FROM t1; +---- +stmt 0 ok +stmt 30 err 1 -1 67 no such table: main.t1 +stmt 67 err 1 -1 101 no such table: t1 +stmt 101 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 178 no such table: t1 +stmt 178 err 1 -1 219 no such table: t1 +stmt 219 err 1 -1 265 no such table: t1 +stmt 265 err 1 -1 310 no such table: t1 +stmt 310 err 1 -1 353 no such table: t1 +stmt 353 err 1 -1 382 no such table: t1 +==== where4-2.1 +SELECT rowid FROM t1 ORDER BY w, x, y +---- +stmt 0 err 1 -1 38 no such table: t1 +==== where4-2.2 +SELECT rowid FROM t1 ORDER BY w DESC, x, y +---- +stmt 0 err 1 -1 43 no such table: t1 +==== where4-2.3 +SELECT rowid FROM t1 ORDER BY w, x DESC, y +---- +stmt 0 err 1 -1 43 no such table: t1 +==== where4-3.1 + + CREATE TABLE t2(a); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(2); + INSERT INTO t2 VALUES(3); + CREATE TABLE t3(x,y,UNIQUE("x",'y' ASC)); -- Goofy syntax allowed + INSERT INTO t3 VALUES(1,11); + INSERT INTO t3 VALUES(2,NULL); + + SELECT * FROM t2 LEFT JOIN t3 ON a=x WHERE +y IS NULL; +---- +stmt 0 ok +stmt 24 err 1 -1 54 no such table: t2 +stmt 54 err 1 -1 84 no such table: t2 +stmt 84 err 1 -1 114 no such table: t2 +stmt 114 ok +stmt 160 err 1 -1 217 no such table: t3 +stmt 217 err 1 -1 252 no such table: t3 +stmt 252 err 1 -1 313 no such table: t2 +==== where4-3.2 + + SELECT * FROM t2 LEFT JOIN t3 ON a=x WHERE y IS NULL; +---- +stmt 0 err 1 -1 58 no such table: t2 +==== where4-3.3 + + SELECT * FROM t2 LEFT JOIN t3 ON a=x WHERE NULL is y; +---- +stmt 0 err 1 -1 58 no such table: t2 +==== where4-4.1 + + CREATE TABLE test(col1 TEXT PRIMARY KEY); + INSERT INTO test(col1) values('a'); + INSERT INTO test(col1) values('b'); + INSERT INTO test(col1) values('c'); + CREATE TABLE test2(col1 TEXT PRIMARY KEY); + INSERT INTO test2(col1) values('a'); + INSERT INTO test2(col1) values('b'); + INSERT INTO test2(col1) values('c'); + SELECT * FROM test t1 LEFT OUTER JOIN test2 t2 ON t1.col1 = t2.col1 + WHERE +t2.col1 IS NULL; +---- +stmt 0 ok +stmt 46 err 1 -1 86 no such table: test +stmt 86 err 1 -1 126 no such table: test +stmt 126 err 1 -1 166 no such table: test +stmt 166 ok +stmt 213 err 1 -1 254 no such table: test2 +stmt 254 err 1 -1 295 no such table: test2 +stmt 295 err 1 -1 336 no such table: test2 +stmt 336 err 1 -1 438 no such table: test +==== where4-4.2 + + SELECT * FROM test t1 LEFT OUTER JOIN test2 t2 ON t1.col1 = t2.col1 + WHERE t2.col1 IS NULL; +---- +stmt 0 err 1 -1 101 no such table: test +==== where4-4.3 + + SELECT * FROM test t1 LEFT OUTER JOIN test2 t2 ON t1.col1 = t2.col1 + WHERE +t1.col1 IS NULL; +---- +stmt 0 err 1 -1 102 no such table: test +==== where4-4.4 + + SELECT * FROM test t1 LEFT OUTER JOIN test2 t2 ON t1.col1 = t2.col1 + WHERE t1.col1 IS NULL; +---- +stmt 0 err 1 -1 101 no such table: test +==== where4-5.2 + + INSERT INTO t4 VALUES(1,1,11); + INSERT INTO t4 VALUES(1,2,12); + INSERT INTO t4 VALUES(1,3,13); + INSERT INTO t4 VALUES(2,2,22); + SELECT rowid FROM t4 WHERE x IN (1,9,2,5) AND y IN (1,3,NULL,2) AND z!=13; +---- +stmt 0 err 1 -1 35 no such table: t4 +stmt 35 err 1 -1 70 no such table: t4 +stmt 70 err 1 -1 105 no such table: t4 +stmt 105 err 1 -1 140 no such table: t4 +stmt 140 err 1 -1 219 no such table: t4 +==== where4-5.3 + + SELECT rowid FROM t4 WHERE x IN (1,9,NULL,2) AND y IN (1,3,2) AND z!=13; +---- +stmt 0 err 1 -1 77 no such table: t4 +==== where4-6.2 + + SELECT rowid FROM t5 + WHERE a IN (1,NULL,2) AND b=2 AND c IN (1,2,3,4) AND d>0 +---- +stmt 0 err 1 -1 88 no such table: t5 +==== where4-7.1 + + BEGIN; + CREATE TABLE t8(a, b, c, d); + CREATE INDEX t8_i ON t8(a, b, c); + CREATE TABLE t7(i); + + INSERT INTO t7 VALUES(1); + INSERT INTO t7 SELECT i*2 FROM t7; + INSERT INTO t7 SELECT i*2 FROM t7; + INSERT INTO t7 SELECT i*2 FROM t7; + INSERT INTO t7 SELECT i*2 FROM t7; + INSERT INTO t7 SELECT i*2 FROM t7; + INSERT INTO t7 SELECT i*2 FROM t7; + + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 44 err 1 -1 82 no such table: main.t8 +stmt 82 ok +stmt 106 err 1 -1 137 no such table: t7 +stmt 137 err 1 -1 176 no such table: t7 +stmt 176 err 1 -1 215 no such table: t7 +stmt 215 err 1 -1 254 no such table: t7 +stmt 254 err 1 -1 293 no such table: t7 +stmt 293 err 1 -1 332 no such table: t7 +stmt 332 err 1 -1 371 no such table: t7 +stmt 371 ok +==== where4-7.2 + + SELECT sum(( + SELECT d FROM t8 WHERE a = i AND b = i AND c < NULL + )) FROM t7; +---- +stmt 0 err 1 -1 91 no such table: t7 +==== 8.1 + + CREATE TABLE u9(a UNIQUE, b); + INSERT INTO u9 VALUES(NULL, 1); + INSERT INTO u9 VALUES(NULL, 2); +---- +stmt 0 ok +stmt 32 err 1 -1 66 no such table: u9 +stmt 66 err 1 -1 100 no such table: u9 +==== 8.2 + SELECT * FROM u9 WHERE a IS NULL +---- +stmt 0 err 1 -1 34 no such table: u9 diff --git a/parser/testdata/where5.metadata.json b/parser/testdata/where5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/where5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/where5.test b/parser/testdata/where5.test new file mode 100644 index 0000000..3f76297 --- /dev/null +++ b/parser/testdata/where5.test @@ -0,0 +1,245 @@ +==== where5-1.1 + + SELECT * FROM t1 WHERE x<=0 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== where5-1.2 + + SELECT * FROM t1 WHERE x=0 +---- +stmt 0 err 1 -1 32 no such table: t1 +==== where5-1.3 + + SELECT * FROM t1 WHERE x>=0 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== where5-1.4 + + SELECT * FROM t1 WHERE x>0 +---- +stmt 0 err 1 -1 32 no such table: t1 +==== where5-1.5 + + SELECT * FROM t1 WHERE x<>0 +---- +stmt 0 err 1 -1 33 no such table: t1 +==== where5-1.6 + + SELECT * FROM t1 WHERE x=NULL +---- +stmt 0 err 1 -1 36 no such table: t1 +==== where5-1.10 + + SELECT * FROM t1 WHERE x>NULL +---- +stmt 0 err 1 -1 35 no such table: t1 +==== where5-1.11 + + SELECT * FROM t1 WHERE x!=NULL +---- +stmt 0 err 1 -1 36 no such table: t1 +==== where5-1.12 + + SELECT * FROM t1 WHERE x IS NULL +---- +stmt 0 err 1 -1 38 no such table: t1 +==== where5-1.13 + + SELECT * FROM t1 WHERE x IS NOT NULL +---- +stmt 0 err 1 -1 42 no such table: t1 +==== where5-2.0 + + SELECT * FROM t2 WHERE x<0 +---- +stmt 0 err 1 -1 32 no such table: t2 +==== where5-2.1 + + SELECT * FROM t2 WHERE x<=0 +---- +stmt 0 err 1 -1 33 no such table: t2 +==== where5-2.2 + + SELECT * FROM t2 WHERE x=0 +---- +stmt 0 err 1 -1 32 no such table: t2 +==== where5-2.3 + + SELECT * FROM t2 WHERE x>=0 +---- +stmt 0 err 1 -1 33 no such table: t2 +==== where5-2.4 + + SELECT * FROM t2 WHERE x>0 +---- +stmt 0 err 1 -1 32 no such table: t2 +==== where5-2.5 + + SELECT * FROM t2 WHERE x<>0 +---- +stmt 0 err 1 -1 33 no such table: t2 +==== where5-2.6 + + SELECT * FROM t2 WHERE x=NULL +---- +stmt 0 err 1 -1 36 no such table: t2 +==== where5-2.10 + + SELECT * FROM t2 WHERE x>NULL +---- +stmt 0 err 1 -1 35 no such table: t2 +==== where5-2.11 + + SELECT * FROM t2 WHERE x!=NULL +---- +stmt 0 err 1 -1 36 no such table: t2 +==== where5-2.12 + + SELECT * FROM t2 WHERE x IS NULL +---- +stmt 0 err 1 -1 38 no such table: t2 +==== where5-2.13 + + SELECT * FROM t2 WHERE x IS NOT NULL +---- +stmt 0 err 1 -1 42 no such table: t2 +==== where5-3.0 + + SELECT * FROM t3 WHERE x<0 +---- +stmt 0 err 1 -1 32 no such table: t3 +==== where5-3.1 + + SELECT * FROM t3 WHERE x<=0 +---- +stmt 0 err 1 -1 33 no such table: t3 +==== where5-3.2 + + SELECT * FROM t3 WHERE x=0 +---- +stmt 0 err 1 -1 32 no such table: t3 +==== where5-3.3 + + SELECT * FROM t3 WHERE x>=0 +---- +stmt 0 err 1 -1 33 no such table: t3 +==== where5-3.4 + + SELECT * FROM t3 WHERE x>0 +---- +stmt 0 err 1 -1 32 no such table: t3 +==== where5-3.5 + + SELECT * FROM t3 WHERE x<>0 +---- +stmt 0 err 1 -1 33 no such table: t3 +==== where5-3.6 + + SELECT * FROM t3 WHERE x=NULL +---- +stmt 0 err 1 -1 36 no such table: t3 +==== where5-3.10 + + SELECT * FROM t3 WHERE x>NULL +---- +stmt 0 err 1 -1 35 no such table: t3 +==== where5-3.11 + + SELECT * FROM t3 WHERE x!=NULL +---- +stmt 0 err 1 -1 36 no such table: t3 +==== where5-3.12 + + SELECT * FROM t3 WHERE x IS NULL +---- +stmt 0 err 1 -1 38 no such table: t3 +==== where5-3.13 + + SELECT * FROM t3 WHERE x IS NOT NULL +---- +stmt 0 err 1 -1 42 no such table: t3 +==== where5-4.0 + + SELECT xNULL FROM t3 +---- +stmt 0 err 1 -1 27 no such table: t3 +==== where5-4.4 + + SELECT x>=NULL FROM t3 +---- +stmt 0 err 1 -1 28 no such table: t3 +==== where5-4.5 + + SELECT x!=NULL FROM t3 +---- +stmt 0 err 1 -1 28 no such table: t3 +==== where5-4.6 + + SELECT x IS NULL FROM t3 +---- +stmt 0 err 1 -1 30 no such table: t3 +==== where5-4.7 + + SELECT x IS NOT NULL FROM t3 +---- +stmt 0 err 1 -1 34 no such table: t3 diff --git a/parser/testdata/where6.metadata.json b/parser/testdata/where6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/where6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/where6.test b/parser/testdata/where6.test new file mode 100644 index 0000000..7c9260f --- /dev/null +++ b/parser/testdata/where6.test @@ -0,0 +1,89 @@ +==== where6-1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c); + INSERT INTO t1 VALUES(1,3,1); + INSERT INTO t1 VALUES(2,4,2); + CREATE TABLE t2(x INTEGER PRIMARY KEY); + INSERT INTO t2 VALUES(3); + + SELECT * FROM t1 LEFT JOIN t2 ON b=x AND c=1; +---- +stmt 0 ok +stmt 48 err 1 -1 82 no such table: t1 +stmt 82 err 1 -1 116 no such table: t1 +stmt 116 ok +stmt 160 err 1 -1 190 no such table: t2 +stmt 190 err 1 -1 241 no such table: t1 +==== where6-1.2 + + SELECT * FROM t1 LEFT JOIN t2 ON x=b AND c=1; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== where6-1.3 + + SELECT * FROM t1 LEFT JOIN t2 ON x=b AND 1=c; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== where6-1.4 + + SELECT * FROM t1 LEFT JOIN t2 ON b=x AND 1=c; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== where6-1.11 + + SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE c=1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== where6-1.12 + + SELECT * FROM t1 LEFT JOIN t2 ON x=b WHERE c=1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== where6-1.13 + + SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE 1=c; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== where6-2.1 + + CREATE INDEX i1 ON t1(c); + + SELECT * FROM t1 LEFT JOIN t2 ON b=x AND c=1; +---- +stmt 0 err 1 -1 30 no such table: main.t1 +stmt 30 err 1 -1 81 no such table: t1 +==== where6-2.2 + + SELECT * FROM t1 LEFT JOIN t2 ON x=b AND c=1; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== where6-2.3 + + SELECT * FROM t1 LEFT JOIN t2 ON x=b AND 1=c; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== where6-2.4 + + SELECT * FROM t1 LEFT JOIN t2 ON b=x AND 1=c; +---- +stmt 0 err 1 -1 50 no such table: t1 +==== where6-2.11 + + SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE c=1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== where6-2.12 + + SELECT * FROM t1 LEFT JOIN t2 ON x=b WHERE c=1; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== where6-2.13 + + SELECT * FROM t1 LEFT JOIN t2 ON x=b WHERE 1=c; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== where6-2.14 + + SELECT * FROM t1 LEFT JOIN t2 ON b=x WHERE 1=c; +---- +stmt 0 err 1 -1 52 no such table: t1 diff --git a/parser/testdata/where7.metadata.json b/parser/testdata/where7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/where7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/where7.test b/parser/testdata/where7.test new file mode 100644 index 0000000..a62f074 --- /dev/null +++ b/parser/testdata/where7.test @@ -0,0 +1,118 @@ +==== where7-1.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c,d); + INSERT INTO t1 VALUES(1,2,3,4); + INSERT INTO t1 VALUES(2,3,4,5); + INSERT INTO t1 VALUES(3,4,6,8); + INSERT INTO t1 VALUES(4,5,10,15); + INSERT INTO t1 VALUES(5,10,100,1000); + CREATE INDEX t1b ON t1(b); + CREATE INDEX t1c ON t1(c); + SELECT * FROM t1; +---- +stmt 0 ok +stmt 50 err 1 -1 86 no such table: t1 +stmt 86 err 1 -1 122 no such table: t1 +stmt 122 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 196 no such table: t1 +stmt 196 err 1 -1 238 no such table: t1 +stmt 238 err 1 -1 269 no such table: main.t1 +stmt 269 err 1 -1 300 no such table: main.t1 +stmt 300 err 1 -1 322 no such table: t1 +==== where7-1.1.1 + + CREATE TABLE t(a); + CREATE INDEX ta ON t(a); + INSERT INTO t(a) VALUES(1),(2); + SELECT * FROM t ORDER BY a; + SELECT * FROM t WHERE a<2 OR a<3 ORDER BY a; + PRAGMA count_changes=ON; + DELETE FROM t WHERE a<2 OR a<3; + SELECT * FROM t; + PRAGMA count_changes=OFF; + DROP TABLE t; +---- +stmt 0 ok +stmt 23 err 1 -1 52 no such table: main.t +stmt 52 err 1 -1 88 no such table: t +stmt 88 err 1 -1 120 no such table: t +stmt 120 err 1 -1 169 no such table: t +stmt 169 ok +stmt 198 err 1 -1 234 no such table: t +stmt 234 err 1 -1 255 no such table: t +stmt 255 ok +stmt 285 err 1 -1 303 no such table: t +==== where7-1.1.1-noopt + + CREATE TABLE t(a); + CREATE INDEX ta ON t(a); + INSERT INTO t(a) VALUES(1),(2); + SELECT * FROM t ORDER BY a; + SELECT * FROM t WHERE a<2 OR a<3 ORDER BY a; + PRAGMA count_changes=ON; + DELETE FROM t WHERE a<2 OR a<3; + SELECT * FROM t; + PRAGMA count_changes=OFF; + DROP TABLE t; +---- +stmt 0 ok +stmt 23 err 1 -1 52 no such table: main.t +stmt 52 err 1 -1 88 no such table: t +stmt 88 err 1 -1 120 no such table: t +stmt 120 err 1 -1 169 no such table: t +stmt 169 ok +stmt 198 err 1 -1 234 no such table: t +stmt 234 err 1 -1 255 no such table: t +stmt 255 ok +stmt 285 err 1 -1 303 no such table: t +==== where7-3.1 + + CREATE TABLE t301 ( + c8 INTEGER PRIMARY KEY, + c6 INTEGER, + c4 INTEGER, + c7 INTEGER, + FOREIGN KEY (c4) REFERENCES series(c4) + ); + CREATE INDEX t301_c6 on t301(c6); + CREATE INDEX t301_c4 on t301(c4); + CREATE INDEX t301_c7 on t301(c7); + + CREATE TABLE t302 ( + c1 INTEGER PRIMARY KEY, + c8 INTEGER, + c5 INTEGER, + c3 INTEGER, + c2 INTEGER, + c4 INTEGER, + FOREIGN KEY (c8) REFERENCES t301(c8) + ); + CREATE INDEX t302_c3 on t302(c3); + CREATE INDEX t302_c8_c3 on t302(c8, c3); + CREATE INDEX t302_c5 on t302(c5); +---- +stmt 0 ok +stmt 156 err 1 -1 192 no such table: main.t301 +stmt 192 err 1 -1 228 no such table: main.t301 +stmt 228 err 1 -1 264 no such table: main.t301 +stmt 264 ok +stmt 457 err 1 -1 493 no such table: main.t302 +stmt 493 err 1 -1 536 no such table: main.t302 +stmt 536 err 1 -1 572 no such table: main.t302 +==== 4.1 + + CREATE TABLE t0(w); + INSERT INTO t0(w) VALUES(1); + CREATE TABLE t1(x INT, y INT PRIMARY KEY, z); + INSERT INTO t1 VALUES(0,111,222); + CREATE INDEX t1zxy ON t1(z,x,y); + SELECT y FROM t1 + WHERE (z=222 OR y=111) + AND (false OR EXISTS(SELECT 1 FROM t0 WHERE t1.y)); +---- +stmt 0 ok +stmt 22 err 1 -1 53 no such table: t0 +stmt 53 ok +stmt 101 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 173 no such table: main.t1 +stmt 173 err 1 -1 275 no such table: t1 diff --git a/parser/testdata/where8.metadata.json b/parser/testdata/where8.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/where8.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/where8.test b/parser/testdata/where8.test new file mode 100644 index 0000000..b7d9c04 --- /dev/null +++ b/parser/testdata/where8.test @@ -0,0 +1,305 @@ +==== where8-1.1 + + CREATE TABLE t1(a, b TEXT, c); + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); + + INSERT INTO t1 VALUES(1, 'one', 'I'); + INSERT INTO t1 VALUES(2, 'two', 'II'); + INSERT INTO t1 VALUES(3, 'three', 'III'); + INSERT INTO t1 VALUES(4, 'four', 'IV'); + INSERT INTO t1 VALUES(5, 'five', 'V'); + INSERT INTO t1 VALUES(6, 'six', 'VI'); + INSERT INTO t1 VALUES(7, 'seven', 'VII'); + INSERT INTO t1 VALUES(8, 'eight', 'VIII'); + INSERT INTO t1 VALUES(9, 'nine', 'IX'); + INSERT INTO t1 VALUES(10, 'ten', 'X'); +---- +stmt 0 ok +stmt 35 err 1 -1 65 no such table: main.t1 +stmt 65 err 1 -1 95 no such table: main.t1 +stmt 95 err 1 -1 141 no such table: t1 +stmt 141 err 1 -1 187 no such table: t1 +stmt 187 err 1 -1 234 no such table: t1 +stmt 234 err 1 -1 280 no such table: t1 +stmt 280 err 1 -1 325 no such table: t1 +stmt 325 err 1 -1 371 no such table: t1 +stmt 371 err 1 -1 418 no such table: t1 +stmt 418 err 1 -1 466 no such table: t1 +stmt 466 err 1 -1 512 no such table: t1 +stmt 512 err 1 -1 557 no such table: t1 +==== where8-2.1 + + CREATE VIRTUAL TABLE e1 USING echo(t1); + SELECT b FROM e1; +---- +stmt 0 ok +stmt 46 err 1 -1 70 no such table: e1 +==== where8-3.1 + + CREATE TABLE t2(d, e, f); + CREATE INDEX i3 ON t2(d); + CREATE INDEX i4 ON t2(e); + + INSERT INTO t2 VALUES(1, NULL, 'I'); + INSERT INTO t2 VALUES(2, 'four', 'IV'); + INSERT INTO t2 VALUES(3, NULL, 'IX'); + INSERT INTO t2 VALUES(4, 'sixteen', 'XVI'); + INSERT INTO t2 VALUES(5, NULL, 'XXV'); + INSERT INTO t2 VALUES(6, 'thirtysix', 'XXXVI'); + INSERT INTO t2 VALUES(7, 'fortynine', 'XLIX'); + INSERT INTO t2 VALUES(8, 'sixtyeight', 'LXIV'); + INSERT INTO t2 VALUES(9, 'eightyone', 'LXXXIX'); + INSERT INTO t2 VALUES(10, NULL, 'C'); +---- +stmt 0 ok +stmt 30 err 1 -1 60 no such table: main.t2 +stmt 60 err 1 -1 90 no such table: main.t2 +stmt 90 err 1 -1 141 no such table: t2 +stmt 141 err 1 -1 192 no such table: t2 +stmt 192 err 1 -1 243 no such table: t2 +stmt 243 err 1 -1 295 no such table: t2 +stmt 295 err 1 -1 347 no such table: t2 +stmt 347 err 1 -1 401 no such table: t2 +stmt 401 err 1 -1 454 no such table: t2 +stmt 454 err 1 -1 507 no such table: t2 +stmt 507 err 1 -1 562 no such table: t2 +stmt 562 err 1 -1 612 no such table: t2 +==== where8-4.1 + + BEGIN; + CREATE TABLE t3(a INTEGER, b REAL, c TEXT); + CREATE TABLE t4(f INTEGER, g REAL, h TEXT); + INSERT INTO t3 VALUES('hills', NULL, 1415926535); + INSERT INTO t3 VALUES('and', 'of', NULL); + INSERT INTO t3 VALUES('have', 'towering', 53594.08128); + INSERT INTO t3 VALUES(NULL, 45.64856692, 'Not'); + INSERT INTO t3 VALUES('same', 5028841971, NULL); + INSERT INTO t3 VALUES('onlookers', 'in', 8214808651); + INSERT INTO t3 VALUES(346.0348610, 2643383279, NULL); + INSERT INTO t3 VALUES(1415926535, 'of', 'are'); + INSERT INTO t3 VALUES(NULL, 0.4811174502, 'snapshots'); + INSERT INTO t3 VALUES('over', 'the', 8628034825); + INSERT INTO t3 VALUES(8628034825, 66.59334461, 2847564.823); + INSERT INTO t3 VALUES('onlookers', 'same', 'and'); + INSERT INTO t3 VALUES(NULL, 'light', 6939937510); + INSERT INTO t3 VALUES('from', 'their', 'viewed'); + INSERT INTO t3 VALUES('from', 'Alpine', 'snapshots'); + INSERT INTO t3 VALUES('from', 'sometimes', 'unalike'); + INSERT INTO t3 VALUES(1339.360726, 'light', 'have'); + INSERT INTO t3 VALUES(6939937510, 3282306647, 'other'); + INSERT INTO t3 VALUES('paintings', 8628034825, 'all'); + INSERT INTO t3 VALUES('paintings', NULL, 'same'); + INSERT INTO t3 VALUES('Alpine', 378678316.5, 'unalike'); + INSERT INTO t3 VALUES('Alpine', NULL, 'same'); + INSERT INTO t3 VALUES(1339.360726, 2847564.823, 'over'); + INSERT INTO t3 VALUES('villages', 'their', 'have'); + INSERT INTO t3 VALUES('unalike', 'remarkably', 'in'); + INSERT INTO t3 VALUES('and', 8979323846, 'and'); + INSERT INTO t3 VALUES(NULL, 1415926535, 'an'); + INSERT INTO t3 VALUES(271.2019091, 8628034825, 0.4811174502); + INSERT INTO t3 VALUES('all', 3421170679, 'the'); + INSERT INTO t3 VALUES('Not', 'and', 1415926535); + INSERT INTO t3 VALUES('of', 'other', 'light'); + INSERT INTO t3 VALUES(NULL, 'towering', 'Not'); + INSERT INTO t3 VALUES(346.0348610, NULL, 'other'); + INSERT INTO t3 VALUES('Not', 378678316.5, NULL); + INSERT INTO t3 VALUES('snapshots', 8628034825, 'of'); + INSERT INTO t3 VALUES(3282306647, 271.2019091, 'and'); + INSERT INTO t3 VALUES(50.58223172, 378678316.5, 5028841971); + INSERT INTO t3 VALUES(50.58223172, 2643383279, 'snapshots'); + INSERT INTO t3 VALUES('writings', 8979323846, 8979323846); + INSERT INTO t3 VALUES('onlookers', 'his', 'in'); + INSERT INTO t3 VALUES('unalike', 8628034825, 1339.360726); + INSERT INTO t3 VALUES('of', 'Alpine', 'and'); + INSERT INTO t3 VALUES('onlookers', NULL, 'from'); + INSERT INTO t3 VALUES('writings', 'it', 1339.360726); + INSERT INTO t3 VALUES('it', 'and', 'villages'); + INSERT INTO t3 VALUES('an', 'the', 'villages'); + INSERT INTO t3 VALUES(8214808651, 8214808651, 'same'); + INSERT INTO t3 VALUES(346.0348610, 'light', 1415926535); + INSERT INTO t3 VALUES(NULL, 8979323846, 'and'); + INSERT INTO t3 VALUES(NULL, 'same', 1339.360726); + INSERT INTO t4 VALUES('his', 'from', 'an'); + INSERT INTO t4 VALUES('snapshots', 'or', NULL); + INSERT INTO t4 VALUES('Alpine', 'have', 'it'); + INSERT INTO t4 VALUES('have', 'peak', 'remarkably'); + INSERT INTO t4 VALUES('hills', NULL, 'Not'); + INSERT INTO t4 VALUES('same', 'from', 2643383279); + INSERT INTO t4 VALUES('have', 'angle', 8628034825); + INSERT INTO t4 VALUES('sometimes', 'it', 2847564.823); + INSERT INTO t4 VALUES(0938446095, 'peak', 'of'); + INSERT INTO t4 VALUES(8628034825, 'and', 'same'); + INSERT INTO t4 VALUES('and', 271.2019091, 'their'); + INSERT INTO t4 VALUES('the', 'of', 'remarkably'); + INSERT INTO t4 VALUES('and', 3421170679, 1415926535); + INSERT INTO t4 VALUES('and', 'in', 'all'); + INSERT INTO t4 VALUES(378678316.5, 0.4811174502, 'snapshots'); + INSERT INTO t4 VALUES('it', 'are', 'have'); + INSERT INTO t4 VALUES('angle', 'snapshots', 378678316.5); + INSERT INTO t4 VALUES('from', 1415926535, 8628034825); + INSERT INTO t4 VALUES('snapshots', 'angle', 'have'); + INSERT INTO t4 VALUES(3421170679, 0938446095, 'Not'); + INSERT INTO t4 VALUES('peak', NULL, 0.4811174502); + INSERT INTO t4 VALUES('same', 'have', 'Alpine'); + INSERT INTO t4 VALUES(271.2019091, 66.59334461, 0938446095); + INSERT INTO t4 VALUES(8979323846, 'his', 'an'); + INSERT INTO t4 VALUES(NULL, 'and', 3282306647); + INSERT INTO t4 VALUES('remarkably', NULL, 'Not'); + INSERT INTO t4 VALUES('villages', 4543.266482, 'his'); + INSERT INTO t4 VALUES(2643383279, 'paintings', 'onlookers'); + INSERT INTO t4 VALUES(1339.360726, 'of', 'the'); + INSERT INTO t4 VALUES('peak', 'other', 'peak'); + INSERT INTO t4 VALUES('it', 'or', 8979323846); + INSERT INTO t4 VALUES('onlookers', 'Not', 'towering'); + INSERT INTO t4 VALUES(NULL, 'peak', 'Not'); + INSERT INTO t4 VALUES('of', 'have', 6939937510); + INSERT INTO t4 VALUES('light', 'hills', 0.4811174502); + INSERT INTO t4 VALUES(5028841971, 'Not', 'it'); + INSERT INTO t4 VALUES('and', 'Not', NULL); + INSERT INTO t4 VALUES(346.0348610, 'villages', NULL); + INSERT INTO t4 VALUES(8979323846, NULL, 6939937510); + INSERT INTO t4 VALUES('an', 'light', 'peak'); + INSERT INTO t4 VALUES(5028841971, 6939937510, 'light'); + INSERT INTO t4 VALUES('sometimes', 'peak', 'peak'); + INSERT INTO t4 VALUES(378678316.5, 5028841971, 'an'); + INSERT INTO t4 VALUES(378678316.5, 'his', 'Alpine'); + INSERT INTO t4 VALUES('from', 'of', 'all'); + INSERT INTO t4 VALUES(0938446095, 'same', NULL); + INSERT INTO t4 VALUES(0938446095, 'Alpine', NULL); + INSERT INTO t4 VALUES('his', 'of', 378678316.5); + INSERT INTO t4 VALUES(271.2019091, 'viewed', 3282306647); + INSERT INTO t4 VALUES('hills', 'all', 'peak'); + CREATE TABLE t5(s); + INSERT INTO t5 VALUES('tab-t5'); + CREATE TABLE t6(t); + INSERT INTO t6 VALUES(123456); + COMMIT; +---- +stmt 0 ok +stmt 11 ok +stmt 59 ok +stmt 107 err 1 -1 161 no such table: t3 +stmt 161 err 1 -1 207 no such table: t3 +stmt 207 err 1 -1 267 no such table: t3 +stmt 267 err 1 -1 320 no such table: t3 +stmt 320 err 1 -1 373 no such table: t3 +stmt 373 err 1 -1 431 no such table: t3 +stmt 431 err 1 -1 489 no such table: t3 +stmt 489 err 1 -1 541 no such table: t3 +stmt 541 err 1 -1 601 no such table: t3 +stmt 601 err 1 -1 655 no such table: t3 +stmt 655 err 1 -1 720 no such table: t3 +stmt 720 err 1 -1 775 no such table: t3 +stmt 775 err 1 -1 829 no such table: t3 +stmt 829 err 1 -1 883 no such table: t3 +stmt 883 err 1 -1 941 no such table: t3 +stmt 941 err 1 -1 1000 no such table: t3 +stmt 1000 err 1 -1 1057 no such table: t3 +stmt 1057 err 1 -1 1117 no such table: t3 +stmt 1117 err 1 -1 1176 no such table: t3 +stmt 1176 err 1 -1 1230 no such table: t3 +stmt 1230 err 1 -1 1291 no such table: t3 +stmt 1291 err 1 -1 1342 no such table: t3 +stmt 1342 err 1 -1 1403 no such table: t3 +stmt 1403 err 1 -1 1459 no such table: t3 +stmt 1459 err 1 -1 1517 no such table: t3 +stmt 1517 err 1 -1 1570 no such table: t3 +stmt 1570 err 1 -1 1621 no such table: t3 +stmt 1621 err 1 -1 1687 no such table: t3 +stmt 1687 err 1 -1 1740 no such table: t3 +stmt 1740 err 1 -1 1793 no such table: t3 +stmt 1793 err 1 -1 1844 no such table: t3 +stmt 1844 err 1 -1 1896 no such table: t3 +stmt 1896 err 1 -1 1951 no such table: t3 +stmt 1951 err 1 -1 2004 no such table: t3 +stmt 2004 err 1 -1 2062 no such table: t3 +stmt 2062 err 1 -1 2121 no such table: t3 +stmt 2121 err 1 -1 2186 no such table: t3 +stmt 2186 err 1 -1 2251 no such table: t3 +stmt 2251 err 1 -1 2314 no such table: t3 +stmt 2314 err 1 -1 2367 no such table: t3 +stmt 2367 err 1 -1 2430 no such table: t3 +stmt 2430 err 1 -1 2480 no such table: t3 +stmt 2480 err 1 -1 2534 no such table: t3 +stmt 2534 err 1 -1 2592 no such table: t3 +stmt 2592 err 1 -1 2644 no such table: t3 +stmt 2644 err 1 -1 2696 no such table: t3 +stmt 2696 err 1 -1 2755 no such table: t3 +stmt 2755 err 1 -1 2816 no such table: t3 +stmt 2816 err 1 -1 2868 no such table: t3 +stmt 2868 err 1 -1 2922 no such table: t3 +stmt 2922 err 1 -1 2970 no such table: t4 +stmt 2970 err 1 -1 3022 no such table: t4 +stmt 3022 err 1 -1 3073 no such table: t4 +stmt 3073 err 1 -1 3130 no such table: t4 +stmt 3130 err 1 -1 3179 no such table: t4 +stmt 3179 err 1 -1 3234 no such table: t4 +stmt 3234 err 1 -1 3290 no such table: t4 +stmt 3290 err 1 -1 3349 no such table: t4 +stmt 3349 err 1 -1 3402 no such table: t4 +stmt 3402 err 1 -1 3456 no such table: t4 +stmt 3456 err 1 -1 3512 no such table: t4 +stmt 3512 err 1 -1 3566 no such table: t4 +stmt 3566 err 1 -1 3624 no such table: t4 +stmt 3624 err 1 -1 3671 no such table: t4 +stmt 3671 err 1 -1 3738 no such table: t4 +stmt 3738 err 1 -1 3786 no such table: t4 +stmt 3786 err 1 -1 3848 no such table: t4 +stmt 3848 err 1 -1 3907 no such table: t4 +stmt 3907 err 1 -1 3964 no such table: t4 +stmt 3964 err 1 -1 4022 no such table: t4 +stmt 4022 err 1 -1 4077 no such table: t4 +stmt 4077 err 1 -1 4130 no such table: t4 +stmt 4130 err 1 -1 4195 no such table: t4 +stmt 4195 err 1 -1 4247 no such table: t4 +stmt 4247 err 1 -1 4299 no such table: t4 +stmt 4299 err 1 -1 4353 no such table: t4 +stmt 4353 err 1 -1 4412 no such table: t4 +stmt 4412 err 1 -1 4477 no such table: t4 +stmt 4477 err 1 -1 4530 no such table: t4 +stmt 4530 err 1 -1 4582 no such table: t4 +stmt 4582 err 1 -1 4633 no such table: t4 +stmt 4633 err 1 -1 4692 no such table: t4 +stmt 4692 err 1 -1 4740 no such table: t4 +stmt 4740 err 1 -1 4793 no such table: t4 +stmt 4793 err 1 -1 4852 no such table: t4 +stmt 4852 err 1 -1 4904 no such table: t4 +stmt 4904 err 1 -1 4951 no such table: t4 +stmt 4951 err 1 -1 5009 no such table: t4 +stmt 5009 err 1 -1 5066 no such table: t4 +stmt 5066 err 1 -1 5116 no such table: t4 +stmt 5116 err 1 -1 5176 no such table: t4 +stmt 5176 err 1 -1 5232 no such table: t4 +stmt 5232 err 1 -1 5290 no such table: t4 +stmt 5290 err 1 -1 5347 no such table: t4 +stmt 5347 err 1 -1 5395 no such table: t4 +stmt 5395 err 1 -1 5448 no such table: t4 +stmt 5448 err 1 -1 5503 no such table: t4 +stmt 5503 err 1 -1 5556 no such table: t4 +stmt 5556 err 1 -1 5618 no such table: t4 +stmt 5618 err 1 -1 5669 no such table: t4 +stmt 5669 ok +stmt 5693 err 1 -1 5730 no such table: t5 +stmt 5730 ok +stmt 5754 err 1 -1 5789 no such table: t6 +stmt 5789 ok +==== where8-5.2 + + SELECT * FROM tA WHERE + a=1 AND b=2 AND c=3 AND d=4 AND e=5 AND f=6 AND g=7 AND h=8 AND + i=1 AND j=2 AND k=3 AND l=4 AND m=5 AND + (p = 1 OR p = 2 OR p = 3) AND n=6 AND o=7 +---- +stmt 0 err 1 -1 192 no such table: tA +==== where8-6.1 + + CREATE TABLE t600(a PRIMARY KEY, b) WITHOUT rowid; + CREATE INDEX t600b ON t600(b); + INSERT INTO t600 VALUES('state','screen'),('exact','dolphin'),('green','mercury'); + SELECT a, b, '|' FROM t600 WHERE a=='state' OR b='mercury' ORDER BY +a; +---- +stmt 0 ok +stmt 53 err 1 -1 86 no such table: main.t600 +stmt 86 err 1 -1 171 no such table: t600 +stmt 171 err 1 -1 245 no such table: t600 diff --git a/parser/testdata/where9.metadata.json b/parser/testdata/where9.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/where9.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/where9.test b/parser/testdata/where9.test new file mode 100644 index 0000000..5e0901e --- /dev/null +++ b/parser/testdata/where9.test @@ -0,0 +1,148 @@ +==== where9-4.5 + + SELECT a FROM t1 INDEXED BY t1b + WHERE +b>1000 + AND (c=31031 OR d IS NULL) + ORDER BY +a +---- +stmt 0 err 1 -1 107 no such table: t1 +==== where9-4.7 + + SELECT a FROM t1 INDEXED BY t1c + WHERE b>1000 + AND (c=31031 OR d IS NULL) + ORDER BY +a +---- +stmt 0 err 1 -1 106 no such table: t1 +==== where9-4.8 + + SELECT a FROM t1 INDEXED BY t1d + WHERE b>1000 + AND (c=31031 OR d IS NULL) + ORDER BY +a +---- +stmt 0 err 1 -1 106 no such table: t1 +==== where9-6.8.1 + + DELETE FROM t1 INDEXED BY t1b + WHERE (+b IS NULL AND c NOT NULL AND d NOT NULL) + OR (b NOT NULL AND c IS NULL AND d NOT NULL) + OR (b NOT NULL AND c NOT NULL AND d IS NULL) +---- +stmt 0 err 1 -1 195 no such table: t1 +==== where9-6.8.2 + + UPDATE t1 INDEXED BY t1b SET a=a+100 + WHERE (+b IS NULL AND c NOT NULL AND d NOT NULL) + OR (b NOT NULL AND c IS NULL AND d NOT NULL) + OR (b NOT NULL AND c NOT NULL AND d IS NULL) +---- +stmt 0 err 1 -1 202 no such table: t1 +==== where9-6.8.3-stat4 + + UPDATE t1 INDEXED BY t1b SET a=a+100 + WHERE (b IS NULL AND c NOT NULL AND d NOT NULL) + OR (b NOT NULL AND c IS NULL AND d NOT NULL) + OR (b NOT NULL AND c NOT NULL AND d IS NULL) +---- +stmt 0 err 1 -1 209 no such table: t1 +==== where9-6.8.4-stat4 + + DELETE FROM t1 INDEXED BY t1b + WHERE (b IS NULL AND c NOT NULL AND d NOT NULL) + OR (b NOT NULL AND c IS NULL AND d NOT NULL) + OR (b NOT NULL AND c NOT NULL AND d IS NULL) +---- +stmt 0 err 1 -1 202 no such table: t1 +==== where9-6.8.3 + + UPDATE t1 INDEXED BY t1b SET a=a+100 + WHERE (b IS NULL AND c NOT NULL AND d NOT NULL) + OR (b NOT NULL AND c IS NULL AND d NOT NULL) + OR (b NOT NULL AND c NOT NULL AND d IS NULL) +---- +stmt 0 err 1 -1 209 no such table: t1 +==== where9-6.8.4 + + DELETE FROM t1 INDEXED BY t1b + WHERE (b IS NULL AND c NOT NULL AND d NOT NULL) + OR (b NOT NULL AND c IS NULL AND d NOT NULL) + OR (b NOT NULL AND c NOT NULL AND d IS NULL) +---- +stmt 0 err 1 -1 202 no such table: t1 +==== where9-7.0 + + CREATE TABLE t5(a, b, c, d, e, f, g, x, y); + INSERT INTO t5 + SELECT a, b, c, e, d, f, g, + CASE WHEN (a&1)!=0 THEN 'y' ELSE 'n' END, + CASE WHEN (a&2)!=0 THEN 'y' ELSE 'n' END + FROM t1; + CREATE INDEX t5xb ON t5(x, b); + CREATE INDEX t5xc ON t5(x, c); + CREATE INDEX t5xd ON t5(x, d); + CREATE INDEX t5xe ON t5(x, e); + CREATE INDEX t5xf ON t5(x, f); + CREATE INDEX t5xg ON t5(x, g); + CREATE INDEX t5yb ON t5(y, b); + CREATE INDEX t5yc ON t5(y, c); + CREATE INDEX t5yd ON t5(y, d); + CREATE INDEX t5ye ON t5(y, e); + CREATE INDEX t5yf ON t5(y, f); + CREATE INDEX t5yg ON t5(y, g); + CREATE TABLE t6(a, b, c, e, d, f, g, x, y); + INSERT INTO t6 SELECT * FROM t5; + ANALYZE t5; +---- +stmt 0 ok +stmt 48 err 1 -1 223 no such table: t5 +stmt 223 err 1 -1 258 no such table: main.t5 +stmt 258 err 1 -1 293 no such table: main.t5 +stmt 293 err 1 -1 328 no such table: main.t5 +stmt 328 err 1 -1 363 no such table: main.t5 +stmt 363 err 1 -1 398 no such table: main.t5 +stmt 398 err 1 -1 433 no such table: main.t5 +stmt 433 err 1 -1 468 no such table: main.t5 +stmt 468 err 1 -1 503 no such table: main.t5 +stmt 503 err 1 -1 538 no such table: main.t5 +stmt 538 err 1 -1 573 no such table: main.t5 +stmt 573 err 1 -1 608 no such table: main.t5 +stmt 608 err 1 -1 643 no such table: main.t5 +stmt 643 ok +stmt 691 err 1 -1 728 no such table: t6 +stmt 728 err 1 -1 744 no such table: t5 +==== where9-7.1.2 + + SELECT a FROM t6 WHERE x='y' AND (b=913 OR c=27027) ORDER BY a; +---- +stmt 0 err 1 -1 68 no such table: t6 +==== where9-7.1.4 + + SELECT a FROM t6 WHERE x='n' AND (b=913 OR c=27027) ORDER BY a; +---- +stmt 0 err 1 -1 68 no such table: t6 +==== where9-7.2.2 + + SELECT a FROM t6 WHERE (x='y' OR y='y') AND b=913 ORDER BY a; +---- +stmt 0 err 1 -1 66 no such table: t6 +==== where9-7.3.2 + + SELECT a FROM t6 WHERE (x='y' OR y='y') AND c=27027 ORDER BY a; +---- +stmt 0 err 1 -1 68 no such table: t6 +==== where9-11.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + CREATE TABLE t2_a(k INTEGER PRIMARY KEY, v TEXT); + CREATE TABLE t2_b(k INTEGER PRIMARY KEY, v TEXT); + CREATE VIEW t2 AS SELECT * FROM t2_a UNION ALL SELECT * FROM t2_b; + SELECT 1 FROM t1 JOIN t1 USING(a) + WHERE (a=1) + OR (a=2 AND (SELECT 4 FROM t2,(SELECT 5 FROM t1 ORDER BY a) WHERE a)); +---- +stmt 0 ok +stmt 50 ok +stmt 102 ok +stmt 154 ok +stmt 223 err 1 -1 351 no such table: t1 diff --git a/parser/testdata/whereA.metadata.json b/parser/testdata/whereA.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereA.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereA.test b/parser/testdata/whereA.test new file mode 100644 index 0000000..1522d1a --- /dev/null +++ b/parser/testdata/whereA.test @@ -0,0 +1,44 @@ +==== whereA-1.8 + + SELECT * FROM t1 WHERE b=2 AND a IS NULL; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== whereA-1.9 + + SELECT * FROM t1 WHERE b=2 AND a IS NOT NULL; +---- +stmt 0 err 1 -1 48 no such table: t1 +==== whereA-5.1 + + PRAGMA reverse_unordered_selects=on; + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,2); + CREATE INDEX t1b ON t1(b); + SELECT a FROM t1 WHERE b=-99 OR b>1; +---- +stmt 0 ok +stmt 39 ok +stmt 66 ok +stmt 90 err 1 -1 120 no such table: t1 +stmt 120 err 1 -1 149 no such table: main.t1 +stmt 149 err 1 -1 188 no such table: t1 +==== whereA-6.1 + + CREATE TABLE t1(a, b); + CREATE INDEX t1aa ON t1(a,a); + INSERT INTO t1 VALUES(1,2); + ANALYZE; + UPDATE sqlite_stat1 SET stat='27 3 3' WHERE idx='t1aa'; + ANALYZE sqlite_schema; + PRAGMA reverse_unordered_selects (1) ; + SELECT a FROM t1 WHERE a=1 OR a=2; +---- +stmt 0 ok +stmt 25 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 87 no such table: t1 +stmt 87 ok +stmt 98 err 1 -1 156 no such table: sqlite_stat1 +stmt 156 ok +stmt 181 ok +stmt 222 err 1 -1 260 no such table: t1 diff --git a/parser/testdata/whereC.metadata.json b/parser/testdata/whereC.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereC.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereC.test b/parser/testdata/whereC.test new file mode 100644 index 0000000..8efdb93 --- /dev/null +++ b/parser/testdata/whereC.test @@ -0,0 +1,53 @@ +==== 1.0 + + CREATE TABLE t1(i INTEGER PRIMARY KEY, a, b INTEGER); + + INSERT INTO t1 VALUES(1, 1, 1); + INSERT INTO t1 VALUES(2, 1, 1); + INSERT INTO t1 VALUES(3, 1, 2); + INSERT INTO t1 VALUES(4, 1, 2); + INSERT INTO t1 VALUES(5, 1, 2); + INSERT INTO t1 VALUES(6, 1, 3); + INSERT INTO t1 VALUES(7, 1, 3); + + INSERT INTO t1 VALUES(8, 2, 1); + INSERT INTO t1 VALUES(9, 2, 1); + INSERT INTO t1 VALUES(10, 2, 2); + INSERT INTO t1 VALUES(11, 2, 2); + INSERT INTO t1 VALUES(12, 2, 2); + INSERT INTO t1 VALUES(13, 2, 3); + INSERT INTO t1 VALUES(14, 2, 3); + + INSERT INTO t1 VALUES(15, 2, 1); + INSERT INTO t1 VALUES(16, 2, 1); + INSERT INTO t1 VALUES(17, 2, 2); + INSERT INTO t1 VALUES(18, 2, 2); + INSERT INTO t1 VALUES(19, 2, 2); + INSERT INTO t1 VALUES(20, 2, 3); + INSERT INTO t1 VALUES(21, 2, 3); + + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 56 err 1 -1 91 no such table: t1 +stmt 91 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 159 no such table: t1 +stmt 159 err 1 -1 193 no such table: t1 +stmt 193 err 1 -1 227 no such table: t1 +stmt 227 err 1 -1 261 no such table: t1 +stmt 261 err 1 -1 295 no such table: t1 +stmt 295 err 1 -1 330 no such table: t1 +stmt 330 err 1 -1 364 no such table: t1 +stmt 364 err 1 -1 399 no such table: t1 +stmt 399 err 1 -1 434 no such table: t1 +stmt 434 err 1 -1 469 no such table: t1 +stmt 469 err 1 -1 504 no such table: t1 +stmt 504 err 1 -1 539 no such table: t1 +stmt 539 err 1 -1 575 no such table: t1 +stmt 575 err 1 -1 610 no such table: t1 +stmt 610 err 1 -1 645 no such table: t1 +stmt 645 err 1 -1 680 no such table: t1 +stmt 680 err 1 -1 715 no such table: t1 +stmt 715 err 1 -1 750 no such table: t1 +stmt 750 err 1 -1 785 no such table: t1 +stmt 785 err 1 -1 817 no such table: main.t1 diff --git a/parser/testdata/whereD.metadata.json b/parser/testdata/whereD.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereD.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereD.test b/parser/testdata/whereD.test new file mode 100644 index 0000000..60ed7f6 --- /dev/null +++ b/parser/testdata/whereD.test @@ -0,0 +1,395 @@ +==== 1.1 + + CREATE TABLE t(i,j,k,m,n); + CREATE INDEX ijk ON t(i,j,k); + CREATE INDEX jmn ON t(j,m,n); + + INSERT INTO t VALUES(3, 3, 'three', 3, 'tres'); + INSERT INTO t VALUES(2, 2, 'two', 2, 'dos'); + INSERT INTO t VALUES(1, 1, 'one', 1, 'uno'); + INSERT INTO t VALUES(4, 4, 'four', 4, 'cuatro'); +---- +stmt 0 ok +stmt 29 err 1 -1 61 no such table: main.t +stmt 61 err 1 -1 93 no such table: main.t +stmt 93 err 1 -1 144 no such table: t +stmt 144 err 1 -1 191 no such table: t +stmt 191 err 1 -1 238 no such table: t +stmt 238 err 1 -1 289 no such table: t +==== 1.2 + + SELECT k FROM t WHERE (i=1 AND j=1) OR (i=2 AND j=2); +---- +stmt 0 err 1 -1 56 no such table: t +==== 1.3 + + SELECT k FROM t WHERE (i=1 AND j=1) OR (+i=2 AND j=2); +---- +stmt 0 err 1 -1 57 no such table: t +==== 1.4 + + SELECT n FROM t WHERE (i=1 AND j=1) OR (i=2 AND j=2); +---- +stmt 0 err 1 -1 56 no such table: t +==== 1.5 + + SELECT k, n FROM t WHERE (i=1 AND j=1) OR (i=2 AND j=2); +---- +stmt 0 err 1 -1 59 no such table: t +==== 1.6 + + SELECT k FROM t WHERE (i=1 AND j=1) OR (i=2 AND j=2) OR (i=3 AND j=3); +---- +stmt 0 err 1 -1 73 no such table: t +==== 1.7 + + SELECT n FROM t WHERE (i=1 AND j=1) OR (i=2 AND j=2) OR (i=3 AND j=3); +---- +stmt 0 err 1 -1 73 no such table: t +==== 1.8 + + SELECT k FROM t WHERE (i=1 AND j=1) OR (j=2 AND m=2); +---- +stmt 0 err 1 -1 56 no such table: t +==== 1.9 + + SELECT k FROM t WHERE (i=1 AND j=1) OR (i=2 AND j=2) OR (j=3 AND m=3); +---- +stmt 0 err 1 -1 73 no such table: t +==== 1.10 + + SELECT n FROM t WHERE (i=1 AND j=1) OR (i=2 AND j=2) OR (j=3 AND m=3); +---- +stmt 0 err 1 -1 73 no such table: t +==== 1.11 + + SELECT k FROM t WHERE (i=1 AND j=1) OR (j=2 AND m=2) OR (i=3 AND j=3); +---- +stmt 0 err 1 -1 73 no such table: t +==== 1.12 + + SELECT n FROM t WHERE (i=1 AND j=1) OR (j=2 AND m=2) OR (i=3 AND j=3); +---- +stmt 0 err 1 -1 73 no such table: t +==== 1.13 + + SELECT k FROM t WHERE (j=1 AND m=1) OR (i=2 AND j=2) OR (i=3 AND j=3); +---- +stmt 0 err 1 -1 73 no such table: t +==== 1.14 + + SELECT k FROM t WHERE (i=1 AND j=1) OR (j=2 AND i=2) OR (i=3 AND j=3); +---- +stmt 0 err 1 -1 73 no such table: t +==== 1.15 + + SELECT k FROM t WHERE (i=1 AND j=2) OR (i=2 AND j=1) OR (i=3 AND j=4); +---- +stmt 0 err 1 -1 73 no such table: t +==== 1.16 + + SELECT k FROM t WHERE (i=1 AND (j=1 or j=2)) OR (i=3 AND j=3); +---- +stmt 0 err 1 -1 65 no such table: t +==== 2.0 + + CREATE TABLE t1(a,b,c,d); + CREATE INDEX t1b ON t1(b); + CREATE INDEX t1c ON t1(c); + CREATE INDEX t1d ON t1(d); + CREATE TABLE t2(x,y); + CREATE INDEX t2y ON t2(y); + + INSERT INTO t1 VALUES(1,2,3,4); + INSERT INTO t1 VALUES(5,6,7,8); + INSERT INTO t2 VALUES(1,2); + INSERT INTO t2 VALUES(2,7); + INSERT INTO t2 VALUES(3,4); +---- +stmt 0 ok +stmt 28 err 1 -1 57 no such table: main.t1 +stmt 57 err 1 -1 86 no such table: main.t1 +stmt 86 err 1 -1 115 no such table: main.t1 +stmt 115 ok +stmt 139 err 1 -1 168 no such table: main.t2 +stmt 168 err 1 -1 205 no such table: t1 +stmt 205 err 1 -1 239 no such table: t1 +stmt 239 err 1 -1 269 no such table: t2 +stmt 269 err 1 -1 299 no such table: t2 +stmt 299 err 1 -1 329 no such table: t2 +==== 2.1 + + SELECT a, x FROM t1 JOIN t2 ON +y=d OR x=7 ORDER BY a, x; +---- +stmt 0 err 1 -1 60 no such table: t1 +==== 2.2 + + SELECT a, x FROM t1 JOIN t2 ON y=d OR x=7 ORDER BY a, x; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 3.0 + + CREATE TABLE t3(a, b, c); + CREATE UNIQUE INDEX i3 ON t3(a, b); + INSERT INTO t3 VALUES(1, 'one', 'i'); + INSERT INTO t3 VALUES(3, 'three', 'iii'); + INSERT INTO t3 VALUES(6, 'six', 'vi'); + INSERT INTO t3 VALUES(2, 'two', 'ii'); + INSERT INTO t3 VALUES(4, 'four', 'iv'); + INSERT INTO t3 VALUES(5, 'five', 'v'); + + CREATE TABLE t4(x PRIMARY KEY, y); + INSERT INTO t4 VALUES('a', 'one'); + INSERT INTO t4 VALUES('b', 'two'); +---- +stmt 0 ok +stmt 28 err 1 -1 66 no such table: main.t3 +stmt 66 err 1 -1 106 no such table: t3 +stmt 106 err 1 -1 150 no such table: t3 +stmt 150 err 1 -1 191 no such table: t3 +stmt 191 err 1 -1 232 no such table: t3 +stmt 232 err 1 -1 274 no such table: t3 +stmt 274 err 1 -1 315 no such table: t3 +stmt 315 ok +stmt 353 err 1 -1 390 no such table: t4 +stmt 390 err 1 -1 427 no such table: t4 +==== 4.4 + + CREATE TABLE t44(a INTEGER, b INTEGER); + INSERT INTO t44 VALUES(1,2); + INSERT INTO t44 VALUES(3,4); + SELECT * + FROM t44 AS x + LEFT JOIN (SELECT a AS c, b AS d FROM t44) AS y ON a=c + WHERE d=4 OR d IS NULL; +---- +stmt 0 ok +stmt 42 err 1 -1 73 no such table: t44 +stmt 73 err 1 -1 104 no such table: t44 +stmt 104 err 1 -1 222 no such table: t44 +==== 4.5 + + SELECT * + FROM t44 AS x + LEFT JOIN (SELECT a AS c, b AS d FROM t44) AS y ON a=c + WHERE d=4 OR d IS NULL + ORDER BY a; +---- +stmt 0 err 1 -1 132 no such table: t44 +==== 4.6 + + CREATE TABLE t46(c INTEGER, d INTEGER); + INSERT INTO t46 SELECT a, b FROM t44; + SELECT * FROM t44 LEFT JOIN t46 ON a=c + WHERE d=4 OR d IS NULL; +---- +stmt 0 ok +stmt 42 err 1 -1 82 no such table: t46 +stmt 82 err 1 -1 150 no such table: t44 +==== 4.7 + + SELECT * FROM t44 LEFT JOIN t46 ON a=c + WHERE d=4 OR d IS NULL + ORDER BY a; +---- +stmt 0 err 1 -1 82 no such table: t44 +==== 5.1 + + DROP TABLE IF EXISTS t; + CREATE TABLE t(c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17); + CREATE INDEX tc0 ON t(c0); + CREATE INDEX tc1 ON t(c1); + CREATE INDEX tc2 ON t(c2); + CREATE INDEX tc3 ON t(c3); + CREATE INDEX tc4 ON t(c4); + CREATE INDEX tc5 ON t(c5); + CREATE INDEX tc6 ON t(c6); + CREATE INDEX tc7 ON t(c7); + CREATE INDEX tc8 ON t(c8); + CREATE INDEX tc9 ON t(c9); + CREATE INDEX tc10 ON t(c10); + CREATE INDEX tc11 ON t(c11); + CREATE INDEX tc12 ON t(c12); + CREATE INDEX tc13 ON t(c13); + CREATE INDEX tc14 ON t(c14); + CREATE INDEX tc15 ON t(c15); + CREATE INDEX tc16 ON t(c16); + CREATE INDEX tc17 ON t(c17); + + INSERT INTO t(c0, c16) VALUES (1,1); + + SELECT * FROM t WHERE + c0=1 or c1=1 or c2=1 or c3=1 or + c4=1 or c5=1 or c6=1 or c7=1 or + c8=1 or c9=1 or c10=1 or c11=1 or + c12=1 or c13=1 or c14=1 or c15=1 or + c16=1 or c17=1; +---- +stmt 0 ok +stmt 26 ok +stmt 107 err 1 -1 136 no such table: main.t +stmt 136 err 1 -1 165 no such table: main.t +stmt 165 err 1 -1 194 no such table: main.t +stmt 194 err 1 -1 223 no such table: main.t +stmt 223 err 1 -1 252 no such table: main.t +stmt 252 err 1 -1 281 no such table: main.t +stmt 281 err 1 -1 310 no such table: main.t +stmt 310 err 1 -1 339 no such table: main.t +stmt 339 err 1 -1 368 no such table: main.t +stmt 368 err 1 -1 397 no such table: main.t +stmt 397 err 1 -1 428 no such table: main.t +stmt 428 err 1 -1 459 no such table: main.t +stmt 459 err 1 -1 490 no such table: main.t +stmt 490 err 1 -1 521 no such table: main.t +stmt 521 err 1 -1 552 no such table: main.t +stmt 552 err 1 -1 583 no such table: main.t +stmt 583 err 1 -1 614 no such table: main.t +stmt 614 err 1 -1 645 no such table: main.t +stmt 645 err 1 -1 687 no such table: t +stmt 687 err 1 -1 891 no such table: t +==== 5.2 + + DELETE FROM t; + INSERT INTO t(c0,c17) VALUES(1,1); + SELECT * FROM t WHERE + c0=1 or c1=1 or c2=1 or c3=1 or + c4=1 or c5=1 or c6=1 or c7=1 or + c8=1 or c9=1 or c10=1 or c11=1 or + c12=1 or c13=1 or c14=1 or c15=1 or + c16=1 or c17=1; +---- +stmt 0 err 1 -1 17 no such table: t +stmt 17 err 1 -1 54 no such table: t +stmt 54 err 1 -1 255 no such table: t +==== 5.3 + + DELETE FROM t; + INSERT INTO t(c0,c15) VALUES(1,1); + SELECT * FROM t WHERE + c0=1 or c1=1 or c2=1 or c3=1 or + c4=1 or c5=1 or c6=1 or c7=1 or + c8=1 or c9=1 or c10=1 or c11=1 or + c12=1 or c13=1 or c14=1 or c15=1 or + c16=1 or c17=1; +---- +stmt 0 err 1 -1 17 no such table: t +stmt 17 err 1 -1 54 no such table: t +stmt 54 err 1 -1 255 no such table: t +==== 6.1 + + CREATE TABLE x1(a, b, c, d, e); + CREATE INDEX x1a ON x1(a); + CREATE INDEX x1bc ON x1(b, c); + CREATE INDEX x1cd ON x1(c, d); + + INSERT INTO x1 VALUES(1, 2, 3, 4, 'A'); + INSERT INTO x1 VALUES(5, 6, 7, 8, 'B'); + INSERT INTO x1 VALUES(9, 10, 11, 12, 'C'); + INSERT INTO x1 VALUES(13, 14, 15, 16, 'D'); +---- +stmt 0 ok +stmt 34 err 1 -1 64 no such table: main.x1 +stmt 64 err 1 -1 97 no such table: main.x1 +stmt 97 err 1 -1 130 no such table: main.x1 +stmt 130 err 1 -1 173 no such table: x1 +stmt 173 err 1 -1 215 no such table: x1 +stmt 215 err 1 -1 260 no such table: x1 +stmt 260 err 1 -1 306 no such table: x1 +==== 6.7 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a UNIQUE, b UNIQUE); + INSERT INTO t1(a,b) VALUES(null,2); + CREATE VIEW t2 AS SELECT * FROM t1 WHERE b<10 OR a<7 ORDER BY b; + SELECT t1.* FROM t1 LEFT JOIN t2 ON abs(t1.a)=abs(t2.b); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 93 err 1 -1 131 no such table: t1 +stmt 131 ok +stmt 198 err 1 -1 257 no such table: t1 +==== 7.0 + + CREATE TABLE y1(a, b); + CREATE TABLE y2(x, y); + CREATE INDEX y2xy ON y2(x, y); + INSERT INTO y1 VALUES(1, 1); + INSERT INTO y2 VALUES(3, 3); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 83 no such table: main.y2 +stmt 83 err 1 -1 114 no such table: y1 +stmt 114 err 1 -1 145 no such table: y2 +==== 7.1 + + SELECT * FROM y1 LEFT JOIN y2 ON ((x=1 AND y=b) OR (x=2 AND y=b)) +---- +stmt 0 err 1 -1 69 no such table: y1 +==== 7.3 + + CREATE TABLE foo (Id INTEGER PRIMARY KEY, fa INTEGER, fb INTEGER); + CREATE TABLE bar (Id INTEGER PRIMARY KEY, ba INTEGER, bb INTEGER); + + INSERT INTO foo VALUES(1, 1, 1); + INSERT INTO foo VALUES(2, 1, 2); + INSERT INTO foo VALUES(3, 1, 3); + INSERT INTO foo VALUES(4, 1, 4); + INSERT INTO foo VALUES(5, 1, 5); + INSERT INTO foo VALUES(6, 1, 6); + INSERT INTO foo VALUES(7, 1, 7); + INSERT INTO foo VALUES(8, 1, 8); + INSERT INTO foo VALUES(9, 1, 9); + + INSERT INTO bar VALUES(NULL, 1, 1); + INSERT INTO bar VALUES(NULL, 2, 2); + INSERT INTO bar VALUES(NULL, 3, 3); + INSERT INTO bar VALUES(NULL, 1, 4); + INSERT INTO bar VALUES(NULL, 2, 5); + INSERT INTO bar VALUES(NULL, 3, 6); + INSERT INTO bar VALUES(NULL, 1, 7); + INSERT INTO bar VALUES(NULL, 2, 8); + INSERT INTO bar VALUES(NULL, 3, 9); +---- +stmt 0 ok +stmt 69 ok +stmt 139 err 1 -1 175 no such table: foo +stmt 175 err 1 -1 210 no such table: foo +stmt 210 err 1 -1 245 no such table: foo +stmt 245 err 1 -1 280 no such table: foo +stmt 280 err 1 -1 315 no such table: foo +stmt 315 err 1 -1 350 no such table: foo +stmt 350 err 1 -1 385 no such table: foo +stmt 385 err 1 -1 420 no such table: foo +stmt 420 err 1 -1 455 no such table: foo +stmt 455 err 1 -1 494 no such table: bar +stmt 494 err 1 -1 532 no such table: bar +stmt 532 err 1 -1 570 no such table: bar +stmt 570 err 1 -1 608 no such table: bar +stmt 608 err 1 -1 646 no such table: bar +stmt 646 err 1 -1 684 no such table: bar +stmt 684 err 1 -1 722 no such table: bar +stmt 722 err 1 -1 760 no such table: bar +stmt 760 err 1 -1 798 no such table: bar +==== 7.4 + + SELECT + bar.Id, bar.ba, bar.bb, foo.fb + FROM foo LEFT JOIN bar + ON (bar.ba = 1 AND bar.bb = foo.fb) + OR (bar.ba = 5 AND bar.bb = foo.fb); +---- +stmt 0 err 1 -1 167 no such table: foo +==== 7.5 + + CREATE INDEX idx_bar ON bar(ba, bb); + SELECT + bar.Id, bar.ba, bar.bb, foo.fb + FROM foo LEFT JOIN bar + ON (bar.ba = 1 AND bar.bb = foo.fb) + OR (bar.ba = 5 AND bar.bb = foo.fb); +---- +stmt 0 err 1 -1 39 no such table: main.bar +stmt 39 err 1 -1 206 no such table: foo diff --git a/parser/testdata/whereE.metadata.json b/parser/testdata/whereE.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereE.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereE.test b/parser/testdata/whereE.test new file mode 100644 index 0000000..91bb275 --- /dev/null +++ b/parser/testdata/whereE.test @@ -0,0 +1,74 @@ +==== 1.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,10), (2,20), (3,30), (2,22), (3, 33); + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 SELECT * FROM t1; + ALTER TABLE t1 ADD COLUMN c; + UPDATE t1 SET c=a*rowid+10000; + CREATE INDEX t1ab ON t1(a,b); + + CREATE TABLE t2(x,y); + INSERT INTO t2 VALUES(4,44),(5,55),(6,66),(7,77); + INSERT INTO t2 SELECT x+4, (x+4)*11 FROM t2; + INSERT INTO t2 SELECT x+8, (x+8)*11 FROM t2; + INSERT INTO t2 SELECT x+16, (x+16)*11 FROM t2; + INSERT INTO t2 SELECT x+32, (x+32)*11 FROM t2; + INSERT INTO t2 SELECT x+64, (x+32)*11 FROM t2; + ALTER TABLE t2 ADD COLUMN z; + UPDATE t2 SET z=2; + CREATE UNIQUE INDEX t2zx ON t2(z,x); + + EXPLAIN QUERY PLAN SELECT x FROM t1, t2 WHERE a=z AND c=x; +---- +stmt 0 ok +stmt 24 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 123 no such table: t1 +stmt 123 err 1 -1 158 no such table: t1 +stmt 158 err 1 -1 193 no such table: t1 +stmt 193 err 1 -1 228 no such table: t1 +stmt 228 err 1 -1 263 no such table: t1 +stmt 263 err 1 -1 298 no such table: t1 +stmt 298 err 1 -1 333 no such table: t1 +stmt 333 err 1 -1 368 no such table: t1 +stmt 368 err 1 -1 403 no such table: t1 +stmt 403 err 1 -1 438 no such table: t1 +stmt 438 err 1 -1 469 no such table: t1 +stmt 469 err 1 -1 502 no such table: t1 +stmt 502 err 1 -1 534 no such table: main.t1 +stmt 534 ok +stmt 561 err 1 -1 613 no such table: t2 +stmt 613 err 1 -1 660 no such table: t2 +stmt 660 err 1 -1 707 no such table: t2 +stmt 707 err 1 -1 756 no such table: t2 +stmt 756 err 1 -1 805 no such table: t2 +stmt 805 err 1 -1 854 no such table: t2 +stmt 854 err 1 -1 885 no such table: t2 +stmt 885 err 1 -1 906 no such table: t2 +stmt 906 err 1 -1 945 no such table: main.t2 +stmt 945 err 1 -1 1007 no such table: t1 +==== 1.2 + + EXPLAIN QUERY PLAN SELECT x FROM t2, t1 WHERE a=z AND c=x; +---- +stmt 0 err 1 -1 61 no such table: t2 +==== 1.3 + + ANALYZE; + EXPLAIN QUERY PLAN SELECT x FROM t1, t2 WHERE a=z AND c=x; +---- +stmt 0 ok +stmt 11 err 1 -1 72 no such table: t1 +==== 1.4 + + EXPLAIN QUERY PLAN SELECT x FROM t2, t1 WHERE a=z AND c=x; +---- +stmt 0 err 1 -1 61 no such table: t2 diff --git a/parser/testdata/whereF.metadata.json b/parser/testdata/whereF.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereF.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereF.test b/parser/testdata/whereF.test new file mode 100644 index 0000000..b04a13f --- /dev/null +++ b/parser/testdata/whereF.test @@ -0,0 +1,201 @@ +==== 1.0 + + PRAGMA automatic_index = 0; + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(d, e, f); + CREATE UNIQUE INDEX i1 ON t1(a); + CREATE UNIQUE INDEX i2 ON t2(d); +---- +stmt 0 ok +stmt 30 ok +stmt 58 ok +stmt 86 err 1 -1 121 no such table: main.t1 +stmt 121 err 1 -1 156 no such table: main.t2 +==== 2.0 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(d, e, f); + + CREATE UNIQUE INDEX i1 ON t1(a); + CREATE UNIQUE INDEX i2 ON t1(b); + CREATE UNIQUE INDEX i3 ON t2(d); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 ok +stmt 62 ok +stmt 90 err 1 -1 126 no such table: main.t1 +stmt 126 err 1 -1 161 no such table: main.t1 +stmt 161 err 1 -1 196 no such table: main.t2 +==== 3.0 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(d, e, f); + + CREATE UNIQUE INDEX i1 ON t1(a, b); + CREATE INDEX i2 ON t2(d); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 err 1 -1 34 no such table: t2 +stmt 34 ok +stmt 62 ok +stmt 90 err 1 -1 129 no such table: main.t1 +stmt 129 err 1 -1 157 no such table: main.t2 +==== 4.0 + + CREATE TABLE t4(a,b,c,d,e, PRIMARY KEY(a,b,c)); + CREATE INDEX t4adc ON t4(a,d,c); + CREATE UNIQUE INDEX t4aebc ON t4(a,e,b,c); + EXPLAIN QUERY PLAN SELECT rowid FROM t4 WHERE a=? AND b=?; +---- +stmt 0 ok +stmt 50 err 1 -1 85 no such table: main.t4 +stmt 85 err 1 -1 130 no such table: main.t4 +stmt 130 err 1 -1 191 no such table: t4 +==== 5.0 + + CREATE TABLE t1(f1); + CREATE TABLE t2(f2); + CREATE INDEX t2f ON t2(f2); + + INSERT INTO t1 VALUES(-1); + INSERT INTO t1 VALUES(-1); + INSERT INTO t1 VALUES(-1); + INSERT INTO t1 VALUES(-1); + + WITH w(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM w WHERE i<1000 + ) + INSERT INTO t2 SELECT -1 FROM w; +---- +stmt 0 ok +stmt 23 ok +stmt 46 err 1 -1 76 no such table: main.t2 +stmt 76 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 135 no such table: t1 +stmt 135 err 1 -1 164 no such table: t1 +stmt 164 err 1 -1 193 no such table: t1 +stmt 193 err 1 -1 304 no such table: t2 +==== 5.1 + + SELECT count(*) FROM t1, t2 WHERE t2.rowid = +t1.rowid +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 5.3 + + SELECT count(*) FROM t1, t2 WHERE ( + t2.rowid = +t1.rowid OR t2.f2 = t1.f1 + ) +---- +stmt 0 err 1 -1 85 no such table: t1 +==== 5.5 + + SELECT count(*) FROM t1, t2 WHERE ( + t2.rowid = +t1.rowid OR (t2.f2 = t1.f1 AND t1.f1!=-1) + ) +---- +stmt 0 err 1 -1 101 no such table: t1 +==== 6.1 + + CREATE TABLE t6(x); + SELECT * FROM t6 WHERE 1 IN (SELECT value FROM json_each(x)); +---- +stmt 0 ok +stmt 24 err 1 -1 90 no such table: t6 +==== 7.1 + + DROP TABLE IF EXISTS cd; + CREATE TABLE cd ( cdid INTEGER PRIMARY KEY NOT NULL, genreid integer ); + CREATE INDEX cd_idx_genreid ON cd (genreid); + INSERT INTO cd ( cdid, genreid ) VALUES + ( 1, 1 ), + ( 2, NULL ), + ( 3, NULL ), + ( 4, NULL ), + ( 5, NULL ); + + SELECT cdid + FROM cd me + WHERE 2 > ( + SELECT COUNT( * ) + FROM cd rownum__emulation + WHERE + ( + me.genreid IS NOT NULL + AND + rownum__emulation.genreid IS NULL + ) + OR + ( + me.genreid IS NOT NULL + AND + rownum__emulation.genreid IS NOT NULL + AND + rownum__emulation.genreid < me.genreid + ) + OR + ( + ( me.genreid = rownum__emulation.genreid OR ( me.genreid IS NULL + AND rownum__emulation.genreid IS NULL ) ) + AND + rownum__emulation.cdid > me.cdid + ) + ); +---- +stmt 0 ok +stmt 27 ok +stmt 101 err 1 -1 148 no such table: main.cd +stmt 148 err 1 -1 361 no such table: cd +stmt 361 err 1 -1 957 no such table: cd +==== 7.2 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1(a,b) VALUES(1,1); + CREATE TABLE t2(aa INTEGER PRIMARY KEY, bb); + INSERT INTO t2(aa,bb) VALUES(1,1),(2,NULL),(3,NULL); + SELECT ( + SELECT COUNT(*) FROM t2 + WHERE ( t1.b IS NOT NULL AND t2.bb IS NULL ) + OR ( t2.bb < t1.b ) + OR ( t1.b IS t2.bb AND t2.aa > t1.a ) + ) + FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 99 err 1 -1 134 no such table: t1 +stmt 134 ok +stmt 181 err 1 -1 236 no such table: t2 +stmt 236 err 1 -1 418 no such table: t1 +==== 7.3 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t1(a,b) VALUES(1,'abcxyz'); + CREATE TABLE t2(aa INTEGER PRIMARY KEY, bb TEXT); + INSERT INTO t2(aa,bb) VALUES(1,'abc'),(2,'wxyz'),(3,'xyz'); + CREATE INDEX t2bb ON t2(bb); + EXPLAIN SELECT ( + SELECT COUNT(*) FROM t2 + WHERE ( t1.b GLOB 'a*z' AND t2.bb='xyz' ) + OR ( t2.bb = t1.b ) + OR ( t2.aa = t1.a ) + ) + FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 104 err 1 -1 146 no such table: t1 +stmt 146 ok +stmt 198 err 1 -1 260 no such table: t2 +stmt 260 err 1 -1 291 no such table: main.t2 +stmt 291 err 1 -1 460 no such table: t1 diff --git a/parser/testdata/whereG.metadata.json b/parser/testdata/whereG.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereG.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereG.test b/parser/testdata/whereG.test new file mode 100644 index 0000000..c8f3255 --- /dev/null +++ b/parser/testdata/whereG.test @@ -0,0 +1,388 @@ +==== whereG-1.0 + + CREATE TABLE composer( + cid INTEGER PRIMARY KEY, + cname TEXT + ); + CREATE TABLE album( + aid INTEGER PRIMARY KEY, + aname TEXT + ); + CREATE TABLE track( + tid INTEGER PRIMARY KEY, + cid INTEGER REFERENCES composer, + aid INTEGER REFERENCES album, + title TEXT + ); + CREATE INDEX track_i1 ON track(cid); + CREATE INDEX track_i2 ON track(aid); + INSERT INTO composer VALUES(1, 'W. A. Mozart'); + INSERT INTO composer VALUES(2, 'Beethoven'); + INSERT INTO composer VALUES(3, 'Thomas Tallis'); + INSERT INTO composer VALUES(4, 'Joseph Hayden'); + INSERT INTO composer VALUES(5, 'Thomas Weelkes'); + INSERT INTO composer VALUES(6, 'J. S. Bach'); + INSERT INTO composer VALUES(7, 'Orlando Gibbons'); + INSERT INTO composer VALUES(8, 'Josquin des Prés'); + INSERT INTO composer VALUES(9, 'Byrd'); + INSERT INTO composer VALUES(10, 'Francis Poulenc'); + INSERT INTO composer VALUES(11, 'Mendelsshon'); + INSERT INTO composer VALUES(12, 'Zoltán Kodály'); + INSERT INTO composer VALUES(13, 'Handel'); + INSERT INTO album VALUES(100, 'Kodály: Missa Brevis'); + INSERT INTO album VALUES(101, 'Messiah'); + INSERT INTO album VALUES(102, 'Missa Brevis in D-, K.65'); + INSERT INTO album VALUES(103, 'The complete English anthems'); + INSERT INTO album VALUES(104, 'Mass in B Minor, BWV 232'); + INSERT INTO track VALUES(10005, 12, 100, 'Sanctus'); + INSERT INTO track VALUES(10007, 12, 100, 'Agnus Dei'); + INSERT INTO track VALUES(10115, 13, 101, 'Surely He Hath Borne Our Griefs'); + INSERT INTO track VALUES(10129, 13, 101, 'Since By Man Came Death'); + INSERT INTO track VALUES(10206, 1, 102, 'Agnus Dei'); + INSERT INTO track VALUES(10301, 3, 103, 'If Ye Love Me'); + INSERT INTO track VALUES(10402, 6, 104, 'Domine Deus'); + INSERT INTO track VALUES(10403, 6, 104, 'Qui tollis'); +---- +stmt 0 ok +stmt 74 ok +stmt 145 ok +stmt 287 err 1 -1 326 no such table: main.track +stmt 326 err 1 -1 365 no such table: main.track +stmt 365 err 1 -1 415 no such table: composer +stmt 415 err 1 -1 462 no such table: composer +stmt 462 err 1 -1 513 no such table: composer +stmt 513 err 1 -1 564 no such table: composer +stmt 564 err 1 -1 616 no such table: composer +stmt 616 err 1 -1 664 no such table: composer +stmt 664 err 1 -1 717 no such table: composer +stmt 717 err 1 -1 772 no such table: composer +stmt 772 err 1 -1 814 no such table: composer +stmt 814 err 1 -1 868 no such table: composer +stmt 868 err 1 -1 918 no such table: composer +stmt 918 err 1 -1 972 no such table: composer +stmt 972 err 1 -1 1017 no such table: composer +stmt 1017 err 1 -1 1075 no such table: album +stmt 1075 err 1 -1 1119 no such table: album +stmt 1119 err 1 -1 1180 no such table: album +stmt 1180 err 1 -1 1245 no such table: album +stmt 1245 err 1 -1 1306 no such table: album +stmt 1306 err 1 -1 1361 no such table: track +stmt 1361 err 1 -1 1418 no such table: track +stmt 1418 err 1 -1 1497 no such table: track +stmt 1497 err 1 -1 1568 no such table: track +stmt 1568 err 1 -1 1624 no such table: track +stmt 1624 err 1 -1 1684 no such table: track +stmt 1684 err 1 -1 1742 no such table: track +stmt 1742 err 1 -1 1799 no such table: track +==== whereG-1.2 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE unlikely(cname LIKE '%bach%') + AND composer.cid=track.cid + AND album.aid=track.aid; +---- +stmt 0 err 1 -1 157 no such table: album +==== whereG-1.4 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE likelihood(cname LIKE '%bach%', 0.5) + AND composer.cid=track.cid + AND album.aid=track.aid; +---- +stmt 0 err 1 -1 164 no such table: album +==== whereG-1.6 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE cname LIKE '%bach%' + AND composer.cid=track.cid + AND album.aid=track.aid; +---- +stmt 0 err 1 -1 147 no such table: album +==== whereG-1.8 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE cname LIKE '%bach%' + AND unlikely(composer.cid=track.cid) + AND unlikely(album.aid=track.aid); +---- +stmt 0 err 1 -1 167 no such table: album +==== whereG-2.1 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE likelihood(cname LIKE '%bach%', -0.01) + AND composer.cid=track.cid + AND album.aid=track.aid; +---- +stmt 0 err 1 -1 176 no such table: album +==== whereG-2.2 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE likelihood(cname LIKE '%bach%', 1.01) + AND composer.cid=track.cid + AND album.aid=track.aid; +---- +stmt 0 err 1 -1 175 no such table: album +==== whereG-2.3 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE likelihood(cname LIKE '%bach%', track.cid) + AND composer.cid=track.cid + AND album.aid=track.aid; +---- +stmt 0 err 1 -1 180 no such table: album +==== whereG-3.0 + + CREATE TABLE a(a1 PRIMARY KEY, a2); + CREATE TABLE b(b1 PRIMARY KEY, b2); +---- +stmt 0 ok +stmt 38 ok +==== whereG-4.0 + + CREATE TABLE t4(x); + INSERT INTO t4 VALUES('right'),('wrong'); + SELECT DISTINCT x + FROM (SELECT x FROM t4 GROUP BY x) + WHERE x='right' + ORDER BY x; +---- +stmt 0 ok +stmt 22 err 1 -1 66 no such table: t4 +stmt 66 err 1 -1 158 no such table: t4 +==== 5.1 + + CREATE TABLE t1(a, b, c); + CREATE INDEX i1 ON t1(a, b); +---- +stmt 0 ok +stmt 28 err 1 -1 59 no such table: main.t1 +==== 6.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(i int, x, y, z); + INSERT INTO t1 VALUES (1,1,1,1), (2,2,2,2), (3,3,3,3), (4,4,4,4); + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(i int, bool char); + INSERT INTO t2 VALUES(1,'T'), (2,'F'); + SELECT count(*) FROM t1 LEFT JOIN t2 ON t1.i=t2.i AND bool='T'; + SELECT count(*) FROM t1 LEFT JOIN t2 ON likely(t1.i=t2.i) AND bool='T'; +---- +stmt 0 ok +stmt 27 ok +stmt 62 err 1 -1 130 no such table: t1 +stmt 130 ok +stmt 157 ok +stmt 194 err 1 -1 235 no such table: t2 +stmt 235 err 1 -1 301 no such table: t1 +stmt 301 err 1 -1 375 no such table: t1 +==== 7.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a, b, PRIMARY KEY(a,b)); + INSERT INTO t1 VALUES(9,1),(1,2); + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x, y, PRIMARY KEY(x,y)); + INSERT INTO t2 VALUES(3,3),(4,4); + SELECT likely(a), x FROM t1, t2 ORDER BY 1, 2; +---- +stmt 0 ok +stmt 27 ok +stmt 70 err 1 -1 106 no such table: t1 +stmt 106 ok +stmt 133 ok +stmt 176 err 1 -1 212 no such table: t2 +stmt 212 err 1 -1 261 no such table: t1 +==== 7.1 + + SELECT unlikely(a), x FROM t1, t2 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 7.2 + + SELECT likelihood(a,0.5), x FROM t1, t2 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 7.3 + + SELECT coalesce(a,a), x FROM t1, t2 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 53 no such table: t1 +==== 8.1 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0 (c0); + INSERT INTO t0(c0) VALUES ('a'); + SELECT LIKELY(t0.rowid) <= '0' FROM t0; +---- +stmt 0 ok +stmt 27 ok +stmt 51 err 1 -1 86 no such table: t0 +stmt 86 err 1 -1 128 no such table: t0 +==== 8.2 + + SELECT * FROM t0 WHERE LIKELY(t0.rowid) <= '0'; +---- +stmt 0 err 1 -1 50 no such table: t0 +==== 8.3 + + SELECT (t0.rowid) <= '0' FROM t0; +---- +stmt 0 err 1 -1 36 no such table: t0 +==== 8.4 + + SELECT * FROM t0 WHERE (t0.rowid) <= '0'; +---- +stmt 0 err 1 -1 44 no such table: t0 +==== 8.5 + + SELECT unlikely(t0.rowid) <= '0', likelihood(t0.rowid,0.5) <= '0' FROM t0; +---- +stmt 0 err 1 -1 77 no such table: t0 +==== 8.6 + + SELECT * FROM t0 WHERE unlikely(t0.rowid) <= '0'; +---- +stmt 0 err 1 -1 52 no such table: t0 +==== 8.7 + + SELECT * FROM t0 WHERE likelihood(t0.rowid, 0.5) <= '0'; +---- +stmt 0 err 1 -1 59 no such table: t0 +==== 8.8 + + SELECT unlikely(t0.rowid <= '0'), + likely(t0.rowid <= '0'), + likelihood(t0.rowid <= '0',0.5) + FROM t0; +---- +stmt 0 err 1 -1 124 no such table: t0 +==== 8.9 + + SELECT * FROM t0 WHERE unlikely(t0.rowid <= '0'); +---- +stmt 0 err 1 -1 52 no such table: t0 +==== 8.10 + + SELECT * FROM t0 WHERE likelihood(t0.rowid <= '0', 0.5); +---- +stmt 0 err 1 -1 59 no such table: t0 +==== 8.11 + + CREATE TABLE t1(c0 INT); + INSERT INTO t1(c0) VALUES (NULL); + CREATE INDEX i46 ON t1(CAST( (c0 IS TRUE) AS TEXT)); + CREATE VIEW v0(c2) AS SELECT CAST( (c0 IS TRUE) AS TEXT ) FROM t1; +---- +stmt 0 ok +stmt 27 err 1 -1 63 no such table: t1 +stmt 63 err 1 -1 118 no such table: main.t1 +stmt 118 ok +==== 8.12 + + SELECT quote(c0), quote(c2) FROM t1, v0 WHERE (0 < LIKELY(v0.c2)); +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 8.13 + + SELECT quote(c0), quote(c2) FROM t1, v0 WHERE (0 < LIKELY(v0.c2)) IS TRUE; +---- +stmt 0 err 1 -1 78 no such table: t1 +==== 9.10 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a, b FLOAT); + INSERT INTO t1(a) VALUES(''),(NULL),('X'),(NULL); + SELECT coalesce(max(quote(a)),10) FROM t1 GROUP BY a; +---- +stmt 0 ok +stmt 27 ok +stmt 58 err 1 -1 110 no such table: t1 +stmt 110 err 1 -1 166 no such table: t1 +==== 10.1 + + CREATE TABLE a(b TEXT); INSERT INTO a VALUES(0),(4),(9); + CREATE TABLE c(d NUM); + CREATE VIEW f(g, h) AS SELECT b, 0 FROM a UNION SELECT d, d FROM c; + SELECT g = g FROM f GROUP BY h; +---- +stmt 0 ok +stmt 26 err 1 -1 60 no such table: a +stmt 60 ok +stmt 85 ok +stmt 155 err 1 -1 189 no such table: f +==== 11.0 + + CREATE TABLE t1(x PRIMARY KEY, y); + INSERT INTO t1 VALUES('AAA', 'BBB'); + + CREATE TABLE t2(z); + INSERT INTO t2 VALUES('t2'); + + CREATE TABLE t3(x PRIMARY KEY, y); + INSERT INTO t3 VALUES('AAA', 'AAA'); +---- +stmt 0 ok +stmt 37 err 1 -1 76 no such table: t1 +stmt 76 ok +stmt 99 err 1 -1 130 no such table: t2 +stmt 130 ok +stmt 168 err 1 -1 207 no such table: t3 +==== 11.1.1 + + SELECT * FROM t1 JOIN t2 ON unlikely(x=y) AND y='AAA' +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 11.1.2 + + SELECT * FROM t1 JOIN t2 ON likely(x=y) AND y='AAA' +---- +stmt 0 err 1 -1 55 no such table: t1 +==== 11.1.3 + + SELECT * FROM t1 JOIN t2 ON x=y AND y='AAA' +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 11.2.1 + + SELECT * FROM t3 JOIN t2 ON unlikely(x=y) AND y='AAA' +---- +stmt 0 err 1 -1 57 no such table: t3 +==== 11.2.2 + + SELECT * FROM t3 JOIN t2 ON likely(x=y) AND y='AAA' +---- +stmt 0 err 1 -1 55 no such table: t3 +==== 11.2.3 + + SELECT * FROM t3 JOIN t2 ON x=y AND y='AAA' +---- +stmt 0 err 1 -1 47 no such table: t3 +==== 12.0 + + CREATE TABLE t1(a REAL); + INSERT INTO t1(a) VALUES(123); + CREATE INDEX t1x1 ON t1(likely(a)); + SELECT typeof(likely(a)) FROM t1 NOT INDEXED; + SELECT typeof(likely(a)) FROM t1 INDEXED BY t1x1; +---- +stmt 0 ok +stmt 27 err 1 -1 60 no such table: t1 +stmt 60 err 1 -1 98 no such table: main.t1 +stmt 98 err 1 -1 146 no such table: t1 +stmt 146 err 1 -1 198 no such table: t1 +==== 12.1 + + CREATE INDEX t1x2 ON t1(abs(a)); + SELECT typeof(abs(a)) FROM t1 NOT INDEXED; + SELECT typeof(abs(a)) FROM t1 INDEXED BY t1x2; +---- +stmt 0 err 1 -1 35 no such table: main.t1 +stmt 35 err 1 -1 80 no such table: t1 +stmt 80 err 1 -1 129 no such table: t1 diff --git a/parser/testdata/whereH.metadata.json b/parser/testdata/whereH.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereH.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereH.test b/parser/testdata/whereH.test new file mode 100644 index 0000000..ac3e5cc --- /dev/null +++ b/parser/testdata/whereH.test @@ -0,0 +1,178 @@ +==== whereH-1.1 + + CREATE TABLE t1(a,b,c,d); + CREATE INDEX t1abc ON t1(a,b,c); + CREATE INDEX t1bc ON t1(b,c); + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c; +---- +stmt 0 ok +stmt 28 err 1 -1 63 no such table: main.t1 +stmt 63 err 1 -1 95 no such table: main.t1 +stmt 95 err 1 -1 175 no such table: t1 +==== whereH-1.2 + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== whereH-2.1 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c,d); + CREATE INDEX t1bc ON t1(b,c); + CREATE INDEX t1abc ON t1(a,b,c); + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 45 err 1 -1 77 no such table: main.t1 +stmt 77 err 1 -1 112 no such table: main.t1 +stmt 112 err 1 -1 192 no such table: t1 +==== whereH-2.2 + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c; +---- +stmt 0 err 1 -1 79 no such table: t1 +==== whereH-3.1 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c,d,e); + CREATE INDEX t1cd ON t1(c,d); + CREATE INDEX t1bcd ON t1(b,c,d); + CREATE INDEX t1abcd ON t1(a,b,c,d); + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 47 err 1 -1 79 no such table: main.t1 +stmt 79 err 1 -1 114 no such table: main.t1 +stmt 114 err 1 -1 152 no such table: main.t1 +stmt 152 err 1 -1 240 no such table: t1 +==== whereH-3.2 + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 87 no such table: t1 +==== whereH-4.1 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c,d,e); + CREATE INDEX t1cd ON t1(c,d); + CREATE INDEX t1abcd ON t1(a,b,c,d); + CREATE INDEX t1bcd ON t1(b,c,d); + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 47 err 1 -1 79 no such table: main.t1 +stmt 79 err 1 -1 117 no such table: main.t1 +stmt 117 err 1 -1 152 no such table: main.t1 +stmt 152 err 1 -1 240 no such table: t1 +==== whereH-4.2 + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 87 no such table: t1 +==== whereH-5.1 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c,d,e); + CREATE INDEX t1bcd ON t1(b,c,d); + CREATE INDEX t1cd ON t1(c,d); + CREATE INDEX t1abcd ON t1(a,b,c,d); + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 47 err 1 -1 82 no such table: main.t1 +stmt 82 err 1 -1 114 no such table: main.t1 +stmt 114 err 1 -1 152 no such table: main.t1 +stmt 152 err 1 -1 240 no such table: t1 +==== whereH-5.2 + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 87 no such table: t1 +==== whereH-6.1 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c,d,e); + CREATE INDEX t1bcd ON t1(b,c,d); + CREATE INDEX t1abcd ON t1(a,b,c,d); + CREATE INDEX t1cd ON t1(c,d); + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 47 err 1 -1 82 no such table: main.t1 +stmt 82 err 1 -1 120 no such table: main.t1 +stmt 120 err 1 -1 152 no such table: main.t1 +stmt 152 err 1 -1 240 no such table: t1 +==== whereH-6.2 + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 87 no such table: t1 +==== whereH-7.1 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c,d,e); + CREATE INDEX t1abcd ON t1(a,b,c,d); + CREATE INDEX t1bcd ON t1(b,c,d); + CREATE INDEX t1cd ON t1(c,d); + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 47 err 1 -1 85 no such table: main.t1 +stmt 85 err 1 -1 120 no such table: main.t1 +stmt 120 err 1 -1 152 no such table: main.t1 +stmt 152 err 1 -1 240 no such table: t1 +==== whereH-7.2 + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 87 no such table: t1 +==== whereH-8.1 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c,d,e); + CREATE INDEX t1abcd ON t1(a,b,c,d); + CREATE INDEX t1cd ON t1(c,d); + CREATE INDEX t1bcd ON t1(b,c,d); + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 47 err 1 -1 85 no such table: main.t1 +stmt 85 err 1 -1 117 no such table: main.t1 +stmt 117 err 1 -1 152 no such table: main.t1 +stmt 152 err 1 -1 240 no such table: t1 +==== whereH-8.2 + + EXPLAIN QUERY PLAN + SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d; +---- +stmt 0 err 1 -1 87 no such table: t1 diff --git a/parser/testdata/whereI.metadata.json b/parser/testdata/whereI.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereI.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereI.test b/parser/testdata/whereI.test new file mode 100644 index 0000000..d773549 --- /dev/null +++ b/parser/testdata/whereI.test @@ -0,0 +1,76 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c, PRIMARY KEY(a)) WITHOUT ROWID; + INSERT INTO t1 VALUES(1, 'a', 'z'); + INSERT INTO t1 VALUES(2, 'b', 'y'); + INSERT INTO t1 VALUES(3, 'c', 'x'); + INSERT INTO t1 VALUES(4, 'd', 'w'); + CREATE INDEX i1 ON t1(b); + CREATE INDEX i2 ON t1(c); +---- +stmt 0 ok +stmt 58 err 1 -1 96 no such table: t1 +stmt 96 err 1 -1 134 no such table: t1 +stmt 134 err 1 -1 172 no such table: t1 +stmt 172 err 1 -1 210 no such table: t1 +stmt 210 err 1 -1 238 no such table: main.t1 +stmt 238 err 1 -1 266 no such table: main.t1 +==== 1.2 + + SELECT a FROM t1 WHERE b='b' OR c='x' +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 1.3 + + SELECT a FROM t1 WHERE b='a' OR c='z' +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 2.0 + + CREATE TABLE t2(a, b, c, PRIMARY KEY(a)) WITHOUT ROWID; + INSERT INTO t2 VALUES('i', 'a', 'z'); + INSERT INTO t2 VALUES('ii', 'b', 'y'); + INSERT INTO t2 VALUES('iii', 'c', 'x'); + INSERT INTO t2 VALUES('iv', 'd', 'w'); + CREATE INDEX i3 ON t2(b); + CREATE INDEX i4 ON t2(c); +---- +stmt 0 ok +stmt 58 err 1 -1 98 no such table: t2 +stmt 98 err 1 -1 139 no such table: t2 +stmt 139 err 1 -1 181 no such table: t2 +stmt 181 err 1 -1 222 no such table: t2 +stmt 222 err 1 -1 250 no such table: main.t2 +stmt 250 err 1 -1 278 no such table: main.t2 +==== 2.2 + + SELECT a FROM t2 WHERE b='b' OR c='x' +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 2.3 + + SELECT a FROM t2 WHERE b='a' OR c='z' +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 3.0 + + CREATE TABLE t3(a, b, c, d, PRIMARY KEY(c, b)) WITHOUT ROWID; + + INSERT INTO t3 VALUES('f', 1, 1, 'o'); + INSERT INTO t3 VALUES('o', 2, 1, 't'); + INSERT INTO t3 VALUES('t', 1, 2, 't'); + INSERT INTO t3 VALUES('t', 2, 2, 'f'); + + CREATE INDEX t3i1 ON t3(d); + CREATE INDEX t3i2 ON t3(a); + + SELECT c||'.'||b FROM t3 WHERE a='t' OR d='t' +---- +stmt 0 ok +stmt 64 err 1 -1 106 no such table: t3 +stmt 106 err 1 -1 147 no such table: t3 +stmt 147 err 1 -1 188 no such table: t3 +stmt 188 err 1 -1 229 no such table: t3 +stmt 229 err 1 -1 260 no such table: main.t3 +stmt 260 err 1 -1 290 no such table: main.t3 +stmt 290 err 1 -1 340 no such table: t3 diff --git a/parser/testdata/whereJ.metadata.json b/parser/testdata/whereJ.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereJ.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereJ.test b/parser/testdata/whereJ.test new file mode 100644 index 0000000..9417065 --- /dev/null +++ b/parser/testdata/whereJ.test @@ -0,0 +1,1009 @@ +==== whereJ-1.0 + + CREATE TABLE tx1 ( + est, + cid, + sid, + fid, + aid, + edate, + rstat, + ftype, + cx, + fyear, + fp, + acode, + a1, + curx, + tdate, + gstat, + trgtpx, + effdate, + adate, + ytime, + mstat + ); + CREATE INDEX ix0 on tx1(a1,curx,aid,cid,sid,ftype,fp,fyear DESC,edate DESC,fid); + CREATE INDEX ix1 on tx1(a1,curx,aid,ftype,fp,fyear DESC,fid,edate DESC,cid,sid); + CREATE INDEX ix2 on tx1(a1,curx,cid,sid,ftype,fp,fyear DESC,edate DESC,aid,fid); + CREATE INDEX ix3 on tx1(a1,curx,fid,ftype,fp,fyear DESC,cid,sid,aid,edate DESC); + CREATE INDEX ix4 on tx1(a1,curx,ftype,cid,sid,aid,edate DESC,fid,fp,fyear DESC); + CREATE INDEX ix5 on tx1(a1,curx,ftype,aid,fid,cid,sid,edate DESC,fp,fyear DESC); + CREATE INDEX ix6 on tx1(ftype,fp,fyear DESC,cid,sid,edate DESC,a1,fid,aid,curx,est,rstat,cx,acode,tdate,gstat,trgtpx,effdate,adate,ytime,mstat); + CREATE INDEX ix7 on tx1(cid,a1,curx,sid,ftype,est,fid,aid,edate,rstat,cx,fyear,fp,acode,tdate,gstat,trgtpx,effdate,adate,ytime,mstat); + CREATE INDEX ix8 on tx1(cid,sid,edate DESC,aid,est); + CREATE INDEX ix9 on tx1(aid,edate DESC,a1,curx); +---- +stmt 0 ok +stmt 240 err 1 -1 323 no such table: main.tx1 +stmt 323 err 1 -1 406 no such table: main.tx1 +stmt 406 err 1 -1 489 no such table: main.tx1 +stmt 489 err 1 -1 572 no such table: main.tx1 +stmt 572 err 1 -1 655 no such table: main.tx1 +stmt 655 err 1 -1 738 no such table: main.tx1 +stmt 738 err 1 -1 885 no such table: main.tx1 +stmt 885 err 1 -1 1022 no such table: main.tx1 +stmt 1022 err 1 -1 1077 no such table: main.tx1 +stmt 1077 err 1 -1 1128 no such table: main.tx1 +==== whereJ-1.1 + + ANALYZE sqlite_master; + DELETE FROM sqlite_stat1; + DELETE FROM sqlite_stat4; + INSERT INTO sqlite_stat1 VALUES('tx1','ix9','11680827 289 2 2 2'); + INSERT INTO sqlite_stat1 VALUES('tx1','ix8','11680827 286 250 2 2 2'); + INSERT INTO sqlite_stat1 VALUES('tx1','ix7','11680827 286 194 98 88 83 18 7 6 2 2 2 2 2 2 2 2 2 2 2 2 2'); + INSERT INTO sqlite_stat1 VALUES('tx1','ix6','11680827 5840414 5840414 5840414 240 212 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2'); + INSERT INTO sqlite_stat1 VALUES('tx1','ix5','11680827 5840414 2920207 1668690 114 90 8 8 2 2 2'); + INSERT INTO sqlite_stat1 VALUES('tx1','ix4','11680827 5840414 2920207 1668690 92 83 9 2 2 2 2'); + INSERT INTO sqlite_stat1 VALUES('tx1','ix3','11680827 5840414 2920207 2048 1835 1835 1835 12 11 8 2'); + INSERT INTO sqlite_stat1 VALUES('tx1','ix2','11680827 5840414 2920207 98 88 83 83 83 2 2 2'); + INSERT INTO sqlite_stat1 VALUES('tx1','ix1','11680827 5840414 2920207 117 114 114 114 90 2 2 2'); + INSERT INTO sqlite_stat1 VALUES('tx1','ix0','11680827 5840414 2920207 117 9 9 9 9 9 2 2'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','6736 21 21 21 1','29210 29404 29404 29404 29424','44 12184 13020 13079 29424',X'06030409080416C1150133512800B01FCA'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','6658 24 21 21 1','452220 453273 453276 453276 453296','622 226258 235279 236774 453296',X'06030409080416F34501332ADC00AA1BD3'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','820 2 2 2 1','1297771 1297869 1297869 1297869 1297869','1964 681724 711020 715822 1297869',X'06030409080317875501332C6C55AF4D'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','26985 2216 2216 2216 1','1797607 1797782 1797782 1797782 1799997','3162 970307 1008879 1016089 1799997',X'0603040809041A08040132401A0099A334'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','10434 19 17 17 1','2118117 2120403 2120405 2120405 2120421','3815 1136110 1181459 1190207 2120421',X'0603040908041AD36901332CD000861A2F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','437 1 1 1 1','2595414 2595739 2595739 2595739 2595739','5005 1409452 1464066 1475163 2595739',X'0603040808031CE7FD01317FD46BFBCC'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','12619 38 38 38 1','2595957 2600212 2600212 2600212 2600249','5007 1410347 1464961 1476068 2600249',X'0603040808041CE87E01328F61008CE96A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','7534 23 18 18 1','3329985 3334890 3334895 3334895 3334912','6901 1834013 1902216 1917268 3334912',X'060304090804244E1901328F59008CAA39'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','5693 1 1 1 1','3891665 3893609 3893609 3893609 3893609','8357 2164400 2245393 2263185 3893609',X'0603040808043063B70132B66800A28A43'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','44405 2588 2223 1527 1','4220255 4221633 4221998 4222694 4224220','9221 2354858 2441973 2461511 4224220',X'0603040909043377630133517A00B0DE4F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','6883 32 28 28 1','4423918 4429926 4429930 4429930 4429957','9690 2452276 2543443 2563995 4429957',X'06030409080434F46801328F5C008CC3DA'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','6974 27 26 26 1','5048404 5051129 5051130 5051130 5051155','11703 2817010 2920184 2944013 5051155',X'0603040908043C1C5C0132DEA5009F7473'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','476 2 2 2 1','5191322 5191479 5191479 5191479 5191479','12242 2901130 3006663 3031222 5191479',X'0603040908033DC6080132DEA478849A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','627 4 4 4 1','6488823 6489349 6489349 6489349 6489349','16423 3644815 3778857 3809866 6489349',X'0603040808035AA00E0131F4AE342150'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','145 2 2 1 1','7787091 7787218 7787218 7787219 7787219','20223 4343720 4510110 4547961 7787219',X'0603040809037254890132189C703706'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','20 1 1 1 1','9085074 9085089 9085089 9085089 9085089','25315 5033102 5230788 5275692 9085089',X'06040408080300EAE6CA01326657620652'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','229621 6135 5934 5934 1','9507353 9572696 9572696 9572696 9576801','27189 5255584 5463962 5511784 9576801',X'06040408080300F2FA440132DF1A7D1A60'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','6376 24 22 22 1','10381524 10382938 10382940 10382940 10382959','30519 5581705 5804515 5856651 10382959',X'06040409080400F9DBF3013305AC00A688A4'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','7761 45 9 9 1','10569039 10572476 10572512 10572512 10572520','31455 5661599 5888691 5941811 10572520',X'06040409080400FB31560132DDD800A05DF5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','8382 37 37 37 1','10866664 10867565 10867565 10867565 10867601','33475 5809193 6042611 6097741 10867601',X'06040409080400FFA4A701332A0E00A93957'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','76136 4099 3018 3018 1','11283107 11308143 11309224 11309224 11312241','37001 6022861 6264510 6322923 11312241',X'060404090804010B0A5C0133517200B0E8E0'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','23472 2188 2188 2181 1','11365285 11380281 11380281 11380288 11382468','37055 6026680 6268909 6327509 11382468',X'060404080904010B3C6701332B2E00AA4374'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','59591 4087 4073 4 1','11415316 11448759 11448773 11452842 11452845','37350 6040743 6283483 6342389 11452845',X'060404090904010BFA810133512800B010AE'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix9','43891 3029 3021 4 1','11598477 11622881 11622889 11625906 11625909','39110 6107644 6353109 6413914 11625909',X'0604040909040113B9960133512800B01235'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','7340 4977 19 1 1 1','206533 206533 208739 208757 208757 208757','125 164 111403 207397 207399 208757',X'070308040407030187840132B54B0101A0D1401C0000000000004C87E5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','8877 8788 45 1 1 1','1221375 1221375 1224509 1224553 1224553 1224553','931 1117 679933 1216705 1216722 1224553',X'07030804040703018D3F0133023D010B9B67401C0000000000007A99EF'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','7204 7204 39 1 1 1','1240162 1240162 1242572 1242610 1242610 1242610','942 1131 688420 1234655 1234672 1242610',X'07030804040703018D4F0132DB820105D324401C0000000000007EC569'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','9608 9608 44 1 1 1','1264939 1264939 1266529 1266572 1266572 1266572','952 1145 699518 1258423 1258440 1266572',X'07030804040704018D61013305B9010D3CEB406E8000000000000081E17A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','6636 6636 1 1 1 1','1294580 1294580 1297869 1297869 1297869 1297869','964 1159 713121 1289522 1289540 1297869',X'07030804030704018D7801328F693482A2403400000000000000A26728'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','7822 6629 26 1 1 1','2375708 2375708 2381333 2381358 2381358 2381358','3423 3833 1371902 2366527 2366559 2381358',X'0703080403070301B1F501317F16403B7B403F00000000000060D67A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','1403 1303 5 1 1 1','2594767 2594767 2595737 2595739 2595739 2595739','3914 4427 1512042 2580073 2580114 2595739',X'0703080403070301B6480131CC18558082407120000000000029CC12'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','7901 6067 26 1 1 1','3424107 3424107 3425939 3425964 3425964 3425964','5872 6630 2032411 3406550 3406594 3425964',X'0703080404070401C3F90132B7A100FDCC04403E00000000000000A014CE'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','7483 6161 22 1 1 1','3549446 3549446 3555223 3555244 3555244 3555244','5932 6752 2099309 3535259 3535304 3555244',X'0703080403070301C4490131573F4104F8403400000000000067FD1E'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','12076 8263 37 1 1 1','3558079 3558079 3560036 3560072 3560072 3560072','5935 6758 2101989 3540078 3540123 3560072',X'0703080404070301C44E0132DD0901076DA9404200000000000076F994'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','1123 1113 1 1 1 1','3892913 3892913 3893609 3893609 3893609 3893609','6594 7611 2305483 3871711 3871770 3893609',X'0703080403070301CA280131CA1C215083401C00000000000071F6B2'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','9344 7315 41 1 1 1','4213510 4213510 4219434 4219474 4219474 4219474','7200 8390 2503024 4196141 4196204 4219474',X'0703080404070301CE8C01317DE800FE4E8B4034000000000000458317'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','8062 3291 1 1 1 1','5037060 5037060 5040350 5040350 5040350 5040350','10201 11915 3045602 5012912 5012997 5040350',X'070308040307030213B20130B83A16DF86403600000000000028F8CD'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','9125 2926 1 1 1 1','5046490 5052665 5055590 5055590 5055590 5055590','10203 11926 3055524 5028097 5028182 5055590',X'070302040307030213B5232A013107F01745AF40330000000000002B57DE'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','591 591 1 1 1 1','5190991 5190991 5191479 5191479 5191479 5191479','10649 12426 3145181 5163206 5163296 5191479',X'070308040307030244AD0131315217C1CD401C00000000000003BC32'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','7381 4689 1 1 1 1','6112248 6112248 6116936 6116936 6116936 6116936','13780 16308 3748958 6083681 6083797 6116936',X'0703080403070402A9D1013108B531A21C401C0000000000000092F5C6'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','7569 7381 28 1 1 1','6280084 6280084 6281842 6281869 6281869 6281869','14559 17217 3856803 6247722 6247841 6281869',X'0703080404070302C14C0132DBF101044CC7401C00000000000074FB16'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','8289 7047 28 1 1 1','6290764 6290764 6296854 6296881 6296881 6296881','14569 17229 3863206 6262658 6262777 6296881',X'0703080403070302C16401317CC348B670401C0000000000006824BB'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','2209 2209 1 1 1 1','6489075 6489075 6489349 6489349 6489349 6489349','15377 18147 3986912 6454194 6454318 6489349',X'0703080403070402EA5901332A656C6F5E401C00000000000000AE7C03'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','7381 6799 1 1 1 1','7314420 7314420 7321218 7321218 7321218 7321218','18403 21722 4532963 7281695 7281847 7321218',X'07030804030703049EE501310667176DC940438000000000005ED2B5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','7163 7001 31 1 1 1','7652849 7652849 7658600 7658630 7658630 7658630','19462 22956 4750159 7617449 7617608 7658630',X'070308040407030503EB01317DEF010ADD3F402800000000000061C3EF'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','1433 1433 2 1 1 1','7785842 7785842 7787219 7787219 7787219 7787219','20001 23575 4834605 7745315 7745477 7787219',X'07030804030703055010013156D81B11AC404380000000000004A313'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','2247 2247 1 1 1 1','9083272 9083272 9085089 9085089 9085089 9085089','24940 29143 5668423 9036693 9036887 9085089',X'070308040307031A620A01323EEB5CE39C406FE000000000006F8177'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix8','107 107 5 1 1 1','10382912 10382912 10382957 10382959 10382959 10382959','31251 36297 6541362 10329764 10330008 10382959',X'0704080403070400955501013350516AA9D0406060000000000000884648'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','7340 4770 4527 3331 3331 970 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','206533 206533 206533 206533 206533 206596 207565 207565 207565 207565 207565 207565 207565 207565 207565 207565 207565 207565 207565 207565 207565 207565','125 202 402 512 560 6209 20696 25885 206260 206260 206260 206260 206260 206260 206260 206260 206260 206260 206260 206260 206260 207565',X'1703080808080704030408030808010308070808080803018784401C000000000000024FD353493F8801317E4700FFFF0F00FFFFC0F869E0000000002642C5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','8877 4669 71 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','1221375 1225583 1230181 1230249 1230249 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251 1230251','931 1504 2992 3495 3751 39629 120561 147424 1222711 1222711 1222711 1222711 1222711 1222711 1222711 1222711 1222711 1222711 1222711 1222711 1222711 1230251',X'1703090902080704030408090808010108070404040804018D3F03E8405680000000000000822B981EB823013351F00F0C4086E00000000000013351F0013351F053870D7500B22A8C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','7204 4801 193 193 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','1240162 1240162 1244770 1244770 1244959 1244961 1244962 1244962 1244962 1244962 1244962 1244962 1244962 1244962 1244962 1244962 1244962 1244962 1244962 1244962 1244962 1244962','942 1520 3024 3531 3791 40098 122274 149540 1237296 1237296 1237296 1237296 1237296 1237296 1237296 1237296 1237296 1237296 1237296 1237296 1237296 1244962',X'1703080908010703030408030808010308070408040803018D4F07406FE000000000000602CF16DE05013303C300FFFF0300FFFFC0F869E000000000013303C3008000004BD756'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','9608 6098 5910 5910 5910 2149 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','1264939 1264939 1264939 1264939 1264939 1265217 1267365 1267365 1267365 1267365 1267365 1267365 1267365 1267365 1267365 1267365 1267365 1267365 1267365 1267365 1267365 1267365','952 1536 3055 3576 3841 40616 124132 151876 1259547 1259547 1259547 1259547 1259547 1259547 1259547 1259547 1259547 1259547 1259547 1259547 1259547 1267365',X'1703080808080704030408090808010101070404040803018D61401C0000000000000131374D1726AB0132DD780F0C0540390000000000000132DD780132DD784E2789C6190CA9'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','6636 4411 4237 4237 4237 33 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1','1294580 1294580 1294580 1294580 1294580 1297842 1297862 1297862 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869','964 1557 3097 3622 3888 41246 126538 154868 1289863 1289863 1289863 1289863 1289863 1289863 1289863 1289863 1289863 1289863 1289863 1289863 1289863 1297869',X'1703080808080703030408090808010308070808080803018D7840420000000000007332F1227B5901321AF80800FFFF40260000000000006D0CEB'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','7822 4817 260 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','2375708 2375708 2380265 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524 2380524','3423 5117 10120 11184 11775 86237 242937 294878 2366404 2366404 2366404 2366404 2366404 2366404 2366404 2366404 2366404 2366404 2366404 2366404 2366404 2380524',X'170308090308070304040803080801030807040408080401B1F501831C405C40000000000077646800EAD44C0132697000FFFF0300FFFFC0F869E0000000000132696F0132696F0094935E'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','1403 1022 82 74 74 55 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','2594767 2594767 2595707 2595707 2595707 2595708 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739','3914 5817 11518 12879 13613 98100 278304 342850 2580971 2580971 2580971 2580971 2580971 2580971 2580971 2580971 2580971 2580971 2580971 2580971 2580971 2595739',X'170308090808070303040803080801030807080808080301B648405C400000000000038EAC243F770131A6F700FFFF0E00FFFFC0F869E0000000005C8664'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','7901 5298 291 55 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','3424107 3424107 3429114 3429350 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404 3429404','5872 8944 17727 19769 20846 145206 401995 498360 3411279 3411279 3411279 3411279 3411279 3411279 3411279 3411279 3411279 3411279 3411279 3411279 3411279 3429404',X'170308090201070404040803080801030807040808080401C3F9232807405C40000000000000FF559400F2FA440133294600FFFF0300FFFFC0F869E000000000013329460083157B'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','7483 5407 230 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','3549446 3549446 3554623 3554845 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852 3554852','5932 9041 17921 20139 21264 149060 417718 520064 3536268 3536268 3536268 3536268 3536268 3536268 3536268 3536268 3536268 3536268 3536268 3536268 3536268 3554852',X'170308090201070404040803080801030807040808080401C449232807405C40000000000000FF559400F2FA440133294600FFFF0300FFFFC0F869E000000000013329460083162A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','12076 8365 7981 5546 5546 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','3558079 3558079 3558079 3558079 3558079 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624 3563624','5935 9046 17930 20154 21279 149235 418443 521109 3544970 3544970 3544970 3544970 3544970 3544970 3544970 3544970 3544970 3544970 3544970 3544970 3544970 3563624',X'170308080808070303040803080801030107040408080301C44E4074300000000000029EB13BB98E01328EFE00FFFF0E00FFFF0AC0F869E00000000001328F0001328F0071D802'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','1123 916 875 875 875 93 22 22 1 1 1 1 1 1 1 1 1 1 1 1 1 1','3892913 3892913 3892913 3892913 3892913 3893531 3893602 3893602 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609','6594 10057 19942 22653 23964 165533 468498 587524 3873325 3873325 3873325 3873325 3873325 3873325 3873325 3873325 3873325 3873325 3873325 3873325 3873325 3893609',X'170308080808070403040802080801030107040404080301CA28403F00000000000000832DC71933330132DB8800FC0F00FFFF054050C000000000000132DB870132DB8A4D5E35A2107205'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','9344 6359 6022 9 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','4213510 4213510 4213510 4219523 4219523 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531 4219531','7200 11025 21872 25036 26543 181203 517345 652858 4198057 4198057 4198057 4198057 4198057 4198057 4198057 4198057 4198057 4198057 4198057 4198057 4198057 4219531',X'170308080308070303040803080801030807080808080301CE8C0186A0403F00000000000002C2142F19870131554100FFFF0F00FFFFC0F869E0000000000687F7'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','8062 4993 241 53 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','5037060 5037060 5041812 5042000 5042051 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052 5042052','10201 15484 30736 35196 37326 231854 654010 829510 5017193 5017193 5017193 5017193 5017193 5017193 5017193 5017193 5017193 5017193 5017193 5017193 5017193 5042052',X'17030809020107030404080308080103080704080808030213B2245407406FE0000000000002C0AA00F6ABA101332A7E00FFFF0300FFFFC0F869E00000000001332A7E5287C0'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','9125 5761 264 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','5046490 5046490 5051987 5052246 5052246 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250 5052250','10203 15488 30744 35230 37365 232178 654964 830718 5027358 5027358 5027358 5027358 5027358 5027358 5027358 5027358 5027358 5027358 5027358 5027358 5027358 5052250',X'17030809030807030304080308080103080708080808030213B501831F406FE00000000000029E627136F901328DD500FFFF0300FFFFC0F869E000000000290DD6'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','591 591 566 566 566 27 18 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1','5190991 5190991 5190991 5190991 5190991 5191461 5191464 5191474 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479','10649 16115 31973 36593 38793 239550 673441 853755 5165855 5165855 5165855 5165855 5165855 5165855 5165855 5165855 5165855 5165855 5165855 5165855 5165855 5191479',X'17030808080807030404080108080101080708080808040244AD4045800000000000029E6200EAE8740132690D0A0F0C402E00000000000000941EAF'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','7381 3728 83 16 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','6112248 6115901 6119546 6119613 6119613 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628 6119628','13780 20707 41067 47538 50438 296473 834203 1056686 6089878 6089878 6089878 6089878 6089878 6089878 6089878 6089878 6089878 6089878 6089878 6089878 6089878 6119628',X'170309090208070304040809080801010807040404080402A9D12328407360000000000002172300EABCFF0133517F0F0C404AA6665E02EA960133517F01335239538BC5C1008B5EC9'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','7569 5785 274 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','6280084 6280084 6285595 6285867 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868 6285868','14559 21811 43240 50020 53057 307264 862871 1092992 6255378 6255378 6255378 6255378 6255378 6255378 6255378 6255378 6255378 6255378 6255378 6255378 6255378 6285868',X'170308090301070404040803080801030807040808080302C14C01832707405C40000000000000FF559400F2FA440133294600FFFF0300FFFFC0F869E000000000013329461E5109'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','8289 5734 266 33 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','6290764 6290764 6296232 6296465 6296495 6296495 6296497 6296497 6296497 6296497 6296497 6296497 6296497 6296497 6296497 6296497 6296497 6296497 6296497 6296497 6296497 6296497','14569 21827 43272 50056 53096 307563 864043 1094585 6265950 6265950 6265950 6265950 6265950 6265950 6265950 6265950 6265950 6265950 6265950 6265950 6265950 6296497',X'170308090201070404040803080801030807040808080402C164232807405C40000000000000FF559400F2FA440133294600FFFF0300FFFFC0F869E0000000000133294600A90415'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','2209 1450 1369 1369 1369 597 13 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1','6489075 6489075 6489075 6489075 6489075 6489139 6489344 6489344 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349','15377 22998 45584 52641 55837 319564 895653 1134252 6458046 6458046 6458046 6458046 6458046 6458046 6458046 6458046 6458046 6458046 6458046 6458046 6458046 6489349',X'170308080808070303040802080801030807040404080302EA59401C0000000000000D4B201AD8B30132DF0400FC0600FFFF40180000000000000132DF040132DF054EBA338714FBBA'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','7381 5446 171 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','7314420 7314420 7319695 7319855 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865 7319865','18403 27319 54152 62541 66337 369851 1032180 1306261 7284923 7284923 7284923 7284923 7284923 7284923 7284923 7284923 7284923 7284923 7284923 7284923 7284923 7319865',X'1703080902010703030408030808010308070408080804049EE503E907405C400000000000029EC32E97BE0133061F00FFFF0300FFFFC0F869E0000000000133061F00A9ECEF'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','7163 4782 209 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','7652849 7652849 7657422 7657626 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630 7657630','19462 28830 57147 65962 69945 388539 1084446 1372423 7621247 7621247 7621247 7621247 7621247 7621247 7621247 7621247 7621247 7621247 7621247 7621247 7621247 7657630',X'17030809020107040404080308080103080704080808040503EB03EA07405C40000000000000FF559400F2FA440133294600FFFF0300FFFFC0F869E0000000000133294600831554'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','1433 582 571 571 571 15 15 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1','7785842 7786693 7786693 7786693 7786693 7787208 7787208 7787208 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219','20001 29582 58632 67649 71736 396840 1107204 1400830 7750264 7750264 7750264 7750264 7750264 7750264 7750264 7750264 7750264 7750264 7750264 7750264 7750264 7787219',X'1703090808080703040408090808010108070404040804055010406E80000000000001C7A600FC429201332D890F0C402C00000000000001332D890133505352D7248A008775D8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','2247 682 657 657 657 117 45 45 1 1 1 1 1 1 1 1 1 1 1 1 1 1','9083272 9084837 9084837 9084837 9084837 9085088 9085088 9085088 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089','24940 36384 72113 82665 87632 474987 1318830 1664527 9042708 9042708 9042708 9042708 9042708 9042708 9042708 9042708 9042708 9042708 9042708 9042708 9042708 9085089',X'17030908080807030304080208080103010704040408031A620A403E00000000000001C3D332CF850132DE9D00FC0200FFFF054050E000000000000132DE9D0132DE9D4E8C092E790553'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix7','107 77 69 69 69 11 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1','10382912 10382942 10382942 10382942 10382942 10382952 10382956 10382956 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959','31251 45639 90416 102896 109225 567280 1544395 1943661 10337289 10337289 10337289 10337289 10337289 10337289 10337289 10337289 10337289 10337289 10337289 10337289 10337289 10382959',X'170409080808070303040809080801010807040404080300955501403E000000000000029E686E250B01332D220F0C402E00000000000001332D220133504E52CFCF4F21CD7F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 7337 4975 19 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 206462 206462 210789 210789 210807 210807 210807 210807 210807 210807 210807 210807 210807 210807 210807 210807 210807 210807 210807','0 0 0 125 164 112407 128579 207456 209489 209490 209490 209490 209490 209490 209490 209490 209490 209490 209490 209490 209490 210807',X'170808080308040804030807080301030807080808080301878401317F26024FD3531E2DAF404200000000000000FFFF0200FFFFC0F869E0000000002642C4'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 8874 8785 45 25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 1221012 1221012 1224145 1224165 1224189 1224189 1224189 1224189 1224189 1224189 1224189 1224189 1224189 1224189 1224189 1224189 1224189 1224189 1224189','0 0 0 931 1117 679896 773861 1207582 1216653 1216673 1216673 1216673 1216673 1216673 1216673 1216673 1216673 1216673 1216673 1216673 1216673 1224189',X'1708080803080409040408070809010308070404040803018D3F0133023D01940C420106B14D40420000000000000F00FFFF4070E000000000000133023D0133023D4F2053654AE525'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 7200 7200 39 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 1239793 1239793 1242199 1242223 1242237 1242237 1242237 1242237 1242237 1242237 1242237 1242237 1242237 1242237 1242237 1242237 1242237 1242237 1242237','0 0 0 942 1131 688381 783660 1225441 1234602 1234622 1234622 1234622 1234622 1234622 1234622 1234622 1234622 1234622 1234622 1234622 1234622 1242237',X'1708080803080409040308070809010301070404040804018D4F0132DB820113FAB92F19C5401C0000000000000F00FFFF0F403A0000000000000132DB820132DB824D542A4F009B5C72'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 9606 9606 44 25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 1264560 1264560 1266149 1266168 1266192 1266192 1266192 1266192 1266192 1266192 1266192 1266192 1266192 1266192 1266192 1266192 1266192 1266192 1266192','0 0 0 952 1145 699479 796008 1249062 1258369 1258391 1258391 1258391 1258391 1258391 1258391 1258391 1258391 1258391 1258391 1258391 1258391 1266192',X'1708080803080409040308070809010101070404040803018D61013305B9017CDF4916F8B140280000000000000F0C0A403600000000000001330557013305B9507EA8DD212E79'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 6635 6635 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 1294199 1294199 1297868 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869 1297869','0 0 0 964 1159 713241 812408 1280435 1289849 1289871 1289871 1289871 1289871 1289871 1289871 1289871 1289871 1289871 1289871 1289871 1289871 1297869',X'1708080803080409030308070803010308070808080803018D78013267DC0EF747387106403F00000000000000FFFF0F00FFFFC0F869E00000000006B968'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 7815 6624 26 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 2374939 2374939 2380559 2380584 2380584 2380584 2380584 2380584 2380584 2380584 2380584 2380584 2380584 2380584 2380584 2380584 2380584 2380584 2380584','0 0 0 3423 3833 1371803 1539928 2350493 2366415 2366460 2366460 2366460 2366460 2366460 2366460 2366460 2366460 2366460 2366460 2366460 2366460 2380584',X'170808080308040903030807080301030807080808080301B1F501317F160DDEA51C46AB405280000000000000FFFF0F00FFFFC0F869E0000000006ADDA9'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 3595 3459 10 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 2595336 2595336 2595734 2595737 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739 2595739','0 0 0 3918 4433 1512586 1693312 2557025 2580917 2580967 2580967 2580967 2580967 2580967 2580967 2580967 2580967 2580967 2580967 2580967 2580967 2595739',X'170808080308040903030807080101010107040404080301B64F01332ACC029E833D19084028000000000000320F0C054074A0000000000001332A0901332ACC518A316F1F30D6'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 7894 6061 26 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 3422592 3422592 3424418 3424434 3424443 3424443 3424443 3424443 3424443 3424443 3424443 3424443 3424443 3424443 3424443 3424443 3424443 3424443 3424443','0 0 0 5872 6630 2032185 2267240 3366727 3406294 3406363 3406363 3406363 3406363 3406363 3406363 3406363 3406363 3406363 3406363 3406363 3406363 3424443',X'170808080308040904030807080101030807040404080401C3F90132B7A100D6FD7F6CE97F4070500000000000100F00FFFF40560000000000000132B7310132DB2D4D3F72D9009AE8EE'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 7479 6158 22 22 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 3547845 3547845 3553619 3553619 3553640 3553640 3553640 3553640 3553640 3553640 3553640 3553640 3553640 3553640 3553640 3553640 3553640 3553640 3553640','0 0 0 5932 6752 2099067 2343370 3491679 3534981 3535053 3535053 3535053 3535053 3535053 3535053 3535053 3535053 3535053 3535053 3535053 3535053 3553640',X'170808080308040804030807080301030807080808080301C4490131573F008E7AC03077E0403E00000000000000FFFF0F00FFFFC0F869E00000000065B45A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 12068 8257 37 17 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 3556474 3556474 3558426 3558446 3558462 3558462 3558462 3558462 3558462 3558462 3558462 3558462 3558462 3558462 3558462 3558462 3558462 3558462 3558462','0 0 0 5935 6758 2101744 2346448 3496404 3539797 3539869 3539869 3539869 3539869 3539869 3539869 3539869 3539869 3539869 3539869 3539869 3539869 3558462',X'170808080308040904030807080201010107040404080301C44E0132DD09016891C11788EB404200000000000000FC0F0C0F400199999999999A0132DD090132DD094DE5DCE3763299'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 1510 1497 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 3892149 3892149 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609 3893609','0 0 0 6596 7614 2306358 2572095 3823194 3873232 3873319 3873319 3873319 3873319 3873319 3873319 3873319 3873319 3873319 3873319 3873319 3873319 3893609',X'170808080308040803030807080301030807080808080301CA2E01312E3A038EE6257265400000000000000000FFFF0600FFFFC0F869E00000000032518F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 9341 7313 41 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 4211282 4211282 4217204 4217243 4217244 4217244 4217244 4217244 4217244 4217244 4217244 4217244 4217244 4217244 4217244 4217244 4217244 4217244 4217244','0 0 0 7200 8390 2502650 2792131 4139620 4195704 4195798 4195798 4195798 4195798 4195798 4195798 4195798 4195798 4195798 4195798 4195798 4195798 4217244',X'170808080308040903030807080301030807080808080301CE8C01317DE8029E9D3B6D23403E00000000000000FFFF0F00FFFFC0F869E00000000008EF7D'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 8055 3290 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 5033936 5033936 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225 5037225','0 0 0 10201 11915 3045026 3383481 4941323 5012256 5012369 5012369 5012369 5012369 5012369 5012369 5012369 5012369 5012369 5012369 5012369 5012369 5037225',X'17080808030804090303080708030803080708080808030213B20130B83A018A7516DF86403600000000000000FFFF00FFFFC0F869E00000000028F8CD'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 9117 2923 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 5043358 5049528 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450 5052450','0 0 0 10203 11926 3054947 3394812 4956408 5027439 5027552 5027552 5027552 5027552 5027552 5027552 5027552 5027552 5027552 5027552 5027552 5027552 5052450',X'17080808030204080303080708030103080708080808030213B5232A013107F00217231745AF403300000000000000FFFF0200FFFFC0F869E0000000002B57DE'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 333 333 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 5191271 5191271 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479 5191479','0 0 0 10672 12452 3147059 3494842 5093162 5165710 5165827 5165827 5165827 5165827 5165827 5165827 5165827 5165827 5165827 5165827 5165827 5165827 5191479',X'17080808030804080303080708030103080708080808030244F00131CB4201C1C917188E403F00000000000000FFFF0800FFFFC0F869E00000000001C5CB'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 7374 4684 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 6107894 6107894 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577 6112577','0 0 0 13780 16308 3748117 4153600 5995776 6082692 6082834 6082834 6082834 6082834 6082834 6082834 6082834 6082834 6082834 6082834 6082834 6082834 6112577',X'170808080308040803030807080301030807080808080402A9D1013108B5029E6831A21C401C00000000000000FFFF0200FFFFC0F869E0000000000092F5C6'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 7562 7376 28 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 6275521 6275521 6277274 6277291 6277301 6277301 6277301 6277301 6277301 6277301 6277301 6277301 6277301 6277301 6277301 6277301 6277301 6277301 6277301','0 0 0 14559 17217 3855913 4271255 6156622 6246677 6246823 6246823 6246823 6246823 6246823 6246823 6246823 6246823 6246823 6246823 6246823 6246823 6277301',X'170808080308040904030807080201030107040404080302C14C0132DBF100832DC739FF53403F00000000000000FC0F00FFFF05402C0000000000000132DBF10132DBF34D89B7AA1114CB'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 8282 7043 28 28 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 6286191 6286191 6292277 6292277 6292304 6292304 6292304 6292304 6292304 6292304 6292304 6292304 6292304 6292304 6292304 6292304 6292304 6292304 6292304','0 0 0 14569 17229 3862314 4278722 6171137 6261611 6261757 6261757 6261757 6261757 6261757 6261757 6261757 6261757 6261757 6261757 6261757 6261757 6292304',X'170808080308040804030807080301030807080808080302C16401317CC301B5AA4A1AB270405680000000000000FFFF0F00FFFFC0F869E00000000048FD4C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 3101 3101 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 6486495 6486495 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349 6489349','0 0 0 15379 18149 3988504 4417216 6363796 6457879 6458036 6458036 6458036 6458036 6458036 6458036 6458036 6458036 6458036 6458036 6458036 6458036 6489349',X'170808080308040803030807080301030807080808080302EA6601317F7301C3EB17C4CE401C00000000000000FFFF0F00FFFFC0F869E000000000398198'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 7379 6798 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 7308682 7308682 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479 7315479','0 0 0 18403 21722 4531809 5008068 7172304 7280343 7280536 7280536 7280536 7280536 7280536 7280536 7280536 7280536 7280536 7280536 7280536 7280536 7315479',X'1708080803080408040308070803010308070808080803049EE501310667008390D0176DC9404380000000000000FFFF0500FFFFC0F869E0000000005ED2B5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 211 211 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 7787150 7787150 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219','0 0 0 20027 23602 4837427 5341824 7634169 7750020 7750224 7750224 7750224 7750224 7750224 7750224 7750224 7750224 7750224 7750224 7750224 7750224 7787219',X'17080808030804080303080708090103080704040808030550B30132B73501A79C17C3D840340000000000000F00FFFF40140000000000000132B6D00132B7400D1DB9'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 26 26 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 9085083 9085083 9085088 9085088 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089 9085089','0 0 0 24964 29171 5671673 6246216 8904392 9042441 9042684 9042684 9042684 9042684 9042684 9042684 9042684 9042684 9042684 9042684 9042684 9042684 9085089',X'17080808030804080303080708030103080708080808031AA25C0131CA197A6D831B1D84401C00000000000000FFFF0F00FFFFC0F869E00000000071E307'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','11668540 11668540 11668540 1261 1261 9 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','0 0 0 10381872 10381872 10382956 10382956 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959 10382959','0 0 0 31297 36344 6545140 7198586 10180602 10336983 10337266 10337266 10337266 10337266 10337266 10337266 10337266 10337266 10337266 10337266 10337266 10337266 10382959',X'17080808040804080303080708010101080708080808030095A4C401321BB603010141073C401C000000000000080F0C40308000000000007E55BE'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix6','12287 12287 12287 17 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1','11668540 11668540 11668540 11672111 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127 11672127','1 1 1 43128 49243 7431284 8170740 11452355 11624787 11625093 11625093 11625093 11625093 11625093 11625093 11625093 11625093 11625093 11625093 11625093 11625093 11672127',X'1701080803020408040409070803010308070408040804070267C127130133041E00AB540900E64074405C40000000000000FFFF0300FFFFC0F869E0000000000133041E0080000000A3EE16'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 24157 24157 29 29 1 1 1 1','0 0 0 1236590 1236590 1251799 1251799 1251827 1251827 1251827 1251827','0 0 0 3120 4771 71527 72755 1238782 1238782 1238782 1251827',X'0C08080803040308040808031A080400FF5594029BB30131CD372B1368'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 1209 1209 129 129 1 1 1 1','0 0 0 1296873 1296873 1297744 1297744 1297869 1297869 1297869 1297869','0 0 0 3203 4902 74577 75831 1284645 1284645 1284645 1297869',X'0C08080803030308040808041A215F04C9D901B0A30131066F0087162A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 12129 9261 428 428 1 1 1 1','0 0 0 1790076 1790076 1790076 1790076 1790503 1790503 1790503 1790503','0 0 0 4938 7561 108783 110860 1774402 1774402 1774402 1790503',X'0C08080803030308040808031CE87E029E6B018700013219C1373BA8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 273 273 5 5 1 1 1 1','0 0 0 2595625 2595625 2595738 2595738 2595739 2595739 2595739 2595739','0 0 0 7863 12132 166423 169877 2575172 2575172 2575172 2595739',X'0C08080803030308040808042F020502DA0E02C73A0133049700A711F8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 7735 7735 29 29 1 1 1 1','0 0 0 2924165 2924165 2929754 2929754 2929782 2929782 2929782 2929782','0 0 0 9123 14045 191316 195293 2907742 2907742 2907742 2929782',X'0C080808030403080408080333776300FF559475928D013329435A824F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 360 229 27 27 1 1 1 1','0 0 0 3893374 3893505 3893605 3893605 3893609 3893609 3893609 3893609','0 0 0 13912 21124 273265 278784 3866425 3866425 3866425 3893609',X'0C08080803030308040808044717710E070B01E88F0131A5B80098D0A5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 683 671 32 32 1 1 1 1','0 0 0 5191447 5191459 5191477 5191477 5191479 5191479 5191479 5191479','0 0 0 20361 30776 381171 389104 5158962 5158962 5158962 5191479',X'0C08080803030308040808037370D10F00290188450132B537354C5E'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 213354 213354 113 113 1 1 1 1','0 0 0 6102233 6102233 6155183 6155183 6155295 6155295 6155295 6155295','0 0 0 26812 39489 472780 483115 6119281 6119281 6119281 6155295',X'0C080808040403080408080300F2FA4400FF5594019B6D01324067714AE8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 3675 3675 241 241 1 1 1 1','0 0 0 6486701 6486701 6489287 6489287 6489349 6489349 6489349 6489349','0 0 0 28380 41383 502486 513750 6452691 6452691 6452691 6489349',X'0C080808040304080408080300F6ABAC6C967D009F84B60132DBDD155A2A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 24063 24063 38 38 1 1 1 1','0 0 0 7080911 7080911 7102380 7102380 7102417 7102417 7102417 7102417','0 0 0 35724 49844 582928 595393 7065320 7065320 7065320 7102417',X'0C0808080404040804080803010B0A5C00FF559400CCD3EE0133294559DDCD'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 7173953 7173950 20284 20284 38 38 1 1 1 1','0 0 0 7107237 7107237 7126606 7126606 7126643 7126643 7126643 7126643','0 0 0 35764 49885 586473 599030 7089546 7089546 7089546 7126643',X'0C0808080404040804080803010B3C6700FF55940114CE73013329432225CC'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 630326 618063 11855 11855 3 1 1 1 1 1','0 7173953 7173953 7665258 7665258 7672559 7672561 7672561 7672561 7672561 7672561','0 1 2 64320 91213 1077048 1100563 7630436 7630436 7630436 7672561',X'0C080908040403020408080400F2FA4400FF559405DD0A23280132DD75009F3468'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 630326 618063 4 4 1 1 1 1 1 1','0 7173953 7173953 7787218 7787218 7787219 7787219 7787219 7787219 7787219 7787219','0 1 2 74034 102405 1189484 1215034 7745001 7745001 7745001 7787219',X'0C0809080403040804080803010DDABE0368B700FEBFF60133068F22D1E5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','7804279 630326 12263 1433 1433 1 1 1 1 1 1','0 7173953 7792016 7797877 7797877 7799309 7799309 7799309 7799309 7799309 7799309','0 1 3 76213 104626 1201397 1227113 7757087 7757087 7757087 7799309',X'0C08090104040408040808030700F2FA4400FF559401C3969E013329461E5052'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 3718791 3718791 8657 8657 605 605 1 1 1 1','7804279 7804279 7804279 8360485 8360485 8364643 8364643 8365247 8365247 8365247 8365247','1 2 4 77865 106290 1217527 1243460 8321843 8321843 8321843 8365247',X'0C09080803030308040808031AD369021FFC0DC36E01328E2F3D9128'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 3718791 3718791 33421 33421 57 26 1 1 1 1','7804279 7804279 7804279 8873934 8873934 8891008 8891039 8891064 8891064 8891064 8891064','1 2 4 78914 107340 1231432 1257622 8846644 8846644 8846644 8891064',X'0C090808030403020408080433776300FF55940CE166232801332A1800836DFB'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 3718791 3718791 2182 2182 94 94 1 1 1 1','7804279 7804279 7804279 9083187 9083187 9085006 9085006 9085089 9085089 9085089 9085089','1 2 4 79307 107733 1237174 1263453 9040316 9040316 9040316 9085089',X'0C09080803030308040808033AC92C021FFC04AF670132B5FC38DBD0'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 3718791 3718791 6023 6023 50 50 1 1 1 1','7804279 7804279 7804279 9393480 9393480 9395815 9395815 9395864 9395864 9395864 9395864','1 2 4 79973 108402 1245294 1271679 9350536 9350536 9350536 9395864',X'0C09080803030308040808034CDD9A7E1C2301C30D0132908703CC11'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 3718791 3718791 79 79 6 6 1 1 1 1','7804279 7804279 7804279 10382946 10382946 10382956 10382956 10382959 10382959 10382959 10382959','1 2 4 82501 110947 1276304 1303221 10336296 10336296 10336296 10382959',X'0C090808040303080408080400E9A10A0CC31602A47201332C6C00ABCD60'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 3718791 3718791 8251 8251 280 280 1 1 1 1','7804279 7804279 7804279 11067468 11067468 11072690 11072690 11072969 11072969 11072969 11072969','1 2 4 85529 113989 1307763 1335183 11025935 11025935 11025935 11072969',X'0C090808040404080408080300FFA4A7008A66AD0089DBDD0132B5FF6AE2B8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 3718791 3718791 44772 44772 58 58 1 1 1 1','7804279 7804279 7804279 11268036 11268036 11269261 11269261 11269318 11269318 11269318 11269318','1 2 4 87132 115597 1321101 1348736 11222284 11222284 11222284 11269318',X'0C0908080404030804080804010B0A5C00FF5594018ACD0133294300B0E291'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 3718791 3718791 53775 53775 37 19 1 1 1 1','7804279 7804279 7804279 11330929 11330929 11355027 11355045 11355063 11355063 11355063 11355063','1 2 4 87335 115800 1327560 1355328 11308029 11308029 11308029 11355063',X'0C0908080404030204080803010BFA8100FF5594026C24232801332B2E1F8BB5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 3718791 3718791 39430 39430 39 39 1 1 1 1','7804279 7804279 7804279 11458789 11458789 11476757 11476757 11476795 11476795 11476795 11476795','1 2 4 88502 116970 1340484 1368500 11429761 11429761 11429761 11476795',X'0C09080804040308040808030113B99600FF559402F6AF01332B2E1F8A54'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix5','3876548 157757 157736 5317 5317 1 1 1 1 1 1','7804279 11523070 11523070 11652823 11652823 11658139 11658139 11658139 11658139 11658139 11658139','1 3 5 100045 128561 1480184 1510648 11611105 11611105 11611105 11658139',X'0C0909080404040204080803010BFA8100FF559402594CCB2328013351E85B0F5D'); +---- +stmt 0 ok +stmt 25 err 1 -1 53 no such table: sqlite_stat1 +stmt 53 err 1 -1 81 no such table: sqlite_stat4 +stmt 81 err 1 -1 150 no such table: sqlite_stat1 +stmt 150 err 1 -1 223 no such table: sqlite_stat1 +stmt 223 err 1 -1 332 no such table: sqlite_stat1 +stmt 332 err 1 -1 455 no such table: sqlite_stat1 +stmt 455 err 1 -1 555 no such table: sqlite_stat1 +stmt 555 err 1 -1 654 no such table: sqlite_stat1 +stmt 654 err 1 -1 759 no such table: sqlite_stat1 +stmt 759 err 1 -1 855 no such table: sqlite_stat1 +stmt 855 err 1 -1 955 no such table: sqlite_stat1 +stmt 955 err 1 -1 1048 no such table: sqlite_stat1 +stmt 1048 err 1 -1 1213 no such table: sqlite_stat4 +stmt 1213 err 1 -1 1388 no such table: sqlite_stat4 +stmt 1388 err 1 -1 1564 no such table: sqlite_stat4 +stmt 1564 err 1 -1 1755 no such table: sqlite_stat4 +stmt 1755 err 1 -1 1941 no such table: sqlite_stat4 +stmt 1941 err 1 -1 2120 no such table: sqlite_stat4 +stmt 2120 err 1 -1 2306 no such table: sqlite_stat4 +stmt 2306 err 1 -1 2491 no such table: sqlite_stat4 +stmt 2491 err 1 -1 2673 no such table: sqlite_stat4 +stmt 2673 err 1 -1 2865 no such table: sqlite_stat4 +stmt 2865 err 1 -1 3050 no such table: sqlite_stat4 +stmt 3050 err 1 -1 3236 no such table: sqlite_stat4 +stmt 3236 err 1 -1 3416 no such table: sqlite_stat4 +stmt 3416 err 1 -1 3596 no such table: sqlite_stat4 +stmt 3596 err 1 -1 3776 no such table: sqlite_stat4 +stmt 3776 err 1 -1 3957 no such table: sqlite_stat4 +stmt 3957 err 1 -1 4151 no such table: sqlite_stat4 +stmt 4151 err 1 -1 4345 no such table: sqlite_stat4 +stmt 4345 err 1 -1 4537 no such table: sqlite_stat4 +stmt 4537 err 1 -1 4731 no such table: sqlite_stat4 +stmt 4731 err 1 -1 4932 no such table: sqlite_stat4 +stmt 4932 err 1 -1 5133 no such table: sqlite_stat4 +stmt 5133 err 1 -1 5331 no such table: sqlite_stat4 +stmt 5331 err 1 -1 5529 no such table: sqlite_stat4 +stmt 5529 err 1 -1 5742 no such table: sqlite_stat4 +stmt 5742 err 1 -1 5965 no such table: sqlite_stat4 +stmt 5965 err 1 -1 6188 no such table: sqlite_stat4 +stmt 6188 err 1 -1 6413 no such table: sqlite_stat4 +stmt 6413 err 1 -1 6635 no such table: sqlite_stat4 +stmt 6635 err 1 -1 6858 no such table: sqlite_stat4 +stmt 6858 err 1 -1 7080 no such table: sqlite_stat4 +stmt 7080 err 1 -1 7307 no such table: sqlite_stat4 +stmt 7307 err 1 -1 7530 no such table: sqlite_stat4 +stmt 7530 err 1 -1 7756 no such table: sqlite_stat4 +stmt 7756 err 1 -1 7978 no such table: sqlite_stat4 +stmt 7978 err 1 -1 8203 no such table: sqlite_stat4 +stmt 8203 err 1 -1 8427 no such table: sqlite_stat4 +stmt 8427 err 1 -1 8655 no such table: sqlite_stat4 +stmt 8655 err 1 -1 8877 no such table: sqlite_stat4 +stmt 8877 err 1 -1 9103 no such table: sqlite_stat4 +stmt 9103 err 1 -1 9330 no such table: sqlite_stat4 +stmt 9330 err 1 -1 9555 no such table: sqlite_stat4 +stmt 9555 err 1 -1 9781 no such table: sqlite_stat4 +stmt 9781 err 1 -1 10005 no such table: sqlite_stat4 +stmt 10005 err 1 -1 10232 no such table: sqlite_stat4 +stmt 10232 err 1 -1 10456 no such table: sqlite_stat4 +stmt 10456 err 1 -1 10680 no such table: sqlite_stat4 +stmt 10680 err 1 -1 10915 no such table: sqlite_stat4 +stmt 10915 err 1 -1 11449 no such table: sqlite_stat4 +stmt 11449 err 1 -1 12036 no such table: sqlite_stat4 +stmt 12036 err 1 -1 12622 no such table: sqlite_stat4 +stmt 12622 err 1 -1 13216 no such table: sqlite_stat4 +stmt 13216 err 1 -1 13784 no such table: sqlite_stat4 +stmt 13784 err 1 -1 14380 no such table: sqlite_stat4 +stmt 14380 err 1 -1 14952 no such table: sqlite_stat4 +stmt 14952 err 1 -1 15544 no such table: sqlite_stat4 +stmt 15544 err 1 -1 16135 no such table: sqlite_stat4 +stmt 16135 err 1 -1 16732 no such table: sqlite_stat4 +stmt 16732 err 1 -1 17336 no such table: sqlite_stat4 +stmt 17336 err 1 -1 17915 no such table: sqlite_stat4 +stmt 17915 err 1 -1 18505 no such table: sqlite_stat4 +stmt 18505 err 1 -1 19084 no such table: sqlite_stat4 +stmt 19084 err 1 -1 19657 no such table: sqlite_stat4 +stmt 19657 err 1 -1 20254 no such table: sqlite_stat4 +stmt 20254 err 1 -1 20848 no such table: sqlite_stat4 +stmt 20848 err 1 -1 21443 no such table: sqlite_stat4 +stmt 21443 err 1 -1 22049 no such table: sqlite_stat4 +stmt 22049 err 1 -1 22641 no such table: sqlite_stat4 +stmt 22641 err 1 -1 23236 no such table: sqlite_stat4 +stmt 23236 err 1 -1 23835 no such table: sqlite_stat4 +stmt 23835 err 1 -1 24441 no such table: sqlite_stat4 +stmt 24441 err 1 -1 25069 no such table: sqlite_stat4 +stmt 25069 err 1 -1 25598 no such table: sqlite_stat4 +stmt 25598 err 1 -1 26182 no such table: sqlite_stat4 +stmt 26182 err 1 -1 26768 no such table: sqlite_stat4 +stmt 26768 err 1 -1 27348 no such table: sqlite_stat4 +stmt 27348 err 1 -1 27908 no such table: sqlite_stat4 +stmt 27908 err 1 -1 28472 no such table: sqlite_stat4 +stmt 28472 err 1 -1 29054 no such table: sqlite_stat4 +stmt 29054 err 1 -1 29643 no such table: sqlite_stat4 +stmt 29643 err 1 -1 30210 no such table: sqlite_stat4 +stmt 30210 err 1 -1 30798 no such table: sqlite_stat4 +stmt 30798 err 1 -1 31361 no such table: sqlite_stat4 +stmt 31361 err 1 -1 31925 no such table: sqlite_stat4 +stmt 31925 err 1 -1 32488 no such table: sqlite_stat4 +stmt 32488 err 1 -1 33057 no such table: sqlite_stat4 +stmt 33057 err 1 -1 33620 no such table: sqlite_stat4 +stmt 33620 err 1 -1 34187 no such table: sqlite_stat4 +stmt 34187 err 1 -1 34780 no such table: sqlite_stat4 +stmt 34780 err 1 -1 35349 no such table: sqlite_stat4 +stmt 35349 err 1 -1 35914 no such table: sqlite_stat4 +stmt 35914 err 1 -1 36481 no such table: sqlite_stat4 +stmt 36481 err 1 -1 37054 no such table: sqlite_stat4 +stmt 37054 err 1 -1 37615 no such table: sqlite_stat4 +stmt 37615 err 1 -1 38208 no such table: sqlite_stat4 +stmt 38208 err 1 -1 38842 no such table: sqlite_stat4 +stmt 38842 err 1 -1 39138 no such table: sqlite_stat4 +stmt 39138 err 1 -1 39434 no such table: sqlite_stat4 +stmt 39434 err 1 -1 39731 no such table: sqlite_stat4 +stmt 39731 err 1 -1 40024 no such table: sqlite_stat4 +stmt 40024 err 1 -1 40321 no such table: sqlite_stat4 +stmt 40321 err 1 -1 40617 no such table: sqlite_stat4 +stmt 40617 err 1 -1 40911 no such table: sqlite_stat4 +stmt 40911 err 1 -1 41217 no such table: sqlite_stat4 +stmt 41217 err 1 -1 41519 no such table: sqlite_stat4 +stmt 41519 err 1 -1 41823 no such table: sqlite_stat4 +stmt 41823 err 1 -1 42127 no such table: sqlite_stat4 +stmt 42127 err 1 -1 42445 no such table: sqlite_stat4 +stmt 42445 err 1 -1 42750 no such table: sqlite_stat4 +stmt 42750 err 1 -1 43064 no such table: sqlite_stat4 +stmt 43064 err 1 -1 43383 no such table: sqlite_stat4 +stmt 43383 err 1 -1 43710 no such table: sqlite_stat4 +stmt 43710 err 1 -1 44027 no such table: sqlite_stat4 +stmt 44027 err 1 -1 44344 no such table: sqlite_stat4 +stmt 44344 err 1 -1 44671 no such table: sqlite_stat4 +stmt 44671 err 1 -1 45008 no such table: sqlite_stat4 +stmt 45008 err 1 -1 45345 no such table: sqlite_stat4 +stmt 45345 err 1 -1 45684 no such table: sqlite_stat4 +stmt 45684 err 1 -1 46019 no such table: sqlite_stat4 +stmt 46019 err 1 -1 46357 no such table: sqlite_stat4 +==== whereJ-1.3 + + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 4748 4629 308 1 1 1 1 1','0 0 0 634880 634880 639119 639426 639426 639426 639426 639426','0 0 0 779 907 26900 633919 633920 633920 633920 639426',X'0C0808080308040403080803018C4A00F450A80132671F029EAC271DA5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 4608 4608 246 1 1 1 1 1','0 0 0 752580 752580 755578 755823 755823 755823 755823 755823','0 0 0 936 1089 31876 749384 749385 749385 749385 755823',X'0C0808080308030403080804018D4F347FD20131547D018A7500936FE2'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 4776 4776 240 1 1 1 1 1','0 0 0 762070 762070 764545 764784 764784 764784 764784 764784','0 0 0 940 1097 32187 758274 758275 758275 758275 764784',X'0C0808080308030403080804018D562E0EAB0131A68F029E9300994D36'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 5910 5910 257 1 1 1 1 1','0 0 0 771353 771353 772646 772902 772902 772902 772902 772902','0 0 0 946 1103 32460 766333 766334 766334 766334 772902',X'0C0808080308030404080803018D611726F40130E13C00822B980302A0'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 1834 1834 46 1 1 1 1 1','0 0 0 1296866 1296866 1297832 1297869 1297869 1297869 1297869 1297869','0 0 0 2621 2842 56932 1287063 1287064 1287064 1287064 1297869',X'0C080808030803040308080301A6E33010BC01317F2005516E3932DB'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 5007 3959 317 1 1 1 1 1','0 0 0 2152400 2152400 2153781 2154097 2154097 2154097 2154097 2154097','0 0 0 5683 6304 111431 2139450 2139457 2139457 2139457 2154097',X'0C080808030803040308080301C3F91E114001315549029F74635F36'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 4768 4609 397 1 1 1 1 1','0 0 0 2200466 2200466 2200700 2201096 2201096 2201096 2201096 2201096','0 0 0 5714 6370 114266 2186220 2186227 2186227 2186227 2201096',X'0C080808030803040308080401C42217887E01312D72036D5B009AF3F8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 5177 4669 264 1 1 1 1 1','0 0 0 2234078 2234078 2235865 2236128 2236128 2236128 2236128 2236128','0 0 0 5743 6422 116499 2221108 2221115 2221115 2221115 2236128',X'0C080808030803040308080401C4491EF49D013155450D4B200091BFB3'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 7981 5546 272 1 1 1 1 1','0 0 0 2239923 2239923 2242583 2242854 2242854 2242854 2242854 2242854','0 0 0 5746 6428 116800 2227775 2227782 2227782 2227782 2242854',X'0C080808030803040308080301C44E2EFF35013109E67764687E36D6'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 351 336 15 1 1 1 1 1','0 0 0 2595725 2595725 2595725 2595739 2595739 2595739 2595739 2595739','0 0 0 6747 7717 144364 2578697 2578708 2578708 2578708 2595739',X'0C080808030803040308080401CCC91782C20131CC1902D7C0008E7A4F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 6022 4942 304 1 1 1 1 1','0 0 0 2648510 2648510 2648849 2649152 2649152 2649152 2649152 2649152','0 0 0 6934 7959 149030 2631886 2631900 2631900 2631900 2649152',X'0C080808030803040308080301CE8C17887E01312D6E036D5B424939'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 4752 1965 5 1 1 1 1 1','0 0 0 3161780 3161780 3163740 3163744 3163744 3163744 3163744 3163744','0 0 0 9707 11219 194477 3143873 3143896 3143896 3143896 3163744',X'0C08080803080404030808030213B20116290C01332B9D0270102494C2'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 5497 1880 3 1 1 1 1 1','0 0 0 3167643 3167643 3169520 3169522 3169522 3169522 3169522 3169522','0 0 0 9709 11226 194760 3149632 3149655 3149655 3149655 3169522',X'0C08080803080404040808030213B5010B0A5C0133294500FF55941DCA72'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 2185 2126 134 1 1 1 1 1','0 0 0 3891669 3891669 3893607 3893609 3893609 3893609 3893609 3893609','0 0 0 13596 15952 257364 3869701 3869733 3869733 3869733 3893609',X'0C080808030804040308080302BD5F01010F13013350517B8BF356D913'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 5511 5355 345 1 1 1 1 1','0 0 0 3931849 3931849 3931954 3932298 3932298 3932298 3932298 3932298','0 0 0 13793 16188 260160 3908172 3908206 3908206 3908206 3932298',X'0C080808030803040308080402C14C17887E01312D75036D5B009AF4B1'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 5468 5115 310 1 1 1 1 1','0 0 0 3939090 3939090 3939894 3940203 3940203 3940203 3940203 3940203','0 0 0 13803 16200 260571 3916034 3916068 3916068 3916068 3940203',X'0C080808030803040308080302C164191E7F0131A4FC0606F30CE25A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 5275 4792 252 1 1 1 1 1','0 0 0 4590216 4590216 4591340 4591591 4591591 4591591 4591591 4591591','0 0 0 17456 20455 315887 4563939 4563981 4563981 4563981 4591591',X'0C0808080308030403080804049EE51EB67B01317C5204C9D900AE08CD'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 339 339 20 1 1 1 1 1','0 0 0 5191257 5191257 5191475 5191479 5191479 5191479 5191479 5191479','0 0 0 20754 24230 366257 5160652 5160701 5160701 5160701 5191479',X'0C08080803080404030808030CEE9300E50D8D013242BE018A755F6BC3'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 7173953 7173950 13 13 1 1 1 1 1 1','0 0 0 6489337 6489337 6489349 6489349 6489349 6489349 6489349 6489349','0 0 0 29449 33987 481632 6453309 6453378 6453378 6453378 6489349',X'0C08080804080304030808030091B3AB600E9801323F54029F7403EF0C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 630326 618063 10 9 1 1 1 1 1 1','0 7173953 7173953 7787217 7787217 7787219 7787219 7787219 7787219 7787219 7787219','0 1 2 74978 85458 1107555 7744920 7744997 7744997 7744997 7787219',X'0C0809080408030403080804014F459B48960801332ADC01C7A600AA1BA3'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','7804279 630326 12263 17 1 1 1 1 1 1 1','0 7173953 7792016 7795570 7795586 7795586 7795586 7795586 7795586 7795586 7795586','0 1 3 78329 89057 1115864 7753287 7753364 7753364 7753364 7795586',X'0C0809010302040404080804070267C1271300E640740133041E00AB540900A3EE16'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','3876548 3718791 3718791 397 397 46 1 1 1 1 1','7804279 7804279 7804279 9084892 9084892 9085088 9085089 9085089 9085089 9085089 9085089','1 2 4 87584 99143 1159195 9040539 9040616 9040616 9040616 9085089',X'0C090808030804040308080301CBAF00E5C288013351810C390F26671E'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','3876548 3718791 3718791 141 141 20 1 1 1 1 1','7804279 7804279 7804279 10382921 10382921 10382951 10382959 10382959 10382959 10382959 10382959','1 2 4 95054 107437 1210217 10336699 10336776 10336776 10336776 10382959',X'0C09080803080304030808030DB5C14114E301332A7E018A751F17C1'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix4','3876548 157757 157736 83 16 1 1 1 1 1 1','7804279 11523070 11523070 11587733 11587800 11587815 11587815 11587815 11587815 11587815 11587815','1 3 5 112412 126326 1332792 11540704 11540781 11540781 11540781 11587815',X'0C090908030204040308080402A9D12328010B92880133517F029E9D008B5B23'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 213279 213279 213279 213279 376 212 101 1 1','0 0 12394 12394 12394 12394 18421 18421 18421 18424 18424','0 0 3 3 3 3 810 1027 1949 18324 18424',X'0C0808030808080308030403018A75018788178574013265FC611E2A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 86515 86515 86515 86515 377 377 377 1 1','0 0 271240 271240 271240 271240 274521 274521 274521 274780 274780','0 0 8 8 8 8 9766 10762 19602 273178 274780',X'0C080803080808030803040401A79C01886F174AEF0132678B00A4AEFF'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 193482 193482 193482 193482 444 444 444 1 1','0 0 542802 542802 542802 542802 575453 575453 575453 575505 575505','0 0 27 27 27 27 24310 25597 43165 571774 575505',X'0C080803080808030803040401C3EB018CCE55312F013305B700AF487C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 126108 126108 126108 126108 200 200 28 1 1','0 0 747801 747801 747801 747801 762121 762121 762293 762320 762320','0 0 33 33 33 33 30770 32410 56629 757315 762320',X'0C080803080808030803040301C7A6018A9D6AB1100131F17D04364A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 149712 149712 149712 149712 216 216 5 1 1','0 0 1107747 1107747 1107747 1107747 1147090 1147090 1147301 1147305 1147305','0 0 98 98 98 98 51603 53785 94043 1139967 1147305',X'0C080803080808030803040302172301B84D2E828501317B95651924'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 87289 87289 87289 87289 27 27 12 1 1','0 0 1257751 1257751 1257751 1257751 1297850 1297850 1297865 1297869 1297869','0 0 100 100 100 100 57625 60123 107069 1289807 1297869',X'0C0808030808080308040403021FFC02554D00E643C7013242692A9BBC'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 192597 192597 192597 192597 291 291 3 1 1','0 0 1464077 1464077 1464077 1464077 1512946 1512946 1513234 1513236 1513236','0 0 134 134 134 134 67476 70262 123260 1502886 1513236',X'0C0808030808080308040404029E6201B94000F8341701330419008B74DA'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 196917 196917 196917 196917 326 326 12 1 1','0 0 1677739 1677739 1677739 1677739 1797333 1797333 1797647 1797658 1797658','0 0 136 136 136 136 76717 80026 143308 1785522 1797658',X'0C0808030808080308040404029E6802B7DC0108ACBA0132DD7B0087795F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 140297 140297 140297 140297 206 188 90 1 1','0 0 1951850 1951850 1951850 1951850 2020506 2020524 2020622 2020711 2020711','0 0 146 146 146 146 85439 89181 160816 2006993 2020711',X'0C0808030808080302040403029E8102171603E800FA82B20132B5AD384ECD'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 132041 132041 132041 132041 173 173 20 1 1','0 0 2415706 2415706 2415706 2415706 2428962 2428962 2429115 2429134 2429134','0 0 163 163 163 163 100984 105182 186071 2412732 2429134',X'0C0808030808080308030403029EB1018BF55020D60131A3D23BB156'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 6830 6830 6830 6830 35 35 35 1 1','0 0 2595444 2595444 2595444 2595444 2595711 2595711 2595711 2595739 2595739','0 0 169 169 169 169 108584 113037 199947 2578183 2595739',X'0C0808030808080308030403029EC001878C17A7520131A43A6E513C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 101615 101615 101615 101615 244 33 33 1 1','0 0 2999185 2999185 2999185 2999185 3019255 3019466 3019466 3019498 3019498','0 0 213 213 213 213 131035 136293 237357 2999333 3019498',X'0C080803080808030203040302D7C001B93E03F041A96D013303017C72B6'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 26914 26914 26914 26914 87 87 73 1 1','0 0 3868553 3868553 3868553 3868553 3893568 3893568 3893582 3893609 3893609','0 0 387 387 387 387 172456 180121 311050 3869040 3893609',X'0C08080308080803080304040498C86B7EF347CC5A0132B678008A4646'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 97492 97492 97492 97492 410 410 44 1 1','0 0 4948831 4948831 4948831 4948831 5009456 5009456 5009822 5009865 5009865','0 0 751 751 751 751 226745 236274 399260 4980988 5009865',X'0C08080308080803080404030E565F03686C00F89CD001332A115479DC'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 1782 1782 1782 1782 52 52 52 1 1','0 0 5190938 5190938 5190938 5190938 5191434 5191434 5191434 5191479 5191479','0 0 800 800 800 800 236362 246237 414618 5161779 5191479',X'0C08080308080803080304040EBD0F0268E064A6DB013242CB00875BAF'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 4645 4645 4645 4645 17 17 17 1 1','0 0 6485214 6485214 6485214 6485214 6489339 6489339 6489339 6489349 6489349','0 0 1396 1396 1396 1396 317293 329836 538486 6453712 6489349',X'0C080804080808040803040300ABD9B000A69D33737CBB01328F6B0F6298'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 7173953 290196 290196 290196 290196 138 138 26 1 1','0 0 6734628 6734628 6734628 6734628 6744872 6744872 6744984 6745009 6745009','0 0 1641 1641 1641 1641 338986 352099 569319 6708651 6745009',X'0C080804080808030804040400FF5594018819010B3C670133294300B1674C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','7804279 630326 24310 1435 1435 1435 1 1 1 1 1','0 7173953 7763625 7786500 7786500 7786500 7787219 7787219 7787219 7787219 7787219','0 1 3518 4119 4119 4119 726018 753845 1215054 7745002 7787219',X'0C080904010808030204040400FF5594070357AB232800F2FA440133294600A90441'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','3876548 3718791 114188 114188 114188 114188 463 61 61 1 1','7804279 7804279 7809377 7809377 7809377 7809377 7864755 7865157 7865157 7865217 7865217','1 2 3751 4413 4413 4413 740133 768607 1233927 7822883 7865217',X'0C0908030808080302030403018A750213B2245416DF860131CB3A2879CC'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','3876548 3718791 86108 86108 86108 86108 605 605 605 1 1','7804279 7804279 8403815 8403815 8403815 8403815 8463845 8463845 8463845 8464449 8464449','1 2 3805 4467 4467 4467 760796 789718 1255047 8421249 8464449',X'0C0908030808080308030403021FFC0DC36E1AD36901328E2F3D9128'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','3876548 3718791 60490 60490 60490 60490 44 44 44 1 1','7804279 7804279 9062901 9062901 9062901 9062901 9085056 9085056 9085056 9085089 9085089','1 2 3845 4507 4507 4507 778931 808217 1273550 9040805 9085089',X'0C0908030808080308040403029EB101C30B00E889140132697F092505'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','3876548 3718791 57304 57304 57304 57304 2 2 2 1 1','7804279 7804279 10328144 10328144 10328144 10328144 10382958 10382958 10382958 10382959 10382959','1 2 4106 4768 4768 4768 823966 853934 1319290 10336860 10382959',X'0C09080308080804080404040E565F00CE8C3100E7F68D0133517900B0B4CE'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','3876548 3718791 174377 174377 174377 174377 81 81 66 1 1','7804279 7804279 11246252 11246252 11246252 11246252 11358749 11358749 11358764 11358829 11358829','1 2 4517 5179 5179 5179 867595 898252 1363807 11311829 11358829',X'0C090804080808030804040300FF55940E584300F2FA44013240670E2E89'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix3','3876548 157757 15066 15066 15066 15066 1 1 1 1 1','7804279 11523070 11657249 11657249 11657249 11657249 11672314 11672314 11672314 11672314 11672314','1 3 5503 6167 6167 6167 1025351 1059076 1524822 11625280 11672314',X'0C090904080808040203040300FF5594025D19032328337763013351F2277A3E'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 4748 4629 4629 4629 4629 17 1 1 1','0 0 634880 634880 634880 634880 634880 639175 639191 639191 639191','0 0 779 907 907 907 907 415429 633684 633685 639191',X'0C0808030808080804030303018C4A013157983CE7FE05E54B6BB7FB'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 4608 4608 4608 4608 4608 33 1 1 1','0 0 752580 752580 752580 752580 752580 755506 755538 755538 755538','0 0 936 1089 1089 1089 1089 491324 749126 749127 755538',X'0C0808030808080804030303018D4F0131A682512ECF029E6A70A9E9'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 4776 4776 4776 4776 4776 27 1 1 1','0 0 762070 762070 762070 762070 762070 763357 763383 763383 763383','0 0 940 1097 1097 1097 1097 495628 756890 756891 763383',X'0C0808030808080804040303018D560132DB8800F3416D029EA654D9AC'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 5910 5910 5910 5910 5910 37 2 2 1','0 0 771353 771353 771353 771353 771353 775562 775597 775597 775598','0 0 946 1103 1103 1103 1103 501111 769013 769014 775598',X'0C0808030808080804030303018D610131CADE4C6E2D01D5860141A9'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 1834 1834 1834 1834 1834 6 1 1 1','0 0 1296866 1296866 1296866 1296866 1296866 1297867 1297869 1297869 1297869','0 0 2621 2842 2842 2842 2842 857867 1287063 1287064 1297869',X'0C080803080808080403030301A6E30132419A1E1B7F0567EE2880C0'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 5007 3959 3959 3959 3959 25 1 1 1','0 0 2152400 2152400 2152400 2152400 2152400 2155551 2155575 2155575 2155575','0 0 5683 6304 6304 6304 6304 1442790 2140930 2140937 2155575',X'0C080803080808080404030301C3F901317CC701044CC7029E6834F7E2'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 4768 4609 4609 4609 4609 26 1 1 1','0 0 2200466 2200466 2200466 2200466 2200466 2204364 2204389 2204389 2204389','0 0 5714 6370 6370 6370 6370 1470393 2189496 2189503 2204389',X'0C080803080808080403030301C4220131586B3EB735018A7567CE9E'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 5177 4669 4669 4669 4669 22 1 1 1','0 0 2234078 2234078 2234078 2234078 2234078 2238366 2238387 2238387 2238387','0 0 5743 6422 6422 6422 6422 1490145 2223355 2223362 2238387',X'0C080803080808080403030301C4490131573F4104F802D9CA67FD1E'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 7981 5546 5546 5546 5546 32 1 1 1','0 0 2239923 2239923 2239923 2239923 2239923 2243388 2243419 2243419 2243419','0 0 5746 6428 6428 6428 6428 1492784 2228358 2228365 2243419',X'0C080803080808080404030301C44E0131A4FE00FDCC04029E8175076B'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 351 336 336 336 336 1 1 1 1','0 0 2595725 2595725 2595725 2595725 2595725 2595739 2595739 2595739 2595739','0 0 6747 7717 7717 7717 7717 1732397 2578697 2578708 2595739',X'0C080803080808080404030301CCC901332A7700F17E5D0E5D6F523B01'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 6022 4942 4942 4942 4942 38 1 1 1','0 0 2648510 2648510 2648510 2648510 2648510 2652126 2652163 2652163 2652163','0 0 6934 7959 7959 7959 7959 1770411 2634884 2634898 2652163',X'0C080803080808080404030301CE8C01317DE800FE4E8B029E81458317'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 4752 1965 1965 1965 1965 1 1 1 1','0 0 3161780 3161780 3161780 3161780 3161780 3163744 3163744 3163744 3163744','0 0 9707 11219 11219 11219 11219 2143797 3143873 3143896 3163744',X'0C08080308080808040303030213B20130BC9216F939029E815B86EE'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 5497 1880 1880 1880 1880 1 1 1 1','0 0 3167643 3167643 3167643 3167643 3167643 3169522 3169522 3169522 3169522','0 0 9709 11226 11226 11226 11226 2148088 3149632 3149655 3169522',X'0C08080308080808040303030213B50130BBC616FC6501C7A62A1BB2'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 2185 2126 2126 2126 2126 4 1 1 1','0 0 3891670 3891670 3891670 3891670 3891670 3893609 3893609 3893609 3893609','0 0 13596 15952 15953 15953 15953 2677069 3869700 3869732 3893609',X'0C080803080808080403030302BD5F01317CC81782F704C9D95EFF0C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 5511 5355 5355 5355 5355 21 1 1 1','0 0 3931850 3931850 3931850 3931850 3931850 3936206 3936226 3936226 3936226','0 0 13793 16188 16189 16189 16189 2705655 3912091 3912125 3936226',X'0C080803080808080403030302C14C01317C514010FA01B64235E688'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 5468 5115 5115 5115 5115 27 1 1 1','0 0 3939091 3939091 3939091 3939091 3939091 3943255 3943281 3943281 3943281','0 0 13803 16200 16201 16201 16201 2709082 3919099 3919133 3943281',X'0C080803080808080403030302C16401317CC348B67001C3EB6824BB'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 5275 4792 4792 4792 4792 31 1 1 1','0 0 4590217 4590217 4590217 4590217 4590217 4591639 4591669 4591669 4591669','0 0 17456 20455 20456 20456 20456 3175906 4564022 4564064 4591669',X'0C0808030808080804040403049EE50132915200FA2F9300EA0DC50554E0'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 339 339 339 339 339 2 1 1 1','0 0 5191258 5191258 5191258 5191258 5191258 5191478 5191479 5191479 5191479','0 0 20754 24230 24231 24231 24231 3601696 5160652 5160701 5191479',X'0C08080308080808040303030CEE930132671A1B8AFF01B6426386D0'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 7173953 13 13 13 13 13 1 1 1 1','0 0 6489339 6489339 6489339 6489339 6489339 6489349 6489349 6489349 6489349','0 0 29449 33987 33989 33989 33989 4540005 6453309 6453378 6489349',X'0C08080408080808040303030091B3AB01321B5A4F26F2018A750B6686'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','7804279 630326 19 19 18 18 18 1 1 1 1','0 7173953 7787203 7787203 7787203 7787203 7787203 7787219 7787219 7787219 7787219','0 1 73522 83967 91688 91688 91688 5643606 7744920 7744997 7787219',X'0C080904080808080404030300FF69210132DB2900FB0715029EB573EB9F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','3876548 3718791 4598 4512 4512 4512 4512 38 1 1 1','7804279 7804279 8237877 8237877 8237877 8237877 8237877 8238986 8239023 8239023 8239023','1 2 76726 87349 95641 95641 95641 5923145 8195880 8195957 8239023',X'0C0908030808080804040404018D3F01332A780111068001FB6F840083BEF9'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','3876548 3718791 397 397 397 397 397 2 1 1 1','7804279 7804279 9084892 9084892 9084892 9084892 9084892 9085089 9085089 9085089 9085089','1 2 79826 90851 99143 99143 99143 6505397 9040540 9040617 9085089',X'0C090803080808080403030301CBAF0133028A4E35BE715A2A49098C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','3876548 3718791 141 141 141 141 141 2 1 1 1','7804279 7804279 10382921 10382921 10382921 10382921 10382921 10382958 10382959 10382959 10382959','1 2 87296 99145 107437 107437 107437 7432077 10336699 10336776 10382959',X'0C09080308080808040403030DB5C101332BF7010E37310EB97420BFF6'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix2','3876548 157757 83 16 16 16 16 1 1 1 1','7804279 11523070 11587750 11587817 11587817 11587817 11587817 11587832 11587832 11587832 11587832','1 3 104655 118035 126343 126343 126343 8311754 11540721 11540798 11587832',X'0C090903020808080404030402A9D1232801332CC300EB7D35029E83008581B1'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 24157 24157 24157 24157 24157 133 1 1 1','0 0 1236590 1236590 1236590 1236590 1236590 1241150 1241282 1241282 1241282','0 0 3120 3120 3120 3120 4771 741878 1223262 1228239 1241282',X'0C08080308080804040408031A080400FF559401321BC20099C49F3BE84C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 1209 1209 1209 1209 1209 2 1 1 1','0 0 1296873 1296873 1296873 1296873 1296873 1297868 1297869 1297869 1297869','0 0 3203 3203 3203 3203 4902 763298 1279554 1284645 1297869',X'0C08080308080803040308031A215F04C9D901317D1501B0A355A290'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 12129 12129 12129 12129 9261 38 1 1 1','0 0 1790076 1790076 1790076 1790076 1790076 1791737 1791774 1791774 1791774','0 0 4938 4938 4938 4938 7561 1075153 1767990 1775629 1791774',X'0C08080308080803040408031CE87E029E6B01328F6100B473FD5BE552'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 273 273 273 273 273 1 1 1 1','0 0 2595625 2595625 2595625 2595625 2595625 2595739 2595739 2595739 2595739','0 0 7863 7863 7863 7863 12132 1580849 2562484 2575172 2595739',X'0C08080308080803040308032F020502DA0E013241A16B73DE01E021'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 7735 7735 7735 7735 7735 503 1 1 1','0 0 2924165 2924165 2924165 2924165 2924165 2931394 2931896 2931896 2931896','0 0 9123 9123 9123 9123 14045 1794002 2895440 2909856 2931896',X'0C080803080808040404080433776300FF55940133294301C56631008BCB5A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 360 360 360 360 229 1 1 1 1','0 0 3893374 3893374 3893374 3893374 3893505 3893609 3893609 3893609 3893609','0 0 13912 13912 13912 13912 21124 2420346 3846830 3866425 3893609',X'0C08080308080803040308034717710E070B01317F7102C73A396CE1'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 683 683 683 683 671 2 1 1 1','0 0 5191447 5191447 5191447 5191447 5191459 5191479 5191479 5191479 5191479','0 0 20361 20361 20361 20361 30776 3226670 5127525 5158962 5191479',X'0C08080308080803040308037370D10F00290132B59A018F7A694C9B'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 213354 213354 213354 213354 213354 5934 1 1 1','0 0 6102233 6102233 6102233 6102233 6102233 6154276 6155650 6155650 6155650','0 0 26812 26812 26812 26812 39489 3770219 6079715 6119855 6155650',X'0C080804080808040403080300F2FA4400FF55940132DF1A01C0C115D4D4'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 3675 3675 3675 3675 3675 14 1 1 1','0 0 6486701 6486701 6486701 6486701 6486701 6489347 6489349 6489349 6489349','0 0 28380 28380 28380 28380 41383 3868787 6409451 6452691 6489349',X'0C080804080808030403020300F6ABAC6C967D0132B672026C8D03E8155844'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 24063 24063 24063 24063 24063 1799 1 1 1','0 0 7080914 7080914 7080914 7080914 7080914 7103178 7104976 7104976 7104976','0 0 35724 35725 35725 35725 49845 4189282 7019641 7067879 7104976',X'0C0808040808080404040804010B0A5C00FF55940133294301D2C35700A877B5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 7173953 20284 20284 20284 20284 20284 1518 1 1 1','0 0 7107240 7107240 7107240 7107240 7107240 7124584 7126101 7126101 7126101','0 0 35764 35765 35765 35765 49886 4191089 7040717 7089004 7126101',X'0C0808040808080404040803010B3C6700FF55940133294501F0A829511573'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 630326 13288 11855 11855 11855 11855 5449 1 1 1','0 7173953 7671119 7671119 7671119 7671119 7671119 7676514 7676526 7676526 7676526','0 1 64320 65543 65543 65543 92453 4431581 7580039 7634401 7676526',X'0C080904080808040403080400F2FA4400FF5594013329430186CB00A866E4'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','7804279 630326 61 61 61 61 61 14 1 1 1','0 7173953 7787172 7787172 7787172 7787172 7787172 7787217 7787219 7787219 7787219','0 1 73272 75274 75274 75274 103642 4468650 7689369 7745002 7787219',X'0C0809040808080304030803010ABA910DD2420133068F05DE6223042F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 8657 8657 8657 8657 8657 18 1 1 1','7804279 7804279 8360485 8360485 8360485 8360485 8360485 8360977 8360994 8360994 8360994','1 2 75785 77865 77865 77865 106290 4756698 8258979 8317590 8360994',X'0C09080308080803040408031AD369021FFC0133517F01B017F259F6C3'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 33421 33421 33421 33421 33421 2221 1 1 1','7804279 7804279 8873934 8873934 8873934 8873934 8873934 8874868 8877088 8877088 8877088','1 2 76834 78914 78914 78914 107340 5041847 8770182 8832668 8877088',X'0C090803080808040404020333776300FF5594013351790241FEE4232825FB3D'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 2182 2182 2182 2182 2182 20 1 1 1','7804279 7804279 9083187 9083187 9083187 9083187 9083187 9085087 9085089 9085089 9085089','1 2 77227 79307 79307 79307 107733 5141706 8974619 9040316 9085089',X'0C09080308080803040308043AC92C021FFC0132B668018BAB00964778'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 6008 6008 6008 6008 6008 26 1 1 1','7804279 7804279 9124662 9124662 9124662 9124662 9124662 9128286 9128311 9128311 9128311','1 2 77300 79380 79380 79380 107806 5160088 9016921 9083451 9128311',X'0C09080308080804040408033C1C5C00F024880132DB2100B88E8A420C1B'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 6023 6023 6023 6023 6023 91 1 1 1','7804279 7804279 9393480 9393480 9393480 9393480 9393480 9396519 9396609 9396609 9396609','1 2 77893 79973 79973 79973 108402 5311949 9282988 9351281 9396609',X'0C09080308080803040408044CDD9A7E1C230132DE4200D105C800A087F7'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 79 79 79 79 79 1 1 1 1','7804279 7804279 10382946 10382946 10382946 10382946 10382946 10382959 10382959 10382959 10382959','1 2 80421 82501 82501 82501 110947 5821380 10258569 10336296 10382959',X'0C090804080808030403080300E9A10A0CC3160133505F0D25365733C6'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 8251 8251 8251 8251 8251 37 1 1 1','7804279 7804279 11067468 11067468 11067468 11067468 11067468 11068084 11068120 11068120 11068120','1 2 83449 85529 85529 85529 113989 6177561 10936213 11021086 11068120',X'0C090804080808040404080400FFA4A7008A66AD01332AD10170A8B10084054A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 44772 44772 44772 44772 44772 3018 1 1 1','7804279 7804279 11268036 11268036 11268036 11268036 11268036 11282829 11285846 11285846 11285846','1 2 85052 87132 87132 87132 115597 6281979 11151347 11238812 11285846',X'0C0908040808080404040804010B0A5C00FF5594013351720249087400B0523C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 53775 53775 53775 53775 53775 4069 1 1 1','7804279 7804279 11330929 11330929 11330929 11330929 11330929 11359035 11363103 11363103 11363103','1 2 85255 87335 87335 87335 115800 6292285 11227544 11316069 11363103',X'0C0908040808080404040804010BFA8100FF5594013351280252F8A000B01818'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 3718791 39430 39430 39430 39430 39430 3018 1 1 1','7804279 7804279 11458789 11458789 11458789 11458789 11458789 11468188 11471205 11471205 11471205','1 2 86422 88502 88502 88502 116970 6333877 11333316 11424171 11471205',X'0C09080408080804040408040113B99600FF559401335174024530C4008AC82C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix1','3876548 157757 5317 5317 5317 5317 5317 12 1 1 1','7804279 11523070 11652844 11652844 11652844 11652844 11652844 11658149 11658160 11658160 11658160','1 3 97969 100051 100051 100051 128567 6429914 11517744 11611126 11658160',X'0C0909040808080404040804010BFA8100FF559401332B2E01521E0B008447F4'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 24157 29 29 29 29 29 1 1 1','0 0 1236590 1251799 1251799 1251799 1251799 1251799 1251827 1251827 1251827','0 0 3120 62451 63798 63798 63798 63798 1238772 1238782 1251827',X'0C08080303080808080404031A0804029BB30131CD3700FF55942B1368'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 1209 129 129 129 129 129 1 1 1','0 0 1296873 1297744 1297744 1297744 1297744 1297744 1297869 1297869 1297869','0 0 3203 65280 66657 66657 66657 66657 1284635 1284645 1297869',X'0C08080303080808080403041A215F01B0A30131066F04C9D90087162A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 12129 604 604 604 604 604 1 1 1','0 0 1790076 1790076 1790076 1790076 1790076 1790076 1790679 1790679 1790679','0 0 4938 95334 97612 97612 97612 97612 1774566 1774578 1790679',X'0C08080303080808080403031CE87E01870001317C4D0CED622FE2E8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 273 5 5 5 5 5 1 1 1','0 0 2595625 2595738 2595738 2595738 2595738 2595738 2595739 2595739 2595739','0 0 7863 145612 149427 149427 149427 149427 2575145 2575172 2595739',X'0C08080303080808080403042F020502C73A0133049702DA0E00A711F8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 7735 29 29 29 29 29 1 1 1','0 0 2924165 2929754 2929754 2929754 2929754 2929754 2929782 2929782 2929782','0 0 9123 167852 172269 172269 172269 172269 2907715 2907742 2929782',X'0C080803030808080804040333776375928D0133294300FF55945A824F'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 360 6 6 6 6 6 1 1 1','0 0 3893374 3893607 3893607 3893607 3893607 3893607 3893609 3893609 3893609','0 0 13912 240908 247109 247109 247109 247109 3866384 3866425 3893609',X'0C080803030808080804030347177104AF8701317D220E070B687905'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 683 32 32 32 32 32 2 2 1','0 0 5191447 5191465 5191465 5191465 5191465 5191465 5191479 5191479 5191479','0 0 20361 336764 345696 345696 345696 345696 5158907 5158962 5191479',X'0C08080303080808080403037370D101884501328F690F002900A69C'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 213354 113 113 113 113 113 1 1 1','0 0 6102233 6155183 6155183 6155183 6155183 6155183 6155295 6155295 6155295','0 0 26812 421693 433202 433202 433202 433202 6119212 6119281 6155295',X'0C080804030808080804040300F2FA44019B6D0132406700FF5594714AE8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 3675 241 241 241 241 241 1 1 1','0 0 6486701 6489287 6489287 6489287 6489287 6489287 6489349 6489349 6489349','0 0 28380 450494 462953 462953 462953 462953 6452616 6452691 6489349',X'0C080804040808080804030300F6ABAC009F84B60132DBDD6C967D155A2A'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 24063 38 38 38 38 38 1 1 1','0 0 7080914 7102383 7102383 7102383 7102383 7102383 7102420 7102420 7102420','0 0 35724 528136 541855 541858 541858 541858 7065247 7065323 7102420',X'0C0808040408080808040403010B0A5C00CCD3EE0133294500FF559459DDCD'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 7173953 20284 38 38 38 38 38 1 1 1','0 0 7107240 7126609 7126609 7126609 7126609 7126609 7126646 7126646 7126646','0 0 35764 531673 545484 545487 545487 545487 7089473 7089549 7126646',X'0C0808040408080808040403010B3C670114CE730133294300FF55942225CC'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 630326 13288 5 1 1 1 1 1 1 1','0 7173953 7671119 7675167 7675171 7675171 7675171 7675171 7675171 7675171 7675171','0 1 64320 967583 993386 999414 999414 999414 7632969 7633046 7675171',X'0C080904030308080804040400F2FA4401D16F0183350132DEFE00FF5594009FA501'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','7804279 630326 61 1 1 1 1 1 1 1 1','0 7173953 7787172 7787219 7787219 7787219 7787219 7787219 7787219 7787219 7787219','0 1 73272 1068631 1096442 1107608 1107608 1107608 7744925 7745002 7787219',X'0C0809040408080808040304010ABA9100AA4C1F013351DB0DD242008BFFEF'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 8657 605 605 605 605 605 1 1 1','7804279 7804279 8360485 8364643 8364643 8364643 8364643 8364643 8365247 8365247 8365247','1 2 75785 1096159 1124446 1135923 1135923 1135923 8321766 8321843 8365247',X'0C09080303080808080403031AD3690DC36E01328E2F021FFC3D9128'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 33421 57 26 26 26 26 1 1 1','7804279 7804279 8873934 8891008 8891039 8891039 8891039 8891039 8891064 8891064 8891064','1 2 76834 1110063 1138607 1150084 1150084 1150084 8846567 8846644 8891064',X'0C09080303020808080404043377630CE166232801332A1800FF559400836DFB'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 2182 94 94 94 94 94 1 1 1','7804279 7804279 9083187 9085006 9085006 9085006 9085006 9085006 9085089 9085089 9085089','1 2 77227 1115805 1144438 1155915 1155915 1155915 9040239 9040316 9085089',X'0C09080303080808080403033AC92C04AF670132B5FC021FFC38DBD0'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 6008 277 277 277 277 277 1 1 1','7804279 7804279 9124662 9124662 9124662 9124662 9124662 9124662 9124938 9124938 9124938','1 2 77300 1116652 1145304 1156781 1156781 1156781 9080000 9080077 9124938',X'0C09080303080808080404033C1C5C01B49901328DDA00F024883D6052'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 6023 50 50 50 50 50 1 1 1','7804279 7804279 9393480 9395815 9395815 9395815 9395815 9395815 9395864 9395864 9395864','1 2 77893 1123924 1152663 1164140 1164140 1164140 9350459 9350536 9395864',X'0C09080303080808080403034CDD9A01C30D013290877E1C2303CC11'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 79 6 6 6 6 6 1 1 1','7804279 7804279 10382946 10382956 10382956 10382956 10382956 10382956 10382959 10382959 10382959','1 2 80421 1154920 1184197 1195674 1195674 1195674 10336219 10336296 10382959',X'0C090804030808080804030400E9A10A02A47201332C6C0CC31600ABCD60'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 8251 280 280 280 280 280 1 1 1','7804279 7804279 11067468 11072690 11072690 11072690 11072690 11072690 11072969 11072969 11072969','1 2 83449 1186373 1216159 1227636 1227636 1227636 11025858 11025935 11072969',X'0C090804040808080804040300FFA4A70089DBDD0132B5FF008A66AD6AE2B8'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 44772 58 58 58 58 58 1 1 1','7804279 7804279 11268036 11269261 11269261 11269261 11269261 11269261 11269318 11269318 11269318','1 2 85052 1199706 1229712 1241189 1241189 1241189 11222207 11222284 11269318',X'0C0908040308080808040404010B0A5C018ACD0133294300FF559400B0E291'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 53775 37 19 19 19 19 1 1 1','7804279 7804279 11330929 11355027 11355045 11355045 11355045 11355045 11355063 11355063 11355063','1 2 85255 1206165 1236304 1247781 1247781 1247781 11307952 11308029 11355063',X'0C0908040302080808040403010BFA81026C24232801332B2E00FF55941F8BB5'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 3718791 39430 39 39 39 39 39 1 1 1','7804279 7804279 11458789 11476757 11476757 11476757 11476757 11476757 11476795 11476795 11476795','1 2 86422 1219089 1249476 1260953 1260953 1260953 11429684 11429761 11476795',X'0C09080403080808080404030113B99602F6AF01332B2E00FF55941F8A54'); + INSERT INTO sqlite_stat4 VALUES('tx1','ix0','3876548 157757 5317 1 1 1 1 1 1 1 1','7804279 11523070 11652844 11658160 11658160 11658160 11658160 11658160 11658160 11658160 11658160','1 3 97969 1358780 1391643 1403122 1403122 1403122 11611049 11611126 11658160',X'0C0909040402080808040403010BFA8102594CCB2328013351E800FF55945B0F5D'); + ANALYZE sqlite_master; +---- +stmt 0 err 1 -1 281 no such table: sqlite_stat4 +stmt 281 err 1 -1 563 no such table: sqlite_stat4 +stmt 563 err 1 -1 845 no such table: sqlite_stat4 +stmt 845 err 1 -1 1127 no such table: sqlite_stat4 +stmt 1127 err 1 -1 1420 no such table: sqlite_stat4 +stmt 1420 err 1 -1 1715 no such table: sqlite_stat4 +stmt 1715 err 1 -1 2012 no such table: sqlite_stat4 +stmt 2012 err 1 -1 2309 no such table: sqlite_stat4 +stmt 2309 err 1 -1 2604 no such table: sqlite_stat4 +stmt 2604 err 1 -1 2898 no such table: sqlite_stat4 +stmt 2898 err 1 -1 3193 no such table: sqlite_stat4 +stmt 3193 err 1 -1 3489 no such table: sqlite_stat4 +stmt 3489 err 1 -1 3787 no such table: sqlite_stat4 +stmt 3787 err 1 -1 4086 no such table: sqlite_stat4 +stmt 4086 err 1 -1 4385 no such table: sqlite_stat4 +stmt 4385 err 1 -1 4682 no such table: sqlite_stat4 +stmt 4682 err 1 -1 4981 no such table: sqlite_stat4 +stmt 4981 err 1 -1 5277 no such table: sqlite_stat4 +stmt 5277 err 1 -1 5570 no such table: sqlite_stat4 +stmt 5570 err 1 -1 5875 no such table: sqlite_stat4 +stmt 5875 err 1 -1 6187 no such table: sqlite_stat4 +stmt 6187 err 1 -1 6502 no such table: sqlite_stat4 +stmt 6502 err 1 -1 6829 no such table: sqlite_stat4 +stmt 6829 err 1 -1 7162 no such table: sqlite_stat4 +stmt 7162 err 1 -1 7432 no such table: sqlite_stat4 +stmt 7432 err 1 -1 7714 no such table: sqlite_stat4 +stmt 7714 err 1 -1 8005 no such table: sqlite_stat4 +stmt 8005 err 1 -1 8293 no such table: sqlite_stat4 +stmt 8293 err 1 -1 8591 no such table: sqlite_stat4 +stmt 8591 err 1 -1 8891 no such table: sqlite_stat4 +stmt 8891 err 1 -1 9198 no such table: sqlite_stat4 +stmt 9198 err 1 -1 9506 no such table: sqlite_stat4 +stmt 9506 err 1 -1 9816 no such table: sqlite_stat4 +stmt 9816 err 1 -1 10122 no such table: sqlite_stat4 +stmt 10122 err 1 -1 10418 no such table: sqlite_stat4 +stmt 10418 err 1 -1 10727 no such table: sqlite_stat4 +stmt 10727 err 1 -1 11029 no such table: sqlite_stat4 +stmt 11029 err 1 -1 11333 no such table: sqlite_stat4 +stmt 11333 err 1 -1 11631 no such table: sqlite_stat4 +stmt 11631 err 1 -1 11935 no such table: sqlite_stat4 +stmt 11935 err 1 -1 12251 no such table: sqlite_stat4 +stmt 12251 err 1 -1 12567 no such table: sqlite_stat4 +stmt 12567 err 1 -1 12893 no such table: sqlite_stat4 +stmt 12893 err 1 -1 13213 no such table: sqlite_stat4 +stmt 13213 err 1 -1 13532 no such table: sqlite_stat4 +stmt 13532 err 1 -1 13863 no such table: sqlite_stat4 +stmt 13863 err 1 -1 14199 no such table: sqlite_stat4 +stmt 14199 err 1 -1 14534 no such table: sqlite_stat4 +stmt 14534 err 1 -1 14817 no such table: sqlite_stat4 +stmt 14817 err 1 -1 15104 no such table: sqlite_stat4 +stmt 15104 err 1 -1 15393 no such table: sqlite_stat4 +stmt 15393 err 1 -1 15680 no such table: sqlite_stat4 +stmt 15680 err 1 -1 15979 no such table: sqlite_stat4 +stmt 15979 err 1 -1 16282 no such table: sqlite_stat4 +stmt 16282 err 1 -1 16583 no such table: sqlite_stat4 +stmt 16583 err 1 -1 16884 no such table: sqlite_stat4 +stmt 16884 err 1 -1 17187 no such table: sqlite_stat4 +stmt 17187 err 1 -1 17484 no such table: sqlite_stat4 +stmt 17484 err 1 -1 17787 no such table: sqlite_stat4 +stmt 17787 err 1 -1 18091 no such table: sqlite_stat4 +stmt 18091 err 1 -1 18395 no such table: sqlite_stat4 +stmt 18395 err 1 -1 18700 no such table: sqlite_stat4 +stmt 18700 err 1 -1 19006 no such table: sqlite_stat4 +stmt 19006 err 1 -1 19312 no such table: sqlite_stat4 +stmt 19312 err 1 -1 19622 no such table: sqlite_stat4 +stmt 19622 err 1 -1 19922 no such table: sqlite_stat4 +stmt 19922 err 1 -1 20219 no such table: sqlite_stat4 +stmt 20219 err 1 -1 20523 no such table: sqlite_stat4 +stmt 20523 err 1 -1 20847 no such table: sqlite_stat4 +stmt 20847 err 1 -1 21159 no such table: sqlite_stat4 +stmt 21159 err 1 -1 21488 no such table: sqlite_stat4 +stmt 21488 err 1 -1 21820 no such table: sqlite_stat4 +stmt 21820 err 1 -1 22130 no such table: sqlite_stat4 +stmt 22130 err 1 -1 22429 no such table: sqlite_stat4 +stmt 22429 err 1 -1 22736 no such table: sqlite_stat4 +stmt 22736 err 1 -1 23032 no such table: sqlite_stat4 +stmt 23032 err 1 -1 23341 no such table: sqlite_stat4 +stmt 23341 err 1 -1 23641 no such table: sqlite_stat4 +stmt 23641 err 1 -1 23941 no such table: sqlite_stat4 +stmt 23941 err 1 -1 24263 no such table: sqlite_stat4 +stmt 24263 err 1 -1 24575 no such table: sqlite_stat4 +stmt 24575 err 1 -1 24896 no such table: sqlite_stat4 +stmt 24896 err 1 -1 25215 no such table: sqlite_stat4 +stmt 25215 err 1 -1 25539 no such table: sqlite_stat4 +stmt 25539 err 1 -1 25843 no such table: sqlite_stat4 +stmt 25843 err 1 -1 26164 no such table: sqlite_stat4 +stmt 26164 err 1 -1 26498 no such table: sqlite_stat4 +stmt 26498 err 1 -1 26819 no such table: sqlite_stat4 +stmt 26819 err 1 -1 27142 no such table: sqlite_stat4 +stmt 27142 err 1 -1 27465 no such table: sqlite_stat4 +stmt 27465 err 1 -1 27787 no such table: sqlite_stat4 +stmt 27787 err 1 -1 28126 no such table: sqlite_stat4 +stmt 28126 err 1 -1 28472 no such table: sqlite_stat4 +stmt 28472 err 1 -1 28818 no such table: sqlite_stat4 +stmt 28818 err 1 -1 29164 no such table: sqlite_stat4 +stmt 29164 err 1 -1 29506 no such table: sqlite_stat4 +stmt 29506 err 1 -1 29804 no such table: sqlite_stat4 +stmt 29804 err 1 -1 30106 no such table: sqlite_stat4 +stmt 30106 err 1 -1 30407 no such table: sqlite_stat4 +stmt 30407 err 1 -1 30703 no such table: sqlite_stat4 +stmt 30703 err 1 -1 31005 no such table: sqlite_stat4 +stmt 31005 err 1 -1 31300 no such table: sqlite_stat4 +stmt 31300 err 1 -1 31600 no such table: sqlite_stat4 +stmt 31600 err 1 -1 31912 no such table: sqlite_stat4 +stmt 31912 err 1 -1 32222 no such table: sqlite_stat4 +stmt 32222 err 1 -1 32530 no such table: sqlite_stat4 +stmt 32530 err 1 -1 32838 no such table: sqlite_stat4 +stmt 32838 err 1 -1 33152 no such table: sqlite_stat4 +stmt 33152 err 1 -1 33462 no such table: sqlite_stat4 +stmt 33462 err 1 -1 33785 no such table: sqlite_stat4 +stmt 33785 err 1 -1 34112 no such table: sqlite_stat4 +stmt 34112 err 1 -1 34430 no such table: sqlite_stat4 +stmt 34430 err 1 -1 34755 no such table: sqlite_stat4 +stmt 34755 err 1 -1 35073 no such table: sqlite_stat4 +stmt 35073 err 1 -1 35400 no such table: sqlite_stat4 +stmt 35400 err 1 -1 35741 no such table: sqlite_stat4 +stmt 35741 err 1 -1 36078 no such table: sqlite_stat4 +stmt 36078 err 1 -1 36417 no such table: sqlite_stat4 +stmt 36417 err 1 -1 36752 no such table: sqlite_stat4 +stmt 36752 err 1 -1 37087 no such table: sqlite_stat4 +stmt 37087 ok +==== whereJ-1.4 + + EXPLAIN QUERY PLAN + SELECT aid, sid, MAX(edate) edate + FROM tx1 + WHERE cid = 115790 + AND sid = 9100 + AND edate <= 20140430 AND edate >= 20120429 + GROUP BY aid; +---- +stmt 0 err 1 -1 178 no such table: tx1 +==== whereJ-2.1 + + CREATE TABLE tab( + id INTEGER PRIMARY KEY, + minChild INTEGER REFERENCES t1, + maxChild INTEGER REFERENCES t1, + x INTEGER + ); + EXPLAIN QUERY PLAN + SELECT t4.x + FROM tab AS t0, tab AS t1, tab AS t2, tab AS t3, tab AS t4 + WHERE t0.id=0 + AND t1.id BETWEEN t0.minChild AND t0.maxChild + AND t2.id BETWEEN t1.minChild AND t1.maxChild + AND t3.id BETWEEN t2.minChild AND t2.maxChild + AND t4.id BETWEEN t3.minChild AND t3.maxChild + ORDER BY t4.x; +---- +stmt 0 ok +stmt 139 err 1 -1 475 no such table: tab +==== whereJ-2.2 + + EXPLAIN QUERY PLAN + SELECT t4.x + FROM tab AS t0a, tab AS t0b, + tab AS t1a, tab AS t1b, + tab AS t2a, tab AS t2b, + tab AS t3a, tab AS t3b, + tab AS t4 + WHERE 1 + AND t0a.id=1 + AND t1a.id BETWEEN t0a.minChild AND t0a.maxChild + AND t2a.id BETWEEN t1a.minChild AND t1a.maxChild + AND t3a.id BETWEEN t2a.minChild AND t2a.maxChild + AND t0b.id=2 + AND t1b.id BETWEEN t0b.minChild AND t0b.maxChild + AND t2b.id BETWEEN t1b.minChild AND t1b.maxChild + AND t3b.id BETWEEN t2b.minChild AND t2b.maxChild + AND t4.id BETWEEN t3a.minChild AND t3b.maxChild + ORDER BY t4.x; +---- +stmt 0 err 1 -1 627 no such table: tab +==== 3.1 + CREATE TABLE t1(a, b, c) +---- +stmt 0 ok +==== 3.2 + + SELECT a, count(*) FROM t1 GROUP BY a HAVING a < 8; +---- +stmt 0 err 1 -1 54 no such table: t1 +==== 3.3 + + CREATE INDEX idx_ab ON t1(a, b); + CREATE INDEX idx_c ON t1(c); + ANALYZE; +---- +stmt 0 err 1 -1 35 no such table: main.t1 +stmt 35 err 1 -1 66 no such table: main.t1 +stmt 66 ok +==== 4.1 + + CREATE TABLE le( + le_id largeint, + xid char(31), + type smallint, + name char(255) DEFAULT '', + mtime largeint DEFAULT 0, + muuid int DEFAULT 0 + ); + CREATE TABLE cx( + cx_id largeint, + code char(31), + type smallint, + name char(31), + description varchar, + role smallint, + mtime largeint DEFAULT 0, + muuid int DEFAULT 0, + le_id largeint DEFAULT 0, + imco smallint DEFAULT 0 + ); + CREATE TABLE px( + px_id largeint, + cx_id largeint, + px_tid largeint, + name char(31), + description varchar DEFAULT '', + ia smallint, + sl smallint, + le_id largeint DEFAULT 0, + mtime largeint DEFAULT 0, + muuid int DEFAULT 0 + ); + CREATE INDEX le_id on le (le_id); + CREATE INDEX c_id on cx (cx_id); + CREATE INDEX c_leid on cx (le_id); + CREATE INDEX p_id on px (px_id); + CREATE INDEX p_cid0 on px (cx_id); + CREATE INDEX p_pt on px (px_tid); + CREATE INDEX p_leid on px (le_id); +---- +stmt 0 ok +stmt 166 ok +stmt 424 ok +stmt 682 err 1 -1 718 no such table: main.le +stmt 718 err 1 -1 753 no such table: main.cx +stmt 753 err 1 -1 790 no such table: main.cx +stmt 790 err 1 -1 825 no such table: main.px +stmt 825 err 1 -1 862 no such table: main.px +stmt 862 err 1 -1 898 no such table: main.px +stmt 898 err 1 -1 935 no such table: main.px +==== 4.2 + + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('le','le_id','1979 1'); + INSERT INTO sqlite_stat1 VALUES('cx','c_leid','852 171'); + INSERT INTO sqlite_stat1 VALUES('cx','c_id','852 1'); + INSERT INTO sqlite_stat1 VALUES('px','p_leid','114443 63'); + INSERT INTO sqlite_stat1 VALUES('px','p_pt','114443 22889'); + INSERT INTO sqlite_stat1 VALUES('px','p_cid0','114443 181'); + INSERT INTO sqlite_stat1 VALUES('px','p_id','114443 1'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','162 162','162 162',X'030202013903fb'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','208 208','208 208',X'0302020253012d'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','219 219','219 219',X'030202025e0131'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','248 248','248 248',X'030202027b014e'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','265 265','265 265',X'030202028c015f'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','358 358','358 358',X'03020202e901bc'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','439 439','439 439',X'030202033a020d'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','657 657','657 657',X'030202041402b4'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','659 659','659 659',X'030202041602b6'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','681 681','681 681',X'030202042c02cc'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','831 831','831 831',X'03020204c20482'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','852 852','852 852',X'03020204d70497'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','870 870','870 870',X'03020204e904a9'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','879 879','879 879',X'03020204f204b2'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1099 1099','1099 1099',X'03020205ce058e'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1273 1273','1273 1273',X'030202067c05a9'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1319 1319','1319 1319',X'03020206e30730'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1330 1330','1330 1330',X'0302020700035b'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1539 1539','1539 1539',X'03020207d105d8'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1603 1603','1603 1603',X'03020208390780'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1759 1759','1759 1759',X'030202092f0618'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1843 1843','1843 1843',X'03020209880650'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1915 1915','1915 1915',X'03020209d0068b'); + INSERT INTO sqlite_stat4 VALUES('le','le_id','1 1','1927 1927','1927 1927',X'03020209dc0697'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','846 1','0 94','0 94',X'0308015f'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','846 1','0 189','0 189',X'03080200be'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','846 1','0 284','0 284',X'0308020120'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','846 1','0 379','0 379',X'030802017f'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','846 1','0 474','0 474',X'03080201de'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','846 1','0 569','0 569',X'030802023d'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','846 1','0 664','0 664',X'030802029f'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','846 1','0 759','0 759',X'03080202fe'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','3 1','846 847','1 847',X'0301024500e6'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','1 1','849 849','2 849',X'03010246027e'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','1 1','850 850','3 850',X'0301024700c9'); + INSERT INTO sqlite_stat4 VALUES('cx','c_leid','1 1','851 851','4 851',X'03010248027f'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','94 94','94 94',X'03020200b801a8'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','113 113','113 113',X'03020200d101ad'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','171 171','171 171',X'030201011d2a'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','177 177','177 177',X'030202012600f2'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','189 189','189 189',X'030202013501c8'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','206 206','206 206',X'030201014f2d'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','231 231','231 231',X'030202016d00fc'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','284 284','284 284',X'03020201b702d0'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','291 291','291 291',X'03020101c042'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','311 311','311 311',X'03020201d801e7'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','339 339','339 339',X'03020101f74b'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','347 347','347 347',X'03020202030118'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','379 379','379 379',X'030202022f01fa'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','393 393','393 393',X'030201023f55'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','407 407','407 407',X'03020202500201'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','413 413','413 413',X'03020102565a'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','468 468','468 468',X'030201029468'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','474 474','474 474',X'030202029a0211'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','517 517','517 517',X'03020102cc76'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','548 548','548 548',X'03020202f00223'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','569 569','569 569',X'03020203090087'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','664 664','664 664',X'03020203740163'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','759 759','759 759',X'03020203e800b3'); + INSERT INTO sqlite_stat4 VALUES('cx','c_id','1 1','803 803','803 803',X'030202041b026f'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','110728 1','0 12715','0 12715',X'030802345b'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','110728 1','0 25431','0 25431',X'0308026718'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','110728 1','0 38147','0 38147',X'030803009a5c'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','110728 1','0 50863','0 50863',X'03080300cdbe'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','110728 1','0 63579','0 63579',X'0308030100e8'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','110728 1','0 76295','0 76295',X'03080301351d'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','110728 1','0 89011','0 89011',X'03080301674c'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','110728 1','0 101727','0 101727',X'030803019b99'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','28 1','110824 110843','16 110843',X'0301037a0107f1'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','53 1','110873 110875','25 110875',X'0302020095275a'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','32 1','110927 110936','27 110936',X'030203009b009b4a'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','51 1','110980 111017','30 111017',X'03020300a4016c00'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','67 1','111047 111059','38 111059',X'03020200af2611'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','60 1','111136 111156','43 111156',X'03020300bc009aeb'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','42 1','111222 111239','59 111239',X'03020300d200b17b'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','36 1','111264 111266','60 111266',X'03020200d426d6'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','27 1','111733 111757','159 111757',X'030203014e017e1b'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','36 1','111760 111773','160 111773',X'030203014f00a2b9'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','29 1','111822 111833','167 111833',X'0302030176009c22'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','75 1','113031 113095','1190 113095',X'030203068501912c'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','132 1','113230 113263','1252 113263',X'0302030711009ee6'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','110 1','113851 113918','1572 113918',X'03020308e9011ca2'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','78 1','114212 114217','1791 114217',X'03020209e13b24'); + INSERT INTO sqlite_stat4 VALUES('px','p_leid','112 1','114303 114351','1799 114351',X'03020309ea0128f2'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','89824 1','0 12715','0 12715',X'030802477e'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','89824 1','0 25431','0 25431',X'0308027c20'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','89824 1','0 38147','0 38147',X'03080300c211'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','89824 1','0 50863','0 50863',X'03080300fbe5'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','89824 1','0 63579','0 63579',X'0308030140ff'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','89824 1','0 76295','0 76295',X'03080301792d'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','89824 1','0 89011','0 89011',X'03080301bb68'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','24217 1','89824 101727','1 101727',X'03090300da12'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','154 1','114041 114154','2 114154',X'0301030200e5e9'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','198 1','114195 114351','3 114351',X'03010303015cb1'); + INSERT INTO sqlite_stat4 VALUES('px','p_pt','50 1','114393 114441','4 114441',X'0301030401b2ef'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','3867 1','3 3736','2 3736',X'03010337015c6a'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','4194 1','4177 8209','5 8209',X'0301033b015075'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','4335 1','8371 11129','6 11129',X'0301033d0156fc'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','1740 1','12706 12715','7 12715',X'0301023e34b9'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','1680 1','14446 15487','8 15487',X'0301033f011694'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','7163 1','20116 25431','32 25431',X'03020300a400ed26'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','1525 1','29100 29302','42 29302',X'03020200bb00d1'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','3703 1','30655 33323','45 33323',X'03020300be013fa5'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','2612 1','37767 38147','61 38147',X'03020200e32828'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','1882 1','40545 41584','63 41584',X'03020300ea01a35a'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','6984 1','44110 50863','73 50863',X'0302030102017467'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','1728 1','51230 51680','75 51680',X'030203010400b3e0'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','2805 1','55491 57936','95 57936',X'030203014101a004'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','2837 1','58934 59506','103 59506',X'030203015900a283'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','94 1','63492 63579','137 63579',X'0302030191016319'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','3573 1','63591 64497','140 64497',X'030203019c00822e'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','5037 1','70917 73033','160 73033',X'03020301c70091d9'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','1940 1','75954 76295','161 76295',X'03020201c817f1'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','1927 1','83926 84371','209 84371',X'03020202114295'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','1522 1','86601 88117','213 88117',X'030203021b01b7b5'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','210 1','88906 89011','226 89011',X'030203022800dbbb'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','6165 1','92125 98066','258 98066',X'030203024d0189ac'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','2900 1','100721 101727','293 101727',X'030203027500cf39'); + INSERT INTO sqlite_stat4 VALUES('px','p_cid0','1501 1','110012 110154','503 110154',X'0302020380493a'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','11129 11129','11129 11129',X'03030300d84e014d51'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','12715 12715','12715 12715',X'03030200de816f51'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','13030 13030','13030 13030',X'03030200e05b6fc4'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','25431 25431','25431 25431',X'0303030123df00efb0'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','29302 29302','29302 29302',X'030302013a2812c7'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','35463 35463','35463 35463',X'03030301666e00f866'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','38147 38147','38147 38147',X'030302017a391b74'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','38525 38525','38525 38525',X'030303017c6e00fb58'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','50863 50863','50863 50863',X'03030201b68724dd'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','58461 58461','58461 58461',X'03030201d95b2e1e'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','59506 59506','59506 59506',X'03030301dd7000a0fb'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','63468 63468','63468 63468',X'03030301ecea011405'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','63579 63579','63579 63579',X'03030201ed5932d5'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','64497 64497','64497 64497',X'03030301f0ef00a680'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','73033 73033','73033 73033',X'0303030225b90190e5'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','75650 75650','75650 75650',X'030303023a19019362'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','76295 76295','76295 76295',X'030303023e9801940c'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','79152 79152','79152 79152',X'030303024be50196b9'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','83249 83249','83249 83249',X'0303030261750123b1'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','89011 89011','89011 89011',X'030303027b3900c3af'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','98066 98066','98066 98066',X'03030302a76500ce54'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','101590 101590','101590 101590',X'03030302b63d00d3b5'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','101727 101727','101727 101727',X'03030202b6f24e9b'); + INSERT INTO sqlite_stat4 VALUES('px','p_id','1 1','107960 107960','107960 107960',X'03030302d8ce0136ad'); + ANALYZE sqlite_master; +---- +stmt 0 ok +stmt 25 err 1 -1 83 no such table: sqlite_stat1 +stmt 83 err 1 -1 143 no such table: sqlite_stat1 +stmt 143 err 1 -1 199 no such table: sqlite_stat1 +stmt 199 err 1 -1 261 no such table: sqlite_stat1 +stmt 261 err 1 -1 324 no such table: sqlite_stat1 +stmt 324 err 1 -1 387 no such table: sqlite_stat1 +stmt 387 err 1 -1 446 no such table: sqlite_stat1 +stmt 446 err 1 -1 539 no such table: sqlite_stat4 +stmt 539 err 1 -1 632 no such table: sqlite_stat4 +stmt 632 err 1 -1 725 no such table: sqlite_stat4 +stmt 725 err 1 -1 818 no such table: sqlite_stat4 +stmt 818 err 1 -1 911 no such table: sqlite_stat4 +stmt 911 err 1 -1 1004 no such table: sqlite_stat4 +stmt 1004 err 1 -1 1097 no such table: sqlite_stat4 +stmt 1097 err 1 -1 1190 no such table: sqlite_stat4 +stmt 1190 err 1 -1 1283 no such table: sqlite_stat4 +stmt 1283 err 1 -1 1376 no such table: sqlite_stat4 +stmt 1376 err 1 -1 1469 no such table: sqlite_stat4 +stmt 1469 err 1 -1 1562 no such table: sqlite_stat4 +stmt 1562 err 1 -1 1655 no such table: sqlite_stat4 +stmt 1655 err 1 -1 1748 no such table: sqlite_stat4 +stmt 1748 err 1 -1 1845 no such table: sqlite_stat4 +stmt 1845 err 1 -1 1942 no such table: sqlite_stat4 +stmt 1942 err 1 -1 2039 no such table: sqlite_stat4 +stmt 2039 err 1 -1 2136 no such table: sqlite_stat4 +stmt 2136 err 1 -1 2233 no such table: sqlite_stat4 +stmt 2233 err 1 -1 2330 no such table: sqlite_stat4 +stmt 2330 err 1 -1 2427 no such table: sqlite_stat4 +stmt 2427 err 1 -1 2524 no such table: sqlite_stat4 +stmt 2524 err 1 -1 2621 no such table: sqlite_stat4 +stmt 2621 err 1 -1 2718 no such table: sqlite_stat4 +stmt 2718 err 1 -1 2802 no such table: sqlite_stat4 +stmt 2802 err 1 -1 2890 no such table: sqlite_stat4 +stmt 2890 err 1 -1 2978 no such table: sqlite_stat4 +stmt 2978 err 1 -1 3066 no such table: sqlite_stat4 +stmt 3066 err 1 -1 3154 no such table: sqlite_stat4 +stmt 3154 err 1 -1 3242 no such table: sqlite_stat4 +stmt 3242 err 1 -1 3330 no such table: sqlite_stat4 +stmt 3330 err 1 -1 3418 no such table: sqlite_stat4 +stmt 3418 err 1 -1 3508 no such table: sqlite_stat4 +stmt 3508 err 1 -1 3598 no such table: sqlite_stat4 +stmt 3598 err 1 -1 3688 no such table: sqlite_stat4 +stmt 3688 err 1 -1 3778 no such table: sqlite_stat4 +stmt 3778 err 1 -1 3866 no such table: sqlite_stat4 +stmt 3866 err 1 -1 3958 no such table: sqlite_stat4 +stmt 3958 err 1 -1 4048 no such table: sqlite_stat4 +stmt 4048 err 1 -1 4140 no such table: sqlite_stat4 +stmt 4140 err 1 -1 4232 no such table: sqlite_stat4 +stmt 4232 err 1 -1 4322 no such table: sqlite_stat4 +stmt 4322 err 1 -1 4414 no such table: sqlite_stat4 +stmt 4414 err 1 -1 4506 no such table: sqlite_stat4 +stmt 4506 err 1 -1 4596 no such table: sqlite_stat4 +stmt 4596 err 1 -1 4688 no such table: sqlite_stat4 +stmt 4688 err 1 -1 4778 no such table: sqlite_stat4 +stmt 4778 err 1 -1 4870 no such table: sqlite_stat4 +stmt 4870 err 1 -1 4962 no such table: sqlite_stat4 +stmt 4962 err 1 -1 5052 no such table: sqlite_stat4 +stmt 5052 err 1 -1 5144 no such table: sqlite_stat4 +stmt 5144 err 1 -1 5234 no such table: sqlite_stat4 +stmt 5234 err 1 -1 5324 no such table: sqlite_stat4 +stmt 5324 err 1 -1 5416 no such table: sqlite_stat4 +stmt 5416 err 1 -1 5506 no such table: sqlite_stat4 +stmt 5506 err 1 -1 5598 no such table: sqlite_stat4 +stmt 5598 err 1 -1 5690 no such table: sqlite_stat4 +stmt 5690 err 1 -1 5782 no such table: sqlite_stat4 +stmt 5782 err 1 -1 5874 no such table: sqlite_stat4 +stmt 5874 err 1 -1 5966 no such table: sqlite_stat4 +stmt 5966 err 1 -1 6061 no such table: sqlite_stat4 +stmt 6061 err 1 -1 6156 no such table: sqlite_stat4 +stmt 6156 err 1 -1 6253 no such table: sqlite_stat4 +stmt 6253 err 1 -1 6350 no such table: sqlite_stat4 +stmt 6350 err 1 -1 6447 no such table: sqlite_stat4 +stmt 6447 err 1 -1 6544 no such table: sqlite_stat4 +stmt 6544 err 1 -1 6641 no such table: sqlite_stat4 +stmt 6641 err 1 -1 6740 no such table: sqlite_stat4 +stmt 6740 err 1 -1 6843 no such table: sqlite_stat4 +stmt 6843 err 1 -1 6946 no such table: sqlite_stat4 +stmt 6946 err 1 -1 7051 no such table: sqlite_stat4 +stmt 7051 err 1 -1 7156 no such table: sqlite_stat4 +stmt 7156 err 1 -1 7259 no such table: sqlite_stat4 +stmt 7259 err 1 -1 7364 no such table: sqlite_stat4 +stmt 7364 err 1 -1 7469 no such table: sqlite_stat4 +stmt 7469 err 1 -1 7572 no such table: sqlite_stat4 +stmt 7572 err 1 -1 7678 no such table: sqlite_stat4 +stmt 7678 err 1 -1 7784 no such table: sqlite_stat4 +stmt 7784 err 1 -1 7890 no such table: sqlite_stat4 +stmt 7890 err 1 -1 7997 no such table: sqlite_stat4 +stmt 7997 err 1 -1 8105 no such table: sqlite_stat4 +stmt 8105 err 1 -1 8213 no such table: sqlite_stat4 +stmt 8213 err 1 -1 8318 no such table: sqlite_stat4 +stmt 8318 err 1 -1 8426 no such table: sqlite_stat4 +stmt 8426 err 1 -1 8518 no such table: sqlite_stat4 +stmt 8518 err 1 -1 8610 no such table: sqlite_stat4 +stmt 8610 err 1 -1 8704 no such table: sqlite_stat4 +stmt 8704 err 1 -1 8798 no such table: sqlite_stat4 +stmt 8798 err 1 -1 8892 no such table: sqlite_stat4 +stmt 8892 err 1 -1 8986 no such table: sqlite_stat4 +stmt 8986 err 1 -1 9080 no such table: sqlite_stat4 +stmt 9080 err 1 -1 9180 no such table: sqlite_stat4 +stmt 9180 err 1 -1 9281 no such table: sqlite_stat4 +stmt 9281 err 1 -1 9382 no such table: sqlite_stat4 +stmt 9382 err 1 -1 9482 no such table: sqlite_stat4 +stmt 9482 err 1 -1 9577 no such table: sqlite_stat4 +stmt 9577 err 1 -1 9675 no such table: sqlite_stat4 +stmt 9675 err 1 -1 9775 no such table: sqlite_stat4 +stmt 9775 err 1 -1 9874 no such table: sqlite_stat4 +stmt 9874 err 1 -1 9975 no such table: sqlite_stat4 +stmt 9975 err 1 -1 10079 no such table: sqlite_stat4 +stmt 10079 err 1 -1 10181 no such table: sqlite_stat4 +stmt 10181 err 1 -1 10285 no such table: sqlite_stat4 +stmt 10285 err 1 -1 10387 no such table: sqlite_stat4 +stmt 10387 err 1 -1 10491 no such table: sqlite_stat4 +stmt 10491 err 1 -1 10595 no such table: sqlite_stat4 +stmt 10595 err 1 -1 10699 no such table: sqlite_stat4 +stmt 10699 err 1 -1 10803 no such table: sqlite_stat4 +stmt 10803 err 1 -1 10908 no such table: sqlite_stat4 +stmt 10908 err 1 -1 11011 no such table: sqlite_stat4 +stmt 11011 err 1 -1 11116 no such table: sqlite_stat4 +stmt 11116 err 1 -1 11221 no such table: sqlite_stat4 +stmt 11221 err 1 -1 11324 no such table: sqlite_stat4 +stmt 11324 err 1 -1 11427 no such table: sqlite_stat4 +stmt 11427 err 1 -1 11532 no such table: sqlite_stat4 +stmt 11532 err 1 -1 11636 no such table: sqlite_stat4 +stmt 11636 err 1 -1 11741 no such table: sqlite_stat4 +stmt 11741 err 1 -1 11849 no such table: sqlite_stat4 +stmt 11849 err 1 -1 11955 no such table: sqlite_stat4 +stmt 11955 err 1 -1 12059 no such table: sqlite_stat4 +stmt 12059 err 1 -1 12161 no such table: sqlite_stat4 +stmt 12161 err 1 -1 12263 no such table: sqlite_stat4 +stmt 12263 err 1 -1 12367 no such table: sqlite_stat4 +stmt 12367 err 1 -1 12469 no such table: sqlite_stat4 +stmt 12469 err 1 -1 12573 no such table: sqlite_stat4 +stmt 12573 err 1 -1 12675 no such table: sqlite_stat4 +stmt 12675 err 1 -1 12779 no such table: sqlite_stat4 +stmt 12779 err 1 -1 12881 no such table: sqlite_stat4 +stmt 12881 err 1 -1 12983 no such table: sqlite_stat4 +stmt 12983 err 1 -1 13087 no such table: sqlite_stat4 +stmt 13087 err 1 -1 13191 no such table: sqlite_stat4 +stmt 13191 err 1 -1 13293 no such table: sqlite_stat4 +stmt 13293 err 1 -1 13397 no such table: sqlite_stat4 +stmt 13397 err 1 -1 13501 no such table: sqlite_stat4 +stmt 13501 err 1 -1 13605 no such table: sqlite_stat4 +stmt 13605 err 1 -1 13709 no such table: sqlite_stat4 +stmt 13709 err 1 -1 13813 no such table: sqlite_stat4 +stmt 13813 err 1 -1 13917 no such table: sqlite_stat4 +stmt 13917 err 1 -1 14021 no such table: sqlite_stat4 +stmt 14021 err 1 -1 14125 no such table: sqlite_stat4 +stmt 14125 err 1 -1 14233 no such table: sqlite_stat4 +stmt 14233 err 1 -1 14339 no such table: sqlite_stat4 +stmt 14339 err 1 -1 14447 no such table: sqlite_stat4 +stmt 14447 ok +==== 4.2.dup1 + + EXPLAIN QUERY PLAN + SELECT + px.name, + px.description + FROM + le, + cx, + px + WHERE + cx.code = '2990' + AND cx.type=2 + AND px.cx_id = cx.cx_id + AND px.px_tid = 0 + AND px.le_id = le.le_id; +---- +stmt 0 err 1 -1 228 no such table: le diff --git a/parser/testdata/whereK.metadata.json b/parser/testdata/whereK.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereK.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereK.test b/parser/testdata/whereK.test new file mode 100644 index 0000000..fbc8ae7 --- /dev/null +++ b/parser/testdata/whereK.test @@ -0,0 +1,83 @@ +==== 1.1 + + CREATE TABLE t1(a,b,c); + WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<99) + INSERT INTO t1(a,b,c) SELECT x, x/10, x%10 FROM c; + CREATE INDEX t1bc ON t1(b,c); + SELECT a FROM t1 WHERE b>9 OR b=9 ORDER BY +a; +---- +stmt 0 ok +stmt 26 err 1 -1 157 no such table: t1 +stmt 157 err 1 -1 189 no such table: main.t1 +stmt 189 err 1 -1 238 no such table: t1 +==== 1.1eqp + + EXPLAIN QUERY PLAN + SELECT a FROM t1 WHERE b>9 OR b=9 ORDER BY +a; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 1.2 + + SELECT a FROM t1 WHERE b>8 OR (b=8 AND c>7) ORDER BY +a; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 1.2eqp + + EXPLAIN QUERY PLAN + SELECT a FROM t1 WHERE b>8 OR (b=8 AND c>7) ORDER BY +a; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== 1.3 + + SELECT a FROM t1 WHERE (b=8 AND c>7) OR b>8 ORDER BY +a; +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 1.3eqp + + EXPLAIN QUERY PLAN + SELECT a FROM t1 WHERE (b=8 AND c>7) OR b>8 ORDER BY +a; +---- +stmt 0 err 1 -1 80 no such table: t1 +==== 1.4 + + SELECT a FROM t1 WHERE (b=8 AND c>7) OR 87) OR 87) OR (b>8 AND c NOT IN (4,5,6)) + ORDER BY +a; +---- +stmt 0 err 1 -1 85 no such table: t1 +==== 1.5eqp + + EXPLAIN QUERY PLAN + SELECT a FROM t1 WHERE (b=8 AND c>7) OR (b>8 AND c NOT IN (4,5,6)) + ORDER BY +a; +---- +stmt 0 err 1 -1 106 no such table: t1 +==== 2.1 + + DROP TABLE t1; + CREATE TABLE t0(x COLLATE NOCASE); + CREATE INDEX t0x ON t0(x); + CREATE TABLE t1(y); + INSERT INTO t0 VALUES('a'); + INSERT INTO t1 VALUES('AB'); + SELECT count(*) FROM t0, t1 WHERE (y BETWEEN 1 AND x) OR (x>=y AND x); + SELECT count(*) FROM t0, t1 WHERE (x>=y AND x) OR (y BETWEEN 1 AND x); +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 54 err 1 -1 83 no such table: main.t0 +stmt 83 ok +stmt 105 err 1 -1 135 no such table: t0 +stmt 135 err 1 -1 166 no such table: t1 +stmt 166 err 1 -1 239 no such table: t0 +stmt 239 err 1 -1 312 no such table: t0 diff --git a/parser/testdata/whereL.metadata.json b/parser/testdata/whereL.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/whereL.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/whereL.test b/parser/testdata/whereL.test new file mode 100644 index 0000000..325e8c3 --- /dev/null +++ b/parser/testdata/whereL.test @@ -0,0 +1,248 @@ +==== 100 + + CREATE TABLE t1(a INT PRIMARY KEY, b, c, d, e); + CREATE TABLE t2(a INT PRIMARY KEY, f, g, h, i); + CREATE TABLE t3(a INT PRIMARY KEY, j, k, l, m); + CREATE VIEW v4 AS SELECT * FROM t2 UNION ALL SELECT * FROM t3; +---- +stmt 0 ok +stmt 50 ok +stmt 100 ok +stmt 150 ok +==== 200 + + CREATE TABLE c3(x COLLATE binary, y COLLATE nocase, z COLLATE binary); + CREATE INDEX c3x ON c3(x); + INSERT INTO c3 VALUES('ABC', 'ABC', 'abc'); + SELECT * FROM c3 WHERE x=y AND y=z AND z='abc'; +---- +stmt 0 ok +stmt 73 err 1 -1 102 no such table: main.c3 +stmt 102 err 1 -1 148 no such table: c3 +stmt 148 err 1 -1 198 no such table: c3 +==== 201 + + SELECT * FROM c3 WHERE x='abc' AND y='abc' AND z='abc'; +---- +stmt 0 err 1 -1 58 no such table: c3 +==== 300 + + CREATE TABLE A(id INTEGER PRIMARY KEY, label TEXT); + CREATE TABLE B(id INTEGER PRIMARY KEY, label TEXT, Aid INTEGER); + CREATE TABLE C( + id INTEGER PRIMARY KEY, + xx INTEGER NOT NULL, + yy INTEGER, + zz INTEGER + ); + CREATE UNIQUE INDEX x2 ON C(yy); + CREATE UNIQUE INDEX x4 ON C(yy, zz); + INSERT INTO A(id) VALUES(1); + INSERT INTO B(id) VALUES(2); + INSERT INTO C(id,xx,yy,zz) VALUES(99,50,1,2); + SELECT 1 + FROM A, + (SELECT id,xx,yy,zz FROM C) subq, + B + WHERE A.id='1' + AND A.id=subq.yy + AND B.id=subq.zz; +---- +stmt 0 ok +stmt 54 ok +stmt 121 ok +stmt 228 err 1 -1 263 no such table: main.C +stmt 263 err 1 -1 302 no such table: main.C +stmt 302 err 1 -1 333 no such table: A +stmt 333 err 1 -1 364 no such table: B +stmt 364 err 1 -1 412 no such table: C +stmt 412 err 1 -1 552 no such table: A +==== 301 + + SELECT 1 + FROM A, + (SELECT id,xx,yy,zz FROM C) subq, + B + WHERE A.id=1 + AND A.id=subq.yy + AND B.id=subq.zz; +---- +stmt 0 err 1 -1 138 no such table: A +==== 302 + + SELECT 1 + FROM A, + (SELECT id,yy,zz FROM C) subq, + B + WHERE A.id='1' + AND A.id=subq.yy + AND B.id=subq.zz; +---- +stmt 0 err 1 -1 137 no such table: A +==== 400 + + CREATE TABLE x(a, b, c); + CREATE TABLE y(a, b); + INSERT INTO x VALUES (1, 0, 1); + INSERT INTO y VALUES (1, 2); + SELECT x.a FROM x JOIN y ON x.c = y.a WHERE x.b = 1 AND x.b = 1; +---- +stmt 0 ok +stmt 27 ok +stmt 51 err 1 -1 85 no such table: x +stmt 85 err 1 -1 116 no such table: y +stmt 116 err 1 -1 183 no such table: x +==== 500 + + PRAGMA automatic_index=OFF; + CREATE TABLE t0(c0); + INSERT INTO t0 VALUES('0'); + CREATE VIEW v0(c0) AS SELECT CAST(0 AS INT) FROM t0; + SELECT 200, * FROM t0, v0 WHERE 0 = t0.c0 AND t0.c0 = v0.c0; +---- +stmt 0 ok +stmt 30 ok +stmt 53 err 1 -1 83 no such table: t0 +stmt 83 ok +stmt 138 err 1 -1 201 no such table: t0 +==== 510 + + SELECT 200, * FROM t0, v0 WHERE t0.c0 = 0 AND t0.c0 = v0.c0; +---- +stmt 0 err 1 -1 63 no such table: t0 +==== 520 + + SELECT 200, * FROM t0, v0 WHERE 0 = t0.c0 AND v0.c0 = t0.c0; +---- +stmt 0 err 1 -1 63 no such table: t0 +==== 530 + + SELECT 200, * FROM t0, v0 WHERE t0.c0 = 0 AND v0.c0 = t0.c0; +---- +stmt 0 err 1 -1 63 no such table: t0 +==== 600 + + CREATE TABLE t1(x TEXT); + CREATE TABLE t2(y TEXT); + INSERT INTO t1 VALUES('good'),('bad'); + INSERT INTO t2 VALUES('good'),('bad'); + SELECT * FROM t1 JOIN t2 ON x=y + WHERE x='good' AND y='good'; +---- +stmt 0 ok +stmt 27 ok +stmt 54 err 1 -1 95 no such table: t1 +stmt 95 err 1 -1 136 no such table: t2 +stmt 136 err 1 -1 202 no such table: t1 +==== 610 + + CREATE TABLE tableA( + ID int, + RunYearMonth int + ); + INSERT INTO tableA VALUES(1,202003),(2,202003),(3,202003),(4,202004), + (5,202004),(6,202004),(7,202004),(8,202004); + CREATE TABLE tableB ( + ID int, + RunYearMonth int + ); + INSERT INTO tableB VALUES(1,202004),(2,202004),(3,202004),(4,202004), + (5,202004); + SELECT * + FROM ( + SELECT * + FROM tableA + WHERE RunYearMonth = 202004 + ) AS A + INNER JOIN ( + SELECT * + FROM tableB + WHERE RunYearMonth = 202004 + ) AS B + ON A.ID = B.ID + AND A.RunYearMonth = B.RunYearMonth; +---- +stmt 0 ok +stmt 71 err 1 -1 192 no such table: tableA +stmt 192 ok +stmt 264 err 1 -1 350 no such table: tableB +stmt 350 err 1 -1 616 no such table: tableA +==== 700 + + CREATE TABLE t1(v INTEGER); + WITH RECURSIVE c(x) AS (VALUES(-10) UNION ALL SELECT x+1 FROM c WHERE x<10) + INSERT INTO t1(v) SELECT x FROM c; + CREATE INDEX idx ON t1( abs(v) ); + SELECT v FROM t1 WHERE abs(v)=1 and v=1; +---- +stmt 0 ok +stmt 30 err 1 -1 147 no such table: t1 +stmt 147 err 1 -1 183 no such table: main.t1 +stmt 183 err 1 -1 226 no such table: t1 +==== 800 + + CREATE TABLE t0(c0, c1); + CREATE TABLE t1(c2); + CREATE INDEX i0 ON t1(NULL); + INSERT INTO t1(c2) VALUES (0.2); + CREATE VIEW v0(c3) AS SELECT DISTINCT c2 FROM t1; + SELECT * FROM v0 LEFT JOIN t0 ON c34 +---- +stmt 0 err 1 -1 43 no such table: t45 +==== 5.3 + + SELECT * FROM t45 WHERE b='one' AND a<8 +---- +stmt 0 err 1 -1 43 no such table: t45 +==== 5.4 + + CREATE TABLE t46(a, b, c, d, PRIMARY KEY(a, b)) WITHOUT ROWID; + WITH r(x) AS ( + SELECT 1 UNION ALL SELECT x+1 FROM r WHERE x<100 + ) + INSERT INTO t46 SELECT x / 20, x % 20, x % 10, x FROM r; +---- +stmt 0 ok +stmt 65 err 1 -1 198 no such table: t46 +==== 5.6 + + CREATE INDEX i46 ON t46(c); +---- +stmt 0 err 1 -1 30 no such table: main.t46 +==== 6.0 + + CREATE TABLE t47(a, b UNIQUE PRIMARY KEY) WITHOUT ROWID; + CREATE INDEX i47 ON t47(a); + INSERT INTO t47 VALUES(1, 2); + INSERT INTO t47 VALUES(2, 4); + INSERT INTO t47 VALUES(3, 6); + INSERT INTO t47 VALUES(4, 8); + + VACUUM; + PRAGMA integrity_check; + SELECT name FROM sqlite_master WHERE tbl_name = 't47'; +---- +stmt 0 ok +stmt 59 err 1 -1 89 no such table: main.t47 +stmt 89 err 1 -1 121 no such table: t47 +stmt 121 err 1 -1 153 no such table: t47 +stmt 153 err 1 -1 185 no such table: t47 +stmt 185 err 1 -1 217 no such table: t47 +stmt 217 ok +stmt 228 ok +stmt 254 ok +==== 6.1 + + CREATE TABLE t48( + a UNIQUE UNIQUE, + b UNIQUE, + PRIMARY KEY(a), + UNIQUE(a) + ) WITHOUT ROWID; + INSERT INTO t48 VALUES('a', 'b'), ('c', 'd'), ('e', 'f'); + VACUUM; + PRAGMA integrity_check; + SELECT name FROM sqlite_master WHERE tbl_name = 't48'; +---- +stmt 0 ok +stmt 111 err 1 -1 171 no such table: t48 +stmt 171 ok +stmt 181 ok +stmt 207 ok +==== 7.1 + + CREATE TABLE t70a( + a INT CHECK( rowid!=33 ), + b TEXT PRIMARY KEY + ); + INSERT INTO t70a(a,b) VALUES(99,'hello'); +---- +stmt 0 ok +stmt 81 err 1 -1 125 no such table: t70a +==== 7.2 + + INSERT INTO t70a(rowid,a,b) VALUES(33,99,'xyzzy'); +---- +stmt 0 err 1 -1 53 no such table: t70a +==== 7.3 + + CREATE TABLE t70b( + a INT CHECK( rowid!=33 ), + b TEXT PRIMARY KEY + ) WITHOUT ROWID; +---- +stmt 0 err 1 40 95 no such column: rowid +==== 8.1 + + CREATE TABLE t1(x INTEGER PRIMARY KEY UNIQUE, b) WITHOUT ROWID; + CREATE INDEX t1x ON t1(x); + INSERT INTO t1(x,b) VALUES('funny','buffalo'); + SELECT type, name, '|' FROM sqlite_master; +---- +stmt 0 ok +stmt 66 err 1 -1 95 no such table: main.t1 +stmt 95 err 1 -1 144 no such table: t1 +stmt 144 ok +==== 9.0 + + CREATE TABLE t2(b, c, PRIMARY KEY(b,c)) WITHOUT ROWID; + CREATE UNIQUE INDEX t2b ON t2(b); + UPDATE t2 SET b=1 WHERE b=''; +---- +stmt 0 ok +stmt 57 err 1 -1 93 no such table: main.t2 +stmt 93 err 1 -1 125 no such table: t2 +==== 10.1 + + DELETE FROM t2 WHERE b=1 +---- +stmt 0 err 1 -1 28 no such table: t2 +==== 10.0 + + CREATE TABLE t1(a, b, c UNIQUE, PRIMARY KEY(a, b)) WITHOUT ROWID; + INSERT INTO t1 VALUES('a', 'a', 1); + INSERT INTO t1 VALUES('a', 'b', 2); + INSERT INTO t1 VALUES('b', 'a', 3); + INSERT INTO t1 VALUES('b', 'b', 4); +---- +stmt 0 ok +stmt 68 err 1 -1 106 no such table: t1 +stmt 106 err 1 -1 144 no such table: t1 +stmt 144 err 1 -1 182 no such table: t1 +stmt 182 err 1 -1 220 no such table: t1 +==== 10.1.dup1 + + UPDATE t1 SET c=1 WHERE (a, b) = ('a', 'a'); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 10.2 + + UPDATE t1 SET c=1 WHERE (a, b) = ('a', 'b'); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 10.3 + + UPDATE t1 SET c=1 WHERE (a, b) = ('b', 'a'); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 10.4 + + UPDATE t1 SET c=1 WHERE (a, b) = ('b', 'b'); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 10.5 + + UPDATE t1 SET c=1 WHERE (a, b) = ('c', 'c'); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 10.6 + + CREATE TRIGGER t1_tr BEFORE UPDATE ON t1 BEGIN + DELETE FROM t1 WHERE a = new.a; + END; + UPDATE t1 SET c = c+1 WHERE a = 'a'; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 49 no such table: main.t1 +stmt 92 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 151 no such table: t1 +==== 11.1 + + CREATE TABLE t11(a TEXT PRIMARY KEY, b INT) WITHOUT ROWID; + CREATE INDEX t11a ON t11(a COLLATE NOCASE); + INSERT INTO t11(a,b) VALUES ('A',1),('a',2); + PRAGMA integrity_check; + SELECT a FROM t11 ORDER BY a COLLATE binary; +---- +stmt 0 ok +stmt 61 err 1 -1 107 no such table: main.t11 +stmt 107 err 1 -1 154 no such table: t11 +stmt 154 ok +stmt 180 err 1 -1 227 no such table: t11 +==== 12.1 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0 (c0 INTEGER PRIMARY KEY DESC, c1 UNIQUE DEFAULT NULL) WITHOUT ROWID; + INSERT INTO t0(c0) VALUES (1), (2), (3), (4), (5); + REINDEX; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 27 ok +stmt 114 err 1 -1 167 no such table: t0 +stmt 167 ok +stmt 178 ok +==== 13.10 + + DROP TABLE IF EXISTS t0; + DROP TABLE IF EXISTS t1; + CREATE TABLE t0( + c0, + c1 UNIQUE, + PRIMARY KEY(c1, c1) + ) WITHOUT ROWID; + INSERT INTO t0(c0,c1) VALUES('abc','xyz'); + CREATE TABLE t1( + c0, + c1 UNIQUE, + PRIMARY KEY(c1, c1) + ) WITHOUT ROWID; + INSERT INTO t1 SELECT * FROM t0; + PRAGMA integrity_check; + SELECT * FROM t0, t1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 139 err 1 -1 184 no such table: t0 +stmt 184 ok +stmt 269 err 1 -1 304 no such table: t1 +stmt 304 ok +stmt 330 err 1 -1 354 no such table: t0 +==== 14.1 + + CREATE TABLE t1(a INT PRIMARY KEY) WITHOUT ROWID; + INSERT INTO t1(a) VALUES(10); + ALTER TABLE t1 ADD COLUMN b INT; + SELECT * FROM t1 WHERE a=20 OR (a=10 AND b=10); +---- +stmt 0 ok +stmt 54 err 1 -1 88 no such table: t1 +stmt 88 err 1 -1 125 no such table: t1 +stmt 125 err 1 -1 177 no such table: t1 +==== 14.2 + + CREATE TABLE dual AS SELECT 'X' AS dummy; + EXPLAIN QUERY PLAN SELECT * FROM dual, t1 WHERE a=10 AND b=10; +---- +stmt 0 ok +stmt 46 err 1 -1 113 no such table: dual +==== 15.1 + + PRAGMA writable_schema=ON; + CREATE TABLE sqlite_sequence (name PRIMARY KEY) WITHOUT ROWID; + PRAGMA writable_schema=OFF; + CREATE TABLE c1(x); + INSERT INTO sqlite_sequence(name) VALUES('c0'),('c1'),('c2'); + ALTER TABLE c1 RENAME TO a; + SELECT name FROM sqlite_sequence ORDER BY +name; +---- +stmt 0 ok +stmt 31 ok +stmt 98 ok +stmt 130 ok +stmt 154 err 1 -1 220 no such table: sqlite_sequence +stmt 220 err 1 -1 252 no such table: c1 +stmt 252 err 1 -1 305 no such table: sqlite_sequence +==== 16.1 + + CREATE TABLE t1( + c1,c2,c3,c4,c5,c6,c7,c8, + PRIMARY KEY(c1,c2,c1 COLLATE NOCASE) + ) WITHOUT ROWID; +---- +stmt 0 ok +==== 16.2 + + CREATE TABLE t2( + c1,c2,c3,c4,c5,c6,c7,c8, + PRIMARY KEY(c1 COLLATE nocase,c1 COLLATE rtrim, + c2 COLLATE nocase,c2 COLLATE rtrim, + c3 COLLATE nocase,c3 COLLATE rtrim, + c4 COLLATE nocase,c4 COLLATE rtrim) + ) WITHOUT ROWID; +---- +stmt 0 ok +==== 16.3 + + CREATE TABLE t3( + c1,c2,c3,c4,c5,c6,c7,c8, + PRIMARY KEY(c1,c2), + UNIQUE(c3,c4,c5,c6,c7,c8,c3 COLLATE nocase) + ) WITHOUT ROWID; +---- +stmt 0 ok diff --git a/parser/testdata/without_rowid2.metadata.json b/parser/testdata/without_rowid2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/without_rowid2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/without_rowid2.test b/parser/testdata/without_rowid2.test new file mode 100644 index 0000000..6506654 --- /dev/null +++ b/parser/testdata/without_rowid2.test @@ -0,0 +1,97 @@ +==== without_rowid2-1.0 + + CREATE TABLE t1( + a INT PRIMARY KEY, + b INT + REFERENCES t1 ON DELETE CASCADE + REFERENCES t2, + c TEXT, + FOREIGN KEY (b,c) REFERENCES t2(x,y) ON UPDATE CASCADE + ) WITHOUT rowid; +---- +stmt 0 ok +==== without_rowid2-1.1 + + CREATE TABLE t2( + x INT PRIMARY KEY, + y TEXT + ) WITHOUT rowid; +---- +stmt 0 ok +==== without_rowid2-1.2 + + CREATE TABLE t3( + a INT REFERENCES t2, + b INT REFERENCES t1, + FOREIGN KEY (a,b) REFERENCES t2(x,y) + ); +---- +stmt 0 ok +==== without_rowid2-2.1 + + CREATE TABLE t4(a int primary key) WITHOUT rowid; + CREATE TABLE t5(x references t4); + CREATE TABLE t6(x references t4); + CREATE TABLE t7(x references t4); + CREATE TABLE t8(x references t4); + CREATE TABLE t9(x references t4); + CREATE TABLE t10(x references t4); + DROP TABLE t7; + DROP TABLE t9; + DROP TABLE t5; + DROP TABLE t8; + DROP TABLE t6; + DROP TABLE t10; +---- +stmt 0 ok +stmt 54 ok +stmt 92 ok +stmt 130 ok +stmt 168 ok +stmt 206 ok +stmt 244 ok +stmt 283 err 1 -1 302 no such table: t7 +stmt 302 err 1 -1 321 no such table: t9 +stmt 321 err 1 -1 340 no such table: t5 +stmt 340 err 1 -1 359 no such table: t8 +stmt 359 err 1 -1 378 no such table: t6 +stmt 378 err 1 -1 398 no such table: t10 +==== without_rowid2-3.1 + + CREATE TABLE t5(a PRIMARY KEY, b, c) WITHOUT rowid; + CREATE TABLE t6( + d REFERENCES t5, + e REFERENCES t5(c) + ); + PRAGMA foreign_key_list(t6); +---- +stmt 0 ok +stmt 56 ok +stmt 132 ok +==== without_rowid2-3.2 + + CREATE TABLE t7(d, e, f, + FOREIGN KEY (d, e) REFERENCES t5(a, b) + ); + PRAGMA foreign_key_list(t7); +---- +stmt 0 ok +stmt 81 ok +==== without_rowid2-3.3 + + CREATE TABLE t8(d, e, f, + FOREIGN KEY (d, e) REFERENCES t5 ON DELETE CASCADE ON UPDATE SET NULL + ); + PRAGMA foreign_key_list(t8); +---- +stmt 0 ok +stmt 112 ok +==== without_rowid2-3.4 + + CREATE TABLE t9(d, e, f, + FOREIGN KEY (d, e) REFERENCES t5 ON DELETE CASCADE ON UPDATE SET DEFAULT + ); + PRAGMA foreign_key_list(t9); +---- +stmt 0 ok +stmt 115 ok diff --git a/parser/testdata/without_rowid3.metadata.json b/parser/testdata/without_rowid3.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/without_rowid3.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/without_rowid3.test b/parser/testdata/without_rowid3.test new file mode 100644 index 0000000..9179103 --- /dev/null +++ b/parser/testdata/without_rowid3.test @@ -0,0 +1,1332 @@ +==== without_rowid3-generated +PRAGMA foreign_key_check(t1) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== without_rowid3-generated.dup1 +PRAGMA foreign_key_check(t2) +---- +stmt 0 err 1 -1 29 no such table: t2 +==== without_rowid3-generated.dup2 +PRAGMA foreign_key_check(t3) +---- +stmt 0 err 1 -1 29 no such table: t3 +==== without_rowid3-generated.dup3 +PRAGMA foreign_key_check(t4) +---- +stmt 0 err 1 -1 29 no such table: t4 +==== without_rowid3-generated.dup4 +PRAGMA foreign_key_check(t7) +---- +stmt 0 err 1 -1 29 no such table: t7 +==== without_rowid3-generated.dup5 +PRAGMA foreign_key_check(t8) +---- +stmt 0 err 1 -1 29 no such table: t8 +==== without_rowid3-generated.dup6 +PRAGMA foreign_key_check(t1) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== without_rowid3-generated.dup7 +PRAGMA foreign_key_check(t2) +---- +stmt 0 err 1 -1 29 no such table: t2 +==== without_rowid3-generated.dup8 +PRAGMA foreign_key_check(t3) +---- +stmt 0 err 1 -1 29 no such table: t3 +==== without_rowid3-generated.dup9 +PRAGMA foreign_key_check(t4) +---- +stmt 0 err 1 -1 29 no such table: t4 +==== without_rowid3-generated.dup10 +PRAGMA foreign_key_check(t7) +---- +stmt 0 err 1 -1 29 no such table: t7 +==== without_rowid3-generated.dup11 +PRAGMA foreign_key_check(t8) +---- +stmt 0 err 1 -1 29 no such table: t8 +==== without_rowid3-generated.dup12 +PRAGMA foreign_key_check(t1) +---- +stmt 0 err 1 -1 29 no such table: t1 +==== without_rowid3-generated.dup13 +PRAGMA foreign_key_check(t2) +---- +stmt 0 err 1 -1 29 no such table: t2 +==== without_rowid3-generated.dup14 +PRAGMA foreign_key_check(t3) +---- +stmt 0 err 1 -1 29 no such table: t3 +==== without_rowid3-generated.dup15 +PRAGMA foreign_key_check(t4) +---- +stmt 0 err 1 -1 29 no such table: t4 +==== without_rowid3-generated.dup16 +PRAGMA foreign_key_check(t7) +---- +stmt 0 err 1 -1 29 no such table: t7 +==== without_rowid3-generated.dup17 +PRAGMA foreign_key_check(t8) +---- +stmt 0 err 1 -1 29 no such table: t8 +==== without_rowid3-1.5.1 + + CREATE TABLE i(i INT PRIMARY KEY) WITHOUT rowid; + CREATE TABLE j(j REFERENCES i); + INSERT INTO i VALUES(35); + INSERT INTO j VALUES('35.0'); + SELECT j, typeof(j) FROM j; +---- +stmt 0 ok +stmt 53 ok +stmt 89 err 1 -1 119 no such table: i +stmt 119 err 1 -1 153 no such table: j +stmt 153 err 1 -1 185 no such table: j +==== without_rowid3-1.5.2 + DELETE FROM i +---- +stmt 0 err 1 -1 15 no such table: i +==== without_rowid3-1.6.1 + + CREATE TABLE i(i INT UNIQUE); + CREATE TABLE j(j REFERENCES i(i)); + INSERT INTO i VALUES('35.0'); + INSERT INTO j VALUES('35.0'); + SELECT j, typeof(j) FROM j; + SELECT i, typeof(i) FROM i; +---- +stmt 0 ok +stmt 34 ok +stmt 73 err 1 -1 107 no such table: i +stmt 107 err 1 -1 141 no such table: j +stmt 141 err 1 -1 173 no such table: j +stmt 173 err 1 -1 205 no such table: i +==== without_rowid3-1.6.2 + DELETE FROM i +---- +stmt 0 err 1 -1 15 no such table: i +==== without_rowid3-3.1.1 + + CREATE TABLE ab(a PRIMARY KEY, b) WITHOUT rowid; + CREATE TABLE cd( + c PRIMARY KEY REFERENCES ab ON UPDATE CASCADE ON DELETE CASCADE, + d + ) WITHOUT rowid; + CREATE TABLE ef( + e REFERENCES cd ON UPDATE CASCADE, + f, CHECK (e!=5) + ); +---- +stmt 0 ok +stmt 53 ok +stmt 175 ok +==== without_rowid3-3.1.2 + + INSERT INTO ab VALUES(1, 'b'); + INSERT INTO cd VALUES(1, 'd'); + INSERT INTO ef VALUES(1, 'e'); +---- +stmt 0 err 1 -1 35 no such table: ab +stmt 35 err 1 -1 70 no such table: cd +stmt 70 err 1 -1 105 no such table: ef +==== without_rowid3-3.1.3 + UPDATE ab SET a = 5 +---- +stmt 0 err 1 -1 21 no such table: ab +==== without_rowid3-3.1.4 + SELECT * FROM ab +---- +stmt 0 err 1 -1 18 no such table: ab +==== without_rowid3-4.1 + + CREATE TABLE t1( + node PRIMARY KEY, + parent REFERENCES t1 ON DELETE CASCADE + ) WITHOUT rowid; + CREATE TABLE t2(node PRIMARY KEY, parent) WITHOUT rowid; + CREATE TRIGGER t2t AFTER DELETE ON t2 BEGIN + DELETE FROM t2 WHERE parent = old.node; + END; + INSERT INTO t1 VALUES(1, NULL); + INSERT INTO t1 VALUES(2, 1); + INSERT INTO t1 VALUES(3, 1); + INSERT INTO t1 VALUES(4, 2); + INSERT INTO t1 VALUES(5, 2); + INSERT INTO t1 VALUES(6, 3); + INSERT INTO t1 VALUES(7, 3); + INSERT INTO t2 SELECT * FROM t1; +---- +stmt 0 ok +stmt 112 ok +stmt 173 err 1 -1 221 no such table: main.t2 +stmt 276 err 1 -1 312 no such table: t1 +stmt 312 err 1 -1 345 no such table: t1 +stmt 345 err 1 -1 378 no such table: t1 +stmt 378 err 1 -1 411 no such table: t1 +stmt 411 err 1 -1 444 no such table: t1 +stmt 444 err 1 -1 477 no such table: t1 +stmt 477 err 1 -1 510 no such table: t1 +stmt 510 err 1 -1 547 no such table: t2 +==== without_rowid3-4.3 + + DELETE FROM t2 WHERE node = 1; + SELECT node FROM t2; + ROLLBACK; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 65 no such table: t2 +stmt 65 ok +==== without_rowid3-4.3.dup1 + + DELETE FROM t2 WHERE node = 1; + SELECT node FROM t2; + ROLLBACK; +---- +stmt 0 err 1 -1 38 no such table: t2 +stmt 38 err 1 -1 65 no such table: t2 +stmt 65 ok +==== without_rowid3-5.1 + + CREATE TABLE t1(a PRIMARY KEY, b) WITHOUT rowid; + CREATE TABLE t2(a PRIMARY KEY, b REFERENCES t1(a)) WITHOUT rowid; + INSERT INTO t1 VALUES('hello', 'world'); + INSERT INTO t2 VALUES('key', 'hello'); +---- +stmt 0 ok +stmt 55 ok +stmt 127 err 1 -1 174 no such table: t1 +stmt 174 err 1 -1 219 no such table: t2 +==== without_rowid3-5.5 + PRAGMA foreign_keys = on +---- +stmt 0 ok +==== without_rowid3-6.1 + + CREATE TABLE t1(a REFERENCES t2(c), b); + CREATE TABLE t2(c UNIQUE, b); + INSERT INTO t2 VALUES(1, 2); + INSERT INTO t1 VALUES(1, 2); + VACUUM; +---- +stmt 0 ok +stmt 46 ok +stmt 82 err 1 -1 117 no such table: t2 +stmt 117 err 1 -1 152 no such table: t1 +stmt 152 ok +==== without_rowid3-7.1 + + CREATE TABLE t1(a PRIMARY KEY, b) WITHOUT rowid; + CREATE TABLE t2(c INT PRIMARY KEY REFERENCES t1, b) WITHOUT rowid; +---- +stmt 0 ok +stmt 53 ok +==== without_rowid3-7.2 + INSERT INTO t2 VALUES(1, 'A'); +---- +stmt 0 err 1 -1 31 no such table: t2 +==== without_rowid3-7.3 + + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(2, 3); + INSERT INTO t2 VALUES(1, 'A'); +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 102 no such table: t2 +==== without_rowid3-7.4 + UPDATE t2 SET c = 2 +---- +stmt 0 err 1 -1 21 no such table: t2 +==== without_rowid3-7.5 + UPDATE t2 SET c = 3 +---- +stmt 0 err 1 -1 21 no such table: t2 +==== without_rowid3-7.6 + DELETE FROM t1 WHERE a = 2 +---- +stmt 0 err 1 -1 28 no such table: t1 +==== without_rowid3-7.7 + DELETE FROM t1 WHERE a = 1 +---- +stmt 0 err 1 -1 28 no such table: t1 +==== without_rowid3-7.8 + UPDATE t1 SET a = 3 +---- +stmt 0 err 1 -1 21 no such table: t1 +==== without_rowid3-9.1.1 + + CREATE TABLE t1(a INT PRIMARY KEY, b) WITHOUT rowid; + CREATE TABLE t2( + c INT PRIMARY KEY, + d INTEGER DEFAULT 1 REFERENCES t1 ON DELETE SET DEFAULT + ) WITHOUT rowid; + DELETE FROM t1; +---- +stmt 0 ok +stmt 57 ok +stmt 186 err 1 -1 206 no such table: t1 +==== without_rowid3-9.1.2 + + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t2 VALUES(1, 2); + SELECT * FROM t2; + DELETE FROM t1 WHERE a = 2; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 74 no such table: t1 +stmt 74 err 1 -1 107 no such table: t2 +stmt 107 err 1 -1 129 no such table: t2 +stmt 129 err 1 -1 161 no such table: t1 +stmt 161 err 1 -1 183 no such table: t2 +==== without_rowid3-9.1.3 + + INSERT INTO t1 VALUES(2, 'two'); + UPDATE t2 SET d = 2; + DELETE FROM t1 WHERE a = 1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 62 no such table: t2 +stmt 62 err 1 -1 94 no such table: t1 +stmt 94 err 1 -1 116 no such table: t2 +==== without_rowid3-9.1.4 + SELECT * FROM t1 +---- +stmt 0 err 1 -1 18 no such table: t1 +==== without_rowid3-9.1.5 + DELETE FROM t1 +---- +stmt 0 err 1 -1 16 no such table: t1 +==== without_rowid3-9.2.1 + + CREATE TABLE pp(a, b, c, PRIMARY KEY(b, c)) WITHOUT rowid; + CREATE TABLE cc(d DEFAULT 3, e DEFAULT 1, f DEFAULT 2, + FOREIGN KEY(f, d) REFERENCES pp + ON UPDATE SET DEFAULT + ON DELETE SET NULL + ); + INSERT INTO pp VALUES(1, 2, 3); + INSERT INTO pp VALUES(4, 5, 6); + INSERT INTO pp VALUES(7, 8, 9); +---- +stmt 0 ok +stmt 63 ok +stmt 228 err 1 -1 264 no such table: pp +stmt 264 err 1 -1 300 no such table: pp +stmt 300 err 1 -1 336 no such table: pp +==== without_rowid3-9.2.2 + + INSERT INTO cc VALUES(6, 'A', 5); + INSERT INTO cc VALUES(6, 'B', 5); + INSERT INTO cc VALUES(9, 'A', 8); + INSERT INTO cc VALUES(9, 'B', 8); + UPDATE pp SET b = 1 WHERE a = 7; + SELECT * FROM cc; +---- +stmt 0 err 1 -1 38 no such table: cc +stmt 38 err 1 -1 76 no such table: cc +stmt 76 err 1 -1 114 no such table: cc +stmt 114 err 1 -1 152 no such table: cc +stmt 152 err 1 -1 189 no such table: pp +stmt 189 err 1 -1 211 no such table: cc +==== without_rowid3-9.2.3 + + DELETE FROM pp WHERE a = 4; + SELECT * FROM cc; +---- +stmt 0 err 1 -1 32 no such table: pp +stmt 32 err 1 -1 54 no such table: cc +==== without_rowid3-11.1.1 + + CREATE TABLE t1(a INT PRIMARY KEY, b) WITHOUT rowid; + CREATE TABLE t2(c, d, FOREIGN KEY(c) REFERENCES t1(a) ON UPDATE CASCADE); + + INSERT INTO t1 VALUES(10, 100); + INSERT INTO t2 VALUES(10, 100); + UPDATE t1 SET a = 15; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 57 ok +stmt 135 err 1 -1 172 no such table: t1 +stmt 172 err 1 -1 208 no such table: t2 +stmt 208 err 1 -1 234 no such table: t1 +stmt 234 err 1 -1 256 no such table: t2 +==== without_rowid3-12.1.1 + + CREATE TABLE t1(a, b PRIMARY KEY) WITHOUT rowid; + CREATE TABLE t2( + x REFERENCES t1 ON UPDATE RESTRICT DEFERRABLE INITIALLY DEFERRED + ); + INSERT INTO t1 VALUES(1, 'one'); + INSERT INTO t1 VALUES(2, 'two'); + INSERT INTO t1 VALUES(3, 'three'); +---- +stmt 0 ok +stmt 53 ok +stmt 153 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 227 no such table: t1 +stmt 227 err 1 -1 266 no such table: t1 +==== without_rowid3-12.1.7 + + INSERT INTO t1 VALUES(2, 'two'); + COMMIT; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 ok +==== without_rowid3-12.2.1 + + CREATE TABLE t1(x COLLATE NOCASE PRIMARY KEY) WITHOUT rowid; + CREATE TRIGGER tt1 AFTER DELETE ON t1 + WHEN EXISTS ( SELECT 1 FROM t2 WHERE old.x = y ) + BEGIN + INSERT INTO t1 VALUES(old.x); + END; + CREATE TABLE t2(y REFERENCES t1); + INSERT INTO t1 VALUES('A'); + INSERT INTO t1 VALUES('B'); + INSERT INTO t2 VALUES('a'); + INSERT INTO t2 VALUES('b'); + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 ok +stmt 65 err 1 -1 173 no such table: main.t1 +stmt 218 ok +stmt 256 err 1 -1 288 no such table: t1 +stmt 288 err 1 -1 320 no such table: t1 +stmt 320 err 1 -1 352 no such table: t2 +stmt 352 err 1 -1 384 no such table: t2 +stmt 384 err 1 -1 407 no such table: t1 +stmt 407 err 1 -1 429 no such table: t2 +==== without_rowid3-12.2.4 + + SELECT * FROM t1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 22 no such table: t1 +stmt 22 err 1 -1 44 no such table: t2 +==== without_rowid3-12.3.1 + + CREATE TABLE up( + c00, c01, c02, c03, c04, c05, c06, c07, c08, c09, + c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, + c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, + c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, + PRIMARY KEY(c34, c35) + ) WITHOUT rowid; + CREATE TABLE down( + c00, c01, c02, c03, c04, c05, c06, c07, c08, c09, + c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, + c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, + c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, + FOREIGN KEY(c39, c38) REFERENCES up ON UPDATE CASCADE + ); +---- +stmt 0 ok +stmt 294 ok +==== without_rowid3-12.3.2 + + INSERT INTO up(c34, c35) VALUES('yes', 'no'); + INSERT INTO down(c39, c38) VALUES('yes', 'no'); + UPDATE up SET c34 = 'possibly'; + SELECT c38, c39 FROM down; + DELETE FROM down; +---- +stmt 0 err 1 -1 50 no such table: up +stmt 50 err 1 -1 102 no such table: down +stmt 102 err 1 -1 138 no such table: up +stmt 138 err 1 -1 169 no such table: down +stmt 169 err 1 -1 191 no such table: down +==== without_rowid3-12.3.3 + INSERT INTO down(c39, c38) VALUES('yes', 'no') +---- +stmt 0 err 1 -1 48 no such table: down +==== without_rowid3-12.3.5 + + DELETE FROM up WHERE c34 = 'possibly'; + SELECT c34, c35 FROM up; + SELECT c39, c38 FROM down; +---- +stmt 0 err 1 -1 44 no such table: up +stmt 44 err 1 -1 73 no such table: up +stmt 73 err 1 -1 104 no such table: down +==== without_rowid3-13.1.1 + + CREATE TABLE pp(a UNIQUE, b, c, PRIMARY KEY(b, c)) WITHOUT rowid; + CREATE TABLE cc(d, e, f UNIQUE, FOREIGN KEY(d, e) REFERENCES pp); + INSERT INTO pp VALUES(1, 2, 3); + INSERT INTO cc VALUES(2, 3, 1); +---- +stmt 0 ok +stmt 70 ok +stmt 140 err 1 -1 176 no such table: pp +stmt 176 err 1 -1 212 no such table: cc +==== without_rowid3-generated.dup18 + + SELECT * FROM pp; + SELECT * FROM cc; +---- +stmt 0 err 1 -1 24 no such table: pp +stmt 24 err 1 -1 48 no such table: cc +==== without_rowid3-generated.dup19 + + COMMIT; + SELECT * FROM pp; + SELECT * FROM cc; +---- +stmt 0 ok +stmt 14 err 1 -1 38 no such table: pp +stmt 38 err 1 -1 62 no such table: cc +==== without_rowid3-14.1.2 + ALTER TABLE t2 ADD COLUMN d DEFAULT NULL REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== without_rowid3-14.1.3 + ALTER TABLE t2 ADD COLUMN e REFERENCES t1 DEFAULT NULL +---- +stmt 0 err 1 -1 39 no such table: t2 +==== without_rowid3-14.1.4 + ALTER TABLE t2 ADD COLUMN f REFERENCES t1 DEFAULT 'text' +---- +stmt 0 err 1 -1 39 no such table: t2 +==== without_rowid3-14.1.5 + ALTER TABLE t2 ADD COLUMN g DEFAULT CURRENT_TIME REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== without_rowid3-14.1.6 + + PRAGMA foreign_keys = off; + ALTER TABLE t2 ADD COLUMN h DEFAULT 'text' REFERENCES t1; + PRAGMA foreign_keys = on; + SELECT sql FROM sqlite_schema WHERE name='t2'; +---- +stmt 0 ok +stmt 34 err 1 -1 76 no such table: t2 +stmt 98 ok +stmt 130 ok +==== without_rowid3-14.2.2.3 + INSERT INTO t3 VALUES(1, 2, 3) +---- +stmt 0 err 1 -1 32 no such table: t3 +==== without_rowid3-14.2.2.4 + INSERT INTO t4 VALUES(1, NULL) +---- +stmt 0 err 1 -1 32 no such table: t4 +==== without_rowid3-14.2.2.5 + UPDATE t4 SET b = 5 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== without_rowid3-14.2.2.6 + UPDATE t4 SET b = 1 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== without_rowid3-14.2.2.7 + INSERT INTO t3 VALUES(1, NULL, 1) +---- +stmt 0 err 1 -1 35 no such table: t3 +==== without_rowid3-14.1tmp.2 + ALTER TABLE t2 ADD COLUMN d DEFAULT NULL REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== without_rowid3-14.1tmp.3 + ALTER TABLE t2 ADD COLUMN e REFERENCES t1 DEFAULT NULL +---- +stmt 0 err 1 -1 39 no such table: t2 +==== without_rowid3-14.1tmp.4 + ALTER TABLE t2 ADD COLUMN f REFERENCES t1 DEFAULT 'text' +---- +stmt 0 err 1 -1 39 no such table: t2 +==== without_rowid3-14.1tmp.5 + ALTER TABLE t2 ADD COLUMN g DEFAULT CURRENT_TIME REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== without_rowid3-14.1tmp.6 + + PRAGMA foreign_keys = off; + ALTER TABLE t2 ADD COLUMN h DEFAULT 'text' REFERENCES t1; + PRAGMA foreign_keys = on; + SELECT sql FROM temp.sqlite_schema WHERE name='t2'; +---- +stmt 0 ok +stmt 34 err 1 -1 76 no such table: t2 +stmt 98 ok +stmt 130 ok +==== without_rowid3-14.2tmp.2.3 + INSERT INTO t3 VALUES(1, 2, 3) +---- +stmt 0 err 1 -1 32 no such table: t3 +==== without_rowid3-14.2tmp.2.4 + INSERT INTO t4 VALUES(1, NULL) +---- +stmt 0 err 1 -1 32 no such table: t4 +==== without_rowid3-14.2tmp.2.5 + UPDATE t4 SET b = 5 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== without_rowid3-14.2tmp.2.6 + UPDATE t4 SET b = 1 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== without_rowid3-14.2tmp.2.7 + INSERT INTO t3 VALUES(1, NULL, 1) +---- +stmt 0 err 1 -1 35 no such table: t3 +==== without_rowid3-14.1aux.2 + ALTER TABLE t2 ADD COLUMN d DEFAULT NULL REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== without_rowid3-14.1aux.3 + ALTER TABLE t2 ADD COLUMN e REFERENCES t1 DEFAULT NULL +---- +stmt 0 err 1 -1 39 no such table: t2 +==== without_rowid3-14.1aux.4 + ALTER TABLE t2 ADD COLUMN f REFERENCES t1 DEFAULT 'text' +---- +stmt 0 err 1 -1 39 no such table: t2 +==== without_rowid3-14.1aux.5 + ALTER TABLE t2 ADD COLUMN g DEFAULT CURRENT_TIME REFERENCES t1 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== without_rowid3-14.1aux.6 + + PRAGMA foreign_keys = off; + ALTER TABLE t2 ADD COLUMN h DEFAULT 'text' REFERENCES t1; + PRAGMA foreign_keys = on; + SELECT sql FROM aux.sqlite_schema WHERE name='t2'; +---- +stmt 0 ok +stmt 34 err 1 -1 76 no such table: t2 +stmt 98 ok +stmt 130 err 1 -1 187 no such table: aux.sqlite_schema +==== without_rowid3-14.2aux.2.3 + INSERT INTO t3 VALUES(1, 2, 3) +---- +stmt 0 err 1 -1 32 no such table: t3 +==== without_rowid3-14.2aux.2.4 + INSERT INTO t4 VALUES(1, NULL) +---- +stmt 0 err 1 -1 32 no such table: t4 +==== without_rowid3-14.2aux.2.5 + UPDATE t4 SET b = 5 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== without_rowid3-14.2aux.2.6 + UPDATE t4 SET b = 1 +---- +stmt 0 err 1 -1 21 no such table: t4 +==== without_rowid3-14.2aux.2.7 + INSERT INTO t3 VALUES(1, NULL, 1) +---- +stmt 0 err 1 -1 35 no such table: t3 +==== without_rowid3-2.14.3.2 + + CREATE TABLE t1(a PRIMARY KEY, b) WITHOUT rowid; + INSERT INTO t1 VALUES('a', 1); + CREATE TABLE t2(x REFERENCES t1); + INSERT INTO t2 VALUES('a'); +---- +stmt 0 ok +stmt 53 err 1 -1 88 no such table: t1 +stmt 88 ok +stmt 126 err 1 -1 158 no such table: t2 +==== without_rowid3-2.14.3.3 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== without_rowid3-2.14.3.4 + + DELETE FROM t2; + DROP TABLE t1; +---- +stmt 0 err 1 -1 20 no such table: t2 +stmt 20 err 1 -1 39 no such table: t1 +==== without_rowid3-2.14.3.4.dup1 + INSERT INTO t2 VALUES('x') +---- +stmt 0 err 1 -1 28 no such table: t2 +==== without_rowid3-2.14.3.6 + DROP TABLE t1 +---- +stmt 0 err 1 -1 15 no such table: t1 +==== without_rowid3-2.14.3.7 + + DROP TABLE t2; + DROP TABLE t1; +---- +stmt 0 err 1 -1 19 no such table: t2 +stmt 19 err 1 -1 38 no such table: t1 +==== without_rowid3-2.14.3.9 + DROP TABLE cc +---- +stmt 0 err 1 -1 15 no such table: cc +==== without_rowid3-2.14.3.11 + + BEGIN; + DROP TABLE cc; + DROP TABLE pp; + COMMIT; +---- +stmt 0 ok +stmt 12 err 1 -1 33 no such table: cc +stmt 33 err 1 -1 54 no such table: pp +stmt 54 ok +==== without_rowid3-2.14.3.12 + + CREATE TABLE b1(a, b); + CREATE TABLE b2(a, b REFERENCES b1); + DROP TABLE b1; +---- +stmt 0 ok +stmt 27 ok +stmt 68 err 1 -1 87 no such table: b1 +==== without_rowid3-2.14.3.13 + + CREATE TABLE b3(a, b REFERENCES b2 DEFERRABLE INITIALLY DEFERRED); + DROP TABLE b2; +---- +stmt 0 ok +stmt 71 err 1 -1 90 no such table: b2 +==== without_rowid3-2.14.4.1 + + CREATE TABLE t1(x REFERENCES v); + CREATE VIEW v AS SELECT * FROM t1; +---- +stmt 0 ok +stmt 37 ok +==== without_rowid3-2.14.4.2 + + DROP VIEW v; +---- +stmt 0 err 1 -1 17 no such view: v +==== without_rowid3-2.14.4.3 + CREATE VIRTUAL TABLE v USING echo(t1) +---- +stmt 0 ok +==== without_rowid3-2.14.4.2.dup1 + + DROP TABLE v; +---- +stmt 0 err 1 -1 20 no such table: v +==== without_rowid3-15.1.1 + + CREATE TABLE pp(a PRIMARY KEY, b) WITHOUT rowid; + CREATE TABLE cc(x, y REFERENCES pp DEFERRABLE INITIALLY DEFERRED); + INSERT INTO pp VALUES(1, 'one'); + INSERT INTO pp VALUES(2, 'two'); + INSERT INTO cc VALUES('neung', 1); + INSERT INTO cc VALUES('song', 2); +---- +stmt 0 ok +stmt 53 ok +stmt 124 err 1 -1 161 no such table: pp +stmt 161 err 1 -1 198 no such table: pp +stmt 198 err 1 -1 237 no such table: cc +stmt 237 err 1 -1 275 no such table: cc +==== without_rowid3-generated.dup20 + UPDATE self SET a = 14, b = 14 +---- +stmt 0 err 1 -1 32 no such table: self +==== without_rowid3-generated.dup21 + UPDATE self SET b = 15 +---- +stmt 0 err 1 -1 24 no such table: self +==== without_rowid3-generated.dup22 + UPDATE self SET a = 15 +---- +stmt 0 err 1 -1 24 no such table: self +==== without_rowid3-generated.dup23 + UPDATE self SET a = 15, b = 16 +---- +stmt 0 err 1 -1 32 no such table: self +==== without_rowid3-generated.dup24 + UPDATE self SET a = 17, b = 17 +---- +stmt 0 err 1 -1 32 no such table: self +==== without_rowid3-generated.dup25 + DELETE FROM self +---- +stmt 0 err 1 -1 18 no such table: self +==== without_rowid3-generated.dup26 + INSERT INTO self VALUES(20, 21) +---- +stmt 0 err 1 -1 33 no such table: self +==== without_rowid3-16.4.1.1 + + PRAGMA foreign_keys=ON; + CREATE TABLE t1(a,b,c,d,e,f, + UNIQUE (a,b), + PRIMARY KEY (e,c), + FOREIGN KEY (d,f) REFERENCES t1(e,c) + ) WITHOUT rowid; + INSERT INTO t1 VALUES(1,2,3,5,5,3); + INSERT INTO t1 VALUES(2,3,4,6,6,4); + INSERT INTO t1 VALUES('x','y',1.5,'fizzle','fizzle',1.5); + SELECT *, '|' FROM t1 ORDER BY a, b; +---- +stmt 0 ok +stmt 26 ok +stmt 161 err 1 -1 199 no such table: t1 +stmt 199 err 1 -1 237 no such table: t1 +stmt 237 err 1 -1 297 no such table: t1 +stmt 297 err 1 -1 336 no such table: t1 +==== without_rowid3-16.4.1.2 + + UPDATE t1 SET c=99, f=99 WHERE a=1; + SELECT *, '|' FROM t1 ORDER BY a, b; +---- +stmt 0 err 1 -1 38 no such table: t1 +stmt 38 err 1 -1 77 no such table: t1 +==== without_rowid3-16.4.1.3 + + UPDATE t1 SET e=876, d=876 WHERE a=2; + SELECT *, '|' FROM t1 ORDER BY a, b; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 79 no such table: t1 +==== without_rowid3-16.4.1.4 + + UPDATE t1 SET c=11, e=22 WHERE a=1; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== without_rowid3-16.4.1.5 + + UPDATE t1 SET d=11, f=22 WHERE a=1; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== without_rowid3-16.4.1.6 + + DELETE FROM t1 WHERE a=1; + SELECT *, '|' FROM t1 ORDER BY a, b; +---- +stmt 0 err 1 -1 28 no such table: t1 +stmt 28 err 1 -1 67 no such table: t1 +==== without_rowid3-16.4.2.1 + + DROP TABLE t1; + CREATE TABLE t1(a,b,c,d,e,f, + PRIMARY KEY (a,b), + UNIQUE (e,c), + FOREIGN KEY (d,f) REFERENCES t1(e,c) + ) WITHOUT rowid; + INSERT INTO t1 VALUES(1,2,3,5,5,3); + INSERT INTO t1 VALUES(2,3,4,6,6,4); + INSERT INTO t1 VALUES('x','y',1.5,'fizzle','fizzle',1.5); + SELECT *, '|' FROM t1 ORDER BY a, b; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 152 err 1 -1 190 no such table: t1 +stmt 190 err 1 -1 228 no such table: t1 +stmt 228 err 1 -1 288 no such table: t1 +stmt 288 err 1 -1 327 no such table: t1 +==== without_rowid3-16.4.2.2 + + UPDATE t1 SET c=99, f=99 WHERE a=1; + SELECT *, '|' FROM t1 ORDER BY a, b; +---- +stmt 0 err 1 -1 38 no such table: t1 +stmt 38 err 1 -1 77 no such table: t1 +==== without_rowid3-16.4.2.3 + + UPDATE t1 SET e=876, d=876 WHERE a=2; + SELECT *, '|' FROM t1 ORDER BY a, b; +---- +stmt 0 err 1 -1 40 no such table: t1 +stmt 40 err 1 -1 79 no such table: t1 +==== without_rowid3-16.4.2.4 + + UPDATE t1 SET c=11, e=22 WHERE a=1; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== without_rowid3-16.4.2.5 + + UPDATE t1 SET d=11, f=22 WHERE a=1; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== without_rowid3-16.4.2.6 + + DELETE FROM t1 WHERE a=1; + SELECT *, '|' FROM t1 ORDER BY a, b; +---- +stmt 0 err 1 -1 28 no such table: t1 +stmt 28 err 1 -1 67 no such table: t1 +==== without_rowid3-17.1.5 + + INSERT INTO one VALUES(2, 3, 4); + INSERT INTO one VALUES(3, 4, 5); + INSERT INTO two VALUES(1, 2, 3); + INSERT INTO two VALUES(2, 3, 4); + INSERT INTO two VALUES(3, 4, 5); +---- +stmt 0 err 1 -1 37 no such table: one +stmt 37 err 1 -1 74 no such table: one +stmt 74 err 1 -1 111 no such table: two +stmt 111 err 1 -1 148 no such table: two +stmt 148 err 1 -1 185 no such table: two +==== without_rowid3-17.1.6 + + BEGIN; + INSERT INTO one VALUES(0, 0, 0); + UPDATE two SET e=e+1, f=f+1; +---- +stmt 0 ok +stmt 11 err 1 -1 50 no such table: one +stmt 50 err 1 -1 85 no such table: two +==== without_rowid3-17.1.7 + SELECT * FROM one +---- +stmt 0 err 1 -1 19 no such table: one +==== without_rowid3-17.1.8 + SELECT * FROM two +---- +stmt 0 err 1 -1 19 no such table: two +==== without_rowid3-17.1.10 + + CREATE TABLE three( + g, h, i, + FOREIGN KEY(h, i) REFERENCES one(b, c) DEFERRABLE INITIALLY DEFERRED + ); +---- +stmt 0 ok +==== without_rowid3-17.2.1 + + CREATE TABLE high("a'b!" PRIMARY KEY, b) WITHOUT rowid; + CREATE TABLE low( + c, + "d&6" REFERENCES high ON UPDATE CASCADE ON DELETE CASCADE + ); +---- +stmt 0 ok +stmt 60 ok +==== without_rowid3-17.2.3 + UPDATE high SET "a'b!" = 'c' +---- +stmt 0 err 1 -1 30 no such table: high +==== without_rowid3-17.2.6 + SELECT * FROM high ; SELECT * FROM low +---- +stmt 0 err 1 -1 21 no such table: high +stmt 21 err 1 -1 40 no such table: low +==== without_rowid3-17.2.7 + DELETE FROM high +---- +stmt 0 err 1 -1 18 no such table: high +==== without_rowid3-17.2.10 + SELECT * FROM high ; SELECT * FROM low +---- +stmt 0 err 1 -1 21 no such table: high +stmt 21 err 1 -1 40 no such table: low +==== without_rowid3-18.1 + + CREATE TABLE long(a, b PRIMARY KEY, c) WITHOUT rowid; + CREATE TABLE short(d, e, f REFERENCES long); + CREATE TABLE mid(g, h, i REFERENCES long DEFERRABLE INITIALLY DEFERRED); +---- +stmt 0 ok +stmt 60 ok +stmt 111 ok +==== without_rowid3-18.6 +SELECT * FROM cross +---- +stmt 0 err 1 -1 20 no such table: cross +==== without_rowid3-18.8 + INSERT INTO short VALUES(1, 3, 2) +---- +stmt 0 err 1 -1 35 no such table: short +==== without_rowid3-18.9 + INSERT INTO short VALUES(1, 3, NULL) +---- +stmt 0 err 1 -1 38 no such table: short +==== without_rowid3-18.10 + SELECT * FROM short +---- +stmt 0 err 1 -1 21 no such table: short +==== without_rowid3-18.11 + UPDATE short SET f = 2 WHERE f IS NULL +---- +stmt 0 err 1 -1 40 no such table: short +==== without_rowid3-19.1 + + CREATE TABLE main(id INT PRIMARY KEY) WITHOUT rowid; + CREATE TABLE sub(id INT REFERENCES main(id)); + INSERT INTO main VALUES(1); + INSERT INTO main VALUES(2); + INSERT INTO sub VALUES(2); +---- +stmt 0 ok +stmt 57 ok +stmt 107 err 1 -1 139 no such table: main +stmt 139 err 1 -1 171 no such table: main +stmt 171 err 1 -1 202 no such table: sub +==== without_rowid3-20.1 + + CREATE TABLE pp(a PRIMARY KEY, b) WITHOUT rowid; + CREATE TABLE cc(c PRIMARY KEY, d REFERENCES pp) WITHOUT rowid; +---- +stmt 0 ok +stmt 53 ok +==== without_rowid3-generated.dup27 + SELECT * FROM cc +---- +stmt 0 err 1 -1 18 no such table: cc +==== without_rowid3-generated.dup28 + COMMIT ; SELECT * FROM cc +---- +stmt 0 ok +stmt 9 err 1 -1 27 no such table: cc +==== without_rowid3-generated.dup29 + DELETE FROM cc ; DELETE FROM pp +---- +stmt 0 err 1 -1 17 no such table: cc +stmt 17 err 1 -1 33 no such table: pp +==== without_rowid3-generated.dup30 + + INSERT INTO pp VALUES(2, 'two'); + INSERT INTO cc VALUES(1, 2); +---- +stmt 0 err 1 -1 39 no such table: pp +stmt 39 err 1 -1 74 no such table: cc +==== without_rowid3-generated.dup31 + SELECT * FROM pp +---- +stmt 0 err 1 -1 18 no such table: pp +==== without_rowid3-generated.dup32 + SELECT * FROM cc +---- +stmt 0 err 1 -1 18 no such table: cc +==== without_rowid3-generated.dup33 + COMMIT ; SELECT * FROM pp +---- +stmt 0 ok +stmt 9 err 1 -1 27 no such table: pp +==== without_rowid3-generated.dup34 + COMMIT ; SELECT * FROM cc +---- +stmt 0 ok +stmt 9 err 1 -1 27 no such table: cc +==== without_rowid3-generated.dup35 + DELETE FROM cc ; DELETE FROM pp +---- +stmt 0 err 1 -1 17 no such table: cc +stmt 17 err 1 -1 33 no such table: pp +==== without_rowid3-genfkey.1.1 + + CREATE TABLE t1(a INT PRIMARY KEY, b, c, UNIQUE(b, c)) WITHOUT rowid; + CREATE TABLE t2(e REFERENCES t1, f); + CREATE TABLE t3(g, h, i, FOREIGN KEY (h, i) REFERENCES t1(b, c)); +---- +stmt 0 ok +stmt 74 ok +stmt 115 ok +==== without_rowid3-genfkey.1.2 + INSERT INTO t2 VALUES(1, 2) +---- +stmt 0 err 1 -1 29 no such table: t2 +==== without_rowid3-genfkey.1.3 + + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t2 VALUES(1, 2); +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 69 no such table: t2 +==== without_rowid3-genfkey.1.4 + INSERT INTO t2 VALUES(NULL, 3) +---- +stmt 0 err 1 -1 32 no such table: t2 +==== without_rowid3-genfkey.1.5 + UPDATE t2 SET e = 5 WHERE e IS NULL +---- +stmt 0 err 1 -1 37 no such table: t2 +==== without_rowid3-genfkey.1.6 + UPDATE t2 SET e = 1 WHERE e IS NULL +---- +stmt 0 err 1 -1 37 no such table: t2 +==== without_rowid3-genfkey.1.7 + UPDATE t2 SET e = NULL WHERE f = 3 +---- +stmt 0 err 1 -1 36 no such table: t2 +==== without_rowid3-genfkey.1.8 + UPDATE t1 SET a = 10 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== without_rowid3-genfkey.1.9 + UPDATE t1 SET a = NULL +---- +stmt 0 err 1 -1 24 no such table: t1 +==== without_rowid3-genfkey.1.10 + DELETE FROM t1 +---- +stmt 0 err 1 -1 16 no such table: t1 +==== without_rowid3-genfkey.1.11 + UPDATE t2 SET e = NULL +---- +stmt 0 err 1 -1 24 no such table: t2 +==== without_rowid3-genfkey.1.12 + + UPDATE t1 SET a = 10; + DELETE FROM t1; + DELETE FROM t2; +---- +stmt 0 err 1 -1 27 no such table: t1 +stmt 27 err 1 -1 47 no such table: t1 +stmt 47 err 1 -1 67 no such table: t2 +==== without_rowid3-genfkey.1.13 + + INSERT INTO t3 VALUES(1, NULL, NULL); + INSERT INTO t3 VALUES(1, 2, NULL); + INSERT INTO t3 VALUES(1, NULL, 3); +---- +stmt 0 err 1 -1 42 no such table: t3 +stmt 42 err 1 -1 81 no such table: t3 +stmt 81 err 1 -1 120 no such table: t3 +==== without_rowid3-genfkey.1.14 + INSERT INTO t3 VALUES(3, 1, 4) +---- +stmt 0 err 1 -1 32 no such table: t3 +==== without_rowid3-genfkey.1.15 + + INSERT INTO t1 VALUES(1, 1, 4); + INSERT INTO t3 VALUES(3, 1, 4); +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 73 no such table: t3 +==== without_rowid3-genfkey.1.16 + DELETE FROM t1 +---- +stmt 0 err 1 -1 16 no such table: t1 +==== without_rowid3-genfkey.1.17 + UPDATE t1 SET b = 10 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== without_rowid3-genfkey.1.18 + UPDATE t1 SET a = 10 +---- +stmt 0 err 1 -1 22 no such table: t1 +==== without_rowid3-genfkey.1.19 + UPDATE t3 SET h = 'hello' WHERE i = 3 +---- +stmt 0 err 1 -1 39 no such table: t3 +==== without_rowid3-genfkey.2.1 + + CREATE TABLE t1(a INT PRIMARY KEY, b, c, UNIQUE(b, c)) WITHOUT rowid; + CREATE TABLE t2(e REFERENCES t1 ON UPDATE CASCADE ON DELETE CASCADE, f); + CREATE TABLE t3(g, h, i, + FOREIGN KEY (h, i) + REFERENCES t1(b, c) ON UPDATE CASCADE ON DELETE CASCADE + ); +---- +stmt 0 ok +stmt 74 ok +stmt 151 ok +==== without_rowid3-genfkey.2.2 + + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t2 VALUES(1, 'one'); + INSERT INTO t2 VALUES(4, 'four'); +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 109 no such table: t2 +stmt 109 err 1 -1 147 no such table: t2 +==== without_rowid3-genfkey.2.3 + + UPDATE t1 SET a = 2 WHERE a = 1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 59 no such table: t2 +==== without_rowid3-genfkey.2.4 + + DELETE FROM t1 WHERE a = 4; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 54 no such table: t2 +==== without_rowid3-genfkey.2.5 + + INSERT INTO t3 VALUES('hello', 2, 3); + UPDATE t1 SET c = 2; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 42 no such table: t3 +stmt 42 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 89 no such table: t3 +==== without_rowid3-genfkey.2.6 + + DELETE FROM t1; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 20 no such table: t1 +stmt 20 err 1 -1 42 no such table: t3 +==== without_rowid3-genfkey.3.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(c, b)) WITHOUT rowid; + CREATE TABLE t2(e REFERENCES t1 ON UPDATE SET NULL ON DELETE SET NULL, f); + CREATE TABLE t3(g, h, i, + FOREIGN KEY (h, i) + REFERENCES t1(b, c) ON UPDATE SET NULL ON DELETE SET NULL + ); +---- +stmt 0 ok +stmt 78 ok +stmt 157 ok +==== without_rowid3-genfkey.3.2 + + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t2 VALUES(1, 'one'); + INSERT INTO t2 VALUES(4, 'four'); +---- +stmt 0 err 1 -1 36 no such table: t1 +stmt 36 err 1 -1 72 no such table: t1 +stmt 72 err 1 -1 109 no such table: t2 +stmt 109 err 1 -1 147 no such table: t2 +==== without_rowid3-genfkey.3.3 + + UPDATE t1 SET a = 2 WHERE a = 1; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 37 no such table: t1 +stmt 37 err 1 -1 59 no such table: t2 +==== without_rowid3-genfkey.3.4 + + DELETE FROM t1 WHERE a = 4; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 32 no such table: t1 +stmt 32 err 1 -1 54 no such table: t2 +==== without_rowid3-genfkey.3.5 + + INSERT INTO t3 VALUES('hello', 2, 3); + UPDATE t1 SET c = 2; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 42 no such table: t3 +stmt 42 err 1 -1 67 no such table: t1 +stmt 67 err 1 -1 89 no such table: t3 +==== without_rowid3-genfkey.3.6 + + UPDATE t3 SET h = 2, i = 2; + DELETE FROM t1; + SELECT * FROM t3; +---- +stmt 0 err 1 -1 32 no such table: t3 +stmt 32 err 1 -1 52 no such table: t1 +stmt 52 err 1 -1 74 no such table: t3 +==== without_rowid3-dd08e5.1.1 + + PRAGMA foreign_keys=ON; + CREATE TABLE tdd08(a INTEGER PRIMARY KEY, b) WITHOUT rowid; + CREATE UNIQUE INDEX idd08 ON tdd08(a,b); + INSERT INTO tdd08 VALUES(200,300); + + CREATE TABLE tdd08_b(w,x,y, FOREIGN KEY(x,y) REFERENCES tdd08(a,b)); + INSERT INTO tdd08_b VALUES(100,200,300); +---- +stmt 0 ok +stmt 28 ok +stmt 92 err 1 -1 137 no such table: main.tdd08 +stmt 137 err 1 -1 176 no such table: tdd08 +stmt 176 ok +stmt 250 err 1 -1 295 no such table: tdd08_b +==== without_rowid3-dd08e5.1.2 + + DELETE FROM tdd08; +---- +stmt 0 err 1 -1 23 no such table: tdd08 +==== without_rowid3-dd08e5.1.3 + + SELECT * FROM tdd08; +---- +stmt 0 err 1 -1 25 no such table: tdd08 +==== without_rowid3-dd08e5.1.4 + + INSERT INTO tdd08_b VALUES(400,500,300); +---- +stmt 0 err 1 -1 45 no such table: tdd08_b +==== without_rowid3-dd08e5.1.5 + + UPDATE tdd08_b SET x=x+1; +---- +stmt 0 err 1 -1 30 no such table: tdd08_b +==== without_rowid3-dd08e5.1.6 + + UPDATE tdd08 SET a=a+1; +---- +stmt 0 err 1 -1 28 no such table: tdd08 +==== without_rowid3-ce7c13.1.1 + + CREATE TABLE tce71(a INTEGER PRIMARY KEY, b) WITHOUT rowid; + CREATE UNIQUE INDEX ice71 ON tce71(a,b); + INSERT INTO tce71 VALUES(100,200); + CREATE TABLE tce72(w, x, y, FOREIGN KEY(x,y) REFERENCES tce71(a,b)); + INSERT INTO tce72 VALUES(300,100,200); + UPDATE tce71 set b = 200 where a = 100; + SELECT * FROM tce71, tce72; +---- +stmt 0 ok +stmt 64 err 1 -1 109 no such table: main.tce71 +stmt 109 err 1 -1 148 no such table: tce71 +stmt 148 ok +stmt 221 err 1 -1 264 no such table: tce72 +stmt 264 err 1 -1 308 no such table: tce71 +stmt 308 err 1 -1 340 no such table: tce71 +==== without_rowid3-ce7c13.1.2 + + UPDATE tce71 set b = 201 where a = 100; +---- +stmt 0 err 1 -1 44 no such table: tce71 +==== without_rowid3-ce7c13.1.3 + + UPDATE tce71 set a = 101 where a = 100; +---- +stmt 0 err 1 -1 44 no such table: tce71 +==== without_rowid3-ce7c13.1.4 + + CREATE TABLE tce73(a INTEGER PRIMARY KEY, b, UNIQUE(a,b)) WITHOUT rowid; + INSERT INTO tce73 VALUES(100,200); + CREATE TABLE tce74(w, x, y, FOREIGN KEY(x,y) REFERENCES tce73(a,b)); + INSERT INTO tce74 VALUES(300,100,200); + UPDATE tce73 set b = 200 where a = 100; + SELECT * FROM tce73, tce74; +---- +stmt 0 ok +stmt 77 err 1 -1 116 no such table: tce73 +stmt 116 ok +stmt 189 err 1 -1 232 no such table: tce74 +stmt 232 err 1 -1 276 no such table: tce73 +stmt 276 err 1 -1 308 no such table: tce73 +==== without_rowid3-ce7c13.1.5 + + UPDATE tce73 set b = 201 where a = 100; +---- +stmt 0 err 1 -1 44 no such table: tce73 +==== without_rowid3-ce7c13.1.6 + + UPDATE tce73 set a = 101 where a = 100; +---- +stmt 0 err 1 -1 44 no such table: tce73 +==== without_rowid3-30.1 + + CREATE TABLE t1(a,b,PRIMARY KEY(a,b)) WITHOUT ROWID; + CREATE TABLE t2(a,b,PRIMARY KEY(a,b)) WITHOUT ROWID; + INSERT INTO t1 VALUES(1,2),(3,4),(5,6); + SELECT changes(); +---- +stmt 0 ok +stmt 55 ok +stmt 110 err 1 -1 152 no such table: t1 +stmt 152 ok +==== without_rowid3-30.2 + + INSERT INTO t2 SELECT * FROM t1; + SELECT changes(); +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 ok diff --git a/parser/testdata/without_rowid4.metadata.json b/parser/testdata/without_rowid4.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/without_rowid4.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/without_rowid4.test b/parser/testdata/without_rowid4.test new file mode 100644 index 0000000..806fbdd --- /dev/null +++ b/parser/testdata/without_rowid4.test @@ -0,0 +1,344 @@ +==== without_rowid4-generated + + + CREATE TABLE other_tbl(a, b); + INSERT INTO other_tbl VALUES(1, 2); + INSERT INTO other_tbl VALUES(3, 4); + -- INSERT INTO tbl SELECT * FROM other_tbl; + INSERT INTO tbl VALUES(5, 6); + DROP TABLE other_tbl; + + SELECT * FROM rlog; +---- +stmt 0 ok +stmt 41 err 1 -1 85 no such table: other_tbl +stmt 85 err 1 -1 129 no such table: other_tbl +stmt 129 err 1 -1 219 no such table: tbl +stmt 219 err 1 -1 249 no such table: other_tbl +stmt 249 err 1 -1 280 no such table: rlog +==== without_rowid4-3.1 + + UPDATE tbl SET b = 1, c = 10; -- 2 + UPDATE tbl SET b = 10; -- 0 + UPDATE tbl SET d = 4 WHERE a = 0; --1 + UPDATE tbl SET a = 4, b = 10; --0 + SELECT * FROM log; +---- +stmt 0 err 1 -1 34 no such table: tbl +stmt 34 err 1 -1 66 no such table: tbl +stmt 66 err 1 -1 109 no such table: tbl +stmt 109 err 1 -1 147 no such table: tbl +stmt 147 err 1 -1 174 no such table: log +==== without_rowid4-3.2 + + + INSERT INTO tbl VALUES(0, 0, 0, 0); -- 1 (ifcapable subquery) + SELECT * FROM log; + UPDATE log SET a = 0; + + INSERT INTO tbl VALUES(0, 0, 0, 0); -- 0 + SELECT * FROM log; + UPDATE log SET a = 0; + + INSERT INTO tbl VALUES(200, 0, 0, 0); -- 1 + SELECT * FROM log; + UPDATE log SET a = 0; +---- +stmt 0 err 1 -1 42 no such table: tbl +stmt 42 err 1 -1 95 no such table: log +stmt 95 err 1 -1 121 no such table: log +stmt 121 err 1 -1 162 no such table: tbl +stmt 162 err 1 -1 194 no such table: log +stmt 194 err 1 -1 220 no such table: log +stmt 220 err 1 -1 263 no such table: tbl +stmt 263 err 1 -1 295 no such table: log +stmt 295 err 1 -1 321 no such table: log +==== without_rowid4-4.1 + + INSERT INTO tblA values(1, 2); + SELECT * FROM tblA; + SELECT * FROM tblB; + SELECT * FROM tblC; +---- +stmt 0 err 1 -1 35 no such table: tblA +stmt 35 err 1 -1 59 no such table: tblA +stmt 59 err 1 -1 83 no such table: tblB +stmt 83 err 1 -1 107 no such table: tblC +==== without_rowid4-4.2 + + INSERT INTO tbl VALUES (1, 2, 3); + select * from tbl; +---- +stmt 0 err 1 -1 38 no such table: tbl +stmt 38 err 1 -1 61 no such table: tbl +==== without_rowid4-6.1a + + BEGIN; + INSERT INTO tbl values (1, 2, 3); + SELECT * from tbl; +---- +stmt 0 ok +stmt 13 err 1 -1 53 no such table: tbl +stmt 53 err 1 -1 78 no such table: tbl +==== without_rowid4-6.1b + + INSERT OR ABORT INTO tbl values (2, 2, 3); +---- +stmt 0 err 1 -1 49 no such table: tbl +==== without_rowid4-6.1c + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== without_rowid4-6.1d + + INSERT OR FAIL INTO tbl values (2, 2, 3); +---- +stmt 0 err 1 -1 48 no such table: tbl +==== without_rowid4-6.1e + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== without_rowid4-6.1f + + INSERT OR REPLACE INTO tbl values (2, 2, 3); + SELECT * from tbl; +---- +stmt 0 err 1 -1 51 no such table: tbl +stmt 51 err 1 -1 76 no such table: tbl +==== without_rowid4-6.1g + + INSERT OR ROLLBACK INTO tbl values (3, 2, 3); +---- +stmt 0 err 1 -1 52 no such table: tbl +==== without_rowid4-6.1h + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== without_rowid4-6.2a + + BEGIN; + UPDATE tbl SET a = 1 WHERE a = 4; + SELECT * from tbl; +---- +stmt 0 ok +stmt 13 err 1 -1 53 no such table: tbl +stmt 53 err 1 -1 78 no such table: tbl +==== without_rowid4-6.2b + + UPDATE OR ABORT tbl SET a = 4 WHERE a = 1; +---- +stmt 0 err 1 -1 49 no such table: tbl +==== without_rowid4-6.2c + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== without_rowid4-6.2d + + UPDATE OR FAIL tbl SET a = 4 WHERE a = 1; +---- +stmt 0 err 1 -1 48 no such table: tbl +==== without_rowid4-6.2e + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== without_rowid4-6.2f.1 + + UPDATE OR REPLACE tbl SET a = 1 WHERE a = 4; + SELECT * from tbl; +---- +stmt 0 err 1 -1 51 no such table: tbl +stmt 51 err 1 -1 76 no such table: tbl +==== without_rowid4-6.2f.2 + + INSERT INTO tbl VALUES (2, 3, 4); + SELECT * FROM tbl; +---- +stmt 0 err 1 -1 40 no such table: tbl +stmt 40 err 1 -1 65 no such table: tbl +==== without_rowid4-6.2g + + UPDATE OR ROLLBACK tbl SET a = 4 WHERE a = 1; +---- +stmt 0 err 1 -1 52 no such table: tbl +==== without_rowid4-6.2h + + SELECT * from tbl; +---- +stmt 0 err 1 -1 25 no such table: tbl +==== without_rowid4-7.1 + + CREATE TABLE ab(a, b, PRIMARY KEY(a,b)) WITHOUT rowid; + CREATE TABLE cd(c, d, PRIMARY KEY(c,d)) WITHOUT rowid; + INSERT INTO ab VALUES (1, 2); + INSERT INTO ab VALUES (0, 0); + INSERT INTO cd VALUES (3, 4); + + CREATE TABLE tlog(ii INTEGER PRIMARY KEY, + olda, oldb, oldc, oldd, newa, newb, newc, newd); + + CREATE VIEW abcd AS SELECT a, b, c, d FROM ab, cd; + + CREATE TRIGGER before_update INSTEAD OF UPDATE ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + old.a, old.b, old.c, old.d, new.a, new.b, new.c, new.d); + END; + CREATE TRIGGER after_update INSTEAD OF UPDATE ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + old.a, old.b, old.c, old.d, new.a, new.b, new.c, new.d); + END; + + CREATE TRIGGER before_delete INSTEAD OF DELETE ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + old.a, old.b, old.c, old.d, 0, 0, 0, 0); + END; + CREATE TRIGGER after_delete INSTEAD OF DELETE ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + old.a, old.b, old.c, old.d, 0, 0, 0, 0); + END; + + CREATE TRIGGER before_insert INSTEAD OF INSERT ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + 0, 0, 0, 0, new.a, new.b, new.c, new.d); + END; + CREATE TRIGGER after_insert INSTEAD OF INSERT ON abcd BEGIN + INSERT INTO tlog VALUES(NULL, + 0, 0, 0, 0, new.a, new.b, new.c, new.d); + END; +---- +stmt 0 ok +stmt 57 ok +stmt 114 err 1 -1 146 no such table: ab +stmt 146 err 1 -1 178 no such table: ab +stmt 178 err 1 -1 210 no such table: cd +stmt 210 ok +stmt 311 ok +stmt 365 err 1 -1 429 no such table: main.abcd +stmt 529 err 1 -1 591 no such table: main.abcd +stmt 691 err 1 -1 755 no such table: main.abcd +stmt 839 err 1 -1 901 no such table: main.abcd +stmt 985 err 1 -1 1049 no such table: main.abcd +stmt 1133 err 1 -1 1196 no such table: main.abcd +==== without_rowid4-7.2 + + UPDATE abcd SET a = 100, b = 5*5 WHERE a = 1; + DELETE FROM abcd WHERE a = 1; + INSERT INTO abcd VALUES(10, 20, 30, 40); + SELECT * FROM tlog; +---- +stmt 0 err 1 -1 50 no such table: abcd +stmt 50 err 1 -1 84 no such table: abcd +stmt 84 err 1 -1 129 no such table: abcd +stmt 129 err 1 -1 153 no such table: tlog +==== without_rowid4-7.3 + + DELETE FROM tlog; + INSERT INTO abcd VALUES(10, 20, 30, 40); + UPDATE abcd SET a = 100, b = 5*5 WHERE a = 1; + DELETE FROM abcd WHERE a = 1; + SELECT * FROM tlog; +---- +stmt 0 err 1 -1 22 no such table: tlog +stmt 22 err 1 -1 67 no such table: abcd +stmt 67 err 1 -1 117 no such table: abcd +stmt 117 err 1 -1 151 no such table: abcd +stmt 151 err 1 -1 175 no such table: tlog +==== without_rowid4-7.4 + + DELETE FROM tlog; + DELETE FROM abcd WHERE a = 1; + INSERT INTO abcd VALUES(10, 20, 30, 40); + UPDATE abcd SET a = 100, b = 5*5 WHERE a = 1; + SELECT * FROM tlog; +---- +stmt 0 err 1 -1 22 no such table: tlog +stmt 22 err 1 -1 56 no such table: abcd +stmt 56 err 1 -1 101 no such table: abcd +stmt 101 err 1 -1 151 no such table: abcd +stmt 151 err 1 -1 175 no such table: tlog +==== without_rowid4-8.1 + + CREATE TABLE t1(a,b,c, PRIMARY KEY(a,b,c)) WITHOUT rowid; + INSERT INTO t1 VALUES(1,2,3); + CREATE VIEW v1 AS + SELECT a+b AS x, b+c AS y, a+c AS z FROM t1; + SELECT * FROM v1; +---- +stmt 0 ok +stmt 62 err 1 -1 96 no such table: t1 +stmt 96 ok +stmt 169 err 1 -1 191 no such table: v1 +==== without_rowid4-8.2 + + CREATE TABLE v1log(a,b,c,d,e,f); + CREATE TRIGGER r1 INSTEAD OF DELETE ON v1 BEGIN + INSERT INTO v1log VALUES(OLD.x,NULL,OLD.y,NULL,OLD.z,NULL); + END; + DELETE FROM v1 WHERE x=1; + SELECT * FROM v1log; +---- +stmt 0 ok +stmt 37 err 1 -1 89 no such table: main.v1 +stmt 164 err 1 -1 194 no such table: v1 +stmt 194 err 1 -1 219 no such table: v1log +==== without_rowid4-8.3 + + DELETE FROM v1 WHERE x=3; + SELECT * FROM v1log; +---- +stmt 0 err 1 -1 30 no such table: v1 +stmt 30 err 1 -1 55 no such table: v1log +==== without_rowid4-8.4 + + INSERT INTO t1 VALUES(4,5,6); + DELETE FROM v1log; + DELETE FROM v1 WHERE y=11; + SELECT * FROM v1log; +---- +stmt 0 err 1 -1 34 no such table: t1 +stmt 34 err 1 -1 57 no such table: v1log +stmt 57 err 1 -1 88 no such table: v1 +stmt 88 err 1 -1 113 no such table: v1log +==== without_rowid4-8.5 + + CREATE TRIGGER r2 INSTEAD OF INSERT ON v1 BEGIN + INSERT INTO v1log VALUES(NULL,NEW.x,NULL,NEW.y,NULL,NEW.z); + END; + DELETE FROM v1log; + INSERT INTO v1 VALUES(1,2,3); + SELECT * FROM v1log; +---- +stmt 0 err 1 -1 52 no such table: main.v1 +stmt 127 err 1 -1 150 no such table: v1log +stmt 150 err 1 -1 184 no such table: v1 +stmt 184 err 1 -1 209 no such table: v1log +==== without_rowid4-8.6 + + CREATE TRIGGER r3 INSTEAD OF UPDATE ON v1 BEGIN + INSERT INTO v1log VALUES(OLD.x,NEW.x,OLD.y,NEW.y,OLD.z,NEW.z); + END; + DELETE FROM v1log; + UPDATE v1 SET x=x+100, y=y+200, z=z+300; + SELECT * FROM v1log; +---- +stmt 0 err 1 -1 52 no such table: main.v1 +stmt 130 err 1 -1 153 no such table: v1log +stmt 153 err 1 -1 198 no such table: v1 +stmt 198 err 1 -1 223 no such table: v1log +==== without_rowid4-9.1 + + CREATE TABLE t3(a TEXT, b TEXT); + CREATE VIEW v3 AS SELECT t3.a FROM t3; + CREATE TRIGGER trig1 INSTEAD OF DELETE ON v3 BEGIN + SELECT 1; + END; + DELETE FROM v3 WHERE a = 1; +---- +stmt 0 ok +stmt 37 ok +stmt 80 err 1 -1 135 no such table: main.v3 +stmt 160 err 1 -1 192 no such table: v3 diff --git a/parser/testdata/without_rowid5.metadata.json b/parser/testdata/without_rowid5.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/without_rowid5.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/without_rowid5.test b/parser/testdata/without_rowid5.test new file mode 100644 index 0000000..8ea563b --- /dev/null +++ b/parser/testdata/without_rowid5.test @@ -0,0 +1,187 @@ +==== without_rowid5-1.1 + + CREATE TABLE t1(a PRIMARY KEY,b,c); + CREATE TABLE t1w(a PRIMARY KEY,b,c) WITHOUT ROWID; + INSERT INTO t1 VALUES(1565,681,1148),(1429,1190,1619),(425,358,1306); + INSERT INTO t1w SELECT a,b,c FROM t1; + SELECT rowid, _rowid_, oid FROM t1 ORDER BY a DESC; +---- +stmt 0 ok +stmt 38 ok +stmt 91 err 1 -1 163 no such table: t1 +stmt 163 err 1 -1 203 no such table: t1w +stmt 203 err 1 -1 257 no such table: t1 +==== without_rowid5-1.2 + + SELECT rowid FROM t1w; +---- +stmt 0 err 1 -1 25 no such table: t1w +==== without_rowid5-1.3 + + SELECT _rowid_ FROM t1w; +---- +stmt 0 err 1 -1 27 no such table: t1w +==== without_rowid5-1.4 + + SELECT oid FROM t1w; +---- +stmt 0 err 1 -1 23 no such table: t1w +==== without_rowid5-2.1 + + CREATE TABLE IF NOT EXISTS wordcount( + word TEXT PRIMARY KEY, + cnt INTEGER + ) WITHOUT ROWID; + INSERT INTO wordcount VALUES('one',1); +---- +stmt 0 ok +stmt 102 err 1 -1 143 no such table: wordcount +==== without_rowid5-2.2 + + SELECT rowid FROM wordcount; +---- +stmt 0 err 1 -1 31 no such table: wordcount +==== without_rowid5-2.3 + + CREATE TABLE IF NOT EXISTS wordcount_b( + word TEXT PRIMARY KEY, + cnt INTEGER + ) WITHOUT rowid; + INSERT INTO wordcount_b VALUES('one',1); +---- +stmt 0 ok +stmt 104 err 1 -1 147 no such table: wordcount_b +==== without_rowid5-2.4 + + SELECT rowid FROM wordcount_b; +---- +stmt 0 err 1 -1 33 no such table: wordcount_b +==== without_rowid5-2.5 + + CREATE TABLE IF NOT EXISTS wordcount_c( + word TEXT PRIMARY KEY, + cnt INTEGER + ) without rowid; + INSERT INTO wordcount_c VALUES('one',1); +---- +stmt 0 ok +stmt 104 err 1 -1 147 no such table: wordcount_c +==== without_rowid5-2.6 + + SELECT rowid FROM wordcount_c; +---- +stmt 0 err 1 -1 33 no such table: wordcount_c +==== without_rowid5-2.7 + + CREATE TABLE IF NOT EXISTS wordcount_d( + word TEXT PRIMARY KEY, + cnt INTEGER + ) WITHOUT rowid; + INSERT INTO wordcount_d VALUES('one',1); +---- +stmt 0 ok +stmt 104 err 1 -1 147 no such table: wordcount_d +==== without_rowid5-2.8 + + SELECT rowid FROM wordcount_d; +---- +stmt 0 err 1 -1 33 no such table: wordcount_d +==== without_rowid5-3.1 + + CREATE TABLE IF NOT EXISTS error1( + word TEXT PRIMARY KEY, + cnt INTEGER + ) WITHOUT _rowid_; +---- +stmt 0 err 1 -1 101 unknown table option: _rowid_ +==== without_rowid5-3.2 + + CREATE TABLE IF NOT EXISTS error2( + word TEXT PRIMARY KEY, + cnt INTEGER + ) WITHOUT oid; +---- +stmt 0 err 1 -1 97 unknown table option: oid +==== without_rowid5-4.1 + + CREATE TABLE IF NOT EXISTS error3( + word TEXT UNIQUE, + cnt INTEGER + ) WITHOUT ROWID; +---- +stmt 0 err 1 -1 94 PRIMARY KEY missing on table error3 +==== without_rowid5-5.1 + + CREATE TABLE ipk(key INTEGER PRIMARY KEY, val TEXT) WITHOUT ROWID; + INSERT INTO ipk VALUES('rival','bonus'); -- ok to insert non-integer key + SELECT * FROM ipk; +---- +stmt 0 ok +stmt 69 err 1 -1 112 no such table: ipk +stmt 112 err 1 -1 165 no such table: ipk +==== without_rowid5-5.2a + + BEGIN; + INSERT INTO ipk VALUES(NULL,'sample'); -- no automatic generation of keys +---- +stmt 0 ok +stmt 9 err 1 -1 50 no such table: ipk +==== without_rowid5-5.2b + + ROLLBACK; +---- +stmt 0 ok +==== without_rowid5-5.3 + + CREATE TABLE ipk2(key INTEGER PRIMARY KEY AUTOINCREMENT, val TEXT)WITHOUT ROWID; +---- +stmt 0 err 1 -1 83 AUTOINCREMENT not allowed on WITHOUT ROWID tables +==== without_rowid5-5.4 + + CREATE TABLE nn(a, b, c, d, e, PRIMARY KEY(c,a,e)); + CREATE TABLE nnw(a, b, c, d, e, PRIMARY KEY(c,a,e)) WITHOUT ROWID; + INSERT INTO nn VALUES(1,2,3,4,5); + INSERT INTO nnw VALUES(1,2,3,4,5); +---- +stmt 0 ok +stmt 54 ok +stmt 123 err 1 -1 159 no such table: nn +stmt 159 err 1 -1 196 no such table: nnw +==== without_rowid5-5.5 + + INSERT INTO nn VALUES(NULL, 3,4,5,6); + INSERT INTO nn VALUES(3,4,NULL,7,8); + INSERT INTO nn VALUES(4,5,6,7,NULL); + SELECT count(*) FROM nn; +---- +stmt 0 err 1 -1 40 no such table: nn +stmt 40 err 1 -1 79 no such table: nn +stmt 79 err 1 -1 118 no such table: nn +stmt 118 err 1 -1 145 no such table: nn +==== without_rowid5-5.6 + + INSERT INTO nnw VALUES(NULL, 3,4,5,6); +---- +stmt 0 err 1 -1 41 no such table: nnw +==== without_rowid5-5.7 + + INSERT INTO nnw VALUES(3,4,NULL,7,8) +---- +stmt 0 err 1 -1 40 no such table: nnw +==== without_rowid5-5.8 + + INSERT INTO nnw VALUES(4,5,6,7,NULL) +---- +stmt 0 err 1 -1 40 no such table: nnw +==== without_rowid5-5.9 + + SELECT count(*) FROM nnw; +---- +stmt 0 err 1 -1 28 no such table: nnw +==== without_rowid5-6.1 + + CREATE TABLE b1(a INTEGER PRIMARY KEY, b BLOB) WITHOUT ROWID; + INSERT INTO b1 VALUES(1,x'0102030405060708090a0b0c0d0e0f'); +---- +stmt 0 ok +stmt 64 err 1 -1 126 no such table: b1 diff --git a/parser/testdata/without_rowid6.metadata.json b/parser/testdata/without_rowid6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/without_rowid6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/without_rowid6.test b/parser/testdata/without_rowid6.test new file mode 100644 index 0000000..f2a6533 --- /dev/null +++ b/parser/testdata/without_rowid6.test @@ -0,0 +1,143 @@ +==== without_rowid6-100 + + CREATE TABLE t1(a,b,c,d,e, PRIMARY KEY(a,b,c,a,b,c,d,a,b,c)) WITHOUT ROWID; + CREATE INDEX t1a ON t1(b, b); + WITH RECURSIVE + c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<1000) + INSERT INTO t1(a,b,c,d,e) SELECT i, i+1000, printf('x%dy',i), 0, 0 FROM c; + ANALYZE; +---- +stmt 0 ok +stmt 78 err 1 -1 110 no such table: main.t1 +stmt 110 err 1 -1 269 no such table: t1 +stmt 269 ok +==== without_rowid6-110 + + SELECT c FROM t1 WHERE a=123; +---- +stmt 0 err 1 -1 32 no such table: t1 +==== without_rowid6-120 + + SELECT c FROM t1 WHERE b=1123; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== without_rowid6-130 + + SELECT c FROM t1 ORDER BY a DESC LIMIT 5; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== without_rowid6-140 + + SELECT c FROM t1 ORDER BY b LIMIT 5; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== without_rowid6-200 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1( + a UNIQUE, + b UNIQUE, + c UNIQUE, + PRIMARY KEY(b) + ) WITHOUT ROWID; + INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9); + SELECT a FROM t1 WHERE b>3 ORDER BY b; +---- +stmt 0 ok +stmt 27 ok +stmt 126 err 1 -1 181 no such table: t1 +stmt 181 err 1 -1 222 no such table: t1 +==== without_rowid6-210 + + EXPLAIN QUERY PLAN + SELECT a FROM t1 WHERE b>3 ORDER BY b; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== without_rowid6-220 + + PRAGMA index_list(t1); +---- +stmt 0 ok +==== without_rowid6-300 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1( + a UNIQUE, + b PRIMARY KEY, + c UNIQUE, + UNIQUE(b) + ) WITHOUT ROWID; + INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9); + SELECT a FROM t1 WHERE b>3 ORDER BY b; +---- +stmt 0 ok +stmt 27 ok +stmt 126 err 1 -1 181 no such table: t1 +stmt 181 err 1 -1 222 no such table: t1 +==== without_rowid6-310 + + EXPLAIN QUERY PLAN + SELECT a FROM t1 WHERE b>3 ORDER BY b; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== without_rowid6-320 + + PRAGMA index_list(t1); +---- +stmt 0 ok +==== without_rowid6-400 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1( + a UNIQUE, + b UNIQUE PRIMARY KEY, + c UNIQUE + ) WITHOUT ROWID; + INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9); + SELECT a FROM t1 WHERE b>3 ORDER BY b; +---- +stmt 0 ok +stmt 27 ok +stmt 118 err 1 -1 173 no such table: t1 +stmt 173 err 1 -1 214 no such table: t1 +==== without_rowid6-410 + + EXPLAIN QUERY PLAN + SELECT a FROM t1 WHERE b>3 ORDER BY b; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== without_rowid6-420 + + PRAGMA index_list(t1); +---- +stmt 0 ok +==== without_rowid6-500 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a,b,c, + UNIQUE(b,c), + PRIMARY KEY(b,c) + ) WITHOUT ROWID; + INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9); + SELECT a FROM t1 WHERE b>3 ORDER BY b; +---- +stmt 0 ok +stmt 27 ok +stmt 109 err 1 -1 164 no such table: t1 +stmt 164 err 1 -1 205 no such table: t1 +==== without_rowid6-510 + + EXPLAIN QUERY PLAN + SELECT a FROM t1 WHERE b>3 ORDER BY b; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== without_rowid6-520 + + PRAGMA index_list(t1); +---- +stmt 0 ok +==== without_rowid6-600 + + CREATE TABLE t6(a,b,c,PRIMARY KEY(a,rowid,b))WITHOUT ROWID; +---- +stmt 0 err 1 39 48 no such column: rowid diff --git a/parser/testdata/without_rowid7.metadata.json b/parser/testdata/without_rowid7.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/without_rowid7.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/without_rowid7.test b/parser/testdata/without_rowid7.test new file mode 100644 index 0000000..dc8a0a5 --- /dev/null +++ b/parser/testdata/without_rowid7.test @@ -0,0 +1,68 @@ +==== 1.0 + + CREATE TABLE t1(a, b COLLATE nocase, PRIMARY KEY(a, a, b)) WITHOUT ROWID; +---- +stmt 0 ok +==== 1.1 + + INSERT INTO t1 VALUES(1, 'one'), (1, 'ONE'); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 2.0 + + CREATE TABLE t2(a, b, PRIMARY KEY(a COLLATE nocase, a)) WITHOUT ROWID; +---- +stmt 0 ok +==== 2.1 + + INSERT INTO t2 VALUES(1, 'one'); + SELECT b FROM t2; +---- +stmt 0 err 1 -1 35 no such table: t2 +stmt 35 err 1 -1 55 no such table: t2 +==== 2.2a + + PRAGMA index_info(t2); +---- +stmt 0 ok +==== 2.3a + + PRAGMA index_xinfo(t2); +---- +stmt 0 ok +==== 2.4 + + CREATE TABLE t3(a, b, PRIMARY KEY(a COLLATE nocase, a)); + PRAGMA index_info(t3); +---- +stmt 0 ok +stmt 59 ok +==== 3.0 + + CREATE TABLE t1( + a PRIMARY KEY COLLATE mysort, b COLLATE mysort2 + ) WITHOUT ROWID; + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 err 1 -1 55 no such collation sequence: mysort +stmt 92 err 1 -1 123 no such table: t1 +==== 3.1.1 + + SELECT * FROM t1 WHERE a=1; +---- +stmt 0 err 1 -1 30 no such table: t1 +==== 3.2.1 + + CREATE UNIQUE INDEX i1 ON t1(b); +---- +stmt 0 err 1 -1 35 no such table: main.t1 +==== 3.3.1 + + CREATE UNIQUE INDEX i1 ON t1(1); +---- +stmt 0 err 1 -1 35 no such table: main.t1 +==== 3.6 + + SELECT * FROM t1 WHERE a=1; +---- +stmt 0 err 1 -1 30 no such table: t1 diff --git a/parser/testdata/writecrash.metadata.json b/parser/testdata/writecrash.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/writecrash.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/writecrash.test b/parser/testdata/writecrash.test new file mode 100644 index 0000000..a158460 --- /dev/null +++ b/parser/testdata/writecrash.test @@ -0,0 +1,18 @@ +==== 1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB UNIQUE); + WITH s(i) AS ( + VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<100 + ) + INSERT INTO t1 SELECT NULL, randomblob(900) FROM s; +---- +stmt 0 ok +stmt 57 err 1 -1 186 no such table: t1 +==== writecrash-generated + PRAGMA integrity_check +---- +stmt 0 ok +==== writecrash-generated.dup1 + PRAGMA integrity_check +---- +stmt 0 ok diff --git a/parser/testdata/zeroblob.metadata.json b/parser/testdata/zeroblob.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/zeroblob.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/zeroblob.test b/parser/testdata/zeroblob.test new file mode 100644 index 0000000..4d584f2 --- /dev/null +++ b/parser/testdata/zeroblob.test @@ -0,0 +1,140 @@ +==== zeroblob-1.2 + + SELECT length(d) FROM t1 +---- +stmt 0 err 1 -1 30 no such table: t1 +==== zeroblob-1.4 + + SELECT length(c), length(d) FROM t1 +---- +stmt 0 err 1 -1 41 no such table: t1 +==== zeroblob-1.6 + + SELECT length(c), length(d) FROM t1 +---- +stmt 0 err 1 -1 41 no such table: t1 +==== zeroblob-1.8 + + SELECT length(b), length(d) FROM t1 WHERE a=5 +---- +stmt 0 err 1 -1 51 no such table: t1 +==== zeroblob-2.1 + + SELECT a FROM t1 WHERE b=zeroblob(10000) +---- +stmt 0 err 1 -1 46 no such table: t1 +==== zeroblob-2.2 + + CREATE INDEX i1_1 ON t1(b); + SELECT a FROM t1 WHERE b=zeroblob(10000); +---- +stmt 0 err 1 -1 32 no such table: main.t1 +stmt 32 err 1 -1 78 no such table: t1 +==== zeroblob-3.1 + + SELECT count(DISTINCT a) FROM ( + SELECT x'00000000000000000000' AS a + UNION ALL + SELECT zeroblob(10) AS a + ) +---- +stmt 0 ok +==== zeroblob-4.1 + + SELECT hex(zeroblob(2) || x'61') +---- +stmt 0 ok +==== zeroblob-5.1 + + SELECT CAST (zeroblob(100) AS REAL); +---- +stmt 0 ok +==== zeroblob-5.2 + + SELECT CAST (zeroblob(100) AS INTEGER); +---- +stmt 0 ok +==== zeroblob-5.3 + + SELECT CAST (zeroblob(100) AS TEXT); +---- +stmt 0 ok +==== zeroblob-5.4 + + SELECT CAST(zeroblob(100) AS BLOB); +---- +stmt 0 ok +==== zeroblob-6.1.1 +select zeroblob(-1) +---- +stmt 0 ok +==== zeroblob-6.1.2 +select zeroblob(-10) +---- +stmt 0 ok +==== zeroblob-6.1.3 +select zeroblob(-100) +---- +stmt 0 ok +==== zeroblob-6.2 +select length(zeroblob(-1)) +---- +stmt 0 ok +==== zeroblob-6.3 +select zeroblob(-1)|1 +---- +stmt 0 ok +==== zeroblob-6.4 +select length(zeroblob(2147483648)) +---- +stmt 0 ok +==== zeroblob-6.5 +select zeroblob(2147483648) +---- +stmt 0 ok +==== zeroblob-6.6 +select hex(zeroblob(-1)) +---- +stmt 0 ok +==== zeroblob-6.7 +select typeof(zeroblob(-1)) +---- +stmt 0 ok +==== 11.0 + + SELECT length(zeroblob(-1444444444444444)); +---- +stmt 0 ok +==== 11.1 + + SELECT zeroblob(5000 * 1024 * 1024); +---- +stmt 0 ok +==== 11.2 + + SELECT quote(zeroblob(5000 * 1024 * 1024)); +---- +stmt 0 ok +==== 11.3 + + SELECT quote(zeroblob(-1444444444444444)); +---- +stmt 0 ok +==== 11.4 + + SELECT quote(test_zeroblob(-1)); +---- +stmt 0 err 1 16 35 no such function: test_zeroblob +==== 13.100 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a,b,c); + CREATE INDEX t1bbc ON t1(b, b+c); + INSERT INTO t1(a,b,c) VALUES(1,zeroblob(8),3); + SELECT a, quote(b), length(b), c FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 53 err 1 -1 89 no such table: main.t1 +stmt 89 err 1 -1 138 no such table: t1 +stmt 138 err 1 -1 182 no such table: t1 diff --git a/parser/testdata/zipfile.metadata.json b/parser/testdata/zipfile.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/zipfile.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/zipfile.test b/parser/testdata/zipfile.test new file mode 100644 index 0000000..c4001b3 --- /dev/null +++ b/parser/testdata/zipfile.test @@ -0,0 +1,599 @@ +==== 1.0 + + CREATE VIRTUAL TABLE temp.zz USING zipfile('test.zip'); + PRAGMA table_info(zz); +---- +stmt 0 ok +stmt 58 ok +==== 1.1.0.1 + + INSERT INTO zz(name, mode, mtime, sz, rawdata, method) + VALUES('f.txt', '-rw-r--r--', 1000000000, 5, 'abcde', 0); +---- +stmt 0 err 1 -1 118 no such table: zz +==== 1.1.0.2 + + INSERT INTO zz(name, mtime, sz, data, method) + VALUES('g.txt', 1000000002, 5, '12345', 0); +---- +stmt 0 err 1 -1 95 no such table: zz +==== 1.1.0.3 + + INSERT INTO zz(name, mtime, rawdata, method) + VALUES('g.txt', 1000000002, '12345', 0); +---- +stmt 0 err 1 -1 91 no such table: zz +==== 1.1.0.4 + + INSERT INTO zz(name, data, method) + VALUES('g.txt', '12345', 7); +---- +stmt 0 err 1 -1 69 no such table: zz +==== 1.1.1 + + INSERT INTO zz(name, mode, mtime, data, method) + VALUES('f.txt', '-rw-r--r--', 1000000000, 'abcde', 0); +---- +stmt 0 err 1 -1 108 no such table: zz +==== 1.1.2 + + INSERT INTO zz(name, mode, mtime, data, method) + VALUES('g.txt', NULL, 1000000002, '12345', 0); +---- +stmt 0 err 1 -1 100 no such table: zz +==== 1.2 + + SELECT name, mtime, data FROM zipfile('test.zip') +---- +stmt 0 err 1 -1 53 no such table: zipfile +==== 1.3 + + INSERT INTO zz(name, mode, mtime, data) VALUES('h.txt', + '-rw-r--r--', 1000000004, 'aaaaaaaaaabbbbbbbbbb' + ); +---- +stmt 0 err 1 -1 117 no such table: zz +==== 1.4 + + SELECT name, mtime, data, method FROM zipfile('test.zip'); +---- +stmt 0 err 1 -1 61 no such table: zipfile +==== 1.4.2 + + SELECT zipfile_cds(mode) FROM zipfile('test.zip'); +---- +stmt 0 err 1 -1 53 no such table: zipfile +==== 1.5.1 + + BEGIN; + INSERT INTO zz(name, mode, mtime, data, method) + VALUES('i.txt', '-rw-r--r--', 1000000006, 'zxcvb', 0); + SELECT name FROM zz; + COMMIT; +---- +stmt 0 ok +stmt 9 err 1 -1 120 no such table: zz +stmt 120 err 1 -1 145 no such table: zz +stmt 145 ok +==== 1.5.2 + + SELECT name FROM zz; +---- +stmt 0 err 1 -1 23 no such table: zz +==== 1.5.3 + + SELECT data FROM zz WHERE name='i.txt'; +---- +stmt 0 err 1 -1 42 no such table: zz +==== 1.6.0 + + DELETE FROM zz WHERE name='g.txt'; + SELECT name FROM zz; +---- +stmt 0 err 1 -1 37 no such table: zz +stmt 37 err 1 -1 60 no such table: zz +==== 1.6.1 + + SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); +---- +stmt 0 err 1 -1 67 no such table: zipfile +==== 1.6.2 + + UPDATE zz SET mtime=4 WHERE name='i.txt'; + SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); +---- +stmt 0 err 1 -1 44 no such table: zz +stmt 44 err 1 -1 111 no such table: zipfile +==== 1.6.4 + + UPDATE zz SET name = 'blue.txt' WHERE name='f.txt'; + SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); +---- +stmt 0 err 1 -1 54 no such table: zz +stmt 54 err 1 -1 121 no such table: zipfile +==== 1.6.5 + + UPDATE zz SET data = 'edcba' WHERE name='blue.txt'; + SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); +---- +stmt 0 err 1 -1 54 no such table: zz +stmt 54 err 1 -1 121 no such table: zipfile +==== 1.6.6 + + UPDATE zz SET mode=NULL, data = NULL WHERE name='blue.txt'; + SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); +---- +stmt 0 err 1 -1 62 no such table: zz +stmt 62 err 1 -1 129 no such table: zipfile +==== 1.6.7 + + UPDATE zz SET data=NULL WHERE name='i.txt' +---- +stmt 0 err 1 -1 46 no such table: zz +==== 1.6.8 + + SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); +---- +stmt 0 err 1 -1 67 no such table: zipfile +==== 1.6.9 + + UPDATE zz SET data = '' WHERE name='i.txt'; + SELECT name,mode,mtime,data,method from zipfile('test.zip'); +---- +stmt 0 err 1 -1 46 no such table: zz +stmt 46 err 1 -1 109 no such table: zipfile +==== 1.6.10 + + SELECT a.name, a.data + FROM zz AS a, zz AS b + WHERE a.name=+b.name AND +a.mode=b.mode +---- +stmt 0 err 1 -1 93 no such table: zz +==== 1.6.11 + + SELECT name, data FROM zz WHERE name LIKE '%txt' +---- +stmt 0 err 1 -1 52 no such table: zz +==== 1.7 + + DELETE FROM zz; + SELECT * FROM zz; +---- +stmt 0 err 1 -1 18 no such table: zz +stmt 18 err 1 -1 38 no such table: zz +==== 2.1 + + CREATE VIRTUAL TABLE zzz USING zipfile('test.zip'); + INSERT INTO zzz(name, mode) VALUES('dirname', 'drwxr-xr-x'); + SELECT name, mode, data FROM zzz; +---- +stmt 0 ok +stmt 54 err 1 -1 117 no such table: zzz +stmt 117 err 1 -1 153 no such table: zzz +==== 2.2 + + INSERT INTO zzz(name, data) VALUES('dirname2', NULL); + INSERT INTO zzz(name, data) VALUES('dirname2/file1.txt', 'abcdefghijklmnop'); + SELECT name, mode, data FROM zzz; +---- +stmt 0 err 1 -1 56 no such table: zzz +stmt 56 err 1 -1 136 no such table: zzz +stmt 136 err 1 -1 172 no such table: zzz +==== 2.3 + + UPDATE zzz SET name = 'dirname3' WHERE name = 'dirname/'; +---- +stmt 0 err 1 -1 60 no such table: zzz +==== 2.4 + + SELECT name, mode, data FROM zzz; +---- +stmt 0 err 1 -1 36 no such table: zzz +==== 3.0 + + CREATE VIRTUAL TABLE temp.x1 USING zipfile('test.zip'); + INSERT INTO x1(name, data) VALUES('dir1/', NULL); + INSERT INTO x1(name, data) VALUES('file1', '1234'); + INSERT INTO x1(name, data) VALUES('dir1/file2', '5678'); +---- +stmt 0 ok +stmt 58 err 1 -1 110 no such table: x1 +stmt 110 err 1 -1 164 no such table: x1 +stmt 164 err 1 -1 223 no such table: x1 +==== 3.2 + + SELECT rowid FROM x1 +---- +stmt 0 err 1 -1 24 no such table: x1 +==== 4.1 + + CREATE VIRTUAL TABLE yyy USING zipfile(); +---- +stmt 0 ok +==== 4.2 + + CREATE VIRTUAL TABLE yyy USING zipfile('test.zip', 'test.zip'); +---- +stmt 0 ok +==== 4.3 + + SELECT * FROM zipfile() +---- +stmt 0 err 1 -1 27 no such table: zipfile +==== 4.4 + + SELECT * FROM zipfile('/path/that/does/not/exist') +---- +stmt 0 err 1 -1 54 no such table: zipfile +==== 4.6 + + WITH c(name,data) AS ( SELECT 'a.txt', 'abc') + SELECT zipfile(name) FROM c +---- +stmt 0 err 1 58 79 no such function: zipfile +==== 4.7 + + WITH c(name,data) AS ( + SELECT 'a.txt', 'abc' UNION ALL + SELECT NULL, 'def' + ) + SELECT zipfile(name,data) FROM c +---- +stmt 0 err 1 99 125 no such function: zipfile +==== 4.8 + + WITH c(name,data,method) AS ( + SELECT 'a.txt', 'abc', 0 + UNION SELECT 'b.txt', 'def', 8 + UNION SELECT 'c.txt', 'ghi', 16 + ) + SELECT zipfile(name,NULL,NULL,data,method) FROM c +---- +stmt 0 err 1 147 190 no such function: zipfile +==== 4.9 + + WITH c(name,data) AS ( + SELECT 'a.txt', 'abc' + UNION SELECT 'b.txt', 'def' + UNION SELECT 'c.txt/', 'ghi' + ) + SELECT zipfile(name,NULL,NULL,data) FROM c +---- +stmt 0 err 1 131 167 no such function: zipfile +==== 5.0 + + WITH c(name,mtime,data) AS ( + SELECT 'a.txt', 946684800, 'abc' + ) + SELECT name,mtime,data FROM zipfile( + ( SELECT rt( zipfile(name,NULL,mtime,data,NULL) ) FROM c ) + ) +---- +stmt 0 err 1 -1 179 no such table: zipfile +==== 6.1 + + SELECT name, mtime, data FROM zipfile('test1.zip') +---- +stmt 0 err 1 -1 56 no such table: zipfile +==== 6.3 + + SELECT name, mtime, sz, rawdata, data FROM zipfile('test2.zip') +---- +stmt 0 err 1 -1 69 no such table: zipfile +==== 8.0.1 + + CREATE VIRTUAL TABLE zz USING zipfile('test.zip'); + BEGIN; + INSERT INTO zz(name, data) VALUES('a.txt', '1'); + INSERT INTO zz(name, data) VALUES('b.txt', '2'); + INSERT INTO zz(name, data) VALUES('c.txt', '1'); + INSERT INTO zz(name, data) VALUES('d.txt', '2'); + SELECT name, data FROM zz; +---- +stmt 0 ok +stmt 53 ok +stmt 62 err 1 -1 115 no such table: zz +stmt 115 err 1 -1 168 no such table: zz +stmt 168 err 1 -1 221 no such table: zz +stmt 221 err 1 -1 274 no such table: zz +stmt 274 err 1 -1 305 no such table: zz +==== 8.1.1 + + CREATE VIRTUAL TABLE nogood USING zipfile('test_unzip'); +---- +stmt 0 ok +==== 8.1.2 + + INSERT INTO nogood(name, data) VALUES('abc', 'def'); +---- +stmt 0 err 1 -1 55 no such table: nogood +==== 8.2.1 + + DROP TABLE nogood; + BEGIN; + CREATE VIRTUAL TABLE nogood USING zipfile('test_unzip'); +---- +stmt 0 err 1 -1 21 no such table: nogood +stmt 21 ok +stmt 30 ok +==== 8.2.2 + + INSERT INTO nogood(name, data) VALUES('abc', 'def'); +---- +stmt 0 err 1 -1 57 no such table: nogood +==== 8.2.3 + + COMMIT; +---- +stmt 0 ok +==== 8.3.1 + + BEGIN; + CREATE VIRTUAL TABLE ok USING zipfile('test.zip'); + INSERT INTO ok(name, data) VALUES ('sqlite3', 'elf'); + COMMIT; +---- +stmt 0 ok +stmt 9 ok +stmt 64 err 1 -1 122 no such table: ok +stmt 122 ok +==== 9.0 + + WITH src(nm) AS ( + VALUES('dir1') UNION ALL + VALUES('dir2/') UNION ALL + VALUES('dir3//') UNION ALL + VALUES('dir4///') UNION ALL + VALUES('/') + ) + SELECT name FROM zipfile((SELECT zipfile(nm, NULL) FROM src)) +---- +stmt 0 err 1 -1 228 no such table: zipfile +==== 10.0 + + CREATE VIRTUAL TABLE z USING zipfile('test.zip'); +---- +stmt 0 ok +==== 10.1 + + INSERT INTO z(name,data) VALUES('a0','one'),('a0','two'); +---- +stmt 0 err 1 -1 60 no such table: z +==== 10.2 + + SELECT name, data FROM z; +---- +stmt 0 err 1 -1 28 no such table: z +==== 10.3 + + REPLACE INTO z(name,data) VALUES('a0','three'),('a0','four'); +---- +stmt 0 err 1 -1 64 no such table: z +==== 10.4 + + SELECT name, data FROM z; +---- +stmt 0 err 1 -1 28 no such table: z +==== 10.5 + + INSERT OR IGNORE INTO z(name,data) VALUES('a0','five'),('a0','six'); +---- +stmt 0 err 1 -1 71 no such table: z +==== 10.6 + + SELECT name, data FROM z; +---- +stmt 0 err 1 -1 28 no such table: z +==== 11.1 + + DELETE FROM z; +---- +stmt 0 err 1 -1 17 no such table: z +==== 11.2 + + SELECT name, data FROM z; +---- +stmt 0 err 1 -1 28 no such table: z +==== 11.3 + + INSERT INTO z (name,data) VALUES ('b0','one'); + SELECT name, data FROM z; +---- +stmt 0 err 1 -1 49 no such table: z +stmt 49 err 1 -1 77 no such table: z +==== 11.4 + + UPDATE z SET name = 'b1' WHERE name = 'b0'; + SELECT name, data FROM z; +---- +stmt 0 err 1 -1 46 no such table: z +stmt 46 err 1 -1 74 no such table: z +==== 11.5 + + INSERT INTO z (name,data) VALUES ('b0','one'); + SELECT name, data FROM z ORDER BY name; +---- +stmt 0 err 1 -1 49 no such table: z +stmt 49 err 1 -1 91 no such table: z +==== 11.6 + + UPDATE z SET name = 'b1' WHERE name = 'b0'; +---- +stmt 0 err 1 -1 46 no such table: z +==== 11.7 + + UPDATE z SET data = 'two' WHERE name = 'b0'; + SELECT name, data FROM z ORDER BY name; +---- +stmt 0 err 1 -1 47 no such table: z +stmt 47 err 1 -1 89 no such table: z +==== 11.8 + + UPDATE z SET name = 'b1'; +---- +stmt 0 err 1 -1 28 no such table: z +==== 11.9 + + UPDATE z SET name = 'b2'; +---- +stmt 0 err 1 -1 28 no such table: z +==== 11.10 + + UPDATE z SET name = name; + SELECT name, data FROM z ORDER BY name; +---- +stmt 0 err 1 -1 28 no such table: z +stmt 28 err 1 -1 70 no such table: z +==== 11.11 + + UPDATE z SET name = name || 'suffix'; + SELECT name, data FROM z ORDER BY name; +---- +stmt 0 err 1 -1 40 no such table: z +stmt 40 err 1 -1 82 no such table: z +==== 12.1 + + SELECT name FROM fsdir('subdir') ORDER BY 1; +---- +stmt 0 err 1 -1 49 no such table: fsdir +==== 12.2 + + CREATE TABLE d AS SELECT 'subdir' d; + CREATE TABLE x AS SELECT 1 x; +---- +stmt 0 ok +stmt 41 ok +==== 12.4 + + SELECT name FROM d JOIN x JOIN fsdir(d) ORDER BY 1; +---- +stmt 0 err 1 -1 56 no such table: d +==== 12.5 + + SELECT name FROM d JOIN x JOIN fsdir('.', d) ORDER BY 1; +---- +stmt 0 err 1 -1 61 no such table: d +==== 13.10 + + DROP TABLE IF EXISTS t0; + DROP TABLE IF EXISTS t1; + CREATE TABLE t0(a,b,c,d,e,f,g); + REPLACE INTO t0(c,b,f) VALUES(10,10,10); + CREATE VIRTUAL TABLE t1 USING zipfile('h.zip'); + REPLACE INTO t1 SELECT * FROM t0; + SELECT quote(name),quote(mode),quote(mtime),quote(sz),quote(rawdata), + quote(data),quote(method) FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 88 err 1 -1 131 no such table: t0 +stmt 131 ok +stmt 181 err 1 -1 217 no such table: t1 +stmt 217 err 1 -1 333 no such table: t1 +==== 14.10 + + DROP TABLE t1; + CREATE TABLE t1(x char); + INSERT INTO t1(x) VALUES('1'); + INSERT INTO t1(x) SELECT zipfile(x, 'xyz') FROM t1; + INSERT INTO t1(x) SELECT zipfile(x, 'uvw') FROM t1; + SELECT count(*) FROM t1; + PRAGMA integrity_check; +---- +stmt 0 err 1 -1 17 no such table: t1 +stmt 17 ok +stmt 44 err 1 -1 77 no such table: t1 +stmt 77 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 185 no such table: t1 +stmt 185 err 1 -1 212 no such table: t1 +stmt 212 ok +==== 15.10 + + DROP TABLE IF EXISTS t1; + CREATE VIRTUAL TABLE t1 USING zipfile(null); + REPLACE INTO t1 VALUES(null,null,0,null,null,null,null); +---- +stmt 0 ok +stmt 27 ok +stmt 74 err 1 -1 133 no such table: t1 +==== 15.20 + + DROP TABLE IF EXISTS t2; + CREATE VIRTUAL TABLE t2 USING zipfile(null); + REPLACE INTO t2 values(null,null,null,null,null,10,null); +---- +stmt 0 ok +stmt 27 ok +stmt 74 err 1 -1 134 no such table: t2 +==== 16.10 + + DELETE FROM zipfile; +---- +stmt 0 err 1 -1 23 no such table: zipfile +==== 16.20 + + REPLACE INTO zipfile VALUES(null,null,null,null,null,123,null); +---- +stmt 0 err 1 -1 66 no such table: zipfile +==== 17.1 + + WITH vlist(x) AS ( + VALUES(9223372036854775807), + (-9223372036854775808), + (9223372036854775806), + (-9223372036854775807) + ) + SELECT DISTINCT typeof(zipfile(0,0,x,0)) FROM vlist; +---- +stmt 0 err 1 188 217 no such function: zipfile +==== 18.1 + + SELECT * FROM zipfile(NULL); +---- +stmt 0 err 1 -1 31 no such table: zipfile +==== 20.0 + + SELECT * FROM zipfile(X'504b050600000000010001004000000000a3e1110000'); +---- +stmt 0 err 1 -1 74 no such table: zipfile +==== 20.1 + + SELECT * FROM zipfile(unhex(' +504b0304140000080000a60d3e5bd42728f602000000020000000500090068 +2e74787455540500012836db682120504b01021e03140000080000a60d3e5b +d42728f602000000020000000500ffff0000000000000000a4810000000068 +2e74787455540500012836db68504b050600000000010001003c0000002e00 +00000000',char(0x0a,0x0d))); +---- +stmt 0 err 1 -1 313 no such table: zipfile +==== 20.2 + + SELECT * FROM zipfile(unhex('504b0304140000000000000000008b9ed9d30100000001000000010000007841504b01021e03140000000000000000008b9ed9d3010000000100000001001e000000000000000000a4810000000078504b050600000000010001002f000000200000000000')); +---- +stmt 0 err 1 -1 238 no such table: zipfile +==== 21.0 + + SELECT * FROM zipfile(X'504B03040A0000000000000000000000000000000000000000000100000078504B010200000A0000000000000000000000000000000000000000000100000000000000000000000000E2FFFFFF78504B050600000000010001002F0000001F0000000000'); +---- +stmt 0 err 1 -1 230 no such table: zipfile +==== 23.0 + + SELECT length(zipfile(name,0,0,data,0)) FROM ( + SELECT 'a' AS name, zeroblob(1000000000) AS data + UNION ALL SELECT 'b', zeroblob(1200000000) + ); +---- +stmt 0 err 1 19 166 no such function: zipfile +==== 25.0 + + WITH t(v) AS ( + SELECT unhex( + '504B03041400000000000000000000000000000000000000000001000000 + 61504B01021E031400000000000000000000000000000000000000000001 + 000000000000000000000000000000000061504B05060000000001000100 + 2F0000001F0000000000',char(10,13,32)) + UNION ALL SELECT 'x' + ) SELECT z.name FROM t, zipfile(t.v) AS z; +---- +stmt 0 err 1 -1 350 no such table: zipfile diff --git a/parser/testdata/zipfile2.metadata.json b/parser/testdata/zipfile2.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/zipfile2.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/zipfile2.test b/parser/testdata/zipfile2.test new file mode 100644 index 0000000..b007d65 --- /dev/null +++ b/parser/testdata/zipfile2.test @@ -0,0 +1,65 @@ +==== 3.1 + + WITH contents(name,mtime,data) AS ( + VALUES('a.txt', 1000000, 'contents of a.txt') UNION ALL + VALUES('b.txt', 1000000, 'contents of b.txt') + ) SELECT quote( zipfile(name,NULL,mtime,data) ) FROM contents; +---- +stmt 0 err 1 179 225 no such function: zipfile +==== 6.0 + + CREATE VIRTUAL TABLE temp.zip USING zipfile('test.zip'); + INSERT INTO temp.zip (name,data) VALUES ('test1','test'); + INSERT INTO temp.zip (name,data) VALUES ('test2','test'); +---- +stmt 0 ok +stmt 59 err 1 -1 120 no such table: temp.zip +stmt 120 err 1 -1 181 no such table: temp.zip +==== 6.1 + + UPDATE temp.zip SET name='test1' WHERE name='test2' +---- +stmt 0 err 1 -1 55 no such table: temp.zip +==== 6.2 + + DROP TABLE zip; + CREATE VIRTUAL TABLE temp.zip USING zipfile('test.zip'); + INSERT INTO temp.zip (name,data) VALUES ('test','test'); + UPDATE temp.zip set name=name||'new' where name='test'; + INSERT INTO temp.zip (name,data) VALUES ('test','test'); + UPDATE temp.zip set name=name||'new' where name='test'; +---- +stmt 0 err 1 -1 18 no such table: zip +stmt 18 ok +stmt 77 err 1 -1 137 no such table: temp.zip +stmt 137 err 1 -1 197 no such table: temp.zip +stmt 197 err 1 -1 257 no such table: temp.zip +stmt 257 err 1 -1 317 no such table: temp.zip +==== 6.3 + + INSERT INTO temp.zip (name,data) VALUES ('test1','test'); + INSERT INTO temp.zip (name,data) VALUES ('test2','test'); + UPDATE OR REPLACE zip SET name='test2' WHERE name='test1'; + SELECT name FROM zip; +---- +stmt 0 err 1 -1 60 no such table: temp.zip +stmt 60 err 1 -1 121 no such table: temp.zip +stmt 121 err 1 -1 183 no such table: zip +stmt 183 err 1 -1 207 no such table: zip +==== 7.0 + + DROP TABLE IF EXISTS t1; + CREATE VIRTUAL TABLE t1 USING zipfile('test.zip'); +---- +stmt 0 ok +stmt 27 ok +==== 7.1 + + SELECT length(name) FROM t1; +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 8.0 + + SELECT name,sz FROM zipfile(readfile('test.zip')); +---- +stmt 0 err 1 -1 55 no such table: zipfile diff --git a/parser/testdata/zipfilefault.metadata.json b/parser/testdata/zipfilefault.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/zipfilefault.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/zipfilefault.test b/parser/testdata/zipfilefault.test new file mode 100644 index 0000000..97b83e3 --- /dev/null +++ b/parser/testdata/zipfilefault.test @@ -0,0 +1,19 @@ +==== 2.0 + + CREATE VIRTUAL TABLE setup USING zipfile('test.zip'); + INSERT INTO setup(name, data) VALUES('a.txt', '1234567890'); +---- +stmt 0 ok +stmt 56 err 1 -1 119 no such table: setup +==== 3.0 + + CREATE VIRTUAL TABLE setup USING zipfile('test.zip'); + INSERT INTO setup(name, data) VALUES('a.txt', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa'); +---- +stmt 0 ok +stmt 56 err 1 -1 137 no such table: setup +==== 5.0 + + CREATE VIRTUAL TABLE setup USING zipfile('test.zip') +---- +stmt 0 ok From dc443db05bc572754692ee6b7b4b9dcfb0f7deea Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 19:39:47 +0000 Subject: [PATCH 04/23] Add the SQL renderer, AST dump, round-trip property and snapshots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The second half of PLAN.md's answer to "SQLite has no parse-tree oracle". Accept/reject conformance cannot see a dropped clause or an operator associated the wrong way, so two layers stand in for upstream goldens: - ast.String/ast.Statements render a tree back to SQL. Not a formatter, and no promises beyond re-parseability. Parenthesisation needs no precedence logic, because the parser keeps explicit parentheses as ParenExpr nodes. - internal/dump renders a node reflectively, so it cannot fall behind the node set: a field added to a node shows up in the next snapshot diff whether or not anyone remembered. Two option sets — everything, for snapshots, and shape-only for comparisons, which drops the spans and Raw text a round trip is entitled to change. - TestRoundTrip runs parse/render/parse over all 20,815 accepting corpus cases and compares the trees, then checks that rendering is idempotent. - TestASTSnapshots covers a hand-written tour of the node set under parser/testdata/ast, with -update to rewrite the goldens. Two things this found: - IndexedColumn recorded that a COLLATE was present but not which collation, so "FOREIGN KEY(b COLLATE nocase DESC)" lost the name. - Three nodes built their Span from a composite literal that also called the parse function for their last child, so the span ended before the child began. Go does not order those evaluations. Enum types gained String methods, so a snapshot diff names what changed instead of printing an integer. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- CLAUDE.md | 17 +- ast/ddl.go | 8 +- ast/render.go | 1303 +++++++++++++++++++++++ internal/dump/dump.go | 169 +++ parser/parse_ddl.go | 6 +- parser/parse_expr.go | 3 +- parser/parse_select.go | 3 +- parser/roundtrip_test.go | 104 ++ parser/snapshot_test.go | 92 ++ parser/testdata/README.md | 6 + parser/testdata/ast/ddl.sql | 36 + parser/testdata/ast/ddl.tree | 956 +++++++++++++++++ parser/testdata/ast/dml.sql | 9 + parser/testdata/ast/dml.tree | 385 +++++++ parser/testdata/ast/expressions.sql | 22 + parser/testdata/ast/expressions.tree | 1444 ++++++++++++++++++++++++++ parser/testdata/ast/misc.sql | 21 + parser/testdata/ast/misc.tree | 214 ++++ parser/testdata/ast/select.sql | 14 + parser/testdata/ast/select.tree | 1038 ++++++++++++++++++ 20 files changed, 5840 insertions(+), 10 deletions(-) create mode 100644 ast/render.go create mode 100644 internal/dump/dump.go create mode 100644 parser/roundtrip_test.go create mode 100644 parser/snapshot_test.go create mode 100644 parser/testdata/ast/ddl.sql create mode 100644 parser/testdata/ast/ddl.tree create mode 100644 parser/testdata/ast/dml.sql create mode 100644 parser/testdata/ast/dml.tree create mode 100644 parser/testdata/ast/expressions.sql create mode 100644 parser/testdata/ast/expressions.tree create mode 100644 parser/testdata/ast/misc.sql create mode 100644 parser/testdata/ast/misc.tree create mode 100644 parser/testdata/ast/select.sql create mode 100644 parser/testdata/ast/select.tree diff --git a/CLAUDE.md b/CLAUDE.md index 5570068..1cc0774 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,7 +13,8 @@ https://sqlite.org/lang.html. - **Never edit `parser/testdata/*.test` by hand.** Corpus files are produced by `cmd/regenerate-parse` from SQLite's own test suite plus a real SQLite build (the oracle). `*.metadata.json` sidecars are updated by tooling - (`go test ./parser -check-parse`), not by hand. + (`go test ./parser -check-parse`), not by hand. The hand-written snapshot + inputs under `parser/testdata/ast/` are the exception — see below. - Every nontrivial parse function carries a comment naming the `parse.y` rule(s) it implements. - Error messages must match SQLite's parser byte-for-byte @@ -47,6 +48,20 @@ semantic, so meyer is permitted to accept such statements. The pattern list lives in `internal/testfile` (`syntaxFamily`) and can be extended without regenerating the corpus, because the corpus stores raw oracle output. +## Tree shape + +Accept/reject conformance cannot see a dropped clause or a mis-associated +operator, so two further checks stand in for the parse-tree goldens SQLite +cannot produce: + +- **Round trip** (`TestRoundTrip`): every corpus case that parses is + rendered back to SQL with `ast.Statements`, re-parsed, and the two trees + compared structurally with `internal/dump`. Spans and `Raw` fields are + excluded — the renderer promises re-parseability and nothing else. +- **Snapshots** (`TestASTSnapshots`): `parser/testdata/ast/*.sql` are + hand-written and meant to be edited; their `.tree` goldens are rewritten + with `go test ./parser -update` and reviewed in the diff. + ## The loop ```sh diff --git a/ast/ddl.go b/ast/ddl.go index e33b429..eca59ad 100644 --- a/ast/ddl.go +++ b/ast/ddl.go @@ -148,12 +148,12 @@ func (n *TableConstraint) Children() []Node { // eidlist ::= eidlist COMMA nm collate sortorder. type IndexedColumn struct { Span - Name *Ident `json:"name"` - Collate bool `json:"collate,omitempty"` - Order SortOrder `json:"order,omitempty"` + Name *Ident `json:"name"` + Collation *Ident `json:"collation,omitempty"` + Order SortOrder `json:"order,omitempty"` } -func (n *IndexedColumn) Children() []Node { return nodes(n.Name) } +func (n *IndexedColumn) Children() []Node { return nodes(n.Name, n.Collation) } // ForeignKeyAction is the action of an ON DELETE / ON UPDATE clause. type ForeignKeyAction int diff --git a/ast/render.go b/ast/render.go new file mode 100644 index 0000000..8a736f8 --- /dev/null +++ b/ast/render.go @@ -0,0 +1,1303 @@ +package ast + +import "strings" + +// This file is meyer's SQL renderer. It is not a formatter and makes no +// fidelity promises beyond re-parseability: rendering a tree and parsing the +// result must yield the same tree, ignoring byte spans and the Raw fields +// that quote the original source. PLAN.md uses that round trip as a property +// test, because accept/reject conformance alone cannot see a dropped clause +// or a mis-associated operator. +// +// Parenthesisation needs no precedence logic, because the parser keeps +// explicit parentheses as ParenExpr nodes: a tree that needed brackets to be +// written down came from brackets in the first place. + +// String renders n as SQL. +func String(n Node) string { + var b strings.Builder + write(&b, n) + return b.String() +} + +// Statements renders a whole script, one statement per line. +func Statements(stmts []Stmt) string { + var b strings.Builder + for _, s := range stmts { + write(&b, s) + b.WriteString(";\n") + } + return b.String() +} + +func (n *SelectStmt) String() string { return String(n) } +func (n *InsertStmt) String() string { return String(n) } +func (n *UpdateStmt) String() string { return String(n) } +func (n *DeleteStmt) String() string { return String(n) } +func (n *CreateTableStmt) String() string { return String(n) } +func (n *CreateIndexStmt) String() string { return String(n) } +func (n *CreateViewStmt) String() string { return String(n) } +func (n *CreateTriggerStmt) String() string { return String(n) } +func (n *CreateVirtualTableStmt) String() string { return String(n) } +func (n *AlterTableStmt) String() string { return String(n) } +func (n *ExplainStmt) String() string { return String(n) } + +// w is a small writer wrapper that tracks whether a separating space is +// needed, so callers can emit tokens without worrying about spacing. Spacing +// is never optional: "a--b" would be a comment and "1-1" would still lex as +// two tokens only by luck. +type w struct{ b *strings.Builder } + +func (x w) kw(s string) { + if x.b.Len() > 0 { + if c := x.b.String()[x.b.Len()-1]; c != ' ' && c != '(' { + x.b.WriteByte(' ') + } + } + x.b.WriteString(s) +} + +func (x w) raw(s string) { x.b.WriteString(s) } + +func write(b *strings.Builder, n Node) { + x := w{b} + switch t := n.(type) { + + // ---- expressions ---- + + case *Ident: + x.kw(t.Raw) + case *QualifiedName: + if t.Schema != nil { + x.kw(t.Schema.Raw) + x.raw(".") + x.raw(t.Name.Raw) + return + } + x.kw(t.Name.Raw) + case *QualifiedRef: + for i, p := range t.Parts { + if i == 0 { + x.kw(p.Raw) + } else { + x.raw("." + p.Raw) + } + } + case *Star: + if t.Table != nil { + x.kw(t.Table.Raw) + x.raw(".*") + return + } + x.kw("*") + case *Literal: + x.kw(t.Raw) + case *BindParam: + x.kw(t.Raw) + case *ParenExpr: + x.kw("(") + write(b, t.X) + x.raw(")") + case *UnaryExpr: + x.kw(t.Op.String()) + write(b, t.X) + case *BinaryExpr: + write(b, t.X) + x.kw(t.Op.String()) + write(b, t.Y) + case *CollateExpr: + write(b, t.X) + x.kw("COLLATE") + x.kw(t.Name.Raw) + case *LikeExpr: + write(b, t.X) + if t.Not { + x.kw("NOT") + } + x.kw(t.Op.Raw) + write(b, t.Y) + if t.Escape != nil { + x.kw("ESCAPE") + write(b, t.Escape) + } + case *IsExpr: + write(b, t.X) + x.kw("IS") + if t.Not { + x.kw("NOT") + } + if t.Distinct { + x.kw("DISTINCT FROM") + } + write(b, t.Y) + case *NullCheckExpr: + write(b, t.X) + if t.Not { + x.kw("NOT NULL") + } else { + x.kw("ISNULL") + } + case *BetweenExpr: + write(b, t.X) + if t.Not { + x.kw("NOT") + } + x.kw("BETWEEN") + write(b, t.Lo) + x.kw("AND") + write(b, t.Hi) + case *InExpr: + write(b, t.X) + if t.Not { + x.kw("NOT") + } + x.kw("IN") + switch { + case t.Select != nil: + x.kw("(") + write(b, t.Select) + x.raw(")") + case t.Parens: + x.kw("(") + writeExprs(b, t.List) + x.raw(")") + default: + write(b, t.Table) + if t.HasArgs { + x.raw("(") + writeExprs(b, t.Args) + x.raw(")") + } + } + case *CaseExpr: + x.kw("CASE") + if t.Operand != nil { + write(b, t.Operand) + } + for _, when := range t.Whens { + write(b, when) + } + if t.Else != nil { + x.kw("ELSE") + write(b, t.Else) + } + x.kw("END") + case *CaseWhen: + x.kw("WHEN") + write(b, t.When) + x.kw("THEN") + write(b, t.Then) + case *CastExpr: + x.kw("CAST") + x.kw("(") + write(b, t.X) + x.kw("AS") + if t.Type != nil { + write(b, t.Type) + } + x.raw(")") + case *TypeName: + x.kw(t.Name) + if len(t.Args) > 0 { + x.raw("(" + strings.Join(t.Args, ",") + ")") + } + case *FuncCall: + x.kw(t.Name.Raw) + x.raw("(") + switch { + case t.Star: + x.raw("*") + default: + if t.Distinct { + x.kw("DISTINCT") + } + if t.All { + x.kw("ALL") + } + writeExprs(b, t.Args) + if len(t.OrderBy) > 0 { + x.kw("ORDER BY") + writeOrdering(b, t.OrderBy) + } + } + x.raw(")") + if t.Filter != nil { + x.kw("FILTER (WHERE") + write(b, t.Filter) + x.raw(")") + } + if t.Over != nil { + x.kw("OVER") + if t.Over.NameOnly { + x.kw(t.Over.Base.Raw) + } else { + x.kw("(") + write(b, t.Over) + x.raw(")") + } + } + case *ExistsExpr: + x.kw("EXISTS (") + write(b, t.Select) + x.raw(")") + case *SubqueryExpr: + x.kw("(") + write(b, t.Select) + x.raw(")") + case *VectorExpr: + x.kw("(") + writeExprs(b, t.List) + x.raw(")") + case *RaiseExpr: + x.kw("RAISE (") + x.kw(t.Action) + if t.Message != nil { + x.raw(",") + write(b, t.Message) + } + x.raw(")") + + // ---- select ---- + + case *SelectStmt: + if t.With != nil { + write(b, t.With) + } + for i, core := range t.Cores { + if i > 0 { + x.kw(t.Ops[i-1].Op) + if t.Ops[i-1].All { + x.kw("ALL") + } + } + write(b, core) + } + case *SelectQuery: + x.kw("SELECT") + switch t.Distinct { + case DistinctDistinct: + x.kw("DISTINCT") + case DistinctAll: + x.kw("ALL") + } + for i, c := range t.Columns { + if i > 0 { + x.raw(",") + } + write(b, c) + } + if len(t.From) > 0 { + x.kw("FROM") + writeFrom(b, t.From) + } + if t.Where != nil { + x.kw("WHERE") + write(b, t.Where) + } + if len(t.GroupBy) > 0 { + x.kw("GROUP BY") + writeExprs(b, t.GroupBy) + } + if t.Having != nil { + x.kw("HAVING") + write(b, t.Having) + } + if len(t.Windows) > 0 { + x.kw("WINDOW") + for i, wd := range t.Windows { + if i > 0 { + x.raw(",") + } + x.kw(wd.Name.Raw) + x.kw("AS (") + write(b, wd) + x.raw(")") + } + } + if len(t.OrderBy) > 0 { + x.kw("ORDER BY") + writeOrdering(b, t.OrderBy) + } + if t.Limit != nil { + write(b, t.Limit) + } + case *ValuesClause: + x.kw("VALUES") + for i, row := range t.Rows { + if i > 0 { + x.raw(",") + } + x.kw("(") + writeExprs(b, row) + x.raw(")") + } + case *ResultColumn: + write(b, t.Expr) + if t.Alias != nil { + if t.HasAs { + x.kw("AS") + } + x.kw(t.Alias.Raw) + } + case *Limit: + x.kw("LIMIT") + if t.Comma { + write(b, t.Offset) + x.raw(",") + write(b, t.Count) + return + } + write(b, t.Count) + if t.Offset != nil { + x.kw("OFFSET") + write(b, t.Offset) + } + case *OrderingTerm: + write(b, t.Expr) + switch t.Order { + case SortAsc: + x.kw("ASC") + case SortDesc: + x.kw("DESC") + } + switch t.Nulls { + case NullsFirst: + x.kw("NULLS FIRST") + case NullsLast: + x.kw("NULLS LAST") + } + case *TableRef: + writeTableRef(b, t) + case *With: + x.kw("WITH") + if t.Recursive { + x.kw("RECURSIVE") + } + for i, cte := range t.CTEs { + if i > 0 { + x.raw(",") + } + write(b, cte) + } + case *CTE: + x.kw(t.Name.Raw) + if len(t.Columns) > 0 { + x.kw("(") + for i, c := range t.Columns { + if i > 0 { + x.raw(",") + } + x.kw(c.Raw) + } + x.raw(")") + } + x.kw("AS") + switch t.Materialized { + case MaterializedYes: + x.kw("MATERIALIZED") + case MaterializedNo: + x.kw("NOT MATERIALIZED") + } + x.kw("(") + write(b, t.Select) + x.raw(")") + case *WindowDef: + if t.Base != nil { + x.kw(t.Base.Raw) + } + if len(t.Partition) > 0 { + x.kw("PARTITION BY") + writeExprs(b, t.Partition) + } + if len(t.OrderBy) > 0 { + x.kw("ORDER BY") + writeOrdering(b, t.OrderBy) + } + writeFrame(b, t) + + // ---- DML ---- + + case *InsertStmt: + writeInsert(b, t) + case *UpdateStmt: + writeUpdate(b, t) + case *DeleteStmt: + writeDelete(b, t) + case *SetPair: + if t.Paren { + x.kw("(") + writeIdents(b, t.Columns) + x.raw(")") + } else { + x.kw(t.Columns[0].Raw) + } + x.kw("=") + write(b, t.Value) + case *Upsert: + x.kw("ON CONFLICT") + if t.Target != nil { + x.kw("(") + writeOrdering(b, t.Target) + x.raw(")") + if t.TargetWhere != nil { + x.kw("WHERE") + write(b, t.TargetWhere) + } + } + x.kw("DO") + if t.DoNothing { + x.kw("NOTHING") + return + } + x.kw("UPDATE SET") + for i, s := range t.Set { + if i > 0 { + x.raw(",") + } + write(b, s) + } + if t.Where != nil { + x.kw("WHERE") + write(b, t.Where) + } + + // ---- DDL ---- + + case *CreateTableStmt: + writeCreateTable(b, t) + case *ColumnDef: + x.kw(t.Name.Raw) + if t.Type != nil { + write(b, t.Type) + } + for _, c := range t.Constraints { + write(b, c) + } + case *ColumnConstraint: + writeColumnConstraint(b, t) + case *TableConstraint: + writeTableConstraint(b, t) + case *IndexedColumn: + x.kw(t.Name.Raw) + if t.Collation != nil { + x.kw("COLLATE") + x.kw(t.Collation.Raw) + } + switch t.Order { + case SortAsc: + x.kw("ASC") + case SortDesc: + x.kw("DESC") + } + case *ForeignKeyClause: + x.kw("REFERENCES") + x.kw(t.Table.Raw) + if len(t.Columns) > 0 { + x.kw("(") + for i, c := range t.Columns { + if i > 0 { + x.raw(",") + } + write(b, c) + } + x.raw(")") + } + for _, a := range t.Args { + write(b, a) + } + case *ForeignKeyArg: + if t.Match != nil { + x.kw("MATCH") + x.kw(t.Match.Raw) + return + } + x.kw("ON") + x.kw(t.Event) + switch t.Action { + case FKSetNull: + x.kw("SET NULL") + case FKSetDefault: + x.kw("SET DEFAULT") + case FKCascade: + x.kw("CASCADE") + case FKRestrict: + x.kw("RESTRICT") + default: + x.kw("NO ACTION") + } + case *DeferClause: + if t.Not { + x.kw("NOT") + } + x.kw("DEFERRABLE") + if t.HasInitially { + x.kw("INITIALLY") + if t.InitiallyDeferred { + x.kw("DEFERRED") + } else { + x.kw("IMMEDIATE") + } + } + case *CreateIndexStmt: + x.kw("CREATE") + if t.Unique { + x.kw("UNIQUE") + } + x.kw("INDEX") + if t.IfNotExists { + x.kw("IF NOT EXISTS") + } + write(b, t.Name) + x.kw("ON") + x.kw(t.Table.Raw) + x.kw("(") + writeOrdering(b, t.Columns) + x.raw(")") + if t.Where != nil { + x.kw("WHERE") + write(b, t.Where) + } + case *CreateViewStmt: + x.kw("CREATE") + if t.Temp { + x.kw("TEMP") + } + x.kw("VIEW") + if t.IfNotExists { + x.kw("IF NOT EXISTS") + } + write(b, t.Name) + if len(t.Columns) > 0 { + x.kw("(") + for i, c := range t.Columns { + if i > 0 { + x.raw(",") + } + write(b, c) + } + x.raw(")") + } + x.kw("AS") + write(b, t.Select) + case *CreateTriggerStmt: + writeCreateTrigger(b, t) + case *CreateVirtualTableStmt: + x.kw("CREATE VIRTUAL TABLE") + if t.IfNotExists { + x.kw("IF NOT EXISTS") + } + write(b, t.Name) + x.kw("USING") + x.kw(t.Module.Raw) + if t.HasArgs { + x.raw("(" + strings.Join(t.Args, ",") + ")") + } + case *AlterTableStmt: + writeAlterTable(b, t) + case *DropTableStmt: + writeDrop(b, "TABLE", t.IfExists, t.Name) + case *DropViewStmt: + writeDrop(b, "VIEW", t.IfExists, t.Name) + case *DropIndexStmt: + writeDrop(b, "INDEX", t.IfExists, t.Name) + case *DropTriggerStmt: + writeDrop(b, "TRIGGER", t.IfExists, t.Name) + + // ---- everything else ---- + + case *BeginStmt: + x.kw("BEGIN") + if t.HasType { + switch t.Type { + case TxnDeferred: + x.kw("DEFERRED") + case TxnImmediate: + x.kw("IMMEDIATE") + case TxnExclusive: + x.kw("EXCLUSIVE") + } + } + writeTransOpt(b, t.Name) + case *CommitStmt: + x.kw(t.Keyword) + writeTransOpt(b, t.Name) + case *RollbackStmt: + x.kw("ROLLBACK") + writeTransOpt(b, t.Name) + if t.Savepoint != nil { + x.kw("TO") + x.kw(t.Savepoint.Raw) + } + case *SavepointStmt: + x.kw("SAVEPOINT") + x.kw(t.Name.Raw) + case *ReleaseStmt: + x.kw("RELEASE") + x.kw(t.Name.Raw) + case *AttachStmt: + x.kw("ATTACH") + if t.HasDatabase { + x.kw("DATABASE") + } + write(b, t.File) + x.kw("AS") + write(b, t.Name) + if t.Key != nil { + x.kw("KEY") + write(b, t.Key) + } + case *DetachStmt: + x.kw("DETACH") + if t.HasDatabase { + x.kw("DATABASE") + } + write(b, t.Name) + case *PragmaStmt: + x.kw("PRAGMA") + write(b, t.Name) + if t.HasValue { + if t.Paren { + x.raw("(" + t.Value + ")") + } else { + x.kw("=") + x.kw(t.Value) + } + } + case *VacuumStmt: + x.kw("VACUUM") + if t.Schema != nil { + x.kw(t.Schema.Raw) + } + if t.Into != nil { + x.kw("INTO") + write(b, t.Into) + } + case *AnalyzeStmt: + x.kw("ANALYZE") + if t.Name != nil { + write(b, t.Name) + } + case *ReindexStmt: + x.kw("REINDEX") + if t.Name != nil { + write(b, t.Name) + } + case *ExplainStmt: + x.kw("EXPLAIN") + if t.QueryPlan { + x.kw("QUERY PLAN") + } + write(b, t.Stmt) + } +} + +// writeTransOpt renders "trans_opt". A transaction name is only reachable +// through the TRANSACTION keyword. +func writeTransOpt(b *strings.Builder, name *Ident) { + if name == nil { + return + } + x := w{b} + x.kw("TRANSACTION") + x.kw(name.Raw) +} + +func writeDrop(b *strings.Builder, kind string, ifExists bool, name *QualifiedName) { + x := w{b} + x.kw("DROP") + x.kw(kind) + if ifExists { + x.kw("IF EXISTS") + } + write(b, name) +} + +func writeExprs(b *strings.Builder, list []Expr) { + for i, e := range list { + if i > 0 { + b.WriteString(",") + } + write(b, e) + } +} + +func writeIdents(b *strings.Builder, list []*Ident) { + x := w{b} + for i, e := range list { + if i > 0 { + x.raw(",") + } + x.kw(e.Raw) + } +} + +func writeOrdering(b *strings.Builder, list []*OrderingTerm) { + for i, t := range list { + if i > 0 { + b.WriteString(",") + } + write(b, t) + } +} + +func writeFrom(b *strings.Builder, list []*TableRef) { + x := w{b} + for _, t := range list { + if t.Join != nil { + if t.Join.Type&JoinComma != 0 { + x.raw(",") + } else { + for _, word := range t.Join.Words { + x.kw(word) + } + } + } + writeTableRef(b, t) + } +} + +func writeTableRef(b *strings.Builder, t *TableRef) { + x := w{b} + switch { + case t.Select != nil: + x.kw("(") + write(b, t.Select) + x.raw(")") + case t.List != nil: + x.kw("(") + writeFrom(b, t.List) + x.raw(")") + default: + write(b, t.Name) + if t.HasArgs { + x.raw("(") + writeExprs(b, t.Args) + x.raw(")") + } + } + if t.Alias != nil { + if t.HasAs { + x.kw("AS") + } + x.kw(t.Alias.Raw) + } + if t.IndexedBy != nil { + x.kw("INDEXED BY") + x.kw(t.IndexedBy.Raw) + } + if t.NotIndexed { + x.kw("NOT INDEXED") + } + if t.On != nil { + x.kw("ON") + write(b, t.On) + } + if len(t.Using) > 0 { + x.kw("USING (") + writeIdents(b, t.Using) + x.raw(")") + } +} + +func writeFrame(b *strings.Builder, n *WindowDef) { + x := w{b} + switch n.Frame { + case FrameRange: + x.kw("RANGE") + case FrameRows: + x.kw("ROWS") + case FrameGroups: + x.kw("GROUPS") + default: + return + } + if n.EndBound != nil { + x.kw("BETWEEN") + writeBound(b, n.StartBound) + x.kw("AND") + writeBound(b, n.EndBound) + } else { + writeBound(b, n.StartBound) + } + switch n.Exclude { + case ExcludeNoOthers: + x.kw("EXCLUDE NO OTHERS") + case ExcludeCurrentRow: + x.kw("EXCLUDE CURRENT ROW") + case ExcludeGroup: + x.kw("EXCLUDE GROUP") + case ExcludeTies: + x.kw("EXCLUDE TIES") + } +} + +func writeBound(b *strings.Builder, bound *FrameBound) { + x := w{b} + switch bound.Type { + case BoundUnboundedPreceding: + x.kw("UNBOUNDED PRECEDING") + case BoundUnboundedFollowing: + x.kw("UNBOUNDED FOLLOWING") + case BoundCurrentRow: + x.kw("CURRENT ROW") + case BoundPreceding: + write(b, bound.Expr) + x.kw("PRECEDING") + case BoundFollowing: + write(b, bound.Expr) + x.kw("FOLLOWING") + } +} + +func writeInsert(b *strings.Builder, t *InsertStmt) { + x := w{b} + if t.With != nil { + write(b, t.With) + } + if t.Replace { + x.kw("REPLACE") + } else { + x.kw("INSERT") + writeOrConflict(b, t.OrConflict) + } + x.kw("INTO") + write(b, t.Table) + if t.Alias != nil { + x.kw("AS") + x.kw(t.Alias.Raw) + } + if len(t.Columns) > 0 { + x.kw("(") + writeIdents(b, t.Columns) + x.raw(")") + } + if t.DefaultValues { + x.kw("DEFAULT VALUES") + } else { + write(b, t.Select) + } + for _, u := range t.Upserts { + write(b, u) + } + writeReturning(b, t.Returning) +} + +func writeUpdate(b *strings.Builder, t *UpdateStmt) { + x := w{b} + if t.With != nil { + write(b, t.With) + } + x.kw("UPDATE") + writeOrConflict(b, t.OrConflict) + write(b, t.Table) + if t.Alias != nil { + x.kw("AS") + x.kw(t.Alias.Raw) + } + writeIndexedBy(b, t.IndexedBy, t.NotIndexed) + x.kw("SET") + for i, s := range t.Set { + if i > 0 { + x.raw(",") + } + write(b, s) + } + if len(t.From) > 0 { + x.kw("FROM") + writeFrom(b, t.From) + } + if t.Where != nil { + x.kw("WHERE") + write(b, t.Where) + } + writeReturning(b, t.Returning) +} + +func writeDelete(b *strings.Builder, t *DeleteStmt) { + x := w{b} + if t.With != nil { + write(b, t.With) + } + x.kw("DELETE FROM") + write(b, t.Table) + if t.Alias != nil { + x.kw("AS") + x.kw(t.Alias.Raw) + } + writeIndexedBy(b, t.IndexedBy, t.NotIndexed) + if t.Where != nil { + x.kw("WHERE") + write(b, t.Where) + } + writeReturning(b, t.Returning) +} + +func writeIndexedBy(b *strings.Builder, by *Ident, notIndexed bool) { + x := w{b} + if by != nil { + x.kw("INDEXED BY") + x.kw(by.Raw) + } + if notIndexed { + x.kw("NOT INDEXED") + } +} + +func writeReturning(b *strings.Builder, cols []*ResultColumn) { + if len(cols) == 0 { + return + } + x := w{b} + x.kw("RETURNING") + for i, c := range cols { + if i > 0 { + x.raw(",") + } + write(b, c) + } +} + +func writeOrConflict(b *strings.Builder, a ConflictAction) { + if a == ConflictDefault { + return + } + x := w{b} + x.kw("OR") + x.kw(a.String()) +} + +func writeOnConflict(b *strings.Builder, a ConflictAction) { + if a == ConflictDefault { + return + } + x := w{b} + x.kw("ON CONFLICT") + x.kw(a.String()) +} + +func writeCreateTable(b *strings.Builder, t *CreateTableStmt) { + x := w{b} + x.kw("CREATE") + if t.Temp { + x.kw("TEMP") + } + x.kw("TABLE") + if t.IfNotExists { + x.kw("IF NOT EXISTS") + } + write(b, t.Name) + if t.Select != nil { + x.kw("AS") + write(b, t.Select) + return + } + x.kw("(") + for i, c := range t.Columns { + if i > 0 { + x.raw(",") + } + write(b, c) + } + for _, c := range t.Constraints { + x.raw(",") + write(b, c) + } + x.raw(")") + for i, opt := range t.Options { + if i > 0 { + x.raw(",") + } + if t.WithoutOpt[i] { + x.kw("WITHOUT") + } + x.kw(opt.Raw) + } +} + +func writeColumnConstraint(b *strings.Builder, t *ColumnConstraint) { + x := w{b} + if t.Name != nil { + x.kw("CONSTRAINT") + x.kw(t.Name.Raw) + } + switch t.Kind { + case ColumnNull: + x.kw("NULL") + writeOnConflict(b, t.OnConflict) + case ColumnNotNull: + x.kw("NOT NULL") + writeOnConflict(b, t.OnConflict) + case ColumnPrimaryKey: + x.kw("PRIMARY KEY") + switch t.Order { + case SortAsc: + x.kw("ASC") + case SortDesc: + x.kw("DESC") + } + writeOnConflict(b, t.OnConflict) + if t.AutoIncrement { + x.kw("AUTOINCREMENT") + } + case ColumnUnique: + x.kw("UNIQUE") + writeOnConflict(b, t.OnConflict) + case ColumnCheck: + x.kw("CHECK (") + write(b, t.Expr) + x.raw(")") + case ColumnDefault: + x.kw("DEFAULT") + write(b, t.Expr) + case ColumnCollate: + x.kw("COLLATE") + x.kw(t.Collation.Raw) + case ColumnReferences: + write(b, t.References) + case ColumnGenerated: + if t.AlwaysWord { + x.kw("GENERATED ALWAYS") + } + x.kw("AS (") + write(b, t.Expr) + x.raw(")") + if t.GeneratedKind != nil { + x.kw(t.GeneratedKind.Raw) + } + case ColumnDeferrable: + write(b, t.Deferrable) + } +} + +func writeTableConstraint(b *strings.Builder, t *TableConstraint) { + x := w{b} + if t.Name != nil { + x.kw("CONSTRAINT") + x.kw(t.Name.Raw) + } + switch t.Kind { + case TablePrimaryKey: + x.kw("PRIMARY KEY (") + writeOrdering(b, t.Columns) + if t.AutoIncrement { + x.kw("AUTOINCREMENT") + } + x.raw(")") + writeOnConflict(b, t.OnConflict) + case TableUnique: + x.kw("UNIQUE (") + writeOrdering(b, t.Columns) + x.raw(")") + writeOnConflict(b, t.OnConflict) + case TableCheck: + x.kw("CHECK (") + write(b, t.Expr) + x.raw(")") + writeOnConflict(b, t.OnConflict) + case TableForeignKey: + x.kw("FOREIGN KEY (") + for i, c := range t.FKColumns { + if i > 0 { + x.raw(",") + } + write(b, c) + } + x.raw(")") + write(b, t.References) + if t.Deferrable != nil { + write(b, t.Deferrable) + } + } +} + +func writeCreateTrigger(b *strings.Builder, t *CreateTriggerStmt) { + x := w{b} + x.kw("CREATE") + if t.Temp { + x.kw("TEMP") + } + x.kw("TRIGGER") + if t.IfNotExists { + x.kw("IF NOT EXISTS") + } + write(b, t.Name) + if t.HasTime { + switch t.Time { + case TriggerBefore: + x.kw("BEFORE") + case TriggerAfter: + x.kw("AFTER") + case TriggerInsteadOf: + x.kw("INSTEAD OF") + } + } + x.kw(t.Event) + if len(t.UpdateOf) > 0 { + x.kw("OF") + writeIdents(b, t.UpdateOf) + } + x.kw("ON") + write(b, t.Table) + if t.ForEachRow { + x.kw("FOR EACH ROW") + } + if t.When != nil { + x.kw("WHEN") + write(b, t.When) + } + x.kw("BEGIN") + for _, s := range t.Body { + write(b, s) + x.raw(";") + } + x.kw("END") +} + +func writeAlterTable(b *strings.Builder, t *AlterTableStmt) { + x := w{b} + x.kw("ALTER TABLE") + write(b, t.Table) + column := func() { + if t.ColumnKeyword { + x.kw("COLUMN") + } + } + switch t.Action { + case AlterRenameTable: + x.kw("RENAME TO") + x.kw(t.NewName.Raw) + case AlterRenameColumn: + x.kw("RENAME") + column() + x.kw(t.Column.Raw) + x.kw("TO") + x.kw(t.NewName.Raw) + case AlterAddColumn: + x.kw("ADD") + column() + write(b, t.ColumnDef) + case AlterDropColumn: + x.kw("DROP") + column() + x.kw(t.Column.Raw) + case AlterDropConstraint: + x.kw("DROP CONSTRAINT") + x.kw(t.ConstraintName.Raw) + case AlterDropNotNull: + x.kw("ALTER") + column() + x.kw(t.Column.Raw) + x.kw("DROP NOT NULL") + case AlterSetNotNull: + x.kw("ALTER") + column() + x.kw(t.Column.Raw) + x.kw("SET NOT NULL") + writeOnConflict(b, t.OnConflict) + case AlterAddConstraintCheck: + x.kw("ADD") + if t.ConstraintName != nil { + x.kw("CONSTRAINT") + x.kw(t.ConstraintName.Raw) + } + x.kw("CHECK (") + write(b, t.Expr) + x.raw(")") + writeOnConflict(b, t.OnConflict) + } +} + +// The remaining Stringers exist for the dump renderer and for error +// messages: an enum that prints as a number makes a snapshot diff unreadable. + +func (k LiteralKind) String() string { + return name(int(k), "NULL", "INTEGER", "FLOAT", "STRING", "BLOB", + "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP") +} + +func (k ParamKind) String() string { + return name(int(k), "?", "?NNN", ":name", "@name", "$name") +} + +func (q QuoteStyle) String() string { + if q == QuoteNone { + return "none" + } + return string(rune(q)) +} + +func (d Distinct) String() string { return name(int(d), "none", "DISTINCT", "ALL") } + +func (o SortOrder) String() string { return name(int(o), "default", "ASC", "DESC") } + +func (o NullsOrder) String() string { + return name(int(o), "default", "NULLS FIRST", "NULLS LAST") +} + +func (m Materialized) String() string { + return name(int(m), "unspecified", "MATERIALIZED", "NOT MATERIALIZED") +} + +func (f FrameType) String() string { return name(int(f), "none", "RANGE", "ROWS", "GROUPS") } + +func (b FrameBoundType) String() string { + return name(int(b), "UNBOUNDED PRECEDING", "PRECEDING", "CURRENT ROW", + "FOLLOWING", "UNBOUNDED FOLLOWING") +} + +func (e FrameExclude) String() string { + return name(int(e), "none", "EXCLUDE NO OTHERS", "EXCLUDE CURRENT ROW", + "EXCLUDE GROUP", "EXCLUDE TIES") +} + +func (k ColumnConstraintKind) String() string { + return name(int(k), "NULL", "NOT NULL", "PRIMARY KEY", "UNIQUE", "CHECK", + "DEFAULT", "COLLATE", "REFERENCES", "GENERATED", "DEFERRABLE") +} + +func (k TableConstraintKind) String() string { + return name(int(k), "PRIMARY KEY", "UNIQUE", "CHECK", "FOREIGN KEY") +} + +func (a ForeignKeyAction) String() string { + return name(int(a), "NO ACTION", "SET NULL", "SET DEFAULT", "CASCADE", "RESTRICT") +} + +func (a AlterAction) String() string { + return name(int(a), "RENAME TO", "RENAME COLUMN", "ADD COLUMN", "DROP COLUMN", + "DROP CONSTRAINT", "DROP NOT NULL", "SET NOT NULL", "ADD CHECK") +} + +func (t TriggerTime) String() string { return name(int(t), "BEFORE", "AFTER", "INSTEAD OF") } + +func (t TransactionType) String() string { + return name(int(t), "DEFERRED", "IMMEDIATE", "EXCLUSIVE") +} + +// String spells a join out the way sqlite3JoinType's bitmask reads. +func (t JoinType) String() string { + var parts []string + for _, bit := range []struct { + mask JoinType + name string + }{ + {JoinComma, ","}, {JoinNatural, "NATURAL"}, {JoinLeft, "LEFT"}, + {JoinRight, "RIGHT"}, {JoinOuter, "OUTER"}, {JoinInner, "INNER"}, + {JoinCross, "CROSS"}, + } { + if t&bit.mask != 0 { + parts = append(parts, bit.name) + } + } + if len(parts) == 0 { + return "none" + } + return strings.Join(parts, "|") +} + +func name(i int, names ...string) string { + if i < 0 || i >= len(names) { + return "?" + } + return names[i] +} diff --git a/internal/dump/dump.go b/internal/dump/dump.go new file mode 100644 index 0000000..a0504fa --- /dev/null +++ b/internal/dump/dump.go @@ -0,0 +1,169 @@ +// Package dump renders an ast.Node as a stable, human-reviewable tree. +// +// It serves two purposes described in PLAN.md, both standing in for the +// upstream parse-tree goldens SQLite cannot produce: +// +// - Committed AST snapshots for a curated slice of the corpus, reviewed by +// humans in diffs but never authoritative over the accept/reject oracle. +// - The comparison key for the round-trip property, where a tree is +// rendered back to SQL, re-parsed, and the two trees must match. +// +// The renderer is reflective rather than a type switch, so it never falls +// behind the node set: a field added to a node shows up in the dump, and in +// any snapshot diff, without anyone having to remember. +package dump + +import ( + "fmt" + "reflect" + "strings" + + "github.com/sqlc-dev/meyer/ast" +) + +// Options controls which source-fidelity detail the dump carries. +type Options struct { + // Positions includes each node's byte span. + Positions bool + // Raw includes the Raw fields that hold verbatim source text. + Raw bool +} + +// Snapshot is the option set for committed snapshots: everything. +var Snapshot = Options{Positions: true, Raw: true} + +// Structure is the option set for comparing two trees for equality of shape. +// It drops spans and Raw text, which are exactly the things meyer's renderer +// declines to promise: re-parsing rendered SQL moves every offset and may +// respell any token. +var Structure = Options{} + +// Node renders one node. +func Node(n ast.Node, opts Options) string { + var b strings.Builder + d := dumper{b: &b, opts: opts} + d.value(reflect.ValueOf(n), 0) + b.WriteByte('\n') + return b.String() +} + +// Stmts renders a whole script. +func Stmts(stmts []ast.Stmt, opts Options) string { + var b strings.Builder + d := dumper{b: &b, opts: opts} + for _, s := range stmts { + d.value(reflect.ValueOf(s), 0) + b.WriteByte('\n') + } + return b.String() +} + +type dumper struct { + b *strings.Builder + opts Options +} + +var spanType = reflect.TypeOf(ast.Span{}) + +func (d *dumper) indent(depth int) { + d.b.WriteString(strings.Repeat(" ", depth)) +} + +func (d *dumper) value(v reflect.Value, depth int) { + switch v.Kind() { + case reflect.Interface, reflect.Pointer: + if v.IsNil() { + d.b.WriteString("nil") + return + } + if v.Kind() == reflect.Interface { + d.value(v.Elem(), depth) + return + } + d.strct(v.Elem(), v.Type().Elem().Name(), depth) + case reflect.Struct: + d.strct(v, v.Type().Name(), depth) + case reflect.Slice: + if v.IsNil() || v.Len() == 0 { + d.b.WriteString("[]") + return + } + d.b.WriteString("[\n") + for i := 0; i < v.Len(); i++ { + d.indent(depth + 1) + d.value(v.Index(i), depth+1) + d.b.WriteString("\n") + } + d.indent(depth) + d.b.WriteString("]") + case reflect.String: + fmt.Fprintf(d.b, "%q", v.String()) + case reflect.Bool: + fmt.Fprintf(d.b, "%v", v.Bool()) + default: + // Enum-typed fields (SortOrder, ConflictAction, ...) all implement + // Stringer, so a snapshot diff names what changed rather than + // showing a number that has to be looked up. + if s, ok := v.Interface().(fmt.Stringer); ok { + fmt.Fprintf(d.b, "%s(%s)", v.Type().Name(), s) + return + } + fmt.Fprintf(d.b, "%v", v.Interface()) + } +} + +func (d *dumper) strct(v reflect.Value, name string, depth int) { + if v.Type() == spanType { + s := v.Interface().(ast.Span) + fmt.Fprintf(d.b, "%d:%d", s.Start, s.Stop) + return + } + fields := d.fields(v) + if len(fields) == 0 { + d.b.WriteString(name + "{}") + return + } + d.b.WriteString(name + "{\n") + for _, f := range fields { + d.indent(depth + 1) + d.b.WriteString(f.name + ": ") + d.value(f.value, depth+1) + d.b.WriteString("\n") + } + d.indent(depth) + d.b.WriteString("}") +} + +type field struct { + name string + value reflect.Value +} + +// fields selects the fields worth printing: zero values are omitted so that +// a dump shows what a statement said rather than what it did not. +func (d *dumper) fields(v reflect.Value) []field { + t := v.Type() + var out []field + for i := 0; i < t.NumField(); i++ { + sf := t.Field(i) + if !sf.IsExported() { + continue + } + fv := v.Field(i) + if sf.Type == spanType { + if !d.opts.Positions { + continue + } + out = append(out, field{"Span", fv}) + continue + } + if sf.Name == "Raw" && !d.opts.Raw { + continue + } + if fv.IsZero() { + continue + } + out = append(out, field{sf.Name, fv}) + } + return out +} diff --git a/parser/parse_ddl.go b/parser/parse_ddl.go index f987ee2..3b5506b 100644 --- a/parser/parse_ddl.go +++ b/parser/parse_ddl.go @@ -263,7 +263,8 @@ func (p *parser) parseDefaultValue() ast.Expr { if t.Kind == token.MINUS { op = ast.OpMinus } - return &ast.UnaryExpr{Span: p.span(start), Op: op, X: p.parseTerm()} + x := p.parseTerm() + return &ast.UnaryExpr{Span: p.span(start), Op: op, X: x} } if p.atTerm() { return p.parseTerm() @@ -367,7 +368,8 @@ func (p *parser) parseReferences() *ast.ForeignKeyClause { switch p.cur().Kind { case token.MATCH: p.advance() - fk.Args = append(fk.Args, &ast.ForeignKeyArg{Span: p.span(aStart), Match: p.expectName()}) + match := p.expectName() + fk.Args = append(fk.Args, &ast.ForeignKeyArg{Span: p.span(aStart), Match: match}) continue case token.ON: p.advance() diff --git a/parser/parse_expr.go b/parser/parse_expr.go index 8e90a84..75e3ca4 100644 --- a/parser/parse_expr.go +++ b/parser/parse_expr.go @@ -51,7 +51,8 @@ func (p *parser) parsePrefix() ast.Expr { switch t.Kind { case token.NOT: p.advance() - return &ast.UnaryExpr{Span: p.span(t.Pos), Op: ast.OpNot, X: p.parseExpr(precNot + 1)} + x := p.parseExpr(precNot + 1) + return &ast.UnaryExpr{Span: ast.Span{Start: t.Pos, Stop: x.End()}, Op: ast.OpNot, X: x} case token.BITNOT: p.advance() x := p.parseExpr(precUnary + 1) diff --git a/parser/parse_select.go b/parser/parse_select.go index 2cbae2a..34ee632 100644 --- a/parser/parse_select.go +++ b/parser/parse_select.go @@ -466,8 +466,7 @@ func (p *parser) parseIndexedColumnList() []*ast.IndexedColumn { start := p.cur().Pos c := &ast.IndexedColumn{Name: p.expectName()} if p.accept(token.COLLATE) { - p.expectIDS() - c.Collate = true + c.Collation = p.expectIDS() } switch { case p.accept(token.ASC): diff --git a/parser/roundtrip_test.go b/parser/roundtrip_test.go new file mode 100644 index 0000000..c035195 --- /dev/null +++ b/parser/roundtrip_test.go @@ -0,0 +1,104 @@ +package parser_test + +import ( + "path/filepath" + "strconv" + "strings" + "sync/atomic" + "testing" + + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/internal/dump" + "github.com/sqlc-dev/meyer/internal/testfile" + "github.com/sqlc-dev/meyer/parser" +) + +// TestRoundTrip is the property PLAN.md uses in place of upstream parse-tree +// goldens: rendering a tree back to SQL and re-parsing it must produce the +// same tree. Accept/reject conformance cannot see a dropped clause or a +// mis-associated operator; this can. +// +// Equality is structural. Byte spans and the Raw fields differ by +// construction after a round trip, and the renderer explicitly promises +// nothing about them, so dump.Structure leaves both out. +func TestRoundTrip(t *testing.T) { + paths, err := filepath.Glob(filepath.Join("testdata", "*.test")) + if err != nil { + t.Fatal(err) + } + if len(paths) == 0 { + t.Fatal("no corpus files; run go run ./cmd/regenerate-parse") + } + // The count is logged so that a corpus change that silently stops + // exercising the property is visible in a -v run. + t.Cleanup(func() { t.Logf("round-tripped %d cases", roundTripped.Load()) }) + for _, path := range paths { + t.Run(strings.TrimSuffix(filepath.Base(path), ".test"), func(t *testing.T) { + t.Parallel() + cases, err := testfile.Read(path) + if err != nil { + t.Fatal(err) + } + meta, err := testfile.ReadMetadata(testfile.MetadataPath(path)) + if err != nil { + t.Fatal(err) + } + for _, c := range cases { + if meta.Todo[c.Name] { + continue + } + checkRoundTrip(t, c) + } + }) + } +} + +var roundTripped atomic.Int64 + +func checkRoundTrip(t *testing.T, c testfile.Case) { + t.Helper() + first, err := parser.ParseString(c.SQL) + if err != nil { + return // a must-reject case, or text SQLite never verified + } + roundTripped.Add(1) + rendered := ast.Statements(first) + second, err := parser.ParseString(rendered) + if err != nil { + t.Errorf("%s: rendered SQL does not parse: %v\n rendered: %s", c.Name, err, rendered) + return + } + want := dump.Stmts(first, dump.Structure) + got := dump.Stmts(second, dump.Structure) + if got != want { + t.Errorf("%s: round trip changed the tree\n source: %s\n rendered: %s\n%s", + c.Name, strings.TrimSpace(c.SQL), rendered, firstDiff(want, got)) + return + } + // Rendering is idempotent, which catches a renderer that loses + // information the dump happens not to show. + if again := ast.Statements(second); again != rendered { + t.Errorf("%s: rendering is not idempotent\n once: %s\n twice: %s", + c.Name, rendered, again) + } +} + +// firstDiff reports the first differing line of two dumps, with a little +// context, so a failure names the field that changed. +func firstDiff(want, got string) string { + wl, gl := strings.Split(want, "\n"), strings.Split(got, "\n") + for i := 0; i < len(wl) || i < len(gl); i++ { + var a, b string + if i < len(wl) { + a = wl[i] + } + if i < len(gl) { + b = gl[i] + } + if a != b { + return " first difference at dump line " + strconv.Itoa(i+1) + + "\n want: " + a + "\n got: " + b + } + } + return "" +} diff --git a/parser/snapshot_test.go b/parser/snapshot_test.go new file mode 100644 index 0000000..bfef585 --- /dev/null +++ b/parser/snapshot_test.go @@ -0,0 +1,92 @@ +package parser_test + +import ( + "flag" + "os" + "path/filepath" + "strconv" + "strings" + "testing" + + "github.com/sqlc-dev/meyer/internal/dump" + "github.com/sqlc-dev/meyer/parser" +) + +// -update rewrites the committed AST snapshots. They are meyer's own +// goldens, not an oracle: they exist so that a change in tree shape shows up +// in a diff a human reads, and they never outrank the accept/reject corpus. +var update = flag.Bool("update", false, "rewrite the AST snapshots in testdata/ast") + +// TestASTSnapshots parses each testdata/ast/*.sql script and compares the +// rendered tree against the committed .tree file next to it. +// +// Unlike testdata/*.test, these inputs are hand-written and are meant to be +// edited: they are a curated tour of the node set, chosen so that every +// field of every node appears at least once. +func TestASTSnapshots(t *testing.T) { + paths, err := filepath.Glob(filepath.Join("testdata", "ast", "*.sql")) + if err != nil { + t.Fatal(err) + } + if len(paths) == 0 { + t.Fatal("no snapshot inputs under testdata/ast") + } + for _, path := range paths { + t.Run(strings.TrimSuffix(filepath.Base(path), ".sql"), func(t *testing.T) { + src, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + stmts, err := parser.ParseString(string(src)) + if err != nil { + t.Fatalf("%s: %v", path, err) + } + got := dump.Stmts(stmts, dump.Snapshot) + golden := strings.TrimSuffix(path, ".sql") + ".tree" + if *update { + if err := os.WriteFile(golden, []byte(got), 0o644); err != nil { + t.Fatal(err) + } + return + } + want, err := os.ReadFile(golden) + if err != nil { + t.Fatalf("%v (run: go test ./parser -update)", err) + } + if got != string(want) { + t.Errorf("%s: snapshot mismatch (run: go test ./parser -update)\n%s", + golden, snapshotDiff(string(want), got)) + } + }) + } +} + +// snapshotDiff reports the first few differing lines, which is enough to see +// what moved without printing a whole tree. +func snapshotDiff(want, got string) string { + wl, gl := strings.Split(want, "\n"), strings.Split(got, "\n") + var b strings.Builder + shown := 0 + for i := 0; i < len(wl) || i < len(gl) || shown < 5; i++ { + if i >= len(wl) && i >= len(gl) { + break + } + var a, c string + if i < len(wl) { + a = wl[i] + } + if i < len(gl) { + c = gl[i] + } + if a == c { + continue + } + b.WriteString(" line " + strconv.Itoa(i+1) + "\n want: " + a + "\n got: " + c + "\n") + shown++ + if shown == 5 { + b.WriteString(" ...\n") + break + } + } + return b.String() +} diff --git a/parser/testdata/README.md b/parser/testdata/README.md index 4a0f450..5ee90b9 100644 --- a/parser/testdata/README.md +++ b/parser/testdata/README.md @@ -3,6 +3,12 @@ The `*.test` files in this directory are generated by `go run ./cmd/regenerate-parse`. **Do not edit them by hand.** +`ast/` is a different thing and follows the opposite rule: `ast/*.sql` are +hand-written scripts, a curated tour of the node set, and are meant to be +edited. Their `ast/*.tree` snapshots are regenerated with +`go test ./parser -update` and reviewed in the diff. Snapshots are meyer's +own goldens; they never outrank the accept/reject corpus below. + - **Source of the SQL**: SQLite's own test suite from the pinned release below — every `test/*.test` TCL script, not a curated subset. SQL blocks are extracted verbatim from `do_execsql_test` / `do_catchsql_test` diff --git a/parser/testdata/ast/ddl.sql b/parser/testdata/ast/ddl.sql new file mode 100644 index 0000000..7ba3d3a --- /dev/null +++ b/parser/testdata/ast/ddl.sql @@ -0,0 +1,36 @@ +-- CREATE, ALTER and DROP. +CREATE TEMP TABLE IF NOT EXISTS sch.t ( + a INTEGER PRIMARY KEY DESC ON CONFLICT FAIL AUTOINCREMENT, + b TEXT NOT NULL ON CONFLICT IGNORE DEFAULT 'x' COLLATE nocase, + c REAL DEFAULT -1 CHECK (c > 0) UNIQUE, + d DEFAULT (1 + 2) REFERENCES u(v) ON DELETE CASCADE ON UPDATE SET NULL MATCH full + DEFERRABLE INITIALLY DEFERRED, + e AS (a + 1) STORED, + f GENERATED ALWAYS AS (a + 2) VIRTUAL, + CONSTRAINT pk PRIMARY KEY (a, b DESC) ON CONFLICT ABORT, + UNIQUE (c) ON CONFLICT ROLLBACK, + CHECK (d), + FOREIGN KEY (e COLLATE binary ASC) REFERENCES u (v) NOT DEFERRABLE +) WITHOUT ROWID, STRICT; +CREATE TABLE t2 AS SELECT 1; +CREATE UNIQUE INDEX IF NOT EXISTS sch.i ON t (a COLLATE nocase, b DESC) WHERE a; +CREATE VIEW v (x, y) AS SELECT 1, 2; +CREATE VIRTUAL TABLE IF NOT EXISTS sch.vt USING mod (a b c, "d e", (nested, list)); +CREATE TRIGGER IF NOT EXISTS tr INSTEAD OF UPDATE OF a, b ON sch.t FOR EACH ROW WHEN x BEGIN + UPDATE t SET a = 1 WHERE b; + INSERT INTO t VALUES (1) ON CONFLICT DO NOTHING; + DELETE FROM t WHERE a; + SELECT RAISE(ROLLBACK, 'msg'), RAISE(IGNORE); +END; +ALTER TABLE t RENAME TO u; +ALTER TABLE t RENAME COLUMN a TO b; +ALTER TABLE t ADD COLUMN c TEXT NOT NULL; +ALTER TABLE t DROP COLUMN c; +ALTER TABLE t DROP CONSTRAINT k; +ALTER TABLE t ALTER COLUMN a DROP NOT NULL; +ALTER TABLE t ALTER COLUMN a SET NOT NULL ON CONFLICT FAIL; +ALTER TABLE t ADD CONSTRAINT k CHECK (a) ON CONFLICT ABORT; +DROP TABLE IF EXISTS sch.t; +DROP VIEW v; +DROP INDEX i; +DROP TRIGGER tr; diff --git a/parser/testdata/ast/ddl.tree b/parser/testdata/ast/ddl.tree new file mode 100644 index 0000000..33c3fea --- /dev/null +++ b/parser/testdata/ast/ddl.tree @@ -0,0 +1,956 @@ +CreateTableStmt{ + Span: 27:618 + Temp: true + IfNotExists: true + Name: QualifiedName{ + Span: 59:64 + Schema: Ident{ + Span: 59:62 + Name: "sch" + Raw: "sch" + } + Name: Ident{ + Span: 63:64 + Name: "t" + Raw: "t" + } + } + Columns: [ + ColumnDef{ + Span: 69:126 + Name: Ident{ + Span: 69:70 + Name: "a" + Raw: "a" + } + Type: TypeName{ + Span: 71:78 + Name: "INTEGER" + Raw: "INTEGER" + } + Constraints: [ + ColumnConstraint{ + Span: 79:126 + Kind: ColumnConstraintKind(PRIMARY KEY) + OnConflict: ConflictAction(FAIL) + Order: SortOrder(DESC) + AutoIncrement: true + } + ] + } + ColumnDef{ + Span: 130:191 + Name: Ident{ + Span: 130:131 + Name: "b" + Raw: "b" + } + Type: TypeName{ + Span: 132:136 + Name: "TEXT" + Raw: "TEXT" + } + Constraints: [ + ColumnConstraint{ + Span: 137:164 + Kind: ColumnConstraintKind(NOT NULL) + OnConflict: ConflictAction(IGNORE) + } + ColumnConstraint{ + Span: 165:176 + Kind: ColumnConstraintKind(DEFAULT) + Expr: Literal{ + Span: 173:176 + Kind: LiteralKind(STRING) + Value: "x" + Raw: "'x'" + } + } + ColumnConstraint{ + Span: 177:191 + Kind: ColumnConstraintKind(COLLATE) + Collation: Ident{ + Span: 185:191 + Name: "nocase" + Raw: "nocase" + } + } + ] + } + ColumnDef{ + Span: 195:233 + Name: Ident{ + Span: 195:196 + Name: "c" + Raw: "c" + } + Type: TypeName{ + Span: 197:201 + Name: "REAL" + Raw: "REAL" + } + Constraints: [ + ColumnConstraint{ + Span: 202:212 + Kind: ColumnConstraintKind(DEFAULT) + Expr: UnaryExpr{ + Span: 210:212 + Op: Operator(-) + X: Literal{ + Span: 211:212 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + } + ColumnConstraint{ + Span: 213:226 + Kind: ColumnConstraintKind(CHECK) + Expr: BinaryExpr{ + Span: 220:225 + Op: Operator(>) + X: Ident{ + Span: 220:221 + Name: "c" + Raw: "c" + } + Y: Literal{ + Span: 224:225 + Kind: LiteralKind(INTEGER) + Value: "0" + Raw: "0" + } + } + } + ColumnConstraint{ + Span: 227:233 + Kind: ColumnConstraintKind(UNIQUE) + } + ] + } + ColumnDef{ + Span: 237:352 + Name: Ident{ + Span: 237:238 + Name: "d" + Raw: "d" + } + Constraints: [ + ColumnConstraint{ + Span: 239:254 + Kind: ColumnConstraintKind(DEFAULT) + Expr: ParenExpr{ + Span: 247:254 + X: BinaryExpr{ + Span: 248:253 + Op: Operator(+) + X: Literal{ + Span: 248:249 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Y: Literal{ + Span: 252:253 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + } + } + ColumnConstraint{ + Span: 255:318 + Kind: ColumnConstraintKind(REFERENCES) + References: ForeignKeyClause{ + Span: 255:318 + Table: Ident{ + Span: 266:267 + Name: "u" + Raw: "u" + } + Columns: [ + IndexedColumn{ + Span: 268:269 + Name: Ident{ + Span: 268:269 + Name: "v" + Raw: "v" + } + } + ] + Args: [ + ForeignKeyArg{ + Span: 271:288 + Event: "DELETE" + Action: ForeignKeyAction(CASCADE) + } + ForeignKeyArg{ + Span: 289:307 + Event: "UPDATE" + Action: ForeignKeyAction(SET NULL) + } + ForeignKeyArg{ + Span: 308:318 + Match: Ident{ + Span: 314:318 + Name: "full" + Raw: "full" + } + } + ] + } + } + ColumnConstraint{ + Span: 323:352 + Kind: ColumnConstraintKind(DEFERRABLE) + Deferrable: DeferClause{ + Span: 323:352 + InitiallyDeferred: true + HasInitially: true + } + } + ] + } + ColumnDef{ + Span: 356:375 + Name: Ident{ + Span: 356:357 + Name: "e" + Raw: "e" + } + Constraints: [ + ColumnConstraint{ + Span: 358:375 + Kind: ColumnConstraintKind(GENERATED) + Expr: BinaryExpr{ + Span: 362:367 + Op: Operator(+) + X: Ident{ + Span: 362:363 + Name: "a" + Raw: "a" + } + Y: Literal{ + Span: 366:367 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + GeneratedKind: Ident{ + Span: 369:375 + Name: "STORED" + Raw: "STORED" + } + } + ] + } + ColumnDef{ + Span: 379:416 + Name: Ident{ + Span: 379:380 + Name: "f" + Raw: "f" + } + Type: TypeName{ + Span: 381:397 + Name: "GENERATED ALWAYS" + Raw: "GENERATED ALWAYS" + } + Constraints: [ + ColumnConstraint{ + Span: 398:416 + Kind: ColumnConstraintKind(GENERATED) + Expr: BinaryExpr{ + Span: 402:407 + Op: Operator(+) + X: Ident{ + Span: 402:403 + Name: "a" + Raw: "a" + } + Y: Literal{ + Span: 406:407 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + GeneratedKind: Ident{ + Span: 409:416 + Name: "VIRTUAL" + Raw: "VIRTUAL" + } + } + ] + } + ] + Constraints: [ + TableConstraint{ + Span: 434:475 + Name: Ident{ + Span: 431:433 + Name: "pk" + Raw: "pk" + } + Columns: [ + OrderingTerm{ + Span: 447:448 + Expr: Ident{ + Span: 447:448 + Name: "a" + Raw: "a" + } + } + OrderingTerm{ + Span: 450:456 + Expr: Ident{ + Span: 450:451 + Name: "b" + Raw: "b" + } + Order: SortOrder(DESC) + } + ] + OnConflict: ConflictAction(ABORT) + } + TableConstraint{ + Span: 479:510 + Kind: TableConstraintKind(UNIQUE) + Columns: [ + OrderingTerm{ + Span: 487:488 + Expr: Ident{ + Span: 487:488 + Name: "c" + Raw: "c" + } + } + ] + OnConflict: ConflictAction(ROLLBACK) + } + TableConstraint{ + Span: 514:523 + Kind: TableConstraintKind(CHECK) + Expr: Ident{ + Span: 521:522 + Name: "d" + Raw: "d" + } + } + TableConstraint{ + Span: 527:593 + Kind: TableConstraintKind(FOREIGN KEY) + FKColumns: [ + IndexedColumn{ + Span: 540:560 + Name: Ident{ + Span: 540:541 + Name: "e" + Raw: "e" + } + Collation: Ident{ + Span: 550:556 + Name: "binary" + Raw: "binary" + } + Order: SortOrder(ASC) + } + ] + References: ForeignKeyClause{ + Span: 562:578 + Table: Ident{ + Span: 573:574 + Name: "u" + Raw: "u" + } + Columns: [ + IndexedColumn{ + Span: 576:577 + Name: Ident{ + Span: 576:577 + Name: "v" + Raw: "v" + } + } + ] + } + Deferrable: DeferClause{ + Span: 579:593 + Not: true + } + } + ] + Options: [ + Ident{ + Span: 604:609 + Name: "ROWID" + Raw: "ROWID" + } + Ident{ + Span: 611:617 + Name: "STRICT" + Raw: "STRICT" + } + ] + WithoutOpt: [ + true + false + ] +} +CreateTableStmt{ + Span: 619:647 + Name: QualifiedName{ + Span: 632:634 + Name: Ident{ + Span: 632:634 + Name: "t2" + Raw: "t2" + } + } + Select: SelectStmt{ + Span: 638:646 + Cores: [ + SelectQuery{ + Span: 638:646 + Columns: [ + ResultColumn{ + Span: 645:646 + Expr: Literal{ + Span: 645:646 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] + } +} +CreateIndexStmt{ + Span: 648:728 + Unique: true + IfNotExists: true + Name: QualifiedName{ + Span: 682:687 + Schema: Ident{ + Span: 682:685 + Name: "sch" + Raw: "sch" + } + Name: Ident{ + Span: 686:687 + Name: "i" + Raw: "i" + } + } + Table: Ident{ + Span: 691:692 + Name: "t" + Raw: "t" + } + Columns: [ + OrderingTerm{ + Span: 694:710 + Expr: CollateExpr{ + Span: 694:710 + X: Ident{ + Span: 694:695 + Name: "a" + Raw: "a" + } + Name: Ident{ + Span: 704:710 + Name: "nocase" + Raw: "nocase" + } + } + } + OrderingTerm{ + Span: 712:718 + Expr: Ident{ + Span: 712:713 + Name: "b" + Raw: "b" + } + Order: SortOrder(DESC) + } + ] + Where: Ident{ + Span: 726:727 + Name: "a" + Raw: "a" + } +} +CreateViewStmt{ + Span: 729:765 + Name: QualifiedName{ + Span: 741:742 + Name: Ident{ + Span: 741:742 + Name: "v" + Raw: "v" + } + } + Columns: [ + IndexedColumn{ + Span: 744:745 + Name: Ident{ + Span: 744:745 + Name: "x" + Raw: "x" + } + } + IndexedColumn{ + Span: 747:748 + Name: Ident{ + Span: 747:748 + Name: "y" + Raw: "y" + } + } + ] + Select: SelectStmt{ + Span: 753:764 + Cores: [ + SelectQuery{ + Span: 753:764 + Columns: [ + ResultColumn{ + Span: 760:761 + Expr: Literal{ + Span: 760:761 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ResultColumn{ + Span: 763:764 + Expr: Literal{ + Span: 763:764 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + ] + } + ] + } +} +CreateVirtualTableStmt{ + Span: 766:849 + IfNotExists: true + Name: QualifiedName{ + Span: 801:807 + Schema: Ident{ + Span: 801:804 + Name: "sch" + Raw: "sch" + } + Name: Ident{ + Span: 805:807 + Name: "vt" + Raw: "vt" + } + } + Module: Ident{ + Span: 814:817 + Name: "mod" + Raw: "mod" + } + HasArgs: true + Args: [ + "a b c" + "\"d e\"" + "(nested, list)" + ] +} +CreateTriggerStmt{ + Span: 850:1101 + IfNotExists: true + Name: QualifiedName{ + Span: 879:881 + Name: Ident{ + Span: 879:881 + Name: "tr" + Raw: "tr" + } + } + Time: TriggerTime(INSTEAD OF) + HasTime: true + Event: "UPDATE" + UpdateOf: [ + Ident{ + Span: 903:904 + Name: "a" + Raw: "a" + } + Ident{ + Span: 906:907 + Name: "b" + Raw: "b" + } + ] + Table: QualifiedName{ + Span: 911:916 + Schema: Ident{ + Span: 911:914 + Name: "sch" + Raw: "sch" + } + Name: Ident{ + Span: 915:916 + Name: "t" + Raw: "t" + } + } + ForEachRow: true + When: Ident{ + Span: 935:936 + Name: "x" + Raw: "x" + } + Body: [ + UpdateStmt{ + Span: 945:971 + Table: QualifiedName{ + Span: 952:953 + Name: Ident{ + Span: 952:953 + Name: "t" + Raw: "t" + } + } + Set: [ + SetPair{ + Span: 958:963 + Columns: [ + Ident{ + Span: 958:959 + Name: "a" + Raw: "a" + } + ] + Value: Literal{ + Span: 962:963 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + Where: Ident{ + Span: 970:971 + Name: "b" + Raw: "b" + } + } + InsertStmt{ + Span: 975:1022 + Table: QualifiedName{ + Span: 987:988 + Name: Ident{ + Span: 987:988 + Name: "t" + Raw: "t" + } + } + Select: SelectStmt{ + Span: 989:999 + Cores: [ + ValuesClause{ + Span: 989:999 + Rows: [ + [ + Literal{ + Span: 997:998 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + ] + ] + } + ] + } + Upserts: [ + Upsert{ + Span: 1000:1022 + DoNothing: true + } + ] + } + DeleteStmt{ + Span: 1026:1047 + Table: QualifiedName{ + Span: 1038:1039 + Name: Ident{ + Span: 1038:1039 + Name: "t" + Raw: "t" + } + } + Where: Ident{ + Span: 1046:1047 + Name: "a" + Raw: "a" + } + } + SelectStmt{ + Span: 1051:1095 + Cores: [ + SelectQuery{ + Span: 1051:1095 + Columns: [ + ResultColumn{ + Span: 1058:1080 + Expr: RaiseExpr{ + Span: 1058:1080 + Action: "ROLLBACK" + Message: Literal{ + Span: 1074:1079 + Kind: LiteralKind(STRING) + Value: "msg" + Raw: "'msg'" + } + } + } + ResultColumn{ + Span: 1082:1095 + Expr: RaiseExpr{ + Span: 1082:1095 + Action: "IGNORE" + } + } + ] + } + ] + } + ] +} +AlterTableStmt{ + Span: 1102:1128 + Table: QualifiedName{ + Span: 1114:1115 + Name: Ident{ + Span: 1114:1115 + Name: "t" + Raw: "t" + } + } + NewName: Ident{ + Span: 1126:1127 + Name: "u" + Raw: "u" + } +} +AlterTableStmt{ + Span: 1129:1164 + Table: QualifiedName{ + Span: 1141:1142 + Name: Ident{ + Span: 1141:1142 + Name: "t" + Raw: "t" + } + } + Action: AlterAction(RENAME COLUMN) + ColumnKeyword: true + Column: Ident{ + Span: 1157:1158 + Name: "a" + Raw: "a" + } + NewName: Ident{ + Span: 1162:1163 + Name: "b" + Raw: "b" + } +} +AlterTableStmt{ + Span: 1165:1206 + Table: QualifiedName{ + Span: 1177:1178 + Name: Ident{ + Span: 1177:1178 + Name: "t" + Raw: "t" + } + } + Action: AlterAction(ADD COLUMN) + ColumnKeyword: true + Column: Ident{ + Span: 1190:1191 + Name: "c" + Raw: "c" + } + ColumnDef: ColumnDef{ + Span: 1190:1205 + Name: Ident{ + Span: 1190:1191 + Name: "c" + Raw: "c" + } + Type: TypeName{ + Span: 1192:1196 + Name: "TEXT" + Raw: "TEXT" + } + Constraints: [ + ColumnConstraint{ + Span: 1197:1205 + Kind: ColumnConstraintKind(NOT NULL) + } + ] + } +} +AlterTableStmt{ + Span: 1207:1235 + Table: QualifiedName{ + Span: 1219:1220 + Name: Ident{ + Span: 1219:1220 + Name: "t" + Raw: "t" + } + } + Action: AlterAction(DROP COLUMN) + ColumnKeyword: true + Column: Ident{ + Span: 1233:1234 + Name: "c" + Raw: "c" + } +} +AlterTableStmt{ + Span: 1236:1268 + Table: QualifiedName{ + Span: 1248:1249 + Name: Ident{ + Span: 1248:1249 + Name: "t" + Raw: "t" + } + } + Action: AlterAction(DROP CONSTRAINT) + ConstraintName: Ident{ + Span: 1266:1267 + Name: "k" + Raw: "k" + } +} +AlterTableStmt{ + Span: 1269:1312 + Table: QualifiedName{ + Span: 1281:1282 + Name: Ident{ + Span: 1281:1282 + Name: "t" + Raw: "t" + } + } + Action: AlterAction(DROP NOT NULL) + ColumnKeyword: true + Column: Ident{ + Span: 1296:1297 + Name: "a" + Raw: "a" + } +} +AlterTableStmt{ + Span: 1313:1372 + Table: QualifiedName{ + Span: 1325:1326 + Name: Ident{ + Span: 1325:1326 + Name: "t" + Raw: "t" + } + } + Action: AlterAction(SET NOT NULL) + ColumnKeyword: true + Column: Ident{ + Span: 1340:1341 + Name: "a" + Raw: "a" + } + OnConflict: ConflictAction(FAIL) +} +AlterTableStmt{ + Span: 1373:1432 + Table: QualifiedName{ + Span: 1385:1386 + Name: Ident{ + Span: 1385:1386 + Name: "t" + Raw: "t" + } + } + Action: AlterAction(ADD CHECK) + ConstraintName: Ident{ + Span: 1402:1403 + Name: "k" + Raw: "k" + } + Expr: Ident{ + Span: 1411:1412 + Name: "a" + Raw: "a" + } + OnConflict: ConflictAction(ABORT) +} +DropTableStmt{ + Span: 1433:1460 + IfExists: true + Name: QualifiedName{ + Span: 1454:1459 + Schema: Ident{ + Span: 1454:1457 + Name: "sch" + Raw: "sch" + } + Name: Ident{ + Span: 1458:1459 + Name: "t" + Raw: "t" + } + } +} +DropViewStmt{ + Span: 1461:1473 + Name: QualifiedName{ + Span: 1471:1472 + Name: Ident{ + Span: 1471:1472 + Name: "v" + Raw: "v" + } + } +} +DropIndexStmt{ + Span: 1474:1487 + Name: QualifiedName{ + Span: 1485:1486 + Name: Ident{ + Span: 1485:1486 + Name: "i" + Raw: "i" + } + } +} +DropTriggerStmt{ + Span: 1488:1504 + Name: QualifiedName{ + Span: 1501:1503 + Name: Ident{ + Span: 1501:1503 + Name: "tr" + Raw: "tr" + } + } +} diff --git a/parser/testdata/ast/dml.sql b/parser/testdata/ast/dml.sql new file mode 100644 index 0000000..4f0115c --- /dev/null +++ b/parser/testdata/ast/dml.sql @@ -0,0 +1,9 @@ +-- INSERT, UPDATE, DELETE, upserts and RETURNING. +INSERT INTO t VALUES (1); +INSERT OR REPLACE INTO sch.t AS alias (a, b) SELECT 1, 2 RETURNING *; +REPLACE INTO t DEFAULT VALUES; +INSERT INTO t VALUES (1) ON CONFLICT (a, b DESC) WHERE a DO UPDATE SET x = 1, (y, z) = 2 WHERE b + ON CONFLICT DO NOTHING; +WITH c AS (SELECT 1) INSERT INTO t SELECT * FROM c; +UPDATE OR ROLLBACK t INDEXED BY i SET a = 1 FROM u WHERE b RETURNING a AS x; +DELETE FROM t NOT INDEXED WHERE a RETURNING *; diff --git a/parser/testdata/ast/dml.tree b/parser/testdata/ast/dml.tree new file mode 100644 index 0000000..8180cd1 --- /dev/null +++ b/parser/testdata/ast/dml.tree @@ -0,0 +1,385 @@ +InsertStmt{ + Span: 50:75 + Table: QualifiedName{ + Span: 62:63 + Name: Ident{ + Span: 62:63 + Name: "t" + Raw: "t" + } + } + Select: SelectStmt{ + Span: 64:74 + Cores: [ + ValuesClause{ + Span: 64:74 + Rows: [ + [ + Literal{ + Span: 72:73 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + ] + ] + } + ] + } +} +InsertStmt{ + Span: 76:145 + OrConflict: ConflictAction(REPLACE) + Table: QualifiedName{ + Span: 99:104 + Schema: Ident{ + Span: 99:102 + Name: "sch" + Raw: "sch" + } + Name: Ident{ + Span: 103:104 + Name: "t" + Raw: "t" + } + } + Alias: Ident{ + Span: 108:113 + Name: "alias" + Raw: "alias" + } + Columns: [ + Ident{ + Span: 115:116 + Name: "a" + Raw: "a" + } + Ident{ + Span: 118:119 + Name: "b" + Raw: "b" + } + ] + Select: SelectStmt{ + Span: 121:132 + Cores: [ + SelectQuery{ + Span: 121:132 + Columns: [ + ResultColumn{ + Span: 128:129 + Expr: Literal{ + Span: 128:129 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ResultColumn{ + Span: 131:132 + Expr: Literal{ + Span: 131:132 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + ] + } + ] + } + Returning: [ + ResultColumn{ + Span: 143:144 + Expr: Star{ + Span: 143:144 + } + } + ] +} +InsertStmt{ + Span: 146:176 + Replace: true + Table: QualifiedName{ + Span: 159:160 + Name: Ident{ + Span: 159:160 + Name: "t" + Raw: "t" + } + } + DefaultValues: true +} +InsertStmt{ + Span: 177:299 + Table: QualifiedName{ + Span: 189:190 + Name: Ident{ + Span: 189:190 + Name: "t" + Raw: "t" + } + } + Select: SelectStmt{ + Span: 191:201 + Cores: [ + ValuesClause{ + Span: 191:201 + Rows: [ + [ + Literal{ + Span: 199:200 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + ] + ] + } + ] + } + Upserts: [ + Upsert{ + Span: 202:273 + Target: [ + OrderingTerm{ + Span: 215:216 + Expr: Ident{ + Span: 215:216 + Name: "a" + Raw: "a" + } + } + OrderingTerm{ + Span: 218:224 + Expr: Ident{ + Span: 218:219 + Name: "b" + Raw: "b" + } + Order: SortOrder(DESC) + } + ] + TargetWhere: Ident{ + Span: 232:233 + Name: "a" + Raw: "a" + } + Set: [ + SetPair{ + Span: 248:253 + Columns: [ + Ident{ + Span: 248:249 + Name: "x" + Raw: "x" + } + ] + Value: Literal{ + Span: 252:253 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + SetPair{ + Span: 255:265 + Columns: [ + Ident{ + Span: 256:257 + Name: "y" + Raw: "y" + } + Ident{ + Span: 259:260 + Name: "z" + Raw: "z" + } + ] + Paren: true + Value: Literal{ + Span: 264:265 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + ] + Where: Ident{ + Span: 272:273 + Name: "b" + Raw: "b" + } + } + Upsert{ + Span: 276:298 + DoNothing: true + } + ] +} +InsertStmt{ + Span: 300:351 + With: With{ + Span: 300:320 + CTEs: [ + CTE{ + Span: 305:320 + Name: Ident{ + Span: 305:306 + Name: "c" + Raw: "c" + } + Select: SelectStmt{ + Span: 311:319 + Cores: [ + SelectQuery{ + Span: 311:319 + Columns: [ + ResultColumn{ + Span: 318:319 + Expr: Literal{ + Span: 318:319 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] + } + } + ] + } + Table: QualifiedName{ + Span: 333:334 + Name: Ident{ + Span: 333:334 + Name: "t" + Raw: "t" + } + } + Select: SelectStmt{ + Span: 335:350 + Cores: [ + SelectQuery{ + Span: 335:350 + Columns: [ + ResultColumn{ + Span: 342:343 + Expr: Star{ + Span: 342:343 + } + } + ] + From: [ + TableRef{ + Span: 349:350 + Name: QualifiedName{ + Span: 349:350 + Name: Ident{ + Span: 349:350 + Name: "c" + Raw: "c" + } + } + } + ] + } + ] + } +} +UpdateStmt{ + Span: 352:428 + OrConflict: ConflictAction(ROLLBACK) + Table: QualifiedName{ + Span: 371:372 + Name: Ident{ + Span: 371:372 + Name: "t" + Raw: "t" + } + } + IndexedBy: Ident{ + Span: 384:385 + Name: "i" + Raw: "i" + } + Set: [ + SetPair{ + Span: 390:395 + Columns: [ + Ident{ + Span: 390:391 + Name: "a" + Raw: "a" + } + ] + Value: Literal{ + Span: 394:395 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + From: [ + TableRef{ + Span: 401:402 + Name: QualifiedName{ + Span: 401:402 + Name: Ident{ + Span: 401:402 + Name: "u" + Raw: "u" + } + } + } + ] + Where: Ident{ + Span: 409:410 + Name: "b" + Raw: "b" + } + Returning: [ + ResultColumn{ + Span: 421:427 + Expr: Ident{ + Span: 421:422 + Name: "a" + Raw: "a" + } + Alias: Ident{ + Span: 426:427 + Name: "x" + Raw: "x" + } + HasAs: true + } + ] +} +DeleteStmt{ + Span: 429:475 + Table: QualifiedName{ + Span: 441:442 + Name: Ident{ + Span: 441:442 + Name: "t" + Raw: "t" + } + } + NotIndexed: true + Where: Ident{ + Span: 461:462 + Name: "a" + Raw: "a" + } + Returning: [ + ResultColumn{ + Span: 473:474 + Expr: Star{ + Span: 473:474 + } + } + ] +} diff --git a/parser/testdata/ast/expressions.sql b/parser/testdata/ast/expressions.sql new file mode 100644 index 0000000..8ac0216 --- /dev/null +++ b/parser/testdata/ast/expressions.sql @@ -0,0 +1,22 @@ +-- Expression forms, one per line, exercising every node in ast/expr.go and +-- the eleven precedence levels of parse.y's %left/%right block. +SELECT a OR b AND NOT c; +SELECT 1 + 2 * 3 - 4 / 5 % 6; +SELECT (1 + 2) * 3; +SELECT 1 < 2 = 3, 1 & 2 | 3 << 4 >> 5; +SELECT 'a' || 'b' -> 'c' ->> 'd'; +SELECT -x, +x, ~x, NOT x; +SELECT - -x, 1 - -2; +SELECT x COLLATE nocase, -x COLLATE binary; +SELECT x IS y, x IS NOT y, x IS DISTINCT FROM y, x IS NOT DISTINCT FROM y; +SELECT x ISNULL, x NOTNULL, x NOT NULL; +SELECT x LIKE y, x NOT LIKE y ESCAPE '\', x GLOB y, x REGEXP y, x MATCH y; +SELECT x BETWEEN 1 AND 2, x NOT BETWEEN 1 AND 2 AND z; +SELECT x IN (), x IN (1, 2), x IN (SELECT 1), x NOT IN tbl, x IN sch.tbl(1); +SELECT CASE WHEN a THEN b END, CASE a WHEN b THEN c ELSE d END; +SELECT CAST(x AS UNSIGNED BIG INT), CAST(x AS decimal(10, -2)), CAST(x AS); +SELECT count(*), count(DISTINCT a), group_concat(a ORDER BY b DESC), max(ALL a); +SELECT EXISTS (SELECT 1), (SELECT 1), (a, b) = (1, 2); +SELECT NULL, 1, 1.5, 1e3, 0xff, 1_000, 'str', x'ab', CURRENT_TIMESTAMP; +SELECT ?, ?12, :name, @name, $foo::bar(baz); +SELECT a, t.a, sch.t.a, "quoted", `back`, [square], 'a'.'b'; diff --git a/parser/testdata/ast/expressions.tree b/parser/testdata/ast/expressions.tree new file mode 100644 index 0000000..27707e4 --- /dev/null +++ b/parser/testdata/ast/expressions.tree @@ -0,0 +1,1444 @@ +SelectStmt{ + Span: 141:165 + Cores: [ + SelectQuery{ + Span: 141:164 + Columns: [ + ResultColumn{ + Span: 148:164 + Expr: BinaryExpr{ + Span: 148:164 + Op: Operator(OR) + X: Ident{ + Span: 148:149 + Name: "a" + Raw: "a" + } + Y: BinaryExpr{ + Span: 153:164 + Op: Operator(AND) + X: Ident{ + Span: 153:154 + Name: "b" + Raw: "b" + } + Y: UnaryExpr{ + Span: 159:164 + Op: Operator(NOT) + X: Ident{ + Span: 163:164 + Name: "c" + Raw: "c" + } + } + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 166:195 + Cores: [ + SelectQuery{ + Span: 166:194 + Columns: [ + ResultColumn{ + Span: 173:194 + Expr: BinaryExpr{ + Span: 173:194 + Op: Operator(-) + X: BinaryExpr{ + Span: 173:182 + Op: Operator(+) + X: Literal{ + Span: 173:174 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Y: BinaryExpr{ + Span: 177:182 + Op: Operator(*) + X: Literal{ + Span: 177:178 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + Y: Literal{ + Span: 181:182 + Kind: LiteralKind(INTEGER) + Value: "3" + Raw: "3" + } + } + } + Y: BinaryExpr{ + Span: 185:194 + Op: Operator(%) + X: BinaryExpr{ + Span: 185:190 + Op: Operator(/) + X: Literal{ + Span: 185:186 + Kind: LiteralKind(INTEGER) + Value: "4" + Raw: "4" + } + Y: Literal{ + Span: 189:190 + Kind: LiteralKind(INTEGER) + Value: "5" + Raw: "5" + } + } + Y: Literal{ + Span: 193:194 + Kind: LiteralKind(INTEGER) + Value: "6" + Raw: "6" + } + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 196:215 + Cores: [ + SelectQuery{ + Span: 196:214 + Columns: [ + ResultColumn{ + Span: 203:214 + Expr: BinaryExpr{ + Span: 203:214 + Op: Operator(*) + X: ParenExpr{ + Span: 203:210 + X: BinaryExpr{ + Span: 204:209 + Op: Operator(+) + X: Literal{ + Span: 204:205 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Y: Literal{ + Span: 208:209 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + } + Y: Literal{ + Span: 213:214 + Kind: LiteralKind(INTEGER) + Value: "3" + Raw: "3" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 216:254 + Cores: [ + SelectQuery{ + Span: 216:253 + Columns: [ + ResultColumn{ + Span: 223:232 + Expr: BinaryExpr{ + Span: 223:232 + Op: Operator(=) + X: BinaryExpr{ + Span: 223:228 + Op: Operator(<) + X: Literal{ + Span: 223:224 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Y: Literal{ + Span: 227:228 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + Y: Literal{ + Span: 231:232 + Kind: LiteralKind(INTEGER) + Value: "3" + Raw: "3" + } + } + } + ResultColumn{ + Span: 234:253 + Expr: BinaryExpr{ + Span: 234:253 + Op: Operator(>>) + X: BinaryExpr{ + Span: 234:248 + Op: Operator(<<) + X: BinaryExpr{ + Span: 234:243 + Op: Operator(|) + X: BinaryExpr{ + Span: 234:239 + Op: Operator(&) + X: Literal{ + Span: 234:235 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Y: Literal{ + Span: 238:239 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + Y: Literal{ + Span: 242:243 + Kind: LiteralKind(INTEGER) + Value: "3" + Raw: "3" + } + } + Y: Literal{ + Span: 247:248 + Kind: LiteralKind(INTEGER) + Value: "4" + Raw: "4" + } + } + Y: Literal{ + Span: 252:253 + Kind: LiteralKind(INTEGER) + Value: "5" + Raw: "5" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 255:288 + Cores: [ + SelectQuery{ + Span: 255:287 + Columns: [ + ResultColumn{ + Span: 262:287 + Expr: BinaryExpr{ + Span: 262:287 + Op: Operator(->>) + X: BinaryExpr{ + Span: 262:279 + Op: Operator(->) + X: BinaryExpr{ + Span: 262:272 + Op: Operator(||) + X: Literal{ + Span: 262:265 + Kind: LiteralKind(STRING) + Value: "a" + Raw: "'a'" + } + Y: Literal{ + Span: 269:272 + Kind: LiteralKind(STRING) + Value: "b" + Raw: "'b'" + } + } + Y: Literal{ + Span: 276:279 + Kind: LiteralKind(STRING) + Value: "c" + Raw: "'c'" + } + } + Y: Literal{ + Span: 284:287 + Kind: LiteralKind(STRING) + Value: "d" + Raw: "'d'" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 289:314 + Cores: [ + SelectQuery{ + Span: 289:313 + Columns: [ + ResultColumn{ + Span: 296:298 + Expr: UnaryExpr{ + Span: 296:298 + Op: Operator(-) + X: Ident{ + Span: 297:298 + Name: "x" + Raw: "x" + } + } + } + ResultColumn{ + Span: 300:302 + Expr: UnaryExpr{ + Span: 300:302 + Op: Operator(+) + X: Ident{ + Span: 301:302 + Name: "x" + Raw: "x" + } + } + } + ResultColumn{ + Span: 304:306 + Expr: UnaryExpr{ + Span: 304:306 + Op: Operator(~) + X: Ident{ + Span: 305:306 + Name: "x" + Raw: "x" + } + } + } + ResultColumn{ + Span: 308:313 + Expr: UnaryExpr{ + Span: 308:313 + Op: Operator(NOT) + X: Ident{ + Span: 312:313 + Name: "x" + Raw: "x" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 315:335 + Cores: [ + SelectQuery{ + Span: 315:334 + Columns: [ + ResultColumn{ + Span: 322:326 + Expr: UnaryExpr{ + Span: 322:326 + Op: Operator(-) + X: UnaryExpr{ + Span: 324:326 + Op: Operator(-) + X: Ident{ + Span: 325:326 + Name: "x" + Raw: "x" + } + } + } + } + ResultColumn{ + Span: 328:334 + Expr: BinaryExpr{ + Span: 328:334 + Op: Operator(-) + X: Literal{ + Span: 328:329 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Y: UnaryExpr{ + Span: 332:334 + Op: Operator(-) + X: Literal{ + Span: 333:334 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 336:379 + Cores: [ + SelectQuery{ + Span: 336:378 + Columns: [ + ResultColumn{ + Span: 343:359 + Expr: CollateExpr{ + Span: 343:359 + X: Ident{ + Span: 343:344 + Name: "x" + Raw: "x" + } + Name: Ident{ + Span: 353:359 + Name: "nocase" + Raw: "nocase" + } + } + } + ResultColumn{ + Span: 361:378 + Expr: CollateExpr{ + Span: 361:378 + X: UnaryExpr{ + Span: 361:363 + Op: Operator(-) + X: Ident{ + Span: 362:363 + Name: "x" + Raw: "x" + } + } + Name: Ident{ + Span: 372:378 + Name: "binary" + Raw: "binary" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 380:454 + Cores: [ + SelectQuery{ + Span: 380:453 + Columns: [ + ResultColumn{ + Span: 387:393 + Expr: IsExpr{ + Span: 387:393 + X: Ident{ + Span: 387:388 + Name: "x" + Raw: "x" + } + Y: Ident{ + Span: 392:393 + Name: "y" + Raw: "y" + } + } + } + ResultColumn{ + Span: 395:405 + Expr: IsExpr{ + Span: 395:405 + Not: true + X: Ident{ + Span: 395:396 + Name: "x" + Raw: "x" + } + Y: Ident{ + Span: 404:405 + Name: "y" + Raw: "y" + } + } + } + ResultColumn{ + Span: 407:427 + Expr: IsExpr{ + Span: 407:427 + Distinct: true + X: Ident{ + Span: 407:408 + Name: "x" + Raw: "x" + } + Y: Ident{ + Span: 426:427 + Name: "y" + Raw: "y" + } + } + } + ResultColumn{ + Span: 429:453 + Expr: IsExpr{ + Span: 429:453 + Not: true + Distinct: true + X: Ident{ + Span: 429:430 + Name: "x" + Raw: "x" + } + Y: Ident{ + Span: 452:453 + Name: "y" + Raw: "y" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 455:494 + Cores: [ + SelectQuery{ + Span: 455:493 + Columns: [ + ResultColumn{ + Span: 462:470 + Expr: NullCheckExpr{ + Span: 462:470 + X: Ident{ + Span: 462:463 + Name: "x" + Raw: "x" + } + } + } + ResultColumn{ + Span: 472:481 + Expr: NullCheckExpr{ + Span: 472:481 + Not: true + X: Ident{ + Span: 472:473 + Name: "x" + Raw: "x" + } + } + } + ResultColumn{ + Span: 483:493 + Expr: NullCheckExpr{ + Span: 483:493 + Not: true + X: Ident{ + Span: 483:484 + Name: "x" + Raw: "x" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 495:569 + Cores: [ + SelectQuery{ + Span: 495:568 + Columns: [ + ResultColumn{ + Span: 502:510 + Expr: LikeExpr{ + Span: 502:510 + Op: Ident{ + Span: 504:508 + Name: "LIKE" + Raw: "LIKE" + } + X: Ident{ + Span: 502:503 + Name: "x" + Raw: "x" + } + Y: Ident{ + Span: 509:510 + Name: "y" + Raw: "y" + } + } + } + ResultColumn{ + Span: 512:535 + Expr: LikeExpr{ + Span: 512:535 + Op: Ident{ + Span: 518:522 + Name: "LIKE" + Raw: "LIKE" + } + Not: true + X: Ident{ + Span: 512:513 + Name: "x" + Raw: "x" + } + Y: Ident{ + Span: 523:524 + Name: "y" + Raw: "y" + } + Escape: Literal{ + Span: 532:535 + Kind: LiteralKind(STRING) + Value: "\\" + Raw: "'\\'" + } + } + } + ResultColumn{ + Span: 537:545 + Expr: LikeExpr{ + Span: 537:545 + Op: Ident{ + Span: 539:543 + Name: "GLOB" + Raw: "GLOB" + } + X: Ident{ + Span: 537:538 + Name: "x" + Raw: "x" + } + Y: Ident{ + Span: 544:545 + Name: "y" + Raw: "y" + } + } + } + ResultColumn{ + Span: 547:557 + Expr: LikeExpr{ + Span: 547:557 + Op: Ident{ + Span: 549:555 + Name: "REGEXP" + Raw: "REGEXP" + } + X: Ident{ + Span: 547:548 + Name: "x" + Raw: "x" + } + Y: Ident{ + Span: 556:557 + Name: "y" + Raw: "y" + } + } + } + ResultColumn{ + Span: 559:568 + Expr: LikeExpr{ + Span: 559:568 + Op: Ident{ + Span: 561:566 + Name: "MATCH" + Raw: "MATCH" + } + X: Ident{ + Span: 559:560 + Name: "x" + Raw: "x" + } + Y: Ident{ + Span: 567:568 + Name: "y" + Raw: "y" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 570:624 + Cores: [ + SelectQuery{ + Span: 570:623 + Columns: [ + ResultColumn{ + Span: 577:594 + Expr: BetweenExpr{ + Span: 577:594 + X: Ident{ + Span: 577:578 + Name: "x" + Raw: "x" + } + Lo: Literal{ + Span: 587:588 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Hi: Literal{ + Span: 593:594 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + } + ResultColumn{ + Span: 596:623 + Expr: BinaryExpr{ + Span: 596:623 + Op: Operator(AND) + X: BetweenExpr{ + Span: 596:617 + Not: true + X: Ident{ + Span: 596:597 + Name: "x" + Raw: "x" + } + Lo: Literal{ + Span: 610:611 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Hi: Literal{ + Span: 616:617 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + Y: Ident{ + Span: 622:623 + Name: "z" + Raw: "z" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 625:701 + Cores: [ + SelectQuery{ + Span: 625:700 + Columns: [ + ResultColumn{ + Span: 632:639 + Expr: InExpr{ + Span: 632:639 + X: Ident{ + Span: 632:633 + Name: "x" + Raw: "x" + } + Parens: true + } + } + ResultColumn{ + Span: 641:652 + Expr: InExpr{ + Span: 641:652 + X: Ident{ + Span: 641:642 + Name: "x" + Raw: "x" + } + Parens: true + List: [ + Literal{ + Span: 647:648 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Literal{ + Span: 650:651 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + ] + } + } + ResultColumn{ + Span: 654:669 + Expr: InExpr{ + Span: 654:669 + X: Ident{ + Span: 654:655 + Name: "x" + Raw: "x" + } + Parens: true + Select: SelectStmt{ + Span: 660:668 + Cores: [ + SelectQuery{ + Span: 660:668 + Columns: [ + ResultColumn{ + Span: 667:668 + Expr: Literal{ + Span: 667:668 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] + } + } + } + ResultColumn{ + Span: 671:683 + Expr: InExpr{ + Span: 671:683 + Not: true + X: Ident{ + Span: 671:672 + Name: "x" + Raw: "x" + } + Table: QualifiedName{ + Span: 680:683 + Name: Ident{ + Span: 680:683 + Name: "tbl" + Raw: "tbl" + } + } + } + } + ResultColumn{ + Span: 685:700 + Expr: InExpr{ + Span: 685:700 + X: Ident{ + Span: 685:686 + Name: "x" + Raw: "x" + } + Table: QualifiedName{ + Span: 690:697 + Schema: Ident{ + Span: 690:693 + Name: "sch" + Raw: "sch" + } + Name: Ident{ + Span: 694:697 + Name: "tbl" + Raw: "tbl" + } + } + Args: [ + Literal{ + Span: 698:699 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + ] + HasArgs: true + } + } + ] + } + ] +} +SelectStmt{ + Span: 702:765 + Cores: [ + SelectQuery{ + Span: 702:764 + Columns: [ + ResultColumn{ + Span: 709:731 + Expr: CaseExpr{ + Span: 709:731 + Whens: [ + CaseWhen{ + Span: 714:727 + When: Ident{ + Span: 719:720 + Name: "a" + Raw: "a" + } + Then: Ident{ + Span: 726:727 + Name: "b" + Raw: "b" + } + } + ] + } + } + ResultColumn{ + Span: 733:764 + Expr: CaseExpr{ + Span: 733:764 + Operand: Ident{ + Span: 738:739 + Name: "a" + Raw: "a" + } + Whens: [ + CaseWhen{ + Span: 740:753 + When: Ident{ + Span: 745:746 + Name: "b" + Raw: "b" + } + Then: Ident{ + Span: 752:753 + Name: "c" + Raw: "c" + } + } + ] + Else: Ident{ + Span: 759:760 + Name: "d" + Raw: "d" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 766:841 + Cores: [ + SelectQuery{ + Span: 766:840 + Columns: [ + ResultColumn{ + Span: 773:800 + Expr: CastExpr{ + Span: 773:800 + X: Ident{ + Span: 778:779 + Name: "x" + Raw: "x" + } + Type: TypeName{ + Span: 783:799 + Name: "UNSIGNED BIG INT" + Raw: "UNSIGNED BIG INT" + } + } + } + ResultColumn{ + Span: 802:828 + Expr: CastExpr{ + Span: 802:828 + X: Ident{ + Span: 807:808 + Name: "x" + Raw: "x" + } + Type: TypeName{ + Span: 812:827 + Name: "decimal" + Args: [ + "10" + "-2" + ] + Raw: "decimal(10, -2)" + } + } + } + ResultColumn{ + Span: 830:840 + Expr: CastExpr{ + Span: 830:840 + X: Ident{ + Span: 835:836 + Name: "x" + Raw: "x" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 842:922 + Cores: [ + SelectQuery{ + Span: 842:921 + Columns: [ + ResultColumn{ + Span: 849:857 + Expr: FuncCall{ + Span: 849:857 + Name: Ident{ + Span: 849:854 + Name: "count" + Raw: "count" + } + Star: true + } + } + ResultColumn{ + Span: 859:876 + Expr: FuncCall{ + Span: 859:876 + Name: Ident{ + Span: 859:864 + Name: "count" + Raw: "count" + } + Distinct: true + Args: [ + Ident{ + Span: 874:875 + Name: "a" + Raw: "a" + } + ] + } + } + ResultColumn{ + Span: 878:909 + Expr: FuncCall{ + Span: 878:909 + Name: Ident{ + Span: 878:890 + Name: "group_concat" + Raw: "group_concat" + } + Args: [ + Ident{ + Span: 891:892 + Name: "a" + Raw: "a" + } + ] + OrderBy: [ + OrderingTerm{ + Span: 902:908 + Expr: Ident{ + Span: 902:903 + Name: "b" + Raw: "b" + } + Order: SortOrder(DESC) + } + ] + } + } + ResultColumn{ + Span: 911:921 + Expr: FuncCall{ + Span: 911:921 + Name: Ident{ + Span: 911:914 + Name: "max" + Raw: "max" + } + All: true + Args: [ + Ident{ + Span: 919:920 + Name: "a" + Raw: "a" + } + ] + } + } + ] + } + ] +} +SelectStmt{ + Span: 923:977 + Cores: [ + SelectQuery{ + Span: 923:976 + Columns: [ + ResultColumn{ + Span: 930:947 + Expr: ExistsExpr{ + Span: 930:947 + Select: SelectStmt{ + Span: 938:946 + Cores: [ + SelectQuery{ + Span: 938:946 + Columns: [ + ResultColumn{ + Span: 945:946 + Expr: Literal{ + Span: 945:946 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] + } + } + } + ResultColumn{ + Span: 949:959 + Expr: SubqueryExpr{ + Span: 949:959 + Select: SelectStmt{ + Span: 950:958 + Cores: [ + SelectQuery{ + Span: 950:958 + Columns: [ + ResultColumn{ + Span: 957:958 + Expr: Literal{ + Span: 957:958 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] + } + } + } + ResultColumn{ + Span: 961:976 + Expr: BinaryExpr{ + Span: 961:976 + Op: Operator(=) + X: VectorExpr{ + Span: 961:967 + List: [ + Ident{ + Span: 962:963 + Name: "a" + Raw: "a" + } + Ident{ + Span: 965:966 + Name: "b" + Raw: "b" + } + ] + } + Y: VectorExpr{ + Span: 970:976 + List: [ + Literal{ + Span: 971:972 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Literal{ + Span: 974:975 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + ] + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 978:1049 + Cores: [ + SelectQuery{ + Span: 978:1048 + Columns: [ + ResultColumn{ + Span: 985:989 + Expr: Literal{ + Span: 985:989 + Value: "NULL" + Raw: "NULL" + } + } + ResultColumn{ + Span: 991:992 + Expr: Literal{ + Span: 991:992 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ResultColumn{ + Span: 994:997 + Expr: Literal{ + Span: 994:997 + Kind: LiteralKind(FLOAT) + Value: "1.5" + Raw: "1.5" + } + } + ResultColumn{ + Span: 999:1002 + Expr: Literal{ + Span: 999:1002 + Kind: LiteralKind(FLOAT) + Value: "1e3" + Raw: "1e3" + } + } + ResultColumn{ + Span: 1004:1008 + Expr: Literal{ + Span: 1004:1008 + Kind: LiteralKind(INTEGER) + Value: "0xff" + Raw: "0xff" + } + } + ResultColumn{ + Span: 1010:1015 + Expr: Literal{ + Span: 1010:1015 + Kind: LiteralKind(INTEGER) + Value: "1000" + Raw: "1_000" + } + } + ResultColumn{ + Span: 1017:1022 + Expr: Literal{ + Span: 1017:1022 + Kind: LiteralKind(STRING) + Value: "str" + Raw: "'str'" + } + } + ResultColumn{ + Span: 1024:1029 + Expr: Literal{ + Span: 1024:1029 + Kind: LiteralKind(BLOB) + Value: "x'ab'" + Raw: "x'ab'" + } + } + ResultColumn{ + Span: 1031:1048 + Expr: Literal{ + Span: 1031:1048 + Kind: LiteralKind(CURRENT_TIMESTAMP) + Value: "CURRENT_TIMESTAMP" + Raw: "CURRENT_TIMESTAMP" + } + } + ] + } + ] +} +SelectStmt{ + Span: 1050:1094 + Cores: [ + SelectQuery{ + Span: 1050:1093 + Columns: [ + ResultColumn{ + Span: 1057:1058 + Expr: BindParam{ + Span: 1057:1058 + Number: 1 + Raw: "?" + } + } + ResultColumn{ + Span: 1060:1063 + Expr: BindParam{ + Span: 1060:1063 + Kind: ParamKind(?NNN) + Number: 12 + Raw: "?12" + } + } + ResultColumn{ + Span: 1065:1070 + Expr: BindParam{ + Span: 1065:1070 + Kind: ParamKind(:name) + Number: 13 + Name: "name" + Raw: ":name" + } + } + ResultColumn{ + Span: 1072:1077 + Expr: BindParam{ + Span: 1072:1077 + Kind: ParamKind(@name) + Number: 14 + Name: "name" + Raw: "@name" + } + } + ResultColumn{ + Span: 1079:1093 + Expr: BindParam{ + Span: 1079:1093 + Kind: ParamKind($name) + Number: 15 + Name: "foo::bar(baz)" + Raw: "$foo::bar(baz)" + } + } + ] + } + ] +} +SelectStmt{ + Span: 1095:1155 + Cores: [ + SelectQuery{ + Span: 1095:1154 + Columns: [ + ResultColumn{ + Span: 1102:1103 + Expr: Ident{ + Span: 1102:1103 + Name: "a" + Raw: "a" + } + } + ResultColumn{ + Span: 1105:1108 + Expr: QualifiedRef{ + Span: 1105:1108 + Parts: [ + Ident{ + Span: 1105:1106 + Name: "t" + Raw: "t" + } + Ident{ + Span: 1107:1108 + Name: "a" + Raw: "a" + } + ] + } + } + ResultColumn{ + Span: 1110:1117 + Expr: QualifiedRef{ + Span: 1110:1117 + Parts: [ + Ident{ + Span: 1110:1113 + Name: "sch" + Raw: "sch" + } + Ident{ + Span: 1114:1115 + Name: "t" + Raw: "t" + } + Ident{ + Span: 1116:1117 + Name: "a" + Raw: "a" + } + ] + } + } + ResultColumn{ + Span: 1119:1127 + Expr: Ident{ + Span: 1119:1127 + Name: "quoted" + Raw: "\"quoted\"" + Quote: QuoteStyle(") + } + } + ResultColumn{ + Span: 1129:1135 + Expr: Ident{ + Span: 1129:1135 + Name: "back" + Raw: "`back`" + Quote: QuoteStyle(`) + } + } + ResultColumn{ + Span: 1137:1145 + Expr: Ident{ + Span: 1137:1145 + Name: "square" + Raw: "[square]" + Quote: QuoteStyle([) + } + } + ResultColumn{ + Span: 1147:1154 + Expr: QualifiedRef{ + Span: 1147:1154 + Parts: [ + Ident{ + Span: 1147:1150 + Name: "a" + Raw: "'a'" + Quote: QuoteStyle(') + } + Ident{ + Span: 1151:1154 + Name: "b" + Raw: "'b'" + Quote: QuoteStyle(') + } + ] + } + } + ] + } + ] +} diff --git a/parser/testdata/ast/misc.sql b/parser/testdata/ast/misc.sql new file mode 100644 index 0000000..2aabeba --- /dev/null +++ b/parser/testdata/ast/misc.sql @@ -0,0 +1,21 @@ +-- Transactions, savepoints, PRAGMA, ATTACH and the rest. +BEGIN; +BEGIN IMMEDIATE TRANSACTION name; +COMMIT TRANSACTION; +END; +ROLLBACK; +ROLLBACK TRANSACTION TO SAVEPOINT s; +SAVEPOINT s; +RELEASE SAVEPOINT s; +ATTACH DATABASE 'file' AS db KEY 'k'; +DETACH db; +PRAGMA sch.page_size; +PRAGMA page_size = 4096; +PRAGMA page_size = -1; +PRAGMA journal_mode(delete); +VACUUM; +VACUUM sch INTO 'file'; +ANALYZE sch.t; +REINDEX; +EXPLAIN SELECT 1; +EXPLAIN QUERY PLAN SELECT 1; diff --git a/parser/testdata/ast/misc.tree b/parser/testdata/ast/misc.tree new file mode 100644 index 0000000..527c17f --- /dev/null +++ b/parser/testdata/ast/misc.tree @@ -0,0 +1,214 @@ +BeginStmt{ + Span: 58:64 +} +BeginStmt{ + Span: 65:98 + Type: TransactionType(IMMEDIATE) + HasType: true + Name: Ident{ + Span: 93:97 + Name: "name" + Raw: "name" + } +} +CommitStmt{ + Span: 99:118 + Keyword: "COMMIT" +} +CommitStmt{ + Span: 119:123 + Keyword: "END" +} +RollbackStmt{ + Span: 124:133 +} +RollbackStmt{ + Span: 134:170 + Savepoint: Ident{ + Span: 168:169 + Name: "s" + Raw: "s" + } +} +SavepointStmt{ + Span: 171:183 + Name: Ident{ + Span: 181:182 + Name: "s" + Raw: "s" + } +} +ReleaseStmt{ + Span: 184:204 + Name: Ident{ + Span: 202:203 + Name: "s" + Raw: "s" + } +} +AttachStmt{ + Span: 205:242 + HasDatabase: true + File: Literal{ + Span: 221:227 + Kind: LiteralKind(STRING) + Value: "file" + Raw: "'file'" + } + Name: Ident{ + Span: 231:233 + Name: "db" + Raw: "db" + } + Key: Literal{ + Span: 238:241 + Kind: LiteralKind(STRING) + Value: "k" + Raw: "'k'" + } +} +DetachStmt{ + Span: 243:253 + Name: Ident{ + Span: 250:252 + Name: "db" + Raw: "db" + } +} +PragmaStmt{ + Span: 254:275 + Name: QualifiedName{ + Span: 261:274 + Schema: Ident{ + Span: 261:264 + Name: "sch" + Raw: "sch" + } + Name: Ident{ + Span: 265:274 + Name: "page_size" + Raw: "page_size" + } + } +} +PragmaStmt{ + Span: 276:300 + Name: QualifiedName{ + Span: 283:292 + Name: Ident{ + Span: 283:292 + Name: "page_size" + Raw: "page_size" + } + } + Value: "4096" + HasValue: true +} +PragmaStmt{ + Span: 301:323 + Name: QualifiedName{ + Span: 308:317 + Name: Ident{ + Span: 308:317 + Name: "page_size" + Raw: "page_size" + } + } + Value: "-1" + HasValue: true +} +PragmaStmt{ + Span: 324:352 + Name: QualifiedName{ + Span: 331:343 + Name: Ident{ + Span: 331:343 + Name: "journal_mode" + Raw: "journal_mode" + } + } + Value: "delete" + Paren: true + HasValue: true +} +VacuumStmt{ + Span: 353:360 +} +VacuumStmt{ + Span: 361:384 + Schema: Ident{ + Span: 368:371 + Name: "sch" + Raw: "sch" + } + Into: Literal{ + Span: 377:383 + Kind: LiteralKind(STRING) + Value: "file" + Raw: "'file'" + } +} +AnalyzeStmt{ + Span: 385:399 + Name: QualifiedName{ + Span: 393:398 + Schema: Ident{ + Span: 393:396 + Name: "sch" + Raw: "sch" + } + Name: Ident{ + Span: 397:398 + Name: "t" + Raw: "t" + } + } +} +ReindexStmt{ + Span: 400:408 +} +ExplainStmt{ + Span: 409:426 + Stmt: SelectStmt{ + Span: 417:425 + Cores: [ + SelectQuery{ + Span: 417:425 + Columns: [ + ResultColumn{ + Span: 424:425 + Expr: Literal{ + Span: 424:425 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] + } +} +ExplainStmt{ + Span: 427:455 + QueryPlan: true + Stmt: SelectStmt{ + Span: 446:454 + Cores: [ + SelectQuery{ + Span: 446:454 + Columns: [ + ResultColumn{ + Span: 453:454 + Expr: Literal{ + Span: 453:454 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] + } +} diff --git a/parser/testdata/ast/select.sql b/parser/testdata/ast/select.sql new file mode 100644 index 0000000..50189f7 --- /dev/null +++ b/parser/testdata/ast/select.sql @@ -0,0 +1,14 @@ +-- SELECT: compounds, VALUES, CTEs, joins, windows. +SELECT DISTINCT a, b AS x, c d, t.*, * FROM t; +SELECT 1 UNION SELECT 2 UNION ALL SELECT 3 EXCEPT SELECT 4 INTERSECT SELECT 5; +VALUES (1, 2), (3, 4); +WITH RECURSIVE c(x) AS (SELECT 1 UNION ALL SELECT x + 1 FROM c) SELECT * FROM c; +WITH a AS MATERIALIZED (SELECT 1), b AS NOT MATERIALIZED (SELECT 2) SELECT 1; +SELECT * FROM a, b JOIN c ON a.x = c.x LEFT OUTER JOIN d USING (x) NATURAL FULL JOIN e; +SELECT * FROM (a JOIN b), (SELECT 1) AS s, tvf(1, 2) f, t INDEXED BY i, u NOT INDEXED; +SELECT * FROM t WHERE a GROUP BY b, c HAVING d ORDER BY e ASC NULLS FIRST, f DESC LIMIT 1 OFFSET 2; +SELECT * FROM t LIMIT 1, 2; +SELECT row_number() OVER (), sum(a) OVER w, count(*) FILTER (WHERE a) OVER (PARTITION BY b) + FROM t WINDOW w AS (base ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES), + v AS (ROWS 3 PRECEDING); +SELECT lead(a) OVER (ORDER BY b GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS) FROM t; diff --git a/parser/testdata/ast/select.tree b/parser/testdata/ast/select.tree new file mode 100644 index 0000000..580c64d --- /dev/null +++ b/parser/testdata/ast/select.tree @@ -0,0 +1,1038 @@ +SelectStmt{ + Span: 52:98 + Cores: [ + SelectQuery{ + Span: 52:97 + Distinct: Distinct(DISTINCT) + Columns: [ + ResultColumn{ + Span: 68:69 + Expr: Ident{ + Span: 68:69 + Name: "a" + Raw: "a" + } + } + ResultColumn{ + Span: 71:77 + Expr: Ident{ + Span: 71:72 + Name: "b" + Raw: "b" + } + Alias: Ident{ + Span: 76:77 + Name: "x" + Raw: "x" + } + HasAs: true + } + ResultColumn{ + Span: 79:82 + Expr: Ident{ + Span: 79:80 + Name: "c" + Raw: "c" + } + Alias: Ident{ + Span: 81:82 + Name: "d" + Raw: "d" + } + } + ResultColumn{ + Span: 84:87 + Expr: Star{ + Span: 84:87 + Table: Ident{ + Span: 84:85 + Name: "t" + Raw: "t" + } + } + } + ResultColumn{ + Span: 89:90 + Expr: Star{ + Span: 89:90 + } + } + ] + From: [ + TableRef{ + Span: 96:97 + Name: QualifiedName{ + Span: 96:97 + Name: Ident{ + Span: 96:97 + Name: "t" + Raw: "t" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 99:177 + Cores: [ + SelectQuery{ + Span: 99:107 + Columns: [ + ResultColumn{ + Span: 106:107 + Expr: Literal{ + Span: 106:107 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + SelectQuery{ + Span: 114:122 + Columns: [ + ResultColumn{ + Span: 121:122 + Expr: Literal{ + Span: 121:122 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + ] + } + SelectQuery{ + Span: 133:141 + Columns: [ + ResultColumn{ + Span: 140:141 + Expr: Literal{ + Span: 140:141 + Kind: LiteralKind(INTEGER) + Value: "3" + Raw: "3" + } + } + ] + } + SelectQuery{ + Span: 149:157 + Columns: [ + ResultColumn{ + Span: 156:157 + Expr: Literal{ + Span: 156:157 + Kind: LiteralKind(INTEGER) + Value: "4" + Raw: "4" + } + } + ] + } + SelectQuery{ + Span: 168:176 + Columns: [ + ResultColumn{ + Span: 175:176 + Expr: Literal{ + Span: 175:176 + Kind: LiteralKind(INTEGER) + Value: "5" + Raw: "5" + } + } + ] + } + ] + Ops: [ + CompoundOp{ + Span: 108:113 + Op: "UNION" + } + CompoundOp{ + Span: 123:132 + Op: "UNION" + All: true + } + CompoundOp{ + Span: 142:148 + Op: "EXCEPT" + } + CompoundOp{ + Span: 158:167 + Op: "INTERSECT" + } + ] +} +SelectStmt{ + Span: 178:200 + Cores: [ + ValuesClause{ + Span: 178:199 + Rows: [ + [ + Literal{ + Span: 186:187 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Literal{ + Span: 189:190 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + ] + [ + Literal{ + Span: 194:195 + Kind: LiteralKind(INTEGER) + Value: "3" + Raw: "3" + } + Literal{ + Span: 197:198 + Kind: LiteralKind(INTEGER) + Value: "4" + Raw: "4" + } + ] + ] + } + ] +} +SelectStmt{ + Span: 201:281 + With: With{ + Span: 201:264 + Recursive: true + CTEs: [ + CTE{ + Span: 216:264 + Name: Ident{ + Span: 216:217 + Name: "c" + Raw: "c" + } + Columns: [ + Ident{ + Span: 218:219 + Name: "x" + Raw: "x" + } + ] + Select: SelectStmt{ + Span: 225:263 + Cores: [ + SelectQuery{ + Span: 225:233 + Columns: [ + ResultColumn{ + Span: 232:233 + Expr: Literal{ + Span: 232:233 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + SelectQuery{ + Span: 244:263 + Columns: [ + ResultColumn{ + Span: 251:256 + Expr: BinaryExpr{ + Span: 251:256 + Op: Operator(+) + X: Ident{ + Span: 251:252 + Name: "x" + Raw: "x" + } + Y: Literal{ + Span: 255:256 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + } + ] + From: [ + TableRef{ + Span: 262:263 + Name: QualifiedName{ + Span: 262:263 + Name: Ident{ + Span: 262:263 + Name: "c" + Raw: "c" + } + } + } + ] + } + ] + Ops: [ + CompoundOp{ + Span: 234:243 + Op: "UNION" + All: true + } + ] + } + } + ] + } + Cores: [ + SelectQuery{ + Span: 265:280 + Columns: [ + ResultColumn{ + Span: 272:273 + Expr: Star{ + Span: 272:273 + } + } + ] + From: [ + TableRef{ + Span: 279:280 + Name: QualifiedName{ + Span: 279:280 + Name: Ident{ + Span: 279:280 + Name: "c" + Raw: "c" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 282:359 + With: With{ + Span: 282:349 + CTEs: [ + CTE{ + Span: 287:315 + Name: Ident{ + Span: 287:288 + Name: "a" + Raw: "a" + } + Materialized: Materialized(MATERIALIZED) + Select: SelectStmt{ + Span: 306:314 + Cores: [ + SelectQuery{ + Span: 306:314 + Columns: [ + ResultColumn{ + Span: 313:314 + Expr: Literal{ + Span: 313:314 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] + } + } + CTE{ + Span: 317:349 + Name: Ident{ + Span: 317:318 + Name: "b" + Raw: "b" + } + Materialized: Materialized(NOT MATERIALIZED) + Select: SelectStmt{ + Span: 340:348 + Cores: [ + SelectQuery{ + Span: 340:348 + Columns: [ + ResultColumn{ + Span: 347:348 + Expr: Literal{ + Span: 347:348 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + ] + } + ] + } + } + ] + } + Cores: [ + SelectQuery{ + Span: 350:358 + Columns: [ + ResultColumn{ + Span: 357:358 + Expr: Literal{ + Span: 357:358 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] +} +SelectStmt{ + Span: 360:447 + Cores: [ + SelectQuery{ + Span: 360:446 + Columns: [ + ResultColumn{ + Span: 367:368 + Expr: Star{ + Span: 367:368 + } + } + ] + From: [ + TableRef{ + Span: 374:375 + Name: QualifiedName{ + Span: 374:375 + Name: Ident{ + Span: 374:375 + Name: "a" + Raw: "a" + } + } + } + TableRef{ + Span: 375:378 + Join: JoinOperator{ + Span: 375:376 + Type: JoinType(,|INNER) + } + Name: QualifiedName{ + Span: 377:378 + Name: Ident{ + Span: 377:378 + Name: "b" + Raw: "b" + } + } + } + TableRef{ + Span: 379:398 + Join: JoinOperator{ + Span: 379:383 + Type: JoinType(INNER) + Words: [ + "JOIN" + ] + } + Name: QualifiedName{ + Span: 384:385 + Name: Ident{ + Span: 384:385 + Name: "c" + Raw: "c" + } + } + On: BinaryExpr{ + Span: 389:398 + Op: Operator(=) + X: QualifiedRef{ + Span: 389:392 + Parts: [ + Ident{ + Span: 389:390 + Name: "a" + Raw: "a" + } + Ident{ + Span: 391:392 + Name: "x" + Raw: "x" + } + ] + } + Y: QualifiedRef{ + Span: 395:398 + Parts: [ + Ident{ + Span: 395:396 + Name: "c" + Raw: "c" + } + Ident{ + Span: 397:398 + Name: "x" + Raw: "x" + } + ] + } + } + } + TableRef{ + Span: 399:426 + Join: JoinOperator{ + Span: 399:414 + Type: JoinType(LEFT|OUTER) + Words: [ + "LEFT" + "OUTER" + "JOIN" + ] + } + Name: QualifiedName{ + Span: 415:416 + Name: Ident{ + Span: 415:416 + Name: "d" + Raw: "d" + } + } + Using: [ + Ident{ + Span: 424:425 + Name: "x" + Raw: "x" + } + ] + } + TableRef{ + Span: 427:446 + Join: JoinOperator{ + Span: 427:444 + Type: JoinType(NATURAL|LEFT|RIGHT|OUTER) + Words: [ + "NATURAL" + "FULL" + "JOIN" + ] + } + Name: QualifiedName{ + Span: 445:446 + Name: Ident{ + Span: 445:446 + Name: "e" + Raw: "e" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 448:534 + Cores: [ + SelectQuery{ + Span: 448:533 + Columns: [ + ResultColumn{ + Span: 455:456 + Expr: Star{ + Span: 455:456 + } + } + ] + From: [ + TableRef{ + Span: 462:472 + List: [ + TableRef{ + Span: 463:464 + Name: QualifiedName{ + Span: 463:464 + Name: Ident{ + Span: 463:464 + Name: "a" + Raw: "a" + } + } + } + TableRef{ + Span: 465:471 + Join: JoinOperator{ + Span: 465:469 + Type: JoinType(INNER) + Words: [ + "JOIN" + ] + } + Name: QualifiedName{ + Span: 470:471 + Name: Ident{ + Span: 470:471 + Name: "b" + Raw: "b" + } + } + } + ] + } + TableRef{ + Span: 472:489 + Join: JoinOperator{ + Span: 472:473 + Type: JoinType(,|INNER) + } + Select: SelectStmt{ + Span: 475:483 + Cores: [ + SelectQuery{ + Span: 475:483 + Columns: [ + ResultColumn{ + Span: 482:483 + Expr: Literal{ + Span: 482:483 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + } + ] + } + ] + } + Alias: Ident{ + Span: 488:489 + Name: "s" + Raw: "s" + } + HasAs: true + } + TableRef{ + Span: 489:502 + Join: JoinOperator{ + Span: 489:490 + Type: JoinType(,|INNER) + } + Name: QualifiedName{ + Span: 491:494 + Name: Ident{ + Span: 491:494 + Name: "tvf" + Raw: "tvf" + } + } + Args: [ + Literal{ + Span: 495:496 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Literal{ + Span: 498:499 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + ] + HasArgs: true + Alias: Ident{ + Span: 501:502 + Name: "f" + Raw: "f" + } + } + TableRef{ + Span: 502:518 + Join: JoinOperator{ + Span: 502:503 + Type: JoinType(,|INNER) + } + Name: QualifiedName{ + Span: 504:505 + Name: Ident{ + Span: 504:505 + Name: "t" + Raw: "t" + } + } + IndexedBy: Ident{ + Span: 517:518 + Name: "i" + Raw: "i" + } + } + TableRef{ + Span: 518:533 + Join: JoinOperator{ + Span: 518:519 + Type: JoinType(,|INNER) + } + Name: QualifiedName{ + Span: 520:521 + Name: Ident{ + Span: 520:521 + Name: "u" + Raw: "u" + } + } + NotIndexed: true + } + ] + } + ] +} +SelectStmt{ + Span: 535:634 + Cores: [ + SelectQuery{ + Span: 535:633 + Columns: [ + ResultColumn{ + Span: 542:543 + Expr: Star{ + Span: 542:543 + } + } + ] + From: [ + TableRef{ + Span: 549:550 + Name: QualifiedName{ + Span: 549:550 + Name: Ident{ + Span: 549:550 + Name: "t" + Raw: "t" + } + } + } + ] + Where: Ident{ + Span: 557:558 + Name: "a" + Raw: "a" + } + GroupBy: [ + Ident{ + Span: 568:569 + Name: "b" + Raw: "b" + } + Ident{ + Span: 571:572 + Name: "c" + Raw: "c" + } + ] + Having: Ident{ + Span: 580:581 + Name: "d" + Raw: "d" + } + OrderBy: [ + OrderingTerm{ + Span: 591:608 + Expr: Ident{ + Span: 591:592 + Name: "e" + Raw: "e" + } + Order: SortOrder(ASC) + Nulls: NullsOrder(NULLS FIRST) + } + OrderingTerm{ + Span: 610:616 + Expr: Ident{ + Span: 610:611 + Name: "f" + Raw: "f" + } + Order: SortOrder(DESC) + } + ] + Limit: Limit{ + Span: 617:633 + Count: Literal{ + Span: 623:624 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Offset: Literal{ + Span: 632:633 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + } + } + ] +} +SelectStmt{ + Span: 635:662 + Cores: [ + SelectQuery{ + Span: 635:661 + Columns: [ + ResultColumn{ + Span: 642:643 + Expr: Star{ + Span: 642:643 + } + } + ] + From: [ + TableRef{ + Span: 649:650 + Name: QualifiedName{ + Span: 649:650 + Name: Ident{ + Span: 649:650 + Name: "t" + Raw: "t" + } + } + } + ] + Limit: Limit{ + Span: 651:661 + Count: Literal{ + Span: 660:661 + Kind: LiteralKind(INTEGER) + Value: "2" + Raw: "2" + } + Offset: Literal{ + Span: 657:658 + Kind: LiteralKind(INTEGER) + Value: "1" + Raw: "1" + } + Comma: true + } + } + ] +} +SelectStmt{ + Span: 663:896 + Cores: [ + SelectQuery{ + Span: 663:895 + Columns: [ + ResultColumn{ + Span: 670:690 + Expr: FuncCall{ + Span: 670:690 + Name: Ident{ + Span: 670:680 + Name: "row_number" + Raw: "row_number" + } + Over: WindowDef{ + Span: 683:690 + } + } + } + ResultColumn{ + Span: 692:705 + Expr: FuncCall{ + Span: 692:705 + Name: Ident{ + Span: 692:695 + Name: "sum" + Raw: "sum" + } + Args: [ + Ident{ + Span: 696:697 + Name: "a" + Raw: "a" + } + ] + Over: WindowDef{ + Span: 699:705 + Base: Ident{ + Span: 704:705 + Name: "w" + Raw: "w" + } + NameOnly: true + } + } + } + ResultColumn{ + Span: 707:754 + Expr: FuncCall{ + Span: 707:754 + Name: Ident{ + Span: 707:712 + Name: "count" + Raw: "count" + } + Star: true + Filter: Ident{ + Span: 730:731 + Name: "a" + Raw: "a" + } + Over: WindowDef{ + Span: 733:754 + Partition: [ + Ident{ + Span: 752:753 + Name: "b" + Raw: "b" + } + ] + } + } + } + ] + From: [ + TableRef{ + Span: 762:763 + Name: QualifiedName{ + Span: 762:763 + Name: Ident{ + Span: 762:763 + Name: "t" + Raw: "t" + } + } + } + ] + Windows: [ + WindowDef{ + Span: 771:856 + Name: Ident{ + Span: 771:772 + Name: "w" + Raw: "w" + } + Base: Ident{ + Span: 777:781 + Name: "base" + Raw: "base" + } + OrderBy: [ + OrderingTerm{ + Span: 791:792 + Expr: Ident{ + Span: 791:792 + Name: "a" + Raw: "a" + } + } + ] + Frame: FrameType(RANGE) + StartBound: FrameBound{ + Span: 807:826 + } + EndBound: FrameBound{ + Span: 831:842 + Type: FrameBoundType(CURRENT ROW) + } + Exclude: FrameExclude(EXCLUDE TIES) + } + WindowDef{ + Span: 872:895 + Name: Ident{ + Span: 872:873 + Name: "v" + Raw: "v" + } + Frame: FrameType(ROWS) + StartBound: FrameBound{ + Span: 883:894 + Type: FrameBoundType(PRECEDING) + Expr: Literal{ + Span: 883:884 + Kind: LiteralKind(INTEGER) + Value: "3" + Raw: "3" + } + } + } + ] + } + ] +} +SelectStmt{ + Span: 897:1006 + Cores: [ + SelectQuery{ + Span: 897:1005 + Columns: [ + ResultColumn{ + Span: 904:998 + Expr: FuncCall{ + Span: 904:998 + Name: Ident{ + Span: 904:908 + Name: "lead" + Raw: "lead" + } + Args: [ + Ident{ + Span: 909:910 + Name: "a" + Raw: "a" + } + ] + Over: WindowDef{ + Span: 912:998 + OrderBy: [ + OrderingTerm{ + Span: 927:928 + Expr: Ident{ + Span: 927:928 + Name: "b" + Raw: "b" + } + } + ] + Frame: FrameType(GROUPS) + StartBound: FrameBound{ + Span: 944:955 + Type: FrameBoundType(CURRENT ROW) + } + EndBound: FrameBound{ + Span: 960:979 + Type: FrameBoundType(UNBOUNDED FOLLOWING) + } + Exclude: FrameExclude(EXCLUDE NO OTHERS) + } + } + } + ] + From: [ + TableRef{ + Span: 1004:1005 + Name: QualifiedName{ + Span: 1004:1005 + Name: Ident{ + Span: 1004:1005 + Name: "t" + Raw: "t" + } + } + } + ] + } + ] +} From f8c5c41c0ecfac1f4a0cb2f6d9d60e1d7ac9bf10 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 19:51:26 +0000 Subject: [PATCH 05/23] Harden the parser: recursion limit, fuzzing, benchmarks, debug-parse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PLAN.md milestone 7. Two real bugs came out of it. Deeply nested input killed the process. meyer recurses on the goroutine stack, where exhaustion is a fatal runtime error no caller can recover from, so "SELECT ((((...))))" with two million parens took the program down rather than returning an error. The parser now counts nesting at the three points the grammar can cycle through — expressions, selects and FROM items — and rejects past 10,000 with SQLite's own "Recursion limit" wording. SQLite gives up at a nesting of roughly 2,500 and the deepest case in the whole corpus reaches 32, so the guard only fires on input SQLite rejects too. ParseString installed its recover *after* calling newParser, which reads the first token. An input beginning with an illegal token — "\v", say — therefore panicked out of the library instead of returning an error. The fuzzer found this on its fifth seed. - FuzzParse asserts three invariants over arbitrary bytes: parsing terminates without panicking, a rejection is always a *parser.Error with an in-range offset, and anything accepted survives the round trip. Seeded with adversarial inputs and a sample of the corpus. 10M executions clean. - TestRecursionLimit pins the nesting behaviour, including that a long flat expression is not nesting and must still be accepted. - lexer tests cover the lexical detail accept/reject conformance cannot see: quoting, blob literals, digit separators, bind-parameter spellings, the vertical-tab quirk in aiClass[], and the WINDOW/OVER/FILTER resolution. Checked against the oracle. - bench_test.go covers lex, parse and render. - cmd/debug-parse prints the tree, the tokens or the rendered SQL, and points a caret at a parse error. token.Lookup now upper-cases into a stack array instead of calling strings.ToUpper, which it did once per identifier token. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- cmd/debug-parse/main.go | 121 ++++++++++++++ lexer/lexer_test.go | 348 ++++++++++++++++++++++++++++++++++++++++ parser/bench_test.go | 112 +++++++++++++ parser/fuzz_test.go | 149 +++++++++++++++++ parser/parse_expr.go | 2 + parser/parse_select.go | 4 + parser/parser.go | 31 +++- token/keywords.go | 22 ++- 8 files changed, 783 insertions(+), 6 deletions(-) create mode 100644 cmd/debug-parse/main.go create mode 100644 lexer/lexer_test.go create mode 100644 parser/bench_test.go create mode 100644 parser/fuzz_test.go diff --git a/cmd/debug-parse/main.go b/cmd/debug-parse/main.go new file mode 100644 index 0000000..3166e2e --- /dev/null +++ b/cmd/debug-parse/main.go @@ -0,0 +1,121 @@ +// Command debug-parse parses SQL and prints the result, for working on the +// parser by hand. +// +// It reads the SQL from the command line, from a file, or from stdin, and +// prints one of: the AST, the token stream, the re-rendered SQL, or the +// error meyer would return. +// +// Usage: +// +// go run ./cmd/debug-parse 'SELECT 1' +// go run ./cmd/debug-parse -tokens 'SELECT 1' +// go run ./cmd/debug-parse -f query.sql +// echo 'SELECT 1' | go run ./cmd/debug-parse +// +// A parse error is printed with a caret under the offending byte, in the +// same wording SQLite uses. +package main + +import ( + "errors" + "flag" + "fmt" + "io" + "os" + "strings" + + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/internal/dump" + "github.com/sqlc-dev/meyer/lexer" + "github.com/sqlc-dev/meyer/parser" +) + +func main() { + var ( + file = flag.String("f", "", "read SQL from this file instead of the arguments") + tokens = flag.Bool("tokens", false, "print the token stream instead of the tree") + render = flag.Bool("render", false, "print the tree rendered back to SQL") + positions = flag.Bool("pos", true, "include byte spans in the tree") + ) + flag.Parse() + + src, err := readSource(*file, flag.Args()) + if err != nil { + fatal(err) + } + + if *tokens { + for _, t := range lexer.Lex(src) { + fmt.Printf("%5d-%-5d %-10s %q\n", t.Pos, t.End, t.Kind, t.Text) + } + return + } + + stmts, err := parser.ParseString(src) + if err != nil { + var pe *parser.Error + if errors.As(err, &pe) { + fmt.Fprint(os.Stderr, describe(src, pe)) + os.Exit(1) + } + fatal(err) + } + if *render { + fmt.Print(ast.Statements(stmts)) + return + } + fmt.Print(dump.Stmts(stmts, dump.Options{Positions: *positions, Raw: true})) +} + +func readSource(file string, args []string) (string, error) { + switch { + case file != "": + b, err := os.ReadFile(file) + return string(b), err + case len(args) > 0: + return strings.Join(args, " "), nil + default: + b, err := io.ReadAll(os.Stdin) + return string(b), err + } +} + +// describe renders an error the way a compiler would: the message, then the +// offending line with a caret under the byte SQLite would point at. +func describe(src string, pe *parser.Error) string { + line, col, text := locate(src, pe.Offset) + var b strings.Builder + fmt.Fprintf(&b, "%d:%d: %s\n", line, col, pe.Message) + if text != "" { + fmt.Fprintf(&b, " %s\n %s^\n", text, strings.Repeat(" ", col-1)) + } + return b.String() +} + +// locate converts a byte offset into a 1-based line and column plus the text +// of that line. Positions are stored as offsets precisely so that this +// conversion happens only when someone asks for it. +func locate(src string, offset int) (line, col int, text string) { + if offset < 0 || offset > len(src) { + return 0, 0, "" + } + line, start := 1, 0 + for i := 0; i < offset; i++ { + if src[i] == '\n' { + line++ + start = i + 1 + } + } + end := strings.IndexByte(src[start:], '\n') + if end < 0 { + end = len(src) + } else { + end += start + } + return line, offset - start + 1, src[start:end] +} + +func fatal(err error) { + fmt.Fprintln(os.Stderr, "debug-parse:", err) + os.Exit(1) +} diff --git a/lexer/lexer_test.go b/lexer/lexer_test.go new file mode 100644 index 0000000..1ec3610 --- /dev/null +++ b/lexer/lexer_test.go @@ -0,0 +1,348 @@ +// Tests for the tokenizer. The corpus can only see whether a statement is +// accepted, so the lexical detail SQLite's tokenize.c is full of — which +// byte ends a token, which quirk makes something illegal — has to be pinned +// here. The cases are transcribed from tokenize.c and from SQLite's +// test/tokenize.test. +package lexer + +import ( + "testing" + + "github.com/sqlc-dev/meyer/token" +) + +// kinds lexes src and returns the token kinds, EOF excluded. +func kinds(src string) []token.Kind { + toks := Lex(src) + out := make([]token.Kind, 0, len(toks)) + for _, t := range toks[:len(toks)-1] { + out = append(out, t.Kind) + } + return out +} + +// texts lexes src and returns the token texts, EOF excluded. +func texts(src string) []string { + toks := Lex(src) + out := make([]string, 0, len(toks)) + for _, t := range toks[:len(toks)-1] { + out = append(out, t.Text) + } + return out +} + +func TestOperators(t *testing.T) { + tests := []struct { + src string + want []token.Kind + }{ + {"+-*/%", []token.Kind{token.PLUS, token.MINUS, token.STAR, token.SLASH, token.REM}}, + {"= ==", []token.Kind{token.EQ, token.EQ}}, + {"!= <>", []token.Kind{token.NE, token.NE}}, + {"< <= << > >= >>", []token.Kind{ + token.LT, token.LE, token.LSHIFT, token.GT, token.GE, token.RSHIFT, + }}, + {"& | ||", []token.Kind{token.BITAND, token.BITOR, token.CONCAT}}, + {"~ , . ; ( )", []token.Kind{ + token.BITNOT, token.COMMA, token.DOT, token.SEMI, token.LP, token.RP, + }}, + {"-> ->>", []token.Kind{token.PTR, token.PTR}}, + // A lone "!" is an error token; "|" on its own is bitwise or. + {"!", []token.Kind{token.ILLEGAL}}, + {"!<", []token.Kind{token.ILLEGAL, token.LT}}, + // "--" starts a comment, so "a--b" is one identifier. + {"a--b", []token.Kind{token.ID}}, + {"a - -b", []token.Kind{token.ID, token.MINUS, token.MINUS, token.ID}}, + } + for _, tt := range tests { + if got := kinds(tt.src); !equalKinds(got, tt.want) { + t.Errorf("Lex(%q) = %v, want %v", tt.src, got, tt.want) + } + } +} + +func TestQuoting(t *testing.T) { + tests := []struct { + src string + kind token.Kind + text string + }{ + {`'abc'`, token.STRING, `'abc'`}, + {`''`, token.STRING, `''`}, + {`''''`, token.STRING, `''''`}, // one escaped quote + {`'a''b'`, token.STRING, `'a''b'`}, + {`"abc"`, token.ID, `"abc"`}, + {`"a""b"`, token.ID, `"a""b"`}, + {"`abc`", token.ID, "`abc`"}, + {"`a``b`", token.ID, "`a``b`"}, + {`[abc]`, token.ID, `[abc]`}, + {`[a"b]`, token.ID, `[a"b]`}, // no escaping inside [...] + // Unterminated quoting runs to the end of the input and is illegal. + {`'abc`, token.ILLEGAL, `'abc`}, + {`"abc`, token.ILLEGAL, `"abc`}, + {"`abc", token.ILLEGAL, "`abc"}, + {`[abc`, token.ILLEGAL, `[abc`}, + } + for _, tt := range tests { + toks := Lex(tt.src) + if len(toks) != 2 || toks[0].Kind != tt.kind || toks[0].Text != tt.text { + t.Errorf("Lex(%q) = %v, want one %v %q", tt.src, toks[:len(toks)-1], tt.kind, tt.text) + } + } +} + +func TestNumbers(t *testing.T) { + tests := []struct { + src string + kind token.Kind + }{ + {"0", token.INTEGER}, + {"123", token.INTEGER}, + {"0xff", token.INTEGER}, + {"0XFF", token.INTEGER}, + {"1.", token.FLOAT}, + {".5", token.FLOAT}, + {"1.5", token.FLOAT}, + {"1e6", token.FLOAT}, + {"1E+6", token.FLOAT}, + {"1e-6", token.FLOAT}, + {"1_000", token.QNUMBER}, + {"0x1_f", token.QNUMBER}, + {"1.0_1", token.QNUMBER}, + {"1e1_0", token.QNUMBER}, + // A trailing separator still lexes as a QNUMBER; it is the grammar + // action, sqlite3DequoteNumber, that rejects it. + {"1_", token.QNUMBER}, + // A number running into identifier characters is one illegal token, + // not a number followed by a name. + {"1abc", token.ILLEGAL}, + {"0xg", token.ILLEGAL}, // "0" then "xg", which IdChar swallows + {"1e", token.ILLEGAL}, // no exponent digits, so "e" swallows it + } + for _, tt := range tests { + got := kinds(tt.src) + if len(got) != 1 || got[0] != tt.kind { + t.Errorf("Lex(%q) = %v, want [%v]", tt.src, got, tt.kind) + } + } + // "0x" with no hex digits is not a hex literal: the "0" is an integer + // that then runs into "x", which makes the whole thing illegal. + if got := kinds("0x"); len(got) != 1 || got[0] != token.ILLEGAL { + t.Errorf(`Lex("0x") = %v, want [ILLEGAL]`, got) + } + // A float followed by a dot is two tokens: "1.5" then ".". + if got := texts("1.5.5"); len(got) != 2 || got[0] != "1.5" || got[1] != ".5" { + t.Errorf(`Lex("1.5.5") texts = %q, want ["1.5" ".5"]`, got) + } +} + +func TestBlobLiterals(t *testing.T) { + tests := []struct { + src string + kind token.Kind + }{ + {"x'01ab'", token.BLOB}, + {"X'01AB'", token.BLOB}, + {"x''", token.BLOB}, + {"x'0'", token.ILLEGAL}, // odd number of digits + {"x'0g'", token.ILLEGAL}, // not hex + {"x'01", token.ILLEGAL}, // unterminated + {"xyz", token.ID}, // x only starts a blob before a quote + } + for _, tt := range tests { + got := kinds(tt.src) + if len(got) != 1 || got[0] != tt.kind { + t.Errorf("Lex(%q) = %v, want [%v]", tt.src, got, tt.kind) + } + } +} + +func TestVariables(t *testing.T) { + tests := []struct { + src string + kind token.Kind + text string + }{ + {"?", token.VARIABLE, "?"}, + {"?12", token.VARIABLE, "?12"}, + {":name", token.VARIABLE, ":name"}, + {"@name", token.VARIABLE, "@name"}, + {"$name", token.VARIABLE, "$name"}, + {"#1", token.VARIABLE, "#1"}, + // SQLite's tokenizer accepts TCL-style suffixes on $ variables. + {"$foo::bar", token.VARIABLE, "$foo::bar"}, + {"$foo(baz)", token.VARIABLE, "$foo(baz)"}, + {"$foo::bar(baz)", token.VARIABLE, "$foo::bar(baz)"}, + // A sigil with no name is illegal, and an unclosed "(" suffix too. + {":", token.ILLEGAL, ":"}, + {"@", token.ILLEGAL, "@"}, + {"$", token.ILLEGAL, "$"}, + {"$foo(baz", token.ILLEGAL, "$foo(baz"}, + } + for _, tt := range tests { + toks := Lex(tt.src) + if len(toks) != 2 || toks[0].Kind != tt.kind || toks[0].Text != tt.text { + t.Errorf("Lex(%q) = %v, want one %v %q", tt.src, toks[:len(toks)-1], tt.kind, tt.text) + } + } + // "?" takes only digits, so "?a" is a bare "?" followed by a name. + if got := texts("?a"); len(got) != 2 || got[0] != "?" || got[1] != "a" { + t.Errorf(`Lex("?a") texts = %q, want ["?" "a"]`, got) + } +} + +func TestWhitespaceAndComments(t *testing.T) { + tests := []struct { + src string + want []string + }{ + {"a \t\n\r\f b", []string{"a", "b"}}, + {"a -- comment\nb", []string{"a", "b"}}, + {"a -- comment", []string{"a"}}, + {"a /* c */ b", []string{"a", "b"}}, + // An unterminated block comment is trailing whitespace, not an + // error; tokenize.test relies on this. + {"a /* unterminated", []string{"a"}}, + {"a /*/ b", []string{"a"}}, + // "/*" at the very end of input is a slash then a star, because + // tokenize.c requires a third byte before it commits to a comment. + {"a /*", []string{"a", "/", "*"}}, + // A UTF-8 BOM is whitespace, but only as a complete sequence. + {"\xef\xbb\xbfSELECT", []string{"SELECT"}}, + } + for _, tt := range tests { + if got := texts(tt.src); !equalStrings(got, tt.want) { + t.Errorf("Lex(%q) texts = %q, want %q", tt.src, got, tt.want) + } + } + // Vertical tab may continue a run of whitespace but may not start one: + // it is CC_ILLEGAL in aiClass[] yet passes sqlite3Isspace. + if got := kinds("\va"); len(got) != 2 || got[0] != token.ILLEGAL { + t.Errorf(`Lex("\va") = %v, want [ILLEGAL ID]`, got) + } + if got := kinds(" \va"); len(got) != 1 || got[0] != token.ID { + t.Errorf(`Lex(" \va") = %v, want [ID]`, got) + } +} + +func TestKeywordsAreCaseInsensitive(t *testing.T) { + for _, src := range []string{"select", "SELECT", "SeLeCt"} { + if got := kinds(src); len(got) != 1 || got[0] != token.SELECT { + t.Errorf("Lex(%q) = %v, want [SELECT]", src, got) + } + } + // A keyword that runs into an identifier character is an identifier. + for _, src := range []string{"select1", "select$", "selectx"} { + if got := kinds(src); len(got) != 1 || got[0] != token.ID { + t.Errorf("Lex(%q) = %v, want [ID]", src, got) + } + } +} + +// TestWindowKeywordResolution covers analyzeWindowKeyword, +// analyzeOverKeyword and analyzeFilterKeyword, the three keywords SQLite +// cannot resolve with %fallback because the answer depends on the +// neighbouring tokens rather than on the parser state. +func TestWindowKeywordResolution(t *testing.T) { + tests := []struct { + src string + at int // index of the token under test + want token.Kind + }{ + // WINDOW is a keyword only in "WINDOW AS". + {"SELECT 1 WINDOW w AS ()", 2, token.WINDOW}, + {"SELECT 1 window", 2, token.ID}, + {"SELECT 1 WINDOW w", 2, token.ID}, + {"SELECT 1 WINDOW w FROM t", 2, token.ID}, + {"SELECT window FROM t", 1, token.ID}, + // OVER is a keyword only after ")" and before "(" or a name. + {"SELECT f() OVER (ORDER BY a)", 4, token.OVER}, + {"SELECT f() OVER w", 4, token.OVER}, + {"SELECT a OVER", 2, token.ID}, + {"SELECT f() OVER", 4, token.ID}, + {"SELECT f() over FROM t", 4, token.ID}, + // FILTER is a keyword only between ")" and "(". + {"SELECT f() FILTER (WHERE a)", 4, token.FILTER}, + {"SELECT f() filter", 4, token.ID}, + {"SELECT filter (1)", 1, token.ID}, + } + for _, tt := range tests { + toks := Lex(tt.src) + if tt.at >= len(toks) { + t.Fatalf("Lex(%q) produced only %d tokens", tt.src, len(toks)) + } + if toks[tt.at].Kind != tt.want { + t.Errorf("Lex(%q)[%d] = %v %q, want %v", + tt.src, tt.at, toks[tt.at].Kind, toks[tt.at].Text, tt.want) + } + } +} + +func TestSpansCoverTheInput(t *testing.T) { + const src = "SELECT a /* c */ , 'x' -- done\nFROM t" + toks := Lex(src) + for i, tk := range toks { + if tk.Kind == token.EOF { + continue + } + if got := src[tk.Pos:tk.End]; got != tk.Text { + t.Errorf("token %d: span %d:%d is %q, but Text is %q", i, tk.Pos, tk.End, got, tk.Text) + } + if i > 0 && tk.Pos < toks[i-1].End { + t.Errorf("token %d starts at %d, before the previous token ended at %d", + i, tk.Pos, toks[i-1].End) + } + } + last := toks[len(toks)-1] + if last.Kind != token.EOF || last.Pos != len(src) { + t.Errorf("last token = %v at %d, want EOF at %d", last.Kind, last.Pos, len(src)) + } +} + +// A NUL byte ends the input, because SQLite's tokenizer walks a +// NUL-terminated buffer. +func TestNulTerminatesInput(t *testing.T) { + toks := Lex("SELECT\x00 1") + if len(toks) != 2 || toks[0].Kind != token.SELECT || toks[1].Kind != token.EOF { + t.Errorf("Lex with an embedded NUL = %v, want [SELECT EOF]", toks) + } + if toks[1].Pos != 6 { + t.Errorf("EOF at %d, want 6", toks[1].Pos) + } +} + +func TestLexNeverLoops(t *testing.T) { + // Every byte value must produce progress, on its own and after a name. + for b := 0; b < 256; b++ { + for _, src := range []string{string(rune(b)), "a" + string(rune(b)), string(rune(b)) + "a"} { + toks := Lex(src) + if len(toks) == 0 || toks[len(toks)-1].Kind != token.EOF { + t.Fatalf("Lex(%q) did not terminate cleanly: %v", src, toks) + } + } + } +} + +func equalKinds(a, b []token.Kind) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} + +func equalStrings(a, b []string) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} diff --git a/parser/bench_test.go b/parser/bench_test.go new file mode 100644 index 0000000..255b0e1 --- /dev/null +++ b/parser/bench_test.go @@ -0,0 +1,112 @@ +package parser_test + +import ( + "path/filepath" + "testing" + + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/internal/testfile" + "github.com/sqlc-dev/meyer/lexer" + "github.com/sqlc-dev/meyer/parser" +) + +// The benchmark inputs are the shapes sqlc actually sends through a parser: +// a short lookup, a join with predicates, a schema definition, and a query +// big enough that per-token costs dominate. +var benchInputs = []struct{ name, sql string }{ + {"Simple", `SELECT id, name FROM users WHERE id = ?`}, + {"Join", ` +SELECT u.id, u.name, count(o.id) AS orders + FROM users u + LEFT JOIN orders o ON o.user_id = u.id AND o.created_at > :since + WHERE u.active AND u.name LIKE ?1 ESCAPE '\' + GROUP BY u.id, u.name +HAVING count(o.id) > 0 + ORDER BY orders DESC NULLS LAST + LIMIT 10 OFFSET 20`}, + {"CreateTable", ` +CREATE TABLE orders ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, + total NUMERIC(10, 2) NOT NULL DEFAULT 0 CHECK (total >= 0), + status TEXT NOT NULL COLLATE nocase DEFAULT 'new', + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + summary TEXT GENERATED ALWAYS AS (status || ' ' || total) STORED, + UNIQUE (user_id, created_at) ON CONFLICT REPLACE +) STRICT`}, + {"Window", ` +WITH RECURSIVE months(m) AS ( + SELECT 1 UNION ALL SELECT m + 1 FROM months WHERE m < 12 +) +SELECT m, + sum(total) OVER w AS running, + row_number() OVER (PARTITION BY status ORDER BY created_at) AS n + FROM orders JOIN months ON months.m = cast(strftime('%m', created_at) AS INTEGER) +WINDOW w AS (ORDER BY created_at ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + ORDER BY m`}, +} + +func BenchmarkLex(b *testing.B) { + for _, in := range benchInputs { + b.Run(in.name, func(b *testing.B) { + b.SetBytes(int64(len(in.sql))) + for b.Loop() { + lexer.Lex(in.sql) + } + }) + } +} + +func BenchmarkParse(b *testing.B) { + for _, in := range benchInputs { + b.Run(in.name, func(b *testing.B) { + b.SetBytes(int64(len(in.sql))) + for b.Loop() { + if _, err := parser.ParseString(in.sql); err != nil { + b.Fatal(err) + } + } + }) + } +} + +func BenchmarkRender(b *testing.B) { + for _, in := range benchInputs { + stmts, err := parser.ParseString(in.sql) + if err != nil { + b.Fatal(err) + } + b.Run(in.name, func(b *testing.B) { + b.SetBytes(int64(len(in.sql))) + for b.Loop() { + ast.Statements(stmts) + } + }) + } +} + +// BenchmarkCorpus parses every accepting case of one corpus file, which is +// the closest thing here to a realistic mixed workload. +func BenchmarkCorpus(b *testing.B) { + cases, err := testfile.Read(filepath.Join("testdata", "select1.test")) + if err != nil { + b.Skipf("%v", err) + } + var scripts []string + var n int + for _, c := range cases { + if _, err := parser.ParseString(c.SQL); err != nil { + continue + } + scripts = append(scripts, c.SQL) + n += len(c.SQL) + } + b.SetBytes(int64(n)) + for b.Loop() { + for _, src := range scripts { + if _, err := parser.ParseString(src); err != nil { + b.Fatal(err) + } + } + } +} diff --git a/parser/fuzz_test.go b/parser/fuzz_test.go new file mode 100644 index 0000000..fdc441f --- /dev/null +++ b/parser/fuzz_test.go @@ -0,0 +1,149 @@ +package parser_test + +import ( + "errors" + "path/filepath" + "strings" + "testing" + + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/internal/dump" + "github.com/sqlc-dev/meyer/internal/testfile" + "github.com/sqlc-dev/meyer/parser" +) + +// adversarialSeeds are inputs chosen to break a hand-written parser rather +// than to be valid SQL: unterminated everything, nesting past any sane +// limit, and the lexical corners of tokenize.c. +var adversarialSeeds = []string{ + "", + ";", + ";;;;", + "\x00", + "\v", + "SELECT", + "SELECT 'unterminated", + `SELECT "unterminated`, + "SELECT `unterminated", + "SELECT [unterminated", + "SELECT x'0102", + "SELECT x'0g'", + "SELECT 1_", + "SELECT 1_x", + "SELECT 0x", + "SELECT 1e", + "SELECT .5e+", + "SELECT $", + "SELECT $a(", + "SELECT #1", + "SELECT ?99999999999999999999", + "/* unterminated", + "-- unterminated", + "SELECT 1 /*", + "\xef\xbb\xbfSELECT 1", + "\xff\xfe\x00\x00", + "SELECT 1 !", + "SELECT 1 |", + "CREATE TABLE t(", + "CREATE TRIGGER t BEGIN", + "WITH", + "INSERT INTO t", + "SELECT * FROM t WHERE a IN", + "SELECT a NOT", + "SELECT CASE END", + "SELECT sum(a) OVER", + "SELECT sum(a) FILTER", + "VALUES", + "PRAGMA", + "EXPLAIN", + "EXPLAIN QUERY", +} + +// FuzzParse asserts the invariants that must hold for arbitrary bytes: +// parsing terminates without panicking, a rejection is always a +// *parser.Error, and anything accepted survives the round trip. The last of +// these turns the fuzzer into a search for renderer and tree bugs, not just +// for crashes. +func FuzzParse(f *testing.F) { + for _, s := range adversarialSeeds { + f.Add(s) + } + for _, s := range corpusSeeds(f) { + f.Add(s) + } + f.Fuzz(func(t *testing.T, src string) { + stmts, err := parser.ParseString(src) + if err != nil { + var pe *parser.Error + if !errors.As(err, &pe) { + t.Fatalf("rejection is not a *parser.Error: %T %v", err, err) + } + if pe.Message == "" { + t.Fatal("rejection with an empty message") + } + if pe.Offset < 0 || pe.Offset > len(src) { + t.Fatalf("error offset %d is outside the input (%d bytes)", pe.Offset, len(src)) + } + return + } + rendered := ast.Statements(stmts) + again, err := parser.ParseString(rendered) + if err != nil { + t.Fatalf("rendered SQL does not parse: %v\n input: %q\n rendered: %q", + err, src, rendered) + } + if want, got := dump.Stmts(stmts, dump.Structure), dump.Stmts(again, dump.Structure); want != got { + t.Fatalf("round trip changed the tree\n input: %q\n rendered: %q\n%s", + src, rendered, firstDiff(want, got)) + } + }) +} + +// corpusSeeds samples the vendored corpus so the fuzzer starts from real +// SQL as well as from broken SQL. Every case would be too many seeds to run +// on each -short invocation, so this takes a deterministic slice. +func corpusSeeds(f *testing.F) []string { + f.Helper() + paths, err := filepath.Glob(filepath.Join("testdata", "*.test")) + if err != nil { + f.Fatal(err) + } + var out []string + for _, path := range paths { + cases, err := testfile.Read(path) + if err != nil { + f.Fatal(err) + } + for i := 0; i < len(cases); i += 25 { + out = append(out, cases[i].SQL) + } + } + return out +} + +// TestRecursionLimit pins the behaviour that made the limit necessary. +// Running out of goroutine stack is a fatal runtime error that no caller can +// recover from, so deep nesting has to be turned into an ordinary rejection. +func TestRecursionLimit(t *testing.T) { + const n = 200000 + tests := []struct{ name, sql string }{ + {"parens", "SELECT " + strings.Repeat("(", n) + "1" + strings.Repeat(")", n)}, + {"not", "SELECT " + strings.Repeat("NOT ", n) + "1"}, + {"subquery", strings.Repeat("SELECT (", n) + "1" + strings.Repeat(")", n)}, + {"case", "SELECT " + strings.Repeat("CASE WHEN 1 THEN ", n) + "1" + strings.Repeat(" END", n)}, + {"from", "SELECT * FROM " + strings.Repeat("(", n) + "t" + strings.Repeat(")", n)}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _, err := parser.ParseString(tt.sql) + if err == nil || err.Error() != "Recursion limit" { + t.Fatalf("got %v, want a Recursion limit rejection", err) + } + }) + } + // A long flat expression is not nesting and must still be accepted: + // left-associative operators unwind before the next one is consumed. + if _, err := parser.ParseString("SELECT " + strings.Repeat("1+", n) + "1"); err != nil { + t.Fatalf("flat expression rejected: %v", err) + } +} diff --git a/parser/parse_expr.go b/parser/parse_expr.go index 75e3ca4..eb1102e 100644 --- a/parser/parse_expr.go +++ b/parser/parse_expr.go @@ -40,6 +40,8 @@ const ( // parseExpr parses an expression, consuming operators of precedence min and // above. func (p *parser) parseExpr(min int) ast.Expr { + p.enter() + defer p.leave() return p.parseOperators(p.parsePrefix(), min) } diff --git a/parser/parse_select.go b/parser/parse_select.go index 34ee632..bcbf63f 100644 --- a/parser/parse_select.go +++ b/parser/parse_select.go @@ -56,6 +56,8 @@ func (p *parser) parseSelect() *ast.SelectStmt { // selectnowith ::= selectnowith multiselect_op oneselect. // multiselect_op ::= UNION. / UNION ALL. / EXCEPT|INTERSECT. func (p *parser) parseSelectNoWith() *ast.SelectStmt { + p.enter() + defer p.leave() start := p.cur().Pos n := &ast.SelectStmt{Cores: []ast.SelectCore{p.parseOneSelect()}} for { @@ -270,6 +272,8 @@ func joinTypeOf(words []string) ast.JoinType { // seltablist ::= stl_prefix LP select RP as on_using. // seltablist ::= stl_prefix LP seltablist RP as on_using. func (p *parser) parseTableRef(join *ast.JoinOperator) *ast.TableRef { + p.enter() + defer p.leave() start := p.cur().Pos if join != nil { start = join.Pos() diff --git a/parser/parser.go b/parser/parser.go index b82a015..a6b4db8 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -49,7 +49,8 @@ func Parse(ctx context.Context, r io.Reader) ([]ast.Stmt, error) { // ParseString parses a complete SQL script. func ParseString(src string) (stmts []ast.Stmt, err error) { - p := newParser(src) + // newParser is inside the recover: it reads the first token, and an + // input that starts with an illegal one fails there. defer func() { if r := recover(); r != nil { b, ok := r.(bail) @@ -59,7 +60,7 @@ func ParseString(src string) (stmts []ast.Stmt, err error) { stmts, err = nil, b.err } }() - return p.parseScript(), nil + return newParser(src).parseScript(), nil } // ParseStatement parses exactly one statement and rejects trailing input. @@ -76,7 +77,6 @@ func ParseStatement(src string) (ast.Stmt, error) { // ParseExpr parses a single expression. It exists for tests and tooling. func ParseExpr(src string) (expr ast.Expr, err error) { - p := newParser(src) defer func() { if r := recover(); r != nil { b, ok := r.(bail) @@ -86,6 +86,7 @@ func ParseExpr(src string) (expr ast.Expr, err error) { expr, err = nil, b.err } }() + p := newParser(src) e := p.parseExpr(precLowest) if !p.at(token.EOF) { p.syntaxError() @@ -103,8 +104,32 @@ type parser struct { nVar int // bind parameters seen so far varNums map[string]int // named parameters already assigned a number + + depth int // current nesting depth, guarded by enter/leave } +// maxDepth bounds recursion. Unlike SQLite, whose LALR stack is heap +// allocated and simply stops growing, meyer recurses on the goroutine +// stack, where running out is a fatal, unrecoverable runtime error rather +// than something a caller could handle. The limit is far above anything +// SQLite itself accepts -- it gives up at a nesting of roughly 2,500 -- so +// in practice this only fires on input SQLite rejects too. The deepest any +// case in the vendored corpus reaches is 32. +const maxDepth = 10000 + +// enter and leave bracket the recursive descent's cycles: expressions, +// selects and FROM items. Nothing else in the grammar can nest without +// passing through one of them. +func (p *parser) enter() { + p.depth++ + if p.depth > maxDepth { + // SQLite's %stack_overflow block reports this same message. + p.fail("Recursion limit", p.cur().Pos) + } +} + +func (p *parser) leave() { p.depth-- } + func newParser(src string) *parser { p := &parser{src: src, toks: lexer.Lex(src), varNums: map[string]int{}} p.checkIllegal() diff --git a/token/keywords.go b/token/keywords.go index 7ea23fe..07ee9a0 100644 --- a/token/keywords.go +++ b/token/keywords.go @@ -1,7 +1,5 @@ package token -import "strings" - // keywords maps the upper-case spelling of every SQLite keyword to its token // kind. Transcribed from aKeywordTable[] in tool/mkkeywordhash.c, resolved // for the feature set of the pinned build (see parser/testdata/README.md): @@ -204,10 +202,28 @@ var fallback = map[Kind]bool{ IF: true, } +// maxKeywordLen is the length of CURRENT_TIMESTAMP, the longest keyword. +const maxKeywordLen = 17 + // Lookup returns the keyword kind for an identifier spelling, or ID if it is // not a keyword. Matching is ASCII case-insensitive, as in keywordCode(). +// +// The upper-casing is done into a stack array rather than with +// strings.ToUpper, because this runs once per identifier token and the +// compiler turns m[string(b[:n])] into an allocation-free lookup. func Lookup(name string) Kind { - if k, ok := keywords[strings.ToUpper(name)]; ok { + if len(name) > maxKeywordLen { + return ID + } + var buf [maxKeywordLen]byte + for i := 0; i < len(name); i++ { + c := name[i] + if c >= 'a' && c <= 'z' { + c -= 'a' - 'A' + } + buf[i] = c + } + if k, ok := keywords[string(buf[:len(name)])]; ok { return k } return ID From 0fb8a5986c337f429e4690d7c75a53fbe5e1ba13 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 19:54:23 +0000 Subject: [PATCH 06/23] Vendor the reference grammar, give errors a position, refresh the docs - internal/reference holds upstream parse.y and tokenize.c so a comment naming a grammar rule can be read without a SQLite checkout. The directory has no Go file on purpose: nothing in the repo processes them, and "./..." cannot reach a directory that is not a package. - parser.Error gains the SQL it failed on, so Error() can render "line:column: message" the way editors expect. Message still holds SQLite's wording byte for byte and is what the corpus compares; the exported LineCol does the conversion, which is the whole reason spans are stored as byte offsets. - README covers usage, the three layers of conformance and the current status; PLAN.md's milestone 2 records that the corpus ended up as the whole pinned test suite rather than a starter set. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- PLAN.md | 9 +- README.md | 61 +- cmd/debug-parse/main.go | 37 +- internal/reference/README.md | 27 + internal/reference/parse.y | 2163 +++++++++++++++++++++++++++++++++ internal/reference/tokenize.c | 899 ++++++++++++++ parser/fuzz_test.go | 3 +- parser/parser.go | 48 +- 8 files changed, 3200 insertions(+), 47 deletions(-) create mode 100644 internal/reference/README.md create mode 100644 internal/reference/parse.y create mode 100644 internal/reference/tokenize.c diff --git a/PLAN.md b/PLAN.md index d80876f..8fa6f0b 100644 --- a/PLAN.md +++ b/PLAN.md @@ -364,10 +364,11 @@ meyer/ fallback tables), lexer with its own unit tests transcribed from `tokenize.test`, AST skeleton, `parser.Parse` returning not-implemented errors, corpus format + harness with everything `todo`. -2. **Corpus** — `cmd/regenerate` extraction + oracle; vendor the starter set - (`parser1`, `tokenize`, `keyword1`, `select*`, `expr*`, `e_*`, `with*`, - `window*`, `trigger1`, `upsert*`, `returning1`, `altertab*`, `alter*`, - plus the syntax-error negative subset). +2. **Corpus** — `cmd/regenerate` extraction + oracle. *(Done, but wider than + planned: rather than vendoring a hand-picked starter set, the tool takes + every `test/*.test` script in the pinned tree. That costs 4.4 MB and 943 + files, and yields 20,971 cases instead of 4,685, with no curation to redo + when the pin advances.)* 3. **Expressions + SELECT** — largest single chunk: precedence ladder, subqueries, CTEs, compound selects, VALUES, window functions, FROM/joins. 4. **DML** — INSERT (+upsert/returning/default values), UPDATE (+from), diff --git a/README.md b/README.md index e116f94..9477780 100644 --- a/README.md +++ b/README.md @@ -10,23 +10,66 @@ meyer is being built to replace the ANTLR-generated SQLite parser in [sqlc](https://github.com/sqlc-dev/sqlc). See [PLAN.md](PLAN.md) for the architecture and [CLAUDE.md](CLAUDE.md) for the development workflow. +## Usage + +```go +stmts, err := parser.Parse(ctx, strings.NewReader("SELECT id FROM users WHERE id = ?")) +``` + +`ParseString` and `ParseStatement` take a string; `ParseExpr` parses a single +expression. A rejected input returns a `*parser.Error` carrying SQLite's +exact message and the byte offset of the fault. + +Every node embeds `ast.Span`, so `Pos()` and `End()` give byte offsets into +the original input — sqlc slices the source with them to find `-- name:` +comments and to report errors, so they are load-bearing rather than +diagnostic. + +To see what the parser did with something: + +```sh +go run ./cmd/debug-parse 'SELECT sum(x) OVER w FROM t' # the tree +go run ./cmd/debug-parse -tokens 'SELECT 1' # the token stream +go run ./cmd/debug-parse -render -f query.sql # re-rendered SQL +``` + ## Status -Under construction: the test corpus and tooling exist; the parser itself is -being implemented against them. +The parser covers the whole grammar of the pinned SQLite release and passes +the full corpus: **20,971 of 20,971 cases**, extracted from every test script +in SQLite's own test suite. + +Still to come, from [PLAN.md](PLAN.md): the sqlc integration itself, and the +optional sqllogictest smoke gate. ## Conformance -meyer is tested against SQL extracted from SQLite's own test suite, with -expectations produced by a pinned build of SQLite itself: meyer must accept -exactly the statements SQLite's parser accepts, and reproduce SQLite's exact -syntax-error messages. See [parser/testdata/README.md](parser/testdata/README.md) -for provenance and the pinned version. +There is no upstream parse-tree oracle — SQLite cannot dump its parse tree — +so conformance is defined three ways, in decreasing order of authority: + +1. **Accept/reject against SQLite itself.** SQL is extracted from SQLite's + test suite and run through a pinned SQLite build. meyer must accept + exactly what SQLite's parser accepts, and on rejection produce the + identical message and byte offset. See + [parser/testdata/README.md](parser/testdata/README.md) for provenance and + the pinned version. +2. **A round-trip property.** Every accepting case is rendered back to SQL, + re-parsed, and the two trees compared. This catches dropped clauses and + mis-associated operators, which accept/reject cannot see. +3. **AST snapshots.** A hand-written tour of the node set under + `parser/testdata/ast`, reviewed in diffs. These are meyer's own goldens + and never outrank the oracle. + +Plus a fuzz target asserting that arbitrary bytes terminate without +panicking, that a rejection is always a `*parser.Error`, and that anything +accepted survives the round trip. ## Acknowledgments -SQLite and its test suite are public domain — https://sqlite.org/copyright.html. -This project's grammar and test corpus derive from them. +SQLite and its test suite are public domain — +https://sqlite.org/copyright.html. meyer's grammar and test corpus derive +from them; `internal/reference/` keeps the upstream `parse.y` and +`tokenize.c` alongside the port, as documentation. ## License diff --git a/cmd/debug-parse/main.go b/cmd/debug-parse/main.go index 3166e2e..580a101 100644 --- a/cmd/debug-parse/main.go +++ b/cmd/debug-parse/main.go @@ -80,39 +80,28 @@ func readSource(file string, args []string) (string, error) { } } -// describe renders an error the way a compiler would: the message, then the -// offending line with a caret under the byte SQLite would point at. +// describe renders an error the way a compiler would: the message with its +// position, then the offending line with a caret under the byte SQLite would +// point at. func describe(src string, pe *parser.Error) string { - line, col, text := locate(src, pe.Offset) var b strings.Builder - fmt.Fprintf(&b, "%d:%d: %s\n", line, col, pe.Message) - if text != "" { - fmt.Fprintf(&b, " %s\n %s^\n", text, strings.Repeat(" ", col-1)) + fmt.Fprintln(&b, pe) + if pe.Offset < 0 || pe.Offset > len(src) { + return b.String() } + _, col := parser.LineCol(src, pe.Offset) + fmt.Fprintf(&b, " %s\n %s^\n", lineAt(src, pe.Offset), strings.Repeat(" ", col-1)) return b.String() } -// locate converts a byte offset into a 1-based line and column plus the text -// of that line. Positions are stored as offsets precisely so that this -// conversion happens only when someone asks for it. -func locate(src string, offset int) (line, col int, text string) { - if offset < 0 || offset > len(src) { - return 0, 0, "" - } - line, start := 1, 0 - for i := 0; i < offset; i++ { - if src[i] == '\n' { - line++ - start = i + 1 - } - } +// lineAt returns the text of the line containing offset. +func lineAt(src string, offset int) string { + start := strings.LastIndexByte(src[:offset], '\n') + 1 end := strings.IndexByte(src[start:], '\n') if end < 0 { - end = len(src) - } else { - end += start + return src[start:] } - return line, offset - start + 1, src[start:end] + return src[start : start+end] } func fatal(err error) { diff --git a/internal/reference/README.md b/internal/reference/README.md new file mode 100644 index 0000000..48547c6 --- /dev/null +++ b/internal/reference/README.md @@ -0,0 +1,27 @@ +# Vendored SQLite sources (documentation only) + +These files are the grammar and tokenizer meyer is a port of, kept here so +that the `parse.y` rule named in a parser comment can be read without a +SQLite checkout. **Nothing in the repository processes them**: no parser +generator runs, no build step reads them, and no test depends on them. They +are reference material for humans, and the directory deliberately contains +no Go file, so it is not a package and `./...` does not reach it. + +| file | upstream path | +|---|---| +| `parse.y` | `src/parse.y` | +| `tokenize.c` | `src/tokenize.c` | + +Both come from SQLite 3.53.4, the release pinned in +`cmd/regenerate-parse/main.go` and recorded in +`parser/testdata/README.md`. When the pin advances, replace them. + +SQLite's source code is in the **public domain**. The authors' statement, +reproduced from the header of these files: + +> The author disclaims copyright to this source code. In place of a legal +> notice, here is a blessing: +> +> May you do good and not evil. +> May you find forgiveness for yourself and forgive others. +> May you share freely, never taking more than you give. diff --git a/internal/reference/parse.y b/internal/reference/parse.y new file mode 100644 index 0000000..93ebf5c --- /dev/null +++ b/internal/reference/parse.y @@ -0,0 +1,2163 @@ +%include { +/* +** 2001-09-15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains SQLite's SQL parser. +** +** The canonical source code to this file ("parse.y") is a Lemon grammar +** file that specifies the input grammar and actions to take while parsing. +** That input file is processed by Lemon to generate a C-language +** implementation of a parser for the given grammar. You might be reading +** this comment as part of the translated C-code. Edits should be made +** to the original parse.y sources. +*/ +} + +// Setup for the parser stack +%stack_size 50 // Initial stack size +%stack_size_limit parserStackSizeLimit // Function returning max stack size +%realloc parserStackRealloc // realloc() for the stack +%free parserStackFree // free() for the stack + +// All token codes are small integers with #defines that begin with "TK_" +%token_prefix TK_ + +// The type of the data attached to each token is Token. This is also the +// default type for non-terminals. +// +%token_type {Token} +%default_type {Token} + +// An extra argument to the constructor for the parser, which is available +// to all actions. +%extra_context {Parse *pParse} + +// This code runs whenever there is a syntax error +// +%syntax_error { + UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */ + if( TOKEN.z[0] ){ + parserSyntaxError(pParse, &TOKEN); + }else{ + sqlite3ErrorMsg(pParse, "incomplete input"); + } +} +%stack_overflow { + if( pParse->nErr==0 ) sqlite3ErrorMsg(pParse, "Recursion limit"); +} + +// The name of the generated procedure that implements the parser +// is as follows: +%name sqlite3Parser + +// The following text is included near the beginning of the C source +// code file that implements the parser. +// +%include { +#include "sqliteInt.h" + +/* +** Verify that the pParse->isCreate field is set +*/ +#define ASSERT_IS_CREATE assert(pParse->isCreate) + +/* +** Disable all error recovery processing in the parser push-down +** automaton. +*/ +#define YYNOERRORRECOVERY 1 + +/* +** Make yytestcase() the same as testcase() +*/ +#define yytestcase(X) testcase(X) + +/* +** Indicate that sqlite3ParserFree() will never be called with a null +** pointer. +*/ +#define YYPARSEFREENEVERNULL 1 + +/* +** In the amalgamation, the parse.c file generated by lemon and the +** tokenize.c file are concatenated. In that case, sqlite3RunParser() +** has access to the the size of the yyParser object and so the parser +** engine can be allocated from stack. In that case, only the +** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked +** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be +** omitted. +*/ +#ifdef SQLITE_AMALGAMATION +# define sqlite3Parser_ENGINEALWAYSONSTACK 1 +#endif + +/* +** Alternative datatype for the argument to the malloc() routine passed +** into sqlite3ParserAlloc(). The default is size_t. +*/ +#define YYMALLOCARGTYPE u64 + +/* +** An instance of the following structure describes the event of a +** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT, +** TK_DELETE, or TK_INSTEAD. If the event is of the form +** +** UPDATE ON (a,b,c) +** +** Then the "b" IdList records the list "a,b,c". +*/ +struct TrigEvent { int a; IdList * b; }; + +struct FrameBound { int eType; Expr *pExpr; }; + +/* +** Generate a syntax error +*/ +static void parserSyntaxError(Parse *pParse, Token *p){ + sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", p); +} + +/* +** Disable lookaside memory allocation for objects that might be +** shared across database connections. +*/ +static void disableLookaside(Parse *pParse){ + sqlite3 *db = pParse->db; + pParse->disableLookaside++; +#ifdef SQLITE_DEBUG + pParse->isCreate = 1; +#endif + memset(&pParse->u1.cr, 0, sizeof(pParse->u1.cr)); + DisableLookaside; +} + +#if !defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) \ + && defined(SQLITE_UDL_CAPABLE_PARSER) +/* +** Issue an error message if an ORDER BY or LIMIT clause occurs on an +** UPDATE or DELETE statement. +*/ +static void updateDeleteLimitError( + Parse *pParse, + ExprList *pOrderBy, + Expr *pLimit +){ + if( pOrderBy ){ + sqlite3ErrorMsg(pParse, "syntax error near \"ORDER BY\""); + }else{ + sqlite3ErrorMsg(pParse, "syntax error near \"LIMIT\""); + } + sqlite3ExprListDelete(pParse->db, pOrderBy); + sqlite3ExprDelete(pParse->db, pLimit); +} +#endif /* SQLITE_ENABLE_UPDATE_DELETE_LIMIT */ + +} // end %include + +// Input is a single SQL command +input ::= cmdlist. +cmdlist ::= cmdlist ecmd. +cmdlist ::= ecmd. +ecmd ::= SEMI. +ecmd ::= cmdx SEMI. +%ifndef SQLITE_OMIT_EXPLAIN +ecmd ::= explain cmdx SEMI. {NEVER-REDUCE} +explain ::= EXPLAIN. { if( pParse->pReprepare==0 ) pParse->explain = 1; } +explain ::= EXPLAIN QUERY PLAN. { if( pParse->pReprepare==0 ) pParse->explain = 2; } +%endif SQLITE_OMIT_EXPLAIN +cmdx ::= cmd. { sqlite3FinishCoding(pParse); } + +///////////////////// Begin and end transactions. //////////////////////////// +// + +cmd ::= BEGIN transtype(Y) trans_opt. {sqlite3BeginTransaction(pParse, Y);} +trans_opt ::= . +trans_opt ::= TRANSACTION. +trans_opt ::= TRANSACTION nm. +%type transtype {int} +transtype(A) ::= . {A = TK_DEFERRED;} +transtype(A) ::= DEFERRED(X). {A = @X; /*A-overwrites-X*/} +transtype(A) ::= IMMEDIATE(X). {A = @X; /*A-overwrites-X*/} +transtype(A) ::= EXCLUSIVE(X). {A = @X; /*A-overwrites-X*/} +cmd ::= COMMIT|END(X) trans_opt. {sqlite3EndTransaction(pParse,@X);} +cmd ::= ROLLBACK(X) trans_opt. {sqlite3EndTransaction(pParse,@X);} + +savepoint_opt ::= SAVEPOINT. +savepoint_opt ::= . +cmd ::= SAVEPOINT nm(X). { + sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &X); +} +cmd ::= RELEASE savepoint_opt nm(X). { + sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &X); +} +cmd ::= ROLLBACK trans_opt TO savepoint_opt nm(X). { + sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &X); +} + +///////////////////// The CREATE TABLE statement //////////////////////////// +// +cmd ::= create_table create_table_args. +create_table ::= createkw temp(T) TABLE ifnotexists(E) nm(Y) dbnm(Z). { + sqlite3StartTable(pParse,&Y,&Z,T,0,0,E); +} +createkw(A) ::= CREATE(A). { + disableLookaside(pParse); +} + +%type ifnotexists {int} +ifnotexists(A) ::= . {A = 0;} +ifnotexists(A) ::= IF NOT EXISTS. {A = 1;} +%type temp {int} +%ifndef SQLITE_OMIT_TEMPDB +temp(A) ::= TEMP. {A = pParse->db->init.busy==0;} +%endif SQLITE_OMIT_TEMPDB +temp(A) ::= . {A = 0;} +create_table_args ::= LP columnlist conslist_opt(X) RP(E) table_option_set(F). { + sqlite3EndTable(pParse,&X,&E,F,0); +} +create_table_args ::= AS select(S). { + sqlite3EndTable(pParse,0,0,0,S); + sqlite3SelectDelete(pParse->db, S); +} +%type table_option_set {u32} +%type table_option {u32} +table_option_set(A) ::= . {A = 0;} +table_option_set(A) ::= table_option(A). +table_option_set(A) ::= table_option_set(X) COMMA table_option(Y). {A = X|Y;} +table_option(A) ::= WITHOUT nm(X). { + if( X.n==5 && sqlite3_strnicmp(X.z,"rowid",5)==0 ){ + A = TF_WithoutRowid | TF_NoVisibleRowid; + }else{ + A = 0; + sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z); + } +} +table_option(A) ::= nm(X). { + if( X.n==6 && sqlite3_strnicmp(X.z,"strict",6)==0 ){ + A = TF_Strict; + }else{ + A = 0; + sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z); + } +} +columnlist ::= columnlist COMMA columnname carglist. +columnlist ::= columnname carglist. +columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,A,Y);} + +// Declare some tokens early in order to influence their values, to +// improve performance and reduce the executable size. The goal here is +// to get the "jump" operations in ISNULL through ESCAPE to have numeric +// values that are early enough so that all jump operations are clustered +// at the beginning. Also, operators like NE and EQ need to be adjacent, +// and all of the comparison operators need to be clustered together. +// Various assert() statements throughout the code enforce these restrictions. +// +%token ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST. +%token CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL. +%token OR AND NOT IS ISNOT MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ. +%token GT LE LT GE ESCAPE. + +// The following directive causes tokens ABORT, AFTER, ASC, etc. to +// fallback to ID if they will not parse as their original value. +// This obviates the need for the "id" nonterminal. +// +%fallback ID + ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW + CONFLICT DATABASE DEFERRED DESC DETACH DO + EACH END EXCLUSIVE EXPLAIN FAIL FOR + IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN + QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW ROWS + ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT + NULLS FIRST LAST +%ifdef SQLITE_OMIT_COMPOUND_SELECT + EXCEPT INTERSECT UNION +%endif SQLITE_OMIT_COMPOUND_SELECT +%ifndef SQLITE_OMIT_WINDOWFUNC + CURRENT FOLLOWING PARTITION PRECEDING RANGE UNBOUNDED + EXCLUDE GROUPS OTHERS TIES +%endif SQLITE_OMIT_WINDOWFUNC +%ifdef SQLITE_ENABLE_ORDERED_SET_AGGREGATES + WITHIN +%endif SQLITE_ENABLE_ORDERED_SET_AGGREGATES +%ifndef SQLITE_OMIT_GENERATED_COLUMNS + GENERATED ALWAYS +%endif + MATERIALIZED + REINDEX RENAME CTIME_KW IF + . +%wildcard ANY. + +// Define operator precedence early so that this is the first occurrence +// of the operator tokens in the grammar. Keeping the operators together +// causes them to be assigned integer values that are close together, +// which keeps parser tables smaller. +// +// The token values assigned to these symbols is determined by the order +// in which lemon first sees them. It must be the case that ISNULL/NOTNULL, +// NE/EQ, GT/LE, and GE/LT are separated by only a single value. See +// the sqlite3ExprIfFalse() routine for additional information on this +// constraint. +// +%left OR. +%left AND. +%right NOT. +%left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ. +%left GT LE LT GE. +%right ESCAPE. +%left BITAND BITOR LSHIFT RSHIFT. +%left PLUS MINUS. +%left STAR SLASH REM. +%left CONCAT PTR. +%left COLLATE. +%right BITNOT. +%nonassoc ON. + +// An IDENTIFIER can be a generic identifier, or one of several +// keywords. Any non-standard keyword can also be an identifier. +// +%token_class id ID|INDEXED. + +// And "ids" is an identifier-or-string. +// +%token_class ids ID|STRING. + +// An identifier or a join-keyword +// +%token_class idj ID|INDEXED|JOIN_KW. + +// The name of a column or table can be any of the following: +// +%type nm {Token} +nm(A) ::= idj(A). +nm(A) ::= STRING(A). + +// A typetoken is really zero or more tokens that form a type name such +// as can be found after the column name in a CREATE TABLE statement. +// Multiple tokens are concatenated to form the value of the typetoken. +// +%type typetoken {Token} +typetoken(A) ::= . {A.n = 0; A.z = 0;} +typetoken(A) ::= typename(A). +typetoken(A) ::= typename(A) LP signed RP(Y). { + A.n = (int)(&Y.z[Y.n] - A.z); +} +typetoken(A) ::= typename(A) LP signed COMMA signed RP(Y). { + A.n = (int)(&Y.z[Y.n] - A.z); +} +%type typename {Token} +typename(A) ::= ids(A). +typename(A) ::= typename(A) ids(Y). {A.n=Y.n+(int)(Y.z-A.z);} +signed ::= plus_num. +signed ::= minus_num. + +// The scanpt non-terminal takes a value which is a pointer to the +// input text just past the last token that has been shifted into +// the parser. By surrounding some phrase in the grammar with two +// scanpt non-terminals, we can capture the input text for that phrase. +// For example: +// +// something ::= .... scanpt(A) phrase scanpt(Z). +// +// The text that is parsed as "phrase" is a string starting at A +// and containing (int)(Z-A) characters. There might be some extra +// whitespace on either end of the text, but that can be removed in +// post-processing, if needed. +// +%type scanpt {const char*} +scanpt(A) ::= . { + assert( yyLookahead!=YYNOCODE ); + A = yyLookaheadToken.z; +} +scantok(A) ::= . { + assert( yyLookahead!=YYNOCODE ); + A = yyLookaheadToken; +} + +// "carglist" is a list of additional constraints that come after the +// column name and column type in a CREATE TABLE statement. +// +carglist ::= carglist ccons. +carglist ::= . +ccons ::= CONSTRAINT nm(X). {ASSERT_IS_CREATE; pParse->u1.cr.constraintName = X;} +ccons ::= DEFAULT scantok(A) term(X). + {sqlite3AddDefaultValue(pParse,X,A.z,&A.z[A.n]);} +ccons ::= DEFAULT LP(A) expr(X) RP(Z). + {sqlite3AddDefaultValue(pParse,X,A.z+1,Z.z);} +ccons ::= DEFAULT PLUS(A) scantok(Z) term(X). + {sqlite3AddDefaultValue(pParse,X,A.z,&Z.z[Z.n]);} +ccons ::= DEFAULT MINUS(A) scantok(Z) term(X). { + Expr *p = sqlite3PExpr(pParse, TK_UMINUS, X, 0); + sqlite3AddDefaultValue(pParse,p,A.z,&Z.z[Z.n]); +} +ccons ::= DEFAULT scantok id(X). { + Expr *p = tokenExpr(pParse, TK_STRING, X); + if( p ){ + sqlite3ExprIdToTrueFalse(p); + testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) ); + } + sqlite3AddDefaultValue(pParse,p,X.z,X.z+X.n); +} + +// In addition to the type name, we also care about the primary key and +// UNIQUE constraints. +// +ccons ::= NULL onconf. +ccons ::= NOT NULL onconf(R). {sqlite3AddNotNull(pParse, R);} +ccons ::= PRIMARY KEY sortorder(Z) onconf(R) autoinc(I). + {sqlite3AddPrimaryKey(pParse,0,R,I,Z);} +ccons ::= UNIQUE onconf(R). {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0,0,0, + SQLITE_IDXTYPE_UNIQUE);} +ccons ::= CHECK LP(A) expr(X) RP(B). {sqlite3AddCheckConstraint(pParse,X,A.z,B.z);} +ccons ::= REFERENCES nm(T) eidlist_opt(TA) refargs(R). + {sqlite3CreateForeignKey(pParse,0,&T,TA,R);} +ccons ::= defer_subclause(D). {sqlite3DeferForeignKey(pParse,D);} +ccons ::= COLLATE ids(C). {sqlite3AddCollateType(pParse, &C);} +ccons ::= GENERATED ALWAYS AS generated. +ccons ::= AS generated. +generated ::= LP expr(E) RP. {sqlite3AddGenerated(pParse,E,0);} +generated ::= LP expr(E) RP ID(TYPE). {sqlite3AddGenerated(pParse,E,&TYPE);} + +// The optional AUTOINCREMENT keyword +%type autoinc {int} +autoinc(X) ::= . {X = 0;} +autoinc(X) ::= AUTOINCR. {X = 1;} + +// The next group of rules parses the arguments to a REFERENCES clause +// that determine if the referential integrity checking is deferred or +// or immediate and which determine what action to take if a ref-integ +// check fails. +// +%type refargs {int} +refargs(A) ::= . { A = OE_None*0x0101; /* EV: R-19803-45884 */} +refargs(A) ::= refargs(A) refarg(Y). { A = (A & ~Y.mask) | Y.value; } +%type refarg {struct {int value; int mask;}} +refarg(A) ::= MATCH nm. { A.value = 0; A.mask = 0x000000; } +refarg(A) ::= ON INSERT refact. { A.value = 0; A.mask = 0x000000; } +refarg(A) ::= ON DELETE refact(X). { A.value = X; A.mask = 0x0000ff; } +refarg(A) ::= ON UPDATE refact(X). { A.value = X<<8; A.mask = 0x00ff00; } +%type refact {int} +refact(A) ::= SET NULL. { A = OE_SetNull; /* EV: R-33326-45252 */} +refact(A) ::= SET DEFAULT. { A = OE_SetDflt; /* EV: R-33326-45252 */} +refact(A) ::= CASCADE. { A = OE_Cascade; /* EV: R-33326-45252 */} +refact(A) ::= RESTRICT. { A = OE_Restrict; /* EV: R-33326-45252 */} +refact(A) ::= NO ACTION. { A = OE_None; /* EV: R-33326-45252 */} +%type defer_subclause {int} +defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt. {A = 0;} +defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X). {A = X;} +%type init_deferred_pred_opt {int} +init_deferred_pred_opt(A) ::= . {A = 0;} +init_deferred_pred_opt(A) ::= INITIALLY DEFERRED. {A = 1;} +init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE. {A = 0;} + +conslist_opt(A) ::= . {A.n = 0; A.z = 0;} +conslist_opt(A) ::= COMMA(A) conslist. +conslist ::= conslist tconscomma tcons. +conslist ::= tcons. +tconscomma ::= COMMA. {ASSERT_IS_CREATE; pParse->u1.cr.constraintName.n = 0;} +tconscomma ::= . +tcons ::= CONSTRAINT nm(X). {ASSERT_IS_CREATE; pParse->u1.cr.constraintName = X;} +tcons ::= PRIMARY KEY LP sortlist(X) autoinc(I) RP onconf(R). + {sqlite3AddPrimaryKey(pParse,X,R,I,0);} +tcons ::= UNIQUE LP sortlist(X) RP onconf(R). + {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0,0,0, + SQLITE_IDXTYPE_UNIQUE);} +tcons ::= CHECK LP(A) expr(E) RP(B) onconf. + {sqlite3AddCheckConstraint(pParse,E,A.z,B.z);} +tcons ::= FOREIGN KEY LP eidlist(FA) RP + REFERENCES nm(T) eidlist_opt(TA) refargs(R) defer_subclause_opt(D). { + sqlite3CreateForeignKey(pParse, FA, &T, TA, R); + sqlite3DeferForeignKey(pParse, D); +} +%type defer_subclause_opt {int} +defer_subclause_opt(A) ::= . {A = 0;} +defer_subclause_opt(A) ::= defer_subclause(A). + +// The following is a non-standard extension that allows us to declare the +// default behavior when there is a constraint conflict. +// +%type onconf {int} +%type orconf {int} +%type resolvetype {int} +onconf(A) ::= . {A = OE_Default;} +onconf(A) ::= ON CONFLICT resolvetype(X). {A = X;} +orconf(A) ::= . {A = OE_Default;} +orconf(A) ::= OR resolvetype(X). {A = X;} +resolvetype(A) ::= raisetype(A). +resolvetype(A) ::= IGNORE. {A = OE_Ignore;} +resolvetype(A) ::= REPLACE. {A = OE_Replace;} + +////////////////////////// The DROP TABLE ///////////////////////////////////// +// +cmd ::= DROP TABLE ifexists(E) fullname(X). { + sqlite3DropTable(pParse, X, 0, E); +} +%type ifexists {int} +ifexists(A) ::= IF EXISTS. {A = 1;} +ifexists(A) ::= . {A = 0;} + +///////////////////// The CREATE VIEW statement ///////////////////////////// +// +%ifndef SQLITE_OMIT_VIEW +cmd ::= createkw(X) temp(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C) + AS select(S). { + sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E); +} +cmd ::= DROP VIEW ifexists(E) fullname(X). { + sqlite3DropTable(pParse, X, 1, E); +} +%endif SQLITE_OMIT_VIEW + +//////////////////////// The SELECT statement ///////////////////////////////// +// +cmd ::= select(X). { + SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0}; + if( (pParse->db->mDbFlags & DBFLAG_EncodingFixed)!=0 + || sqlite3ReadSchema(pParse)==SQLITE_OK + ){ + sqlite3Select(pParse, X, &dest); + } + sqlite3SelectDelete(pParse->db, X); +} + +%type select {Select*} +%destructor select {sqlite3SelectDelete(pParse->db, $$);} +%type selectnowith {Select*} +%destructor selectnowith {sqlite3SelectDelete(pParse->db, $$);} +%type oneselect {Select*} +%destructor oneselect {sqlite3SelectDelete(pParse->db, $$);} + +%include { + /* + ** For a compound SELECT statement, make sure p->pPrior->pNext==p for + ** all elements in the list. And make sure list length does not exceed + ** SQLITE_LIMIT_COMPOUND_SELECT. + */ + static void parserDoubleLinkSelect(Parse *pParse, Select *p){ + assert( p!=0 ); + if( p->pPrior ){ + Select *pNext = 0, *pLoop = p; + int mxSelect, cnt = 1; + while(1){ + pLoop->pNext = pNext; + pLoop->selFlags |= SF_Compound; + pNext = pLoop; + pLoop = pLoop->pPrior; + if( pLoop==0 ) break; + cnt++; + if( pLoop->pOrderBy || pLoop->pLimit ){ + sqlite3ErrorMsg(pParse,"%s clause should come after %s not before", + pLoop->pOrderBy!=0 ? "ORDER BY" : "LIMIT", + sqlite3SelectOpName(pNext->op)); + break; + } + } + if( (p->selFlags & (SF_MultiValue|SF_Values))==0 + && (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 + && cnt>mxSelect + ){ + sqlite3ErrorMsg(pParse, "too many terms in compound SELECT"); + } + } + } + + /* Attach a With object describing the WITH clause to a Select + ** object describing the query for which the WITH clause is a prefix. + */ + static Select *attachWithToSelect(Parse *pParse, Select *pSelect, With *pWith){ + if( pSelect ){ + pSelect->pWith = pWith; + parserDoubleLinkSelect(pParse, pSelect); + }else{ + sqlite3WithDelete(pParse->db, pWith); + } + return pSelect; + } + + /* Memory allocator for parser stack resizing. This is a thin wrapper around + ** sqlite3_realloc() that includes a call to sqlite3FaultSim() to facilitate + ** testing. + */ + static void *parserStackRealloc( + void *pOld, /* Prior allocation */ + sqlite3_uint64 newSize, /* Requested new alloation size */ + Parse *pParse /* Parsing context */ + ){ + void *p = sqlite3FaultSim(700) ? 0 : sqlite3_realloc(pOld, newSize); + if( p==0 ) sqlite3OomFault(pParse->db); + return p; + } + static void parserStackFree(void *pOld, Parse *pParse){ + (void)pParse; + sqlite3_free(pOld); + } + + /* Return an integer that is the maximum allowed stack size */ + static int parserStackSizeLimit(Parse *pParse){ + return pParse->db->aLimit[SQLITE_LIMIT_PARSER_DEPTH]; + } +} + +%ifndef SQLITE_OMIT_CTE +select(A) ::= WITH wqlist(W) selectnowith(X). {A = attachWithToSelect(pParse,X,W);} +select(A) ::= WITH RECURSIVE wqlist(W) selectnowith(X). + {A = attachWithToSelect(pParse,X,W);} + +%endif /* SQLITE_OMIT_CTE */ +select(A) ::= selectnowith(A). { + Select *p = A; + if( p ){ + parserDoubleLinkSelect(pParse, p); + } +} + +selectnowith(A) ::= oneselect(A). +%ifndef SQLITE_OMIT_COMPOUND_SELECT +selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z). { + Select *pRhs = Z; + Select *pLhs = A; + if( pRhs && pRhs->pPrior ){ + SrcList *pFrom; + Token x; + x.n = 0; + parserDoubleLinkSelect(pParse, pRhs); + pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0); + pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0); + } + if( pRhs ){ + pRhs->op = (u8)Y; + pRhs->pPrior = pLhs; + if( ALWAYS(pLhs) ) pLhs->selFlags &= ~(u32)SF_MultiValue; + pRhs->selFlags &= ~(u32)SF_MultiValue; + if( Y!=TK_ALL ) pParse->hasCompound = 1; + }else{ + sqlite3SelectDelete(pParse->db, pLhs); + } + A = pRhs; +} +%type multiselect_op {int} +multiselect_op(A) ::= UNION(OP). {A = @OP; /*A-overwrites-OP*/} +multiselect_op(A) ::= UNION ALL. {A = TK_ALL;} +multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP; /*A-overwrites-OP*/} +%endif SQLITE_OMIT_COMPOUND_SELECT + +oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y) + groupby_opt(P) having_opt(Q) + orderby_opt(Z) limit_opt(L). { + A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L); +} +%ifndef SQLITE_OMIT_WINDOWFUNC +oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y) + groupby_opt(P) having_opt(Q) window_clause(R) + orderby_opt(Z) limit_opt(L). { + A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L); + if( A ){ + A->pWinDefn = R; + }else{ + sqlite3WindowListDelete(pParse->db, R); + } +} +%endif + + +// Single row VALUES clause. +// +%type values {Select*} +oneselect(A) ::= values(A). +%destructor values {sqlite3SelectDelete(pParse->db, $$);} +values(A) ::= VALUES LP nexprlist(X) RP. { + A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0); +} + +// Multiple row VALUES clause. +// +%type mvalues {Select*} +oneselect(A) ::= mvalues(A). { + sqlite3MultiValuesEnd(pParse, A); +} +%destructor mvalues {sqlite3SelectDelete(pParse->db, $$);} +mvalues(A) ::= values(A) COMMA LP nexprlist(Y) RP. { + A = sqlite3MultiValues(pParse, A, Y); +} +mvalues(A) ::= mvalues(A) COMMA LP nexprlist(Y) RP. { + A = sqlite3MultiValues(pParse, A, Y); +} + +// The "distinct" nonterminal is true (1) if the DISTINCT keyword is +// present and false (0) if it is not. +// +%type distinct {int} +distinct(A) ::= DISTINCT. {A = SF_Distinct;} +distinct(A) ::= ALL. {A = SF_All;} +distinct(A) ::= . {A = 0;} + +// selcollist is a list of expressions that are to become the return +// values of the SELECT statement. The "*" in statements like +// "SELECT * FROM ..." is encoded as a special expression with an +// opcode of TK_ASTERISK. +// +%type selcollist {ExprList*} +%destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);} +%type sclp {ExprList*} +%destructor sclp {sqlite3ExprListDelete(pParse->db, $$);} +sclp(A) ::= selcollist(A) COMMA. +sclp(A) ::= . {A = 0;} +selcollist(A) ::= sclp(A) scanpt(B) expr(X) scanpt(Z) as(Y). { + A = sqlite3ExprListAppend(pParse, A, X); + if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1); + sqlite3ExprListSetSpan(pParse,A,B,Z); +} +selcollist(A) ::= sclp(A) scanpt STAR(X). { + Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); + sqlite3ExprSetErrorOffset(p, (int)(X.z - pParse->zTail)); + A = sqlite3ExprListAppend(pParse, A, p); +} +selcollist(A) ::= sclp(A) scanpt nm(X) DOT STAR(Y). { + Expr *pRight, *pLeft, *pDot; + pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); + sqlite3ExprSetErrorOffset(pRight, (int)(Y.z - pParse->zTail)); + pLeft = tokenExpr(pParse, TK_ID, X); + pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); + A = sqlite3ExprListAppend(pParse,A, pDot); +} + +// An option "AS " phrase that can follow one of the expressions that +// define the result set, or one of the tables in the FROM clause. +// +%type as {Token} +as(X) ::= AS nm(Y). {X = Y;} +as(X) ::= ids(X). +as(X) ::= . {X.n = 0; X.z = 0;} + + +%type seltablist {SrcList*} +%destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);} +%type stl_prefix {SrcList*} +%destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);} +%type from {SrcList*} +%destructor from {sqlite3SrcListDelete(pParse->db, $$);} + +// A complete FROM clause. +// +from(A) ::= . {A = 0;} +from(A) ::= FROM seltablist(X). { + A = X; + sqlite3SrcListShiftJoinType(pParse,A); +} + +// "seltablist" is a "Select Table List" - the content of the FROM clause +// in a SELECT statement. "stl_prefix" is a prefix of this list. +// +stl_prefix(A) ::= seltablist(A) joinop(Y). { + if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y; +} +stl_prefix(A) ::= . {A = 0;} +seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) on_using(N). { + A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N); +} +seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_by(I) on_using(N). { + A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N); + sqlite3SrcListIndexedBy(pParse, A, &I); +} +seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z) on_using(N). { + A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N); + sqlite3SrcListFuncArgs(pParse, A, E); +} +%ifndef SQLITE_OMIT_SUBQUERY + seltablist(A) ::= stl_prefix(A) LP select(S) RP as(Z) on_using(N). { + A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,&N); + } + seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP as(Z) on_using(N). { + if( A==0 && Z.n==0 && N.pOn==0 && N.pUsing==0 ){ + A = F; + }else if( ALWAYS(F!=0) && F->nSrc==1 ){ + A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,&N); + if( A ){ + SrcItem *pNew = &A->a[A->nSrc-1]; + SrcItem *pOld = F->a; + assert( pOld->fg.fixedSchema==0 ); + pNew->zName = pOld->zName; + assert( pOld->fg.fixedSchema==0 ); + if( pOld->fg.isSubquery ){ + pNew->fg.isSubquery = 1; + pNew->u4.pSubq = pOld->u4.pSubq; + pOld->u4.pSubq = 0; + pOld->fg.isSubquery = 0; + assert( pNew->u4.pSubq!=0 && pNew->u4.pSubq->pSelect!=0 ); + if( (pNew->u4.pSubq->pSelect->selFlags & SF_NestedFrom)!=0 ){ + pNew->fg.isNestedFrom = 1; + } + }else{ + pNew->u4.zDatabase = pOld->u4.zDatabase; + pOld->u4.zDatabase = 0; + } + if( pOld->fg.isTabFunc ){ + pNew->u1.pFuncArg = pOld->u1.pFuncArg; + pOld->u1.pFuncArg = 0; + pOld->fg.isTabFunc = 0; + pNew->fg.isTabFunc = 1; + } + pOld->zName = 0; + } + sqlite3SrcListDelete(pParse->db, F); + }else{ + Select *pSubquery; + sqlite3SrcListShiftJoinType(pParse,F); + pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0); + A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,&N); + } + } +%endif SQLITE_OMIT_SUBQUERY + +%type dbnm {Token} +dbnm(A) ::= . {A.z=0; A.n=0;} +dbnm(A) ::= DOT nm(X). {A = X;} + +%type fullname {SrcList*} +%destructor fullname {sqlite3SrcListDelete(pParse->db, $$);} +fullname(A) ::= nm(X). { + A = sqlite3SrcListAppend(pParse,0,&X,0); + if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &X); +} +fullname(A) ::= nm(X) DOT nm(Y). { + A = sqlite3SrcListAppend(pParse,0,&X,&Y); + if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &Y); +} + +%type xfullname {SrcList*} +%destructor xfullname {sqlite3SrcListDelete(pParse->db, $$);} +xfullname(A) ::= nm(X). { + A = sqlite3SrcListAppend(pParse,0,&X,0); + if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &X); +} +xfullname(A) ::= nm(X) DOT nm(Y). { + A = sqlite3SrcListAppend(pParse,0,&X,&Y); + if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &Y); +} +xfullname(A) ::= nm(X) AS nm(Z). { + A = sqlite3SrcListAppend(pParse,0,&X,0); + if( A ){ + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, A->a[0].zName, &X); + }else{ + A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z); + } + } +} +xfullname(A) ::= nm(X) DOT nm(Y) AS nm(Z). { + A = sqlite3SrcListAppend(pParse,0,&X,&Y); + if( A ){ + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, A->a[0].zName, &Y); + }else{ + A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z); + } + } +} + + +%type joinop {int} +joinop(X) ::= COMMA|JOIN. { X = JT_INNER; } +joinop(X) ::= JOIN_KW(A) JOIN. + {X = sqlite3JoinType(pParse,&A,0,0); /*X-overwrites-A*/} +joinop(X) ::= JOIN_KW(A) nm(B) JOIN. + {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/} +joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN. + {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/} + +// There is a parsing ambiguity in an upsert statement that uses a +// SELECT on the RHS of a the INSERT: +// +// INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ... +// here ----^^ +// +// When the ON token is encountered, the parser does not know if it is +// the beginning of an ON CONFLICT clause, or the beginning of an ON +// clause associated with the JOIN. The conflict is resolved in favor +// of the JOIN. If an ON CONFLICT clause is intended, insert a dummy +// WHERE clause in between, like this: +// +// INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ... +// +// The [AND] and [OR] precedence marks in the rules for on_using cause the +// ON in this context to always be interpreted as belonging to the JOIN. +// +%type on_using {OnOrUsing} +//%destructor on_using {sqlite3ClearOnOrUsing(pParse->db, &$$);} +on_using(N) ::= ON expr(E). {N.pOn = E; N.pUsing = 0;} +on_using(N) ::= USING LP idlist(L) RP. {N.pOn = 0; N.pUsing = L;} +on_using(N) ::= . [OR] {N.pOn = 0; N.pUsing = 0;} + +// Note that this block abuses the Token type just a little. If there is +// no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If +// there is an INDEXED BY clause, then the token is populated as per normal, +// with z pointing to the token data and n containing the number of bytes +// in the token. +// +// If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is +// normally illegal. The sqlite3SrcListIndexedBy() function +// recognizes and interprets this as a special case. +// +%type indexed_opt {Token} +%type indexed_by {Token} +indexed_opt(A) ::= . {A.z=0; A.n=0;} +indexed_opt(A) ::= indexed_by(A). +indexed_by(A) ::= INDEXED BY nm(X). {A = X;} +indexed_by(A) ::= NOT INDEXED. {A.z=0; A.n=1;} + +%type orderby_opt {ExprList*} +%destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);} + +// the sortlist non-terminal stores a list of expression where each +// expression is optionally followed by ASC or DESC to indicate the +// sort order. +// +%type sortlist {ExprList*} +%destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);} + +orderby_opt(A) ::= . {A = 0;} +orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;} +sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z) nulls(X). { + A = sqlite3ExprListAppend(pParse,A,Y); + sqlite3ExprListSetSortOrder(A,Z,X); +} +sortlist(A) ::= expr(Y) sortorder(Z) nulls(X). { + A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/ + sqlite3ExprListSetSortOrder(A,Z,X); +} + +%type sortorder {int} + +sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;} +sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;} +sortorder(A) ::= . {A = SQLITE_SO_UNDEFINED;} + +%type nulls {int} +nulls(A) ::= NULLS FIRST. {A = SQLITE_SO_ASC;} +nulls(A) ::= NULLS LAST. {A = SQLITE_SO_DESC;} +nulls(A) ::= . {A = SQLITE_SO_UNDEFINED;} + +%type groupby_opt {ExprList*} +%destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);} +groupby_opt(A) ::= . {A = 0;} +groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;} + +%type having_opt {Expr*} +%destructor having_opt {sqlite3ExprDelete(pParse->db, $$);} +having_opt(A) ::= . {A = 0;} +having_opt(A) ::= HAVING expr(X). {A = X;} + +%type limit_opt {Expr*} + +// The destructor for limit_opt will never fire in the current grammar. +// The limit_opt non-terminal only occurs at the end of a single production +// rule for SELECT statements. As soon as the rule that create the +// limit_opt non-terminal reduces, the SELECT statement rule will also +// reduce. So there is never a limit_opt non-terminal on the stack +// except as a transient. So there is never anything to destroy. +// +//%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);} +limit_opt(A) ::= . {A = 0;} +limit_opt(A) ::= LIMIT expr(X). + {A = sqlite3PExpr(pParse,TK_LIMIT,X,0);} +limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y). + {A = sqlite3PExpr(pParse,TK_LIMIT,X,Y);} +limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y). + {A = sqlite3PExpr(pParse,TK_LIMIT,Y,X);} + +/////////////////////////// The DELETE statement ///////////////////////////// +// +%if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER +cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt_ret(W) + orderby_opt(O) limit_opt(L). { + sqlite3SrcListIndexedBy(pParse, X, &I); +#ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + if( O || L ){ + updateDeleteLimitError(pParse,O,L); + O = 0; + L = 0; + } +#endif + sqlite3DeleteFrom(pParse,X,W,O,L); +} +%else +cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt_ret(W). { + sqlite3SrcListIndexedBy(pParse, X, &I); + sqlite3DeleteFrom(pParse,X,W,0,0); +} +%endif + +%type where_opt {Expr*} +%destructor where_opt {sqlite3ExprDelete(pParse->db, $$);} +%type where_opt_ret {Expr*} +%destructor where_opt_ret {sqlite3ExprDelete(pParse->db, $$);} + +where_opt(A) ::= . {A = 0;} +where_opt(A) ::= WHERE expr(X). {A = X;} +where_opt_ret(A) ::= . {A = 0;} +where_opt_ret(A) ::= WHERE expr(X). {A = X;} +where_opt_ret(A) ::= RETURNING selcollist(X). + {sqlite3AddReturning(pParse,X); A = 0;} +where_opt_ret(A) ::= WHERE expr(X) RETURNING selcollist(Y). + {sqlite3AddReturning(pParse,Y); A = X;} + +////////////////////////// The UPDATE command //////////////////////////////// +// +%if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER +cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) from(F) + where_opt_ret(W) orderby_opt(O) limit_opt(L). { + sqlite3SrcListIndexedBy(pParse, X, &I); + if( F ){ + SrcList *pFromClause = F; + if( pFromClause->nSrc>1 ){ + Select *pSubquery; + Token as; + pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0); + as.n = 0; + as.z = 0; + pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0); + } + X = sqlite3SrcListAppendList(pParse, X, pFromClause); + } + sqlite3ExprListCheckLength(pParse,Y,"set list"); +#ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + if( O || L ){ + updateDeleteLimitError(pParse,O,L); + O = 0; + L = 0; + } +#endif + sqlite3Update(pParse,X,Y,W,R,O,L,0); +} +%else +cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) from(F) + where_opt_ret(W). { + sqlite3SrcListIndexedBy(pParse, X, &I); + sqlite3ExprListCheckLength(pParse,Y,"set list"); + if( F ){ + SrcList *pFromClause = F; + if( pFromClause->nSrc>1 ){ + Select *pSubquery; + Token as; + pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0); + as.n = 0; + as.z = 0; + pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0); + } + X = sqlite3SrcListAppendList(pParse, X, pFromClause); + } + sqlite3Update(pParse,X,Y,W,R,0,0,0); +} +%endif + + + +%type setlist {ExprList*} +%destructor setlist {sqlite3ExprListDelete(pParse->db, $$);} + +setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). { + A = sqlite3ExprListAppend(pParse, A, Y); + sqlite3ExprListSetName(pParse, A, &X, 1); +} +setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). { + A = sqlite3ExprListAppendVector(pParse, A, X, Y); +} +setlist(A) ::= nm(X) EQ expr(Y). { + A = sqlite3ExprListAppend(pParse, 0, Y); + sqlite3ExprListSetName(pParse, A, &X, 1); +} +setlist(A) ::= LP idlist(X) RP EQ expr(Y). { + A = sqlite3ExprListAppendVector(pParse, 0, X, Y); +} + +////////////////////////// The INSERT command ///////////////////////////////// +// +cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) select(S) + upsert(U). { + sqlite3Insert(pParse, X, S, F, R, U); +} +cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) DEFAULT VALUES returning. +{ + sqlite3Insert(pParse, X, 0, F, R, 0); +} + +%type upsert {Upsert*} + +// Because upsert only occurs at the tip end of the INSERT rule for cmd, +// there is never a case where the value of the upsert pointer will not +// be destroyed by the cmd action. So comment-out the destructor to +// avoid unreachable code. +//%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);} +upsert(A) ::= . { A = 0; } +upsert(A) ::= RETURNING selcollist(X). { A = 0; sqlite3AddReturning(pParse,X); } +upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) + DO UPDATE SET setlist(Z) where_opt(W) upsert(N). + { A = sqlite3UpsertNew(pParse->db,T,TW,Z,W,N);} +upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) DO NOTHING upsert(N). + { A = sqlite3UpsertNew(pParse->db,T,TW,0,0,N); } +upsert(A) ::= ON CONFLICT DO NOTHING returning. + { A = sqlite3UpsertNew(pParse->db,0,0,0,0,0); } +upsert(A) ::= ON CONFLICT DO UPDATE SET setlist(Z) where_opt(W) returning. + { A = sqlite3UpsertNew(pParse->db,0,0,Z,W,0);} + +returning ::= RETURNING selcollist(X). {sqlite3AddReturning(pParse,X);} +returning ::= . + +%type insert_cmd {int} +insert_cmd(A) ::= INSERT orconf(R). {A = R;} +insert_cmd(A) ::= REPLACE. {A = OE_Replace;} + +%type idlist_opt {IdList*} +%destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);} +%type idlist {IdList*} +%destructor idlist {sqlite3IdListDelete(pParse->db, $$);} + +idlist_opt(A) ::= . {A = 0;} +idlist_opt(A) ::= LP idlist(X) RP. {A = X;} +idlist(A) ::= idlist(A) COMMA nm(Y). + {A = sqlite3IdListAppend(pParse,A,&Y);} +idlist(A) ::= nm(Y). + {A = sqlite3IdListAppend(pParse,0,&Y); /*A-overwrites-Y*/} + +/////////////////////////// Expression Processing ///////////////////////////// +// + +%type expr {Expr*} +%destructor expr {sqlite3ExprDelete(pParse->db, $$);} +%type term {Expr*} +%destructor term {sqlite3ExprDelete(pParse->db, $$);} + +%include { + + /* Construct a new Expr object from a single token */ + static Expr *tokenExpr(Parse *pParse, int op, Token t){ + Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1); + if( p ){ + /* memset(p, 0, sizeof(Expr)); */ + p->op = (u8)op; + p->affExpr = 0; + p->flags = EP_Leaf; + ExprClearVVAProperties(p); + /* p->iAgg = -1; // Not required */ + p->pLeft = p->pRight = 0; + p->pAggInfo = 0; + memset(&p->x, 0, sizeof(p->x)); + memset(&p->y, 0, sizeof(p->y)); + p->op2 = 0; + p->iTable = 0; + p->iColumn = 0; + p->u.zToken = (char*)&p[1]; + memcpy(p->u.zToken, t.z, t.n); + p->u.zToken[t.n] = 0; + p->w.iOfst = (int)(t.z - pParse->zTail); + if( sqlite3Isquote(p->u.zToken[0]) ){ + sqlite3DequoteExpr(p); + } +#if SQLITE_MAX_EXPR_DEPTH>0 + p->nHeight = 1; +#endif + if( IN_RENAME_OBJECT ){ + return (Expr*)sqlite3RenameTokenMap(pParse, (void*)p, &t); + } + } + return p; + } + +} + +expr(A) ::= term(A). +expr(A) ::= LP expr(X) RP. {A = X;} +expr(A) ::= idj(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/} +expr(A) ::= nm(X) DOT nm(Y). { + Expr *temp1 = tokenExpr(pParse,TK_ID,X); + Expr *temp2 = tokenExpr(pParse,TK_ID,Y); + A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); +} +expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). { + Expr *temp1 = tokenExpr(pParse,TK_ID,X); + Expr *temp2 = tokenExpr(pParse,TK_ID,Y); + Expr *temp3 = tokenExpr(pParse,TK_ID,Z); + Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, 0, temp1); + } + A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); +} +term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/} +term(A) ::= STRING(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/} +term(A) ::= INTEGER(X). { + int iValue; + if( sqlite3GetInt32(X.z, &iValue)==0 ){ + A = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 0); + }else{ + A = sqlite3ExprInt32(pParse->db, iValue); + } + if( A ) A->w.iOfst = (int)(X.z - pParse->zTail); +} +expr(A) ::= VARIABLE(X). { + if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){ + u32 n = X.n; + A = tokenExpr(pParse, TK_VARIABLE, X); + sqlite3ExprAssignVarNumber(pParse, A, n); + }else{ + /* When doing a nested parse, one can include terms in an expression + ** that look like this: #1 #2 ... These terms refer to registers + ** in the virtual machine. #N is the N-th register. */ + Token t = X; /*A-overwrites-X*/ + assert( t.n>=2 ); + if( pParse->nested==0 ){ + parserSyntaxError(pParse, &t); + A = 0; + }else{ + A = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); + if( A ) sqlite3GetInt32(&t.z[1], &A->iTable); + } + } +} +expr(A) ::= expr(A) COLLATE ids(C). { + A = sqlite3ExprAddCollateToken(pParse, A, &C, 1); +} +%ifndef SQLITE_OMIT_CAST +expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. { + A = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1); + sqlite3ExprAttachSubtrees(pParse->db, A, E, 0); +} +%endif SQLITE_OMIT_CAST + + +expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP. { + A = sqlite3ExprFunction(pParse, Y, &X, D); +} +expr(A) ::= idj(X) LP distinct(D) exprlist(Y) ORDER BY sortlist(O) RP. { + A = sqlite3ExprFunction(pParse, Y, &X, D); + sqlite3ExprAddFunctionOrderBy(pParse, A, O); +} +expr(A) ::= idj(X) LP STAR RP. { + A = sqlite3ExprFunction(pParse, 0, &X, 0); +} + +%ifdef SQLITE_ENABLE_ORDERED_SET_AGGREGATES +%include { + /* Generate an expression node that represents an ordered-set aggregate function. + ** + ** SQLite does not do anything special to evaluate ordered-set aggregates. The + ** aggregate function itself is expected to do any required ordering on its own. + ** This is just syntactic sugar. + ** + ** This syntax: percentile(f) WITHIN GROUP ( ORDER BY y ) + ** + ** Is equivalent to: percentile(y,f) + ** + ** The purpose of this function is to generate an Expr node from the first syntax + ** into a TK_FUNCTION node that looks like it came from the second syntax. + ** + ** Only functions that have the SQLITE_SELFORDER1 property are allowed to do this + ** transformation. Because DISTINCT is not allowed in the ordered-set aggregate + ** syntax, an error is raised if DISTINCT is used. + */ + static Expr *sqlite3ExprAddOrderedsetFunction( + Parse *pParse, /* Parsing context */ + Token *pFuncname, /* Name of the function */ + int isDistinct, /* DISTINCT or ALL qualifier */ + ExprList *pOrig, /* Arguments to the function */ + Expr *pOrderby /* Expression in the ORDER BY clause */ + ){ + ExprList *p; /* Modified argument list */ + Expr *pExpr; /* Final result */ + p = sqlite3ExprListAppend(pParse, 0, pOrderby); + if( pOrig ){ + int i; + for(i=0; inExpr; i++){ + p = sqlite3ExprListAppend(pParse, p, pOrig->a[i].pExpr); + pOrig->a[i].pExpr = 0; + } + sqlite3ExprListDelete(pParse->db, pOrig); + } + pExpr = sqlite3ExprFunction(pParse, p, pFuncname, 0); + if( pParse->nErr==0 ){ + FuncDef *pDef; + u8 enc = ENC(pParse->db); + assert( pExpr!=0 ); /* Because otherwise pParse->nErr would not be zero */ + assert( p!=0 ); /* Because otherwise pParse->nErr would not be zero */ + pDef = sqlite3FindFunction(pParse->db, pExpr->u.zToken, -2, enc, 0); + if( pDef==0 || (pDef->funcFlags & SQLITE_SELFORDER1)==0 ){ + sqlite3ErrorMsg(pParse, "%#T() is not an ordered-set aggregate", pExpr); + }else if( isDistinct==SF_Distinct ){ + sqlite3ErrorMsg(pParse, "DISTINCT not allowed on ordered-set aggregate %T()", + pFuncname); + } + } + return pExpr; + } +} +expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP WITHIN GROUP LP ORDER BY expr(E) RP. { + A = sqlite3ExprAddOrderedsetFunction(pParse, &X, D, Y, E); +} +%endif SQLITE_ENABLE_ORDERED_SET_AGGREGATES + +%ifndef SQLITE_OMIT_WINDOWFUNC +expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP filter_over(Z). { + A = sqlite3ExprFunction(pParse, Y, &X, D); + sqlite3WindowAttach(pParse, A, Z); +} +expr(A) ::= idj(X) LP distinct(D) exprlist(Y) ORDER BY sortlist(O) RP filter_over(Z). { + A = sqlite3ExprFunction(pParse, Y, &X, D); + sqlite3WindowAttach(pParse, A, Z); + sqlite3ExprAddFunctionOrderBy(pParse, A, O); +} +expr(A) ::= idj(X) LP STAR RP filter_over(Z). { + A = sqlite3ExprFunction(pParse, 0, &X, 0); + sqlite3WindowAttach(pParse, A, Z); +} +%ifdef SQLITE_ENABLE_ORDERED_SET_AGGREGATES +expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP WITHIN GROUP LP ORDER BY expr(E) RP + filter_over(Z). { + A = sqlite3ExprAddOrderedsetFunction(pParse, &X, D, Y, E); + sqlite3WindowAttach(pParse, A, Z); +} +%endif SQLITE_ENABLE_ORDERED_SET_AGGREGATES + +%endif SQLITE_OMIT_WINDOWFUNC + +term(A) ::= CTIME_KW(OP). { + A = sqlite3ExprFunction(pParse, 0, &OP, 0); +} + +expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. { + ExprList *pList = sqlite3ExprListAppend(pParse, X, Y); + A = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); + if( A ){ + int i; + A->x.pList = pList; + for(i=0; inExpr; i++){ + assert( pList->a[i].pExpr!=0 ); + A->flags |= pList->a[i].pExpr->flags & EP_Propagate; + } + }else{ + sqlite3ExprListDelete(pParse->db, pList); + } +} + +expr(A) ::= expr(A) AND expr(Y). {A=sqlite3ExprAnd(pParse,A,Y);} +expr(A) ::= expr(A) OR(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);} +expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y). + {A=sqlite3PExpr(pParse,@OP,A,Y);} +expr(A) ::= expr(A) EQ|NE(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);} +expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y). + {A=sqlite3PExpr(pParse,@OP,A,Y);} +expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y). + {A=sqlite3PExpr(pParse,@OP,A,Y);} +expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y). + {A=sqlite3PExpr(pParse,@OP,A,Y);} +expr(A) ::= expr(A) CONCAT(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);} +%type likeop {Token} +likeop(A) ::= LIKE_KW|MATCH(A). +likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/} +expr(A) ::= expr(A) likeop(OP) expr(Y). [LIKE_KW] { + ExprList *pList; + int bNot = OP.n & 0x80000000; + OP.n &= 0x7fffffff; + pList = sqlite3ExprListAppend(pParse,0, Y); + pList = sqlite3ExprListAppend(pParse,pList, A); + A = sqlite3ExprFunction(pParse, pList, &OP, 0); + if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); + if( A ) A->flags |= EP_InfixFunc; +} +expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E). [LIKE_KW] { + ExprList *pList; + int bNot = OP.n & 0x80000000; + OP.n &= 0x7fffffff; + pList = sqlite3ExprListAppend(pParse,0, Y); + pList = sqlite3ExprListAppend(pParse,pList, A); + pList = sqlite3ExprListAppend(pParse,pList, E); + A = sqlite3ExprFunction(pParse, pList, &OP, 0); + if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); + if( A ) A->flags |= EP_InfixFunc; +} + +%include { + /* Create a TK_ISNULL or TK_NOTNULL expression, perhaps optimized to + ** to TK_TRUEFALSE, if possible */ + static Expr *sqlite3PExprIsNull( + Parse *pParse, /* Parsing context */ + int op, /* TK_ISNULL or TK_NOTNULL */ + Expr *pLeft /* Operand */ + ){ + Expr *p = pLeft; + assert( op==TK_ISNULL || op==TK_NOTNULL ); + assert( pLeft!=0 ); + while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ + p = p->pLeft; + assert( p!=0 ); + } + switch( p->op ){ + case TK_INTEGER: + case TK_STRING: + case TK_FLOAT: + case TK_BLOB: + sqlite3ExprDeferredDelete(pParse, pLeft); + return sqlite3ExprInt32(pParse->db, op==TK_NOTNULL); + default: + break; + } + return sqlite3PExpr(pParse, op, pLeft, 0); + } + + /* Create a TK_IS or TK_ISNOT operator, perhaps optimized to + ** TK_ISNULL or TK_NOTNULL or TK_TRUEFALSE. */ + static Expr *sqlite3PExprIs( + Parse *pParse, /* Parsing context */ + int op, /* TK_IS or TK_ISNOT */ + Expr *pLeft, /* Left operand */ + Expr *pRight /* Right operand */ + ){ + if( pRight && pRight->op==TK_NULL ){ + sqlite3ExprDeferredDelete(pParse, pRight); + return sqlite3PExprIsNull(pParse, op==TK_IS ? TK_ISNULL : TK_NOTNULL, pLeft); + } + return sqlite3PExpr(pParse, op, pLeft, pRight); + } +} + +expr(A) ::= expr(A) ISNULL|NOTNULL(E). {A = sqlite3PExprIsNull(pParse,@E,A);} +expr(A) ::= expr(A) NOT NULL. {A = sqlite3PExprIsNull(pParse,TK_NOTNULL,A);} + +// expr1 IS expr2 same as expr1 IS NOT DISTINCT FROM expr2 +// expr1 IS NOT expr2 same as expr1 IS DISTINCT FROM expr2 +// +expr(A) ::= expr(A) IS expr(Y). { + A = sqlite3PExprIs(pParse, TK_IS, A, Y); +} +expr(A) ::= expr(A) IS NOT expr(Y). { + A = sqlite3PExprIs(pParse, TK_ISNOT, A, Y); +} +expr(A) ::= expr(A) IS NOT DISTINCT FROM expr(Y). { + A = sqlite3PExprIs(pParse, TK_IS, A, Y); +} +expr(A) ::= expr(A) IS DISTINCT FROM expr(Y). { + A = sqlite3PExprIs(pParse, TK_ISNOT, A, Y); +} + +expr(A) ::= NOT(B) expr(X). + {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/} +expr(A) ::= BITNOT(B) expr(X). + {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/} +expr(A) ::= PLUS|MINUS(B) expr(X). [BITNOT] { + Expr *p = X; + u8 op = @B + (TK_UPLUS-TK_PLUS); + assert( TK_UPLUS>TK_PLUS ); + assert( TK_UMINUS == TK_MINUS + (TK_UPLUS - TK_PLUS) ); + if( p && p->op==TK_UPLUS ){ + p->op = op; + A = p; + }else{ + A = sqlite3PExpr(pParse, op, p, 0); + /*A-overwrites-B*/ + } +} + +expr(A) ::= expr(B) PTR(C) expr(D). { + ExprList *pList = sqlite3ExprListAppend(pParse, 0, B); + pList = sqlite3ExprListAppend(pParse, pList, D); + A = sqlite3ExprFunction(pParse, pList, &C, 0); +} + +%type between_op {int} +between_op(A) ::= BETWEEN. {A = 0;} +between_op(A) ::= NOT BETWEEN. {A = 1;} +expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] { + ExprList *pList = sqlite3ExprListAppend(pParse,0, X); + pList = sqlite3ExprListAppend(pParse,pList, Y); + A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0); + if( A ){ + A->x.pList = pList; + sqlite3ExprSetHeightAndFlags(pParse, A); + }else{ + sqlite3ExprListDelete(pParse->db, pList); + } + if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); +} +%ifndef SQLITE_OMIT_SUBQUERY + %type in_op {int} + in_op(A) ::= IN. {A = 0;} + in_op(A) ::= NOT IN. {A = 1;} + expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP. [IN] { + if( Y==0 ){ + /* Expressions of the form + ** + ** expr1 IN () + ** expr1 NOT IN () + ** + ** simplify to constants 0 (false) and 1 (true), respectively. + ** + ** Except, do not apply this optimization if expr1 contains a function + ** because that function might be an aggregate (we don't know yet whether + ** it is or not) and if it is an aggregate, that could change the meaning + ** of the whole query. + */ + Expr *pB = sqlite3Expr(pParse->db, TK_STRING, N ? "true" : "false"); + if( pB ) sqlite3ExprIdToTrueFalse(pB); + if( !ExprHasProperty(A, EP_HasFunc) ){ + sqlite3ExprUnmapAndDelete(pParse, A); + A = pB; + }else{ + A = sqlite3PExpr(pParse, N ? TK_OR : TK_AND, pB, A); + } + }else{ + Expr *pRHS = Y->a[0].pExpr; + if( Y->nExpr==1 && sqlite3ExprIsConstant(pParse,pRHS) && A->op!=TK_VECTOR ){ + Y->a[0].pExpr = 0; + sqlite3ExprListDelete(pParse->db, Y); + pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0); + A = sqlite3PExpr(pParse, TK_EQ, A, pRHS); + }else if( Y->nExpr==1 && pRHS->op==TK_SELECT ){ + A = sqlite3PExpr(pParse, TK_IN, A, 0); + sqlite3PExprAddSelect(pParse, A, pRHS->x.pSelect); + pRHS->x.pSelect = 0; + sqlite3ExprListDelete(pParse->db, Y); + }else{ + A = sqlite3PExpr(pParse, TK_IN, A, 0); + if( A==0 ){ + sqlite3ExprListDelete(pParse->db, Y); + }else if( A->pLeft->op==TK_VECTOR ){ + int nExpr = A->pLeft->x.pList->nExpr; + Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, Y); + if( pSelectRHS ){ + parserDoubleLinkSelect(pParse, pSelectRHS); + sqlite3PExprAddSelect(pParse, A, pSelectRHS); + } + }else{ + A->x.pList = Y; + sqlite3ExprSetHeightAndFlags(pParse, A); + } + } + if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); + } + } + expr(A) ::= LP select(X) RP. { + A = sqlite3PExpr(pParse, TK_SELECT, 0, 0); + sqlite3PExprAddSelect(pParse, A, X); + } + expr(A) ::= expr(A) in_op(N) LP select(Y) RP. [IN] { + A = sqlite3PExpr(pParse, TK_IN, A, 0); + sqlite3PExprAddSelect(pParse, A, Y); + if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); + } + expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] { + SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&Y,&Z); + Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0); + if( E ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E); + A = sqlite3PExpr(pParse, TK_IN, A, 0); + sqlite3PExprAddSelect(pParse, A, pSelect); + if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); + } + expr(A) ::= EXISTS LP select(Y) RP. { + Expr *p; + p = A = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); + sqlite3PExprAddSelect(pParse, p, Y); + } +%endif SQLITE_OMIT_SUBQUERY + +/* CASE expressions */ +expr(A) ::= CASE case_operand(X) case_exprlist(Y) case_else(Z) END. { + A = sqlite3PExpr(pParse, TK_CASE, X, 0); + if( A ){ + A->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y; + sqlite3ExprSetHeightAndFlags(pParse, A); + }else{ + sqlite3ExprListDelete(pParse->db, Y); + sqlite3ExprDelete(pParse->db, Z); + } +} +%type case_exprlist {ExprList*} +%destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);} +case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). { + A = sqlite3ExprListAppend(pParse,A, Y); + A = sqlite3ExprListAppend(pParse,A, Z); +} +case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). { + A = sqlite3ExprListAppend(pParse,0, Y); + A = sqlite3ExprListAppend(pParse,A, Z); +} +%type case_else {Expr*} +%destructor case_else {sqlite3ExprDelete(pParse->db, $$);} +case_else(A) ::= ELSE expr(X). {A = X;} +case_else(A) ::= . {A = 0;} +%type case_operand {Expr*} +%destructor case_operand {sqlite3ExprDelete(pParse->db, $$);} +case_operand(A) ::= expr(A). +case_operand(A) ::= . {A = 0;} + +%type exprlist {ExprList*} +%destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);} +%type nexprlist {ExprList*} +%destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);} + +exprlist(A) ::= nexprlist(A). +exprlist(A) ::= . {A = 0;} +nexprlist(A) ::= nexprlist(A) COMMA expr(Y). + {A = sqlite3ExprListAppend(pParse,A,Y);} +nexprlist(A) ::= expr(Y). + {A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/} + +%ifndef SQLITE_OMIT_SUBQUERY +/* A paren_exprlist is an optional expression list contained inside +** of parenthesis */ +%type paren_exprlist {ExprList*} +%destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);} +paren_exprlist(A) ::= . {A = 0;} +paren_exprlist(A) ::= LP exprlist(X) RP. {A = X;} +%endif SQLITE_OMIT_SUBQUERY + + +///////////////////////////// The CREATE INDEX command /////////////////////// +// +cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D) + ON nm(Y) LP sortlist(Z) RP where_opt(W). { + sqlite3CreateIndex(pParse, &X, &D, + sqlite3SrcListAppend(pParse,0,&Y,0), Z, U, + &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF); + if( IN_RENAME_OBJECT && pParse->pNewIndex ){ + sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &Y); + } +} + +%type uniqueflag {int} +uniqueflag(A) ::= UNIQUE. {A = OE_Abort;} +uniqueflag(A) ::= . {A = OE_None;} + + +// The eidlist non-terminal (Expression Id List) generates an ExprList +// from a list of identifiers. The identifier names are in ExprList.a[].zName. +// This list is stored in an ExprList rather than an IdList so that it +// can be easily sent to sqlite3ColumnsExprList(). +// +// eidlist is grouped with CREATE INDEX because it used to be the non-terminal +// used for the arguments to an index. That is just an historical accident. +// +// IMPORTANT COMPATIBILITY NOTE: Some prior versions of SQLite accepted +// COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate +// places - places that might have been stored in the sqlite_schema table. +// Those extra features were ignored. But because they might be in some +// (busted) old databases, we need to continue parsing them when loading +// historical schemas. +// +%type eidlist {ExprList*} +%destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);} +%type eidlist_opt {ExprList*} +%destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);} + +%include { + /* Add a single new term to an ExprList that is used to store a + ** list of identifiers. Report an error if the ID list contains + ** a COLLATE clause or an ASC or DESC keyword, except ignore the + ** error while parsing a legacy schema. + */ + static ExprList *parserAddExprIdListTerm( + Parse *pParse, + ExprList *pPrior, + Token *pIdToken, + int hasCollate, + int sortOrder + ){ + ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0); + if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED) + && pParse->db->init.busy==0 + ){ + sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"", + pIdToken->n, pIdToken->z); + } + sqlite3ExprListSetName(pParse, p, pIdToken, 1); + return p; + } +} // end %include + +eidlist_opt(A) ::= . {A = 0;} +eidlist_opt(A) ::= LP eidlist(X) RP. {A = X;} +eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z). { + A = parserAddExprIdListTerm(pParse, A, &Y, C, Z); +} +eidlist(A) ::= nm(Y) collate(C) sortorder(Z). { + A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/ +} + +%type collate {int} +collate(C) ::= . {C = 0;} +collate(C) ::= COLLATE ids. {C = 1;} + + +///////////////////////////// The DROP INDEX command ///////////////////////// +// +cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);} + +///////////////////////////// The VACUUM command ///////////////////////////// +// +%if !SQLITE_OMIT_VACUUM && !SQLITE_OMIT_ATTACH +%type vinto {Expr*} +%destructor vinto {sqlite3ExprDelete(pParse->db, $$);} +cmd ::= VACUUM vinto(Y). {sqlite3Vacuum(pParse,0,Y);} +cmd ::= VACUUM nm(X) vinto(Y). {sqlite3Vacuum(pParse,&X,Y);} +vinto(A) ::= INTO expr(X). {A = X;} +vinto(A) ::= . {A = 0;} +%endif + +///////////////////////////// The PRAGMA command ///////////////////////////// +// +%ifndef SQLITE_OMIT_PRAGMA +cmd ::= PRAGMA nm(X) dbnm(Z). {sqlite3Pragma(pParse,&X,&Z,0,0);} +cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);} +cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);} +cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y). + {sqlite3Pragma(pParse,&X,&Z,&Y,1);} +cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP. + {sqlite3Pragma(pParse,&X,&Z,&Y,1);} + +nmnum(A) ::= plus_num(A). +nmnum(A) ::= nm(A). +nmnum(A) ::= ON(A). +nmnum(A) ::= DELETE(A). +nmnum(A) ::= DEFAULT(A). +%endif SQLITE_OMIT_PRAGMA +%token_class number INTEGER|FLOAT. +plus_num(A) ::= PLUS number(X). {A = X;} +plus_num(A) ::= number(A). +minus_num(A) ::= MINUS number(X). {A = X;} +//////////////////////////// The CREATE TRIGGER command ///////////////////// + +%ifndef SQLITE_OMIT_TRIGGER + +cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). { + Token all; + all.z = A.z; + all.n = (int)(Z.z - A.z) + Z.n; + sqlite3FinishTrigger(pParse, S, &all); +} + +trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z) + trigger_time(C) trigger_event(D) + ON fullname(E) foreach_clause when_clause(G). { + sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR); + A = (Z.n==0?B:Z); /*A-overwrites-T*/ +#ifdef SQLITE_DEBUG + assert( pParse->isCreate ); /* Set by createkw reduce action */ + pParse->isCreate = 0; /* But, should not be set for CREATE TRIGGER */ +#endif +} + +%type trigger_time {int} +trigger_time(A) ::= BEFORE|AFTER(X). { A = @X; /*A-overwrites-X*/ } +trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;} +trigger_time(A) ::= . { A = TK_BEFORE; } + +%type trigger_event {struct TrigEvent} +%destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);} +trigger_event(A) ::= DELETE|INSERT(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;} +trigger_event(A) ::= UPDATE(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;} +trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;} + +foreach_clause ::= . +foreach_clause ::= FOR EACH ROW. + +%type when_clause {Expr*} +%destructor when_clause {sqlite3ExprDelete(pParse->db, $$);} +when_clause(A) ::= . { A = 0; } +when_clause(A) ::= WHEN expr(X). { A = X; } + +%type trigger_cmd_list {TriggerStep*} +%destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);} +trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. { + A->pLast->pNext = X; + A->pLast = X; +} +trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. { + A->pLast = A; +} + +// Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE +// statements within triggers. We make a specific error message for this +// since it is an exception to the default grammar rules. +// +tridxby ::= . +tridxby ::= INDEXED BY nm. { + sqlite3ErrorMsg(pParse, + "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " + "within triggers"); +} +tridxby ::= NOT INDEXED. { + sqlite3ErrorMsg(pParse, + "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " + "within triggers"); +} + + + +%type trigger_cmd {TriggerStep*} +%destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);} +// UPDATE +trigger_cmd(A) ::= + UPDATE(B) orconf(R) xfullname(X) tridxby SET setlist(Y) from(F) where_opt(Z) scanpt(E). + {A = sqlite3TriggerUpdateStep(pParse, X, F, Y, Z, R, B.z, E);} + +// INSERT +trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO + xfullname(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). { + A = sqlite3TriggerInsertStep(pParse,X,F,S,R,U,B,Z);/*A-overwrites-R*/ +} +// DELETE +trigger_cmd(A) ::= DELETE(B) FROM xfullname(X) tridxby where_opt(Y) scanpt(E). + {A = sqlite3TriggerDeleteStep(pParse, X, Y, B.z, E);} + +// SELECT +trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E). + {A = sqlite3TriggerSelectStep(pParse->db, X, B, E); /*A-overwrites-X*/} + +// The special RAISE expression that may occur in trigger programs +expr(A) ::= RAISE LP IGNORE RP. { + A = sqlite3PExpr(pParse, TK_RAISE, 0, 0); + if( A ){ + A->affExpr = OE_Ignore; + } +} +expr(A) ::= RAISE LP raisetype(T) COMMA expr(Z) RP. { + A = sqlite3PExpr(pParse, TK_RAISE, Z, 0); + if( A ) { + A->affExpr = (char)T; + } +} +%endif !SQLITE_OMIT_TRIGGER + +%type raisetype {int} +raisetype(A) ::= ROLLBACK. {A = OE_Rollback;} +raisetype(A) ::= ABORT. {A = OE_Abort;} +raisetype(A) ::= FAIL. {A = OE_Fail;} + + +//////////////////////// DROP TRIGGER statement ////////////////////////////// +%ifndef SQLITE_OMIT_TRIGGER +cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). { + sqlite3DropTrigger(pParse,X,NOERR); +} +%endif !SQLITE_OMIT_TRIGGER + +//////////////////////// ATTACH DATABASE file AS name ///////////////////////// +%ifndef SQLITE_OMIT_ATTACH +cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). { + sqlite3Attach(pParse, F, D, K); +} +cmd ::= DETACH database_kw_opt expr(D). { + sqlite3Detach(pParse, D); +} + +%type key_opt {Expr*} +%destructor key_opt {sqlite3ExprDelete(pParse->db, $$);} +key_opt(A) ::= . { A = 0; } +key_opt(A) ::= KEY expr(X). { A = X; } + +database_kw_opt ::= DATABASE. +database_kw_opt ::= . +%endif SQLITE_OMIT_ATTACH + +////////////////////////// REINDEX collation ////////////////////////////////// +%ifndef SQLITE_OMIT_REINDEX +cmd ::= REINDEX. {sqlite3Reindex(pParse, 0, 0);} +cmd ::= REINDEX nm(X) dbnm(Y). {sqlite3Reindex(pParse, &X, &Y);} +%endif SQLITE_OMIT_REINDEX + +/////////////////////////////////// ANALYZE /////////////////////////////////// +%ifndef SQLITE_OMIT_ANALYZE +cmd ::= ANALYZE. {sqlite3Analyze(pParse, 0, 0);} +cmd ::= ANALYZE nm(X) dbnm(Y). {sqlite3Analyze(pParse, &X, &Y);} +%endif + +//////////////////////// ALTER TABLE table ... //////////////////////////////// +%ifndef SQLITE_OMIT_ALTERTABLE +%ifndef SQLITE_OMIT_VIRTUALTABLE +cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). { + sqlite3AlterRenameTable(pParse,X,&Z); +} + +// The ALTER TABLE ADD COLUMN command. This is broken into two sections so +// that sqlite3AlterBeginAddColumn() is called before parsing the various +// constraints and so on (carglist) attached to the new column definition. +cmd ::= alter_add(Y) carglist. { + Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n; + sqlite3AlterFinishAddColumn(pParse, &Y); +} +alter_add(A) ::= ALTER TABLE fullname(X) ADD kwcolumn_opt nm(Y) typetoken(Z). { + disableLookaside(pParse); + sqlite3AlterBeginAddColumn(pParse, X); + sqlite3AddColumn(pParse, Y, Z); + A = Y; +} + +cmd ::= ALTER TABLE fullname(X) DROP kwcolumn_opt nm(Y). { + sqlite3AlterDropColumn(pParse, X, &Y); +} +cmd ::= ALTER TABLE fullname(X) RENAME kwcolumn_opt nm(Y) TO nm(Z). { + sqlite3AlterRenameColumn(pParse, X, &Y, &Z); +} +cmd ::= ALTER TABLE fullname(X) DROP CONSTRAINT nm(Y). { + sqlite3AlterDropConstraint(pParse, X, &Y, 0); +} +cmd ::= ALTER TABLE fullname(X) ALTER kwcolumn_opt nm(Y) DROP NOT NULL. { + sqlite3AlterDropConstraint(pParse, X, 0, &Y); +} +cmd ::= ALTER TABLE fullname(X) ALTER kwcolumn_opt nm(Y) SET NOT(Z) NULL onconf. { + sqlite3AlterSetNotNull(pParse, X, &Y, &Z); +} +cmd ::= ALTER TABLE fullname(X) ADD CONSTRAINT(Y) nm(Z) CHECK LP(A) expr(E) RP(B) onconf. { + sqlite3AlterAddConstraint(pParse, X, &Y, &Z, A.z+1, (B.z-A.z-1), E); +} +cmd ::= ALTER TABLE fullname(X) ADD CHECK(Y) LP(A) expr(E) RP(B) onconf. { + sqlite3AlterAddConstraint(pParse, X, &Y, 0, A.z+1, (B.z-A.z-1), E); +} + +kwcolumn_opt ::= . +kwcolumn_opt ::= COLUMNKW. + +%endif SQLITE_OMIT_VIRTUALTABLE +%endif SQLITE_OMIT_ALTERTABLE + +//////////////////////// CREATE VIRTUAL TABLE ... ///////////////////////////// +%ifndef SQLITE_OMIT_VIRTUALTABLE +cmd ::= create_vtab. {sqlite3VtabFinishParse(pParse,0);} +cmd ::= create_vtab LP vtabarglist RP(X). {sqlite3VtabFinishParse(pParse,&X);} +create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E) + nm(X) dbnm(Y) USING nm(Z). { + sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E); +} +vtabarglist ::= vtabarg. +vtabarglist ::= vtabarglist COMMA vtabarg. +vtabarg ::= . {sqlite3VtabArgInit(pParse);} +vtabarg ::= vtabarg vtabargtoken. +vtabargtoken ::= ANY(X). {sqlite3VtabArgExtend(pParse,&X);} +vtabargtoken ::= lp anylist RP(X). {sqlite3VtabArgExtend(pParse,&X);} +lp ::= LP(X). {sqlite3VtabArgExtend(pParse,&X);} +anylist ::= . +anylist ::= anylist LP anylist RP. +anylist ::= anylist ANY. +%endif SQLITE_OMIT_VIRTUALTABLE + + +//////////////////////// COMMON TABLE EXPRESSIONS //////////////////////////// +%type wqlist {With*} +%destructor wqlist {sqlite3WithDelete(pParse->db, $$);} +%type wqitem {Cte*} +// %destructor wqitem {sqlite3CteDelete(pParse->db, $$);} // not reachable + +with ::= . +%ifndef SQLITE_OMIT_CTE +with ::= WITH wqlist(W). { sqlite3WithPush(pParse, W, 1); } +with ::= WITH RECURSIVE wqlist(W). { sqlite3WithPush(pParse, W, 1); } + +%type wqas {u8} +wqas(A) ::= AS. {A = M10d_Any;} +wqas(A) ::= AS MATERIALIZED. {A = M10d_Yes;} +wqas(A) ::= AS NOT MATERIALIZED. {A = M10d_No;} +wqitem(A) ::= withnm(X) eidlist_opt(Y) wqas(M) LP select(Z) RP. { + A = sqlite3CteNew(pParse, &X, Y, Z, M); /*A-overwrites-X*/ +} +withnm(A) ::= nm(A). {pParse->bHasWith = 1;} +wqlist(A) ::= wqitem(X). { + A = sqlite3WithAdd(pParse, 0, X); /*A-overwrites-X*/ +} +wqlist(A) ::= wqlist(A) COMMA wqitem(X). { + A = sqlite3WithAdd(pParse, A, X); +} +%endif SQLITE_OMIT_CTE + +//////////////////////// WINDOW FUNCTION EXPRESSIONS ///////////////////////// +// These must be at the end of this file. Specifically, the rules that +// introduce tokens WINDOW, OVER and FILTER must appear last. This causes +// the integer values assigned to these tokens to be larger than all other +// tokens that may be output by the tokenizer except TK_SPACE, TK_COMMENT, +// and TK_ILLEGAL. +// +%ifndef SQLITE_OMIT_WINDOWFUNC +%type windowdefn_list {Window*} +%destructor windowdefn_list {sqlite3WindowListDelete(pParse->db, $$);} +windowdefn_list(A) ::= windowdefn(A). +windowdefn_list(A) ::= windowdefn_list(Y) COMMA windowdefn(Z). { + assert( Z!=0 ); + sqlite3WindowChain(pParse, Z, Y); + Z->pNextWin = Y; + A = Z; +} + +%type windowdefn {Window*} +%destructor windowdefn {sqlite3WindowDelete(pParse->db, $$);} +windowdefn(A) ::= nm(X) AS LP window(Y) RP. { + if( ALWAYS(Y) ){ + Y->zName = sqlite3DbStrNDup(pParse->db, X.z, X.n); + } + A = Y; +} + +%type window {Window*} +%destructor window {sqlite3WindowDelete(pParse->db, $$);} + +%type frame_opt {Window*} +%destructor frame_opt {sqlite3WindowDelete(pParse->db, $$);} + +%type part_opt {ExprList*} +%destructor part_opt {sqlite3ExprListDelete(pParse->db, $$);} + +%type filter_clause {Expr*} +%destructor filter_clause {sqlite3ExprDelete(pParse->db, $$);} + +%type over_clause {Window*} +%destructor over_clause {sqlite3WindowDelete(pParse->db, $$);} + +%type filter_over {Window*} +%destructor filter_over {sqlite3WindowDelete(pParse->db, $$);} + +%type range_or_rows {int} + +%type frame_bound {struct FrameBound} +%destructor frame_bound {sqlite3ExprDelete(pParse->db, $$.pExpr);} +%type frame_bound_s {struct FrameBound} +%destructor frame_bound_s {sqlite3ExprDelete(pParse->db, $$.pExpr);} +%type frame_bound_e {struct FrameBound} +%destructor frame_bound_e {sqlite3ExprDelete(pParse->db, $$.pExpr);} + +window(A) ::= PARTITION BY nexprlist(X) orderby_opt(Y) frame_opt(Z). { + A = sqlite3WindowAssemble(pParse, Z, X, Y, 0); +} +window(A) ::= nm(W) PARTITION BY nexprlist(X) orderby_opt(Y) frame_opt(Z). { + A = sqlite3WindowAssemble(pParse, Z, X, Y, &W); +} +window(A) ::= ORDER BY sortlist(Y) frame_opt(Z). { + A = sqlite3WindowAssemble(pParse, Z, 0, Y, 0); +} +window(A) ::= nm(W) ORDER BY sortlist(Y) frame_opt(Z). { + A = sqlite3WindowAssemble(pParse, Z, 0, Y, &W); +} +window(A) ::= frame_opt(A). +window(A) ::= nm(W) frame_opt(Z). { + A = sqlite3WindowAssemble(pParse, Z, 0, 0, &W); +} + +frame_opt(A) ::= . { + A = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0); +} +frame_opt(A) ::= range_or_rows(X) frame_bound_s(Y) frame_exclude_opt(Z). { + A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, TK_CURRENT, 0, Z); +} +frame_opt(A) ::= range_or_rows(X) BETWEEN frame_bound_s(Y) AND + frame_bound_e(Z) frame_exclude_opt(W). { + A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, Z.eType, Z.pExpr, W); +} + +range_or_rows(A) ::= RANGE|ROWS|GROUPS(X). {A = @X; /*A-overwrites-X*/} + +frame_bound_s(A) ::= frame_bound(X). {A = X;} +frame_bound_s(A) ::= UNBOUNDED(X) PRECEDING. {A.eType = @X; A.pExpr = 0;} +frame_bound_e(A) ::= frame_bound(X). {A = X;} +frame_bound_e(A) ::= UNBOUNDED(X) FOLLOWING. {A.eType = @X; A.pExpr = 0;} + +frame_bound(A) ::= expr(X) PRECEDING|FOLLOWING(Y). + {A.eType = @Y; A.pExpr = X;} +frame_bound(A) ::= CURRENT(X) ROW. {A.eType = @X; A.pExpr = 0;} + +%type frame_exclude_opt {u8} +frame_exclude_opt(A) ::= . {A = 0;} +frame_exclude_opt(A) ::= EXCLUDE frame_exclude(X). {A = X;} + +%type frame_exclude {u8} +frame_exclude(A) ::= NO(X) OTHERS. {A = @X; /*A-overwrites-X*/} +frame_exclude(A) ::= CURRENT(X) ROW. {A = @X; /*A-overwrites-X*/} +frame_exclude(A) ::= GROUP|TIES(X). {A = @X; /*A-overwrites-X*/} + + +%type window_clause {Window*} +%destructor window_clause {sqlite3WindowListDelete(pParse->db, $$);} +window_clause(A) ::= WINDOW windowdefn_list(B). { A = B; } + +filter_over(A) ::= filter_clause(F) over_clause(O). { + if( O ){ + O->pFilter = F; + }else{ + sqlite3ExprDelete(pParse->db, F); + } + A = O; +} +filter_over(A) ::= over_clause(O). { + A = O; +} +filter_over(A) ::= filter_clause(F). { + A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( A ){ + A->eFrmType = TK_FILTER; + A->pFilter = F; + }else{ + sqlite3ExprDelete(pParse->db, F); + } +} + +over_clause(A) ::= OVER LP window(Z) RP. { + A = Z; + assert( A!=0 ); +} +over_clause(A) ::= OVER nm(Z). { + A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( A ){ + A->zName = sqlite3DbStrNDup(pParse->db, Z.z, Z.n); + } +} + +filter_clause(A) ::= FILTER LP WHERE expr(X) RP. { A = X; } +%endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* +** The code generator needs some extra TK_ token values for tokens that +** are synthesized and do not actually appear in the grammar: +*/ +%token + COLUMN /* Reference to a table column */ + AGG_FUNCTION /* An aggregate function */ + AGG_COLUMN /* An aggregated column */ + TRUEFALSE /* True or false keyword */ + ISNOT /* Combination of IS and NOT */ + FUNCTION /* A function invocation */ + UPLUS /* Unary plus */ + UMINUS /* Unary minus */ + TRUTH /* IS TRUE or IS FALSE or IS NOT TRUE or IS NOT FALSE */ + REGISTER /* Reference to a VDBE register */ + VECTOR /* Vector */ + SELECT_COLUMN /* Choose a single column from a multi-column SELECT */ + IF_NULL_ROW /* the if-null-row operator */ + ASTERISK /* The "*" in count(*) and similar */ + SPAN /* The span operator */ + ERROR /* An expression containing an error */ +. + +term(A) ::= QNUMBER(X). { + A=tokenExpr(pParse,@X,X); + sqlite3DequoteNumber(pParse, A); +} + +/* There must be no more than 255 tokens defined above. If this grammar +** is extended with new rules and tokens, they must either be so few in +** number that TK_SPAN is no more than 255, or else the new tokens must +** appear after this line. +*/ +%include { +#if TK_SPAN>255 +# error too many tokens in the grammar +#endif +} + +/* +** The TK_SPACE, TK_COMMENT, and TK_ILLEGAL tokens must be the last three +** tokens. The parser depends on this. Those tokens are not used in any +** grammar rule. They are only used by the tokenizer. Declare them last +** so that they are guaranteed to be the last three. +*/ +%token SPACE COMMENT ILLEGAL. diff --git a/internal/reference/tokenize.c b/internal/reference/tokenize.c new file mode 100644 index 0000000..fa9a562 --- /dev/null +++ b/internal/reference/tokenize.c @@ -0,0 +1,899 @@ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** An tokenizer for SQL +** +** This file contains C code that splits an SQL input string up into +** individual tokens and sends those tokens one-by-one over to the +** parser for analysis. +*/ +#include "sqliteInt.h" +#include + +/* Character classes for tokenizing +** +** In the sqlite3GetToken() function, a switch() on aiClass[c] is implemented +** using a lookup table, whereas a switch() directly on c uses a binary search. +** The lookup table is much faster. To maximize speed, and to ensure that +** a lookup table is used, all of the classes need to be small integers and +** all of them need to be used within the switch. +*/ +#define CC_X 0 /* The letter 'x', or start of BLOB literal */ +#define CC_KYWD0 1 /* First letter of a keyword */ +#define CC_KYWD 2 /* Alphabetics or '_'. Usable in a keyword */ +#define CC_DIGIT 3 /* Digits */ +#define CC_DOLLAR 4 /* '$' */ +#define CC_VARALPHA 5 /* '@', '#', ':'. Alphabetic SQL variables */ +#define CC_VARNUM 6 /* '?'. Numeric SQL variables */ +#define CC_SPACE 7 /* Space characters */ +#define CC_QUOTE 8 /* '"', '\'', or '`'. String literals, quoted ids */ +#define CC_QUOTE2 9 /* '['. [...] style quoted ids */ +#define CC_PIPE 10 /* '|'. Bitwise OR or concatenate */ +#define CC_MINUS 11 /* '-'. Minus or SQL-style comment */ +#define CC_LT 12 /* '<'. Part of < or <= or <> */ +#define CC_GT 13 /* '>'. Part of > or >= */ +#define CC_EQ 14 /* '='. Part of = or == */ +#define CC_BANG 15 /* '!'. Part of != */ +#define CC_SLASH 16 /* '/'. / or c-style comment */ +#define CC_LP 17 /* '(' */ +#define CC_RP 18 /* ')' */ +#define CC_SEMI 19 /* ';' */ +#define CC_PLUS 20 /* '+' */ +#define CC_STAR 21 /* '*' */ +#define CC_PERCENT 22 /* '%' */ +#define CC_COMMA 23 /* ',' */ +#define CC_AND 24 /* '&' */ +#define CC_TILDA 25 /* '~' */ +#define CC_DOT 26 /* '.' */ +#define CC_ID 27 /* unicode characters usable in IDs */ +#define CC_ILLEGAL 28 /* Illegal character */ +#define CC_NUL 29 /* 0x00 */ +#define CC_BOM 30 /* First byte of UTF8 BOM: 0xEF 0xBB 0xBF */ + +static const unsigned char aiClass[] = { +#ifdef SQLITE_ASCII +/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ +/* 0x */ 29, 28, 28, 28, 28, 28, 28, 28, 28, 7, 7, 28, 7, 7, 28, 28, +/* 1x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +/* 2x */ 7, 15, 8, 5, 4, 22, 24, 8, 17, 18, 21, 20, 23, 11, 26, 16, +/* 3x */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 19, 12, 14, 13, 6, +/* 4x */ 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 5x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 9, 28, 28, 28, 2, +/* 6x */ 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 7x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 28, 10, 28, 25, 28, +/* 8x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* 9x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Ax */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Bx */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Cx */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Dx */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Ex */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 30, +/* Fx */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27 +#endif +#ifdef SQLITE_EBCDIC +/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ +/* 0x */ 29, 28, 28, 28, 28, 7, 28, 28, 28, 28, 28, 28, 7, 7, 28, 28, +/* 1x */ 28, 28, 28, 28, 28, 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +/* 2x */ 28, 28, 28, 28, 28, 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +/* 3x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +/* 4x */ 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 26, 12, 17, 20, 10, +/* 5x */ 24, 28, 28, 28, 28, 28, 28, 28, 28, 28, 15, 4, 21, 18, 19, 28, +/* 6x */ 11, 16, 28, 28, 28, 28, 28, 28, 28, 28, 28, 23, 22, 2, 13, 6, +/* 7x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 8, 5, 5, 5, 8, 14, 8, +/* 8x */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28, +/* 9x */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28, +/* Ax */ 28, 25, 1, 1, 1, 1, 1, 0, 2, 2, 28, 28, 28, 28, 28, 28, +/* Bx */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 9, 28, 28, 28, 28, 28, +/* Cx */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28, +/* Dx */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28, +/* Ex */ 28, 28, 1, 1, 1, 1, 1, 0, 2, 2, 28, 28, 28, 28, 28, 28, +/* Fx */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 28, 28, 28, 28, 28, 28, +#endif +}; + +/* +** The charMap() macro maps alphabetic characters (only) into their +** lower-case ASCII equivalent. On ASCII machines, this is just +** an upper-to-lower case map. On EBCDIC machines we also need +** to adjust the encoding. The mapping is only valid for alphabetics +** which are the only characters for which this feature is used. +** +** Used by keywordhash.h +*/ +#ifdef SQLITE_ASCII +# define charMap(X) sqlite3UpperToLower[(unsigned char)X] +#endif +#ifdef SQLITE_EBCDIC +# define charMap(X) ebcdicToAscii[(unsigned char)X] +const unsigned char ebcdicToAscii[] = { +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, /* 6x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */ + 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* 8x */ + 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* 9x */ + 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ax */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */ + 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* Cx */ + 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* Dx */ + 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ex */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Fx */ +}; +#endif + +/* +** The sqlite3KeywordCode function looks up an identifier to determine if +** it is a keyword. If it is a keyword, the token code of that keyword is +** returned. If the input is not a keyword, TK_ID is returned. +** +** The implementation of this routine was generated by a program, +** mkkeywordhash.c, located in the tool subdirectory of the distribution. +** The output of the mkkeywordhash.c program is written into a file +** named keywordhash.h and then included into this source file by +** the #include below. +*/ +#include "keywordhash.h" + + +/* +** If X is a character that can be used in an identifier then +** IdChar(X) will be true. Otherwise it is false. +** +** For ASCII, any character with the high-order bit set is +** allowed in an identifier. For 7-bit characters, +** sqlite3IsIdChar[X] must be 1. +** +** For EBCDIC, the rules are more complex but have the same +** end result. +** +** Ticket #1066. the SQL standard does not allow '$' in the +** middle of identifiers. But many SQL implementations do. +** SQLite will allow '$' in identifiers for compatibility. +** But the feature is undocumented. +*/ +#ifdef SQLITE_ASCII +#define IdChar(C) ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0) +#endif +#ifdef SQLITE_EBCDIC +const char sqlite3IsEbcdicIdChar[] = { +/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 4x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, /* 5x */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, /* 6x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, /* 7x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, /* 8x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, /* 9x */ + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, /* Ax */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Cx */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Dx */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Ex */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, /* Fx */ +}; +#define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40])) +#endif + +/* Make the IdChar function accessible from ctime.c and alter.c */ +int sqlite3IsIdChar(u8 c){ return IdChar(c); } + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Return the id of the next token in string (*pz). Before returning, set +** (*pz) to point to the byte following the parsed token. +*/ +static int getToken(const unsigned char **pz){ + const unsigned char *z = *pz; + int t; /* Token type to return */ + do { + z += sqlite3GetToken(z, &t); + }while( t==TK_SPACE || t==TK_COMMENT ); + if( t==TK_ID + || t==TK_STRING + || t==TK_JOIN_KW + || t==TK_WINDOW + || t==TK_OVER + || sqlite3ParserFallback(t)==TK_ID + ){ + t = TK_ID; + } + *pz = z; + return t; +} + +/* +** The following three functions are called immediately after the tokenizer +** reads the keywords WINDOW, OVER and FILTER, respectively, to determine +** whether the token should be treated as a keyword or an SQL identifier. +** This cannot be handled by the usual lemon %fallback method, due to +** the ambiguity in some constructions. e.g. +** +** SELECT sum(x) OVER ... +** +** In the above, "OVER" might be a keyword, or it might be an alias for the +** sum(x) expression. If a "%fallback ID OVER" directive were added to +** grammar, then SQLite would always treat "OVER" as an alias, making it +** impossible to call a window-function without a FILTER clause. +** +** WINDOW is treated as a keyword if: +** +** * the following token is an identifier, or a keyword that can fallback +** to being an identifier, and +** * the token after than one is TK_AS. +** +** OVER is a keyword if: +** +** * the previous token was TK_RP, and +** * the next token is either TK_LP or an identifier. +** +** FILTER is a keyword if: +** +** * the previous token was TK_RP, and +** * the next token is TK_LP. +*/ +static int analyzeWindowKeyword(const unsigned char *z){ + int t; + t = getToken(&z); + if( t!=TK_ID ) return TK_ID; + t = getToken(&z); + if( t!=TK_AS ) return TK_ID; + return TK_WINDOW; +} +static int analyzeOverKeyword(const unsigned char *z, int lastToken){ + if( lastToken==TK_RP ){ + int t = getToken(&z); + if( t==TK_LP || t==TK_ID ) return TK_OVER; + } + return TK_ID; +} +static int analyzeFilterKeyword(const unsigned char *z, int lastToken){ + if( lastToken==TK_RP && getToken(&z)==TK_LP ){ + return TK_FILTER; + } + return TK_ID; +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* +** Return the length (in bytes) of the token that begins at z[0]. +** Store the token type in *tokenType before returning. +*/ +i64 sqlite3GetToken(const unsigned char *z, int *tokenType){ + i64 i; + int c; + switch( aiClass[*z] ){ /* Switch on the character-class of the first byte + ** of the token. See the comment on the CC_ defines + ** above. */ + case CC_SPACE: { + testcase( z[0]==' ' ); + testcase( z[0]=='\t' ); + testcase( z[0]=='\n' ); + testcase( z[0]=='\f' ); + testcase( z[0]=='\r' ); + for(i=1; sqlite3Isspace(z[i]); i++){} + *tokenType = TK_SPACE; + return i; + } + case CC_MINUS: { + if( z[1]=='-' ){ + for(i=2; (c=z[i])!=0 && c!='\n'; i++){} + *tokenType = TK_COMMENT; + return i; + }else if( z[1]=='>' ){ + *tokenType = TK_PTR; + return 2 + (z[2]=='>'); + } + *tokenType = TK_MINUS; + return 1; + } + case CC_LP: { + *tokenType = TK_LP; + return 1; + } + case CC_RP: { + *tokenType = TK_RP; + return 1; + } + case CC_SEMI: { + *tokenType = TK_SEMI; + return 1; + } + case CC_PLUS: { + *tokenType = TK_PLUS; + return 1; + } + case CC_STAR: { + *tokenType = TK_STAR; + return 1; + } + case CC_SLASH: { + if( z[1]!='*' || z[2]==0 ){ + *tokenType = TK_SLASH; + return 1; + } + for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){} + if( c ) i++; + *tokenType = TK_COMMENT; + return i; + } + case CC_PERCENT: { + *tokenType = TK_REM; + return 1; + } + case CC_EQ: { + *tokenType = TK_EQ; + return 1 + (z[1]=='='); + } + case CC_LT: { + if( (c=z[1])=='=' ){ + *tokenType = TK_LE; + return 2; + }else if( c=='>' ){ + *tokenType = TK_NE; + return 2; + }else if( c=='<' ){ + *tokenType = TK_LSHIFT; + return 2; + }else{ + *tokenType = TK_LT; + return 1; + } + } + case CC_GT: { + if( (c=z[1])=='=' ){ + *tokenType = TK_GE; + return 2; + }else if( c=='>' ){ + *tokenType = TK_RSHIFT; + return 2; + }else{ + *tokenType = TK_GT; + return 1; + } + } + case CC_BANG: { + if( z[1]!='=' ){ + *tokenType = TK_ILLEGAL; + return 1; + }else{ + *tokenType = TK_NE; + return 2; + } + } + case CC_PIPE: { + if( z[1]!='|' ){ + *tokenType = TK_BITOR; + return 1; + }else{ + *tokenType = TK_CONCAT; + return 2; + } + } + case CC_COMMA: { + *tokenType = TK_COMMA; + return 1; + } + case CC_AND: { + *tokenType = TK_BITAND; + return 1; + } + case CC_TILDA: { + *tokenType = TK_BITNOT; + return 1; + } + case CC_QUOTE: { + int delim = z[0]; + testcase( delim=='`' ); + testcase( delim=='\'' ); + testcase( delim=='"' ); + for(i=1; (c=z[i])!=0; i++){ + if( c==delim ){ + if( z[i+1]==delim ){ + i++; + }else{ + break; + } + } + } + if( c=='\'' ){ + *tokenType = TK_STRING; + return i+1; + }else if( c!=0 ){ + *tokenType = TK_ID; + return i+1; + }else{ + *tokenType = TK_ILLEGAL; + return i; + } + } + case CC_DOT: { +#ifndef SQLITE_OMIT_FLOATING_POINT + if( !sqlite3Isdigit(z[1]) ) +#endif + { + *tokenType = TK_DOT; + return 1; + } + /* If the next character is a digit, this is a floating point + ** number that begins with ".". Fall thru into the next case */ + /* no break */ deliberate_fall_through + } + case CC_DIGIT: { + testcase( z[0]=='0' ); testcase( z[0]=='1' ); testcase( z[0]=='2' ); + testcase( z[0]=='3' ); testcase( z[0]=='4' ); testcase( z[0]=='5' ); + testcase( z[0]=='6' ); testcase( z[0]=='7' ); testcase( z[0]=='8' ); + testcase( z[0]=='9' ); testcase( z[0]=='.' ); + *tokenType = TK_INTEGER; +#ifndef SQLITE_OMIT_HEX_INTEGER + if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){ + for(i=3; 1; i++){ + if( sqlite3Isxdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } + }else +#endif + { + for(i=0; 1; i++){ + if( sqlite3Isdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } +#ifndef SQLITE_OMIT_FLOATING_POINT + if( z[i]=='.' ){ + if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT; + for(i++; 1; i++){ + if( sqlite3Isdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } + } + if( (z[i]=='e' || z[i]=='E') && + ( sqlite3Isdigit(z[i+1]) + || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2])) + ) + ){ + if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT; + for(i+=2; 1; i++){ + if( sqlite3Isdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } + } +#endif + } + while( IdChar(z[i]) ){ + *tokenType = TK_ILLEGAL; + i++; + } + return i; + } + case CC_QUOTE2: { + for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){} + *tokenType = c==']' ? TK_ID : TK_ILLEGAL; + return i; + } + case CC_VARNUM: { + *tokenType = TK_VARIABLE; + for(i=1; sqlite3Isdigit(z[i]); i++){} + return i; + } + case CC_DOLLAR: + case CC_VARALPHA: { + i64 n = 0; + testcase( z[0]=='$' ); testcase( z[0]=='@' ); + testcase( z[0]==':' ); testcase( z[0]=='#' ); + *tokenType = TK_VARIABLE; + for(i=1; (c=z[i])!=0; i++){ + if( IdChar(c) ){ + n++; +#ifndef SQLITE_OMIT_TCL_VARIABLE + }else if( c=='(' && n>0 ){ + do{ + i++; + }while( (c=z[i])!=0 && !sqlite3Isspace(c) && c!=')' ); + if( c==')' ){ + i++; + }else{ + *tokenType = TK_ILLEGAL; + } + break; + }else if( c==':' && z[i+1]==':' ){ + i++; +#endif + }else{ + break; + } + } + if( n==0 ) *tokenType = TK_ILLEGAL; + return i; + } + case CC_KYWD0: { + if( aiClass[z[1]]>CC_KYWD ){ i = 1; break; } + for(i=2; aiClass[z[i]]<=CC_KYWD; i++){} + if( IdChar(z[i]) ){ + /* This token started out using characters that can appear in keywords, + ** but z[i] is a character not allowed within keywords, so this must + ** be an identifier instead */ + i++; + break; + } + *tokenType = TK_ID; + return keywordCode((char*)z, i, tokenType); + } + case CC_X: { +#ifndef SQLITE_OMIT_BLOB_LITERAL + testcase( z[0]=='x' ); testcase( z[0]=='X' ); + if( z[1]=='\'' ){ + *tokenType = TK_BLOB; + for(i=2; sqlite3Isxdigit(z[i]); i++){} + if( z[i]!='\'' || i%2 ){ + *tokenType = TK_ILLEGAL; + while( z[i] && z[i]!='\'' ){ i++; } + } + if( z[i] ) i++; + return i; + } +#endif + /* If it is not a BLOB literal, then it must be an ID, since no + ** SQL keywords start with the letter 'x'. Fall through */ + /* no break */ deliberate_fall_through + } + case CC_KYWD: + case CC_ID: { + i = 1; + break; + } + case CC_BOM: { + if( z[1]==0xbb && z[2]==0xbf ){ + *tokenType = TK_SPACE; + return 3; + } + i = 1; + break; + } + case CC_NUL: { + *tokenType = TK_ILLEGAL; + return 0; + } + default: { + *tokenType = TK_ILLEGAL; + return 1; + } + } + while( IdChar(z[i]) ){ i++; } + *tokenType = TK_ID; + return i; +} + +/* +** Run the parser on the given SQL string. +*/ +int sqlite3RunParser(Parse *pParse, const char *zSql){ + int nErr = 0; /* Number of errors encountered */ + void *pEngine; /* The LEMON-generated LALR(1) parser */ + i64 n = 0; /* Length of the next token token */ + int tokenType; /* type of the next token */ + int lastTokenParsed = -1; /* type of the previous token */ + sqlite3 *db = pParse->db; /* The database connection */ + i64 mxSqlLen; /* Max length of an SQL string */ + Parse *pParentParse = 0; /* Outer parse context, if any */ +#ifdef sqlite3Parser_ENGINEALWAYSONSTACK + yyParser sEngine; /* Space to hold the Lemon-generated Parser object */ +#endif + VVA_ONLY( u8 startedWithOom = db->mallocFailed ); + + assert( zSql!=0 ); + mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; + if( db->nVdbeActive==0 ){ + AtomicStore(&db->u1.isInterrupted, 0); + } + pParse->rc = SQLITE_OK; + pParse->zTail = zSql; +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_ParserTrace ){ + printf("parser: [[[%s]]]\n", zSql); + sqlite3ParserTrace(stdout, "parser: "); + }else{ + sqlite3ParserTrace(0, 0); + } +#endif +#ifdef sqlite3Parser_ENGINEALWAYSONSTACK + pEngine = &sEngine; + sqlite3ParserInit(pEngine, pParse); +#else + pEngine = sqlite3ParserAlloc(sqlite3Malloc, pParse); + if( pEngine==0 ){ + sqlite3OomFault(db); + return SQLITE_NOMEM_BKPT; + } +#endif + assert( pParse->pNewTable==0 ); + assert( pParse->pNewTrigger==0 ); + assert( pParse->nVar==0 ); + assert( pParse->pVList==0 ); + pParentParse = db->pParse; + db->pParse = pParse; + while( 1 ){ + n = sqlite3GetToken((u8*)zSql, &tokenType); + mxSqlLen -= n; + if( mxSqlLen<0 ){ + pParse->rc = SQLITE_TOOBIG; + pParse->nErr++; + break; + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( tokenType>=TK_WINDOW ){ + assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER + || tokenType==TK_ILLEGAL || tokenType==TK_WINDOW + || tokenType==TK_QNUMBER || tokenType==TK_COMMENT + ); +#else + if( tokenType>=TK_SPACE ){ + assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL + || tokenType==TK_QNUMBER || tokenType==TK_COMMENT + ); +#endif /* SQLITE_OMIT_WINDOWFUNC */ + if( AtomicLoad(&db->u1.isInterrupted) ){ + pParse->rc = SQLITE_INTERRUPT; + pParse->nErr++; + break; + } + if( tokenType==TK_SPACE ){ + zSql += n; + continue; + } + if( zSql[0]==0 ){ + /* Upon reaching the end of input, call the parser two more times + ** with tokens TK_SEMI and 0, in that order. */ + if( lastTokenParsed==TK_SEMI ){ + tokenType = 0; + }else if( lastTokenParsed==0 ){ + break; + }else{ + tokenType = TK_SEMI; + } + n = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + }else if( tokenType==TK_WINDOW ){ + assert( n==6 ); + tokenType = analyzeWindowKeyword((const u8*)&zSql[6]); + }else if( tokenType==TK_OVER ){ + assert( n==4 ); + tokenType = analyzeOverKeyword((const u8*)&zSql[4], lastTokenParsed); + }else if( tokenType==TK_FILTER ){ + assert( n==6 ); + tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed); +#endif /* SQLITE_OMIT_WINDOWFUNC */ + }else if( tokenType==TK_COMMENT + && (db->init.busy || (db->flags & SQLITE_Comments)!=0) + ){ + /* Ignore SQL comments if either (1) we are reparsing the schema or + ** (2) SQLITE_DBCONFIG_ENABLE_COMMENTS is turned on (the default). */ + zSql += n; + continue; + }else if( tokenType!=TK_QNUMBER ){ + Token x; + x.z = zSql; + x.n = (u32)n; + sqlite3ErrorMsg(pParse, "unrecognized token: \"%T\"", &x); + break; + } + } + pParse->sLastToken.z = zSql; + pParse->sLastToken.n = (u32)n; + sqlite3Parser(pEngine, tokenType, pParse->sLastToken); + lastTokenParsed = tokenType; + zSql += n; + assert( db->mallocFailed==0 || pParse->rc!=SQLITE_OK || startedWithOom ); + if( pParse->rc!=SQLITE_OK ) break; + } + assert( nErr==0 ); +#ifdef YYTRACKMAXSTACKDEPTH + sqlite3_mutex_enter(sqlite3MallocMutex()); + sqlite3StatusHighwater(SQLITE_STATUS_PARSER_STACK, + sqlite3ParserStackPeak(pEngine) + ); + sqlite3_mutex_leave(sqlite3MallocMutex()); +#endif /* YYDEBUG */ +#ifdef sqlite3Parser_ENGINEALWAYSONSTACK + sqlite3ParserFinalize(pEngine); +#else + sqlite3ParserFree(pEngine, sqlite3_free); +#endif + if( db->mallocFailed ){ + pParse->rc = SQLITE_NOMEM_BKPT; + } + if( pParse->zErrMsg || (pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE) ){ + if( pParse->zErrMsg==0 ){ + pParse->zErrMsg = sqlite3DbStrDup(db, sqlite3ErrStr(pParse->rc)); + } + if( (pParse->prepFlags & SQLITE_PREPARE_DONT_LOG)==0 ){ + sqlite3_log(pParse->rc, "%s in \"%s\"", pParse->zErrMsg, pParse->zTail); + } + nErr++; + } + pParse->zTail = zSql; +#ifndef SQLITE_OMIT_VIRTUALTABLE + sqlite3_free(pParse->apVtabLock); +#endif + + if( pParse->pNewTable && !IN_SPECIAL_PARSE ){ + /* If the pParse->declareVtab flag is set, do not delete any table + ** structure built up in pParse->pNewTable. The calling code (see vtab.c) + ** will take responsibility for freeing the Table structure. + */ + sqlite3DeleteTable(db, pParse->pNewTable); + } + if( pParse->pNewTrigger && !IN_RENAME_OBJECT ){ + sqlite3DeleteTrigger(db, pParse->pNewTrigger); + } + if( pParse->pVList ) sqlite3DbNNFreeNN(db, pParse->pVList); + db->pParse = pParentParse; + assert( nErr==0 || pParse->rc!=SQLITE_OK ); + return nErr; +} + + +#ifdef SQLITE_ENABLE_NORMALIZE +/* +** Insert a single space character into pStr if the current string +** ends with an identifier +*/ +static void addSpaceSeparator(sqlite3_str *pStr){ + if( pStr->nChar && sqlite3IsIdChar(pStr->zText[pStr->nChar-1]) ){ + sqlite3_str_append(pStr, " ", 1); + } +} + +/* +** Compute a normalization of the SQL given by zSql[0..nSql-1]. Return +** the normalization in space obtained from sqlite3DbMalloc(). Or return +** NULL if anything goes wrong or if zSql is NULL. +*/ +char *sqlite3Normalize( + Vdbe *pVdbe, /* VM being reprepared */ + const char *zSql /* The original SQL string */ +){ + sqlite3 *db; /* The database connection */ + int i; /* Next unread byte of zSql[] */ + i64 n; /* length of current token */ + int tokenType; /* type of current token */ + int prevType = 0; /* Previous non-whitespace token */ + int nParen; /* Number of nested levels of parentheses */ + int iStartIN; /* Start of RHS of IN operator in z[] */ + int nParenAtIN; /* Value of nParent at start of RHS of IN operator */ + u32 j; /* Bytes of normalized SQL generated so far */ + sqlite3_str *pStr; /* The normalized SQL string under construction */ + + db = sqlite3VdbeDb(pVdbe); + tokenType = -1; + nParen = iStartIN = nParenAtIN = 0; + pStr = sqlite3_str_new(db); + assert( pStr!=0 ); /* sqlite3_str_new() never returns NULL */ + for(i=0; zSql[i] && pStr->accError==0; i+=n){ + if( tokenType!=TK_SPACE ){ + prevType = tokenType; + } + n = sqlite3GetToken((unsigned char*)zSql+i, &tokenType); + if( NEVER(n<=0) ) break; + switch( tokenType ){ + case TK_COMMENT: + case TK_SPACE: { + break; + } + case TK_NULL: { + if( prevType==TK_IS || prevType==TK_NOT ){ + sqlite3_str_append(pStr, " NULL", 5); + break; + } + /* no break */ deliberate_fall_through + } + case TK_STRING: + case TK_INTEGER: + case TK_FLOAT: + case TK_VARIABLE: + case TK_BLOB: { + sqlite3_str_append(pStr, "?", 1); + break; + } + case TK_LP: { + nParen++; + if( prevType==TK_IN ){ + iStartIN = pStr->nChar; + nParenAtIN = nParen; + } + sqlite3_str_append(pStr, "(", 1); + break; + } + case TK_RP: { + if( iStartIN>0 && nParen==nParenAtIN ){ + assert( pStr->nChar>=(u32)iStartIN ); + pStr->nChar = iStartIN+1; + sqlite3_str_append(pStr, "?,?,?", 5); + iStartIN = 0; + } + nParen--; + sqlite3_str_append(pStr, ")", 1); + break; + } + case TK_ID: { + iStartIN = 0; + j = pStr->nChar; + if( sqlite3Isquote(zSql[i]) ){ + char *zId = sqlite3DbStrNDup(db, zSql+i, n); + int nId; + int eType = 0; + if( zId==0 ) break; + sqlite3Dequote(zId); + if( zSql[i]=='"' && sqlite3VdbeUsesDoubleQuotedString(pVdbe, zId) ){ + sqlite3_str_append(pStr, "?", 1); + sqlite3DbFree(db, zId); + break; + } + nId = sqlite3Strlen30(zId); + if( sqlite3GetToken((u8*)zId, &eType)==nId && eType==TK_ID ){ + addSpaceSeparator(pStr); + sqlite3_str_append(pStr, zId, nId); + }else{ + sqlite3_str_appendf(pStr, "\"%w\"", zId); + } + sqlite3DbFree(db, zId); + }else{ + addSpaceSeparator(pStr); + sqlite3_str_append(pStr, zSql+i, n); + } + while( jnChar ){ + pStr->zText[j] = sqlite3Tolower(pStr->zText[j]); + j++; + } + break; + } + case TK_SELECT: { + iStartIN = 0; + /* no break */ deliberate_fall_through + } + default: { + if( sqlite3IsIdChar(zSql[i]) ) addSpaceSeparator(pStr); + j = pStr->nChar; + sqlite3_str_append(pStr, zSql+i, n); + while( jnChar ){ + pStr->zText[j] = sqlite3Toupper(pStr->zText[j]); + j++; + } + break; + } + } + } + if( tokenType!=TK_SEMI ) sqlite3_str_append(pStr, ";", 1); + return sqlite3_str_finish(pStr); +} +#endif /* SQLITE_ENABLE_NORMALIZE */ diff --git a/parser/fuzz_test.go b/parser/fuzz_test.go index fdc441f..42fff2a 100644 --- a/parser/fuzz_test.go +++ b/parser/fuzz_test.go @@ -136,7 +136,8 @@ func TestRecursionLimit(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { _, err := parser.ParseString(tt.sql) - if err == nil || err.Error() != "Recursion limit" { + var pe *parser.Error + if !errors.As(err, &pe) || pe.Message != "Recursion limit" { t.Fatalf("got %v, want a Recursion limit rejection", err) } }) diff --git a/parser/parser.go b/parser/parser.go index a6b4db8..6ee4faa 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -20,6 +20,7 @@ package parser import ( "context" + "fmt" "io" "strings" @@ -28,15 +29,44 @@ import ( "github.com/sqlc-dev/meyer/token" ) -// Error is the error type returned for inputs meyer rejects. Message -// matches SQLite's parser wording (e.g. `near "FROM": syntax error`); -// Offset is the byte offset of the error in the input, or -1 if unknown. +// Error is the error type returned for inputs meyer rejects. +// +// Message matches SQLite's parser wording byte for byte (`near "FROM": +// syntax error`), and is the field to compare against when conformance is +// what matters. Offset is the byte offset of the error, the analogue of +// sqlite3_error_offset, or -1 when the position is unknown. SQL is the input +// that failed, so that Error can turn the offset into a line and column. type Error struct { Message string Offset int + SQL string +} + +// Error renders the message with a position when there is one, in the +// "line:column: message" form editors and compilers expect. Positions are +// stored as byte offsets and converted only here, on demand. +func (e *Error) Error() string { + if e.Offset < 0 || e.Offset > len(e.SQL) { + return e.Message + } + line, col := LineCol(e.SQL, e.Offset) + return fmt.Sprintf("%d:%d: %s", line, col, e.Message) } -func (e *Error) Error() string { return e.Message } +// LineCol converts a byte offset into a 1-based line and column. +func LineCol(src string, offset int) (line, col int) { + if offset < 0 || offset > len(src) { + return 0, 0 + } + line, start := 1, 0 + for i := 0; i < offset; i++ { + if src[i] == '\n' { + line++ + start = i + 1 + } + } + return line, offset - start + 1 +} // Parse reads SQL from r and returns one ast.Stmt per statement. func Parse(ctx context.Context, r io.Reader) ([]ast.Stmt, error) { @@ -183,7 +213,7 @@ func (p *parser) expect(k token.Kind) token.Token { // same position. func (p *parser) checkIllegal() { if t := p.toks[p.i]; t.Kind == token.ILLEGAL { - panic(bail{&Error{Message: `unrecognized token: "` + t.Text + `"`, Offset: t.Pos}}) + p.fail(`unrecognized token: "`+t.Text+`"`, t.Pos) } } @@ -199,14 +229,14 @@ func (p *parser) syntaxErrorAt(t token.Token) { if t.Kind == token.EOF { // At the end of input SQLite feeds synthetic SEMI and 0 tokens // whose text is empty, which %syntax_error reports this way. - panic(bail{&Error{Message: "incomplete input", Offset: t.Pos}}) + p.fail("incomplete input", t.Pos) } - panic(bail{&Error{Message: `near "` + t.Text + `": syntax error`, Offset: t.Pos}}) + p.fail(`near "`+t.Text+`": syntax error`, t.Pos) } -// fail raises one of SQLite's non-positional parser messages. +// fail aborts the parse with one of SQLite's messages. func (p *parser) fail(msg string, offset int) { - panic(bail{&Error{Message: msg, Offset: offset}}) + panic(bail{&Error{Message: msg, Offset: offset, SQL: p.src}}) } // parseScript implements the top-level rules. From ce42ae7ac18791373c0f6e9a65da810b5e3380c5 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:21:25 +0000 Subject: [PATCH 07/23] Add cmd/difftest, and fix the nine divergences it found MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The corpus is whatever SQLite's test suite happens to contain, which is overwhelmingly valid SQL: fewer than three hundred of its 20,971 cases are rejections, so error fidelity was barely being tested. difftest mutates corpus SQL one token at a time — truncate, delete, duplicate, replace, insert — and checks meyer against a live SQLite build on the verdict, the message and the byte offset. A million mutations take about a minute. Parser bugs it found, all the same shape in the end: SQLite's LALR parser shifts a token as soon as *some* rule can start with it, and only then discovers the rule does not continue, so the error names a later token than a predictive parser would pick. - NOT before INDEXED, DEFERRABLE or MATERIALIZED was only consumed after peeking at what followed, so "FROM t NOT NOT INDEXED" was reported at the first NOT rather than the second, and "AS NOT (" at the NOT. - A BETWEEN lower bound stops at a top-level AND but absorbs a weaker operator, and everything that binds tighter than that: "x BETWEEN a OR b AND c" reads all of "a OR (b AND c)" and then still wants an AND. - A comma between table constraints must be followed by one. - table_option_set recurses on a possibly empty prefix, so a table may have a leading comma before its options: "CREATE TABLE t(a), STRICT". - DEFAULT takes a bare term, so "DEFAULT 'xyzzy'. c" is a syntax error at the dot, not a qualified reference. - A register reference errors from a grammar action, which does not stop SQLite's parser at once: it finishes the token it was handed. A syntax error at that same token wins; one at the next never happens. Two harness fixes: - The syntax-family patterns missed a multi-line message, which happens when the offending token spans lines (an unterminated string runs to the end of the input). Those were being read as semantic failures. - The unreached ranges now also apply when the expectation is a rejection: a parser tripping over text SQLite abandoned never reaches the statement that carries the expected message. Also here: internal/sqlitesrc owns the pinned release and a batched oracle runner, so regenerate-parse and difftest share one pin and one process instead of forking per script — full regeneration drops to ~19s, and the corpus is byte-identical. Batch mode opens a fresh connection per script; reusing one leaks PRAGMA writable_schema across scripts, which changed five corpus files before it was caught. parser/errors_test.go carries the regressions, with every expectation taken from the oracle rather than written by hand. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- CLAUDE.md | 25 ++ README.md | 8 +- cmd/difftest/main.go | 349 ++++++++++++++++++ cmd/regenerate-parse/main.go | 271 +++----------- .../sqlitesrc}/oracle/oracle.c | 77 +++- internal/sqlitesrc/sqlitesrc.go | 262 +++++++++++++ internal/testfile/testfile.go | 48 ++- internal/testfile/testfile_test.go | 30 +- parser/errors_test.go | 111 ++++++ parser/parse_ddl.go | 77 ++-- parser/parse_dml.go | 9 +- parser/parse_expr.go | 128 ++++--- parser/parse_select.go | 19 +- parser/parser.go | 33 ++ parser/parser_test.go | 5 + 15 files changed, 1074 insertions(+), 378 deletions(-) create mode 100644 cmd/difftest/main.go rename {cmd/regenerate-parse => internal/sqlitesrc}/oracle/oracle.c (69%) create mode 100644 internal/sqlitesrc/sqlitesrc.go create mode 100644 parser/errors_test.go diff --git a/CLAUDE.md b/CLAUDE.md index 1cc0774..cf4a763 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -62,6 +62,31 @@ cannot produce: hand-written and meant to be edited; their `.tree` goldens are rewritten with `go test ./parser -update` and reviewed in the diff. +## Differential testing + +The corpus is whatever SQLite's test suite happens to contain, which is +overwhelmingly valid SQL: fewer than three hundred of its 20,971 cases are +rejections, so error fidelity is barely exercised by it. `cmd/difftest` +covers that gap by mutating corpus SQL — truncate, delete, duplicate, +replace or insert one token — and checking that meyer and a live SQLite +build still agree on the verdict, the message and the offset. + +```sh +go run ./cmd/difftest # sweep the whole corpus +go run ./cmd/difftest -files select1,expr # a few files +go run ./cmd/difftest -per 60 -seed 7 # dig harder, reproducibly +``` + +It needs the oracle, so it is a development tool rather than a CI test. What +it finds belongs in `parser/errors_test.go`, whose expectations are taken +from the oracle rather than written by hand. + +Two situations it deliberately skips, because the harness cannot compare +them rather than because meyer might be wrong: a `;` inside parentheses, +where `sqlite3_complete` splits statements differently from a real parse, +and a semantic failure on a statement's last token, which leaves `pzTail` at +the end of the input with nothing to mark the parse as abandoned. + ## The loop ```sh diff --git a/README.md b/README.md index 9477780..7bddc92 100644 --- a/README.md +++ b/README.md @@ -60,9 +60,11 @@ so conformance is defined three ways, in decreasing order of authority: `parser/testdata/ast`, reviewed in diffs. These are meyer's own goldens and never outrank the oracle. -Plus a fuzz target asserting that arbitrary bytes terminate without -panicking, that a rejection is always a `*parser.Error`, and that anything -accepted survives the round trip. +Plus two searches for cases the corpus does not contain: a fuzz target +asserting that arbitrary bytes terminate without panicking, that a rejection +is always a `*parser.Error`, and that anything accepted survives the round +trip; and `cmd/difftest`, which mutates corpus SQL one token at a time and +checks meyer against a live SQLite build, message and byte offset included. ## Acknowledgments diff --git a/cmd/difftest/main.go b/cmd/difftest/main.go new file mode 100644 index 0000000..704c5bd --- /dev/null +++ b/cmd/difftest/main.go @@ -0,0 +1,349 @@ +// Command difftest looks for places where meyer and SQLite disagree. +// +// The vendored corpus is what SQLite's own test suite happens to contain, +// which is overwhelmingly valid SQL: of 20,971 cases fewer than three +// hundred are rejections. Error fidelity — the exact message, at the exact +// byte — is therefore barely exercised by it. difftest fills that gap by +// mutating corpus SQL into inputs nobody wrote on purpose, and checking that +// meyer and the pinned SQLite build still reach the same verdict. +// +// For every mutation both parsers are asked, and the two must agree on: +// +// - accept versus reject, using the same derivation the test harness uses +// (a syntax-family message means reject; a semantic one means the +// statement parsed); +// - the exact message text on rejection; +// - the byte offset, wherever sqlite3_error_offset reported one. +// +// A disagreement is a bug in meyer, and the tool prints a reproducer. +// +// Usage: +// +// go run ./cmd/difftest # sweep the whole corpus +// go run ./cmd/difftest -files select1,expr # a few files +// go run ./cmd/difftest -per 200 -seed 7 # dig harder, reproducibly +package main + +import ( + "flag" + "fmt" + "math/rand" + "os" + "path/filepath" + "runtime" + "sort" + "strings" + "sync" + "sync/atomic" + + "github.com/sqlc-dev/meyer/internal/sqlitesrc" + "github.com/sqlc-dev/meyer/internal/testfile" + "github.com/sqlc-dev/meyer/lexer" + "github.com/sqlc-dev/meyer/parser" + "github.com/sqlc-dev/meyer/token" +) + +// injections are the tokens a mutation may splice in. They are chosen to +// land on grammar decision points rather than to be plausible: a stray +// keyword where a name belongs is exactly where %fallback, the join +// keywords and the window-function lookahead have to be right. +var injections = []string{ + "(", ")", ",", ".", ";", "*", "+", "-", "||", "->", "=", "<", "?", + "SELECT", "FROM", "WHERE", "AS", "ON", "USING", "JOIN", "LEFT", "NATURAL", + "GROUP", "ORDER", "BY", "LIMIT", "OFFSET", "HAVING", "WINDOW", "OVER", + "FILTER", "PARTITION", "RANGE", "ROWS", "PRECEDING", "EXCLUDE", + "NOT", "NULL", "IS", "IN", "LIKE", "ESCAPE", "BETWEEN", "AND", "OR", + "CASE", "WHEN", "THEN", "ELSE", "END", "COLLATE", "DISTINCT", "ALL", + "VALUES", "SET", "INTO", "DEFAULT", "CONSTRAINT", "PRIMARY", "KEY", + "REFERENCES", "GENERATED", "ALWAYS", "INDEXED", "RETURNING", "DO", + "CONFLICT", "MATERIALIZED", "RECURSIVE", "WITH", "UNION", "EXCEPT", + "abort", "rows", "x", "1", "1.5", "'s'", `"q"`, "x'ab'", "?1", ":v", +} + +func main() { + var ( + cacheDir = flag.String("cache", ".sqlite", "cache directory for SQLite artifacts") + testdata = flag.String("testdata", "parser/testdata", "corpus directory") + files = flag.String("files", "", "comma-separated corpus file base names (default: all)") + per = flag.Int("per", 24, "mutations per corpus case") + seed = flag.Int64("seed", 1, "PRNG seed") + jobs = flag.Int("j", runtime.NumCPU(), "oracle worker processes") + examples = flag.Int("examples", 3, "reproducers to print per kind of disagreement") + maxLen = flag.Int("maxlen", 4096, "skip corpus cases longer than this") + ) + flag.Parse() + + inputs, err := loadCorpus(*testdata, *files) + if err != nil { + fatal(err) + } + fmt.Printf("mutating %d corpus cases, %d mutations each\n", len(inputs), *per) + + // Build the oracle once, before the workers race for it. + if _, err := sqlitesrc.Oracle(*cacheDir); err != nil { + fatal(err) + } + + rep := &report{examples: *examples} + work := make(chan string) + var wg sync.WaitGroup + for w := 0; w < *jobs; w++ { + wg.Add(1) + go func(w int) { + defer wg.Done() + r, err := sqlitesrc.NewRunner(*cacheDir) + if err != nil { + fatal(err) + } + defer r.Close() + rng := rand.New(rand.NewSource(*seed + int64(w)*1e6)) + for src := range work { + for _, m := range mutations(src, *per, rng) { + check(r, m, rep) + } + } + }(w) + } + for _, src := range inputs { + if len(src) > *maxLen { + continue + } + work <- src + } + close(work) + wg.Wait() + + rep.print() + if rep.disagreements.Load() > 0 { + os.Exit(1) + } +} + +// check asks both parsers about one input and records any disagreement. +func check(r *sqlitesrc.Runner, sql string, rep *report) { + // The oracle splits a script into statements the way the sqlite3 shell + // does, with sqlite3_complete, which counts no parentheses: a ";" inside + // brackets ends a statement for it. meyer parses the script as a whole. + // Where the two disagree about the boundaries there is nothing to + // compare, and the disagreement is the harness's, not the parser's. + if semicolonInsideParens(sql) { + rep.skipped.Add(1) + return + } + results, err := r.Run(sql) + if err != nil { + fatal(err) + } + rep.checked.Add(1) + c := testfile.Case{SQL: sql, Results: results} + exp := c.Expected() + + // A grammar action that fails on the last token of a statement leaves + // pzTail at the end of the input, so nothing marks the statement as + // abandoned -- yet SQLite stopped feeding tokens and can no longer + // notice that the input was truncated. "CREATE TABLE aux1.t1(" is + // "unknown database aux1" to SQLite and "incomplete input" to meyer, + // and the corpus cannot say which is right. + if exp.OK && truncatedAtEnd(sql, results) { + rep.skipped.Add(1) + return + } + + _, perr := parser.ParseString(sql) + var pe *parser.Error + if perr != nil { + var ok bool + if pe, ok = perr.(*parser.Error); !ok { + rep.add("rejection is not a *parser.Error", sql, perr.Error(), "") + return + } + } + + // A grammar action can abandon a parse part-way through a statement; + // nothing verified the text after that point, whichever way the + // expectation went. + if pe != nil && exp.IsUnreached(pe.Offset) { + rep.skipped.Add(1) + return + } + switch { + case exp.OK && pe == nil: + case exp.OK: + rep.add("meyer rejects, SQLite accepts", sql, pe.Message, "accepted") + case pe == nil: + rep.add("meyer accepts, SQLite rejects", sql, "accepted", exp.Message) + case pe.Message != exp.Message: + rep.add("different message", sql, pe.Message, exp.Message) + case exp.Offset >= 0 && pe.Offset != exp.Offset: + rep.add("different offset", sql, + fmt.Sprintf("%s at %d", pe.Message, pe.Offset), + fmt.Sprintf("%s at %d", exp.Message, exp.Offset)) + } +} + +// semicolonInsideParens reports whether any ";" appears within brackets, +// skipping the quoting and comment forms the tokenizer knows about. +func semicolonInsideParens(sql string) bool { + depth := 0 + for _, t := range lexer.Lex(sql) { + switch t.Kind { + case token.LP: + depth++ + case token.RP: + if depth > 0 { + depth-- + } + case token.SEMI: + if depth > 0 { + return true + } + } + } + return false +} + +// truncatedAtEnd reports whether the last statement failed with a +// non-syntax message raised while its last token was the lookahead. SQLite +// abandons the parse there, so it never reaches the end of the input and +// never reports the truncation. +func truncatedAtEnd(sql string, results []testfile.StmtResult) bool { + if len(results) == 0 { + return false + } + last := results[len(results)-1] + return !last.OK && !testfile.IsSyntaxError(last.Message) && last.Tail >= len(sql) +} + +// mutations derives up to n one-edit variants of src. Every edit works on +// token boundaries, because a byte-level edit mostly produces lexer noise, +// while a token-level one lands on a grammar decision. +func mutations(src string, n int, rng *rand.Rand) []string { + toks := lexer.Lex(src) + if len(toks) < 2 { + return nil + } + toks = toks[:len(toks)-1] // drop EOF + seen := map[string]bool{src: true} + var out []string + add := func(s string) { + if s != "" && !seen[s] { + seen[s] = true + out = append(out, s) + } + } + for len(out) < n { + before := len(out) + i := rng.Intn(len(toks)) + t := toks[i] + switch rng.Intn(5) { + case 0: // truncate: the commonest way real SQL is broken + add(src[:t.Pos]) + case 1: // delete a token + add(src[:t.Pos] + src[t.End:]) + case 2: // duplicate a token + add(src[:t.End] + " " + t.Text + src[t.End:]) + case 3: // replace a token + add(src[:t.Pos] + injections[rng.Intn(len(injections))] + src[t.End:]) + case 4: // insert a token + add(src[:t.Pos] + injections[rng.Intn(len(injections))] + " " + src[t.Pos:]) + } + if len(out) == before { + // Every edit at this position was a duplicate; with few tokens + // the space is small, so stop rather than spin. + if len(seen) > 4*len(toks) { + break + } + } + } + return out +} + +// loadCorpus returns the SQL of every case in the requested corpus files. +func loadCorpus(dir, files string) ([]string, error) { + var paths []string + if files == "" { + var err error + paths, err = filepath.Glob(filepath.Join(dir, "*.test")) + if err != nil { + return nil, err + } + } else { + for _, name := range strings.Split(files, ",") { + paths = append(paths, filepath.Join(dir, name+".test")) + } + } + if len(paths) == 0 { + return nil, fmt.Errorf("no corpus files under %s", dir) + } + var out []string + for _, path := range paths { + cases, err := testfile.Read(path) + if err != nil { + return nil, err + } + for _, c := range cases { + out = append(out, c.SQL) + } + } + return out, nil +} + +// report groups disagreements so that a hundred instances of one bug read as +// one bug. +type report struct { + examples int + checked atomic.Int64 + skipped atomic.Int64 + disagreements atomic.Int64 + + mu sync.Mutex + buckets map[string]*bucket +} + +type bucket struct { + n int + shown []string +} + +func (r *report) add(kind, sql, got, want string) { + r.disagreements.Add(1) + r.mu.Lock() + defer r.mu.Unlock() + if r.buckets == nil { + r.buckets = map[string]*bucket{} + } + b := r.buckets[kind] + if b == nil { + b = &bucket{} + r.buckets[kind] = b + } + b.n++ + if len(b.shown) < r.examples { + b.shown = append(b.shown, fmt.Sprintf(" sql: %q\n meyer: %s\n sqlite: %s", + strings.TrimSpace(sql), got, want)) + } +} + +func (r *report) print() { + r.mu.Lock() + defer r.mu.Unlock() + kinds := make([]string, 0, len(r.buckets)) + for k := range r.buckets { + kinds = append(kinds, k) + } + sort.Slice(kinds, func(i, j int) bool { return r.buckets[kinds[i]].n > r.buckets[kinds[j]].n }) + for _, k := range kinds { + b := r.buckets[k] + fmt.Printf("\n### %s (%d)\n", k, b.n) + for _, s := range b.shown { + fmt.Println(s) + } + } + fmt.Printf("\nchecked %d mutations, %d disagreements (%d skipped as not comparable)\n", + r.checked.Load(), r.disagreements.Load(), r.skipped.Load()) +} + +func fatal(err error) { + fmt.Fprintln(os.Stderr, "difftest:", err) + os.Exit(1) +} diff --git a/cmd/regenerate-parse/main.go b/cmd/regenerate-parse/main.go index 715516d..92e91d2 100644 --- a/cmd/regenerate-parse/main.go +++ b/cmd/regenerate-parse/main.go @@ -14,9 +14,9 @@ // and merge parser/testdata/.metadata.json (new cases start as // todo; existing entries are preserved). // -// The SQLite release is pinned by version and SHA-256 below. Artifacts are -// downloaded from sqlite.org into the cache directory (default .sqlite/, -// gitignored) and reused on later runs. +// The SQLite release is pinned in internal/sqlitesrc, which downloads the +// artifacts into the cache directory (default .sqlite/, gitignored) and +// reuses them on later runs. // // Usage: // @@ -29,41 +29,20 @@ package main import ( - "archive/zip" - "bytes" - "crypto/sha256" "flag" "fmt" - "io" - "net/http" "os" - "os/exec" "path/filepath" "runtime" "sort" - "strconv" "strings" "sync" - _ "embed" - + "github.com/sqlc-dev/meyer/internal/sqlitesrc" "github.com/sqlc-dev/meyer/internal/tclextract" "github.com/sqlc-dev/meyer/internal/testfile" ) -//go:embed oracle/oracle.c -var oracleSource []byte - -// The pinned SQLite release. When advancing the pin, update all four -// constants and parser/testdata/README.md, rerun with no -files, and review -// the corpus diff. -const ( - sqliteVersion = "3530400" // 3.53.4 - sqliteYear = "2026" - amalgamationSHA = "1e71ddf93849c6a6ecf58b827c0692073d2dd7ee40196158068f7b29f422e87d" - srcSHA = "d18fa15aec74d8c17e1463f861095adc01b5ad190256acb4f91d22f0368d232b" -) - // allScripts lists every test/*.test script of the pinned source tree, in // sorted order. PLAN.md milestone 2 named a hand-picked starter set; taking // the whole suite instead costs a few megabytes and quadruples the case @@ -90,11 +69,13 @@ func main() { ) flag.Parse() - oracle, err := ensureOracle(*cacheDir) - if err != nil { + // Workers each own an oracle process; the pinned build is compiled on + // the first call, before any of them start. + if _, err := sqlitesrc.Oracle(*cacheDir); err != nil { fatal(err) } - testDir, err := ensureSourceTests(*cacheDir) + oracle := func() (*sqlitesrc.Runner, error) { return sqlitesrc.NewRunner(*cacheDir) } + testDir, err := sqlitesrc.TestScripts(*cacheDir) if err != nil { fatal(err) } @@ -158,12 +139,16 @@ func main() { totals.SkippedSubst, totals.SkippedForm) } +// newRunner starts an oracle process; regenerateFile calls it once per +// worker. +type newRunner func() (*sqlitesrc.Runner, error) + func fatal(err error) { fmt.Fprintln(os.Stderr, "regenerate-parse:", err) os.Exit(1) } -func regenerateFile(oracle, testDir, outDir, name string, jobs int) ([]testfile.Case, tclextract.Stats, error) { +func regenerateFile(oracle newRunner, testDir, outDir, name string, jobs int) ([]testfile.Case, tclextract.Stats, error) { src, err := os.ReadFile(filepath.Join(testDir, name+".test")) if err != nil { return nil, tclextract.Stats{}, err @@ -171,28 +156,45 @@ func regenerateFile(oracle, testDir, outDir, name string, jobs int) ([]testfile. extracted, stats := tclextract.File(name, src) cases := make([]testfile.Case, len(extracted)) - sem := make(chan struct{}, jobs) + work := make(chan int) var wg sync.WaitGroup var mu sync.Mutex var firstErr error - for i, ex := range extracted { + fail := func(err error) { + mu.Lock() + if firstErr == nil { + firstErr = err + } + mu.Unlock() + } + for w := 0; w < jobs; w++ { wg.Add(1) - go func(i int, ex tclextract.Case) { + go func() { defer wg.Done() - sem <- struct{}{} - defer func() { <-sem }() - results, err := runOracle(oracle, ex.SQL) + r, err := oracle() if err != nil { - mu.Lock() - if firstErr == nil { - firstErr = fmt.Errorf("case %s: %w", ex.Name, err) + fail(err) + for range work { // drain so producers are not blocked } - mu.Unlock() return } - cases[i] = testfile.Case{Name: ex.Name, SQL: ex.SQL, Results: results} - }(i, ex) + defer r.Close() + for i := range work { + results, err := r.Run(extracted[i].SQL) + if err != nil { + fail(fmt.Errorf("case %s: %w", extracted[i].Name, err)) + continue + } + cases[i] = testfile.Case{ + Name: extracted[i].Name, SQL: extracted[i].SQL, Results: results, + } + } + }() + } + for i := range extracted { + work <- i } + close(work) wg.Wait() if firstErr != nil { return nil, stats, firstErr @@ -218,68 +220,6 @@ func regenerateFile(oracle, testDir, outDir, name string, jobs int) ([]testfile. return kept, stats, nil } -// runOracle feeds one case's SQL to the oracle binary and parses its output. -func runOracle(oracle, sql string) ([]testfile.StmtResult, error) { - cmd := exec.Command(oracle) - cmd.Stdin = strings.NewReader(sql) - var out, errb bytes.Buffer - cmd.Stdout = &out - cmd.Stderr = &errb - if err := cmd.Run(); err != nil { - return nil, fmt.Errorf("oracle: %w: %s", err, errb.String()) - } - var results []testfile.StmtResult - for _, line := range strings.Split(strings.TrimRight(out.String(), "\n"), "\n") { - // An error message can itself contain a newline, because the - // offending token can: "SELECT X'0102, 1" reports the rest of the - // input, newline included, as an unrecognized token. Such a line is - // a continuation of the message before it. The corpus file format - // cannot hold a multi-line message, so testfile.CheckCase drops the - // case later; joining here keeps the observation faithful until - // then instead of failing the whole run. - if !strings.HasPrefix(line, "stmt ") && len(results) > 0 { - results[len(results)-1].Message += "\n" + line - continue - } - if line == "" { - continue - } - r, err := parseOracleLine(line) - if err != nil { - return nil, err - } - results = append(results, r) - } - return results, nil -} - -func parseOracleLine(line string) (testfile.StmtResult, error) { - fields := strings.SplitN(line, " ", 3) - if len(fields) != 3 || fields[0] != "stmt" { - return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) - } - off, err := strconv.Atoi(fields[1]) - if err != nil { - return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) - } - if fields[2] == "ok" { - return testfile.StmtResult{Offset: off, OK: true}, nil - } - rest := strings.SplitN(strings.TrimPrefix(fields[2], "err "), " ", 4) - if !strings.HasPrefix(fields[2], "err ") || len(rest) != 4 { - return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) - } - rc, err1 := strconv.Atoi(rest[0]) - erroff, err2 := strconv.Atoi(rest[1]) - tail, err3 := strconv.Atoi(rest[2]) - if err1 != nil || err2 != nil || err3 != nil { - return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) - } - return testfile.StmtResult{ - Offset: off, RC: rc, ErrOffset: erroff, Tail: tail, Message: rest[3], - }, nil -} - // mergeMetadata reconciles the sidecar with the regenerated case list: // genuinely new cases start as todo, cases already in the previous corpus // keep their previous state (todo or passing), and entries for removed cases @@ -297,128 +237,3 @@ func mergeMetadata(testPath string, prevCases, prevMeta map[string]bool, cases [ } return len(todo), nil } - -// ensureOracle downloads the pinned amalgamation and compiles the oracle -// binary into the cache directory, reusing existing artifacts. -func ensureOracle(cacheDir string) (string, error) { - oracle := filepath.Join(cacheDir, "oracle-"+sqliteVersion) - if _, err := os.Stat(oracle); err == nil { - return oracle, nil - } - amalgDir := filepath.Join(cacheDir, "sqlite-amalgamation-"+sqliteVersion) - if _, err := os.Stat(filepath.Join(amalgDir, "sqlite3.c")); err != nil { - zipPath, err := download(cacheDir, "sqlite-amalgamation-"+sqliteVersion+".zip", amalgamationSHA) - if err != nil { - return "", err - } - if err := unzip(zipPath, cacheDir, nil); err != nil { - return "", err - } - } - srcPath := filepath.Join(cacheDir, "oracle.c") - if err := os.WriteFile(srcPath, oracleSource, 0o644); err != nil { - return "", err - } - cc := os.Getenv("CC") - if cc == "" { - cc = "cc" - } - fmt.Printf("compiling oracle (%s, SQLite %s)...\n", cc, sqliteVersion) - cmd := exec.Command(cc, "-O1", "-o", oracle, srcPath, - filepath.Join(amalgDir, "sqlite3.c"), "-I", amalgDir, - "-lpthread", "-ldl", "-lm") - if out, err := cmd.CombinedOutput(); err != nil { - return "", fmt.Errorf("compiling oracle: %w\n%s", err, out) - } - return oracle, nil -} - -// ensureSourceTests downloads the pinned source zip and extracts test/*.test, -// returning the directory holding them. -func ensureSourceTests(cacheDir string) (string, error) { - testDir := filepath.Join(cacheDir, "sqlite-src-"+sqliteVersion, "test") - if _, err := os.Stat(filepath.Join(testDir, "select1.test")); err == nil { - return testDir, nil - } - zipPath, err := download(cacheDir, "sqlite-src-"+sqliteVersion+".zip", srcSHA) - if err != nil { - return "", err - } - only := func(name string) bool { - return strings.Contains(name, "/test/") && strings.HasSuffix(name, ".test") - } - if err := unzip(zipPath, cacheDir, only); err != nil { - return "", err - } - return testDir, nil -} - -// download fetches https://sqlite.org// into cacheDir (reusing an -// existing file) and verifies its SHA-256. -func download(cacheDir, name, wantSHA string) (string, error) { - if err := os.MkdirAll(cacheDir, 0o755); err != nil { - return "", err - } - dest := filepath.Join(cacheDir, name) - if data, err := os.ReadFile(dest); err == nil { - if fmt.Sprintf("%x", sha256.Sum256(data)) == wantSHA { - return dest, nil - } - fmt.Printf("cached %s has wrong checksum; re-downloading\n", name) - } - url := "https://sqlite.org/" + sqliteYear + "/" + name - fmt.Printf("downloading %s...\n", url) - resp, err := http.Get(url) - if err != nil { - return "", err - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - return "", fmt.Errorf("GET %s: %s", url, resp.Status) - } - data, err := io.ReadAll(resp.Body) - if err != nil { - return "", err - } - if got := fmt.Sprintf("%x", sha256.Sum256(data)); got != wantSHA { - return "", fmt.Errorf("%s: checksum mismatch: got %s, want %s", name, got, wantSHA) - } - if err := os.WriteFile(dest, data, 0o644); err != nil { - return "", err - } - return dest, nil -} - -func unzip(zipPath, destDir string, keep func(string) bool) error { - zr, err := zip.OpenReader(zipPath) - if err != nil { - return err - } - defer zr.Close() - for _, f := range zr.File { - if f.FileInfo().IsDir() || (keep != nil && !keep(f.Name)) { - continue - } - clean := filepath.Clean(f.Name) - if strings.HasPrefix(clean, "..") || filepath.IsAbs(clean) { - return fmt.Errorf("unsafe path in zip: %q", f.Name) - } - dest := filepath.Join(destDir, clean) - if err := os.MkdirAll(filepath.Dir(dest), 0o755); err != nil { - return err - } - rc, err := f.Open() - if err != nil { - return err - } - data, err := io.ReadAll(rc) - rc.Close() - if err != nil { - return err - } - if err := os.WriteFile(dest, data, 0o644); err != nil { - return err - } - } - return nil -} diff --git a/cmd/regenerate-parse/oracle/oracle.c b/internal/sqlitesrc/oracle/oracle.c similarity index 69% rename from cmd/regenerate-parse/oracle/oracle.c rename to internal/sqlitesrc/oracle/oracle.c index 5494906..c9799c5 100644 --- a/cmd/regenerate-parse/oracle/oracle.c +++ b/internal/sqlitesrc/oracle/oracle.c @@ -27,6 +27,21 @@ ** carry no . ** ** SQLite error messages never contain newlines, so the line format is safe. +** (An error message can still span lines when the offending token does -- +** an unterminated string, say -- because the token text is interpolated.) +** +** With -batch, scripts are read from stdin as a stream of records, each a +** decimal byte count on its own line followed by exactly that many bytes. +** The results of each record are followed by a line reading "==". This +** exists so that a caller checking many thousands of small inputs does not +** pay to start a process for each one. +** +** Each record still gets a brand new connection. Preparing a statement is +** not supposed to change anything, but sqlite3Pragma runs at prepare time, +** so a "PRAGMA writable_schema=ON" in one script would otherwise decide +** whether a later one may write to sqlite_master. Reusing the connection +** also perturbs sqlite3_error_offset. Opening :memory: is cheap next to +** starting a process, which is the cost this mode exists to avoid. */ #include "sqlite3.h" #include @@ -74,22 +89,9 @@ static int onlyWhitespace(const char *z, size_t n){ return 1; } -int main(int argc, char **argv){ - FILE *in = stdin; - if( argc>1 ){ - in = fopen(argv[1], "rb"); - if( in==0 ){ fprintf(stderr, "cannot open %s\n", argv[1]); return 2; } - } - size_t n = 0; - char *sql = readAll(in, &n); - if( sql==0 ){ fprintf(stderr, "out of memory\n"); return 2; } - - sqlite3 *db = 0; - if( sqlite3_open(":memory:", &db)!=SQLITE_OK ){ - fprintf(stderr, "cannot open :memory:\n"); - return 2; - } - +/* Classify every statement of one script, writing the result lines to +** stdout. sql must be NUL terminated at sql[n]. */ +static void runScript(sqlite3 *db, char *sql, size_t n){ size_t pos = 0; while( pos1 && strcmp(argv[1], "-batch")==0 ){ + char line[64]; + while( fgets(line, sizeof(line), stdin) ){ + long want = strtol(line, 0, 10); + if( want<0 ){ fprintf(stderr, "bad record length\n"); return 2; } + char *sql = malloc((size_t)want+1); + if( sql==0 ){ fprintf(stderr, "out of memory\n"); return 2; } + if( want>0 && fread(sql, 1, (size_t)want, stdin)!=(size_t)want ){ + fprintf(stderr, "short record\n"); + return 2; + } + sql[want] = 0; + if( sqlite3_open(":memory:", &db)!=SQLITE_OK ){ + fprintf(stderr, "cannot open :memory:\n"); + return 2; + } + runScript(db, sql, (size_t)want); + sqlite3_close(db); + printf("==\n"); + fflush(stdout); + free(sql); + } + return 0; + } + + if( sqlite3_open(":memory:", &db)!=SQLITE_OK ){ + fprintf(stderr, "cannot open :memory:\n"); + return 2; + } + FILE *in = stdin; + if( argc>1 ){ + in = fopen(argv[1], "rb"); + if( in==0 ){ fprintf(stderr, "cannot open %s\n", argv[1]); return 2; } + } + size_t n = 0; + char *sql = readAll(in, &n); + if( sql==0 ){ fprintf(stderr, "out of memory\n"); return 2; } + runScript(db, sql, n); sqlite3_close(db); free(sql); return 0; diff --git a/internal/sqlitesrc/sqlitesrc.go b/internal/sqlitesrc/sqlitesrc.go new file mode 100644 index 0000000..3cdc52a --- /dev/null +++ b/internal/sqlitesrc/sqlitesrc.go @@ -0,0 +1,262 @@ +// Package sqlitesrc manages the pinned SQLite release that meyer is tested +// against. It downloads the official artifacts, verifies their checksums, +// compiles the oracle program, and unpacks the test scripts. +// +// The pin lives here so that every command shares one version, and the +// artifacts live in a cache directory (.sqlite/ by default, gitignored) that +// is reused across runs. +package sqlitesrc + +import ( + "archive/zip" + "bufio" + "crypto/sha256" + "fmt" + "io" + "net/http" + "os" + "os/exec" + "path/filepath" + "strconv" + "strings" + + _ "embed" + + "github.com/sqlc-dev/meyer/internal/testfile" +) + +//go:embed oracle/oracle.c +var oracleSource []byte + +// The pinned SQLite release. When advancing the pin, update all four +// constants and parser/testdata/README.md, regenerate the corpus, and +// review the diff. +const ( + Version = "3530400" // 3.53.4 + year = "2026" + amalgamationSHA = "1e71ddf93849c6a6ecf58b827c0692073d2dd7ee40196158068f7b29f422e87d" + srcSHA = "d18fa15aec74d8c17e1463f861095adc01b5ad190256acb4f91d22f0368d232b" +) + +// Oracle returns the path to the compiled oracle binary, downloading the +// pinned amalgamation and building it on first use. +func Oracle(cacheDir string) (string, error) { + oracle := filepath.Join(cacheDir, "oracle-"+Version) + if _, err := os.Stat(oracle); err == nil { + return oracle, nil + } + amalgDir := filepath.Join(cacheDir, "sqlite-amalgamation-"+Version) + if _, err := os.Stat(filepath.Join(amalgDir, "sqlite3.c")); err != nil { + zipPath, err := download(cacheDir, "sqlite-amalgamation-"+Version+".zip", amalgamationSHA) + if err != nil { + return "", err + } + if err := unzip(zipPath, cacheDir, nil); err != nil { + return "", err + } + } + srcPath := filepath.Join(cacheDir, "oracle.c") + if err := os.WriteFile(srcPath, oracleSource, 0o644); err != nil { + return "", err + } + cc := os.Getenv("CC") + if cc == "" { + cc = "cc" + } + fmt.Printf("compiling oracle (%s, SQLite %s)...\n", cc, Version) + cmd := exec.Command(cc, "-O1", "-o", oracle, srcPath, + filepath.Join(amalgDir, "sqlite3.c"), "-I", amalgDir, + "-lpthread", "-ldl", "-lm") + if out, err := cmd.CombinedOutput(); err != nil { + return "", fmt.Errorf("compiling oracle: %w\n%s", err, out) + } + return oracle, nil +} + +// TestScripts returns the directory holding the pinned release's +// test/*.test scripts, downloading and unpacking them on first use. +func TestScripts(cacheDir string) (string, error) { + testDir := filepath.Join(cacheDir, "sqlite-src-"+Version, "test") + if _, err := os.Stat(filepath.Join(testDir, "select1.test")); err == nil { + return testDir, nil + } + zipPath, err := download(cacheDir, "sqlite-src-"+Version+".zip", srcSHA) + if err != nil { + return "", err + } + only := func(name string) bool { + return strings.Contains(name, "/test/") && strings.HasSuffix(name, ".test") + } + if err := unzip(zipPath, cacheDir, only); err != nil { + return "", err + } + return testDir, nil +} + +// download fetches https://sqlite.org// into cacheDir (reusing an +// existing file) and verifies its SHA-256. +func download(cacheDir, name, wantSHA string) (string, error) { + if err := os.MkdirAll(cacheDir, 0o755); err != nil { + return "", err + } + dest := filepath.Join(cacheDir, name) + if data, err := os.ReadFile(dest); err == nil { + if fmt.Sprintf("%x", sha256.Sum256(data)) == wantSHA { + return dest, nil + } + fmt.Printf("cached %s has wrong checksum; re-downloading\n", name) + } + url := "https://sqlite.org/" + year + "/" + name + fmt.Printf("downloading %s...\n", url) + resp, err := http.Get(url) + if err != nil { + return "", err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return "", fmt.Errorf("GET %s: %s", url, resp.Status) + } + data, err := io.ReadAll(resp.Body) + if err != nil { + return "", err + } + if got := fmt.Sprintf("%x", sha256.Sum256(data)); got != wantSHA { + return "", fmt.Errorf("%s: checksum mismatch: got %s, want %s", name, got, wantSHA) + } + if err := os.WriteFile(dest, data, 0o644); err != nil { + return "", err + } + return dest, nil +} + +func unzip(zipPath, destDir string, keep func(string) bool) error { + zr, err := zip.OpenReader(zipPath) + if err != nil { + return err + } + defer zr.Close() + for _, f := range zr.File { + if f.FileInfo().IsDir() || (keep != nil && !keep(f.Name)) { + continue + } + clean := filepath.Clean(f.Name) + if strings.HasPrefix(clean, "..") || filepath.IsAbs(clean) { + return fmt.Errorf("unsafe path in zip: %q", f.Name) + } + dest := filepath.Join(destDir, clean) + if err := os.MkdirAll(filepath.Dir(dest), 0o755); err != nil { + return err + } + rc, err := f.Open() + if err != nil { + return err + } + data, err := io.ReadAll(rc) + rc.Close() + if err != nil { + return err + } + if err := os.WriteFile(dest, data, 0o644); err != nil { + return err + } + } + return nil +} + +// Runner drives one long-lived oracle process in batch mode. Starting a +// process per script costs more than classifying one, which matters when a +// caller checks tens of thousands of small inputs; a Runner amortises it +// away. Runners are not safe for concurrent use — start one per worker. +type Runner struct { + cmd *exec.Cmd + in io.WriteCloser + out *bufio.Reader +} + +// NewRunner starts an oracle process, building it first if necessary. +func NewRunner(cacheDir string) (*Runner, error) { + oracle, err := Oracle(cacheDir) + if err != nil { + return nil, err + } + cmd := exec.Command(oracle, "-batch") + cmd.Stderr = os.Stderr + in, err := cmd.StdinPipe() + if err != nil { + return nil, err + } + out, err := cmd.StdoutPipe() + if err != nil { + return nil, err + } + if err := cmd.Start(); err != nil { + return nil, err + } + return &Runner{cmd: cmd, in: in, out: bufio.NewReaderSize(out, 1<<16)}, nil +} + +// Run classifies every statement of one script. +func (r *Runner) Run(sql string) ([]testfile.StmtResult, error) { + if _, err := fmt.Fprintf(r.in, "%d\n%s", len(sql), sql); err != nil { + return nil, fmt.Errorf("oracle: %w", err) + } + var results []testfile.StmtResult + for { + line, err := r.out.ReadString('\n') + if err != nil { + return nil, fmt.Errorf("oracle: %w", err) + } + line = strings.TrimSuffix(line, "\n") + if line == "==" { + return results, nil + } + // An error message can itself contain a newline, because the + // offending token can: "SELECT X'0102, 1" reports the rest of the + // input, newline included, as an unrecognized token. Such a line is + // a continuation of the message before it. + if !strings.HasPrefix(line, "stmt ") && len(results) > 0 { + results[len(results)-1].Message += "\n" + line + continue + } + res, err := parseResultLine(line) + if err != nil { + return nil, err + } + results = append(results, res) + } +} + +// Close shuts the oracle process down. +func (r *Runner) Close() error { + r.in.Close() + return r.cmd.Wait() +} + +// parseResultLine reads one "stmt ..." line of oracle output. The format is +// documented in oracle/oracle.c and mirrored by internal/testfile. +func parseResultLine(line string) (testfile.StmtResult, error) { + fields := strings.SplitN(line, " ", 3) + if len(fields) != 3 || fields[0] != "stmt" { + return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) + } + off, err := strconv.Atoi(fields[1]) + if err != nil { + return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) + } + if fields[2] == "ok" { + return testfile.StmtResult{Offset: off, OK: true}, nil + } + rest := strings.SplitN(strings.TrimPrefix(fields[2], "err "), " ", 4) + if !strings.HasPrefix(fields[2], "err ") || len(rest) != 4 { + return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) + } + rc, err1 := strconv.Atoi(rest[0]) + erroff, err2 := strconv.Atoi(rest[1]) + tail, err3 := strconv.Atoi(rest[2]) + if err1 != nil || err2 != nil || err3 != nil { + return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) + } + return testfile.StmtResult{ + Offset: off, RC: rc, ErrOffset: erroff, Tail: tail, Message: rest[3], + }, nil +} diff --git a/internal/testfile/testfile.go b/internal/testfile/testfile.go index c6900c3..c943e0a 100644 --- a/internal/testfile/testfile.go +++ b/internal/testfile/testfile.go @@ -39,7 +39,6 @@ import ( // StmtResult is one raw oracle observation for a single statement. type StmtResult struct { Offset int // byte offset of the statement within the case SQL - End int // byte offset one past the statement, within the case SQL OK bool // sqlite3_prepare_v2 returned SQLITE_OK RC int // prepare result code when !OK ErrOffset int // sqlite3_error_offset within the case SQL; -1 if unknown @@ -64,7 +63,9 @@ type Expectation struct { // never looked at, because a grammar action failed part-way through a // statement and sqlite3RunParser abandoned the rest of it. The corpus // says nothing about whether that text is valid SQL, so a parser under - // test may fail inside one of these ranges without being wrong. + // test may fail inside one of these ranges without being wrong. A range + // that reaches the end of the input includes the offset one past it, + // which is where a parser reports running out of input. Unreached []Range } @@ -89,9 +90,12 @@ func (e Expectation) IsUnreached(offset int) bool { // proper, as opposed to post-parse semantic analysis. Statements failing with // any other message (no such table, ambiguous column, ...) parsed // successfully and must be accepted by meyer. +// The (?s) flag matters: the offending token is interpolated into the +// message, and a token can contain a newline -- an unterminated string runs +// to the end of the input, newline and all. var syntaxFamily = []*regexp.Regexp{ - regexp.MustCompile(`^near ".*": syntax error$`), - regexp.MustCompile(`^unrecognized token: ".*"$`), + regexp.MustCompile(`(?s)^near ".*": syntax error$`), + regexp.MustCompile(`(?s)^unrecognized token: ".*"$`), regexp.MustCompile(`^incomplete input$`), } @@ -111,18 +115,35 @@ func IsSyntaxError(msg string) bool { // reached. func (c *Case) Expected() Expectation { var unreached []Range - for _, r := range c.Results { + for i, r := range c.Results { if r.OK { continue } if IsSyntaxError(r.Message) { - return Expectation{OK: false, Message: r.Message, Offset: r.ErrOffset} + // Ranges collected from earlier statements still apply: a + // parser that trips over unverified text never reaches this. + return Expectation{ + OK: false, Message: r.Message, Offset: r.ErrOffset, + Unreached: unreached, + } } // A semantic failure means the statement parsed -- but only as far - // as the parser had got when the grammar action raised it. - if r.Tail < r.End { - unreached = append(unreached, Range{Start: r.Tail, End: r.End}) + // as the parser had got when the grammar action raised it. A + // statement runs to the start of the next one, or to the end of the + // case for the last. + end := len(c.SQL) + if i+1 < len(c.Results) { + end = c.Results[i+1].Offset + } + if r.Tail >= end { + continue } + if end == len(c.SQL) { + // Running out of input is reported at the offset one past the + // last byte, so the final range has to include it. + end++ + } + unreached = append(unreached, Range{Start: r.Tail, End: end}) } return Expectation{OK: true, Offset: -1, Unreached: unreached} } @@ -170,15 +191,6 @@ func Read(path string) ([]Case, error) { c.Results = append(c.Results, r) i++ } - // Statement ends are implied by the next statement's offset, and by - // the end of the case SQL for the last one. - for j := range c.Results { - if j+1 < len(c.Results) { - c.Results[j].End = c.Results[j+1].Offset - } else { - c.Results[j].End = len(c.SQL) - } - } cases = append(cases, c) } return cases, nil diff --git a/internal/testfile/testfile_test.go b/internal/testfile/testfile_test.go index 39c7f23..aaf5f6a 100644 --- a/internal/testfile/testfile_test.go +++ b/internal/testfile/testfile_test.go @@ -7,23 +7,20 @@ import ( ) func TestRoundTrip(t *testing.T) { - // Statement ends are derived on read from the following statement's - // offset (and the length of the SQL for the last one), so they are - // spelled out here even though Write does not emit them. cases := []Case{ { Name: "a-1.1", SQL: "CREATE TABLE t1(a int);\nSELECT * FROM t1;\n", Results: []StmtResult{ - {Offset: 0, End: 24, OK: true}, - {Offset: 24, End: 42, RC: 1, ErrOffset: -1, Tail: 42, Message: "no such table: t1"}, + {Offset: 0, OK: true}, + {Offset: 24, RC: 1, ErrOffset: -1, Tail: 42, Message: "no such table: t1"}, }, }, { Name: "a-1.2", SQL: "SELEC 1;\n", Results: []StmtResult{ - {Offset: 0, End: 9, RC: 1, ErrOffset: 0, Tail: 5, Message: `near "SELEC": syntax error`}, + {Offset: 0, RC: 1, ErrOffset: 0, Tail: 5, Message: `near "SELEC": syntax error`}, }, }, } @@ -41,6 +38,9 @@ func TestRoundTrip(t *testing.T) { } func TestExpected(t *testing.T) { + // The SQL is 62 bytes long, so that a Tail short of that marks a + // statement the parser abandoned part-way through. + const sql = "CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN SELECT * FROM; END;" tests := []struct { name string results []StmtResult @@ -51,38 +51,38 @@ func TestExpected(t *testing.T) { {"all ok", []StmtResult{{OK: true}, {OK: true}}, true, "", nil}, { "semantic only", - []StmtResult{{End: 30, RC: 1, ErrOffset: -1, Tail: 30, Message: "no such table: t1"}}, + []StmtResult{{RC: 1, ErrOffset: -1, Tail: len(sql), Message: "no such table: t1"}}, true, "", nil, }, { "syntax after semantic", []StmtResult{ - {Offset: 0, End: 20, RC: 1, ErrOffset: -1, Tail: 20, Message: "no such table: t1"}, - {Offset: 20, End: 40, RC: 1, ErrOffset: 21, Tail: 21, Message: `near "WHERE": syntax error`}, + {Offset: 0, RC: 1, ErrOffset: -1, Tail: 20, Message: "no such table: t1"}, + {Offset: 20, RC: 1, ErrOffset: 21, Tail: 21, Message: `near "WHERE": syntax error`}, }, false, `near "WHERE": syntax error`, nil, }, { "unrecognized token", - []StmtResult{{End: 10, RC: 1, ErrOffset: 3, Tail: 3, Message: `unrecognized token: "0x"`}}, + []StmtResult{{RC: 1, ErrOffset: 3, Tail: 3, Message: `unrecognized token: "0x"`}}, false, `unrecognized token: "0x"`, nil, }, { "incomplete", - []StmtResult{{End: 10, RC: 1, ErrOffset: -1, Tail: 10, Message: "incomplete input"}}, + []StmtResult{{RC: 1, ErrOffset: -1, Tail: len(sql), Message: "incomplete input"}}, false, "incomplete input", nil, }, { // sqlite3BeginTrigger fails at the trigger_decl reduce, so // everything after BEGIN is never parsed. "semantic failure part-way through a statement", - []StmtResult{{Offset: 0, End: 62, RC: 1, ErrOffset: -1, Tail: 42, Message: "no such table: main.t1"}}, - true, "", []Range{{Start: 42, End: 62}}, + []StmtResult{{Offset: 0, RC: 1, ErrOffset: -1, Tail: 42, Message: "no such table: main.t1"}}, + true, "", []Range{{Start: 42, End: len(sql) + 1}}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - c := Case{Name: "x", SQL: "irrelevant\n", Results: tt.results} + c := Case{Name: "x", SQL: sql, Results: tt.results} exp := c.Expected() if exp.OK != tt.wantOK || exp.Message != tt.wantMsg { t.Fatalf("Expected() = %+v, want ok=%v msg=%q", exp, tt.wantOK, tt.wantMsg) @@ -91,7 +91,7 @@ func TestExpected(t *testing.T) { t.Fatalf("Unreached = %+v, want %+v", exp.Unreached, tt.wantUnreached) } for _, r := range tt.wantUnreached { - if !exp.IsUnreached(r.Start) || exp.IsUnreached(r.End) { + if !exp.IsUnreached(r.Start) || !exp.IsUnreached(r.End-1) || exp.IsUnreached(r.End) { t.Fatalf("IsUnreached disagrees with %+v", r) } } diff --git a/parser/errors_test.go b/parser/errors_test.go new file mode 100644 index 0000000..e404aac --- /dev/null +++ b/parser/errors_test.go @@ -0,0 +1,111 @@ +package parser_test + +import ( + "errors" + "testing" + + "github.com/sqlc-dev/meyer/parser" +) + +// errorCases pins meyer's rejection behaviour against SQLite's. Every +// expectation here was taken from the pinned oracle, not written by hand; +// most of the entries are regressions cmd/difftest turned up. +var errorCases = []struct { + sql string + msg string // empty means the input must be accepted + offset int // -1 when SQLite reports no position +}{ + // indexed_opt shifts NOT before it can know INDEXED follows. + {`SELECT * FROM t1 NOT NOT INDEXED`, `near "NOT": syntax error`, 21}, + {`DELETE FROM t NOT NOT INDEXED`, `near "NOT": syntax error`, 18}, + {`SELECT * FROM t NOT`, `incomplete input`, -1}, + // the BETWEEN lower bound absorbs OR but stops at a top-level AND. + {`SELECT 1 BETWEEN 2 OR 3`, `incomplete input`, -1}, + {`SELECT 1 BETWEEN 2 OR 3 AND 4`, `incomplete input`, -1}, + {`SELECT 1 BETWEEN 2 AND 3 AND 4`, "", -1}, + {`SELECT 1 BETWEEN 2 IS 3 AND 4`, "", -1}, + // a comma between table constraints must be followed by one. + {`CREATE TABLE t(a,PRIMARY KEY(a),)`, `near ")": syntax error`, 32}, + {`CREATE TABLE t(a,PRIMARY KEY(a) UNIQUE(a))`, "", -1}, + // table_option_set recurses on an empty prefix, so it may start with a comma. + {`CREATE TABLE t(a),STRICT`, "", -1}, + {`CREATE TABLE t(a),`, `incomplete input`, -1}, + {`CREATE TABLE t(a) STRICT,`, `incomplete input`, -1}, + {`CREATE TABLE t(a),,STRICT`, `near ",": syntax error`, 18}, + // wqas shifts NOT before it can know MATERIALIZED follows. + {`WITH t(a) AS NOT (SELECT 1) SELECT 1`, `near "(": syntax error`, 17}, + // a register reference errors from a grammar action, which does not stop + // the parser until it has finished with the token it was handed: a syntax + // error at that same token wins, one at the next never happens. + {`SELECT #1`, `near "#1": syntax error`, -1}, + {`SELECT #1 #1`, `near "#1": syntax error`, 10}, + {`SELECT #1 FROM t`, `near "#1": syntax error`, 7}, + {`SELECT 1+#1 #2`, `near "#2": syntax error`, 12}, + {`ALTER TABLE t1 ADD CONSTRAINT c1 CHECK( x>#2 )ON ;`, `near "#2": syntax error`, 42}, + // NOT begins a defer_subclause wherever one is allowed, so it is shifted + // before the parser can know DEFERRABLE does not follow. + {`CREATE TABLE c(a NOT LEFT)`, `near "LEFT": syntax error`, 21}, + {`CREATE TABLE c(a REFERENCES p NOT LEFT)`, `near "LEFT": syntax error`, 34}, + {`CREATE TABLE c(a, FOREIGN KEY(a) REFERENCES p NOT LEFT)`, `near "LEFT": syntax error`, 50}, + // DEFAULT takes a bare term, so the dot is not a qualified reference. + {"CREATE TABLE t(a, b DEFAULT 'xyzzy'. c)", `near ".": syntax error`, 35}, + // adjacent literals are an alias only in a result column. + {`SELECT f('a' 'b')`, `near "'b'": syntax error`, 13}, + {`SELECT 'a' 'b'`, "", -1}, + // OFFSET falls back to an identifier only where it has no shift action. + {`SELECT 1 LIMIT 2 offset`, `incomplete input`, -1}, + {`SELECT 1 offset`, "", -1}, + // RAISE, CAST and CTIME_KW are keywords in expression position. + {`SELECT raise`, `incomplete input`, -1}, + {`SELECT cast`, `incomplete input`, -1}, + {`SELECT current_date(1)`, `near "(": syntax error`, 19}, + // VALUES takes no ORDER BY: oneselect hangs it off the SELECT form only. + {`VALUES(1) ORDER BY 1`, `near "ORDER": syntax error`, 10}, + // the pinned build has no UPDATE/DELETE ORDER BY or LIMIT. + {`UPDATE t SET a=1 LIMIT 1`, `near "LIMIT": syntax error`, 17}, + {`DELETE FROM t ORDER BY x`, `near "ORDER": syntax error`, 14}, + {`INSERT INTO t (SELECT 1)`, `near "SELECT": syntax error`, 15}, + // columnlist is not optional. + {`CREATE TABLE t(PRIMARY KEY(a))`, `near "PRIMARY": syntax error`, 15}, + {`CREATE TABLE t()`, `near ")": syntax error`, 15}, + {`SELECT 1 NOT 2`, `near "2": syntax error`, 13}, + {`SELECT 1_x`, `unrecognized token: "1_x"`, 7}, + {`SELECT 1_`, `unrecognized token: "1_"`, -1}, + {`SELECT`, `incomplete input`, -1}, + {`SELECT 'unterminated`, `unrecognized token: "'unterminated"`, 7}, + {`SELECT a FROM`, `incomplete input`, -1}, + {`SELECT (1;)`, `near ";": syntax error`, 9}, + {`SELECT 1 IS NOT DISTINCT FROM 2`, "", -1}, + {`SELECT a COLLATE`, `incomplete input`, -1}, +} + +// TestErrors checks that meyer reproduces SQLite's rejections exactly: the +// same verdict, the same message, and the same byte offset wherever +// sqlite3_error_offset reported one. +// +// The corpus covers this thinly -- fewer than three hundred of its 20,971 +// cases are rejections -- so this table carries the corners that matter, and +// cmd/difftest hunts for more against a live SQLite build. +func TestErrors(t *testing.T) { + for _, tt := range errorCases { + t.Run(tt.sql, func(t *testing.T) { + _, err := parser.ParseString(tt.sql) + if tt.msg == "" { + if err != nil { + t.Fatalf("expected the input to parse, got: %v", err) + } + return + } + var pe *parser.Error + if !errors.As(err, &pe) { + t.Fatalf("expected %q, got %v", tt.msg, err) + } + if pe.Message != tt.msg { + t.Errorf("message:\n got: %s\n want: %s", pe.Message, tt.msg) + } + if tt.offset >= 0 && pe.Offset != tt.offset { + t.Errorf("offset: got %d, want %d", pe.Offset, tt.offset) + } + }) + } +} diff --git a/parser/parse_ddl.go b/parser/parse_ddl.go index 3b5506b..2db2408 100644 --- a/parser/parse_ddl.go +++ b/parser/parse_ddl.go @@ -117,7 +117,12 @@ func (p *parser) parseColumnAndConstraintList(n *ast.CreateTableStmt) { c.Name, pending = pending, nil n.Constraints = append(n.Constraints, c) } - p.accept(token.COMMA) // tconscomma ::= COMMA. / tconscomma ::= . + // tconscomma ::= COMMA. / tconscomma ::= . The comma is optional + // between constraints, but a comma that is there must be followed + // by one: "CREATE TABLE t(a, PRIMARY KEY(a), )" is an error. + if p.accept(token.COMMA) { + continue + } if !p.atTableConstraint() { return } @@ -176,23 +181,20 @@ func (p *parser) parseColumnConstraint(start int) *ast.ColumnConstraint { c.Kind = ast.ColumnNull c.OnConflict = p.parseOnConflict() case token.NOT: - // NOT introduces either "NOT NULL" or "NOT DEFERRABLE". - switch p.peek(1).Kind { - case token.NULL: - p.advance() - p.advance() + // NOT introduces either "NOT NULL" or "NOT DEFERRABLE". Which one + // is settled after consuming it, as SQLite does: it shifts the NOT + // and reports whatever cannot follow, so "NOT LEFT" names LEFT. + notPos := p.advance().Pos + if p.accept(token.NULL) { c.Kind = ast.ColumnNotNull c.OnConflict = p.parseOnConflict() - case token.DEFERRABLE: - c.Kind = ast.ColumnDeferrable - c.Deferrable = p.parseDeferClause() - default: - p.advance() // SQLite shifts NOT and fails on what follows - p.syntaxError() + break } + c.Kind = ast.ColumnDeferrable + c.Deferrable = p.parseDeferClause(notPos, true) case token.DEFERRABLE: c.Kind = ast.ColumnDeferrable - c.Deferrable = p.parseDeferClause() + c.Deferrable = p.parseDeferClause(p.cur().Pos, false) case token.PRIMARY: p.advance() p.expect(token.KEY) @@ -286,15 +288,6 @@ func (p *parser) atTerm() bool { return false } -// parseTerm parses a literal constant. It reuses parsePrimary, which handles -// every "term" alternative. -func (p *parser) parseTerm() ast.Expr { - if !p.atTerm() { - p.syntaxError() - } - return p.parsePrimary() -} - // parseGenerated implements the "generated" nonterminal. // // generated ::= LP expr RP. / generated ::= LP expr RP ID. @@ -325,15 +318,14 @@ func (p *parser) parseOnConflict() ast.ConflictAction { // parseDeferClause implements "defer_subclause". // +// The caller has already consumed any leading NOT, because that decision +// belongs to it: NOT also begins "NOT NULL". +// // defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt. // defer_subclause ::= DEFERRABLE init_deferred_pred_opt. // init_deferred_pred_opt ::= . / INITIALLY DEFERRED. / INITIALLY IMMEDIATE. -func (p *parser) parseDeferClause() *ast.DeferClause { - start := p.cur().Pos - d := &ast.DeferClause{} - if p.accept(token.NOT) { - d.Not = true - } +func (p *parser) parseDeferClause(start int, not bool) *ast.DeferClause { + d := &ast.DeferClause{Not: not} p.expect(token.DEFERRABLE) if p.accept(token.INITIALLY) { d.HasInitially = true @@ -459,8 +451,12 @@ func (p *parser) parseTableConstraint(start int) *ast.TableConstraint { c.FKColumns = p.parseIndexedColumnList() p.expect(token.RP) c.References = p.parseReferences() - if p.at(token.DEFERRABLE) || (p.at(token.NOT) && p.peek(1).Kind == token.DEFERRABLE) { - c.Deferrable = p.parseDeferClause() + // Nothing else that may follow a REFERENCES clause here starts with + // NOT, so it always begins a defer_subclause. + if start := p.cur().Pos; p.at(token.DEFERRABLE) { + c.Deferrable = p.parseDeferClause(start, false) + } else if p.accept(token.NOT) { + c.Deferrable = p.parseDeferClause(start, true) } default: p.syntaxError() @@ -473,19 +469,26 @@ func (p *parser) parseTableConstraint(start int) *ast.TableConstraint { // grammar-action error ("unknown table option: %s"), not a parse error, so // any name is accepted here. // +// The first option may be missing while later ones are present, because +// table_option_set recurses on a possibly empty prefix: "CREATE TABLE t(a), +// STRICT" parses. A comma must be followed by an option, though. +// // table_option_set ::= . / table_option. / table_option_set COMMA table_option. // table_option ::= WITHOUT nm. / table_option ::= nm. func (p *parser) parseTableOptions(n *ast.CreateTableStmt) { - if !p.at(token.WITHOUT) && !token.IsName(p.cur().Kind) { - return - } - for { + option := func() { without := p.accept(token.WITHOUT) n.Options = append(n.Options, p.expectName()) n.WithoutOpt = append(n.WithoutOpt, without) - if !p.accept(token.COMMA) { - return - } + } + switch { + case p.at(token.WITHOUT) || token.IsName(p.cur().Kind): + option() + case !p.at(token.COMMA): + return + } + for p.accept(token.COMMA) { + option() } } diff --git a/parser/parse_dml.go b/parser/parse_dml.go index 628bd6e..cba3392 100644 --- a/parser/parse_dml.go +++ b/parser/parse_dml.go @@ -194,6 +194,11 @@ func (p *parser) parseDelete(with *ast.With, start int) ast.Stmt { // parseIndexedOpt implements "indexed_opt". // +// NOT here can only begin "NOT INDEXED": nothing else that may follow a +// table reference starts with it. So NOT is consumed before the check, which +// is what SQLite does -- it shifts the NOT and only then discovers there is +// no INDEXED, so "FROM t NOT NOT INDEXED" is reported at the second NOT. +// // indexed_opt ::= . / indexed_by ::= INDEXED BY nm. / indexed_by ::= NOT INDEXED. func (p *parser) parseIndexedOpt() (*ast.Ident, bool) { switch { @@ -201,9 +206,9 @@ func (p *parser) parseIndexedOpt() (*ast.Ident, bool) { p.advance() p.expect(token.BY) return p.expectName(), false - case p.at(token.NOT) && p.peek(1).Kind == token.INDEXED: - p.advance() + case p.at(token.NOT): p.advance() + p.expect(token.INDEXED) return nil, true } return nil, false diff --git a/parser/parse_expr.go b/parser/parse_expr.go index eb1102e..23a3e93 100644 --- a/parser/parse_expr.go +++ b/parser/parse_expr.go @@ -42,7 +42,19 @@ const ( func (p *parser) parseExpr(min int) ast.Expr { p.enter() defer p.leave() - return p.parseOperators(p.parsePrefix(), min) + return p.parseOperators(p.parsePrefix(), min, false) +} + +// parseBetweenBound parses the lower bound of a BETWEEN, which ends at the +// AND that belongs to the BETWEEN rule itself. That AND is only the one at +// the top level: SQLite shifts it because the rule's own precedence beats +// AND's, but inside the right operand of a weaker operator the ordinary +// precedence applies, so "x BETWEEN a OR b AND c" reads the whole of +// "a OR (b AND c)" as the lower bound and then still wants an AND. +func (p *parser) parseBetweenBound() ast.Expr { + p.enter() + defer p.leave() + return p.parseOperators(p.parsePrefix(), precOr, true) } // parsePrefix handles the prefix operators and then a primary expression. @@ -73,7 +85,7 @@ func (p *parser) parsePrefix() ast.Expr { // parseOperators is the climbing loop: it extends x with every infix or // postfix operator whose precedence is at least min. -func (p *parser) parseOperators(x ast.Expr, min int) ast.Expr { +func (p *parser) parseOperators(x ast.Expr, min int, stopAtAnd bool) ast.Expr { for { t := p.cur() switch t.Kind { @@ -83,7 +95,7 @@ func (p *parser) parseOperators(x ast.Expr, min int) ast.Expr { } x = p.binary(x, ast.OpOr, precOr) case token.AND: - if precAnd < min { + if stopAtAnd || precAnd < min { return x } x = p.binary(x, ast.OpAnd, precAnd) @@ -281,7 +293,7 @@ func (p *parser) parseLike(x ast.Expr, not bool) ast.Expr { func (p *parser) parseBetween(x ast.Expr, not bool) ast.Expr { p.advance() // BETWEEN n := &ast.BetweenExpr{Not: not, X: x} - n.Lo = p.parseExpr(precAnd + 1) + n.Lo = p.parseBetweenBound() p.expect(token.AND) n.Hi = p.parseExpr(precCompare + 1) n.Span = ast.Span{Start: x.Pos(), Stop: n.Hi.End()} @@ -347,28 +359,9 @@ func (p *parser) parsePrimary() ast.Expr { case token.LP: return p.parseParenExpr() - case token.NULL: - p.advance() - return &ast.Literal{Span: spanOf(t), Kind: ast.LitNull, Value: t.Text, Raw: t.Text} - case token.INTEGER: - p.advance() - return &ast.Literal{Span: spanOf(t), Kind: ast.LitInteger, Value: t.Text, Raw: t.Text} - case token.FLOAT: - p.advance() - return &ast.Literal{Span: spanOf(t), Kind: ast.LitFloat, Value: t.Text, Raw: t.Text} - case token.BLOB: - p.advance() - return &ast.Literal{Span: spanOf(t), Kind: ast.LitBlob, Value: t.Text, Raw: t.Text} - case token.QNUMBER: - // term ::= QNUMBER. The grammar action dequotes the digit - // separators and rejects misplaced ones. - p.advance() - value := p.dequoteNumber(t) - kind := ast.LitInteger - if strings.ContainsAny(value, ".eE") && !strings.HasPrefix(strings.ToLower(value), "0x") { - kind = ast.LitFloat - } - return &ast.Literal{Span: spanOf(t), Kind: kind, Value: value, Raw: t.Text} + case token.NULL, token.INTEGER, token.FLOAT, token.BLOB, token.QNUMBER, + token.CTIME_KW: + return p.parseTerm() case token.STRING: // STRING is both a literal and a member of "nm", so "'a'.'b'" is a @@ -376,24 +369,7 @@ func (p *parser) parsePrimary() ast.Expr { if p.peek(1).Kind == token.DOT { return p.parseQualifiedRef() } - p.advance() - return &ast.Literal{ - Span: spanOf(t), Kind: ast.LitString, - Value: dequote(t.Text, '\''), Raw: t.Text, - } - - case token.CTIME_KW: - // term ::= CTIME_KW. CTIME_KW falls back to ID elsewhere, but here - // it has a shift action, so it is always the keyword. - p.advance() - kind := ast.LitCurrentTimestamp - switch strings.ToUpper(t.Text) { - case "CURRENT_DATE": - kind = ast.LitCurrentDate - case "CURRENT_TIME": - kind = ast.LitCurrentTime - } - return &ast.Literal{Span: spanOf(t), Kind: kind, Value: t.Text, Raw: t.Text} + return p.parseTerm() case token.VARIABLE: p.advance() @@ -440,6 +416,60 @@ func (p *parser) parsePrimary() ast.Expr { func spanOf(t token.Token) ast.Span { return ast.Span{Start: t.Pos, Stop: t.End} } +// parseTerm implements the literal alternatives of "term". It is separate +// from parsePrimary because DEFAULT takes a bare term: in +// "b DEFAULT 'xyzzy'. c" the dot is a syntax error, not the start of a +// qualified reference. +// +// term ::= NULL|FLOAT|BLOB. / STRING. / INTEGER. / QNUMBER. / CTIME_KW. +func (p *parser) parseTerm() ast.Expr { + t := p.cur() + switch t.Kind { + case token.NULL: + p.advance() + return &ast.Literal{Span: spanOf(t), Kind: ast.LitNull, Value: t.Text, Raw: t.Text} + case token.INTEGER: + p.advance() + return &ast.Literal{Span: spanOf(t), Kind: ast.LitInteger, Value: t.Text, Raw: t.Text} + case token.FLOAT: + p.advance() + return &ast.Literal{Span: spanOf(t), Kind: ast.LitFloat, Value: t.Text, Raw: t.Text} + case token.BLOB: + p.advance() + return &ast.Literal{Span: spanOf(t), Kind: ast.LitBlob, Value: t.Text, Raw: t.Text} + case token.STRING: + p.advance() + return &ast.Literal{ + Span: spanOf(t), Kind: ast.LitString, + Value: dequote(t.Text, '\''), Raw: t.Text, + } + case token.QNUMBER: + // The grammar action dequotes the digit separators and rejects a + // misplaced one. + p.advance() + value := p.dequoteNumber(t) + kind := ast.LitInteger + if strings.ContainsAny(value, ".eE") && !strings.HasPrefix(strings.ToLower(value), "0x") { + kind = ast.LitFloat + } + return &ast.Literal{Span: spanOf(t), Kind: kind, Value: value, Raw: t.Text} + case token.CTIME_KW: + // CTIME_KW falls back to ID elsewhere, but here it has a shift + // action, so it is always the keyword. + p.advance() + kind := ast.LitCurrentTimestamp + switch strings.ToUpper(t.Text) { + case "CURRENT_DATE": + kind = ast.LitCurrentDate + case "CURRENT_TIME": + kind = ast.LitCurrentTime + } + return &ast.Literal{Span: spanOf(t), Kind: kind, Value: t.Text, Raw: t.Text} + } + p.syntaxError() + return nil +} + // parseParenExpr distinguishes the three parenthesised forms. // // expr ::= LP expr RP. / expr ::= LP nexprlist COMMA expr RP. @@ -652,9 +682,15 @@ func (p *parser) parseSignedNumber() string { // expr ::= VARIABLE. func (p *parser) bindParam(t token.Token) ast.Expr { // "#NNN" is a VDBE register reference, legal only during a nested - // parse. User-facing SQLite reports a plain syntax error for it. + // parse. User-facing SQLite reports a plain syntax error for it -- but + // from a grammar action, which does not stop the LALR parser: it + // finishes handling the token it was given, and any syntax error that + // falls out of that overwrites the message and its offset. So + // "SELECT #1 #1" is reported at the second reference, not the first. + // Deferring the error reproduces that, since a real syntax error later + // in the statement aborts the parse and wins on its own. if len(t.Text) >= 2 && t.Text[0] == '#' && t.Text[1] >= '0' && t.Text[1] <= '9' { - p.syntaxErrorAt(t) + p.defer_(`near "`+t.Text+`": syntax error`, t.Pos) } n := &ast.BindParam{Span: spanOf(t), Raw: t.Text} switch { diff --git a/parser/parse_select.go b/parser/parse_select.go index bcbf63f..be3e49b 100644 --- a/parser/parse_select.go +++ b/parser/parse_select.go @@ -308,16 +308,7 @@ func (p *parser) parseTableRef(join *ast.JoinOperator) *ast.TableRef { return n } n.Alias, n.HasAs = p.parseAlias() - // indexed_by ::= INDEXED BY nm. / indexed_by ::= NOT INDEXED. - if p.at(token.INDEXED) { - p.advance() - p.expect(token.BY) - n.IndexedBy = p.expectName() - } else if p.at(token.NOT) && p.peek(1).Kind == token.INDEXED { - p.advance() - p.advance() - n.NotIndexed = true - } + n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() p.parseOnUsing(n) n.Span = p.span(start) return n @@ -442,12 +433,14 @@ func (p *parser) parseCTE() *ast.CTE { p.expect(token.RP) } p.expect(token.AS) + // wqas ::= AS. / AS MATERIALIZED. / AS NOT MATERIALIZED. NOT can only + // begin the third, so it is consumed before MATERIALIZED is checked -- + // SQLite shifts it too, and reports "AS NOT (" at the paren. switch { case p.accept(token.MATERIALIZED): n.Materialized = ast.MaterializedYes - case p.at(token.NOT) && p.peek(1).Kind == token.MATERIALIZED: - p.advance() - p.advance() + case p.accept(token.NOT): + p.expect(token.MATERIALIZED) n.Materialized = ast.MaterializedNo } p.expect(token.LP) diff --git a/parser/parser.go b/parser/parser.go index 6ee4faa..b88bd12 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -121,6 +121,7 @@ func ParseExpr(src string) (expr ast.Expr, err error) { if !p.at(token.EOF) { p.syntaxError() } + p.flushDeferred() return e, nil } @@ -136,6 +137,14 @@ type parser struct { varNums map[string]int // named parameters already assigned a number depth int // current nesting depth, guarded by enter/leave + + // deferred holds an error raised by a grammar action, which does not + // stop SQLite's parser immediately: it finishes handling the token it + // was given and stops before reading another. deferIndex is that token, + // so a syntax error at it overtakes the deferred error, and moving past + // it makes the deferred error final. + deferred *Error + deferIndex int } // maxDepth bounds recursion. Unlike SQLite, whose LALR stack is heap @@ -185,6 +194,12 @@ func (p *parser) advance() token.Token { if p.i < len(p.toks)-1 { p.i++ } + // A deferred error becomes final once its token has been consumed: + // SQLite never reads the one after it. This is checked before + // checkIllegal for the same reason -- the tokenizer never runs again. + if p.deferred != nil && p.i > p.deferIndex { + panic(bail{p.deferred}) + } p.checkIllegal() return t } @@ -239,6 +254,23 @@ func (p *parser) fail(msg string, offset int) { panic(bail{&Error{Message: msg, Offset: offset, SQL: p.src}}) } +// defer_ records an error raised by a grammar action, to be reported once +// the current lookahead has been consumed. Only the first is kept. +func (p *parser) defer_(msg string, offset int) { + if p.deferred == nil { + p.deferred = &Error{Message: msg, Offset: offset, SQL: p.src} + p.deferIndex = p.i + } +} + +// flushDeferred reports a deferred error whose token was never consumed, +// which happens when the input ends on it. +func (p *parser) flushDeferred() { + if p.deferred != nil { + panic(bail{p.deferred}) + } +} + // parseScript implements the top-level rules. // // input ::= cmdlist. / cmdlist ::= cmdlist ecmd. / cmdlist ::= ecmd. @@ -260,6 +292,7 @@ func (p *parser) parseScript() []ast.Stmt { } else if !p.at(token.EOF) { p.syntaxError() } + p.flushDeferred() setStmtSpan(stmt, start, end) stmts = append(stmts, stmt) } diff --git a/parser/parser_test.go b/parser/parser_test.go index 2123691..b4dd63e 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -104,6 +104,11 @@ func runCase(c testfile.Case) error { if !errors.As(err, &pe) { return fmt.Errorf("expected *parser.Error %q, got %T: %v", exp.Message, err, err) } + // An earlier statement may have been abandoned part-way through; a + // failure inside the text that left unverified says nothing either. + if exp.IsUnreached(pe.Offset) { + return nil + } if pe.Message != exp.Message { return fmt.Errorf("error message mismatch:\n got: %s\n want: %s", pe.Message, exp.Message) } From 202f1dc4e0cc93e55d16c03c56324e79cce73924 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:25:54 +0000 Subject: [PATCH 08/23] Teach difftest second-order edits and the round trip, and fix trans_opt Three things difftest could not reach before: statements only the dense snapshot inputs contain, shapes that need two edits rather than one, and renderer bugs. Accepted mutations now go through the round trip too, so every mutation that still parses is a free renderer test. It found one immediately. "trans_opt ::= TRANSACTION" has no name, so a nil Name could not say whether the keyword was written, and "ROLLBACK TRANSACTION TO SAVEPOINT s" rendered as "ROLLBACK TO SAVEPOINT s"... which then re-parsed with SAVEPOINT as the savepoint_opt keyword rather than the name, and failed. BEGIN, COMMIT and ROLLBACK now record the bare TRANSACTION keyword, and ROLLBACK TO and RELEASE record the optional SAVEPOINT one. 1.2M mutations at depth 2, clean. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- ast/misc.go | 24 ++++++++----- ast/render.go | 24 ++++++++----- cmd/difftest/main.go | 65 +++++++++++++++++++++++++++++++++++ parser/parse_misc.go | 23 +++++++------ parser/testdata/ast/misc.tree | 5 +++ 5 files changed, 114 insertions(+), 27 deletions(-) diff --git a/ast/misc.go b/ast/misc.go index 1c49cb2..02dc45b 100644 --- a/ast/misc.go +++ b/ast/misc.go @@ -14,9 +14,13 @@ const ( // cmd ::= BEGIN transtype trans_opt. type BeginStmt struct { Span - Type TransactionType `json:"type,omitempty"` - HasType bool `json:"hasType,omitempty"` - Name *Ident `json:"name,omitempty"` + Type TransactionType `json:"type,omitempty"` + // HasType and HasTransaction record keywords that carry no meaning but + // are part of the source: "trans_opt ::= TRANSACTION" has no name, so + // Name alone cannot say whether the keyword was written. + HasType bool `json:"hasType,omitempty"` + HasTransaction bool `json:"hasTransaction,omitempty"` + Name *Ident `json:"name,omitempty"` } func (*BeginStmt) stmtNode() {} @@ -27,8 +31,9 @@ func (n *BeginStmt) Children() []Node { return nodes(n.Name) } // cmd ::= COMMIT|END trans_opt. type CommitStmt struct { Span - Keyword string `json:"keyword"` // "COMMIT" or "END" - Name *Ident `json:"name,omitempty"` + Keyword string `json:"keyword"` // "COMMIT" or "END" + HasTransaction bool `json:"hasTransaction,omitempty"` + Name *Ident `json:"name,omitempty"` } func (*CommitStmt) stmtNode() {} @@ -40,8 +45,10 @@ func (n *CommitStmt) Children() []Node { return nodes(n.Name) } // cmd ::= ROLLBACK trans_opt TO savepoint_opt nm. type RollbackStmt struct { Span - Name *Ident `json:"name,omitempty"` // TRANSACTION - Savepoint *Ident `json:"savepoint,omitempty"` // TO [SAVEPOINT] + HasTransaction bool `json:"hasTransaction,omitempty"` + Name *Ident `json:"name,omitempty"` // TRANSACTION + Savepoint *Ident `json:"savepoint,omitempty"` // TO [SAVEPOINT] + SavepointKeyword bool `json:"savepointKeyword,omitempty"` } func (*RollbackStmt) stmtNode() {} @@ -63,7 +70,8 @@ func (n *SavepointStmt) Children() []Node { return nodes(n.Name) } // cmd ::= RELEASE savepoint_opt nm. type ReleaseStmt struct { Span - Name *Ident `json:"name"` + SavepointKeyword bool `json:"savepointKeyword,omitempty"` + Name *Ident `json:"name"` } func (*ReleaseStmt) stmtNode() {} diff --git a/ast/render.go b/ast/render.go index 8a736f8..a3ff729 100644 --- a/ast/render.go +++ b/ast/render.go @@ -617,15 +617,18 @@ func write(b *strings.Builder, n Node) { x.kw("EXCLUSIVE") } } - writeTransOpt(b, t.Name) + writeTransOpt(b, t.HasTransaction, t.Name) case *CommitStmt: x.kw(t.Keyword) - writeTransOpt(b, t.Name) + writeTransOpt(b, t.HasTransaction, t.Name) case *RollbackStmt: x.kw("ROLLBACK") - writeTransOpt(b, t.Name) + writeTransOpt(b, t.HasTransaction, t.Name) if t.Savepoint != nil { x.kw("TO") + if t.SavepointKeyword { + x.kw("SAVEPOINT") + } x.kw(t.Savepoint.Raw) } case *SavepointStmt: @@ -633,6 +636,9 @@ func write(b *strings.Builder, n Node) { x.kw(t.Name.Raw) case *ReleaseStmt: x.kw("RELEASE") + if t.SavepointKeyword { + x.kw("SAVEPOINT") + } x.kw(t.Name.Raw) case *AttachStmt: x.kw("ATTACH") @@ -691,15 +697,17 @@ func write(b *strings.Builder, n Node) { } } -// writeTransOpt renders "trans_opt". A transaction name is only reachable -// through the TRANSACTION keyword. -func writeTransOpt(b *strings.Builder, name *Ident) { - if name == nil { +// writeTransOpt renders "trans_opt". The keyword can appear without a name, +// so it is tracked separately. +func writeTransOpt(b *strings.Builder, hasKeyword bool, name *Ident) { + if !hasKeyword { return } x := w{b} x.kw("TRANSACTION") - x.kw(name.Raw) + if name != nil { + x.kw(name.Raw) + } } func writeDrop(b *strings.Builder, kind string, ifExists bool, name *QualifiedName) { diff --git a/cmd/difftest/main.go b/cmd/difftest/main.go index 704c5bd..f417688 100644 --- a/cmd/difftest/main.go +++ b/cmd/difftest/main.go @@ -36,6 +36,8 @@ import ( "sync" "sync/atomic" + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/internal/dump" "github.com/sqlc-dev/meyer/internal/sqlitesrc" "github.com/sqlc-dev/meyer/internal/testfile" "github.com/sqlc-dev/meyer/lexer" @@ -66,6 +68,7 @@ func main() { testdata = flag.String("testdata", "parser/testdata", "corpus directory") files = flag.String("files", "", "comma-separated corpus file base names (default: all)") per = flag.Int("per", 24, "mutations per corpus case") + depth = flag.Int("depth", 1, "mutation rounds; 2 applies a second edit to each result") seed = flag.Int64("seed", 1, "PRNG seed") jobs = flag.Int("j", runtime.NumCPU(), "oracle worker processes") examples = flag.Int("examples", 3, "reproducers to print per kind of disagreement") @@ -77,6 +80,15 @@ func main() { if err != nil { fatal(err) } + // The hand-written snapshot inputs are a dense tour of the node set, so + // mutating them reaches constructs the corpus barely contains. + if *files == "" { + extra, err := loadSnapshotInputs(*testdata) + if err != nil { + fatal(err) + } + inputs = append(inputs, extra...) + } fmt.Printf("mutating %d corpus cases, %d mutations each\n", len(inputs), *per) // Build the oracle once, before the workers race for it. @@ -100,6 +112,14 @@ func main() { for src := range work { for _, m := range mutations(src, *per, rng) { check(r, m, rep) + // A second edit reaches shapes one cannot: two + // unbalanced brackets, a keyword in a position only + // another edit could open up. + for d := 1; d < *depth; d++ { + for _, m2 := range mutations(m, 2, rng) { + check(r, m2, rep) + } + } } } }(w) @@ -168,6 +188,9 @@ func check(r *sqlitesrc.Runner, sql string, rep *report) { } switch { case exp.OK && pe == nil: + // Both accepted, so this is also a free renderer test: mutated SQL + // that still parses is a shape nobody wrote on purpose. + checkRoundTrip(sql, rep) case exp.OK: rep.add("meyer rejects, SQLite accepts", sql, pe.Message, "accepted") case pe == nil: @@ -181,6 +204,25 @@ func check(r *sqlitesrc.Runner, sql string, rep *report) { } } +// checkRoundTrip renders an accepted parse back to SQL and re-parses it; +// the two trees must match, ignoring spans and Raw text. +func checkRoundTrip(sql string, rep *report) { + first, err := parser.ParseString(sql) + if err != nil { + return + } + rendered := ast.Statements(first) + second, err := parser.ParseString(rendered) + if err != nil { + rep.add("rendered SQL does not parse", sql, err.Error(), rendered) + return + } + want := dump.Stmts(first, dump.Structure) + if got := dump.Stmts(second, dump.Structure); got != want { + rep.add("round trip changed the tree", sql, rendered, "") + } +} + // semicolonInsideParens reports whether any ";" appears within brackets, // skipping the quoting and comment forms the tokenizer knows about. func semicolonInsideParens(sql string) bool { @@ -288,6 +330,29 @@ func loadCorpus(dir, files string) ([]string, error) { return out, nil } +// loadSnapshotInputs returns each statement of testdata/ast/*.sql. +func loadSnapshotInputs(dir string) ([]string, error) { + paths, err := filepath.Glob(filepath.Join(dir, "ast", "*.sql")) + if err != nil { + return nil, err + } + var out []string + for _, path := range paths { + data, err := os.ReadFile(path) + if err != nil { + return nil, err + } + stmts, err := parser.ParseString(string(data)) + if err != nil { + return nil, fmt.Errorf("%s: %w", path, err) + } + for _, st := range stmts { + out = append(out, string(data)[st.Pos():st.End()]) + } + } + return out, nil +} + // report groups disagreements so that a hundred instances of one bug read as // one bug. type report struct { diff --git a/parser/parse_misc.go b/parser/parse_misc.go index f4d4ce0..1e1828f 100644 --- a/parser/parse_misc.go +++ b/parser/parse_misc.go @@ -25,22 +25,23 @@ func (p *parser) parseBegin() ast.Stmt { p.advance() n.Type, n.HasType = ast.TxnExclusive, true } - n.Name = p.parseTransOpt() + n.HasTransaction, n.Name = p.parseTransOpt() n.Span = p.span(start) return n } -// parseTransOpt implements "trans_opt". +// parseTransOpt implements "trans_opt". TO cannot be a name, so +// "ROLLBACK TRANSACTION TO x" reads TRANSACTION as the bare keyword. // // trans_opt ::= . / TRANSACTION. / TRANSACTION nm. -func (p *parser) parseTransOpt() *ast.Ident { +func (p *parser) parseTransOpt() (bool, *ast.Ident) { if !p.accept(token.TRANSACTION) { - return nil + return false, nil } if token.IsName(p.cur().Kind) { - return p.expectName() + return true, p.expectName() } - return nil + return true, nil } // parseCommit implements COMMIT and its END synonym. @@ -49,7 +50,7 @@ func (p *parser) parseTransOpt() *ast.Ident { func (p *parser) parseCommit() ast.Stmt { t := p.advance() n := &ast.CommitStmt{Keyword: strings.ToUpper(t.Text)} - n.Name = p.parseTransOpt() + n.HasTransaction, n.Name = p.parseTransOpt() n.Span = p.span(t.Pos) return n } @@ -61,9 +62,9 @@ func (p *parser) parseCommit() ast.Stmt { func (p *parser) parseRollback() ast.Stmt { start := p.expect(token.ROLLBACK).Pos n := &ast.RollbackStmt{} - n.Name = p.parseTransOpt() + n.HasTransaction, n.Name = p.parseTransOpt() if p.accept(token.TO) { - p.accept(token.SAVEPOINT) // savepoint_opt ::= SAVEPOINT. / . + n.SavepointKeyword = p.accept(token.SAVEPOINT) // savepoint_opt n.Savepoint = p.expectName() } n.Span = p.span(start) @@ -85,8 +86,8 @@ func (p *parser) parseSavepoint() ast.Stmt { // cmd ::= RELEASE savepoint_opt nm. func (p *parser) parseRelease() ast.Stmt { start := p.expect(token.RELEASE).Pos - p.accept(token.SAVEPOINT) - n := &ast.ReleaseStmt{Name: p.expectName()} + n := &ast.ReleaseStmt{SavepointKeyword: p.accept(token.SAVEPOINT)} + n.Name = p.expectName() n.Span = p.span(start) return n } diff --git a/parser/testdata/ast/misc.tree b/parser/testdata/ast/misc.tree index 527c17f..573eeae 100644 --- a/parser/testdata/ast/misc.tree +++ b/parser/testdata/ast/misc.tree @@ -5,6 +5,7 @@ BeginStmt{ Span: 65:98 Type: TransactionType(IMMEDIATE) HasType: true + HasTransaction: true Name: Ident{ Span: 93:97 Name: "name" @@ -14,6 +15,7 @@ BeginStmt{ CommitStmt{ Span: 99:118 Keyword: "COMMIT" + HasTransaction: true } CommitStmt{ Span: 119:123 @@ -24,11 +26,13 @@ RollbackStmt{ } RollbackStmt{ Span: 134:170 + HasTransaction: true Savepoint: Ident{ Span: 168:169 Name: "s" Raw: "s" } + SavepointKeyword: true } SavepointStmt{ Span: 171:183 @@ -40,6 +44,7 @@ SavepointStmt{ } ReleaseStmt{ Span: 184:204 + SavepointKeyword: true Name: Ident{ Span: 202:203 Name: "s" From 3c33d7b4da149da40d063533cd7baffbda4f20a5 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:38:28 +0000 Subject: [PATCH 09/23] Check span invariants over the corpus, and fix named constraints MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nothing verified byte spans: a wrong one survives the corpus and the round trip alike, and sqlc slices the source with them. TestSpans walks every parsed corpus case and asserts that a span is a valid range, that a child lies within its parent, and that statements are disjoint and in source order — the last is what makes the text between two statements, where "-- name:" comments live, unambiguous. It found that a named constraint's span started after its own CONSTRAINT clause, so the name was outside the node holding it. That is 20,815 cases checked, and one class of bug. difftest's split filter also needed two rounds: sqlite3_complete's scanner is much cruder than the tokenizer, so a ";" ends a statement for it inside brackets, inside a bind parameter's TCL-style suffix, and inside a string it pairs differently. Those are all incomparable, not wrong. 22M mutations at depth 2 now run clean. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- cmd/difftest/main.go | 43 ++++++++++++++---- parser/parse_ddl.go | 20 +++++++-- parser/span_test.go | 85 ++++++++++++++++++++++++++++++++++++ parser/testdata/ast/ddl.tree | 2 +- 4 files changed, 136 insertions(+), 14 deletions(-) create mode 100644 parser/span_test.go diff --git a/cmd/difftest/main.go b/cmd/difftest/main.go index f417688..dc70744 100644 --- a/cmd/difftest/main.go +++ b/cmd/difftest/main.go @@ -141,12 +141,7 @@ func main() { // check asks both parsers about one input and records any disagreement. func check(r *sqlitesrc.Runner, sql string, rep *report) { - // The oracle splits a script into statements the way the sqlite3 shell - // does, with sqlite3_complete, which counts no parentheses: a ";" inside - // brackets ends a statement for it. meyer parses the script as a whole. - // Where the two disagree about the boundaries there is nothing to - // compare, and the disagreement is the harness's, not the parser's. - if semicolonInsideParens(sql) { + if splitDiffers(sql) { rep.skipped.Add(1) return } @@ -223,9 +218,16 @@ func checkRoundTrip(sql string, rep *report) { } } -// semicolonInsideParens reports whether any ";" appears within brackets, -// skipping the quoting and comment forms the tokenizer knows about. -func semicolonInsideParens(sql string) bool { +// splitDiffers reports whether the oracle would cut the script into +// statements somewhere meyer would not, which makes the two incomparable. +// +// The oracle splits the way the sqlite3 shell does, with sqlite3_complete, +// whose scanner is much cruder than the tokenizer: it understands strings, +// the four quoting styles and comments, but nothing else. So a ";" ends a +// statement for it even inside brackets, and even inside a token the real +// tokenizer would have swallowed whole -- ":v(a;b)" is one bind parameter +// to the tokenizer and two statements to sqlite3_complete. +func splitDiffers(sql string) bool { depth := 0 for _, t := range lexer.Lex(sql) { switch t.Kind { @@ -239,6 +241,29 @@ func semicolonInsideParens(sql string) bool { if depth > 0 { return true } + default: + if strings.Contains(t.Text, ";") && !completeUnderstands(t) { + return true + } + } + } + return false +} + +// completeUnderstands reports whether sqlite3_complete skips over a token +// the same way the tokenizer does. The closed quoted forms it does, blob +// literals included, since it reads their body as a single-quoted string. +// An unterminated one it does not: in ":v('(%d)',changes());" the tokenizer +// swallows the first quote into the bind parameter and finds a string +// starting at the second, while sqlite3_complete pairs the two. +func completeUnderstands(t token.Token) bool { + switch t.Kind { + case token.STRING, token.BLOB: + return true + case token.ID: + switch t.Text[0] { + case '"', '`', '[': + return true } } return false diff --git a/parser/parse_ddl.go b/parser/parse_ddl.go index 2db2408..1d2588c 100644 --- a/parser/parse_ddl.go +++ b/parser/parse_ddl.go @@ -105,16 +105,22 @@ func (p *parser) parseColumnAndConstraintList(n *ast.CreateTableStmt) { } } var pending *ast.Ident + pendingStart := 0 for { start := p.cur().Pos if p.at(token.CONSTRAINT) { // tcons ::= CONSTRAINT nm names whatever constraint follows, // and is itself a complete tcons: a list may end with one. - p.advance() + pendingStart = p.advance().Pos pending = p.expectName() } else { c := p.parseTableConstraint(start) - c.Name, pending = pending, nil + if pending != nil { + // The name is part of the constraint it introduces, so the + // constraint's span has to start at its CONSTRAINT keyword. + c.Name, c.Span.Start = pending, pendingStart + pending = nil + } n.Constraints = append(n.Constraints, c) } // tconscomma ::= COMMA. / tconscomma ::= . The comma is optional @@ -145,10 +151,11 @@ func (p *parser) parseColumnDef() *ast.ColumnDef { n := &ast.ColumnDef{Name: p.expectName()} n.Type = p.parseTypeToken() var pending *ast.Ident + pendingStart := 0 for { cStart := p.cur().Pos if p.at(token.CONSTRAINT) { // ccons ::= CONSTRAINT nm. - p.advance() + pendingStart = p.advance().Pos pending = p.expectName() continue } @@ -156,7 +163,12 @@ func (p *parser) parseColumnDef() *ast.ColumnDef { if c == nil { break } - c.Name, pending = pending, nil + if pending != nil { + // As for table constraints, the CONSTRAINT clause belongs to + // the constraint that follows it. + c.Name, c.Span.Start = pending, pendingStart + pending = nil + } n.Constraints = append(n.Constraints, c) } n.Span = p.span(start) diff --git a/parser/span_test.go b/parser/span_test.go new file mode 100644 index 0000000..38441a6 --- /dev/null +++ b/parser/span_test.go @@ -0,0 +1,85 @@ +package parser_test + +import ( + "path/filepath" + "strings" + "sync/atomic" + "testing" + + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/internal/testfile" + "github.com/sqlc-dev/meyer/parser" +) + +// TestSpans checks the invariants sqlc relies on when it slices the source +// with a node's byte offsets. Nothing else verifies them: a span can be +// wrong in a tree that is otherwise perfectly shaped, and both the corpus +// and the round-trip property would still pass. +// +// The invariants are: +// +// - a span is a valid range within the input; +// - a child lies within its parent; +// - statements are disjoint and in source order, so the text between two +// of them (where the "-- name:" comments live) is unambiguous. +func TestSpans(t *testing.T) { + paths, err := filepath.Glob(filepath.Join("testdata", "*.test")) + if err != nil { + t.Fatal(err) + } + if len(paths) == 0 { + t.Fatal("no corpus files; run go run ./cmd/regenerate-parse") + } + var checked atomic.Int64 + t.Cleanup(func() { t.Logf("checked spans of %d cases", checked.Load()) }) + for _, path := range paths { + t.Run(strings.TrimSuffix(filepath.Base(path), ".test"), func(t *testing.T) { + t.Parallel() + cases, err := testfile.Read(path) + if err != nil { + t.Fatal(err) + } + for _, c := range cases { + stmts, err := parser.ParseString(c.SQL) + if err != nil { + continue + } + checked.Add(1) + checkStmtSpans(t, c, stmts) + } + }) + } +} + +func checkStmtSpans(t *testing.T, c testfile.Case, stmts []ast.Stmt) { + t.Helper() + prevEnd := 0 + for _, s := range stmts { + if s.Pos() < prevEnd { + t.Errorf("%s: statement at %d starts before the previous one ended at %d\n %q", + c.Name, s.Pos(), prevEnd, c.SQL) + return + } + prevEnd = s.End() + if !checkNodeSpans(t, c, s, 0, len(c.SQL)) { + return + } + } +} + +// checkNodeSpans walks a subtree, returning false once something is wrong so +// that one bad node does not produce a page of consequences. +func checkNodeSpans(t *testing.T, c testfile.Case, n ast.Node, lo, hi int) bool { + t.Helper() + if n.Pos() > n.End() || n.Pos() < lo || n.End() > hi { + t.Errorf("%s: %T span %d:%d is not within %d:%d\n %q", + c.Name, n, n.Pos(), n.End(), lo, hi, c.SQL) + return false + } + for _, child := range n.Children() { + if !checkNodeSpans(t, c, child, n.Pos(), n.End()) { + return false + } + } + return true +} diff --git a/parser/testdata/ast/ddl.tree b/parser/testdata/ast/ddl.tree index 33c3fea..92f8e36 100644 --- a/parser/testdata/ast/ddl.tree +++ b/parser/testdata/ast/ddl.tree @@ -289,7 +289,7 @@ CreateTableStmt{ ] Constraints: [ TableConstraint{ - Span: 434:475 + Span: 420:475 Name: Ident{ Span: 431:433 Name: "pk" From 77d9b90fc5c583546235518c96cf28a25dc1c54a Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:41:02 +0000 Subject: [PATCH 10/23] Extract do_eqp_test cases too 396 invocations across the suite, with the same shape as do_execsql_test: name, then the SQL as a brace literal. They are the query-planner tests, so the SELECTs are among the most involved in the suite -- multi-index OR terms, LEFT JOINs with expressions in the constraint, correlated subqueries. Corpus: 21326/21326 cases passing. All 355 new cases passed without a parser change. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- internal/tclextract/tclextract.go | 6 +- parser/testdata/README.md | 4 +- parser/testdata/analyze3.test | 50 +++++ parser/testdata/analyze6.metadata.json | 1 + parser/testdata/analyze6.test | 5 + parser/testdata/analyze9.test | 148 +++++++++++++++ parser/testdata/analyzeD.test | 20 ++ parser/testdata/analyzeG.test | 20 ++ parser/testdata/autoindex1.test | 43 +++++ parser/testdata/autoindex3.test | 14 ++ parser/testdata/autoindex5.test | 21 +++ parser/testdata/bestindex1.test | 15 ++ parser/testdata/bestindex2.test | 36 ++++ parser/testdata/bestindex3.test | 25 +++ parser/testdata/bestindex4.test | 10 + parser/testdata/bloom1.test | 20 ++ parser/testdata/cost.test | 91 +++++++++ parser/testdata/count.test | 20 ++ parser/testdata/coveridxscan.metadata.json | 1 + parser/testdata/coveridxscan.test | 10 + parser/testdata/eqp.test | 203 +++++++++++++++++++++ parser/testdata/eqp2.test | 15 ++ parser/testdata/existsexpr.test | 15 ++ parser/testdata/fts3join.test | 8 + parser/testdata/fts3query.test | 20 ++ parser/testdata/fts4min.test | 10 + parser/testdata/in4.test | 6 + parser/testdata/index6.test | 5 + parser/testdata/index7.test | 5 + parser/testdata/indexA.test | 25 +++ parser/testdata/indexedby.test | 130 +++++++++++++ parser/testdata/indexexpr2.test | 17 ++ parser/testdata/join.test | 15 ++ parser/testdata/join2.test | 50 +++++ parser/testdata/join5.test | 27 +++ parser/testdata/like3.test | 50 +++++ parser/testdata/mallocK.test | 5 + parser/testdata/merge1.test | 36 ++++ parser/testdata/misc7.test | 15 ++ parser/testdata/nulls1.test | 26 +++ parser/testdata/orderby1.test | 10 + parser/testdata/pushdown.test | 26 +++ parser/testdata/rollback2.test | 10 + parser/testdata/rowvalue4.test | 68 +++++++ parser/testdata/rowvalue9.test | 10 + parser/testdata/scanstatus.test | 15 ++ parser/testdata/selectA.test | 8 + parser/testdata/skipscan1.test | 6 + parser/testdata/skipscan2.test | 5 + parser/testdata/skipscan6.test | 10 + parser/testdata/subquery.test | 18 ++ parser/testdata/tabfunc01.test | 30 +++ parser/testdata/tkt-385a5b56b9.test | 16 ++ parser/testdata/tkt3442.test | 15 ++ parser/testdata/tpch01.test | 17 ++ parser/testdata/update.test | 6 + parser/testdata/values.test | 52 ++++++ parser/testdata/where.test | 50 +++++ parser/testdata/where3.test | 55 ++++++ parser/testdata/where7.test | 11 ++ parser/testdata/where9.test | 28 +++ parser/testdata/whereG.test | 106 +++++++++++ parser/testdata/whereI.test | 10 + parser/testdata/whereJ.test | 16 ++ parser/testdata/whereL.test | 31 ++++ parser/testdata/wherelimit3.test | 10 + parser/testdata/widetab1.test | 11 ++ parser/testdata/windowpushd.test | 46 ++++- parser/testdata/with1.test | 10 + parser/testdata/with3.test | 27 +++ parser/testdata/with6.test | 130 +++++++++++++ parser/testdata/without_rowid1.test | 5 + 72 files changed, 2099 insertions(+), 12 deletions(-) create mode 100644 parser/testdata/analyze6.metadata.json create mode 100644 parser/testdata/analyze6.test create mode 100644 parser/testdata/coveridxscan.metadata.json create mode 100644 parser/testdata/coveridxscan.test diff --git a/internal/tclextract/tclextract.go b/internal/tclextract/tclextract.go index a61bef1..8e384ec 100644 --- a/internal/tclextract/tclextract.go +++ b/internal/tclextract/tclextract.go @@ -1,10 +1,12 @@ // Package tclextract pulls literal SQL test cases out of SQLite's TCL test // scripts (test/*.test in the SQLite source tree). // -// It recognizes the two dominant test commands: +// It recognizes the dominant test commands, which all take the SQL as their +// second word: // // do_execsql_test {SQL} ?{expected}? // do_catchsql_test {SQL} {expected} +// do_eqp_test {SQL} {plan} // // plus the older style used by e.g. tokenize.test, but only when the body is // exactly one execsql/catchsql call: @@ -40,7 +42,7 @@ type Stats struct { GeneratedNames int // dynamic test names replaced with file-local ones } -var commands = []string{"do_execsql_test", "do_catchsql_test", "do_test"} +var commands = []string{"do_execsql_test", "do_catchsql_test", "do_eqp_test", "do_test"} // File extracts all cases from one TCL test script. base names the script // (e.g. "select1") and seeds generated case names. diff --git a/parser/testdata/README.md b/parser/testdata/README.md index 5ee90b9..83e5c93 100644 --- a/parser/testdata/README.md +++ b/parser/testdata/README.md @@ -11,8 +11,8 @@ own goldens; they never outrank the accept/reject corpus below. - **Source of the SQL**: SQLite's own test suite from the pinned release below — every `test/*.test` TCL script, not a curated subset. SQL blocks - are extracted verbatim from `do_execsql_test` / `do_catchsql_test` - invocations whose SQL argument is a literal TCL brace block (cases using + are extracted verbatim from `do_execsql_test`, `do_catchsql_test` and + `do_eqp_test` invocations whose SQL argument is a literal TCL brace block (cases using TCL substitution are skipped, as are the few whose oracle message spans more than one line, which the file format cannot hold). Scripts that yield no such block — the C-level tokenizer tests, the VFS and WAL harnesses — diff --git a/parser/testdata/analyze3.test b/parser/testdata/analyze3.test index 0093c34..1980d1a 100644 --- a/parser/testdata/analyze3.test +++ b/parser/testdata/analyze3.test @@ -5,6 +5,16 @@ ---- stmt 0 err 1 -1 49 no such table: t1 stmt 49 err 1 -1 97 no such table: t1 +==== analyze3-1.1.2 + + SELECT sum(y) FROM t1 WHERE x>200 AND x<300 +---- +stmt 0 err 1 -1 47 no such table: t1 +==== analyze3-1.1.3 + + SELECT sum(y) FROM t1 WHERE x>0 AND x<1100 +---- +stmt 0 err 1 -1 46 no such table: t1 ==== analyze3-1.2.1 BEGIN; @@ -27,6 +37,16 @@ stmt 128 ok ---- stmt 0 err 1 -1 45 no such table: t2 stmt 45 err 1 -1 91 no such table: t2 +==== analyze3-1.2.2 + + SELECT sum(y) FROM t2 WHERE x>1 AND x<2 +---- +stmt 0 err 1 -1 43 no such table: t2 +==== analyze3-1.2.3 + + SELECT sum(y) FROM t2 WHERE x>0 AND x<99 +---- +stmt 0 err 1 -1 44 no such table: t2 ==== analyze3-1.3.1 BEGIN; @@ -49,6 +69,26 @@ stmt 139 ok ---- stmt 0 err 1 -1 49 no such table: t3 stmt 49 err 1 -1 97 no such table: t3 +==== analyze3-1.3.2 + + SELECT sum(y) FROM t3 WHERE x>200 AND x<300 +---- +stmt 0 err 1 -1 47 no such table: t3 +==== analyze3-1.3.3 + + SELECT sum(y) FROM t3 WHERE x>0 AND x<1100 +---- +stmt 0 err 1 -1 46 no such table: t3 +==== analyze3-2.2 + + SELECT count(a) FROM t1 WHERE b LIKE 'a%' +---- +stmt 0 err 1 -1 45 no such table: t1 +==== analyze3-2.3 + + SELECT count(a) FROM t1 WHERE b LIKE '%a' +---- +stmt 0 err 1 -1 45 no such table: t1 ==== analyze3-3.8.1 CREATE TABLE t4(x, y TEXT COLLATE NOCASE); @@ -56,6 +96,16 @@ stmt 49 err 1 -1 97 no such table: t3 ---- stmt 0 ok stmt 47 err 1 -1 77 no such table: main.t4 +==== analyze3-6-3 + + SELECT * FROM t1 WHERE a = 5 AND c = 13; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== analyze3-6-2 + + SELECT * FROM t1 WHERE a = 5 AND b > 'w' AND c = 13; +---- +stmt 0 err 1 -1 55 no such table: t1 ==== analyze-7.1 DROP TABLE IF EXISTS t1; diff --git a/parser/testdata/analyze6.metadata.json b/parser/testdata/analyze6.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/analyze6.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/analyze6.test b/parser/testdata/analyze6.test new file mode 100644 index 0000000..1814591 --- /dev/null +++ b/parser/testdata/analyze6.test @@ -0,0 +1,5 @@ +==== analyze6-1.2 + + SELECT count(*) FROM cat, ev WHERE x=y +---- +stmt 0 err 1 -1 42 no such table: cat diff --git a/parser/testdata/analyze9.test b/parser/testdata/analyze9.test index f89d141..39e5319 100644 --- a/parser/testdata/analyze9.test +++ b/parser/testdata/analyze9.test @@ -305,6 +305,16 @@ stmt 0 err 1 -1 32 no such table: t1 stmt 0 ok stmt 34 err 1 -1 71 no such table: main.t1 stmt 71 err 1 -1 99 no such table: main.t1 +==== 9.3.1 + + SELECT * FROM t1 WHERE a='x' AND b='y' AND c='z' AND d=101 AND e=5; +---- +stmt 0 err 1 -1 70 no such table: t1 +==== 9.3.2 + + SELECT * FROM t1 WHERE a='x' AND b='y' AND c='z' AND d=99 AND e=5; +---- +stmt 0 err 1 -1 69 no such table: t1 ==== 10.1.1 DROP TABLE IF EXISTS t3; @@ -316,6 +326,16 @@ stmt 0 ok stmt 27 ok stmt 52 err 1 -1 81 no such table: main.t3 stmt 81 err 1 -1 110 no such table: main.t3 +==== 10.1.3 + + SELECT * FROM t3 WHERE a IS NULL AND b = 2 +---- +stmt 0 err 1 -1 46 no such table: t3 +==== 10.1.4 + + SELECT * FROM t3 WHERE a IS NOT NULL AND b = 2 +---- +stmt 0 err 1 -1 50 no such table: t3 ==== 10.2.1 DROP TABLE IF EXISTS t3; @@ -327,6 +347,56 @@ stmt 0 ok stmt 27 ok stmt 55 err 1 -1 87 no such table: main.t3 stmt 87 err 1 -1 119 no such table: main.t3 +==== 10.2.3 + + SELECT * FROM t3 WHERE x = 'xyz' AND a IS NULL AND b = 2 +---- +stmt 0 err 1 -1 60 no such table: t3 +==== 10.2.4 + + SELECT * FROM t3 WHERE x = 'xyz' AND a IS NOT NULL AND b = 2 +---- +stmt 0 err 1 -1 64 no such table: t3 +==== analyze9-generated + + SELECT * FROM t4 WHERE a = 'def' AND b = 3; +---- +stmt 0 err 1 -1 48 no such table: t4 +==== analyze9-generated.dup1 + + SELECT * FROM t4 WHERE x=X'abcdef' AND a = 'def' AND b = 3; +---- +stmt 0 err 1 -1 64 no such table: t4 +==== 13.2.1 + + SELECT * FROM t1 WHERE a='abc' AND rowid<15 AND b<12 +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 13.2.2 + + SELECT * FROM t1 WHERE a='abc' AND rowid<'15' AND b<12 +---- +stmt 0 err 1 -1 58 no such table: t1 +==== 13.3.1 + + SELECT * FROM t1 WHERE a='abc' AND rowid<100 AND b<12 +---- +stmt 0 err 1 -1 57 no such table: t1 +==== 13.3.2 + + SELECT * FROM t1 WHERE a='abc' AND rowid<'100' AND b<12 +---- +stmt 0 err 1 -1 59 no such table: t1 +==== 13.2.1.dup1 + + SELECT * FROM t1 WHERE a='ott' AND b<10 AND c=1 +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 13.2.2.dup1 + + SELECT * FROM t1 WHERE a='ott' AND b<'10' AND c=1 +---- +stmt 0 err 1 -1 53 no such table: t1 ==== 14.4.3 SELECT lrange(test_decode(sample), 0, 1) AS s FROM sqlite_stat4 @@ -408,6 +478,16 @@ stmt 0 err 1 -1 18 no such table: x1 ANALYZE temp.t1; ---- stmt 0 err 1 -1 19 no such table: temp.t1 +==== 17.2 + + SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== 17.3 + + SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10; +---- +stmt 0 err 1 -1 65 no such table: t1 ==== 17.4 CREATE INDEX i2 ON t1(c, d); @@ -415,6 +495,16 @@ stmt 0 err 1 -1 19 no such table: temp.t1 ---- stmt 0 err 1 -1 31 no such table: main.t1 stmt 31 err 1 -1 50 no such table: main.i2 +==== 17.5 + + SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10; +---- +stmt 0 err 1 -1 66 no such table: t1 +==== 17.6 + + SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10; +---- +stmt 0 err 1 -1 65 no such table: t1 ==== 20.2 ANALYZE ---- @@ -426,6 +516,16 @@ stmt 0 ok ---- stmt 0 ok stmt 25 err 1 -1 53 no such table: main.t2 +==== 21.2 + + SELECT * FROM t2 WHERE a='one' AND rowid < 10 +---- +stmt 0 err 1 -1 49 no such table: t2 +==== 21.3 + + SELECT * FROM t2 WHERE a='one' AND rowid < 50 +---- +stmt 0 err 1 -1 49 no such table: t2 ==== 22.0 CREATE TABLE t3(a, b, c, d, PRIMARY KEY(a, b)) WITHOUT ROWID; @@ -481,6 +581,21 @@ stmt 106 err 1 -1 135 no such table: main.t4 stmt 135 err 1 -1 164 no such table: main.t4 stmt 164 err 1 -1 408 no such table: t4 stmt 408 ok +==== 23.1 + + SELECT * FROM t4 WHERE + (e=1 AND b='xyz' AND c='zyx' AND a<'AEA') AND f<300 + -- Formerly used index i41. But i41 is not a covering index whereas + -- the PRIMARY KEY is a covering index, and so as of 2017-10-15, the + -- PRIMARY KEY is preferred. +---- +stmt 0 err 1 -1 256 no such table: t4 +==== 23.2 + + SELECT * FROM t4 WHERE + (e=1 AND b='xyz' AND c='zyx' AND a<'JJJ') AND f<300 +---- +stmt 0 err 1 -1 83 no such table: t4 ==== 24.0 CREATE TABLE t5(c, d, b, e, a, PRIMARY KEY(a, b, c)) WITHOUT ROWID; @@ -517,6 +632,29 @@ stmt 27 err 1 -1 156 no such table: t6 stmt 156 err 1 -1 186 no such table: main.t6 stmt 186 err 1 -1 216 no such table: main.t6 stmt 216 ok +==== 25.2.1 + SELECT * FROM t6 WHERE a<30 AND b25 AND z=?; +---- +stmt 0 err 1 -1 49 no such table: t1 diff --git a/parser/testdata/analyzeD.test b/parser/testdata/analyzeD.test index 92195f9..a7dc857 100644 --- a/parser/testdata/analyzeD.test +++ b/parser/testdata/analyzeD.test @@ -3,6 +3,16 @@ CREATE TABLE t1(a, b, c); ---- stmt 0 ok +==== 1.2 + + SELECT * FROM t1 WHERE a=3001 AND c=150; +---- +stmt 0 err 1 -1 43 no such table: t1 +==== 1.4 + + SELECT * FROM t1 WHERE a=3001 AND c=150; +---- +stmt 0 err 1 -1 43 no such table: t1 ==== 1.5 UPDATE t1 SET a=13 WHERE a = 3001; @@ -10,3 +20,13 @@ stmt 0 ok ---- stmt 0 err 1 -1 40 no such table: t1 stmt 40 ok +==== 1.6 + + SELECT * FROM t1 WHERE a=13 AND c=150; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== 1.8 + + SELECT * FROM t1 WHERE a=13 AND c=150; +---- +stmt 0 err 1 -1 41 no such table: t1 diff --git a/parser/testdata/analyzeG.test b/parser/testdata/analyzeG.test index 2a29b2f..522a7be 100644 --- a/parser/testdata/analyzeG.test +++ b/parser/testdata/analyzeG.test @@ -17,6 +17,16 @@ stmt 30 ok stmt 55 ok stmt 80 err 1 -1 199 no such table: t1 stmt 199 err 1 -1 347 no such table: t2 +==== 1.1.1 + + SELECT * FROM t1, t2 WHERE a=44 AND b=44; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== 1.1.2 + + SELECT * FROM t2, t1 WHERE a=44 AND b=44 +---- +stmt 0 err 1 -1 44 no such table: t2 ==== 1.2 CREATE INDEX t2b ON t2(b); @@ -24,3 +34,13 @@ stmt 199 err 1 -1 347 no such table: t2 ---- stmt 0 err 1 -1 29 no such table: main.t2 stmt 29 ok +==== 1.3.1 + + SELECT * FROM t1, t2 WHERE a=44 AND b=44; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== 1.3.2 + + SELECT * FROM t2, t1 WHERE a=44 AND b=44 +---- +stmt 0 err 1 -1 44 no such table: t2 diff --git a/parser/testdata/autoindex1.test b/parser/testdata/autoindex1.test index 75caf3f..a6feaeb 100644 --- a/parser/testdata/autoindex1.test +++ b/parser/testdata/autoindex1.test @@ -21,6 +21,25 @@ stmt 47 ok stmt 94 err 1 -1 166 no such table: sqlite_stat1 stmt 166 err 1 -1 235 no such table: sqlite_stat1 stmt 235 ok +==== autoindex1-500.1 + + SELECT b FROM t501 + WHERE t501.a IN (SELECT x FROM t502 WHERE y=?); +---- +stmt 0 err 1 -1 72 no such table: t501 +==== autoindex1-501 + + SELECT b FROM t501 + WHERE t501.a IN (SELECT x FROM t502 WHERE y=t501.b); +---- +stmt 0 err 1 -1 77 no such table: t501 +==== autoindex1-502 + + SELECT b FROM t501 + WHERE t501.a=123 + AND t501.a IN (SELECT x FROM t502 WHERE y=t501.b); +---- +stmt 0 err 1 -1 97 no such table: t501 ==== autoindex1-600 CREATE TABLE flock_owner( @@ -75,11 +94,35 @@ stmt 1108 err 1 -1 1202 no such table: main.flock_owner stmt 1202 err 1 -1 1292 no such table: main.flock_owner stmt 1292 err 1 -1 1372 no such table: main.sheep stmt 1372 err 1 -1 1452 no such table: main.sheep +==== autoindex1-600a + + SELECT x.sheep_no, x.registering_flock, x.date_of_registration + FROM sheep x LEFT JOIN + (SELECT s.sheep_no, prev.flock_no, prev.owner_person_id, + s.date_of_registration, prev.owner_change_date + FROM sheep s JOIN flock_owner prev ON s.registering_flock = + prev.flock_no + AND (prev.owner_change_date <= s.date_of_registration || ' 00:00:00') + WHERE NOT EXISTS + (SELECT 'x' FROM flock_owner later + WHERE prev.flock_no = later.flock_no + AND later.owner_change_date > prev.owner_change_date + AND later.owner_change_date <= s.date_of_registration||' 00:00:00') + ) y ON x.sheep_no = y.sheep_no + WHERE y.sheep_no IS NULL + ORDER BY x.registering_flock; +---- +stmt 0 err 1 -1 730 no such table: sheep ==== autoindex1-700 CREATE TABLE t5(a, b, c); ---- stmt 0 ok +==== autoindex1-700a + + SELECT a FROM t5 WHERE b=10 ORDER BY c; +---- +stmt 0 err 1 -1 42 no such table: t5 ==== autoindex1-800 CREATE TABLE accounts( diff --git a/parser/testdata/autoindex3.test b/parser/testdata/autoindex3.test index 655685d..3c750cb 100644 --- a/parser/testdata/autoindex3.test +++ b/parser/testdata/autoindex3.test @@ -66,6 +66,11 @@ stmt 296 err 1 -1 323 no such table: main.v stmt 323 err 1 -1 356 no such table: main.v stmt 356 ok stmt 394 ok +==== 220 + + select count(*) from u, v where u.b = v.b and v.e > 34; +---- +stmt 0 err 1 -1 58 no such table: u ==== 300 CREATE TABLE t1(id INTEGER PRIMARY KEY); @@ -83,3 +88,12 @@ stmt 115 err 1 -1 149 no such table: main.t2 stmt 149 ok stmt 174 err 1 -1 312 no such table: sqlite_stat1 stmt 312 ok +==== 310 + + WITH RECURSIVE children(id) AS ( + SELECT cid FROM t2 WHERE pid = ?1 AND rx = ?2 + UNION + SELECT cid FROM t2 JOIN children ON t2.pid = children.id AND rx = ?2 + ) SELECT count(id) FROM children; +---- +stmt 0 err 1 -1 205 no such table: t2 diff --git a/parser/testdata/autoindex5.test b/parser/testdata/autoindex5.test index 634ee50..9fca71d 100644 --- a/parser/testdata/autoindex5.test +++ b/parser/testdata/autoindex5.test @@ -67,6 +67,27 @@ stmt 1576 err 1 -1 1654 no such table: main.package_notes stmt 1654 err 1 -1 1754 no such table: main.package_notes stmt 1754 ok stmt 1888 ok +==== autoindex5-1.1 + + SELECT + st.bug_name, + (SELECT ALL debian_cve.bug FROM debian_cve + WHERE debian_cve.bug_name = st.bug_name + ORDER BY debian_cve.bug), + sp.release + FROM + source_package_status AS st, + source_packages AS sp, + bugs + WHERE + sp.rowid = st.package + AND st.bug_name = bugs.name + AND ( st.bug_name LIKE 'CVE-%' OR st.bug_name LIKE 'TEMP-%' ) + AND ( sp.release = 'sid' OR sp.release = 'stretch' OR sp.release = 'jessie' + OR sp.release = 'wheezy' OR sp.release = 'squeeze' ) + ORDER BY sp.name, st.bug_name, sp.release, sp.subrelease; +---- +stmt 0 err 1 -1 586 no such table: source_package_status ==== 2.1 CREATE TABLE one(o); diff --git a/parser/testdata/bestindex1.test b/parser/testdata/bestindex1.test index b891c49..ac014c3 100644 --- a/parser/testdata/bestindex1.test +++ b/parser/testdata/bestindex1.test @@ -3,6 +3,16 @@ CREATE VIRTUAL TABLE x1 USING tcl(vtab_command); ---- stmt 0 ok +==== 1.1 + + SELECT * FROM x1 WHERE a = 'abc' +---- +stmt 0 err 1 -1 36 no such table: x1 +==== 1.2 + + SELECT * FROM x1 WHERE a IN ('abc', 'def'); +---- +stmt 0 err 1 -1 46 no such table: x1 ==== 2.1 CREATE TABLE t1x(i INTEGER PRIMARY KEY, a, b); @@ -33,6 +43,11 @@ stmt 0 err 1 -1 35 no such table: t1 SELECT rowid FROM t1 WHERE a IN ('one', 'four') ORDER BY +rowid ---- stmt 0 err 1 -1 69 no such table: t1 +==== bestindex1-generated.dup4 + + SELECT rowid FROM t1 WHERE a IN ('one', 'four') ORDER BY +rowid +---- +stmt 0 err 1 -1 70 no such table: t1 ==== 3.2 CREATE VIRTUAL TABLE VirtualTableA USING tcl(vtab_command); diff --git a/parser/testdata/bestindex2.test b/parser/testdata/bestindex2.test index 1bc8347..6aba1fe 100644 --- a/parser/testdata/bestindex2.test +++ b/parser/testdata/bestindex2.test @@ -7,8 +7,44 @@ stmt 0 ok stmt 58 ok stmt 116 ok +==== 1.1 + + SELECT * FROM t1 WHERE a='abc' +---- +stmt 0 err 1 -1 34 no such table: t1 +==== 1.2 + + SELECT * FROM t1 WHERE a='abc' AND b='def' +---- +stmt 0 err 1 -1 46 no such table: t1 +==== 1.3 + + SELECT * FROM t1 WHERE a='abc' AND a='def' +---- +stmt 0 err 1 -1 46 no such table: t1 +==== 1.4 + + SELECT * FROM t1,t2 WHERE c=a +---- +stmt 0 err 1 -1 33 no such table: t1 +==== 1.5 + + SELECT * FROM t1, t2 CROSS JOIN t3 WHERE t2.c = +t1.b AND t3.e=t2.d +---- +stmt 0 err 1 -1 71 no such table: t1 +==== 1.6 + + SELECT * FROM t1, t2, t3 WHERE t2.c = +t1.b AND t3.e = t2.d +---- +stmt 0 err 1 -1 63 no such table: t1 ==== 1.7.1 CREATE TABLE x1(a, b); ---- stmt 0 ok +==== 1.7.2 + + SELECT * FROM x1 CROSS JOIN t1, t2, t3 + WHERE t1.a = t2.c AND t1.b = t3.e +---- +stmt 0 err 1 -1 81 no such table: x1 diff --git a/parser/testdata/bestindex3.test b/parser/testdata/bestindex3.test index 978cb7f..f971a3e 100644 --- a/parser/testdata/bestindex3.test +++ b/parser/testdata/bestindex3.test @@ -3,6 +3,26 @@ CREATE VIRTUAL TABLE t1 USING tcl("vtab_cmd 0"); ---- stmt 0 ok +==== 1.1 + + SELECT * FROM t1 WHERE a LIKE 'abc'; +---- +stmt 0 err 1 -1 39 no such table: t1 +==== 1.2 + + SELECT * FROM t1 WHERE a = 'abc'; +---- +stmt 0 err 1 -1 36 no such table: t1 +==== 1.3 + + SELECT * FROM t1 WHERE a = 'abc' OR b = 'def'; +---- +stmt 0 err 1 -1 49 no such table: t1 +==== 1.4 + + SELECT * FROM t1 WHERE a LIKE 'abc%' OR b = 'def'; +---- +stmt 0 err 1 -1 53 no such table: t1 ==== 1.5 CREATE TABLE ttt(a, b, c); @@ -45,6 +65,11 @@ stmt 0 err 1 -1 60 no such table: t1 stmt 0 ok stmt 52 err 1 -1 98 no such table: main.t2 stmt 98 err 1 -1 129 no such table: main.t2 +==== 2.2 + + SELECT * FROM t2 WHERE x LIKE 'abc%' OR y = 'def' +---- +stmt 0 err 1 -1 55 no such table: t2 ==== 3.1 CREATE VIRTUAL TABLE t3 USING tcl('vvv_command') ---- diff --git a/parser/testdata/bestindex4.test b/parser/testdata/bestindex4.test index 960d6b5..72d698b 100644 --- a/parser/testdata/bestindex4.test +++ b/parser/testdata/bestindex4.test @@ -5,3 +5,13 @@ ---- stmt 0 ok stmt 51 ok +==== 2.1 + + SELECT * FROM t1, x1 WHERE x1.d=t1.x; +---- +stmt 0 err 1 -1 40 no such table: t1 +==== 2.2 + + SELECT * FROM t1, x1(t1.x) +---- +stmt 0 err 1 -1 30 no such table: t1 diff --git a/parser/testdata/bloom1.test b/parser/testdata/bloom1.test index db50dfa..f82f24b 100644 --- a/parser/testdata/bloom1.test +++ b/parser/testdata/bloom1.test @@ -75,6 +75,16 @@ stmt 115 ok stmt 126 err 1 -1 154 no such table: sqlite_stat1 stmt 154 err 1 -1 229 no such table: sqlite_stat1 stmt 229 ok +==== 2.1 + + WITH RECURSIVE transit(x) AS ( + SELECT s FROM objs WHERE p=9 AND o=32805 + UNION + SELECT objs.s FROM objs, transit WHERE objs.p=9 AND objs.o=transit.x + ) + SELECT x FROM transit; +---- +stmt 0 err 1 -1 193 no such table: objs ==== 3.1 CREATE TABLE t0(x TEXT COLLATE rtrim); @@ -86,6 +96,11 @@ stmt 0 ok stmt 41 err 1 -1 89 no such table: t0 stmt 89 ok stmt 139 err 1 -1 183 no such table: t0 +==== 3.2 + + SELECT count(*) FROM t0, v0 WHERE x='b '; +---- +stmt 0 err 1 -1 44 no such table: t0 ==== 3.3 CREATE TABLE t1(x INT COLLATE rtrim); @@ -97,6 +112,11 @@ stmt 0 ok stmt 40 err 1 -1 88 no such table: t1 stmt 88 ok stmt 138 err 1 -1 182 no such table: t1 +==== 3.4 + + SELECT count(*) FROM t1, v1 WHERE x='b '; +---- +stmt 0 err 1 -1 44 no such table: t1 ==== 4.1 CREATE TABLE t1(x TEXT, y INT, z TEXT); diff --git a/parser/testdata/cost.test b/parser/testdata/cost.test index 09be683..68b424d 100644 --- a/parser/testdata/cost.test +++ b/parser/testdata/cost.test @@ -9,6 +9,11 @@ stmt 0 ok stmt 55 ok stmt 83 err 1 -1 118 no such table: main.t3 stmt 118 err 1 -1 156 no such table: main.t4 +==== 1.2 + + SELECT e FROM t3, t4 WHERE b=c ORDER BY b, d; +---- +stmt 0 err 1 -1 48 no such table: t3 ==== 2.1 CREATE TABLE t1(a, b); @@ -16,6 +21,11 @@ stmt 118 err 1 -1 156 no such table: main.t4 ---- stmt 0 ok stmt 25 err 1 -1 53 no such table: main.t1 +==== 2.2 + + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 31 no such table: t1 ==== 3.1 CREATE TABLE t5(a INTEGER PRIMARY KEY,b,c,d,e,f,g); @@ -33,6 +43,13 @@ stmt 112 err 1 -1 141 no such table: main.t5 stmt 141 err 1 -1 170 no such table: main.t5 stmt 170 err 1 -1 199 no such table: main.t5 stmt 199 err 1 -1 228 no such table: main.t5 +==== 3.2 + + SELECT a FROM t5 + WHERE b IS NULL OR c IS NULL OR d IS NULL + ORDER BY a; +---- +stmt 0 err 1 -1 79 no such table: t5 ==== 4.1 CREATE TABLE t1(a, b); @@ -42,6 +59,16 @@ stmt 199 err 1 -1 228 no such table: main.t5 stmt 0 ok stmt 25 err 1 -1 53 no such table: main.t1 stmt 53 err 1 -1 81 no such table: main.t1 +==== 4.2 + + SELECT * FROM t1 WHERE likelihood(a=?, 0.014) AND b BETWEEN ? AND ?; +---- +stmt 0 err 1 -1 71 no such table: t1 +==== 4.3 + + SELECT * FROM t1 WHERE likelihood(a=?, 0.016) AND b BETWEEN ? AND ?; +---- +stmt 0 err 1 -1 71 no such table: t1 ==== 5.1 CREATE TABLE t2(x, y); @@ -49,6 +76,16 @@ stmt 53 err 1 -1 81 no such table: main.t1 ---- stmt 0 ok stmt 25 err 1 -1 55 no such table: main.t2 +==== 5.2 + + SELECT * FROM t2 ORDER BY x, y; +---- +stmt 0 err 1 -1 34 no such table: t2 +==== 5.3 + + SELECT * FROM t2 WHERE x BETWEEN ? AND ? ORDER BY rowid; +---- +stmt 0 err 1 -1 59 no such table: t2 ==== 6.1 CREATE TABLE t3(a INTEGER PRIMARY KEY, b, c); @@ -58,6 +95,11 @@ stmt 25 err 1 -1 55 no such table: main.t2 stmt 0 ok stmt 48 err 1 -1 78 no such table: main.t3 stmt 78 err 1 -1 108 no such table: main.t3 +==== 6.2 + + SELECT a FROM t3 WHERE (b BETWEEN 2 AND 4) OR c=100 ORDER BY a +---- +stmt 0 err 1 -1 66 no such table: t3 ==== 7.1 CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c,d,e,f,g); @@ -75,6 +117,26 @@ stmt 112 err 1 -1 141 no such table: main.t1 stmt 141 err 1 -1 170 no such table: main.t1 stmt 170 err 1 -1 199 no such table: main.t1 stmt 199 err 1 -1 228 no such table: main.t1 +==== 7.2 + + SELECT a FROM t1 + WHERE (b>=950 AND b<=1010) OR (b IS NULL AND c NOT NULL) + ORDER BY a +---- +stmt 0 err 1 -1 95 no such table: t1 +==== 7.3 + + SELECT rowid FROM t1 + WHERE (+b IS NULL AND c NOT NULL AND d NOT NULL) + OR (b NOT NULL AND c IS NULL AND d NOT NULL) + OR (b NOT NULL AND c NOT NULL AND d IS NULL) +---- +stmt 0 err 1 -1 181 no such table: t1 +==== 7.4 + + SELECT rowid FROM t1 WHERE (+b IS NULL AND c NOT NULL) OR c IS NULL +---- +stmt 0 err 1 -1 71 no such table: t1 ==== 8.1 CREATE TABLE composer( @@ -99,6 +161,15 @@ stmt 74 ok stmt 145 ok stmt 287 err 1 -1 326 no such table: main.track stmt 326 err 1 -1 365 no such table: main.track +==== 8.2 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE cname LIKE '%bach%' + AND unlikely(composer.cid=track.cid) + AND unlikely(album.aid=track.aid); +---- +stmt 0 err 1 -1 167 no such table: album ==== 9.1 CREATE TABLE t1( @@ -118,3 +189,23 @@ stmt 75 err 1 -1 121 no such table: main.t1 stmt 0 ok stmt 30 err 1 -1 65 no such table: main.t6 stmt 65 err 1 -1 97 no such table: main.t6 +==== 10.3 + + SELECT rowid FROM t6 WHERE a=0 AND c=0 +---- +stmt 0 err 1 -1 44 no such table: t6 +==== 10.4 + + SELECT rowid FROM t6 WHERE a=0 AND b='xyz' AND c=0 +---- +stmt 0 err 1 -1 56 no such table: t6 +==== 10.5 + + SELECT rowid FROM t6 WHERE likelihood(a=0, 0.1) AND c=0 +---- +stmt 0 err 1 -1 61 no such table: t6 +==== 10.6 + + SELECT rowid FROM t6 WHERE likelihood(a=0, 0.1) AND b='xyz' AND c=0 +---- +stmt 0 err 1 -1 73 no such table: t6 diff --git a/parser/testdata/count.test b/parser/testdata/count.test index 35abc72..8ce4b92 100644 --- a/parser/testdata/count.test +++ b/parser/testdata/count.test @@ -144,6 +144,26 @@ stmt 95 err 1 -1 167 no such table: t1 stmt 167 ok stmt 178 err 1 -1 239 no such table: sqlite_stat1 stmt 239 ok +==== count-7.2 + + SELECT count(1) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== count-7.3 + + SELECT count(1) FROM t1 NOT INDEXED +---- +stmt 0 err 1 -1 39 no such table: t1 +==== count-7.3.dup1 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 27 no such table: t1 +==== count-7.4 + + SELECT count(*) FROM t1 NOT INDEXED +---- +stmt 0 err 1 -1 39 no such table: t1 ==== count-8.0 CREATE TABLE t7(a INT,b TEXT,c BLOB,d REAL); diff --git a/parser/testdata/coveridxscan.metadata.json b/parser/testdata/coveridxscan.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/coveridxscan.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/coveridxscan.test b/parser/testdata/coveridxscan.test new file mode 100644 index 0000000..2930c9a --- /dev/null +++ b/parser/testdata/coveridxscan.test @@ -0,0 +1,10 @@ +==== 5.1.1 + + SELECT * FROM t1 ORDER BY c1, c2; +---- +stmt 0 err 1 -1 36 no such table: t1 +==== 5.1.2 + + SELECT * FROM t2 ORDER BY c1, c2; +---- +stmt 0 err 1 -1 36 no such table: t2 diff --git a/parser/testdata/eqp.test b/parser/testdata/eqp.test index 679f571..702ae5d 100644 --- a/parser/testdata/eqp.test +++ b/parser/testdata/eqp.test @@ -11,6 +11,71 @@ stmt 42 err 1 -1 70 no such table: main.t1 stmt 70 err 1 -1 98 no such table: main.t1 stmt 98 ok stmt 140 ok +==== 1.2 + + SELECT * FROM t2, t1 WHERE t1.a=1 OR t1.b=2; +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 1.3 + + SELECT * FROM t2 CROSS JOIN t1 WHERE t1.a=1 OR t1.b=2; +---- +stmt 0 err 1 -1 57 no such table: t2 +==== 1.3.dup1 + + SELECT a FROM t1 ORDER BY a +---- +stmt 0 err 1 -1 31 no such table: t1 +==== 1.4 + + SELECT a FROM t1 ORDER BY +a +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 1.5 + + SELECT a FROM t1 WHERE a=4 +---- +stmt 0 err 1 -1 30 no such table: t1 +==== 1.6 + + SELECT DISTINCT count(*) FROM t3 GROUP BY a; +---- +stmt 0 err 1 -1 47 no such table: t3 +==== 1.7.1 + + SELECT * FROM t3 JOIN (SELECT 1) +---- +stmt 0 err 1 -1 36 no such table: t3 +==== 1.7.2 + + SELECT * FROM t3 JOIN (SELECT 1) AS v1 +---- +stmt 0 err 1 -1 42 no such table: t3 +==== 1.7.3 + + SELECT * FROM t3 AS xx JOIN (SELECT 1) AS yy +---- +stmt 0 err 1 -1 48 no such table: t3 +==== 1.8 + + SELECT * FROM t3 JOIN (SELECT 1 UNION SELECT 2) +---- +stmt 0 err 1 -1 51 no such table: t3 +==== 1.9 + + SELECT * FROM t3 JOIN (SELECT 1 EXCEPT SELECT a FROM t3 LIMIT 17) AS abc +---- +stmt 0 err 1 -1 76 no such table: t3 +==== 1.10 + + SELECT * FROM t3 JOIN (SELECT 1 INTERSECT SELECT a FROM t3 LIMIT 17) AS abc +---- +stmt 0 err 1 -1 79 no such table: t3 +==== 1.11 + + SELECT * FROM t3 JOIN (SELECT 1 UNION ALL SELECT a FROM t3 LIMIT 17) abc +---- +stmt 0 err 1 -1 76 no such table: t3 ==== 2.1 CREATE TABLE t1(x INT, y INT, ex TEXT); @@ -21,6 +86,86 @@ stmt 140 ok stmt 0 ok stmt 42 ok stmt 85 err 1 -1 115 no such table: main.t2 +==== 3.1.1 + + SELECT (SELECT x FROM t1 AS sub) FROM t1; +---- +stmt 0 err 1 -1 44 no such table: t1 +==== 3.1.2 + + SELECT * FROM t1 WHERE (SELECT x FROM t1 AS sub); +---- +stmt 0 err 1 -1 52 no such table: t1 +==== 3.1.3 + + SELECT * FROM t1 WHERE (SELECT x FROM t1 AS sub ORDER BY y); +---- +stmt 0 err 1 -1 63 no such table: t1 +==== 3.1.4 + + SELECT * FROM t1 WHERE (SELECT x FROM t2 ORDER BY x); +---- +stmt 0 err 1 -1 56 no such table: t1 +==== 4.1.1 + + SELECT * FROM t1 UNION ALL SELECT * FROM t2 +---- +stmt 0 err 1 -1 47 no such table: t2 +==== 4.1.2 + + SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY 2 +---- +stmt 0 err 1 -1 58 no such table: t2 +==== 4.1.3 + + SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY 2 +---- +stmt 0 err 1 -1 54 no such table: t2 +==== 4.1.4 + + SELECT * FROM t1 INTERSECT SELECT * FROM t2 ORDER BY 2 +---- +stmt 0 err 1 -1 58 no such table: t2 +==== 4.1.5 + + SELECT * FROM t1 EXCEPT SELECT * FROM t2 ORDER BY 2 +---- +stmt 0 err 1 -1 55 no such table: t2 +==== 4.2.2 + + SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY 1 +---- +stmt 0 err 1 -1 58 no such table: t2 +==== 4.2.3 + + SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY 1 +---- +stmt 0 err 1 -1 54 no such table: t2 +==== 4.2.4 + + SELECT * FROM t1 INTERSECT SELECT * FROM t2 ORDER BY 1 +---- +stmt 0 err 1 -1 58 no such table: t2 +==== 4.2.5 + + SELECT * FROM t1 EXCEPT SELECT * FROM t2 ORDER BY 1 +---- +stmt 0 err 1 -1 55 no such table: t2 +==== 4.3.1 + + SELECT x FROM t1 UNION SELECT x FROM t2 +---- +stmt 0 err 1 -1 43 no such table: t2 +==== 4.3.2 + + SELECT x FROM t1 UNION SELECT x FROM t2 UNION SELECT x FROM t1 +---- +stmt 0 err 1 -1 66 no such table: t1 +==== 4.3.3 + + SELECT x FROM t1 UNION SELECT x FROM t2 UNION SELECT x FROM t1 ORDER BY 1 +---- +stmt 0 err 1 -1 77 no such table: t1 ==== 5.1.0 CREATE TABLE t1(a INT, b INT, ex TEXT) ---- @@ -120,3 +265,61 @@ stmt 211 ok stmt 392 ok stmt 659 err 1 -1 700 no such table: main.event stmt 700 ok +==== 9.1 + + WITH thread(age,duration,cnt,root,last) AS ( + SELECT + julianday('now') - max(fmtime) AS age, + max(fmtime) - min(fmtime) AS duration, + sum(fprev IS NULL) AS msg_count, + froot, + (SELECT fpid FROM forumpost + WHERE froot=x.froot + AND fpid NOT IN private + ORDER BY fmtime DESC LIMIT 1) + FROM forumpost AS x + WHERE fpid NOT IN private --- Ensure this table mentioned in EQP output! + GROUP BY froot + ORDER BY 1 LIMIT 26 OFFSET 5 + ) + SELECT + thread.age, + thread.duration, + thread.cnt, + blob.uuid, + substr(event.comment,instr(event.comment,':')+1) + FROM thread, blob, event + WHERE blob.rid=thread.last + AND event.objid=thread.last + ORDER BY 1; +---- +stmt 0 err 1 -1 724 no such table: forumpost +==== 9.2 + + WITH thread(age,duration,cnt,root,last) AS ( + SELECT + julianday('now') - max(fmtime) AS age, + max(fmtime) - min(fmtime) AS duration, + sum(fprev IS NULL) AS msg_count, + froot, + (SELECT fpid FROM forumpost + WHERE froot=x.froot + AND fpid NOT IN private + ORDER BY fmtime DESC LIMIT 1) + FROM forumpost AS x + WHERE fpid NOT IN private --- Ensure this table mentioned in EQP output! + GROUP BY froot + ORDER BY 1 LIMIT 26 OFFSET 5 + ) + SELECT + thread.age, + thread.duration, + thread.cnt, + blob.uuid, + substr(event.comment,instr(event.comment,':')+1) + FROM thread, blob, event + WHERE blob.rid=thread.last + AND event.objid=thread.last + ORDER BY 1; +---- +stmt 0 err 1 -1 724 no such table: forumpost diff --git a/parser/testdata/eqp2.test b/parser/testdata/eqp2.test index 78bf72d..f07f2d5 100644 --- a/parser/testdata/eqp2.test +++ b/parser/testdata/eqp2.test @@ -5,3 +5,18 @@ ---- stmt 0 ok stmt 31 err 1 -1 65 no such table: main.t1 +==== 1.1 + + SELECT * FROM t1 ORDER BY a, b, c +---- +stmt 0 err 1 -1 37 no such table: t1 +==== 1.2 + + SELECT * FROM t1 ORDER BY a, b, +c +---- +stmt 0 err 1 -1 38 no such table: t1 +==== 1.3 + + SELECT * FROM t1 ORDER BY a, +b, +c +---- +stmt 0 err 1 -1 39 no such table: t1 diff --git a/parser/testdata/existsexpr.test b/parser/testdata/existsexpr.test index 1c03185..676d430 100644 --- a/parser/testdata/existsexpr.test +++ b/parser/testdata/existsexpr.test @@ -84,6 +84,11 @@ stmt 0 err 1 -1 41 no such table: t1 SELECT count(*) FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c=a) ---- stmt 0 err 1 -1 69 no such table: t1 +==== 2.4 + + SELECT count(*) FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c=a) +---- +stmt 0 err 1 -1 69 no such table: t1 ==== 2.4.0 CREATE UNIQUE INDEX t2c ON t2(c); @@ -91,11 +96,21 @@ stmt 0 err 1 -1 69 no such table: t1 ---- stmt 0 err 1 -1 36 no such table: main.t2 stmt 36 err 1 -1 72 no such table: main.t1 +==== 2.4.1 + + SELECT count(*) FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c=a); +---- +stmt 0 err 1 -1 69 no such table: t1 ==== 2.4.2 ANALYZE; ---- stmt 0 ok +==== 2.4.3 + + SELECT count(*) FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c=a); +---- +stmt 0 err 1 -1 69 no such table: t1 ==== 2.4.4 SELECT count(*) FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE c=a); diff --git a/parser/testdata/fts3join.test b/parser/testdata/fts3join.test index 623c79a..b15b17a 100644 --- a/parser/testdata/fts3join.test +++ b/parser/testdata/fts3join.test @@ -100,3 +100,11 @@ stmt 0 err 1 -1 53 no such table: tt stmt 0 ok stmt 42 ok stmt 67 err 1 -1 96 no such table: main.t1 +==== 4.2 + + SELECT * FROM t4 LEFT JOIN ( + SELECT docid, * FROM ft4 WHERE ft4 MATCH ? + ) AS rr ON t4.rowid=rr.docid + WHERE t4.y = ?; +---- +stmt 0 err 1 -1 130 no such table: t4 diff --git a/parser/testdata/fts3query.test b/parser/testdata/fts3query.test index 5531e53..6fbc9f9 100644 --- a/parser/testdata/fts3query.test +++ b/parser/testdata/fts3query.test @@ -67,6 +67,26 @@ stmt 29 ok stmt 84 err 1 -1 117 no such table: main.t1 stmt 117 ok stmt 164 ok +==== fts3query-4.2 + + SELECT t1.number FROM t1, ft WHERE t1.number=ft.rowid ORDER BY t1.date +---- +stmt 0 err 1 -1 74 no such table: t1 +==== fts3query-4.3 + + SELECT t1.number FROM ft, t1 WHERE t1.number=ft.rowid ORDER BY t1.date +---- +stmt 0 err 1 -1 74 no such table: ft +==== fts3query-4.4 + + SELECT t1.number FROM t1, bt WHERE t1.number=bt.rowid ORDER BY t1.date +---- +stmt 0 err 1 -1 74 no such table: t1 +==== fts3query-4.5 + + SELECT t1.number FROM bt, t1 WHERE t1.number=bt.rowid ORDER BY t1.date +---- +stmt 0 err 1 -1 74 no such table: bt ==== 5.1 CREATE VIRTUAL TABLE t2 USING FTS4; diff --git a/parser/testdata/fts4min.test b/parser/testdata/fts4min.test index d63cb35..548fec7 100644 --- a/parser/testdata/fts4min.test +++ b/parser/testdata/fts4min.test @@ -16,6 +16,16 @@ stmt 0 ok stmt 41 err 1 -1 95 no such table: ft stmt 95 err 1 -1 149 no such table: ft stmt 149 err 1 -1 203 no such table: ft +==== 1.1.1 + + SELECT max(rowid) FROM ft +---- +stmt 0 err 1 -1 29 no such table: ft +==== 1.1.2 + + SELECT min(rowid) FROM ft +---- +stmt 0 err 1 -1 29 no such table: ft ==== 1.2.1 SELECT max(rowid) FROM ft diff --git a/parser/testdata/in4.test b/parser/testdata/in4.test index 2b600bd..18712c6 100644 --- a/parser/testdata/in4.test +++ b/parser/testdata/in4.test @@ -478,6 +478,12 @@ stmt 266 ok stmt 277 err 1 -1 305 no such table: sqlite_stat1 stmt 305 err 1 -1 491 no such table: sqlite_stat1 stmt 491 ok +==== 9.1 + +SELECT count(*) FROM edge + WHERE node_from IN sub_nodes AND node_to IN sub_nodes; +---- +stmt 0 err 1 -1 82 no such table: edge ==== 10.0 CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,b,c)) WITHOUT ROWID; diff --git a/parser/testdata/index6.test b/parser/testdata/index6.test index 1791aec..809d32b 100644 --- a/parser/testdata/index6.test +++ b/parser/testdata/index6.test @@ -320,6 +320,11 @@ stmt 209 err 1 -1 248 no such table: t8b stmt 248 err 1 -1 286 no such table: t8b stmt 286 err 1 -1 324 no such table: t8b stmt 324 err 1 -1 362 no such table: t8b +==== index6-8.1 + + SELECT * FROM t8a LEFT JOIN t8b ON (x = 'value' AND y = a) +---- +stmt 0 err 1 -1 62 no such table: t8a ==== index6-8.2 SELECT * FROM t8a LEFT JOIN t8b ON (x = 'value' AND y = a) diff --git a/parser/testdata/index7.test b/parser/testdata/index7.test index 66d677b..fd37833 100644 --- a/parser/testdata/index7.test +++ b/parser/testdata/index7.test @@ -275,6 +275,11 @@ stmt 42 err 1 -1 118 no such table: t5 stmt 0 ok stmt 38 err 1 -1 77 no such table: t4 stmt 77 err 1 -1 123 no such table: v4 +==== index7-6.4 + + SELECT * FROM v4 WHERE d='xyz' AND c='def' +---- +stmt 0 err 1 -1 46 no such table: v4 ==== index7-6.5 CREATE INDEX t5a ON t5(a) WHERE a=#1; diff --git a/parser/testdata/indexA.test b/parser/testdata/indexA.test index 3d2dd48..348d58b 100644 --- a/parser/testdata/indexA.test +++ b/parser/testdata/indexA.test @@ -12,6 +12,11 @@ stmt 78 err 1 -1 116 no such table: t1 SELECT * FROM t1 WHERE a='abc' ---- stmt 0 err 1 -1 34 no such table: t1 +==== 1.2 + + SELECT * FROM t1 WHERE a='abc' +---- +stmt 0 err 1 -1 34 no such table: t1 ==== 1.3 CREATE INDEX i2 ON t1(b, c) WHERE a=5; @@ -39,6 +44,11 @@ stmt 0 err 1 -1 59 no such table: t2 SELECT x, a, b, c FROM t2 RIGHT JOIN t1 ON (t1.a=5 AND t1.b=t2.x) ---- stmt 0 err 1 -1 69 no such table: t2 +==== 1.7 + + SELECT x, a, b, c FROM t2 RIGHT JOIN t1 ON (t1.a=5 AND t1.b=t2.x) +---- +stmt 0 err 1 -1 69 no such table: t2 ==== 2.0 CREATE TABLE x1(a TEXT, b, c); @@ -230,6 +240,11 @@ stmt 254 err 1 -1 302 no such table: main.t2 SELECT sum(a), b FROM t2 WHERE b='two' ---- stmt 0 err 1 -1 42 no such table: t2 +==== 4.1.2 + + SELECT sum(a), b FROM t2 WHERE b='two' +---- +stmt 0 err 1 -1 42 no such table: t2 ==== 5.0 CREATE TABLE t1(a INTEGER PRIMQRY KEY, b, c); @@ -286,11 +301,21 @@ stmt 210 ok SELECT * FROM t1, t2 WHERE b=1 AND z=c AND y=5; ---- stmt 0 err 1 -1 50 no such table: t1 +==== 6.3 + + SELECT * FROM t1, t2 WHERE b=1 AND z=c AND y=5; +---- +stmt 0 err 1 -1 50 no such table: t1 ==== 6.4 SELECT * FROM t1 LEFT JOIN t2 ON (y=5) WHERE b=1 AND z IS c; ---- stmt 0 err 1 -1 63 no such table: t1 +==== 6.5 + + SELECT * FROM t1 LEFT JOIN t2 ON (y=5) WHERE b=1 AND z IS c; +---- +stmt 0 err 1 -1 63 no such table: t1 ==== 6.6 CREATE INDEX t2yz ON t2(y, z) WHERE y=5; diff --git a/parser/testdata/indexedby.test b/parser/testdata/indexedby.test index 76c3da0..e88ec2a 100644 --- a/parser/testdata/indexedby.test +++ b/parser/testdata/indexedby.test @@ -20,6 +20,21 @@ stmt 115 err 1 -1 145 no such table: main.t2 stmt 145 err 1 -1 175 no such table: main.t2 stmt 175 ok stmt 215 ok +==== indexedby-1.2 + + select * from t1 WHERE a = 10; +---- +stmt 0 err 1 -1 33 no such table: t1 +==== indexedby-1.3 + + select * from t1 ; +---- +stmt 0 err 1 -1 21 no such table: t1 +==== indexedby-1.4 + + select * from t1, t2 WHERE c = 10; +---- +stmt 0 err 1 -1 37 no such table: t1 ==== indexedby-2.1 SELECT * FROM t1 NOT INDEXED WHERE a = 'one' AND b = 'two' ---- @@ -60,6 +75,31 @@ stmt 0 err 1 29 34 near "WHERE": syntax error SELECT * FROM v1 INDEXED BY i1 WHERE a = 'one' ---- stmt 0 err 1 -1 48 no such table: v1 +==== indexedby-3.1 + + SELECT * FROM t1 WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 50 no such table: t1 +==== indexedby-3.1.1 + + SELECT * FROM t1 NOT INDEXED WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 62 no such table: t1 +==== indexedby-3.1.2 + + SELECT * FROM t1 NOT INDEXED WHERE rowid=1 +---- +stmt 0 err 1 -1 46 no such table: t1 +==== indexedby-3.2 + + SELECT * FROM t1 INDEXED BY i1 WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 64 no such table: t1 +==== indexedby-3.3 + + SELECT * FROM t1 INDEXED BY i2 WHERE a = 'one' AND b = 'two' +---- +stmt 0 err 1 -1 64 no such table: t1 ==== indexedby-3.4 SELECT * FROM t1 INDEXED BY i2 WHERE a = 'one' ---- @@ -76,6 +116,16 @@ stmt 0 err 1 -1 48 no such table: t1 SELECT * FROM t1 INDEXED BY i1 ORDER BY a ---- stmt 0 err 1 -1 43 no such table: t1 +==== indexedby-3.8 + + SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 ORDER BY e +---- +stmt 0 err 1 -1 64 no such table: t3 +==== indexedby-3.9 + + SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 WHERE e = 10 +---- +stmt 0 err 1 -1 66 no such table: t3 ==== indexedby-3.10 SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 WHERE f = 10 ---- @@ -84,6 +134,16 @@ stmt 0 err 1 -1 64 no such table: t3 SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_2 WHERE f = 10 ---- stmt 0 err 1 -1 64 no such table: t3 +==== indexedby-4.1 + + SELECT * FROM t1, t2 WHERE a = c +---- +stmt 0 err 1 -1 36 no such table: t1 +==== indexedby-4.2 + + SELECT * FROM t1 INDEXED BY i1, t2 WHERE a = c +---- +stmt 0 err 1 -1 50 no such table: t1 ==== indexedby-4.3 SELECT * FROM t1 INDEXED BY i1, t2 INDEXED BY i3 WHERE a=c @@ -106,10 +166,70 @@ stmt 64 err 1 -1 103 no such table: v2 EXPLAIN QUERY PLAN SELECT * FROM v2 WHERE b = 10 ---- stmt 0 err 1 -1 52 no such table: v2 +==== indexedby-6.1 + + SELECT * FROM t1 WHERE b = 10 ORDER BY rowid +---- +stmt 0 err 1 -1 48 no such table: t1 +==== indexedby-6.2 + + SELECT * FROM t1 NOT INDEXED WHERE b = 10 ORDER BY rowid +---- +stmt 0 err 1 -1 60 no such table: t1 +==== indexedby-7.1 + + DELETE FROM t1 WHERE a = 5 +---- +stmt 0 err 1 -1 30 no such table: t1 +==== indexedby-7.2 + + DELETE FROM t1 NOT INDEXED WHERE a = 5 +---- +stmt 0 err 1 -1 42 no such table: t1 +==== indexedby-7.3 + + DELETE FROM t1 INDEXED BY i1 WHERE a = 5 +---- +stmt 0 err 1 -1 44 no such table: t1 +==== indexedby-7.4 + + DELETE FROM t1 INDEXED BY i1 WHERE a = 5 AND b = 10 +---- +stmt 0 err 1 -1 55 no such table: t1 +==== indexedby-7.5 + + DELETE FROM t1 INDEXED BY i2 WHERE a = 5 AND b = 10 +---- +stmt 0 err 1 -1 55 no such table: t1 ==== indexedby-7.6 DELETE FROM t1 INDEXED BY i2 WHERE a = 5 ---- stmt 0 err 1 -1 42 no such table: t1 +==== indexedby-8.1 + + UPDATE t1 SET rowid=rowid+1 WHERE a = 5 +---- +stmt 0 err 1 -1 43 no such table: t1 +==== indexedby-8.2 + + UPDATE t1 NOT INDEXED SET rowid=rowid+1 WHERE a = 5 +---- +stmt 0 err 1 -1 55 no such table: t1 +==== indexedby-8.3 + + UPDATE t1 INDEXED BY i1 SET rowid=rowid+1 WHERE a = 5 +---- +stmt 0 err 1 -1 57 no such table: t1 +==== indexedby-8.4 + + UPDATE t1 INDEXED BY i1 SET rowid=rowid+1 WHERE a = 5 AND b = 10 +---- +stmt 0 err 1 -1 68 no such table: t1 +==== indexedby-8.5 + + UPDATE t1 INDEXED BY i2 SET rowid=rowid+1 WHERE a = 5 AND b = 10 +---- +stmt 0 err 1 -1 68 no such table: t1 ==== indexedby-8.6 UPDATE t1 INDEXED BY i2 SET rowid=rowid+1 WHERE a = 5 ---- @@ -195,6 +315,11 @@ stmt 0 err 1 -1 75 no such table: x1 SELECT a,b,rowid FROM x1 INDEXED BY x1i WHERE a=1 AND b=1 AND rowid='3.0'; ---- stmt 0 err 1 -1 77 no such table: x1 +==== 11.5 + + SELECT a,b,rowid FROM x1 INDEXED BY x1i WHERE a=1 AND b=1 AND rowid='3.0'; +---- +stmt 0 err 1 -1 77 no such table: x1 ==== 11.6 CREATE TABLE x2(c INTEGER PRIMARY KEY, a, b TEXT); @@ -225,6 +350,11 @@ stmt 0 err 1 -1 67 no such table: x2 SELECT a,b,c FROM x2 INDEXED BY x2i WHERE a=1 AND b=1 AND c='3.0'; ---- stmt 0 err 1 -1 69 no such table: x2 +==== 11.10 + + SELECT a,b,c FROM x2 INDEXED BY x2i WHERE a=1 AND b=1 AND c='3.0'; +---- +stmt 0 err 1 -1 69 no such table: x2 ==== 12.1 CREATE TABLE o1(x INTEGER PRIMARY KEY, y, z); diff --git a/parser/testdata/indexexpr2.test b/parser/testdata/indexexpr2.test index e8d7766..71e870b 100644 --- a/parser/testdata/indexexpr2.test +++ b/parser/testdata/indexexpr2.test @@ -39,6 +39,13 @@ stmt 0 err 1 -1 45 no such table: t1 ---- stmt 0 ok stmt 25 err 1 -1 56 no such table: main.t1 +==== 3.1.1 + + SELECT b FROM t1 WHERE b IS NOT NULL AND a IS NULL + GROUP BY b COLLATE nocase + ORDER BY b COLLATE nocase; +---- +stmt 0 err 1 -1 111 no such table: t1 ==== 3.2.0 CREATE TABLE t2(x); @@ -212,6 +219,11 @@ stmt 0 err 1 -1 54 no such table: x1 ---- stmt 0 err 1 -1 48 no such table: main.x1 stmt 48 err 1 -1 102 no such table: x1 +==== 6.1.3 + + SELECT a, b FROM x1 WHERE CAST(b AS INTEGER) = 123; +---- +stmt 0 err 1 -1 54 no such table: x1 ==== 6.2.1 SELECT a, b FROM x1 WHERE CAST(b AS TEXT) = 123; @@ -224,6 +236,11 @@ stmt 0 err 1 -1 51 no such table: x1 ---- stmt 0 err 1 -1 46 no such table: main.x1 stmt 46 err 1 -1 97 no such table: x1 +==== 6.2.3 + + SELECT a, b FROM x1 WHERE CAST(b AS TEXT) = 123; +---- +stmt 0 err 1 -1 51 no such table: x1 ==== 7.0 CREATE TABLE IF NOT EXISTS t0(c0); diff --git a/parser/testdata/join.test b/parser/testdata/join.test index 9873136..965fb5f 100644 --- a/parser/testdata/join.test +++ b/parser/testdata/join.test @@ -1009,6 +1009,11 @@ stmt 207 err 1 -1 239 no such table: t1 stmt 239 err 1 -1 269 no such table: t2 stmt 269 err 1 -1 299 no such table: t4 stmt 299 err 1 -1 340 no such table: t4 +==== join-28.2 + + SELECT a, b, y FROM t4 JOIN t3 ON a=x; +---- +stmt 0 err 1 -1 41 no such table: t4 ==== join-29.1 CREATE TABLE t0(a INT); INSERT INTO t0(a) VALUES (1); @@ -1181,8 +1186,18 @@ stmt 424 ok SELECT a1 FROM vchain ORDER BY a1; ---- stmt 0 err 1 -1 37 no such table: vchain +==== join-33.2-eqp + + SELECT a1 FROM vchain ORDER BY a1; +---- +stmt 0 err 1 -1 37 no such table: vchain ==== join-33.3 SELECT a1, b2 FROM vchain ORDER BY a1; ---- stmt 0 err 1 -1 41 no such table: vchain +==== join-33.3-eqp + + SELECT a1, b2 FROM vchain ORDER BY a1; +---- +stmt 0 err 1 -1 41 no such table: vchain diff --git a/parser/testdata/join2.test b/parser/testdata/join2.test index 3d77b21..439836d 100644 --- a/parser/testdata/join2.test +++ b/parser/testdata/join2.test @@ -118,6 +118,16 @@ stmt 0 ok stmt 51 ok stmt 98 ok stmt 310 ok +==== 3.1 + + SELECT v2 FROM t1 LEFT JOIN t2 USING (k2) LEFT JOIN t3_1 USING (k3); +---- +stmt 0 err 1 -1 71 no such table: t1 +==== 3.2 + + SELECT v2 FROM t1 LEFT JOIN t2 USING (k2) LEFT JOIN t3_2 USING (k3); +---- +stmt 0 err 1 -1 71 no such table: t1 ==== 4.0 CREATE TABLE c1(k INTEGER PRIMARY KEY, v1); @@ -161,6 +171,16 @@ stmt 0 err 1 -1 75 no such table: c1 SELECT v1, v3 FROM c1 LEFT JOIN c2 LEFT JOIN c3 ON (c3.k=v1+1); ---- stmt 0 err 1 -1 66 no such table: c1 +==== 4.1.5 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v2); +---- +stmt 0 err 1 -1 77 no such table: c1 +==== 4.1.6 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1); +---- +stmt 0 err 1 -1 79 no such table: c1 ==== 4.2.0 DROP TABLE c1; @@ -210,6 +230,16 @@ stmt 0 err 1 -1 75 no such table: c1 SELECT v1, v3 FROM c1 LEFT JOIN c2 LEFT JOIN c3 ON (c3.k=v1+1); ---- stmt 0 err 1 -1 66 no such table: c1 +==== 4.2.5 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v2); +---- +stmt 0 err 1 -1 77 no such table: c1 +==== 4.2.6 + + SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1); +---- +stmt 0 err 1 -1 79 no such table: c1 ==== 4.3.0 DROP TABLE IF EXISTS t1; @@ -250,6 +280,16 @@ stmt 0 ok stmt 43 ok stmt 86 ok stmt 117 err 1 -1 153 no such table: main.s3 +==== 5.1 + + SELECT s1.a FROM s1 left join s2 using (a); +---- +stmt 0 err 1 -1 46 no such table: s1 +==== 5.2 + + SELECT s1.a FROM s1 left join s3 using (a); +---- +stmt 0 err 1 -1 46 no such table: s1 ==== 6.0 CREATE TABLE u1(a INTEGER PRIMARY KEY, b, c); @@ -259,6 +299,11 @@ stmt 117 err 1 -1 153 no such table: main.s3 stmt 0 ok stmt 48 ok stmt 96 err 1 -1 129 no such table: main.u1 +==== 6.1 + + SELECT u2.* FROM u2 LEFT JOIN u1 ON( u1.a=u2.a AND u1.b=u2.b AND u1.c=u2.c ); +---- +stmt 0 err 1 -1 80 no such table: u2 ==== 7.0 CREATE TABLE t1(a,b); INSERT INTO t1 VALUES(1,2),(3,4),(5,6); @@ -417,6 +462,11 @@ stmt 34 err 1 -1 50 no such view: t3 stmt 50 ok stmt 92 err 1 -1 208 no such table: t1 stmt 208 ok +==== 12.3 + + SELECT * FROM t1 LEFT JOIN t2 ON a=b LIMIT 10 OFFSET 98; +---- +stmt 0 err 1 -1 59 no such table: t1 ==== 13.0 CREATE TABLE t1(a1 INTEGER PRIMARY KEY, b1 INT); diff --git a/parser/testdata/join5.test b/parser/testdata/join5.test index 800ef93..dcebdaf 100644 --- a/parser/testdata/join5.test +++ b/parser/testdata/join5.test @@ -316,6 +316,13 @@ stmt 0 ok stmt 28 err 1 -1 61 no such table: main.t2 stmt 61 err 1 -1 183 no such table: t2 stmt 183 ok +==== 7.2 + + SELECT * FROM t1 LEFT JOIN t2 ON ( + t2.x = t1.x AND (t2.y=? OR (t2.y=? AND t2.z IS NOT NULL)) + ); +---- +stmt 0 err 1 -1 104 no such table: t1 ==== 7.3 CREATE TABLE t3(x); @@ -343,6 +350,26 @@ stmt 177 err 1 -1 290 no such table: t4 stmt 290 ok stmt 302 err 1 -1 365 no such table: sqlite_stat1 stmt 365 ok +==== 7.4 + + SELECT * FROM t3 LEFT JOIN t4 ON (t4.x = t3.x) WHERE (t4.y = ? OR t4.z = ?); +---- +stmt 0 err 1 -1 79 no such table: t3 +==== 7.4b + + SELECT * FROM t3 LEFT JOIN t4 ON (t4.x = t3.x) WHERE (t4.y = ? OR t3.x = ?); +---- +stmt 0 err 1 -1 79 no such table: t3 +==== 7.4c + + SELECT * FROM t3 LEFT JOIN t4 ON (t4.x = t3.x) WHERE (t3.x = ? OR t4.z = ?); +---- +stmt 0 err 1 -1 79 no such table: t3 +==== 7.4d + + SELECT * FROM t3 CROSS JOIN t4 ON (t4.x = t3.x) WHERE (+t4.y = ? OR t4.z = ?); +---- +stmt 0 err 1 -1 81 no such table: t3 ==== 8.0 CREATE TABLE t0 (c0, c1, PRIMARY KEY (c0, c1)); diff --git a/parser/testdata/like3.test b/parser/testdata/like3.test index f0f0029..b842539 100644 --- a/parser/testdata/like3.test +++ b/parser/testdata/like3.test @@ -130,21 +130,41 @@ stmt 0 err 1 -1 62 no such table: t4 stmt 0 ok stmt 49 err 1 -1 99 no such table: t5a stmt 99 err 1 -1 138 no such table: t5a +==== like3-5.101 + + SELECT x FROM t5a WHERE x LIKE '/%'; +---- +stmt 0 err 1 -1 39 no such table: t5a ==== like3-5.110 SELECT x FROM t5a WHERE x LIKE '/a%'; ---- stmt 0 err 1 -1 40 no such table: t5a +==== like3-5.111 + + SELECT x FROM t5a WHERE x LIKE '/a%'; +---- +stmt 0 err 1 -1 40 no such table: t5a ==== like3-5.120 SELECT x FROM t5a WHERE x LIKE '^12%' ESCAPE '^'; ---- stmt 0 err 1 -1 52 no such table: t5a +==== like3-5.121 + + SELECT x FROM t5a WHERE x LIKE '^12%' ESCAPE '^'; +---- +stmt 0 err 1 -1 52 no such table: t5a ==== like3-5.122 SELECT x FROM t5a WHERE x LIKE '^-2%' ESCAPE '^'; ---- stmt 0 err 1 -1 52 no such table: t5a +==== like3-5.123 + + SELECT x FROM t5a WHERE x LIKE '^12%' ESCAPE '^'; +---- +stmt 0 err 1 -1 52 no such table: t5a ==== like3-5.200 CREATE TABLE t5b(x INT UNIQUE COLLATE binary); @@ -154,11 +174,21 @@ stmt 0 err 1 -1 52 no such table: t5a stmt 0 ok stmt 49 err 1 -1 99 no such table: t5b stmt 99 err 1 -1 138 no such table: t5b +==== like3-5.201 + + SELECT x FROM t5b WHERE x GLOB '/*'; +---- +stmt 0 err 1 -1 39 no such table: t5b ==== like3-5.210 SELECT x FROM t5b WHERE x GLOB '/a*'; ---- stmt 0 err 1 -1 40 no such table: t5b +==== like3-5.211 + + SELECT x FROM t5b WHERE x GLOB '/a*'; +---- +stmt 0 err 1 -1 40 no such table: t5b ==== like3-5.300 CREATE TABLE t5c (c0 REAL); @@ -215,6 +245,16 @@ stmt 0 err 1 -1 34 no such table: t0 ---- stmt 0 ok stmt 27 ok +==== like3-6.110 + + SELECT * FROM t1 WHERE path LIKE 'a%'; +---- +stmt 0 err 1 -1 41 no such table: t1 +==== like3-6.120 + + SELECT * FROM t1 WHERE path LIKE 'a%' ESCAPE 'x'; +---- +stmt 0 err 1 -1 52 no such table: t1 ==== like3-6.200 DROP TABLE IF EXISTS t2; @@ -226,6 +266,16 @@ stmt 0 ok stmt 27 ok stmt 63 err 1 -1 113 no such table: main.t2 stmt 113 err 1 -1 149 no such table: main.t2 +==== like3-6.210 + + SELECT * FROM t2 WHERE path LIKE 'a%'; +---- +stmt 0 err 1 -1 41 no such table: t2 +==== like3-6.230 + + SELECT * FROM t2 WHERE path LIKE 'a%'; +---- +stmt 0 err 1 -1 41 no such table: t2 ==== like3-7.0 PRAGMA encoding = 'UTF-16be'; diff --git a/parser/testdata/mallocK.test b/parser/testdata/mallocK.test index 2db9ee1..297c078 100644 --- a/parser/testdata/mallocK.test +++ b/parser/testdata/mallocK.test @@ -79,6 +79,11 @@ stmt 1491 err 1 -1 1527 no such table: t3 stmt 1527 err 1 -1 1559 no such table: main.t3 stmt 1559 ok stmt 1570 ok +==== 6.1 + + SELECT DISTINCT c FROM t3 WHERE b BETWEEN '.xx..' AND '.xxxx'; +---- +stmt 0 err 1 -1 67 no such table: t3 ==== 7.1 CREATE TABLE x1(a INTEGER PRIMARY KEY, b); diff --git a/parser/testdata/merge1.test b/parser/testdata/merge1.test index e258960..cd51396 100644 --- a/parser/testdata/merge1.test +++ b/parser/testdata/merge1.test @@ -16,6 +16,24 @@ SELECT v FROM data ORDER BY v; ---- stmt 0 err 1 -1 407 no such table: generate_series +==== 101 + + WITH data(v) AS ( + SELECT value FROM generate_series(1,35,3) + UNION ALL + SELECT value FROM generate_series(10,30,4) + UNION ALL + SELECT value FROM generate_series(20,50,5) + UNION ALL + SELECT value FROM generate_series(30,60,6) + UNION ALL + SELECT value FROM generate_series(1,50,7) + UNION ALL + SELECT value FROM generate_series(10,80,8) + ) + SELECT v FROM data ORDER BY v; +---- +stmt 0 err 1 -1 407 no such table: generate_series ==== 110 WITH data(v) AS ( @@ -34,3 +52,21 @@ stmt 0 err 1 -1 407 no such table: generate_series SELECT v FROM data ORDER BY v; ---- stmt 0 err 1 -1 407 no such table: generate_series +==== 111 + + WITH data(v) AS ( + SELECT value FROM generate_series(1,35,3) + UNION ALL + SELECT value FROM generate_series(10,30,4) + UNION ALL + SELECT value FROM generate_series(20,50,5) + UNION ALL + SELECT value FROM generate_series(30,60,6) + UNION ALL + SELECT value FROM generate_series(1,50,7) + UNION ALL + SELECT value FROM generate_series(10,80,8) + ) + SELECT v FROM data ORDER BY v; +---- +stmt 0 err 1 -1 407 no such table: generate_series diff --git a/parser/testdata/misc7.test b/parser/testdata/misc7.test index ace24a4..836a8ad 100644 --- a/parser/testdata/misc7.test +++ b/parser/testdata/misc7.test @@ -25,6 +25,21 @@ stmt 0 err 1 -1 62 no such table: t1 CREATE TABLE abc(a PRIMARY KEY, b, c); ---- stmt 0 ok +==== misc7-14.1 + + SELECT * FROM abc AS t2 WHERE rowid = 1; +---- +stmt 0 err 1 -1 45 no such table: abc +==== misc7-14.2 + + SELECT * FROM abc AS t2 WHERE a = 1; +---- +stmt 0 err 1 -1 41 no such table: abc +==== misc7-14.3 + + SELECT * FROM abc AS t2 ORDER BY a; +---- +stmt 0 err 1 -1 40 no such table: abc ==== misc7-15.2 DELETE FROM abc WHERE rowid > 12; diff --git a/parser/testdata/nulls1.test b/parser/testdata/nulls1.test index 835188b..0d07528 100644 --- a/parser/testdata/nulls1.test +++ b/parser/testdata/nulls1.test @@ -122,11 +122,21 @@ stmt 0 err 1 -1 66 no such table: t4 ---- stmt 0 err 1 -1 33 no such table: main.t4 stmt 33 err 1 -1 99 no such table: t4 +==== 5.3 + + SELECT * FROM t4 WHERE a IN (1, 2, 3) ORDER BY a, b NULLS LAST +---- +stmt 0 err 1 -1 66 no such table: t4 ==== 5.4 SELECT * FROM t4 WHERE a IN (1, 2, 3) ORDER BY a DESC, b DESC NULLS FIRST ---- stmt 0 err 1 -1 77 no such table: t4 +==== 5.5 + + SELECT * FROM t4 WHERE a IN (1, 2, 3) ORDER BY a DESC, b DESC NULLS FIRST +---- +stmt 0 err 1 -1 77 no such table: t4 ==== 6.0 CREATE TABLE t5(a, b, c); @@ -144,11 +154,21 @@ stmt 28 err 1 -1 185 no such table: t5 ---- stmt 0 err 1 -1 36 no such table: main.t5 stmt 36 err 1 -1 93 no such table: t5 +==== 6.1.2 + + SELECT a,b FROM t5 WHERE a=1 ORDER BY b NULLS LAST, c; +---- +stmt 0 err 1 -1 57 no such table: t5 ==== 6.2.1 SELECT a,b FROM t5 WHERE a=1 ORDER BY b DESC NULLS FIRST, c DESC ---- stmt 0 err 1 -1 68 no such table: t5 +==== 6.2.2 + + SELECT a,b FROM t5 WHERE a=1 ORDER BY b DESC NULLS FIRST, c DESC +---- +stmt 0 err 1 -1 68 no such table: t5 ==== 7.0 CREATE TABLE t71(a, b, c); @@ -210,6 +230,12 @@ stmt 0 err 1 -1 268 no such table: v0 WHERE c2=10 ORDER BY c1, c3 NULLS LAST ---- stmt 0 err 1 -1 87 no such table: v0 +==== 9.4 + + SELECT c1, c2, ifnull(c3, 'NULL') FROM v0 + WHERE c2=10 ORDER BY c1, c3 NULLS LAST +---- +stmt 0 err 1 -1 87 no such table: v0 ==== 10.10 CREATE TABLE t1(x); diff --git a/parser/testdata/orderby1.test b/parser/testdata/orderby1.test index d8c50f2..0fd8acc 100644 --- a/parser/testdata/orderby1.test +++ b/parser/testdata/orderby1.test @@ -1,3 +1,8 @@ +==== 5.0 + + SELECT 5 ORDER BY 1 +---- +stmt 0 ok ==== 5.1 EXPLAIN QUERY PLAN SELECT 5 UNION ALL SELECT 3 ORDER BY 1 @@ -52,6 +57,11 @@ stmt 85 err 1 -1 152 no such table: t7 stmt 0 ok stmt 25 ok stmt 50 err 1 -1 78 no such table: main.t1 +==== 8.1 + + SELECT * FROM t1 ORDER BY a, b; +---- +stmt 0 err 1 -1 34 no such table: t1 ==== 8.2 WITH cnt(i) AS ( diff --git a/parser/testdata/pushdown.test b/parser/testdata/pushdown.test index adee595..65653c1 100644 --- a/parser/testdata/pushdown.test +++ b/parser/testdata/pushdown.test @@ -102,11 +102,21 @@ stmt 215 ok stmt 288 err 1 -1 376 no such table: t2 stmt 376 ok stmt 469 err 1 -1 509 no such table: v3 +==== 3.6 + + SELECT * FROM v3 WHERE a=2 AND b=200; +---- +stmt 0 err 1 -1 40 no such table: v3 ==== 3.7 SELECT count(*) FROM v3; ---- stmt 0 err 1 -1 27 no such table: v3 +==== 3.8 + + SELECT count(*) FROM v3; +---- +stmt 0 err 1 -1 27 no such table: v3 ==== 4.1 CREATE TABLE t1(a INT); @@ -181,6 +191,22 @@ stmt 185 err 1 -1 220 no such table: main.t02 stmt 220 ok stmt 265 ok stmt 287 err 1 -1 322 no such table: k1 +==== 6.1 + + WITH k(n) AS (VALUES(77),(88),(99)) + SELECT max(z) FROM t0 WHERE w=123 AND x IN k AND y BETWEEN 44 AND 55; +---- +stmt 0 err 1 -1 110 no such table: t0 +==== 6.2 + + SELECT max(z) FROM t0 WHERE w=123 AND x IN v1 AND y BETWEEN 44 AND 55; +---- +stmt 0 err 1 -1 73 no such table: t0 +==== 6.3 + + SELECT max(z) FROM t0 WHERE w=123 AND x IN k1 AND y BETWEEN 44 AND 55; +---- +stmt 0 err 1 -1 73 no such table: t0 ==== 7.0 CREATE TABLE t0_1(a INT , b INT, c INT); diff --git a/parser/testdata/rollback2.test b/parser/testdata/rollback2.test index 21ec98b..80c7870 100644 --- a/parser/testdata/rollback2.test +++ b/parser/testdata/rollback2.test @@ -17,3 +17,13 @@ stmt 0 err 1 10 49 no such function: int2hex stmt 0 ok stmt 25 err 1 -1 53 no such table: main.t1 stmt 53 err 1 -1 208 no such table: t1 +==== 3.1 + + SELECT i FROM t1 WHERE (i%2)==0 ORDER BY h DESC; +---- +stmt 0 err 1 -1 51 no such table: t1 +==== 4.2 + + SELECT i FROM t1 WHERE (i%2)==0 ORDER BY h ASC; +---- +stmt 0 err 1 -1 50 no such table: t1 diff --git a/parser/testdata/rowvalue4.test b/parser/testdata/rowvalue4.test index 3ff1e7d..4452a15 100644 --- a/parser/testdata/rowvalue4.test +++ b/parser/testdata/rowvalue4.test @@ -129,6 +129,42 @@ stmt 1017 err 1 -1 1064 no such table: c1 stmt 1064 err 1 -1 1100 no such table: main.c1 stmt 1100 err 1 -1 1135 no such table: main.c1 stmt 1135 ok +==== 3.1.1 + SELECT * FROM c1 WHERE a=1 AND c=2 +---- +stmt 0 err 1 -1 36 no such table: c1 +==== 3.1.2 + SELECT * FROM c1 WHERE a=1 AND b>'d' AND c=2 +---- +stmt 0 err 1 -1 46 no such table: c1 +==== 3.1.3 + SELECT * FROM c1 WHERE a=1 AND b>'l' AND c=2 +---- +stmt 0 err 1 -1 46 no such table: c1 +==== 3.2.1 + SELECT * FROM c1 WHERE a=1 AND c>1 +---- +stmt 0 err 1 -1 36 no such table: c1 +==== 3.2.2 + SELECT * FROM c1 WHERE a=1 AND c>0 +---- +stmt 0 err 1 -1 36 no such table: c1 +==== 3.2.3 + SELECT * FROM c1 WHERE a=1 AND c>=1 +---- +stmt 0 err 1 -1 37 no such table: c1 +==== 3.2.4 + SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'c') +---- +stmt 0 err 1 -1 48 no such table: c1 +==== 3.2.5 + SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'o') +---- +stmt 0 err 1 -1 48 no such table: c1 +==== 3.2.6 + SELECT * FROM c1 WHERE a=1 AND (c, +b)>(1, 'c') +---- +stmt 0 err 1 -1 49 no such table: c1 ==== 5.0 CREATE TABLE d1(x, y); @@ -148,6 +184,13 @@ stmt 53 err 1 -1 86 no such table: main.d2 stmt 86 err 1 -1 115 no such table: main.d2 stmt 115 err 1 -1 244 no such table: d2 stmt 244 ok +==== 5.1 + + SELECT * FROM d2 WHERE + (a, b) IN (SELECT x, y FROM d1) AND + (c) IN (SELECT y FROM d1) +---- +stmt 0 err 1 -1 97 no such table: d2 ==== 6.0 CREATE TABLE e1(a, b, c, d, e); @@ -157,6 +200,31 @@ stmt 244 ok stmt 0 ok stmt 34 err 1 -1 67 no such table: main.e1 stmt 67 err 1 -1 104 no such table: main.e1 +==== 6.1 + + SELECT * FROM e1 WHERE (a, b) > (?, ?) +---- +stmt 0 err 1 -1 42 no such table: e1 +==== 6.2 + + SELECT * FROM e1 WHERE (a, b) < (?, ?) +---- +stmt 0 err 1 -1 42 no such table: e1 +==== 6.3 + + SELECT * FROM e1 WHERE c = ? AND (d, e) > (?, ?) +---- +stmt 0 err 1 -1 52 no such table: e1 +==== 6.4 + + SELECT * FROM e1 WHERE c = ? AND (d, e) < (?, ?) +---- +stmt 0 err 1 -1 52 no such table: e1 +==== 6.5 + + SELECT * FROM e1 WHERE (d, e) BETWEEN (?, ?) AND (?, ?) AND c = ? +---- +stmt 0 err 1 -1 69 no such table: e1 ==== 7.1 CREATE TABLE f1(a, b, c); diff --git a/parser/testdata/rowvalue9.test b/parser/testdata/rowvalue9.test index 76ff054..9a2411e 100644 --- a/parser/testdata/rowvalue9.test +++ b/parser/testdata/rowvalue9.test @@ -355,6 +355,11 @@ stmt 0 err 1 -1 28 no such table: main.t1 SELECT * FROM t1 WHERE (a, b) IN ( (3, 3), (2, 2) ); ---- stmt 0 err 1 -1 55 no such table: t1 +==== 9.4e + + SELECT * FROM t1 WHERE (a, b) IN ( (3, 3), (2, 2) ); +---- +stmt 0 err 1 -1 55 no such table: t1 ==== 9.5 CREATE INDEX i2 ON t1(b, a); @@ -362,3 +367,8 @@ stmt 0 err 1 -1 55 no such table: t1 ---- stmt 0 err 1 -1 31 no such table: main.t1 stmt 31 err 1 -1 86 no such table: t1 +==== 9.5e + + SELECT * FROM t1 WHERE (a, b) IN ( (3, 3), (2, 2) ); +---- +stmt 0 err 1 -1 55 no such table: t1 diff --git a/parser/testdata/scanstatus.test b/parser/testdata/scanstatus.test index cc1546c..d9387db 100644 --- a/parser/testdata/scanstatus.test +++ b/parser/testdata/scanstatus.test @@ -240,16 +240,31 @@ stmt 0 err 1 -1 63 no such table: t1 SELECT count(*) FROM t1 WHERE a IN (0, 1) ---- stmt 0 err 1 -1 45 no such table: t1 +==== 5.3.1 + + SELECT count(*) FROM t2 WHERE y = 'j'; +---- +stmt 0 err 1 -1 41 no such table: t2 ==== 5.3.2 SELECT count(*) FROM t2 WHERE y = 'j'; ---- stmt 0 err 1 -1 41 no such table: t2 +==== 5.4.1 + + SELECT count(*) FROM t1, t2 WHERE y = c; +---- +stmt 0 err 1 -1 45 no such table: t1 ==== 5.4.2 SELECT count(*) FROM t1, t2 WHERE y = c; ---- stmt 0 err 1 -1 45 no such table: t1 +==== 5.5.1 + + SELECT count(*) FROM t1, t3 WHERE y = c; +---- +stmt 0 err 1 -1 43 no such table: t1 ==== 5.5.2 SELECT count(*) FROM t1, t3 WHERE y = c; diff --git a/parser/testdata/selectA.test b/parser/testdata/selectA.test index 8b8220c..c513ae1 100644 --- a/parser/testdata/selectA.test +++ b/parser/testdata/selectA.test @@ -1307,6 +1307,14 @@ stmt 117 err 1 -1 150 no such table: t4 stmt 150 err 1 -1 183 no such table: t4 stmt 183 err 1 -1 212 no such table: main.t4 stmt 212 err 1 -1 240 no such table: main.t5 +==== 4.1.2 + + SELECT c, d FROM t5 + UNION ALL + SELECT a, b FROM t4 WHERE f()==f() + ORDER BY 1,2 +---- +stmt 0 err 1 -1 88 no such table: t4 ==== 4.1.3 SELECT c, d FROM t5 diff --git a/parser/testdata/skipscan1.test b/parser/testdata/skipscan1.test index e892897..eafbfba 100644 --- a/parser/testdata/skipscan1.test +++ b/parser/testdata/skipscan1.test @@ -502,6 +502,12 @@ stmt 205 ok stmt 230 err 1 -1 305 no such table: sqlite_stat1 stmt 305 ok stmt 330 err 1 -1 425 no such table: t1 +==== skipscan1-3.2.dup1 + + SELECT DISTINCT quote(c1), quote(c2), quote(c3), quote(c4), '|' + FROM t1 WHERE t1.c3 = 1; +---- +stmt 0 err 1 -1 95 no such table: t1 ==== skipscan1-4.10 CREATE TABLE t1(a,b INT); diff --git a/parser/testdata/skipscan2.test b/parser/testdata/skipscan2.test index af6ab09..c9f8158 100644 --- a/parser/testdata/skipscan2.test +++ b/parser/testdata/skipscan2.test @@ -225,3 +225,8 @@ stmt 0 err 1 -1 82 no such table: peoplew CREATE TABLE t3(a, b, c, PRIMARY KEY(a, b)) WITHOUT ROWID; ---- stmt 0 ok +==== skipscan2-3.3eqp + + SELECT * FROM t3 WHERE b=42; +---- +stmt 0 err 1 -1 31 no such table: t3 diff --git a/parser/testdata/skipscan6.test b/parser/testdata/skipscan6.test index 5684346..c530d7c 100644 --- a/parser/testdata/skipscan6.test +++ b/parser/testdata/skipscan6.test @@ -231,3 +231,13 @@ stmt 308 err 1 -1 345 no such table: main.t2 stmt 345 err 1 -1 380 no such table: t2 stmt 380 ok stmt 392 err 1 -1 436 no such table: sqlite_stat1 +==== 3.1 + + SELECT * FROM t3 WHERE a = ? AND c = ? +---- +stmt 0 err 1 -1 42 no such table: t3 +==== 3.2 + + SELECT * FROM t2 WHERE a = ? AND c = ? +---- +stmt 0 err 1 -1 42 no such table: t2 diff --git a/parser/testdata/subquery.test b/parser/testdata/subquery.test index efcc203..277ca12 100644 --- a/parser/testdata/subquery.test +++ b/parser/testdata/subquery.test @@ -448,6 +448,13 @@ stmt 141 ok stmt 166 err 1 -1 243 no such table: sqlite_stat1 stmt 243 err 1 -1 319 no such table: sqlite_stat1 stmt 319 ok +==== subquery-10.2 + + WITH v1(aa,cc,bb) AS (SELECT aa, cc, bb FROM t1 WHERE bb=12345), + v2(aa,mx) AS (SELECT aa, max(xx) FROM t2 GROUP BY aa) + SELECT * FROM v1 JOIN v2 ON v1.aa=v2.aa; +---- +stmt 0 err 1 -1 174 no such table: t1 ==== 10.3 CREATE TABLE blob( @@ -464,6 +471,17 @@ stmt 319 ok stmt 0 ok stmt 83 ok stmt 153 err 1 -1 194 no such table: main.delta +==== subquery-10.4 + + WITH RECURSIVE deltasof(rid) AS ( + SELECT rid FROM delta WHERE srcid=125020 + UNION + SELECT delta.rid FROM deltasof, delta + WHERE delta.srcid=deltasof.rid) + SELECT deltasof.rid, blob.uuid FROM deltasof, blob + WHERE blob.rid=deltasof.rid; +---- +stmt 0 err 1 -1 255 no such table: delta ==== subquery-11.1 CREATE TABLE t1(ix INT, rx REAL, bx BLOB, tx TEXT, ax); diff --git a/parser/testdata/tabfunc01.test b/parser/testdata/tabfunc01.test index c4fe198..d180681 100644 --- a/parser/testdata/tabfunc01.test +++ b/parser/testdata/tabfunc01.test @@ -142,6 +142,36 @@ stmt 0 err 1 -1 44 no such table: generate_series SELECT DISTINCT value FROM generate_series(1,x), t1 ORDER BY 1; ---- stmt 0 err 1 -1 66 no such table: generate_series +==== tabfunc01-3.10 + + SELECT value FROM generate_series(1,10) ORDER BY value; +---- +stmt 0 err 1 -1 58 no such table: generate_series +==== tabfunc01-3.11 + + SELECT value FROM generate_series(1,10) ORDER BY +value; +---- +stmt 0 err 1 -1 59 no such table: generate_series +==== tabfunc01-3.12 + + SELECT value FROM generate_series(1,10) ORDER BY value, stop; +---- +stmt 0 err 1 -1 64 no such table: generate_series +==== tabfunc01-3.13 + + SELECT value FROM generate_series(1,10) ORDER BY stop, value; +---- +stmt 0 err 1 -1 64 no such table: generate_series +==== tabfunc01-3.20 + + WITH t1(a) AS ( + SELECT value FROM generate_series(0,10,2) + UNION ALL + SELECT value FROM generate_series(9,18,3) + ) + SELECT * FROM t1 ORDER BY a; +---- +stmt 0 err 1 -1 159 no such table: generate_series ==== tabfunc01-4.1 SELECT * FROM main.generate_series(1,4) diff --git a/parser/testdata/tkt-385a5b56b9.test b/parser/testdata/tkt-385a5b56b9.test index 93ef35c..ea86ede 100644 --- a/parser/testdata/tkt-385a5b56b9.test +++ b/parser/testdata/tkt-385a5b56b9.test @@ -30,3 +30,19 @@ stmt 0 err 1 -1 30 no such table: t1 stmt 0 ok stmt 34 err 1 -1 70 no such table: main.t2 stmt 70 err 1 -1 106 no such table: main.t2 +==== 2.1 + SELECT DISTINCT x FROM t2 +---- +stmt 0 err 1 -1 27 no such table: t2 +==== 2.2 + SELECT DISTINCT y FROM t2 +---- +stmt 0 err 1 -1 27 no such table: t2 +==== 2.3 + SELECT DISTINCT x, y FROM t2 WHERE y=10 +---- +stmt 0 err 1 -1 41 no such table: t2 +==== 2.4 + SELECT DISTINCT x, y FROM t2 WHERE x=10 +---- +stmt 0 err 1 -1 41 no such table: t2 diff --git a/parser/testdata/tkt3442.test b/parser/testdata/tkt3442.test index 06c7597..8c2f2e1 100644 --- a/parser/testdata/tkt3442.test +++ b/parser/testdata/tkt3442.test @@ -9,3 +9,18 @@ ---- stmt 0 ok stmt 104 err 1 -1 152 no such table: main.listhash +==== tkt3442-1.2 + + SELECT node FROM listhash WHERE id='5000' LIMIT 1; +---- +stmt 0 err 1 -1 53 no such table: listhash +==== tkt3442-1.3 + + SELECT node FROM listhash WHERE id="5000" LIMIT 1; +---- +stmt 0 err 1 -1 53 no such table: listhash +==== tkt3442-1.4 + + SELECT node FROM listhash WHERE id=5000 LIMIT 1; +---- +stmt 0 err 1 -1 51 no such table: listhash diff --git a/parser/testdata/tpch01.test b/parser/testdata/tpch01.test index 5271e37..1663ec9 100644 --- a/parser/testdata/tpch01.test +++ b/parser/testdata/tpch01.test @@ -158,3 +158,20 @@ stmt 6050 err 1 -1 6116 no such table: sqlite_stat1 stmt 6116 err 1 -1 6175 no such table: sqlite_stat1 stmt 6175 err 1 -1 6234 no such table: sqlite_stat1 stmt 6234 ok +==== tpch01-1.2 + +select + c_custkey, c_name, sum(l_extendedprice * (1 - l_discount)) as revenue, + c_acctbal, n_name, c_address, c_phone, c_comment +from + customer, orders, lineitem, nation +where + c_custkey = o_custkey and l_orderkey = o_orderkey + and o_orderdate >= '1994-08-01' and o_orderdate < date('1994-08-01', '+3 month') + and l_returnflag = 'R' and c_nationkey = n_nationkey +group by + c_custkey, c_name, c_acctbal, c_phone, n_name, c_address, c_comment +order by + revenue desc; +---- +stmt 0 err 1 -1 541 no such table: customer diff --git a/parser/testdata/update.test b/parser/testdata/update.test index a4ba5fe..de4a4da 100644 --- a/parser/testdata/update.test +++ b/parser/testdata/update.test @@ -620,6 +620,12 @@ stmt 138 ok stmt 0 err 1 -1 17 no such table: t1 stmt 17 ok stmt 66 ok +==== update-21.12 + + WITH t3(x,y) AS (SELECT d, row_number()OVER() FROM t2) + UPDATE t1 SET b=(SELECT y FROM t3 WHERE t1.a=t3.x); +---- +stmt 0 err 1 -1 113 no such table: t1 ==== update-22.0 DROP TABLE IF EXISTS t1; diff --git a/parser/testdata/values.test b/parser/testdata/values.test index 190077b..819d64d 100644 --- a/parser/testdata/values.test +++ b/parser/testdata/values.test @@ -344,16 +344,44 @@ stmt 27 ok (16, 'urtlek' IN(1,2,3)); ---- stmt 0 err 1 -1 73 no such table: t1 +==== 15.1 + + VALUES(1),(2),(3),(4),(5); +---- +stmt 0 ok ==== 15.2 CREATE TABLE t1(a,b); ---- stmt 0 ok +==== 15.3 + + INSERT INTO t1 VALUES + (1,2),(3,4),(7,8); +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 15.4 + + INSERT INTO t1 VALUES + (1,2),(3,4),(7,8), + (5,row_number()OVER()); +---- +stmt 0 err 1 -1 75 no such table: t1 +==== 15.5 + + SELECT * FROM (VALUES(1),(2),(3),(4),(5),(6)), (VALUES('a'),('b'),('c')); +---- +stmt 0 ok ==== 15.6 CREATE TABLE t2(x,y); ---- stmt 0 ok +==== 15.7 + + SELECT * FROM t2 UNION ALL VALUES(1,2),(3,4),(5,6),(7,8); +---- +stmt 0 err 1 -1 60 no such table: t2 ==== 16.1 CREATE TABLE t1(a,b); @@ -372,6 +400,13 @@ stmt 0 ok stmt 9 err 1 -1 120 no such table: t1 stmt 120 err 1 -1 154 no such table: t1 stmt 154 ok +==== 16.3 + + INSERT INTO t1 VALUES(1,2),(3,4),(5,6), + (7,row_number()OVER()), + (9,10), (11,12), (13,14), (15,16); +---- +stmt 0 err 1 -1 111 no such table: t1 ==== 16.4 BEGIN; @@ -385,6 +420,13 @@ stmt 0 ok stmt 9 err 1 -1 88 no such table: t1 stmt 88 err 1 -1 122 no such table: t1 stmt 122 ok +==== 16.5 + + INSERT INTO t1 VALUES + (1,row_number()OVER()), + (2,3), (4,5), (6,7); +---- +stmt 0 err 1 -1 79 no such table: t1 ==== 16.6 BEGIN; @@ -401,6 +443,16 @@ stmt 0 ok stmt 9 err 1 -1 175 no such table: t1 stmt 175 err 1 -1 209 no such table: t1 stmt 209 ok +==== 16.7 + + INSERT INTO t1 VALUES + (1,2),(3,4), + (5,row_number()OVER()), + (7,8),(9,10),(11,12), + (13,row_number()OVER()), + (15,16),(17,18),(19,20),(21,22); +---- +stmt 0 err 1 -1 166 no such table: t1 ==== 17.1 DROP TABLE IF EXISTS t1; diff --git a/parser/testdata/where.test b/parser/testdata/where.test index 15b7edd..4d9d300 100644 --- a/parser/testdata/where.test +++ b/parser/testdata/where.test @@ -1,3 +1,53 @@ +==== where-1.1.2 + + SELECT x, y, w FROM t1 WHERE w=10 +---- +stmt 0 err 1 -1 37 no such table: t1 +==== where-1.1.2b + + SELECT x, y, w FROM t1 WHERE w IS 10 +---- +stmt 0 err 1 -1 40 no such table: t1 +==== where-1.1.6 + + SELECT x, y, w FROM t1 WHERE +w=10 +---- +stmt 0 err 1 -1 38 no such table: t1 +==== where-1.1.8 + + SELECT x, y, w AS abc FROM t1 WHERE abc=10 +---- +stmt 0 err 1 -1 46 no such table: t1 +==== where-1.4.2 + + SELECT w, x, y FROM t1 WHERE 11=w AND x>2 +---- +stmt 0 err 1 -1 45 no such table: t1 +==== where-1.4.2b + + SELECT w, x, y FROM t1 WHERE 11 IS w AND x>2 +---- +stmt 0 err 1 -1 48 no such table: t1 +==== where-1.4.4 + + SELECT w AS a, x AS b, y FROM t1 WHERE 11=a AND b>2 +---- +stmt 0 err 1 -1 55 no such table: t1 +==== where-1.5.2 + + SELECT x, y FROM t1 WHERE y<200 AND w=11 AND x>2 +---- +stmt 0 err 1 -1 52 no such table: t1 +==== where-1.8.2 + + SELECT x, y FROM t1 WHERE w>10 AND y=144 AND x=3 +---- +stmt 0 err 1 -1 52 no such table: t1 +==== where-1.8.3 + + SELECT x, y FROM t1 WHERE y=144 AND x=3 +---- +stmt 0 err 1 -1 43 no such table: t1 ==== where-4.3 SELECT 99 WHERE 0 diff --git a/parser/testdata/where3.test b/parser/testdata/where3.test index 6a75f24..8f31118 100644 --- a/parser/testdata/where3.test +++ b/parser/testdata/where3.test @@ -87,6 +87,16 @@ stmt 115 err 1 -1 149 no such table: t301 stmt 149 ok stmt 176 err 1 -1 208 no such table: t302 stmt 208 ok +==== where3-3.0a + + SELECT * FROM t302, t301 WHERE t302.x=5 AND t301.a=t302.y; +---- +stmt 0 err 1 -1 61 no such table: t302 +==== where3-3.1 + + SELECT * FROM t301, t302 WHERE t302.x=5 AND t301.a=t302.y; +---- +stmt 0 err 1 -1 61 no such table: t301 ==== where3-3.2 SELECT * FROM t301 WHERE c=3 AND a IS NULL; @@ -148,6 +158,46 @@ stmt 438 ok stmt 734 err 1 -1 776 no such table: main.bbb stmt 776 err 1 -1 826 no such table: main.bbb stmt 826 err 1 -1 876 no such table: main.bbb +==== where3-5.0a + + SELECT bbb.title AS tag_title + FROM aaa JOIN bbb ON bbb.id = aaa.parent + WHERE aaa.fk = 'constant' + AND LENGTH(bbb.title) > 0 + AND bbb.parent = 4 + ORDER BY bbb.title COLLATE NOCASE ASC; +---- +stmt 0 err 1 -1 212 no such table: aaa +==== where3-5.1 + + SELECT bbb.title AS tag_title + FROM aaa JOIN aaa AS bbb ON bbb.id = aaa.parent + WHERE aaa.fk = 'constant' + AND LENGTH(bbb.title) > 0 + AND bbb.parent = 4 + ORDER BY bbb.title COLLATE NOCASE ASC; +---- +stmt 0 err 1 -1 219 no such table: aaa +==== where3-5.2 + + SELECT bbb.title AS tag_title + FROM bbb JOIN aaa ON bbb.id = aaa.parent + WHERE aaa.fk = 'constant' + AND LENGTH(bbb.title) > 0 + AND bbb.parent = 4 + ORDER BY bbb.title COLLATE NOCASE ASC; +---- +stmt 0 err 1 -1 212 no such table: bbb +==== where3-5.3 + + SELECT bbb.title AS tag_title + FROM aaa AS bbb JOIN aaa ON bbb.id = aaa.parent + WHERE aaa.fk = 'constant' + AND LENGTH(bbb.title) > 0 + AND bbb.parent = 4 + ORDER BY bbb.title COLLATE NOCASE ASC; +---- +stmt 0 err 1 -1 219 no such table: aaa ==== where3-7-setup CREATE TABLE t71(x1 INTEGER PRIMARY KEY, y1); @@ -227,3 +277,8 @@ stmt 61 ok stmt 85 err 1 -1 118 no such table: t2 stmt 118 err 1 -1 150 no such table: main.t2 stmt 150 err 1 -1 203 no such table: t1 +==== where3-8.2 + + SELECT 1 FROM t1 JOIN t2 ON x=c AND y=d WHERE d>0; +---- +stmt 0 err 1 -1 53 no such table: t1 diff --git a/parser/testdata/where7.test b/parser/testdata/where7.test index a62f074..218b19b 100644 --- a/parser/testdata/where7.test +++ b/parser/testdata/where7.test @@ -99,6 +99,17 @@ stmt 264 ok stmt 457 err 1 -1 493 no such table: main.t302 stmt 493 err 1 -1 536 no such table: main.t302 stmt 536 err 1 -1 572 no such table: main.t302 +==== where7-3.2 + + SELECT t302.c1 + FROM t302 JOIN t301 ON t302.c8 = +t301.c8 + WHERE t302.c2 = 19571 + AND t302.c3 > 1287603136 + AND (t301.c4 = 1407449685622784 + OR t301.c8 = 1407424651264000) + ORDER BY t302.c5 LIMIT 200; +---- +stmt 0 err 1 -1 232 no such table: t302 ==== 4.1 CREATE TABLE t0(w); diff --git a/parser/testdata/where9.test b/parser/testdata/where9.test index 5e0901e..19fe82a 100644 --- a/parser/testdata/where9.test +++ b/parser/testdata/where9.test @@ -1,3 +1,16 @@ +==== where9-3.1 + + SELECT t2.a FROM t1, t2 + WHERE t1.a=80 AND ((t1.c=t2.c AND t1.d=t2.d) OR t1.f=t2.f) +---- +stmt 0 err 1 -1 92 no such table: t1 +==== where9-3.2 + + SELECT coalesce(t2.a,9999) + FROM t1 LEFT JOIN t2 ON (t1.c+1=t2.c AND t1.d=t2.d) OR (t1.f||'x')=t2.f + WHERE t1.a=80 +---- +stmt 0 err 1 -1 126 no such table: t1 ==== where9-4.5 SELECT a FROM t1 INDEXED BY t1b @@ -22,6 +35,21 @@ stmt 0 err 1 -1 106 no such table: t1 ORDER BY +a ---- stmt 0 err 1 -1 106 no such table: t1 +==== where9-5.1 + + SELECT a FROM t1 WHERE b>1000 AND (c=31031 OR d IS NULL) +---- +stmt 0 err 1 -1 60 no such table: t1 +==== where9-5.2 + + SELECT a FROM t1 WHERE b=1000 AND (c=31031 OR d IS NULL) +---- +stmt 0 err 1 -1 60 no such table: t1 +==== where9-5.3 + + SELECT a FROM t1 WHERE b>1000 AND (c>=31031 OR d IS NULL) +---- +stmt 0 err 1 -1 61 no such table: t1 ==== where9-6.8.1 DELETE FROM t1 INDEXED BY t1b diff --git a/parser/testdata/whereG.test b/parser/testdata/whereG.test index c8f3255..c26dfeb 100644 --- a/parser/testdata/whereG.test +++ b/parser/testdata/whereG.test @@ -74,6 +74,15 @@ stmt 1568 err 1 -1 1624 no such table: track stmt 1624 err 1 -1 1684 no such table: track stmt 1684 err 1 -1 1742 no such table: track stmt 1742 err 1 -1 1799 no such table: track +==== whereG-1.1 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE unlikely(cname LIKE '%bach%') + AND composer.cid=track.cid + AND album.aid=track.aid; +---- +stmt 0 err 1 -1 157 no such table: album ==== whereG-1.2 SELECT DISTINCT aname @@ -83,6 +92,15 @@ stmt 1742 err 1 -1 1799 no such table: track AND album.aid=track.aid; ---- stmt 0 err 1 -1 157 no such table: album +==== whereG-1.3 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE likelihood(cname LIKE '%bach%', 0.5) + AND composer.cid=track.cid + AND album.aid=track.aid; +---- +stmt 0 err 1 -1 164 no such table: album ==== whereG-1.4 SELECT DISTINCT aname @@ -92,6 +110,15 @@ stmt 0 err 1 -1 157 no such table: album AND album.aid=track.aid; ---- stmt 0 err 1 -1 164 no such table: album +==== whereG-1.5 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE cname LIKE '%bach%' + AND composer.cid=track.cid + AND album.aid=track.aid; +---- +stmt 0 err 1 -1 147 no such table: album ==== whereG-1.6 SELECT DISTINCT aname @@ -101,6 +128,15 @@ stmt 0 err 1 -1 164 no such table: album AND album.aid=track.aid; ---- stmt 0 err 1 -1 147 no such table: album +==== whereG-1.7 + + SELECT DISTINCT aname + FROM album, composer, track + WHERE cname LIKE '%bach%' + AND unlikely(composer.cid=track.cid) + AND unlikely(album.aid=track.aid); +---- +stmt 0 err 1 -1 167 no such table: album ==== whereG-1.8 SELECT DISTINCT aname @@ -144,6 +180,26 @@ stmt 0 err 1 -1 180 no such table: album ---- stmt 0 ok stmt 38 ok +==== whereG-3.1 + + SELECT * FROM a, b WHERE b1=a1 AND a2=5; +---- +stmt 0 err 1 -1 43 no such table: a +==== whereG-3.2 + + SELECT * FROM a, b WHERE a1=b1 AND a2=5; +---- +stmt 0 err 1 -1 43 no such table: a +==== whereG-3.3 + + SELECT * FROM a, b WHERE a2=5 AND b1=a1; +---- +stmt 0 err 1 -1 43 no such table: a +==== whereG-3.4 + + SELECT * FROM a, b WHERE a2=5 AND a1=b1; +---- +stmt 0 err 1 -1 43 no such table: a ==== whereG-4.0 CREATE TABLE t4(x); @@ -163,6 +219,56 @@ stmt 66 err 1 -1 158 no such table: t4 ---- stmt 0 ok stmt 28 err 1 -1 59 no such table: main.t1 +==== 5.1.2 + + SELECT * FROM t1 WHERE a>? +---- +stmt 0 err 1 -1 30 no such table: t1 +==== 5.1.3 + + SELECT * FROM t1 WHERE likelihood(a>?, 0.9) +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 5.1.4 + + SELECT * FROM t1 WHERE likely(a>?) +---- +stmt 0 err 1 -1 38 no such table: t1 +==== 5.2.2 + + SELECT * FROM t1 WHERE likelihood(b>?, 0.01) +---- +stmt 0 err 1 -1 48 no such table: t1 +==== 5.2.3 + + SELECT * FROM t1 WHERE likelihood(b>?, 0.9) +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 5.2.4 + + SELECT * FROM t1 WHERE likely(b>?) +---- +stmt 0 err 1 -1 38 no such table: t1 +==== 5.3.1.stat4 + + SELECT * FROM t1 WHERE a=? +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 5.3.1 + + SELECT * FROM t1 WHERE a=? +---- +stmt 0 err 1 -1 32 no such table: t1 +==== 5.3.2 + + SELECT * FROM t1 WHERE likelihood(a=?, 0.9) +---- +stmt 0 err 1 -1 47 no such table: t1 +==== 5.3.3 + + SELECT * FROM t1 WHERE likely(a=?) +---- +stmt 0 err 1 -1 38 no such table: t1 ==== 6.0 DROP TABLE IF EXISTS t1; diff --git a/parser/testdata/whereI.test b/parser/testdata/whereI.test index d773549..80c15b2 100644 --- a/parser/testdata/whereI.test +++ b/parser/testdata/whereI.test @@ -15,6 +15,11 @@ stmt 134 err 1 -1 172 no such table: t1 stmt 172 err 1 -1 210 no such table: t1 stmt 210 err 1 -1 238 no such table: main.t1 stmt 238 err 1 -1 266 no such table: main.t1 +==== 1.1 + + SELECT a FROM t1 WHERE b='b' OR c='x' +---- +stmt 0 err 1 -1 41 no such table: t1 ==== 1.2 SELECT a FROM t1 WHERE b='b' OR c='x' @@ -42,6 +47,11 @@ stmt 139 err 1 -1 181 no such table: t2 stmt 181 err 1 -1 222 no such table: t2 stmt 222 err 1 -1 250 no such table: main.t2 stmt 250 err 1 -1 278 no such table: main.t2 +==== 2.1 + + SELECT a FROM t2 WHERE b='b' OR c='x' +---- +stmt 0 err 1 -1 41 no such table: t2 ==== 2.2 SELECT a FROM t2 WHERE b='b' OR c='x' diff --git a/parser/testdata/whereJ.test b/parser/testdata/whereJ.test index 9417065..2cb6eb8 100644 --- a/parser/testdata/whereJ.test +++ b/parser/testdata/whereJ.test @@ -630,6 +630,22 @@ stmt 0 err 1 -1 54 no such table: t1 stmt 0 err 1 -1 35 no such table: main.t1 stmt 35 err 1 -1 66 no such table: main.t1 stmt 66 ok +==== 3.4 + + SELECT * FROM t1 WHERE + a = 4 AND b BETWEEN 20 AND 80 -- Matches 80 rows + AND + c BETWEEN 150 AND 160 -- Matches 10 rows +---- +stmt 0 err 1 -1 163 no such table: t1 +==== 3.5 + + SELECT * FROM t1 WHERE + a = 5 AND b BETWEEN 20 AND 80 -- Matches 1 row + AND + c BETWEEN 150 AND 160 -- Matches 10 rows +---- +stmt 0 err 1 -1 161 no such table: t1 ==== 4.1 CREATE TABLE le( diff --git a/parser/testdata/whereL.test b/parser/testdata/whereL.test index 325e8c3..9fa6d60 100644 --- a/parser/testdata/whereL.test +++ b/parser/testdata/whereL.test @@ -9,6 +9,32 @@ stmt 0 ok stmt 50 ok stmt 100 ok stmt 150 ok +==== 110 + + SELECT * FROM t1, v4 WHERE t1.a=?1 AND v4.a=t1.a; +---- +stmt 0 err 1 -1 52 no such table: t1 +==== 120 + + SELECT * FROM t1, t2, t3 + WHERE t1.a=t2.a AND t2.a=t3.j AND t3.j=5 + ORDER BY t1.a; +---- +stmt 0 err 1 -1 88 no such table: t1 +==== 121 + + SELECT * FROM t1, t2, t3 + WHERE t1.a=t2.a AND t2.a=t3.j AND t3.j=abs(5) + ORDER BY t1.a; +---- +stmt 0 err 1 -1 93 no such table: t1 +==== 122 + + SELECT * FROM t1, t2, t3 + WHERE t1.a=t2.a AND t2.a=t3.j AND t3.j=coalesce(5,random()) + ORDER BY t1.a; +---- +stmt 0 err 1 -1 107 no such table: t1 ==== 200 CREATE TABLE c3(x COLLATE binary, y COLLATE nocase, z COLLATE binary); @@ -179,6 +205,11 @@ stmt 0 ok stmt 30 err 1 -1 147 no such table: t1 stmt 147 err 1 -1 183 no such table: main.t1 stmt 183 err 1 -1 226 no such table: t1 +==== 710 + + SELECT v FROM t1 WHERE abs(v)=1 and v=1; +---- +stmt 0 err 1 -1 43 no such table: t1 ==== 800 CREATE TABLE t0(c0, c1); diff --git a/parser/testdata/wherelimit3.test b/parser/testdata/wherelimit3.test index b0b9bd2..1dc6d03 100644 --- a/parser/testdata/wherelimit3.test +++ b/parser/testdata/wherelimit3.test @@ -12,3 +12,13 @@ stmt 33 err 1 -1 150 no such table: t1 stmt 150 err 1 -1 179 no such table: main.t1 stmt 179 err 1 -1 208 no such table: main.t1 stmt 208 ok +==== 1.1 + + SELECT * FROM t1 WHERE a>=100 AND a<300 ORDER BY b LIMIT 5; +---- +stmt 0 err 1 -1 62 no such table: t1 +==== 1.2 + + SELECT * FROM t1 WHERE a>=100 AND a<300 ORDER BY b LIMIT -1; +---- +stmt 0 err 1 -1 65 no such table: t1 diff --git a/parser/testdata/widetab1.test b/parser/testdata/widetab1.test index 83ce6b4..4a77152 100644 --- a/parser/testdata/widetab1.test +++ b/parser/testdata/widetab1.test @@ -18,6 +18,17 @@ stmt 368 err 1 -1 412 no such table: main.a stmt 412 err 1 -1 471 no such table: main.a stmt 471 ok stmt 537 err 1 -1 573 no such table: main.b +==== 110 + + SELECT dc, count(cn) + FROM (SELECT coalesce(b.bg, a.bc) as dc, cn + FROM a LEFT JOIN b + ON a.bn = b.bn + AND CASE WHEN a.vb IS NOT NULL THEN 1 ELSE 0 END = b.iv + WHERE pd BETWEEN 0 AND 10) + GROUP BY dc; +---- +stmt 0 err 1 -1 262 no such table: a ==== 200 CREATE TABLE t1( diff --git a/parser/testdata/windowpushd.test b/parser/testdata/windowpushd.test index 56c8da2..9ba35a2 100644 --- a/parser/testdata/windowpushd.test +++ b/parser/testdata/windowpushd.test @@ -29,6 +29,11 @@ stmt 0 err 1 -1 21 no such table: lll SELECT * FROM lll WHERE grp_id=2 ---- stmt 0 err 1 -1 36 no such table: lll +==== 1.4 + + SELECT * FROM lll WHERE grp_id=2 +---- +stmt 0 err 1 -1 36 no such table: lll ==== 2.0 CREATE TABLE t1(a, b, c, d); @@ -114,27 +119,52 @@ stmt 0 err 1 -1 44 no such table: v1 stmt 0 err 1 -1 37 no such table: v1 ==== windowpushd-generated.dup3 + SELECT * FROM v1 WHERE a IN ('A', 'B'); +---- +stmt 0 err 1 -1 46 no such table: v1 +==== windowpushd-generated.dup4 + + SELECT * FROM v1 WHERE a = 'c' COLLATE nocase +---- +stmt 0 err 1 -1 53 no such table: v1 +==== windowpushd-generated.dup5 + SELECT * FROM v2; ---- stmt 0 err 1 -1 22 no such table: v2 -==== windowpushd-generated.dup4 +==== windowpushd-generated.dup6 SELECT * FROM v2 WHERE a = 'C'; ---- stmt 0 err 1 -1 36 no such table: v2 -==== windowpushd-generated.dup5 +==== windowpushd-generated.dup7 SELECT * FROM v3; ---- stmt 0 err 1 -1 18 no such table: v3 -==== windowpushd-generated.dup6 +==== windowpushd-generated.dup8 SELECT * FROM v3 WHERE b<'E' ---- stmt 0 err 1 -1 30 no such table: v3 -==== windowpushd-generated.dup7 +==== windowpushd-generated.dup9 + + SELECT * FROM v3 WHERE b='E' +---- +stmt 0 err 1 -1 36 no such table: v3 +==== windowpushd-generated.dup10 + + SELECT * FROM v3 WHERE b>'C' +---- +stmt 0 err 1 -1 36 no such table: v3 +==== windowpushd-generated.dup11 SELECT * FROM v3 WHERE d<0.55; ---- stmt 0 err 1 -1 31 no such table: v3 -==== windowpushd-generated.dup8 +==== windowpushd-generated.dup12 + + SELECT * FROM v3 WHERE d<0.55 +---- +stmt 0 err 1 -1 37 no such table: v3 +==== windowpushd-generated.dup13 SELECT * FROM ( SELECT x, sum(y) AS s, max(z) AS m @@ -142,7 +172,7 @@ stmt 0 err 1 -1 31 no such table: v3 ) ---- stmt 0 err 1 -1 94 no such table: t2 -==== windowpushd-generated.dup9 +==== windowpushd-generated.dup14 SELECT * FROM ( SELECT x, sum(y) AS s, max(z) AS m, @@ -153,7 +183,7 @@ stmt 0 err 1 -1 94 no such table: t2 ) ---- stmt 0 err 1 -1 222 no such table: t2 -==== windowpushd-generated.dup10 +==== windowpushd-generated.dup15 SELECT * FROM ( SELECT x, sum(y) AS s, max(z) AS m, @@ -164,7 +194,7 @@ stmt 0 err 1 -1 222 no such table: t2 ) WHERE s=6 ---- stmt 0 err 1 -1 232 no such table: t2 -==== windowpushd-generated.dup11 +==== windowpushd-generated.dup16 SELECT * FROM ( SELECT x, sum(y) AS s, max(z) AS m, diff --git a/parser/testdata/with1.test b/parser/testdata/with1.test index b3eef23..7d5359d 100644 --- a/parser/testdata/with1.test +++ b/parser/testdata/with1.test @@ -867,6 +867,16 @@ stmt 0 ok ---- stmt 0 ok stmt 27 ok +==== 19.1b + + WITH + x1(a) AS (values(100)) + INSERT INTO t1(x) + SELECT * FROM (WITH x2(y) AS (SELECT * FROM x1) SELECT y+a FROM x1, x2); + SELECT * FROM t1; +---- +stmt 0 err 1 -1 131 no such table: t1 +stmt 131 err 1 -1 151 no such table: t1 ==== 20.1 WITH c(i)AS(VALUES(9)UNION SELECT~i FROM c)SELECT max(5)>i fROM c; diff --git a/parser/testdata/with3.test b/parser/testdata/with3.test index 90e9320..9c96c8b 100644 --- a/parser/testdata/with3.test +++ b/parser/testdata/with3.test @@ -58,6 +58,18 @@ stmt 0 ok stmt 27 err 1 -1 58 no such table: main.y1 stmt 58 err 1 -1 177 no such table: y1 stmt 177 ok +==== 3.1.2 + + WITH cnt(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM cnt LIMIT 1) + SELECT * FROM cnt, y1 WHERE i=a +---- +stmt 0 err 1 -1 106 no such table: y1 +==== 3.1.3 + + WITH cnt(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM cnt LIMIT 1000000) + SELECT * FROM cnt, y1 WHERE i=a +---- +stmt 0 err 1 -1 112 no such table: y1 ==== 3.2.1 CREATE TABLE w1(pk INTEGER PRIMARY KEY, x INTEGER); @@ -65,6 +77,14 @@ stmt 177 ok ---- stmt 0 ok stmt 54 ok +==== 3.2.2 + + WITH RECURSIVE c(w,id) AS (SELECT 0, (SELECT pk FROM w2 LIMIT 1) + UNION ALL SELECT c.w + 1, x FROM w1, c LIMIT 1) + SELECT * FROM c, w2, w1 + WHERE c.id=w2.pk AND c.id=w1.pk; +---- +stmt 0 err 1 -1 187 no such table: w2 ==== 4.0 WITH t5(t5col1) AS ( @@ -122,6 +142,13 @@ stmt 0 ok GROUP BY 1; ---- stmt 0 ok +==== 5.1 + + WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<1) + SELECT x1.x||x2.x||x3.x||x4.x FROM c AS x1, c AS x2, c AS x3, c AS x4 + ORDER BY 1; +---- +stmt 0 ok ==== 5.2 WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<1) diff --git a/parser/testdata/with6.test b/parser/testdata/with6.test index 5168bcf..125ed16 100644 --- a/parser/testdata/with6.test +++ b/parser/testdata/with6.test @@ -4,18 +4,36 @@ SELECT c1.x||c2.x||c3.x FROM c c1, c c2, c c3; ---- stmt 0 ok +==== 101 + + WITH c(x) AS (VALUES(0),(1)) + SELECT c1.x||c2.x||c3.x FROM c c1, c c2, c c3; +---- +stmt 0 ok ==== 110 WITH c(x) AS MATERIALIZED (VALUES(0),(1)) SELECT c1.x||c2.x||c3.x FROM c c1, c c2, c c3; ---- stmt 0 ok +==== 111 + + WITH c(x) AS MATERIALIZED (VALUES(0),(1)) + SELECT c1.x||c2.x||c3.x FROM c c1, c c2, c c3; +---- +stmt 0 ok ==== 120 WITH c(x) AS NOT MATERIALIZED (VALUES(0),(1)) SELECT c1.x||c2.x||c3.x FROM c c1, c c2, c c3; ---- stmt 0 ok +==== 121 + + WITH c(x) AS NOT MATERIALIZED (VALUES(0),(1)) + SELECT c1.x||c2.x||c3.x FROM c c1, c c2, c c3; +---- +stmt 0 ok ==== 130 WITH c(x) AS NOT MATERIALIZED (VALUES(0),(1)) @@ -25,6 +43,15 @@ stmt 0 ok (SELECT x FROM c LIMIT 5) AS c3; ---- stmt 0 ok +==== 131 + + WITH c(x) AS NOT MATERIALIZED (VALUES(0),(1)) + SELECT c1.x||c2.x||c3.x + FROM (SELECT x FROM c LIMIT 5) AS c1, + (SELECT x FROM c LIMIT 5) AS c2, + (SELECT x FROM c LIMIT 5) AS c3; +---- +stmt 0 ok ==== 140 WITH c(x) AS MATERIALIZED (VALUES(0),(1)) @@ -34,6 +61,15 @@ stmt 0 ok (SELECT x FROM c LIMIT 7) AS c3; ---- stmt 0 ok +==== 141 + + WITH c(x) AS MATERIALIZED (VALUES(0),(1)) + SELECT c1.x||c2.x||c3.x + FROM (SELECT x FROM c LIMIT 5) AS c1, + (SELECT x FROM c LIMIT 6) AS c2, + (SELECT x FROM c LIMIT 7) AS c3; +---- +stmt 0 ok ==== 150 WITH c(x) AS (VALUES(0),(1)) @@ -43,6 +79,15 @@ stmt 0 ok (SELECT x FROM c LIMIT 7) AS c3; ---- stmt 0 ok +==== 151 + + WITH c(x) AS (VALUES(0),(1)) + SELECT c1.x||c2.x||c3.x + FROM (SELECT x FROM c LIMIT 5) AS c1, + (SELECT x FROM c LIMIT 6) AS c2, + (SELECT x FROM c LIMIT 7) AS c3; +---- +stmt 0 ok ==== 160 WITH c(x) AS (VALUES(0),(1)) @@ -50,6 +95,13 @@ stmt 0 ok FROM c AS c2 WHERE c2.x<10; ---- stmt 0 ok +==== 161 + + WITH c(x) AS (VALUES(0),(1)) + SELECT c2.x + 100*(SELECT sum(x+1) FROM c WHERE c.x<=c2.x) + FROM c AS c2 WHERE c2.x<10; +---- +stmt 0 ok ==== 170 WITH c(x) AS NOT MATERIALIZED (VALUES(0),(1)) @@ -57,6 +109,13 @@ stmt 0 ok FROM c AS c2 WHERE c2.x<10; ---- stmt 0 ok +==== 171 + + WITH c(x) AS NOT MATERIALIZED (VALUES(0),(1)) + SELECT c2.x + 100*(SELECT sum(x+1) FROM c WHERE c.x<=c2.x) + FROM c AS c2 WHERE c2.x<10; +---- +stmt 0 ok ==== 200 CREATE TABLE t1(x); @@ -87,6 +146,11 @@ stmt 252 err 1 -1 283 no such table: t2 stmt 0 err 1 -1 16 no such view: t2 stmt 16 ok stmt 232 err 1 -1 263 no such table: t2 +==== 211 + + SELECT y FROM t2 ORDER BY y; +---- +stmt 0 err 1 -1 31 no such table: t2 ==== 220 DROP VIEW t2; @@ -116,15 +180,81 @@ stmt 114 err 1 -1 152 no such table: t3 SELECT * FROM t23; ---- stmt 0 err 1 -1 89 no such table: t2 +==== 311 + + WITH t23 AS MATERIALIZED (SELECT * FROM t2 FULL JOIN t3 USING(b)) + SELECT * FROM t23; +---- +stmt 0 err 1 -1 89 no such table: t2 ==== 320 WITH t23 AS NOT MATERIALIZED (SELECT * FROM t2 FULL JOIN t3 USING(b)) SELECT * FROM t23; ---- stmt 0 err 1 -1 93 no such table: t2 +==== 321 + + WITH t23 AS NOT MATERIALIZED (SELECT * FROM t2 FULL JOIN t3 USING(b)) + SELECT * FROM t23; +---- +stmt 0 err 1 -1 93 no such table: t2 ==== 330 WITH t23 AS (SELECT * FROM t2 FULL JOIN t3 USING(b)) SELECT * FROM t23; ---- stmt 0 err 1 -1 76 no such table: t2 +==== 331 + + WITH t23 AS (SELECT * FROM t2 FULL JOIN t3 USING(b)) + SELECT * FROM t23; +---- +stmt 0 err 1 -1 76 no such table: t2 +==== 400 + + with recursive + init(country, date, fin) AS (SELECT country, min(date), max(date) FROM raw WHERE total > 0 GROUP BY country), + src(country, date) AS (SELECT raw.country, raw.date + FROM raw JOIN init i on raw.country = i.country AND raw.date > i.date + ORDER BY raw.country, raw.date), + vals(country, date, x, y) AS (SELECT src.country, src.date, julianday(raw.date) - julianday(src.date), log(delta+1) + FROM src JOIN raw on raw.country = src.country AND raw.date > date(src.date,'-7 days') AND raw.date <= src.date AND delta >= 0), + sums(country, date, x2, x, n, xy, y) AS (SELECT country, date, sum(x*x*1.0), sum(x*1.0), sum(1.0), sum(x*y*1.0), sum(y*1.0) FROM vals GROUP BY 1, 2), + mult(country, date, m) AS (SELECT country, date, 1.0/(x2 * n - x * x) FROM sums), + inv(country, date, a,b,c,d) AS (SELECT mult.country, mult.date, n * m, -x * m, -x * m, x2 * m + FROM mult JOIN sums on sums.country=mult.country AND mult.date=sums.date), + fit(country, date, a, b) AS (SELECT inv.country, inv.date, a * xy + b * y, c * xy + d * y + FROM inv + JOIN mult on mult.country = inv.country AND mult.date = inv.date + JOIN sums on sums.country = mult.country AND sums.date = mult.date + ) + SELECT *, nFin/nPrev - 1 AS growth, log(2)/log(nFin/nPrev) AS doubling + FROM (SELECT f.*, exp(b) - 1 AS nFin, exp(a* (-1) + b) - 1 AS nPrev + FROM fit f JOIN init i on i.country = f.country AND f.date <= date(i.fin,'-3 days')) + WHERE nPrev > 0 AND nFin > 0; +---- +stmt 0 err 1 -1 1522 no such table: raw +==== 410 + + with recursive + init(country, date, fin) AS (SELECT country, min(date), max(date) FROM raw WHERE total > 0 GROUP BY country), + src(country, date) AS (SELECT raw.country, raw.date + FROM raw JOIN init i on raw.country = i.country AND raw.date > i.date + ORDER BY raw.country, raw.date), + vals(country, date, x, y) AS (SELECT src.country, src.date, julianday(raw.date) - julianday(src.date), log(delta+1) + FROM src JOIN raw on raw.country = src.country AND raw.date > date(src.date,'-7 days') AND raw.date <= src.date AND delta >= 0), + sums(country, date, x2, x, n, xy, y) AS (SELECT country, date, sum(x*x*1.0), sum(x*1.0), sum(1.0), sum(x*y*1.0), sum(y*1.0) FROM vals GROUP BY 1, 2), + mult(country, date, m) AS (SELECT country, date, 1.0/(x2 * n - x * x) FROM sums), + inv(country, date, a,b,c,d) AS (SELECT mult.country, mult.date, n * m, -x * m, -x * m, x2 * m + FROM mult JOIN sums on sums.country=mult.country AND mult.date=sums.date), + fit(country, date, a, b) AS (SELECT inv.country, inv.date, a * xy + b * y, c * xy + d * y + FROM inv + JOIN mult on mult.country = inv.country AND mult.date = inv.date + JOIN sums on sums.country = mult.country AND sums.date = mult.date + ) + SELECT *, nFin/nPrev - 1 AS growth, log(2)/log(nFin/nPrev) AS doubling + FROM (SELECT f.*, exp(b) - 1 AS nFin, exp(a* (-1) + b) - 1 AS nPrev + FROM fit f JOIN init i on i.country = f.country AND f.date <= date(i.fin,'-3 days')) + WHERE nPrev > 0 AND nFin > 0; +---- +stmt 0 err 1 -1 1522 no such table: raw diff --git a/parser/testdata/without_rowid1.test b/parser/testdata/without_rowid1.test index 797fa78..685fb69 100644 --- a/parser/testdata/without_rowid1.test +++ b/parser/testdata/without_rowid1.test @@ -265,6 +265,11 @@ stmt 334 err 1 -1 375 no such table: t45 stmt 375 err 1 -1 416 no such table: t45 stmt 416 err 1 -1 457 no such table: t45 stmt 457 err 1 -1 498 no such table: t45 +==== 5.1 + + SELECT * FROM t45 WHERE b=? AND a>? +---- +stmt 0 err 1 -1 39 no such table: t45 ==== 5.2 SELECT * FROM t45 WHERE b='two' AND a>4 From c942d5c4cd3062648ea8d4093510938388058012 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:43:40 +0000 Subject: [PATCH 11/23] Stop allocating per token and per operator The lexer built a closure over the token offset for every token, so sqlite3GetToken's habit of reading past the token -- which relies on the C string's NUL terminator -- cost an allocation each time. It is a method on a small value now, and the token slice is presized: lexing a join goes from eight allocations to two. parseOperators built a map literal on every relational, bitwise and multiplicative operator it consumed. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- lexer/lexer.go | 115 ++++++++++++++++++++++++------------------- parser/parse_expr.go | 26 +++++----- 2 files changed, 77 insertions(+), 64 deletions(-) diff --git a/lexer/lexer.go b/lexer/lexer.go index 77c1a0a..4cdffe5 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -23,7 +23,9 @@ import ( // A NUL byte terminates the input, matching SQLite, whose tokenizer walks a // NUL-terminated buffer. func Lex(src string) []token.Token { - var toks []token.Token + // SQL averages a little over four bytes per token including the + // separators, so this usually gets the whole stream in one allocation. + toks := make([]token.Token, 0, len(src)/4+8) i := 0 for i < len(src) { kind, n := scan(src, i) @@ -86,17 +88,30 @@ func resolveWindowKeywords(toks []token.Token) { } } +// cursor is the input plus the offset of the token being scanned. It exists +// so that "at" can be a method rather than a closure: sqlite3GetToken reads +// past the token freely, relying on the C string's NUL terminator, and a +// closure capturing the offset would allocate once per token. +type cursor struct { + src string + i int +} + +// at returns z[off] relative to the token start, or 0 past the end, standing +// in for the terminator a C string would have. +func (c cursor) at(off int) byte { + if c.i+off < len(c.src) { + return c.src[c.i+off] + } + return 0 +} + // scan returns the kind and byte length of the token beginning at src[i]. // It mirrors the switch on aiClass[] in sqlite3GetToken(); the character // classes are spelled out as predicates instead of a lookup table. func scan(src string, i int) (token.Kind, int) { + z := cursor{src, i} c := src[i] - at := func(off int) byte { // z[off], with the C string's implicit NUL - if i+off < len(src) { - return src[i+off] - } - return 0 - } switch { case c == 0: return token.EOF, 0 @@ -109,15 +124,15 @@ func scan(src string, i int) (token.Kind, int) { return token.SPACE, n case c == '-': // CC_MINUS - if at(1) == '-' { + if z.at(1) == '-' { n := 2 for i+n < len(src) && src[i+n] != '\n' { n++ } return token.COMMENT, n } - if at(1) == '>' { - if at(2) == '>' { + if z.at(1) == '>' { + if z.at(2) == '>' { return token.PTR, 3 } return token.PTR, 2 @@ -136,13 +151,13 @@ func scan(src string, i int) (token.Kind, int) { return token.STAR, 1 case c == '/': // CC_SLASH - if at(1) != '*' || at(2) == 0 { + if z.at(1) != '*' || z.at(2) == 0 { return token.SLASH, 1 } // An unterminated /* comment runs to the end of the input and is // not an error; tokenize.test relies on this. n := 3 - prev := at(2) + prev := z.at(2) for ; i+n < len(src); n++ { if prev == '*' && src[i+n] == '/' { n++ @@ -156,13 +171,13 @@ func scan(src string, i int) (token.Kind, int) { return token.REM, 1 case c == '=': // CC_EQ - if at(1) == '=' { + if z.at(1) == '=' { return token.EQ, 2 } return token.EQ, 1 case c == '<': // CC_LT - switch at(1) { + switch z.at(1) { case '=': return token.LE, 2 case '>': @@ -173,7 +188,7 @@ func scan(src string, i int) (token.Kind, int) { return token.LT, 1 case c == '>': // CC_GT - switch at(1) { + switch z.at(1) { case '=': return token.GE, 2 case '>': @@ -182,13 +197,13 @@ func scan(src string, i int) (token.Kind, int) { return token.GT, 1 case c == '!': // CC_BANG - if at(1) != '=' { + if z.at(1) != '=' { return token.ILLEGAL, 1 } return token.NE, 2 case c == '|': // CC_PIPE - if at(1) != '|' { + if z.at(1) != '|' { return token.BITOR, 1 } return token.CONCAT, 2 @@ -207,7 +222,7 @@ func scan(src string, i int) (token.Kind, int) { for ; i+n < len(src); n++ { last = src[i+n] if last == delim { - if at(n+1) == delim { + if z.at(n+1) == delim { n++ continue } @@ -227,13 +242,13 @@ func scan(src string, i int) (token.Kind, int) { } case c == '.': // CC_DOT - if !isDigit(at(1)) { + if !isDigit(z.at(1)) { return token.DOT, 1 } - return scanNumber(src, i, at) + return scanNumber(z) case isDigit(c): // CC_DIGIT - return scanNumber(src, i, at) + return scanNumber(z) case c == '[': // CC_QUOTE2 n := 1 @@ -252,22 +267,22 @@ func scan(src string, i int) (token.Kind, int) { return token.VARIABLE, n case c == '$' || c == '@' || c == '#' || c == ':': // CC_DOLLAR, CC_VARALPHA - return scanVariable(src, i, at) + return scanVariable(z) case c == 'x' || c == 'X': // CC_X: blob literal, otherwise an identifier - if at(1) == '\'' { + if z.at(1) == '\'' { n := 2 - for isHex(at(n)) { + for isHex(z.at(n)) { n++ } kind := token.BLOB - if at(n) != '\'' || n%2 != 0 { + if z.at(n) != '\'' || n%2 != 0 { kind = token.ILLEGAL - for at(n) != 0 && at(n) != '\'' { + for z.at(n) != 0 && z.at(n) != '\'' { n++ } } - if at(n) != 0 { + if z.at(n) != 0 { n++ } return kind, n @@ -275,20 +290,20 @@ func scan(src string, i int) (token.Kind, int) { return scanIdent(src, i, 1) case c == 0xef: // CC_BOM - if at(1) == 0xbb && at(2) == 0xbf { + if z.at(1) == 0xbb && z.at(2) == 0xbf { return token.SPACE, 3 } return scanIdent(src, i, 1) case isKeywordStart(c): // CC_KYWD0 - if !isKeywordChar(at(1)) { + if !isKeywordChar(z.at(1)) { return scanIdent(src, i, 1) } n := 2 - for isKeywordChar(at(n)) { + for isKeywordChar(z.at(n)) { n++ } - if isIDChar(at(n)) { + if isIDChar(z.at(n)) { return scanIdent(src, i, n+1) } return token.Lookup(src[i : i+n]), n @@ -314,13 +329,13 @@ func scanIdent(src string, i, n int) (token.Kind, int) { // QNUMBER for the grammar to validate). A number immediately followed by an // identifier character is TK_ILLEGAL, so "1abc" is one bad token rather than // two good ones. -func scanNumber(src string, i int, at func(int) byte) (token.Kind, int) { +func scanNumber(z cursor) (token.Kind, int) { kind := token.INTEGER n := 0 - if at(0) == '0' && (at(1) == 'x' || at(1) == 'X') && isHex(at(2)) { + if z.at(0) == '0' && (z.at(1) == 'x' || z.at(1) == 'X') && isHex(z.at(2)) { for n = 3; ; n++ { - if !isHex(at(n)) { - if at(n) == '_' { + if !isHex(z.at(n)) { + if z.at(n) == '_' { kind = token.QNUMBER } else { break @@ -329,21 +344,21 @@ func scanNumber(src string, i int, at func(int) byte) (token.Kind, int) { } } else { for n = 0; ; n++ { - if !isDigit(at(n)) { - if at(n) == '_' { + if !isDigit(z.at(n)) { + if z.at(n) == '_' { kind = token.QNUMBER } else { break } } } - if at(n) == '.' { + if z.at(n) == '.' { if kind == token.INTEGER { kind = token.FLOAT } for n++; ; n++ { - if !isDigit(at(n)) { - if at(n) == '_' { + if !isDigit(z.at(n)) { + if z.at(n) == '_' { kind = token.QNUMBER } else { break @@ -351,14 +366,14 @@ func scanNumber(src string, i int, at func(int) byte) (token.Kind, int) { } } } - if (at(n) == 'e' || at(n) == 'E') && - (isDigit(at(n+1)) || ((at(n+1) == '+' || at(n+1) == '-') && isDigit(at(n+2)))) { + if (z.at(n) == 'e' || z.at(n) == 'E') && + (isDigit(z.at(n+1)) || ((z.at(n+1) == '+' || z.at(n+1) == '-') && isDigit(z.at(n+2)))) { if kind == token.INTEGER { kind = token.FLOAT } for n += 2; ; n++ { - if !isDigit(at(n)) { - if at(n) == '_' { + if !isDigit(z.at(n)) { + if z.at(n) == '_' { kind = token.QNUMBER } else { break @@ -367,7 +382,7 @@ func scanNumber(src string, i int, at func(int) byte) (token.Kind, int) { } } } - for isIDChar(at(n)) { + for isIDChar(z.at(n)) { kind = token.ILLEGAL n++ } @@ -377,19 +392,19 @@ func scanNumber(src string, i int, at func(int) byte) (token.Kind, int) { // scanVariable implements the CC_DOLLAR/CC_VARALPHA case: the ?, :name, // @name and $name bind-parameter spellings, including the TCL-style // "$foo(bar)" and "$foo::bar" suffixes SQLite accepts. -func scanVariable(src string, i int, at func(int) byte) (token.Kind, int) { +func scanVariable(z cursor) (token.Kind, int) { kind := token.VARIABLE nid := 0 n := 1 - for ; at(n) != 0; n++ { - c := at(n) + for ; z.at(n) != 0; n++ { + c := z.at(n) switch { case isIDChar(c): nid++ case c == '(' && nid > 0: for { n++ - c = at(n) + c = z.at(n) if c == 0 || isSpace(c) || c == ')' { break } @@ -403,7 +418,7 @@ func scanVariable(src string, i int, at func(int) byte) (token.Kind, int) { kind = token.ILLEGAL } return kind, n - case c == ':' && at(n+1) == ':': + case c == ':' && z.at(n+1) == ':': n++ default: if nid == 0 { diff --git a/parser/parse_expr.go b/parser/parse_expr.go index 23a3e93..b95c1ef 100644 --- a/parser/parse_expr.go +++ b/parser/parse_expr.go @@ -37,6 +37,15 @@ const ( precUnary = 12 // BITNOT, and the [BITNOT] mark on unary PLUS/MINUS ) +// binaryOps maps the operator tokens that need no special handling to their +// AST operator. +var binaryOps = map[token.Kind]ast.Operator{ + token.LT: ast.OpLt, token.LE: ast.OpLe, token.GT: ast.OpGt, token.GE: ast.OpGe, + token.BITAND: ast.OpBitAnd, token.BITOR: ast.OpBitOr, + token.LSHIFT: ast.OpLShift, token.RSHIFT: ast.OpRShift, + token.STAR: ast.OpMul, token.SLASH: ast.OpDiv, token.REM: ast.OpMod, +} + // parseExpr parses an expression, consuming operators of precedence min and // above. func (p *parser) parseExpr(min int) ast.Expr { @@ -113,20 +122,12 @@ func (p *parser) parseOperators(x ast.Expr, min int, stopAtAnd bool) ast.Expr { if precRelational < min { return x } - op := map[token.Kind]ast.Operator{ - token.LT: ast.OpLt, token.LE: ast.OpLe, - token.GT: ast.OpGt, token.GE: ast.OpGe, - }[t.Kind] - x = p.binary(x, op, precRelational) + x = p.binary(x, binaryOps[t.Kind], precRelational) case token.BITAND, token.BITOR, token.LSHIFT, token.RSHIFT: if precBitwise < min { return x } - op := map[token.Kind]ast.Operator{ - token.BITAND: ast.OpBitAnd, token.BITOR: ast.OpBitOr, - token.LSHIFT: ast.OpLShift, token.RSHIFT: ast.OpRShift, - }[t.Kind] - x = p.binary(x, op, precBitwise) + x = p.binary(x, binaryOps[t.Kind], precBitwise) case token.PLUS, token.MINUS: if precAdd < min { return x @@ -140,10 +141,7 @@ func (p *parser) parseOperators(x ast.Expr, min int, stopAtAnd bool) ast.Expr { if precMul < min { return x } - op := map[token.Kind]ast.Operator{ - token.STAR: ast.OpMul, token.SLASH: ast.OpDiv, token.REM: ast.OpMod, - }[t.Kind] - x = p.binary(x, op, precMul) + x = p.binary(x, binaryOps[t.Kind], precMul) case token.CONCAT: if precConcat < min { return x From 1fb8b3e879636d5be14c8e7944f4becb8b68188f Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:45:52 +0000 Subject: [PATCH 12/23] Show enums whose zero value means something, and chain difftest edits A dump omits zero-valued fields, which made a snapshot ambiguous wherever the zero is the answer: UNBOUNDED PRECEDING, PRIMARY KEY, the NULL literal and four others were printing as nothing at all. An enum whose zero means "absent" says so in its String -- "none", "default", "unspecified" -- which turns out to be exactly the right test. Seven lines gained across the snapshots, no noise added. difftest's -depth applied every extra round to the original mutation rather than to the previous one, so it never got past two edits. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- cmd/difftest/main.go | 14 +++++++++---- internal/dump/dump.go | 30 ++++++++++++++++++++++++++-- parser/parser.go | 5 +++++ parser/testdata/ast/ddl.tree | 3 +++ parser/testdata/ast/expressions.tree | 2 ++ parser/testdata/ast/misc.tree | 1 + parser/testdata/ast/select.tree | 1 + 7 files changed, 50 insertions(+), 6 deletions(-) diff --git a/cmd/difftest/main.go b/cmd/difftest/main.go index dc70744..e596efb 100644 --- a/cmd/difftest/main.go +++ b/cmd/difftest/main.go @@ -112,13 +112,19 @@ func main() { for src := range work { for _, m := range mutations(src, *per, rng) { check(r, m, rep) - // A second edit reaches shapes one cannot: two - // unbalanced brackets, a keyword in a position only - // another edit could open up. + // Further edits reach shapes one cannot: two unbalanced + // brackets, a keyword in a position only another edit + // could open up. Each round builds on the last. + cur := m for d := 1; d < *depth; d++ { - for _, m2 := range mutations(m, 2, rng) { + next := mutations(cur, 2, rng) + if len(next) == 0 { + break + } + for _, m2 := range next { check(r, m2, rep) } + cur = next[0] } } } diff --git a/internal/dump/dump.go b/internal/dump/dump.go index a0504fa..dcfc06f 100644 --- a/internal/dump/dump.go +++ b/internal/dump/dump.go @@ -139,8 +139,34 @@ type field struct { value reflect.Value } +// meaningfulZero reports whether a zero value still says something. Several +// enums have a meaningful zero -- FrameBoundType(0) is UNBOUNDED PRECEDING, +// TableConstraintKind(0) is PRIMARY KEY -- and omitting those would make a +// snapshot ambiguous. An enum whose zero means "absent" says so in its +// String, which is exactly the ones worth leaving out. +func meaningfulZero(v reflect.Value) bool { + // Only enums: a nil node pointer also implements Stringer, and calling + // String on it is a crash rather than an answer. + switch v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + default: + return false + } + s, ok := v.Interface().(fmt.Stringer) + if !ok { + return false + } + switch s.String() { + case "", "none", "default", "unspecified": + return false + } + return true +} + // fields selects the fields worth printing: zero values are omitted so that -// a dump shows what a statement said rather than what it did not. +// a dump shows what a statement said rather than what it did not, except +// where the zero value is itself the statement (see meaningfulZero). func (d *dumper) fields(v reflect.Value) []field { t := v.Type() var out []field @@ -160,7 +186,7 @@ func (d *dumper) fields(v reflect.Value) []field { if sf.Name == "Raw" && !d.opts.Raw { continue } - if fv.IsZero() { + if fv.IsZero() && !meaningfulZero(fv) { continue } out = append(out, field{sf.Name, fv}) diff --git a/parser/parser.go b/parser/parser.go index b88bd12..182413f 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -69,6 +69,11 @@ func LineCol(src string, offset int) (line, col int) { } // Parse reads SQL from r and returns one ast.Stmt per statement. +// +// The context is accepted so the signature matches the sibling parsers +// sqlc uses, and is not consulted: parsing is a bounded, allocation-light +// pass over the input, and the recursion limit keeps even hostile input +// from taking long enough to be worth cancelling. func Parse(ctx context.Context, r io.Reader) ([]ast.Stmt, error) { src, err := io.ReadAll(r) if err != nil { diff --git a/parser/testdata/ast/ddl.tree b/parser/testdata/ast/ddl.tree index 92f8e36..52501cd 100644 --- a/parser/testdata/ast/ddl.tree +++ b/parser/testdata/ast/ddl.tree @@ -198,6 +198,7 @@ CreateTableStmt{ Name: "full" Raw: "full" } + Action: ForeignKeyAction(NO ACTION) } ] } @@ -295,6 +296,7 @@ CreateTableStmt{ Name: "pk" Raw: "pk" } + Kind: TableConstraintKind(PRIMARY KEY) Columns: [ OrderingTerm{ Span: 447:448 @@ -743,6 +745,7 @@ AlterTableStmt{ Raw: "t" } } + Action: AlterAction(RENAME TO) NewName: Ident{ Span: 1126:1127 Name: "u" diff --git a/parser/testdata/ast/expressions.tree b/parser/testdata/ast/expressions.tree index 27707e4..3a84314 100644 --- a/parser/testdata/ast/expressions.tree +++ b/parser/testdata/ast/expressions.tree @@ -1199,6 +1199,7 @@ SelectStmt{ Span: 985:989 Expr: Literal{ Span: 985:989 + Kind: LiteralKind(NULL) Value: "NULL" Raw: "NULL" } @@ -1289,6 +1290,7 @@ SelectStmt{ Span: 1057:1058 Expr: BindParam{ Span: 1057:1058 + Kind: ParamKind(?) Number: 1 Raw: "?" } diff --git a/parser/testdata/ast/misc.tree b/parser/testdata/ast/misc.tree index 573eeae..0438cbd 100644 --- a/parser/testdata/ast/misc.tree +++ b/parser/testdata/ast/misc.tree @@ -1,5 +1,6 @@ BeginStmt{ Span: 58:64 + Type: TransactionType(DEFERRED) } BeginStmt{ Span: 65:98 diff --git a/parser/testdata/ast/select.tree b/parser/testdata/ast/select.tree index 580c64d..47d5d83 100644 --- a/parser/testdata/ast/select.tree +++ b/parser/testdata/ast/select.tree @@ -942,6 +942,7 @@ SelectStmt{ Frame: FrameType(RANGE) StartBound: FrameBound{ Span: 807:826 + Type: FrameBoundType(UNBOUNDED PRECEDING) } EndBound: FrameBound{ Span: 831:842 From 99f61c1e8b577d7176b0779eaa9473d2fb61be89 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:49:05 +0000 Subject: [PATCH 13/23] Test ast traversal and the dump renderer directly Walk and internal/dump were exercised only through the parser, which hides the cases that matter for reflection-driven code: a typed nil in an optional field, an enum whose zero value names a real thing, and the difference between the two Options sets. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- ast/ast_test.go | 73 ++++++++++++++++++++++++++++++++ internal/dump/dump_test.go | 85 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 ast/ast_test.go create mode 100644 internal/dump/dump_test.go diff --git a/ast/ast_test.go b/ast/ast_test.go new file mode 100644 index 0000000..26e5387 --- /dev/null +++ b/ast/ast_test.go @@ -0,0 +1,73 @@ +package ast + +import "testing" + +// tree is "SELECT a FROM t" built by hand, so the traversal tests do not +// depend on the parser. +func tree() *SelectStmt { + col := &Ident{Span: Span{Start: 7, Stop: 8}, Name: "a", Raw: "a"} + tbl := &Ident{Span: Span{Start: 14, Stop: 15}, Name: "t", Raw: "t"} + return &SelectStmt{ + Span: Span{Start: 0, Stop: 15}, + Cores: []SelectCore{&SelectQuery{ + Span: Span{Start: 0, Stop: 15}, + Columns: []*ResultColumn{{Span: col.Span, Expr: col}}, + From: []*TableRef{{ + Span: tbl.Span, + Name: &QualifiedName{Span: tbl.Span, Name: tbl}, + }}, + }}, + } +} + +func TestWalkVisitsEveryNode(t *testing.T) { + var seen []string + Walk(tree(), func(n Node) bool { + switch n.(type) { + case *SelectStmt: + seen = append(seen, "select") + case *Ident: + seen = append(seen, "ident") + } + return true + }) + if len(seen) != 3 || seen[0] != "select" { + t.Fatalf("Walk visited %v, want a select and two idents", seen) + } +} + +// Children() slices are assembled from optional fields, so they are full of +// typed nils; a traversal must not trip over one. +func TestWalkSkipsTypedNils(t *testing.T) { + n := &QualifiedName{Name: &Ident{Name: "t"}} // Schema is a nil *Ident + count := 0 + Walk(n, func(Node) bool { count++; return true }) + if count != 2 { + t.Fatalf("Walk visited %d nodes, want 2 (the name and its ident)", count) + } +} + +func TestWalkStops(t *testing.T) { + count := 0 + Walk(tree(), func(Node) bool { count++; return false }) + if count != 1 { + t.Fatalf("Walk visited %d nodes after fn returned false, want 1", count) + } +} + +func TestSetSpan(t *testing.T) { + n := tree() + n.SetSpan(Span{Start: 0, Stop: 16}) + if n.Pos() != 0 || n.End() != 16 { + t.Fatalf("span is %d:%d, want 0:16", n.Pos(), n.End()) + } +} + +func TestString(t *testing.T) { + if got, want := String(tree()), "SELECT a FROM t"; got != want { + t.Fatalf("String() = %q, want %q", got, want) + } + if got, want := Statements([]Stmt{tree()}), "SELECT a FROM t;\n"; got != want { + t.Fatalf("Statements() = %q, want %q", got, want) + } +} diff --git a/internal/dump/dump_test.go b/internal/dump/dump_test.go new file mode 100644 index 0000000..1f6369e --- /dev/null +++ b/internal/dump/dump_test.go @@ -0,0 +1,85 @@ +package dump + +import ( + "strings" + "testing" + + "github.com/sqlc-dev/meyer/ast" +) + +// sample is a small tree with one of everything the renderer has to decide +// about: a nil optional field, an empty slice, a bool, a string needing +// quoting, an enum whose zero value is meaningful, and one whose zero value +// means "absent". +func sample() ast.Node { + return &ast.OrderingTerm{ + Span: ast.Span{Start: 7, Stop: 20}, + Expr: &ast.Literal{ + Span: ast.Span{Start: 7, Stop: 8}, + Kind: ast.LitNull, // zero value, but means NULL + Raw: `"x"`, + }, + Order: ast.SortDesc, + Nulls: ast.NullsDefault, // zero value meaning absent + } +} + +func TestSnapshotIncludesPositionsAndRaw(t *testing.T) { + got := Node(sample(), Snapshot) + for _, want := range []string{"Span: 7:20", "Span: 7:8", `Raw: "\"x\""`} { + if !strings.Contains(got, want) { + t.Errorf("Snapshot dump is missing %s:\n%s", want, got) + } + } +} + +func TestStructureDropsPositionsAndRaw(t *testing.T) { + got := Node(sample(), Structure) + for _, unwanted := range []string{"Span", "Raw"} { + if strings.Contains(got, unwanted) { + t.Errorf("Structure dump should not mention %s:\n%s", unwanted, got) + } + } + // Everything that is not source fidelity must survive. + for _, want := range []string{"OrderingTerm", "Literal", "SortOrder(DESC)"} { + if !strings.Contains(got, want) { + t.Errorf("Structure dump is missing %s:\n%s", want, got) + } + } +} + +// An enum whose zero value names a real thing must be printed; one whose +// zero value means "absent" must not, or every dump would be mostly +// defaults. +func TestZeroValuedEnums(t *testing.T) { + got := Node(sample(), Structure) + if !strings.Contains(got, "LiteralKind(NULL)") { + t.Errorf("a NULL literal must show its kind:\n%s", got) + } + if strings.Contains(got, "NullsOrder") { + t.Errorf("an absent NULLS clause must not be printed:\n%s", got) + } +} + +// A typed nil in an optional field is common, and reflection makes it easy +// to dereference by accident. +func TestNilFields(t *testing.T) { + got := Node(&ast.QualifiedName{Name: &ast.Ident{Name: "t"}}, Structure) + if strings.Contains(got, "Schema") { + t.Errorf("a nil Schema must be omitted:\n%s", got) + } + if !strings.Contains(got, `Name: "t"`) { + t.Errorf("dump is missing the name:\n%s", got) + } +} + +func TestStmtsRendersEachStatement(t *testing.T) { + stmts := []ast.Stmt{ + &ast.SavepointStmt{Name: &ast.Ident{Name: "a"}}, + &ast.ReleaseStmt{Name: &ast.Ident{Name: "b"}}, + } + got := Stmts(stmts, Structure) + if !strings.Contains(got, "SavepointStmt") || !strings.Contains(got, "ReleaseStmt") { + t.Errorf("Stmts dropped a statement:\n%s", got) + } +} From 702b77d2b43889158d4dc8e401363000296a476d Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:49:55 +0000 Subject: [PATCH 14/23] Run difftest weekly The tool only protects the repo if it runs. It cannot join the ordinary CI job, which must not depend on downloading and compiling SQLite, so it gets a workflow of its own: weekly, on demand, with the artifacts cached against the pin. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- .github/workflows/difftest.yml | 39 ++++++++++++++++++++++++++++++++++ CLAUDE.md | 7 +++--- 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/difftest.yml diff --git a/.github/workflows/difftest.yml b/.github/workflows/difftest.yml new file mode 100644 index 0000000..59d8531 --- /dev/null +++ b/.github/workflows/difftest.yml @@ -0,0 +1,39 @@ +# Differential testing against a real SQLite build. +# +# This is separate from CI because it downloads the pinned SQLite release +# and compiles it, which the ordinary test run must not depend on. It is the +# only thing that exercises error fidelity at scale: the vendored corpus is +# almost all valid SQL, so mutating it is how divergent messages and offsets +# get found. +name: difftest + +on: + schedule: + - cron: "17 4 * * 1" # Mondays, early + workflow_dispatch: + inputs: + seed: + description: "PRNG seed" + default: "1" + per: + description: "mutations per corpus case" + default: "20" + +jobs: + difftest: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + - name: Cache the pinned SQLite artifacts + uses: actions/cache@v4 + with: + path: .sqlite + key: sqlite-${{ hashFiles('internal/sqlitesrc/sqlitesrc.go', 'internal/sqlitesrc/oracle/oracle.c') }} + - run: > + go run ./cmd/difftest + -per ${{ github.event.inputs.per || '20' }} + -depth 2 + -seed ${{ github.event.inputs.seed || '1' }} diff --git a/CLAUDE.md b/CLAUDE.md index cf4a763..f5462d8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -77,9 +77,10 @@ go run ./cmd/difftest -files select1,expr # a few files go run ./cmd/difftest -per 60 -seed 7 # dig harder, reproducibly ``` -It needs the oracle, so it is a development tool rather than a CI test. What -it finds belongs in `parser/errors_test.go`, whose expectations are taken -from the oracle rather than written by hand. +It needs the oracle, so it is not part of `go test ./...`; a separate +workflow (`.github/workflows/difftest.yml`) runs it weekly and on demand. +What it finds belongs in `parser/errors_test.go`, whose expectations are +taken from the oracle rather than written by hand. Two situations it deliberately skips, because the harness cannot compare them rather than because meyer might be wrong: a `;` inside parentheses, From 42c736164a41740c7f12facc5071ae464503bd62 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:55:43 +0000 Subject: [PATCH 15/23] Distinguish NOTNULL from NOT NULL, and start on the review findings "NOT x NOTNULL" and "NOT x NOT NULL" are different trees: NOTNULL is a comparison-level operator while "expr NOT NULL" takes its precedence from NOT, so the first is NOT applied to a null test and the second is a null test applied to a NOT. NullCheckExpr recorded only a bool, so the renderer wrote NOT NULL for both and the round trip changed the tree. 26 million mutations found it; nothing else could have. Also from the review, the findings that stand on their own: - The oracle's "stmt ..." line format had two decoders, in testfile and in sqlitesrc. testfile owns the format and now exports the parser. - ast.Stmt requires SetSpan, so the parser widening a statement's span is checked at compile time rather than by an assertion that silently does nothing. - token.IsPlainID names the bare ID terminal that "generated ::= LP expr RP ID" uses, instead of assembling the class at the call site. - parsePragmaValue was a second copy of parseSignedNumber; the lexer tests hand-rolled slices.Equal; the parser tests had two first-differing-line printers; regenerate-parse had a function-typed parameter that existed only to carry a string. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- ast/ast.go | 6 ++++- ast/expr.go | 16 ++++++++++++-- ast/render.go | 8 +++---- cmd/regenerate-parse/main.go | 15 +++++-------- internal/sqlitesrc/sqlitesrc.go | 32 +-------------------------- internal/testfile/testfile.go | 25 ++++++++++----------- lexer/lexer_test.go | 29 +++--------------------- parser/parse_ddl.go | 2 +- parser/parse_expr.go | 12 ++++++++-- parser/parse_misc.go | 6 +---- parser/parse_trigger.go | 18 +++++---------- parser/parser.go | 16 ++------------ parser/snapshot_test.go | 33 +--------------------------- parser/testdata/ast/expressions.tree | 5 +++-- token/keywords.go | 7 ++++++ 15 files changed, 74 insertions(+), 156 deletions(-) diff --git a/ast/ast.go b/ast/ast.go index 8f26839..774cc2e 100644 --- a/ast/ast.go +++ b/ast/ast.go @@ -20,9 +20,13 @@ type Node interface { Children() []Node } -// Stmt is implemented by all statement nodes. +// Stmt is implemented by all statement nodes. SetSpan is part of the +// interface because the parser widens a statement's span once it has seen +// the terminating semicolon, and a node that could not be widened would get +// a quietly wrong span rather than a compile error. type Stmt interface { Node + SetSpan(Span) stmtNode() } diff --git a/ast/expr.go b/ast/expr.go index 5f67e73..0657569 100644 --- a/ast/expr.go +++ b/ast/expr.go @@ -233,13 +233,25 @@ type IsExpr struct { func (*IsExpr) exprNode() {} func (n *IsExpr) Children() []Node { return nodes(n.X, n.Y) } +// NullTest distinguishes the three spellings of a postfix null test. They +// are not interchangeable: "expr NOT NULL" takes its precedence from NOT, +// while ISNULL and NOTNULL are comparison-level operators, so "NOT x NOTNULL" +// and "NOT x NOT NULL" are different trees. +type NullTest int + +const ( + TestIsNull NullTest = iota // ISNULL + TestNotNull // NOTNULL + TestNotNullWords // NOT NULL +) + // NullCheckExpr is a postfix null test. // // expr ::= expr ISNULL|NOTNULL. / expr ::= expr NOT NULL. type NullCheckExpr struct { Span - Not bool `json:"not"` // NOTNULL / NOT NULL - X Expr `json:"x"` + Test NullTest `json:"test"` + X Expr `json:"x"` } func (*NullCheckExpr) exprNode() {} diff --git a/ast/render.go b/ast/render.go index a3ff729..4cf5cdd 100644 --- a/ast/render.go +++ b/ast/render.go @@ -132,11 +132,7 @@ func write(b *strings.Builder, n Node) { write(b, t.Y) case *NullCheckExpr: write(b, t.X) - if t.Not { - x.kw("NOT NULL") - } else { - x.kw("ISNULL") - } + x.kw(t.Test.String()) case *BetweenExpr: write(b, t.X) if t.Not { @@ -1223,6 +1219,8 @@ func (k LiteralKind) String() string { "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP") } +func (t NullTest) String() string { return name(int(t), "ISNULL", "NOTNULL", "NOT NULL") } + func (k ParamKind) String() string { return name(int(k), "?", "?NNN", ":name", "@name", "$name") } diff --git a/cmd/regenerate-parse/main.go b/cmd/regenerate-parse/main.go index 92e91d2..daf909d 100644 --- a/cmd/regenerate-parse/main.go +++ b/cmd/regenerate-parse/main.go @@ -69,12 +69,11 @@ func main() { ) flag.Parse() - // Workers each own an oracle process; the pinned build is compiled on - // the first call, before any of them start. + // Workers each own an oracle process; the pinned build is compiled once + // here, before any of them start. if _, err := sqlitesrc.Oracle(*cacheDir); err != nil { fatal(err) } - oracle := func() (*sqlitesrc.Runner, error) { return sqlitesrc.NewRunner(*cacheDir) } testDir, err := sqlitesrc.TestScripts(*cacheDir) if err != nil { fatal(err) @@ -107,7 +106,7 @@ func main() { fatal(fmt.Errorf("%s: %w", name, err)) } - cases, stats, err := regenerateFile(oracle, testDir, *testdata, name, *jobs) + cases, stats, err := regenerateFile(*cacheDir, testDir, *testdata, name, *jobs) if err != nil { fatal(fmt.Errorf("%s: %w", name, err)) } @@ -139,16 +138,12 @@ func main() { totals.SkippedSubst, totals.SkippedForm) } -// newRunner starts an oracle process; regenerateFile calls it once per -// worker. -type newRunner func() (*sqlitesrc.Runner, error) - func fatal(err error) { fmt.Fprintln(os.Stderr, "regenerate-parse:", err) os.Exit(1) } -func regenerateFile(oracle newRunner, testDir, outDir, name string, jobs int) ([]testfile.Case, tclextract.Stats, error) { +func regenerateFile(cacheDir, testDir, outDir, name string, jobs int) ([]testfile.Case, tclextract.Stats, error) { src, err := os.ReadFile(filepath.Join(testDir, name+".test")) if err != nil { return nil, tclextract.Stats{}, err @@ -171,7 +166,7 @@ func regenerateFile(oracle newRunner, testDir, outDir, name string, jobs int) ([ wg.Add(1) go func() { defer wg.Done() - r, err := oracle() + r, err := sqlitesrc.NewRunner(cacheDir) if err != nil { fail(err) for range work { // drain so producers are not blocked diff --git a/internal/sqlitesrc/sqlitesrc.go b/internal/sqlitesrc/sqlitesrc.go index 3cdc52a..34e2939 100644 --- a/internal/sqlitesrc/sqlitesrc.go +++ b/internal/sqlitesrc/sqlitesrc.go @@ -17,7 +17,6 @@ import ( "os" "os/exec" "path/filepath" - "strconv" "strings" _ "embed" @@ -218,7 +217,7 @@ func (r *Runner) Run(sql string) ([]testfile.StmtResult, error) { results[len(results)-1].Message += "\n" + line continue } - res, err := parseResultLine(line) + res, err := testfile.ParseResultLine(line) if err != nil { return nil, err } @@ -231,32 +230,3 @@ func (r *Runner) Close() error { r.in.Close() return r.cmd.Wait() } - -// parseResultLine reads one "stmt ..." line of oracle output. The format is -// documented in oracle/oracle.c and mirrored by internal/testfile. -func parseResultLine(line string) (testfile.StmtResult, error) { - fields := strings.SplitN(line, " ", 3) - if len(fields) != 3 || fields[0] != "stmt" { - return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) - } - off, err := strconv.Atoi(fields[1]) - if err != nil { - return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) - } - if fields[2] == "ok" { - return testfile.StmtResult{Offset: off, OK: true}, nil - } - rest := strings.SplitN(strings.TrimPrefix(fields[2], "err "), " ", 4) - if !strings.HasPrefix(fields[2], "err ") || len(rest) != 4 { - return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) - } - rc, err1 := strconv.Atoi(rest[0]) - erroff, err2 := strconv.Atoi(rest[1]) - tail, err3 := strconv.Atoi(rest[2]) - if err1 != nil || err2 != nil || err3 != nil { - return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) - } - return testfile.StmtResult{ - Offset: off, RC: rc, ErrOffset: erroff, Tail: tail, Message: rest[3], - }, nil -} diff --git a/internal/testfile/testfile.go b/internal/testfile/testfile.go index c943e0a..17f720b 100644 --- a/internal/testfile/testfile.go +++ b/internal/testfile/testfile.go @@ -184,7 +184,7 @@ func Read(path string) ([]Case, error) { c.SQL = sql.String() i++ // skip "----" for i < len(lines) && strings.HasPrefix(lines[i], "stmt ") { - r, err := parseResultLine(strings.TrimRight(lines[i], "\n")) + r, err := ParseResultLine(strings.TrimRight(lines[i], "\n")) if err != nil { return nil, fmt.Errorf("%s:%d: %w", path, i+1, err) } @@ -196,7 +196,10 @@ func Read(path string) ([]Case, error) { return cases, nil } -func parseResultLine(line string) (StmtResult, error) { +// ParseResultLine decodes one "stmt ..." line of oracle output. It is +// exported because the oracle runner in internal/sqlitesrc reads the same +// lines live, and a wire format with two decoders drifts. +func ParseResultLine(line string) (StmtResult, error) { rest := strings.TrimPrefix(line, "stmt ") parts := strings.SplitN(rest, " ", 2) if len(parts) != 2 { @@ -224,18 +227,12 @@ func parseResultLine(line string) (StmtResult, error) { }, nil } -// CheckCase reports whether a case can be represented in the file format -// (SQL must not collide with the markers, messages must be single-line). -func CheckCase(c Case) error { - return checkWritable(c) -} - // Write renders cases to path. It refuses SQL that would be ambiguous with // the file format's markers. func Write(path string, cases []Case) error { var b strings.Builder for _, c := range cases { - if err := checkWritable(c); err != nil { + if err := CheckCase(c); err != nil { return err } b.WriteString(caseMarker) @@ -256,16 +253,18 @@ func Write(path string, cases []Case) error { return os.WriteFile(path, []byte(b.String()), 0o644) } -func checkWritable(c Case) error { - if c.Name == "" || strings.ContainsAny(c.Name, "\n") { +// CheckCase reports whether a case can be represented in the file format: +// its SQL must not collide with the markers, and its messages must be +// single-line. +func CheckCase(c Case) error { + if c.Name == "" || strings.Contains(c.Name, "\n") { return fmt.Errorf("invalid case name %q", c.Name) } if !strings.HasSuffix(c.SQL, "\n") { return fmt.Errorf("case %q: SQL must end with a newline", c.Name) } for _, line := range strings.Split(c.SQL, "\n") { - if strings.HasPrefix(line, caseMarker) || strings.TrimRight(line, " \t") == resultMarker || - strings.HasPrefix(line, "==== ") { + if strings.HasPrefix(line, caseMarker) || strings.TrimRight(line, " \t") == resultMarker { return fmt.Errorf("case %q: SQL line collides with file format marker: %q", c.Name, line) } } diff --git a/lexer/lexer_test.go b/lexer/lexer_test.go index 1ec3610..6df671c 100644 --- a/lexer/lexer_test.go +++ b/lexer/lexer_test.go @@ -6,6 +6,7 @@ package lexer import ( + "slices" "testing" "github.com/sqlc-dev/meyer/token" @@ -55,7 +56,7 @@ func TestOperators(t *testing.T) { {"a - -b", []token.Kind{token.ID, token.MINUS, token.MINUS, token.ID}}, } for _, tt := range tests { - if got := kinds(tt.src); !equalKinds(got, tt.want) { + if got := kinds(tt.src); !slices.Equal(got, tt.want) { t.Errorf("Lex(%q) = %v, want %v", tt.src, got, tt.want) } } @@ -211,7 +212,7 @@ func TestWhitespaceAndComments(t *testing.T) { {"\xef\xbb\xbfSELECT", []string{"SELECT"}}, } for _, tt := range tests { - if got := texts(tt.src); !equalStrings(got, tt.want) { + if got := texts(tt.src); !slices.Equal(got, tt.want) { t.Errorf("Lex(%q) texts = %q, want %q", tt.src, got, tt.want) } } @@ -322,27 +323,3 @@ func TestLexNeverLoops(t *testing.T) { } } } - -func equalKinds(a, b []token.Kind) bool { - if len(a) != len(b) { - return false - } - for i := range a { - if a[i] != b[i] { - return false - } - } - return true -} - -func equalStrings(a, b []string) bool { - if len(a) != len(b) { - return false - } - for i := range a { - if a[i] != b[i] { - return false - } - } - return true -} diff --git a/parser/parse_ddl.go b/parser/parse_ddl.go index 1d2588c..05a5c3a 100644 --- a/parser/parse_ddl.go +++ b/parser/parse_ddl.go @@ -310,7 +310,7 @@ func (p *parser) parseGenerated() (ast.Expr, *ast.Ident) { p.expect(token.LP) x := p.parseExpr(precLowest) p.expect(token.RP) - if k := p.cur().Kind; k == token.ID || token.CanFallback(k) { + if token.IsPlainID(p.cur().Kind) { return x, identOf(p.advance()) } return x, nil diff --git a/parser/parse_expr.go b/parser/parse_expr.go index b95c1ef..47c9ed9 100644 --- a/parser/parse_expr.go +++ b/parser/parse_expr.go @@ -172,9 +172,13 @@ func (p *parser) parseOperators(x ast.Expr, min int, stopAtAnd bool) ast.Expr { return x } p.advance() + test := ast.TestIsNull + if t.Kind == token.NOTNULL { + test = ast.TestNotNull + } x = &ast.NullCheckExpr{ Span: ast.Span{Start: x.Pos(), Stop: p.prevEnd()}, - Not: t.Kind == token.NOTNULL, + Test: test, X: x, } case token.IS: @@ -219,7 +223,11 @@ func (p *parser) parseOperators(x ast.Expr, min int, stopAtAnd bool) ast.Expr { switch next { case token.NULL: p.advance() - x = &ast.NullCheckExpr{Span: ast.Span{Start: x.Pos(), Stop: p.prevEnd()}, Not: true, X: x} + x = &ast.NullCheckExpr{ + Span: ast.Span{Start: x.Pos(), Stop: p.prevEnd()}, + Test: ast.TestNotNullWords, + X: x, + } case token.LIKE_KW, token.MATCH: x = p.parseLike(x, true) case token.BETWEEN: diff --git a/parser/parse_misc.go b/parser/parse_misc.go index 1e1828f..d2a0f81 100644 --- a/parser/parse_misc.go +++ b/parser/parse_misc.go @@ -149,11 +149,7 @@ func (p *parser) parsePragma() ast.Stmt { func (p *parser) parsePragmaValue() string { switch p.cur().Kind { case token.PLUS, token.MINUS: - sign := p.advance().Text - if !p.at(token.INTEGER) && !p.at(token.FLOAT) { - p.syntaxError() - } - return sign + p.advance().Text + return p.parseSignedNumber() case token.INTEGER, token.FLOAT, token.ON, token.DELETE, token.DEFAULT: return p.advance().Text } diff --git a/parser/parse_trigger.go b/parser/parse_trigger.go index 6818683..1f72406 100644 --- a/parser/parse_trigger.go +++ b/parser/parse_trigger.go @@ -78,6 +78,10 @@ func (p *parser) parseCreateTrigger(start int, temp bool) ast.Stmt { // trigger_cmd ::= insert_cmd INTO xfullname idlist_opt select upsert. // trigger_cmd ::= DELETE FROM xfullname tridxby where_opt. // trigger_cmd ::= select. +// +// "tridxby" is "indexed_opt" with a tailored error message, which SQLite +// raises from a grammar action rather than the grammar, so meyer accepts it +// wherever the top-level statements do. func (p *parser) parseTriggerCmd() ast.Stmt { start := p.cur().Pos switch p.cur().Kind { @@ -86,7 +90,7 @@ func (p *parser) parseTriggerCmd() ast.Stmt { n := &ast.UpdateStmt{} n.OrConflict = p.parseOrConflict() n.Table, n.Alias = p.xfullname() - n.IndexedBy, n.NotIndexed = p.parseTriggerIndexedBy() + n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() // tridxby p.expect(token.SET) n.Set = p.parseSetList() if p.accept(token.FROM) { @@ -121,7 +125,7 @@ func (p *parser) parseTriggerCmd() ast.Stmt { p.expect(token.FROM) n := &ast.DeleteStmt{} n.Table, n.Alias = p.xfullname() - n.IndexedBy, n.NotIndexed = p.parseTriggerIndexedBy() + n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() // tridxby if p.accept(token.WHERE) { n.Where = p.parseExpr(precLowest) } @@ -130,13 +134,3 @@ func (p *parser) parseTriggerCmd() ast.Stmt { } return p.parseSelect() } - -// parseTriggerIndexedBy implements "tridxby". Both non-empty alternatives -// exist only so SQLite can produce a tailored message ("the INDEXED BY -// clause is not allowed on UPDATE or DELETE statements within triggers"), -// which is a grammar action and so not a parse error: meyer accepts them. -// -// tridxby ::= . / INDEXED BY nm. / NOT INDEXED. -func (p *parser) parseTriggerIndexedBy() (*ast.Ident, bool) { - return p.parseIndexedOpt() -} diff --git a/parser/parser.go b/parser/parser.go index 182413f..893160b 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -298,7 +298,7 @@ func (p *parser) parseScript() []ast.Stmt { p.syntaxError() } p.flushDeferred() - setStmtSpan(stmt, start, end) + stmt.SetSpan(ast.Span{Start: start, Stop: end}) stmts = append(stmts, stmt) } return stmts @@ -383,14 +383,6 @@ func (p *parser) span(start int) ast.Span { return ast.Span{Start: start, Stop: p.prevEnd()} } -// setStmtSpan widens a statement's span to cover its terminating semicolon. -// Every node embeds ast.Span, which supplies SetSpan. -func setStmtSpan(stmt ast.Stmt, start, end int) { - if s, ok := stmt.(interface{ SetSpan(ast.Span) }); ok { - s.SetSpan(ast.Span{Start: start, Stop: end}) - } -} - // Name productions. parse.y expresses these as token classes plus the // %fallback ID set; token.IsName and friends encode the membership, and // these helpers turn an accepted token into an Ident. @@ -414,11 +406,7 @@ func (p *parser) expectIDS() *ast.Ident { // identOf builds an Ident from an accepted name token, undoing SQLite's four // quoting styles. func identOf(t token.Token) *ast.Ident { - id := &ast.Ident{ - Span: ast.Span{Start: t.Pos, Stop: t.End}, - Raw: t.Text, - Name: t.Text, - } + id := &ast.Ident{Span: spanOf(t), Raw: t.Text, Name: t.Text} if len(t.Text) >= 2 { switch t.Text[0] { case '"', '\'', '`': diff --git a/parser/snapshot_test.go b/parser/snapshot_test.go index bfef585..fb32a20 100644 --- a/parser/snapshot_test.go +++ b/parser/snapshot_test.go @@ -4,7 +4,6 @@ import ( "flag" "os" "path/filepath" - "strconv" "strings" "testing" @@ -55,38 +54,8 @@ func TestASTSnapshots(t *testing.T) { } if got != string(want) { t.Errorf("%s: snapshot mismatch (run: go test ./parser -update)\n%s", - golden, snapshotDiff(string(want), got)) + golden, firstDiff(string(want), got)) } }) } } - -// snapshotDiff reports the first few differing lines, which is enough to see -// what moved without printing a whole tree. -func snapshotDiff(want, got string) string { - wl, gl := strings.Split(want, "\n"), strings.Split(got, "\n") - var b strings.Builder - shown := 0 - for i := 0; i < len(wl) || i < len(gl) || shown < 5; i++ { - if i >= len(wl) && i >= len(gl) { - break - } - var a, c string - if i < len(wl) { - a = wl[i] - } - if i < len(gl) { - c = gl[i] - } - if a == c { - continue - } - b.WriteString(" line " + strconv.Itoa(i+1) + "\n want: " + a + "\n got: " + c + "\n") - shown++ - if shown == 5 { - b.WriteString(" ...\n") - break - } - } - return b.String() -} diff --git a/parser/testdata/ast/expressions.tree b/parser/testdata/ast/expressions.tree index 3a84314..0e5024c 100644 --- a/parser/testdata/ast/expressions.tree +++ b/parser/testdata/ast/expressions.tree @@ -527,6 +527,7 @@ SelectStmt{ Span: 462:470 Expr: NullCheckExpr{ Span: 462:470 + Test: NullTest(ISNULL) X: Ident{ Span: 462:463 Name: "x" @@ -538,7 +539,7 @@ SelectStmt{ Span: 472:481 Expr: NullCheckExpr{ Span: 472:481 - Not: true + Test: NullTest(NOTNULL) X: Ident{ Span: 472:473 Name: "x" @@ -550,7 +551,7 @@ SelectStmt{ Span: 483:493 Expr: NullCheckExpr{ Span: 483:493 - Not: true + Test: NullTest(NOT NULL) X: Ident{ Span: 483:484 Name: "x" diff --git a/token/keywords.go b/token/keywords.go index 07ee9a0..ba4be18 100644 --- a/token/keywords.go +++ b/token/keywords.go @@ -241,6 +241,13 @@ func CanFallback(k Kind) bool { return fallback[k] } // %token_class idj ID|INDEXED|JOIN_KW. // nm ::= idj. / nm ::= STRING. +// IsPlainID reports whether k is TK_ID, or a keyword that becomes one +// through %fallback. It is not one of parse.y's token classes: it is the +// bare ID terminal, which a few rules use directly. +// +// generated ::= LP expr RP ID. +func IsPlainID(k Kind) bool { return k == ID || fallback[k] } + // IsID reports whether k satisfies the "id" class (ID|INDEXED). func IsID(k Kind) bool { return k == ID || k == INDEXED || fallback[k] } From 39dadb4aa2a1c05a7170e20a49e35a51b1bf4f6f Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 20:59:44 +0000 Subject: [PATCH 16/23] Put the round trip, the split hazard and the truncation rule in one place Three copies of the round-trip property had already drifted: only the corpus test still checked that rendering is idempotent, so the fuzz target and difftest were quietly running a weaker property. internal/roundtrip states it once and all three call it, which also means difftest stops parsing every accepted mutation twice. Two pieces of harness knowledge moved to where they belong: - "the last statement failed on its own last token, so SQLite never reached the end of the input and cannot report the truncation" is expectation policy, not a difftest quirk. It sits on Expectation now, next to the unreached ranges it is a cousin of. - sqlite3_complete's cruder scanner cuts a script into statements differently from the tokenizer, and every caller of Runner.Run inherits that. SplitDiffers lives beside the runner now. Also: one corpus-walking helper for the four tests that walk it, and the harness calls ParseString instead of routing 21,000 cases through a reader and a per-case context that Parse documents as unused. The io.Reader entry point gets a test of its own instead. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- cmd/difftest/main.go | 101 +++----------------------------- internal/dump/dump.go | 20 +++++++ internal/roundtrip/roundtrip.go | 64 ++++++++++++++++++++ internal/sqlitesrc/sqlitesrc.go | 55 +++++++++++++++++ internal/testfile/testfile.go | 23 +++++++- parser/corpus_test.go | 48 +++++++++++++++ parser/fuzz_test.go | 21 ++----- parser/parser_test.go | 27 +++++---- parser/roundtrip_test.go | 98 +++++-------------------------- parser/snapshot_test.go | 2 +- parser/span_test.go | 34 +++-------- 11 files changed, 260 insertions(+), 233 deletions(-) create mode 100644 internal/roundtrip/roundtrip.go create mode 100644 parser/corpus_test.go diff --git a/cmd/difftest/main.go b/cmd/difftest/main.go index e596efb..36f03b5 100644 --- a/cmd/difftest/main.go +++ b/cmd/difftest/main.go @@ -36,13 +36,12 @@ import ( "sync" "sync/atomic" - "github.com/sqlc-dev/meyer/ast" "github.com/sqlc-dev/meyer/internal/dump" + "github.com/sqlc-dev/meyer/internal/roundtrip" "github.com/sqlc-dev/meyer/internal/sqlitesrc" "github.com/sqlc-dev/meyer/internal/testfile" "github.com/sqlc-dev/meyer/lexer" "github.com/sqlc-dev/meyer/parser" - "github.com/sqlc-dev/meyer/token" ) // injections are the tokens a mutation may splice in. They are chosen to @@ -147,7 +146,7 @@ func main() { // check asks both parsers about one input and records any disagreement. func check(r *sqlitesrc.Runner, sql string, rep *report) { - if splitDiffers(sql) { + if sqlitesrc.SplitDiffers(sql) { rep.skipped.Add(1) return } @@ -159,18 +158,12 @@ func check(r *sqlitesrc.Runner, sql string, rep *report) { c := testfile.Case{SQL: sql, Results: results} exp := c.Expected() - // A grammar action that fails on the last token of a statement leaves - // pzTail at the end of the input, so nothing marks the statement as - // abandoned -- yet SQLite stopped feeding tokens and can no longer - // notice that the input was truncated. "CREATE TABLE aux1.t1(" is - // "unknown database aux1" to SQLite and "incomplete input" to meyer, - // and the corpus cannot say which is right. - if exp.OK && truncatedAtEnd(sql, results) { + if exp.OK && exp.Truncated { rep.skipped.Add(1) return } - _, perr := parser.ParseString(sql) + stmts, perr := parser.ParseString(sql) var pe *parser.Error if perr != nil { var ok bool @@ -191,7 +184,9 @@ func check(r *sqlitesrc.Runner, sql string, rep *report) { case exp.OK && pe == nil: // Both accepted, so this is also a free renderer test: mutated SQL // that still parses is a shape nobody wrote on purpose. - checkRoundTrip(sql, rep) + if r := roundtrip.Check(stmts); !r.Ok { + rep.add(r.Reason, sql, r.Rendered, dump.FirstDiff(r.Want, r.Got)) + } case exp.OK: rep.add("meyer rejects, SQLite accepts", sql, pe.Message, "accepted") case pe == nil: @@ -205,88 +200,6 @@ func check(r *sqlitesrc.Runner, sql string, rep *report) { } } -// checkRoundTrip renders an accepted parse back to SQL and re-parses it; -// the two trees must match, ignoring spans and Raw text. -func checkRoundTrip(sql string, rep *report) { - first, err := parser.ParseString(sql) - if err != nil { - return - } - rendered := ast.Statements(first) - second, err := parser.ParseString(rendered) - if err != nil { - rep.add("rendered SQL does not parse", sql, err.Error(), rendered) - return - } - want := dump.Stmts(first, dump.Structure) - if got := dump.Stmts(second, dump.Structure); got != want { - rep.add("round trip changed the tree", sql, rendered, "") - } -} - -// splitDiffers reports whether the oracle would cut the script into -// statements somewhere meyer would not, which makes the two incomparable. -// -// The oracle splits the way the sqlite3 shell does, with sqlite3_complete, -// whose scanner is much cruder than the tokenizer: it understands strings, -// the four quoting styles and comments, but nothing else. So a ";" ends a -// statement for it even inside brackets, and even inside a token the real -// tokenizer would have swallowed whole -- ":v(a;b)" is one bind parameter -// to the tokenizer and two statements to sqlite3_complete. -func splitDiffers(sql string) bool { - depth := 0 - for _, t := range lexer.Lex(sql) { - switch t.Kind { - case token.LP: - depth++ - case token.RP: - if depth > 0 { - depth-- - } - case token.SEMI: - if depth > 0 { - return true - } - default: - if strings.Contains(t.Text, ";") && !completeUnderstands(t) { - return true - } - } - } - return false -} - -// completeUnderstands reports whether sqlite3_complete skips over a token -// the same way the tokenizer does. The closed quoted forms it does, blob -// literals included, since it reads their body as a single-quoted string. -// An unterminated one it does not: in ":v('(%d)',changes());" the tokenizer -// swallows the first quote into the bind parameter and finds a string -// starting at the second, while sqlite3_complete pairs the two. -func completeUnderstands(t token.Token) bool { - switch t.Kind { - case token.STRING, token.BLOB: - return true - case token.ID: - switch t.Text[0] { - case '"', '`', '[': - return true - } - } - return false -} - -// truncatedAtEnd reports whether the last statement failed with a -// non-syntax message raised while its last token was the lookahead. SQLite -// abandons the parse there, so it never reaches the end of the input and -// never reports the truncation. -func truncatedAtEnd(sql string, results []testfile.StmtResult) bool { - if len(results) == 0 { - return false - } - last := results[len(results)-1] - return !last.OK && !testfile.IsSyntaxError(last.Message) && last.Tail >= len(sql) -} - // mutations derives up to n one-edit variants of src. Every edit works on // token boundaries, because a byte-level edit mostly produces lexer noise, // while a token-level one lands on a grammar decision. diff --git a/internal/dump/dump.go b/internal/dump/dump.go index dcfc06f..e4a7512 100644 --- a/internal/dump/dump.go +++ b/internal/dump/dump.go @@ -16,6 +16,7 @@ package dump import ( "fmt" "reflect" + "strconv" "strings" "github.com/sqlc-dev/meyer/ast" @@ -58,6 +59,25 @@ func Stmts(stmts []ast.Stmt, opts Options) string { return b.String() } +// FirstDiff reports the first differing line of two dumps, with its number, +// so a failure names the field that changed instead of printing two trees. +func FirstDiff(want, got string) string { + wl, gl := strings.Split(want, "\n"), strings.Split(got, "\n") + for i := 0; i < len(wl) || i < len(gl); i++ { + var a, b string + if i < len(wl) { + a = wl[i] + } + if i < len(gl) { + b = gl[i] + } + if a != b { + return " line " + strconv.Itoa(i+1) + "\n want: " + a + "\n got: " + b + } + } + return "" +} + type dumper struct { b *strings.Builder opts Options diff --git a/internal/roundtrip/roundtrip.go b/internal/roundtrip/roundtrip.go new file mode 100644 index 0000000..86fb564 --- /dev/null +++ b/internal/roundtrip/roundtrip.go @@ -0,0 +1,64 @@ +// Package roundtrip states meyer's round-trip property in one place. +// +// PLAN.md uses it in place of the parse-tree goldens SQLite cannot produce: +// rendering a tree back to SQL and re-parsing it must yield the same tree. +// Accept/reject conformance cannot see a dropped clause or an operator +// associated the wrong way; this can. +// +// It lives in its own package because three callers need it — the corpus +// test, the fuzz target and cmd/difftest — and when each had its own copy +// they drifted: two of the three had quietly stopped checking that +// rendering is idempotent. +package roundtrip + +import ( + "github.com/sqlc-dev/meyer/ast" + "github.com/sqlc-dev/meyer/internal/dump" + "github.com/sqlc-dev/meyer/parser" +) + +// Result describes one round trip. Ok is false when the property failed, +// and the other fields say how. +type Result struct { + Ok bool + Rendered string // the SQL the tree was rendered back to + Reason string // why it failed: one short phrase + Want string // the structural dump of the original tree + Got string // the structural dump of the re-parsed one +} + +// Check renders stmts back to SQL, re-parses it, and compares the two trees. +// +// Equality is structural: byte spans and the Raw fields differ after a round +// trip by construction, and the renderer promises nothing about them, so +// dump.Structure leaves both out. +func Check(stmts []ast.Stmt) Result { + rendered := ast.Statements(stmts) + again, err := parser.ParseString(rendered) + if err != nil { + return Result{Rendered: rendered, Reason: "rendered SQL does not parse: " + err.Error()} + } + want := dump.Stmts(stmts, dump.Structure) + if got := dump.Stmts(again, dump.Structure); got != want { + return Result{Rendered: rendered, Reason: "round trip changed the tree", Want: want, Got: got} + } + // Rendering twice must give the same text, which catches a renderer + // that loses something the dump happens not to show. + if twice := ast.Statements(again); twice != rendered { + return Result{ + Rendered: rendered, Reason: "rendering is not idempotent", + Want: rendered, Got: twice, + } + } + return Result{Ok: true, Rendered: rendered} +} + +// CheckSQL parses src and, if it parses, checks the property. An input the +// parser rejects is not a round-trip failure, and reports Ok. +func CheckSQL(src string) Result { + stmts, err := parser.ParseString(src) + if err != nil { + return Result{Ok: true} + } + return Check(stmts) +} diff --git a/internal/sqlitesrc/sqlitesrc.go b/internal/sqlitesrc/sqlitesrc.go index 34e2939..2811e2f 100644 --- a/internal/sqlitesrc/sqlitesrc.go +++ b/internal/sqlitesrc/sqlitesrc.go @@ -22,6 +22,8 @@ import ( _ "embed" "github.com/sqlc-dev/meyer/internal/testfile" + "github.com/sqlc-dev/meyer/lexer" + "github.com/sqlc-dev/meyer/token" ) //go:embed oracle/oracle.c @@ -230,3 +232,56 @@ func (r *Runner) Close() error { r.in.Close() return r.cmd.Wait() } + +// SplitDiffers reports whether Run would cut a script into statements +// somewhere the tokenizer would not, which makes its verdict incomparable +// with a parser's. +// +// The oracle splits the way the sqlite3 shell does, with sqlite3_complete, +// whose scanner is much cruder than the tokenizer: it understands strings, +// the four quoting styles and comments, but nothing else. So a ";" ends a +// statement for it even inside brackets, and even inside a token the real +// tokenizer would have swallowed whole -- ":v(a;b)" is one bind parameter +// to the tokenizer and two statements to sqlite3_complete. Any caller of +// Run inherits this, which is why it lives here rather than in one of them. +func SplitDiffers(sql string) bool { + depth := 0 + for _, t := range lexer.Lex(sql) { + switch t.Kind { + case token.LP: + depth++ + case token.RP: + if depth > 0 { + depth-- + } + case token.SEMI: + if depth > 0 { + return true + } + default: + if strings.Contains(t.Text, ";") && !completeUnderstands(t) { + return true + } + } + } + return false +} + +// completeUnderstands reports whether sqlite3_complete skips over a token +// the same way the tokenizer does. The closed quoted forms it does, blob +// literals included, since it reads their body as a single-quoted string. +// An unterminated one it does not: in ":v('(%d)',changes());" the tokenizer +// swallows the first quote into the bind parameter and finds a string +// starting at the second, while sqlite3_complete pairs the two. +func completeUnderstands(t token.Token) bool { + switch t.Kind { + case token.STRING, token.BLOB: + return true + case token.ID: + switch t.Text[0] { + case '"', '`', '[': + return true + } + } + return false +} diff --git a/internal/testfile/testfile.go b/internal/testfile/testfile.go index 17f720b..bc9f44d 100644 --- a/internal/testfile/testfile.go +++ b/internal/testfile/testfile.go @@ -67,6 +67,16 @@ type Expectation struct { // that reaches the end of the input includes the offset one past it, // which is where a parser reports running out of input. Unreached []Range + + // Truncated reports that the last statement failed with a non-syntax + // message raised while its own last token was the lookahead. SQLite + // stopped there, so it never reached the end of the input and could not + // notice that the input was cut short: "CREATE TABLE aux1.t1(" is + // "unknown database aux1" to SQLite and "incomplete input" to a parser + // that reads to the end. pzTail cannot separate the two, because the + // statement's last token is also the end of the input, so the case + // simply cannot say who is right. + Truncated bool } // Range is a half-open byte range of a case's SQL. @@ -145,7 +155,18 @@ func (c *Case) Expected() Expectation { } unreached = append(unreached, Range{Start: r.Tail, End: end}) } - return Expectation{OK: true, Offset: -1, Unreached: unreached} + return Expectation{ + OK: true, Offset: -1, Unreached: unreached, Truncated: c.truncated(), + } +} + +// truncated implements Expectation.Truncated; see its documentation. +func (c *Case) truncated() bool { + if len(c.Results) == 0 { + return false + } + last := c.Results[len(c.Results)-1] + return !last.OK && !IsSyntaxError(last.Message) && last.Tail >= len(c.SQL) } const ( diff --git a/parser/corpus_test.go b/parser/corpus_test.go new file mode 100644 index 0000000..61a8f30 --- /dev/null +++ b/parser/corpus_test.go @@ -0,0 +1,48 @@ +package parser_test + +import ( + "path/filepath" + "strings" + "testing" + + "github.com/sqlc-dev/meyer/internal/testfile" +) + +// forEachCorpusCase runs fn over every case of every corpus file, one +// parallel subtest per file, skipping cases the metadata still lists as +// todo. Four tests walk the corpus this way and only differ in fn. +func forEachCorpusCase(t *testing.T, fn func(*testing.T, testfile.Case)) { + t.Helper() + for _, path := range corpusFiles(t) { + t.Run(strings.TrimSuffix(filepath.Base(path), ".test"), func(t *testing.T) { + t.Parallel() + cases, err := testfile.Read(path) + if err != nil { + t.Fatal(err) + } + meta, err := testfile.ReadMetadata(testfile.MetadataPath(path)) + if err != nil { + t.Fatal(err) + } + for _, c := range cases { + if !meta.Todo[c.Name] { + fn(t, c) + } + } + }) + } +} + +// corpusFiles lists the corpus, failing the test if it is missing rather +// than passing vacuously. +func corpusFiles(t testing.TB) []string { + t.Helper() + paths, err := filepath.Glob(filepath.Join("testdata", "*.test")) + if err != nil { + t.Fatal(err) + } + if len(paths) == 0 { + t.Fatal("no corpus files; run go run ./cmd/regenerate-parse") + } + return paths +} diff --git a/parser/fuzz_test.go b/parser/fuzz_test.go index 42fff2a..75176c4 100644 --- a/parser/fuzz_test.go +++ b/parser/fuzz_test.go @@ -2,12 +2,11 @@ package parser_test import ( "errors" - "path/filepath" "strings" "testing" - "github.com/sqlc-dev/meyer/ast" "github.com/sqlc-dev/meyer/internal/dump" + "github.com/sqlc-dev/meyer/internal/roundtrip" "github.com/sqlc-dev/meyer/internal/testfile" "github.com/sqlc-dev/meyer/parser" ) @@ -86,15 +85,9 @@ func FuzzParse(f *testing.F) { } return } - rendered := ast.Statements(stmts) - again, err := parser.ParseString(rendered) - if err != nil { - t.Fatalf("rendered SQL does not parse: %v\n input: %q\n rendered: %q", - err, src, rendered) - } - if want, got := dump.Stmts(stmts, dump.Structure), dump.Stmts(again, dump.Structure); want != got { - t.Fatalf("round trip changed the tree\n input: %q\n rendered: %q\n%s", - src, rendered, firstDiff(want, got)) + if r := roundtrip.Check(stmts); !r.Ok { + t.Fatalf("%s\n input: %q\n rendered: %q\n%s", + r.Reason, src, r.Rendered, dump.FirstDiff(r.Want, r.Got)) } }) } @@ -104,12 +97,8 @@ func FuzzParse(f *testing.F) { // on each -short invocation, so this takes a deterministic slice. func corpusSeeds(f *testing.F) []string { f.Helper() - paths, err := filepath.Glob(filepath.Join("testdata", "*.test")) - if err != nil { - f.Fatal(err) - } var out []string - for _, path := range paths { + for _, path := range corpusFiles(f) { cases, err := testfile.Read(path) if err != nil { f.Fatal(err) diff --git a/parser/parser_test.go b/parser/parser_test.go index b4dd63e..5aa967a 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -8,26 +8,31 @@ import ( "path/filepath" "strings" "testing" - "time" "github.com/sqlc-dev/meyer/internal/testfile" "github.com/sqlc-dev/meyer/parser" ) +// TestParseReader covers the io.Reader entry point once, so that the corpus +// harness can call ParseString directly: routing 21,000 cases through a +// reader and a per-case context costs a quarter of the run for no coverage. +func TestParseReader(t *testing.T) { + stmts, err := parser.Parse(context.Background(), strings.NewReader("SELECT 1; SELECT 2")) + if err != nil || len(stmts) != 2 { + t.Fatalf("Parse = %d statements, %v; want 2, nil", len(stmts), err) + } + if _, err := parser.Parse(context.Background(), strings.NewReader("SELECT")); err == nil { + t.Fatal("Parse accepted an incomplete statement") + } +} + // -check-parse re-runs todo cases; those that now pass are removed from the // metadata sidecar (logged as "PARSE PASSES NOW") so progress is committed // alongside the code that produced it. See CLAUDE.md. var checkParse = flag.Bool("check-parse", false, "re-run todo cases and update metadata for those that pass") func TestParse(t *testing.T) { - paths, err := filepath.Glob(filepath.Join("testdata", "*.test")) - if err != nil { - t.Fatal(err) - } - if len(paths) == 0 { - t.Fatal("no corpus files; run go run ./cmd/regenerate-parse") - } - for _, path := range paths { + for _, path := range corpusFiles(t) { t.Run(strings.TrimSuffix(filepath.Base(path), ".test"), func(t *testing.T) { t.Parallel() runFile(t, path) @@ -79,9 +84,7 @@ func runFile(t *testing.T, path string) { // the identical message and byte offset on rejection. SQLite reports -1 from // sqlite3_error_offset for errors it cannot place, and those are not checked. func runCase(c testfile.Case) error { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - _, err := parser.Parse(ctx, strings.NewReader(c.SQL)) + _, err := parser.ParseString(c.SQL) exp := c.Expected() if exp.OK { if err != nil { diff --git a/parser/roundtrip_test.go b/parser/roundtrip_test.go index c035195..1a45963 100644 --- a/parser/roundtrip_test.go +++ b/parser/roundtrip_test.go @@ -1,14 +1,12 @@ package parser_test import ( - "path/filepath" - "strconv" "strings" "sync/atomic" "testing" - "github.com/sqlc-dev/meyer/ast" "github.com/sqlc-dev/meyer/internal/dump" + "github.com/sqlc-dev/meyer/internal/roundtrip" "github.com/sqlc-dev/meyer/internal/testfile" "github.com/sqlc-dev/meyer/parser" ) @@ -16,89 +14,23 @@ import ( // TestRoundTrip is the property PLAN.md uses in place of upstream parse-tree // goldens: rendering a tree back to SQL and re-parsing it must produce the // same tree. Accept/reject conformance cannot see a dropped clause or a -// mis-associated operator; this can. -// -// Equality is structural. Byte spans and the Raw fields differ by -// construction after a round trip, and the renderer explicitly promises -// nothing about them, so dump.Structure leaves both out. +// mis-associated operator; this can. The property itself lives in +// internal/roundtrip, which the fuzz target and cmd/difftest share. func TestRoundTrip(t *testing.T) { - paths, err := filepath.Glob(filepath.Join("testdata", "*.test")) - if err != nil { - t.Fatal(err) - } - if len(paths) == 0 { - t.Fatal("no corpus files; run go run ./cmd/regenerate-parse") - } + var checked atomic.Int64 // The count is logged so that a corpus change that silently stops // exercising the property is visible in a -v run. - t.Cleanup(func() { t.Logf("round-tripped %d cases", roundTripped.Load()) }) - for _, path := range paths { - t.Run(strings.TrimSuffix(filepath.Base(path), ".test"), func(t *testing.T) { - t.Parallel() - cases, err := testfile.Read(path) - if err != nil { - t.Fatal(err) - } - meta, err := testfile.ReadMetadata(testfile.MetadataPath(path)) - if err != nil { - t.Fatal(err) - } - for _, c := range cases { - if meta.Todo[c.Name] { - continue - } - checkRoundTrip(t, c) - } - }) - } -} - -var roundTripped atomic.Int64 - -func checkRoundTrip(t *testing.T, c testfile.Case) { - t.Helper() - first, err := parser.ParseString(c.SQL) - if err != nil { - return // a must-reject case, or text SQLite never verified - } - roundTripped.Add(1) - rendered := ast.Statements(first) - second, err := parser.ParseString(rendered) - if err != nil { - t.Errorf("%s: rendered SQL does not parse: %v\n rendered: %s", c.Name, err, rendered) - return - } - want := dump.Stmts(first, dump.Structure) - got := dump.Stmts(second, dump.Structure) - if got != want { - t.Errorf("%s: round trip changed the tree\n source: %s\n rendered: %s\n%s", - c.Name, strings.TrimSpace(c.SQL), rendered, firstDiff(want, got)) - return - } - // Rendering is idempotent, which catches a renderer that loses - // information the dump happens not to show. - if again := ast.Statements(second); again != rendered { - t.Errorf("%s: rendering is not idempotent\n once: %s\n twice: %s", - c.Name, rendered, again) - } -} - -// firstDiff reports the first differing line of two dumps, with a little -// context, so a failure names the field that changed. -func firstDiff(want, got string) string { - wl, gl := strings.Split(want, "\n"), strings.Split(got, "\n") - for i := 0; i < len(wl) || i < len(gl); i++ { - var a, b string - if i < len(wl) { - a = wl[i] - } - if i < len(gl) { - b = gl[i] + t.Cleanup(func() { t.Logf("round-tripped %d cases", checked.Load()) }) + forEachCorpusCase(t, func(t *testing.T, c testfile.Case) { + stmts, err := parser.ParseString(c.SQL) + if err != nil { + return // a must-reject case, or text SQLite never verified } - if a != b { - return " first difference at dump line " + strconv.Itoa(i+1) + - "\n want: " + a + "\n got: " + b + checked.Add(1) + if r := roundtrip.Check(stmts); !r.Ok { + t.Errorf("%s: %s\n source: %s\n rendered: %s\n%s", + c.Name, r.Reason, strings.TrimSpace(c.SQL), r.Rendered, + dump.FirstDiff(r.Want, r.Got)) } - } - return "" + }) } diff --git a/parser/snapshot_test.go b/parser/snapshot_test.go index fb32a20..4f1e9b0 100644 --- a/parser/snapshot_test.go +++ b/parser/snapshot_test.go @@ -54,7 +54,7 @@ func TestASTSnapshots(t *testing.T) { } if got != string(want) { t.Errorf("%s: snapshot mismatch (run: go test ./parser -update)\n%s", - golden, firstDiff(string(want), got)) + golden, dump.FirstDiff(string(want), got)) } }) } diff --git a/parser/span_test.go b/parser/span_test.go index 38441a6..7d105d1 100644 --- a/parser/span_test.go +++ b/parser/span_test.go @@ -1,8 +1,6 @@ package parser_test import ( - "path/filepath" - "strings" "sync/atomic" "testing" @@ -23,32 +21,16 @@ import ( // - statements are disjoint and in source order, so the text between two // of them (where the "-- name:" comments live) is unambiguous. func TestSpans(t *testing.T) { - paths, err := filepath.Glob(filepath.Join("testdata", "*.test")) - if err != nil { - t.Fatal(err) - } - if len(paths) == 0 { - t.Fatal("no corpus files; run go run ./cmd/regenerate-parse") - } var checked atomic.Int64 t.Cleanup(func() { t.Logf("checked spans of %d cases", checked.Load()) }) - for _, path := range paths { - t.Run(strings.TrimSuffix(filepath.Base(path), ".test"), func(t *testing.T) { - t.Parallel() - cases, err := testfile.Read(path) - if err != nil { - t.Fatal(err) - } - for _, c := range cases { - stmts, err := parser.ParseString(c.SQL) - if err != nil { - continue - } - checked.Add(1) - checkStmtSpans(t, c, stmts) - } - }) - } + forEachCorpusCase(t, func(t *testing.T, c testfile.Case) { + stmts, err := parser.ParseString(c.SQL) + if err != nil { + return + } + checked.Add(1) + checkStmtSpans(t, c, stmts) + }) } func checkStmtSpans(t *testing.T, c testfile.Case, stmts []ast.Stmt) { From b2ff0134f7d65e05c05ef55b3b14ff0ea3765b2d Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 21:07:01 +0000 Subject: [PATCH 17/23] Apply the rest of the review: fewer allocations, less repetition Efficiency, measured with alloc profiles over the corpus tests: - internal/dump dominated the harness, not the parser. It rebuilt each node type's field layout per instance and formatted every scalar through fmt. The layout is cached per type and the leaves go straight to the builder; TestRoundTrip drops from 1.5s to 0.55s. - regenerate-parse started and tore down a pool of oracle processes per script, forking a few thousand times over a run. One pool for the whole run takes regeneration from 19s to 2.5s, corpus byte-identical. - parseTypeToken built a slice and joined it for every column type, when a type is almost always one word. - The %fallback set and the infix operator table are Kind-indexed arrays rather than maps; both are consulted per token. - Children() allocates only when a node has children, and the parser's named-parameter map only when there is a named parameter. Repetition: - parseOperators stated the precedence guard seventeen times, once per case, with half the operators tabled and half inline. One table, one guard; the operators with syntax of their own keep their cases. - The trigger body re-implemented UPDATE, INSERT and DELETE. It shares their cores now, so the three real differences -- no WITH, where_opt instead of where_opt_ret, no DEFAULT VALUES -- are visible lines rather than absences. - CreateTableStmt held Options and WithoutOpt as index-parallel slices, an invariant only the parser knew and only the renderer could break. - 27 Children() methods spelled out the same append loop; writeOnConflict and writeOrConflict differed only in a keyword. And the shift-then-decide rule that five comments were each re-arguing is now stated once in the package doc. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- ast/ddl.go | 63 ++++++--------- ast/dml.go | 40 +++------- ast/expr.go | 36 +++++---- ast/render.go | 62 ++++++++------- ast/select.go | 48 +++--------- cmd/difftest/main.go | 17 +--- cmd/regenerate-parse/main.go | 64 ++++++++++----- internal/dump/dump.go | 99 +++++++++++++---------- internal/tclextract/tclextract.go | 13 ++-- parser/parse_ddl.go | 8 +- parser/parse_dml.go | 65 ++++++++++------ parser/parse_expr.go | 125 +++++++++++++----------------- parser/parse_trigger.go | 40 +++------- parser/parser.go | 12 ++- parser/testdata/ast/ddl.tree | 25 +++--- token/keywords.go | 12 ++- token/token.go | 4 + 17 files changed, 363 insertions(+), 370 deletions(-) diff --git a/ast/ddl.go b/ast/ddl.go index eca59ad..b6eaee3 100644 --- a/ast/ddl.go +++ b/ast/ddl.go @@ -14,23 +14,28 @@ type CreateTableStmt struct { Name *QualifiedName `json:"name"` Columns []*ColumnDef `json:"columns,omitempty"` Constraints []*TableConstraint `json:"constraints,omitempty"` - Options []*Ident `json:"options,omitempty"` // WITHOUT ROWID, STRICT - WithoutOpt []bool `json:"withoutOpt,omitempty"` + Options []*TableOption `json:"options,omitempty"` // WITHOUT ROWID, STRICT Select *SelectStmt `json:"select,omitempty"` } +// TableOption is one entry of a table_option_set. SQLite rejects an unknown +// one from a grammar action rather than the grammar, so any name parses. +// +// table_option ::= WITHOUT nm. / table_option ::= nm. +type TableOption struct { + Span + Without bool `json:"without,omitempty"` + Name *Ident `json:"name"` +} + +func (n *TableOption) Children() []Node { return nodes(n.Name) } + func (*CreateTableStmt) stmtNode() {} func (n *CreateTableStmt) Children() []Node { out := nodes(n.Name) - for _, c := range n.Columns { - out = append(out, c) - } - for _, c := range n.Constraints { - out = append(out, c) - } - for _, o := range n.Options { - out = append(out, o) - } + out = appendNodes(out, n.Columns) + out = appendNodes(out, n.Constraints) + out = appendNodes(out, n.Options) return append(out, nodes(n.Select)...) } @@ -46,9 +51,7 @@ type ColumnDef struct { func (n *ColumnDef) Children() []Node { out := nodes(n.Name, n.Type) - for _, c := range n.Constraints { - out = append(out, c) - } + out = appendNodes(out, n.Constraints) return out } @@ -132,13 +135,9 @@ type TableConstraint struct { func (n *TableConstraint) Children() []Node { out := nodes(n.Name) - for _, c := range n.Columns { - out = append(out, c) - } + out = appendNodes(out, n.Columns) out = append(out, nodes(n.Expr)...) - for _, c := range n.FKColumns { - out = append(out, c) - } + out = appendNodes(out, n.FKColumns) return append(out, nodes(n.References, n.Deferrable)...) } @@ -179,12 +178,8 @@ type ForeignKeyClause struct { func (n *ForeignKeyClause) Children() []Node { out := nodes(n.Table) - for _, c := range n.Columns { - out = append(out, c) - } - for _, a := range n.Args { - out = append(out, a) - } + out = appendNodes(out, n.Columns) + out = appendNodes(out, n.Args) return out } @@ -228,9 +223,7 @@ type CreateIndexStmt struct { func (*CreateIndexStmt) stmtNode() {} func (n *CreateIndexStmt) Children() []Node { out := nodes(n.Name, n.Table) - for _, c := range n.Columns { - out = append(out, c) - } + out = appendNodes(out, n.Columns) return append(out, nodes(n.Where)...) } @@ -249,9 +242,7 @@ type CreateViewStmt struct { func (*CreateViewStmt) stmtNode() {} func (n *CreateViewStmt) Children() []Node { out := nodes(n.Name) - for _, c := range n.Columns { - out = append(out, c) - } + out = appendNodes(out, n.Columns) return append(out, nodes(n.Select)...) } @@ -287,13 +278,9 @@ type CreateTriggerStmt struct { func (*CreateTriggerStmt) stmtNode() {} func (n *CreateTriggerStmt) Children() []Node { out := nodes(n.Name) - for _, u := range n.UpdateOf { - out = append(out, u) - } + out = appendNodes(out, n.UpdateOf) out = append(out, nodes(n.Table, n.When)...) - for _, s := range n.Body { - out = append(out, s) - } + out = appendNodes(out, n.Body) return out } diff --git a/ast/dml.go b/ast/dml.go index 9a481ad..a87b67b 100644 --- a/ast/dml.go +++ b/ast/dml.go @@ -41,16 +41,10 @@ type InsertStmt struct { func (*InsertStmt) stmtNode() {} func (n *InsertStmt) Children() []Node { out := nodes(n.With, n.Table, n.Alias) - for _, c := range n.Columns { - out = append(out, c) - } + out = appendNodes(out, n.Columns) out = append(out, nodes(n.Select)...) - for _, u := range n.Upserts { - out = append(out, u) - } - for _, r := range n.Returning { - out = append(out, r) - } + out = appendNodes(out, n.Upserts) + out = appendNodes(out, n.Returning) return out } @@ -69,13 +63,9 @@ type Upsert struct { func (n *Upsert) Children() []Node { var out []Node - for _, t := range n.Target { - out = append(out, t) - } + out = appendNodes(out, n.Target) out = append(out, nodes(n.TargetWhere)...) - for _, s := range n.Set { - out = append(out, s) - } + out = appendNodes(out, n.Set) return append(out, nodes(n.Where)...) } @@ -92,9 +82,7 @@ type SetPair struct { func (n *SetPair) Children() []Node { out := make([]Node, 0, len(n.Columns)+1) - for _, c := range n.Columns { - out = append(out, c) - } + out = appendNodes(out, n.Columns) return append(out, nodes(n.Value)...) } @@ -123,16 +111,10 @@ type UpdateStmt struct { func (*UpdateStmt) stmtNode() {} func (n *UpdateStmt) Children() []Node { out := nodes(n.With, n.Table, n.Alias, n.IndexedBy) - for _, s := range n.Set { - out = append(out, s) - } - for _, f := range n.From { - out = append(out, f) - } + out = appendNodes(out, n.Set) + out = appendNodes(out, n.From) out = append(out, nodes(n.Where)...) - for _, r := range n.Returning { - out = append(out, r) - } + out = appendNodes(out, n.Returning) return out } @@ -155,8 +137,6 @@ type DeleteStmt struct { func (*DeleteStmt) stmtNode() {} func (n *DeleteStmt) Children() []Node { out := nodes(n.With, n.Table, n.Alias, n.IndexedBy, n.Where) - for _, r := range n.Returning { - out = append(out, r) - } + out = appendNodes(out, n.Returning) return out } diff --git a/ast/expr.go b/ast/expr.go index 0657569..d70cf1d 100644 --- a/ast/expr.go +++ b/ast/expr.go @@ -292,12 +292,8 @@ type InExpr struct { func (*InExpr) exprNode() {} func (n *InExpr) Children() []Node { out := nodes(n.X, n.Select, n.Table) - for _, e := range n.List { - out = append(out, e) - } - for _, e := range n.Args { - out = append(out, e) - } + out = appendNodes(out, n.List) + out = appendNodes(out, n.Args) return out } @@ -314,9 +310,7 @@ type CaseExpr struct { func (*CaseExpr) exprNode() {} func (n *CaseExpr) Children() []Node { out := nodes(n.Operand) - for _, w := range n.Whens { - out = append(out, w) - } + out = appendNodes(out, n.Whens) return append(out, nodes(n.Else)...) } @@ -375,12 +369,8 @@ type FuncCall struct { func (*FuncCall) exprNode() {} func (n *FuncCall) Children() []Node { out := nodes(n.Name) - for _, a := range n.Args { - out = append(out, a) - } - for _, o := range n.OrderBy { - out = append(out, o) - } + out = appendNodes(out, n.Args) + out = appendNodes(out, n.OrderBy) return append(out, nodes(n.Filter, n.Over)...) } @@ -448,9 +438,11 @@ type TypeName struct { func (n *TypeName) Children() []Node { return nil } -// nodes builds a Children() slice, dropping nil interfaces and nil pointers. +// nodes builds a Children() slice, dropping nil interfaces and nil +// pointers. Optional fields are common, so a node whose children are all +// absent allocates nothing. func nodes(list ...Node) []Node { - out := make([]Node, 0, len(list)) + var out []Node for _, n := range list { if !isNil(n) { out = append(out, n) @@ -458,3 +450,13 @@ func nodes(list ...Node) []Node { } return out } + +// appendNodes appends a slice of concrete node pointers to a Children() +// result. It exists because every node with a repeated field would +// otherwise spell the same three-line loop out again. +func appendNodes[T Node](out []Node, list []T) []Node { + for _, n := range list { + out = append(out, n) + } + return out +} diff --git a/ast/render.go b/ast/render.go index 4cf5cdd..e53ef96 100644 --- a/ast/render.go +++ b/ast/render.go @@ -80,7 +80,8 @@ func write(b *strings.Builder, n Node) { if i == 0 { x.kw(p.Raw) } else { - x.raw("." + p.Raw) + x.raw(".") + x.raw(p.Raw) } } case *Star: @@ -195,7 +196,9 @@ func write(b *strings.Builder, n Node) { case *TypeName: x.kw(t.Name) if len(t.Args) > 0 { - x.raw("(" + strings.Join(t.Args, ",") + ")") + x.raw("(") + x.raw(strings.Join(t.Args, ",")) + x.raw(")") } case *FuncCall: x.kw(t.Name.Raw) @@ -473,6 +476,11 @@ func write(b *strings.Builder, n Node) { writeColumnConstraint(b, t) case *TableConstraint: writeTableConstraint(b, t) + case *TableOption: + if t.Without { + x.kw("WITHOUT") + } + x.kw(t.Name.Raw) case *IndexedColumn: x.kw(t.Name.Raw) if t.Collation != nil { @@ -586,7 +594,9 @@ func write(b *strings.Builder, n Node) { x.kw("USING") x.kw(t.Module.Raw) if t.HasArgs { - x.raw("(" + strings.Join(t.Args, ",") + ")") + x.raw("(") + x.raw(strings.Join(t.Args, ",")) + x.raw(")") } case *AlterTableStmt: writeAlterTable(b, t) @@ -659,7 +669,9 @@ func write(b *strings.Builder, n Node) { write(b, t.Name) if t.HasValue { if t.Paren { - x.raw("(" + t.Value + ")") + x.raw("(") + x.raw(t.Value) + x.raw(")") } else { x.kw("=") x.kw(t.Value) @@ -862,7 +874,7 @@ func writeInsert(b *strings.Builder, t *InsertStmt) { x.kw("REPLACE") } else { x.kw("INSERT") - writeOrConflict(b, t.OrConflict) + writeConflict(b, "OR", t.OrConflict) } x.kw("INTO") write(b, t.Table) @@ -892,7 +904,7 @@ func writeUpdate(b *strings.Builder, t *UpdateStmt) { write(b, t.With) } x.kw("UPDATE") - writeOrConflict(b, t.OrConflict) + writeConflict(b, "OR", t.OrConflict) write(b, t.Table) if t.Alias != nil { x.kw("AS") @@ -961,21 +973,14 @@ func writeReturning(b *strings.Builder, cols []*ResultColumn) { } } -func writeOrConflict(b *strings.Builder, a ConflictAction) { +// writeConflict renders "orconf" (keyword "OR") or "onconf" (keyword +// "ON CONFLICT"); the two differ only in that keyword. +func writeConflict(b *strings.Builder, keyword string, a ConflictAction) { if a == ConflictDefault { return } x := w{b} - x.kw("OR") - x.kw(a.String()) -} - -func writeOnConflict(b *strings.Builder, a ConflictAction) { - if a == ConflictDefault { - return - } - x := w{b} - x.kw("ON CONFLICT") + x.kw(keyword) x.kw(a.String()) } @@ -1011,10 +1016,7 @@ func writeCreateTable(b *strings.Builder, t *CreateTableStmt) { if i > 0 { x.raw(",") } - if t.WithoutOpt[i] { - x.kw("WITHOUT") - } - x.kw(opt.Raw) + write(b, opt) } } @@ -1027,10 +1029,10 @@ func writeColumnConstraint(b *strings.Builder, t *ColumnConstraint) { switch t.Kind { case ColumnNull: x.kw("NULL") - writeOnConflict(b, t.OnConflict) + writeConflict(b, "ON CONFLICT", t.OnConflict) case ColumnNotNull: x.kw("NOT NULL") - writeOnConflict(b, t.OnConflict) + writeConflict(b, "ON CONFLICT", t.OnConflict) case ColumnPrimaryKey: x.kw("PRIMARY KEY") switch t.Order { @@ -1039,13 +1041,13 @@ func writeColumnConstraint(b *strings.Builder, t *ColumnConstraint) { case SortDesc: x.kw("DESC") } - writeOnConflict(b, t.OnConflict) + writeConflict(b, "ON CONFLICT", t.OnConflict) if t.AutoIncrement { x.kw("AUTOINCREMENT") } case ColumnUnique: x.kw("UNIQUE") - writeOnConflict(b, t.OnConflict) + writeConflict(b, "ON CONFLICT", t.OnConflict) case ColumnCheck: x.kw("CHECK (") write(b, t.Expr) @@ -1087,17 +1089,17 @@ func writeTableConstraint(b *strings.Builder, t *TableConstraint) { x.kw("AUTOINCREMENT") } x.raw(")") - writeOnConflict(b, t.OnConflict) + writeConflict(b, "ON CONFLICT", t.OnConflict) case TableUnique: x.kw("UNIQUE (") writeOrdering(b, t.Columns) x.raw(")") - writeOnConflict(b, t.OnConflict) + writeConflict(b, "ON CONFLICT", t.OnConflict) case TableCheck: x.kw("CHECK (") write(b, t.Expr) x.raw(")") - writeOnConflict(b, t.OnConflict) + writeConflict(b, "ON CONFLICT", t.OnConflict) case TableForeignKey: x.kw("FOREIGN KEY (") for i, c := range t.FKColumns { @@ -1197,7 +1199,7 @@ func writeAlterTable(b *strings.Builder, t *AlterTableStmt) { column() x.kw(t.Column.Raw) x.kw("SET NOT NULL") - writeOnConflict(b, t.OnConflict) + writeConflict(b, "ON CONFLICT", t.OnConflict) case AlterAddConstraintCheck: x.kw("ADD") if t.ConstraintName != nil { @@ -1207,7 +1209,7 @@ func writeAlterTable(b *strings.Builder, t *AlterTableStmt) { x.kw("CHECK (") write(b, t.Expr) x.raw(")") - writeOnConflict(b, t.OnConflict) + writeConflict(b, "ON CONFLICT", t.OnConflict) } } diff --git a/ast/select.go b/ast/select.go index 85dc1cd..1e3242a 100644 --- a/ast/select.go +++ b/ast/select.go @@ -21,9 +21,7 @@ type SelectStmt struct { func (*SelectStmt) stmtNode() {} func (n *SelectStmt) Children() []Node { out := nodes(n.With) - for _, c := range n.Cores { - out = append(out, c) - } + out = appendNodes(out, n.Cores) return out } @@ -73,23 +71,13 @@ type SelectQuery struct { func (*SelectQuery) selectCoreNode() {} func (n *SelectQuery) Children() []Node { var out []Node - for _, c := range n.Columns { - out = append(out, c) - } - for _, t := range n.From { - out = append(out, t) - } + out = appendNodes(out, n.Columns) + out = appendNodes(out, n.From) out = append(out, nodes(n.Where)...) - for _, g := range n.GroupBy { - out = append(out, g) - } + out = appendNodes(out, n.GroupBy) out = append(out, nodes(n.Having)...) - for _, w := range n.Windows { - out = append(out, w) - } - for _, o := range n.OrderBy { - out = append(out, o) - } + out = appendNodes(out, n.Windows) + out = appendNodes(out, n.OrderBy) return append(out, nodes(n.Limit)...) } @@ -177,17 +165,11 @@ type TableRef struct { func (n *TableRef) Children() []Node { out := nodes(n.Join, n.Name) - for _, a := range n.Args { - out = append(out, a) - } + out = appendNodes(out, n.Args) out = append(out, nodes(n.Select)...) - for _, t := range n.List { - out = append(out, t) - } + out = appendNodes(out, n.List) out = append(out, nodes(n.Alias, n.IndexedBy, n.On)...) - for _, u := range n.Using { - out = append(out, u) - } + out = appendNodes(out, n.Using) return out } @@ -273,9 +255,7 @@ type CTE struct { func (n *CTE) Children() []Node { out := nodes(n.Name) - for _, c := range n.Columns { - out = append(out, c) - } + out = appendNodes(out, n.Columns) return append(out, nodes(n.Select)...) } @@ -343,11 +323,7 @@ type WindowDef struct { func (n *WindowDef) Children() []Node { out := nodes(n.Name, n.Base) - for _, p := range n.Partition { - out = append(out, p) - } - for _, o := range n.OrderBy { - out = append(out, o) - } + out = appendNodes(out, n.Partition) + out = appendNodes(out, n.OrderBy) return append(out, nodes(n.StartBound, n.EndBound)...) } diff --git a/cmd/difftest/main.go b/cmd/difftest/main.go index 36f03b5..024ad6d 100644 --- a/cmd/difftest/main.go +++ b/cmd/difftest/main.go @@ -95,7 +95,7 @@ func main() { fatal(err) } - rep := &report{examples: *examples} + rep := &report{examples: *examples, buckets: map[string]*bucket{}} work := make(chan string) var wg sync.WaitGroup for w := 0; w < *jobs; w++ { @@ -217,8 +217,9 @@ func mutations(src string, n int, rng *rand.Rand) []string { out = append(out, s) } } - for len(out) < n { - before := len(out) + // Bounded by attempts as well as results: with few tokens the edit + // space is small and most draws repeat one already made. + for attempts := 0; attempts < 8*n && len(out) < n; attempts++ { i := rng.Intn(len(toks)) t := toks[i] switch rng.Intn(5) { @@ -233,13 +234,6 @@ func mutations(src string, n int, rng *rand.Rand) []string { case 4: // insert a token add(src[:t.Pos] + injections[rng.Intn(len(injections))] + " " + src[t.Pos:]) } - if len(out) == before { - // Every edit at this position was a duplicate; with few tokens - // the space is small, so stop rather than spin. - if len(seen) > 4*len(toks) { - break - } - } } return out } @@ -318,9 +312,6 @@ func (r *report) add(kind, sql, got, want string) { r.disagreements.Add(1) r.mu.Lock() defer r.mu.Unlock() - if r.buckets == nil { - r.buckets = map[string]*bucket{} - } b := r.buckets[kind] if b == nil { b = &bucket{} diff --git a/cmd/regenerate-parse/main.go b/cmd/regenerate-parse/main.go index daf909d..d2cac6b 100644 --- a/cmd/regenerate-parse/main.go +++ b/cmd/regenerate-parse/main.go @@ -89,6 +89,14 @@ func main() { fatal(err) } + // One pool of oracle processes for the whole run: a Runner is reusable, + // and starting one per script would fork a few thousand times. + pool, err := newPool(*cacheDir, *jobs) + if err != nil { + fatal(err) + } + defer pool.close() + var totalCases, totalTodo, usedScripts, emptyScripts int var totals tclextract.Stats for _, name := range names { @@ -106,7 +114,7 @@ func main() { fatal(fmt.Errorf("%s: %w", name, err)) } - cases, stats, err := regenerateFile(*cacheDir, testDir, *testdata, name, *jobs) + cases, stats, err := regenerateFile(pool, testDir, *testdata, name) if err != nil { fatal(fmt.Errorf("%s: %w", name, err)) } @@ -143,7 +151,34 @@ func fatal(err error) { os.Exit(1) } -func regenerateFile(cacheDir, testDir, outDir, name string, jobs int) ([]testfile.Case, tclextract.Stats, error) { +// pool hands out oracle processes. Runners are not safe for concurrent use, +// so a worker takes one for the duration of a batch and puts it back. +type pool struct { + runners chan *sqlitesrc.Runner + all []*sqlitesrc.Runner +} + +func newPool(cacheDir string, n int) (*pool, error) { + p := &pool{runners: make(chan *sqlitesrc.Runner, n)} + for i := 0; i < n; i++ { + r, err := sqlitesrc.NewRunner(cacheDir) + if err != nil { + p.close() + return nil, err + } + p.all = append(p.all, r) + p.runners <- r + } + return p, nil +} + +func (p *pool) close() { + for _, r := range p.all { + r.Close() + } +} + +func regenerateFile(pool *pool, testDir, outDir, name string) ([]testfile.Case, tclextract.Stats, error) { src, err := os.ReadFile(filepath.Join(testDir, name+".test")) if err != nil { return nil, tclextract.Stats{}, err @@ -155,29 +190,20 @@ func regenerateFile(cacheDir, testDir, outDir, name string, jobs int) ([]testfil var wg sync.WaitGroup var mu sync.Mutex var firstErr error - fail := func(err error) { - mu.Lock() - if firstErr == nil { - firstErr = err - } - mu.Unlock() - } - for w := 0; w < jobs; w++ { + for w := 0; w < cap(pool.runners); w++ { wg.Add(1) go func() { defer wg.Done() - r, err := sqlitesrc.NewRunner(cacheDir) - if err != nil { - fail(err) - for range work { // drain so producers are not blocked - } - return - } - defer r.Close() + r := <-pool.runners + defer func() { pool.runners <- r }() for i := range work { results, err := r.Run(extracted[i].SQL) if err != nil { - fail(fmt.Errorf("case %s: %w", extracted[i].Name, err)) + mu.Lock() + if firstErr == nil { + firstErr = fmt.Errorf("case %s: %w", extracted[i].Name, err) + } + mu.Unlock() continue } cases[i] = testfile.Case{ diff --git a/internal/dump/dump.go b/internal/dump/dump.go index e4a7512..952205a 100644 --- a/internal/dump/dump.go +++ b/internal/dump/dump.go @@ -18,6 +18,7 @@ import ( "reflect" "strconv" "strings" + "sync" "github.com/sqlc-dev/meyer/ast" ) @@ -117,15 +118,22 @@ func (d *dumper) value(v reflect.Value, depth int) { d.indent(depth) d.b.WriteString("]") case reflect.String: - fmt.Fprintf(d.b, "%q", v.String()) + d.b.WriteString(strconv.Quote(v.String())) case reflect.Bool: - fmt.Fprintf(d.b, "%v", v.Bool()) + if v.Bool() { + d.b.WriteString("true") + } else { + d.b.WriteString("false") + } default: // Enum-typed fields (SortOrder, ConflictAction, ...) all implement // Stringer, so a snapshot diff names what changed rather than // showing a number that has to be looked up. if s, ok := v.Interface().(fmt.Stringer); ok { - fmt.Fprintf(d.b, "%s(%s)", v.Type().Name(), s) + d.b.WriteString(v.Type().Name()) + d.b.WriteByte('(') + d.b.WriteString(s.String()) + d.b.WriteByte(')') return } fmt.Fprintf(d.b, "%v", v.Interface()) @@ -135,28 +143,37 @@ func (d *dumper) value(v reflect.Value, depth int) { func (d *dumper) strct(v reflect.Value, name string, depth int) { if v.Type() == spanType { s := v.Interface().(ast.Span) - fmt.Fprintf(d.b, "%d:%d", s.Start, s.Stop) - return - } - fields := d.fields(v) - if len(fields) == 0 { - d.b.WriteString(name + "{}") + d.b.WriteString(strconv.Itoa(s.Start)) + d.b.WriteByte(':') + d.b.WriteString(strconv.Itoa(s.Stop)) return } - d.b.WriteString(name + "{\n") - for _, f := range fields { + d.b.WriteString(name) + d.b.WriteByte('{') + written := false + for _, f := range layoutOf(v.Type()) { + fv := v.Field(f.index) + if f.span { + if !d.opts.Positions { + continue + } + } else if f.raw && !d.opts.Raw { + continue + } else if fv.IsZero() && !meaningfulZero(fv) { + continue + } + written = true + d.b.WriteByte('\n') d.indent(depth + 1) - d.b.WriteString(f.name + ": ") - d.value(f.value, depth+1) - d.b.WriteString("\n") + d.b.WriteString(f.name) + d.b.WriteString(": ") + d.value(fv, depth+1) } - d.indent(depth) - d.b.WriteString("}") -} - -type field struct { - name string - value reflect.Value + if written { + d.b.WriteByte('\n') + d.indent(depth) + } + d.b.WriteByte('}') } // meaningfulZero reports whether a zero value still says something. Several @@ -184,32 +201,34 @@ func meaningfulZero(v reflect.Value) bool { return true } -// fields selects the fields worth printing: zero values are omitted so that -// a dump shows what a statement said rather than what it did not, except -// where the zero value is itself the statement (see meaningfulZero). -func (d *dumper) fields(v reflect.Value) []field { - t := v.Type() - var out []field +// fieldInfo is one printable field of a node type. The layout depends only +// on the type, so it is computed once rather than per node visited -- the +// corpus tests dump tens of thousands of trees. +type fieldInfo struct { + index int + name string + span bool + raw bool +} + +var layouts sync.Map // reflect.Type -> []fieldInfo + +func layoutOf(t reflect.Type) []fieldInfo { + if v, ok := layouts.Load(t); ok { + return v.([]fieldInfo) + } + out := make([]fieldInfo, 0, t.NumField()) for i := 0; i < t.NumField(); i++ { sf := t.Field(i) if !sf.IsExported() { continue } - fv := v.Field(i) + f := fieldInfo{index: i, name: sf.Name, raw: sf.Name == "Raw"} if sf.Type == spanType { - if !d.opts.Positions { - continue - } - out = append(out, field{"Span", fv}) - continue - } - if sf.Name == "Raw" && !d.opts.Raw { - continue - } - if fv.IsZero() && !meaningfulZero(fv) { - continue + f.span, f.name = true, "Span" } - out = append(out, field{sf.Name, fv}) + out = append(out, f) } + layouts.Store(t, out) return out } diff --git a/internal/tclextract/tclextract.go b/internal/tclextract/tclextract.go index 8e384ec..3e180a4 100644 --- a/internal/tclextract/tclextract.go +++ b/internal/tclextract/tclextract.go @@ -63,17 +63,14 @@ func File(base string, src []byte) ([]Case, Stats) { if strings.HasPrefix(trimmed, "#") { continue } + // The command must begin the (possibly indented) line, so that + // occurrences inside strings or inside longer words are skipped. + col := len(line) - len(trimmed) for _, cmd := range commands { - col := strings.Index(line, cmd) - if col < 0 { + if !strings.HasPrefix(trimmed, cmd) { continue } - // Require the command at the start of the (possibly indented) - // line so occurrences inside strings or longer words are skipped. - if strings.TrimLeft(line[:col], " \t") != "" { - continue - } - if rest := line[col+len(cmd):]; rest != "" && rest[0] != ' ' && rest[0] != '\t' { + if rest := trimmed[len(cmd):]; rest != "" && rest[0] != ' ' && rest[0] != '\t' { continue // longer word, e.g. do_execsql_test_if_vdbe } stats.Found++ diff --git a/parser/parse_ddl.go b/parser/parse_ddl.go index 05a5c3a..389a6b4 100644 --- a/parser/parse_ddl.go +++ b/parser/parse_ddl.go @@ -489,9 +489,11 @@ func (p *parser) parseTableConstraint(start int) *ast.TableConstraint { // table_option ::= WITHOUT nm. / table_option ::= nm. func (p *parser) parseTableOptions(n *ast.CreateTableStmt) { option := func() { - without := p.accept(token.WITHOUT) - n.Options = append(n.Options, p.expectName()) - n.WithoutOpt = append(n.WithoutOpt, without) + start := p.cur().Pos + o := &ast.TableOption{Without: p.accept(token.WITHOUT)} + o.Name = p.expectName() + o.Span = p.span(start) + n.Options = append(n.Options, o) } switch { case p.at(token.WITHOUT) || token.IsName(p.cur().Kind): diff --git a/parser/parse_dml.go b/parser/parse_dml.go index cba3392..cc6e022 100644 --- a/parser/parse_dml.go +++ b/parser/parse_dml.go @@ -12,6 +12,27 @@ import ( // insert_cmd ::= INSERT orconf. / insert_cmd ::= REPLACE. func (p *parser) parseInsert(with *ast.With, start int) ast.Stmt { n := &ast.InsertStmt{With: with} + p.insertTarget(n) + if p.at(token.DEFAULT) { + p.advance() + p.expect(token.VALUES) + n.DefaultValues = true + n.Returning = p.parseReturning() + n.Span = p.span(start) + return n + } + n.Select = p.parseSelect() + p.parseUpsert(n) + n.Span = p.span(start) + return n +} + +// insertTarget reads "insert_cmd INTO xfullname idlist_opt", the part an +// INSERT shares with a trigger body's insert. +// +// insert_cmd ::= INSERT orconf. / insert_cmd ::= REPLACE. +// idlist_opt ::= . / idlist_opt ::= LP idlist RP. +func (p *parser) insertTarget(n *ast.InsertStmt) { if p.accept(token.REPLACE) { n.Replace = true } else { @@ -20,25 +41,12 @@ func (p *parser) parseInsert(with *ast.With, start int) ast.Stmt { } p.expect(token.INTO) n.Table, n.Alias = p.xfullname() - // idlist_opt ::= . / idlist_opt ::= LP idlist RP. A "select" never - // starts with "(", so a leading "(" is always the column list. + // A "select" never starts with "(", so a leading "(" is the column list. if p.at(token.LP) { p.advance() n.Columns = p.parseIDList() p.expect(token.RP) } - if p.at(token.DEFAULT) { - p.advance() - p.expect(token.VALUES) - n.DefaultValues = true - n.Returning = p.parseReturning() - n.Span = p.span(start) - return n - } - n.Select = p.parseSelect() - p.parseUpsert(n) - n.Span = p.span(start) - return n } // parseOrConflict implements "orconf". @@ -163,8 +171,18 @@ func (p *parser) parseSetList() []*ast.SetPair { // cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from // where_opt_ret. func (p *parser) parseUpdate(with *ast.With, start int) ast.Stmt { - p.expect(token.UPDATE) n := &ast.UpdateStmt{With: with} + p.updateCore(n) + n.Where, n.Returning = p.parseWhereOptRet() + n.Span = p.span(start) + return n +} + +// updateCore reads "UPDATE orconf xfullname indexed_opt SET setlist from", +// everything an UPDATE shares with a trigger body's update. Only the WHERE +// clause differs: the trigger form takes where_opt, with no RETURNING. +func (p *parser) updateCore(n *ast.UpdateStmt) { + p.expect(token.UPDATE) n.OrConflict = p.parseOrConflict() n.Table, n.Alias = p.xfullname() n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() @@ -173,25 +191,28 @@ func (p *parser) parseUpdate(with *ast.With, start int) ast.Stmt { if p.accept(token.FROM) { n.From = p.parseFromList() } - n.Where, n.Returning = p.parseWhereOptRet() - n.Span = p.span(start) - return n } // parseDelete implements the DELETE command. // // cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret. func (p *parser) parseDelete(with *ast.With, start int) ast.Stmt { - p.expect(token.DELETE) - p.expect(token.FROM) n := &ast.DeleteStmt{With: with} - n.Table, n.Alias = p.xfullname() - n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() + p.deleteCore(n) n.Where, n.Returning = p.parseWhereOptRet() n.Span = p.span(start) return n } +// deleteCore reads "DELETE FROM xfullname indexed_opt", everything a DELETE +// shares with a trigger body's delete. +func (p *parser) deleteCore(n *ast.DeleteStmt) { + p.expect(token.DELETE) + p.expect(token.FROM) + n.Table, n.Alias = p.xfullname() + n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() +} + // parseIndexedOpt implements "indexed_opt". // // NOT here can only begin "NOT INDEXED": nothing else that may follow a diff --git a/parser/parse_expr.go b/parser/parse_expr.go index 47c9ed9..f3cbf22 100644 --- a/parser/parse_expr.go +++ b/parser/parse_expr.go @@ -37,14 +37,40 @@ const ( precUnary = 12 // BITNOT, and the [BITNOT] mark on unary PLUS/MINUS ) -// binaryOps maps the operator tokens that need no special handling to their -// AST operator. -var binaryOps = map[token.Kind]ast.Operator{ - token.LT: ast.OpLt, token.LE: ast.OpLe, token.GT: ast.OpGt, token.GE: ast.OpGe, - token.BITAND: ast.OpBitAnd, token.BITOR: ast.OpBitOr, - token.LSHIFT: ast.OpLShift, token.RSHIFT: ast.OpRShift, - token.STAR: ast.OpMul, token.SLASH: ast.OpDiv, token.REM: ast.OpMod, -} +// infix tables the operators that need nothing but their precedence and an +// AST operator, so the climbing loop states the guard once instead of once +// per level. The operators with syntax of their own -- IS, LIKE, BETWEEN, +// IN, COLLATE, the null tests and NOT -- keep their own cases below. +var infix = func() [token.KindCount]struct { + prec int + op ast.Operator +} { + var t [token.KindCount]struct { + prec int + op ast.Operator + } + set := func(k token.Kind, prec int, op ast.Operator) { t[k].prec, t[k].op = prec, op } + set(token.OR, precOr, ast.OpOr) + set(token.AND, precAnd, ast.OpAnd) + set(token.EQ, precCompare, ast.OpEq) + set(token.NE, precCompare, ast.OpNe) + set(token.LT, precRelational, ast.OpLt) + set(token.LE, precRelational, ast.OpLe) + set(token.GT, precRelational, ast.OpGt) + set(token.GE, precRelational, ast.OpGe) + set(token.BITAND, precBitwise, ast.OpBitAnd) + set(token.BITOR, precBitwise, ast.OpBitOr) + set(token.LSHIFT, precBitwise, ast.OpLShift) + set(token.RSHIFT, precBitwise, ast.OpRShift) + set(token.PLUS, precAdd, ast.OpAdd) + set(token.MINUS, precAdd, ast.OpSub) + set(token.STAR, precMul, ast.OpMul) + set(token.SLASH, precMul, ast.OpDiv) + set(token.REM, precMul, ast.OpMod) + set(token.CONCAT, precConcat, ast.OpConcat) + set(token.PTR, precConcat, ast.OpPtr) // "->>" is corrected below + return t +}() // parseExpr parses an expression, consuming operators of precedence min and // above. @@ -97,67 +123,19 @@ func (p *parser) parsePrefix() ast.Expr { func (p *parser) parseOperators(x ast.Expr, min int, stopAtAnd bool) ast.Expr { for { t := p.cur() - switch t.Kind { - case token.OR: - if precOr < min { - return x - } - x = p.binary(x, ast.OpOr, precOr) - case token.AND: - if stopAtAnd || precAnd < min { - return x - } - x = p.binary(x, ast.OpAnd, precAnd) - case token.EQ: - if precCompare < min { - return x - } - x = p.binary(x, ast.OpEq, precCompare) - case token.NE: - if precCompare < min { - return x - } - x = p.binary(x, ast.OpNe, precCompare) - case token.LT, token.LE, token.GT, token.GE: - if precRelational < min { - return x - } - x = p.binary(x, binaryOps[t.Kind], precRelational) - case token.BITAND, token.BITOR, token.LSHIFT, token.RSHIFT: - if precBitwise < min { + if e := infix[t.Kind]; e.prec > 0 { + if e.prec < min || (t.Kind == token.AND && stopAtAnd) { return x } - x = p.binary(x, binaryOps[t.Kind], precBitwise) - case token.PLUS, token.MINUS: - if precAdd < min { - return x - } - op := ast.OpAdd - if t.Kind == token.MINUS { - op = ast.OpSub - } - x = p.binary(x, op, precAdd) - case token.STAR, token.SLASH, token.REM: - if precMul < min { - return x - } - x = p.binary(x, binaryOps[t.Kind], precMul) - case token.CONCAT: - if precConcat < min { - return x - } - x = p.binary(x, ast.OpConcat, precConcat) - case token.PTR: // expr ::= expr PTR expr. The "->" and "->>" spellings share a - // token; the text distinguishes them. - if precConcat < min { - return x - } - op := ast.OpPtr - if t.Text == "->>" { - op = ast.OpPtr2 + // token; only the text tells them apart. + if t.Kind == token.PTR && t.Text == "->>" { + e.op = ast.OpPtr2 } - x = p.binary(x, op, precConcat) + x = p.binary(x, e.op, e.prec) + continue + } + switch t.Kind { case token.COLLATE: // expr ::= expr COLLATE ids. if precCollate < min { @@ -647,11 +625,17 @@ func (p *parser) parseTypeToken() *ast.TypeName { return nil } start := p.cur().Pos - var words []string - for token.IsIDS(p.cur().Kind) { - words = append(words, p.advance().Text) + // A type is almost always one word ("INTEGER", "TEXT"); only build a + // slice for the "UNSIGNED BIG INT" kind. + name := p.advance().Text + if token.IsIDS(p.cur().Kind) { + words := []string{name} + for token.IsIDS(p.cur().Kind) { + words = append(words, p.advance().Text) + } + name = strings.Join(words, " ") } - n := &ast.TypeName{Name: strings.Join(words, " ")} + n := &ast.TypeName{Name: name} if p.at(token.LP) { p.advance() n.Args = append(n.Args, p.parseSignedNumber()) @@ -728,6 +712,9 @@ func (p *parser) bindParam(t token.Token) ast.Expr { } else { p.nVar++ n.Number = p.nVar + if p.varNums == nil { + p.varNums = make(map[string]int) + } p.varNums[t.Text] = p.nVar } } diff --git a/parser/parse_trigger.go b/parser/parse_trigger.go index 1f72406..85a3802 100644 --- a/parser/parse_trigger.go +++ b/parser/parse_trigger.go @@ -70,9 +70,10 @@ func (p *parser) parseCreateTrigger(start int, temp bool) ast.Stmt { } // parseTriggerCmd implements the restricted statement forms of a trigger -// body. They differ from the top-level statements: no WITH prefix, no -// RETURNING, and INDEXED BY is diagnosed by a grammar action rather than -// being rejected outright. +// body. They differ from the top-level statements in three ways: no WITH +// prefix; UPDATE and DELETE take where_opt rather than where_opt_ret, so +// they have no RETURNING, while INSERT still does because "upsert" carries +// one; and INSERT has no DEFAULT VALUES form. // // trigger_cmd ::= UPDATE orconf xfullname tridxby SET setlist from where_opt. // trigger_cmd ::= insert_cmd INTO xfullname idlist_opt select upsert. @@ -86,47 +87,24 @@ func (p *parser) parseTriggerCmd() ast.Stmt { start := p.cur().Pos switch p.cur().Kind { case token.UPDATE: - p.advance() n := &ast.UpdateStmt{} - n.OrConflict = p.parseOrConflict() - n.Table, n.Alias = p.xfullname() - n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() // tridxby - p.expect(token.SET) - n.Set = p.parseSetList() - if p.accept(token.FROM) { - n.From = p.parseFromList() - } - if p.accept(token.WHERE) { + p.updateCore(n) + if p.accept(token.WHERE) { // where_opt, not where_opt_ret n.Where = p.parseExpr(precLowest) } n.Span = p.span(start) return n case token.INSERT, token.REPLACE: n := &ast.InsertStmt{} - if p.accept(token.REPLACE) { - n.Replace = true - } else { - p.advance() - n.OrConflict = p.parseOrConflict() - } - p.expect(token.INTO) - n.Table, n.Alias = p.xfullname() - if p.at(token.LP) { - p.advance() - n.Columns = p.parseIDList() - p.expect(token.RP) - } + p.insertTarget(n) // no DEFAULT VALUES form here n.Select = p.parseSelect() p.parseUpsert(n) n.Span = p.span(start) return n case token.DELETE: - p.advance() - p.expect(token.FROM) n := &ast.DeleteStmt{} - n.Table, n.Alias = p.xfullname() - n.IndexedBy, n.NotIndexed = p.parseIndexedOpt() // tridxby - if p.accept(token.WHERE) { + p.deleteCore(n) + if p.accept(token.WHERE) { // where_opt, not where_opt_ret n.Where = p.parseExpr(precLowest) } n.Span = p.span(start) diff --git a/parser/parser.go b/parser/parser.go index 893160b..c05c8f3 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -16,6 +16,14 @@ // // Parsing is fail-fast: the first error aborts, as it does in SQLite, which // reports exactly one parse error per statement. +// +// One habit recurs throughout and is worth stating once. SQLite's LALR +// parser shifts a token as soon as some rule can begin with it, and only +// discovers that the rule does not continue on the token after. So where a +// keyword can only introduce one thing -- NOT before INDEXED, DEFERRABLE or +// MATERIALIZED, say -- meyer consumes it before checking what follows, +// rather than peeking. Peeking would put the error on the keyword; SQLite +// puts it on what came next. package parser import ( @@ -139,7 +147,7 @@ type parser struct { i int nVar int // bind parameters seen so far - varNums map[string]int // named parameters already assigned a number + varNums map[string]int // named parameters already assigned a number, if any depth int // current nesting depth, guarded by enter/leave @@ -175,7 +183,7 @@ func (p *parser) enter() { func (p *parser) leave() { p.depth-- } func newParser(src string) *parser { - p := &parser{src: src, toks: lexer.Lex(src), varNums: map[string]int{}} + p := &parser{src: src, toks: lexer.Lex(src)} p.checkIllegal() return p } diff --git a/parser/testdata/ast/ddl.tree b/parser/testdata/ast/ddl.tree index 52501cd..f0d9d76 100644 --- a/parser/testdata/ast/ddl.tree +++ b/parser/testdata/ast/ddl.tree @@ -386,21 +386,24 @@ CreateTableStmt{ } ] Options: [ - Ident{ - Span: 604:609 - Name: "ROWID" - Raw: "ROWID" + TableOption{ + Span: 596:609 + Without: true + Name: Ident{ + Span: 604:609 + Name: "ROWID" + Raw: "ROWID" + } } - Ident{ + TableOption{ Span: 611:617 - Name: "STRICT" - Raw: "STRICT" + Name: Ident{ + Span: 611:617 + Name: "STRICT" + Raw: "STRICT" + } } ] - WithoutOpt: [ - true - false - ] } CreateTableStmt{ Span: 619:647 diff --git a/token/keywords.go b/token/keywords.go index ba4be18..db3ebf9 100644 --- a/token/keywords.go +++ b/token/keywords.go @@ -182,7 +182,7 @@ var keywordName = func() map[Kind]string { // // WINDOW, OVER and FILTER are deliberately absent: their keyword-versus- // identifier ambiguity is resolved in the tokenizer instead (see lexer). -var fallback = map[Kind]bool{ +var fallbackSet = map[Kind]bool{ ABORT: true, ACTION: true, AFTER: true, ANALYZE: true, ASC: true, ATTACH: true, BEFORE: true, BEGIN: true, BY: true, CASCADE: true, CAST: true, COLUMNKW: true, CONFLICT: true, DATABASE: true, @@ -202,6 +202,16 @@ var fallback = map[Kind]bool{ IF: true, } +// fallback is fallbackSet as a Kind-indexed array. The class predicates +// below run on every name token, and an array load beats hashing. +var fallback = func() [KindCount]bool { + var t [KindCount]bool + for k := range fallbackSet { + t[k] = true + } + return t +}() + // maxKeywordLen is the length of CURRENT_TIMESTAMP, the longest keyword. const maxKeywordLen = 17 diff --git a/token/token.go b/token/token.go index 1bee6d1..b36faaa 100644 --- a/token/token.go +++ b/token/token.go @@ -191,6 +191,10 @@ const ( WINDOW WITH WITHOUT + + // KindCount is one past the last kind, so a table indexed by Kind can + // be sized without a map. + KindCount ) var kindNames = map[Kind]string{ From 54cabdb9fada9a445af1f565c8e572803864762c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 21:13:56 +0000 Subject: [PATCH 18/23] Check the transcriptions against the vendored upstream sources The keyword table, the %fallback set and "every parse function names its rule" were all things only a careful reading could confirm, and the sort of thing that quietly rots when the pin advances. Three tests now check them mechanically: - token rebuilds the keyword table from mkkeywordhash.c (now vendored alongside parse.y and tokenize.c) and compares all 147 entries and their TK_ codes; - token rebuilds the %fallback set from parse.y and compares all 73, both resolved for the pinned build's feature flags; - parser checks that every one of parse.y's 133 nonterminals is named somewhere in the parser, which is the repository rule read from the side that catches an omission. All three passed on the first run, which is the answer I wanted but not the one worth relying on next time. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- CLAUDE.md | 6 +- internal/reference/README.md | 23 +- internal/reference/mkkeywordhash.c | 722 +++++++++++++++++++++++++++++ parser/grammar_test.go | 74 +++ parser/parse_ddl.go | 3 +- token/keywords_test.go | 119 +++++ 6 files changed, 940 insertions(+), 7 deletions(-) create mode 100644 internal/reference/mkkeywordhash.c create mode 100644 parser/grammar_test.go create mode 100644 token/keywords_test.go diff --git a/CLAUDE.md b/CLAUDE.md index f5462d8..4426469 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,6 +9,9 @@ https://sqlite.org/lang.html. ## Rules - **Zero dependencies.** `go.mod` must never gain a `require` line. +- The keyword table and the `%fallback` set are transcriptions, and tests in + `token` rebuild both from the vendored upstream sources to keep them + honest. Advancing the pin surfaces a keyword change as a failure. - **No parser generators.** Everything is hand-written recursive descent. - **Never edit `parser/testdata/*.test` by hand.** Corpus files are produced by `cmd/regenerate-parse` from SQLite's own test suite plus a real SQLite @@ -16,7 +19,8 @@ https://sqlite.org/lang.html. (`go test ./parser -check-parse`), not by hand. The hand-written snapshot inputs under `parser/testdata/ast/` are the exception — see below. - Every nontrivial parse function carries a comment naming the `parse.y` - rule(s) it implements. + rule(s) it implements. `TestEveryRuleIsNamed` enforces this from the other + side: no nonterminal of the vendored grammar may go unmentioned. - Error messages must match SQLite's parser byte-for-byte (`near "X": syntax error`, `unrecognized token: "X"`, `incomplete input`). diff --git a/internal/reference/README.md b/internal/reference/README.md index 48547c6..cb48f52 100644 --- a/internal/reference/README.md +++ b/internal/reference/README.md @@ -1,16 +1,29 @@ # Vendored SQLite sources (documentation only) -These files are the grammar and tokenizer meyer is a port of, kept here so -that the `parse.y` rule named in a parser comment can be read without a -SQLite checkout. **Nothing in the repository processes them**: no parser -generator runs, no build step reads them, and no test depends on them. They -are reference material for humans, and the directory deliberately contains +These files are the grammar, tokenizer and keyword table meyer is a port of, +kept here so that the `parse.y` rule named in a parser comment can be read +without a SQLite checkout. **No tool processes them**: no parser generator +runs and no build step reads them, and the directory deliberately contains no Go file, so it is not a package and `./...` does not reach it. +Two tests do read them, to check transcriptions that would otherwise only +ever be verified by hand: + +- `token`'s tests rebuild the keyword table and the `%fallback` set from + `mkkeywordhash.c` and `parse.y` and compare them with meyer's, resolved + for the pinned build's feature flags. +- `parser`'s tests check that every nonterminal in `parse.y` is named by a + comment somewhere in the parser, which is how the repository's "every + nontrivial parse function names its rule" rule is enforced. + +Advancing the pin therefore surfaces a grammar or keyword change as a test +failure rather than as a silent divergence. + | file | upstream path | |---|---| | `parse.y` | `src/parse.y` | | `tokenize.c` | `src/tokenize.c` | +| `mkkeywordhash.c` | `tool/mkkeywordhash.c` | Both come from SQLite 3.53.4, the release pinned in `cmd/regenerate-parse/main.go` and recorded in diff --git a/internal/reference/mkkeywordhash.c b/internal/reference/mkkeywordhash.c new file mode 100644 index 0000000..d6d54a5 --- /dev/null +++ b/internal/reference/mkkeywordhash.c @@ -0,0 +1,722 @@ +/* +** Compile and run this standalone program in order to generate code that +** implements a function that will translate alphabetic identifiers into +** parser token codes. +*/ +#include +#include +#include +#include + +/* +** A header comment placed at the beginning of generated code. +*/ +static const char zHdr[] = + "/***** This file contains automatically generated code ******\n" + "**\n" + "** The code in this file has been automatically generated by\n" + "**\n" + "** sqlite/tool/mkkeywordhash.c\n" + "**\n" + "** The code in this file implements a function that determines whether\n" + "** or not a given identifier is really an SQL keyword. The same thing\n" + "** might be implemented more directly using a hand-written hash table.\n" + "** But by using this automatically generated code, the size of the code\n" + "** is substantially reduced. This is important for embedded applications\n" + "** on platforms with limited memory.\n" + "*/\n" +; + +/* +** All the keywords of the SQL language are stored in a hash +** table composed of instances of the following structure. +*/ +typedef struct Keyword Keyword; +struct Keyword { + char *zName; /* The keyword name */ + char *zTokenType; /* Token value for this keyword */ + int mask; /* Code this keyword if non-zero */ + int priority; /* Put higher priorities earlier in the hash chain */ + int id; /* Unique ID for this record */ + int hash; /* Hash on the keyword */ + int offset; /* Offset to start of name string */ + int len; /* Length of this keyword, not counting final \000 */ + int prefix; /* Number of characters in prefix */ + int longestSuffix; /* Longest suffix that is a prefix on another word */ + int iNext; /* Index in aKeywordTable[] of next with same hash */ + int substrId; /* Id to another keyword this keyword is embedded in */ + int substrOffset; /* Offset into substrId for start of this keyword */ + char zOrigName[20]; /* Original keyword name before processing */ +}; + +/* +** Define masks used to determine which keywords are allowed +*/ +#if defined(SQLITE_OMIT_ALTERTABLE) || defined(SQLITE_OMIT_VIRTUALTABLE) +# define ALTER 0 +#else +# define ALTER 0x00000001 +#endif +#define ALWAYS 0x00000002 +#ifdef SQLITE_OMIT_ANALYZE +# define ANALYZE 0 +#else +# define ANALYZE 0x00000004 +#endif +#ifdef SQLITE_OMIT_ATTACH +# define ATTACH 0 +#else +# define ATTACH 0x00000008 +#endif +#ifdef SQLITE_OMIT_AUTOINCREMENT +# define AUTOINCR 0 +#else +# define AUTOINCR 0x00000010 +#endif +#ifdef SQLITE_OMIT_CAST +# define CAST 0 +#else +# define CAST 0x00000020 +#endif +#ifdef SQLITE_OMIT_COMPOUND_SELECT +# define COMPOUND 0 +#else +# define COMPOUND 0x00000040 +#endif +#ifdef SQLITE_OMIT_CONFLICT_CLAUSE +# define CONFLICT 0 +#else +# define CONFLICT 0x00000080 +#endif +#ifdef SQLITE_OMIT_EXPLAIN +# define EXPLAIN 0 +#else +# define EXPLAIN 0x00000100 +#endif +#ifdef SQLITE_OMIT_FOREIGN_KEY +# define FKEY 0 +#else +# define FKEY 0x00000200 +#endif +#ifdef SQLITE_OMIT_PRAGMA +# define PRAGMA 0 +#else +# define PRAGMA 0x00000400 +#endif +#ifdef SQLITE_OMIT_REINDEX +# define REINDEX 0 +#else +# define REINDEX 0x00000800 +#endif +#ifdef SQLITE_OMIT_SUBQUERY +# define SUBQUERY 0 +#else +# define SUBQUERY 0x00001000 +#endif +#ifdef SQLITE_OMIT_TRIGGER +# define TRIGGER 0 +#else +# define TRIGGER 0x00002000 +#endif +#if defined(SQLITE_OMIT_AUTOVACUUM) && \ + (defined(SQLITE_OMIT_VACUUM) || defined(SQLITE_OMIT_ATTACH)) +# define VACUUM 0 +#else +# define VACUUM 0x00004000 +#endif +#ifdef SQLITE_OMIT_VIEW +# define VIEW 0 +#else +# define VIEW 0x00008000 +#endif +#ifdef SQLITE_OMIT_VIRTUALTABLE +# define VTAB 0 +#else +# define VTAB 0x00010000 +#endif +#ifdef SQLITE_OMIT_AUTOVACUUM +# define AUTOVACUUM 0 +#else +# define AUTOVACUUM 0x00020000 +#endif +#ifdef SQLITE_OMIT_CTE +# define CTE 0 +#else +# define CTE 0x00040000 +#endif +#ifdef SQLITE_OMIT_UPSERT +# define UPSERT 0 +#else +# define UPSERT 0x00080000 +#endif +#ifdef SQLITE_OMIT_WINDOWFUNC +# define WINDOWFUNC 0 +#else +# define WINDOWFUNC 0x00100000 +#endif +#ifdef SQLITE_OMIT_GENERATED_COLUMNS +# define GENCOL 0 +#else +# define GENCOL 0x00200000 +#endif +#ifdef SQLITE_OMIT_RETURNING +# define RETURNING 0 +#else +# define RETURNING 0x00400000 +#endif +#ifndef SQLITE_ENABLE_ORDERED_SET_AGGREGATES +# define ORDERSET 0 +#else +# define ORDERSET 0x00800000 +#endif + + +/* +** These are the keywords +*/ +static Keyword aKeywordTable[] = { + { "ABORT", "TK_ABORT", CONFLICT|TRIGGER, 0 }, + { "ACTION", "TK_ACTION", FKEY, 0 }, + { "ADD", "TK_ADD", ALTER, 1 }, + { "AFTER", "TK_AFTER", TRIGGER, 0 }, + { "ALL", "TK_ALL", ALWAYS, 0 }, + { "ALTER", "TK_ALTER", ALTER, 0 }, + { "ALWAYS", "TK_ALWAYS", GENCOL, 0 }, + { "ANALYZE", "TK_ANALYZE", ANALYZE, 0 }, + { "AND", "TK_AND", ALWAYS, 10 }, + { "AS", "TK_AS", ALWAYS, 10 }, + { "ASC", "TK_ASC", ALWAYS, 0 }, + { "ATTACH", "TK_ATTACH", ATTACH, 1 }, + { "AUTOINCREMENT", "TK_AUTOINCR", AUTOINCR, 0 }, + { "BEFORE", "TK_BEFORE", TRIGGER, 0 }, + { "BEGIN", "TK_BEGIN", ALWAYS, 1 }, + { "BETWEEN", "TK_BETWEEN", ALWAYS, 5 }, + { "BY", "TK_BY", ALWAYS, 10 }, + { "CASCADE", "TK_CASCADE", FKEY, 1 }, + { "CASE", "TK_CASE", ALWAYS, 5 }, + { "CAST", "TK_CAST", CAST, 5 }, + { "CHECK", "TK_CHECK", ALWAYS, 1 }, + { "COLLATE", "TK_COLLATE", ALWAYS, 1 }, + { "COLUMN", "TK_COLUMNKW", ALTER, 1 }, + { "COMMIT", "TK_COMMIT", ALWAYS, 1 }, + { "CONFLICT", "TK_CONFLICT", CONFLICT, 0 }, + { "CONSTRAINT", "TK_CONSTRAINT", ALWAYS, 1 }, + { "CREATE", "TK_CREATE", ALWAYS, 2 }, + { "CROSS", "TK_JOIN_KW", ALWAYS, 3 }, + { "CURRENT", "TK_CURRENT", WINDOWFUNC, 1 }, + { "CURRENT_DATE", "TK_CTIME_KW", ALWAYS, 1 }, + { "CURRENT_TIME", "TK_CTIME_KW", ALWAYS, 1 }, + { "CURRENT_TIMESTAMP","TK_CTIME_KW", ALWAYS, 1 }, + { "DATABASE", "TK_DATABASE", ATTACH, 0 }, + { "DEFAULT", "TK_DEFAULT", ALWAYS, 1 }, + { "DEFERRED", "TK_DEFERRED", ALWAYS, 1 }, + { "DEFERRABLE", "TK_DEFERRABLE", FKEY, 1 }, + { "DELETE", "TK_DELETE", ALWAYS, 10 }, + { "DESC", "TK_DESC", ALWAYS, 3 }, + { "DETACH", "TK_DETACH", ATTACH, 0 }, + { "DISTINCT", "TK_DISTINCT", ALWAYS, 5 }, + { "DO", "TK_DO", UPSERT, 2 }, + { "DROP", "TK_DROP", ALWAYS, 1 }, + { "END", "TK_END", ALWAYS, 1 }, + { "EACH", "TK_EACH", TRIGGER, 1 }, + { "ELSE", "TK_ELSE", ALWAYS, 2 }, + { "ESCAPE", "TK_ESCAPE", ALWAYS, 4 }, + { "EXCEPT", "TK_EXCEPT", COMPOUND, 4 }, + { "EXCLUSIVE", "TK_EXCLUSIVE", ALWAYS, 1 }, + { "EXCLUDE", "TK_EXCLUDE", WINDOWFUNC, 1 }, + { "EXISTS", "TK_EXISTS", ALWAYS, 4 }, + { "EXPLAIN", "TK_EXPLAIN", EXPLAIN, 1 }, + { "FAIL", "TK_FAIL", CONFLICT|TRIGGER, 1 }, + { "FILTER", "TK_FILTER", WINDOWFUNC, 4 }, + { "FIRST", "TK_FIRST", ALWAYS, 4 }, + { "FOLLOWING", "TK_FOLLOWING", WINDOWFUNC, 4 }, + { "FOR", "TK_FOR", TRIGGER, 2 }, + { "FOREIGN", "TK_FOREIGN", FKEY, 1 }, + { "FROM", "TK_FROM", ALWAYS, 10 }, + { "FULL", "TK_JOIN_KW", ALWAYS, 3 }, + { "GENERATED", "TK_GENERATED", ALWAYS, 1 }, + { "GLOB", "TK_LIKE_KW", ALWAYS, 3 }, + { "GROUP", "TK_GROUP", ALWAYS, 5 }, + { "GROUPS", "TK_GROUPS", WINDOWFUNC, 2 }, + { "HAVING", "TK_HAVING", ALWAYS, 5 }, + { "IF", "TK_IF", ALWAYS, 2 }, + { "IGNORE", "TK_IGNORE", CONFLICT|TRIGGER, 1 }, + { "IMMEDIATE", "TK_IMMEDIATE", ALWAYS, 1 }, + { "IN", "TK_IN", ALWAYS, 10 }, + { "INDEX", "TK_INDEX", ALWAYS, 1 }, + { "INDEXED", "TK_INDEXED", ALWAYS, 0 }, + { "INITIALLY", "TK_INITIALLY", FKEY, 1 }, + { "INNER", "TK_JOIN_KW", ALWAYS, 1 }, + { "INSERT", "TK_INSERT", ALWAYS, 10 }, + { "INSTEAD", "TK_INSTEAD", TRIGGER, 1 }, + { "INTERSECT", "TK_INTERSECT", COMPOUND, 5 }, + { "INTO", "TK_INTO", ALWAYS, 10 }, + { "IS", "TK_IS", ALWAYS, 5 }, + { "ISNULL", "TK_ISNULL", ALWAYS, 5 }, + { "JOIN", "TK_JOIN", ALWAYS, 5 }, + { "KEY", "TK_KEY", ALWAYS, 1 }, + { "LAST", "TK_LAST", ALWAYS, 4 }, + { "LEFT", "TK_JOIN_KW", ALWAYS, 5 }, + { "LIKE", "TK_LIKE_KW", ALWAYS, 5 }, + { "LIMIT", "TK_LIMIT", ALWAYS, 3 }, + { "MATCH", "TK_MATCH", ALWAYS, 2 }, + { "MATERIALIZED", "TK_MATERIALIZED", CTE, 12 }, + { "NATURAL", "TK_JOIN_KW", ALWAYS, 3 }, + { "NO", "TK_NO", FKEY|WINDOWFUNC, 2 }, + { "NOT", "TK_NOT", ALWAYS, 10 }, + { "NOTHING", "TK_NOTHING", UPSERT, 1 }, + { "NOTNULL", "TK_NOTNULL", ALWAYS, 3 }, + { "NULL", "TK_NULL", ALWAYS, 10 }, + { "NULLS", "TK_NULLS", ALWAYS, 3 }, + { "OF", "TK_OF", ALWAYS, 3 }, + { "OFFSET", "TK_OFFSET", ALWAYS, 1 }, + { "ON", "TK_ON", ALWAYS, 1 }, + { "OR", "TK_OR", ALWAYS, 9 }, + { "ORDER", "TK_ORDER", ALWAYS, 10 }, + { "OTHERS", "TK_OTHERS", WINDOWFUNC, 3 }, + { "OUTER", "TK_JOIN_KW", ALWAYS, 5 }, + { "OVER", "TK_OVER", WINDOWFUNC, 3 }, + { "PARTITION", "TK_PARTITION", WINDOWFUNC, 3 }, + { "PLAN", "TK_PLAN", EXPLAIN, 0 }, + { "PRAGMA", "TK_PRAGMA", PRAGMA, 0 }, + { "PRECEDING", "TK_PRECEDING", WINDOWFUNC, 3 }, + { "PRIMARY", "TK_PRIMARY", ALWAYS, 1 }, + { "QUERY", "TK_QUERY", EXPLAIN, 0 }, + { "RAISE", "TK_RAISE", TRIGGER, 1 }, + { "RANGE", "TK_RANGE", WINDOWFUNC, 3 }, + { "RECURSIVE", "TK_RECURSIVE", CTE, 3 }, + { "REFERENCES", "TK_REFERENCES", FKEY, 1 }, + { "REGEXP", "TK_LIKE_KW", ALWAYS, 3 }, + { "REINDEX", "TK_REINDEX", REINDEX, 1 }, + { "RELEASE", "TK_RELEASE", ALWAYS, 1 }, + { "RENAME", "TK_RENAME", ALTER, 1 }, + { "REPLACE", "TK_REPLACE", CONFLICT, 10 }, + { "RESTRICT", "TK_RESTRICT", FKEY, 1 }, + { "RETURNING", "TK_RETURNING", RETURNING, 10 }, + { "RIGHT", "TK_JOIN_KW", ALWAYS, 0 }, + { "ROLLBACK", "TK_ROLLBACK", ALWAYS, 1 }, + { "ROW", "TK_ROW", TRIGGER, 1 }, + { "ROWS", "TK_ROWS", ALWAYS, 1 }, + { "SAVEPOINT", "TK_SAVEPOINT", ALWAYS, 1 }, + { "SELECT", "TK_SELECT", ALWAYS, 10 }, + { "SET", "TK_SET", ALWAYS, 10 }, + { "TABLE", "TK_TABLE", ALWAYS, 1 }, + { "TEMP", "TK_TEMP", ALWAYS, 1 }, + { "TEMPORARY", "TK_TEMP", ALWAYS, 1 }, + { "THEN", "TK_THEN", ALWAYS, 3 }, + { "TIES", "TK_TIES", WINDOWFUNC, 3 }, + { "TO", "TK_TO", ALWAYS, 3 }, + { "TRANSACTION", "TK_TRANSACTION", ALWAYS, 1 }, + { "TRIGGER", "TK_TRIGGER", TRIGGER, 1 }, + { "UNBOUNDED", "TK_UNBOUNDED", WINDOWFUNC, 3 }, + { "UNION", "TK_UNION", COMPOUND, 3 }, + { "UNIQUE", "TK_UNIQUE", ALWAYS, 1 }, + { "UPDATE", "TK_UPDATE", ALWAYS, 10 }, + { "USING", "TK_USING", ALWAYS, 8 }, + { "VACUUM", "TK_VACUUM", VACUUM, 1 }, + { "VALUES", "TK_VALUES", ALWAYS, 10 }, + { "VIEW", "TK_VIEW", VIEW, 1 }, + { "VIRTUAL", "TK_VIRTUAL", VTAB, 1 }, + { "WHEN", "TK_WHEN", ALWAYS, 1 }, + { "WHERE", "TK_WHERE", ALWAYS, 10 }, + { "WINDOW", "TK_WINDOW", WINDOWFUNC, 3 }, + { "WITH", "TK_WITH", CTE, 4 }, + { "WITHIN", "TK_WITHIN", ORDERSET, 1 }, + { "WITHOUT", "TK_WITHOUT", ALWAYS, 1 }, +}; + +/* Number of keywords */ +static int nKeyword = (sizeof(aKeywordTable)/sizeof(aKeywordTable[0])); + +/* Map all alphabetic characters into lower-case for hashing. This is +** only valid for alphabetics. In particular it does not work for '_' +** and so the hash cannot be on a keyword position that might be an '_'. +*/ +#define charMap(X) (0x20|(X)) + +/* +** Comparision function for two Keyword records +*/ +static int keywordCompare1(const void *a, const void *b){ + const Keyword *pA = (Keyword*)a; + const Keyword *pB = (Keyword*)b; + int n = pA->len - pB->len; + if( n==0 ){ + n = strcmp(pA->zName, pB->zName); + } + assert( n!=0 ); + return n; +} +static int keywordCompare2(const void *a, const void *b){ + const Keyword *pA = (Keyword*)a; + const Keyword *pB = (Keyword*)b; + int n = pB->longestSuffix - pA->longestSuffix; + if( n==0 ){ + n = strcmp(pA->zName, pB->zName); + } + assert( n!=0 ); + return n; +} +static int keywordCompare3(const void *a, const void *b){ + const Keyword *pA = (Keyword*)a; + const Keyword *pB = (Keyword*)b; + int n = pA->offset - pB->offset; + if( n==0 ) n = pB->id - pA->id; + assert( n!=0 ); + return n; +} + +/* +** Return a KeywordTable entry with the given id +*/ +static Keyword *findById(int id){ + int i; + for(i=0; i= aKeywordTable[j].priority ) return; + aKeywordTable[i].iNext = aKeywordTable[j].iNext; + aKeywordTable[j].iNext = i+1; + *pFrom = j+1; + reorder(&aKeywordTable[i].iNext); +} + +/* Parameter to the hash function +*/ +#define HASH_OP ^ +#define HASH_CC '^' +#define HASH_C0 4 +#define HASH_C1 3 +#define HASH_C2 1 + +/* +** This routine does the work. The generated code is printed on standard +** output. +*/ +int main(int argc, char **argv){ + int i, j, k, h; + int bestSize, bestCount; + int count; + int nChar; + int totalLen = 0; + int aKWHash[1000]; /* 1000 is much bigger than nKeyword */ + char zKWText[2000]; + + /* Remove entries from the list of keywords that have mask==0 */ + for(i=j=0; ilen = (int)strlen(p->zName); + assert( p->lenzOrigName) ); + memcpy(p->zOrigName, p->zName, p->len+1); + totalLen += p->len; + p->hash = (charMap(p->zName[0])*HASH_C0) HASH_OP + (charMap(p->zName[p->len-1])*HASH_C1) HASH_OP + (p->len*HASH_C2); + p->id = i+1; + } + + /* Sort the table from shortest to longest keyword */ + qsort(aKeywordTable, nKeyword, sizeof(aKeywordTable[0]), keywordCompare1); + + /* Look for short keywords embedded in longer keywords */ + for(i=nKeyword-2; i>=0; i--){ + Keyword *p = &aKeywordTable[i]; + for(j=nKeyword-1; j>i && p->substrId==0; j--){ + Keyword *pOther = &aKeywordTable[j]; + if( pOther->substrId ) continue; + if( pOther->len<=p->len ) continue; + for(k=0; k<=pOther->len-p->len; k++){ + if( memcmp(p->zName, &pOther->zName[k], p->len)==0 ){ + p->substrId = pOther->id; + p->substrOffset = k; + break; + } + } + } + } + + /* Compute the longestSuffix value for every word */ + for(i=0; isubstrId ) continue; + for(j=0; jsubstrId ) continue; + for(k=p->longestSuffix+1; klen && klen; k++){ + if( memcmp(&p->zName[p->len-k], pOther->zName, k)==0 ){ + p->longestSuffix = k; + } + } + } + } + + /* Sort the table into reverse order by length */ + qsort(aKeywordTable, nKeyword, sizeof(aKeywordTable[0]), keywordCompare2); + + /* Fill in the offset for all entries */ + nChar = 0; + for(i=0; ioffset>0 || p->substrId ) continue; + p->offset = nChar; + nChar += p->len; + for(k=p->len-1; k>=1; k--){ + for(j=i+1; joffset>0 || pOther->substrId ) continue; + if( pOther->len<=k ) continue; + if( memcmp(&p->zName[p->len-k], pOther->zName, k)==0 ){ + p = pOther; + p->offset = nChar - k; + nChar = p->offset + p->len; + p->zName += k; + p->len -= k; + p->prefix = k; + j = i; + k = p->len; + } + } + } + } + for(i=0; isubstrId ){ + p->offset = findById(p->substrId)->offset + p->substrOffset; + } + } + + /* Sort the table by offset */ + qsort(aKeywordTable, nKeyword, sizeof(aKeywordTable[0]), keywordCompare3); + + /* Figure out how big to make the hash table in order to minimize the + ** number of collisions */ + bestSize = nKeyword; + bestCount = nKeyword*nKeyword; + for(i=nKeyword/2; i<=2*nKeyword; i++){ + if( i<=0 ) continue; + for(j=0; jsubstrId ) continue; + memcpy(&zKWText[k], p->zName, p->len); + k += p->len; + if( j+p->len>70 ){ + printf("%*s */\n", 74-j, ""); + j = 0; + } + if( j==0 ){ + printf("/* "); + j = 8; + } + printf("%s", p->zName); + j += p->len; + } + if( j>0 ){ + printf("%*s */\n", 74-j, ""); + } + printf("static const char zKWText[%d] = {\n", nChar); + zKWText[nChar] = 0; + for(i=j=0; i68 ){ + printf("\n"); + j = 0; + } + } + if( j>0 ) printf("\n"); + printf("};\n"); + + printf("/* aKWHash[i] is the hash value for the i-th keyword */\n"); + printf("static const unsigned char aKWHash[%d] = {\n", bestSize); + for(i=j=0; i12 ){ + printf("\n"); + j = 0; + } + } + printf("%s};\n", j==0 ? "" : "\n"); + + printf("/* aKWNext[] forms the hash collision chain. If aKWHash[i]==0\n"); + printf("** then the i-th keyword has no more hash collisions. Otherwise,\n"); + printf("** the next keyword with the same hash is aKWHash[i]-1. */\n"); + printf("static const unsigned char aKWNext[%d] = {0,\n", nKeyword+1); + for(i=j=0; i12 ){ + printf("\n"); + j = 0; + } + } + printf("%s};\n", j==0 ? "" : "\n"); + + printf("/* aKWLen[i] is the length (in bytes) of the i-th keyword */\n"); + printf("static const unsigned char aKWLen[%d] = {0,\n", nKeyword+1); + for(i=j=0; i12 ){ + printf("\n"); + j = 0; + } + } + printf("%s};\n", j==0 ? "" : "\n"); + + printf("/* aKWOffset[i] is the index into zKWText[] of the start of\n"); + printf("** the text for the i-th keyword. */\n"); + printf("static const unsigned short int aKWOffset[%d] = {0,\n", nKeyword+1); + for(i=j=0; i12 ){ + printf("\n"); + j = 0; + } + } + printf("%s};\n", j==0 ? "" : "\n"); + + printf("/* aKWCode[i] is the parser symbol code for the i-th keyword */\n"); + printf("static const unsigned char aKWCode[%d] = {0,\n", nKeyword+1); + for(i=j=0; i=5 ){ + printf("\n"); + j = 0; + } + } + printf("%s};\n", j==0 ? "" : "\n"); + printf("/* Hash table decoded:\n"); + for(i=0; i=2 );\n"); + printf(" i = ((charMap(z[0])*%d) %c", HASH_C0, HASH_CC); + printf(" (charMap(z[n-1])*%d) %c", HASH_C1, HASH_CC); + printf(" n*%d) %% %d;\n", HASH_C2, bestSize); + printf(" for(i=(int)aKWHash[i]; i>0; i=aKWNext[i]){\n"); + printf(" if( aKWLen[i]!=n ) continue;\n"); + printf(" zKW = &zKWText[aKWOffset[i]];\n"); + printf("#ifdef SQLITE_ASCII\n"); + printf(" if( (z[0]&~0x20)!=zKW[0] ) continue;\n"); + printf(" if( (z[1]&~0x20)!=zKW[1] ) continue;\n"); + printf(" j = 2;\n"); + printf(" while( j=2 ) keywordCode((char*)z, n, &id);\n"); + printf(" return id;\n"); + printf("}\n"); + printf("#define SQLITE_N_KEYWORD %d\n", nKeyword); + printf("int sqlite3_keyword_name(int i,const char **pzName,int *pnName){\n"); + printf(" if( i<0 || i>=SQLITE_N_KEYWORD ) return SQLITE_ERROR;\n"); + printf(" i++;\n"); + printf(" *pzName = zKWText + aKWOffset[i];\n"); + printf(" *pnName = aKWLen[i];\n"); + printf(" return SQLITE_OK;\n"); + printf("}\n"); + printf("int sqlite3_keyword_count(void){ return SQLITE_N_KEYWORD; }\n"); + printf("int sqlite3_keyword_check(const char *zName, int nName){\n"); + printf(" return TK_ID!=sqlite3KeywordCode((const u8*)zName, nName);\n"); + printf("}\n"); + + return 0; +} diff --git a/parser/grammar_test.go b/parser/grammar_test.go new file mode 100644 index 0000000..3c392d0 --- /dev/null +++ b/parser/grammar_test.go @@ -0,0 +1,74 @@ +package parser_test + +import ( + "os" + "path/filepath" + "regexp" + "strings" + "testing" +) + +var ( + ruleHead = regexp.MustCompile(`(?m)^([a-z_][a-zA-Z0-9_]*)\s*(\([A-Z]\))?\s*::=`) + tokenClass = regexp.MustCompile(`(?m)^%token_class\s+([a-z_][a-zA-Z0-9_]*)`) + identifierRE = `\b%s\b` +) + +// TestEveryRuleIsNamed enforces the repository's rule that every nontrivial +// parse function carries a comment naming the parse.y production it +// implements — from the other direction, which is the one that catches +// something missing: no nonterminal of the grammar may go unmentioned. +// +// A nonterminal named nowhere in parser/ is either unimplemented or +// implemented without saying which rule it came from, and both are worth a +// failure. Advancing the pinned SQLite release surfaces a new production +// here. +func TestEveryRuleIsNamed(t *testing.T) { + grammar, err := os.ReadFile(filepath.Join("..", "internal", "reference", "parse.y")) + if err != nil { + t.Fatalf("%v (the vendored grammar is missing)", err) + } + var rules []string + for _, m := range ruleHead.FindAllStringSubmatch(string(grammar), -1) { + rules = append(rules, m[1]) + } + for _, m := range tokenClass.FindAllStringSubmatch(string(grammar), -1) { + rules = append(rules, m[1]) + } + if len(rules) < 100 { + t.Fatalf("only %d rules parsed out of parse.y; the format changed", len(rules)) + } + + src := parserSource(t) + seen := map[string]bool{} + for _, rule := range rules { + if seen[rule] { + continue + } + seen[rule] = true + if !regexp.MustCompile(`\b` + regexp.QuoteMeta(rule) + `\b`).MatchString(src) { + t.Errorf("parse.y rule %q is named nowhere in parser/", rule) + } + } +} + +// parserSource concatenates the parser's non-test sources. +func parserSource(t *testing.T) string { + t.Helper() + paths, err := filepath.Glob("*.go") + if err != nil { + t.Fatal(err) + } + var b strings.Builder + for _, path := range paths { + if strings.HasSuffix(path, "_test.go") { + continue + } + data, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + b.Write(data) + } + return b.String() +} diff --git a/parser/parse_ddl.go b/parser/parse_ddl.go index 389a6b4..c9b550e 100644 --- a/parser/parse_ddl.go +++ b/parser/parse_ddl.go @@ -85,7 +85,8 @@ func (p *parser) parseCreateTable(start int, temp bool) ast.Stmt { return n } -// parseColumnAndConstraintList implements "columnlist conslist_opt". +// parseColumnAndConstraintList implements "columnlist conslist_opt", and +// so also "conslist", "tconscomma" and the column half of "carglist". // // The two lists are told apart by their first token: a column definition // starts with a name, and none of CONSTRAINT, PRIMARY, UNIQUE, CHECK and diff --git a/token/keywords_test.go b/token/keywords_test.go new file mode 100644 index 0000000..2115677 --- /dev/null +++ b/token/keywords_test.go @@ -0,0 +1,119 @@ +package token + +import ( + "os" + "regexp" + "slices" + "strings" + "testing" +) + +// The keyword table and the %fallback set are transcriptions, and a +// transcription is only as good as its last proofread. These tests rebuild +// both from the vendored upstream sources in internal/reference and compare +// them with meyer's, so advancing the pinned SQLite release surfaces a +// keyword change as a failure rather than as a silent divergence. +// +// Both have to resolve the build's feature flags the same way the pinned +// oracle does; the flags are listed once here. + +// disabledMasks are the mkkeywordhash.c masks that evaluate to 0 in the +// pinned build, so keywords guarded by them are not compiled in. +var disabledMasks = []string{"ORDERSET"} // SQLITE_ENABLE_ORDERED_SET_AGGREGATES + +// disabledSections are the %ifdef/%ifndef guards in parse.y's %fallback +// block whose bodies the pinned build leaves out. +var disabledSections = []string{ + "%ifdef SQLITE_OMIT_COMPOUND_SELECT", + "%ifdef SQLITE_ENABLE_ORDERED_SET_AGGREGATES", +} + +func read(t *testing.T, name string) string { + t.Helper() + data, err := os.ReadFile("../internal/reference/" + name) + if err != nil { + t.Fatalf("%v (the vendored reference sources are missing)", err) + } + return string(data) +} + +var keywordEntry = regexp.MustCompile(`\{\s*"([A-Z_0-9]+)",\s*"TK_([A-Z_0-9]+)",\s*([A-Z|]+),`) + +func TestKeywordTableMatchesUpstream(t *testing.T) { + src := read(t, "mkkeywordhash.c") + table := src[strings.Index(src, "static Keyword aKeywordTable[] = {"):] + table = table[:strings.Index(table, "\n};")] + + want := map[string]string{} + for _, m := range keywordEntry.FindAllStringSubmatch(table, -1) { + name, tk, mask := m[1], m[2], m[3] + if slices.ContainsFunc(strings.Split(mask, "|"), func(p string) bool { + return slices.Contains(disabledMasks, p) + }) { + continue + } + want[name] = tk + } + if len(want) < 100 { + t.Fatalf("only %d keywords parsed out of mkkeywordhash.c; the format changed", len(want)) + } + for name, tk := range want { + k, ok := keywords[name] + if !ok { + t.Errorf("%s is a keyword upstream but not in meyer", name) + continue + } + // Kind.String reports the SQLite token name, minus the TK_ prefix. + if got := k.String(); got != tk { + t.Errorf("%s is TK_%s upstream, but meyer gives %s", name, tk, got) + } + } + for name := range keywords { + if _, ok := want[name]; !ok { + t.Errorf("%s is a keyword in meyer but not upstream", name) + } + } +} + +func TestFallbackSetMatchesUpstream(t *testing.T) { + src := read(t, "parse.y") + block := src[strings.Index(src, "%fallback ID"):] + block = block[:strings.Index(block, "\n .\n")] + + want := map[string]bool{} + skip := false + for _, line := range strings.Split(block, "\n") { + line = strings.TrimSpace(line) + switch { + case slices.Contains(disabledSections, line): + skip = true + case strings.HasPrefix(line, "%ifdef"), strings.HasPrefix(line, "%ifndef"), + strings.HasPrefix(line, "%endif"): + skip = false + case skip, strings.HasPrefix(line, "%fallback"), strings.HasPrefix(line, "//"): + default: + for _, name := range strings.Fields(line) { + want[name] = true + } + } + } + if len(want) < 50 { + t.Fatalf("only %d fallback tokens parsed out of parse.y; the format changed", len(want)) + } + // The block names token codes, not spellings: TK_LIKE_KW covers LIKE, + // GLOB and REGEXP. + got := map[string]bool{} + for k := range fallbackSet { + got[k.String()] = true + } + for name := range want { + if !got[name] { + t.Errorf("%s falls back to ID upstream but not in meyer", name) + } + } + for name := range got { + if !want[name] { + t.Errorf("%s falls back to ID in meyer but not upstream", name) + } + } +} From 0fed646068d49e8d3a25e8e82d4525fba3501127 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 21:39:07 +0000 Subject: [PATCH 19/23] Feed SQLite's own fuzz corpus to difftest, and stop at NUL like SQLite does PLAN.md lists test/fuzzdata*.db -- ~36k SQL strings that have broken a SQLite parser at some point -- as a robustness corpus to use as seeds rather than vendor. This wires them in: the oracle gains a -seeds mode that reads one database's xsql table and frames the rows the way -batch already expects, TestScripts unpacks the databases alongside the .test scripts, and difftest feeds each seed in as an input of its own as well as mutating it. That is 57k inputs and 259k checks per run. They found four things. A NUL byte ends a token, not just the token stream. SQLite's tokenizer walks a NUL-terminated buffer, so an unterminated "'" or "[" stops at an embedded NUL and is illegal there, and a "--" comment stops at one rather than at the next newline. meyer read to the end of the Go string instead. Routing every scan through cursor.at, which already stood in for the C terminator, fixes all of them at once and drops the bounds checks. A "PRAGMA hard_heap_limit" in an input set a process-global limit at prepare time and starved every later connection in the oracle: the batch run died with "cannot open :memory:" on a flat heap. The heap limits are now reset between records. The oracle's onlyWhitespace was a second, cruder tokenizer deciding whether a chunk held a statement, and it got the quirks wrong -- a lone vertical tab is CC_ILLEGAL rather than space, and a "/*" with nothing after the star is TK_SLASH TK_STAR rather than a comment. Both showed up as phantom disagreements. Deleted: prepare answers the question exactly, by returning a NULL statement. The corpus loses five phantom "ok" lines for bare ";" chunks. sqlite3_complete splits more crudely than the tokenizer, so it can hand prepare two statements at once; prepare parses the first and leaves the rest unexamined. "ok" lines now carry pzTail when that happens, so the harness knows the text was never verified. No corpus case is affected. Also: cache the oracle binary under a digest of its source, so editing oracle.c rebuilds it, and print difftest reproducers untrimmed and quoted -- a trimmed one hid the vertical tab that caused it. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- cmd/difftest/main.go | 21 +++++- internal/sqlitesrc/oracle/oracle.c | 115 ++++++++++++++++++++--------- internal/sqlitesrc/sqlitesrc.go | 70 +++++++++++++++++- internal/testfile/testfile.go | 31 ++++++-- lexer/lexer.go | 43 ++++++----- lexer/lexer_test.go | 28 +++++++ parser/testdata/README.md | 15 ++-- parser/testdata/alterlegacy.test | 1 - parser/testdata/altertab.test | 1 - parser/testdata/e_dropview.test | 1 - parser/testdata/fkey1.test | 1 - parser/testdata/triggerG.test | 1 - 12 files changed, 249 insertions(+), 79 deletions(-) diff --git a/cmd/difftest/main.go b/cmd/difftest/main.go index 024ad6d..178f784 100644 --- a/cmd/difftest/main.go +++ b/cmd/difftest/main.go @@ -72,6 +72,7 @@ func main() { jobs = flag.Int("j", runtime.NumCPU(), "oracle worker processes") examples = flag.Int("examples", 3, "reproducers to print per kind of disagreement") maxLen = flag.Int("maxlen", 4096, "skip corpus cases longer than this") + fuzzdata = flag.Bool("fuzzdata", true, "also use SQLite's test/fuzzdata*.db inputs") ) flag.Parse() @@ -88,12 +89,20 @@ func main() { } inputs = append(inputs, extra...) } - fmt.Printf("mutating %d corpus cases, %d mutations each\n", len(inputs), *per) // Build the oracle once, before the workers race for it. if _, err := sqlitesrc.Oracle(*cacheDir); err != nil { fatal(err) } + if *fuzzdata && *files == "" { + seeds, err := sqlitesrc.FuzzSeeds(*cacheDir) + if err != nil { + fatal(err) + } + fmt.Printf("%d inputs from SQLite's fuzzdata databases\n", len(seeds)) + inputs = append(inputs, seeds...) + } + fmt.Printf("checking %d inputs, %d mutations each\n", len(inputs), *per) rep := &report{examples: *examples, buckets: map[string]*bucket{}} work := make(chan string) @@ -109,6 +118,9 @@ func main() { defer r.Close() rng := rand.New(rand.NewSource(*seed + int64(w)*1e6)) for src := range work { + // The input itself matters, not just its mutations: the + // fuzzdata seeds are already adversarial. + check(r, src, rep) for _, m := range mutations(src, *per, rng) { check(r, m, rep) // Further edits reach shapes one cannot: two unbalanced @@ -319,8 +331,11 @@ func (r *report) add(kind, sql, got, want string) { } b.n++ if len(b.shown) < r.examples { - b.shown = append(b.shown, fmt.Sprintf(" sql: %q\n meyer: %s\n sqlite: %s", - strings.TrimSpace(sql), got, want)) + // Quoted, and not trimmed: a reproducer often turns on a byte that + // prints as nothing, and one that begins or ends in whitespace is + // the interesting case, not the noisy one. + b.shown = append(b.shown, fmt.Sprintf(" sql: %q\n meyer: %q\n sqlite: %q", + sql, got, want)) } } diff --git a/internal/sqlitesrc/oracle/oracle.c b/internal/sqlitesrc/oracle/oracle.c index c9799c5..5013cc3 100644 --- a/internal/sqlitesrc/oracle/oracle.c +++ b/internal/sqlitesrc/oracle/oracle.c @@ -11,6 +11,7 @@ ** Output: one line per non-empty statement: ** ** stmt ok +** stmt ok ** stmt err ** ** byte offset of the statement within the input script @@ -18,13 +19,20 @@ ** sqlite3_error_offset relative to the whole script (-1 if unknown) ** pzTail relative to the whole script: how far the parser got ** -** matters because a grammar action can fail in the middle of a -** statement -- sqlite3BeginTrigger raising "no such table" at the -** trigger_decl reduce, say -- and sqlite3RunParser then abandons the rest -** of the statement unparsed. When that happens stops short of the -** end of the statement, marking the text SQLite never looked at. A -** successful prepare always consumes the whole statement, so "ok" lines -** carry no . +** matters because SQLite can stop short of the end of a statement, +** in which case the text past it was never parsed and the line says nothing +** about it. Two ways in: +** +** - a grammar action fails in the middle -- sqlite3BeginTrigger raising +** "no such table" at the trigger_decl reduce, say -- and +** sqlite3RunParser abandons the rest of the statement; +** +** - the split above handed prepare more than one statement, because +** sqlite3_complete's scanner is cruder than the tokenizer and missed +** the boundary. prepare then parses the first and leaves the rest. +** +** The second is why "ok" lines can carry a too. Most do not: a +** prepare that consumed everything it was given omits the field. ** ** SQLite error messages never contain newlines, so the line format is safe. ** (An error message can still span lines when the offending token does -- @@ -41,7 +49,8 @@ ** so a "PRAGMA writable_schema=ON" in one script would otherwise decide ** whether a later one may write to sqlite_master. Reusing the connection ** also perturbs sqlite3_error_offset. Opening :memory: is cheap next to -** starting a process, which is the cost this mode exists to avoid. +** starting a process, which is the cost this mode exists to avoid. A new +** connection is not enough on its own -- see resetGlobals. */ #include "sqlite3.h" #include @@ -68,27 +77,6 @@ static char *readAll(FILE *in, size_t *pn){ return buf; } -/* True if the range [z, z+n) holds nothing but whitespace and SQL comments — -** i.e. preparing it would yield no statement. */ -static int onlyWhitespace(const char *z, size_t n){ - size_t i = 0; - while( i=len ){ + printf("stmt %zu ok\n", pos); + }else{ + printf("stmt %zu ok %zu\n", pos, pos+tail); + } }else{ int erroff = sqlite3_error_offset(db); size_t tail = zTail ? (size_t)(zTail-stmtText) : len; @@ -134,9 +133,56 @@ static void runScript(sqlite3 *db, char *sql, size_t n){ } } +/* Undo the process-global state a prepared PRAGMA can leave behind. +** +** Most pragmas only touch their own connection, but the two heap limits are +** process-wide, and sqlite3Pragma applies them while preparing. One +** "PRAGMA hard_heap_limit=6874" in an input therefore starves every later +** connection in the process: sqlite3_open starts returning SQLITE_NOMEM +** with a flat heap. SQLite's own fuzz corpus contains exactly that, and it +** took out the whole batch run. 0 means "no limit". */ +static void resetGlobals(void){ + sqlite3_hard_heap_limit64(0); + sqlite3_soft_heap_limit64(0); +} + +/* Write the fuzz inputs held in zPath's "xsql" table to stdout, framed the +** way -batch expects them. Used to seed differential testing with SQLite's +** own historical parser crashers. */ +static int dumpSeeds(const char *zPath){ + sqlite3 *db = 0; + sqlite3_stmt *pStmt = 0; + int rc = sqlite3_open_v2(zPath, &db, SQLITE_OPEN_READONLY, 0); + if( rc!=SQLITE_OK ){ + fprintf(stderr, "cannot open %s: %s\n", zPath, sqlite3_errmsg(db)); + sqlite3_close(db); + return 2; + } + rc = sqlite3_prepare_v2(db, "SELECT sqltext FROM xsql", -1, &pStmt, 0); + if( rc!=SQLITE_OK ){ + fprintf(stderr, "%s: %s\n", zPath, sqlite3_errmsg(db)); + sqlite3_close(db); + return 2; + } + while( sqlite3_step(pStmt)==SQLITE_ROW ){ + const void *pText = sqlite3_column_blob(pStmt, 0); + int n = sqlite3_column_bytes(pStmt, 0); + if( pText==0 ) continue; + printf("%d\n", n); + fwrite(pText, 1, (size_t)n, stdout); + } + sqlite3_finalize(pStmt); + sqlite3_close(db); + return 0; +} + int main(int argc, char **argv){ sqlite3 *db = 0; + if( argc>2 && strcmp(argv[1], "-seeds")==0 ){ + return dumpSeeds(argv[2]); + } + if( argc>1 && strcmp(argv[1], "-batch")==0 ){ char line[64]; while( fgets(line, sizeof(line), stdin) ){ @@ -154,6 +200,7 @@ int main(int argc, char **argv){ return 2; } runScript(db, sql, (size_t)want); + resetGlobals(); sqlite3_close(db); printf("==\n"); fflush(stdout); diff --git a/internal/sqlitesrc/sqlitesrc.go b/internal/sqlitesrc/sqlitesrc.go index 2811e2f..0474566 100644 --- a/internal/sqlitesrc/sqlitesrc.go +++ b/internal/sqlitesrc/sqlitesrc.go @@ -10,6 +10,7 @@ package sqlitesrc import ( "archive/zip" "bufio" + "bytes" "crypto/sha256" "fmt" "io" @@ -17,6 +18,7 @@ import ( "os" "os/exec" "path/filepath" + "strconv" "strings" _ "embed" @@ -42,7 +44,11 @@ const ( // Oracle returns the path to the compiled oracle binary, downloading the // pinned amalgamation and building it on first use. func Oracle(cacheDir string) (string, error) { - oracle := filepath.Join(cacheDir, "oracle-"+Version) + // The name carries a digest of oracle.c as well as the SQLite version, + // so editing the oracle rebuilds it instead of silently reusing the + // binary built from the previous source. + sum := sha256.Sum256(oracleSource) + oracle := filepath.Join(cacheDir, fmt.Sprintf("oracle-%s-%x", Version, sum[:4])) if _, err := os.Stat(oracle); err == nil { return oracle, nil } @@ -78,7 +84,7 @@ func Oracle(cacheDir string) (string, error) { // test/*.test scripts, downloading and unpacking them on first use. func TestScripts(cacheDir string) (string, error) { testDir := filepath.Join(cacheDir, "sqlite-src-"+Version, "test") - if _, err := os.Stat(filepath.Join(testDir, "select1.test")); err == nil { + if _, err := os.Stat(filepath.Join(testDir, "fuzzdata1.db")); err == nil { return testDir, nil } zipPath, err := download(cacheDir, "sqlite-src-"+Version+".zip", srcSHA) @@ -86,7 +92,12 @@ func TestScripts(cacheDir string) (string, error) { return "", err } only := func(name string) bool { - return strings.Contains(name, "/test/") && strings.HasSuffix(name, ".test") + if !strings.Contains(name, "/test/") { + return false + } + // The fuzzdata databases come along for FuzzSeeds. + return strings.HasSuffix(name, ".test") || + (strings.Contains(name, "/fuzzdata") && strings.HasSuffix(name, ".db")) } if err := unzip(zipPath, cacheDir, only); err != nil { return "", err @@ -164,6 +175,59 @@ func unzip(zipPath, destDir string, keep func(string) bool) error { return nil } +// FuzzSeeds returns the SQL fuzz inputs SQLite ships in test/fuzzdata*.db: +// tens of thousands of strings that have broken a SQLite parser at some +// point. PLAN.md wants them as fuzz seeds rather than vendored, so they are +// read out through the oracle on demand. They are a very different input +// distribution from anything a mutation of valid SQL produces. +func FuzzSeeds(cacheDir string) ([]string, error) { + oracle, err := Oracle(cacheDir) + if err != nil { + return nil, err + } + testDir, err := TestScripts(cacheDir) + if err != nil { + return nil, err + } + paths, err := filepath.Glob(filepath.Join(testDir, "fuzzdata*.db")) + if err != nil { + return nil, err + } + var out []string + for _, path := range paths { + cmd := exec.Command(oracle, "-seeds", path) + cmd.Stderr = os.Stderr + stdout, err := cmd.Output() + if err != nil { + return nil, fmt.Errorf("oracle -seeds %s: %w", path, err) + } + seeds, err := parseRecords(stdout) + if err != nil { + return nil, fmt.Errorf("%s: %w", path, err) + } + out = append(out, seeds...) + } + return out, nil +} + +// parseRecords splits the length-prefixed stream the oracle writes. +func parseRecords(data []byte) ([]string, error) { + var out []string + for len(data) > 0 { + nl := bytes.IndexByte(data, '\n') + if nl < 0 { + return nil, fmt.Errorf("truncated record header") + } + n, err := strconv.Atoi(string(data[:nl])) + if err != nil || n < 0 || nl+1+n > len(data) { + return nil, fmt.Errorf("bad record header %q", data[:nl]) + } + out = append(out, string(data[nl+1:nl+1+n])) + data = data[nl+1+n:] + } + return out, nil +} + // Runner drives one long-lived oracle process in batch mode. Starting a // process per script costs more than classifying one, which matters when a // caller checks tens of thousands of small inputs; a Runner amortises it diff --git a/internal/testfile/testfile.go b/internal/testfile/testfile.go index bc9f44d..60bf89e 100644 --- a/internal/testfile/testfile.go +++ b/internal/testfile/testfile.go @@ -42,8 +42,13 @@ type StmtResult struct { OK bool // sqlite3_prepare_v2 returned SQLITE_OK RC int // prepare result code when !OK ErrOffset int // sqlite3_error_offset within the case SQL; -1 if unknown - Tail int // pzTail within the case SQL: how far the parser got Message string // sqlite3_errmsg when !OK + + // Tail is pzTail within the case SQL: how far the parser got. On an OK + // result 0 is the common case and means "all of it" -- a successful + // prepare always consumes at least one statement, so a recorded tail is + // never 0. + Tail int } // Case is a single corpus entry. @@ -126,10 +131,7 @@ func IsSyntaxError(msg string) bool { func (c *Case) Expected() Expectation { var unreached []Range for i, r := range c.Results { - if r.OK { - continue - } - if IsSyntaxError(r.Message) { + if !r.OK && IsSyntaxError(r.Message) { // Ranges collected from earlier statements still apply: a // parser that trips over unverified text never reaches this. return Expectation{ @@ -137,8 +139,12 @@ func (c *Case) Expected() Expectation { Unreached: unreached, } } - // A semantic failure means the statement parsed -- but only as far - // as the parser had got when the grammar action raised it. A + if r.OK && r.Tail == 0 { + continue // prepare consumed everything it was given + } + // The statement parsed, but only as far as pzTail: a semantic + // failure stops where the grammar action raised it, and a + // successful prepare stops at the first statement it was handed. A // statement runs to the start of the next one, or to the end of the // case for the last. end := len(c.SQL) @@ -233,6 +239,13 @@ func ParseResultLine(line string) (StmtResult, error) { if parts[1] == "ok" { return StmtResult{Offset: off, OK: true}, nil } + if tail, found := strings.CutPrefix(parts[1], "ok "); found { + n, err := strconv.Atoi(tail) + if err != nil { + return StmtResult{}, fmt.Errorf("malformed tail in %q", line) + } + return StmtResult{Offset: off, OK: true, Tail: n}, nil + } fields := strings.SplitN(strings.TrimPrefix(parts[1], "err "), " ", 4) if !strings.HasPrefix(parts[1], "err ") || len(fields) != 4 { return StmtResult{}, fmt.Errorf("malformed result line %q", line) @@ -263,8 +276,10 @@ func Write(path string, cases []Case) error { b.WriteString(resultMarker) b.WriteString("\n") for _, r := range c.Results { - if r.OK { + if r.OK && r.Tail == 0 { fmt.Fprintf(&b, "stmt %d ok\n", r.Offset) + } else if r.OK { + fmt.Fprintf(&b, "stmt %d ok %d\n", r.Offset, r.Tail) } else { fmt.Fprintf(&b, "stmt %d err %d %d %d %s\n", r.Offset, r.RC, r.ErrOffset, r.Tail, r.Message) diff --git a/lexer/lexer.go b/lexer/lexer.go index 4cdffe5..f1223be 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -99,6 +99,11 @@ type cursor struct { // at returns z[off] relative to the token start, or 0 past the end, standing // in for the terminator a C string would have. +// +// Every scan reads through it, so an embedded NUL byte ends a token exactly +// where the end of the input would: an unterminated "'" or "[" stops there +// and is TK_ILLEGAL, and a "--" comment stops there rather than at the next +// newline. SQLite cannot tell the two apart, and neither may meyer. func (c cursor) at(off int) byte { if c.i+off < len(c.src) { return c.src[c.i+off] @@ -118,7 +123,7 @@ func scan(src string, i int) (token.Kind, int) { case isSpaceStart(c): // CC_SPACE n := 1 - for i+n < len(src) && isSpace(src[i+n]) { + for isSpace(z.at(n)) { n++ } return token.SPACE, n @@ -126,7 +131,7 @@ func scan(src string, i int) (token.Kind, int) { case c == '-': // CC_MINUS if z.at(1) == '-' { n := 2 - for i+n < len(src) && src[i+n] != '\n' { + for c := z.at(n); c != 0 && c != '\n'; c = z.at(n) { n++ } return token.COMMENT, n @@ -158,14 +163,13 @@ func scan(src string, i int) (token.Kind, int) { // not an error; tokenize.test relies on this. n := 3 prev := z.at(2) - for ; i+n < len(src); n++ { - if prev == '*' && src[i+n] == '/' { - n++ - break + for !(prev == '*' && z.at(n) == '/') { + if prev = z.at(n); prev == 0 { + return token.COMMENT, n } - prev = src[i+n] + n++ } - return token.COMMENT, n + return token.COMMENT, n + 1 case c == '%': return token.REM, 1 @@ -219,18 +223,17 @@ func scan(src string, i int) (token.Kind, int) { delim := c n := 1 var last byte - for ; i+n < len(src); n++ { - last = src[i+n] + for { + if last = z.at(n); last == 0 { + break + } if last == delim { - if z.at(n+1) == delim { - n++ - continue + if z.at(n+1) != delim { + break } - break + n++ // a doubled delimiter is an escaped one } - } - if i+n >= len(src) { - last = 0 + n++ } switch { case last == '\'': @@ -252,8 +255,8 @@ func scan(src string, i int) (token.Kind, int) { case c == '[': // CC_QUOTE2 n := 1 - for ; i+n < len(src); n++ { - if src[i+n] == ']' { + for ; z.at(n) != 0; n++ { + if z.at(n) == ']' { return token.ID, n + 1 } } @@ -261,7 +264,7 @@ func scan(src string, i int) (token.Kind, int) { case c == '?': // CC_VARNUM n := 1 - for i+n < len(src) && isDigit(src[i+n]) { + for isDigit(z.at(n)) { n++ } return token.VARIABLE, n diff --git a/lexer/lexer_test.go b/lexer/lexer_test.go index 6df671c..af2959d 100644 --- a/lexer/lexer_test.go +++ b/lexer/lexer_test.go @@ -312,6 +312,34 @@ func TestNulTerminatesInput(t *testing.T) { } } +// A NUL ends whatever token is being scanned, not just the token stream. +// SQLite cannot see past it, so an unterminated quote stops there and is +// illegal rather than running to the end of the Go string, and a "--" +// comment stops there rather than at the newline after it. +func TestNulTerminatesToken(t *testing.T) { + for _, tt := range []struct { + src string + want []token.Kind + }{ + {"[a\x00b]", []token.Kind{token.ILLEGAL}}, + {"'a\x00b'", []token.Kind{token.ILLEGAL}}, + {"\"a\x00b\"", []token.Kind{token.ILLEGAL}}, + {"--x\x00\n1", nil}, + {"/*x\x00*/ 1", nil}, + {"1 /*\x00", []token.Kind{token.INTEGER, token.SLASH, token.STAR}}, + } { + var got []token.Kind + for _, tok := range Lex(tt.src) { + if tok.Kind != token.EOF { + got = append(got, tok.Kind) + } + } + if !slices.Equal(got, tt.want) { + t.Errorf("Lex(%q) = %v, want %v", tt.src, got, tt.want) + } + } +} + func TestLexNeverLoops(t *testing.T) { // Every byte value must produce progress, on its own and after a name. for b := 0; b < 256; b++ { diff --git a/parser/testdata/README.md b/parser/testdata/README.md index 83e5c93..827e87c 100644 --- a/parser/testdata/README.md +++ b/parser/testdata/README.md @@ -20,12 +20,15 @@ own goldens; they never outrank the accept/reject corpus below. - **Source of the expectations**: a real SQLite build. Every statement of every case is prepared independently with `sqlite3_prepare_v2` against an empty in-memory database (nothing is executed) using the oracle program in - `cmd/regenerate-parse/oracle.c`, compiled against the pinned amalgamation. - The raw per-statement outcomes (OK, or result code + error offset + - `pzTail` + exact error message) are stored in the corpus files. `pzTail` - records how far SQLite's parser got: a grammar action can fail part-way - through a statement and leave the rest of it unparsed, and the harness - needs to know which text was never verified. + `internal/sqlitesrc/oracle/oracle.c`, compiled against the pinned + amalgamation. The raw per-statement outcomes (OK, or result code + error + offset + exact error message, either way with `pzTail`) are stored in the + corpus files. `pzTail` records how far SQLite's parser got, and the + harness needs it to know which text was never verified: a grammar action + can fail part-way through a statement and leave the rest of it unparsed, + and a statement that prepared fine may still have had text after it that + `sqlite3_complete` failed to split off. A `pzTail` that reached the end of + the statement is left out of the file, which is the usual case. ## Pinned SQLite release diff --git a/parser/testdata/alterlegacy.test b/parser/testdata/alterlegacy.test index b8fe9c2..85d6c03 100644 --- a/parser/testdata/alterlegacy.test +++ b/parser/testdata/alterlegacy.test @@ -113,7 +113,6 @@ stmt 0 err 1 -1 21 no such table: uuu SELECT sql FROM sqlite_master WHERE name='uuu';; ---- stmt 0 ok -stmt 50 ok ==== 3.3.1 SELECT * FROM ttt; diff --git a/parser/testdata/altertab.test b/parser/testdata/altertab.test index 5ce5fc1..26776f6 100644 --- a/parser/testdata/altertab.test +++ b/parser/testdata/altertab.test @@ -105,7 +105,6 @@ stmt 0 err 1 -1 21 no such table: uuu SELECT sql FROM sqlite_master WHERE name='uuu';; ---- stmt 0 ok -stmt 50 ok ==== 3.3.1 SELECT * FROM ttt; diff --git a/parser/testdata/e_dropview.test b/parser/testdata/e_dropview.test index c72d927..ce61201 100644 --- a/parser/testdata/e_dropview.test +++ b/parser/testdata/e_dropview.test @@ -9,7 +9,6 @@ stmt 60 err 1 -1 88 no such table: new view ; SELECT * FROM sqlite_master WHERE name = 'new view'; ---- -stmt 0 ok stmt 1 ok ==== 2.3 diff --git a/parser/testdata/fkey1.test b/parser/testdata/fkey1.test index 2fd7511..bd664b7 100644 --- a/parser/testdata/fkey1.test +++ b/parser/testdata/fkey1.test @@ -236,7 +236,6 @@ stmt 29 ok stmt 57 ok stmt 156 ok stmt 186 ok -stmt 228 ok stmt 229 ok stmt 299 err 1 -1 323 no such table: sqlsim4 ==== 8.2 diff --git a/parser/testdata/triggerG.test b/parser/testdata/triggerG.test index cf7f1ce..378d126 100644 --- a/parser/testdata/triggerG.test +++ b/parser/testdata/triggerG.test @@ -25,7 +25,6 @@ stmt 155 ok stmt 177 err 1 -1 225 no such table: main.t3 stmt 352 err 1 -1 383 no such table: t3 stmt 383 err 1 -1 414 no such table: t3 -stmt 414 ok ==== 110 SELECT b FROM t2 ORDER BY b; From 8759befcbd9b9ba80fcfab4446565d82d1898654 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 21:41:47 +0000 Subject: [PATCH 20/23] Bring PLAN.md's layout and hardening milestone up to date The tree predates internal/roundtrip, internal/sqlitesrc, cmd/difftest and half the parser's test files, and still calls the generator cmd/regenerate. Milestone 7 and the robustness-corpus bullet now say where the fuzzdata seeds actually went and why: an oracle beats "does not panic". Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- PLAN.md | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/PLAN.md b/PLAN.md index 8fa6f0b..e9863fb 100644 --- a/PLAN.md +++ b/PLAN.md @@ -173,9 +173,11 @@ domain): - **Negative subset**: the ~160 `catchsql` assertions whose expected message contains `syntax error` / `unrecognized token` — precise must-reject cases with expected messages. -- **Robustness corpus**: `test/fuzzdata{1,2,4,5,6,8}.db` contain ~36k SQL - text fuzz inputs (`xsql` tables) — no oracle, invariant is "terminate - without panic". Used as fuzz seeds, not vendored wholesale. +- **Robustness corpus**: `test/fuzzdata{1..8}.db` contain ~36k SQL text fuzz + inputs (`xsql` tables). Used as seeds, not vendored wholesale. *(Read out + on demand by `sqlitesrc.FuzzSeeds` and fed to `cmd/difftest`, which does + have an oracle for them: the invariant is the full differential one, not + merely "terminate without panic".)* - **sqllogictest** (~millions of statements, license: "no attribution required") — bulk smoke corpus; low grammar diversity. Optional, behind an env-var-gated test, not vendored. @@ -342,20 +344,32 @@ meyer/ │ ├── parse_trigger.go # trigger decl + restricted body │ ├── parse_misc.go # txn, pragma, attach, vacuum, analyze, … │ ├── parser_test.go # corpus harness (+ -check-parse) -│ ├── fuzz_test.go # never-panic, fuzzdata seeds +│ ├── fuzz_test.go # never-panic, round-trip under arbitrary bytes +│ ├── roundtrip_test.go # render → re-parse over the whole corpus +│ ├── span_test.go # byte-offset invariants sqlc slices with +│ ├── snapshot_test.go # AST goldens for testdata/ast/*.sql +│ ├── errors_test.go # message/offset fidelity +│ ├── grammar_test.go # every parse.y nonterminal is named somewhere │ ├── bench_test.go │ └── testdata/ │ ├── README.md # provenance + pinned SQLite version/hash +│ ├── ast/ # hand-written tour of the node set + goldens │ ├── *.test # consolidated corpus (== / -- format) │ └── *.metadata.json # todo/skip sidecars ├── internal/ │ ├── dump/ # AST snapshot renderer +│ ├── roundtrip/ # the round-trip property, stated once +│ ├── sqlitesrc/ # pinned release: download, oracle, runner +│ │ └── oracle/oracle.c # the C oracle (prepare-only classifier) +│ ├── tclextract/ # TCL brace scanner for the test scripts │ ├── testfile/ # corpus file format reader/writer -│ └── reference/parse.y # vendored grammar (documentation only) +│ └── reference/ # vendored parse.y, tokenize.c, +│ # mkkeywordhash.c (checked by tests) └── cmd/ ├── next-test/ # pick next todo case ├── debug-parse/ # parse argv SQL, dump tree or error - └── regenerate/ # extract TCL corpus + run SQLite oracle + ├── difftest/ # mutation differential testing vs the oracle + └── regenerate-parse/ # extract TCL corpus + run SQLite oracle ``` ## Milestones @@ -381,7 +395,13 @@ meyer/ EXPLAIN [QUERY PLAN]. 7. **Hardening** — error-message/offset fidelity pass over the negative corpus, fuzzing with fuzzdata seeds, benchmarks, race-clean parallel - corpus run, optional sqllogictest smoke gate. + corpus run, optional sqllogictest smoke gate. *(Done except the + sqllogictest gate. The fuzzdata seeds went to `cmd/difftest` rather than + to `FuzzParse`: an oracle that says whether SQLite accepts an input is a + far stronger check on them than "does not panic", and mutating them + turns 36k inputs into over a million. The corpus harness carries the + round trip, the spans and the offsets, so those are checked on every + run rather than in a pass.)* 8. **sqlc integration** (in the sqlc repo, separate effort) — new `internal/engine/sqlite/parse.go` calling meyer (mirroring the zetajones/googlesql pattern), rewritten `convert.go` (meyer AST → From 6484e8ff80c6ffa52a4b7aaa223d9b280d17ad12 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 21:44:01 +0000 Subject: [PATCH 21/23] Record the fuzzdata seeds in the README, and the sqllogictest decision The one remaining item of milestone 7 is not being built, so PLAN.md should say why rather than leave it looking pending: everything the tests download is pinned by SHA-256, and sqllogictest has no stable release artifact to pin. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- .github/workflows/difftest.yml | 5 +++-- PLAN.md | 6 +++++- README.md | 6 ++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/workflows/difftest.yml b/.github/workflows/difftest.yml index 59d8531..ee5e3bc 100644 --- a/.github/workflows/difftest.yml +++ b/.github/workflows/difftest.yml @@ -3,8 +3,9 @@ # This is separate from CI because it downloads the pinned SQLite release # and compiles it, which the ordinary test run must not depend on. It is the # only thing that exercises error fidelity at scale: the vendored corpus is -# almost all valid SQL, so mutating it is how divergent messages and offsets -# get found. +# almost all valid SQL, so mutating it -- and mutating the ~36k inputs of +# SQLite's own fuzzdata databases, which are the opposite -- is how +# divergent messages and offsets get found. name: difftest on: diff --git a/PLAN.md b/PLAN.md index e9863fb..ffa6eea 100644 --- a/PLAN.md +++ b/PLAN.md @@ -180,7 +180,11 @@ domain): merely "terminate without panic".)* - **sqllogictest** (~millions of statements, license: "no attribution required") — bulk smoke corpus; low grammar diversity. Optional, behind an - env-var-gated test, not vendored. + env-var-gated test, not vendored. *(Not built. Everything else the tests + download is pinned by SHA-256; sqllogictest is distributed as a Fossil + checkout with no stable release artifact to pin, and what it would add is + volume of ordinary SELECTs — the axis `cmd/difftest` is already furthest + along. Worth revisiting only if a pinnable mirror appears.)* Tooling (`cmd/regenerate`): diff --git a/README.md b/README.md index 7bddc92..80c3f59 100644 --- a/README.md +++ b/README.md @@ -63,8 +63,10 @@ so conformance is defined three ways, in decreasing order of authority: Plus two searches for cases the corpus does not contain: a fuzz target asserting that arbitrary bytes terminate without panicking, that a rejection is always a `*parser.Error`, and that anything accepted survives the round -trip; and `cmd/difftest`, which mutates corpus SQL one token at a time and -checks meyer against a live SQLite build, message and byte offset included. +trip; and `cmd/difftest`, which checks meyer against a live SQLite build, +message and byte offset included, over corpus SQL and the ~36k inputs of +SQLite's own `fuzzdata` databases — each one directly and then mutated a +token at a time. ## Acknowledgments From 8ec90f82c536d6403ebebcf8d0ce35be68f9b531 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 21:45:07 +0000 Subject: [PATCH 22/23] Give the weekly difftest a fresh seed and a bigger budget A fixed seed makes a weekly job re-check the same mutations forever, so it defaults to the run id now. And the budget was set before the run was measured: 3M checks take a minute and a half on four cores, so -per 60 -depth 3 is a few minutes for roughly 17M. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- .github/workflows/difftest.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/workflows/difftest.yml b/.github/workflows/difftest.yml index ee5e3bc..1df295a 100644 --- a/.github/workflows/difftest.yml +++ b/.github/workflows/difftest.yml @@ -14,11 +14,11 @@ on: workflow_dispatch: inputs: seed: - description: "PRNG seed" - default: "1" + description: "PRNG seed (default: the run id, so each run is new ground)" + default: "" per: - description: "mutations per corpus case" - default: "20" + description: "mutations per input" + default: "60" jobs: difftest: @@ -33,8 +33,12 @@ jobs: with: path: .sqlite key: sqlite-${{ hashFiles('internal/sqlitesrc/sqlitesrc.go', 'internal/sqlitesrc/oracle/oracle.c') }} + # The seed defaults to the run id rather than to a constant: a weekly + # job with a fixed seed re-checks the same mutations forever. Roughly + # 17M checks, a few minutes on a four-core runner -- the oracle runs + # as a pool of batch-mode processes, so the cost is nearly all meyer. - run: > go run ./cmd/difftest - -per ${{ github.event.inputs.per || '20' }} - -depth 2 - -seed ${{ github.event.inputs.seed || '1' }} + -per ${{ github.event.inputs.per || '60' }} + -depth 3 + -seed ${{ github.event.inputs.seed || github.run_id }} From b187b20bb35e8f05d986d0ab143e1356dd67c164 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 21:48:34 +0000 Subject: [PATCH 23/23] Document the oracle's -seeds mode where the other modes are documented Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JzBeCg7rjweVW3uGPg5G7T --- internal/sqlitesrc/oracle/oracle.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/internal/sqlitesrc/oracle/oracle.c b/internal/sqlitesrc/oracle/oracle.c index 5013cc3..613627b 100644 --- a/internal/sqlitesrc/oracle/oracle.c +++ b/internal/sqlitesrc/oracle/oracle.c @@ -51,6 +51,12 @@ ** also perturbs sqlite3_error_offset. Opening :memory: is cheap next to ** starting a process, which is the cost this mode exists to avoid. A new ** connection is not enough on its own -- see resetGlobals. +** +** With -seeds , nothing is classified: the SQL strings in the +** database's "xsql" table are written to stdout in the same framing -batch +** reads, so difftest can feed SQLite's own fuzz corpus back through it. +** This is the one mode that executes anything, and it executes only that +** one SELECT, against a read-only connection. */ #include "sqlite3.h" #include